nativescript 8.9.0-dev.2 → 8.9.0-dev.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/test-deps-versions-generated.json +1 -1
- package/docs/man_pages/project/configuration/widget-ios.md +24 -0
- package/docs/man_pages/project/configuration/widget.md +24 -0
- package/docs/man_pages/start.md +1 -1
- package/lib/android-tools-info.js +11 -22
- package/lib/base-package-manager.js +53 -70
- package/lib/bun-package-manager.js +75 -98
- package/lib/color.js +4 -4
- package/lib/commands/add-platform.js +14 -30
- package/lib/commands/apple-login.js +18 -29
- package/lib/commands/appstore-list.js +34 -45
- package/lib/commands/appstore-upload.js +54 -67
- package/lib/commands/build.js +55 -87
- package/lib/commands/clean.js +169 -184
- package/lib/commands/command-base.js +14 -27
- package/lib/commands/config.js +49 -68
- package/lib/commands/create-project.js +215 -234
- package/lib/commands/debug.js +66 -88
- package/lib/commands/deploy.js +28 -44
- package/lib/commands/embedding/embed.js +37 -56
- package/lib/commands/extensibility/install-extension.js +5 -16
- package/lib/commands/extensibility/list-extensions.js +13 -24
- package/lib/commands/extensibility/uninstall-extension.js +4 -15
- package/lib/commands/fonts.js +30 -41
- package/lib/commands/generate-assets.js +13 -28
- package/lib/commands/generate-help.js +2 -13
- package/lib/commands/generate.js +49 -60
- package/lib/commands/info.js +2 -13
- package/lib/commands/install.js +34 -49
- package/lib/commands/list-platforms.js +14 -25
- package/lib/commands/migrate.js +15 -26
- package/lib/commands/native-add.js +23 -46
- package/lib/commands/platform-clean.js +19 -32
- package/lib/commands/plugin/add-plugin.js +12 -25
- package/lib/commands/plugin/build-plugin.js +31 -44
- package/lib/commands/plugin/create-plugin.js +114 -137
- package/lib/commands/plugin/list-plugins.js +22 -33
- package/lib/commands/plugin/remove-plugin.js +21 -34
- package/lib/commands/plugin/update-plugin.js +20 -33
- package/lib/commands/post-install.js +25 -38
- package/lib/commands/prepare.js +19 -35
- package/lib/commands/preview.js +50 -63
- package/lib/commands/remove-platform.js +7 -18
- package/lib/commands/resources/resources-update.js +14 -27
- package/lib/commands/run.js +55 -76
- package/lib/commands/start.js +6 -19
- package/lib/commands/test-init.js +126 -137
- package/lib/commands/test.js +72 -95
- package/lib/commands/typings.js +126 -142
- package/lib/commands/update-platform.js +26 -39
- package/lib/commands/update.js +31 -44
- package/lib/commands/widget.js +408 -357
- package/lib/common/child-process.js +53 -72
- package/lib/common/codeGeneration/code-entity.js +1 -1
- package/lib/common/codeGeneration/code-printer.js +1 -1
- package/lib/common/command-params.js +7 -18
- package/lib/common/commands/analytics.js +29 -42
- package/lib/common/commands/autocompletion.js +41 -58
- package/lib/common/commands/device/device-log-stream.js +12 -23
- package/lib/common/commands/device/get-file.js +23 -34
- package/lib/common/commands/device/list-applications.js +12 -23
- package/lib/common/commands/device/list-devices.js +72 -87
- package/lib/common/commands/device/list-files.js +24 -35
- package/lib/common/commands/device/put-file.js +23 -34
- package/lib/common/commands/device/run-application.js +12 -25
- package/lib/common/commands/device/stop-application.js +11 -22
- package/lib/common/commands/device/uninstall-application.js +6 -17
- package/lib/common/commands/generate-messages.js +17 -28
- package/lib/common/commands/help.js +20 -33
- package/lib/common/commands/package-manager-get.js +6 -17
- package/lib/common/commands/package-manager-set.js +9 -20
- package/lib/common/commands/post-install.js +2 -13
- package/lib/common/commands/preuninstall.js +27 -42
- package/lib/common/commands/proxy/proxy-base.js +11 -22
- package/lib/common/commands/proxy/proxy-clear.js +4 -15
- package/lib/common/commands/proxy/proxy-get.js +3 -14
- package/lib/common/commands/proxy/proxy-set.js +87 -100
- package/lib/common/constants.js +11 -11
- package/lib/common/decorators.js +10 -22
- package/lib/common/dispatchers.js +84 -101
- package/lib/common/errors.js +92 -107
- package/lib/common/file-system.js +110 -132
- package/lib/common/header.js +1 -2
- package/lib/common/helpers.js +149 -178
- package/lib/common/host-info.js +40 -53
- package/lib/common/http-client.js +104 -119
- package/lib/common/logger/appenders/cli-appender.js +1 -2
- package/lib/common/logger/appenders/emit-appender.js +1 -2
- package/lib/common/logger/layouts/cli-layout.js +1 -2
- package/lib/common/logger/logger.js +4 -4
- package/lib/common/mobile/android/android-application-manager.js +138 -159
- package/lib/common/mobile/android/android-debug-bridge-result-handler.js +1 -1
- package/lib/common/mobile/android/android-debug-bridge.js +92 -117
- package/lib/common/mobile/android/android-device-file-system.js +101 -134
- package/lib/common/mobile/android/android-device-hash-service.js +52 -77
- package/lib/common/mobile/android/android-device.js +73 -90
- package/lib/common/mobile/android/android-emulator-services.js +105 -130
- package/lib/common/mobile/android/android-log-filter.js +1 -1
- package/lib/common/mobile/android/android-virtual-device-service.js +78 -99
- package/lib/common/mobile/android/device-android-debug-bridge.js +13 -29
- package/lib/common/mobile/android/genymotion/genymotion-service.js +94 -121
- package/lib/common/mobile/android/genymotion/virtualbox-service.js +74 -91
- package/lib/common/mobile/android/logcat-helper.js +114 -133
- package/lib/common/mobile/application-manager-base.js +89 -112
- package/lib/common/mobile/device-log-provider-base.js +7 -18
- package/lib/common/mobile/ios/device/ios-application-manager.js +79 -108
- package/lib/common/mobile/ios/device/ios-device-file-system.js +78 -105
- package/lib/common/mobile/ios/device/ios-device-operations.js +106 -143
- package/lib/common/mobile/ios/device/ios-device.js +20 -36
- package/lib/common/mobile/ios/ios-device-base.js +58 -81
- package/lib/common/mobile/ios/simulator/ios-emulator-services.js +66 -95
- package/lib/common/mobile/ios/simulator/ios-sim-resolver.js +1 -1
- package/lib/common/mobile/ios/simulator/ios-simulator-application-manager.js +61 -90
- package/lib/common/mobile/ios/simulator/ios-simulator-device.js +31 -47
- package/lib/common/mobile/ios/simulator/ios-simulator-file-system.js +37 -62
- package/lib/common/mobile/ios/simulator/ios-simulator-log-provider.js +24 -35
- package/lib/common/mobile/mobile-core/android-device-discovery.js +44 -63
- package/lib/common/mobile/mobile-core/android-emulator-discovery.js +23 -34
- package/lib/common/mobile/mobile-core/android-process-service.js +174 -213
- package/lib/common/mobile/mobile-core/device-discovery.js +2 -13
- package/lib/common/mobile/mobile-core/devices-service.js +400 -450
- package/lib/common/mobile/mobile-core/ios-device-discovery.js +25 -36
- package/lib/common/mobile/mobile-core/ios-simulator-discovery.js +49 -64
- package/lib/common/mobile/mobile-helper.js +15 -26
- package/lib/common/mobile/wp8/wp8-emulator-services.js +25 -52
- package/lib/common/opener.js +2 -2
- package/lib/common/prompter.js +91 -106
- package/lib/common/queue.js +9 -20
- package/lib/common/services/auto-completion-service.js +40 -53
- package/lib/common/services/cancellation.js +17 -28
- package/lib/common/services/commands-service.js +156 -179
- package/lib/common/services/help-service.js +130 -155
- package/lib/common/services/hooks-service.js +99 -114
- package/lib/common/services/ios-notification-service.js +21 -34
- package/lib/common/services/json-file-settings-service.js +56 -75
- package/lib/common/services/lock-service.js +35 -52
- package/lib/common/services/message-contract-generator.js +35 -46
- package/lib/common/services/micro-templating-service.js +6 -17
- package/lib/common/services/net-service.js +92 -109
- package/lib/common/services/project-files-manager.js +10 -23
- package/lib/common/services/proxy-service.js +13 -24
- package/lib/common/services/qr.js +13 -24
- package/lib/common/services/settings-service.js +1 -1
- package/lib/common/services/xcode-select-service.js +20 -35
- package/lib/common/utils.js +2 -2
- package/lib/common/validators/project-name-validator.js +1 -1
- package/lib/common/validators/validation-result.js +1 -1
- package/lib/common/verify-node-version.js +2 -3
- package/lib/common/yok.js +25 -38
- package/lib/config.js +41 -56
- package/lib/constants.js +24 -24
- package/lib/controllers/build-controller.js +82 -99
- package/lib/controllers/debug-controller.js +111 -132
- package/lib/controllers/deploy-controller.js +15 -23
- package/lib/controllers/migrate-controller.js +780 -853
- package/lib/controllers/platform-controller.js +74 -89
- package/lib/controllers/prepare-controller.js +241 -270
- package/lib/controllers/run-controller.js +411 -425
- package/lib/controllers/update-controller-base.js +16 -29
- package/lib/controllers/update-controller.js +101 -126
- package/lib/data/prepare-data.js +4 -1
- package/lib/definitions/project.d.ts +24 -24
- package/lib/detached-processes/cleanup-js-subprocess.js +3 -12
- package/lib/detached-processes/cleanup-process.js +16 -25
- package/lib/device-path-provider.js +23 -34
- package/lib/device-sockets/ios/app-debug-socket-proxy-factory.js +155 -170
- package/lib/device-sockets/ios/notification.js +1 -1
- package/lib/device-sockets/ios/socket-request-executor.js +26 -41
- package/lib/helpers/android-bundle-validator-helper.js +1 -1
- package/lib/helpers/deploy-command-helper.js +44 -49
- package/lib/helpers/key-command-helper.js +4 -13
- package/lib/helpers/livesync-command-helper.js +138 -153
- package/lib/helpers/network-connectivity-validator.js +6 -17
- package/lib/helpers/options-track-helper.js +6 -17
- package/lib/helpers/platform-command-helper.js +103 -124
- package/lib/key-commands/index.js +150 -200
- package/lib/nativescript-cli.js +5 -14
- package/lib/node-package-manager.js +90 -113
- package/lib/options.js +4 -13
- package/lib/package-installation-manager.js +132 -167
- package/lib/package-manager.js +64 -87
- package/lib/platform-command-param.js +4 -15
- package/lib/pnpm-package-manager.js +60 -79
- package/lib/project-data.js +1 -1
- package/lib/providers/project-files-provider.js +1 -1
- package/lib/services/analytics/analytics-broker-process.js +13 -22
- package/lib/services/analytics/analytics-broker.js +17 -30
- package/lib/services/analytics/analytics-service.js +165 -201
- package/lib/services/analytics/google-analytics-provider.js +41 -56
- package/lib/services/analytics-settings-service.js +15 -32
- package/lib/services/android/android-bundle-tool-service.js +43 -60
- package/lib/services/android/gradle-build-args-service.js +10 -21
- package/lib/services/android/gradle-build-service.js +22 -35
- package/lib/services/android/gradle-command-service.js +22 -35
- package/lib/services/android-device-debug-service.js +92 -119
- package/lib/services/android-plugin-build-service.js +219 -245
- package/lib/services/android-project-service.js +134 -179
- package/lib/services/android-resources-migration-service.js +57 -70
- package/lib/services/apple-portal/apple-portal-application-service.js +46 -63
- package/lib/services/apple-portal/apple-portal-session-service.js +196 -215
- package/lib/services/apple-portal/srp/srp-wrapper.js +45 -60
- package/lib/services/assets-generation/assets-generation-service.js +114 -128
- package/lib/services/build-artifacts-service.js +9 -20
- package/lib/services/build-info-file-service.js +20 -35
- package/lib/services/cleanup-service.js +47 -76
- package/lib/services/cocoapods-service.js +124 -145
- package/lib/services/device/device-install-app-service.js +54 -71
- package/lib/services/doctor-service.js +106 -125
- package/lib/services/extensibility-service.js +87 -106
- package/lib/services/files-hash-service.js +26 -43
- package/lib/services/hmr-status-service.js +1 -1
- package/lib/services/initialize-service.js +38 -51
- package/lib/services/ios/export-options-plist-service.js +41 -54
- package/lib/services/ios/ios-signing-service.js +171 -190
- package/lib/services/ios/spm-service.js +52 -65
- package/lib/services/ios/xcodebuild-args-service.js +77 -94
- package/lib/services/ios/xcodebuild-command-service.js +14 -25
- package/lib/services/ios/xcodebuild-service.js +52 -71
- package/lib/services/ios-debugger-port-service.js +24 -37
- package/lib/services/ios-device-debug-service.js +75 -102
- package/lib/services/ios-entitlements-service.js +31 -42
- package/lib/services/ios-extensions-service.js +18 -29
- package/lib/services/ios-project-service.js +530 -591
- package/lib/services/ios-provision-service.js +110 -131
- package/lib/services/ios-watch-app-service.js +21 -32
- package/lib/services/ip-service.js +39 -54
- package/lib/services/itmstransporter-service.js +129 -152
- package/lib/services/livesync/android-device-livesync-service-base.js +31 -48
- package/lib/services/livesync/android-device-livesync-service.js +121 -150
- package/lib/services/livesync/android-device-livesync-sockets-service.js +123 -154
- package/lib/services/livesync/android-livesync-service.js +14 -35
- package/lib/services/livesync/android-livesync-tool.js +90 -113
- package/lib/services/livesync/device-livesync-service-base.js +16 -29
- package/lib/services/livesync/ios-device-livesync-service.js +120 -149
- package/lib/services/livesync/ios-livesync-service.js +43 -59
- package/lib/services/livesync/platform-livesync-service-base.js +98 -123
- package/lib/services/log-parser-service.js +1 -1
- package/lib/services/log-source-map-service.js +31 -42
- package/lib/services/marking-mode-service.js +17 -30
- package/lib/services/npm-config-service.js +1 -1
- package/lib/services/pacote-service.js +54 -69
- package/lib/services/performance-service.js +1 -1
- package/lib/services/platform/add-platform-service.js +57 -78
- package/lib/services/platform/platform-validation-service.js +22 -33
- package/lib/services/platform/prepare-native-platform-service.js +51 -64
- package/lib/services/platform-environment-requirements.js +27 -38
- package/lib/services/plugins-service.js +126 -151
- package/lib/services/project-backup-service.js +1 -1
- package/lib/services/project-changes-service.js +126 -143
- package/lib/services/project-cleanup-service.js +65 -78
- package/lib/services/project-config-service.js +78 -88
- package/lib/services/project-data-service.js +112 -129
- package/lib/services/project-name-service.js +28 -43
- package/lib/services/project-service.js +90 -109
- package/lib/services/project-templates-service.js +52 -67
- package/lib/services/start-service.js +41 -59
- package/lib/services/temp-service.js +8 -21
- package/lib/services/terminal-spinner-service.js +15 -26
- package/lib/services/test-execution-service.js +64 -77
- package/lib/services/test-initialization-service.js +2 -2
- package/lib/services/timeline-profiler-service.js +1 -1
- package/lib/services/versions-service.js +120 -139
- package/lib/services/webpack/webpack-compiler-service.js +228 -251
- package/lib/services/xcconfig-service.js +8 -19
- package/lib/sys-info.js +45 -62
- package/lib/tools/node-modules/node-modules-builder.js +16 -27
- package/lib/yarn-package-manager.js +59 -78
- package/lib/yarn2-package-manager.js +62 -81
- package/package.json +67 -82
- package/node_modules/@npmcli/move-file/LICENSE.md +0 -22
- package/node_modules/@npmcli/move-file/README.md +0 -69
- package/node_modules/@npmcli/move-file/lib/index.js +0 -185
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/LICENSE +0 -21
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/bin/cmd.js +0 -68
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/index.js +0 -31
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/find-made.js +0 -29
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/mkdirp-manual.js +0 -64
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/mkdirp-native.js +0 -39
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/opts-arg.js +0 -23
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/path-arg.js +0 -29
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/use-native.js +0 -10
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/package.json +0 -44
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/readme.markdown +0 -266
- package/node_modules/@npmcli/move-file/package.json +0 -47
- package/node_modules/balanced-match/.github/FUNDING.yml +0 -2
- package/node_modules/balanced-match/LICENSE.md +0 -21
- package/node_modules/balanced-match/README.md +0 -97
- package/node_modules/balanced-match/index.js +0 -62
- package/node_modules/balanced-match/package.json +0 -48
- package/node_modules/concat-map/.travis.yml +0 -4
- package/node_modules/concat-map/LICENSE +0 -18
- package/node_modules/concat-map/README.markdown +0 -62
- package/node_modules/concat-map/example/map.js +0 -6
- package/node_modules/concat-map/index.js +0 -13
- package/node_modules/concat-map/package.json +0 -43
- package/node_modules/concat-map/test/map.js +0 -39
- package/node_modules/fs.realpath/LICENSE +0 -43
- package/node_modules/fs.realpath/README.md +0 -33
- package/node_modules/fs.realpath/index.js +0 -66
- package/node_modules/fs.realpath/old.js +0 -303
- package/node_modules/fs.realpath/package.json +0 -26
- package/node_modules/inflight/LICENSE +0 -15
- package/node_modules/inflight/README.md +0 -37
- package/node_modules/inflight/inflight.js +0 -54
- package/node_modules/inflight/package.json +0 -29
- package/node_modules/inherits/LICENSE +0 -16
- package/node_modules/inherits/README.md +0 -42
- package/node_modules/inherits/inherits.js +0 -9
- package/node_modules/inherits/inherits_browser.js +0 -27
- package/node_modules/inherits/package.json +0 -29
- package/node_modules/once/LICENSE +0 -15
- package/node_modules/once/README.md +0 -79
- package/node_modules/once/once.js +0 -42
- package/node_modules/once/package.json +0 -33
- package/node_modules/path-is-absolute/index.js +0 -20
- package/node_modules/path-is-absolute/license +0 -21
- package/node_modules/path-is-absolute/package.json +0 -43
- package/node_modules/path-is-absolute/readme.md +0 -59
- package/node_modules/rimraf/LICENSE +0 -15
- package/node_modules/rimraf/README.md +0 -101
- package/node_modules/rimraf/bin.js +0 -68
- package/node_modules/rimraf/node_modules/brace-expansion/LICENSE +0 -21
- package/node_modules/rimraf/node_modules/brace-expansion/README.md +0 -129
- package/node_modules/rimraf/node_modules/brace-expansion/index.js +0 -201
- package/node_modules/rimraf/node_modules/brace-expansion/package.json +0 -47
- package/node_modules/rimraf/node_modules/glob/LICENSE +0 -21
- package/node_modules/rimraf/node_modules/glob/README.md +0 -378
- package/node_modules/rimraf/node_modules/glob/common.js +0 -238
- package/node_modules/rimraf/node_modules/glob/glob.js +0 -790
- package/node_modules/rimraf/node_modules/glob/package.json +0 -55
- package/node_modules/rimraf/node_modules/glob/sync.js +0 -486
- package/node_modules/rimraf/node_modules/minimatch/LICENSE +0 -15
- package/node_modules/rimraf/node_modules/minimatch/README.md +0 -230
- package/node_modules/rimraf/node_modules/minimatch/minimatch.js +0 -947
- package/node_modules/rimraf/node_modules/minimatch/package.json +0 -33
- package/node_modules/rimraf/package.json +0 -32
- package/node_modules/rimraf/rimraf.js +0 -360
- package/node_modules/stringify-package/LICENSE +0 -13
- package/node_modules/stringify-package/README.md +0 -55
- package/node_modules/stringify-package/index.js +0 -18
- package/node_modules/stringify-package/package.json +0 -38
- package/node_modules/wrappy/LICENSE +0 -15
- package/node_modules/wrappy/README.md +0 -36
- package/node_modules/wrappy/package.json +0 -29
- package/node_modules/wrappy/wrappy.js +0 -33
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
exports.HelpService = void 0;
|
|
13
4
|
const path = require("path");
|
|
@@ -44,155 +35,141 @@ class HelpService {
|
|
|
44
35
|
this.pathToHtmlPages = this.$staticConfig.HTML_PAGES_DIR;
|
|
45
36
|
this.pathToManPages = this.$staticConfig.MAN_PAGES_DIR;
|
|
46
37
|
}
|
|
47
|
-
openHelpForCommandInBrowser(commandData) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
38
|
+
async openHelpForCommandInBrowser(commandData) {
|
|
39
|
+
const { commandName } = commandData;
|
|
40
|
+
const htmlPage = (await this.convertCommandNameToFileName(commandData)) +
|
|
41
|
+
HelpService.HTML_FILE_EXTENSION;
|
|
42
|
+
this.$logger.trace("Opening help for command '%s'. FileName is '%s'.", commandName, htmlPage);
|
|
43
|
+
this.$fs.ensureDirectoryExists(this.pathToHtmlPages);
|
|
44
|
+
if (!this.tryOpeningSelectedPage(htmlPage)) {
|
|
45
|
+
// HTML pages may have been skipped on post-install, lets generate them.
|
|
46
|
+
this.$logger.trace("Required HTML file '%s' is missing. Let's try generating HTML files and see if we'll find it.", htmlPage);
|
|
47
|
+
await this.generateHtmlPages();
|
|
54
48
|
if (!this.tryOpeningSelectedPage(htmlPage)) {
|
|
55
|
-
|
|
56
|
-
this.$logger.trace("Required HTML file '%s' is missing. Let's try generating HTML files and see if we'll find it.", htmlPage);
|
|
57
|
-
yield this.generateHtmlPages();
|
|
58
|
-
if (!this.tryOpeningSelectedPage(htmlPage)) {
|
|
59
|
-
this.$errors.fail("Unable to find help for '%s'", commandName);
|
|
60
|
-
}
|
|
49
|
+
this.$errors.fail("Unable to find help for '%s'", commandName);
|
|
61
50
|
}
|
|
62
|
-
}
|
|
51
|
+
}
|
|
63
52
|
}
|
|
64
|
-
generateHtmlPages() {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
continue;
|
|
86
|
-
}
|
|
87
|
-
const htmlDirFullPath = HelpService.getHtmlDirFullPath(docsDir);
|
|
88
|
-
this.$fs.ensureDirectoryExists(htmlDirFullPath);
|
|
89
|
-
const extensionMdFiles = this.$fs.enumerateFilesInDirectorySync(docsDir);
|
|
90
|
-
try {
|
|
91
|
-
yield Promise.all(_.map(extensionMdFiles, (markdownFile) => {
|
|
92
|
-
const htmlPageGenerationData = {
|
|
93
|
-
basicHtmlPage: basicHtmlPageForExtensions,
|
|
94
|
-
pathToMdFile: markdownFile,
|
|
95
|
-
pathToMdPages: docsDir,
|
|
96
|
-
pathToHtmlPages: htmlDirFullPath,
|
|
97
|
-
extensionName: extensionData.extensionName,
|
|
98
|
-
};
|
|
99
|
-
return this.createHtmlPage(htmlPageGenerationData);
|
|
100
|
-
}));
|
|
101
|
-
}
|
|
102
|
-
catch (err) {
|
|
103
|
-
this.$logger.warn(`Unable to generate html help for extension ${extensionData.extensionName}. Error is: ${err.message}`);
|
|
104
|
-
}
|
|
105
|
-
this.$logger.trace(`Finished generation of html help content for extension ${extensionData.extensionName}`);
|
|
53
|
+
async generateHtmlPages() {
|
|
54
|
+
const mdFiles = this.$fs.enumerateFilesInDirectorySync(this.pathToManPages);
|
|
55
|
+
const basicHtmlPage = this.$fs.readText(this.pathToBasicPage);
|
|
56
|
+
await Promise.all(_.map(mdFiles, (markdownFile) => {
|
|
57
|
+
const htmlPageGenerationData = {
|
|
58
|
+
basicHtmlPage,
|
|
59
|
+
pathToMdFile: markdownFile,
|
|
60
|
+
pathToMdPages: this.pathToManPages,
|
|
61
|
+
pathToHtmlPages: this.pathToHtmlPages,
|
|
62
|
+
};
|
|
63
|
+
return this.createHtmlPage(htmlPageGenerationData);
|
|
64
|
+
}));
|
|
65
|
+
const installedExtensionsData = this.$extensibilityService.getInstalledExtensionsData();
|
|
66
|
+
const basicHtmlPageForExtensions = this.$fs.readText(this.pathToBasicPageForExtensions);
|
|
67
|
+
for (const extensionData of installedExtensionsData) {
|
|
68
|
+
const docsDir = extensionData.docs;
|
|
69
|
+
if (docsDir) {
|
|
70
|
+
this.$logger.trace(`Start generation of html help content for extension ${extensionData.extensionName}`);
|
|
71
|
+
if (!this.$fs.exists(docsDir)) {
|
|
72
|
+
this.$logger.warn(`Unable to generate html help pages for extension ${extensionData.extensionName} as the docs directory ${docsDir} does not exist.`);
|
|
73
|
+
continue;
|
|
106
74
|
}
|
|
75
|
+
const htmlDirFullPath = HelpService.getHtmlDirFullPath(docsDir);
|
|
76
|
+
this.$fs.ensureDirectoryExists(htmlDirFullPath);
|
|
77
|
+
const extensionMdFiles = this.$fs.enumerateFilesInDirectorySync(docsDir);
|
|
78
|
+
try {
|
|
79
|
+
await Promise.all(_.map(extensionMdFiles, (markdownFile) => {
|
|
80
|
+
const htmlPageGenerationData = {
|
|
81
|
+
basicHtmlPage: basicHtmlPageForExtensions,
|
|
82
|
+
pathToMdFile: markdownFile,
|
|
83
|
+
pathToMdPages: docsDir,
|
|
84
|
+
pathToHtmlPages: htmlDirFullPath,
|
|
85
|
+
extensionName: extensionData.extensionName,
|
|
86
|
+
};
|
|
87
|
+
return this.createHtmlPage(htmlPageGenerationData);
|
|
88
|
+
}));
|
|
89
|
+
}
|
|
90
|
+
catch (err) {
|
|
91
|
+
this.$logger.warn(`Unable to generate html help for extension ${extensionData.extensionName}. Error is: ${err.message}`);
|
|
92
|
+
}
|
|
93
|
+
this.$logger.trace(`Finished generation of html help content for extension ${extensionData.extensionName}`);
|
|
107
94
|
}
|
|
108
|
-
|
|
109
|
-
|
|
95
|
+
}
|
|
96
|
+
this.$logger.trace("Finished generating HTML files.");
|
|
110
97
|
}
|
|
111
|
-
showCommandLineHelp(commandData) {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
this.$logger.printMarkdown(help);
|
|
115
|
-
});
|
|
98
|
+
async showCommandLineHelp(commandData) {
|
|
99
|
+
const help = await this.getCommandLineHelpForCommand(commandData);
|
|
100
|
+
this.$logger.printMarkdown(help);
|
|
116
101
|
}
|
|
117
102
|
/**
|
|
118
103
|
* Gets the help content for a specific command that should be shown on the terminal.
|
|
119
104
|
* @param {string} commandName Name of the command for which to read the help.
|
|
120
105
|
* @returns {Promise<string>} Help content of the command parsed with all terminal rules applied (stripped content that should be shown only for html help).
|
|
121
106
|
*/
|
|
122
|
-
getCommandLineHelpForCommand(commandData) {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
return commandLineHelp;
|
|
133
|
-
});
|
|
107
|
+
async getCommandLineHelpForCommand(commandData) {
|
|
108
|
+
const helpText = await this.readMdFileForCommand(commandData);
|
|
109
|
+
const commandLineHelp = (await this.$microTemplateService.parseContent(helpText, { isHtml: false }))
|
|
110
|
+
.replace(/ /g, " ")
|
|
111
|
+
.replace(HelpService.MARKDOWN_LINK_REGEX, "$1")
|
|
112
|
+
.replace(HelpService.SPAN_REGEX, (matchingSubstring, textBeforeSpan, textInsideSpan, index, fullString) => {
|
|
113
|
+
return textBeforeSpan + textInsideSpan.replace(this.newLineRegex, "");
|
|
114
|
+
})
|
|
115
|
+
.replace(HelpService.NEW_LINE_REGEX, os_1.EOL);
|
|
116
|
+
return commandLineHelp;
|
|
134
117
|
}
|
|
135
118
|
// This method should return Promise in order to generate all html pages simultaneously.
|
|
136
|
-
createHtmlPage(htmlPageGenerationData) {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
isHtml: true,
|
|
145
|
-
});
|
|
146
|
-
const htmlText = (0, marked_1.marked)(outputText);
|
|
147
|
-
const filePath = pathToMdFile
|
|
148
|
-
.replace(path.basename(pathToMdPages), path.basename(pathToHtmlPages))
|
|
149
|
-
.replace(mdFileName, htmlFileName);
|
|
150
|
-
this.$logger.trace("HTML file path for '%s' man page is: '%s'.", mdFileName, filePath);
|
|
151
|
-
let outputHtml = basicHtmlPage
|
|
152
|
-
.replace(HelpService.MAN_PAGE_NAME_REGEX, mdFileName.replace(HelpService.MARKDOWN_FILE_EXTENSION, ""))
|
|
153
|
-
.replace(HelpService.HTML_COMMAND_HELP_REGEX, htmlText)
|
|
154
|
-
.replace(HelpService.RELATIVE_PATH_TO_STYLES_CSS_REGEX, path.relative(path.dirname(filePath), this.pathToStylesCss))
|
|
155
|
-
.replace(HelpService.RELATIVE_PATH_TO_IMAGES_REGEX, path.relative(path.dirname(filePath), this.pathToImages))
|
|
156
|
-
.replace(HelpService.RELATIVE_PATH_TO_INDEX_REGEX, path.relative(path.dirname(filePath), this.pathToIndexHtml));
|
|
157
|
-
if (extensionName) {
|
|
158
|
-
outputHtml = outputHtml.replace(HelpService.EXTENSION_NAME_REGEX, extensionName);
|
|
159
|
-
}
|
|
160
|
-
this.$fs.writeFile(filePath, outputHtml);
|
|
161
|
-
this.$logger.trace("Finished writing file '%s'.", filePath);
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
convertCommandNameToFileName(commandData) {
|
|
165
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
166
|
-
let { commandName } = commandData;
|
|
167
|
-
const defaultCommandMatch = commandName && commandName.match(/([\w-]+?)\|\*/);
|
|
168
|
-
if (defaultCommandMatch) {
|
|
169
|
-
this.$logger.trace("Default command found. Replace current command name '%s' with '%s'.", commandName, defaultCommandMatch[1]);
|
|
170
|
-
commandName = defaultCommandMatch[1];
|
|
171
|
-
}
|
|
172
|
-
const availableCommands = this.$injector
|
|
173
|
-
.getRegisteredCommandsNames(true)
|
|
174
|
-
.sort();
|
|
175
|
-
this.$logger.trace("List of registered commands: %s", availableCommands.join(", "));
|
|
176
|
-
if (commandName && !_.includes(availableCommands, commandName)) {
|
|
177
|
-
yield this.throwMissingCommandError(commandData);
|
|
178
|
-
}
|
|
179
|
-
return (commandName && commandName.replace(/\|/g, "-")) || "start";
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
|
-
throwMissingCommandError(commandData) {
|
|
183
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
184
|
-
const commandName = commandData.commandName;
|
|
185
|
-
const commandInfo = {
|
|
186
|
-
inputStrings: [commandName, ...commandData.commandArguments],
|
|
187
|
-
commandDelimiter: "|" /* CommandsDelimiters.HierarchicalCommand */,
|
|
188
|
-
defaultCommandDelimiter: "|*" /* CommandsDelimiters.DefaultHierarchicalCommand */,
|
|
189
|
-
};
|
|
190
|
-
const extensionData = yield this.$extensibilityService.getExtensionNameWhereCommandIsRegistered(commandInfo);
|
|
191
|
-
if (extensionData) {
|
|
192
|
-
this.$errors.fail(extensionData.installationMessage);
|
|
193
|
-
}
|
|
194
|
-
this.$errors.fail("Unknown command '%s'. Try '$ %s help' for a full list of supported commands.", commandName, this.$staticConfig.CLIENT_NAME.toLowerCase());
|
|
119
|
+
async createHtmlPage(htmlPageGenerationData) {
|
|
120
|
+
const { basicHtmlPage, pathToMdFile, pathToMdPages, pathToHtmlPages, extensionName, } = htmlPageGenerationData;
|
|
121
|
+
const mdFileName = path.basename(pathToMdFile);
|
|
122
|
+
const htmlFileName = mdFileName.replace(HelpService.MARKDOWN_FILE_EXTENSION, HelpService.HTML_FILE_EXTENSION);
|
|
123
|
+
this.$logger.trace("Generating '%s' help topic.", htmlFileName);
|
|
124
|
+
const helpText = this.$fs.readText(pathToMdFile);
|
|
125
|
+
const outputText = await this.$microTemplateService.parseContent(helpText, {
|
|
126
|
+
isHtml: true,
|
|
195
127
|
});
|
|
128
|
+
const htmlText = await (0, marked_1.marked)(outputText);
|
|
129
|
+
const filePath = pathToMdFile
|
|
130
|
+
.replace(path.basename(pathToMdPages), path.basename(pathToHtmlPages))
|
|
131
|
+
.replace(mdFileName, htmlFileName);
|
|
132
|
+
this.$logger.trace("HTML file path for '%s' man page is: '%s'.", mdFileName, filePath);
|
|
133
|
+
let outputHtml = basicHtmlPage
|
|
134
|
+
.replace(HelpService.MAN_PAGE_NAME_REGEX, mdFileName.replace(HelpService.MARKDOWN_FILE_EXTENSION, ""))
|
|
135
|
+
.replace(HelpService.HTML_COMMAND_HELP_REGEX, htmlText)
|
|
136
|
+
.replace(HelpService.RELATIVE_PATH_TO_STYLES_CSS_REGEX, path.relative(path.dirname(filePath), this.pathToStylesCss))
|
|
137
|
+
.replace(HelpService.RELATIVE_PATH_TO_IMAGES_REGEX, path.relative(path.dirname(filePath), this.pathToImages))
|
|
138
|
+
.replace(HelpService.RELATIVE_PATH_TO_INDEX_REGEX, path.relative(path.dirname(filePath), this.pathToIndexHtml));
|
|
139
|
+
if (extensionName) {
|
|
140
|
+
outputHtml = outputHtml.replace(HelpService.EXTENSION_NAME_REGEX, extensionName);
|
|
141
|
+
}
|
|
142
|
+
this.$fs.writeFile(filePath, outputHtml);
|
|
143
|
+
this.$logger.trace("Finished writing file '%s'.", filePath);
|
|
144
|
+
}
|
|
145
|
+
async convertCommandNameToFileName(commandData) {
|
|
146
|
+
let { commandName } = commandData;
|
|
147
|
+
const defaultCommandMatch = commandName && commandName.match(/([\w-]+?)\|\*/);
|
|
148
|
+
if (defaultCommandMatch) {
|
|
149
|
+
this.$logger.trace("Default command found. Replace current command name '%s' with '%s'.", commandName, defaultCommandMatch[1]);
|
|
150
|
+
commandName = defaultCommandMatch[1];
|
|
151
|
+
}
|
|
152
|
+
const availableCommands = this.$injector
|
|
153
|
+
.getRegisteredCommandsNames(true)
|
|
154
|
+
.sort();
|
|
155
|
+
this.$logger.trace("List of registered commands: %s", availableCommands.join(", "));
|
|
156
|
+
if (commandName && !_.includes(availableCommands, commandName)) {
|
|
157
|
+
await this.throwMissingCommandError(commandData);
|
|
158
|
+
}
|
|
159
|
+
return (commandName && commandName.replace(/\|/g, "-")) || "start";
|
|
160
|
+
}
|
|
161
|
+
async throwMissingCommandError(commandData) {
|
|
162
|
+
const commandName = commandData.commandName;
|
|
163
|
+
const commandInfo = {
|
|
164
|
+
inputStrings: [commandName, ...commandData.commandArguments],
|
|
165
|
+
commandDelimiter: "|" /* CommandsDelimiters.HierarchicalCommand */,
|
|
166
|
+
defaultCommandDelimiter: "|*" /* CommandsDelimiters.DefaultHierarchicalCommand */,
|
|
167
|
+
};
|
|
168
|
+
const extensionData = await this.$extensibilityService.getExtensionNameWhereCommandIsRegistered(commandInfo);
|
|
169
|
+
if (extensionData) {
|
|
170
|
+
this.$errors.fail(extensionData.installationMessage);
|
|
171
|
+
}
|
|
172
|
+
this.$errors.fail("Unknown command '%s'. Try '$ %s help' for a full list of supported commands.", commandName, this.$staticConfig.CLIENT_NAME.toLowerCase());
|
|
196
173
|
}
|
|
197
174
|
static getHtmlDirFullPath(docsDir) {
|
|
198
175
|
return path.join(path.dirname(docsDir), "html");
|
|
@@ -231,19 +208,18 @@ class HelpService {
|
|
|
231
208
|
this.$logger.trace("Unable to find file: '%s'", htmlPage);
|
|
232
209
|
return false;
|
|
233
210
|
}
|
|
234
|
-
readMdFileForCommand(commandData) {
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
yield this.throwMissingCommandError(commandData);
|
|
244
|
-
});
|
|
211
|
+
async readMdFileForCommand(commandData) {
|
|
212
|
+
const mdFileName = (await this.convertCommandNameToFileName(commandData)) +
|
|
213
|
+
HelpService.MARKDOWN_FILE_EXTENSION;
|
|
214
|
+
this.$logger.trace("Reading help for command '%s'. FileName is '%s'.", commandData.commandName, mdFileName);
|
|
215
|
+
const markdownFile = this.getHelpFile(mdFileName, this.pathToManPages);
|
|
216
|
+
if (markdownFile) {
|
|
217
|
+
return this.$fs.readText(markdownFile);
|
|
218
|
+
}
|
|
219
|
+
await this.throwMissingCommandError(commandData);
|
|
245
220
|
}
|
|
246
221
|
}
|
|
222
|
+
exports.HelpService = HelpService;
|
|
247
223
|
HelpService.MARKDOWN_FILE_EXTENSION = ".md";
|
|
248
224
|
HelpService.HTML_FILE_EXTENSION = ".html";
|
|
249
225
|
HelpService.MAN_PAGE_NAME_REGEX = /@MAN_PAGE_NAME@/g;
|
|
@@ -255,6 +231,5 @@ HelpService.EXTENSION_NAME_REGEX = /@EXTENSION_NAME@/g;
|
|
|
255
231
|
HelpService.MARKDOWN_LINK_REGEX = /\[([\w \-\`\<\>\*\:\\]+?)\]\([\s\S]+?\)/g;
|
|
256
232
|
HelpService.SPAN_REGEX = /([\s\S]*?)(?:\r?\n)?<span.*?>([\s\S]*?)<\/span>(?:\r?\n)*/g;
|
|
257
233
|
HelpService.NEW_LINE_REGEX = /<\/?\s*?br\s*?\/?>/g; // <br>, <br > <br/> <br />
|
|
258
|
-
exports.HelpService = HelpService;
|
|
259
234
|
yok_1.injector.register("helpService", HelpService);
|
|
260
235
|
//# sourceMappingURL=help-service.js.map
|
|
@@ -5,15 +5,6 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
7
|
};
|
|
8
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
9
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
10
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
11
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
12
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
13
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
14
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
15
|
-
});
|
|
16
|
-
};
|
|
17
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
9
|
exports.HooksService = void 0;
|
|
19
10
|
const path = require("path");
|
|
@@ -74,123 +65,117 @@ class HooksService {
|
|
|
74
65
|
const traceMessage = `AfterHookName for command ${commandName} is ${afterHookName}`;
|
|
75
66
|
return this.executeHooks(afterHookName, traceMessage, hookArguments);
|
|
76
67
|
}
|
|
77
|
-
executeHooks(hookName, traceMessage, hookArguments) {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
68
|
+
async executeHooks(hookName, traceMessage, hookArguments) {
|
|
69
|
+
if (this.$config.DISABLE_HOOKS || !this.$options.hooks) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const hookArgs = hookArguments && hookArguments[this.hookArgsName];
|
|
73
|
+
let projectDir = hookArgs && hookArgs.projectDir;
|
|
74
|
+
if (!projectDir && hookArgs) {
|
|
75
|
+
const candidate = (0, helpers_1.getValueFromNestedObject)(hookArgs, "projectDir");
|
|
76
|
+
projectDir = candidate && candidate.projectDir;
|
|
77
|
+
}
|
|
78
|
+
this.$logger.trace(`Project dir from hooksArgs is: ${projectDir}.`);
|
|
79
|
+
this.initialize(projectDir);
|
|
80
|
+
this.$logger.trace(traceMessage);
|
|
81
|
+
const results = [];
|
|
82
|
+
try {
|
|
83
|
+
for (const hooksDirectory of this.hooksDirectories) {
|
|
84
|
+
results.push(await this.executeHooksInDirectory(hooksDirectory, hookName, hookArguments));
|
|
81
85
|
}
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
const candidate = (0, helpers_1.getValueFromNestedObject)(hookArgs, "projectDir");
|
|
86
|
-
projectDir = candidate && candidate.projectDir;
|
|
86
|
+
const customHooks = this.getCustomHooksByName(hookName);
|
|
87
|
+
for (const hook of customHooks) {
|
|
88
|
+
results.push(await this.executeHook(this.$projectHelper.projectDir, hookName, hook, hookArguments));
|
|
87
89
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
this.$logger.trace(
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
this.$logger.trace(`Failed during hook execution ${hookName}.`);
|
|
93
|
+
this.$errors.fail(err.message || err);
|
|
94
|
+
}
|
|
95
|
+
return _.flatten(results);
|
|
96
|
+
}
|
|
97
|
+
async executeHook(directoryPath, hookName, hook, hookArguments) {
|
|
98
|
+
hookArguments = hookArguments || {};
|
|
99
|
+
let result;
|
|
100
|
+
const relativePath = path.relative(directoryPath, hook.fullPath);
|
|
101
|
+
const trackId = relativePath.replace(new RegExp("\\" + path.sep, "g"), constants_1.AnalyticsEventLabelDelimiter);
|
|
102
|
+
let command = this.getSheBangInterpreter(hook);
|
|
103
|
+
let inProc = false;
|
|
104
|
+
if (!command) {
|
|
105
|
+
command = hook.fullPath;
|
|
106
|
+
if (path.extname(hook.fullPath).toLowerCase() === ".js") {
|
|
107
|
+
command = process.argv[0];
|
|
108
|
+
inProc = this.shouldExecuteInProcess(this.$fs.readText(hook.fullPath));
|
|
100
109
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
110
|
+
}
|
|
111
|
+
const startTime = this.$performanceService.now();
|
|
112
|
+
if (inProc) {
|
|
113
|
+
this.$logger.trace("Executing %s hook at location %s in-process", hookName, hook.fullPath);
|
|
114
|
+
const hookEntryPoint = require(hook.fullPath);
|
|
115
|
+
this.$logger.trace(`Validating ${hookName} arguments.`);
|
|
116
|
+
const invalidArguments = this.validateHookArguments(hookEntryPoint, hook.fullPath);
|
|
117
|
+
if (invalidArguments.length) {
|
|
118
|
+
this.$logger.warn(`${hook.fullPath} will NOT be executed because it has invalid arguments - ${color_1.color.grey(invalidArguments.join(", "))}.`);
|
|
119
|
+
return;
|
|
104
120
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
const trackId = relativePath.replace(new RegExp("\\" + path.sep, "g"), constants_1.AnalyticsEventLabelDelimiter);
|
|
114
|
-
let command = this.getSheBangInterpreter(hook);
|
|
115
|
-
let inProc = false;
|
|
116
|
-
if (!command) {
|
|
117
|
-
command = hook.fullPath;
|
|
118
|
-
if (path.extname(hook.fullPath).toLowerCase() === ".js") {
|
|
119
|
-
command = process.argv[0];
|
|
120
|
-
inProc = this.shouldExecuteInProcess(this.$fs.readText(hook.fullPath));
|
|
121
|
-
}
|
|
121
|
+
// HACK for backwards compatibility:
|
|
122
|
+
// In case $projectData wasn't resolved by the time we got here (most likely we got here without running a command but through a service directly)
|
|
123
|
+
// then it is probably passed as a hookArg
|
|
124
|
+
// if that is the case then pass it directly to the hook instead of trying to resolve $projectData via injector
|
|
125
|
+
// This helps make hooks stateless
|
|
126
|
+
const projectDataHookArg = hookArguments["hookArgs"] && hookArguments["hookArgs"]["projectData"];
|
|
127
|
+
if (projectDataHookArg) {
|
|
128
|
+
hookArguments["projectData"] = hookArguments["$projectData"] = projectDataHookArg;
|
|
122
129
|
}
|
|
123
|
-
const
|
|
124
|
-
if (
|
|
125
|
-
this.$logger.trace("
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
const invalidArguments = this.validateHookArguments(hookEntryPoint, hook.fullPath);
|
|
129
|
-
if (invalidArguments.length) {
|
|
130
|
-
this.$logger.warn(`${hook.fullPath} will NOT be executed because it has invalid arguments - ${color_1.color.grey(invalidArguments.join(", "))}.`);
|
|
131
|
-
return;
|
|
130
|
+
const maybePromise = this.$injector.resolve(hookEntryPoint, hookArguments);
|
|
131
|
+
if (maybePromise) {
|
|
132
|
+
this.$logger.trace("Hook promises to signal completion");
|
|
133
|
+
try {
|
|
134
|
+
result = await maybePromise;
|
|
132
135
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
const projectDataHookArg = hookArguments["hookArgs"] && hookArguments["hookArgs"]["projectData"];
|
|
139
|
-
if (projectDataHookArg) {
|
|
140
|
-
hookArguments["projectData"] = hookArguments["$projectData"] = projectDataHookArg;
|
|
141
|
-
}
|
|
142
|
-
const maybePromise = this.$injector.resolve(hookEntryPoint, hookArguments);
|
|
143
|
-
if (maybePromise) {
|
|
144
|
-
this.$logger.trace("Hook promises to signal completion");
|
|
145
|
-
try {
|
|
146
|
-
result = yield maybePromise;
|
|
136
|
+
catch (err) {
|
|
137
|
+
if (err &&
|
|
138
|
+
_.isBoolean(err.stopExecution) &&
|
|
139
|
+
err.errorAsWarning === true) {
|
|
140
|
+
this.$logger.warn(err.message || err);
|
|
147
141
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
this.$logger.warn(err.message || err);
|
|
153
|
-
}
|
|
154
|
-
else {
|
|
155
|
-
// Print the actual error with its callstack, so it is easy to find out which hooks is causing troubles.
|
|
156
|
-
this.$logger.error(err);
|
|
157
|
-
throw err || new Error(`Failed to execute hook: ${hook.fullPath}.`);
|
|
158
|
-
}
|
|
142
|
+
else {
|
|
143
|
+
// Print the actual error with its callstack, so it is easy to find out which hooks is causing troubles.
|
|
144
|
+
this.$logger.error(err);
|
|
145
|
+
throw err || new Error(`Failed to execute hook: ${hook.fullPath}.`);
|
|
159
146
|
}
|
|
160
|
-
this.$logger.trace("Hook completed");
|
|
161
147
|
}
|
|
148
|
+
this.$logger.trace("Hook completed");
|
|
162
149
|
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
this.$logger.trace("Finished executing %s hook at location %s with environment ", hookName, hook.fullPath, environment);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
const environment = this.prepareEnvironment(hook.fullPath);
|
|
153
|
+
this.$logger.trace("Executing %s hook at location %s with environment ", hookName, hook.fullPath, environment);
|
|
154
|
+
const output = await this.$childProcess.spawnFromEvent(command, [hook.fullPath], "close", environment, { throwError: false });
|
|
155
|
+
result = output;
|
|
156
|
+
if (output.exitCode !== 0) {
|
|
157
|
+
throw new Error(output.stdout + output.stderr);
|
|
172
158
|
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
159
|
+
this.$logger.trace("Finished executing %s hook at location %s with environment ", hookName, hook.fullPath, environment);
|
|
160
|
+
}
|
|
161
|
+
const endTime = this.$performanceService.now();
|
|
162
|
+
this.$performanceService.processExecutionData(trackId, startTime, endTime, [
|
|
163
|
+
hookArguments,
|
|
164
|
+
]);
|
|
165
|
+
return result;
|
|
179
166
|
}
|
|
180
|
-
executeHooksInDirectory(directoryPath, hookName, hookArguments) {
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
results.push(result);
|
|
190
|
-
}
|
|
167
|
+
async executeHooksInDirectory(directoryPath, hookName, hookArguments) {
|
|
168
|
+
hookArguments = hookArguments || {};
|
|
169
|
+
const results = [];
|
|
170
|
+
const hooks = this.getHooksByName(directoryPath, hookName);
|
|
171
|
+
for (let i = 0; i < hooks.length; ++i) {
|
|
172
|
+
const hook = hooks[i];
|
|
173
|
+
const result = await this.executeHook(directoryPath, hookName, hook, hookArguments);
|
|
174
|
+
if (result) {
|
|
175
|
+
results.push(result);
|
|
191
176
|
}
|
|
192
|
-
|
|
193
|
-
|
|
177
|
+
}
|
|
178
|
+
return results;
|
|
194
179
|
}
|
|
195
180
|
getCustomHooksByName(hookName) {
|
|
196
181
|
const hooks = [];
|
|
@@ -315,6 +300,7 @@ class HooksService {
|
|
|
315
300
|
return invalidArguments;
|
|
316
301
|
}
|
|
317
302
|
}
|
|
303
|
+
exports.HooksService = HooksService;
|
|
318
304
|
HooksService.HOOKS_DIRECTORY_NAME = "hooks";
|
|
319
305
|
__decorate([
|
|
320
306
|
(0, decorators_1.memoize)({
|
|
@@ -326,6 +312,5 @@ __decorate([
|
|
|
326
312
|
},
|
|
327
313
|
})
|
|
328
314
|
], HooksService.prototype, "initialize", null);
|
|
329
|
-
exports.HooksService = HooksService;
|
|
330
315
|
yok_1.injector.register("hooksService", HooksService);
|
|
331
316
|
//# sourceMappingURL=hooks-service.js.map
|