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