nativescript 8.9.0-dev.0 → 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.
Files changed (405) hide show
  1. package/config/test-deps-versions-generated.json +1 -1
  2. package/lib/.d.ts +1 -0
  3. package/lib/android-tools-info.js +32 -9
  4. package/lib/base-package-manager.js +71 -47
  5. package/lib/bootstrap.js +6 -1
  6. package/lib/bun-package-manager.js +104 -65
  7. package/lib/color.js +5 -2
  8. package/lib/commands/add-platform.js +31 -14
  9. package/lib/commands/apple-login.js +30 -18
  10. package/lib/commands/appstore-list.js +46 -34
  11. package/lib/commands/appstore-upload.js +68 -52
  12. package/lib/commands/build.js +90 -57
  13. package/lib/commands/clean.js +197 -161
  14. package/lib/commands/command-base.js +28 -14
  15. package/lib/commands/config.js +71 -48
  16. package/lib/commands/create-project.js +235 -210
  17. package/lib/commands/debug.js +93 -66
  18. package/lib/commands/deploy.js +47 -30
  19. package/lib/commands/embedding/embed.js +59 -33
  20. package/lib/commands/extensibility/install-extension.js +17 -5
  21. package/lib/commands/extensibility/list-extensions.js +25 -13
  22. package/lib/commands/extensibility/uninstall-extension.js +16 -4
  23. package/lib/commands/fonts.js +42 -30
  24. package/lib/commands/generate-assets.js +29 -13
  25. package/lib/commands/generate-help.js +14 -2
  26. package/lib/commands/generate.js +70 -12
  27. package/lib/commands/info.js +14 -2
  28. package/lib/commands/install.js +50 -34
  29. package/lib/commands/list-platforms.js +26 -14
  30. package/lib/commands/migrate.js +27 -15
  31. package/lib/commands/native-add.js +51 -23
  32. package/lib/commands/platform-clean.js +33 -19
  33. package/lib/commands/plugin/add-plugin.js +26 -12
  34. package/lib/commands/plugin/build-plugin.js +45 -31
  35. package/lib/commands/plugin/create-plugin.js +138 -110
  36. package/lib/commands/plugin/list-plugins.js +34 -22
  37. package/lib/commands/plugin/remove-plugin.js +35 -20
  38. package/lib/commands/plugin/update-plugin.js +34 -20
  39. package/lib/commands/post-install.js +39 -20
  40. package/lib/commands/prepare.js +39 -22
  41. package/lib/commands/preview.js +64 -49
  42. package/lib/commands/remove-platform.js +19 -7
  43. package/lib/commands/resources/resources-update.js +28 -13
  44. package/lib/commands/run.js +77 -55
  45. package/lib/commands/setup.js +1 -0
  46. package/lib/commands/start.js +20 -6
  47. package/lib/commands/test-init.js +138 -123
  48. package/lib/commands/test.js +97 -67
  49. package/lib/commands/typings.js +143 -126
  50. package/lib/commands/update-platform.js +40 -22
  51. package/lib/commands/update.js +45 -30
  52. package/lib/commands/widget.js +767 -0
  53. package/lib/common/bootstrap.js +1 -0
  54. package/lib/common/child-process.js +75 -53
  55. package/lib/common/codeGeneration/code-entity.js +2 -1
  56. package/lib/common/codeGeneration/code-printer.js +2 -1
  57. package/lib/common/command-params.js +19 -7
  58. package/lib/common/commands/analytics.js +43 -27
  59. package/lib/common/commands/autocompletion.js +59 -39
  60. package/lib/common/commands/device/device-log-stream.js +24 -12
  61. package/lib/common/commands/device/get-file.js +35 -22
  62. package/lib/common/commands/device/list-applications.js +24 -12
  63. package/lib/common/commands/device/list-devices.js +90 -72
  64. package/lib/common/commands/device/list-files.js +36 -23
  65. package/lib/common/commands/device/put-file.js +35 -22
  66. package/lib/common/commands/device/run-application.js +26 -12
  67. package/lib/common/commands/device/stop-application.js +23 -11
  68. package/lib/common/commands/device/uninstall-application.js +18 -6
  69. package/lib/common/commands/doctor.js +3 -2
  70. package/lib/common/commands/generate-messages.js +29 -17
  71. package/lib/common/commands/help.js +34 -20
  72. package/lib/common/commands/package-manager-get.js +18 -6
  73. package/lib/common/commands/package-manager-set.js +21 -9
  74. package/lib/common/commands/post-install.js +14 -2
  75. package/lib/common/commands/preuninstall.js +48 -24
  76. package/lib/common/commands/proxy/proxy-base.js +23 -8
  77. package/lib/common/commands/proxy/proxy-clear.js +16 -4
  78. package/lib/common/commands/proxy/proxy-get.js +15 -3
  79. package/lib/common/commands/proxy/proxy-set.js +101 -87
  80. package/lib/common/common-lib.js +1 -0
  81. package/lib/common/constants.js +22 -11
  82. package/lib/common/decorators.js +70 -10
  83. package/lib/common/dispatchers.js +106 -80
  84. package/lib/common/errors.js +116 -91
  85. package/lib/common/file-system.js +141 -108
  86. package/lib/common/header.js +5 -1
  87. package/lib/common/helpers.js +267 -152
  88. package/lib/common/host-info.js +54 -37
  89. package/lib/common/http-client.js +128 -93
  90. package/lib/common/logger/appenders/cli-appender.js +6 -1
  91. package/lib/common/logger/appenders/emit-appender.js +6 -1
  92. package/lib/common/logger/layouts/cli-layout.js +3 -1
  93. package/lib/common/logger/logger.js +9 -4
  94. package/lib/common/messages/messages.js +6 -0
  95. package/lib/common/mobile/android/android-application-manager.js +162 -122
  96. package/lib/common/mobile/android/android-debug-bridge-result-handler.js +2 -1
  97. package/lib/common/mobile/android/android-debug-bridge.js +118 -87
  98. package/lib/common/mobile/android/android-device-file-system.js +135 -98
  99. package/lib/common/mobile/android/android-device-hash-service.js +78 -50
  100. package/lib/common/mobile/android/android-device.js +93 -68
  101. package/lib/common/mobile/android/android-emulator-services.js +131 -105
  102. package/lib/common/mobile/android/android-ini-file-parser.js +9 -0
  103. package/lib/common/mobile/android/android-log-filter.js +5 -1
  104. package/lib/common/mobile/android/android-virtual-device-service.js +123 -76
  105. package/lib/common/mobile/android/device-android-debug-bridge.js +30 -13
  106. package/lib/common/mobile/android/genymotion/genymotion-service.js +123 -91
  107. package/lib/common/mobile/android/genymotion/virtualbox-service.js +92 -64
  108. package/lib/common/mobile/android/logcat-helper.js +140 -108
  109. package/lib/common/mobile/application-manager-base.js +113 -84
  110. package/lib/common/mobile/device-emitter.js +4 -0
  111. package/lib/common/mobile/device-log-emitter.js +1 -0
  112. package/lib/common/mobile/device-log-provider-base.js +19 -7
  113. package/lib/common/mobile/device-log-provider.js +23 -0
  114. package/lib/common/mobile/device-platforms-constants.js +1 -0
  115. package/lib/common/mobile/emulator-helper.js +3 -0
  116. package/lib/common/mobile/ios/device/ios-application-manager.js +111 -79
  117. package/lib/common/mobile/ios/device/ios-device-file-system.js +106 -78
  118. package/lib/common/mobile/ios/device/ios-device-operations.js +146 -105
  119. package/lib/common/mobile/ios/device/ios-device.js +40 -20
  120. package/lib/common/mobile/ios/ios-device-base.js +82 -58
  121. package/lib/common/mobile/ios/ios-device-product-name-mapper.js +2 -0
  122. package/lib/common/mobile/ios/ios-log-filter.js +1 -0
  123. package/lib/common/mobile/ios/simulator/ios-emulator-services.js +96 -63
  124. package/lib/common/mobile/ios/simulator/ios-sim-resolver.js +2 -1
  125. package/lib/common/mobile/ios/simulator/ios-simulator-application-manager.js +95 -60
  126. package/lib/common/mobile/ios/simulator/ios-simulator-device.js +48 -27
  127. package/lib/common/mobile/ios/simulator/ios-simulator-file-system.js +63 -37
  128. package/lib/common/mobile/ios/simulator/ios-simulator-log-provider.js +36 -24
  129. package/lib/common/mobile/local-to-device-path-data-factory.js +1 -0
  130. package/lib/common/mobile/log-filter.js +2 -0
  131. package/lib/common/mobile/logging-levels.js +1 -0
  132. package/lib/common/mobile/mobile-core/android-device-discovery.js +64 -43
  133. package/lib/common/mobile/mobile-core/android-emulator-discovery.js +35 -21
  134. package/lib/common/mobile/mobile-core/android-process-service.js +214 -143
  135. package/lib/common/mobile/mobile-core/device-discovery.js +14 -2
  136. package/lib/common/mobile/mobile-core/devices-service.js +505 -386
  137. package/lib/common/mobile/mobile-core/ios-device-discovery.js +37 -24
  138. package/lib/common/mobile/mobile-core/ios-simulator-discovery.js +65 -47
  139. package/lib/common/mobile/mobile-helper.js +27 -15
  140. package/lib/common/mobile/wp8/wp8-emulator-services.js +53 -25
  141. package/lib/common/opener.js +3 -2
  142. package/lib/common/os-info.js +1 -0
  143. package/lib/common/plist-parser.js +1 -0
  144. package/lib/common/project-helper.js +1 -0
  145. package/lib/common/prompter.js +114 -91
  146. package/lib/common/queue.js +21 -9
  147. package/lib/common/resource-loader.js +1 -0
  148. package/lib/common/services/auto-completion-service.js +65 -40
  149. package/lib/common/services/cancellation.js +29 -17
  150. package/lib/common/services/commands-service.js +180 -146
  151. package/lib/common/services/help-service.js +166 -133
  152. package/lib/common/services/hooks-service.js +121 -93
  153. package/lib/common/services/ios-notification-service.js +35 -21
  154. package/lib/common/services/json-file-settings-service.js +77 -52
  155. package/lib/common/services/lock-service.js +58 -35
  156. package/lib/common/services/message-contract-generator.js +47 -35
  157. package/lib/common/services/messages-service.js +1 -0
  158. package/lib/common/services/micro-templating-service.js +21 -4
  159. package/lib/common/services/net-service.js +110 -90
  160. package/lib/common/services/project-files-manager.js +28 -10
  161. package/lib/common/services/project-files-provider-base.js +1 -0
  162. package/lib/common/services/proxy-service.js +25 -13
  163. package/lib/common/services/qr.js +25 -13
  164. package/lib/common/services/settings-service.js +2 -1
  165. package/lib/common/services/xcode-select-service.js +36 -20
  166. package/lib/common/utils.js +3 -2
  167. package/lib/common/validators/project-name-validator.js +2 -1
  168. package/lib/common/validators/validation-result.js +2 -1
  169. package/lib/common/verify-node-version.js +11 -3
  170. package/lib/common/yok.js +69 -35
  171. package/lib/config.js +72 -36
  172. package/lib/constants-provider.js +1 -0
  173. package/lib/constants.js +78 -25
  174. package/lib/controllers/build-controller.js +100 -82
  175. package/lib/controllers/debug-controller.js +133 -107
  176. package/lib/controllers/deploy-controller.js +24 -15
  177. package/lib/controllers/migrate-controller.js +884 -723
  178. package/lib/controllers/platform-controller.js +94 -71
  179. package/lib/controllers/prepare-controller.js +274 -232
  180. package/lib/controllers/run-controller.js +427 -397
  181. package/lib/controllers/update-controller-base.js +30 -16
  182. package/lib/controllers/update-controller.js +130 -94
  183. package/lib/data/build-data.js +1 -0
  184. package/lib/data/controller-data-base.js +1 -0
  185. package/lib/data/debug-data.js +1 -0
  186. package/lib/data/platform-data.js +1 -0
  187. package/lib/data/prepare-data.js +2 -4
  188. package/lib/data/run-data.js +1 -0
  189. package/lib/definitions/ios.d.ts +4 -2
  190. package/lib/definitions/project.d.ts +26 -0
  191. package/lib/detached-processes/cleanup-js-subprocess.js +20 -5
  192. package/lib/detached-processes/cleanup-process.js +43 -30
  193. package/lib/detached-processes/file-log-service.js +2 -1
  194. package/lib/device-path-provider.js +35 -23
  195. package/lib/device-sockets/ios/app-debug-socket-proxy-factory.js +171 -149
  196. package/lib/device-sockets/ios/notification.js +4 -1
  197. package/lib/device-sockets/ios/socket-request-executor.js +42 -24
  198. package/lib/helpers/android-bundle-validator-helper.js +3 -2
  199. package/lib/helpers/deploy-command-helper.js +50 -44
  200. package/lib/helpers/key-command-helper.js +17 -6
  201. package/lib/helpers/livesync-command-helper.js +155 -137
  202. package/lib/helpers/network-connectivity-validator.js +18 -6
  203. package/lib/helpers/options-track-helper.js +19 -7
  204. package/lib/helpers/package-path-helper.js +1 -0
  205. package/lib/helpers/platform-command-helper.js +127 -101
  206. package/lib/helpers/version-validator-helper.js +1 -0
  207. package/lib/key-commands/bootstrap.js +3 -2
  208. package/lib/key-commands/index.js +205 -154
  209. package/lib/nativescript-cli-lib-bootstrap.js +4 -0
  210. package/lib/nativescript-cli-lib.js +1 -0
  211. package/lib/nativescript-cli.js +24 -6
  212. package/lib/node/pbxproj-dom-xcode.js +1 -0
  213. package/lib/node/xcode.js +1 -0
  214. package/lib/node-package-manager.js +114 -81
  215. package/lib/options.js +156 -122
  216. package/lib/package-installation-manager.js +172 -130
  217. package/lib/package-manager.js +88 -63
  218. package/lib/platform-command-param.js +16 -4
  219. package/lib/pnpm-package-manager.js +81 -59
  220. package/lib/project-data.js +13 -1
  221. package/lib/providers/project-files-provider.js +2 -1
  222. package/lib/resolvers/livesync-service-resolver.js +1 -0
  223. package/lib/services/analytics/analytics-broker-process.js +32 -19
  224. package/lib/services/analytics/analytics-broker.js +31 -17
  225. package/lib/services/analytics/analytics-service.js +210 -170
  226. package/lib/services/analytics/google-analytics-provider.js +59 -43
  227. package/lib/services/analytics-settings-service.js +37 -15
  228. package/lib/services/android/android-bundle-tool-service.js +61 -43
  229. package/lib/services/android/gradle-build-args-service.js +23 -9
  230. package/lib/services/android/gradle-build-service.js +36 -22
  231. package/lib/services/android/gradle-command-service.js +36 -22
  232. package/lib/services/android-device-debug-service.js +123 -90
  233. package/lib/services/android-plugin-build-service.js +260 -205
  234. package/lib/services/android-project-service.js +241 -129
  235. package/lib/services/android-resources-migration-service.js +71 -51
  236. package/lib/services/apple-portal/apple-portal-application-service.js +64 -46
  237. package/lib/services/apple-portal/apple-portal-cookie-service.js +1 -0
  238. package/lib/services/apple-portal/apple-portal-session-service.js +218 -197
  239. package/lib/services/apple-portal/srp/srp-wrapper.js +61 -43
  240. package/lib/services/assets-generation/assets-generation-service.js +128 -103
  241. package/lib/services/build-artifacts-service.js +22 -10
  242. package/lib/services/build-data-service.js +1 -0
  243. package/lib/services/build-info-file-service.js +36 -20
  244. package/lib/services/cleanup-service.js +81 -48
  245. package/lib/services/cocoapods-platform-manager.js +9 -0
  246. package/lib/services/cocoapods-service.js +153 -112
  247. package/lib/services/debug-data-service.js +1 -0
  248. package/lib/services/debug-service-base.js +7 -0
  249. package/lib/services/device/device-install-app-service.js +72 -54
  250. package/lib/services/doctor-service.js +135 -101
  251. package/lib/services/extensibility-service.js +108 -81
  252. package/lib/services/files-hash-service.js +44 -26
  253. package/lib/services/hmr-status-service.js +3 -1
  254. package/lib/services/info-service.js +1 -0
  255. package/lib/services/initialize-service.js +54 -37
  256. package/lib/services/ios/export-options-plist-service.js +55 -38
  257. package/lib/services/ios/ios-signing-service.js +191 -168
  258. package/lib/services/ios/spm-service.js +73 -43
  259. package/lib/services/ios/xcodebuild-args-service.js +103 -77
  260. package/lib/services/ios/xcodebuild-command-service.js +26 -14
  261. package/lib/services/ios/xcodebuild-service.js +72 -52
  262. package/lib/services/ios-debugger-port-service.js +38 -24
  263. package/lib/services/ios-device-debug-service.js +103 -75
  264. package/lib/services/ios-entitlements-service.js +43 -31
  265. package/lib/services/ios-extensions-service.js +30 -18
  266. package/lib/services/ios-log-filter.js +20 -0
  267. package/lib/services/ios-native-target-service.js +6 -4
  268. package/lib/services/ios-project-service.js +605 -437
  269. package/lib/services/ios-provision-service.js +132 -108
  270. package/lib/services/ios-watch-app-service.js +33 -21
  271. package/lib/services/ip-service.js +55 -38
  272. package/lib/services/itmstransporter-service.js +153 -129
  273. package/lib/services/karma-execution.js +2 -0
  274. package/lib/services/livesync/android-device-livesync-service-base.js +49 -31
  275. package/lib/services/livesync/android-device-livesync-service.js +151 -120
  276. package/lib/services/livesync/android-device-livesync-sockets-service.js +155 -121
  277. package/lib/services/livesync/android-livesync-service.js +36 -14
  278. package/lib/services/livesync/android-livesync-tool.js +117 -90
  279. package/lib/services/livesync/device-livesync-service-base.js +30 -15
  280. package/lib/services/livesync/ios-device-livesync-service.js +150 -114
  281. package/lib/services/livesync/ios-livesync-service.js +60 -42
  282. package/lib/services/livesync/livesync-socket.js +1 -0
  283. package/lib/services/livesync/platform-livesync-service-base.js +124 -94
  284. package/lib/services/livesync-process-data-service.js +1 -0
  285. package/lib/services/log-parser-service.js +2 -1
  286. package/lib/services/log-source-map-service.js +56 -30
  287. package/lib/services/marking-mode-service.js +33 -17
  288. package/lib/services/metadata-filtering-service.js +1 -0
  289. package/lib/services/npm-config-service.js +5 -1
  290. package/lib/services/pacote-service.js +73 -51
  291. package/lib/services/performance-service.js +4 -2
  292. package/lib/services/platform/add-platform-service.js +119 -51
  293. package/lib/services/platform/platform-validation-service.js +34 -22
  294. package/lib/services/platform/prepare-native-platform-service.js +65 -49
  295. package/lib/services/platform-environment-requirements.js +43 -27
  296. package/lib/services/platform-project-service-base.js +1 -0
  297. package/lib/services/platforms-data-service.js +1 -0
  298. package/lib/services/plugins-service.js +168 -125
  299. package/lib/services/prepare-data-service.js +1 -0
  300. package/lib/services/project-backup-service.js +5 -1
  301. package/lib/services/project-changes-service.js +152 -124
  302. package/lib/services/project-cleanup-service.js +79 -64
  303. package/lib/services/project-config-service.js +111 -73
  304. package/lib/services/project-data-service.js +154 -108
  305. package/lib/services/project-name-service.js +44 -28
  306. package/lib/services/project-service.js +113 -84
  307. package/lib/services/project-templates-service.js +68 -52
  308. package/lib/services/qr-code-terminal-service.js +1 -0
  309. package/lib/services/require-service.js +1 -0
  310. package/lib/services/start-service.js +60 -41
  311. package/lib/services/temp-service.js +22 -8
  312. package/lib/services/terminal-spinner-service.js +28 -15
  313. package/lib/services/test-execution-service.js +79 -59
  314. package/lib/services/test-initialization-service.js +6 -2
  315. package/lib/services/timeline-profiler-service.js +2 -1
  316. package/lib/services/user-settings-service.js +1 -0
  317. package/lib/services/versions-service.js +140 -119
  318. package/lib/services/watch-ignore-list-service.js +1 -0
  319. package/lib/services/webpack/webpack-compiler-service.js +279 -215
  320. package/lib/services/xcconfig-service.js +21 -8
  321. package/lib/services/xcproj-service.js +1 -0
  322. package/lib/shared-event-bus.js +6 -0
  323. package/lib/sys-info.js +63 -45
  324. package/lib/tools/config-manipulation/config-transformer.js +21 -0
  325. package/lib/tools/node-modules/node-modules-builder.js +28 -16
  326. package/lib/tools/node-modules/node-modules-dependencies-builder.js +6 -0
  327. package/lib/yarn-package-manager.js +79 -59
  328. package/lib/yarn2-package-manager.js +82 -60
  329. package/node_modules/@npmcli/move-file/LICENSE.md +22 -0
  330. package/node_modules/@npmcli/move-file/README.md +69 -0
  331. package/node_modules/@npmcli/move-file/lib/index.js +185 -0
  332. package/node_modules/@npmcli/move-file/node_modules/mkdirp/LICENSE +21 -0
  333. package/node_modules/@npmcli/move-file/node_modules/mkdirp/bin/cmd.js +68 -0
  334. package/node_modules/@npmcli/move-file/node_modules/mkdirp/index.js +31 -0
  335. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/find-made.js +29 -0
  336. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/mkdirp-manual.js +64 -0
  337. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/mkdirp-native.js +39 -0
  338. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/opts-arg.js +23 -0
  339. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/path-arg.js +29 -0
  340. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/use-native.js +10 -0
  341. package/node_modules/@npmcli/move-file/node_modules/mkdirp/package.json +44 -0
  342. package/node_modules/@npmcli/move-file/node_modules/mkdirp/readme.markdown +266 -0
  343. package/node_modules/@npmcli/move-file/package.json +47 -0
  344. package/node_modules/balanced-match/.github/FUNDING.yml +2 -0
  345. package/node_modules/balanced-match/LICENSE.md +21 -0
  346. package/node_modules/balanced-match/README.md +97 -0
  347. package/node_modules/balanced-match/index.js +62 -0
  348. package/node_modules/balanced-match/package.json +48 -0
  349. package/node_modules/concat-map/.travis.yml +4 -0
  350. package/node_modules/concat-map/LICENSE +18 -0
  351. package/node_modules/concat-map/README.markdown +62 -0
  352. package/node_modules/concat-map/example/map.js +6 -0
  353. package/node_modules/concat-map/index.js +13 -0
  354. package/node_modules/concat-map/package.json +43 -0
  355. package/node_modules/concat-map/test/map.js +39 -0
  356. package/node_modules/fs.realpath/LICENSE +43 -0
  357. package/node_modules/fs.realpath/README.md +33 -0
  358. package/node_modules/fs.realpath/index.js +66 -0
  359. package/node_modules/fs.realpath/old.js +303 -0
  360. package/node_modules/fs.realpath/package.json +26 -0
  361. package/node_modules/inflight/LICENSE +15 -0
  362. package/node_modules/inflight/README.md +37 -0
  363. package/node_modules/inflight/inflight.js +54 -0
  364. package/node_modules/inflight/package.json +29 -0
  365. package/node_modules/inherits/LICENSE +16 -0
  366. package/node_modules/inherits/README.md +42 -0
  367. package/node_modules/inherits/inherits.js +9 -0
  368. package/node_modules/inherits/inherits_browser.js +27 -0
  369. package/node_modules/inherits/package.json +29 -0
  370. package/node_modules/once/LICENSE +15 -0
  371. package/node_modules/once/README.md +79 -0
  372. package/node_modules/once/once.js +42 -0
  373. package/node_modules/once/package.json +33 -0
  374. package/node_modules/path-is-absolute/index.js +20 -0
  375. package/node_modules/path-is-absolute/license +21 -0
  376. package/node_modules/path-is-absolute/package.json +43 -0
  377. package/node_modules/path-is-absolute/readme.md +59 -0
  378. package/node_modules/rimraf/LICENSE +15 -0
  379. package/node_modules/rimraf/README.md +101 -0
  380. package/node_modules/rimraf/bin.js +68 -0
  381. package/node_modules/rimraf/node_modules/brace-expansion/LICENSE +21 -0
  382. package/node_modules/rimraf/node_modules/brace-expansion/README.md +129 -0
  383. package/node_modules/rimraf/node_modules/brace-expansion/index.js +201 -0
  384. package/node_modules/rimraf/node_modules/brace-expansion/package.json +47 -0
  385. package/node_modules/rimraf/node_modules/glob/LICENSE +21 -0
  386. package/node_modules/rimraf/node_modules/glob/README.md +378 -0
  387. package/node_modules/rimraf/node_modules/glob/common.js +238 -0
  388. package/node_modules/rimraf/node_modules/glob/glob.js +790 -0
  389. package/node_modules/rimraf/node_modules/glob/package.json +55 -0
  390. package/node_modules/rimraf/node_modules/glob/sync.js +486 -0
  391. package/node_modules/rimraf/node_modules/minimatch/LICENSE +15 -0
  392. package/node_modules/rimraf/node_modules/minimatch/README.md +230 -0
  393. package/node_modules/rimraf/node_modules/minimatch/minimatch.js +947 -0
  394. package/node_modules/rimraf/node_modules/minimatch/package.json +33 -0
  395. package/node_modules/rimraf/package.json +32 -0
  396. package/node_modules/rimraf/rimraf.js +360 -0
  397. package/node_modules/stringify-package/LICENSE +13 -0
  398. package/node_modules/stringify-package/README.md +55 -0
  399. package/node_modules/stringify-package/index.js +18 -0
  400. package/node_modules/stringify-package/package.json +38 -0
  401. package/node_modules/wrappy/LICENSE +15 -0
  402. package/node_modules/wrappy/README.md +36 -0
  403. package/node_modules/wrappy/package.json +29 -0
  404. package/node_modules/wrappy/wrappy.js +33 -0
  405. package/package.json +79 -64
@@ -0,0 +1,33 @@
1
+ {
2
+ "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me)",
3
+ "name": "minimatch",
4
+ "description": "a glob matcher in javascript",
5
+ "version": "3.1.2",
6
+ "publishConfig": {
7
+ "tag": "v3-legacy"
8
+ },
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git://github.com/isaacs/minimatch.git"
12
+ },
13
+ "main": "minimatch.js",
14
+ "scripts": {
15
+ "test": "tap",
16
+ "preversion": "npm test",
17
+ "postversion": "npm publish",
18
+ "postpublish": "git push origin --all; git push origin --tags"
19
+ },
20
+ "engines": {
21
+ "node": "*"
22
+ },
23
+ "dependencies": {
24
+ "brace-expansion": "^1.1.7"
25
+ },
26
+ "devDependencies": {
27
+ "tap": "^15.1.6"
28
+ },
29
+ "license": "ISC",
30
+ "files": [
31
+ "minimatch.js"
32
+ ]
33
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "rimraf",
3
+ "version": "3.0.2",
4
+ "main": "rimraf.js",
5
+ "description": "A deep deletion module for node (like `rm -rf`)",
6
+ "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)",
7
+ "license": "ISC",
8
+ "repository": "git://github.com/isaacs/rimraf.git",
9
+ "scripts": {
10
+ "preversion": "npm test",
11
+ "postversion": "npm publish",
12
+ "postpublish": "git push origin --follow-tags",
13
+ "test": "tap test/*.js"
14
+ },
15
+ "bin": "./bin.js",
16
+ "dependencies": {
17
+ "glob": "^7.1.3"
18
+ },
19
+ "files": [
20
+ "LICENSE",
21
+ "README.md",
22
+ "bin.js",
23
+ "rimraf.js"
24
+ ],
25
+ "devDependencies": {
26
+ "mkdirp": "^0.5.1",
27
+ "tap": "^12.1.1"
28
+ },
29
+ "funding": {
30
+ "url": "https://github.com/sponsors/isaacs"
31
+ }
32
+ }
@@ -0,0 +1,360 @@
1
+ const assert = require("assert")
2
+ const path = require("path")
3
+ const fs = require("fs")
4
+ let glob = undefined
5
+ try {
6
+ glob = require("glob")
7
+ } catch (_err) {
8
+ // treat glob as optional.
9
+ }
10
+
11
+ const defaultGlobOpts = {
12
+ nosort: true,
13
+ silent: true
14
+ }
15
+
16
+ // for EMFILE handling
17
+ let timeout = 0
18
+
19
+ const isWindows = (process.platform === "win32")
20
+
21
+ const defaults = options => {
22
+ const methods = [
23
+ 'unlink',
24
+ 'chmod',
25
+ 'stat',
26
+ 'lstat',
27
+ 'rmdir',
28
+ 'readdir'
29
+ ]
30
+ methods.forEach(m => {
31
+ options[m] = options[m] || fs[m]
32
+ m = m + 'Sync'
33
+ options[m] = options[m] || fs[m]
34
+ })
35
+
36
+ options.maxBusyTries = options.maxBusyTries || 3
37
+ options.emfileWait = options.emfileWait || 1000
38
+ if (options.glob === false) {
39
+ options.disableGlob = true
40
+ }
41
+ if (options.disableGlob !== true && glob === undefined) {
42
+ throw Error('glob dependency not found, set `options.disableGlob = true` if intentional')
43
+ }
44
+ options.disableGlob = options.disableGlob || false
45
+ options.glob = options.glob || defaultGlobOpts
46
+ }
47
+
48
+ const rimraf = (p, options, cb) => {
49
+ if (typeof options === 'function') {
50
+ cb = options
51
+ options = {}
52
+ }
53
+
54
+ assert(p, 'rimraf: missing path')
55
+ assert.equal(typeof p, 'string', 'rimraf: path should be a string')
56
+ assert.equal(typeof cb, 'function', 'rimraf: callback function required')
57
+ assert(options, 'rimraf: invalid options argument provided')
58
+ assert.equal(typeof options, 'object', 'rimraf: options should be object')
59
+
60
+ defaults(options)
61
+
62
+ let busyTries = 0
63
+ let errState = null
64
+ let n = 0
65
+
66
+ const next = (er) => {
67
+ errState = errState || er
68
+ if (--n === 0)
69
+ cb(errState)
70
+ }
71
+
72
+ const afterGlob = (er, results) => {
73
+ if (er)
74
+ return cb(er)
75
+
76
+ n = results.length
77
+ if (n === 0)
78
+ return cb()
79
+
80
+ results.forEach(p => {
81
+ const CB = (er) => {
82
+ if (er) {
83
+ if ((er.code === "EBUSY" || er.code === "ENOTEMPTY" || er.code === "EPERM") &&
84
+ busyTries < options.maxBusyTries) {
85
+ busyTries ++
86
+ // try again, with the same exact callback as this one.
87
+ return setTimeout(() => rimraf_(p, options, CB), busyTries * 100)
88
+ }
89
+
90
+ // this one won't happen if graceful-fs is used.
91
+ if (er.code === "EMFILE" && timeout < options.emfileWait) {
92
+ return setTimeout(() => rimraf_(p, options, CB), timeout ++)
93
+ }
94
+
95
+ // already gone
96
+ if (er.code === "ENOENT") er = null
97
+ }
98
+
99
+ timeout = 0
100
+ next(er)
101
+ }
102
+ rimraf_(p, options, CB)
103
+ })
104
+ }
105
+
106
+ if (options.disableGlob || !glob.hasMagic(p))
107
+ return afterGlob(null, [p])
108
+
109
+ options.lstat(p, (er, stat) => {
110
+ if (!er)
111
+ return afterGlob(null, [p])
112
+
113
+ glob(p, options.glob, afterGlob)
114
+ })
115
+
116
+ }
117
+
118
+ // Two possible strategies.
119
+ // 1. Assume it's a file. unlink it, then do the dir stuff on EPERM or EISDIR
120
+ // 2. Assume it's a directory. readdir, then do the file stuff on ENOTDIR
121
+ //
122
+ // Both result in an extra syscall when you guess wrong. However, there
123
+ // are likely far more normal files in the world than directories. This
124
+ // is based on the assumption that a the average number of files per
125
+ // directory is >= 1.
126
+ //
127
+ // If anyone ever complains about this, then I guess the strategy could
128
+ // be made configurable somehow. But until then, YAGNI.
129
+ const rimraf_ = (p, options, cb) => {
130
+ assert(p)
131
+ assert(options)
132
+ assert(typeof cb === 'function')
133
+
134
+ // sunos lets the root user unlink directories, which is... weird.
135
+ // so we have to lstat here and make sure it's not a dir.
136
+ options.lstat(p, (er, st) => {
137
+ if (er && er.code === "ENOENT")
138
+ return cb(null)
139
+
140
+ // Windows can EPERM on stat. Life is suffering.
141
+ if (er && er.code === "EPERM" && isWindows)
142
+ fixWinEPERM(p, options, er, cb)
143
+
144
+ if (st && st.isDirectory())
145
+ return rmdir(p, options, er, cb)
146
+
147
+ options.unlink(p, er => {
148
+ if (er) {
149
+ if (er.code === "ENOENT")
150
+ return cb(null)
151
+ if (er.code === "EPERM")
152
+ return (isWindows)
153
+ ? fixWinEPERM(p, options, er, cb)
154
+ : rmdir(p, options, er, cb)
155
+ if (er.code === "EISDIR")
156
+ return rmdir(p, options, er, cb)
157
+ }
158
+ return cb(er)
159
+ })
160
+ })
161
+ }
162
+
163
+ const fixWinEPERM = (p, options, er, cb) => {
164
+ assert(p)
165
+ assert(options)
166
+ assert(typeof cb === 'function')
167
+
168
+ options.chmod(p, 0o666, er2 => {
169
+ if (er2)
170
+ cb(er2.code === "ENOENT" ? null : er)
171
+ else
172
+ options.stat(p, (er3, stats) => {
173
+ if (er3)
174
+ cb(er3.code === "ENOENT" ? null : er)
175
+ else if (stats.isDirectory())
176
+ rmdir(p, options, er, cb)
177
+ else
178
+ options.unlink(p, cb)
179
+ })
180
+ })
181
+ }
182
+
183
+ const fixWinEPERMSync = (p, options, er) => {
184
+ assert(p)
185
+ assert(options)
186
+
187
+ try {
188
+ options.chmodSync(p, 0o666)
189
+ } catch (er2) {
190
+ if (er2.code === "ENOENT")
191
+ return
192
+ else
193
+ throw er
194
+ }
195
+
196
+ let stats
197
+ try {
198
+ stats = options.statSync(p)
199
+ } catch (er3) {
200
+ if (er3.code === "ENOENT")
201
+ return
202
+ else
203
+ throw er
204
+ }
205
+
206
+ if (stats.isDirectory())
207
+ rmdirSync(p, options, er)
208
+ else
209
+ options.unlinkSync(p)
210
+ }
211
+
212
+ const rmdir = (p, options, originalEr, cb) => {
213
+ assert(p)
214
+ assert(options)
215
+ assert(typeof cb === 'function')
216
+
217
+ // try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS)
218
+ // if we guessed wrong, and it's not a directory, then
219
+ // raise the original error.
220
+ options.rmdir(p, er => {
221
+ if (er && (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM"))
222
+ rmkids(p, options, cb)
223
+ else if (er && er.code === "ENOTDIR")
224
+ cb(originalEr)
225
+ else
226
+ cb(er)
227
+ })
228
+ }
229
+
230
+ const rmkids = (p, options, cb) => {
231
+ assert(p)
232
+ assert(options)
233
+ assert(typeof cb === 'function')
234
+
235
+ options.readdir(p, (er, files) => {
236
+ if (er)
237
+ return cb(er)
238
+ let n = files.length
239
+ if (n === 0)
240
+ return options.rmdir(p, cb)
241
+ let errState
242
+ files.forEach(f => {
243
+ rimraf(path.join(p, f), options, er => {
244
+ if (errState)
245
+ return
246
+ if (er)
247
+ return cb(errState = er)
248
+ if (--n === 0)
249
+ options.rmdir(p, cb)
250
+ })
251
+ })
252
+ })
253
+ }
254
+
255
+ // this looks simpler, and is strictly *faster*, but will
256
+ // tie up the JavaScript thread and fail on excessively
257
+ // deep directory trees.
258
+ const rimrafSync = (p, options) => {
259
+ options = options || {}
260
+ defaults(options)
261
+
262
+ assert(p, 'rimraf: missing path')
263
+ assert.equal(typeof p, 'string', 'rimraf: path should be a string')
264
+ assert(options, 'rimraf: missing options')
265
+ assert.equal(typeof options, 'object', 'rimraf: options should be object')
266
+
267
+ let results
268
+
269
+ if (options.disableGlob || !glob.hasMagic(p)) {
270
+ results = [p]
271
+ } else {
272
+ try {
273
+ options.lstatSync(p)
274
+ results = [p]
275
+ } catch (er) {
276
+ results = glob.sync(p, options.glob)
277
+ }
278
+ }
279
+
280
+ if (!results.length)
281
+ return
282
+
283
+ for (let i = 0; i < results.length; i++) {
284
+ const p = results[i]
285
+
286
+ let st
287
+ try {
288
+ st = options.lstatSync(p)
289
+ } catch (er) {
290
+ if (er.code === "ENOENT")
291
+ return
292
+
293
+ // Windows can EPERM on stat. Life is suffering.
294
+ if (er.code === "EPERM" && isWindows)
295
+ fixWinEPERMSync(p, options, er)
296
+ }
297
+
298
+ try {
299
+ // sunos lets the root user unlink directories, which is... weird.
300
+ if (st && st.isDirectory())
301
+ rmdirSync(p, options, null)
302
+ else
303
+ options.unlinkSync(p)
304
+ } catch (er) {
305
+ if (er.code === "ENOENT")
306
+ return
307
+ if (er.code === "EPERM")
308
+ return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er)
309
+ if (er.code !== "EISDIR")
310
+ throw er
311
+
312
+ rmdirSync(p, options, er)
313
+ }
314
+ }
315
+ }
316
+
317
+ const rmdirSync = (p, options, originalEr) => {
318
+ assert(p)
319
+ assert(options)
320
+
321
+ try {
322
+ options.rmdirSync(p)
323
+ } catch (er) {
324
+ if (er.code === "ENOENT")
325
+ return
326
+ if (er.code === "ENOTDIR")
327
+ throw originalEr
328
+ if (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM")
329
+ rmkidsSync(p, options)
330
+ }
331
+ }
332
+
333
+ const rmkidsSync = (p, options) => {
334
+ assert(p)
335
+ assert(options)
336
+ options.readdirSync(p).forEach(f => rimrafSync(path.join(p, f), options))
337
+
338
+ // We only end up here once we got ENOTEMPTY at least once, and
339
+ // at this point, we are guaranteed to have removed all the kids.
340
+ // So, we know that it won't be ENOENT or ENOTDIR or anything else.
341
+ // try really hard to delete stuff on windows, because it has a
342
+ // PROFOUNDLY annoying habit of not closing handles promptly when
343
+ // files are deleted, resulting in spurious ENOTEMPTY errors.
344
+ const retries = isWindows ? 100 : 1
345
+ let i = 0
346
+ do {
347
+ let threw = true
348
+ try {
349
+ const ret = options.rmdirSync(p, options)
350
+ threw = false
351
+ return ret
352
+ } finally {
353
+ if (++i < retries && threw)
354
+ continue
355
+ }
356
+ } while (true)
357
+ }
358
+
359
+ module.exports = rimraf
360
+ rimraf.sync = rimrafSync
@@ -0,0 +1,13 @@
1
+ Copyright npm, Inc
2
+
3
+ Permission to use, copy, modify, and/or distribute this software for any
4
+ purpose with or without fee is hereby granted, provided that the above
5
+ copyright notice and this permission notice appear in all copies.
6
+
7
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
10
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
12
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
13
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
@@ -0,0 +1,55 @@
1
+ # stringify-package [![npm version](https://img.shields.io/npm/v/stringify-package.svg)](https://npm.im/stringify-package) [![license](https://img.shields.io/npm/l/stringify-package.svg)](https://npm.im/stringify-package) [![Travis](https://img.shields.io/travis/npm/stringify-package/latest.svg)](https://travis-ci.org/npm/stringify-package) [![AppVeyor](https://img.shields.io/appveyor/ci/npm/stringify-package/latest.svg)](https://ci.appveyor.com/project/npm/stringify-package) [![Coverage Status](https://coveralls.io/repos/github/npm/stringify-package/badge.svg?branch=latest)](https://coveralls.io/github/npm/stringify-package?branch=latest)
2
+
3
+ [`stringify-package`](https://github.com/npm/stringify-package) is a standalone
4
+ library for writing out package data as a JSON file. It is extracted from npm.
5
+
6
+ ## Install
7
+
8
+ `$ npm install stringify-package`
9
+
10
+ ## Table of Contents
11
+
12
+ * [Example](#example)
13
+ * [Features](#features)
14
+ * [Contributing](#contributing)
15
+ * [API](#api)
16
+ * [`stringifyPackage`](#stringifypackage)
17
+
18
+ ### Example
19
+
20
+ ```javascript
21
+ const fs = require('fs')
22
+ const pkg = { /* ... */ }
23
+
24
+ fs.writeFile('package.json', stringifyPackage(pkg), 'utf8', cb(err) => {
25
+ // ...
26
+ })
27
+ ```
28
+
29
+ ### Features
30
+
31
+ * Ensures consistent file indentation
32
+ To match existing file indentation,
33
+ [`detect-indent`](https://npm.im/detect-indent) is recommended.
34
+
35
+ * Ensures consistent newlines
36
+ To match existing newline characters,
37
+ [`detect-newline`](https://npm.im/detect-newline) is recommended.
38
+
39
+ ### Contributing
40
+
41
+ The npm team enthusiastically welcomes contributions and project participation!
42
+ There's a bunch of things you can do if you want to contribute! The [Contributor
43
+ Guide](CONTRIBUTING.md) has all the information you need for everything from
44
+ reporting bugs to contributing entire new features. Please don't hesitate to
45
+ jump in if you'd like to, or even ask us questions if something isn't clear.
46
+
47
+ ### API
48
+
49
+ ### <a name="stringifypackage"></a> `> stringifyPackage(data, indent, newline) -> String`
50
+
51
+ #### Arguments
52
+
53
+ * `data` - the package data as an object to be stringified
54
+ * `indent` - the number of spaces to use for each level of indentation (defaults to 2)
55
+ * `newline` - the character(s) to be used as a line terminator
@@ -0,0 +1,18 @@
1
+ 'use strict'
2
+
3
+ module.exports = stringifyPackage
4
+
5
+ const DEFAULT_INDENT = 2
6
+ const CRLF = '\r\n'
7
+ const LF = '\n'
8
+
9
+ function stringifyPackage (data, indent, newline) {
10
+ indent = indent || (indent === 0 ? 0 : DEFAULT_INDENT)
11
+ const json = JSON.stringify(data, null, indent)
12
+
13
+ if (newline === CRLF) {
14
+ return json.replace(/\n/g, CRLF) + CRLF
15
+ }
16
+
17
+ return json + LF
18
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "stringify-package",
3
+ "version": "1.0.1",
4
+ "description": "stringifies npm-written json files",
5
+ "main": "index.js",
6
+ "files": [
7
+ "index.js"
8
+ ],
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/npm/stringify-package.git"
12
+ },
13
+ "keywords": [
14
+ "npm",
15
+ "json",
16
+ "stringify",
17
+ "package.json"
18
+ ],
19
+ "author": "Kat Marchán <kzm@zkat.tech>",
20
+ "license": "ISC",
21
+ "bugs": {
22
+ "url": "https://github.com/npm/stringify-package/issues"
23
+ },
24
+ "homepage": "https://github.com/npm/stringify-package",
25
+ "scripts": {
26
+ "prerelease": "npm t",
27
+ "release": "standard-version -s",
28
+ "postrelease": "npm publish",
29
+ "postpublish": "git push --follow-tags",
30
+ "pretest": "standard",
31
+ "test": "tap -J --coverage --100 test/*.js"
32
+ },
33
+ "devDependencies": {
34
+ "standard": "11",
35
+ "standard-version": "4",
36
+ "tap": "12"
37
+ }
38
+ }
@@ -0,0 +1,15 @@
1
+ The ISC License
2
+
3
+ Copyright (c) Isaac Z. Schlueter and Contributors
4
+
5
+ Permission to use, copy, modify, and/or distribute this software for any
6
+ purpose with or without fee is hereby granted, provided that the above
7
+ copyright notice and this permission notice appear in all copies.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
15
+ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
@@ -0,0 +1,36 @@
1
+ # wrappy
2
+
3
+ Callback wrapping utility
4
+
5
+ ## USAGE
6
+
7
+ ```javascript
8
+ var wrappy = require("wrappy")
9
+
10
+ // var wrapper = wrappy(wrapperFunction)
11
+
12
+ // make sure a cb is called only once
13
+ // See also: http://npm.im/once for this specific use case
14
+ var once = wrappy(function (cb) {
15
+ var called = false
16
+ return function () {
17
+ if (called) return
18
+ called = true
19
+ return cb.apply(this, arguments)
20
+ }
21
+ })
22
+
23
+ function printBoo () {
24
+ console.log('boo')
25
+ }
26
+ // has some rando property
27
+ printBoo.iAmBooPrinter = true
28
+
29
+ var onlyPrintOnce = once(printBoo)
30
+
31
+ onlyPrintOnce() // prints 'boo'
32
+ onlyPrintOnce() // does nothing
33
+
34
+ // random property is retained!
35
+ assert.equal(onlyPrintOnce.iAmBooPrinter, true)
36
+ ```
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "wrappy",
3
+ "version": "1.0.2",
4
+ "description": "Callback wrapping utility",
5
+ "main": "wrappy.js",
6
+ "files": [
7
+ "wrappy.js"
8
+ ],
9
+ "directories": {
10
+ "test": "test"
11
+ },
12
+ "dependencies": {},
13
+ "devDependencies": {
14
+ "tap": "^2.3.1"
15
+ },
16
+ "scripts": {
17
+ "test": "tap --coverage test/*.js"
18
+ },
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "https://github.com/npm/wrappy"
22
+ },
23
+ "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)",
24
+ "license": "ISC",
25
+ "bugs": {
26
+ "url": "https://github.com/npm/wrappy/issues"
27
+ },
28
+ "homepage": "https://github.com/npm/wrappy"
29
+ }
@@ -0,0 +1,33 @@
1
+ // Returns a wrapper function that returns a wrapped callback
2
+ // The wrapper function should do some stuff, and return a
3
+ // presumably different callback function.
4
+ // This makes sure that own properties are retained, so that
5
+ // decorations and such are not lost along the way.
6
+ module.exports = wrappy
7
+ function wrappy (fn, cb) {
8
+ if (fn && cb) return wrappy(fn)(cb)
9
+
10
+ if (typeof fn !== 'function')
11
+ throw new TypeError('need wrapper function')
12
+
13
+ Object.keys(fn).forEach(function (k) {
14
+ wrapper[k] = fn[k]
15
+ })
16
+
17
+ return wrapper
18
+
19
+ function wrapper() {
20
+ var args = new Array(arguments.length)
21
+ for (var i = 0; i < args.length; i++) {
22
+ args[i] = arguments[i]
23
+ }
24
+ var ret = fn.apply(this, args)
25
+ var cb = args[args.length-1]
26
+ if (typeof ret === 'function' && ret !== cb) {
27
+ Object.keys(cb).forEach(function (k) {
28
+ ret[k] = cb[k]
29
+ })
30
+ }
31
+ return ret
32
+ }
33
+ }