@legendapp/spark 0.0.1-next.2 → 0.0.1-next.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 (399) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +10 -4
  3. package/ai-codex.ts +1 -0
  4. package/ai.ts +1 -0
  5. package/app-documents.ts +1 -0
  6. package/config-plugin.d.cts +2 -0
  7. package/contracts.ts +2 -0
  8. package/diagnostics.ts +1 -0
  9. package/expo-config.d.cts +1 -0
  10. package/metro.cjs +4 -1
  11. package/metro.d.cts +12 -0
  12. package/native.cjs +3 -1
  13. package/native.d.cts +6 -0
  14. package/package.json +82 -14
  15. package/schema.json +276 -58
  16. package/settings-observable.ts +1 -0
  17. package/settings-window.ts +1 -0
  18. package/shortcuts-commands.ts +1 -0
  19. package/shortcuts-keyboard.ts +3 -0
  20. package/ui-classnames.ts +1 -0
  21. package/ui-glass.ts +1 -0
  22. package/ui-search.ts +1 -0
  23. package/ui-sidebar.ts +1 -0
  24. package/ui-split-view.ts +1 -0
  25. package/ui-symbol.ts +1 -0
  26. package/vendor/node_modules/@legendapp/spark-ai/package.json +19 -0
  27. package/vendor/node_modules/@legendapp/spark-ai/src/availability.ts +17 -0
  28. package/vendor/node_modules/@legendapp/spark-ai/src/index.ts +15 -0
  29. package/vendor/node_modules/@legendapp/spark-ai/src/invocations.ts +34 -0
  30. package/vendor/node_modules/@legendapp/spark-ai/src/output.ts +62 -0
  31. package/vendor/node_modules/@legendapp/spark-ai/src/run.ts +12 -0
  32. package/vendor/node_modules/@legendapp/spark-ai/src/types.ts +16 -0
  33. package/vendor/node_modules/@legendapp/spark-audio/macos/RNSparkAudio.h +2 -1
  34. package/vendor/node_modules/@legendapp/spark-audio/macos/RNSparkAudio.mm +126 -24
  35. package/vendor/node_modules/@legendapp/spark-audio/package.json +5 -2
  36. package/vendor/node_modules/@legendapp/spark-audio/src/NativeSparkAudio.ts +5 -1
  37. package/vendor/node_modules/@legendapp/spark-audio/src/desktop.ts +36 -32
  38. package/vendor/node_modules/@legendapp/spark-audio/src/events.ts +11 -0
  39. package/vendor/node_modules/@legendapp/spark-audio/src/hooks.ts +65 -0
  40. package/vendor/node_modules/@legendapp/spark-audio/src/index.web.ts +92 -33
  41. package/vendor/node_modules/@legendapp/spark-audio/src/media-session-unavailable.ts +6 -4
  42. package/vendor/node_modules/@legendapp/spark-audio/src/media-session.ts +52 -19
  43. package/vendor/node_modules/@legendapp/spark-audio/src/media-session.web.ts +18 -10
  44. package/vendor/node_modules/@legendapp/spark-audio/src/media-types.ts +40 -13
  45. package/vendor/node_modules/@legendapp/spark-audio/src/mobile.ts +40 -32
  46. package/vendor/node_modules/@legendapp/spark-audio/src/player.ts +97 -0
  47. package/vendor/node_modules/@legendapp/spark-audio/src/status-listeners.ts +21 -15
  48. package/vendor/node_modules/@legendapp/spark-audio/src/types.ts +9 -4
  49. package/vendor/node_modules/@legendapp/spark-audio/windows/SparkAudio/SparkAudio.h +67 -20
  50. package/vendor/node_modules/@legendapp/spark-auth-session/package.json +4 -3
  51. package/vendor/node_modules/@legendapp/spark-auth-session/src/core.ts +60 -42
  52. package/vendor/node_modules/@legendapp/spark-auth-session/src/index.ts +28 -12
  53. package/vendor/node_modules/@legendapp/spark-auth-session/src/mobile.ts +97 -41
  54. package/vendor/node_modules/@legendapp/spark-auth-session/src/types.ts +20 -9
  55. package/vendor/node_modules/@legendapp/spark-cli/dist/add-desktop.js +50 -7
  56. package/vendor/node_modules/@legendapp/spark-cli/dist/build-mode.js +1 -1
  57. package/vendor/node_modules/@legendapp/spark-cli/dist/build.js +83 -48
  58. package/vendor/node_modules/@legendapp/spark-cli/dist/cli-arguments.js +60 -0
  59. package/vendor/node_modules/@legendapp/spark-cli/dist/commands.js +7 -2
  60. package/vendor/node_modules/@legendapp/spark-cli/dist/create.js +31 -5
  61. package/vendor/node_modules/@legendapp/spark-cli/dist/credentials.js +69 -23
  62. package/vendor/node_modules/@legendapp/spark-cli/dist/dev-command.js +12 -3
  63. package/vendor/node_modules/@legendapp/spark-cli/dist/dev.js +12 -9
  64. package/vendor/node_modules/@legendapp/spark-cli/dist/examples.js +1 -1
  65. package/vendor/node_modules/@legendapp/spark-cli/dist/expo-dev-patch.cjs +4 -2
  66. package/vendor/node_modules/@legendapp/spark-cli/dist/expo-metro.cjs +1 -1
  67. package/vendor/node_modules/@legendapp/spark-cli/dist/expo-node.js +3 -3
  68. package/vendor/node_modules/@legendapp/spark-cli/dist/index.js +10 -38
  69. package/vendor/node_modules/@legendapp/spark-cli/dist/local.js +1 -1
  70. package/vendor/node_modules/@legendapp/spark-cli/dist/metro.cjs +26 -5
  71. package/vendor/node_modules/@legendapp/spark-cli/dist/native-metadata.js +26 -0
  72. package/vendor/node_modules/@legendapp/spark-cli/dist/native-patch-preflight.js +84 -0
  73. package/vendor/node_modules/@legendapp/spark-cli/dist/native-preparation.js +88 -0
  74. package/vendor/node_modules/@legendapp/spark-cli/dist/notary-profiles.js +75 -0
  75. package/vendor/node_modules/@legendapp/spark-cli/dist/package.js +4 -2
  76. package/vendor/node_modules/@legendapp/spark-cli/dist/platform.js +16 -2
  77. package/vendor/node_modules/@legendapp/spark-cli/dist/project.js +66 -13
  78. package/vendor/node_modules/@legendapp/spark-cli/dist/release.js +84 -4
  79. package/vendor/node_modules/@legendapp/spark-cli/dist/release.json +23 -18
  80. package/vendor/node_modules/@legendapp/spark-cli/dist/runner-install.js +145 -31
  81. package/vendor/node_modules/@legendapp/spark-cli/dist/signing.js +4 -3
  82. package/vendor/node_modules/@legendapp/spark-cli/dist/updates.js +41 -4
  83. package/vendor/node_modules/@legendapp/spark-cli/dist/windows.js +4 -1
  84. package/vendor/node_modules/@legendapp/spark-cli/package.json +7 -6
  85. package/vendor/node_modules/@legendapp/spark-cli/templates/blank-typescript/App.tsx +6 -12
  86. package/vendor/node_modules/@legendapp/spark-cli/templates/blank-typescript/desktop.config.json +5 -3
  87. package/vendor/node_modules/@legendapp/spark-cli/templates/blank-typescript/package.json +11 -9
  88. package/vendor/node_modules/@legendapp/spark-cli/templates/diff-lite/Git.macos.tsx +2 -2
  89. package/vendor/node_modules/@legendapp/spark-cli/templates/document-editor/Integration.macos.tsx +23 -21
  90. package/vendor/node_modules/@legendapp/spark-cli/templates/document-editor/Integration.windows.tsx +23 -21
  91. package/vendor/node_modules/@legendapp/spark-cli/templates/document-editor/io.desktop.ts +11 -8
  92. package/vendor/node_modules/@legendapp/spark-cli/templates/document-editor/io.macos.ts +3 -3
  93. package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/Lifecycle.desktop.tsx +8 -14
  94. package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/OpenFiles.desktop.tsx +5 -10
  95. package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/io.desktop.ts +11 -8
  96. package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/io.macos.ts +3 -3
  97. package/vendor/node_modules/@legendapp/spark-cli/templates/music-lite/assets.desktop.ts +2 -2
  98. package/vendor/node_modules/@legendapp/spark-cli/templates/notes-lite/Activation.desktop.tsx +2 -2
  99. package/vendor/node_modules/@legendapp/spark-cli/templates/notes-lite/Desktop.desktop.ts +37 -15
  100. package/vendor/node_modules/@legendapp/spark-cli/templates/notes-lite/session.ts +5 -6
  101. package/vendor/node_modules/@legendapp/spark-cli/templates/notes-lite/window-session.ts +5 -4
  102. package/vendor/node_modules/@legendapp/spark-cli/templates/universal/desktop.config.json +5 -3
  103. package/vendor/node_modules/@legendapp/spark-cli/templates/universal/metro.config.js +1 -1
  104. package/vendor/node_modules/@legendapp/spark-cli/templates/universal/package.json +13 -11
  105. package/vendor/node_modules/@legendapp/spark-cli/templates/universal/react-native.config.js +1 -1
  106. package/vendor/node_modules/@legendapp/spark-cli/templates/windows/package.json +13 -11
  107. package/vendor/node_modules/@legendapp/spark-cli/templates/windows/react-native.config.js +1 -1
  108. package/vendor/node_modules/@legendapp/spark-clipboard/macos/RNDesktopClipboard.mm +10 -16
  109. package/vendor/node_modules/@legendapp/spark-clipboard/package.json +2 -2
  110. package/vendor/node_modules/@legendapp/spark-clipboard/src/NativeDesktopClipboard.ts +1 -1
  111. package/vendor/node_modules/@legendapp/spark-clipboard/src/desktop.ts +55 -31
  112. package/vendor/node_modules/@legendapp/spark-clipboard/src/expo.ts +21 -11
  113. package/vendor/node_modules/@legendapp/spark-clipboard/src/options.ts +8 -0
  114. package/vendor/node_modules/@legendapp/spark-clipboard/src/types.ts +10 -0
  115. package/vendor/node_modules/@legendapp/spark-clipboard/windows/SparkClipboard/SparkClipboard.h +38 -15
  116. package/vendor/node_modules/@legendapp/spark-clipboard/windows/SparkClipboard/SparkClipboard.vcxproj +2 -0
  117. package/vendor/node_modules/@legendapp/spark-codex/RNCodex.podspec +22 -0
  118. package/vendor/node_modules/@legendapp/spark-codex/cpp/HybridCodexAppServer.hpp +23 -0
  119. package/vendor/node_modules/@legendapp/spark-codex/cpp/HybridCodexAppServer.mm +1529 -0
  120. package/vendor/node_modules/@legendapp/spark-codex/nitro.json +21 -0
  121. package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/.gitattributes +1 -0
  122. package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/ios/RNCodex+autolinking.rb +62 -0
  123. package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/ios/RNCodex-Swift-Cxx-Bridge.cpp +17 -0
  124. package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/ios/RNCodex-Swift-Cxx-Bridge.hpp +27 -0
  125. package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/ios/RNCodex-Swift-Cxx-Umbrella.hpp +38 -0
  126. package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/ios/RNCodexAutolinking.mm +35 -0
  127. package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/ios/RNCodexAutolinking.swift +16 -0
  128. package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/shared/c++/CodexAvailability.hpp +95 -0
  129. package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/shared/c++/CodexRunResult.hpp +99 -0
  130. package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/shared/c++/HybridCodexAppServerSpec.cpp +24 -0
  131. package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/shared/c++/HybridCodexAppServerSpec.hpp +71 -0
  132. package/vendor/node_modules/@legendapp/spark-codex/package.json +35 -0
  133. package/vendor/node_modules/@legendapp/spark-codex/react-native.config.js +11 -0
  134. package/vendor/node_modules/@legendapp/spark-codex/src/Codex.nitro.ts +30 -0
  135. package/vendor/node_modules/@legendapp/spark-codex/src/index.ts +65 -0
  136. package/vendor/node_modules/@legendapp/spark-codex/src/native.ts +6 -0
  137. package/vendor/node_modules/@legendapp/spark-commands/package.json +21 -0
  138. package/vendor/node_modules/@legendapp/spark-commands/src/bindings.ts +90 -0
  139. package/vendor/node_modules/@legendapp/spark-commands/src/index.tsx +400 -0
  140. package/vendor/node_modules/@legendapp/spark-commands/src/router.ts +138 -0
  141. package/vendor/node_modules/@legendapp/spark-commands/src/storage.ts +20 -0
  142. package/vendor/node_modules/@legendapp/spark-context-menu/macos/RNContextMenu.mm +7 -8
  143. package/vendor/node_modules/@legendapp/spark-context-menu/package.json +4 -3
  144. package/vendor/node_modules/@legendapp/spark-context-menu/src/NativeContextMenu.ts +1 -1
  145. package/vendor/node_modules/@legendapp/spark-context-menu/src/index.ts +26 -26
  146. package/vendor/node_modules/@legendapp/spark-context-menu/windows/SparkContextMenu/SparkContextMenu.h +3 -2
  147. package/vendor/node_modules/@legendapp/spark-desktop-app/RNDesktopApp.podspec +2 -1
  148. package/vendor/node_modules/@legendapp/spark-desktop-app/cpp/SparkBinaryJSI.hpp +89 -0
  149. package/vendor/node_modules/@legendapp/spark-desktop-app/cpp/SparkBinaryWindows.hpp +22 -0
  150. package/vendor/node_modules/@legendapp/spark-desktop-app/macos/RNDesktopApp.mm +13 -7
  151. package/vendor/node_modules/@legendapp/spark-desktop-app/macos/SparkBinaryJSI.h +48 -0
  152. package/vendor/node_modules/@legendapp/spark-desktop-app/macos/SparkDesktop.h +4 -0
  153. package/vendor/node_modules/@legendapp/spark-desktop-app/macos/SparkDesktop.mm +33 -33
  154. package/vendor/node_modules/@legendapp/spark-desktop-app/macos/SparkDesktopError.h +20 -0
  155. package/vendor/node_modules/@legendapp/spark-desktop-app/macos/SparkLifecycle.h +26 -0
  156. package/vendor/node_modules/@legendapp/spark-desktop-app/macos/SparkLifecycle.mm +49 -0
  157. package/vendor/node_modules/@legendapp/spark-desktop-app/macos/SparkQuitCoordinator.h +9 -0
  158. package/vendor/node_modules/@legendapp/spark-desktop-app/macos/SparkQuitCoordinator.mm +70 -0
  159. package/vendor/node_modules/@legendapp/spark-desktop-app/macos/SparkWindow.mm +9 -6
  160. package/vendor/node_modules/@legendapp/spark-desktop-app/macos/recent-documents/RNRecentDocumentController.mm +55 -0
  161. package/vendor/node_modules/@legendapp/spark-desktop-app/package.json +5 -3
  162. package/vendor/node_modules/@legendapp/spark-desktop-app/src/NativeDesktopApp.ts +1 -1
  163. package/vendor/node_modules/@legendapp/spark-desktop-app/src/api.ts +86 -40
  164. package/vendor/node_modules/@legendapp/spark-desktop-app/src/contracts/accelerator.ts +40 -0
  165. package/vendor/node_modules/@legendapp/spark-desktop-app/src/contracts/index.ts +56 -0
  166. package/vendor/node_modules/@legendapp/spark-desktop-app/src/contracts/menu.ts +114 -0
  167. package/vendor/node_modules/@legendapp/spark-desktop-app/src/contracts/native-buffer.ts +22 -0
  168. package/vendor/node_modules/@legendapp/spark-desktop-app/src/contracts/path.ts +24 -0
  169. package/vendor/node_modules/@legendapp/spark-desktop-app/src/events.ts +75 -0
  170. package/vendor/node_modules/@legendapp/spark-desktop-app/src/index.ts +2 -0
  171. package/vendor/node_modules/@legendapp/spark-desktop-app/src/index.windows.ts +2 -0
  172. package/vendor/node_modules/@legendapp/spark-desktop-app/src/open-requests.ts +43 -0
  173. package/vendor/node_modules/@legendapp/spark-desktop-app/src/restoration.ts +11 -0
  174. package/vendor/node_modules/@legendapp/spark-desktop-app/src/transport.ts +10 -0
  175. package/vendor/node_modules/@legendapp/spark-desktop-config/app.plugin.cjs +10 -5
  176. package/vendor/node_modules/@legendapp/spark-desktop-config/app.plugin.d.cts +3 -0
  177. package/vendor/node_modules/@legendapp/spark-desktop-config/autolinking.cjs +35 -0
  178. package/vendor/node_modules/@legendapp/spark-desktop-config/config.cjs +16 -3
  179. package/vendor/node_modules/@legendapp/spark-desktop-config/config.d.cts +89 -9
  180. package/vendor/node_modules/@legendapp/spark-desktop-config/expo.d.cts +3 -0
  181. package/vendor/node_modules/@legendapp/spark-desktop-config/identity.cjs +3 -2
  182. package/vendor/node_modules/@legendapp/spark-desktop-config/lifecycle.cjs +20 -0
  183. package/vendor/node_modules/@legendapp/spark-desktop-config/package.json +6 -5
  184. package/vendor/node_modules/@legendapp/spark-desktop-config/schema.json +276 -58
  185. package/vendor/node_modules/@legendapp/spark-desktop-config/updates.cjs +1 -0
  186. package/vendor/node_modules/@legendapp/spark-desktop-config/validation.cjs +35 -0
  187. package/vendor/node_modules/@legendapp/spark-desktop-config/windows.plugin.cjs +2 -1
  188. package/vendor/node_modules/@legendapp/spark-desktop-host/AppDelegate.mm +129 -11
  189. package/vendor/node_modules/@legendapp/spark-desktop-host/package.json +2 -2
  190. package/vendor/node_modules/@legendapp/spark-desktop-host/windows/application.inc +277 -121
  191. package/vendor/node_modules/@legendapp/spark-desktop-links/common/AuthLoopback.h +5 -7
  192. package/vendor/node_modules/@legendapp/spark-desktop-links/macos/RNDesktopLinks.mm +10 -9
  193. package/vendor/node_modules/@legendapp/spark-desktop-links/package.json +2 -2
  194. package/vendor/node_modules/@legendapp/spark-desktop-links/src/NativeDesktopLinks.ts +1 -1
  195. package/vendor/node_modules/@legendapp/spark-desktop-links/src/api.ts +27 -33
  196. package/vendor/node_modules/@legendapp/spark-desktop-links/src/expo.ts +3 -4
  197. package/vendor/node_modules/@legendapp/spark-desktop-links/src/native.ts +9 -0
  198. package/vendor/node_modules/@legendapp/spark-desktop-links/windows/SparkLinks/SparkLinks.h +22 -22
  199. package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/RNDesktopShortcuts.podspec +1 -0
  200. package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/macos/RNDesktopShortcuts.mm +1 -1
  201. package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/macos/keyboard-manager/RNKeyboardManager.h +9 -0
  202. package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/macos/keyboard-manager/RNKeyboardManager.mm +307 -0
  203. package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/package.json +8 -5
  204. package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/src/NativeDesktopShortcuts.ts +1 -1
  205. package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/src/api.ts +39 -14
  206. package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/src/keyboard-manager/NativeKeyboardManager.ts +12 -0
  207. package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/src/keyboard-manager/codes.ts +108 -0
  208. package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/src/keyboard-manager/index.ts +99 -0
  209. package/vendor/node_modules/@legendapp/spark-desktop-windows/RNDesktopWindows.podspec +2 -0
  210. package/vendor/node_modules/@legendapp/spark-desktop-windows/macos/RNDesktopWindows.mm +229 -103
  211. package/vendor/node_modules/@legendapp/spark-desktop-windows/macos/SparkWindowGeometry.h +63 -0
  212. package/vendor/node_modules/@legendapp/spark-desktop-windows/macos/window-manager/LegendWindowRegistry.h +20 -0
  213. package/vendor/node_modules/@legendapp/spark-desktop-windows/macos/window-manager/LegendWindowRegistry.mm +27 -0
  214. package/vendor/node_modules/@legendapp/spark-desktop-windows/macos/window-manager/RNWindowManager.h +12 -0
  215. package/vendor/node_modules/@legendapp/spark-desktop-windows/macos/window-manager/RNWindowManager.mm +3130 -0
  216. package/vendor/node_modules/@legendapp/spark-desktop-windows/macos/window-manager/RNWindowManagerStartup.mm +31 -0
  217. package/vendor/node_modules/@legendapp/spark-desktop-windows/macos/window-manager/SidebarStartupFallbacks.mm +14 -0
  218. package/vendor/node_modules/@legendapp/spark-desktop-windows/package.json +10 -6
  219. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/NativeDesktopWindowManager.ts +1 -1
  220. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/api.ts +144 -70
  221. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/diagnostics.ts +17 -0
  222. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/index.ts +3 -1
  223. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/index.windows.ts +3 -1
  224. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/macos-adapter.ts +53 -0
  225. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/macos.ts +51 -0
  226. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/transport.ts +41 -0
  227. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/types.ts +140 -0
  228. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/validation.ts +162 -0
  229. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/window-manager/NativeWindowManager.ts +28 -0
  230. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/windows/WindowProvider.tsx +20 -0
  231. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/windows/createWindowsNavigator.tsx +78 -0
  232. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/windows/index.ts +6 -0
  233. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/windows/primaryWindowLifecycle.ts +34 -0
  234. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/windows/types.ts +11 -0
  235. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/windows/usePrimaryWindowLifecycle.ts +18 -0
  236. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/windows/useWindowFocusEffect.ts +17 -0
  237. package/vendor/node_modules/@legendapp/spark-documents/package.json +22 -0
  238. package/vendor/node_modules/@legendapp/spark-documents/src/controller.ts +97 -0
  239. package/vendor/node_modules/@legendapp/spark-documents/src/documentTransition.ts +13 -0
  240. package/vendor/node_modules/@legendapp/spark-documents/src/hooks.ts +139 -0
  241. package/vendor/node_modules/@legendapp/spark-documents/src/index.tsx +50 -0
  242. package/vendor/node_modules/@legendapp/spark-documents/src/reload.ts +39 -0
  243. package/vendor/node_modules/@legendapp/spark-documents/src/requests.ts +15 -0
  244. package/vendor/node_modules/@legendapp/spark-drag-drop/package.json +4 -3
  245. package/vendor/node_modules/@legendapp/spark-drag-drop/src/DesktopDragViewNativeComponent.ts +1 -1
  246. package/vendor/node_modules/@legendapp/spark-drag-drop/src/contracts.ts +73 -18
  247. package/vendor/node_modules/@legendapp/spark-drag-drop/src/index.tsx +58 -15
  248. package/vendor/node_modules/@legendapp/spark-drag-drop/windows/SparkDragDrop/SparkDragDrop.h +14 -8
  249. package/vendor/node_modules/@legendapp/spark-file-dialog/ios/RNFileDialog.mm +34 -121
  250. package/vendor/node_modules/@legendapp/spark-file-dialog/package.json +12 -5
  251. package/vendor/node_modules/@legendapp/spark-file-dialog/src/NativeFileDialog.ts +1 -5
  252. package/vendor/node_modules/@legendapp/spark-file-dialog/src/index.ts +19 -84
  253. package/vendor/node_modules/@legendapp/spark-file-dialog/src/native.ts +12 -0
  254. package/vendor/node_modules/@legendapp/spark-file-dialog/src/options.ts +34 -14
  255. package/vendor/node_modules/@legendapp/spark-file-dialog/src/types.ts +26 -0
  256. package/vendor/node_modules/@legendapp/spark-file-dialog/windows/SparkFileDialog/SparkFileDialog.h +42 -58
  257. package/vendor/node_modules/@legendapp/spark-file-system/RNDesktopFileSystem.podspec +1 -0
  258. package/vendor/node_modules/@legendapp/spark-file-system/macos/RNDesktopFileSystem.mm +32 -21
  259. package/vendor/node_modules/@legendapp/spark-file-system/macos/SparkFileMutations.h +24 -0
  260. package/vendor/node_modules/@legendapp/spark-file-system/macos/SparkFileMutations.mm +215 -0
  261. package/vendor/node_modules/@legendapp/spark-file-system/macos/file-scanner/RNFileScanner.h +9 -0
  262. package/vendor/node_modules/@legendapp/spark-file-system/macos/file-scanner/RNFileScanner.mm +82 -0
  263. package/vendor/node_modules/@legendapp/spark-file-system/macos/file-scanner/RNFileScannerCore.h +47 -0
  264. package/vendor/node_modules/@legendapp/spark-file-system/macos/file-scanner/RNFileScannerCore.mm +306 -0
  265. package/vendor/node_modules/@legendapp/spark-file-system/package.json +8 -6
  266. package/vendor/node_modules/@legendapp/spark-file-system/src/NativeDesktopFileSystem.ts +1 -1
  267. package/vendor/node_modules/@legendapp/spark-file-system/src/file-scanner/NativeFileScanner.ts +11 -0
  268. package/vendor/node_modules/@legendapp/spark-file-system/src/file-scanner/index.ts +93 -0
  269. package/vendor/node_modules/@legendapp/spark-file-system/src/handles.ts +48 -14
  270. package/vendor/node_modules/@legendapp/spark-file-system/src/index.ts +134 -45
  271. package/vendor/node_modules/@legendapp/spark-file-system/src/path.ts +1 -9
  272. package/vendor/node_modules/@legendapp/spark-file-system/windows/SparkFileSystem/SparkFileSystem.h +102 -26
  273. package/vendor/node_modules/@legendapp/spark-file-system/windows/SparkFileSystem/SparkFileSystem.vcxproj +2 -0
  274. package/vendor/node_modules/@legendapp/spark-global-shortcuts/RNDesktopGlobalShortcuts.podspec +1 -0
  275. package/vendor/node_modules/@legendapp/spark-global-shortcuts/macos/RNDesktopGlobalShortcuts.mm +7 -4
  276. package/vendor/node_modules/@legendapp/spark-global-shortcuts/package.json +4 -3
  277. package/vendor/node_modules/@legendapp/spark-global-shortcuts/src/NativeDesktopGlobalShortcuts.ts +1 -1
  278. package/vendor/node_modules/@legendapp/spark-global-shortcuts/src/index.ts +39 -10
  279. package/vendor/node_modules/@legendapp/spark-global-shortcuts/windows/SparkGlobalShortcuts/SparkGlobalShortcuts.h +5 -4
  280. package/vendor/node_modules/@legendapp/spark-message-dialog/macos/RNDesktopMessageDialog.mm +2 -2
  281. package/vendor/node_modules/@legendapp/spark-message-dialog/package.json +2 -2
  282. package/vendor/node_modules/@legendapp/spark-message-dialog/src/NativeDesktopMessageDialog.ts +1 -1
  283. package/vendor/node_modules/@legendapp/spark-message-dialog/src/index.ts +48 -11
  284. package/vendor/node_modules/@legendapp/spark-native-menu/ios/RNNativeMenu.mm +141 -609
  285. package/vendor/node_modules/@legendapp/spark-native-menu/package.json +9 -4
  286. package/vendor/node_modules/@legendapp/spark-native-menu/src/NativeMenu.ts +2 -7
  287. package/vendor/node_modules/@legendapp/spark-native-menu/src/api.ts +76 -121
  288. package/vendor/node_modules/@legendapp/spark-native-menu/src/hooks.ts +97 -0
  289. package/vendor/node_modules/@legendapp/spark-native-menu/src/windows-menus.ts +43 -37
  290. package/vendor/node_modules/@legendapp/spark-notifications/macos/RNDesktopNotifications.mm +75 -30
  291. package/vendor/node_modules/@legendapp/spark-notifications/package.json +2 -2
  292. package/vendor/node_modules/@legendapp/spark-notifications/src/NativeDesktopNotifications.ts +1 -1
  293. package/vendor/node_modules/@legendapp/spark-notifications/src/index.ts +130 -42
  294. package/vendor/node_modules/@legendapp/spark-notifications/windows/SparkNotifications/SparkNotifications.h +46 -8
  295. package/vendor/node_modules/@legendapp/spark-processes/macos/RNDesktopProcesses.mm +94 -21
  296. package/vendor/node_modules/@legendapp/spark-processes/package.json +4 -3
  297. package/vendor/node_modules/@legendapp/spark-processes/src/NativeDesktopProcesses.ts +1 -1
  298. package/vendor/node_modules/@legendapp/spark-processes/src/index.ts +124 -28
  299. package/vendor/node_modules/@legendapp/spark-processes/src/types.ts +34 -0
  300. package/vendor/node_modules/@legendapp/spark-processes/windows/SparkProcesses/SparkProcesses.h +83 -34
  301. package/vendor/node_modules/@legendapp/spark-processes/windows/SparkProcesses/SparkProcesses.vcxproj +2 -0
  302. package/vendor/node_modules/@legendapp/spark-secure-storage/macos/RNDesktopSecureStorage.mm +49 -40
  303. package/vendor/node_modules/@legendapp/spark-secure-storage/package.json +2 -2
  304. package/vendor/node_modules/@legendapp/spark-secure-storage/src/NativeDesktopSecureStorage.ts +1 -1
  305. package/vendor/node_modules/@legendapp/spark-secure-storage/src/desktop.ts +16 -14
  306. package/vendor/node_modules/@legendapp/spark-secure-storage/src/expo.ts +0 -1
  307. package/vendor/node_modules/@legendapp/spark-secure-storage/src/options.ts +3 -2
  308. package/vendor/node_modules/@legendapp/spark-secure-storage/src/unavailable.ts +6 -3
  309. package/vendor/node_modules/@legendapp/spark-settings/package.json +10 -3
  310. package/vendor/node_modules/@legendapp/spark-settings/src/fileStorage.ts +11 -0
  311. package/vendor/node_modules/@legendapp/spark-settings/src/index.ts +7 -9
  312. package/vendor/node_modules/@legendapp/spark-settings/src/storage/index.ts +142 -0
  313. package/vendor/node_modules/@legendapp/spark-settings/src/store.ts +63 -21
  314. package/vendor/node_modules/@legendapp/spark-settings-ui/package.json +20 -0
  315. package/vendor/node_modules/@legendapp/spark-settings-ui/src/index.tsx +436 -0
  316. package/vendor/node_modules/@legendapp/spark-settings-ui/src/options.ts +10 -0
  317. package/vendor/node_modules/@legendapp/spark-sqlite/package.json +3 -3
  318. package/vendor/node_modules/@legendapp/spark-sqlite/src/database.ts +182 -0
  319. package/vendor/node_modules/@legendapp/spark-sqlite/src/index.ts +19 -6
  320. package/vendor/node_modules/@legendapp/spark-sqlite/src/types.ts +22 -0
  321. package/vendor/node_modules/@legendapp/spark-system/macos/RNDesktopSystem.mm +36 -11
  322. package/vendor/node_modules/@legendapp/spark-system/package.json +2 -2
  323. package/vendor/node_modules/@legendapp/spark-system/src/NativeDesktopSystem.ts +1 -1
  324. package/vendor/node_modules/@legendapp/spark-system/src/index.ts +89 -32
  325. package/vendor/node_modules/@legendapp/spark-system/windows/SparkSystem/SparkSystem.h +8 -4
  326. package/vendor/node_modules/@legendapp/spark-tray/macos/RNDesktopTray.mm +20 -8
  327. package/vendor/node_modules/@legendapp/spark-tray/package.json +2 -2
  328. package/vendor/node_modules/@legendapp/spark-tray/src/NativeDesktopTray.ts +1 -1
  329. package/vendor/node_modules/@legendapp/spark-tray/src/index.ts +91 -34
  330. package/vendor/node_modules/@legendapp/spark-tray/windows/SparkTray/SparkTray.h +45 -15
  331. package/vendor/node_modules/@legendapp/spark-ui/macos/RNSparkButton.mm +2 -1
  332. package/vendor/node_modules/@legendapp/spark-ui/macos/RNSparkTextInput.mm +10 -2
  333. package/vendor/node_modules/@legendapp/spark-ui/macos/appkit-split-view/RNSidebarSplitViewComponent.h +15 -0
  334. package/vendor/node_modules/@legendapp/spark-ui/macos/appkit-split-view/RNSidebarSplitViewComponent.mm +1182 -0
  335. package/vendor/node_modules/@legendapp/spark-ui/macos/glass-effect-view/RNGlassEffectView.mm +72 -0
  336. package/vendor/node_modules/@legendapp/spark-ui/macos/native-select/RNNativeSegmentedControl.h +15 -0
  337. package/vendor/node_modules/@legendapp/spark-ui/macos/native-select/RNNativeSegmentedControl.mm +194 -0
  338. package/vendor/node_modules/@legendapp/spark-ui/macos/native-select/RNNativeSelect.h +15 -0
  339. package/vendor/node_modules/@legendapp/spark-ui/macos/native-select/RNNativeSelect.mm +180 -0
  340. package/vendor/node_modules/@legendapp/spark-ui/macos/sf-symbol/RNSFSymbol.h +15 -0
  341. package/vendor/node_modules/@legendapp/spark-ui/macos/sf-symbol/RNSFSymbol.mm +155 -0
  342. package/vendor/node_modules/@legendapp/spark-ui/macos/sidebar/RNSidebar.h +18 -0
  343. package/vendor/node_modules/@legendapp/spark-ui/macos/sidebar/RNSidebar.mm +645 -0
  344. package/vendor/node_modules/@legendapp/spark-ui/macos/text-input-search/RNTextInputSearch.h +15 -0
  345. package/vendor/node_modules/@legendapp/spark-ui/macos/text-input-search/RNTextInputSearch.mm +164 -0
  346. package/vendor/node_modules/@legendapp/spark-ui/package.json +16 -4
  347. package/vendor/node_modules/@legendapp/spark-ui/src/SparkSelectNativeComponent.ts +3 -1
  348. package/vendor/node_modules/@legendapp/spark-ui/src/SparkTextInputNativeComponent.ts +6 -2
  349. package/vendor/node_modules/@legendapp/spark-ui/src/appkit-split-view/SidebarSplitViewNativeComponent.ts +31 -0
  350. package/vendor/node_modules/@legendapp/spark-ui/src/appkit-split-view/index.tsx +77 -0
  351. package/vendor/node_modules/@legendapp/spark-ui/src/availability.ts +10 -0
  352. package/vendor/node_modules/@legendapp/spark-ui/src/classnames/index.ts +8 -0
  353. package/vendor/node_modules/@legendapp/spark-ui/src/control.ts +42 -0
  354. package/vendor/node_modules/@legendapp/spark-ui/src/desktop.tsx +56 -0
  355. package/vendor/node_modules/@legendapp/spark-ui/src/glass-effect-view/index.tsx +15 -0
  356. package/vendor/node_modules/@legendapp/spark-ui/src/index.android.tsx +35 -21
  357. package/vendor/node_modules/@legendapp/spark-ui/src/index.ios.tsx +55 -26
  358. package/vendor/node_modules/@legendapp/spark-ui/src/index.tsx +1 -27
  359. package/vendor/node_modules/@legendapp/spark-ui/src/index.web.tsx +45 -14
  360. package/vendor/node_modules/@legendapp/spark-ui/src/index.windows.tsx +1 -42
  361. package/vendor/node_modules/@legendapp/spark-ui/src/mobile-input.tsx +11 -0
  362. package/vendor/node_modules/@legendapp/spark-ui/src/native-select/NativeSegmentedControlNativeComponent.ts +17 -0
  363. package/vendor/node_modules/@legendapp/spark-ui/src/native-select/NativeSelectNativeComponent.ts +17 -0
  364. package/vendor/node_modules/@legendapp/spark-ui/src/select.ts +5 -3
  365. package/vendor/node_modules/@legendapp/spark-ui/src/sf-symbol/SFSymbolNativeComponent.ts +13 -0
  366. package/vendor/node_modules/@legendapp/spark-ui/src/sf-symbol/index.tsx +27 -0
  367. package/vendor/node_modules/@legendapp/spark-ui/src/sidebar/SidebarItemNativeComponent.ts +25 -0
  368. package/vendor/node_modules/@legendapp/spark-ui/src/sidebar/SidebarNativeComponent.ts +24 -0
  369. package/vendor/node_modules/@legendapp/spark-ui/src/sidebar/index.tsx +104 -0
  370. package/vendor/node_modules/@legendapp/spark-ui/src/specialized.ts +22 -0
  371. package/vendor/node_modules/@legendapp/spark-ui/src/text-input-search/TextInputSearchNativeComponent.ts +33 -0
  372. package/vendor/node_modules/@legendapp/spark-ui/src/text-input-search/index.tsx +34 -0
  373. package/vendor/node_modules/@legendapp/spark-ui/src/types.ts +30 -19
  374. package/vendor/node_modules/@legendapp/spark-ui/uniwind.ts +3 -1
  375. package/vendor/node_modules/@legendapp/spark-ui/uniwind.web.ts +3 -1
  376. package/vendor/node_modules/@legendapp/spark-ui/windows/SparkUI/SparkUI.h +16 -11
  377. package/vendor/node_modules/@legendapp/spark-updates/macos/RNDesktopUpdates.mm +21 -8
  378. package/vendor/node_modules/@legendapp/spark-updates/package.json +2 -2
  379. package/vendor/node_modules/@legendapp/spark-updates/src/NativeDesktopUpdates.ts +3 -2
  380. package/vendor/node_modules/@legendapp/spark-updates/src/index.ts +71 -15
  381. package/vendor/node_modules/@legendapp/spark-webview/package.json +2 -2
  382. package/vendor/node_modules/@legendapp/spark-webview/src/WebView.tsx +11 -0
  383. package/vendor/node_modules/@legendapp/spark-webview/src/adapter.ts +55 -0
  384. package/vendor/node_modules/@legendapp/spark-webview/src/index.ts +2 -2
  385. package/vendor/node_modules/@legendapp/spark-webview/src/types.ts +32 -0
  386. package/vendor/node_modules/@legendapp/spark-webview/src/view-props.ts +28 -0
  387. package/vendor/node_modules/@legendapp/spark-window-options/index.cjs +51 -14
  388. package/vendor/node_modules/@legendapp/spark-window-options/index.d.ts +21 -8
  389. package/vendor/node_modules/@legendapp/spark-window-options/package.json +1 -1
  390. package/windows-macos.ts +1 -0
  391. package/expo-metro.cjs +0 -1
  392. package/message-dialog.ts +0 -1
  393. package/universal.cjs +0 -1
  394. package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/src/accelerator.ts +0 -22
  395. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/windows-options.ts +0 -11
  396. package/vendor/node_modules/@legendapp/spark-file-dialog/src/index.windows.ts +0 -15
  397. package/vendor/node_modules/@legendapp/spark-global-shortcuts/src/accelerator.ts +0 -22
  398. package/vendor/node_modules/@legendapp/spark-ui/macos/RNSparkSelect.h +0 -4
  399. package/vendor/node_modules/@legendapp/spark-ui/macos/RNSparkSelect.mm +0 -53
@@ -0,0 +1,88 @@
1
+ import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, rmSync } from "node:fs";
2
+ import path from "node:path";
3
+ import { stateFile } from "./project.js";
4
+ export async function preserveMacOSPods(root, prepare) {
5
+ const native = path.join(root, "macos");
6
+ const cache = stateFile(root, "prebuild-cache/macos");
7
+ const entries = ["Pods", "Podfile.lock"];
8
+ function restore() {
9
+ for (const entry of entries) {
10
+ const saved = path.join(cache, entry);
11
+ const destination = path.join(native, entry);
12
+ if (!existsSync(saved))
13
+ continue;
14
+ if (existsSync(destination))
15
+ throw new Error(`Cannot restore CocoaPods cache: both ${saved} and ${destination} exist.`);
16
+ mkdirSync(native, { recursive: true });
17
+ renameSync(saved, destination);
18
+ }
19
+ rmSync(cache, { recursive: true, force: true });
20
+ }
21
+ // A terminated prebuild may leave the only copy of Pods in the cache.
22
+ restore();
23
+ try {
24
+ for (const entry of entries) {
25
+ const source = path.join(native, entry);
26
+ if (!existsSync(source))
27
+ continue;
28
+ mkdirSync(cache, { recursive: true });
29
+ renameSync(source, path.join(cache, entry));
30
+ }
31
+ await prepare();
32
+ }
33
+ finally {
34
+ restore();
35
+ }
36
+ }
37
+ export function preparationChanges(previous, current) {
38
+ if (!previous?.inputs)
39
+ return ["native preparation provenance missing"];
40
+ const reasons = [];
41
+ if (JSON.stringify(previous.inputs.config) !== JSON.stringify(current.inputs?.config)) {
42
+ const updatesChanged = JSON.stringify(previous.inputs.config.expo?.extra?.spark?.updates) !== JSON.stringify(current.inputs?.config.expo?.extra?.spark?.updates);
43
+ reasons.push(updatesChanged ? "native configuration changed (updater settings)" : "native configuration changed");
44
+ }
45
+ if (previous.inputs.plugin !== current.inputs?.plugin)
46
+ reasons.push("native host/config plugin changed");
47
+ const before = new Map(previous.inputs.packages.map(([name, root, contents]) => [name, { root, contents }]));
48
+ for (const [name, root, contents] of current.inputs?.packages ?? []) {
49
+ const prior = before.get(name);
50
+ if (!prior)
51
+ reasons.push(`${name} added`);
52
+ else {
53
+ if (prior.root !== root)
54
+ reasons.push(`${name} location changed`);
55
+ if (prior.contents !== contents)
56
+ reasons.push(`${name} preparation sources changed`);
57
+ }
58
+ before.delete(name);
59
+ }
60
+ for (const name of before.keys())
61
+ reasons.push(`${name} removed`);
62
+ return reasons.length ? reasons : previous.fingerprint !== current.fingerprint ? ["native preparation inputs changed"] : [];
63
+ }
64
+ export function missingNativeFrameworks(root) {
65
+ const pods = path.join(root, "macos/Pods");
66
+ const support = path.join(pods, "Target Support Files");
67
+ if (!existsSync(support))
68
+ return [support];
69
+ const missing = new Set();
70
+ for (const target of readdirSync(support)) {
71
+ const script = path.join(support, target, `${target}-xcframeworks.sh`);
72
+ if (!existsSync(script))
73
+ continue;
74
+ // CocoaPods lists only the frameworks and slices selected for this target.
75
+ for (const match of readFileSync(script, "utf8").matchAll(/^install_xcframework "([^"]+)" "[^"]+" "[^"]+" (.+)$/gm)) {
76
+ const framework = match[1].replaceAll("${PODS_ROOT}", pods).replaceAll("$(PODS_ROOT)", pods);
77
+ if (framework.includes("$"))
78
+ throw new Error(`Cannot resolve native framework input: ${framework}`);
79
+ if (!existsSync(path.join(framework, "Info.plist")))
80
+ missing.add(path.normalize(framework));
81
+ for (const slice of match[2].matchAll(/"([^"]+)"/g)) {
82
+ if (!existsSync(path.join(framework, slice[1])))
83
+ missing.add(path.join(framework, slice[1]));
84
+ }
85
+ }
86
+ }
87
+ return [...missing];
88
+ }
@@ -0,0 +1,75 @@
1
+ import { mkdirSync, writeFileSync } from "node:fs";
2
+ import path from "node:path";
3
+ import { run } from "./commands.js";
4
+ import { stateFile } from "./project.js";
5
+ // Security returns attributes only. Never request or print credential data.
6
+ const discovery = String.raw `
7
+ import Foundation
8
+ import Security
9
+ import LocalAuthentication
10
+
11
+ struct KeychainError: Error { let status: OSStatus }
12
+ func check(_ status: OSStatus) throws {
13
+ if status != errSecSuccess { throw KeychainError(status: status) }
14
+ }
15
+ func profiles(_ query: [CFString: Any]) throws -> [String] {
16
+ var result: CFTypeRef?
17
+ let status = SecItemCopyMatching(query as CFDictionary, &result)
18
+ var names: [String] = []
19
+ if status != errSecItemNotFound {
20
+ try check(status)
21
+ let prefix = "com.apple.gke.notary.tool.saved-creds."
22
+ for item in result as? [[String: Any]] ?? [] {
23
+ if let account = item[kSecAttrAccount as String] as? String, account.hasPrefix(prefix) {
24
+ let name = String(account.dropFirst(prefix.count))
25
+ if !name.isEmpty { names.append(name) }
26
+ }
27
+ }
28
+ }
29
+ return names
30
+ }
31
+
32
+ do {
33
+ let context = LAContext()
34
+ context.interactionNotAllowed = true
35
+ var query: [CFString: Any] = [
36
+ kSecClass: kSecClassGenericPassword,
37
+ kSecAttrLabel: "com.apple.gke.notary.tool",
38
+ kSecMatchLimit: kSecMatchLimitAll,
39
+ kSecReturnAttributes: true,
40
+ kSecReturnData: false,
41
+ kSecUseAuthenticationContext: context
42
+ ]
43
+ if CommandLine.arguments.count > 1 {
44
+ var keychain: SecKeychain?
45
+ try check(SecKeychainOpen(CommandLine.arguments[1], &keychain))
46
+ if let keychain { query[kSecMatchSearchList] = [keychain] }
47
+ }
48
+ var names = try profiles(query)
49
+ if CommandLine.arguments.count == 1 {
50
+ query[kSecUseDataProtectionKeychain] = true
51
+ query[kSecAttrSynchronizable] = kSecAttrSynchronizableAny
52
+ names += try profiles(query)
53
+ }
54
+ let data = try JSONSerialization.data(withJSONObject: Array(Set(names)).sorted())
55
+ print(String(decoding: data, as: UTF8.self))
56
+ } catch {
57
+ let message: String
58
+ if let error = error as? KeychainError {
59
+ message = SecCopyErrorMessageString(error.status, nil) as String? ?? "OSStatus \(error.status)"
60
+ } else { message = String(describing: error) }
61
+ FileHandle.standardError.write(Data("Cannot list notarization Keychain profiles: \(message)\n".utf8))
62
+ exit(1)
63
+ }
64
+ `;
65
+ export async function listNotaryProfiles(root, keychain, execute = run) {
66
+ const file = stateFile(root, "notary-profiles.swift");
67
+ mkdirSync(path.dirname(file), { recursive: true });
68
+ writeFileSync(file, discovery);
69
+ const output = await execute(root, ["xcrun", "swift", "-suppress-warnings", file, ...(keychain ? [keychain] : [])], { capture: true });
70
+ const profiles = JSON.parse(output);
71
+ if (!Array.isArray(profiles) || !profiles.every(profile => typeof profile === "string" && profile.length > 0)) {
72
+ throw new Error("Invalid notarization profile discovery result.");
73
+ }
74
+ return [...new Set(profiles)].sort();
75
+ }
@@ -69,16 +69,18 @@ async function packageUnlocked(root, options, deps) {
69
69
  if (config.extra?.spark?.updates && !result.runtime.modules["@legendapp/spark-updates"])
70
70
  throw new Error("Updates are configured but the module was pruned. Import @legendapp/spark/updates from the app entry.");
71
71
  const entitlements = distributionEntitlements(appEntitlements(root, result.runtime.modules));
72
+ if (!config.macos?.bundleIdentifier || !config.version)
73
+ throw new Error("Packaging requires macos.bundleIdentifier and version");
72
74
  const byPath = config.extra?.spark?.signing?.macos?.entitlementsByPath ?? {};
73
75
  const info = JSON.parse(await execute(root, ["plutil", "-convert", "json", "-o", "-", path.join(result.app, "Contents/Info.plist")], { capture: true }));
74
- const expected = { runner: options.runner, bundleId: config.macos.bundleIdentifier, version: config.version, buildVersion: info.CFBundleVersion, entitlements, byPath };
76
+ const expected = { arch: result.runtime.arch, runner: options.runner, bundleId: config.macos.bundleIdentifier, version: config.version, buildVersion: info.CFBundleVersion, entitlements, byPath };
75
77
  if (!expected.bundleId || !expected.version || !expected.buildVersion)
76
78
  throw new Error("Bundle identifier and release version metadata must be configured before packaging.");
77
79
  const inputHash = artifactHash(result.app);
78
80
  const key = digest(JSON.stringify({ recipe: 1, inputHash, identity: identity.hash, entitlements, byPath }));
79
81
  const folder = stateFile(root, `packaging/${key}`);
80
82
  const app = path.join(folder, path.basename(result.app));
81
- const safeName = `${config.slug ?? config.name}-${config.version}-arm64`.replace(/[^A-Za-z0-9._-]/g, "-");
83
+ const safeName = `${config.slug ?? config.name}-${config.version}-${result.runtime.arch}`.replace(/[^A-Za-z0-9._-]/g, "-");
82
84
  const upload = path.join(folder, `${safeName}-${key.slice(0, 16)}-notary.zip`);
83
85
  const statePath = path.join(folder, "state.json");
84
86
  mkdirSync(folder, { recursive: true });
@@ -23,12 +23,26 @@ export function windowsArchitecture(host = process.platform, machineArch = machi
23
23
  }
24
24
  return "x64";
25
25
  }
26
- export const architecture = (platform) => platform === "windows" ? windowsArchitecture() : "arm64";
26
+ export function macOSArchitecture(machineArch = machine(), env = process.env) {
27
+ const explicit = env.SPARK_MACOS_ARCH?.toLowerCase();
28
+ if (explicit !== undefined) {
29
+ if (explicit === "arm64" || explicit === "x64")
30
+ return explicit;
31
+ throw new Error("SPARK_MACOS_ARCH must be arm64 or x64.");
32
+ }
33
+ if (machineArch === "arm64" || machineArch === "aarch64")
34
+ return "arm64";
35
+ if (["x64", "x86_64"].includes(machineArch))
36
+ return "x64";
37
+ throw new Error(`Unsupported macOS architecture: ${machineArch}.`);
38
+ }
39
+ export const macOSXcodeArchitecture = (arch) => arch === "x64" ? "x86_64" : "arm64";
40
+ export const architecture = (platform) => platform === "windows" ? windowsArchitecture() : macOSArchitecture();
27
41
  export function projectPlatform(root) {
28
42
  if (!["app.json", "desktop.config.json"].some(name => existsSync(path.join(root, name))))
29
43
  return "macos";
30
44
  const platforms = readConfig(root).expo?.platforms ?? ["macos"];
31
- if (platforms.length !== 1 || !["macos", "windows"].includes(platforms[0]))
45
+ if (platforms.length !== 1 || (platforms[0] !== "macos" && platforms[0] !== "windows"))
32
46
  throw new Error("Select a desktop target with --platform macos or --platform windows.");
33
47
  return platforms[0];
34
48
  }
@@ -1,3 +1,4 @@
1
+ import { nativeWindowOptions } from "@legendapp/spark-window-options";
1
2
  import { macOSReleaseSettings } from "./macos-release.js";
2
3
  import { projectPlatform, architecture } from "./platform.js";
3
4
  import { resolveHelpers } from "./helpers.js";
@@ -7,7 +8,7 @@ import { createHash } from "node:crypto";
7
8
  import { createRequire } from "node:module";
8
9
  import { existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, writeFileSync, renameSync, } from "node:fs";
9
10
  import path from "node:path";
10
- export const VERSION = "0.0.1-next.2";
11
+ export const VERSION = "0.0.1-next.3";
11
12
  export function readJson(file) {
12
13
  return JSON.parse(readFileSync(file, "utf8"));
13
14
  }
@@ -38,13 +39,13 @@ export function entryFile(root) {
38
39
  }
39
40
  export function installedPackages(root) {
40
41
  const found = new Map();
41
- const queue = [
42
- { root, json: readJson(path.join(root, "package.json")), app: true },
43
- ];
42
+ const manifest = readJson(path.join(root, "package.json"));
43
+ const appRequire = createRequire(path.join(root, "package.json"));
44
+ const queue = [{ root, json: manifest, app: true }];
44
45
  const visited = new Set();
45
46
  while (queue.length) {
46
47
  const current = queue.shift();
47
- const req = createRequire(path.join(current.root, current.json.spark?.bundledModuleRoot ?? ".", "package.json"));
48
+ const contextualRequire = createRequire(path.join(current.root, current.json.spark?.bundledModuleRoot ?? ".", "package.json"));
48
49
  const bundled = current.json.spark?.bundledModules ?? current.json.bundledDependencies ?? current.json.bundleDependencies;
49
50
  const names = Object.keys({
50
51
  ...Object.fromEntries((Array.isArray(bundled) ? bundled : []).map(name => [name, true])),
@@ -57,6 +58,9 @@ export function installedPackages(root) {
57
58
  .filter(([name]) => !current.json.peerDependenciesMeta?.[name]?.optional)),
58
59
  }).sort();
59
60
  for (const name of names) {
61
+ // Linked workspace packages resolve peers from their original checkout.
62
+ // Explicit app overrides must select the app's installed native copy.
63
+ const req = Object.hasOwn(manifest.overrides ?? {}, name) ? appRequire : contextualRequire;
60
64
  let file;
61
65
  try {
62
66
  file = req.resolve(`${name}/package.json`);
@@ -64,11 +68,19 @@ export function installedPackages(root) {
64
68
  catch {
65
69
  // Packages with exports hiding package.json still have an owning directory.
66
70
  try {
67
- let dir = path.dirname(req.resolve(name));
68
- while ((!existsSync(path.join(dir, "package.json")) || typeof readJson(path.join(dir, "package.json")).name !== "string") &&
69
- dir !== path.dirname(dir))
70
- dir = path.dirname(dir);
71
- file = path.join(dir, "package.json");
71
+ // Subpath-only packages (e.g. @legendapp/list/react-native) may
72
+ // expose neither package.json nor a root entry. Inspect Node's
73
+ // package search locations without requiring a public root export.
74
+ const manifest = req.resolve.paths(name)?.map(base => path.join(base, name, "package.json"))
75
+ .find(candidate => existsSync(candidate));
76
+ if (manifest)
77
+ file = manifest;
78
+ else {
79
+ let dir = path.dirname(req.resolve(name));
80
+ while ((!existsSync(path.join(dir, "package.json")) || typeof readJson(path.join(dir, "package.json")).name !== "string") && dir !== path.dirname(dir))
81
+ dir = path.dirname(dir);
82
+ file = path.join(dir, "package.json");
83
+ }
72
84
  }
73
85
  catch {
74
86
  if (current.app &&
@@ -130,7 +142,8 @@ export function nativePackages(root) {
130
142
  // Fold it into the mandatory app module's compatibility signature for Go.
131
143
  const adapters = installed.filter(pkg => ["@legendapp/spark-desktop-host", "@legendapp/spark-desktop-config"].includes(pkg.name))
132
144
  .map(pkg => hashFiles(pkg.root, ["package.json", "AppDelegate.mm", ...readdirSync(pkg.root).filter(name => name.endsWith(".cjs"))])).join(":");
133
- const excluded = isUniversal(root) ? readAppConfig(root).expo?.autolinking?.exclude ?? [] : [];
145
+ const excluded = ["app.json", "desktop.config.json"].some(file => existsSync(path.join(root, file)))
146
+ ? readAppConfig(root).expo?.autolinking?.exclude ?? [] : [];
134
147
  return installed.filter(pkg => !excluded.includes(pkg.name))
135
148
  .filter((pkg) => pkg.json.codegenConfig ||
136
149
  pkg.json.spark?.nativeModules ||
@@ -218,6 +231,43 @@ export function hostSourceSignature(root) {
218
231
  .filter(pkg => ["@legendapp/spark-desktop-host", "@legendapp/spark-desktop-config"].includes(pkg.name))
219
232
  .map(pkg => [pkg.name, hashFiles(pkg.root, ["package.json", "AppDelegate.mm", "windows", ...readdirSync(pkg.root).filter(file => file.endsWith(".cjs"))])])));
220
233
  }
234
+ export function nativePreparationInputs(root, packages) {
235
+ return {
236
+ config: readAppConfig(root),
237
+ packages: packages.map((p) => [
238
+ p.name,
239
+ // CocoaPods records physical source paths, even for identical packages.
240
+ p.root,
241
+ hashFiles(p.root, [
242
+ "package.json",
243
+ p.json.codegenConfig?.jsSrcsDir ?? "src",
244
+ ...readdirSync(p.root).filter((name) => name.endsWith(".podspec")),
245
+ ]),
246
+ ]),
247
+ plugin: hostSourceSignature(root),
248
+ };
249
+ }
250
+ export function nativePreparationFingerprint(root, packages) {
251
+ return digest(JSON.stringify(nativePreparationInputs(root, packages)));
252
+ }
253
+ export function nativeProjectFingerprint(inputs, packages) {
254
+ return digest(JSON.stringify({
255
+ config: inputs.config,
256
+ plugin: inputs.plugin,
257
+ packages: packages.map(p => [p.name, p.root, hashFiles(p.root, ["package.json"])]),
258
+ }));
259
+ }
260
+ export function localSigningIdentity(root, mode) {
261
+ if (mode !== "dev")
262
+ return "-";
263
+ const file = stateFile(root, "settings.json");
264
+ const identity = existsSync(file) ? readJson(file).macOSDevelopmentIdentity : undefined;
265
+ if (identity === undefined)
266
+ return "-";
267
+ if (typeof identity !== "string" || !identity.trim() || identity.startsWith("-"))
268
+ throw new Error("macOSDevelopmentIdentity must name a signing certificate or its SHA-1 fingerprint");
269
+ return identity;
270
+ }
221
271
  export function runtimeFor(root, packages, mode) {
222
272
  const platform = projectPlatform(root);
223
273
  const modules = Object.fromEntries(packages.map((p) => [p.name, p.signature]));
@@ -240,7 +290,10 @@ export function runtimeFor(root, packages, mode) {
240
290
  mode,
241
291
  modules,
242
292
  fingerprint: digest(JSON.stringify({
243
- ...(platform === "windows" ? { arch: architecture(platform) } : {}),
293
+ arch: architecture(platform),
294
+ // Rebuild cached hosts generated before canonical plist restoration.
295
+ ...(platform === "macos" ? { nativeMetadataVersion: 1 } : {}),
296
+ ...(platform === "macos" && mode === "dev" ? { developmentIdentity: localSigningIdentity(root, mode) } : {}),
244
297
  ...(platform === "macos" && mode === "release" ? { releaseSettings: macOSReleaseSettings } : {}),
245
298
  modules,
246
299
  pins,
@@ -297,7 +350,7 @@ export function projectEnvironment(root) {
297
350
  if (typeof projectId !== "string" || !projectId.length || projectId.length > 200)
298
351
  throw new Error("Set extra.spark.projectId to a stable project identifier before launching the Spark Runner.");
299
352
  return {
300
- SPARK_WINDOW_CONFIG: JSON.stringify(config.extra?.spark?.window ?? {}),
353
+ SPARK_WINDOW_CONFIG: JSON.stringify(nativeWindowOptions(config.extra?.spark?.window ?? {})),
301
354
  SPARK_PROJECT_ID: projectId,
302
355
  SPARK_PROJECT_NAME: typeof config.name === "string" ? config.name : path.basename(root),
303
356
  SPARK_PROJECT_VERSION: typeof config.version === "string" ? config.version : "0.0.0",
@@ -1,4 +1,5 @@
1
- import { existsSync } from "node:fs";
1
+ import { createHash, randomUUID } from "node:crypto";
2
+ import { closeSync, existsSync, mkdirSync, openSync, readFileSync, renameSync, rmSync, writeSync } from "node:fs";
2
3
  import path from "node:path";
3
4
  import { readJson, VERSION } from "./project.js";
4
5
  import { localArchive } from "./package-manager.js";
@@ -6,13 +7,15 @@ export const releaseBase = (version) => `https://github.com/LegendApp/legend-spa
6
7
  export function validateRelease(value) {
7
8
  if (value?.schema !== 1 || value.version !== VERSION || !/^[a-f0-9]{40}$/.test(value.revision) || !value.packages || !value.runners)
8
9
  throw new Error("Invalid or incompatible Spark release manifest");
10
+ if (Object.keys(value.packages).some(name => !/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/.test(name)))
11
+ throw new Error("Invalid Spark package name");
9
12
  for (const asset of [...Object.values(value.packages), ...Object.values(value.runners)]) {
10
13
  const url = new URL(asset.url);
11
14
  if (url.href !== asset.url || !/^[A-Za-z0-9._-]+$/.test(url.pathname.split("/").at(-1) ?? "") || !asset.url.startsWith(releaseBase(VERSION) + "/") || url.search || url.hash || !/^[a-f0-9]{64}$/.test(asset.sha256) || !Number.isSafeInteger(asset.size) || asset.size <= 0)
12
15
  throw new Error("Invalid Spark release asset");
13
16
  }
14
17
  for (const [target, asset] of Object.entries(value.runners)) {
15
- if (target !== "macos-arm64" || path.basename(asset.app) !== asset.app || !asset.app.endsWith(".app") || !/^[A-Z0-9]{10}$/.test(asset.teamId) || !/^[a-f0-9]+$/.test(asset.fingerprint))
18
+ if (!["macos-arm64", "macos-x64"].includes(target) || path.basename(asset.app) !== asset.app || !asset.app.endsWith(".app") || !/^[A-Z0-9]{10}$/.test(asset.teamId) || !/^[a-f0-9]+$/.test(asset.fingerprint))
16
19
  throw new Error("Invalid Runner release target");
17
20
  }
18
21
  return value;
@@ -21,7 +24,7 @@ export function installedRelease() {
21
24
  const file = path.join(import.meta.dirname, "release.json");
22
25
  return existsSync(file) ? validateRelease(readJson(file)) : undefined;
23
26
  }
24
- /** Registry versions and immutable HTTPS archives survive project moves and clones. */
27
+ /** Local SDK archives keep their manifest-relative paths; release archives become portable project-relative files. */
25
28
  export function packageSources(manifest, release = installedRelease()) {
26
29
  let sources;
27
30
  if (manifest) {
@@ -36,7 +39,84 @@ export function packageSources(manifest, release = installedRelease()) {
36
39
  if (!release)
37
40
  throw new Error("This SDK has no published release metadata. Pack or register a local SDK first.");
38
41
  validateRelease(release);
39
- sources = { ...Object.fromEntries(Object.entries(release.packages).map(([name, asset]) => [name, asset.url])), "@legendapp/spark": VERSION };
42
+ sources = { ...Object.fromEntries(Object.entries(release.packages).map(([name, asset]) => [name, `file:./spark-packages/${packageArchiveName(name, asset)}`])), "@legendapp/spark": VERSION };
40
43
  }
41
44
  return sources;
42
45
  }
46
+ function packageArchiveName(name, asset) {
47
+ return `${name.replace(/^@/, "").replaceAll("/", "-")}-${asset.sha256}.tgz`;
48
+ }
49
+ /** Download and verify release bytes before installing; relative vendored files survive moves and ordinary clones. */
50
+ export async function materializeReleasePackages(release, projectRoot, fetcher = fetch) {
51
+ validateRelease(release);
52
+ const directory = path.join(projectRoot, "spark-packages");
53
+ mkdirSync(directory, { recursive: true });
54
+ const pending = Object.entries(release.packages).map(([name, asset]) => ({ name, asset, file: path.join(directory, packageArchiveName(name, asset)) }));
55
+ for (const { name, asset, file } of pending) {
56
+ if (!existsSync(file))
57
+ continue;
58
+ const bytes = readFileSync(file);
59
+ if (bytes.length !== asset.size || createHash("sha256").update(bytes).digest("hex") !== asset.sha256)
60
+ throw new Error(`Existing verified Spark package archive is corrupt: ${name}`);
61
+ }
62
+ for (const { name, asset, file } of pending) {
63
+ if (existsSync(file))
64
+ continue;
65
+ const response = await fetcher(asset.url, { signal: AbortSignal.timeout(120_000) });
66
+ if (!response.ok)
67
+ throw new Error(`Download Spark package ${name}: HTTP ${response.status}`);
68
+ const temporary = `${file}.tmp-${process.pid}-${randomUUID()}`;
69
+ const fd = openSync(temporary, "wx");
70
+ const hash = createHash("sha256");
71
+ let size = 0;
72
+ let open = true;
73
+ try {
74
+ if (!response.body)
75
+ throw new Error(`Download Spark package ${name}: response has no body`);
76
+ const reader = response.body.getReader();
77
+ try {
78
+ while (true) {
79
+ const { done, value } = await reader.read();
80
+ if (done)
81
+ break;
82
+ size += value.byteLength;
83
+ if (size > asset.size) {
84
+ await reader.cancel();
85
+ throw new Error(`Spark package archive exceeds its declared size: ${name}`);
86
+ }
87
+ hash.update(value);
88
+ let offset = 0;
89
+ while (offset < value.byteLength)
90
+ offset += writeSync(fd, value, offset, value.byteLength - offset);
91
+ }
92
+ }
93
+ finally {
94
+ reader.releaseLock();
95
+ }
96
+ if (size !== asset.size || hash.digest("hex") !== asset.sha256)
97
+ throw new Error(`Spark package archive checksum or size mismatch: ${name}`);
98
+ closeSync(fd);
99
+ open = false;
100
+ renameSync(temporary, file);
101
+ }
102
+ catch (error) {
103
+ if (open)
104
+ closeSync(fd);
105
+ rmSync(temporary, { force: true });
106
+ throw error;
107
+ }
108
+ }
109
+ }
110
+ /** Recheck vendored bytes immediately before a package manager can run lifecycle scripts. */
111
+ export function verifyMaterializedReleasePackages(release, projectRoot) {
112
+ validateRelease(release);
113
+ const directory = path.join(projectRoot, "spark-packages");
114
+ for (const [name, asset] of Object.entries(release.packages)) {
115
+ const file = path.join(directory, packageArchiveName(name, asset));
116
+ if (!existsSync(file))
117
+ throw new Error(`Verified Spark package archive is missing: ${name}`);
118
+ const bytes = readFileSync(file);
119
+ if (bytes.length !== asset.size || createHash("sha256").update(bytes).digest("hex") !== asset.sha256)
120
+ throw new Error(`Verified Spark package archive changed before installation: ${name}`);
121
+ }
122
+ }
@@ -1,37 +1,42 @@
1
1
  {
2
2
  "schema": 1,
3
- "version": "0.0.1-next.2",
4
- "revision": "6359fee375c5b0549b43f339d4e856db4bcb7c98",
3
+ "version": "0.0.1-next.3",
4
+ "revision": "5aa7d342e3901b13b3947e61f0115e110857e940",
5
5
  "packages": {
6
6
  "@react-native-runtimes/core": {
7
- "url": "https://github.com/LegendApp/legend-spark/releases/download/v0.0.1-next.2/runtimes-31ac67156c18.tgz",
8
- "size": 53885,
9
- "sha256": "a8e532d0a1e8d7c23953e94612d58f0e660a685e58645075c5180304c8462515"
7
+ "url": "https://github.com/LegendApp/legend-spark/releases/download/v0.0.1-next.3/runtimes-a216ebc90023.tgz",
8
+ "size": 53886,
9
+ "sha256": "acf7330c6e4ba50c5d81dc8459ef4195cd5220245d49bbedf44dd7d241d6e804"
10
10
  },
11
11
  "react-native-nitro-modules": {
12
- "url": "https://github.com/LegendApp/legend-spark/releases/download/v0.0.1-next.2/react-native-nitro-modules-0.35.7-7c494d2176d7.tgz",
13
- "size": 138548,
14
- "sha256": "7c494d2176d7f144ee5d518fd8c03b24f29c22bba520b7cebd71ba7d60cb56d3"
12
+ "url": "https://github.com/LegendApp/legend-spark/releases/download/v0.0.1-next.3/react-native-nitro-modules-0.35.7-e26b0b759292.tgz",
13
+ "size": 138698,
14
+ "sha256": "e26b0b7592929d779a488623dbe936a37d3cd169228af8207d05faf65e452c17"
15
15
  },
16
16
  "@op-engineering/op-sqlite": {
17
- "url": "https://github.com/LegendApp/legend-spark/releases/download/v0.0.1-next.2/op-engineering-op-sqlite-18.2.1-ebd60a4eb0d4.tgz",
18
- "size": 115455003,
19
- "sha256": "ebd60a4eb0d4a0a2d48c7ca455cf3668879ff64a258bed108c2393d53679cf3c"
17
+ "url": "https://github.com/LegendApp/legend-spark/releases/download/v0.0.1-next.3/op-engineering-op-sqlite-18.2.1-d347b5859c8e.tgz",
18
+ "size": 112508638,
19
+ "sha256": "d347b5859c8ede8f13a1195b62d84129d3c519ddb983c5af241953841fb2ce4a"
20
20
  },
21
21
  "react-native-webview": {
22
- "url": "https://github.com/LegendApp/legend-spark/releases/download/v0.0.1-next.2/react-native-webview-16.0.0-33882a035641.tgz",
23
- "size": 116112,
24
- "sha256": "33882a03564141b8b5c56cc7e99e0d425f3a53b59db966d9412bb85ef6f0abf3"
22
+ "url": "https://github.com/LegendApp/legend-spark/releases/download/v0.0.1-next.3/react-native-webview-16.0.0-3b95dfeffdd6.tgz",
23
+ "size": 116287,
24
+ "sha256": "3b95dfeffdd6d5a12179b367c846dfdca4fa95421ba1fa9c5e20617bc89b82fc"
25
+ },
26
+ "expo-audio": {
27
+ "url": "https://github.com/LegendApp/legend-spark/releases/download/v0.0.1-next.3/expo-audio-1.1.1-226962e4b7a3.tgz",
28
+ "size": 381077,
29
+ "sha256": "226962e4b7a36596e859524104037f35d33b25ff2f675c88b54f222677ca916b"
25
30
  }
26
31
  },
27
32
  "runners": {
28
33
  "macos-arm64": {
29
- "url": "https://github.com/LegendApp/legend-spark/releases/download/v0.0.1-next.2/spark-runner-macos-arm64.zip",
30
- "size": 12455131,
31
- "sha256": "77635060c84c536d67af10496e21a65fb57f279a7f165d362f1ca81829c95e69",
34
+ "url": "https://github.com/LegendApp/legend-spark/releases/download/v0.0.1-next.3/spark-runner-macos-arm64.zip",
35
+ "size": 13043465,
36
+ "sha256": "a33a4adf683579e18b05b16d680ece0c664403bdcd2f846fdb955b5d2fe3f7d8",
32
37
  "app": "SparkRunner.app",
33
38
  "teamId": "56DD97VT22",
34
- "fingerprint": "fef5859c9685b017d0132277f593c732512dec23b2c57bc6c53ce695e821406d"
39
+ "fingerprint": "6925832e8790b3253cb7509aacc5978ee90da2e15b884492624b1b43945291f5"
35
40
  }
36
41
  }
37
42
  }