@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.
- package/LICENSE +21 -0
- package/README.md +10 -4
- package/ai-codex.ts +1 -0
- package/ai.ts +1 -0
- package/app-documents.ts +1 -0
- package/config-plugin.d.cts +2 -0
- package/contracts.ts +2 -0
- package/diagnostics.ts +1 -0
- package/expo-config.d.cts +1 -0
- package/metro.cjs +4 -1
- package/metro.d.cts +12 -0
- package/native.cjs +3 -1
- package/native.d.cts +6 -0
- package/package.json +82 -14
- package/schema.json +276 -58
- package/settings-observable.ts +1 -0
- package/settings-window.ts +1 -0
- package/shortcuts-commands.ts +1 -0
- package/shortcuts-keyboard.ts +3 -0
- package/ui-classnames.ts +1 -0
- package/ui-glass.ts +1 -0
- package/ui-search.ts +1 -0
- package/ui-sidebar.ts +1 -0
- package/ui-split-view.ts +1 -0
- package/ui-symbol.ts +1 -0
- package/vendor/node_modules/@legendapp/spark-ai/package.json +19 -0
- package/vendor/node_modules/@legendapp/spark-ai/src/availability.ts +17 -0
- package/vendor/node_modules/@legendapp/spark-ai/src/index.ts +15 -0
- package/vendor/node_modules/@legendapp/spark-ai/src/invocations.ts +34 -0
- package/vendor/node_modules/@legendapp/spark-ai/src/output.ts +62 -0
- package/vendor/node_modules/@legendapp/spark-ai/src/run.ts +12 -0
- package/vendor/node_modules/@legendapp/spark-ai/src/types.ts +16 -0
- package/vendor/node_modules/@legendapp/spark-audio/macos/RNSparkAudio.h +2 -1
- package/vendor/node_modules/@legendapp/spark-audio/macos/RNSparkAudio.mm +126 -24
- package/vendor/node_modules/@legendapp/spark-audio/package.json +5 -2
- package/vendor/node_modules/@legendapp/spark-audio/src/NativeSparkAudio.ts +5 -1
- package/vendor/node_modules/@legendapp/spark-audio/src/desktop.ts +36 -32
- package/vendor/node_modules/@legendapp/spark-audio/src/events.ts +11 -0
- package/vendor/node_modules/@legendapp/spark-audio/src/hooks.ts +65 -0
- package/vendor/node_modules/@legendapp/spark-audio/src/index.web.ts +92 -33
- package/vendor/node_modules/@legendapp/spark-audio/src/media-session-unavailable.ts +6 -4
- package/vendor/node_modules/@legendapp/spark-audio/src/media-session.ts +52 -19
- package/vendor/node_modules/@legendapp/spark-audio/src/media-session.web.ts +18 -10
- package/vendor/node_modules/@legendapp/spark-audio/src/media-types.ts +40 -13
- package/vendor/node_modules/@legendapp/spark-audio/src/mobile.ts +40 -32
- package/vendor/node_modules/@legendapp/spark-audio/src/player.ts +97 -0
- package/vendor/node_modules/@legendapp/spark-audio/src/status-listeners.ts +21 -15
- package/vendor/node_modules/@legendapp/spark-audio/src/types.ts +9 -4
- package/vendor/node_modules/@legendapp/spark-audio/windows/SparkAudio/SparkAudio.h +67 -20
- package/vendor/node_modules/@legendapp/spark-auth-session/package.json +4 -3
- package/vendor/node_modules/@legendapp/spark-auth-session/src/core.ts +60 -42
- package/vendor/node_modules/@legendapp/spark-auth-session/src/index.ts +28 -12
- package/vendor/node_modules/@legendapp/spark-auth-session/src/mobile.ts +97 -41
- package/vendor/node_modules/@legendapp/spark-auth-session/src/types.ts +20 -9
- package/vendor/node_modules/@legendapp/spark-cli/dist/add-desktop.js +50 -7
- package/vendor/node_modules/@legendapp/spark-cli/dist/build-mode.js +1 -1
- package/vendor/node_modules/@legendapp/spark-cli/dist/build.js +83 -48
- package/vendor/node_modules/@legendapp/spark-cli/dist/cli-arguments.js +60 -0
- package/vendor/node_modules/@legendapp/spark-cli/dist/commands.js +7 -2
- package/vendor/node_modules/@legendapp/spark-cli/dist/create.js +31 -5
- package/vendor/node_modules/@legendapp/spark-cli/dist/credentials.js +69 -23
- package/vendor/node_modules/@legendapp/spark-cli/dist/dev-command.js +12 -3
- package/vendor/node_modules/@legendapp/spark-cli/dist/dev.js +12 -9
- package/vendor/node_modules/@legendapp/spark-cli/dist/examples.js +1 -1
- package/vendor/node_modules/@legendapp/spark-cli/dist/expo-dev-patch.cjs +4 -2
- package/vendor/node_modules/@legendapp/spark-cli/dist/expo-metro.cjs +1 -1
- package/vendor/node_modules/@legendapp/spark-cli/dist/expo-node.js +3 -3
- package/vendor/node_modules/@legendapp/spark-cli/dist/index.js +10 -38
- package/vendor/node_modules/@legendapp/spark-cli/dist/local.js +1 -1
- package/vendor/node_modules/@legendapp/spark-cli/dist/metro.cjs +26 -5
- package/vendor/node_modules/@legendapp/spark-cli/dist/native-metadata.js +26 -0
- package/vendor/node_modules/@legendapp/spark-cli/dist/native-patch-preflight.js +84 -0
- package/vendor/node_modules/@legendapp/spark-cli/dist/native-preparation.js +88 -0
- package/vendor/node_modules/@legendapp/spark-cli/dist/notary-profiles.js +75 -0
- package/vendor/node_modules/@legendapp/spark-cli/dist/package.js +4 -2
- package/vendor/node_modules/@legendapp/spark-cli/dist/platform.js +16 -2
- package/vendor/node_modules/@legendapp/spark-cli/dist/project.js +66 -13
- package/vendor/node_modules/@legendapp/spark-cli/dist/release.js +84 -4
- package/vendor/node_modules/@legendapp/spark-cli/dist/release.json +23 -18
- package/vendor/node_modules/@legendapp/spark-cli/dist/runner-install.js +145 -31
- package/vendor/node_modules/@legendapp/spark-cli/dist/signing.js +4 -3
- package/vendor/node_modules/@legendapp/spark-cli/dist/updates.js +41 -4
- package/vendor/node_modules/@legendapp/spark-cli/dist/windows.js +4 -1
- package/vendor/node_modules/@legendapp/spark-cli/package.json +7 -6
- package/vendor/node_modules/@legendapp/spark-cli/templates/blank-typescript/App.tsx +6 -12
- package/vendor/node_modules/@legendapp/spark-cli/templates/blank-typescript/desktop.config.json +5 -3
- package/vendor/node_modules/@legendapp/spark-cli/templates/blank-typescript/package.json +11 -9
- package/vendor/node_modules/@legendapp/spark-cli/templates/diff-lite/Git.macos.tsx +2 -2
- package/vendor/node_modules/@legendapp/spark-cli/templates/document-editor/Integration.macos.tsx +23 -21
- package/vendor/node_modules/@legendapp/spark-cli/templates/document-editor/Integration.windows.tsx +23 -21
- package/vendor/node_modules/@legendapp/spark-cli/templates/document-editor/io.desktop.ts +11 -8
- package/vendor/node_modules/@legendapp/spark-cli/templates/document-editor/io.macos.ts +3 -3
- package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/Lifecycle.desktop.tsx +8 -14
- package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/OpenFiles.desktop.tsx +5 -10
- package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/io.desktop.ts +11 -8
- package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/io.macos.ts +3 -3
- package/vendor/node_modules/@legendapp/spark-cli/templates/music-lite/assets.desktop.ts +2 -2
- package/vendor/node_modules/@legendapp/spark-cli/templates/notes-lite/Activation.desktop.tsx +2 -2
- package/vendor/node_modules/@legendapp/spark-cli/templates/notes-lite/Desktop.desktop.ts +37 -15
- package/vendor/node_modules/@legendapp/spark-cli/templates/notes-lite/session.ts +5 -6
- package/vendor/node_modules/@legendapp/spark-cli/templates/notes-lite/window-session.ts +5 -4
- package/vendor/node_modules/@legendapp/spark-cli/templates/universal/desktop.config.json +5 -3
- package/vendor/node_modules/@legendapp/spark-cli/templates/universal/metro.config.js +1 -1
- package/vendor/node_modules/@legendapp/spark-cli/templates/universal/package.json +13 -11
- package/vendor/node_modules/@legendapp/spark-cli/templates/universal/react-native.config.js +1 -1
- package/vendor/node_modules/@legendapp/spark-cli/templates/windows/package.json +13 -11
- package/vendor/node_modules/@legendapp/spark-cli/templates/windows/react-native.config.js +1 -1
- package/vendor/node_modules/@legendapp/spark-clipboard/macos/RNDesktopClipboard.mm +10 -16
- package/vendor/node_modules/@legendapp/spark-clipboard/package.json +2 -2
- package/vendor/node_modules/@legendapp/spark-clipboard/src/NativeDesktopClipboard.ts +1 -1
- package/vendor/node_modules/@legendapp/spark-clipboard/src/desktop.ts +55 -31
- package/vendor/node_modules/@legendapp/spark-clipboard/src/expo.ts +21 -11
- package/vendor/node_modules/@legendapp/spark-clipboard/src/options.ts +8 -0
- package/vendor/node_modules/@legendapp/spark-clipboard/src/types.ts +10 -0
- package/vendor/node_modules/@legendapp/spark-clipboard/windows/SparkClipboard/SparkClipboard.h +38 -15
- package/vendor/node_modules/@legendapp/spark-clipboard/windows/SparkClipboard/SparkClipboard.vcxproj +2 -0
- package/vendor/node_modules/@legendapp/spark-codex/RNCodex.podspec +22 -0
- package/vendor/node_modules/@legendapp/spark-codex/cpp/HybridCodexAppServer.hpp +23 -0
- package/vendor/node_modules/@legendapp/spark-codex/cpp/HybridCodexAppServer.mm +1529 -0
- package/vendor/node_modules/@legendapp/spark-codex/nitro.json +21 -0
- package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/.gitattributes +1 -0
- package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/ios/RNCodex+autolinking.rb +62 -0
- package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/ios/RNCodex-Swift-Cxx-Bridge.cpp +17 -0
- package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/ios/RNCodex-Swift-Cxx-Bridge.hpp +27 -0
- package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/ios/RNCodex-Swift-Cxx-Umbrella.hpp +38 -0
- package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/ios/RNCodexAutolinking.mm +35 -0
- package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/ios/RNCodexAutolinking.swift +16 -0
- package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/shared/c++/CodexAvailability.hpp +95 -0
- package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/shared/c++/CodexRunResult.hpp +99 -0
- package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/shared/c++/HybridCodexAppServerSpec.cpp +24 -0
- package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/shared/c++/HybridCodexAppServerSpec.hpp +71 -0
- package/vendor/node_modules/@legendapp/spark-codex/package.json +35 -0
- package/vendor/node_modules/@legendapp/spark-codex/react-native.config.js +11 -0
- package/vendor/node_modules/@legendapp/spark-codex/src/Codex.nitro.ts +30 -0
- package/vendor/node_modules/@legendapp/spark-codex/src/index.ts +65 -0
- package/vendor/node_modules/@legendapp/spark-codex/src/native.ts +6 -0
- package/vendor/node_modules/@legendapp/spark-commands/package.json +21 -0
- package/vendor/node_modules/@legendapp/spark-commands/src/bindings.ts +90 -0
- package/vendor/node_modules/@legendapp/spark-commands/src/index.tsx +400 -0
- package/vendor/node_modules/@legendapp/spark-commands/src/router.ts +138 -0
- package/vendor/node_modules/@legendapp/spark-commands/src/storage.ts +20 -0
- package/vendor/node_modules/@legendapp/spark-context-menu/macos/RNContextMenu.mm +7 -8
- package/vendor/node_modules/@legendapp/spark-context-menu/package.json +4 -3
- package/vendor/node_modules/@legendapp/spark-context-menu/src/NativeContextMenu.ts +1 -1
- package/vendor/node_modules/@legendapp/spark-context-menu/src/index.ts +26 -26
- package/vendor/node_modules/@legendapp/spark-context-menu/windows/SparkContextMenu/SparkContextMenu.h +3 -2
- package/vendor/node_modules/@legendapp/spark-desktop-app/RNDesktopApp.podspec +2 -1
- package/vendor/node_modules/@legendapp/spark-desktop-app/cpp/SparkBinaryJSI.hpp +89 -0
- package/vendor/node_modules/@legendapp/spark-desktop-app/cpp/SparkBinaryWindows.hpp +22 -0
- package/vendor/node_modules/@legendapp/spark-desktop-app/macos/RNDesktopApp.mm +13 -7
- package/vendor/node_modules/@legendapp/spark-desktop-app/macos/SparkBinaryJSI.h +48 -0
- package/vendor/node_modules/@legendapp/spark-desktop-app/macos/SparkDesktop.h +4 -0
- package/vendor/node_modules/@legendapp/spark-desktop-app/macos/SparkDesktop.mm +33 -33
- package/vendor/node_modules/@legendapp/spark-desktop-app/macos/SparkDesktopError.h +20 -0
- package/vendor/node_modules/@legendapp/spark-desktop-app/macos/SparkLifecycle.h +26 -0
- package/vendor/node_modules/@legendapp/spark-desktop-app/macos/SparkLifecycle.mm +49 -0
- package/vendor/node_modules/@legendapp/spark-desktop-app/macos/SparkQuitCoordinator.h +9 -0
- package/vendor/node_modules/@legendapp/spark-desktop-app/macos/SparkQuitCoordinator.mm +70 -0
- package/vendor/node_modules/@legendapp/spark-desktop-app/macos/SparkWindow.mm +9 -6
- package/vendor/node_modules/@legendapp/spark-desktop-app/macos/recent-documents/RNRecentDocumentController.mm +55 -0
- package/vendor/node_modules/@legendapp/spark-desktop-app/package.json +5 -3
- package/vendor/node_modules/@legendapp/spark-desktop-app/src/NativeDesktopApp.ts +1 -1
- package/vendor/node_modules/@legendapp/spark-desktop-app/src/api.ts +86 -40
- package/vendor/node_modules/@legendapp/spark-desktop-app/src/contracts/accelerator.ts +40 -0
- package/vendor/node_modules/@legendapp/spark-desktop-app/src/contracts/index.ts +56 -0
- package/vendor/node_modules/@legendapp/spark-desktop-app/src/contracts/menu.ts +114 -0
- package/vendor/node_modules/@legendapp/spark-desktop-app/src/contracts/native-buffer.ts +22 -0
- package/vendor/node_modules/@legendapp/spark-desktop-app/src/contracts/path.ts +24 -0
- package/vendor/node_modules/@legendapp/spark-desktop-app/src/events.ts +75 -0
- package/vendor/node_modules/@legendapp/spark-desktop-app/src/index.ts +2 -0
- package/vendor/node_modules/@legendapp/spark-desktop-app/src/index.windows.ts +2 -0
- package/vendor/node_modules/@legendapp/spark-desktop-app/src/open-requests.ts +43 -0
- package/vendor/node_modules/@legendapp/spark-desktop-app/src/restoration.ts +11 -0
- package/vendor/node_modules/@legendapp/spark-desktop-app/src/transport.ts +10 -0
- package/vendor/node_modules/@legendapp/spark-desktop-config/app.plugin.cjs +10 -5
- package/vendor/node_modules/@legendapp/spark-desktop-config/app.plugin.d.cts +3 -0
- package/vendor/node_modules/@legendapp/spark-desktop-config/autolinking.cjs +35 -0
- package/vendor/node_modules/@legendapp/spark-desktop-config/config.cjs +16 -3
- package/vendor/node_modules/@legendapp/spark-desktop-config/config.d.cts +89 -9
- package/vendor/node_modules/@legendapp/spark-desktop-config/expo.d.cts +3 -0
- package/vendor/node_modules/@legendapp/spark-desktop-config/identity.cjs +3 -2
- package/vendor/node_modules/@legendapp/spark-desktop-config/lifecycle.cjs +20 -0
- package/vendor/node_modules/@legendapp/spark-desktop-config/package.json +6 -5
- package/vendor/node_modules/@legendapp/spark-desktop-config/schema.json +276 -58
- package/vendor/node_modules/@legendapp/spark-desktop-config/updates.cjs +1 -0
- package/vendor/node_modules/@legendapp/spark-desktop-config/validation.cjs +35 -0
- package/vendor/node_modules/@legendapp/spark-desktop-config/windows.plugin.cjs +2 -1
- package/vendor/node_modules/@legendapp/spark-desktop-host/AppDelegate.mm +129 -11
- package/vendor/node_modules/@legendapp/spark-desktop-host/package.json +2 -2
- package/vendor/node_modules/@legendapp/spark-desktop-host/windows/application.inc +277 -121
- package/vendor/node_modules/@legendapp/spark-desktop-links/common/AuthLoopback.h +5 -7
- package/vendor/node_modules/@legendapp/spark-desktop-links/macos/RNDesktopLinks.mm +10 -9
- package/vendor/node_modules/@legendapp/spark-desktop-links/package.json +2 -2
- package/vendor/node_modules/@legendapp/spark-desktop-links/src/NativeDesktopLinks.ts +1 -1
- package/vendor/node_modules/@legendapp/spark-desktop-links/src/api.ts +27 -33
- package/vendor/node_modules/@legendapp/spark-desktop-links/src/expo.ts +3 -4
- package/vendor/node_modules/@legendapp/spark-desktop-links/src/native.ts +9 -0
- package/vendor/node_modules/@legendapp/spark-desktop-links/windows/SparkLinks/SparkLinks.h +22 -22
- package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/RNDesktopShortcuts.podspec +1 -0
- package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/macos/RNDesktopShortcuts.mm +1 -1
- package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/macos/keyboard-manager/RNKeyboardManager.h +9 -0
- package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/macos/keyboard-manager/RNKeyboardManager.mm +307 -0
- package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/package.json +8 -5
- package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/src/NativeDesktopShortcuts.ts +1 -1
- package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/src/api.ts +39 -14
- package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/src/keyboard-manager/NativeKeyboardManager.ts +12 -0
- package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/src/keyboard-manager/codes.ts +108 -0
- package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/src/keyboard-manager/index.ts +99 -0
- package/vendor/node_modules/@legendapp/spark-desktop-windows/RNDesktopWindows.podspec +2 -0
- package/vendor/node_modules/@legendapp/spark-desktop-windows/macos/RNDesktopWindows.mm +229 -103
- package/vendor/node_modules/@legendapp/spark-desktop-windows/macos/SparkWindowGeometry.h +63 -0
- package/vendor/node_modules/@legendapp/spark-desktop-windows/macos/window-manager/LegendWindowRegistry.h +20 -0
- package/vendor/node_modules/@legendapp/spark-desktop-windows/macos/window-manager/LegendWindowRegistry.mm +27 -0
- package/vendor/node_modules/@legendapp/spark-desktop-windows/macos/window-manager/RNWindowManager.h +12 -0
- package/vendor/node_modules/@legendapp/spark-desktop-windows/macos/window-manager/RNWindowManager.mm +3130 -0
- package/vendor/node_modules/@legendapp/spark-desktop-windows/macos/window-manager/RNWindowManagerStartup.mm +31 -0
- package/vendor/node_modules/@legendapp/spark-desktop-windows/macos/window-manager/SidebarStartupFallbacks.mm +14 -0
- package/vendor/node_modules/@legendapp/spark-desktop-windows/package.json +10 -6
- package/vendor/node_modules/@legendapp/spark-desktop-windows/src/NativeDesktopWindowManager.ts +1 -1
- package/vendor/node_modules/@legendapp/spark-desktop-windows/src/api.ts +144 -70
- package/vendor/node_modules/@legendapp/spark-desktop-windows/src/diagnostics.ts +17 -0
- package/vendor/node_modules/@legendapp/spark-desktop-windows/src/index.ts +3 -1
- package/vendor/node_modules/@legendapp/spark-desktop-windows/src/index.windows.ts +3 -1
- package/vendor/node_modules/@legendapp/spark-desktop-windows/src/macos-adapter.ts +53 -0
- package/vendor/node_modules/@legendapp/spark-desktop-windows/src/macos.ts +51 -0
- package/vendor/node_modules/@legendapp/spark-desktop-windows/src/transport.ts +41 -0
- package/vendor/node_modules/@legendapp/spark-desktop-windows/src/types.ts +140 -0
- package/vendor/node_modules/@legendapp/spark-desktop-windows/src/validation.ts +162 -0
- package/vendor/node_modules/@legendapp/spark-desktop-windows/src/window-manager/NativeWindowManager.ts +28 -0
- package/vendor/node_modules/@legendapp/spark-desktop-windows/src/windows/WindowProvider.tsx +20 -0
- package/vendor/node_modules/@legendapp/spark-desktop-windows/src/windows/createWindowsNavigator.tsx +78 -0
- package/vendor/node_modules/@legendapp/spark-desktop-windows/src/windows/index.ts +6 -0
- package/vendor/node_modules/@legendapp/spark-desktop-windows/src/windows/primaryWindowLifecycle.ts +34 -0
- package/vendor/node_modules/@legendapp/spark-desktop-windows/src/windows/types.ts +11 -0
- package/vendor/node_modules/@legendapp/spark-desktop-windows/src/windows/usePrimaryWindowLifecycle.ts +18 -0
- package/vendor/node_modules/@legendapp/spark-desktop-windows/src/windows/useWindowFocusEffect.ts +17 -0
- package/vendor/node_modules/@legendapp/spark-documents/package.json +22 -0
- package/vendor/node_modules/@legendapp/spark-documents/src/controller.ts +97 -0
- package/vendor/node_modules/@legendapp/spark-documents/src/documentTransition.ts +13 -0
- package/vendor/node_modules/@legendapp/spark-documents/src/hooks.ts +139 -0
- package/vendor/node_modules/@legendapp/spark-documents/src/index.tsx +50 -0
- package/vendor/node_modules/@legendapp/spark-documents/src/reload.ts +39 -0
- package/vendor/node_modules/@legendapp/spark-documents/src/requests.ts +15 -0
- package/vendor/node_modules/@legendapp/spark-drag-drop/package.json +4 -3
- package/vendor/node_modules/@legendapp/spark-drag-drop/src/DesktopDragViewNativeComponent.ts +1 -1
- package/vendor/node_modules/@legendapp/spark-drag-drop/src/contracts.ts +73 -18
- package/vendor/node_modules/@legendapp/spark-drag-drop/src/index.tsx +58 -15
- package/vendor/node_modules/@legendapp/spark-drag-drop/windows/SparkDragDrop/SparkDragDrop.h +14 -8
- package/vendor/node_modules/@legendapp/spark-file-dialog/ios/RNFileDialog.mm +34 -121
- package/vendor/node_modules/@legendapp/spark-file-dialog/package.json +12 -5
- package/vendor/node_modules/@legendapp/spark-file-dialog/src/NativeFileDialog.ts +1 -5
- package/vendor/node_modules/@legendapp/spark-file-dialog/src/index.ts +19 -84
- package/vendor/node_modules/@legendapp/spark-file-dialog/src/native.ts +12 -0
- package/vendor/node_modules/@legendapp/spark-file-dialog/src/options.ts +34 -14
- package/vendor/node_modules/@legendapp/spark-file-dialog/src/types.ts +26 -0
- package/vendor/node_modules/@legendapp/spark-file-dialog/windows/SparkFileDialog/SparkFileDialog.h +42 -58
- package/vendor/node_modules/@legendapp/spark-file-system/RNDesktopFileSystem.podspec +1 -0
- package/vendor/node_modules/@legendapp/spark-file-system/macos/RNDesktopFileSystem.mm +32 -21
- package/vendor/node_modules/@legendapp/spark-file-system/macos/SparkFileMutations.h +24 -0
- package/vendor/node_modules/@legendapp/spark-file-system/macos/SparkFileMutations.mm +215 -0
- package/vendor/node_modules/@legendapp/spark-file-system/macos/file-scanner/RNFileScanner.h +9 -0
- package/vendor/node_modules/@legendapp/spark-file-system/macos/file-scanner/RNFileScanner.mm +82 -0
- package/vendor/node_modules/@legendapp/spark-file-system/macos/file-scanner/RNFileScannerCore.h +47 -0
- package/vendor/node_modules/@legendapp/spark-file-system/macos/file-scanner/RNFileScannerCore.mm +306 -0
- package/vendor/node_modules/@legendapp/spark-file-system/package.json +8 -6
- package/vendor/node_modules/@legendapp/spark-file-system/src/NativeDesktopFileSystem.ts +1 -1
- package/vendor/node_modules/@legendapp/spark-file-system/src/file-scanner/NativeFileScanner.ts +11 -0
- package/vendor/node_modules/@legendapp/spark-file-system/src/file-scanner/index.ts +93 -0
- package/vendor/node_modules/@legendapp/spark-file-system/src/handles.ts +48 -14
- package/vendor/node_modules/@legendapp/spark-file-system/src/index.ts +134 -45
- package/vendor/node_modules/@legendapp/spark-file-system/src/path.ts +1 -9
- package/vendor/node_modules/@legendapp/spark-file-system/windows/SparkFileSystem/SparkFileSystem.h +102 -26
- package/vendor/node_modules/@legendapp/spark-file-system/windows/SparkFileSystem/SparkFileSystem.vcxproj +2 -0
- package/vendor/node_modules/@legendapp/spark-global-shortcuts/RNDesktopGlobalShortcuts.podspec +1 -0
- package/vendor/node_modules/@legendapp/spark-global-shortcuts/macos/RNDesktopGlobalShortcuts.mm +7 -4
- package/vendor/node_modules/@legendapp/spark-global-shortcuts/package.json +4 -3
- package/vendor/node_modules/@legendapp/spark-global-shortcuts/src/NativeDesktopGlobalShortcuts.ts +1 -1
- package/vendor/node_modules/@legendapp/spark-global-shortcuts/src/index.ts +39 -10
- package/vendor/node_modules/@legendapp/spark-global-shortcuts/windows/SparkGlobalShortcuts/SparkGlobalShortcuts.h +5 -4
- package/vendor/node_modules/@legendapp/spark-message-dialog/macos/RNDesktopMessageDialog.mm +2 -2
- package/vendor/node_modules/@legendapp/spark-message-dialog/package.json +2 -2
- package/vendor/node_modules/@legendapp/spark-message-dialog/src/NativeDesktopMessageDialog.ts +1 -1
- package/vendor/node_modules/@legendapp/spark-message-dialog/src/index.ts +48 -11
- package/vendor/node_modules/@legendapp/spark-native-menu/ios/RNNativeMenu.mm +141 -609
- package/vendor/node_modules/@legendapp/spark-native-menu/package.json +9 -4
- package/vendor/node_modules/@legendapp/spark-native-menu/src/NativeMenu.ts +2 -7
- package/vendor/node_modules/@legendapp/spark-native-menu/src/api.ts +76 -121
- package/vendor/node_modules/@legendapp/spark-native-menu/src/hooks.ts +97 -0
- package/vendor/node_modules/@legendapp/spark-native-menu/src/windows-menus.ts +43 -37
- package/vendor/node_modules/@legendapp/spark-notifications/macos/RNDesktopNotifications.mm +75 -30
- package/vendor/node_modules/@legendapp/spark-notifications/package.json +2 -2
- package/vendor/node_modules/@legendapp/spark-notifications/src/NativeDesktopNotifications.ts +1 -1
- package/vendor/node_modules/@legendapp/spark-notifications/src/index.ts +130 -42
- package/vendor/node_modules/@legendapp/spark-notifications/windows/SparkNotifications/SparkNotifications.h +46 -8
- package/vendor/node_modules/@legendapp/spark-processes/macos/RNDesktopProcesses.mm +94 -21
- package/vendor/node_modules/@legendapp/spark-processes/package.json +4 -3
- package/vendor/node_modules/@legendapp/spark-processes/src/NativeDesktopProcesses.ts +1 -1
- package/vendor/node_modules/@legendapp/spark-processes/src/index.ts +124 -28
- package/vendor/node_modules/@legendapp/spark-processes/src/types.ts +34 -0
- package/vendor/node_modules/@legendapp/spark-processes/windows/SparkProcesses/SparkProcesses.h +83 -34
- package/vendor/node_modules/@legendapp/spark-processes/windows/SparkProcesses/SparkProcesses.vcxproj +2 -0
- package/vendor/node_modules/@legendapp/spark-secure-storage/macos/RNDesktopSecureStorage.mm +49 -40
- package/vendor/node_modules/@legendapp/spark-secure-storage/package.json +2 -2
- package/vendor/node_modules/@legendapp/spark-secure-storage/src/NativeDesktopSecureStorage.ts +1 -1
- package/vendor/node_modules/@legendapp/spark-secure-storage/src/desktop.ts +16 -14
- package/vendor/node_modules/@legendapp/spark-secure-storage/src/expo.ts +0 -1
- package/vendor/node_modules/@legendapp/spark-secure-storage/src/options.ts +3 -2
- package/vendor/node_modules/@legendapp/spark-secure-storage/src/unavailable.ts +6 -3
- package/vendor/node_modules/@legendapp/spark-settings/package.json +10 -3
- package/vendor/node_modules/@legendapp/spark-settings/src/fileStorage.ts +11 -0
- package/vendor/node_modules/@legendapp/spark-settings/src/index.ts +7 -9
- package/vendor/node_modules/@legendapp/spark-settings/src/storage/index.ts +142 -0
- package/vendor/node_modules/@legendapp/spark-settings/src/store.ts +63 -21
- package/vendor/node_modules/@legendapp/spark-settings-ui/package.json +20 -0
- package/vendor/node_modules/@legendapp/spark-settings-ui/src/index.tsx +436 -0
- package/vendor/node_modules/@legendapp/spark-settings-ui/src/options.ts +10 -0
- package/vendor/node_modules/@legendapp/spark-sqlite/package.json +3 -3
- package/vendor/node_modules/@legendapp/spark-sqlite/src/database.ts +182 -0
- package/vendor/node_modules/@legendapp/spark-sqlite/src/index.ts +19 -6
- package/vendor/node_modules/@legendapp/spark-sqlite/src/types.ts +22 -0
- package/vendor/node_modules/@legendapp/spark-system/macos/RNDesktopSystem.mm +36 -11
- package/vendor/node_modules/@legendapp/spark-system/package.json +2 -2
- package/vendor/node_modules/@legendapp/spark-system/src/NativeDesktopSystem.ts +1 -1
- package/vendor/node_modules/@legendapp/spark-system/src/index.ts +89 -32
- package/vendor/node_modules/@legendapp/spark-system/windows/SparkSystem/SparkSystem.h +8 -4
- package/vendor/node_modules/@legendapp/spark-tray/macos/RNDesktopTray.mm +20 -8
- package/vendor/node_modules/@legendapp/spark-tray/package.json +2 -2
- package/vendor/node_modules/@legendapp/spark-tray/src/NativeDesktopTray.ts +1 -1
- package/vendor/node_modules/@legendapp/spark-tray/src/index.ts +91 -34
- package/vendor/node_modules/@legendapp/spark-tray/windows/SparkTray/SparkTray.h +45 -15
- package/vendor/node_modules/@legendapp/spark-ui/macos/RNSparkButton.mm +2 -1
- package/vendor/node_modules/@legendapp/spark-ui/macos/RNSparkTextInput.mm +10 -2
- package/vendor/node_modules/@legendapp/spark-ui/macos/appkit-split-view/RNSidebarSplitViewComponent.h +15 -0
- package/vendor/node_modules/@legendapp/spark-ui/macos/appkit-split-view/RNSidebarSplitViewComponent.mm +1182 -0
- package/vendor/node_modules/@legendapp/spark-ui/macos/glass-effect-view/RNGlassEffectView.mm +72 -0
- package/vendor/node_modules/@legendapp/spark-ui/macos/native-select/RNNativeSegmentedControl.h +15 -0
- package/vendor/node_modules/@legendapp/spark-ui/macos/native-select/RNNativeSegmentedControl.mm +194 -0
- package/vendor/node_modules/@legendapp/spark-ui/macos/native-select/RNNativeSelect.h +15 -0
- package/vendor/node_modules/@legendapp/spark-ui/macos/native-select/RNNativeSelect.mm +180 -0
- package/vendor/node_modules/@legendapp/spark-ui/macos/sf-symbol/RNSFSymbol.h +15 -0
- package/vendor/node_modules/@legendapp/spark-ui/macos/sf-symbol/RNSFSymbol.mm +155 -0
- package/vendor/node_modules/@legendapp/spark-ui/macos/sidebar/RNSidebar.h +18 -0
- package/vendor/node_modules/@legendapp/spark-ui/macos/sidebar/RNSidebar.mm +645 -0
- package/vendor/node_modules/@legendapp/spark-ui/macos/text-input-search/RNTextInputSearch.h +15 -0
- package/vendor/node_modules/@legendapp/spark-ui/macos/text-input-search/RNTextInputSearch.mm +164 -0
- package/vendor/node_modules/@legendapp/spark-ui/package.json +16 -4
- package/vendor/node_modules/@legendapp/spark-ui/src/SparkSelectNativeComponent.ts +3 -1
- package/vendor/node_modules/@legendapp/spark-ui/src/SparkTextInputNativeComponent.ts +6 -2
- package/vendor/node_modules/@legendapp/spark-ui/src/appkit-split-view/SidebarSplitViewNativeComponent.ts +31 -0
- package/vendor/node_modules/@legendapp/spark-ui/src/appkit-split-view/index.tsx +77 -0
- package/vendor/node_modules/@legendapp/spark-ui/src/availability.ts +10 -0
- package/vendor/node_modules/@legendapp/spark-ui/src/classnames/index.ts +8 -0
- package/vendor/node_modules/@legendapp/spark-ui/src/control.ts +42 -0
- package/vendor/node_modules/@legendapp/spark-ui/src/desktop.tsx +56 -0
- package/vendor/node_modules/@legendapp/spark-ui/src/glass-effect-view/index.tsx +15 -0
- package/vendor/node_modules/@legendapp/spark-ui/src/index.android.tsx +35 -21
- package/vendor/node_modules/@legendapp/spark-ui/src/index.ios.tsx +55 -26
- package/vendor/node_modules/@legendapp/spark-ui/src/index.tsx +1 -27
- package/vendor/node_modules/@legendapp/spark-ui/src/index.web.tsx +45 -14
- package/vendor/node_modules/@legendapp/spark-ui/src/index.windows.tsx +1 -42
- package/vendor/node_modules/@legendapp/spark-ui/src/mobile-input.tsx +11 -0
- package/vendor/node_modules/@legendapp/spark-ui/src/native-select/NativeSegmentedControlNativeComponent.ts +17 -0
- package/vendor/node_modules/@legendapp/spark-ui/src/native-select/NativeSelectNativeComponent.ts +17 -0
- package/vendor/node_modules/@legendapp/spark-ui/src/select.ts +5 -3
- package/vendor/node_modules/@legendapp/spark-ui/src/sf-symbol/SFSymbolNativeComponent.ts +13 -0
- package/vendor/node_modules/@legendapp/spark-ui/src/sf-symbol/index.tsx +27 -0
- package/vendor/node_modules/@legendapp/spark-ui/src/sidebar/SidebarItemNativeComponent.ts +25 -0
- package/vendor/node_modules/@legendapp/spark-ui/src/sidebar/SidebarNativeComponent.ts +24 -0
- package/vendor/node_modules/@legendapp/spark-ui/src/sidebar/index.tsx +104 -0
- package/vendor/node_modules/@legendapp/spark-ui/src/specialized.ts +22 -0
- package/vendor/node_modules/@legendapp/spark-ui/src/text-input-search/TextInputSearchNativeComponent.ts +33 -0
- package/vendor/node_modules/@legendapp/spark-ui/src/text-input-search/index.tsx +34 -0
- package/vendor/node_modules/@legendapp/spark-ui/src/types.ts +30 -19
- package/vendor/node_modules/@legendapp/spark-ui/uniwind.ts +3 -1
- package/vendor/node_modules/@legendapp/spark-ui/uniwind.web.ts +3 -1
- package/vendor/node_modules/@legendapp/spark-ui/windows/SparkUI/SparkUI.h +16 -11
- package/vendor/node_modules/@legendapp/spark-updates/macos/RNDesktopUpdates.mm +21 -8
- package/vendor/node_modules/@legendapp/spark-updates/package.json +2 -2
- package/vendor/node_modules/@legendapp/spark-updates/src/NativeDesktopUpdates.ts +3 -2
- package/vendor/node_modules/@legendapp/spark-updates/src/index.ts +71 -15
- package/vendor/node_modules/@legendapp/spark-webview/package.json +2 -2
- package/vendor/node_modules/@legendapp/spark-webview/src/WebView.tsx +11 -0
- package/vendor/node_modules/@legendapp/spark-webview/src/adapter.ts +55 -0
- package/vendor/node_modules/@legendapp/spark-webview/src/index.ts +2 -2
- package/vendor/node_modules/@legendapp/spark-webview/src/types.ts +32 -0
- package/vendor/node_modules/@legendapp/spark-webview/src/view-props.ts +28 -0
- package/vendor/node_modules/@legendapp/spark-window-options/index.cjs +51 -14
- package/vendor/node_modules/@legendapp/spark-window-options/index.d.ts +21 -8
- package/vendor/node_modules/@legendapp/spark-window-options/package.json +1 -1
- package/windows-macos.ts +1 -0
- package/expo-metro.cjs +0 -1
- package/message-dialog.ts +0 -1
- package/universal.cjs +0 -1
- package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/src/accelerator.ts +0 -22
- package/vendor/node_modules/@legendapp/spark-desktop-windows/src/windows-options.ts +0 -11
- package/vendor/node_modules/@legendapp/spark-file-dialog/src/index.windows.ts +0 -15
- package/vendor/node_modules/@legendapp/spark-global-shortcuts/src/accelerator.ts +0 -22
- package/vendor/node_modules/@legendapp/spark-ui/macos/RNSparkSelect.h +0 -4
- 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}
|
|
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
|
|
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 ||
|
|
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.
|
|
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
|
|
42
|
-
|
|
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
|
|
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
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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 =
|
|
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
|
-
|
|
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 {
|
|
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 (
|
|
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
|
-
/**
|
|
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
|
|
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.
|
|
4
|
-
"revision": "
|
|
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.
|
|
8
|
-
"size":
|
|
9
|
-
"sha256": "
|
|
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.
|
|
13
|
-
"size":
|
|
14
|
-
"sha256": "
|
|
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.
|
|
18
|
-
"size":
|
|
19
|
-
"sha256": "
|
|
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.
|
|
23
|
-
"size":
|
|
24
|
-
"sha256": "
|
|
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.
|
|
30
|
-
"size":
|
|
31
|
-
"sha256": "
|
|
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": "
|
|
39
|
+
"fingerprint": "6925832e8790b3253cb7509aacc5978ee90da2e15b884492624b1b43945291f5"
|
|
35
40
|
}
|
|
36
41
|
}
|
|
37
42
|
}
|