@rynt/sdk 0.9.53
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/README.md +122 -0
- package/REGISTRIES.md +189 -0
- package/env.d.ts +11 -0
- package/host-shims.d.ts +30 -0
- package/package.json +88 -0
- package/src/extension-marketplace/api-types.ts +141 -0
- package/src/extension-marketplace/client.ts +296 -0
- package/src/extension-marketplace/index.ts +22 -0
- package/src/extension-marketplace/schemas.ts +178 -0
- package/src/extensions/ExtensionRoutePage.vue +17 -0
- package/src/extensions/context.ts +37 -0
- package/src/extensions/disabled-folder.ts +21 -0
- package/src/extensions/extension-expose-map.ts +5 -0
- package/src/extensions/extension-expose.ts +48 -0
- package/src/extensions/graph.ts +67 -0
- package/src/extensions/index.ts +251 -0
- package/src/extensions/invite-handler/types.ts +20 -0
- package/src/extensions/launcher-entities/create-launcher-entity.ts +25 -0
- package/src/extensions/launcher-entities/keys.ts +46 -0
- package/src/extensions/launcher-entities/launcher-entity-components.ts +177 -0
- package/src/extensions/launcher-entities/props-map.ts +69 -0
- package/src/extensions/launcher-entities/registry.ts +32 -0
- package/src/extensions/launcher-models/apis/accounts-contracts.ts +102 -0
- package/src/extensions/launcher-models/apis/launcher-model-apis.ts +553 -0
- package/src/extensions/launcher-models/keys.ts +23 -0
- package/src/extensions/launcher-models/public.ts +9 -0
- package/src/extensions/launcher-models/registry-core.ts +34 -0
- package/src/extensions/manifest-types.ts +22 -0
- package/src/extensions/manifest.ts +46 -0
- package/src/extensions/marketplace-open-key.ts +26 -0
- package/src/extensions/plugin-types.ts +44 -0
- package/src/extensions/plugin.ts +62 -0
- package/src/extensions/registries/bootstrap.ts +11 -0
- package/src/extensions/registries/builtins/account-provider.ts +6 -0
- package/src/extensions/registries/builtins/app-topbar-left-widgets.ts +6 -0
- package/src/extensions/registries/builtins/app-topbar-right-widgets.ts +6 -0
- package/src/extensions/registries/builtins/app-topbar-status-widgets.ts +6 -0
- package/src/extensions/registries/builtins/build-card-actions.ts +6 -0
- package/src/extensions/registries/builtins/build-card-after-meta.ts +6 -0
- package/src/extensions/registries/builtins/build-card-before-media.ts +6 -0
- package/src/extensions/registries/builtins/build-card-before-meta.ts +6 -0
- package/src/extensions/registries/builtins/build-card-footer-actions.ts +6 -0
- package/src/extensions/registries/builtins/build-detail-after-content.ts +6 -0
- package/src/extensions/registries/builtins/build-detail-before-content.ts +6 -0
- package/src/extensions/registries/builtins/build-detail-before-hero.ts +6 -0
- package/src/extensions/registries/builtins/build-detail-header-actions.ts +6 -0
- package/src/extensions/registries/builtins/build-detail-mod-row-actions.ts +6 -0
- package/src/extensions/registries/builtins/build-detail-resourcepack-row-actions.ts +6 -0
- package/src/extensions/registries/builtins/build-detail-right-column-bottom.ts +6 -0
- package/src/extensions/registries/builtins/build-detail-right-column-top.ts +6 -0
- package/src/extensions/registries/builtins/dialog-footer-actions.ts +6 -0
- package/src/extensions/registries/builtins/feed-after-content.ts +6 -0
- package/src/extensions/registries/builtins/feed-before-content.ts +6 -0
- package/src/extensions/registries/builtins/file-editor.ts +19 -0
- package/src/extensions/registries/builtins/friends-after-list.ts +6 -0
- package/src/extensions/registries/builtins/friends-before-list.ts +6 -0
- package/src/extensions/registries/builtins/index.ts +141 -0
- package/src/extensions/registries/builtins/invite-handler.ts +7 -0
- package/src/extensions/registries/builtins/library-after-content.ts +6 -0
- package/src/extensions/registries/builtins/library-before-content.ts +6 -0
- package/src/extensions/registries/builtins/loader.ts +8 -0
- package/src/extensions/registries/builtins/map-card-actions.ts +6 -0
- package/src/extensions/registries/builtins/map-card-after-meta.ts +6 -0
- package/src/extensions/registries/builtins/map-card-before-meta.ts +6 -0
- package/src/extensions/registries/builtins/map-card-footer-actions.ts +6 -0
- package/src/extensions/registries/builtins/map-detail-after-content.ts +6 -0
- package/src/extensions/registries/builtins/map-detail-before-content.ts +6 -0
- package/src/extensions/registries/builtins/map-detail-header-actions.ts +6 -0
- package/src/extensions/registries/builtins/markdown-editor-tiptap-extensions.ts +7 -0
- package/src/extensions/registries/builtins/markdown-editor-toolbar-actions.ts +6 -0
- package/src/extensions/registries/builtins/markdown-renderer-after-content.ts +6 -0
- package/src/extensions/registries/builtins/markdown-renderer-before-content.ts +6 -0
- package/src/extensions/registries/builtins/mod-details-footer-actions.ts +6 -0
- package/src/extensions/registries/builtins/mod-manage-actions.ts +6 -0
- package/src/extensions/registries/builtins/mod-provider.ts +5 -0
- package/src/extensions/registries/builtins/nav.ts +7 -0
- package/src/extensions/registries/builtins/page.ts +13 -0
- package/src/extensions/registries/builtins/projects-after-content.ts +6 -0
- package/src/extensions/registries/builtins/projects-before-content.ts +6 -0
- package/src/extensions/registries/builtins/resourcepack-manage-actions.ts +7 -0
- package/src/extensions/registries/builtins/server-card-actions.ts +6 -0
- package/src/extensions/registries/builtins/server-card-after-meta.ts +6 -0
- package/src/extensions/registries/builtins/server-card-before-meta.ts +6 -0
- package/src/extensions/registries/builtins/server-card-footer-actions.ts +6 -0
- package/src/extensions/registries/builtins/server-detail-after-content.ts +6 -0
- package/src/extensions/registries/builtins/server-detail-before-content.ts +6 -0
- package/src/extensions/registries/builtins/server-detail-header-actions.ts +6 -0
- package/src/extensions/registries/builtins/settings-after-sections.ts +6 -0
- package/src/extensions/registries/builtins/settings-before-sections.ts +6 -0
- package/src/extensions/registries/builtins/settings-section-widgets.ts +6 -0
- package/src/extensions/registries/builtins/shaderpack-manage-actions.ts +7 -0
- package/src/extensions/registries/builtins/shell.ts +5 -0
- package/src/extensions/registries/builtins/sidebar-after-content.ts +6 -0
- package/src/extensions/registries/builtins/sidebar-before-content.ts +6 -0
- package/src/extensions/registries/builtins/sidebar-footer-widgets.ts +6 -0
- package/src/extensions/registries/builtins/sidebar-header-widgets.ts +6 -0
- package/src/extensions/registries/builtins/sidebar.ts +11 -0
- package/src/extensions/registries/builtins/theme.ts +5 -0
- package/src/extensions/registries/builtins/user-card-after-meta.ts +6 -0
- package/src/extensions/registries/builtins/user-card-before-meta.ts +6 -0
- package/src/extensions/registries/builtins/user-menu-actions.ts +6 -0
- package/src/extensions/registries/builtins/user-menu-after-actions.ts +6 -0
- package/src/extensions/registries/builtins/user-menu-before-actions.ts +6 -0
- package/src/extensions/registries/builtins/user-strip.ts +5 -0
- package/src/extensions/registries/clear-extension-ui-registries.ts +15 -0
- package/src/extensions/registries/define-extension-registry.ts +58 -0
- package/src/extensions/registries/extension-host-api.ts +41 -0
- package/src/extensions/registries/extension-registry-api.ts +103 -0
- package/src/extensions/registries/extension-registry-payload-map.ts +9 -0
- package/src/extensions/registries/extension-scope.ts +41 -0
- package/src/extensions/registries/get-registry.ts +23 -0
- package/src/extensions/registries/index.ts +58 -0
- package/src/extensions/registries/manifest-rynt.ts +193 -0
- package/src/extensions/registries/registry-slot.ts +40 -0
- package/src/extensions/registries/registry-value-map.ts +89 -0
- package/src/extensions/registries/store.ts +206 -0
- package/src/extensions/resolve-extensions.ts +245 -0
- package/src/extensions/router-bridge.ts +103 -0
- package/src/extensions/session.ts +6 -0
- package/src/extensions/slug.ts +23 -0
- package/src/extensions/version.ts +147 -0
- package/src/host/extensions-composables.ts +33 -0
- package/src/host/extensions-init.ts +194 -0
- package/src/host/index.ts +11 -0
- package/src/host/launcher-models/index.ts +4 -0
- package/src/index.ts +229 -0
- package/src/minecraft-loader/base-loader.ts +102 -0
- package/src/minecraft-loader/index.ts +11 -0
- package/src/minecraft-loader/loader-registry.ts +72 -0
- package/src/shared/api/assets.ts +112 -0
- package/src/shared/api/auth.ts +283 -0
- package/src/shared/api/builds.ts +647 -0
- package/src/shared/api/config.ts +19 -0
- package/src/shared/api/download-stats.ts +103 -0
- package/src/shared/api/downloads.ts +36 -0
- package/src/shared/api/entity-authorship.ts +60 -0
- package/src/shared/api/events.ts +393 -0
- package/src/shared/api/friends.ts +140 -0
- package/src/shared/api/graphql.ts +87 -0
- package/src/shared/api/index.ts +23 -0
- package/src/shared/api/invites.ts +262 -0
- package/src/shared/api/library.ts +44 -0
- package/src/shared/api/maps.ts +385 -0
- package/src/shared/api/notify-websocket.ts +140 -0
- package/src/shared/api/posts.ts +357 -0
- package/src/shared/api/projectServers.ts +379 -0
- package/src/shared/api/serverMembers.ts +173 -0
- package/src/shared/api/users.ts +294 -0
- package/src/shared/composables/buildEditor/useBuildEditor.ts +66 -0
- package/src/shared/composables/buildManifest/buildManifest.ts +447 -0
- package/src/shared/composables/filesEditor/filesEditor.ts +346 -0
- package/src/shared/composables/index.ts +10 -0
- package/src/shared/composables/modsEditor/modsEditor.ts +1678 -0
- package/src/shared/composables/registrySlot/registry-slot-utils.ts +25 -0
- package/src/shared/composables/registrySlot/useRegistrySlotMissing.ts +35 -0
- package/src/shared/composables/resourcePacksEditor/resourcePacksEditor.ts +448 -0
- package/src/shared/composables/shaderPacksEditor/shaderPacksEditor.ts +395 -0
- package/src/shared/composables/useSkinRender.ts +70 -0
- package/src/shared/composables/useZlDeepLink.ts +178 -0
- package/src/shared/definitions/defineGraphCache.ts +216 -0
- package/src/shared/definitions/defineStore.ts +32 -0
- package/src/shared/definitions/index.ts +2 -0
- package/src/shared/minecraft-types/build-manifest.ts +611 -0
- package/src/shared/minecraft-types/index.ts +3 -0
- package/src/shared/minecraft-types/launcher-versions.ts +32 -0
- package/src/shared/minecraft-types/minecraft-launcher-types.ts +276 -0
- package/src/shared/mocks/index.ts +1 -0
- package/src/shared/mocks/navigation.ts +17 -0
- package/src/shared/mods/http.ts +45 -0
- package/src/shared/mods/index.ts +5 -0
- package/src/shared/mods/marketplace-editor-search.ts +266 -0
- package/src/shared/mods/marketplace-search-utils.ts +42 -0
- package/src/shared/mods/mod-marketplace-registry.ts +66 -0
- package/src/shared/mods/mod-marketplace-types.ts +28 -0
- package/src/shared/mods/providers/curseforge.ts +464 -0
- package/src/shared/mods/providers/index.ts +8 -0
- package/src/shared/mods/providers/modrinth.ts +402 -0
- package/src/shared/mods/resolve-mods-provider-loader-ids.ts +77 -0
- package/src/shared/mods/types.ts +76 -0
- package/src/shared/styles/index.css +713 -0
- package/src/shared/themes/index.ts +23 -0
- package/src/shared/themes/theme-tokens-black.json +126 -0
- package/src/shared/themes/theme-tokens-classic.json +126 -0
- package/src/shared/themes/theme-tokens-pink.json +126 -0
- package/src/shared/themes/theme-tokens.json +126 -0
- package/src/shared/themes/types.ts +85 -0
- package/src/shared/types/API_DOCUMENTATION.md +422 -0
- package/src/shared/types/account.ts +40 -0
- package/src/shared/types/build.ts +8 -0
- package/src/shared/types/entities.ts +181 -0
- package/src/shared/types/index.ts +6 -0
- package/src/shared/types/invite-payloads.ts +60 -0
- package/src/shared/types/navigation.ts +16 -0
- package/src/shared/types/running-build.ts +51 -0
- package/src/shared/types/serverMember.ts +17 -0
- package/src/shared/types/user.ts +55 -0
- package/src/shared/ui/base/Avatar.vue +262 -0
- package/src/shared/ui/base/Badge.vue +47 -0
- package/src/shared/ui/base/Button.vue +78 -0
- package/src/shared/ui/base/Divider.vue +42 -0
- package/src/shared/ui/base/Icon.vue +597 -0
- package/src/shared/ui/base/StatusIndicator.vue +44 -0
- package/src/shared/ui/base/index.ts +7 -0
- package/src/shared/ui/cards/InviteCard.vue +47 -0
- package/src/shared/ui/cards/index.ts +2 -0
- package/src/shared/ui/dialog/Dialog.vue +71 -0
- package/src/shared/ui/dialog/DialogContent.vue +31 -0
- package/src/shared/ui/dialog/DialogFooter.vue +14 -0
- package/src/shared/ui/dialog/DialogHeader.vue +41 -0
- package/src/shared/ui/dialog/index.ts +5 -0
- package/src/shared/ui/editors/AttachmentImagesEditor.vue +133 -0
- package/src/shared/ui/editors/ContentAttachmentsDisplay.vue +76 -0
- package/src/shared/ui/editors/MarkdownEditor.vue +956 -0
- package/src/shared/ui/editors/MarkdownRenderer.vue +299 -0
- package/src/shared/ui/editors/RichContentImageViewer.vue +85 -0
- package/src/shared/ui/editors/SocialPostMediaZone.vue +320 -0
- package/src/shared/ui/editors/index.ts +6 -0
- package/src/shared/ui/editors/markdown-editor-gallery.ts +234 -0
- package/src/shared/ui/editors/markdown-editor-image.ts +178 -0
- package/src/shared/ui/form/Checkbox.vue +38 -0
- package/src/shared/ui/form/FormField.vue +30 -0
- package/src/shared/ui/form/FormGrid.vue +38 -0
- package/src/shared/ui/form/ImageEditor.vue +598 -0
- package/src/shared/ui/form/Input.vue +72 -0
- package/src/shared/ui/form/Range.vue +65 -0
- package/src/shared/ui/form/Select.vue +76 -0
- package/src/shared/ui/form/Switch.vue +38 -0
- package/src/shared/ui/form/Textarea.vue +144 -0
- package/src/shared/ui/form/index.ts +9 -0
- package/src/shared/ui/index.ts +9 -0
- package/src/shared/ui/layout/BusyOverlay.vue +31 -0
- package/src/shared/ui/layout/Callout.vue +44 -0
- package/src/shared/ui/layout/Card.vue +38 -0
- package/src/shared/ui/layout/Container.vue +36 -0
- package/src/shared/ui/layout/EmptyState.vue +99 -0
- package/src/shared/ui/layout/EntityMediaRow.vue +54 -0
- package/src/shared/ui/layout/FilterResultsLayout.vue +22 -0
- package/src/shared/ui/layout/FloatingPanel.vue +37 -0
- package/src/shared/ui/layout/FullscreenDimmer.vue +11 -0
- package/src/shared/ui/layout/Grid.vue +40 -0
- package/src/shared/ui/layout/Inline.vue +59 -0
- package/src/shared/ui/layout/LoadingState.vue +39 -0
- package/src/shared/ui/layout/MediaBox.vue +47 -0
- package/src/shared/ui/layout/OverlayPanel.vue +28 -0
- package/src/shared/ui/layout/OverlayWaitPanel.vue +22 -0
- package/src/shared/ui/layout/PageSection.vue +43 -0
- package/src/shared/ui/layout/PageToolbar.vue +29 -0
- package/src/shared/ui/layout/Panel.vue +39 -0
- package/src/shared/ui/layout/ProgressBar.vue +49 -0
- package/src/shared/ui/layout/Section.vue +30 -0
- package/src/shared/ui/layout/SegmentedControl.vue +43 -0
- package/src/shared/ui/layout/SelectableCard.vue +46 -0
- package/src/shared/ui/layout/SelectableRow.vue +41 -0
- package/src/shared/ui/layout/Skeleton.vue +25 -0
- package/src/shared/ui/layout/SkeletonAvatar.vue +30 -0
- package/src/shared/ui/layout/SkeletonEntityCard.vue +20 -0
- package/src/shared/ui/layout/SkeletonFeedPost.vue +22 -0
- package/src/shared/ui/layout/SkeletonGrid.vue +18 -0
- package/src/shared/ui/layout/SkeletonListRow.vue +31 -0
- package/src/shared/ui/layout/SkeletonText.vue +25 -0
- package/src/shared/ui/layout/Stack.vue +42 -0
- package/src/shared/ui/layout/StateBlock.vue +44 -0
- package/src/shared/ui/layout/TwoPaneLayout.vue +35 -0
- package/src/shared/ui/layout/VirtualList.vue +160 -0
- package/src/shared/ui/layout/index.ts +35 -0
- package/src/shared/ui/layout/skeletonSurfaceStyles.ts +24 -0
- package/src/shared/ui/navigation/NavItem.vue +139 -0
- package/src/shared/ui/navigation/Tab.vue +61 -0
- package/src/shared/ui/navigation/Tabs.vue +37 -0
- package/src/shared/ui/navigation/index.ts +4 -0
- package/src/shared/ui/primitives/Action.vue +19 -0
- package/src/shared/ui/primitives/Block.vue +28 -0
- package/src/shared/ui/primitives/CanvasView.vue +19 -0
- package/src/shared/ui/primitives/Control.vue +24 -0
- package/src/shared/ui/primitives/ControlSelect.vue +19 -0
- package/src/shared/ui/primitives/ControlTextarea.vue +17 -0
- package/src/shared/ui/primitives/FieldLabel.vue +19 -0
- package/src/shared/ui/primitives/Form.vue +19 -0
- package/src/shared/ui/primitives/Heading.vue +29 -0
- package/src/shared/ui/primitives/Image.vue +17 -0
- package/src/shared/ui/primitives/LineBreak.vue +3 -0
- package/src/shared/ui/primitives/Link.vue +19 -0
- package/src/shared/ui/primitives/List.vue +28 -0
- package/src/shared/ui/primitives/ListItem.vue +19 -0
- package/src/shared/ui/primitives/OptionItem.vue +19 -0
- package/src/shared/ui/primitives/Text.vue +28 -0
- package/src/shared/ui/primitives/VideoView.vue +19 -0
- package/src/shared/ui/primitives/index.ts +19 -0
- package/src/shared/ui/primitives/resolveElement.ts +25 -0
- package/src/shared/ui/special/AngularAccent.vue +106 -0
- package/src/shared/ui/special/ExtensionRegistrySlotButton.vue +143 -0
- package/src/shared/ui/special/InfoRow.vue +39 -0
- package/src/shared/ui/special/LogViewer.vue +53 -0
- package/src/shared/ui/special/PageHeader.vue +23 -0
- package/src/shared/ui/special/RegistrySlotMissingCallout.vue +48 -0
- package/src/shared/ui/special/WelcomeCard.vue +32 -0
- package/src/shared/ui/special/index.ts +9 -0
- package/src/shared/utils/app-paths.ts +50 -0
- package/src/shared/utils/attachments.ts +16 -0
- package/src/shared/utils/autostart.ts +213 -0
- package/src/shared/utils/build-files.ts +439 -0
- package/src/shared/utils/build-manifest-init.ts +176 -0
- package/src/shared/utils/cloudinary.ts +67 -0
- package/src/shared/utils/cn.ts +7 -0
- package/src/shared/utils/download-stats-week.ts +165 -0
- package/src/shared/utils/entity-api-to-cache.ts +84 -0
- package/src/shared/utils/entity-build-from-api.ts +1 -0
- package/src/shared/utils/entity-display.ts +27 -0
- package/src/shared/utils/entity-map-from-api.ts +1 -0
- package/src/shared/utils/file-hash.ts +65 -0
- package/src/shared/utils/formatSize.ts +5 -0
- package/src/shared/utils/formatTime.ts +157 -0
- package/src/shared/utils/getAccountSkinRender.ts +32 -0
- package/src/shared/utils/index.ts +34 -0
- package/src/shared/utils/local-mods.ts +678 -0
- package/src/shared/utils/local-settings.ts +217 -0
- package/src/shared/utils/member-join-stats.ts +35 -0
- package/src/shared/utils/platform.ts +86 -0
- package/src/shared/utils/play-host-slug.ts +92 -0
- package/src/shared/utils/rich-content.ts +294 -0
- package/src/shared/utils/safeRequest.ts +23 -0
- package/src/shared/utils/semver.ts +81 -0
- package/src/shared/utils/serverPermissions.ts +155 -0
- package/src/shared/utils/skin-render-cache.ts +372 -0
- package/src/shared/utils/stripMarkdown.ts +45 -0
- package/src/shared/utils/transliterate.ts +74 -0
- package/src/shared/utils/updateAccountSkinRender.ts +64 -0
- package/src/shared/utils/updater.ts +218 -0
- package/src/shared/utils/uploadImage.ts +195 -0
- package/src/shared/utils/user-status.ts +9 -0
- package/src/tiptap/index.ts +7 -0
- package/tsconfig.json +13 -0
|
@@ -0,0 +1,447 @@
|
|
|
1
|
+
import { useLauncherModel, useLocalBuildsModel } from '@/models';
|
|
2
|
+
import { useFilesEditorModel } from '../filesEditor/filesEditor';
|
|
3
|
+
import { useModsEditorModel } from '../modsEditor/modsEditor';
|
|
4
|
+
import { useResourcePacksEditorModel } from '../resourcePacksEditor/resourcePacksEditor';
|
|
5
|
+
import { useShaderPacksEditorModel } from '../shaderPacksEditor/shaderPacksEditor';
|
|
6
|
+
import { defineStore } from '../../definitions/defineStore';
|
|
7
|
+
import { initializeBuildManifest } from '../../utils/build-manifest-init';
|
|
8
|
+
import type { BuildVersionManifest } from '../../minecraft-types/build-manifest';
|
|
9
|
+
import type {
|
|
10
|
+
LoaderGameVersion,
|
|
11
|
+
LoaderVersionSummary,
|
|
12
|
+
MinecraftVersion,
|
|
13
|
+
} from '../../minecraft-types/launcher-versions';
|
|
14
|
+
import { computed, ref, watch } from 'vue';
|
|
15
|
+
|
|
16
|
+
import { extensionRegistriesRevision } from '../../../extensions/registries/store';
|
|
17
|
+
import { isCoreLoaderSlotMissing } from '../../composables/registrySlot/registry-slot-utils';
|
|
18
|
+
|
|
19
|
+
export const useBuildManifestModel = defineStore(() => {
|
|
20
|
+
const localBuilds = useLocalBuildsModel();
|
|
21
|
+
const { saveManifest, buildsIndex, getManifestById } = localBuilds;
|
|
22
|
+
const { launcher, initialize, versionsManifest } = useLauncherModel();
|
|
23
|
+
|
|
24
|
+
/* ============================
|
|
25
|
+
* STATE
|
|
26
|
+
* ============================ */
|
|
27
|
+
|
|
28
|
+
const manifest = ref<BuildVersionManifest | null>(null);
|
|
29
|
+
|
|
30
|
+
const isLoading = ref<boolean>(true);
|
|
31
|
+
|
|
32
|
+
const minecraftVersions = ref<MinecraftVersion[]>([]);
|
|
33
|
+
const isLoadingMinecraftVersions = ref<boolean>(false);
|
|
34
|
+
|
|
35
|
+
const loaders = ref<{ id: string; name: string }[]>([]);
|
|
36
|
+
const isLoadingLoaders = ref<boolean>(false);
|
|
37
|
+
|
|
38
|
+
const loaderVersions = ref<LoaderVersionSummary[]>([]);
|
|
39
|
+
const isLoadingLoaderVersions = ref<boolean>(false);
|
|
40
|
+
|
|
41
|
+
// Store original manifest values to preserve loader versions that might be removed from available list
|
|
42
|
+
const originalManifestValues = ref<{
|
|
43
|
+
minecraftVersion: string;
|
|
44
|
+
loader: string;
|
|
45
|
+
loaderVersion: string;
|
|
46
|
+
} | null>(null);
|
|
47
|
+
|
|
48
|
+
// Track previous loader to detect when it changes
|
|
49
|
+
const previousLoader = ref<string | null>(null);
|
|
50
|
+
|
|
51
|
+
/** В манифесте указан лоадер, которого нет в реестре (расширение выключено и т.п.). */
|
|
52
|
+
const isManifestLoaderMissing = computed(() => {
|
|
53
|
+
void extensionRegistriesRevision.value;
|
|
54
|
+
return isCoreLoaderSlotMissing(manifest.value?._meta?.manifest?.loader);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
/* ============================
|
|
58
|
+
* EDITORS - создаем инстансы редакторов
|
|
59
|
+
* ============================ */
|
|
60
|
+
|
|
61
|
+
// Создаем инстансы редакторов, передавая им ref на manifest
|
|
62
|
+
const modsEditorInstance = useModsEditorModel(manifest);
|
|
63
|
+
const resourcePacksEditorInstance = useResourcePacksEditorModel(manifest);
|
|
64
|
+
const shaderPacksEditorInstance = useShaderPacksEditorModel(manifest);
|
|
65
|
+
const filesEditorInstance = useFilesEditorModel(manifest);
|
|
66
|
+
|
|
67
|
+
/* ============================
|
|
68
|
+
* INIT
|
|
69
|
+
* ============================ */
|
|
70
|
+
|
|
71
|
+
const init = async (_manifest: BuildVersionManifest | null) => {
|
|
72
|
+
isLoading.value = true;
|
|
73
|
+
|
|
74
|
+
try {
|
|
75
|
+
await initialize();
|
|
76
|
+
manifest.value = initializeBuildManifest(_manifest, _manifest?.id);
|
|
77
|
+
|
|
78
|
+
// Save original manifest values for preserving loader versions
|
|
79
|
+
if (manifest.value?._meta?.manifest) {
|
|
80
|
+
originalManifestValues.value = {
|
|
81
|
+
minecraftVersion:
|
|
82
|
+
manifest.value._meta.manifest.minecraftVersion || '',
|
|
83
|
+
loader: manifest.value._meta.manifest.loader || '',
|
|
84
|
+
loaderVersion: manifest.value._meta.manifest.loaderVersion || '',
|
|
85
|
+
};
|
|
86
|
+
// Initialize previous loader to current loader
|
|
87
|
+
previousLoader.value = manifest.value._meta.manifest.loader || null;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
await reloadLoaders();
|
|
91
|
+
await reloadMinecraftVersions();
|
|
92
|
+
await reloadLoaderVersions();
|
|
93
|
+
|
|
94
|
+
// Инициализируем редакторы (манифест уже передан при создании)
|
|
95
|
+
await Promise.all([
|
|
96
|
+
modsEditorInstance.init(manifest.value),
|
|
97
|
+
resourcePacksEditorInstance.init(manifest.value),
|
|
98
|
+
shaderPacksEditorInstance.init(manifest.value),
|
|
99
|
+
filesEditorInstance.init(manifest.value),
|
|
100
|
+
]);
|
|
101
|
+
|
|
102
|
+
isLoading.value = false;
|
|
103
|
+
} catch (error: any) {
|
|
104
|
+
isLoading.value = false;
|
|
105
|
+
throw error;
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
const reloadLoaders = async () => {
|
|
110
|
+
isLoadingLoaders.value = true;
|
|
111
|
+
loaders.value = await launcher.getLoaders();
|
|
112
|
+
isLoadingLoaders.value = false;
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
const reloadMinecraftVersions = async () => {
|
|
116
|
+
if (!manifest.value || !versionsManifest.value) {
|
|
117
|
+
minecraftVersions.value = [];
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
isLoadingMinecraftVersions.value = true;
|
|
122
|
+
|
|
123
|
+
if (manifest.value._meta.manifest.loader == 'vanilla') {
|
|
124
|
+
minecraftVersions.value = versionsManifest.value.versions || [];
|
|
125
|
+
} else if (
|
|
126
|
+
isCoreLoaderSlotMissing(manifest.value._meta.manifest.loader)
|
|
127
|
+
) {
|
|
128
|
+
minecraftVersions.value = [];
|
|
129
|
+
} else {
|
|
130
|
+
const versionIds = (
|
|
131
|
+
await launcher.getLoaderGameVersions(
|
|
132
|
+
manifest.value._meta.manifest.loader,
|
|
133
|
+
)
|
|
134
|
+
).map((ver: LoaderGameVersion) => ver.version);
|
|
135
|
+
minecraftVersions.value = versionsManifest.value?.versions.filter((ver: MinecraftVersion) =>
|
|
136
|
+
versionIds.includes(ver.id),
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
isLoadingMinecraftVersions.value = false;
|
|
141
|
+
};
|
|
142
|
+
const reloadLoaderVersions = async () => {
|
|
143
|
+
if (!manifest.value || manifest.value._meta.manifest.loader == 'vanilla') {
|
|
144
|
+
loaderVersions.value = [];
|
|
145
|
+
previousLoader.value = null;
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
isLoadingLoaderVersions.value = true;
|
|
149
|
+
|
|
150
|
+
const currentLoader = manifest.value._meta.manifest.loader;
|
|
151
|
+
const currentMinecraftVersion =
|
|
152
|
+
manifest.value._meta.manifest.minecraftVersion;
|
|
153
|
+
const loaderChanged =
|
|
154
|
+
previousLoader.value !== null && previousLoader.value !== currentLoader;
|
|
155
|
+
|
|
156
|
+
if (
|
|
157
|
+
currentLoader &&
|
|
158
|
+
currentLoader !== 'vanilla' &&
|
|
159
|
+
isCoreLoaderSlotMissing(currentLoader)
|
|
160
|
+
) {
|
|
161
|
+
loaderVersions.value = [];
|
|
162
|
+
previousLoader.value = currentLoader;
|
|
163
|
+
isLoadingLoaderVersions.value = false;
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
let availableVersions: LoaderVersionSummary[] = [];
|
|
168
|
+
// Get available loader versions from launcher
|
|
169
|
+
if (currentLoader && currentMinecraftVersion) {
|
|
170
|
+
availableVersions = await launcher.getLoaderVersions(
|
|
171
|
+
currentLoader,
|
|
172
|
+
currentMinecraftVersion,
|
|
173
|
+
);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// Check if we should preserve original loader version
|
|
177
|
+
const isOriginalContext =
|
|
178
|
+
originalManifestValues.value &&
|
|
179
|
+
originalManifestValues.value.loader === currentLoader &&
|
|
180
|
+
originalManifestValues.value.minecraftVersion ===
|
|
181
|
+
currentMinecraftVersion &&
|
|
182
|
+
originalManifestValues.value.loader !== '' &&
|
|
183
|
+
originalManifestValues.value.minecraftVersion !== '' &&
|
|
184
|
+
originalManifestValues.value.loaderVersion !== '';
|
|
185
|
+
|
|
186
|
+
if (isOriginalContext) {
|
|
187
|
+
// Check if original version is already in the list
|
|
188
|
+
const originalVersionExists = availableVersions.some(
|
|
189
|
+
(v) => v.version === originalManifestValues.value!.loaderVersion,
|
|
190
|
+
);
|
|
191
|
+
|
|
192
|
+
// If original version is not in the list, add it to the end
|
|
193
|
+
if (!originalVersionExists && originalManifestValues.value) {
|
|
194
|
+
loaderVersions.value = [
|
|
195
|
+
...availableVersions,
|
|
196
|
+
{
|
|
197
|
+
version: originalManifestValues.value.loaderVersion,
|
|
198
|
+
stable: true, // Assume stable if it was previously set
|
|
199
|
+
},
|
|
200
|
+
];
|
|
201
|
+
} else {
|
|
202
|
+
loaderVersions.value = availableVersions;
|
|
203
|
+
}
|
|
204
|
+
} else {
|
|
205
|
+
loaderVersions.value = availableVersions;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// Auto-select loader version
|
|
209
|
+
if (loaderVersions.value.length > 0 && manifest.value) {
|
|
210
|
+
const currentLoaderVersion = manifest.value._meta.manifest.loaderVersion;
|
|
211
|
+
const currentVersionExists = loaderVersions.value.some(
|
|
212
|
+
(v) => v.version === currentLoaderVersion,
|
|
213
|
+
);
|
|
214
|
+
|
|
215
|
+
// If loader changed, always select first version (ignore current version even if it exists)
|
|
216
|
+
if (loaderChanged) {
|
|
217
|
+
manifest.value._meta.manifest.loaderVersion =
|
|
218
|
+
loaderVersions.value[0].version;
|
|
219
|
+
}
|
|
220
|
+
// If current version doesn't exist or is empty, auto-select
|
|
221
|
+
else if (!currentVersionExists || !currentLoaderVersion) {
|
|
222
|
+
if (isOriginalContext && originalManifestValues.value) {
|
|
223
|
+
// Use original version if in original context
|
|
224
|
+
manifest.value._meta.manifest.loaderVersion =
|
|
225
|
+
originalManifestValues.value.loaderVersion;
|
|
226
|
+
} else {
|
|
227
|
+
// Otherwise use first available version
|
|
228
|
+
manifest.value._meta.manifest.loaderVersion =
|
|
229
|
+
loaderVersions.value[0].version;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
// If loader didn't change and current version exists, keep it (don't change)
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// Update previous loader for next comparison
|
|
236
|
+
previousLoader.value = currentLoader;
|
|
237
|
+
|
|
238
|
+
isLoadingLoaderVersions.value = false;
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
// METHODS
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Delete files of mods/resourcepacks that were removed from manifest
|
|
245
|
+
*/
|
|
246
|
+
function deleteRemovedModFiles(
|
|
247
|
+
oldManifest: BuildVersionManifest,
|
|
248
|
+
newManifest: BuildVersionManifest,
|
|
249
|
+
): void {
|
|
250
|
+
// Check if we're in Node.js environment
|
|
251
|
+
const isNodeEnv = typeof window !== 'undefined' && (window as any).nw;
|
|
252
|
+
if (!isNodeEnv) return;
|
|
253
|
+
|
|
254
|
+
try {
|
|
255
|
+
const nw = (window as any).nw;
|
|
256
|
+
const fs = nw.require('fs');
|
|
257
|
+
const path = nw.require('path');
|
|
258
|
+
|
|
259
|
+
// Get build directory path
|
|
260
|
+
const buildDirEntry = buildsIndex.value.get(newManifest.id);
|
|
261
|
+
if (!buildDirEntry) {
|
|
262
|
+
return; // Build directory entry not found
|
|
263
|
+
}
|
|
264
|
+
const buildDir = buildDirEntry.path;
|
|
265
|
+
if (!fs.existsSync(buildDir)) {
|
|
266
|
+
return; // Build directory doesn't exist, nothing to delete
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
const deleteFileAndDisabledPair = (relativePath: string, label: string) => {
|
|
270
|
+
const filePath = path.join(buildDir, relativePath);
|
|
271
|
+
const fileName = path.basename(relativePath);
|
|
272
|
+
const fileNameWithoutDisabled = fileName.replace(/\.disabled$/, '');
|
|
273
|
+
const fileDir = path.dirname(relativePath);
|
|
274
|
+
const disabledPath = path.join(buildDir, fileDir, `${fileNameWithoutDisabled}.disabled`);
|
|
275
|
+
|
|
276
|
+
try {
|
|
277
|
+
if (fs.existsSync(filePath)) {
|
|
278
|
+
fs.unlinkSync(filePath);
|
|
279
|
+
console.log(`[deleteRemovedModFiles] Deleted ${label} file: ${filePath}`);
|
|
280
|
+
}
|
|
281
|
+
if (fs.existsSync(disabledPath)) {
|
|
282
|
+
fs.unlinkSync(disabledPath);
|
|
283
|
+
console.log(`[deleteRemovedModFiles] Deleted disabled ${label} file: ${disabledPath}`);
|
|
284
|
+
}
|
|
285
|
+
} catch (error) {
|
|
286
|
+
console.warn(`[deleteRemovedModFiles] Failed to delete ${label} file ${filePath}:`, error);
|
|
287
|
+
}
|
|
288
|
+
};
|
|
289
|
+
|
|
290
|
+
const deleteRemovedAndReplacedFiles = (
|
|
291
|
+
oldEntries: Array<{ id: string; files?: Array<{ path: string }> }>,
|
|
292
|
+
newEntries: Array<{ id: string; files?: Array<{ path: string }> }>,
|
|
293
|
+
label: 'mod' | 'resource pack'
|
|
294
|
+
) => {
|
|
295
|
+
const newById = new Map(newEntries.map((entry) => [entry.id, entry]));
|
|
296
|
+
|
|
297
|
+
for (const oldEntry of oldEntries) {
|
|
298
|
+
const newEntry = newById.get(oldEntry.id);
|
|
299
|
+
const oldFiles = oldEntry.files || [];
|
|
300
|
+
|
|
301
|
+
// Entry removed completely
|
|
302
|
+
if (!newEntry) {
|
|
303
|
+
for (const oldFile of oldFiles) {
|
|
304
|
+
deleteFileAndDisabledPair(oldFile.path, label);
|
|
305
|
+
}
|
|
306
|
+
continue;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// Entry still exists, but version/file set may have changed
|
|
310
|
+
const newFilePaths = new Set((newEntry.files || []).map((f) => f.path));
|
|
311
|
+
for (const oldFile of oldFiles) {
|
|
312
|
+
if (!newFilePaths.has(oldFile.path)) {
|
|
313
|
+
deleteFileAndDisabledPair(oldFile.path, label);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
};
|
|
318
|
+
|
|
319
|
+
deleteRemovedAndReplacedFiles(
|
|
320
|
+
oldManifest.mods || [],
|
|
321
|
+
newManifest.mods || [],
|
|
322
|
+
'mod'
|
|
323
|
+
);
|
|
324
|
+
|
|
325
|
+
deleteRemovedAndReplacedFiles(
|
|
326
|
+
oldManifest.resourcePacks || [],
|
|
327
|
+
newManifest.resourcePacks || [],
|
|
328
|
+
'resource pack'
|
|
329
|
+
);
|
|
330
|
+
} catch (error) {
|
|
331
|
+
console.error(
|
|
332
|
+
'[deleteRemovedModFiles] Error deleting removed mod/resourcepack files:',
|
|
333
|
+
error,
|
|
334
|
+
);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
const save = async (): Promise<void> => {
|
|
339
|
+
// Обновляем выбранные файлы в манифесте перед сохранением
|
|
340
|
+
filesEditorInstance.updateManifestSelectedFiles();
|
|
341
|
+
|
|
342
|
+
const { minecraftVersion, loader, loaderVersion } =
|
|
343
|
+
manifest.value!._meta.manifest;
|
|
344
|
+
|
|
345
|
+
if (loader && loaderVersion) {
|
|
346
|
+
manifest.value!.inheritsFrom = `${loader}::${minecraftVersion}:${loaderVersion}`;
|
|
347
|
+
} else {
|
|
348
|
+
manifest.value!.inheritsFrom = minecraftVersion;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
// Get old manifest from cache before saving
|
|
352
|
+
const oldManifestId = manifest.value!.id;
|
|
353
|
+
const oldManifest = getManifestById(oldManifestId);
|
|
354
|
+
const newManifest = manifest.value!;
|
|
355
|
+
|
|
356
|
+
// Логируем для отладки (только в dev режиме)
|
|
357
|
+
if (process.env.NODE_ENV === 'development') {
|
|
358
|
+
console.log('[buildManifest.save] Сохраняем манифест:', {
|
|
359
|
+
id: newManifest.id,
|
|
360
|
+
minecraftVersion: newManifest._meta?.manifest?.minecraftVersion,
|
|
361
|
+
loader: newManifest._meta?.manifest?.loader,
|
|
362
|
+
loaderVersion: newManifest._meta?.manifest?.loaderVersion,
|
|
363
|
+
modsCount: newManifest.mods?.length || 0,
|
|
364
|
+
inheritsFrom: newManifest.inheritsFrom,
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
// Save manifest and get new ID (if it was generated)
|
|
369
|
+
const savedId = saveManifest(newManifest);
|
|
370
|
+
|
|
371
|
+
if (!savedId) {
|
|
372
|
+
throw new Error('Не удалось сохранить манифест');
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
// Если ID изменился (например, было '_new', стало реальный ID), обновляем manifest.value.id
|
|
376
|
+
if (savedId !== oldManifestId && manifest.value) {
|
|
377
|
+
manifest.value.id = savedId;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
// Delete files of removed mods and resource packs
|
|
381
|
+
if (oldManifest && manifest.value) {
|
|
382
|
+
deleteRemovedModFiles(oldManifest, manifest.value);
|
|
383
|
+
}
|
|
384
|
+
};
|
|
385
|
+
|
|
386
|
+
// WATCHERS
|
|
387
|
+
|
|
388
|
+
watch(
|
|
389
|
+
() => manifest.value?._meta.manifest.loader,
|
|
390
|
+
async () => {
|
|
391
|
+
// Clear loader version when loader changes to trigger auto-selection
|
|
392
|
+
if (
|
|
393
|
+
manifest.value &&
|
|
394
|
+
previousLoader.value !== null &&
|
|
395
|
+
previousLoader.value !== manifest.value._meta.manifest.loader
|
|
396
|
+
) {
|
|
397
|
+
manifest.value._meta.manifest.loaderVersion = '';
|
|
398
|
+
}
|
|
399
|
+
await reloadMinecraftVersions();
|
|
400
|
+
await reloadLoaderVersions();
|
|
401
|
+
},
|
|
402
|
+
);
|
|
403
|
+
|
|
404
|
+
watch(
|
|
405
|
+
() => manifest.value?._meta.manifest.minecraftVersion,
|
|
406
|
+
async () => {
|
|
407
|
+
await reloadLoaderVersions();
|
|
408
|
+
// Auto-selection is handled in reloadLoaderVersions, no need to clear here
|
|
409
|
+
},
|
|
410
|
+
);
|
|
411
|
+
|
|
412
|
+
watch(
|
|
413
|
+
() => extensionRegistriesRevision.value,
|
|
414
|
+
async () => {
|
|
415
|
+
if (!manifest.value) {
|
|
416
|
+
return;
|
|
417
|
+
}
|
|
418
|
+
await reloadLoaders();
|
|
419
|
+
await reloadMinecraftVersions();
|
|
420
|
+
await reloadLoaderVersions();
|
|
421
|
+
},
|
|
422
|
+
);
|
|
423
|
+
|
|
424
|
+
return {
|
|
425
|
+
// State
|
|
426
|
+
manifest,
|
|
427
|
+
isManifestLoaderMissing,
|
|
428
|
+
isLoading,
|
|
429
|
+
loaders,
|
|
430
|
+
isLoadingLoaders,
|
|
431
|
+
minecraftVersions,
|
|
432
|
+
isLoadingMinecraftVersions,
|
|
433
|
+
loaderVersions,
|
|
434
|
+
isLoadingLoaderVersions,
|
|
435
|
+
// Methods
|
|
436
|
+
init,
|
|
437
|
+
save,
|
|
438
|
+
reloadLoaders,
|
|
439
|
+
reloadMinecraftVersions,
|
|
440
|
+
reloadLoaderVersions,
|
|
441
|
+
// Editors
|
|
442
|
+
modsEditor: modsEditorInstance,
|
|
443
|
+
resourcePacksEditor: resourcePacksEditorInstance,
|
|
444
|
+
shaderPacksEditor: shaderPacksEditorInstance,
|
|
445
|
+
filesEditor: filesEditorInstance,
|
|
446
|
+
};
|
|
447
|
+
}, false);
|