@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.
Files changed (332) hide show
  1. package/README.md +122 -0
  2. package/REGISTRIES.md +189 -0
  3. package/env.d.ts +11 -0
  4. package/host-shims.d.ts +30 -0
  5. package/package.json +88 -0
  6. package/src/extension-marketplace/api-types.ts +141 -0
  7. package/src/extension-marketplace/client.ts +296 -0
  8. package/src/extension-marketplace/index.ts +22 -0
  9. package/src/extension-marketplace/schemas.ts +178 -0
  10. package/src/extensions/ExtensionRoutePage.vue +17 -0
  11. package/src/extensions/context.ts +37 -0
  12. package/src/extensions/disabled-folder.ts +21 -0
  13. package/src/extensions/extension-expose-map.ts +5 -0
  14. package/src/extensions/extension-expose.ts +48 -0
  15. package/src/extensions/graph.ts +67 -0
  16. package/src/extensions/index.ts +251 -0
  17. package/src/extensions/invite-handler/types.ts +20 -0
  18. package/src/extensions/launcher-entities/create-launcher-entity.ts +25 -0
  19. package/src/extensions/launcher-entities/keys.ts +46 -0
  20. package/src/extensions/launcher-entities/launcher-entity-components.ts +177 -0
  21. package/src/extensions/launcher-entities/props-map.ts +69 -0
  22. package/src/extensions/launcher-entities/registry.ts +32 -0
  23. package/src/extensions/launcher-models/apis/accounts-contracts.ts +102 -0
  24. package/src/extensions/launcher-models/apis/launcher-model-apis.ts +553 -0
  25. package/src/extensions/launcher-models/keys.ts +23 -0
  26. package/src/extensions/launcher-models/public.ts +9 -0
  27. package/src/extensions/launcher-models/registry-core.ts +34 -0
  28. package/src/extensions/manifest-types.ts +22 -0
  29. package/src/extensions/manifest.ts +46 -0
  30. package/src/extensions/marketplace-open-key.ts +26 -0
  31. package/src/extensions/plugin-types.ts +44 -0
  32. package/src/extensions/plugin.ts +62 -0
  33. package/src/extensions/registries/bootstrap.ts +11 -0
  34. package/src/extensions/registries/builtins/account-provider.ts +6 -0
  35. package/src/extensions/registries/builtins/app-topbar-left-widgets.ts +6 -0
  36. package/src/extensions/registries/builtins/app-topbar-right-widgets.ts +6 -0
  37. package/src/extensions/registries/builtins/app-topbar-status-widgets.ts +6 -0
  38. package/src/extensions/registries/builtins/build-card-actions.ts +6 -0
  39. package/src/extensions/registries/builtins/build-card-after-meta.ts +6 -0
  40. package/src/extensions/registries/builtins/build-card-before-media.ts +6 -0
  41. package/src/extensions/registries/builtins/build-card-before-meta.ts +6 -0
  42. package/src/extensions/registries/builtins/build-card-footer-actions.ts +6 -0
  43. package/src/extensions/registries/builtins/build-detail-after-content.ts +6 -0
  44. package/src/extensions/registries/builtins/build-detail-before-content.ts +6 -0
  45. package/src/extensions/registries/builtins/build-detail-before-hero.ts +6 -0
  46. package/src/extensions/registries/builtins/build-detail-header-actions.ts +6 -0
  47. package/src/extensions/registries/builtins/build-detail-mod-row-actions.ts +6 -0
  48. package/src/extensions/registries/builtins/build-detail-resourcepack-row-actions.ts +6 -0
  49. package/src/extensions/registries/builtins/build-detail-right-column-bottom.ts +6 -0
  50. package/src/extensions/registries/builtins/build-detail-right-column-top.ts +6 -0
  51. package/src/extensions/registries/builtins/dialog-footer-actions.ts +6 -0
  52. package/src/extensions/registries/builtins/feed-after-content.ts +6 -0
  53. package/src/extensions/registries/builtins/feed-before-content.ts +6 -0
  54. package/src/extensions/registries/builtins/file-editor.ts +19 -0
  55. package/src/extensions/registries/builtins/friends-after-list.ts +6 -0
  56. package/src/extensions/registries/builtins/friends-before-list.ts +6 -0
  57. package/src/extensions/registries/builtins/index.ts +141 -0
  58. package/src/extensions/registries/builtins/invite-handler.ts +7 -0
  59. package/src/extensions/registries/builtins/library-after-content.ts +6 -0
  60. package/src/extensions/registries/builtins/library-before-content.ts +6 -0
  61. package/src/extensions/registries/builtins/loader.ts +8 -0
  62. package/src/extensions/registries/builtins/map-card-actions.ts +6 -0
  63. package/src/extensions/registries/builtins/map-card-after-meta.ts +6 -0
  64. package/src/extensions/registries/builtins/map-card-before-meta.ts +6 -0
  65. package/src/extensions/registries/builtins/map-card-footer-actions.ts +6 -0
  66. package/src/extensions/registries/builtins/map-detail-after-content.ts +6 -0
  67. package/src/extensions/registries/builtins/map-detail-before-content.ts +6 -0
  68. package/src/extensions/registries/builtins/map-detail-header-actions.ts +6 -0
  69. package/src/extensions/registries/builtins/markdown-editor-tiptap-extensions.ts +7 -0
  70. package/src/extensions/registries/builtins/markdown-editor-toolbar-actions.ts +6 -0
  71. package/src/extensions/registries/builtins/markdown-renderer-after-content.ts +6 -0
  72. package/src/extensions/registries/builtins/markdown-renderer-before-content.ts +6 -0
  73. package/src/extensions/registries/builtins/mod-details-footer-actions.ts +6 -0
  74. package/src/extensions/registries/builtins/mod-manage-actions.ts +6 -0
  75. package/src/extensions/registries/builtins/mod-provider.ts +5 -0
  76. package/src/extensions/registries/builtins/nav.ts +7 -0
  77. package/src/extensions/registries/builtins/page.ts +13 -0
  78. package/src/extensions/registries/builtins/projects-after-content.ts +6 -0
  79. package/src/extensions/registries/builtins/projects-before-content.ts +6 -0
  80. package/src/extensions/registries/builtins/resourcepack-manage-actions.ts +7 -0
  81. package/src/extensions/registries/builtins/server-card-actions.ts +6 -0
  82. package/src/extensions/registries/builtins/server-card-after-meta.ts +6 -0
  83. package/src/extensions/registries/builtins/server-card-before-meta.ts +6 -0
  84. package/src/extensions/registries/builtins/server-card-footer-actions.ts +6 -0
  85. package/src/extensions/registries/builtins/server-detail-after-content.ts +6 -0
  86. package/src/extensions/registries/builtins/server-detail-before-content.ts +6 -0
  87. package/src/extensions/registries/builtins/server-detail-header-actions.ts +6 -0
  88. package/src/extensions/registries/builtins/settings-after-sections.ts +6 -0
  89. package/src/extensions/registries/builtins/settings-before-sections.ts +6 -0
  90. package/src/extensions/registries/builtins/settings-section-widgets.ts +6 -0
  91. package/src/extensions/registries/builtins/shaderpack-manage-actions.ts +7 -0
  92. package/src/extensions/registries/builtins/shell.ts +5 -0
  93. package/src/extensions/registries/builtins/sidebar-after-content.ts +6 -0
  94. package/src/extensions/registries/builtins/sidebar-before-content.ts +6 -0
  95. package/src/extensions/registries/builtins/sidebar-footer-widgets.ts +6 -0
  96. package/src/extensions/registries/builtins/sidebar-header-widgets.ts +6 -0
  97. package/src/extensions/registries/builtins/sidebar.ts +11 -0
  98. package/src/extensions/registries/builtins/theme.ts +5 -0
  99. package/src/extensions/registries/builtins/user-card-after-meta.ts +6 -0
  100. package/src/extensions/registries/builtins/user-card-before-meta.ts +6 -0
  101. package/src/extensions/registries/builtins/user-menu-actions.ts +6 -0
  102. package/src/extensions/registries/builtins/user-menu-after-actions.ts +6 -0
  103. package/src/extensions/registries/builtins/user-menu-before-actions.ts +6 -0
  104. package/src/extensions/registries/builtins/user-strip.ts +5 -0
  105. package/src/extensions/registries/clear-extension-ui-registries.ts +15 -0
  106. package/src/extensions/registries/define-extension-registry.ts +58 -0
  107. package/src/extensions/registries/extension-host-api.ts +41 -0
  108. package/src/extensions/registries/extension-registry-api.ts +103 -0
  109. package/src/extensions/registries/extension-registry-payload-map.ts +9 -0
  110. package/src/extensions/registries/extension-scope.ts +41 -0
  111. package/src/extensions/registries/get-registry.ts +23 -0
  112. package/src/extensions/registries/index.ts +58 -0
  113. package/src/extensions/registries/manifest-rynt.ts +193 -0
  114. package/src/extensions/registries/registry-slot.ts +40 -0
  115. package/src/extensions/registries/registry-value-map.ts +89 -0
  116. package/src/extensions/registries/store.ts +206 -0
  117. package/src/extensions/resolve-extensions.ts +245 -0
  118. package/src/extensions/router-bridge.ts +103 -0
  119. package/src/extensions/session.ts +6 -0
  120. package/src/extensions/slug.ts +23 -0
  121. package/src/extensions/version.ts +147 -0
  122. package/src/host/extensions-composables.ts +33 -0
  123. package/src/host/extensions-init.ts +194 -0
  124. package/src/host/index.ts +11 -0
  125. package/src/host/launcher-models/index.ts +4 -0
  126. package/src/index.ts +229 -0
  127. package/src/minecraft-loader/base-loader.ts +102 -0
  128. package/src/minecraft-loader/index.ts +11 -0
  129. package/src/minecraft-loader/loader-registry.ts +72 -0
  130. package/src/shared/api/assets.ts +112 -0
  131. package/src/shared/api/auth.ts +283 -0
  132. package/src/shared/api/builds.ts +647 -0
  133. package/src/shared/api/config.ts +19 -0
  134. package/src/shared/api/download-stats.ts +103 -0
  135. package/src/shared/api/downloads.ts +36 -0
  136. package/src/shared/api/entity-authorship.ts +60 -0
  137. package/src/shared/api/events.ts +393 -0
  138. package/src/shared/api/friends.ts +140 -0
  139. package/src/shared/api/graphql.ts +87 -0
  140. package/src/shared/api/index.ts +23 -0
  141. package/src/shared/api/invites.ts +262 -0
  142. package/src/shared/api/library.ts +44 -0
  143. package/src/shared/api/maps.ts +385 -0
  144. package/src/shared/api/notify-websocket.ts +140 -0
  145. package/src/shared/api/posts.ts +357 -0
  146. package/src/shared/api/projectServers.ts +379 -0
  147. package/src/shared/api/serverMembers.ts +173 -0
  148. package/src/shared/api/users.ts +294 -0
  149. package/src/shared/composables/buildEditor/useBuildEditor.ts +66 -0
  150. package/src/shared/composables/buildManifest/buildManifest.ts +447 -0
  151. package/src/shared/composables/filesEditor/filesEditor.ts +346 -0
  152. package/src/shared/composables/index.ts +10 -0
  153. package/src/shared/composables/modsEditor/modsEditor.ts +1678 -0
  154. package/src/shared/composables/registrySlot/registry-slot-utils.ts +25 -0
  155. package/src/shared/composables/registrySlot/useRegistrySlotMissing.ts +35 -0
  156. package/src/shared/composables/resourcePacksEditor/resourcePacksEditor.ts +448 -0
  157. package/src/shared/composables/shaderPacksEditor/shaderPacksEditor.ts +395 -0
  158. package/src/shared/composables/useSkinRender.ts +70 -0
  159. package/src/shared/composables/useZlDeepLink.ts +178 -0
  160. package/src/shared/definitions/defineGraphCache.ts +216 -0
  161. package/src/shared/definitions/defineStore.ts +32 -0
  162. package/src/shared/definitions/index.ts +2 -0
  163. package/src/shared/minecraft-types/build-manifest.ts +611 -0
  164. package/src/shared/minecraft-types/index.ts +3 -0
  165. package/src/shared/minecraft-types/launcher-versions.ts +32 -0
  166. package/src/shared/minecraft-types/minecraft-launcher-types.ts +276 -0
  167. package/src/shared/mocks/index.ts +1 -0
  168. package/src/shared/mocks/navigation.ts +17 -0
  169. package/src/shared/mods/http.ts +45 -0
  170. package/src/shared/mods/index.ts +5 -0
  171. package/src/shared/mods/marketplace-editor-search.ts +266 -0
  172. package/src/shared/mods/marketplace-search-utils.ts +42 -0
  173. package/src/shared/mods/mod-marketplace-registry.ts +66 -0
  174. package/src/shared/mods/mod-marketplace-types.ts +28 -0
  175. package/src/shared/mods/providers/curseforge.ts +464 -0
  176. package/src/shared/mods/providers/index.ts +8 -0
  177. package/src/shared/mods/providers/modrinth.ts +402 -0
  178. package/src/shared/mods/resolve-mods-provider-loader-ids.ts +77 -0
  179. package/src/shared/mods/types.ts +76 -0
  180. package/src/shared/styles/index.css +713 -0
  181. package/src/shared/themes/index.ts +23 -0
  182. package/src/shared/themes/theme-tokens-black.json +126 -0
  183. package/src/shared/themes/theme-tokens-classic.json +126 -0
  184. package/src/shared/themes/theme-tokens-pink.json +126 -0
  185. package/src/shared/themes/theme-tokens.json +126 -0
  186. package/src/shared/themes/types.ts +85 -0
  187. package/src/shared/types/API_DOCUMENTATION.md +422 -0
  188. package/src/shared/types/account.ts +40 -0
  189. package/src/shared/types/build.ts +8 -0
  190. package/src/shared/types/entities.ts +181 -0
  191. package/src/shared/types/index.ts +6 -0
  192. package/src/shared/types/invite-payloads.ts +60 -0
  193. package/src/shared/types/navigation.ts +16 -0
  194. package/src/shared/types/running-build.ts +51 -0
  195. package/src/shared/types/serverMember.ts +17 -0
  196. package/src/shared/types/user.ts +55 -0
  197. package/src/shared/ui/base/Avatar.vue +262 -0
  198. package/src/shared/ui/base/Badge.vue +47 -0
  199. package/src/shared/ui/base/Button.vue +78 -0
  200. package/src/shared/ui/base/Divider.vue +42 -0
  201. package/src/shared/ui/base/Icon.vue +597 -0
  202. package/src/shared/ui/base/StatusIndicator.vue +44 -0
  203. package/src/shared/ui/base/index.ts +7 -0
  204. package/src/shared/ui/cards/InviteCard.vue +47 -0
  205. package/src/shared/ui/cards/index.ts +2 -0
  206. package/src/shared/ui/dialog/Dialog.vue +71 -0
  207. package/src/shared/ui/dialog/DialogContent.vue +31 -0
  208. package/src/shared/ui/dialog/DialogFooter.vue +14 -0
  209. package/src/shared/ui/dialog/DialogHeader.vue +41 -0
  210. package/src/shared/ui/dialog/index.ts +5 -0
  211. package/src/shared/ui/editors/AttachmentImagesEditor.vue +133 -0
  212. package/src/shared/ui/editors/ContentAttachmentsDisplay.vue +76 -0
  213. package/src/shared/ui/editors/MarkdownEditor.vue +956 -0
  214. package/src/shared/ui/editors/MarkdownRenderer.vue +299 -0
  215. package/src/shared/ui/editors/RichContentImageViewer.vue +85 -0
  216. package/src/shared/ui/editors/SocialPostMediaZone.vue +320 -0
  217. package/src/shared/ui/editors/index.ts +6 -0
  218. package/src/shared/ui/editors/markdown-editor-gallery.ts +234 -0
  219. package/src/shared/ui/editors/markdown-editor-image.ts +178 -0
  220. package/src/shared/ui/form/Checkbox.vue +38 -0
  221. package/src/shared/ui/form/FormField.vue +30 -0
  222. package/src/shared/ui/form/FormGrid.vue +38 -0
  223. package/src/shared/ui/form/ImageEditor.vue +598 -0
  224. package/src/shared/ui/form/Input.vue +72 -0
  225. package/src/shared/ui/form/Range.vue +65 -0
  226. package/src/shared/ui/form/Select.vue +76 -0
  227. package/src/shared/ui/form/Switch.vue +38 -0
  228. package/src/shared/ui/form/Textarea.vue +144 -0
  229. package/src/shared/ui/form/index.ts +9 -0
  230. package/src/shared/ui/index.ts +9 -0
  231. package/src/shared/ui/layout/BusyOverlay.vue +31 -0
  232. package/src/shared/ui/layout/Callout.vue +44 -0
  233. package/src/shared/ui/layout/Card.vue +38 -0
  234. package/src/shared/ui/layout/Container.vue +36 -0
  235. package/src/shared/ui/layout/EmptyState.vue +99 -0
  236. package/src/shared/ui/layout/EntityMediaRow.vue +54 -0
  237. package/src/shared/ui/layout/FilterResultsLayout.vue +22 -0
  238. package/src/shared/ui/layout/FloatingPanel.vue +37 -0
  239. package/src/shared/ui/layout/FullscreenDimmer.vue +11 -0
  240. package/src/shared/ui/layout/Grid.vue +40 -0
  241. package/src/shared/ui/layout/Inline.vue +59 -0
  242. package/src/shared/ui/layout/LoadingState.vue +39 -0
  243. package/src/shared/ui/layout/MediaBox.vue +47 -0
  244. package/src/shared/ui/layout/OverlayPanel.vue +28 -0
  245. package/src/shared/ui/layout/OverlayWaitPanel.vue +22 -0
  246. package/src/shared/ui/layout/PageSection.vue +43 -0
  247. package/src/shared/ui/layout/PageToolbar.vue +29 -0
  248. package/src/shared/ui/layout/Panel.vue +39 -0
  249. package/src/shared/ui/layout/ProgressBar.vue +49 -0
  250. package/src/shared/ui/layout/Section.vue +30 -0
  251. package/src/shared/ui/layout/SegmentedControl.vue +43 -0
  252. package/src/shared/ui/layout/SelectableCard.vue +46 -0
  253. package/src/shared/ui/layout/SelectableRow.vue +41 -0
  254. package/src/shared/ui/layout/Skeleton.vue +25 -0
  255. package/src/shared/ui/layout/SkeletonAvatar.vue +30 -0
  256. package/src/shared/ui/layout/SkeletonEntityCard.vue +20 -0
  257. package/src/shared/ui/layout/SkeletonFeedPost.vue +22 -0
  258. package/src/shared/ui/layout/SkeletonGrid.vue +18 -0
  259. package/src/shared/ui/layout/SkeletonListRow.vue +31 -0
  260. package/src/shared/ui/layout/SkeletonText.vue +25 -0
  261. package/src/shared/ui/layout/Stack.vue +42 -0
  262. package/src/shared/ui/layout/StateBlock.vue +44 -0
  263. package/src/shared/ui/layout/TwoPaneLayout.vue +35 -0
  264. package/src/shared/ui/layout/VirtualList.vue +160 -0
  265. package/src/shared/ui/layout/index.ts +35 -0
  266. package/src/shared/ui/layout/skeletonSurfaceStyles.ts +24 -0
  267. package/src/shared/ui/navigation/NavItem.vue +139 -0
  268. package/src/shared/ui/navigation/Tab.vue +61 -0
  269. package/src/shared/ui/navigation/Tabs.vue +37 -0
  270. package/src/shared/ui/navigation/index.ts +4 -0
  271. package/src/shared/ui/primitives/Action.vue +19 -0
  272. package/src/shared/ui/primitives/Block.vue +28 -0
  273. package/src/shared/ui/primitives/CanvasView.vue +19 -0
  274. package/src/shared/ui/primitives/Control.vue +24 -0
  275. package/src/shared/ui/primitives/ControlSelect.vue +19 -0
  276. package/src/shared/ui/primitives/ControlTextarea.vue +17 -0
  277. package/src/shared/ui/primitives/FieldLabel.vue +19 -0
  278. package/src/shared/ui/primitives/Form.vue +19 -0
  279. package/src/shared/ui/primitives/Heading.vue +29 -0
  280. package/src/shared/ui/primitives/Image.vue +17 -0
  281. package/src/shared/ui/primitives/LineBreak.vue +3 -0
  282. package/src/shared/ui/primitives/Link.vue +19 -0
  283. package/src/shared/ui/primitives/List.vue +28 -0
  284. package/src/shared/ui/primitives/ListItem.vue +19 -0
  285. package/src/shared/ui/primitives/OptionItem.vue +19 -0
  286. package/src/shared/ui/primitives/Text.vue +28 -0
  287. package/src/shared/ui/primitives/VideoView.vue +19 -0
  288. package/src/shared/ui/primitives/index.ts +19 -0
  289. package/src/shared/ui/primitives/resolveElement.ts +25 -0
  290. package/src/shared/ui/special/AngularAccent.vue +106 -0
  291. package/src/shared/ui/special/ExtensionRegistrySlotButton.vue +143 -0
  292. package/src/shared/ui/special/InfoRow.vue +39 -0
  293. package/src/shared/ui/special/LogViewer.vue +53 -0
  294. package/src/shared/ui/special/PageHeader.vue +23 -0
  295. package/src/shared/ui/special/RegistrySlotMissingCallout.vue +48 -0
  296. package/src/shared/ui/special/WelcomeCard.vue +32 -0
  297. package/src/shared/ui/special/index.ts +9 -0
  298. package/src/shared/utils/app-paths.ts +50 -0
  299. package/src/shared/utils/attachments.ts +16 -0
  300. package/src/shared/utils/autostart.ts +213 -0
  301. package/src/shared/utils/build-files.ts +439 -0
  302. package/src/shared/utils/build-manifest-init.ts +176 -0
  303. package/src/shared/utils/cloudinary.ts +67 -0
  304. package/src/shared/utils/cn.ts +7 -0
  305. package/src/shared/utils/download-stats-week.ts +165 -0
  306. package/src/shared/utils/entity-api-to-cache.ts +84 -0
  307. package/src/shared/utils/entity-build-from-api.ts +1 -0
  308. package/src/shared/utils/entity-display.ts +27 -0
  309. package/src/shared/utils/entity-map-from-api.ts +1 -0
  310. package/src/shared/utils/file-hash.ts +65 -0
  311. package/src/shared/utils/formatSize.ts +5 -0
  312. package/src/shared/utils/formatTime.ts +157 -0
  313. package/src/shared/utils/getAccountSkinRender.ts +32 -0
  314. package/src/shared/utils/index.ts +34 -0
  315. package/src/shared/utils/local-mods.ts +678 -0
  316. package/src/shared/utils/local-settings.ts +217 -0
  317. package/src/shared/utils/member-join-stats.ts +35 -0
  318. package/src/shared/utils/platform.ts +86 -0
  319. package/src/shared/utils/play-host-slug.ts +92 -0
  320. package/src/shared/utils/rich-content.ts +294 -0
  321. package/src/shared/utils/safeRequest.ts +23 -0
  322. package/src/shared/utils/semver.ts +81 -0
  323. package/src/shared/utils/serverPermissions.ts +155 -0
  324. package/src/shared/utils/skin-render-cache.ts +372 -0
  325. package/src/shared/utils/stripMarkdown.ts +45 -0
  326. package/src/shared/utils/transliterate.ts +74 -0
  327. package/src/shared/utils/updateAccountSkinRender.ts +64 -0
  328. package/src/shared/utils/updater.ts +218 -0
  329. package/src/shared/utils/uploadImage.ts +195 -0
  330. package/src/shared/utils/user-status.ts +9 -0
  331. package/src/tiptap/index.ts +7 -0
  332. 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);