nativescript 8.9.0-dev.2 → 8.9.0-dev.3

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 (403) hide show
  1. package/config/test-deps-versions-generated.json +1 -1
  2. package/lib/android-tools-info.js +9 -32
  3. package/lib/base-package-manager.js +47 -71
  4. package/lib/bootstrap.js +1 -5
  5. package/lib/bun-package-manager.js +65 -104
  6. package/lib/color.js +2 -5
  7. package/lib/commands/add-platform.js +14 -31
  8. package/lib/commands/apple-login.js +18 -30
  9. package/lib/commands/appstore-list.js +34 -46
  10. package/lib/commands/appstore-upload.js +52 -68
  11. package/lib/commands/build.js +57 -90
  12. package/lib/commands/clean.js +161 -197
  13. package/lib/commands/command-base.js +14 -28
  14. package/lib/commands/config.js +48 -71
  15. package/lib/commands/create-project.js +210 -235
  16. package/lib/commands/debug.js +66 -93
  17. package/lib/commands/deploy.js +30 -47
  18. package/lib/commands/embedding/embed.js +33 -59
  19. package/lib/commands/extensibility/install-extension.js +5 -17
  20. package/lib/commands/extensibility/list-extensions.js +13 -25
  21. package/lib/commands/extensibility/uninstall-extension.js +4 -16
  22. package/lib/commands/fonts.js +30 -42
  23. package/lib/commands/generate-assets.js +13 -29
  24. package/lib/commands/generate-help.js +2 -14
  25. package/lib/commands/generate.js +12 -70
  26. package/lib/commands/info.js +2 -14
  27. package/lib/commands/install.js +34 -50
  28. package/lib/commands/list-platforms.js +14 -26
  29. package/lib/commands/migrate.js +15 -27
  30. package/lib/commands/native-add.js +23 -51
  31. package/lib/commands/platform-clean.js +19 -33
  32. package/lib/commands/plugin/add-plugin.js +12 -26
  33. package/lib/commands/plugin/build-plugin.js +31 -45
  34. package/lib/commands/plugin/create-plugin.js +110 -138
  35. package/lib/commands/plugin/list-plugins.js +22 -34
  36. package/lib/commands/plugin/remove-plugin.js +20 -35
  37. package/lib/commands/plugin/update-plugin.js +20 -34
  38. package/lib/commands/post-install.js +20 -39
  39. package/lib/commands/prepare.js +22 -39
  40. package/lib/commands/preview.js +49 -64
  41. package/lib/commands/remove-platform.js +7 -19
  42. package/lib/commands/resources/resources-update.js +13 -28
  43. package/lib/commands/run.js +55 -77
  44. package/lib/commands/setup.js +0 -1
  45. package/lib/commands/start.js +6 -20
  46. package/lib/commands/test-init.js +123 -138
  47. package/lib/commands/test.js +67 -97
  48. package/lib/commands/typings.js +126 -143
  49. package/lib/commands/update-platform.js +22 -40
  50. package/lib/commands/update.js +30 -45
  51. package/lib/commands/widget.js +390 -352
  52. package/lib/common/bootstrap.js +0 -1
  53. package/lib/common/child-process.js +53 -75
  54. package/lib/common/codeGeneration/code-entity.js +1 -2
  55. package/lib/common/codeGeneration/code-printer.js +1 -2
  56. package/lib/common/command-params.js +7 -19
  57. package/lib/common/commands/analytics.js +27 -43
  58. package/lib/common/commands/autocompletion.js +39 -59
  59. package/lib/common/commands/device/device-log-stream.js +12 -24
  60. package/lib/common/commands/device/get-file.js +22 -35
  61. package/lib/common/commands/device/list-applications.js +12 -24
  62. package/lib/common/commands/device/list-devices.js +72 -90
  63. package/lib/common/commands/device/list-files.js +23 -36
  64. package/lib/common/commands/device/put-file.js +22 -35
  65. package/lib/common/commands/device/run-application.js +12 -26
  66. package/lib/common/commands/device/stop-application.js +11 -23
  67. package/lib/common/commands/device/uninstall-application.js +6 -18
  68. package/lib/common/commands/doctor.js +2 -3
  69. package/lib/common/commands/generate-messages.js +17 -29
  70. package/lib/common/commands/help.js +20 -34
  71. package/lib/common/commands/package-manager-get.js +6 -18
  72. package/lib/common/commands/package-manager-set.js +9 -21
  73. package/lib/common/commands/post-install.js +2 -14
  74. package/lib/common/commands/preuninstall.js +24 -48
  75. package/lib/common/commands/proxy/proxy-base.js +8 -23
  76. package/lib/common/commands/proxy/proxy-clear.js +4 -16
  77. package/lib/common/commands/proxy/proxy-get.js +3 -15
  78. package/lib/common/commands/proxy/proxy-set.js +87 -101
  79. package/lib/common/common-lib.js +0 -1
  80. package/lib/common/constants.js +11 -22
  81. package/lib/common/decorators.js +10 -70
  82. package/lib/common/dispatchers.js +80 -106
  83. package/lib/common/errors.js +91 -116
  84. package/lib/common/file-system.js +108 -141
  85. package/lib/common/header.js +1 -5
  86. package/lib/common/helpers.js +152 -267
  87. package/lib/common/host-info.js +37 -54
  88. package/lib/common/http-client.js +93 -128
  89. package/lib/common/logger/appenders/cli-appender.js +1 -6
  90. package/lib/common/logger/appenders/emit-appender.js +1 -6
  91. package/lib/common/logger/layouts/cli-layout.js +1 -3
  92. package/lib/common/logger/logger.js +4 -9
  93. package/lib/common/messages/messages.js +0 -6
  94. package/lib/common/mobile/android/android-application-manager.js +122 -162
  95. package/lib/common/mobile/android/android-debug-bridge-result-handler.js +1 -2
  96. package/lib/common/mobile/android/android-debug-bridge.js +87 -118
  97. package/lib/common/mobile/android/android-device-file-system.js +98 -135
  98. package/lib/common/mobile/android/android-device-hash-service.js +50 -78
  99. package/lib/common/mobile/android/android-device.js +68 -93
  100. package/lib/common/mobile/android/android-emulator-services.js +105 -131
  101. package/lib/common/mobile/android/android-ini-file-parser.js +0 -9
  102. package/lib/common/mobile/android/android-log-filter.js +1 -5
  103. package/lib/common/mobile/android/android-virtual-device-service.js +76 -123
  104. package/lib/common/mobile/android/device-android-debug-bridge.js +13 -30
  105. package/lib/common/mobile/android/genymotion/genymotion-service.js +91 -123
  106. package/lib/common/mobile/android/genymotion/virtualbox-service.js +64 -92
  107. package/lib/common/mobile/android/logcat-helper.js +108 -140
  108. package/lib/common/mobile/application-manager-base.js +84 -113
  109. package/lib/common/mobile/device-emitter.js +0 -4
  110. package/lib/common/mobile/device-log-emitter.js +0 -1
  111. package/lib/common/mobile/device-log-provider-base.js +7 -19
  112. package/lib/common/mobile/device-log-provider.js +0 -23
  113. package/lib/common/mobile/device-platforms-constants.js +0 -1
  114. package/lib/common/mobile/emulator-helper.js +0 -3
  115. package/lib/common/mobile/ios/device/ios-application-manager.js +79 -111
  116. package/lib/common/mobile/ios/device/ios-device-file-system.js +78 -106
  117. package/lib/common/mobile/ios/device/ios-device-operations.js +105 -146
  118. package/lib/common/mobile/ios/device/ios-device.js +20 -40
  119. package/lib/common/mobile/ios/ios-device-base.js +58 -82
  120. package/lib/common/mobile/ios/ios-device-product-name-mapper.js +0 -2
  121. package/lib/common/mobile/ios/ios-log-filter.js +0 -1
  122. package/lib/common/mobile/ios/simulator/ios-emulator-services.js +63 -96
  123. package/lib/common/mobile/ios/simulator/ios-sim-resolver.js +1 -2
  124. package/lib/common/mobile/ios/simulator/ios-simulator-application-manager.js +60 -95
  125. package/lib/common/mobile/ios/simulator/ios-simulator-device.js +27 -48
  126. package/lib/common/mobile/ios/simulator/ios-simulator-file-system.js +37 -63
  127. package/lib/common/mobile/ios/simulator/ios-simulator-log-provider.js +24 -36
  128. package/lib/common/mobile/local-to-device-path-data-factory.js +0 -1
  129. package/lib/common/mobile/log-filter.js +0 -2
  130. package/lib/common/mobile/logging-levels.js +0 -1
  131. package/lib/common/mobile/mobile-core/android-device-discovery.js +43 -64
  132. package/lib/common/mobile/mobile-core/android-emulator-discovery.js +21 -35
  133. package/lib/common/mobile/mobile-core/android-process-service.js +143 -214
  134. package/lib/common/mobile/mobile-core/device-discovery.js +2 -14
  135. package/lib/common/mobile/mobile-core/devices-service.js +386 -505
  136. package/lib/common/mobile/mobile-core/ios-device-discovery.js +24 -37
  137. package/lib/common/mobile/mobile-core/ios-simulator-discovery.js +47 -65
  138. package/lib/common/mobile/mobile-helper.js +15 -27
  139. package/lib/common/mobile/wp8/wp8-emulator-services.js +25 -53
  140. package/lib/common/opener.js +2 -3
  141. package/lib/common/os-info.js +0 -1
  142. package/lib/common/plist-parser.js +0 -1
  143. package/lib/common/project-helper.js +0 -1
  144. package/lib/common/prompter.js +91 -114
  145. package/lib/common/queue.js +9 -21
  146. package/lib/common/resource-loader.js +0 -1
  147. package/lib/common/services/auto-completion-service.js +40 -65
  148. package/lib/common/services/cancellation.js +17 -29
  149. package/lib/common/services/commands-service.js +146 -180
  150. package/lib/common/services/help-service.js +133 -166
  151. package/lib/common/services/hooks-service.js +93 -121
  152. package/lib/common/services/ios-notification-service.js +21 -35
  153. package/lib/common/services/json-file-settings-service.js +52 -77
  154. package/lib/common/services/lock-service.js +35 -58
  155. package/lib/common/services/message-contract-generator.js +35 -47
  156. package/lib/common/services/messages-service.js +0 -1
  157. package/lib/common/services/micro-templating-service.js +4 -21
  158. package/lib/common/services/net-service.js +90 -110
  159. package/lib/common/services/project-files-manager.js +10 -28
  160. package/lib/common/services/project-files-provider-base.js +0 -1
  161. package/lib/common/services/proxy-service.js +13 -25
  162. package/lib/common/services/qr.js +13 -25
  163. package/lib/common/services/settings-service.js +1 -2
  164. package/lib/common/services/xcode-select-service.js +20 -36
  165. package/lib/common/utils.js +2 -3
  166. package/lib/common/validators/project-name-validator.js +1 -2
  167. package/lib/common/validators/validation-result.js +1 -2
  168. package/lib/common/verify-node-version.js +3 -11
  169. package/lib/common/yok.js +35 -69
  170. package/lib/config.js +36 -72
  171. package/lib/constants-provider.js +0 -1
  172. package/lib/constants.js +24 -77
  173. package/lib/controllers/build-controller.js +82 -100
  174. package/lib/controllers/debug-controller.js +107 -133
  175. package/lib/controllers/deploy-controller.js +15 -24
  176. package/lib/controllers/migrate-controller.js +723 -884
  177. package/lib/controllers/platform-controller.js +71 -94
  178. package/lib/controllers/prepare-controller.js +232 -274
  179. package/lib/controllers/run-controller.js +397 -427
  180. package/lib/controllers/update-controller-base.js +16 -30
  181. package/lib/controllers/update-controller.js +94 -130
  182. package/lib/data/build-data.js +0 -1
  183. package/lib/data/controller-data-base.js +0 -1
  184. package/lib/data/debug-data.js +0 -1
  185. package/lib/data/platform-data.js +0 -1
  186. package/lib/data/prepare-data.js +4 -2
  187. package/lib/data/run-data.js +0 -1
  188. package/lib/definitions/project.d.ts +24 -24
  189. package/lib/detached-processes/cleanup-js-subprocess.js +5 -20
  190. package/lib/detached-processes/cleanup-process.js +30 -43
  191. package/lib/detached-processes/file-log-service.js +1 -2
  192. package/lib/device-path-provider.js +23 -35
  193. package/lib/device-sockets/ios/app-debug-socket-proxy-factory.js +149 -171
  194. package/lib/device-sockets/ios/notification.js +1 -4
  195. package/lib/device-sockets/ios/socket-request-executor.js +24 -42
  196. package/lib/helpers/android-bundle-validator-helper.js +2 -3
  197. package/lib/helpers/deploy-command-helper.js +44 -50
  198. package/lib/helpers/key-command-helper.js +6 -17
  199. package/lib/helpers/livesync-command-helper.js +137 -155
  200. package/lib/helpers/network-connectivity-validator.js +6 -18
  201. package/lib/helpers/options-track-helper.js +7 -19
  202. package/lib/helpers/package-path-helper.js +0 -1
  203. package/lib/helpers/platform-command-helper.js +101 -127
  204. package/lib/helpers/version-validator-helper.js +0 -1
  205. package/lib/key-commands/bootstrap.js +2 -3
  206. package/lib/key-commands/index.js +154 -205
  207. package/lib/nativescript-cli-lib-bootstrap.js +0 -4
  208. package/lib/nativescript-cli-lib.js +0 -1
  209. package/lib/nativescript-cli.js +6 -24
  210. package/lib/node/pbxproj-dom-xcode.js +0 -1
  211. package/lib/node/xcode.js +0 -1
  212. package/lib/node-package-manager.js +81 -114
  213. package/lib/options.js +122 -156
  214. package/lib/package-installation-manager.js +130 -172
  215. package/lib/package-manager.js +63 -88
  216. package/lib/platform-command-param.js +4 -16
  217. package/lib/pnpm-package-manager.js +59 -81
  218. package/lib/project-data.js +1 -13
  219. package/lib/providers/project-files-provider.js +1 -2
  220. package/lib/resolvers/livesync-service-resolver.js +0 -1
  221. package/lib/services/analytics/analytics-broker-process.js +19 -32
  222. package/lib/services/analytics/analytics-broker.js +17 -31
  223. package/lib/services/analytics/analytics-service.js +170 -210
  224. package/lib/services/analytics/google-analytics-provider.js +43 -59
  225. package/lib/services/analytics-settings-service.js +15 -37
  226. package/lib/services/android/android-bundle-tool-service.js +43 -61
  227. package/lib/services/android/gradle-build-args-service.js +9 -23
  228. package/lib/services/android/gradle-build-service.js +22 -36
  229. package/lib/services/android/gradle-command-service.js +22 -36
  230. package/lib/services/android-device-debug-service.js +90 -123
  231. package/lib/services/android-plugin-build-service.js +205 -260
  232. package/lib/services/android-project-service.js +129 -241
  233. package/lib/services/android-resources-migration-service.js +51 -71
  234. package/lib/services/apple-portal/apple-portal-application-service.js +46 -64
  235. package/lib/services/apple-portal/apple-portal-cookie-service.js +0 -1
  236. package/lib/services/apple-portal/apple-portal-session-service.js +197 -218
  237. package/lib/services/apple-portal/srp/srp-wrapper.js +43 -61
  238. package/lib/services/assets-generation/assets-generation-service.js +103 -128
  239. package/lib/services/build-artifacts-service.js +10 -22
  240. package/lib/services/build-data-service.js +0 -1
  241. package/lib/services/build-info-file-service.js +20 -36
  242. package/lib/services/cleanup-service.js +48 -81
  243. package/lib/services/cocoapods-platform-manager.js +0 -9
  244. package/lib/services/cocoapods-service.js +112 -153
  245. package/lib/services/debug-data-service.js +0 -1
  246. package/lib/services/debug-service-base.js +0 -7
  247. package/lib/services/device/device-install-app-service.js +54 -72
  248. package/lib/services/doctor-service.js +101 -135
  249. package/lib/services/extensibility-service.js +81 -108
  250. package/lib/services/files-hash-service.js +26 -44
  251. package/lib/services/hmr-status-service.js +1 -3
  252. package/lib/services/info-service.js +0 -1
  253. package/lib/services/initialize-service.js +37 -54
  254. package/lib/services/ios/export-options-plist-service.js +38 -55
  255. package/lib/services/ios/ios-signing-service.js +168 -191
  256. package/lib/services/ios/spm-service.js +46 -70
  257. package/lib/services/ios/xcodebuild-args-service.js +77 -103
  258. package/lib/services/ios/xcodebuild-command-service.js +14 -26
  259. package/lib/services/ios/xcodebuild-service.js +52 -72
  260. package/lib/services/ios-debugger-port-service.js +24 -38
  261. package/lib/services/ios-device-debug-service.js +75 -103
  262. package/lib/services/ios-entitlements-service.js +31 -43
  263. package/lib/services/ios-extensions-service.js +18 -30
  264. package/lib/services/ios-log-filter.js +0 -20
  265. package/lib/services/ios-native-target-service.js +4 -6
  266. package/lib/services/ios-project-service.js +452 -603
  267. package/lib/services/ios-provision-service.js +108 -132
  268. package/lib/services/ios-watch-app-service.js +21 -33
  269. package/lib/services/ip-service.js +38 -55
  270. package/lib/services/itmstransporter-service.js +129 -153
  271. package/lib/services/karma-execution.js +0 -2
  272. package/lib/services/livesync/android-device-livesync-service-base.js +31 -49
  273. package/lib/services/livesync/android-device-livesync-service.js +120 -151
  274. package/lib/services/livesync/android-device-livesync-sockets-service.js +121 -155
  275. package/lib/services/livesync/android-livesync-service.js +14 -36
  276. package/lib/services/livesync/android-livesync-tool.js +90 -117
  277. package/lib/services/livesync/device-livesync-service-base.js +15 -30
  278. package/lib/services/livesync/ios-device-livesync-service.js +114 -150
  279. package/lib/services/livesync/ios-livesync-service.js +42 -60
  280. package/lib/services/livesync/livesync-socket.js +0 -1
  281. package/lib/services/livesync/platform-livesync-service-base.js +94 -124
  282. package/lib/services/livesync-process-data-service.js +0 -1
  283. package/lib/services/log-parser-service.js +1 -2
  284. package/lib/services/log-source-map-service.js +30 -56
  285. package/lib/services/marking-mode-service.js +17 -33
  286. package/lib/services/metadata-filtering-service.js +0 -1
  287. package/lib/services/npm-config-service.js +1 -5
  288. package/lib/services/pacote-service.js +49 -71
  289. package/lib/services/performance-service.js +2 -4
  290. package/lib/services/platform/add-platform-service.js +51 -119
  291. package/lib/services/platform/platform-validation-service.js +22 -34
  292. package/lib/services/platform/prepare-native-platform-service.js +49 -65
  293. package/lib/services/platform-environment-requirements.js +27 -43
  294. package/lib/services/platform-project-service-base.js +0 -1
  295. package/lib/services/platforms-data-service.js +0 -1
  296. package/lib/services/plugins-service.js +125 -168
  297. package/lib/services/prepare-data-service.js +0 -1
  298. package/lib/services/project-backup-service.js +1 -5
  299. package/lib/services/project-changes-service.js +124 -152
  300. package/lib/services/project-cleanup-service.js +64 -79
  301. package/lib/services/project-config-service.js +73 -102
  302. package/lib/services/project-data-service.js +108 -154
  303. package/lib/services/project-name-service.js +28 -44
  304. package/lib/services/project-service.js +84 -113
  305. package/lib/services/project-templates-service.js +52 -68
  306. package/lib/services/qr-code-terminal-service.js +0 -1
  307. package/lib/services/require-service.js +0 -1
  308. package/lib/services/start-service.js +41 -60
  309. package/lib/services/temp-service.js +8 -22
  310. package/lib/services/terminal-spinner-service.js +15 -28
  311. package/lib/services/test-execution-service.js +59 -79
  312. package/lib/services/test-initialization-service.js +2 -6
  313. package/lib/services/timeline-profiler-service.js +1 -2
  314. package/lib/services/user-settings-service.js +0 -1
  315. package/lib/services/versions-service.js +119 -140
  316. package/lib/services/watch-ignore-list-service.js +0 -1
  317. package/lib/services/webpack/webpack-compiler-service.js +215 -279
  318. package/lib/services/xcconfig-service.js +8 -21
  319. package/lib/services/xcproj-service.js +0 -1
  320. package/lib/shared-event-bus.js +0 -6
  321. package/lib/sys-info.js +45 -63
  322. package/lib/tools/config-manipulation/config-transformer.js +0 -12
  323. package/lib/tools/node-modules/node-modules-builder.js +16 -28
  324. package/lib/tools/node-modules/node-modules-dependencies-builder.js +0 -6
  325. package/lib/yarn-package-manager.js +59 -79
  326. package/lib/yarn2-package-manager.js +60 -82
  327. package/package.json +65 -80
  328. package/node_modules/@npmcli/move-file/LICENSE.md +0 -22
  329. package/node_modules/@npmcli/move-file/README.md +0 -69
  330. package/node_modules/@npmcli/move-file/lib/index.js +0 -185
  331. package/node_modules/@npmcli/move-file/node_modules/mkdirp/LICENSE +0 -21
  332. package/node_modules/@npmcli/move-file/node_modules/mkdirp/bin/cmd.js +0 -68
  333. package/node_modules/@npmcli/move-file/node_modules/mkdirp/index.js +0 -31
  334. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/find-made.js +0 -29
  335. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/mkdirp-manual.js +0 -64
  336. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/mkdirp-native.js +0 -39
  337. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/opts-arg.js +0 -23
  338. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/path-arg.js +0 -29
  339. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/use-native.js +0 -10
  340. package/node_modules/@npmcli/move-file/node_modules/mkdirp/package.json +0 -44
  341. package/node_modules/@npmcli/move-file/node_modules/mkdirp/readme.markdown +0 -266
  342. package/node_modules/@npmcli/move-file/package.json +0 -47
  343. package/node_modules/balanced-match/.github/FUNDING.yml +0 -2
  344. package/node_modules/balanced-match/LICENSE.md +0 -21
  345. package/node_modules/balanced-match/README.md +0 -97
  346. package/node_modules/balanced-match/index.js +0 -62
  347. package/node_modules/balanced-match/package.json +0 -48
  348. package/node_modules/concat-map/.travis.yml +0 -4
  349. package/node_modules/concat-map/LICENSE +0 -18
  350. package/node_modules/concat-map/README.markdown +0 -62
  351. package/node_modules/concat-map/example/map.js +0 -6
  352. package/node_modules/concat-map/index.js +0 -13
  353. package/node_modules/concat-map/package.json +0 -43
  354. package/node_modules/concat-map/test/map.js +0 -39
  355. package/node_modules/fs.realpath/LICENSE +0 -43
  356. package/node_modules/fs.realpath/README.md +0 -33
  357. package/node_modules/fs.realpath/index.js +0 -66
  358. package/node_modules/fs.realpath/old.js +0 -303
  359. package/node_modules/fs.realpath/package.json +0 -26
  360. package/node_modules/inflight/LICENSE +0 -15
  361. package/node_modules/inflight/README.md +0 -37
  362. package/node_modules/inflight/inflight.js +0 -54
  363. package/node_modules/inflight/package.json +0 -29
  364. package/node_modules/inherits/LICENSE +0 -16
  365. package/node_modules/inherits/README.md +0 -42
  366. package/node_modules/inherits/inherits.js +0 -9
  367. package/node_modules/inherits/inherits_browser.js +0 -27
  368. package/node_modules/inherits/package.json +0 -29
  369. package/node_modules/once/LICENSE +0 -15
  370. package/node_modules/once/README.md +0 -79
  371. package/node_modules/once/once.js +0 -42
  372. package/node_modules/once/package.json +0 -33
  373. package/node_modules/path-is-absolute/index.js +0 -20
  374. package/node_modules/path-is-absolute/license +0 -21
  375. package/node_modules/path-is-absolute/package.json +0 -43
  376. package/node_modules/path-is-absolute/readme.md +0 -59
  377. package/node_modules/rimraf/LICENSE +0 -15
  378. package/node_modules/rimraf/README.md +0 -101
  379. package/node_modules/rimraf/bin.js +0 -68
  380. package/node_modules/rimraf/node_modules/brace-expansion/LICENSE +0 -21
  381. package/node_modules/rimraf/node_modules/brace-expansion/README.md +0 -129
  382. package/node_modules/rimraf/node_modules/brace-expansion/index.js +0 -201
  383. package/node_modules/rimraf/node_modules/brace-expansion/package.json +0 -47
  384. package/node_modules/rimraf/node_modules/glob/LICENSE +0 -21
  385. package/node_modules/rimraf/node_modules/glob/README.md +0 -378
  386. package/node_modules/rimraf/node_modules/glob/common.js +0 -238
  387. package/node_modules/rimraf/node_modules/glob/glob.js +0 -790
  388. package/node_modules/rimraf/node_modules/glob/package.json +0 -55
  389. package/node_modules/rimraf/node_modules/glob/sync.js +0 -486
  390. package/node_modules/rimraf/node_modules/minimatch/LICENSE +0 -15
  391. package/node_modules/rimraf/node_modules/minimatch/README.md +0 -230
  392. package/node_modules/rimraf/node_modules/minimatch/minimatch.js +0 -947
  393. package/node_modules/rimraf/node_modules/minimatch/package.json +0 -33
  394. package/node_modules/rimraf/package.json +0 -32
  395. package/node_modules/rimraf/rimraf.js +0 -360
  396. package/node_modules/stringify-package/LICENSE +0 -13
  397. package/node_modules/stringify-package/README.md +0 -55
  398. package/node_modules/stringify-package/index.js +0 -18
  399. package/node_modules/stringify-package/package.json +0 -38
  400. package/node_modules/wrappy/LICENSE +0 -15
  401. package/node_modules/wrappy/README.md +0 -36
  402. package/node_modules/wrappy/package.json +0 -29
  403. package/node_modules/wrappy/wrappy.js +0 -33
@@ -1,13 +1,4 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
2
  Object.defineProperty(exports, "__esModule", { value: true });
12
3
  exports.WidgetIOSCommand = exports.WidgetCommand = void 0;
13
4
  const fs = require("fs");
@@ -26,20 +17,16 @@ class WidgetCommand {
26
17
  this.allowedParameters = [];
27
18
  this.$projectData.initializeProjectData();
28
19
  }
29
- execute(args) {
30
- return __awaiter(this, void 0, void 0, function* () {
31
- this.failWithUsage();
32
- return Promise.resolve();
33
- });
20
+ async execute(args) {
21
+ this.failWithUsage();
22
+ return Promise.resolve();
34
23
  }
35
24
  failWithUsage() {
36
25
  this.$errors.failWithHelp("Usage: ns widget ios");
37
26
  }
38
- canExecute(args) {
39
- return __awaiter(this, void 0, void 0, function* () {
40
- this.failWithUsage();
41
- return false;
42
- });
27
+ async canExecute(args) {
28
+ this.failWithUsage();
29
+ return false;
43
30
  }
44
31
  getIosSourcePathBase() {
45
32
  const resources = this.$projectData.getAppResourcesDirectoryPath();
@@ -51,77 +38,71 @@ class WidgetIOSCommand extends WidgetCommand {
51
38
  constructor($projectData, $projectConfigService, $logger, $errors) {
52
39
  super($projectData, $projectConfigService, $logger, $errors);
53
40
  }
54
- canExecute(args) {
55
- return __awaiter(this, void 0, void 0, function* () {
56
- return true;
57
- });
41
+ async canExecute(args) {
42
+ return true;
58
43
  }
59
- execute(args) {
60
- return __awaiter(this, void 0, void 0, function* () {
61
- this.startPrompt(args);
62
- });
44
+ async execute(args) {
45
+ this.startPrompt(args);
63
46
  }
64
- startPrompt(args) {
65
- return __awaiter(this, void 0, void 0, function* () {
66
- let result = yield prompts.prompt({
67
- type: "text",
68
- name: "name",
69
- message: `What name would you like for this widget? (Default is 'widget')`,
70
- });
71
- const name = (result.name || "widget").toLowerCase();
72
- result = yield prompts.prompt({
73
- type: "select",
74
- name: "value",
75
- message: `What type of widget would you like? (Request more options: https://github.com/NativeScript/nativescript-cli/issues)`,
76
- choices: [
77
- {
78
- title: "Live Activity",
79
- description: "This will create a Live Activity that will display on the iOS Lock Screen.",
80
- value: 0,
81
- },
82
- {
83
- title: "Live Activity with Home Screen Widget",
84
- description: "This will create a Live Activity that will display on the iOS Lock Screen with an optional Widget.",
85
- value: 1,
86
- },
87
- {
88
- title: "Home Screen Widget",
89
- description: "This will create just a Home Screen Widget.",
90
- value: 2,
91
- },
92
- ],
93
- initial: 1,
94
- });
95
- switch (result.value) {
96
- case 0:
97
- this.$logger.info("TODO");
98
- break;
99
- case 1:
100
- yield this.generateSharedWidgetPackage(this.$projectData.projectDir, name);
101
- this.generateWidget(this.$projectData.projectDir, name, result.value);
102
- this.generateAppleUtility(this.$projectData.projectDir, name);
103
- break;
104
- case 2:
105
- this.$logger.info("TODO");
106
- break;
107
- }
47
+ async startPrompt(args) {
48
+ let result = await prompts.prompt({
49
+ type: "text",
50
+ name: "name",
51
+ message: `What name would you like for this widget? (Default is 'widget')`,
108
52
  });
53
+ const name = (result.name || "widget").toLowerCase();
54
+ result = await prompts.prompt({
55
+ type: "select",
56
+ name: "value",
57
+ message: `What type of widget would you like?`,
58
+ choices: [
59
+ {
60
+ title: "Live Activity",
61
+ description: "This will create a Live Activity that will display on the iOS Lock Screen.",
62
+ value: 0,
63
+ },
64
+ {
65
+ title: "Live Activity with Home Screen Widget",
66
+ description: "This will create a Live Activity that will display on the iOS Lock Screen with an optional Widget.",
67
+ value: 1,
68
+ },
69
+ {
70
+ title: "Home Screen Widget",
71
+ description: "This will create just a Home Screen Widget.",
72
+ value: 2,
73
+ },
74
+ ],
75
+ initial: 1,
76
+ });
77
+ const bundleId = this.$projectConfigService.getValue(`id`, "");
78
+ switch (result.value) {
79
+ case 0:
80
+ this.$logger.info("TODO");
81
+ break;
82
+ case 1:
83
+ await this.generateSharedWidgetPackage(this.$projectData.projectDir, name);
84
+ this.generateWidget(this.$projectData.projectDir, name, bundleId, result.value);
85
+ this.generateAppleUtility(this.$projectData.projectDir, name, bundleId);
86
+ break;
87
+ case 2:
88
+ this.$logger.info("TODO");
89
+ break;
90
+ }
109
91
  }
110
- generateSharedWidgetPackage(projectDir, name) {
92
+ async generateSharedWidgetPackage(projectDir, name) {
111
93
  var _a;
112
- return __awaiter(this, void 0, void 0, function* () {
113
- const sharedWidgetDir = "Shared_Resources/iOS/SharedWidget";
114
- const sharedWidgetPath = path.join(projectDir, sharedWidgetDir);
115
- const sharedWidgetSourceDir = "Sources/SharedWidget";
116
- const sharedWidgetPackagePath = path.join(projectDir, `${sharedWidgetDir}/Package.swift`);
117
- const sharedWidgetSourcePath = path.join(sharedWidgetPath, `${sharedWidgetSourceDir}/${(0, utils_1.capitalizeFirstLetter)(name)}Model.swift`);
118
- const gitIgnorePath = path.join(projectDir, ".gitignore");
119
- if (!fs.existsSync(sharedWidgetPackagePath)) {
120
- fs.mkdirSync(sharedWidgetPath, { recursive: true });
121
- fs.mkdirSync(path.join(sharedWidgetPath, sharedWidgetSourceDir), {
122
- recursive: true,
123
- });
124
- let content = `// swift-tools-version:5.9
94
+ const sharedWidgetDir = "Shared_Resources/iOS/SharedWidget";
95
+ const sharedWidgetPath = path.join(projectDir, sharedWidgetDir);
96
+ const sharedWidgetSourceDir = "Sources/SharedWidget";
97
+ const sharedWidgetPackagePath = path.join(projectDir, `${sharedWidgetDir}/Package.swift`);
98
+ const sharedWidgetSourcePath = path.join(sharedWidgetPath, `${sharedWidgetSourceDir}/${(0, utils_1.capitalizeFirstLetter)(name)}Model.swift`);
99
+ const gitIgnorePath = path.join(projectDir, ".gitignore");
100
+ if (!fs.existsSync(sharedWidgetPackagePath)) {
101
+ fs.mkdirSync(sharedWidgetPath, { recursive: true });
102
+ fs.mkdirSync(path.join(sharedWidgetPath, sharedWidgetSourceDir), {
103
+ recursive: true,
104
+ });
105
+ let content = `// swift-tools-version:5.9
125
106
  import PackageDescription
126
107
 
127
108
  let package = Package(
@@ -144,8 +125,8 @@ let package = Package(
144
125
  )
145
126
  ]
146
127
  )${os_1.EOL}`;
147
- fs.writeFileSync(sharedWidgetPackagePath, content);
148
- content = `import ActivityKit
128
+ fs.writeFileSync(sharedWidgetPackagePath, content);
129
+ content = `import ActivityKit
149
130
  import WidgetKit
150
131
 
151
132
  public struct ${(0, utils_1.capitalizeFirstLetter)(name)}Model: ActivityAttributes {
@@ -153,12 +134,12 @@ public struct ${(0, utils_1.capitalizeFirstLetter)(name)}Model: ActivityAttribut
153
134
 
154
135
  public struct ContentState: Codable, Hashable {
155
136
  // Dynamic stateful properties about your activity go here!
156
- public var driverName: String
157
- public var estimatedDeliveryTime: ClosedRange<Date>
137
+ public var message: String
138
+ public var deliveryTime: Double
158
139
 
159
- public init(driverName: String, estimatedDeliveryTime: ClosedRange<Date>) {
160
- self.driverName = driverName
161
- self.estimatedDeliveryTime = estimatedDeliveryTime
140
+ public init(message: String, deliveryTime: Double) {
141
+ self.message = message
142
+ self.deliveryTime = deliveryTime
162
143
  }
163
144
  }
164
145
 
@@ -171,52 +152,47 @@ public struct ${(0, utils_1.capitalizeFirstLetter)(name)}Model: ActivityAttribut
171
152
  self.totalAmount = totalAmount
172
153
  }
173
154
  }${os_1.EOL}`;
174
- fs.writeFileSync(sharedWidgetSourcePath, content);
175
- // update spm package
176
- const configData = this.$projectConfigService.readConfig(projectDir);
177
- if (!configData.ios) {
178
- configData.ios = {};
179
- }
180
- if (!configData.ios.SPMPackages) {
181
- configData.ios.SPMPackages = [];
182
- }
183
- const spmPackages = configData.ios.SPMPackages;
184
- const sharedWidgetPackage = spmPackages === null || spmPackages === void 0 ? void 0 : spmPackages.find((p) => p.name === "SharedWidget");
185
- if (!sharedWidgetPackage) {
186
- spmPackages.push({
187
- name: "SharedWidget",
188
- libs: ["SharedWidget"],
189
- path: "./Shared_Resources/iOS/SharedWidget",
190
- // @ts-ignore
191
- targets: [name],
192
- });
193
- }
194
- else {
195
- // add target if needed
196
- if (!((_a = sharedWidgetPackage.targets) === null || _a === void 0 ? void 0 : _a.includes(name))) {
197
- sharedWidgetPackage.targets.push(name);
198
- }
155
+ fs.writeFileSync(sharedWidgetSourcePath, content);
156
+ const configData = this.$projectConfigService.readConfig(projectDir);
157
+ if (!configData.ios) {
158
+ configData.ios = {};
159
+ }
160
+ if (!configData.ios.SPMPackages) {
161
+ configData.ios.SPMPackages = [];
162
+ }
163
+ const spmPackages = configData.ios.SPMPackages;
164
+ const sharedWidgetPackage = spmPackages === null || spmPackages === void 0 ? void 0 : spmPackages.find((p) => p.name === "SharedWidget");
165
+ if (!sharedWidgetPackage) {
166
+ spmPackages.push({
167
+ name: "SharedWidget",
168
+ libs: ["SharedWidget"],
169
+ path: "./Shared_Resources/iOS/SharedWidget",
170
+ targets: [name],
171
+ });
172
+ }
173
+ else {
174
+ if (!((_a = sharedWidgetPackage.targets) === null || _a === void 0 ? void 0 : _a.includes(name))) {
175
+ sharedWidgetPackage.targets.push(name);
199
176
  }
200
- configData.ios.SPMPackages = spmPackages;
201
- yield this.$projectConfigService.setValue("", // root
202
- configData);
203
- if (fs.existsSync(gitIgnorePath)) {
204
- const gitIgnore = fs.readFileSync(gitIgnorePath, {
205
- encoding: "utf-8",
206
- });
207
- const swiftBuildIgnore = `# Swift
177
+ }
178
+ configData.ios.SPMPackages = spmPackages;
179
+ await this.$projectConfigService.setValue("", configData);
180
+ if (fs.existsSync(gitIgnorePath)) {
181
+ const gitIgnore = fs.readFileSync(gitIgnorePath, {
182
+ encoding: "utf-8",
183
+ });
184
+ const swiftBuildIgnore = `# Swift
208
185
  .build
209
186
  .swiftpm`;
210
- if (gitIgnore.indexOf(swiftBuildIgnore) === -1) {
211
- content = `${gitIgnore}${os_1.EOL}${swiftBuildIgnore}${os_1.EOL}`;
212
- fs.writeFileSync(gitIgnorePath, content);
213
- }
187
+ if (gitIgnore.indexOf(swiftBuildIgnore) === -1) {
188
+ content = `${gitIgnore}${os_1.EOL}${swiftBuildIgnore}${os_1.EOL}`;
189
+ fs.writeFileSync(gitIgnorePath, content);
214
190
  }
215
- console.log(`\nCreated Shared Resources: ${sharedWidgetDir}.\n`);
216
191
  }
217
- });
192
+ console.log(`\nCreated Shared Resources: ${sharedWidgetDir}.\n`);
193
+ }
218
194
  }
219
- generateWidget(projectDir, name, type) {
195
+ generateWidget(projectDir, name, bundleId, type) {
220
196
  const appResourcePath = this.$projectData.appResourcesDirectoryPath;
221
197
  const capitalName = (0, utils_1.capitalizeFirstLetter)(name);
222
198
  const appInfoPlistPath = path.join(appResourcePath, "iOS", "Info.plist");
@@ -230,11 +206,6 @@ public struct ${(0, utils_1.capitalizeFirstLetter)(name)}Model: ActivityAttribut
230
206
  const widgetBundlePath = path.join(widgetPath, `${capitalName}Bundle.swift`);
231
207
  const widgetHomeScreenPath = path.join(widgetPath, `${capitalName}HomeScreenWidget.swift`);
232
208
  const widgetLiveActivityPath = path.join(widgetPath, `${capitalName}LiveActivity.swift`);
233
- const appIntentPath = path.join(widgetPath, `AppIntent.swift`);
234
- // const widgetLockScreenControlPath = path.join(
235
- // widgetPath,
236
- // `${capitalName}LockScreenControl.swift`
237
- // );
238
209
  const appEntitlementsPath = path.join(appResourcePath, "iOS", "app.entitlements");
239
210
  if (!fs.existsSync(extensionsConfigPath)) {
240
211
  fs.mkdirSync(widgetPath, { recursive: true });
@@ -247,6 +218,10 @@ public struct ${(0, utils_1.capitalizeFirstLetter)(name)}Model: ActivityAttribut
247
218
  <key>NSExtensionPointIdentifier</key>
248
219
  <string>com.apple.widgetkit-extension</string>
249
220
  </dict>
221
+ <key>CFBundleShortVersionString</key>
222
+ <string>1.0</string>
223
+ <key>CFBundleVersion</key>
224
+ <string>1.0</string>
250
225
  </dict>
251
226
  </plist>${os_1.EOL}`;
252
227
  fs.writeFileSync(extensionsInfoPath, content);
@@ -272,123 +247,128 @@ public struct ${(0, utils_1.capitalizeFirstLetter)(name)}Model: ActivityAttribut
272
247
  </dict>
273
248
  </plist>${os_1.EOL}`;
274
249
  fs.writeFileSync(extensionsPrivacyPath, content);
275
- // TODO: can add control (lock screen custom control icon handler) in future
276
- // ${[1, 2].includes(type) ? capitalName + "LockScreenControl()" : ""}
277
250
  content = `import WidgetKit
278
251
  import SwiftUI
279
252
 
280
253
  @main
281
- struct ${capitalName}Bundle: WidgetBundle {
254
+ struct ${capitalName}Bundle: SwiftUI.WidgetBundle {
282
255
  var body: some Widget {
283
256
  ${[1, 2].includes(type) ? capitalName + "HomeScreenWidget()" : ""}
284
257
  ${[0, 1].includes(type) ? capitalName + "LiveActivity()" : ""}
285
258
  }
286
259
  }${os_1.EOL}`;
287
260
  fs.writeFileSync(widgetBundlePath, content);
288
- content = `import WidgetKit
289
- import AppIntents
290
-
291
- struct ConfigurationAppIntent: WidgetConfigurationIntent {
292
- static var title: LocalizedStringResource { "Pizza Delivery" }
293
- static var description: IntentDescription { "Get up to date delivery details" }
294
-
295
- // An example configurable parameter.
296
- @Parameter(title: "Favorite Pizza", default: "🍕")
297
- var favoritePizza: String
298
-
299
- @Parameter(title: "Random", default: "Hello")
300
- var random: String
301
- }${os_1.EOL}`;
302
- fs.writeFileSync(appIntentPath, content);
303
261
  if ([0, 1].includes(type)) {
304
262
  content = `import ActivityKit
305
263
  import SwiftUI
306
264
  import WidgetKit
307
265
  import Foundation
308
266
  import SharedWidget
267
+ import os
309
268
 
310
269
  struct ${capitalName}LiveActivity: Widget {
311
- var body: some WidgetConfiguration {
312
- ActivityConfiguration(for: ${capitalName}Model.self) { context in
313
- // Lock screen/banner UI goes here
314
- ContentView(driver: context.state.driverName)
315
- .activityBackgroundTint(Color.black)
316
- .activitySystemActionForegroundColor(Color.white)
317
-
318
- } dynamicIsland: { context in
319
- DynamicIsland {
320
- // Expanded UI goes here. Compose the expanded UI through
321
- // various regions, like leading/trailing/center/bottom
322
- DynamicIslandExpandedRegion(.leading) {
323
- if let timeLeft = timeLeft(range1: Date(), range2: context.state.estimatedDeliveryTime) {
324
- Image(systemName: "car")
325
- .resizable()
326
- .scaledToFit()
327
- .frame(width: 50, height: 50) // Adjust size
328
- .foregroundColor(timeLeft <= 1000 ? Color.green : Color.orange)
329
- }
330
- }
331
- DynamicIslandExpandedRegion(.trailing) {
332
- if let timeLeft = timeLeft(range1: Date(), range2: context.state.estimatedDeliveryTime) {
333
- ProgressView(value: timeLeft, total: 3600)
334
- .progressViewStyle(.circular)
335
- .tint(timeLeft <= 1000 ? Color.green : Color.orange)
336
- }
337
- }
338
- DynamicIslandExpandedRegion(.bottom) {
339
- if let timeLeft = timeLeft(range1: Date(), range2: context.state.estimatedDeliveryTime) {
340
- Text("\\(context.state.driverName) \\(timeLeft <= 0 ? "has arrived!" : String(format: "is %.1f min away", timeLeft / 60))")
341
- }
342
- }
343
- } compactLeading: {
344
- if let timeLeft = timeLeft(range1: Date(), range2: context.state.estimatedDeliveryTime) {
345
- Image(systemName: "car")
346
- .resizable()
347
- .scaledToFit()
348
- .frame(width: 20, height: 20)
349
- .foregroundColor(timeLeft <= 0 ? .green : .orange)
350
- }
351
- } compactTrailing: {
352
- if let timeLeft = timeLeft(range1: Date(), range2: context.state.estimatedDeliveryTime) {
353
- Image(systemName: "timer.circle.fill")
354
- .resizable()
355
- .scaledToFit()
356
- .frame(width: 20, height: 20)
357
- .foregroundColor(timeLeft <= 0 ? .green : .orange)
358
- }
359
- } minimal: {
360
- Text(context.state.driverName).font(.system(size: 12))
361
- }
362
- .widgetURL(URL(string: "http://www.apple.com"))
363
- .keylineTint(Color.red)
364
- }
365
- }
366
270
 
367
- func timeLeft(range1: Date, range2: ClosedRange<Date>) -> TimeInterval? {
368
- let end = min(range1, range2.upperBound)
369
-
370
- if end > range1 {
371
- let remaining = end.timeIntervalSince(range1)
372
- print("Time left: \\(remaining)")
373
- return remaining
374
- } else {
375
- return 0
376
- }
377
- }
271
+ var body: some WidgetConfiguration {
272
+ ActivityConfiguration(for: ${capitalName}Model.self) { context in
273
+
274
+ LockScreenView(message: context.state.message, deliveryTime: context.state.deliveryTime)
275
+ .activityBackgroundTint(Color.black)
276
+ .activitySystemActionForegroundColor(Color.white)
277
+
278
+ } dynamicIsland: { context in
279
+ DynamicIsland {
280
+ DynamicIslandExpandedRegion(.leading) {
281
+ Image(systemName: context.state.deliveryTime >= 0 ? "car.side.arrowtriangle.up.fill" : "face.smiling.inverse")
282
+ .resizable()
283
+ .scaledToFit()
284
+ .frame(width: 50, height: 50)
285
+ .foregroundColor(context.state.deliveryTime >= 0 ? Color.green : Color.blue)
286
+ }
287
+ DynamicIslandExpandedRegion(.trailing) {
288
+ if (context.state.deliveryTime >= 0) {
289
+ ZStack {
290
+ ProgressView(value: context.state.deliveryTime, total: 60)
291
+ .progressViewStyle(.circular)
292
+ .tint(Color.green)
293
+ .frame(width: 75, height: 75)
294
+ Text("\\(formatter.string(for: context.state.deliveryTime) ?? "") mins")
295
+ .font(.system(size: 11))
296
+ .foregroundStyle(.white)
297
+ }.frame(width: 75, height: 75)
298
+ } else {
299
+ Image(systemName: "checkmark.circle.fill")
300
+ .resizable()
301
+ .scaledToFit()
302
+ .frame(width: 50, height: 50)
303
+ .foregroundColor(.blue)
304
+ }
305
+ }
306
+ DynamicIslandExpandedRegion(.bottom) {
307
+ Text("\\(context.state.message)")
308
+ }
309
+ } compactLeading: {
310
+ Image(systemName: context.state.deliveryTime >= 0 ? "car.side.arrowtriangle.up.fill" : "face.smiling.inverse")
311
+ .resizable()
312
+ .scaledToFit()
313
+ .frame(width: 20, height: 20)
314
+ .foregroundColor(context.state.deliveryTime >= 0 ? .green : .blue)
315
+ } compactTrailing: {
316
+ Image(systemName: context.state.deliveryTime >= 0 ? "timer.circle.fill" : "checkmark.circle.fill")
317
+ .resizable()
318
+ .scaledToFit()
319
+ .frame(width: 20, height: 20)
320
+ .foregroundColor(context.state.deliveryTime >= 0 ? .green : .blue)
321
+ } minimal: {
322
+ Text(context.state.message).font(.system(size: 12))
323
+ }
324
+ .widgetURL(URL(string: "http://www.apple.com"))
325
+ .keylineTint(Color.red)
326
+ }
327
+ }
328
+
329
+ private let formatter: NumberFormatter = {
330
+ let formatter = NumberFormatter()
331
+ formatter.maximumFractionDigits = 0
332
+ formatter.minimumFractionDigits = 0
333
+ return formatter
334
+ }()
378
335
  }
379
336
 
380
- struct ContentView: View {
381
- @State var driver = ""
337
+ struct LockScreenView: View {
338
+ @State private var message = ""
339
+ @State private var deliveryTime: Double = 0
340
+ // for console debugging
341
+ let logger = Logger(subsystem: "${bundleId}.${name}", category: "Widget")
382
342
 
383
- var body: some View {
384
- HStack {
385
- Spacer()
386
- Image(uiImage: UIImage(named: "pizza-live") ?? UIImage())
387
- Spacer()
388
- Text("\\(driver) is on \\(driver == "Sally" ? "her" : "his") way!")
389
- Spacer()
390
- }.frame(maxWidth: .infinity, maxHeight: .infinity)
391
- }
343
+ var body: some View {
344
+ ZStack {
345
+ LinearGradient(
346
+ gradient: Gradient(colors: [Color.gray.opacity(0.3), Color.black]),
347
+ startPoint: .top,
348
+ endPoint: .bottom
349
+ )
350
+ VStack {
351
+ Spacer()
352
+ Image(systemName: deliveryTime >= 0 ? "car.side.arrowtriangle.up.fill" : "face.smiling.inverse")
353
+ .resizable()
354
+ .scaledToFit()
355
+ .frame(width: 50, height: 50)
356
+ .foregroundColor(deliveryTime >= 0 ? .green : .blue)
357
+ Spacer()
358
+ Text("\\(message)")
359
+ .foregroundStyle(.white)
360
+ Spacer()
361
+ }
362
+ }.frame(maxWidth: .infinity, maxHeight: .infinity)
363
+ }
364
+
365
+ init(message: String = "", deliveryTime: Double = 0) {
366
+ _message = State(initialValue: message)
367
+ _deliveryTime = State(initialValue: deliveryTime)
368
+
369
+ // Logs the deliveryTime at init for debugging purposes if needed
370
+ logger.log("deliveryTime: \\(deliveryTime)")
371
+ }
392
372
  }${os_1.EOL}`;
393
373
  fs.writeFileSync(widgetLiveActivityPath, content);
394
374
  }
@@ -396,129 +376,179 @@ struct ContentView: View {
396
376
  content = `import SwiftUI
397
377
  import WidgetKit
398
378
 
399
- struct Provider: AppIntentTimelineProvider {
379
+ /**
380
+ * Widget data shared between the app and the widget extension.
381
+ */
382
+ struct WidgetData: Codable {
383
+ let pizzas: [String]
384
+ let orderTime: Double
385
+ let delivered: Bool
386
+ }
387
+
388
+ struct Provider: TimelineProvider {
389
+
400
390
  func placeholder(in context: Context) -> SimpleEntry {
401
- SimpleEntry(date: Date(), random: "Starting", configuration: ConfigurationAppIntent())
391
+ SimpleEntry(date: Date(), pizza: "Pepperoni", delivered: false, orderTime: Date())
402
392
  }
403
-
404
- func snapshot(for configuration: ConfigurationAppIntent, in context: Context) async -> SimpleEntry
405
- {
406
- SimpleEntry(date: Date(), random: configuration.random, configuration: configuration)
393
+
394
+ func getSnapshot(in context: Context, completion: @escaping (SimpleEntry) -> ()) {
395
+ let entry = SimpleEntry(date: Date(), pizza: "Pepperoni", delivered: false, orderTime: Date())
396
+ completion(entry)
407
397
  }
408
-
409
- func timeline(for configuration: ConfigurationAppIntent, in context: Context) async -> Timeline<
410
- SimpleEntry
411
- > {
398
+
399
+ func getTimeline(in context: Context, completion: @escaping @Sendable (Timeline<Entry>) -> ()) {
412
400
  var entries: [SimpleEntry] = []
413
-
414
- // Generate a timeline consisting of five entries a second apart, starting from the current time.
415
- let currentDate = Date()
416
- for secondOffset in 0..<5 {
417
- let entryDate = Calendar.current.date(
418
- byAdding: .second, value: secondOffset, to: currentDate)!
419
- var config = configuration
420
- switch (secondOffset) {
421
- case 1:
422
- config = .pepperoni
423
- case 2:
424
- config = .supreme
425
- case 3:
426
- config = .cowboy
427
- case 4:
428
- config = .pineswine
429
- default:
430
- break;
401
+
402
+ if let sharedDefaults = UserDefaults(suiteName: "group.${bundleId}") {
403
+ let currentDate = Date()
404
+ if let jsonString = sharedDefaults.string(forKey: "widgetData") {
405
+ if let jsonData = jsonString.data(using: .utf8) {
406
+ do {
407
+ let widgetData = try JSONDecoder().decode(WidgetData.self, from: jsonData)
408
+ let pizzas = widgetData.pizzas
409
+ let orderTime = Date(timeIntervalSince1970: widgetData.orderTime/1000)
410
+ let delivered = widgetData.delivered
411
+
412
+ // Generate a timeline of entries 1 second apart, starting from the current date.
413
+ for secondOffset in 0..<pizzas.count {
414
+ let entryDate = Calendar.current.date(
415
+ byAdding: .second, value: secondOffset, to: currentDate)!
416
+ let entry = SimpleEntry(date: entryDate, pizza: secondOffset < pizzas.count ? pizzas[secondOffset] : pizzas[0], delivered: delivered, orderTime: orderTime)
417
+ entries.append(entry)
418
+ }
419
+ } catch {
420
+ print("Failed to decode JSON: (error)")
421
+ }
422
+ }
423
+ } else {
424
+ let entry = SimpleEntry(date: currentDate, pizza: "", delivered: false, orderTime: nil)
425
+ entries.append(entry)
431
426
  }
432
- let entry = SimpleEntry(date: entryDate, random: config.random, configuration: config)
433
- entries.append(entry)
434
427
  }
435
-
436
- return Timeline(entries: entries, policy: .atEnd)
428
+
429
+ let timeline = Timeline(entries: entries, policy: .atEnd)
430
+ completion(timeline)
437
431
  }
432
+
433
+ // func relevances() async -> WidgetRelevances<Void> {
434
+ // // Generate a list containing the contexts this widget is relevant in.
435
+ // }
438
436
  }
439
437
 
440
438
  struct SimpleEntry: TimelineEntry {
441
439
  let date: Date
442
- let random: String
443
- let configuration: ConfigurationAppIntent
440
+ let pizza: String
441
+ let delivered: Bool
442
+ let orderTime: Date?
444
443
  }
445
444
 
446
445
  struct WidgetView: View {
446
+ @Environment(\\.widgetFamily) var widgetFamily
447
447
  var entry: Provider.Entry
448
448
 
449
449
  var body: some View {
450
- ZStack {
451
- Image(uiImage: UIImage(named: "pizza") ?? UIImage()).frame(
452
- maxWidth: .infinity, maxHeight: .infinity)
453
- VStack {
454
- Text("Time:")
455
- .foregroundStyle(.white)
456
- Text(entry.date, style: .time)
457
- .foregroundStyle(.white)
458
- Text("Random City:")
459
- .foregroundStyle(.white)
460
- Text(entry.configuration.random)
461
- .foregroundStyle(.white)
462
- Text("Favorite Pizza:")
463
- .foregroundStyle(.white)
464
- Text(entry.configuration.favoritePizza)
450
+ VStack {
451
+ if (entry.pizza != "") {
452
+ Spacer()
453
+ Image(systemName: entry.delivered ? "face.smiling.inverse" : "car.side")
454
+ .resizable()
455
+ .scaledToFit()
456
+ .frame(width: iconSize(for: widgetFamily), height: iconSize(for: widgetFamily))
457
+ .foregroundColor(entry.delivered ? .blue : .green)
458
+ Spacer()
459
+ if (entry.delivered) {
460
+ Text("Pizza Delivered!")
461
+ .font(.system(size: fontSize(for: widgetFamily), weight: .bold))
462
+ .foregroundStyle(.white)
463
+ } else {
464
+ HStack(spacing: 4) {
465
+ Text("Ordered:")
466
+ .font(.system(size: fontSize(for: widgetFamily)))
467
+ .foregroundStyle(.white)
468
+ Text(entry.orderTime!, style: .time)
469
+ .font(.system(size: fontSize(for: widgetFamily), weight: .bold))
470
+ .foregroundStyle(.white)
471
+ }
472
+ HStack(spacing: 4) {
473
+ Text("Pizza:")
474
+ .font(.system(size: fontSize(for: widgetFamily)))
475
+ .foregroundStyle(.white)
476
+ Text(entry.pizza)
477
+ .font(.system(size: fontSize(for: widgetFamily), weight: .bold))
478
+ .foregroundStyle(.white)
479
+ }
480
+ }
481
+ Spacer()
482
+ } else {
483
+ Spacer()
484
+ Image(systemName: "car.side.rear.open")
485
+ .resizable()
486
+ .scaledToFit()
487
+ .frame(width: iconSize(for: widgetFamily), height: iconSize(for: widgetFamily))
488
+ .foregroundColor(.gray)
489
+ Spacer()
490
+ Text("Awaiting orders...")
465
491
  .foregroundStyle(.white)
492
+ Spacer()
466
493
  }
467
494
  }.frame(maxWidth: .infinity, maxHeight: .infinity)
468
495
  }
496
+
497
+ private func iconSize(for family: WidgetFamily) -> CGFloat {
498
+ switch family {
499
+ case .systemSmall:
500
+ return 65
501
+ case .systemMedium:
502
+ return 85
503
+ case .systemLarge:
504
+ return 150
505
+ default:
506
+ return 65
507
+ }
508
+ }
509
+
510
+ private func fontSize(for family: WidgetFamily) -> CGFloat {
511
+ switch family {
512
+ case .systemSmall:
513
+ return 12
514
+ case .systemMedium:
515
+ return 14
516
+ case .systemLarge:
517
+ return 18
518
+ default:
519
+ return 14
520
+ }
521
+ }
469
522
  }
470
523
 
471
524
  @available(iOSApplicationExtension 17.0, *)
472
525
  struct ${capitalName}HomeScreenWidget: Widget {
473
526
  let kind: String = "widget"
474
-
527
+
475
528
  var body: some WidgetConfiguration {
476
- AppIntentConfiguration(kind: kind, intent: ConfigurationAppIntent.self, provider: Provider()) {
477
- entry in
529
+ StaticConfiguration(kind: kind, provider: Provider()) { entry in
478
530
  WidgetView(entry: entry)
479
- .containerBackground(.fill.tertiary, for: .widget)
531
+ .containerBackground(for: .widget) {
532
+ LinearGradient(
533
+ gradient: Gradient(colors: [Color.black.opacity(0.6), Color.black]),
534
+ startPoint: .top,
535
+ endPoint: .bottom
536
+ )
537
+ }
480
538
  }
481
- }
482
- }
483
-
484
- extension ConfigurationAppIntent {
485
- fileprivate static var pepperoni: ConfigurationAppIntent {
486
- let intent = ConfigurationAppIntent()
487
- intent.favoritePizza = "Pepperoni"
488
- intent.random = "Georgia"
489
- return intent
490
- }
491
- fileprivate static var supreme: ConfigurationAppIntent {
492
- let intent = ConfigurationAppIntent()
493
- intent.favoritePizza = "Supreme"
494
- intent.random = "Kansas City"
495
- return intent
496
- }
497
-
498
- fileprivate static var cowboy: ConfigurationAppIntent {
499
- let intent = ConfigurationAppIntent()
500
- intent.favoritePizza = "Cowboy"
501
- intent.random = "Nashville"
502
- return intent
503
- }
504
-
505
- fileprivate static var pineswine: ConfigurationAppIntent {
506
- let intent = ConfigurationAppIntent()
507
- intent.favoritePizza = "Pine & Swine"
508
- intent.random = "Portland"
509
- return intent
539
+ .configurationDisplayName("${capitalName} Widget")
540
+ .description("${capitalName} delivery service.")
510
541
  }
511
542
  }
512
543
 
513
544
  #Preview(as: .systemSmall) {
514
545
  ${capitalName}HomeScreenWidget()
515
546
  } timeline: {
516
- SimpleEntry(date: .now, random: "Atlanta", configuration: .pepperoni)
517
- SimpleEntry(date: .now, random: "Austin", configuration: .supreme)
547
+ SimpleEntry(date: .now, pizza: "Pepperoni", delivered: false, orderTime: Date())
548
+ SimpleEntry(date: .now, pizza: "Hawaiian", delivered: false, orderTime: Date())
518
549
  }${os_1.EOL}`;
519
550
  fs.writeFileSync(widgetHomeScreenPath, content);
520
551
  }
521
- const bundleId = this.$projectConfigService.getValue(`id`, "");
522
552
  content = `{
523
553
  "${bundleId}.${name}": "{set-your-provision-profile-id}"
524
554
  }`;
@@ -540,7 +570,6 @@ extension ConfigurationAppIntent {
540
570
  encoding: "utf-8",
541
571
  }));
542
572
  if (!appInfoPlist[appSupportLiveActivity]) {
543
- // @ts-ignore
544
573
  appInfoPlist[appSupportLiveActivity] = true;
545
574
  const appPlist = plist.build(appInfoPlist);
546
575
  fs.writeFileSync(appInfoPlistPath, appPlist);
@@ -552,7 +581,6 @@ extension ConfigurationAppIntent {
552
581
  encoding: "utf-8",
553
582
  }));
554
583
  if (!appEntitlementsPlist[appGroupKey]) {
555
- // @ts-ignore
556
584
  appEntitlementsPlist[appGroupKey] = [`group.${bundleId}`];
557
585
  const appEntitlements = plist.build(appEntitlementsPlist);
558
586
  console.log("appentitlement:", appEntitlements);
@@ -625,17 +653,15 @@ extension ConfigurationAppIntent {
625
653
  fs.writeFileSync(extensionsConfigPath, content);
626
654
  console.log(`🚀 Your widget is now ready to develop: App_Resources/iOS/extensions/${name}.\n`);
627
655
  console.log(`Followup steps:\n
656
+ - Check App_Resources/iOS/build.xcconfig uses IPHONEOS_DEPLOYMENT_TARGET=17 or higher.
628
657
  - Update App_Resources/iOS/extensions/provisioning.json with your profile id.
629
658
  - Customize App_Resources/iOS/extensions/${name}/${(0, utils_1.capitalizeFirstLetter)(name)}LiveActivity.swift for your display.
630
659
  - Customize Shared_Resources/iOS/SharedWidget/Sources/SharedWidget/${(0, utils_1.capitalizeFirstLetter)(name)}Model.swift for your data.
631
660
  `);
632
661
  }
633
- // if (fs.existsSync(filePath)) {
634
- // this.$errors.failWithHelp(`Error: File '${filePath}' already exists.`);
635
- // return;
636
- // }
637
662
  }
638
- generateAppleUtility(projectDir, name) {
663
+ generateAppleUtility(projectDir, name, bundleId) {
664
+ const capitalName = (0, utils_1.capitalizeFirstLetter)(name);
639
665
  const appResourcePath = this.$projectData.appResourcesDirectoryPath;
640
666
  const appResourceSrcPath = path.join(appResourcePath, "iOS", "src");
641
667
  const appleUtilityPath = path.join(appResourceSrcPath, `AppleWidgetUtils.swift`);
@@ -659,16 +685,16 @@ public class AppleWidgetUtils: NSObject {
659
685
  if ActivityAuthorizationInfo().areActivitiesEnabled {
660
686
  let numberOfPizzas = data.object(forKey: "numberOfPizzas") as! Int
661
687
  let totalAmount = data.object(forKey: "totalAmount") as! String
662
- let attrs = ${(0, utils_1.capitalizeFirstLetter)(name)}Model(numberOfPizzas: numberOfPizzas, totalAmount: totalAmount)
688
+ let attrs = ${capitalName}Model(numberOfPizzas: numberOfPizzas, totalAmount: totalAmount)
663
689
 
664
- let driverName = data.object(forKey: "driverName") as! String
665
- let deliveryTime = data.object(forKey: "deliveryTime") as! CGFloat
666
- let initialStatus = ${(0, utils_1.capitalizeFirstLetter)(name)}Model.DeliveryStatus(
667
- driverName: driverName, estimatedDeliveryTime: Date()...Date().addingTimeInterval(deliveryTime * 60))
690
+ let message = data.object(forKey: "message") as! String
691
+ let deliveryTime = data.object(forKey: "deliveryTime") as! Double
692
+ let initialStatus = ${capitalName}Model.DeliveryStatus(
693
+ message: message, deliveryTime: deliveryTime)
668
694
  let content = ActivityContent(state: initialStatus, staleDate: nil)
669
695
 
670
696
  do {
671
- let activity = try Activity<${(0, utils_1.capitalizeFirstLetter)(name)}Model>.request(
697
+ let activity = try Activity<${capitalName}Model>.request(
672
698
  attributes: attrs,
673
699
  content: content,
674
700
  pushType: nil)
@@ -681,13 +707,13 @@ public class AppleWidgetUtils: NSObject {
681
707
  public static func updateActivity(_ data: NSDictionary) {
682
708
  if ActivityAuthorizationInfo().areActivitiesEnabled {
683
709
  Task {
684
- let driverName = data.object(forKey: "driverName") as! String
685
- let deliveryTime = data.object(forKey: "deliveryTime") as! CGFloat
686
- let status = ${(0, utils_1.capitalizeFirstLetter)(name)}Model.DeliveryStatus(
687
- driverName: driverName, estimatedDeliveryTime: Date()...Date().addingTimeInterval(deliveryTime * 60))
710
+ let message = data.object(forKey: "message") as! String
711
+ let deliveryTime = data.object(forKey: "deliveryTime") as! Double
712
+ let status = ${capitalName}Model.DeliveryStatus(
713
+ message: message, deliveryTime: deliveryTime)
688
714
  let content = ActivityContent(state: status, staleDate: nil)
689
715
 
690
- for activity in Activity<${(0, utils_1.capitalizeFirstLetter)(name)}Model>.activities {
716
+ for activity in Activity<${capitalName}Model>.activities {
691
717
  await activity.update(content)
692
718
  }
693
719
  }
@@ -696,26 +722,37 @@ public class AppleWidgetUtils: NSObject {
696
722
  public static func cancelActivity(_ data: NSDictionary) {
697
723
  if ActivityAuthorizationInfo().areActivitiesEnabled {
698
724
  Task {
699
- let driverName = data.object(forKey: "driverName") as! String
700
- let status = ${(0, utils_1.capitalizeFirstLetter)(name)}Model.DeliveryStatus(
701
- driverName: driverName, estimatedDeliveryTime: Date()...Date())
725
+ let message = data.object(forKey: "message") as! String
726
+ let status = ${capitalName}Model.DeliveryStatus(
727
+ message: message, deliveryTime: 0)
702
728
  let content = ActivityContent(state: status, staleDate: nil)
703
729
 
704
- for activity in Activity<${(0, utils_1.capitalizeFirstLetter)(name)}Model>.activities {
730
+ for activity in Activity<${capitalName}Model>.activities {
705
731
  await activity.end(content, dismissalPolicy: .immediate)
706
732
  }
707
733
  }
708
734
  }
709
735
  }
710
- public static func showAllActivities() {
711
- if ActivityAuthorizationInfo().areActivitiesEnabled {
712
- Task {
713
- for activity in Activity<${(0, utils_1.capitalizeFirstLetter)(name)}Model>.activities {
714
- print("Activity Details: \\(activity.id) -> \\(activity.attributes)")
715
- }
716
- }
717
- }
718
- }
736
+ public static func getData(key: String) -> String? {
737
+ guard let sharedDefaults = UserDefaults(suiteName: "group.${bundleId}") else {
738
+ return nil
739
+ }
740
+ return sharedDefaults.object(forKey: key) as? String
741
+ }
742
+ public static func updateData(key: String, _ data: String) {
743
+ guard let sharedDefaults = UserDefaults(suiteName: "group.${bundleId}") else {
744
+ return
745
+ }
746
+ sharedDefaults.set(data, forKey: key)
747
+ sharedDefaults.synchronize()
748
+ }
749
+ public static func removeData(key: String) {
750
+ guard let sharedDefaults = UserDefaults(suiteName: "group.${bundleId}") else {
751
+ return
752
+ }
753
+ sharedDefaults.removeObject(forKey: key)
754
+ sharedDefaults.synchronize()
755
+ }
719
756
 
720
757
  // Home Screen Widget Handling
721
758
  public static func updateWidget() {
@@ -739,11 +776,13 @@ declare interface AppleWidgetModelData {
739
776
  declare class AppleWidgetUtils extends NSObject {
740
777
  static startActivity(data: AppleWidgetModelData): void;
741
778
  static updateActivity(
742
- data: Pick<AppleWidgetModelData, "driverName" | "deliveryTime">
779
+ data: Pick<AppleWidgetModelData, "message" | "deliveryTime">
743
780
  ): void;
744
- static cancelActivity(data: Pick<AppleWidgetModelData, "driverName">): void;
745
- static showAllActivities(): void;
781
+ static cancelActivity(data: Pick<AppleWidgetModelData, "message">): void;
746
782
  static updateWidget(): void;
783
+ static updateDataWithKey(key: string, data: string): void;
784
+ static getDataWithKey(key: string): string;
785
+ static removeDataWithKey(key: string): void;
747
786
  }${os_1.EOL}`;
748
787
  if (!fs.existsSync(referenceTypesPath)) {
749
788
  const references = `/// <reference path="./node_modules/@nativescript/types-android/index.d.ts" />
@@ -764,4 +803,3 @@ declare class AppleWidgetUtils extends NSObject {
764
803
  exports.WidgetIOSCommand = WidgetIOSCommand;
765
804
  yok_1.injector.registerCommand(["widget"], WidgetCommand);
766
805
  yok_1.injector.registerCommand(["widget|ios"], WidgetIOSCommand);
767
- //# sourceMappingURL=widget.js.map