From e0116394d45e184274762c935cdfa3bb08605a5f Mon Sep 17 00:00:00 2001 From: Foxster Date: Thu, 14 Dec 2023 19:33:38 -0800 Subject: [PATCH] Workaround for broken dynamic imports on Safari 17.2 --- common/modules/constants.js | 120 +++++++++++++++++++----------------- index.js | 4 +- view/app/app.js | 9 +-- 3 files changed, 73 insertions(+), 60 deletions(-) diff --git a/common/modules/constants.js b/common/modules/constants.js index da0c4fa..d66481a 100644 --- a/common/modules/constants.js +++ b/common/modules/constants.js @@ -13,117 +13,127 @@ export const sourceURL = urlSearchParams.get('source')?.replaceAll("+", "%2B"); // https://stackoverflow.com/a/8943487 export const urlRegex = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; +export const sources = [ + "https://therealfoxster.github.io/altsource/apps.json", + "https://qnblackcat.github.io/AltStore/apps.json", + "https://quarksources.github.io/dist/quantumsource.min.json", + "https://quarksources.github.io/dist/quantumsource%2B%2B.min.json", + "https://alt.getutm.app", + "https://flyinghead.github.io/flycast-builds/altstore.json", + "https://provenance-emu.com/apps.json" +]; + export const entitlements = { "com.apple.security.application-groups": { - name: "App Groups", - description: "Allow app to share files with other apps and app extensions in the same App Group.", - icon: "columns-gap" + "name": "App Groups", + "description": "Allow app to share files with other apps and app extensions in the same App Group.", + "icon": "columns-gap" }, "com.apple.developer.associated-domains": { - name: "Associated Domains", - description: "The associated domains for specific services, such as shared web credentials, universal links, and App Clips.", - icon: "globe2" + "name": "Associated Domains", + "description": "The associated domains for specific services, such as shared web credentials, universal links, and App Clips.", + "icon": "globe2" }, "com.apple.developer.carplay-audio": { - name: "CarPlay Audio", - description: "Allows the app the provide audio content for CarPlay.", - icon: "car-front-fill" + "name": "CarPlay Audio", + "description": "Allows the app the provide audio content for CarPlay.", + "icon": "car-front-fill" }, "get-task-allow": { - name: "Debuggable", - description: "Allow developers to attach a debugger to this app. This permission is required for JIT to work.", - icon: "tools" + "name": "Debuggable", + "description": "Allow developers to attach a debugger to this app. This permission is required for JIT to work.", + "icon": "tools" }, "com.apple.developer.device-information.user-assigned-device-name": { - name: "Device Name", - description: "Grants access to the user-assigned device name instead of a generic device name.", - icon: "phone-fill" + "name": "Device Name", + "description": "Grants access to the user-assigned device name instead of a generic device name.", + "icon": "phone-fill" }, "keychain-access-groups": { - name: "Keychain", - description: "Allows app to read and write secure data to the system's keychain.", - icon: "key-fill" + "name": "Keychain", + "description": "Allows app to read and write secure data to the system's keychain.", + "icon": "key-fill" }, "com.apple.developer.networking.multicast": { - name: "Multicast", - description: "App can send or receive IP multicast traffic.", - icon: "globe2" + "name": "Multicast", + "description": "App can send or receive IP multicast traffic.", + "icon": "globe2" }, "aps-environment": { - name: "Push Notifications", - description: "App can send push notifications.", - icon: "app-indicator" + "name": "Push Notifications", + "description": "App can send push notifications.", + "icon": "app-indicator" }, "com.apple.developer.applesignin": { - name: "Sign in with Apple", - description: "Allows sign in with Apple.", - icon: "apple" + "name": "Sign in with Apple", + "description": "Allows sign in with Apple.", + "icon": "apple" }, "com.apple.developer.siri": { - name: "Siri", - description: "Allows app to handle Siri requests.", - icon: "mic-fill" + "name": "Siri", + "description": "Allows app to handle Siri requests.", + "icon": "mic-fill" }, "com.apple.developer.networking.wifi-info": { - name: "Wi-Fi Information Access", - description: "Allows app to access information about the connected Wi-Fi network.", - icon: "wifi" + "name": "Wi-Fi Information Access", + "description": "Allows app to access information about the connected Wi-Fi network.", + "icon": "wifi" } }; export const privacy = { "AppleMusic": { - icon: "music-note-beamed" + "icon": "music-note-beamed" }, "BluetoothAlways": { - name: "Bluetooth", - icon: "bluetooth" + "name": "Bluetooth", + "icon": "bluetooth" }, "BluetoothPeripheral": { - name: "Bluetooth (Peripherals)", - icon: "bluetooth" + "name": "Bluetooth (Peripherals)", + "icon": "bluetooth" }, "Contacts": { - icon: "person-circle" + "icon": "person-circle" }, "Camera": { - icon: "camera-fill" + "icon": "camera-fill" }, "FaceID": { - name: "Face ID", - icon: "person-bounding-box" + "name": "Face ID", + "icon": "person-bounding-box" }, "LocalNetwork": { - icon: "globe2" + "icon": "globe2" }, "LocationWhenInUse": { - name: "Location (When Using)", - icon: "cursor-fill" + "name": "Location (When Using)", + "icon": "cursor-fill" }, "Microphone": { - icon: "mic-fill" + "icon": "mic-fill" }, "PhotoLibrary": { - name: "Photos", - icon: "images" + "name": "Photos", + "icon": "images" }, "PhotoLibraryAdd": { - name: "Photos (Add)", - icon: "image" + "name": "Photos (Add)", + "icon": "image" }, "UserTracking": { - icon: "person-vcard-fill" - }, + "icon": "person-vcard-fill" + } }; export const legacyPermissions = { "background-audio": { - icon: "volume-up-fill" + "icon": "volume-up-fill" }, "background-fetch": { - icon: "arrow-repeat" + "icon": "arrow-repeat" }, "photos": { - icon: "images" + "icon": "images" } }; \ No newline at end of file diff --git a/index.js b/index.js index 5f38eda..0056a4d 100644 --- a/index.js +++ b/index.js @@ -8,7 +8,9 @@ import { urlSearchParams, sourceURL } from "./common/modules/constants.js"; import { isValidHTTPURL, open } from "./common/modules/utilities.js"; -const { default: sources } = await import("./common/assets/sources.json", { assert: { type: "json" } }); +// import sources from "./common/assets/sources.json" assert { type: "json" }; // Doesn't work in Safari +// const { default: sources } = await import("./common/assets/sources.json", {assert: { type: "json" } }); // Broken on Safari 17.2 +import { sources } from "./common/modules/constants.js"; (function main() { for (const url of sources) diff --git a/view/app/app.js b/view/app/app.js index e42a96c..6e0d83e 100644 --- a/view/app/app.js +++ b/view/app/app.js @@ -10,12 +10,13 @@ import { urlSearchParams, sourceURL } from "../../common/modules/constants.js"; import { formatString, insertSpaceInCamelString, insertSpaceInSnakeString, formatVersionDate, open } from "../../common/modules/utilities.js"; import { main } from "../../common/modules/main.js"; import { AppPermissionItem } from "../../common/components/AppPermissionItem.js"; -// import { privacy, entitlements, legacyPermissions } from "../../modules/constants.js"; +import { privacy, entitlements, legacyPermissions } from "../../common/modules/constants.js"; // Dynamic imports (https://stackoverflow.com/a/76845572/19227228) -const { default: privacy } = await import("../../common/assets/privacy.json", { assert: { type: "json" } }) -const { default: entitlements } = await import("../../common/assets/entitlements.json", { assert: { type: "json" } }) -const { default: legacyPermissions } = await import("../../common/assets/legacy-permissions.json", { assert: { type: "json" } }) +// Broken on Safari 17.2 +// const { default: privacy } = await import("../../common/assets/privacy.json", { assert: { type: "json" } }) +// const { default: entitlements } = await import("../../common/assets/entitlements.json", { assert: { type: "json" } }) +// const { default: legacyPermissions } = await import("../../common/assets/legacy-permissions.json", { assert: { type: "json" } }) const fallbackURL = `../?source=${sourceURL}`;