Compare commits
	
		
			29 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 2dcbca2362 | |||
| bd63194f4b | |||
| 2763fdef5f | |||
| bbedde01b9 | |||
| f26606f757 | |||
| 99b03aa796 | |||
| f30dd3da65 | |||
| d4decddb4b | |||
| 5c2880da1a | |||
| bfffc5b130 | |||
| 8900a13c6b | |||
| d42acf737f | |||
| 77e3b2912d | |||
| 103e470eb4 | |||
| 74c1324e55 | |||
| a1876963a8 | |||
| 5d88e25c99 | |||
| b3c47546e2 | |||
| 6316e81958 | |||
| ff10afbee4 | |||
| 9dbfa77084 | |||
| 46dbd61d89 | |||
| 713df1867a | |||
| 23886c1ed3 | |||
| 0c46b627be | |||
| 622ccd8dd9 | |||
| 0079addfc5 | |||
| 8604c63d37 | |||
| db0b38bd7b | 
| @@ -37,18 +37,6 @@ snyk: | ||||
| # ==================== | ||||
| # test stage | ||||
| # ==================== | ||||
| testLEGACY: | ||||
|   stage: test | ||||
|   script: | ||||
|   - npmci npm prepare | ||||
|   - npmci node install legacy | ||||
|   - npmci npm install | ||||
|   - npmci npm test | ||||
|   coverage: /\d+.?\d+?\%\s*coverage/ | ||||
|   tags: | ||||
|   - docker | ||||
|   - notpriv | ||||
|   allow_failure: true | ||||
|  | ||||
| testLTS: | ||||
|   stage: test | ||||
| @@ -135,13 +123,3 @@ pages: | ||||
|     paths: | ||||
|     - public | ||||
|   allow_failure: true | ||||
|  | ||||
| windowsCompatibility: | ||||
|   image: stefanscherer/node-windows:10-build-tools | ||||
|   stage: metadata | ||||
|   script: | ||||
|   - npm install & npm test | ||||
|   coverage: /\d+.?\d+?\%\s*coverage/ | ||||
|   tags: | ||||
|   - windows | ||||
|   allow_failure: true | ||||
|   | ||||
							
								
								
									
										28
									
								
								.snyk
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								.snyk
									
									
									
									
									
								
							| @@ -1,28 +1,4 @@ | ||||
| # Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities. | ||||
| version: v1.12.0 | ||||
| # ignores vulnerabilities until expiry date; change duration by modifying expiry date | ||||
| ignore: | ||||
|   'npm:shelljs:20140723': | ||||
|     - shelljs: | ||||
|         reason: None given | ||||
|         expires: '2018-06-02T22:48:10.660Z' | ||||
|     - smartshell > shelljs: | ||||
|         reason: None given | ||||
|         expires: '2018-06-02T22:48:10.660Z' | ||||
|     - smartssh > shelljs: | ||||
|         reason: None given | ||||
|         expires: '2018-06-02T22:48:10.660Z' | ||||
|     - smartshell > shelljs: | ||||
|         reason: None given | ||||
|         expires: '2018-08-14T21:49:25.248Z' | ||||
|     - smartssh > shelljs: | ||||
|         reason: None given | ||||
|         expires: '2018-08-14T21:49:25.248Z' | ||||
|     - shelljs: | ||||
|         reason: None given | ||||
|         expires: '2018-08-14T21:49:25.248Z' | ||||
|   'npm:stringstream:20180511': | ||||
|     - request > stringstream: | ||||
|         reason: None given | ||||
|         expires: '2018-08-14T21:49:25.248Z' | ||||
| version: v1.13.1 | ||||
| ignore: {} | ||||
| patch: {} | ||||
|   | ||||
							
								
								
									
										3
									
								
								cli.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								cli.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| #!/usr/bin/env node | ||||
| process.env.CLI_CALL = 'true'; | ||||
| require('./dist/index'); | ||||
							
								
								
									
										4
									
								
								cli.ts.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								cli.ts.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| #!/usr/bin/env node | ||||
| process.env.CLI_CALL = 'true'; | ||||
| require('@gitzone/tsrun'); | ||||
| require('./ts/index'); | ||||
| @@ -5,10 +5,9 @@ | ||||
|         "cli": true | ||||
|     }, | ||||
|     "npmci": { | ||||
|         "npmGlobalTools": [ | ||||
|             "@gitzone/npmts" | ||||
|         ], | ||||
|         "npmAccessLevel": "public" | ||||
|         "npmGlobalTools": [], | ||||
|         "npmAccessLevel": "public", | ||||
|         "npmRegistryUrl": "registry.npmjs.org" | ||||
|     }, | ||||
|     "npmdocker":{ | ||||
|         "baseImage":"hosttoday/ht-docker-node:npmci", | ||||
|   | ||||
							
								
								
									
										534
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										534
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|   "name": "@shipzone/npmci", | ||||
|   "version": "3.0.58", | ||||
|   "version": "3.1.13", | ||||
|   "lockfileVersion": 1, | ||||
|   "requires": true, | ||||
|   "dependencies": { | ||||
| @@ -28,9 +28,9 @@ | ||||
|       } | ||||
|     }, | ||||
|     "@gitzone/tsrun": { | ||||
|       "version": "1.1.12", | ||||
|       "resolved": "https://registry.npmjs.org/@gitzone/tsrun/-/tsrun-1.1.12.tgz", | ||||
|       "integrity": "sha512-DOxqOg+evoxhgbzhzH4u6LaPF+6bpMsnBVl1QQaHzKPGBlNjaIY4yJ0RsGnWMgX1hlNLvbgHtl0Ky4A2MDvyrg==", | ||||
|       "version": "1.1.13", | ||||
|       "resolved": "https://registry.npmjs.org/@gitzone/tsrun/-/tsrun-1.1.13.tgz", | ||||
|       "integrity": "sha512-yJLXfqu33zGc1hBX4HGxzlBvb5DU2zs80MUd8UsULJvkgOBofb3XR7eyV7iZfP097sd+ABj17yoeqJcRRjOZTg==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "@gitzone/tsbuild": "^2.0.22", | ||||
| @@ -59,7 +59,6 @@ | ||||
|       "version": "2.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/@pushrocks/consolecolor/-/consolecolor-2.0.1.tgz", | ||||
|       "integrity": "sha512-iOFCHVeFZ2OywbdwSxVI4/wokkcLrXVdHLgvMmkNhJ220eeLgjNZWx3EJo3vNW3zq5ybCSCUIq0878djBxrWpw==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "ansi-256-colors": "^1.1.0" | ||||
|       } | ||||
| @@ -75,14 +74,15 @@ | ||||
|       } | ||||
|     }, | ||||
|     "@pushrocks/lik": { | ||||
|       "version": "3.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/@pushrocks/lik/-/lik-3.0.1.tgz", | ||||
|       "integrity": "sha512-6dwRg7WMdY9drlqfo6NzOcw5ubVWYvIOSSMZz4Jsojpa8aDVwXd2VkD7sxO/PJRrbZzHkx/JXoY/epcWRjngUw==", | ||||
|       "version": "3.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/@pushrocks/lik/-/lik-3.0.2.tgz", | ||||
|       "integrity": "sha512-E2kI0jmPBGVfvXpmGEZOiv7amZrAIBpI49WL/gIdMy9MVeo6+k2VLDvYtdjzayVviE+LEt3//Xe08xE74FbP1A==", | ||||
|       "requires": { | ||||
|         "@pushrocks/smartdelay": "^2.0.2", | ||||
|         "@pushrocks/smartpromise": "^2.0.5", | ||||
|         "@types/lodash": "^4.14.112", | ||||
|         "@pushrocks/smartrx": "^2.0.2", | ||||
|         "@pushrocks/smarttime": "^3.0.5", | ||||
|         "@types/minimatch": "^3.0.3", | ||||
|         "lodash": "^4.17.10", | ||||
|         "minimatch": "^3.0.4", | ||||
|         "symbol-tree": "^3.2.2" | ||||
|       } | ||||
| @@ -112,17 +112,17 @@ | ||||
|       } | ||||
|     }, | ||||
|     "@pushrocks/smartcli": { | ||||
|       "version": "3.0.4", | ||||
|       "resolved": "https://registry.npmjs.org/@pushrocks/smartcli/-/smartcli-3.0.4.tgz", | ||||
|       "integrity": "sha512-ZuCPIZD+vPHmNP6BLdhP+GTptZEnLeGhUsykWss47MbZ0FvGeXm1r939qsx/wwijGT3F1rQIHkDA74VdQ2VDmw==", | ||||
|       "version": "3.0.6", | ||||
|       "resolved": "https://registry.npmjs.org/@pushrocks/smartcli/-/smartcli-3.0.6.tgz", | ||||
|       "integrity": "sha512-fCggmQXiu1URqMmzIta/8eBkBEfeWHwoErzQNTPFGpyVHw2Yhb5HBsatXUZUX5rBB+1o9xny9IzkLGyjI0lCww==", | ||||
|       "requires": { | ||||
|         "@pushrocks/lik": "^3.0.1", | ||||
|         "@pushrocks/smartlog": "^2.0.1", | ||||
|         "@pushrocks/smartparam": "^1.0.4", | ||||
|         "@pushrocks/smartpromise": "^2.0.5", | ||||
|         "@types/yargs": "^11.1.1", | ||||
|         "rxjs": "^6.3.0", | ||||
|         "smartparam": "1.0.2", | ||||
|         "yargs": "^12.0.1" | ||||
|         "rxjs": "^6.3.2", | ||||
|         "yargs": "^12.0.2" | ||||
|       } | ||||
|     }, | ||||
|     "@pushrocks/smartdelay": { | ||||
| @@ -134,33 +134,71 @@ | ||||
|       } | ||||
|     }, | ||||
|     "@pushrocks/smartfile": { | ||||
|       "version": "6.0.8", | ||||
|       "resolved": "https://registry.npmjs.org/@pushrocks/smartfile/-/smartfile-6.0.8.tgz", | ||||
|       "integrity": "sha512-YkAovvQ0pcVphXLynlQ1D4nhEoUqALqqUn2pRXc2vXNy0RDSU22puLlLVhoXT0NPAqYNMazhqc4OAixgEOpdFw==", | ||||
|       "version": "6.0.11", | ||||
|       "resolved": "https://registry.npmjs.org/@pushrocks/smartfile/-/smartfile-6.0.11.tgz", | ||||
|       "integrity": "sha512-qITfYEUtSN478CFyYX0KatIYLV28u/KdO3ClOcKjx1epagpuYhkwfVELhyIDRvapMjuesoVgZcrXUhcvq0o9+w==", | ||||
|       "requires": { | ||||
|         "@pushrocks/smartpath": "^4.0.1", | ||||
|         "@pushrocks/smartpromise": "^2.0.5", | ||||
|         "@pushrocks/smartrequest": "^1.1.14", | ||||
|         "@types/fs-extra": "^5.0.4", | ||||
|         "@types/vinyl": "^2.0.2", | ||||
|         "fs-extra": "^7.0.0", | ||||
|         "glob": "^7.1.2", | ||||
|         "fs-extra": "^7.0.1", | ||||
|         "glob": "^7.1.3", | ||||
|         "js-yaml": "^3.10.0", | ||||
|         "vinyl-file": "^3.0.0" | ||||
|       }, | ||||
|       "dependencies": { | ||||
|         "fs-extra": { | ||||
|           "version": "7.0.1", | ||||
|           "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", | ||||
|           "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", | ||||
|           "requires": { | ||||
|             "graceful-fs": "^4.1.2", | ||||
|             "jsonfile": "^4.0.0", | ||||
|             "universalify": "^0.1.0" | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "@pushrocks/smartlog": { | ||||
|       "version": "2.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/@pushrocks/smartlog/-/smartlog-2.0.1.tgz", | ||||
|       "integrity": "sha512-GtsDTGIUF3VuWPyF8FV5dF31ZCEIcaJ56ZlvJsWxjnyJq57X25mk5/K0QAaRE9IIeHg6fORcukFomb5C+AOQrg==", | ||||
|       "version": "2.0.9", | ||||
|       "resolved": "https://registry.npmjs.org/@pushrocks/smartlog/-/smartlog-2.0.9.tgz", | ||||
|       "integrity": "sha512-F2u3O8OOQ7QXgg9o0lI7HnqEhSQZo2A8u0EuNbQH+Kj2oL62xDwjAg6KkINwH7ObSWpaldZ+I28prG0JxaRzvg==", | ||||
|       "requires": { | ||||
|         "@pushrocks/smartlog-interfaces": "^1.0.9" | ||||
|         "@pushrocks/smartlog-interfaces": "^2.0.2" | ||||
|       } | ||||
|     }, | ||||
|     "@pushrocks/smartlog-destination-local": { | ||||
|       "version": "7.0.5", | ||||
|       "resolved": "https://registry.npmjs.org/@pushrocks/smartlog-destination-local/-/smartlog-destination-local-7.0.5.tgz", | ||||
|       "integrity": "sha512-++SVz8hkCtqmMdK74YaooHUyrijxEmUy2XehAi2aoV8AZKo7wi/oke84vEG3Zc+4t6tnfujnnGhJTp6J2scMbA==", | ||||
|       "requires": { | ||||
|         "@pushrocks/consolecolor": "^2.0.1", | ||||
|         "@pushrocks/smartlog-interfaces": "^2.0.2", | ||||
|         "@pushrocks/smartpromise": "^2.0.5", | ||||
|         "ora": "^3.0.0" | ||||
|       }, | ||||
|       "dependencies": { | ||||
|         "ora": { | ||||
|           "version": "3.0.0", | ||||
|           "resolved": "https://registry.npmjs.org/ora/-/ora-3.0.0.tgz", | ||||
|           "integrity": "sha512-LBS97LFe2RV6GJmXBi6OKcETKyklHNMV0xw7BtsVn2MlsgsydyZetSCbCANr+PFLmDyv4KV88nn0eCKza665Mg==", | ||||
|           "requires": { | ||||
|             "chalk": "^2.3.1", | ||||
|             "cli-cursor": "^2.1.0", | ||||
|             "cli-spinners": "^1.1.0", | ||||
|             "log-symbols": "^2.2.0", | ||||
|             "strip-ansi": "^4.0.0", | ||||
|             "wcwidth": "^1.0.1" | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "@pushrocks/smartlog-interfaces": { | ||||
|       "version": "1.0.9", | ||||
|       "resolved": "https://registry.npmjs.org/@pushrocks/smartlog-interfaces/-/smartlog-interfaces-1.0.9.tgz", | ||||
|       "integrity": "sha512-0qwpomrRN0kFjmhR9m1iHYXoISoNuXtRP0Wr+JtkYyURLwKHMaW8Xoznf8MzXJptRfqufJi3Fxh5HodpPrIZUA==" | ||||
|       "version": "2.0.5", | ||||
|       "resolved": "https://registry.npmjs.org/@pushrocks/smartlog-interfaces/-/smartlog-interfaces-2.0.5.tgz", | ||||
|       "integrity": "sha512-eLNlRpDwy3E+6v/B6fo/NiAo+UxBO3SxKgIIsgUGbWfVpsyUi0PG2xfVCdhJlhL1AsRRvKglfHSOB8qKE+XCLw==" | ||||
|     }, | ||||
|     "@pushrocks/smartparam": { | ||||
|       "version": "1.0.4", | ||||
| @@ -192,10 +230,31 @@ | ||||
|         "form-data": "^2.3.2" | ||||
|       } | ||||
|     }, | ||||
|     "@pushrocks/smartrx": { | ||||
|       "version": "2.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/@pushrocks/smartrx/-/smartrx-2.0.2.tgz", | ||||
|       "integrity": "sha512-3lQONWp/Q/al8O6Cm9v6aSamNAzJimGHNFgHBKKmyBOVZaYrvhd6OMgDDicHE6vkYHXNtltXj5q3aIunz+bKwQ==", | ||||
|       "requires": { | ||||
|         "@pushrocks/lik": "^3.0.1", | ||||
|         "@pushrocks/smartpromise": "^2.0.5", | ||||
|         "rxjs": "^6.3.3", | ||||
|         "smartevent": "^1.0.1" | ||||
|       }, | ||||
|       "dependencies": { | ||||
|         "rxjs": { | ||||
|           "version": "6.3.3", | ||||
|           "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", | ||||
|           "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", | ||||
|           "requires": { | ||||
|             "tslib": "^1.9.0" | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "@pushrocks/smartshell": { | ||||
|       "version": "2.0.6", | ||||
|       "resolved": "https://registry.npmjs.org/@pushrocks/smartshell/-/smartshell-2.0.6.tgz", | ||||
|       "integrity": "sha512-D48KB3DDqLfMjOXGEutqJi+v3Z4RcWacu5BJXxUwrecvd6oetbKobfmNGxeHSQPmNGb7U3ISfKwV6c5T5EZkJg==", | ||||
|       "version": "2.0.11", | ||||
|       "resolved": "https://registry.npmjs.org/@pushrocks/smartshell/-/smartshell-2.0.11.tgz", | ||||
|       "integrity": "sha512-NvDrafAgSPK12/HAekyL+BF5lROxhcfBNJIELI/bU7Jto/32QOOn6DthzMEPbqyPzsH7mWMjv10Djy3TWdqZag==", | ||||
|       "requires": { | ||||
|         "@pushrocks/smartpromise": "^2.0.5", | ||||
|         "@types/which": "^1.3.1", | ||||
| @@ -231,42 +290,25 @@ | ||||
|       } | ||||
|     }, | ||||
|     "@pushrocks/smartstring": { | ||||
|       "version": "3.0.4", | ||||
|       "resolved": "https://registry.npmjs.org/@pushrocks/smartstring/-/smartstring-3.0.4.tgz", | ||||
|       "integrity": "sha512-6LwG9dRAVY6qAeDDWj7P1ehTh9KYdeUG/SNKdx+jIvzOfyldy0fGsdm4o4glfeZvijGSxFEcmXkL3ic7rR19+Q==", | ||||
|       "version": "3.0.5", | ||||
|       "resolved": "https://registry.npmjs.org/@pushrocks/smartstring/-/smartstring-3.0.5.tgz", | ||||
|       "integrity": "sha512-Bws2s6+Pc0HIXA35QH6cl6LJywhZ1U5icjyYMx+1kH8nURG+njzkacfarr9NWqyVYYOVu7SgXLzp9sR0eH7k9g==", | ||||
|       "requires": { | ||||
|         "crypto-random-string": "^1.0.0", | ||||
|         "js-base64": "^2.4.8", | ||||
|         "js-base64": "^2.4.9", | ||||
|         "normalize-newline": "^3.0.0", | ||||
|         "randomatic": "^3.1.0", | ||||
|         "randomatic": "^3.1.1", | ||||
|         "strip-indent": "^2.0.0" | ||||
|       }, | ||||
|       "dependencies": { | ||||
|         "is-number": { | ||||
|           "version": "4.0.0", | ||||
|           "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", | ||||
|           "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" | ||||
|         }, | ||||
|         "js-base64": { | ||||
|           "version": "2.4.9", | ||||
|           "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.9.tgz", | ||||
|           "integrity": "sha512-xcinL3AuDJk7VSzsHgb9DvvIXayBbadtMZ4HFPx8rUszbW1MuNMlwYVC4zzCZ6e1sqZpnNS5ZFYOhXqA39T7LQ==" | ||||
|         }, | ||||
|         "kind-of": { | ||||
|           "version": "6.0.2", | ||||
|           "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", | ||||
|           "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" | ||||
|         }, | ||||
|         "randomatic": { | ||||
|           "version": "3.1.0", | ||||
|           "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.0.tgz", | ||||
|           "integrity": "sha512-KnGPVE0lo2WoXxIZ7cPR8YBpiol4gsSuOwDSg410oHh80ZMp5EiypNqL2K4Z77vJn6lB5rap7IkAmcUlalcnBQ==", | ||||
|           "requires": { | ||||
|             "is-number": "^4.0.0", | ||||
|             "kind-of": "^6.0.0", | ||||
|             "math-random": "^1.0.1" | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "@pushrocks/smarttime": { | ||||
|       "version": "3.0.5", | ||||
|       "resolved": "https://registry.npmjs.org/@pushrocks/smarttime/-/smarttime-3.0.5.tgz", | ||||
|       "integrity": "sha512-nHjJ8xRZ87OE8tBBIAOgjHJmJrc3MaPZtEZ5JDY2U9gjaED6JdRcdQ+vhSaLJT+U2u8YzXOuA6LfNN+X4jZm6A==", | ||||
|       "requires": { | ||||
|         "@pushrocks/smartpromise": "^2.0.5", | ||||
|         "@types/luxon": "^1.4.1", | ||||
|         "luxon": "^1.8.0" | ||||
|       } | ||||
|     }, | ||||
|     "@pushrocks/tapbundle": { | ||||
| @@ -363,9 +405,14 @@ | ||||
|       } | ||||
|     }, | ||||
|     "@types/lodash": { | ||||
|       "version": "4.14.116", | ||||
|       "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.116.tgz", | ||||
|       "integrity": "sha512-lRnAtKnxMXcYYXqOiotTmJd74uawNWuPnsnPrrO7HiFuE3npE2iQhfABatbYDyxTNqZNuXzcKGhw37R7RjBFLg==" | ||||
|       "version": "4.14.118", | ||||
|       "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.118.tgz", | ||||
|       "integrity": "sha512-iiJbKLZbhSa6FYRip/9ZDX6HXhayXLDGY2Fqws9cOkEQ6XeKfaxB0sC541mowZJueYyMnVUmmG+al5/4fCDrgw==" | ||||
|     }, | ||||
|     "@types/luxon": { | ||||
|       "version": "1.4.1", | ||||
|       "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-1.4.1.tgz", | ||||
|       "integrity": "sha512-mYv/gbkOJ40CDgR8st5sosfFNrJncdlkpdzQSNRdU86UQg3oWWmll4AO/7B8F5FlBC6YrIXqXDSnkoCBqo+uMA==" | ||||
|     }, | ||||
|     "@types/minimatch": { | ||||
|       "version": "3.0.3", | ||||
| @@ -373,9 +420,9 @@ | ||||
|       "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" | ||||
|     }, | ||||
|     "@types/node": { | ||||
|       "version": "10.10.3", | ||||
|       "resolved": "https://registry.npmjs.org/@types/node/-/node-10.10.3.tgz", | ||||
|       "integrity": "sha512-dWk7F3b0m6uDLHero7tsnpAi9r2RGPQHGbb0/VCv7DPJRMFtk3RonY1/29vfJKnheRMBa7+uF+vunlg/mBGlxg==" | ||||
|       "version": "10.12.10", | ||||
|       "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.10.tgz", | ||||
|       "integrity": "sha512-8xZEYckCbUVgK8Eg7lf5Iy4COKJ5uXlnIOnePN0WUwSQggy9tolM+tDJf7wMOnT/JT/W9xDYIaYggt3mRV2O5w==" | ||||
|     }, | ||||
|     "@types/shelljs": { | ||||
|       "version": "0.8.0", | ||||
| @@ -497,6 +544,59 @@ | ||||
|       "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", | ||||
|       "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" | ||||
|     }, | ||||
|     "babel-code-frame": { | ||||
|       "version": "6.26.0", | ||||
|       "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", | ||||
|       "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "chalk": "^1.1.3", | ||||
|         "esutils": "^2.0.2", | ||||
|         "js-tokens": "^3.0.2" | ||||
|       }, | ||||
|       "dependencies": { | ||||
|         "ansi-regex": { | ||||
|           "version": "2.1.1", | ||||
|           "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", | ||||
|           "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", | ||||
|           "dev": true | ||||
|         }, | ||||
|         "ansi-styles": { | ||||
|           "version": "2.2.1", | ||||
|           "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", | ||||
|           "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", | ||||
|           "dev": true | ||||
|         }, | ||||
|         "chalk": { | ||||
|           "version": "1.1.3", | ||||
|           "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", | ||||
|           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|             "ansi-styles": "^2.2.1", | ||||
|             "escape-string-regexp": "^1.0.2", | ||||
|             "has-ansi": "^2.0.0", | ||||
|             "strip-ansi": "^3.0.0", | ||||
|             "supports-color": "^2.0.0" | ||||
|           } | ||||
|         }, | ||||
|         "strip-ansi": { | ||||
|           "version": "3.0.1", | ||||
|           "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", | ||||
|           "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|             "ansi-regex": "^2.0.0" | ||||
|           } | ||||
|         }, | ||||
|         "supports-color": { | ||||
|           "version": "2.0.0", | ||||
|           "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", | ||||
|           "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", | ||||
|           "dev": true | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "backo2": { | ||||
|       "version": "1.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", | ||||
| @@ -575,29 +675,21 @@ | ||||
|       "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "builtin-modules": { | ||||
|       "version": "1.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", | ||||
|       "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "callsite": { | ||||
|       "version": "1.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", | ||||
|       "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" | ||||
|     }, | ||||
|     "camelcase": { | ||||
|       "version": "4.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", | ||||
|       "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" | ||||
|     }, | ||||
|     "cflare": { | ||||
|       "version": "1.0.5", | ||||
|       "resolved": "https://registry.npmjs.org/cflare/-/cflare-1.0.5.tgz", | ||||
|       "integrity": "sha1-0B/XhZ4UEvRcsp8CoiJ/8EcasJQ=", | ||||
|       "requires": { | ||||
|         "beautylog": "^6.1.10", | ||||
|         "smartdelay": "^1.0.3", | ||||
|         "smartq": "^1.1.1", | ||||
|         "smartrequest": "^1.0.6", | ||||
|         "smartstring": "^2.0.24", | ||||
|         "tsclass": "^1.0.12", | ||||
|         "typings-global": "^1.0.17" | ||||
|       } | ||||
|       "version": "5.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", | ||||
|       "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==" | ||||
|     }, | ||||
|     "chai": { | ||||
|       "version": "4.1.2", | ||||
| @@ -718,6 +810,12 @@ | ||||
|         "delayed-stream": "~1.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "commander": { | ||||
|       "version": "2.19.0", | ||||
|       "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", | ||||
|       "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "component-bind": { | ||||
|       "version": "1.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", | ||||
| @@ -782,12 +880,9 @@ | ||||
|       } | ||||
|     }, | ||||
|     "decamelize": { | ||||
|       "version": "2.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", | ||||
|       "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", | ||||
|       "requires": { | ||||
|         "xregexp": "4.0.0" | ||||
|       } | ||||
|       "version": "1.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", | ||||
|       "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" | ||||
|     }, | ||||
|     "deep-eql": { | ||||
|       "version": "3.0.1", | ||||
| @@ -798,6 +893,21 @@ | ||||
|         "type-detect": "^4.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "defaults": { | ||||
|       "version": "1.0.3", | ||||
|       "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", | ||||
|       "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", | ||||
|       "requires": { | ||||
|         "clone": "^1.0.2" | ||||
|       }, | ||||
|       "dependencies": { | ||||
|         "clone": { | ||||
|           "version": "1.0.4", | ||||
|           "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", | ||||
|           "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "define-properties": { | ||||
|       "version": "1.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", | ||||
| @@ -899,6 +1009,12 @@ | ||||
|       "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", | ||||
|       "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" | ||||
|     }, | ||||
|     "esutils": { | ||||
|       "version": "2.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", | ||||
|       "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "execa": { | ||||
|       "version": "0.10.0", | ||||
|       "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", | ||||
| @@ -1020,6 +1136,23 @@ | ||||
|         "function-bind": "^1.1.1" | ||||
|       } | ||||
|     }, | ||||
|     "has-ansi": { | ||||
|       "version": "2.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", | ||||
|       "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "ansi-regex": "^2.0.0" | ||||
|       }, | ||||
|       "dependencies": { | ||||
|         "ansi-regex": { | ||||
|           "version": "2.1.1", | ||||
|           "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", | ||||
|           "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", | ||||
|           "dev": true | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "has-binary2": { | ||||
|       "version": "1.0.3", | ||||
|       "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", | ||||
| @@ -1069,11 +1202,6 @@ | ||||
|       "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", | ||||
|       "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" | ||||
|     }, | ||||
|     "is-buffer": { | ||||
|       "version": "1.1.6", | ||||
|       "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", | ||||
|       "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" | ||||
|     }, | ||||
|     "is-callable": { | ||||
|       "version": "1.1.3", | ||||
|       "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", | ||||
| @@ -1090,22 +1218,9 @@ | ||||
|       "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" | ||||
|     }, | ||||
|     "is-number": { | ||||
|       "version": "3.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", | ||||
|       "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", | ||||
|       "requires": { | ||||
|         "kind-of": "^3.0.2" | ||||
|       }, | ||||
|       "dependencies": { | ||||
|         "kind-of": { | ||||
|           "version": "3.2.2", | ||||
|           "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", | ||||
|           "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", | ||||
|           "requires": { | ||||
|             "is-buffer": "^1.1.5" | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|       "version": "4.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", | ||||
|       "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" | ||||
|     }, | ||||
|     "is-promise": { | ||||
|       "version": "2.1.0", | ||||
| @@ -1146,9 +1261,15 @@ | ||||
|       "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" | ||||
|     }, | ||||
|     "js-base64": { | ||||
|       "version": "2.4.5", | ||||
|       "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.5.tgz", | ||||
|       "integrity": "sha512-aUnNwqMOXw3yvErjMPSQu6qIIzUmT1e5KcU1OZxRDU1g/am6mzBvcrmLAYwzmB59BHPrh5/tKaiF4OPhqRWESQ==" | ||||
|       "version": "2.4.9", | ||||
|       "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.9.tgz", | ||||
|       "integrity": "sha512-xcinL3AuDJk7VSzsHgb9DvvIXayBbadtMZ4HFPx8rUszbW1MuNMlwYVC4zzCZ6e1sqZpnNS5ZFYOhXqA39T7LQ==" | ||||
|     }, | ||||
|     "js-tokens": { | ||||
|       "version": "3.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", | ||||
|       "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "js-yaml": { | ||||
|       "version": "3.12.0", | ||||
| @@ -1168,12 +1289,9 @@ | ||||
|       } | ||||
|     }, | ||||
|     "kind-of": { | ||||
|       "version": "4.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", | ||||
|       "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", | ||||
|       "requires": { | ||||
|         "is-buffer": "^1.1.5" | ||||
|       } | ||||
|       "version": "6.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", | ||||
|       "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" | ||||
|     }, | ||||
|     "lcid": { | ||||
|       "version": "2.0.0", | ||||
| @@ -1237,6 +1355,11 @@ | ||||
|         "chalk": "^2.0.1" | ||||
|       } | ||||
|     }, | ||||
|     "luxon": { | ||||
|       "version": "1.8.0", | ||||
|       "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.8.0.tgz", | ||||
|       "integrity": "sha512-F742cYUYB7X+LXY3cIn6THZUBqRBjeAvF+CWE2i3+eKcv2bzsCsnRsBYL8Qrqzp1dfs6HsVcSjfKt2RcrtUElw==" | ||||
|     }, | ||||
|     "make-error": { | ||||
|       "version": "1.3.5", | ||||
|       "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", | ||||
| @@ -1244,9 +1367,9 @@ | ||||
|       "dev": true | ||||
|     }, | ||||
|     "map-age-cleaner": { | ||||
|       "version": "0.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.2.tgz", | ||||
|       "integrity": "sha512-UN1dNocxQq44IhJyMI4TU8phc2m9BddacHRPRjKGLYaF0jqd3xLz0jS0skpAU9WgYyoR4gHtUpzytNBS385FWQ==", | ||||
|       "version": "0.1.3", | ||||
|       "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", | ||||
|       "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", | ||||
|       "requires": { | ||||
|         "p-defer": "^1.0.0" | ||||
|       } | ||||
| @@ -1294,13 +1417,13 @@ | ||||
|     }, | ||||
|     "minimist": { | ||||
|       "version": "1.2.0", | ||||
|       "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", | ||||
|       "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", | ||||
|       "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "mkdirp": { | ||||
|       "version": "0.5.1", | ||||
|       "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", | ||||
|       "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", | ||||
|       "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
| @@ -1309,7 +1432,7 @@ | ||||
|       "dependencies": { | ||||
|         "minimist": { | ||||
|           "version": "0.0.8", | ||||
|           "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", | ||||
|           "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", | ||||
|           "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", | ||||
|           "dev": true | ||||
|         } | ||||
| @@ -1373,6 +1496,15 @@ | ||||
|           "requires": { | ||||
|             "@types/node": "*" | ||||
|           } | ||||
|         }, | ||||
|         "through2": { | ||||
|           "version": "2.0.5", | ||||
|           "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", | ||||
|           "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", | ||||
|           "requires": { | ||||
|             "readable-stream": "~2.3.6", | ||||
|             "xtend": "~4.0.1" | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
| @@ -1517,6 +1649,12 @@ | ||||
|       "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", | ||||
|       "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" | ||||
|     }, | ||||
|     "path-parse": { | ||||
|       "version": "1.0.6", | ||||
|       "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", | ||||
|       "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "pathval": { | ||||
|       "version": "1.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", | ||||
| @@ -1545,12 +1683,13 @@ | ||||
|       "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" | ||||
|     }, | ||||
|     "randomatic": { | ||||
|       "version": "1.1.7", | ||||
|       "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", | ||||
|       "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", | ||||
|       "version": "3.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", | ||||
|       "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", | ||||
|       "requires": { | ||||
|         "is-number": "^3.0.0", | ||||
|         "kind-of": "^4.0.0" | ||||
|         "is-number": "^4.0.0", | ||||
|         "kind-of": "^6.0.0", | ||||
|         "math-random": "^1.0.1" | ||||
|       } | ||||
|     }, | ||||
|     "readable-stream": { | ||||
| @@ -1587,6 +1726,15 @@ | ||||
|       "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", | ||||
|       "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" | ||||
|     }, | ||||
|     "resolve": { | ||||
|       "version": "1.8.1", | ||||
|       "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", | ||||
|       "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "path-parse": "^1.0.5" | ||||
|       } | ||||
|     }, | ||||
|     "restore-cursor": { | ||||
|       "version": "2.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", | ||||
| @@ -1610,9 +1758,9 @@ | ||||
|       "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" | ||||
|     }, | ||||
|     "semver": { | ||||
|       "version": "5.5.1", | ||||
|       "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", | ||||
|       "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==" | ||||
|       "version": "5.6.0", | ||||
|       "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", | ||||
|       "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" | ||||
|     }, | ||||
|     "set-blocking": { | ||||
|       "version": "2.0.0", | ||||
| @@ -1685,6 +1833,15 @@ | ||||
|         "typings-global": "^1.0.14" | ||||
|       } | ||||
|     }, | ||||
|     "smartevent": { | ||||
|       "version": "1.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/smartevent/-/smartevent-1.0.1.tgz", | ||||
|       "integrity": "sha1-E9K/LPCU698XgT+g1GBB+BejAqo=", | ||||
|       "requires": { | ||||
|         "smartq": "^1.1.1", | ||||
|         "typings-global": "^1.0.16" | ||||
|       } | ||||
|     }, | ||||
|     "smartlodash": { | ||||
|       "version": "1.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/smartlodash/-/smartlodash-1.0.1.tgz", | ||||
| @@ -1702,18 +1859,6 @@ | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "smartparam": { | ||||
|       "version": "1.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/smartparam/-/smartparam-1.0.2.tgz", | ||||
|       "integrity": "sha512-Q09m98X6+WG9q0Wpj6LXXSqGdYUItLAsj5ypJ8pRkGtry2V4zZzhimv4xviViLIfrgIBn5uTfbjNU0is7+WRTA==", | ||||
|       "requires": { | ||||
|         "beautylog": "6.1.10", | ||||
|         "is-promise": "^2.1.0", | ||||
|         "minimatch": "^3.0.4", | ||||
|         "smartq": "^1.1.6", | ||||
|         "typings-global": "^1.0.20" | ||||
|       } | ||||
|     }, | ||||
|     "smartq": { | ||||
|       "version": "1.1.8", | ||||
|       "resolved": "https://registry.npmjs.org/smartq/-/smartq-1.1.8.tgz", | ||||
| @@ -1748,19 +1893,6 @@ | ||||
|         "socket.io-client": "^2.0.4" | ||||
|       } | ||||
|     }, | ||||
|     "smartstring": { | ||||
|       "version": "2.0.28", | ||||
|       "resolved": "https://registry.npmjs.org/smartstring/-/smartstring-2.0.28.tgz", | ||||
|       "integrity": "sha512-pneklqLF1w3k043fyM3eMrJ1lXRnE4b/W6xlQrpkf2fLb/w1+NbnfJopJVfWJxtft8bVPHhYRk6fa1JKH4qTVw==", | ||||
|       "requires": { | ||||
|         "crypto-random-string": "^1.0.0", | ||||
|         "js-base64": "^2.3.2", | ||||
|         "normalize-newline": "^3.0.0", | ||||
|         "randomatic": "^1.1.7", | ||||
|         "strip-indent": "^2.0.0", | ||||
|         "typings-global": "^1.0.20" | ||||
|       } | ||||
|     }, | ||||
|     "socket.io": { | ||||
|       "version": "2.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", | ||||
| @@ -1912,11 +2044,11 @@ | ||||
|       "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=" | ||||
|     }, | ||||
|     "through2": { | ||||
|       "version": "2.0.3", | ||||
|       "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", | ||||
|       "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", | ||||
|       "version": "3.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.0.tgz", | ||||
|       "integrity": "sha512-8B+sevlqP4OiCjonI1Zw03Sf8PuV1eRsYQgLad5eonILOdyeRsY27A/2Ze8IlvlMvq31OH+3fz/styI7Ya62yQ==", | ||||
|       "requires": { | ||||
|         "readable-stream": "^2.1.5", | ||||
|         "readable-stream": "2 || 3", | ||||
|         "xtend": "~4.0.1" | ||||
|       } | ||||
|     }, | ||||
| @@ -1941,16 +2073,46 @@ | ||||
|         "yn": "^2.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "tsclass": { | ||||
|       "version": "1.0.20", | ||||
|       "resolved": "https://registry.npmjs.org/tsclass/-/tsclass-1.0.20.tgz", | ||||
|       "integrity": "sha512-oreiwoX8YjXuSYy2cmsVS8/XC8YEb1ms7w9S9P+84sj+ZB6t/MEO8mJ7DaMZGH14zro8jcMSKVT7U9eTbknNLg==" | ||||
|     }, | ||||
|     "tslib": { | ||||
|       "version": "1.9.3", | ||||
|       "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", | ||||
|       "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" | ||||
|     }, | ||||
|     "tslint": { | ||||
|       "version": "5.11.0", | ||||
|       "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.11.0.tgz", | ||||
|       "integrity": "sha1-mPMMAurjzecAYgHkwzywi0hYHu0=", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "babel-code-frame": "^6.22.0", | ||||
|         "builtin-modules": "^1.1.1", | ||||
|         "chalk": "^2.3.0", | ||||
|         "commander": "^2.12.1", | ||||
|         "diff": "^3.2.0", | ||||
|         "glob": "^7.1.1", | ||||
|         "js-yaml": "^3.7.0", | ||||
|         "minimatch": "^3.0.4", | ||||
|         "resolve": "^1.3.2", | ||||
|         "semver": "^5.3.0", | ||||
|         "tslib": "^1.8.0", | ||||
|         "tsutils": "^2.27.2" | ||||
|       } | ||||
|     }, | ||||
|     "tslint-config-prettier": { | ||||
|       "version": "1.17.0", | ||||
|       "resolved": "https://registry.npmjs.org/tslint-config-prettier/-/tslint-config-prettier-1.17.0.tgz", | ||||
|       "integrity": "sha512-NKWNkThwqE4Snn4Cm6SZB7lV5RMDDFsBwz6fWUkTxOKGjMx8ycOHnjIbhn7dZd5XmssW3CwqUjlANR6EhP9YQw==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "tsutils": { | ||||
|       "version": "2.29.0", | ||||
|       "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", | ||||
|       "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "tslib": "^1.8.1" | ||||
|       } | ||||
|     }, | ||||
|     "type-detect": { | ||||
|       "version": "4.0.8", | ||||
|       "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", | ||||
| @@ -2017,6 +2179,14 @@ | ||||
|         "vinyl": "^2.0.1" | ||||
|       } | ||||
|     }, | ||||
|     "wcwidth": { | ||||
|       "version": "1.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", | ||||
|       "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", | ||||
|       "requires": { | ||||
|         "defaults": "^1.0.3" | ||||
|       } | ||||
|     }, | ||||
|     "which": { | ||||
|       "version": "1.3.1", | ||||
|       "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", | ||||
| @@ -2092,11 +2262,6 @@ | ||||
|       "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", | ||||
|       "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" | ||||
|     }, | ||||
|     "xregexp": { | ||||
|       "version": "4.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", | ||||
|       "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==" | ||||
|     }, | ||||
|     "xtend": { | ||||
|       "version": "4.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", | ||||
| @@ -2108,12 +2273,12 @@ | ||||
|       "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" | ||||
|     }, | ||||
|     "yargs": { | ||||
|       "version": "12.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz", | ||||
|       "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", | ||||
|       "version": "12.0.5", | ||||
|       "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", | ||||
|       "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", | ||||
|       "requires": { | ||||
|         "cliui": "^4.0.0", | ||||
|         "decamelize": "^2.0.0", | ||||
|         "decamelize": "^1.2.0", | ||||
|         "find-up": "^3.0.0", | ||||
|         "get-caller-file": "^1.0.1", | ||||
|         "os-locale": "^3.0.0", | ||||
| @@ -2123,15 +2288,16 @@ | ||||
|         "string-width": "^2.0.0", | ||||
|         "which-module": "^2.0.0", | ||||
|         "y18n": "^3.2.1 || ^4.0.0", | ||||
|         "yargs-parser": "^10.1.0" | ||||
|         "yargs-parser": "^11.1.1" | ||||
|       } | ||||
|     }, | ||||
|     "yargs-parser": { | ||||
|       "version": "10.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", | ||||
|       "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", | ||||
|       "version": "11.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", | ||||
|       "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", | ||||
|       "requires": { | ||||
|         "camelcase": "^4.1.0" | ||||
|         "camelcase": "^5.0.0", | ||||
|         "decamelize": "^1.2.0" | ||||
|       } | ||||
|     }, | ||||
|     "yeast": { | ||||
|   | ||||
							
								
								
									
										30
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								package.json
									
									
									
									
									
								
							| @@ -1,16 +1,16 @@ | ||||
| { | ||||
|   "name": "@shipzone/npmci", | ||||
|   "version": "3.0.58", | ||||
|   "version": "3.1.13", | ||||
|   "description": "node and docker in gitlab ci on steroids", | ||||
|   "main": "dist/index.js", | ||||
|   "typings": "dist/index.d.ts", | ||||
|   "bin": { | ||||
|     "npmci": "dist/cli.js" | ||||
|     "npmci": "cli.js" | ||||
|   }, | ||||
|   "scripts": { | ||||
|     "test": "(rm -f config.json) && tstest test/", | ||||
|     "build": "(rm -f config.json) && tsbuild && (npm run testVersion)", | ||||
|     "testVersion": "(cd test/assets/ && node ../../dist/cli.js -v)" | ||||
|     "testVersion": "(cd test/assets/ && node ../../cli.js -v)" | ||||
|   }, | ||||
|   "repository": { | ||||
|     "type": "git", | ||||
| @@ -24,33 +24,35 @@ | ||||
|   "homepage": "https://gitlab.com/gitzone/npmci#README", | ||||
|   "devDependencies": { | ||||
|     "@gitzone/tsbuild": "^2.0.22", | ||||
|     "@gitzone/tsrun": "^1.1.12", | ||||
|     "@gitzone/tsrun": "^1.1.13", | ||||
|     "@gitzone/tstest": "^1.0.15", | ||||
|     "@pushrocks/tapbundle": "^3.0.7", | ||||
|     "@types/node": "^10.10.3" | ||||
|     "@types/node": "^10.12.10", | ||||
|     "tslint": "^5.11.0", | ||||
|     "tslint-config-prettier": "^1.17.0" | ||||
|   }, | ||||
|   "dependencies": { | ||||
|     "@pushrocks/lik": "^3.0.1", | ||||
|     "@pushrocks/lik": "^3.0.2", | ||||
|     "@pushrocks/npmextra": "^3.0.1", | ||||
|     "@pushrocks/projectinfo": "^4.0.2", | ||||
|     "@pushrocks/smartcli": "^3.0.4", | ||||
|     "@pushrocks/smartcli": "^3.0.6", | ||||
|     "@pushrocks/smartdelay": "^2.0.2", | ||||
|     "@pushrocks/smartfile": "^6.0.8", | ||||
|     "@pushrocks/smartfile": "^6.0.11", | ||||
|     "@pushrocks/smartlog": "^2.0.9", | ||||
|     "@pushrocks/smartlog-destination-local": "^7.0.5", | ||||
|     "@pushrocks/smartparam": "^1.0.4", | ||||
|     "@pushrocks/smartpromise": "^2.0.5", | ||||
|     "@pushrocks/smartrequest": "^1.1.14", | ||||
|     "@pushrocks/smartshell": "^2.0.6", | ||||
|     "@pushrocks/smartshell": "^2.0.11", | ||||
|     "@pushrocks/smartssh": "^1.2.3", | ||||
|     "@pushrocks/smartstring": "^3.0.4", | ||||
|     "@types/lodash": "^4.14.116", | ||||
|     "@pushrocks/smartstring": "^3.0.5", | ||||
|     "@types/lodash": "^4.14.118", | ||||
|     "@types/shelljs": "^0.8.0", | ||||
|     "@types/through2": "^2.0.34", | ||||
|     "beautylog": "^6.1.10", | ||||
|     "cflare": "^1.0.5", | ||||
|     "lodash": "^4.17.11", | ||||
|     "smartanalytics": "^2.0.9", | ||||
|     "smartsocket": "^1.1.19", | ||||
|     "through2": "^2.0.3" | ||||
|     "through2": "^3.0.0" | ||||
|   }, | ||||
|   "private": false | ||||
| } | ||||
|   | ||||
| @@ -1,3 +1,4 @@ | ||||
| import { logger } from '../npmci.logging'; | ||||
| import * as plugins from './mod.plugins'; | ||||
| import * as paths from '../npmci.paths'; | ||||
| import { bash } from '../npmci.bash'; | ||||
| @@ -10,7 +11,7 @@ import { DockerRegistry } from './mod.classes.dockerregistry'; | ||||
| import { RegistryStorage } from './mod.classes.registrystorage'; | ||||
|  | ||||
| // instances | ||||
| let npmciRegistryStorage = new RegistryStorage(); | ||||
| const npmciRegistryStorage = new RegistryStorage(); | ||||
|  | ||||
| export { Dockerfile, helpers }; | ||||
|  | ||||
| @@ -23,7 +24,7 @@ export let modArgvArg; // will be set through the build command | ||||
| export let handleCli = async argvArg => { | ||||
|   modArgvArg = argvArg; | ||||
|   if (argvArg._.length >= 2) { | ||||
|     let action: string = argvArg._[1]; | ||||
|     const action: string = argvArg._[1]; | ||||
|     switch (action) { | ||||
|       case 'build': | ||||
|         await build(); | ||||
| @@ -42,10 +43,11 @@ export let handleCli = async argvArg => { | ||||
|         await pull(argvArg); | ||||
|         break; | ||||
|       default: | ||||
|         plugins.beautylog.error(`>>npmci docker ...<< action >>${action}<< not supported`); | ||||
|         logger.log('error', `>>npmci docker ...<< action >>${action}<< not supported`); | ||||
|     } | ||||
|   } else { | ||||
|     plugins.beautylog.log( | ||||
|     logger.log( | ||||
|       'info', | ||||
|       `>>npmci docker ...<< cli arguments invalid... Please read the documentation.` | ||||
|     ); | ||||
|   } | ||||
| @@ -56,7 +58,7 @@ export let handleCli = async argvArg => { | ||||
|  */ | ||||
| export let build = async () => { | ||||
|   await prepare(); | ||||
|   plugins.beautylog.log('now building Dockerfiles...'); | ||||
|   logger.log('info', 'now building Dockerfiles...'); | ||||
|   await helpers | ||||
|     .readDockerfiles() | ||||
|     .then(helpers.sortDockerfiles) | ||||
| @@ -78,7 +80,7 @@ export let login = async () => { | ||||
| export let prepare = async () => { | ||||
|   // Always login to GitLab Registry | ||||
|   if (!process.env.CI_BUILD_TOKEN || process.env.CI_BUILD_TOKEN === '') { | ||||
|     plugins.beautylog.error('No registry token specified by gitlab!'); | ||||
|     logger.log('error', 'No registry token specified by gitlab!'); | ||||
|     process.exit(1); | ||||
|   } | ||||
|   npmciRegistryStorage.addRegistry( | ||||
| @@ -98,40 +100,41 @@ export let prepare = async () => { | ||||
|  | ||||
| export let push = async argvArg => { | ||||
|   await prepare(); | ||||
|   let registryUrlArg = argvArg._[2]; | ||||
|   const registryUrlArg = argvArg._[2]; | ||||
|   let suffix = null; | ||||
|   if (argvArg._.length >= 4) { | ||||
|     suffix = argvArg._[3]; | ||||
|   } | ||||
|   let dockerfileArray = await helpers | ||||
|   const dockerfileArray = await helpers | ||||
|     .readDockerfiles() | ||||
|     .then(helpers.sortDockerfiles) | ||||
|     .then(helpers.mapDockerfiles); | ||||
|   let localDockerRegistry = npmciRegistryStorage.getRegistryByUrl(registryUrlArg); | ||||
|   const localDockerRegistry = npmciRegistryStorage.getRegistryByUrl(registryUrlArg); | ||||
|   if (!localDockerRegistry) { | ||||
|     plugins.beautylog.error( | ||||
|     logger.log( | ||||
|       'error', | ||||
|       `Cannot push to registry ${registryUrlArg}, because it was not found in the authenticated registry list.` | ||||
|     ); | ||||
|     process.exit(1); | ||||
|   } | ||||
|   for (let dockerfile of dockerfileArray) { | ||||
|   for (const dockerfile of dockerfileArray) { | ||||
|     await dockerfile.push(localDockerRegistry, suffix); | ||||
|   } | ||||
| }; | ||||
|  | ||||
| export let pull = async argvArg => { | ||||
|   await prepare(); | ||||
|   let registryUrlArg = argvArg._[2]; | ||||
|   const registryUrlArg = argvArg._[2]; | ||||
|   let suffix = null; | ||||
|   if (argvArg._.length >= 4) { | ||||
|     suffix = argvArg._[3]; | ||||
|   } | ||||
|   let localDockerRegistry = npmciRegistryStorage.getRegistryByUrl(registryUrlArg); | ||||
|   let dockerfileArray = await helpers | ||||
|   const localDockerRegistry = npmciRegistryStorage.getRegistryByUrl(registryUrlArg); | ||||
|   const dockerfileArray = await helpers | ||||
|     .readDockerfiles() | ||||
|     .then(helpers.sortDockerfiles) | ||||
|     .then(helpers.mapDockerfiles); | ||||
|   for (let dockerfile of dockerfileArray) { | ||||
|   for (const dockerfile of dockerfileArray) { | ||||
|     await dockerfile.pull(localDockerRegistry, suffix); | ||||
|   } | ||||
| }; | ||||
|   | ||||
| @@ -1,3 +1,4 @@ | ||||
| import { logger } from '../npmci.logging'; | ||||
| import * as plugins from './mod.plugins'; | ||||
| import * as NpmciEnv from '../npmci.env'; | ||||
| import { bash } from '../npmci.bash'; | ||||
| @@ -10,16 +11,16 @@ import * as helpers from './mod.helpers'; | ||||
|  * class Dockerfile represents a Dockerfile on disk in npmci | ||||
|  */ | ||||
| export class Dockerfile { | ||||
|   filePath: string; | ||||
|   repo: string; | ||||
|   version: string; | ||||
|   cleanTag: string; | ||||
|   buildTag: string; | ||||
|   containerName: string; | ||||
|   content: string; | ||||
|   baseImage: string; | ||||
|   localBaseImageDependent: boolean; | ||||
|   localBaseDockerfile: Dockerfile; | ||||
|   public filePath: string; | ||||
|   public repo: string; | ||||
|   public version: string; | ||||
|   public cleanTag: string; | ||||
|   public buildTag: string; | ||||
|   public containerName: string; | ||||
|   public content: string; | ||||
|   public baseImage: string; | ||||
|   public localBaseImageDependent: boolean; | ||||
|   public localBaseDockerfile: Dockerfile; | ||||
|   constructor(options: { filePath?: string; fileContents?: string | Buffer; read?: boolean }) { | ||||
|     this.filePath = options.filePath; | ||||
|     this.repo = NpmciEnv.repo.user + '/' + NpmciEnv.repo.repo; | ||||
| @@ -38,10 +39,12 @@ export class Dockerfile { | ||||
|   /** | ||||
|    * builds the Dockerfile | ||||
|    */ | ||||
|   async build() { | ||||
|     plugins.beautylog.info('now building Dockerfile for ' + this.cleanTag); | ||||
|     let buildArgsString = await helpers.getDockerBuildArgs(); | ||||
|     let buildCommand = `docker build -t ${this.buildTag} -f ${this.filePath} ${buildArgsString} .`; | ||||
|   public async build() { | ||||
|     logger.log('info', 'now building Dockerfile for ' + this.cleanTag); | ||||
|     const buildArgsString = await helpers.getDockerBuildArgs(); | ||||
|     const buildCommand = `docker build -t ${this.buildTag} -f ${ | ||||
|       this.filePath | ||||
|     } ${buildArgsString} .`; | ||||
|     await bash(buildCommand); | ||||
|     return; | ||||
|   } | ||||
| @@ -49,8 +52,8 @@ export class Dockerfile { | ||||
|   /** | ||||
|    * pushes the Dockerfile to a registry | ||||
|    */ | ||||
|   async push(dockerRegistryArg: DockerRegistry, versionSuffix: string = null) { | ||||
|     let pushTag = helpers.getDockerTagString( | ||||
|   public async push(dockerRegistryArg: DockerRegistry, versionSuffix: string = null) { | ||||
|     const pushTag = helpers.getDockerTagString( | ||||
|       dockerRegistryArg.registryUrl, | ||||
|       this.repo, | ||||
|       this.version, | ||||
| @@ -63,8 +66,8 @@ export class Dockerfile { | ||||
|   /** | ||||
|    * pulls the Dockerfile from a registry | ||||
|    */ | ||||
|   async pull(registryArg: DockerRegistry, versionSuffixArg: string = null) { | ||||
|     let pullTag = helpers.getDockerTagString( | ||||
|   public async pull(registryArg: DockerRegistry, versionSuffixArg: string = null) { | ||||
|     const pullTag = helpers.getDockerTagString( | ||||
|       registryArg.registryUrl, | ||||
|       this.repo, | ||||
|       this.version, | ||||
| @@ -77,9 +80,9 @@ export class Dockerfile { | ||||
|   /** | ||||
|    * tests the Dockerfile; | ||||
|    */ | ||||
|   async test() { | ||||
|     let testFile: string = plugins.path.join(paths.NpmciTestDir, 'test_' + this.version + '.sh'); | ||||
|     let testFileExists: boolean = plugins.smartfile.fs.fileExistsSync(testFile); | ||||
|   public async test() { | ||||
|     const testFile: string = plugins.path.join(paths.NpmciTestDir, 'test_' + this.version + '.sh'); | ||||
|     const testFileExists: boolean = plugins.smartfile.fs.fileExistsSync(testFile); | ||||
|     if (testFileExists) { | ||||
|       // run tests | ||||
|       await bash( | ||||
| @@ -93,17 +96,17 @@ export class Dockerfile { | ||||
|       await bash(`docker rm npmci_test_container`); | ||||
|       await bash(`docker rmi --force npmci_test_image`); | ||||
|     } else { | ||||
|       plugins.beautylog.warn( | ||||
|         'skipping tests for ' + this.cleanTag + ' because no testfile was found!' | ||||
|       ); | ||||
|       logger.log('warn', 'skipping tests for ' + this.cleanTag + ' because no testfile was found!'); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * gets the id of a Dockerfile | ||||
|    */ | ||||
|   async getId() { | ||||
|     let containerId = await bash('docker inspect --type=image --format="{{.Id}}" ' + this.buildTag); | ||||
|   public async getId() { | ||||
|     const containerId = await bash( | ||||
|       'docker inspect --type=image --format="{{.Id}}" ' + this.buildTag | ||||
|     ); | ||||
|     return containerId; | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -1,3 +1,4 @@ | ||||
| import { logger } from '../npmci.logging'; | ||||
| import * as plugins from './mod.plugins'; | ||||
| import { bash } from '../npmci.bash'; | ||||
|  | ||||
| @@ -8,26 +9,26 @@ export interface IDockerRegistryConstructorOptions { | ||||
| } | ||||
|  | ||||
| export class DockerRegistry { | ||||
|   registryUrl: string; | ||||
|   username: string; | ||||
|   password: string; | ||||
|   public registryUrl: string; | ||||
|   public username: string; | ||||
|   public password: string; | ||||
|   constructor(optionsArg: IDockerRegistryConstructorOptions) { | ||||
|     this.registryUrl = optionsArg.registryUrl; | ||||
|     this.username = optionsArg.username; | ||||
|     this.password = optionsArg.password; | ||||
|     plugins.beautylog.info(`created DockerRegistry for ${this.registryUrl}`); | ||||
|     logger.log('info', `created DockerRegistry for ${this.registryUrl}`); | ||||
|   } | ||||
|  | ||||
|   static fromEnvString(envString: string): DockerRegistry { | ||||
|     let dockerRegexResultArray = envString.split('|'); | ||||
|   public static fromEnvString(envString: string): DockerRegistry { | ||||
|     const dockerRegexResultArray = envString.split('|'); | ||||
|     if (dockerRegexResultArray.length !== 3) { | ||||
|       plugins.beautylog.error('malformed docker env var...'); | ||||
|       logger.log('error', 'malformed docker env var...'); | ||||
|       process.exit(1); | ||||
|       return; | ||||
|     } | ||||
|     let registryUrl = dockerRegexResultArray[0]; | ||||
|     let username = dockerRegexResultArray[1]; | ||||
|     let password = dockerRegexResultArray[2]; | ||||
|     const registryUrl = dockerRegexResultArray[0]; | ||||
|     const username = dockerRegexResultArray[1]; | ||||
|     const password = dockerRegexResultArray[2]; | ||||
|     return new DockerRegistry({ | ||||
|       registryUrl: registryUrl, | ||||
|       username: username, | ||||
| @@ -35,13 +36,13 @@ export class DockerRegistry { | ||||
|     }); | ||||
|   } | ||||
|  | ||||
|   async login() { | ||||
|   public async login() { | ||||
|     if (this.registryUrl === 'docker.io') { | ||||
|       await bash(`docker login -u ${this.username} -p ${this.password}`); | ||||
|       plugins.beautylog.info('Logged in to standard docker hub'); | ||||
|       logger.log('info', 'Logged in to standard docker hub'); | ||||
|     } else { | ||||
|       await bash(`docker login -u ${this.username} -p ${this.password} ${this.registryUrl}`); | ||||
|     } | ||||
|     plugins.beautylog.ok(`docker authenticated for ${this.registryUrl}!`); | ||||
|     logger.log('ok', `docker authenticated for ${this.registryUrl}!`); | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| import { logger } from '../npmci.logging'; | ||||
| import * as plugins from './mod.plugins'; | ||||
| import { Objectmap } from 'lik'; | ||||
| import { Objectmap } from '@pushrocks/lik'; | ||||
|  | ||||
| import { DockerRegistry } from './mod.classes.dockerregistry'; | ||||
|  | ||||
| @@ -23,6 +24,6 @@ export class RegistryStorage { | ||||
|     await this.objectMap.forEach(async registryArg => { | ||||
|       await registryArg.login(); | ||||
|     }); | ||||
|     plugins.beautylog.success('logged in successfully into all available DockerRegistries!'); | ||||
|     logger.log('success', 'logged in successfully into all available DockerRegistries!'); | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -1,3 +1,4 @@ | ||||
| import { logger } from '../npmci.logging'; | ||||
| import * as plugins from './mod.plugins'; | ||||
| import * as paths from '../npmci.paths'; | ||||
| import * as NpmciEnv from '../npmci.env'; | ||||
| @@ -11,14 +12,14 @@ import { Dockerfile } from './mod.classes.dockerfile'; | ||||
|  * @returns Promise<Dockerfile[]> | ||||
|  */ | ||||
| export let readDockerfiles = async (): Promise<Dockerfile[]> => { | ||||
|   let fileTree = await plugins.smartfile.fs.listFileTree(paths.cwd, 'Dockerfile*'); | ||||
|   const fileTree = await plugins.smartfile.fs.listFileTree(paths.cwd, 'Dockerfile*'); | ||||
|  | ||||
|   // create the Dockerfile array | ||||
|   let readDockerfilesArray: Dockerfile[] = []; | ||||
|   plugins.beautylog.info(`found ${fileTree.length} Dockerfiles:`); | ||||
|   const readDockerfilesArray: Dockerfile[] = []; | ||||
|   logger.log('info', `found ${fileTree.length} Dockerfiles:`); | ||||
|   console.log(fileTree); | ||||
|   for (let dockerfilePath of fileTree) { | ||||
|     let myDockerfile = new Dockerfile({ | ||||
|   for (const dockerfilePath of fileTree) { | ||||
|     const myDockerfile = new Dockerfile({ | ||||
|       filePath: dockerfilePath, | ||||
|       read: true | ||||
|     }); | ||||
| @@ -34,14 +35,14 @@ export let readDockerfiles = async (): Promise<Dockerfile[]> => { | ||||
|  * @returns Promise<Dockerfile[]> | ||||
|  */ | ||||
| export let sortDockerfiles = (sortableArrayArg: Dockerfile[]): Promise<Dockerfile[]> => { | ||||
|   let done = plugins.smartpromise.defer<Dockerfile[]>(); | ||||
|   plugins.beautylog.info('sorting Dockerfiles:'); | ||||
|   let sortedArray: Dockerfile[] = []; | ||||
|   let cleanTagsOriginal = cleanTagsArrayFunction(sortableArrayArg, sortedArray); | ||||
|   const done = plugins.smartpromise.defer<Dockerfile[]>(); | ||||
|   logger.log('info', 'sorting Dockerfiles:'); | ||||
|   const sortedArray: Dockerfile[] = []; | ||||
|   const cleanTagsOriginal = cleanTagsArrayFunction(sortableArrayArg, sortedArray); | ||||
|   let sorterFunctionCounter: number = 0; | ||||
|   let sorterFunction = function() { | ||||
|   const sorterFunction = () => { | ||||
|     sortableArrayArg.forEach(dockerfileArg => { | ||||
|       let cleanTags = cleanTagsArrayFunction(sortableArrayArg, sortedArray); | ||||
|       const cleanTags = cleanTagsArrayFunction(sortableArrayArg, sortedArray); | ||||
|       if ( | ||||
|         cleanTags.indexOf(dockerfileArg.baseImage) === -1 && | ||||
|         sortedArray.indexOf(dockerfileArg) === -1 | ||||
| @@ -54,8 +55,8 @@ export let sortDockerfiles = (sortableArrayArg: Dockerfile[]): Promise<Dockerfil | ||||
|     }); | ||||
|     if (sortableArrayArg.length === sortedArray.length) { | ||||
|       let counter = 1; | ||||
|       for (let dockerfile of sortedArray) { | ||||
|         plugins.beautylog.log(`tag ${counter}: -> ${dockerfile.cleanTag}`); | ||||
|       for (const dockerfile of sortedArray) { | ||||
|         logger.log('info', `tag ${counter}: -> ${dockerfile.cleanTag}`); | ||||
|         counter++; | ||||
|       } | ||||
|       done.resolve(sortedArray); | ||||
| @@ -88,7 +89,7 @@ export let mapDockerfiles = async (sortedArray: Dockerfile[]): Promise<Dockerfil | ||||
|  * builds the correspoding real docker image for each Dockerfile class instance | ||||
|  */ | ||||
| export let buildDockerfiles = async (sortedArrayArg: Dockerfile[]) => { | ||||
|   for (let dockerfileArg of sortedArrayArg) { | ||||
|   for (const dockerfileArg of sortedArrayArg) { | ||||
|     await dockerfileArg.build(); | ||||
|   } | ||||
|   return sortedArrayArg; | ||||
| @@ -99,7 +100,7 @@ export let buildDockerfiles = async (sortedArrayArg: Dockerfile[]) => { | ||||
|  * @param sortedArrayArg Dockerfile[] that contains all Dockerfiles in cwd | ||||
|  */ | ||||
| export let testDockerfiles = async (sortedArrayArg: Dockerfile[]) => { | ||||
|   for (let dockerfileArg of sortedArrayArg) { | ||||
|   for (const dockerfileArg of sortedArrayArg) { | ||||
|     await dockerfileArg.test(); | ||||
|   } | ||||
|   return sortedArrayArg; | ||||
| @@ -111,8 +112,8 @@ export let testDockerfiles = async (sortedArrayArg: Dockerfile[]) => { | ||||
|  */ | ||||
| export let dockerFileVersion = (dockerfileNameArg: string): string => { | ||||
|   let versionString: string; | ||||
|   let versionRegex = /Dockerfile_([a-zA-Z0-9\.]*)$/; | ||||
|   let regexResultArray = versionRegex.exec(dockerfileNameArg); | ||||
|   const versionRegex = /Dockerfile_([a-zA-Z0-9\.]*)$/; | ||||
|   const regexResultArray = versionRegex.exec(dockerfileNameArg); | ||||
|   if (regexResultArray && regexResultArray.length === 2) { | ||||
|     versionString = regexResultArray[1]; | ||||
|   } else { | ||||
| @@ -124,9 +125,9 @@ export let dockerFileVersion = (dockerfileNameArg: string): string => { | ||||
| /** | ||||
|  * returns the docker base image for a Dockerfile | ||||
|  */ | ||||
| export let dockerBaseImage = function(dockerfileContentArg: string) { | ||||
|   let baseImageRegex = /FROM\s([a-zA-z0-9\/\-\:]*)\n?/; | ||||
|   let regexResultArray = baseImageRegex.exec(dockerfileContentArg); | ||||
| export let dockerBaseImage = (dockerfileContentArg: string) => { | ||||
|   const baseImageRegex = /FROM\s([a-zA-z0-9\/\-\:]*)\n?/; | ||||
|   const regexResultArray = baseImageRegex.exec(dockerfileContentArg); | ||||
|   return regexResultArray[1]; | ||||
| }; | ||||
|  | ||||
| @@ -140,8 +141,8 @@ export let getDockerTagString = ( | ||||
|   suffixArg?: string | ||||
| ): string => { | ||||
|   // determine wether the repo should be mapped accordingly to the registry | ||||
|   let mappedRepo = NpmciConfig.configObject.dockerRegistryRepoMap[registryArg]; | ||||
|   let repo = (() => { | ||||
|   const mappedRepo = NpmciConfig.configObject.dockerRegistryRepoMap[registryArg]; | ||||
|   const repo = (() => { | ||||
|     if (mappedRepo) { | ||||
|       return mappedRepo; | ||||
|     } else { | ||||
| @@ -155,15 +156,15 @@ export let getDockerTagString = ( | ||||
|     version = versionArg + '_' + suffixArg; | ||||
|   } | ||||
|  | ||||
|   let tagString = `${registryArg}/${repo}:${version}`; | ||||
|   const tagString = `${registryArg}/${repo}:${version}`; | ||||
|   return tagString; | ||||
| }; | ||||
|  | ||||
| export let getDockerBuildArgs = async (): Promise<string> => { | ||||
|   plugins.beautylog.info('checking for env vars to be supplied to the docker build'); | ||||
|   logger.log('info', 'checking for env vars to be supplied to the docker build'); | ||||
|   let buildArgsString: string = ''; | ||||
|   for (let key in NpmciConfig.configObject.dockerBuildargEnvMap) { | ||||
|     let targetValue = process.env[NpmciConfig.configObject.dockerBuildargEnvMap[key]]; | ||||
|   for (const key in NpmciConfig.configObject.dockerBuildargEnvMap) { | ||||
|     const targetValue = process.env[NpmciConfig.configObject.dockerBuildargEnvMap[key]]; | ||||
|     buildArgsString = `${buildArgsString} --build-arg ${key}=${targetValue}`; | ||||
|   } | ||||
|   return buildArgsString; | ||||
| @@ -172,12 +173,12 @@ export let getDockerBuildArgs = async (): Promise<string> => { | ||||
| /** | ||||
|  * | ||||
|  */ | ||||
| export let cleanTagsArrayFunction = function( | ||||
| export let cleanTagsArrayFunction = ( | ||||
|   dockerfileArrayArg: Dockerfile[], | ||||
|   trackingArrayArg: Dockerfile[] | ||||
| ): string[] { | ||||
|   let cleanTagsArray: string[] = []; | ||||
|   dockerfileArrayArg.forEach(function(dockerfileArg) { | ||||
| ): string[] => { | ||||
|   const cleanTagsArray: string[] = []; | ||||
|   dockerfileArrayArg.forEach(dockerfileArg => { | ||||
|     if (trackingArrayArg.indexOf(dockerfileArg) === -1) { | ||||
|       cleanTagsArray.push(dockerfileArg.cleanTag); | ||||
|     } | ||||
|   | ||||
| @@ -1,3 +1,4 @@ | ||||
| import { logger } from '../npmci.logging'; | ||||
| import * as plugins from './mod.plugins'; | ||||
| import { bash } from '../npmci.bash'; | ||||
| import { repo } from '../npmci.env'; | ||||
| @@ -8,38 +9,36 @@ import { repo } from '../npmci.env'; | ||||
|  */ | ||||
| export let handleCli = async argvArg => { | ||||
|   if (argvArg._.length >= 2) { | ||||
|     let action: string = argvArg._[1]; | ||||
|     const action: string = argvArg._[1]; | ||||
|     switch (action) { | ||||
|       case 'mirror': | ||||
|         await mirror(); | ||||
|         break; | ||||
|       default: | ||||
|         plugins.beautylog.error(`>>npmci git ...<< action >>${action}<< not supported`); | ||||
|         logger.log('error', `>>npmci git ...<< action >>${action}<< not supported`); | ||||
|     } | ||||
|   } else { | ||||
|     plugins.beautylog.log( | ||||
|       `>>npmci git ...<< cli arguments invalid... Please read the documentation.` | ||||
|     ); | ||||
|     logger.log('info', `>>npmci git ...<< cli arguments invalid... Please read the documentation.`); | ||||
|   } | ||||
| }; | ||||
|  | ||||
| export let mirror = async () => { | ||||
|   let githubToken = process.env.NPMCI_GIT_GITHUBTOKEN; | ||||
|   let githubUser = process.env.NPMCI_GIT_GITHUBGROUP || repo.user; | ||||
|   let githubRepo = process.env.NPMCI_GIT_GITHUB || repo.repo; | ||||
|   const githubToken = process.env.NPMCI_GIT_GITHUBTOKEN; | ||||
|   const githubUser = process.env.NPMCI_GIT_GITHUBGROUP || repo.user; | ||||
|   const githubRepo = process.env.NPMCI_GIT_GITHUB || repo.repo; | ||||
|   if (githubToken) { | ||||
|     plugins.beautylog.info('found github token.'); | ||||
|     plugins.beautylog.log('attempting the mirror the repository to GitHub'); | ||||
|     logger.log('info', 'found github token.'); | ||||
|     logger.log('info', 'attempting the mirror the repository to GitHub'); | ||||
|     // add the mirror | ||||
|     await bash( | ||||
|       `git remote add mirror https://${githubToken}@github.com/${githubUser}/${githubRepo}.git` | ||||
|     ); | ||||
|     await bash(`git push mirror --all`); | ||||
|     plugins.beautylog.ok('pushed all branches to mirror!'); | ||||
|     logger.log('ok', 'pushed all branches to mirror!'); | ||||
|     await bash(`git push mirror --tags`); | ||||
|     plugins.beautylog.ok('pushed all tags to mirror!'); | ||||
|     logger.log('ok', 'pushed all tags to mirror!'); | ||||
|   } else { | ||||
|     plugins.beautylog.error(`cannot find NPMCI_GIT_GITHUBTOKEN env var!`); | ||||
|     logger.log('error', `cannot find NPMCI_GIT_GITHUBTOKEN env var!`); | ||||
|     process.exit(1); | ||||
|   } | ||||
| }; | ||||
|   | ||||
| @@ -1,3 +1,4 @@ | ||||
| import { logger } from '../npmci.logging'; | ||||
| import * as plugins from '../npmci.plugins'; | ||||
| import * as paths from '../npmci.paths'; | ||||
| import * as npmciConfig from '../npmci.config'; | ||||
| @@ -9,17 +10,18 @@ import { bash, bashNoError, nvmAvailable } from '../npmci.bash'; | ||||
|  */ | ||||
| export let handleCli = async argvArg => { | ||||
|   if (argvArg._.length >= 3) { | ||||
|     let action: string = argvArg._[1]; | ||||
|     const action: string = argvArg._[1]; | ||||
|     switch (action) { | ||||
|       case 'install': | ||||
|         await install(argvArg._[2]); | ||||
|         break; | ||||
|       default: | ||||
|         plugins.beautylog.error(`>>npmci node ...<< action >>${action}<< not supported`); | ||||
|         logger.log('error', `>>npmci node ...<< action >>${action}<< not supported`); | ||||
|         process.exit(1); | ||||
|     } | ||||
|   } else { | ||||
|     plugins.beautylog.error( | ||||
|     logger.log( | ||||
|       'error', | ||||
|       `>>npmci node ...<< cli arguments invalid... Please read the documentation.` | ||||
|     ); | ||||
|     process.exit(1); | ||||
| @@ -31,40 +33,40 @@ export let handleCli = async argvArg => { | ||||
|  * @param versionArg | ||||
|  */ | ||||
| export let install = async versionArg => { | ||||
|   plugins.beautylog.log(`now installing node version ${versionArg}`); | ||||
|   logger.log('info', `now installing node version ${versionArg}`); | ||||
|   let version: string; | ||||
|   if (versionArg === 'stable') { | ||||
|     version = '10'; | ||||
|     version = '11'; | ||||
|   } else if (versionArg === 'lts') { | ||||
|     version = '8'; | ||||
|     version = '10'; | ||||
|   } else if (versionArg === 'legacy') { | ||||
|     version = '9'; | ||||
|     version = '8'; | ||||
|   } else { | ||||
|     version = versionArg; | ||||
|   } | ||||
|   if (await nvmAvailable.promise) { | ||||
|     await bash(`nvm install ${version} && nvm alias default ${version}`); | ||||
|     plugins.beautylog.success(`Node version ${version} successfully installed!`); | ||||
|     logger.log('success', `Node version ${version} successfully installed!`); | ||||
|   } else { | ||||
|     plugins.beautylog.warn('Nvm not in path so staying at installed node version!'); | ||||
|     logger.log('warn', 'Nvm not in path so staying at installed node version!'); | ||||
|   } | ||||
|   await bash('node -v'); | ||||
|   await bash('npm -v'); | ||||
|   await bash(`npm config set cache ${paths.NpmciCacheDir}  --global `); | ||||
|   // lets look for further config | ||||
|   await npmciConfig.getConfig().then(async configArg => { | ||||
|     plugins.beautylog.log('Now checking for needed global npm tools...'); | ||||
|     for (let npmTool of configArg.npmGlobalTools) { | ||||
|       plugins.beautylog.info(`Checking for global "${npmTool}"`); | ||||
|       let whichOutput: string = await bashNoError(`which ${npmTool}`); | ||||
|       let toolAvailable: boolean = !(/not\sfound/.test(whichOutput) || whichOutput === ''); | ||||
|     logger.log('info', 'Now checking for needed global npm tools...'); | ||||
|     for (const npmTool of configArg.npmGlobalTools) { | ||||
|       logger.log('info', `Checking for global "${npmTool}"`); | ||||
|       const whichOutput: string = await bashNoError(`which ${npmTool}`); | ||||
|       const toolAvailable: boolean = !(/not\sfound/.test(whichOutput) || whichOutput === ''); | ||||
|       if (toolAvailable) { | ||||
|         plugins.beautylog.log(`Tool ${npmTool} is available`); | ||||
|         logger.log('info', `Tool ${npmTool} is available`); | ||||
|       } else { | ||||
|         plugins.beautylog.info(`globally installing ${npmTool} from npm`); | ||||
|         logger.log('info', `globally installing ${npmTool} from npm`); | ||||
|         await bash(`npm install ${npmTool} -q -g`); | ||||
|       } | ||||
|     } | ||||
|     plugins.beautylog.success('all global npm tools specified in npmextra.json are now available!'); | ||||
|     logger.log('success', 'all global npm tools specified in npmextra.json are now available!'); | ||||
|   }); | ||||
| }; | ||||
|   | ||||
| @@ -1,3 +1,4 @@ | ||||
| import { logger } from '../npmci.logging'; | ||||
| import * as plugins from './mod.plugins'; | ||||
| import * as configModule from '../npmci.config'; | ||||
| import { bash, bashNoError, nvmAvailable } from '../npmci.bash'; | ||||
| @@ -8,7 +9,7 @@ import { bash, bashNoError, nvmAvailable } from '../npmci.bash'; | ||||
|  */ | ||||
| export let handleCli = async argvArg => { | ||||
|   if (argvArg._.length >= 2) { | ||||
|     let action: string = argvArg._[1]; | ||||
|     const action: string = argvArg._[1]; | ||||
|     switch (action) { | ||||
|       case 'install': | ||||
|         await install(); | ||||
| @@ -23,13 +24,11 @@ export let handleCli = async argvArg => { | ||||
|         await publish(); | ||||
|         break; | ||||
|       default: | ||||
|         plugins.beautylog.error(`>>npmci npm ...<< action >>${action}<< not supported`); | ||||
|         logger.log('error', `>>npmci npm ...<< action >>${action}<< not supported`); | ||||
|         process.exit(1); | ||||
|     } | ||||
|   } else { | ||||
|     plugins.beautylog.log( | ||||
|       `>>npmci npm ...<< cli arguments invalid... Please read the documentation.` | ||||
|     ); | ||||
|     logger.log('info', `>>npmci npm ...<< cli arguments invalid... Please read the documentation.`); | ||||
|     process.exit(1); | ||||
|   } | ||||
| }; | ||||
| @@ -37,16 +36,26 @@ export let handleCli = async argvArg => { | ||||
| /** | ||||
|  * authenticates npm with token from env var | ||||
|  */ | ||||
| let prepare = async () => { | ||||
|   let npmrcPrefix: string = '//registry.npmjs.org/:_authToken='; | ||||
|   let npmToken: string = process.env.NPMCI_TOKEN_NPM; | ||||
|   let npmrcFileString: string = npmrcPrefix + npmToken; | ||||
|   if (npmToken) { | ||||
|     plugins.beautylog.info('found access token'); | ||||
| const prepare = async () => { | ||||
|   const config = await configModule.getConfig(); | ||||
|   let npmrcFileString: string = ''; | ||||
|   plugins.smartparam.forEachMinimatch(process.env, 'NPMCI_TOKEN_NPM*', npmEnvArg => { | ||||
|     const npmRegistryUrl = npmEnvArg.split('|')[0]; | ||||
|     const npmToken = npmEnvArg.split('|')[1]; | ||||
|     npmrcFileString += `//${npmRegistryUrl}/:_authToken="${plugins.smartstring.base64.decode(npmToken)}"\n`; | ||||
|   }); | ||||
|   logger.log('info', `setting default npm registry to ${config.npmRegistryUrl}`); | ||||
|   npmrcFileString += `registry=https://${config.npmRegistryUrl}\n`; | ||||
|  | ||||
|   // final check | ||||
|   if (npmrcFileString.length > 0) { | ||||
|     logger.log('info', 'found one or more access tokens'); | ||||
|   } else { | ||||
|     plugins.beautylog.error('no access token found! Exiting!'); | ||||
|     logger.log('error', 'no access token found! Exiting!'); | ||||
|     process.exit(1); | ||||
|   } | ||||
|  | ||||
|   // lets save it to disk | ||||
|   plugins.smartfile.memory.toFsSync(npmrcFileString, '/root/.npmrc'); | ||||
|   return; | ||||
| }; | ||||
| @@ -54,8 +63,9 @@ let prepare = async () => { | ||||
| /** | ||||
|  * publish a package to npm | ||||
|  */ | ||||
| let publish = async () => { | ||||
| const publish = async () => { | ||||
|   let npmAccessCliString = ``; | ||||
|   let npmRegistryCliString = ``; | ||||
|   const config = await configModule.getConfig(); | ||||
|  | ||||
|   // -> configure package access level | ||||
| @@ -66,8 +76,16 @@ let publish = async () => { | ||||
|     npmAccessCliString = `--access=${config.npmAccessLevel}`; | ||||
|   } | ||||
|  | ||||
|   // -> configure registry url | ||||
|   if (config.npmRegistryUrl) { | ||||
|     npmAccessCliString = `--registry=https://${config.npmRegistryUrl}`; | ||||
|   } else { | ||||
|     logger.log('error', `no registry url specified. Can't publish!`); | ||||
|     process.exit(1); | ||||
|   } | ||||
|  | ||||
|   // -> preparing | ||||
|   plugins.beautylog.log(`now preparing environment:`); | ||||
|   logger.log('info', `now preparing environment:`); | ||||
|   prepare(); | ||||
|   await bash(`npm -v`); | ||||
|  | ||||
| @@ -75,26 +93,26 @@ let publish = async () => { | ||||
|   await bash(`npm install`); | ||||
|   await bash(`npm run build`); | ||||
|  | ||||
|   plugins.beautylog.success(`Nice!!! The build for the publication was successfull!`); | ||||
|   plugins.beautylog.log(`Lets clean up so we don't publish any packages that don't belong to us:`); | ||||
|   logger.log('success', `Nice!!! The build for the publication was successfull!`); | ||||
|   logger.log('info', `Lets clean up so we don't publish any packages that don't belong to us:`); | ||||
|   // -> clean up before we publish stuff | ||||
|   await bashNoError(`rm -r ./.npmci_cache`); | ||||
|   await bash(`rm -r ./node_modules`); | ||||
|  | ||||
|   plugins.beautylog.success(`Cleaned up!:`); | ||||
|   logger.log('success', `Cleaned up!:`); | ||||
|  | ||||
|   // -> publish it | ||||
|   plugins.beautylog.log(`now invoking npm to publish the package!`); | ||||
|   await bash(`npm publish ${npmAccessCliString}`); | ||||
|   plugins.beautylog.success(`Package was successfully published!`); | ||||
|   logger.log('info', `now invoking npm to publish the package!`); | ||||
|   await bash(`npm publish ${npmAccessCliString} ${npmRegistryCliString}`); | ||||
|   logger.log('success', `Package was successfully published!`); | ||||
| }; | ||||
|  | ||||
| let install = async (): Promise<void> => { | ||||
|   plugins.beautylog.info('now installing dependencies:'); | ||||
| const install = async (): Promise<void> => { | ||||
|   logger.log('info', 'now installing dependencies:'); | ||||
|   await bash('npm install'); | ||||
| }; | ||||
|  | ||||
| export let test = async (): Promise<void> => { | ||||
|   plugins.beautylog.info('now starting tests:'); | ||||
|   logger.log('info', 'now starting tests:'); | ||||
|   await bash('npm test'); | ||||
| }; | ||||
|   | ||||
| @@ -1,19 +1,20 @@ | ||||
| import { logger } from '../npmci.logging'; | ||||
| import * as plugins from './mod.plugins'; | ||||
| let sshInstance: plugins.smartssh.SshInstance; | ||||
|  | ||||
| export let handleCli = async argvArg => { | ||||
|   if (argvArg._.length >= 2) { | ||||
|     let action: string = argvArg._[1]; | ||||
|     const action: string = argvArg._[1]; | ||||
|     switch (action) { | ||||
|       case 'prepare': | ||||
|         await prepare(); | ||||
|         break; | ||||
|       default: | ||||
|         plugins.beautylog.error(`action >>${action}<< not supported`); | ||||
|         logger.log('error', `action >>${action}<< not supported`); | ||||
|         process.exit(1); | ||||
|     } | ||||
|   } else { | ||||
|     plugins.beautylog.error(`>>npmci ssh ...<< please specify an action!`); | ||||
|     logger.log('error', `>>npmci ssh ...<< please specify an action!`); | ||||
|     process.exit(1); | ||||
|   } | ||||
| }; | ||||
| @@ -21,7 +22,7 @@ export let handleCli = async argvArg => { | ||||
| /** | ||||
|  * checks if not undefined | ||||
|  */ | ||||
| let notUndefined = (stringArg: string) => { | ||||
| const notUndefined = (stringArg: string) => { | ||||
|   return stringArg && stringArg !== 'undefined' && stringArg !== '##'; | ||||
| }; | ||||
|  | ||||
| @@ -34,27 +35,27 @@ export let prepare = async () => { | ||||
|   if (!process.env.NPMTS_TEST) { | ||||
|     sshInstance.writeToDisk(); | ||||
|   } else { | ||||
|     plugins.beautylog.log('In test mode, so not storing SSH keys to disk!'); | ||||
|     logger.log('info', 'In test mode, so not storing SSH keys to disk!'); | ||||
|   } | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * gets called for each found SSH ENV Var and deploys it | ||||
|  */ | ||||
| let evaluateSshEnv = async (sshkeyEnvVarArg: string) => { | ||||
|   let sshEnvArray = sshkeyEnvVarArg.split('|'); | ||||
|   let sshKey = new plugins.smartssh.SshKey(); | ||||
|   plugins.beautylog.info('Found SSH identity for ' + sshEnvArray[1]); | ||||
| const evaluateSshEnv = async (sshkeyEnvVarArg: string) => { | ||||
|   const sshEnvArray = sshkeyEnvVarArg.split('|'); | ||||
|   const sshKey = new plugins.smartssh.SshKey(); | ||||
|   logger.log('info', 'Found SSH identity for ' + sshEnvArray[1]); | ||||
|   if (notUndefined(sshEnvArray[0])) { | ||||
|     plugins.beautylog.log('---> host defined!'); | ||||
|     logger.log('info', '---> host defined!'); | ||||
|     sshKey.host = sshEnvArray[0]; | ||||
|   } | ||||
|   if (notUndefined(sshEnvArray[1])) { | ||||
|     plugins.beautylog.log('---> privKey defined!'); | ||||
|     logger.log('info', '---> privKey defined!'); | ||||
|     sshKey.privKeyBase64 = sshEnvArray[1]; | ||||
|   } | ||||
|   if (notUndefined(sshEnvArray[2])) { | ||||
|     plugins.beautylog.log('---> pubKey defined!'); | ||||
|     logger.log('info', '---> pubKey defined!'); | ||||
|     sshKey.pubKeyBase64 = sshEnvArray[2]; | ||||
|   } | ||||
|  | ||||
|   | ||||
| @@ -1,28 +1,29 @@ | ||||
| import * as plugins from './mod.plugins'; | ||||
| import { bash } from '../npmci.bash'; | ||||
| import { logger } from '../npmci.logging'; | ||||
|  | ||||
| let triggerValueRegex = /^([a-zA-Z0-9\.]*)\|([a-zA-Z0-9\.]*)\|([a-zA-Z0-9\.]*)\|([a-zA-Z0-9\.]*)\|?([a-zA-Z0-9\.\-\/]*)/; | ||||
| const triggerValueRegex = /^([a-zA-Z0-9\.]*)\|([a-zA-Z0-9\.]*)\|([a-zA-Z0-9\.]*)\|([a-zA-Z0-9\.]*)\|?([a-zA-Z0-9\.\-\/]*)/; | ||||
|  | ||||
| export let trigger = async () => { | ||||
|   plugins.beautylog.info('now running triggers'); | ||||
|   logger.log('info', 'now running triggers'); | ||||
|   plugins.smartparam.forEachMinimatch(process.env, 'NPMCI_TRIGGER_*', evaluateTrigger); | ||||
| }; | ||||
|  | ||||
| let evaluateTrigger = async triggerEnvVarArg => { | ||||
|   let triggerRegexResultArray = triggerValueRegex.exec(triggerEnvVarArg); | ||||
|   let regexDomain = triggerRegexResultArray[1]; | ||||
|   let regexProjectId = triggerRegexResultArray[2]; | ||||
|   let regexProjectTriggerToken = triggerRegexResultArray[3]; | ||||
|   let regexRefName = triggerRegexResultArray[4]; | ||||
| const evaluateTrigger = async triggerEnvVarArg => { | ||||
|   const triggerRegexResultArray = triggerValueRegex.exec(triggerEnvVarArg); | ||||
|   const regexDomain = triggerRegexResultArray[1]; | ||||
|   const regexProjectId = triggerRegexResultArray[2]; | ||||
|   const regexProjectTriggerToken = triggerRegexResultArray[3]; | ||||
|   const regexRefName = triggerRegexResultArray[4]; | ||||
|   let regexTriggerName; | ||||
|   if (triggerRegexResultArray.length === 6) { | ||||
|     regexTriggerName = triggerRegexResultArray[5]; | ||||
|   } else { | ||||
|     regexTriggerName = 'Unnamed Trigger'; | ||||
|   } | ||||
|   plugins.beautylog.info('Found Trigger!'); | ||||
|   plugins.beautylog.log('triggering build for ref ' + regexRefName + ' of ' + regexTriggerName); | ||||
|   plugins.request.postFormData( | ||||
|   logger.log('info', 'Found Trigger!'); | ||||
|   logger.log('info', 'triggering build for ref ' + regexRefName + ' of ' + regexTriggerName); | ||||
|   plugins.smartrequest.postFormData( | ||||
|     'https://gitlab.com/api/v3/projects/' + regexProjectId + '/trigger/builds', | ||||
|     {}, | ||||
|     [ | ||||
|   | ||||
| @@ -1,3 +1,4 @@ | ||||
| import { logger } from './npmci.logging'; | ||||
| import * as plugins from './npmci.plugins'; | ||||
| import * as paths from './npmci.paths'; | ||||
|  | ||||
| @@ -10,7 +11,7 @@ export let nvmAvailable = smartpromise.defer<boolean>(); | ||||
| /** | ||||
|  * the smartshell instance for npmci | ||||
|  */ | ||||
| let npmciSmartshell = new plugins.smartshell.Smartshell({ | ||||
| const npmciSmartshell = new plugins.smartshell.Smartshell({ | ||||
|   executor: 'bash', | ||||
|   sourceFilePaths: [] | ||||
| }); | ||||
| @@ -18,7 +19,7 @@ let npmciSmartshell = new plugins.smartshell.Smartshell({ | ||||
| /** | ||||
|  * check for tools. | ||||
|  */ | ||||
| let checkToolsAvailable = async () => { | ||||
| const checkToolsAvailable = async () => { | ||||
|   // check for nvm | ||||
|   if (!process.env.NPMTS_TEST) { | ||||
|     if ( | ||||
| @@ -68,21 +69,19 @@ export let bash = async (commandArg: string, retryArg: number = 2): Promise<stri | ||||
|       if (execResult.exitCode !== 0 && i === retryArg) { | ||||
|         // something went wrong and retries are exhausted | ||||
|         if (failOnError) { | ||||
|           plugins.beautylog.error('something went wrong and retries are exhausted'); | ||||
|           logger.log('error', 'something went wrong and retries are exhausted'); | ||||
|           process.exit(1); | ||||
|         } | ||||
|       } else if (execResult.exitCode === 0) { | ||||
|         // everything went fine, or no error wanted | ||||
|         i = retryArg + 1; // retry +1 breaks for loop, if everything works out ok retrials are not wanted | ||||
|       } else { | ||||
|         plugins.beautylog.warn( | ||||
|           'Something went wrong! Exit Code: ' + execResult.exitCode.toString() | ||||
|         ); | ||||
|         plugins.beautylog.info('Retry ' + (i + 1).toString() + ' of ' + retryArg.toString()); | ||||
|         logger.log('warn', 'Something went wrong! Exit Code: ' + execResult.exitCode.toString()); | ||||
|         logger.log('info', 'Retry ' + (i + 1).toString() + ' of ' + retryArg.toString()); | ||||
|       } | ||||
|     } | ||||
|   } else { | ||||
|     plugins.beautylog.log('ShellExec would be: ' + commandArg); | ||||
|     logger.log('info', 'ShellExec would be: ' + commandArg); | ||||
|     execResult = { | ||||
|       exitCode: 0, | ||||
|       stdout: 'testOutput' | ||||
|   | ||||
| @@ -1,11 +1,12 @@ | ||||
| import { logger } from './npmci.logging'; | ||||
| import * as plugins from './npmci.plugins'; | ||||
| import * as paths from './npmci.paths'; | ||||
| import * as npmciMonitor from './npmci.monitor'; | ||||
| npmciMonitor.run(); | ||||
|  | ||||
| // Get Info about npmci itself | ||||
| let npmciInfo = new plugins.projectinfo.ProjectinfoNpm(paths.NpmciPackageRoot); | ||||
| plugins.beautylog.log('npmci version: ' + npmciInfo.version); | ||||
| const npmciInfo = new plugins.projectinfo.ProjectinfoNpm(paths.NpmciPackageRoot); | ||||
| logger.log('info', 'npmci version: ' + npmciInfo.version); | ||||
|  | ||||
| import * as NpmciEnv from './npmci.env'; | ||||
|  | ||||
| @@ -15,7 +16,7 @@ npmciSmartcli.addVersion(npmciInfo.version); | ||||
| // clean | ||||
| npmciSmartcli.addCommand('clean').subscribe( | ||||
|   async argv => { | ||||
|     let modClean = await import('./mod_clean/index'); | ||||
|     const modClean = await import('./mod_clean/index'); | ||||
|     await modClean.clean(); | ||||
|   }, | ||||
|   err => { | ||||
| @@ -27,7 +28,7 @@ npmciSmartcli.addCommand('clean').subscribe( | ||||
| // command | ||||
| npmciSmartcli.addCommand('command').subscribe( | ||||
|   async argv => { | ||||
|     let modCommand = await import('./mod_command/index'); | ||||
|     const modCommand = await import('./mod_command/index'); | ||||
|     await modCommand.command(); | ||||
|   }, | ||||
|   err => { | ||||
| @@ -39,7 +40,7 @@ npmciSmartcli.addCommand('command').subscribe( | ||||
| // command | ||||
| npmciSmartcli.addCommand('git').subscribe( | ||||
|   async argvArg => { | ||||
|     let modGit = await import('./mod_git/index'); | ||||
|     const modGit = await import('./mod_git/index'); | ||||
|     await modGit.handleCli(argvArg); | ||||
|   }, | ||||
|   err => { | ||||
| @@ -51,7 +52,7 @@ npmciSmartcli.addCommand('git').subscribe( | ||||
| // build | ||||
| npmciSmartcli.addCommand('docker').subscribe( | ||||
|   async argvArg => { | ||||
|     let modDocker = await import('./mod_docker/index'); | ||||
|     const modDocker = await import('./mod_docker/index'); | ||||
|     await modDocker.handleCli(argvArg); | ||||
|   }, | ||||
|   err => { | ||||
| @@ -63,7 +64,7 @@ npmciSmartcli.addCommand('docker').subscribe( | ||||
| // node | ||||
| npmciSmartcli.addCommand('node').subscribe( | ||||
|   async argvArg => { | ||||
|     let modNode = await import('./mod_node/index'); | ||||
|     const modNode = await import('./mod_node/index'); | ||||
|     await modNode.handleCli(argvArg); | ||||
|   }, | ||||
|   err => { | ||||
| @@ -75,7 +76,7 @@ npmciSmartcli.addCommand('node').subscribe( | ||||
| // npm | ||||
| npmciSmartcli.addCommand('npm').subscribe( | ||||
|   async argvArg => { | ||||
|     let modNpm = await import('./mod_npm/index'); | ||||
|     const modNpm = await import('./mod_npm/index'); | ||||
|     await modNpm.handleCli(argvArg); | ||||
|   }, | ||||
|   err => { | ||||
| @@ -86,7 +87,7 @@ npmciSmartcli.addCommand('npm').subscribe( | ||||
| // trigger | ||||
| npmciSmartcli.addCommand('ssh').subscribe( | ||||
|   async argvArg => { | ||||
|     let modSsh = await import('./mod_ssh/index'); | ||||
|     const modSsh = await import('./mod_ssh/index'); | ||||
|     await modSsh.handleCli(argvArg); | ||||
|   }, | ||||
|   err => { | ||||
| @@ -98,7 +99,7 @@ npmciSmartcli.addCommand('ssh').subscribe( | ||||
| // trigger | ||||
| npmciSmartcli.addCommand('trigger').subscribe( | ||||
|   async argv => { | ||||
|     let modTrigger = await import('./mod_trigger/index'); | ||||
|     const modTrigger = await import('./mod_trigger/index'); | ||||
|     await modTrigger.trigger(); | ||||
|   }, | ||||
|   err => { | ||||
|   | ||||
| @@ -1,5 +1,3 @@ | ||||
| import * as q from 'q'; | ||||
|  | ||||
| import * as plugins from './npmci.plugins'; | ||||
| import * as paths from './npmci.paths'; | ||||
|  | ||||
| @@ -10,6 +8,7 @@ import { KeyValueStore } from '@pushrocks/npmextra'; | ||||
| export interface INpmciOptions { | ||||
|   npmGlobalTools: string[]; | ||||
|   npmAccessLevel?: 'private' | 'public'; | ||||
|   npmRegistryUrl?: string; | ||||
|   dockerRegistryRepoMap: any; | ||||
|   dockerBuildargEnvMap: any; | ||||
| } | ||||
| @@ -18,8 +17,8 @@ export interface INpmciOptions { | ||||
| export let kvStorage = new KeyValueStore('custom', `${repo.user}_${repo.repo}`); | ||||
|  | ||||
| // handle config retrival | ||||
| let npmciNpmextra = new plugins.npmextra.Npmextra(paths.cwd); | ||||
| let defaultConfig: INpmciOptions = { | ||||
| const npmciNpmextra = new plugins.npmextra.Npmextra(paths.cwd); | ||||
| const defaultConfig: INpmciOptions = { | ||||
|   npmGlobalTools: [], | ||||
|   dockerRegistryRepoMap: {}, | ||||
|   dockerBuildargEnvMap: {} | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| import * as plugins from './npmci.plugins'; | ||||
| import * as paths from './npmci.paths'; | ||||
| import { GitRepo } from 'smartstring'; | ||||
| import { GitRepo } from '@pushrocks/smartstring'; | ||||
| import { Dockerfile } from './mod_docker/index'; | ||||
|  | ||||
| /** | ||||
|   | ||||
							
								
								
									
										14
									
								
								ts/npmci.logging.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								ts/npmci.logging.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| import * as plugins from './npmci.plugins'; | ||||
|  | ||||
| export const logger = new plugins.smartlog.Smartlog({ | ||||
|   logContext: { | ||||
|     company: 'Some Company', | ||||
|     companyunit: 'Some Unit', | ||||
|     containerName: 'Some ContainerName', | ||||
|     environment: 'test', | ||||
|     runtime: 'node', | ||||
|     zone: 'Some Zone' | ||||
|   } | ||||
| }); | ||||
|  | ||||
| logger.addLogDestination(new plugins.smartlogDestinationLocal.DestinationLocal()); | ||||
| @@ -1,3 +1,4 @@ | ||||
| import { logger } from './npmci.logging'; | ||||
| import * as plugins from './npmci.plugins'; | ||||
| import * as env from './npmci.env'; | ||||
|  | ||||
| @@ -17,6 +18,6 @@ export let run = async () => { | ||||
|       repo: env.repo.repo | ||||
|     }) | ||||
|     .catch(err => { | ||||
|       plugins.beautylog.warn('Lossless Analytics API not available...'); | ||||
|       logger.log('warn', 'Lossless Analytics API not available...'); | ||||
|     }); | ||||
| }; | ||||
|   | ||||
| @@ -1,21 +1,43 @@ | ||||
| // node native | ||||
| export import path = require('path'); | ||||
| import * as path from 'path'; | ||||
|  | ||||
| export { path }; | ||||
|  | ||||
| // @pushrocks | ||||
| export import beautylog = require('beautylog'); | ||||
| export import projectinfo = require('@pushrocks/projectinfo'); | ||||
| export import npmextra = require('@pushrocks/npmextra'); | ||||
| export import smartdelay = require('@pushrocks/smartdelay'); | ||||
| export import smartfile = require('@pushrocks/smartfile'); | ||||
| export import smartcli = require('@pushrocks/smartcli'); | ||||
| export import smartparam = require('smartparam'); | ||||
| export import smartpromise = require('@pushrocks/smartpromise'); | ||||
| export import smartshell = require('@pushrocks/smartshell'); | ||||
| export import smartsocket = require('smartsocket'); | ||||
| export import smartssh = require('@pushrocks/smartssh'); | ||||
| export import smartstring = require('@pushrocks/smartstring'); | ||||
| import * as projectinfo from '@pushrocks/projectinfo'; | ||||
| import * as npmextra from '@pushrocks/npmextra'; | ||||
| import * as smartdelay from '@pushrocks/smartdelay'; | ||||
| import * as smartfile from '@pushrocks/smartfile'; | ||||
| import * as smartcli from '@pushrocks/smartcli'; | ||||
| import * as smartlog from '@pushrocks/smartlog'; | ||||
| import * as smartlogDestinationLocal from '@pushrocks/smartlog-destination-local'; | ||||
| import * as smartparam from '@pushrocks/smartparam'; | ||||
| import * as smartpromise from '@pushrocks/smartpromise'; | ||||
| import * as smartrequest from '@pushrocks/smartrequest'; | ||||
| import * as smartshell from '@pushrocks/smartshell'; | ||||
| import * as smartsocket from 'smartsocket'; | ||||
| import * as smartssh from '@pushrocks/smartssh'; | ||||
| import * as smartstring from '@pushrocks/smartstring'; | ||||
|  | ||||
| export { | ||||
|   projectinfo, | ||||
|   npmextra, | ||||
|   smartdelay, | ||||
|   smartfile, | ||||
|   smartcli, | ||||
|   smartlog, | ||||
|   smartlogDestinationLocal, | ||||
|   smartparam, | ||||
|   smartpromise, | ||||
|   smartrequest, | ||||
|   smartshell, | ||||
|   smartsocket, | ||||
|   smartssh, | ||||
|   smartstring | ||||
| }; | ||||
|  | ||||
| // third party | ||||
| export import lodash = require('lodash'); | ||||
| export import through2 = require('through2'); | ||||
| export import request = require('@pushrocks/smartrequest'); | ||||
| import * as lodash from 'lodash'; | ||||
| import * as through2 from 'through2'; | ||||
|  | ||||
| export { lodash, through2 }; | ||||
|   | ||||
							
								
								
									
										16
									
								
								tslint.json
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								tslint.json
									
									
									
									
									
								
							| @@ -1,3 +1,17 @@ | ||||
| { | ||||
|     "extends": "tslint-config-standard" | ||||
|   "extends": ["tslint:latest", "tslint-config-prettier"], | ||||
|   "rules": { | ||||
|     "semicolon": [true, "always"], | ||||
|     "no-console": false, | ||||
|     "ordered-imports": false, | ||||
|     "object-literal-sort-keys": false, | ||||
|     "member-ordering": { | ||||
|       "options":{ | ||||
|         "order": [ | ||||
|           "static-method" | ||||
|         ] | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   "defaultSeverity": "warning" | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user