diff --git a/.gitignore b/.gitignore index a2dc94736..abeeb6731 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,7 @@ # IDE - VSCode .vscode/* +!.vscode/closest-config-finder.sh !.vscode/settings.json !.vscode/tasks.json !.vscode/launch.json diff --git a/.vscode/closest-config-finder.sh b/.vscode/closest-config-finder.sh new file mode 100755 index 000000000..497d824b3 --- /dev/null +++ b/.vscode/closest-config-finder.sh @@ -0,0 +1,17 @@ +specFile=$1; +configFile=$2; + +findconfig() { + if [ -f "$1" ]; then + printf '%s\n' "${PWD%/}/$1" + elif [ "$PWD" = / ]; then + false + else + (cd .. && findconfig $1) + fi +} + +DIR=$(dirname "$specFile") +cd $DIR +configFile=`findconfig "$configFile"`; +echo "$configFile"; diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 000000000..59f2afda5 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,21 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "e2e", + "program": "${workspaceFolder}/node_modules/protractor/bin/protractor", + "args": ["`${workspaceFolder}/.vscode/closest-config-finder.sh ${file} protractor.conf.js`", "--specs=${file}"], + "envFile": "${workspaceFolder}/.env", + "console": "integratedTerminal", + "sourceMaps": true, + "smartStep": true, + "skipFiles": ["${workspaceFolder}/node_modules/**/*.js", "/**/*.js"], + "internalConsoleOptions": "neverOpen" + } + ] +} diff --git a/angular.json b/angular.json index 3586db867..535091c5e 100644 --- a/angular.json +++ b/angular.json @@ -171,6 +171,11 @@ "options": { "publicHost": "http://localhost:4200", "browserTarget": "app:build" + }, + "configurations": { + "standalone": { + "watch": true + } } }, "extract-i18n": { @@ -380,5 +385,8 @@ "@schematics/angular:directive": { "prefix": "aca" } + }, + "cli": { + "analytics": "a5069b3a-642d-4d97-b810-0c24d7628413" } } diff --git a/package-lock.json b/package-lock.json index fe0104203..d2b3b0b43 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,9 +5,9 @@ "requires": true, "dependencies": { "@alfresco/adf-cli": { - "version": "3.10.0-89b37067ff6b1ccde8af1a1611828ee61da0bcac", - "resolved": "https://registry.npmjs.org/@alfresco/adf-cli/-/adf-cli-3.10.0-89b37067ff6b1ccde8af1a1611828ee61da0bcac.tgz", - "integrity": "sha512-CyYT/+/X1nKJ92VFd60CcSDHiLH0Y2FztGRAhOkcIfL/x0RAXp8OLXrSXImwsJVAcKeIR+WJZiy9sAACndElyw==", + "version": "3.10.0-61cac20ab3b1a76069dcfbfbe37619126d4b51ab", + "resolved": "https://registry.npmjs.org/@alfresco/adf-cli/-/adf-cli-3.10.0-61cac20ab3b1a76069dcfbfbe37619126d4b51ab.tgz", + "integrity": "sha512-Vq7J5D7YpvP7b8eJsauCykS3yNZElsUJwqQV9ZQ+B00HvHCMW2UUUd5VWLb9F/n82hKlsY9k8WSsDnP4aRcSIw==", "dev": true, "requires": { "@alfresco/js-api": "3.10.0-23b97d354151ced90eb2fc68f9d57cad852376d7", @@ -29,33 +29,33 @@ } }, "@alfresco/adf-content-services": { - "version": "3.10.0-89b37067ff6b1ccde8af1a1611828ee61da0bcac", - "resolved": "https://registry.npmjs.org/@alfresco/adf-content-services/-/adf-content-services-3.10.0-89b37067ff6b1ccde8af1a1611828ee61da0bcac.tgz", - "integrity": "sha512-37lZG0s9WfyZYvuwiA/JZPO8iHWarRPUHujQbPPCGhRBUqCteix/7Qj2QXkF5aqjkkLpN4tAej/OyU18edYc2Q==", + "version": "3.10.0-61cac20ab3b1a76069dcfbfbe37619126d4b51ab", + "resolved": "https://registry.npmjs.org/@alfresco/adf-content-services/-/adf-content-services-3.10.0-61cac20ab3b1a76069dcfbfbe37619126d4b51ab.tgz", + "integrity": "sha512-i89GrjsnhugcsNeAbBH/XEwAnEZI7fO9TezuAzBAw9pl2fr0jyjwvcHtrs0BmIT7+HsNv4AJ8ar9bCo7GDy0zg==", "requires": { "tslib": "^2.0.0" } }, "@alfresco/adf-core": { - "version": "3.10.0-89b37067ff6b1ccde8af1a1611828ee61da0bcac", - "resolved": "https://registry.npmjs.org/@alfresco/adf-core/-/adf-core-3.10.0-89b37067ff6b1ccde8af1a1611828ee61da0bcac.tgz", - "integrity": "sha512-B2LQ6OU/qT8lhDbX4t6ZMa/zSTYDyse9VuzJwzAC2s0ppLcypp6AzNNeuTMdlyJyLEPXviSXVIAjxT1DJvMFbg==", + "version": "3.10.0-61cac20ab3b1a76069dcfbfbe37619126d4b51ab", + "resolved": "https://registry.npmjs.org/@alfresco/adf-core/-/adf-core-3.10.0-61cac20ab3b1a76069dcfbfbe37619126d4b51ab.tgz", + "integrity": "sha512-di++9RaUxJhHfb4N33+Bf/4QmxRG2b7FHZcS3qkTlk28S0GqobzsMizkccMHmwEU5nOF/yJHJGVpaFvF7zHNSg==", "requires": { "tslib": "^2.0.0" } }, "@alfresco/adf-extensions": { - "version": "3.10.0-89b37067ff6b1ccde8af1a1611828ee61da0bcac", - "resolved": "https://registry.npmjs.org/@alfresco/adf-extensions/-/adf-extensions-3.10.0-89b37067ff6b1ccde8af1a1611828ee61da0bcac.tgz", - "integrity": "sha512-DIC1QKnOaVugsNr2+nqH8BhfspN6/1MEovIf4IERuc142viGyDpGxkgaTzF/qDnYMBoAzDf1x2Qfz0y97g+HWw==", + "version": "3.10.0-61cac20ab3b1a76069dcfbfbe37619126d4b51ab", + "resolved": "https://registry.npmjs.org/@alfresco/adf-extensions/-/adf-extensions-3.10.0-61cac20ab3b1a76069dcfbfbe37619126d4b51ab.tgz", + "integrity": "sha512-ped6r42Exxl17MtXUjEyPh/U5kZGfeGcT80qhQ9aqPOjfAZnmcfSPz7u+/j5jScHWDRbgTFCltiwwxl3N+2m1w==", "requires": { "tslib": "^2.0.0" } }, "@alfresco/adf-testing": { - "version": "3.10.0-89b37067ff6b1ccde8af1a1611828ee61da0bcac", - "resolved": "https://registry.npmjs.org/@alfresco/adf-testing/-/adf-testing-3.10.0-89b37067ff6b1ccde8af1a1611828ee61da0bcac.tgz", - "integrity": "sha512-4Pj8G8QXmyuLJir8CP9G57SprZfIxfwY3L3JWrQmwLLFTQdw+pEDlrNAD42yvUfSN42g+RvFs3zZTxVPhb7GwA==", + "version": "3.10.0-61cac20ab3b1a76069dcfbfbe37619126d4b51ab", + "resolved": "https://registry.npmjs.org/@alfresco/adf-testing/-/adf-testing-3.10.0-61cac20ab3b1a76069dcfbfbe37619126d4b51ab.tgz", + "integrity": "sha512-2hJpNATtoHN+YdLodnekmE9J6R6Qo9sxvwCyFRUYdbVCZiv4smWysOuuCNHQt1o2KD/syxYrwnG8HO2X9YZCRQ==", "dev": true, "requires": { "tslib": "^2.0.0" @@ -490,6 +490,28 @@ "rxjs": "6.5.5" }, "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ora": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/ora/-/ora-4.0.4.tgz", + "integrity": "sha512-77iGeVU1cIdRhgFzCK8aw1fbtT1B/iZAvWjS+l/o1x0RShMgxHUZaD2yDpWsNCPwXg9z1ZA78Kbdvr8kBmG/Ww==", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.2.0", + "is-interactive": "^1.0.0", + "log-symbols": "^3.0.0", + "mute-stream": "0.0.8", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + } + }, "rxjs": { "version": "6.5.5", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", @@ -499,6 +521,15 @@ "tslib": "^1.9.0" } }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, "tslib": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", @@ -2996,7 +3027,6 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", - "dev": true, "requires": { "type-fest": "^0.11.0" } @@ -4202,22 +4232,55 @@ "dev": true }, "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "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" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "requires": { + "has-flag": "^4.0.0" + } + } } }, "chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, "chokidar": { "version": "3.4.1", @@ -4318,7 +4381,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, "requires": { "restore-cursor": "^3.1.0" } @@ -4326,8 +4388,7 @@ "cli-spinners": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.4.0.tgz", - "integrity": "sha512-sJAofoarcm76ZGpuooaO0eDy8saEy+YoZBLjC4h8srt4jeBnkYeOgqxgsJQTpyt2LjI5PTfLJHSL+41Yu4fEJA==", - "dev": true + "integrity": "sha512-sJAofoarcm76ZGpuooaO0eDy8saEy+YoZBLjC4h8srt4jeBnkYeOgqxgsJQTpyt2LjI5PTfLJHSL+41Yu4fEJA==" }, "cli-truncate": { "version": "2.1.0", @@ -4382,8 +4443,7 @@ "cli-width": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" }, "cliui": { "version": "5.0.0", @@ -4592,17 +4652,40 @@ "version": "1.5.3", "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", - "dev": true, "requires": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, + "colornames": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", + "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=" + }, "colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" + }, + "colorspace": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", + "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", + "requires": { + "color": "3.0.x", + "text-hex": "1.0.x" + }, + "dependencies": { + "color": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", + "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + } + } }, "combined-stream": { "version": "1.0.8", @@ -5061,8 +5144,7 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cosmiconfig": { "version": "5.2.1", @@ -6070,7 +6152,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, "requires": { "clone": "^1.0.2" }, @@ -6078,8 +6159,7 @@ "clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" } } }, @@ -6250,6 +6330,16 @@ "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", "dev": true }, + "diagnostics": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", + "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==", + "requires": { + "colorspace": "1.1.x", + "enabled": "1.0.x", + "kuler": "1.0.x" + } + }, "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -6551,6 +6641,14 @@ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true }, + "enabled": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", + "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", + "requires": { + "env-variable": "0.0.x" + } + }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -6710,6 +6808,11 @@ "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", "dev": true }, + "env-variable": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.6.tgz", + "integrity": "sha512-bHz59NlBbtS0NhftmR8+ExBEekE7br0e01jw+kk0NDro7TtZzBYZ5ScGPs3OmwnpyfHTHOtr1Y6uedCdrIldtg==" + }, "err-code": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", @@ -7208,7 +7311,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, "requires": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -7364,6 +7466,11 @@ "websocket-driver": ">=0.5.1" } }, + "fecha": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.0.tgz", + "integrity": "sha512-aN3pcx/DSmtyoovUudctc8+6Hl4T+hI9GBBHLjA76jdZl7+b1sgh5g4k+u/GL3dTy1/pnYzKp69FpJ0OicE3Wg==" + }, "figgy-pudding": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", @@ -7374,7 +7481,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, "requires": { "escape-string-regexp": "^1.0.5" } @@ -7974,8 +8080,7 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "has-own-prop": { "version": "2.0.0", @@ -8752,7 +8857,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz", "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==", - "dev": true, "requires": { "ansi-escapes": "^4.2.1", "chalk": "^3.0.0", @@ -8772,67 +8876,22 @@ "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "string-width": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -8843,19 +8902,9 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, "requires": { "ansi-regex": "^5.0.0" } - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } } } }, @@ -9096,8 +9145,7 @@ "is-interactive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" }, "is-module": { "version": "1.0.0", @@ -9202,8 +9250,7 @@ "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, "is-svg": { "version": "3.0.0", @@ -9962,6 +10009,14 @@ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true }, + "kuler": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz", + "integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==", + "requires": { + "colornames": "^1.1.1" + } + }, "latest-version": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", @@ -10505,7 +10560,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", - "dev": true, "requires": { "chalk": "^2.4.2" }, @@ -10514,7 +10568,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -10523,7 +10576,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -10534,7 +10586,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -10653,6 +10704,18 @@ "streamroller": "^2.2.4" } }, + "logform": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz", + "integrity": "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==", + "requires": { + "colors": "^1.2.1", + "fast-safe-stringify": "^2.0.4", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "triple-beam": "^1.3.0" + } + }, "loglevel": { "version": "1.6.8", "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz", @@ -10909,8 +10972,7 @@ "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, "mimic-response": { "version": "1.0.1", @@ -11192,8 +11254,7 @@ "mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "nan": { "version": "2.14.1", @@ -11874,11 +11935,15 @@ "wrappy": "1" } }, + "one-time": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", + "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=" + }, "onetime": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", - "dev": true, "requires": { "mimic-fn": "^2.1.0" } @@ -11924,10 +11989,9 @@ } }, "ora": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/ora/-/ora-4.0.4.tgz", - "integrity": "sha512-77iGeVU1cIdRhgFzCK8aw1fbtT1B/iZAvWjS+l/o1x0RShMgxHUZaD2yDpWsNCPwXg9z1ZA78Kbdvr8kBmG/Ww==", - "dev": true, + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/ora/-/ora-4.0.3.tgz", + "integrity": "sha512-fnDebVFyz309A73cqCipVL1fBZewq4vwgSHfxh43vVy31mbyoQ8sCH3Oeaog/owYOs/lLlGVPCISQonTneg6Pg==", "requires": { "chalk": "^3.0.0", "cli-cursor": "^3.1.0", @@ -11942,67 +12006,15 @@ "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, "requires": { "ansi-regex": "^5.0.0" } - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } } } }, @@ -12030,8 +12042,7 @@ "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, "osenv": { "version": "0.1.5", @@ -13275,8 +13286,7 @@ "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "promise-inflight": { "version": "1.0.1", @@ -13354,6 +13364,19 @@ "integrity": "sha512-tGomyEuzSC1H28y2zlW6XPCaDaXFaD6soTdb4GNdmte2qfHtrKqhy0ZFs4r/1hpazCfEZqeTSRLvSasmEx89uw==", "dev": true }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, "q": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", @@ -14148,7 +14171,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, "requires": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -14267,8 +14289,7 @@ "run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" }, "run-parallel": { "version": "1.1.9", @@ -14902,14 +14923,12 @@ "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" }, "simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "dev": true, "requires": { "is-arrayish": "^0.3.1" }, @@ -14917,8 +14936,7 @@ "is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" } } }, @@ -15646,6 +15664,11 @@ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", "dev": true }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -16328,6 +16351,11 @@ } } }, + "text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, "tfunk": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-3.1.0.tgz", @@ -16335,13 +16363,26 @@ "requires": { "chalk": "^1.1.1", "object-path": "^0.9.0" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "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" + } + } } }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "through2": { "version": "2.0.5", @@ -16416,7 +16457,6 @@ "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, "requires": { "os-tmpdir": "~1.0.2" } @@ -16535,6 +16575,11 @@ "escape-string-regexp": "^1.0.2" } }, + "triple-beam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + }, "ts-node": { "version": "8.10.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz", @@ -16735,8 +16780,7 @@ "type-fest": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", - "dev": true + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" }, "type-is": { "version": "1.6.18", @@ -17557,7 +17601,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, "requires": { "defaults": "^1.0.3" } @@ -17629,6 +17672,19 @@ "array-uniq": "^1.0.1" } }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, "del": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", @@ -18533,6 +18589,75 @@ } } }, + "winston": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz", + "integrity": "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==", + "requires": { + "async": "^2.6.1", + "diagnostics": "^1.1.1", + "is-stream": "^1.1.0", + "logform": "^2.1.1", + "one-time": "0.0.4", + "readable-stream": "^3.1.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.3.0" + }, + "dependencies": { + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "requires": { + "lodash": "^4.17.14" + } + } + } + }, + "winston-transport": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz", + "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==", + "requires": { + "readable-stream": "^2.3.7", + "triple-beam": "^1.2.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "worker-farm": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", diff --git a/package.json b/package.json index b3cecdd87..9b6f49c1b 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "build.e2e": "npm run build.app -- --prod --configuration=e2e", "test": "ng test app --code-coverage", "unit": "ng test --browsers=Chrome --watch", + "lite-serve": "./scripts/run lite-serve", "test:ci": "npm run build.extensions && ng test adf-office-services-ext --watch=false && ng test app --code-coverage --watch=false", "lint": "ng lint && npm run spellcheck && npm run e2e.typecheck", "update-webdriver": "./scripts/update-webdriver.sh", @@ -33,11 +34,11 @@ }, "private": true, "dependencies": { - "@alfresco/adf-content-services": "3.10.0-89b37067ff6b1ccde8af1a1611828ee61da0bcac", - "@alfresco/adf-core": "3.10.0-89b37067ff6b1ccde8af1a1611828ee61da0bcac", - "@alfresco/adf-extensions": "3.10.0-89b37067ff6b1ccde8af1a1611828ee61da0bcac", + "@alfresco/adf-content-services": "3.10.0-61cac20ab3b1a76069dcfbfbe37619126d4b51ab", + "@alfresco/adf-core": "3.10.0-61cac20ab3b1a76069dcfbfbe37619126d4b51ab", + "@alfresco/adf-extensions": "3.10.0-61cac20ab3b1a76069dcfbfbe37619126d4b51ab", "@alfresco/js-api": "3.10.0-23b97d354151ced90eb2fc68f9d57cad852376d7", - "@angular-custom-builders/lite-serve": "0.2.2", + "@angular-custom-builders/lite-serve": "^0.2.2", "@angular/animations": "10.0.4", "@angular/cdk": "^10.0.2", "@angular/common": "10.0.4", @@ -58,17 +59,21 @@ "@ngrx/store-devtools": "^9.2.0", "@ngx-translate/core": "^13.0.0", "browser-sync": "^2.26.12", + "chalk": "^3.0.0", + "inquirer": "^7.1.0", "minimatch-browser": "^1.0.0", "moment": "^2.27.0", "moment-es6": "1.0.0", + "ora": "^4.0.3", "pdfjs-dist": "2.4.456", "rxjs": "^6.6.2", "tslib": "^2.0.1", + "winston": "^3.2.1", "zone.js": "~0.10.2" }, "devDependencies": { - "@alfresco/adf-cli": "3.10.0-89b37067ff6b1ccde8af1a1611828ee61da0bcac", - "@alfresco/adf-testing": "3.10.0-89b37067ff6b1ccde8af1a1611828ee61da0bcac", + "@alfresco/adf-cli": "3.10.0-61cac20ab3b1a76069dcfbfbe37619126d4b51ab", + "@alfresco/adf-testing": "3.10.0-61cac20ab3b1a76069dcfbfbe37619126d4b51ab", "@angular-devkit/build-angular": "~0.1000.4", "@angular-devkit/build-ng-packagr": "~0.1000.5", "@angular/cli": "^10.0.5", diff --git a/scripts/app-config-replace.js b/scripts/app-config-replace.js index 53c35f75a..c02fc89f5 100755 --- a/scripts/app-config-replace.js +++ b/scripts/app-config-replace.js @@ -4,51 +4,73 @@ const program = require('commander'); require('dotenv').config({ path: process.env.ENV_FILE }); const fs = require('fs'); -const API_CONTENT_HOST = process.env.API_CONTENT_HOST || 'api'; -const OAUTH_HOST = process.env.OAUTH_HOST || 'keycloak'; +const API_HOST = process.env.API_HOST || null; +const API_CONTENT_HOST = process.env.API_CONTENT_HOST || API_HOST; +const API_PROCESS_HOST = process.env.API_PROCESS_HOST || API_HOST; +const API_AOS_HOST = process.env.AOS_HOST || API_HOST; +const OAUTH_HOST = process.env.OAUTH_HOST || 'oauth-host-default-replaced-value'; +const IDENTITY_HOST = process.env.IDENTITY_HOST || 'identity-host-default-replaced-value'; +const NOTIFICATION_LAST = parseInt(process.env.NOTIFICATION_LAST, 10) || 2000; const options = { apiHost: { flags: '-a, --api-host', - description: "set apiHost's and ecmHost's value with API_CONTENT_HOST", - set: appConfig => { + description: + 'set apiHost=API_HOST, bpmHost=API_PROCESS_HOST, ecmHost=API_CONTENT_HOST, aosHost = API_AOS_HOST if present or fall back to API_HOST in each case', + set: (appConfig) => { + appConfig.apiHost = API_HOST; + appConfig.bpmHost = API_PROCESS_HOST; appConfig.ecmHost = API_CONTENT_HOST; - appConfig.aosHost = API_CONTENT_HOST + '/alfresco/aos'; + appConfig.aosHost = API_AOS_HOST; + } + }, + indentityHost: { + flags: '-i, --indentity-host', + description: "set identityHost's value with IDENTITY_HOST", + set: (appConfig) => { + appConfig.authType = 'OAUTH'; + appConfig.identityHost = IDENTITY_HOST; } }, oauthHost: { flags: '-o, --oauth-host', description: "set oauth2.host's value with OAUTH_HOST", - set: appConfig => { + set: (appConfig) => { appConfig.authType = 'OAUTH'; appConfig.oauth2.host = OAUTH_HOST; } + }, + notification: { + flags: '-n, --notification', + description: "set notificationDefaultDuration's value with and switch on showNotificationHistory", + set: (appConfig) => { + appConfig.showNotificationHistory = true; + appConfig.notificationDefaultDuration = NOTIFICATION_LAST; + } } }; -program - .version('0.0.1') - .requiredOption( - '-c, --config ', - 'path to the app.config.json to reset its values with env vars' - ); +program.version('0.0.1').requiredOption('-c, --config ', 'path to the app.config.json to reset its values with env vars'); -Object.keys(options).forEach(option => { +Object.keys(options).forEach((option) => { program.option(options[option].flags, options[option].description); }); program.parse(process.argv); fs.readFile(program.config, (err, appConfigString) => { - if (err) throw err; - let appConfig = JSON.parse(appConfigString); + if (err) { + throw err; + } - Object.keys(options).forEach(option => { + const appConfig = JSON.parse(appConfigString); + + Object.keys(options).forEach((option) => { if (program[option]) { options[option].set(appConfig); } }); - let appConfigReplacedJson = JSON.stringify(appConfig, null, 4); + const appConfigReplacedJson = JSON.stringify(appConfig, null, 4); fs.writeFileSync(program.config, appConfigReplacedJson); }); diff --git a/scripts/clireader/base-param.ts b/scripts/clireader/base-param.ts new file mode 100644 index 000000000..0d96b3667 --- /dev/null +++ b/scripts/clireader/base-param.ts @@ -0,0 +1,38 @@ +/* + * Copyright 2005-2019 Alfresco Software, Ltd. All rights reserved. + * + * License rights for this program may be obtained from Alfresco Software, Ltd. + * pursuant to a written agreement and any use of this program without such an + * agreement is prohibited. + */ + +import { ParamType } from './params'; + +export type CommanderProcessor = (arg1: any, arg2: any) => void; +export type CommanderOptionParams = [string, string, CommanderProcessor?, any?]; + +export interface BaseParamOptions { + name: string; + alias: string; + title: string; + required: boolean; + processor?: CommanderProcessor; + default?: any; +} + +export abstract class BaseParam { + protected type: ParamType; + constructor(protected options: BaseParamOptions) {} + + abstract get commanderOption(): CommanderOptionParams; + + abstract get inquirerOption(): any; + + get isRequired() { + return this.options.required; + } + + get name() { + return this.options.name; + } +} diff --git a/scripts/clireader/boolean-param.ts b/scripts/clireader/boolean-param.ts new file mode 100644 index 000000000..d38748f35 --- /dev/null +++ b/scripts/clireader/boolean-param.ts @@ -0,0 +1,40 @@ +/* + * Copyright 2005-2019 Alfresco Software, Ltd. All rights reserved. + * + * License rights for this program may be obtained from Alfresco Software, Ltd. + * pursuant to a written agreement and any use of this program without such an + * agreement is prohibited. + */ + +import { ParamType } from './params'; +import { BaseParamOptions, CommanderOptionParams, BaseParam } from './base-param'; + +export class BooleanParam extends BaseParam { + protected type = ParamType.confirm; + + get commanderOption(): CommanderOptionParams { + const optionParams: CommanderOptionParams = [`-${this.options.alias}, --${this.options.name}`, this.options.title]; + + if (this.options.processor !== undefined) { + optionParams.push(this.options.processor); + } else { + optionParams.push((value, previousValue) => { + return value !== undefined ? !!value : previousValue; + }); + } + + if (this.options.default !== undefined) { + optionParams.push(this.options.default); + } + + return optionParams; + } + + get inquirerOption() { + return { + type: this.type, + name: this.options.name, + message: this.options.title + }; + } +} diff --git a/scripts/clireader/checkbox-param.ts b/scripts/clireader/checkbox-param.ts new file mode 100644 index 000000000..2b1321a37 --- /dev/null +++ b/scripts/clireader/checkbox-param.ts @@ -0,0 +1,58 @@ +/* + * Copyright 2005-2019 Alfresco Software, Ltd. All rights reserved. + * + * License rights for this program may be obtained from Alfresco Software, Ltd. + * pursuant to a written agreement and any use of this program without such an + * agreement is prohibited. + */ + +import { ParamType } from './params'; +import { BaseParamOptions, CommanderOptionParams, BaseParam } from './base-param'; + +export interface ComplexCheckboxChoice { + name: string; + value?: any; + checked?: boolean; + short?: string; +} + +export interface ChekboxParamOptions extends BaseParamOptions { + choices: string[] | ComplexCheckboxChoice[]; + default?: any[]; +} + +export class CheckboxParam extends BaseParam { + protected type = ParamType.checkbox; + + constructor(protected options: ChekboxParamOptions) { + super(options); + } + + get commanderOption(): CommanderOptionParams { + const optionParams: CommanderOptionParams = [`-${this.options.alias}, --${this.options.name} <${this.options.name}>`, this.options.title]; + + if (this.options.processor !== undefined) { + optionParams.push(this.options.processor); + } else { + optionParams.push((value, previousValue) => { + return value !== undefined ? value.split(',') : previousValue; + }); + } + + if (this.options.default !== undefined) { + optionParams.push(this.options.default); + } + + return optionParams; + } + + get inquirerOption() { + return { + type: this.type, + name: this.options.name, + message: this.options.title, + choices: this.options.choices, + default: this.options.default + }; + } +} diff --git a/scripts/clireader/cli-reader.ts b/scripts/clireader/cli-reader.ts new file mode 100644 index 000000000..df3c6a91c --- /dev/null +++ b/scripts/clireader/cli-reader.ts @@ -0,0 +1,55 @@ +/* + * Copyright 2005-2019 Alfresco Software, Ltd. All rights reserved. + * + * License rights for this program may be obtained from Alfresco Software, Ltd. + * pursuant to a written agreement and any use of this program without such an + * agreement is prohibited. + */ + +import commander, { program } from 'commander'; +import * as inquirer from 'inquirer'; +import { BooleanParam } from './boolean-param'; +import { InputParam } from './input-param'; +import { ListParam } from './list-param'; +import { CheckboxParam } from './checkbox-param'; +import * as logger from '../../tools/helpers/logger'; + +export type CliParam = ListParam | InputParam | BooleanParam | CheckboxParam; + +export class CliReader { + private program: commander.Command; + + constructor(name: string, usage: string, description: string, version: string) { + this.program = program; + + this.program + .name(name) + .usage(usage) + .description(description) + .version(version) + .option('-d, --debug ', 'Set the output information level (silly, debug, verbose, info, warn, error)', 'info'); + } + + *getReader(params: CliParam[], cliArgs: string[]): Generator { + params.forEach((param) => { + program.option.apply(this.program, param.commanderOption); + }); + this.program.parse(cliArgs); + logger.level = this.program.debug; + + const commanderParams = params + .filter((param) => this.program[param.name] !== undefined) + .reduce((paramsAcc, param) => ({ ...paramsAcc, [param.name]: this.program[param.name] }), {}); + + yield commanderParams; + + let unsetRequiredParams; + if (Object.keys(commanderParams).length) { + unsetRequiredParams = params.filter((param) => param.isRequired && this.program[param.name] === undefined).map((param) => param.inquirerOption); + } else { + unsetRequiredParams = params.map((param) => param.inquirerOption); + } + + return yield inquirer.prompt(unsetRequiredParams).then((inquiredParams) => ({ ...commanderParams, ...inquiredParams })); + } +} diff --git a/scripts/clireader/input-param.ts b/scripts/clireader/input-param.ts new file mode 100644 index 000000000..c5d40e594 --- /dev/null +++ b/scripts/clireader/input-param.ts @@ -0,0 +1,36 @@ +/* + * Copyright 2005-2019 Alfresco Software, Ltd. All rights reserved. + * + * License rights for this program may be obtained from Alfresco Software, Ltd. + * pursuant to a written agreement and any use of this program without such an + * agreement is prohibited. + */ + +import { ParamType } from './params'; +import { BaseParam, BaseParamOptions, CommanderOptionParams } from './base-param'; + +export class InputParam extends BaseParam { + protected type = ParamType.input; + + get commanderOption(): CommanderOptionParams { + const optionParams: CommanderOptionParams = [`-${this.options.alias}, --${this.options.name} <${this.options.name}>`, this.options.title]; + + if (this.options.processor !== undefined) { + optionParams.push(this.options.processor); + } + + if (this.options.default !== undefined) { + optionParams.push(this.options.default); + } + + return optionParams; + } + + get inquirerOption() { + return { + type: this.type, + name: this.options.name, + message: this.options.title + }; + } +} diff --git a/scripts/clireader/list-param.ts b/scripts/clireader/list-param.ts new file mode 100644 index 000000000..a3b114e8d --- /dev/null +++ b/scripts/clireader/list-param.ts @@ -0,0 +1,54 @@ +/* + * Copyright 2005-2019 Alfresco Software, Ltd. All rights reserved. + * + * License rights for this program may be obtained from Alfresco Software, Ltd. + * pursuant to a written agreement and any use of this program without such an + * agreement is prohibited. + */ + +import { ParamType } from './params'; +import { BaseParamOptions, CommanderOptionParams, BaseParam } from './base-param'; + +export interface ComplexListChoice { + name: string; + value?: any; + disabled?: boolean; + short?: string; +} + +export interface ListParamOptions extends BaseParamOptions { + choices: string[] | ComplexListChoice[]; + pageSize?: number; +} + +export class ListParam extends BaseParam { + protected type = ParamType.list; + + constructor(protected options: ListParamOptions) { + super(options); + } + + get commanderOption(): CommanderOptionParams { + const optionParams: CommanderOptionParams = [`-${this.options.alias}, --${this.options.name} <${this.options.name}>`, this.options.title]; + + if (this.options.processor !== undefined) { + optionParams.push(this.options.processor); + } + + if (this.options.default !== undefined) { + optionParams.push(this.options.default); + } + + return optionParams; + } + + get inquirerOption() { + return { + type: this.type, + name: this.options.name, + message: this.options.title, + choices: this.options.choices, + pageSize: this.options.pageSize + }; + } +} diff --git a/scripts/clireader/params.ts b/scripts/clireader/params.ts new file mode 100644 index 000000000..2e192bc2a --- /dev/null +++ b/scripts/clireader/params.ts @@ -0,0 +1,14 @@ +/* + * Copyright 2005-2019 Alfresco Software, Ltd. All rights reserved. + * + * License rights for this program may be obtained from Alfresco Software, Ltd. + * pursuant to a written agreement and any use of this program without such an + * agreement is prohibited. + */ + +export enum ParamType { + input = 'input', + list = 'list', + checkbox = 'checkbox', + confirm = 'confirm' +} diff --git a/scripts/npm/helpers/project-selectors.ts b/scripts/npm/helpers/project-selectors.ts new file mode 100644 index 000000000..a6e34ad2c --- /dev/null +++ b/scripts/npm/helpers/project-selectors.ts @@ -0,0 +1,29 @@ +/* + * Copyright 2005-2019 Alfresco Software, Ltd. All rights reserved. + * + * License rights for this program may be obtained from Alfresco Software, Ltd. + * pursuant to a written agreement and any use of this program without such an + * agreement is prohibited. + */ + +import * as angularJson from 'angular.json'; + +export const getApps = () => { + return Object.keys(angularJson.projects) + .map((projectName) => ({ name: projectName, ...angularJson.projects[projectName] })) + .filter((project) => project.projectType === 'application') + .filter((project) => project.name.indexOf('e2e') === -1); +}; + +export const getE2Es = () => { + return Object.keys(angularJson.projects) + .map((projectName) => ({ name: projectName, ...angularJson.projects[projectName] })) + .filter((project) => project.projectType === 'application') + .filter((project) => project.name.endsWith('-e2e')); +}; + +export const getLibs = () => { + return Object.keys(angularJson.projects) + .map((projectName) => ({ name: projectName, ...angularJson.projects[projectName] })) + .filter((project) => project.projectType === 'library'); +}; diff --git a/scripts/npm/lite-serve.ts b/scripts/npm/lite-serve.ts new file mode 100755 index 000000000..d90ed6cf7 --- /dev/null +++ b/scripts/npm/lite-serve.ts @@ -0,0 +1,159 @@ +/* + * Copyright 2005-2019 Alfresco Software, Ltd. All rights reserved. + * + * License rights for this program may be obtained from Alfresco Software, Ltd. + * pursuant to a written agreement and any use of this program without such an + * agreement is prohibited. + */ + +import { getApps } from './helpers/project-selectors'; +import { existsSync } from 'fs'; +import { resolve } from 'path'; +import { spawn } from 'child_process'; +import { yellow, green, red } from 'chalk'; +import { ListParam, ComplexListChoice } from 'clireader/list-param'; +import { CheckboxParam } from '../clireader/checkbox-param'; +import { CliReader, CliParam } from 'clireader/cli-reader'; +import * as logger from '../../tools/helpers/logger'; +import * as ora from 'ora'; + +require('dotenv').config({ path: process.env.ENV_FILE }); +const API_HOST = process.env.API_HOST; +const OAUTH_HOST = process.env.OAUTH_HOST; +const IDENTITY_HOST = process.env.IDENTITY_HOST; +const NOTIFICATION_LAST = process.env.NOTIFICATION_LAST; + +interface LiteServeRunnerInputs { + app: string; + configRewrite: string[]; +} + +export default class LiteServeRunner { + private cliReader: CliReader; + private inputParams: CliParam[]; + + constructor(private cliArgs: any[]) { + this.cliReader = new CliReader('lite-serve', '[options]', 'Start lite-serve for previously built app', '0.0.1'); + + this.inputParams = [ + new ListParam({ + name: 'app', + alias: 'a', + title: `Which ${yellow('prebuilt')} application to serve with lite-serve?`, + required: true, + choices: this.getAppList.bind(this), + pageSize: 30 + }), + new CheckboxParam({ + name: 'configRewrite', + alias: 'c', + title: 'Rewrite app.config.json with the following environment vars?', + required: false, + choices: [ + ...(API_HOST !== undefined ? [{ name: `API_HOST=${API_HOST}`, value: 'a', short: 'API_HOST', checked: true }] : []), + ...(OAUTH_HOST !== undefined + ? [{ name: `OAUTH_HOST=${OAUTH_HOST} ${red('+ authType=OAUTH also!!!')}`, value: 'o', short: 'OAUTH_HOST', checked: true }] + : []), + ...(IDENTITY_HOST !== undefined + ? [{ name: `IDENTITY_HOST=${IDENTITY_HOST} ${red('+ authType=OAUTH also!!!')}`, value: 'i', short: 'IDENTITY_HOST', checked: true }] + : []), + ...(NOTIFICATION_LAST !== undefined + ? [{ name: `NOTIFICATION_LAST=${NOTIFICATION_LAST}`, value: 'n', short: 'NOTIFICATION_LAST', checked: true }] + : []) + ] + }) + ]; + } + + run() { + const readerGenerator = this.cliReader.getReader(this.inputParams, this.cliArgs); + const program: Object = readerGenerator.next().value; + + const builtApps = this.getAppList().filter((app) => !app.disabled); + if (!builtApps.length) { + logger.error('No prebuilt app found.'); + process.exit(0); + } + + const inputInquirer = >readerGenerator.next().value; + + return inputInquirer.then(this.appConfigReplace.bind(this)).then(this.spawnLiteServer.bind(this)).catch(logger.error.bind(logger)); + } + + private appConfigReplace(inputParams: LiteServeRunnerInputs) { + return new Promise((resolvePromise, reject) => { + if (!inputParams['configRewrite'] || !inputParams['configRewrite'].length) { + logger.verbose(green('No rewrite has been made')); + resolvePromise(inputParams); + return; + } + + let appPath = getApps() + .filter((app) => app.name === inputParams.app) + .map((project) => this.getOutputPath(project))[0]; + appPath = resolve(appPath, 'app.config.json'); + const rewriteFlags = `-${inputParams['configRewrite'].join('')}`; + + const spinner = ora(`Rewriting ${appPath} with flags: ${rewriteFlags}`).start(); + const replace = spawn(process.cwd() + '/scripts/app-config-replace.js', [`--config=${appPath}`, rewriteFlags]); + + replace.stdout.on('data', (data) => logger.verbose(data.toString())); + replace.stderr.on('data', (data) => { + logger.error(data.toString()); + reject(); + }); + replace.on('exit', (code) => { + spinner.succeed(); + logger.verbose(green(`Rewrite ${appPath} succeeded!`)); + resolvePromise(inputParams); + }); + }); + } + + private spawnLiteServer(inputParams: LiteServeRunnerInputs) { + const spinner = ora(`Starting lite-serve, please wait and don't move!`).start(); + + return new Promise((resolvePromise, reject) => { + const liteServe = spawn('npm', ['run', '--quiet', 'ng', 'run', `${inputParams.app}:lite-serve:standalone`]); + process.on('SIGINT', () => { + liteServe.kill('SIGINT'); + spinner.text = red('Lite-serve terminated.'); + spinner.fail(); + }); + + liteServe.stdout.on('data', (data) => { + if (data.toString().includes(`lite-serve serving folder`)) { + spinner.text = green('Lite-serve is running.'); + } + logger.verbose(data.toString()); + }); + liteServe.stderr.on('data', (data) => { + logger.error(data.toString()); + reject(); + }); + liteServe.on('exit', (code) => { + logger.verbose('Lite-serve process exited with code ' + code.toString()); + resolvePromise(); + }); + }); + } + + private getOutputPath(project) { + return resolve(process.cwd(), project.architect.build.options.outputPath); + } + + private getAppList(): ComplexListChoice[] { + return getApps().map((project) => { + if (existsSync(this.getOutputPath(project))) { + return { + name: project.name, + disabled: false + }; + } + return { + name: `${project.name} (not built)`, + disabled: true + }; + }); + } +} diff --git a/scripts/run b/scripts/run new file mode 100755 index 000000000..67e62c76c --- /dev/null +++ b/scripts/run @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const path = require('path'); +const tsConfigPath = path.resolve(__dirname, 'tsconfig.json'); +const tsConfig = require(tsConfigPath); + +require('ts-node').register({ project: tsConfigPath }); +require('tsconfig-paths').register({ + project: tsConfigPath, + baseUrl: path.resolve(__dirname), + paths: tsConfig.compilerOptions.paths +}); + +const handlerParam = process.argv[2]; +const RunnerClass = require(`./npm/${handlerParam}.ts`).default; + +const runnerArgs = [ ...process.argv ]; +runnerArgs.splice(2, 1); +const runner = new RunnerClass(runnerArgs); +runner.run(); diff --git a/scripts/tsconfig.json b/scripts/tsconfig.json new file mode 100644 index 000000000..8ba610f54 --- /dev/null +++ b/scripts/tsconfig.json @@ -0,0 +1,32 @@ +{ + "compilerOptions": { + "outDir": "./dist/scripts", + "module": "commonjs", + "target": "es5", + "baseUrl": ".", + "sourceMap": false, + "declaration": false, + "moduleResolution": "node", + "resolveJsonModule": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "skipLibCheck": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noImplicitReturns": true, + "allowSyntheticDefaultImports": true, + "typeRoots": [ + "node_modules/@types", + "node_modules/commander/typings/index.d.ts" + ], + "lib": ["es2018", "dom"], + "types": ["node", "jasmine", "jest"], + "paths": { + "angular.json": ["../angular.json"] + } + }, + "exclude": ["node_modules"], + "angularCompilerOptions": { + "preserveWhitespaces": false + } +} diff --git a/tools/helpers/logger.js b/tools/helpers/logger.js new file mode 100644 index 000000000..f1d0bc222 --- /dev/null +++ b/tools/helpers/logger.js @@ -0,0 +1,26 @@ +const { createLogger, transports, format } = require('winston'); +const { yellow, green, red, blue, magenta, cyan } = require('chalk'); + +const levels = { + error: red, + warn: yellow, + info: cyan, + verbose: magenta, + debug: green, + silly: blue +}; + +const myFormat = format.printf(({ level, message, label, timestamp }) => { + return `[${levels[level](timestamp)}]: ${message}`; +}); + +module.exports = createLogger({ + level: 'silly', + format: format.combine( + // format.splat(), + format.timestamp(), + format.prettyPrint(), + myFormat + ), + transports: [new transports.Console()] +});