@use-voltra/ios-client 2.1.1 → 2.3.0

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 (365) hide show
  1. package/README.md +61 -8
  2. package/Voltra.podspec +1 -0
  3. package/build/commonjs/dynamic-widget/api.js +15 -0
  4. package/build/commonjs/dynamic-widget/api.js.map +1 -0
  5. package/build/commonjs/events.js +23 -0
  6. package/build/commonjs/events.js.map +1 -1
  7. package/build/commonjs/index.js +74 -7
  8. package/build/commonjs/index.js.map +1 -1
  9. package/build/commonjs/live-activity/api.js +3 -1
  10. package/build/commonjs/live-activity/api.js.map +1 -1
  11. package/build/commonjs/live-activity/dynamic-api.js +173 -0
  12. package/build/commonjs/live-activity/dynamic-api.js.map +1 -0
  13. package/build/commonjs/native/NativeVoltra.js.map +1 -1
  14. package/build/commonjs/utils/enableDynamicLiveActivityHotReload.js +47 -0
  15. package/build/commonjs/utils/enableDynamicLiveActivityHotReload.js.map +1 -0
  16. package/build/commonjs/utils/enableWidgetHotReload.js +8 -11
  17. package/build/commonjs/utils/enableWidgetHotReload.js.map +1 -1
  18. package/build/commonjs/utils/useUpdateOnHMR.js +3 -7
  19. package/build/commonjs/utils/useUpdateOnHMR.js.map +1 -1
  20. package/build/commonjs/widgets/server-credentials.js +9 -0
  21. package/build/commonjs/widgets/server-credentials.js.map +1 -1
  22. package/build/commonjs/widgets/server-update.js +78 -0
  23. package/build/commonjs/widgets/server-update.js.map +1 -0
  24. package/build/module/dynamic-widget/api.js +10 -0
  25. package/build/module/dynamic-widget/api.js.map +1 -0
  26. package/build/module/events.js +23 -0
  27. package/build/module/events.js.map +1 -1
  28. package/build/module/index.js +4 -0
  29. package/build/module/index.js.map +1 -1
  30. package/build/module/live-activity/api.js +2 -2
  31. package/build/module/live-activity/api.js.map +1 -1
  32. package/build/module/live-activity/dynamic-api.js +167 -0
  33. package/build/module/live-activity/dynamic-api.js.map +1 -0
  34. package/build/module/native/NativeVoltra.js.map +1 -1
  35. package/build/module/utils/enableDynamicLiveActivityHotReload.js +43 -0
  36. package/build/module/utils/enableDynamicLiveActivityHotReload.js.map +1 -0
  37. package/build/module/utils/enableWidgetHotReload.js +9 -11
  38. package/build/module/utils/enableWidgetHotReload.js.map +1 -1
  39. package/build/module/utils/useUpdateOnHMR.js +3 -7
  40. package/build/module/utils/useUpdateOnHMR.js.map +1 -1
  41. package/build/module/widgets/server-credentials.js +9 -0
  42. package/build/module/widgets/server-credentials.js.map +1 -1
  43. package/build/module/widgets/server-update.js +72 -0
  44. package/build/module/widgets/server-update.js.map +1 -0
  45. package/build/typescript/commonjs/dynamic-widget/api.d.ts +8 -0
  46. package/build/typescript/commonjs/dynamic-widget/api.d.ts.map +1 -0
  47. package/build/typescript/commonjs/events.d.ts +7 -0
  48. package/build/typescript/commonjs/events.d.ts.map +1 -1
  49. package/build/typescript/commonjs/index.d.ts +4 -0
  50. package/build/typescript/commonjs/index.d.ts.map +1 -1
  51. package/build/typescript/commonjs/live-activity/api.d.ts +7 -0
  52. package/build/typescript/commonjs/live-activity/api.d.ts.map +1 -1
  53. package/build/typescript/commonjs/live-activity/dynamic-api.d.ts +54 -0
  54. package/build/typescript/commonjs/live-activity/dynamic-api.d.ts.map +1 -0
  55. package/build/typescript/commonjs/native/NativeVoltra.d.ts +21 -0
  56. package/build/typescript/commonjs/native/NativeVoltra.d.ts.map +1 -1
  57. package/build/typescript/commonjs/types.d.ts +1 -1
  58. package/build/typescript/commonjs/types.d.ts.map +1 -1
  59. package/build/typescript/commonjs/utils/enableDynamicLiveActivityHotReload.d.ts +15 -0
  60. package/build/typescript/commonjs/utils/enableDynamicLiveActivityHotReload.d.ts.map +1 -0
  61. package/build/typescript/commonjs/utils/enableWidgetHotReload.d.ts +5 -7
  62. package/build/typescript/commonjs/utils/enableWidgetHotReload.d.ts.map +1 -1
  63. package/build/typescript/commonjs/utils/useUpdateOnHMR.d.ts +0 -3
  64. package/build/typescript/commonjs/utils/useUpdateOnHMR.d.ts.map +1 -1
  65. package/build/typescript/commonjs/widgets/server-credentials.d.ts +8 -0
  66. package/build/typescript/commonjs/widgets/server-credentials.d.ts.map +1 -1
  67. package/build/typescript/commonjs/widgets/server-update.d.ts +64 -0
  68. package/build/typescript/commonjs/widgets/server-update.d.ts.map +1 -0
  69. package/build/typescript/module/dynamic-widget/api.d.ts +8 -0
  70. package/build/typescript/module/dynamic-widget/api.d.ts.map +1 -0
  71. package/build/typescript/module/events.d.ts +7 -0
  72. package/build/typescript/module/events.d.ts.map +1 -1
  73. package/build/typescript/module/index.d.ts +4 -0
  74. package/build/typescript/module/index.d.ts.map +1 -1
  75. package/build/typescript/module/live-activity/api.d.ts +7 -0
  76. package/build/typescript/module/live-activity/api.d.ts.map +1 -1
  77. package/build/typescript/module/live-activity/dynamic-api.d.ts +54 -0
  78. package/build/typescript/module/live-activity/dynamic-api.d.ts.map +1 -0
  79. package/build/typescript/module/native/NativeVoltra.d.ts +21 -0
  80. package/build/typescript/module/native/NativeVoltra.d.ts.map +1 -1
  81. package/build/typescript/module/types.d.ts +1 -1
  82. package/build/typescript/module/types.d.ts.map +1 -1
  83. package/build/typescript/module/utils/enableDynamicLiveActivityHotReload.d.ts +15 -0
  84. package/build/typescript/module/utils/enableDynamicLiveActivityHotReload.d.ts.map +1 -0
  85. package/build/typescript/module/utils/enableWidgetHotReload.d.ts +5 -7
  86. package/build/typescript/module/utils/enableWidgetHotReload.d.ts.map +1 -1
  87. package/build/typescript/module/utils/useUpdateOnHMR.d.ts +0 -3
  88. package/build/typescript/module/utils/useUpdateOnHMR.d.ts.map +1 -1
  89. package/build/typescript/module/widgets/server-credentials.d.ts +8 -0
  90. package/build/typescript/module/widgets/server-credentials.d.ts.map +1 -1
  91. package/build/typescript/module/widgets/server-update.d.ts +64 -0
  92. package/build/typescript/module/widgets/server-update.d.ts.map +1 -0
  93. package/expo-plugin/build/cjs/constants.js +20 -1
  94. package/expo-plugin/build/cjs/constants.js.map +1 -1
  95. package/expo-plugin/build/cjs/index.js +9 -1
  96. package/expo-plugin/build/cjs/index.js.map +1 -1
  97. package/expo-plugin/build/cjs/ios/index.js +1 -0
  98. package/expo-plugin/build/cjs/ios/index.js.map +1 -1
  99. package/expo-plugin/build/cjs/ios/infoPlist.js +28 -5
  100. package/expo-plugin/build/cjs/ios/infoPlist.js.map +1 -1
  101. package/expo-plugin/build/cjs/ios/serverUpdate.js +25 -0
  102. package/expo-plugin/build/cjs/ios/serverUpdate.js.map +1 -0
  103. package/expo-plugin/build/cjs/ios-widget/clientRendered.js +4 -4
  104. package/expo-plugin/build/cjs/ios-widget/clientRendered.js.map +1 -1
  105. package/expo-plugin/build/cjs/ios-widget/clientRenderedPrerender.js +5 -5
  106. package/expo-plugin/build/cjs/ios-widget/clientRenderedPrerender.js.map +1 -1
  107. package/expo-plugin/build/cjs/ios-widget/dynamic-live-activity/swift.js +130 -0
  108. package/expo-plugin/build/cjs/ios-widget/dynamic-live-activity/swift.js.map +1 -0
  109. package/expo-plugin/build/cjs/ios-widget/files/index.js +9 -2
  110. package/expo-plugin/build/cjs/ios-widget/files/index.js.map +1 -1
  111. package/expo-plugin/build/cjs/ios-widget/files/infoPlist.js +6 -3
  112. package/expo-plugin/build/cjs/ios-widget/files/infoPlist.js.map +1 -1
  113. package/expo-plugin/build/cjs/ios-widget/files/manifest.js +24 -0
  114. package/expo-plugin/build/cjs/ios-widget/files/manifest.js.map +1 -1
  115. package/expo-plugin/build/cjs/ios-widget/files/swift-utils.js +7 -0
  116. package/expo-plugin/build/cjs/ios-widget/files/swift-utils.js.map +1 -0
  117. package/expo-plugin/build/cjs/ios-widget/files/swift.js +56 -26
  118. package/expo-plugin/build/cjs/ios-widget/files/swift.js.map +1 -1
  119. package/expo-plugin/build/cjs/ios-widget/index.js +9 -3
  120. package/expo-plugin/build/cjs/ios-widget/index.js.map +1 -1
  121. package/expo-plugin/build/cjs/ios-widget/podfile.js +38 -12
  122. package/expo-plugin/build/cjs/ios-widget/podfile.js.map +1 -1
  123. package/expo-plugin/build/cjs/ios-widget/widgetPlist.js +34 -22
  124. package/expo-plugin/build/cjs/ios-widget/widgetPlist.js.map +1 -1
  125. package/expo-plugin/build/cjs/ios-widget/xcode/buildPhases.js +194 -118
  126. package/expo-plugin/build/cjs/ios-widget/xcode/buildPhases.js.map +1 -1
  127. package/expo-plugin/build/cjs/ios-widget/xcode/configurationList.js +30 -22
  128. package/expo-plugin/build/cjs/ios-widget/xcode/configurationList.js.map +1 -1
  129. package/expo-plugin/build/cjs/ios-widget/xcode/fileReferences.js +50 -0
  130. package/expo-plugin/build/cjs/ios-widget/xcode/fileReferences.js.map +1 -0
  131. package/expo-plugin/build/cjs/ios-widget/xcode/groups.js +45 -43
  132. package/expo-plugin/build/cjs/ios-widget/xcode/groups.js.map +1 -1
  133. package/expo-plugin/build/cjs/ios-widget/xcode/index.js +93 -91
  134. package/expo-plugin/build/cjs/ios-widget/xcode/index.js.map +1 -1
  135. package/expo-plugin/build/cjs/ios-widget/xcode/mainAppSettings.js +41 -39
  136. package/expo-plugin/build/cjs/ios-widget/xcode/mainAppSettings.js.map +1 -1
  137. package/expo-plugin/build/cjs/ios-widget/xcode/productFile.js +2 -2
  138. package/expo-plugin/build/cjs/ios-widget/xcode/productFile.js.map +1 -1
  139. package/expo-plugin/build/cjs/ios-widget/xcode/target.js +29 -63
  140. package/expo-plugin/build/cjs/ios-widget/xcode/target.js.map +1 -1
  141. package/expo-plugin/build/cjs/utils/urlScheme.js +36 -14
  142. package/expo-plugin/build/cjs/utils/urlScheme.js.map +1 -1
  143. package/expo-plugin/build/cjs/validation.js +54 -0
  144. package/expo-plugin/build/cjs/validation.js.map +1 -1
  145. package/expo-plugin/build/esm/constants.js +17 -0
  146. package/expo-plugin/build/esm/constants.js.map +1 -1
  147. package/expo-plugin/build/esm/index.js +9 -1
  148. package/expo-plugin/build/esm/index.js.map +1 -1
  149. package/expo-plugin/build/esm/ios/index.js +1 -0
  150. package/expo-plugin/build/esm/ios/index.js.map +1 -1
  151. package/expo-plugin/build/esm/ios/infoPlist.js +28 -5
  152. package/expo-plugin/build/esm/ios/infoPlist.js.map +1 -1
  153. package/expo-plugin/build/esm/ios/serverUpdate.js +21 -0
  154. package/expo-plugin/build/esm/ios/serverUpdate.js.map +1 -0
  155. package/expo-plugin/build/esm/ios-widget/clientRendered.js +5 -5
  156. package/expo-plugin/build/esm/ios-widget/clientRendered.js.map +1 -1
  157. package/expo-plugin/build/esm/ios-widget/clientRenderedPrerender.js +6 -6
  158. package/expo-plugin/build/esm/ios-widget/clientRenderedPrerender.js.map +1 -1
  159. package/expo-plugin/build/esm/ios-widget/dynamic-live-activity/swift.js +122 -0
  160. package/expo-plugin/build/esm/ios-widget/dynamic-live-activity/swift.js.map +1 -0
  161. package/expo-plugin/build/esm/ios-widget/files/index.js +10 -3
  162. package/expo-plugin/build/esm/ios-widget/files/index.js.map +1 -1
  163. package/expo-plugin/build/esm/ios-widget/files/infoPlist.js +6 -3
  164. package/expo-plugin/build/esm/ios-widget/files/infoPlist.js.map +1 -1
  165. package/expo-plugin/build/esm/ios-widget/files/manifest.js +23 -1
  166. package/expo-plugin/build/esm/ios-widget/files/manifest.js.map +1 -1
  167. package/expo-plugin/build/esm/ios-widget/files/swift-utils.js +4 -0
  168. package/expo-plugin/build/esm/ios-widget/files/swift-utils.js.map +1 -0
  169. package/expo-plugin/build/esm/ios-widget/files/swift.js +50 -20
  170. package/expo-plugin/build/esm/ios-widget/files/swift.js.map +1 -1
  171. package/expo-plugin/build/esm/ios-widget/index.js +9 -3
  172. package/expo-plugin/build/esm/ios-widget/index.js.map +1 -1
  173. package/expo-plugin/build/esm/ios-widget/podfile.js +36 -11
  174. package/expo-plugin/build/esm/ios-widget/podfile.js.map +1 -1
  175. package/expo-plugin/build/esm/ios-widget/widgetPlist.js +34 -22
  176. package/expo-plugin/build/esm/ios-widget/widgetPlist.js.map +1 -1
  177. package/expo-plugin/build/esm/ios-widget/xcode/buildPhases.js +194 -117
  178. package/expo-plugin/build/esm/ios-widget/xcode/buildPhases.js.map +1 -1
  179. package/expo-plugin/build/esm/ios-widget/xcode/configurationList.js +31 -22
  180. package/expo-plugin/build/esm/ios-widget/xcode/configurationList.js.map +1 -1
  181. package/expo-plugin/build/esm/ios-widget/xcode/fileReferences.js +45 -0
  182. package/expo-plugin/build/esm/ios-widget/xcode/fileReferences.js.map +1 -0
  183. package/expo-plugin/build/esm/ios-widget/xcode/groups.js +45 -42
  184. package/expo-plugin/build/esm/ios-widget/xcode/groups.js.map +1 -1
  185. package/expo-plugin/build/esm/ios-widget/xcode/index.js +97 -96
  186. package/expo-plugin/build/esm/ios-widget/xcode/index.js.map +1 -1
  187. package/expo-plugin/build/esm/ios-widget/xcode/mainAppSettings.js +41 -39
  188. package/expo-plugin/build/esm/ios-widget/xcode/mainAppSettings.js.map +1 -1
  189. package/expo-plugin/build/esm/ios-widget/xcode/productFile.js +3 -2
  190. package/expo-plugin/build/esm/ios-widget/xcode/productFile.js.map +1 -1
  191. package/expo-plugin/build/esm/ios-widget/xcode/target.js +28 -62
  192. package/expo-plugin/build/esm/ios-widget/xcode/target.js.map +1 -1
  193. package/expo-plugin/build/esm/utils/urlScheme.js +34 -14
  194. package/expo-plugin/build/esm/utils/urlScheme.js.map +1 -1
  195. package/expo-plugin/build/esm/validation.js +54 -1
  196. package/expo-plugin/build/esm/validation.js.map +1 -1
  197. package/expo-plugin/build/types/constants.d.ts +10 -1
  198. package/expo-plugin/build/types/constants.d.ts.map +1 -1
  199. package/expo-plugin/build/types/index.d.ts +1 -1
  200. package/expo-plugin/build/types/index.d.ts.map +1 -1
  201. package/expo-plugin/build/types/ios/index.d.ts +2 -0
  202. package/expo-plugin/build/types/ios/index.d.ts.map +1 -1
  203. package/expo-plugin/build/types/ios/infoPlist.d.ts +2 -0
  204. package/expo-plugin/build/types/ios/infoPlist.d.ts.map +1 -1
  205. package/expo-plugin/build/types/ios/serverUpdate.d.ts +11 -0
  206. package/expo-plugin/build/types/ios/serverUpdate.d.ts.map +1 -0
  207. package/expo-plugin/build/types/ios-widget/clientRendered.d.ts.map +1 -1
  208. package/expo-plugin/build/types/ios-widget/clientRenderedPrerender.d.ts.map +1 -1
  209. package/expo-plugin/build/types/ios-widget/dynamic-live-activity/swift.d.ts +7 -0
  210. package/expo-plugin/build/types/ios-widget/dynamic-live-activity/swift.d.ts.map +1 -0
  211. package/expo-plugin/build/types/ios-widget/files/index.d.ts +3 -1
  212. package/expo-plugin/build/types/ios-widget/files/index.d.ts.map +1 -1
  213. package/expo-plugin/build/types/ios-widget/files/infoPlist.d.ts +2 -1
  214. package/expo-plugin/build/types/ios-widget/files/infoPlist.d.ts.map +1 -1
  215. package/expo-plugin/build/types/ios-widget/files/manifest.d.ts +9 -2
  216. package/expo-plugin/build/types/ios-widget/files/manifest.d.ts.map +1 -1
  217. package/expo-plugin/build/types/ios-widget/files/swift-utils.d.ts +2 -0
  218. package/expo-plugin/build/types/ios-widget/files/swift-utils.d.ts.map +1 -0
  219. package/expo-plugin/build/types/ios-widget/files/swift.d.ts +6 -2
  220. package/expo-plugin/build/types/ios-widget/files/swift.d.ts.map +1 -1
  221. package/expo-plugin/build/types/ios-widget/index.d.ts +3 -1
  222. package/expo-plugin/build/types/ios-widget/index.d.ts.map +1 -1
  223. package/expo-plugin/build/types/ios-widget/podfile.d.ts +19 -1
  224. package/expo-plugin/build/types/ios-widget/podfile.d.ts.map +1 -1
  225. package/expo-plugin/build/types/ios-widget/widgetPlist.d.ts.map +1 -1
  226. package/expo-plugin/build/types/ios-widget/xcode/buildPhases.d.ts +6 -8
  227. package/expo-plugin/build/types/ios-widget/xcode/buildPhases.d.ts.map +1 -1
  228. package/expo-plugin/build/types/ios-widget/xcode/configurationList.d.ts +15 -10
  229. package/expo-plugin/build/types/ios-widget/xcode/configurationList.d.ts.map +1 -1
  230. package/expo-plugin/build/types/ios-widget/xcode/fileReferences.d.ts +16 -0
  231. package/expo-plugin/build/types/ios-widget/xcode/fileReferences.d.ts.map +1 -0
  232. package/expo-plugin/build/types/ios-widget/xcode/groups.d.ts +0 -4
  233. package/expo-plugin/build/types/ios-widget/xcode/groups.d.ts.map +1 -1
  234. package/expo-plugin/build/types/ios-widget/xcode/index.d.ts +23 -3
  235. package/expo-plugin/build/types/ios-widget/xcode/index.d.ts.map +1 -1
  236. package/expo-plugin/build/types/ios-widget/xcode/mainAppSettings.d.ts +16 -4
  237. package/expo-plugin/build/types/ios-widget/xcode/mainAppSettings.d.ts.map +1 -1
  238. package/expo-plugin/build/types/ios-widget/xcode/productFile.d.ts +0 -4
  239. package/expo-plugin/build/types/ios-widget/xcode/productFile.d.ts.map +1 -1
  240. package/expo-plugin/build/types/ios-widget/xcode/target.d.ts +11 -26
  241. package/expo-plugin/build/types/ios-widget/xcode/target.d.ts.map +1 -1
  242. package/expo-plugin/build/types/types.d.ts +23 -4
  243. package/expo-plugin/build/types/types.d.ts.map +1 -1
  244. package/expo-plugin/build/types/utils/urlScheme.d.ts +16 -0
  245. package/expo-plugin/build/types/utils/urlScheme.d.ts.map +1 -1
  246. package/expo-plugin/build/types/validation.d.ts +2 -1
  247. package/expo-plugin/build/types/validation.d.ts.map +1 -1
  248. package/expo-plugin/src/constants.ts +24 -1
  249. package/expo-plugin/src/index.ts +14 -1
  250. package/expo-plugin/src/ios/index.ts +3 -0
  251. package/expo-plugin/src/ios/infoPlist.ts +33 -5
  252. package/expo-plugin/src/ios/serverUpdate.ts +29 -0
  253. package/expo-plugin/src/ios-widget/clientRendered.ts +9 -5
  254. package/expo-plugin/src/ios-widget/clientRenderedPrerender.ts +11 -6
  255. package/expo-plugin/src/ios-widget/dynamic-live-activity/swift.ts +138 -0
  256. package/expo-plugin/src/ios-widget/files/index.ts +15 -4
  257. package/expo-plugin/src/ios-widget/files/infoPlist.ts +17 -3
  258. package/expo-plugin/src/ios-widget/files/manifest.ts +42 -2
  259. package/expo-plugin/src/ios-widget/files/swift-utils.ts +3 -0
  260. package/expo-plugin/src/ios-widget/files/swift.ts +69 -22
  261. package/expo-plugin/src/ios-widget/index.ts +13 -3
  262. package/expo-plugin/src/ios-widget/podfile.ts +46 -13
  263. package/expo-plugin/src/ios-widget/widgetPlist.ts +37 -23
  264. package/expo-plugin/src/ios-widget/xcode/__fixtures__/fresh.pbxproj +197 -0
  265. package/expo-plugin/src/ios-widget/xcode/__fixtures__/with-existing-extension.pbxproj +321 -0
  266. package/expo-plugin/src/ios-widget/xcode/__fixtures__/with-per-config-signing.pbxproj +203 -0
  267. package/expo-plugin/src/ios-widget/xcode/__snapshots__/applyXcodeChanges.node.test.ts.snap +363 -0
  268. package/expo-plugin/src/ios-widget/xcode/__tests__/pbxConsistency.ts +130 -0
  269. package/expo-plugin/src/ios-widget/xcode/buildPhases.ts +210 -164
  270. package/expo-plugin/src/ios-widget/xcode/configurationList.ts +52 -35
  271. package/expo-plugin/src/ios-widget/xcode/fileReferences.ts +51 -0
  272. package/expo-plugin/src/ios-widget/xcode/groups.ts +52 -54
  273. package/expo-plugin/src/ios-widget/xcode/index.ts +124 -119
  274. package/expo-plugin/src/ios-widget/xcode/mainAppSettings.ts +59 -54
  275. package/expo-plugin/src/ios-widget/xcode/productFile.ts +3 -2
  276. package/expo-plugin/src/ios-widget/xcode/target.ts +31 -83
  277. package/expo-plugin/src/types.ts +28 -4
  278. package/expo-plugin/src/utils/urlScheme.ts +47 -17
  279. package/expo-plugin/src/validation.ts +76 -1
  280. package/ios/Package.swift +39 -4
  281. package/ios/VoltraWidget.podspec +1 -0
  282. package/ios/app/NativeVoltra.mm +126 -7
  283. package/ios/app/VoltraLiveActivityManager.swift +30 -0
  284. package/ios/app/VoltraLiveActivityService.swift +77 -5
  285. package/ios/app/VoltraModule.swift +117 -1
  286. package/ios/app/VoltraModuleImpl.swift +116 -2
  287. package/ios/app/VoltraViewComponentView.mm +3 -3
  288. package/ios/app/VoltraWidgetService.swift +147 -12
  289. package/ios/app/dynamic-live-activity/VoltraDynamicLiveActivityService.swift +97 -0
  290. package/ios/app/dynamic-live-activity/VoltraLiveActivityChronology.swift +68 -0
  291. package/ios/shared/DynamicWidgetPropsCodec.swift +51 -0
  292. package/ios/shared/DynamicWidgetPropsStorage.swift +53 -0
  293. package/ios/shared/DynamicWidgetPropsStore.swift +117 -0
  294. package/ios/shared/DynamicWidgetRenderCoordinator.swift +31 -0
  295. package/ios/shared/DynamicWidgetServerUpdate/DynamicWidgetServerFetchResolver.swift +34 -0
  296. package/ios/shared/DynamicWidgetServerUpdate/DynamicWidgetServerProps.swift +55 -0
  297. package/ios/shared/DynamicWidgetServerUpdate/DynamicWidgetServerPropsStore.swift +146 -0
  298. package/ios/shared/DynamicWidgetServerUpdate/DynamicWidgetServerUpdateRunner.swift +193 -0
  299. package/ios/shared/DynamicWidgetUpdater.swift +30 -0
  300. package/ios/shared/ServerWidgetContentResolver.swift +60 -0
  301. package/ios/shared/ServerWidgetResponseStore.swift +25 -0
  302. package/ios/shared/ShortNames.swift +6 -0
  303. package/ios/shared/VoltraConfig.swift +41 -0
  304. package/ios/shared/VoltraConstants.swift +19 -0
  305. package/ios/shared/VoltraElement.swift +127 -43
  306. package/ios/shared/VoltraEventBus.swift +52 -7
  307. package/ios/shared/VoltraJSRenderer.swift +93 -23
  308. package/ios/shared/VoltraNode.swift +7 -111
  309. package/ios/shared/VoltraRefreshIntent.swift +1 -1
  310. package/ios/shared/VoltraWidgetDefaults.swift +9 -1
  311. package/ios/shared/VoltraWidgetKind.swift +41 -0
  312. package/ios/shared/VoltraWidgetServerFetcher.swift +52 -107
  313. package/ios/shared/WidgetServer/VoltraWidgetAppearance.swift +17 -0
  314. package/ios/shared/WidgetServer/VoltraWidgetServer.swift +138 -0
  315. package/ios/shared/WidgetServer/WidgetCanonicalConfiguration.swift +77 -0
  316. package/ios/shared/WidgetServer/WidgetScope.swift +55 -0
  317. package/ios/shared/WidgetServer/WidgetServerEtagStore.swift +55 -0
  318. package/ios/shared/WidgetServer/WidgetServerFetcher.swift +179 -0
  319. package/ios/shared/WidgetServer/WidgetServerRequestBuilder.swift +114 -0
  320. package/ios/shared/WidgetServer/WidgetServerSettingsCodec.swift +47 -0
  321. package/ios/shared/WidgetServer/WidgetServerSettingsResolver.swift +129 -0
  322. package/ios/shared/WidgetServer/WidgetServerSettingsStore.swift +170 -0
  323. package/ios/shared/WidgetServer/WidgetServerSettingsValidator.swift +73 -0
  324. package/ios/shared/WidgetServer/WidgetServerUpdateSettings.swift +123 -0
  325. package/ios/shared/WidgetServer/WidgetServerUpdateSettingsJson.swift +115 -0
  326. package/ios/shared/dynamic-live-activity/DynamicLiveActivityPropsCodec.swift +13 -0
  327. package/ios/shared/dynamic-live-activity/VoltraDynamicLiveActivityBundleSource.swift +156 -0
  328. package/ios/shared/dynamic-live-activity/VoltraDynamicLiveActivityObserver.swift +97 -0
  329. package/ios/shared/dynamic-live-activity/VoltraDynamicLiveActivityOperations.swift +105 -0
  330. package/ios/shared/dynamic-live-activity/VoltraDynamicLiveActivityPayloadValidator.swift +55 -0
  331. package/ios/shared/dynamic-live-activity/VoltraDynamicLiveActivityRegistry.swift +143 -0
  332. package/ios/shared/dynamic-live-activity/VoltraDynamicLiveActivityRenderFailureQueue.swift +158 -0
  333. package/ios/shared/dynamic-live-activity/VoltraDynamicLiveActivityRenderFailureReporter.swift +120 -0
  334. package/ios/shared/dynamic-live-activity/VoltraDynamicLiveActivityRenderer.swift +370 -0
  335. package/ios/shared/dynamic-live-activity/VoltraDynamicLiveActivityTypes.swift +87 -0
  336. package/ios/shared/dynamic-live-activity/VoltraLiveActivityOrder.swift +19 -0
  337. package/ios/target/VoltraClientWidgetRuntime.swift +60 -10
  338. package/ios/target/VoltraDynamicWidgetServerUpdateProvider.swift +204 -0
  339. package/ios/target/VoltraHomeWidget.swift +91 -92
  340. package/ios/target/VoltraWidget.swift +3 -1
  341. package/ios/ui/Extensions/VoltraNode+View.swift +113 -0
  342. package/ios/ui/Generated/Parameters/ChartParameters.swift +3 -0
  343. package/ios/ui/Helpers/VoltraDeepLinkResolver.swift +5 -3
  344. package/ios/ui/Helpers/VoltraProgressDriver.swift +6 -2
  345. package/ios/ui/Layout/VoltraFlexStackLayout.swift +9 -3
  346. package/ios/ui/Style/JSColorParser.swift +24 -8
  347. package/ios/ui/Style/JSGradientParser.swift +36 -12
  348. package/ios/ui/Style/JSStyleParser.swift +36 -12
  349. package/ios/ui/Style/LayoutStyle.swift +12 -4
  350. package/ios/ui/Views/VoltraChart.swift +160 -16
  351. package/ios/ui/Views/VoltraLinearGradient.swift +6 -2
  352. package/package.json +5 -5
  353. package/src/dynamic-widget/api.ts +25 -0
  354. package/src/events.ts +34 -0
  355. package/src/index.ts +23 -0
  356. package/src/live-activity/api.ts +2 -2
  357. package/src/live-activity/dynamic-api.ts +240 -0
  358. package/src/native/NativeVoltra.ts +22 -0
  359. package/src/types.ts +4 -0
  360. package/src/utils/enableDynamicLiveActivityHotReload.ts +50 -0
  361. package/src/utils/enableWidgetHotReload.ts +9 -16
  362. package/src/utils/useUpdateOnHMR.ts +3 -12
  363. package/src/widgets/server-credentials.ts +8 -0
  364. package/src/widgets/server-update.ts +84 -0
  365. /package/ios/shared/{VoltraKeychainHelper.swift → WidgetServer/VoltraKeychainHelper.swift} +0 -0
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.iosServerUpdateRules = iosServerUpdateRules;
4
+ exports.resolveIOSWidgetServerUpdate = resolveIOSWidgetServerUpdate;
5
+ const expo_plugin_1 = require("@use-voltra/expo-plugin");
6
+ /**
7
+ * iOS payload widgets have always defaulted to 15 minutes and accepted anything down to 1, since
8
+ * WidgetKit stretches a timeline it cannot honour rather than refusing it. A widget with an
9
+ * `entry` follows ADR 0002 instead: default 15, floor 15 on both platforms.
10
+ */
11
+ function iosServerUpdateRules(widget) {
12
+ return {
13
+ hasEntry: widget.entry !== undefined,
14
+ defaultIntervalMinutes: 15,
15
+ minimumIntervalMinutes: 1,
16
+ };
17
+ }
18
+ /** `serverUpdate` with defaults applied, as the plist and Swift generators consume it. */
19
+ function resolveIOSWidgetServerUpdate(widget) {
20
+ if (widget.serverUpdate === undefined) {
21
+ return undefined;
22
+ }
23
+ return (0, expo_plugin_1.resolveWidgetServerUpdate)(widget.serverUpdate, iosServerUpdateRules(widget));
24
+ }
25
+ //# sourceMappingURL=serverUpdate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serverUpdate.js","sourceRoot":"","sources":["../../../src/ios/serverUpdate.ts"],"names":[],"mappings":";;AAWA,oDAMC;AAGD,oEAQC;AA5BD,yDAAmE;AAMnE;;;;GAIG;AACH,SAAgB,oBAAoB,CAAC,MAAsC;IACzE,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,KAAK,KAAK,SAAS;QACpC,sBAAsB,EAAE,EAAE;QAC1B,sBAAsB,EAAE,CAAC;KAC1B,CAAA;AACH,CAAC;AAED,0FAA0F;AAC1F,SAAgB,4BAA4B,CAC1C,MAAuD;IAEvD,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,OAAO,IAAA,uCAAyB,EAAC,MAAM,CAAC,YAAY,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAA;AACrF,CAAC"}
@@ -42,7 +42,8 @@ const expo_plugin_1 = require("@use-voltra/expo-plugin");
42
42
  let hasWarnedExperimental = false;
43
43
  /** Inspect every widget once and tag entry-backed widgets as Dynamic Widgets. */
44
44
  function detectClientRenderedWidgets(widgets, projectRoot) {
45
- const detected = widgets.map((widget) => detectSingleWidget(widget, projectRoot));
45
+ const loader = (0, expo_plugin_1.createPrerenderWidgetModuleLoader)(projectRoot, 'ios');
46
+ const detected = widgets.map((widget) => detectSingleWidget(widget, projectRoot, loader));
46
47
  if (!hasWarnedExperimental) {
47
48
  const clientWidgetIds = detected.filter((widget) => widget.clientRendered).map((widget) => widget.id);
48
49
  if (clientWidgetIds.length > 0) {
@@ -54,7 +55,7 @@ function detectClientRenderedWidgets(widgets, projectRoot) {
54
55
  }
55
56
  return detected;
56
57
  }
57
- function detectSingleWidget(widget, projectRoot) {
58
+ function detectSingleWidget(widget, projectRoot, loader) {
58
59
  if (widget.entry === undefined) {
59
60
  return {
60
61
  ...widget,
@@ -65,8 +66,7 @@ function detectSingleWidget(widget, projectRoot) {
65
66
  if (!sourcePath || !fs.existsSync(sourcePath)) {
66
67
  throw new Error(`[voltra] Dynamic Widget "${widget.id}" entry not found at ${path.relative(projectRoot, sourcePath ?? widget.entry)}`);
67
68
  }
68
- const widgetModule = (0, expo_plugin_1.evaluateWidgetModuleExports)(projectRoot, sourcePath);
69
- const widgetFn = widgetModule?.default ?? widgetModule;
69
+ const widgetFn = loader.loadDefaultExport(sourcePath);
70
70
  if (typeof widgetFn !== 'function') {
71
71
  throw new Error(`[voltra] Dynamic Widget "${widget.id}" at ${path.relative(projectRoot, sourcePath)} must default-export a function or component.`);
72
72
  }
@@ -1 +1 @@
1
- {"version":3,"file":"clientRendered.js","sourceRoot":"","sources":["../../../src/ios-widget/clientRendered.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,kEAgBC;AA/CD,uCAAwB;AACxB,2CAA4B;AAE5B,yDAAqE;AAuBrE,8FAA8F;AAC9F,iBAAiB;AACjB,IAAI,qBAAqB,GAAG,KAAK,CAAA;AAEjC,iFAAiF;AACjF,SAAgB,2BAA2B,CAAC,OAA0B,EAAE,WAAmB;IACzF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAA;IAEjF,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC3B,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACrG,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,qBAAqB,GAAG,IAAI,CAAA;YAC5B,OAAO,CAAC,IAAI,CACV,8CAA8C,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;gBAC3E,8FAA8F;gBAC9F,qFAAqF,CACxF,CAAA;QACH,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAuB,EAAE,WAAmB;IACtE,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO;YACL,GAAG,MAAM;YACT,cAAc,EAAE,KAAK;SACtB,CAAA;IACH,CAAC;IAED,MAAM,UAAU,GAAG,sBAAsB,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IACpE,IAAI,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,4BAA4B,MAAM,CAAC,EAAE,wBAAwB,IAAI,CAAC,QAAQ,CACxE,WAAW,EACX,UAAU,IAAI,MAAM,CAAC,KAAK,CAC3B,EAAE,CACJ,CAAA;IACH,CAAC;IAED,MAAM,YAAY,GAAG,IAAA,yCAA2B,EAAC,WAAW,EAAE,UAAU,CAAC,CAAA;IACzE,MAAM,QAAQ,GAAG,YAAY,EAAE,OAAO,IAAI,YAAY,CAAA;IACtD,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACb,4BAA4B,MAAM,CAAC,EAAE,QAAQ,IAAI,CAAC,QAAQ,CACxD,WAAW,EACX,UAAU,CACX,+CAA+C,CACjD,CAAA;IACH,CAAC;IAED,OAAO;QACL,GAAG,MAAM;QACT,cAAc,EAAE,IAAI;QACpB,gBAAgB,EAAE,UAAU;KAC7B,CAAA;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAa,EAAE,WAAmB;IAChE,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;AACzC,CAAC"}
1
+ {"version":3,"file":"clientRendered.js","sourceRoot":"","sources":["../../../src/ios-widget/clientRendered.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,kEAiBC;AAhDD,uCAAwB;AACxB,2CAA4B;AAE5B,yDAAoG;AAuBpG,8FAA8F;AAC9F,iBAAiB;AACjB,IAAI,qBAAqB,GAAG,KAAK,CAAA;AAEjC,iFAAiF;AACjF,SAAgB,2BAA2B,CAAC,OAA0B,EAAE,WAAmB;IACzF,MAAM,MAAM,GAAG,IAAA,+CAAiC,EAAC,WAAW,EAAE,KAAK,CAAC,CAAA;IACpE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAA;IAEzF,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC3B,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACrG,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,qBAAqB,GAAG,IAAI,CAAA;YAC5B,OAAO,CAAC,IAAI,CACV,8CAA8C,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;gBAC3E,8FAA8F;gBAC9F,qFAAqF,CACxF,CAAA;QACH,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,kBAAkB,CACzB,MAAuB,EACvB,WAAmB,EACnB,MAA0B;IAE1B,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO;YACL,GAAG,MAAM;YACT,cAAc,EAAE,KAAK;SACtB,CAAA;IACH,CAAC;IAED,MAAM,UAAU,GAAG,sBAAsB,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IACpE,IAAI,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,4BAA4B,MAAM,CAAC,EAAE,wBAAwB,IAAI,CAAC,QAAQ,CACxE,WAAW,EACX,UAAU,IAAI,MAAM,CAAC,KAAK,CAC3B,EAAE,CACJ,CAAA;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAA;IACrD,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACb,4BAA4B,MAAM,CAAC,EAAE,QAAQ,IAAI,CAAC,QAAQ,CACxD,WAAW,EACX,UAAU,CACX,+CAA+C,CACjD,CAAA;IACH,CAAC;IAED,OAAO;QACL,GAAG,MAAM;QACT,cAAc,EAAE,IAAI;QACpB,gBAAgB,EAAE,UAAU;KAC7B,CAAA;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAa,EAAE,WAAmB;IAChE,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;AACzC,CAAC"}
@@ -62,7 +62,7 @@ const SINGLE_LOCALE_KEY = '__default';
62
62
  * mirror `WidgetEnvironment` from packages/core/src/widget-environment.ts so the widget
63
63
  * function sees the same shape it gets at runtime.
64
64
  */
65
- function buildPlaceholderEnv() {
65
+ function buildPlaceholderEnv(voltraVersion) {
66
66
  return {
67
67
  date: Date.now(),
68
68
  widgetFamily: 'systemMedium',
@@ -75,7 +75,7 @@ function buildPlaceholderEnv() {
75
75
  isDev: false,
76
76
  metroUrl: null,
77
77
  appVersion: 'unknown',
78
- voltraVersion: '1.4.1',
78
+ voltraVersion,
79
79
  },
80
80
  };
81
81
  }
@@ -95,11 +95,11 @@ async function prerenderClientRenderedWidgets(widgets, projectRoot) {
95
95
  // @use-voltra/android in a future phase.
96
96
  const iosModuleId = '@use-voltra/ios';
97
97
  const { renderVoltraVariantToJson } = (await Promise.resolve(`${iosModuleId}`).then(s => __importStar(require(s))));
98
- const placeholderEnv = buildPlaceholderEnv();
98
+ const placeholderEnv = buildPlaceholderEnv((0, expo_plugin_1.resolveInstalledPackageVersion)(projectRoot, '@use-voltra/ios-client'));
99
+ const loader = (0, expo_plugin_1.createPrerenderWidgetModuleLoader)(projectRoot, 'ios');
99
100
  for (const widget of clientWidgets) {
100
101
  try {
101
- const widgetModule = (0, expo_plugin_1.evaluateWidgetModuleExports)(projectRoot, widget.clientSourcePath);
102
- const widgetFn = widgetModule?.default ?? widgetModule;
102
+ const widgetFn = loader.loadDefaultExport(widget.clientSourcePath);
103
103
  if (typeof widgetFn !== 'function') {
104
104
  throw new Error(`Expected the entry module at ${widget.clientSourcePath} to default-export a function or component.`);
105
105
  }
@@ -1 +1 @@
1
- {"version":3,"file":"clientRenderedPrerender.js","sourceRoot":"","sources":["../../../src/ios-widget/clientRenderedPrerender.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwDA,wEA8CC;AAtGD,yDAA2G;AAI3G;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,4FAA4F;AAC5F,MAAM,iBAAiB,GAAG,WAAW,CAAA;AAErC;;;;GAIG;AACH,SAAS,mBAAmB;IAC1B,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE;QAChB,YAAY,EAAE,cAAc;QAC5B,WAAW,EAAE,OAAO;QACpB,MAAM,EAAE,OAAO;QACf,mBAAmB,EAAE,WAAW;QAChC,8BAA8B,EAAE,IAAI;QACpC,aAAa,EAAE,SAAS;QACxB,KAAK,EAAE;YACL,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,SAAS;YACrB,aAAa,EAAE,OAAO;SACvB;KACF,CAAA;AACH,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,8BAA8B,CAClD,OAA4B,EAC5B,WAAmB;IAEnB,MAAM,OAAO,GAA4B,IAAI,GAAG,EAAE,CAAA;IAElD,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAClC,CAAC,CAAC,EAA6D,EAAE,CAAC,CAAC,CAAC,cAAc,CACnF,CAAA;IACD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,kFAAkF;IAClF,kFAAkF;IAClF,yCAAyC;IACzC,MAAM,WAAW,GAAG,iBAAiB,CAAA;IACrC,MAAM,EAAE,yBAAyB,EAAE,GAAG,CAAC,yBAAa,WAAW,uCAAC,CAE/D,CAAA;IAED,MAAM,cAAc,GAAG,mBAAmB,EAAE,CAAA;IAE5C,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,IAAA,yCAA2B,EAAC,WAAW,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAA;YACtF,MAAM,QAAQ,GAAG,YAAY,EAAE,OAAO,IAAI,YAAY,CAAA;YACtD,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CACb,gCAAgC,MAAM,CAAC,gBAAgB,6CAA6C,CACrG,CAAA;YACH,CAAC;YAED,MAAM,OAAO,GAAG,QAAQ,CAAC,EAAE,EAAE,cAAc,CAAC,CAAA;YAC5C,MAAM,IAAI,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAA;YAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;YACvC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;QACpE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,uCAAuC,MAAM,CAAC,EAAE,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC/G,CAAA;QACH,CAAC;IACH,CAAC;IAED,oBAAM,CAAC,IAAI,CAAC,eAAe,aAAa,CAAC,MAAM,gCAAgC,CAAC,CAAA;IAChF,OAAO,OAAO,CAAA;AAChB,CAAC"}
1
+ {"version":3,"file":"clientRenderedPrerender.js","sourceRoot":"","sources":["../../../src/ios-widget/clientRenderedPrerender.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6DA,wEA8CC;AA3GD,yDAKgC;AAIhC;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,4FAA4F;AAC5F,MAAM,iBAAiB,GAAG,WAAW,CAAA;AAErC;;;;GAIG;AACH,SAAS,mBAAmB,CAAC,aAAqB;IAChD,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE;QAChB,YAAY,EAAE,cAAc;QAC5B,WAAW,EAAE,OAAO;QACpB,MAAM,EAAE,OAAO;QACf,mBAAmB,EAAE,WAAW;QAChC,8BAA8B,EAAE,IAAI;QACpC,aAAa,EAAE,SAAS;QACxB,KAAK,EAAE;YACL,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,SAAS;YACrB,aAAa;SACd;KACF,CAAA;AACH,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,8BAA8B,CAClD,OAA4B,EAC5B,WAAmB;IAEnB,MAAM,OAAO,GAA4B,IAAI,GAAG,EAAE,CAAA;IAElD,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAClC,CAAC,CAAC,EAA6D,EAAE,CAAC,CAAC,CAAC,cAAc,CACnF,CAAA;IACD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,kFAAkF;IAClF,kFAAkF;IAClF,yCAAyC;IACzC,MAAM,WAAW,GAAG,iBAAiB,CAAA;IACrC,MAAM,EAAE,yBAAyB,EAAE,GAAG,CAAC,yBAAa,WAAW,uCAAC,CAE/D,CAAA;IAED,MAAM,cAAc,GAAG,mBAAmB,CAAC,IAAA,4CAA8B,EAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC,CAAA;IACjH,MAAM,MAAM,GAAG,IAAA,+CAAiC,EAAC,WAAW,EAAE,KAAK,CAAC,CAAA;IAEpE,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;YAClE,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CACb,gCAAgC,MAAM,CAAC,gBAAgB,6CAA6C,CACrG,CAAA;YACH,CAAC;YAED,MAAM,OAAO,GAAG,QAAQ,CAAC,EAAE,EAAE,cAAc,CAAC,CAAA;YAC5C,MAAM,IAAI,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAA;YAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;YACvC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;QACpE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,uCAAuC,MAAM,CAAC,EAAE,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC/G,CAAA;QACH,CAAC;IACH,CAAC;IAED,oBAAM,CAAC,IAAI,CAAC,eAAe,aAAa,CAAC,MAAM,gCAAgC,CAAC,CAAA;IAChF,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.generateDynamicLiveActivityWidgetInstances = generateDynamicLiveActivityWidgetInstances;
7
+ exports.generateDynamicLiveActivityTypesSwift = generateDynamicLiveActivityTypesSwift;
8
+ exports.generateDynamicLiveActivitiesSwift = generateDynamicLiveActivitiesSwift;
9
+ const dedent_1 = __importDefault(require("dedent"));
10
+ const expo_plugin_1 = require("@use-voltra/expo-plugin");
11
+ const swift_utils_1 = require("../files/swift-utils");
12
+ function generateDynamicLiveActivityWidgetInstances(liveActivities) {
13
+ return sortedDefinitions(liveActivities)
14
+ .map((liveActivity) => `VoltraDynamicLiveActivity_${(0, expo_plugin_1.getDynamicLiveActivityAttributesType)(liveActivity.id)}()`)
15
+ .join('\n ');
16
+ }
17
+ /** Generates the Dynamic Live Activity types shared by the app and extension targets. */
18
+ function generateDynamicLiveActivityTypesSwift(liveActivities) {
19
+ const definitions = sortedDefinitions(liveActivities);
20
+ const typeDefinitions = definitions.map(generateDynamicLiveActivitySwift).map(normalizeIndent).join('\n\n');
21
+ const header = (0, dedent_1.default) `
22
+ //
23
+ // VoltraDynamicLiveActivityTypes.swift
24
+ //
25
+ // Auto-generated by Voltra config plugin. Do not edit.
26
+ //
27
+
28
+ import ActivityKit
29
+ import Foundation
30
+
31
+ import VoltraRuntime
32
+
33
+ @objc(VoltraGeneratedDynamicLiveActivityRegistration)
34
+ public final class VoltraGeneratedDynamicLiveActivityRegistration: NSObject {
35
+ @objc public static func registerDefinitions() {
36
+ ${definitions
37
+ .map((liveActivity) => ` VoltraDynamicLiveActivityRegistry.shared.register(${(0, expo_plugin_1.getDynamicLiveActivityAttributesType)(liveActivity.id)}.self)`)
38
+ .join('\n')}
39
+ }
40
+ }
41
+
42
+ `;
43
+ return [header.trim(), typeDefinitions.trim()].filter(Boolean).join('\n\n');
44
+ }
45
+ /** Generates extension-only ActivityConfiguration declarations for Dynamic Live Activities. */
46
+ function generateDynamicLiveActivitiesSwift(liveActivities) {
47
+ const configurations = sortedDefinitions(liveActivities)
48
+ .map((liveActivity) => {
49
+ const attributesType = (0, expo_plugin_1.getDynamicLiveActivityAttributesType)(liveActivity.id);
50
+ const definitionId = (0, swift_utils_1.escapeForSwiftStringLiteral)(liveActivity.id);
51
+ return (0, dedent_1.default) `
52
+ public struct VoltraDynamicLiveActivity_${attributesType}: Widget {
53
+ public init() {}
54
+
55
+ public var body: some WidgetConfiguration {
56
+ if #available(iOS 18.0, *) {
57
+ return adaptiveConfig()
58
+ } else {
59
+ return defaultConfig()
60
+ }
61
+ }
62
+
63
+ @available(iOS 18.0, *)
64
+ private func adaptiveConfig() -> some WidgetConfiguration {
65
+ ActivityConfiguration(for: ${attributesType}.self) { context in
66
+ VoltraDynamicLiveActivityRenderer.lockScreen(definitionId: "${definitionId}", context: context)
67
+ } dynamicIsland: { context in
68
+ VoltraDynamicLiveActivityRenderer.dynamicIsland(definitionId: "${definitionId}", context: context)
69
+ }
70
+ .supplementalActivityFamilies([.small, .medium])
71
+ }
72
+
73
+ private func defaultConfig() -> some WidgetConfiguration {
74
+ ActivityConfiguration(for: ${attributesType}.self) { context in
75
+ VoltraDynamicLiveActivityRenderer.lockScreen(definitionId: "${definitionId}", context: context)
76
+ } dynamicIsland: { context in
77
+ VoltraDynamicLiveActivityRenderer.dynamicIsland(definitionId: "${definitionId}", context: context)
78
+ }
79
+ }
80
+ }
81
+ `;
82
+ })
83
+ .map(normalizeIndent)
84
+ .join('\n\n');
85
+ const header = (0, dedent_1.default) `
86
+ //
87
+ // VoltraDynamicLiveActivities.swift
88
+ //
89
+ // Auto-generated by Voltra config plugin. Do not edit.
90
+ //
91
+
92
+ import ActivityKit
93
+ import SwiftUI
94
+ import WidgetKit
95
+ import VoltraRuntime
96
+
97
+ `;
98
+ return [header.trim(), configurations.trim()].filter(Boolean).join('\n\n');
99
+ }
100
+ function generateDynamicLiveActivitySwift(liveActivity) {
101
+ const attributesType = (0, expo_plugin_1.getDynamicLiveActivityAttributesType)(liveActivity.id);
102
+ const definitionId = (0, swift_utils_1.escapeForSwiftStringLiteral)(liveActivity.id);
103
+ return (0, dedent_1.default) `
104
+ public struct ${attributesType}: ActivityAttributes {
105
+ public typealias ContentState = VoltraDynamicLiveActivityContentState
106
+
107
+ public let name: String
108
+ public let deepLinkUrl: String?
109
+
110
+ public init(name: String, deepLinkUrl: String?) {
111
+ self.name = name
112
+ self.deepLinkUrl = deepLinkUrl
113
+ }
114
+ }
115
+
116
+ extension ${attributesType}: VoltraDynamicLiveActivityDefinition {
117
+ public static let definitionId = "${definitionId}"
118
+ }
119
+
120
+ `;
121
+ }
122
+ function sortedDefinitions(liveActivities) {
123
+ return [...liveActivities].sort((left, right) => left.id.localeCompare(right.id));
124
+ }
125
+ function normalizeIndent(source) {
126
+ const lines = source.trim().split('\n');
127
+ const indent = Math.min(...lines.filter(Boolean).map((line) => line.match(/^\s*/)?.[0].length ?? 0));
128
+ return lines.map((line) => line.slice(indent)).join('\n');
129
+ }
130
+ //# sourceMappingURL=swift.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swift.js","sourceRoot":"","sources":["../../../../src/ios-widget/dynamic-live-activity/swift.ts"],"names":[],"mappings":"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"}
@@ -55,7 +55,7 @@ const swift_1 = require("./swift");
55
55
  * This should run before configureXcodeProject so the files exist when Xcode project is configured.
56
56
  */
57
57
  const generateWidgetExtensionFiles = (config, props) => {
58
- const { targetName, widgets, groupIdentifier, keychainGroup, version, buildNumber } = props;
58
+ const { targetName, widgets, liveActivities, groupIdentifier, keychainGroup, version, buildNumber, voltraVersion } = props;
59
59
  return (0, config_plugins_1.withDangerousMod)(config, [
60
60
  'ios',
61
61
  async (config) => {
@@ -69,7 +69,7 @@ const generateWidgetExtensionFiles = (config, props) => {
69
69
  fs.mkdirSync(targetPath, { recursive: true });
70
70
  }
71
71
  // Generate Info.plist
72
- (0, infoPlist_1.generateInfoPlist)(targetPath, targetName, version, buildNumber);
72
+ (0, infoPlist_1.generateInfoPlist)(targetPath, targetName, version, buildNumber, voltraVersion);
73
73
  // Generate Assets.xcassets and copy user images
74
74
  (0, assets_1.generateAssets)({ targetPath });
75
75
  // Generate Swift files (widget bundle, initial states)
@@ -77,12 +77,19 @@ const generateWidgetExtensionFiles = (config, props) => {
77
77
  targetPath,
78
78
  projectRoot,
79
79
  widgets,
80
+ liveActivities,
80
81
  });
81
82
  // Write the iOS-owned Dynamic Widgets manifest for Metro to consume later.
82
83
  (0, manifest_1.generateIOSDynamicWidgetsManifest)({
83
84
  projectRoot,
84
85
  widgets,
85
86
  });
87
+ // Dynamic Live Activities have their own Metro manifest so their IDs may overlap with
88
+ // Dynamic Widgets and stale declarations never leak into a later prebuild.
89
+ (0, manifest_1.generateIOSDynamicLiveActivitiesManifest)({
90
+ projectRoot,
91
+ liveActivities,
92
+ });
86
93
  // Generate entitlements file (may be empty if no groupIdentifier or keychainGroup)
87
94
  (0, entitlements_1.generateEntitlements)({
88
95
  targetPath,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ios-widget/files/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAAqE;AACrE,uCAAwB;AACxB,2CAA4B;AAG5B,qCAAyC;AACzC,iDAAqD;AACrD,2CAA+C;AAC/C,yCAA8D;AAC9D,mCAA4C;AAW5C;;;;;;;;;;;GAWG;AACI,MAAM,4BAA4B,GAAoD,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;IAC7G,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;IAE3F,OAAO,IAAA,iCAAgB,EAAC,MAAM,EAAE;QAC9B,KAAK;QACL,KAAK,EAAE,MAAM,EAAE,EAAE;YACf,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;gBACjC,OAAO,MAAM,CAAA;YACf,CAAC;YAED,MAAM,EAAE,mBAAmB,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,UAAU,CAAA;YAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAA;YAE7D,iCAAiC;YACjC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAC/C,CAAC;YAED,sBAAsB;YACtB,IAAA,6BAAiB,EAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAAA;YAE/D,gDAAgD;YAChD,IAAA,uBAAc,EAAC,EAAE,UAAU,EAAE,CAAC,CAAA;YAE9B,uDAAuD;YACvD,MAAM,IAAA,0BAAkB,EAAC;gBACvB,UAAU;gBACV,WAAW;gBACX,OAAO;aACR,CAAC,CAAA;YAEF,2EAA2E;YAC3E,IAAA,4CAAiC,EAAC;gBAChC,WAAW;gBACX,OAAO;aACR,CAAC,CAAA;YAEF,mFAAmF;YACnF,IAAA,mCAAoB,EAAC;gBACnB,UAAU;gBACV,UAAU;gBACV,eAAe;gBACf,aAAa;aACd,CAAC,CAAA;YAEF,OAAO,MAAM,CAAA;QACf,CAAC;KACF,CAAC,CAAA;AACJ,CAAC,CAAA;AAhDY,QAAA,4BAA4B,gCAgDxC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ios-widget/files/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAAqE;AACrE,uCAAwB;AACxB,2CAA4B;AAG5B,qCAAyC;AACzC,iDAAqD;AACrD,2CAA+C;AAC/C,yCAAwG;AACxG,mCAA4C;AAa5C;;;;;;;;;;;GAWG;AACI,MAAM,4BAA4B,GAAoD,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;IAC7G,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,GAChH,KAAK,CAAA;IAEP,OAAO,IAAA,iCAAgB,EAAC,MAAM,EAAE;QAC9B,KAAK;QACL,KAAK,EAAE,MAAM,EAAE,EAAE;YACf,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;gBACjC,OAAO,MAAM,CAAA;YACf,CAAC;YAED,MAAM,EAAE,mBAAmB,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,UAAU,CAAA;YAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAA;YAE7D,iCAAiC;YACjC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAC/C,CAAC;YAED,sBAAsB;YACtB,IAAA,6BAAiB,EAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,CAAA;YAE9E,gDAAgD;YAChD,IAAA,uBAAc,EAAC,EAAE,UAAU,EAAE,CAAC,CAAA;YAE9B,uDAAuD;YACvD,MAAM,IAAA,0BAAkB,EAAC;gBACvB,UAAU;gBACV,WAAW;gBACX,OAAO;gBACP,cAAc;aACf,CAAC,CAAA;YAEF,2EAA2E;YAC3E,IAAA,4CAAiC,EAAC;gBAChC,WAAW;gBACX,OAAO;aACR,CAAC,CAAA;YAEF,sFAAsF;YACtF,2EAA2E;YAC3E,IAAA,mDAAwC,EAAC;gBACvC,WAAW;gBACX,cAAc;aACf,CAAC,CAAA;YAEF,mFAAmF;YACnF,IAAA,mCAAoB,EAAC;gBACnB,UAAU;gBACV,UAAU;gBACV,eAAe;gBACf,aAAa;aACd,CAAC,CAAA;YAEF,OAAO,MAAM,CAAA;QACf,CAAC;KACF,CAAC,CAAA;AACJ,CAAC,CAAA;AAzDY,QAAA,4BAA4B,gCAyDxC"}
@@ -43,7 +43,7 @@ const expo_plugin_1 = require("@use-voltra/expo-plugin");
43
43
  * This includes version information and the required WidgetKit extension point.
44
44
  * Version keys are written directly to the plist following the Expo pattern.
45
45
  */
46
- function generateInfoPlistContent(targetName, version, buildNumber) {
46
+ function generateInfoPlistContent(targetName, version, buildNumber, voltraVersion) {
47
47
  return `<?xml version="1.0" encoding="UTF-8"?>
48
48
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
49
49
  <plist version="1.0">
@@ -66,6 +66,8 @@ function generateInfoPlistContent(targetName, version, buildNumber) {
66
66
  <string>${version}</string>
67
67
  <key>CFBundleVersion</key>
68
68
  <string>${buildNumber}</string>
69
+ <key>Voltra_Version</key>
70
+ <string>${voltraVersion}</string>
69
71
  <key>NSExtension</key>
70
72
  <dict>
71
73
  <key>NSExtensionPointIdentifier</key>
@@ -82,10 +84,11 @@ function generateInfoPlistContent(targetName, version, buildNumber) {
82
84
  * @param targetName - The widget extension target name (used for CFBundleDisplayName)
83
85
  * @param version - The app version (CFBundleShortVersionString)
84
86
  * @param buildNumber - The build number (CFBundleVersion)
87
+ * @param voltraVersion - The installed @use-voltra/ios-client package version
85
88
  */
86
- function generateInfoPlist(targetPath, targetName, version, buildNumber) {
89
+ function generateInfoPlist(targetPath, targetName, version, buildNumber, voltraVersion) {
87
90
  const infoPlistPath = path.join(targetPath, 'Info.plist');
88
- fs.writeFileSync(infoPlistPath, generateInfoPlistContent(targetName, version, buildNumber));
91
+ fs.writeFileSync(infoPlistPath, generateInfoPlistContent(targetName, version, buildNumber, voltraVersion));
89
92
  expo_plugin_1.logger.info('Generated Info.plist');
90
93
  }
91
94
  //# sourceMappingURL=infoPlist.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"infoPlist.js","sourceRoot":"","sources":["../../../../src/ios-widget/files/infoPlist.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDA,8CAIC;AAxDD,uCAAwB;AACxB,2CAA4B;AAE5B,yDAAgD;AAEhD;;;;;GAKG;AACH,SAAS,wBAAwB,CAAC,UAAkB,EAAE,OAAe,EAAE,WAAmB;IACxF,OAAO;;;;;;;WAOE,UAAU;;;;;;;;;;;;WAYV,OAAO;;WAEP,WAAW;;;;;;;;CAQrB,CAAA;AACD,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,iBAAiB,CAAC,UAAkB,EAAE,UAAkB,EAAE,OAAe,EAAE,WAAmB;IAC5G,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;IACzD,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,wBAAwB,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAA;IAC3F,oBAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;AACrC,CAAC"}
1
+ {"version":3,"file":"infoPlist.js","sourceRoot":"","sources":["../../../../src/ios-widget/files/infoPlist.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4DA,8CAUC;AAtED,uCAAwB;AACxB,2CAA4B;AAE5B,yDAAgD;AAEhD;;;;;GAKG;AACH,SAAS,wBAAwB,CAC/B,UAAkB,EAClB,OAAe,EACf,WAAmB,EACnB,aAAqB;IAErB,OAAO;;;;;;;WAOE,UAAU;;;;;;;;;;;;WAYV,OAAO;;WAEP,WAAW;;WAEX,aAAa;;;;;;;;CAQvB,CAAA;AACD,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,iBAAiB,CAC/B,UAAkB,EAClB,UAAkB,EAClB,OAAe,EACf,WAAmB,EACnB,aAAqB;IAErB,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;IACzD,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,wBAAwB,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,CAAA;IAC1G,oBAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;AACrC,CAAC"}
@@ -34,11 +34,14 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.createIOSDynamicWidgetsManifest = createIOSDynamicWidgetsManifest;
37
+ exports.createIOSDynamicLiveActivitiesManifest = createIOSDynamicLiveActivitiesManifest;
37
38
  exports.generateIOSDynamicWidgetsManifest = generateIOSDynamicWidgetsManifest;
39
+ exports.generateIOSDynamicLiveActivitiesManifest = generateIOSDynamicLiveActivitiesManifest;
38
40
  const fs = __importStar(require("fs"));
39
41
  const path = __importStar(require("path"));
40
42
  const expo_plugin_1 = require("@use-voltra/expo-plugin");
41
43
  const MANIFEST_PATH = path.join('.voltra', 'manifest.ios.json');
44
+ const LIVE_ACTIVITIES_MANIFEST_PATH = path.join('.voltra', 'manifest.ios.live-activities.json');
42
45
  function createIOSDynamicWidgetsManifest(projectRoot, widgets) {
43
46
  const manifestWidgets = [];
44
47
  for (const widget of widgets) {
@@ -56,6 +59,18 @@ function createIOSDynamicWidgetsManifest(projectRoot, widgets) {
56
59
  widgets: manifestWidgets,
57
60
  };
58
61
  }
62
+ function createIOSDynamicLiveActivitiesManifest(projectRoot, liveActivities) {
63
+ return {
64
+ version: 1,
65
+ platform: 'ios',
66
+ liveActivities: [...liveActivities]
67
+ .sort((left, right) => left.id.localeCompare(right.id))
68
+ .map((liveActivity) => ({
69
+ id: liveActivity.id,
70
+ entry: (0, expo_plugin_1.validateWidgetEntry)(liveActivity.entry, liveActivity.id, projectRoot),
71
+ })),
72
+ };
73
+ }
59
74
  function generateIOSDynamicWidgetsManifest(options) {
60
75
  const { projectRoot, widgets } = options;
61
76
  const manifestPath = path.join(projectRoot, MANIFEST_PATH);
@@ -64,4 +79,13 @@ function generateIOSDynamicWidgetsManifest(options) {
64
79
  fs.writeFileSync(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`);
65
80
  expo_plugin_1.logger.info(`Generated ${MANIFEST_PATH}`);
66
81
  }
82
+ /** Writes the dedicated Dynamic Live Activity manifest on every prebuild, including when empty. */
83
+ function generateIOSDynamicLiveActivitiesManifest(options) {
84
+ const { projectRoot, liveActivities } = options;
85
+ const manifestPath = path.join(projectRoot, LIVE_ACTIVITIES_MANIFEST_PATH);
86
+ const manifest = createIOSDynamicLiveActivitiesManifest(projectRoot, liveActivities ?? []);
87
+ fs.mkdirSync(path.dirname(manifestPath), { recursive: true });
88
+ fs.writeFileSync(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`);
89
+ expo_plugin_1.logger.info(`Generated ${LIVE_ACTIVITIES_MANIFEST_PATH}`);
90
+ }
67
91
  //# sourceMappingURL=manifest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../../src/ios-widget/files/manifest.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,0EAsBC;AAED,8EAQC;AA9CD,uCAAwB;AACxB,2CAA4B;AAE5B,yDAAiG;AAIjG,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAA;AAO/D,SAAgB,+BAA+B,CAC7C,WAAmB,EACnB,OAA0B;IAE1B,MAAM,eAAe,GAAqC,EAAE,CAAA;IAE5D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,SAAQ;QACV,CAAC;QAED,eAAe,CAAC,IAAI,CAAC;YACnB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,KAAK,EAAE,IAAA,iCAAmB,EAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,WAAW,CAAC;SACjE,CAAC,CAAA;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,eAAe;KACzB,CAAA;AACH,CAAC;AAED,SAAgB,iCAAiC,CAAC,OAAiD;IACjG,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;IACxC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAA;IAC1D,MAAM,QAAQ,GAAG,+BAA+B,CAAC,WAAW,EAAE,OAAO,IAAI,EAAE,CAAC,CAAA;IAE5E,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC7D,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAA;IACxE,oBAAM,CAAC,IAAI,CAAC,aAAa,aAAa,EAAE,CAAC,CAAA;AAC3C,CAAC"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../../src/ios-widget/files/manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.escapeForSwiftStringLiteral = escapeForSwiftStringLiteral;
4
+ function escapeForSwiftStringLiteral(value) {
5
+ return value.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n').replace(/\r/g, '\\r');
6
+ }
7
+ //# sourceMappingURL=swift-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swift-utils.js","sourceRoot":"","sources":["../../../../src/ios-widget/files/swift-utils.ts"],"names":[],"mappings":";;AAAA,kEAEC;AAFD,SAAgB,2BAA2B,CAAC,KAAa;IACvD,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AACtG,CAAC"}