@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,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Вставки перед метаданными карточки карты. */
|
|
5
|
+
export const useMapCardBeforeMetaRegistry =
|
|
6
|
+
defineExtensionRegistry<Component>('core.mapCardBeforeMeta');
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Вставки в footer карточки карты. */
|
|
5
|
+
export const useMapCardFooterActionsRegistry =
|
|
6
|
+
defineExtensionRegistry<Component>('core.mapCardFooterActions');
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Визуальные блоки после основного контента деталки карты. */
|
|
5
|
+
export const useMapDetailAfterContentRegistry =
|
|
6
|
+
defineExtensionRegistry<Component>('core.mapDetailAfterContent');
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Визуальные блоки перед основным контентом деталки карты. */
|
|
5
|
+
export const useMapDetailBeforeContentRegistry =
|
|
6
|
+
defineExtensionRegistry<Component>('core.mapDetailBeforeContent');
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Дополнительные кнопки/виджеты в hero-шапке деталки карты. */
|
|
5
|
+
export const useMapDetailHeaderActionsRegistry =
|
|
6
|
+
defineExtensionRegistry<Component>('core.mapDetailHeaderActions');
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AnyExtension } from '@tiptap/core';
|
|
2
|
+
|
|
3
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
4
|
+
|
|
5
|
+
/** Нативные расширения TipTap для MarkdownEditor (объекты `Extension`). */
|
|
6
|
+
export const useMarkdownEditorTiptapExtensionsRegistry =
|
|
7
|
+
defineExtensionRegistry<AnyExtension>('core.markdownEditorTiptapExtensions');
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Кнопки/виджеты в toolbar MarkdownEditor. */
|
|
5
|
+
export const useMarkdownEditorToolbarActionsRegistry =
|
|
6
|
+
defineExtensionRegistry<Component>('core.markdownEditorToolbarActions');
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Блоки после основного контента MarkdownRenderer. */
|
|
5
|
+
export const useMarkdownRendererAfterContentRegistry =
|
|
6
|
+
defineExtensionRegistry<Component>('core.markdownRendererAfterContent');
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Блоки перед основным контентом MarkdownRenderer. */
|
|
5
|
+
export const useMarkdownRendererBeforeContentRegistry =
|
|
6
|
+
defineExtensionRegistry<Component>('core.markdownRendererBeforeContent');
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Дополнительные кнопки в footer диалога деталей мода. */
|
|
5
|
+
export const useModDetailsFooterActionsRegistry =
|
|
6
|
+
defineExtensionRegistry<Component>('core.modDetailsFooterActions');
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Доп. действия в строке мода в редакторе сборки. */
|
|
5
|
+
export const useModManageActionsRegistry =
|
|
6
|
+
defineExtensionRegistry<Component>('core.modManageActions');
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ModMarketplaceProvider } from '../../../shared/mods/mod-marketplace-types';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
export const useModProviderRegistry =
|
|
5
|
+
defineExtensionRegistry<ModMarketplaceProvider>('core.modProvider');
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { NavigationSection } from '../../../shared/types/navigation';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
export type CoreNavItem = NavigationSection;
|
|
5
|
+
|
|
6
|
+
export const useExtensionNavRegistry =
|
|
7
|
+
defineExtensionRegistry<CoreNavItem>('core.nav');
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Значение реестра `core.page` (иконка/бейдж — в `core.nav`). */
|
|
5
|
+
export interface CorePageItem {
|
|
6
|
+
path: string;
|
|
7
|
+
title?: string;
|
|
8
|
+
component: Component;
|
|
9
|
+
resolvedRoutePath: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export const useExtensionPageRegistry =
|
|
13
|
+
defineExtensionRegistry<CorePageItem>('core.page');
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Визуальные блоки после контента экрана проектов/серверов. */
|
|
5
|
+
export const useProjectsAfterContentRegistry =
|
|
6
|
+
defineExtensionRegistry<Component>('core.projectsAfterContent');
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Визуальные блоки перед контентом экрана проектов/серверов. */
|
|
5
|
+
export const useProjectsBeforeContentRegistry =
|
|
6
|
+
defineExtensionRegistry<Component>('core.projectsBeforeContent');
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Доп. действия в строке ресурспака в редакторе сборки. */
|
|
5
|
+
export const useResourcepackManageActionsRegistry = defineExtensionRegistry<Component>(
|
|
6
|
+
'core.resourcepackManageActions',
|
|
7
|
+
);
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Дополнительные элементы/кнопки в карточке сервера. */
|
|
5
|
+
export const useServerCardActionsRegistry =
|
|
6
|
+
defineExtensionRegistry<Component>('core.serverCardActions');
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Вставки после метаданных карточки сервера. */
|
|
5
|
+
export const useServerCardAfterMetaRegistry =
|
|
6
|
+
defineExtensionRegistry<Component>('core.serverCardAfterMeta');
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Вставки перед метаданными карточки сервера. */
|
|
5
|
+
export const useServerCardBeforeMetaRegistry =
|
|
6
|
+
defineExtensionRegistry<Component>('core.serverCardBeforeMeta');
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Вставки в footer карточки сервера. */
|
|
5
|
+
export const useServerCardFooterActionsRegistry =
|
|
6
|
+
defineExtensionRegistry<Component>('core.serverCardFooterActions');
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Визуальные блоки после основного контента деталки сервера. */
|
|
5
|
+
export const useServerDetailAfterContentRegistry =
|
|
6
|
+
defineExtensionRegistry<Component>('core.serverDetailAfterContent');
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Визуальные блоки перед основным контентом деталки сервера. */
|
|
5
|
+
export const useServerDetailBeforeContentRegistry =
|
|
6
|
+
defineExtensionRegistry<Component>('core.serverDetailBeforeContent');
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Дополнительные кнопки/виджеты в hero-шапке деталки сервера. */
|
|
5
|
+
export const useServerDetailHeaderActionsRegistry =
|
|
6
|
+
defineExtensionRegistry<Component>('core.serverDetailHeaderActions');
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Вставки после секций настроек. */
|
|
5
|
+
export const useSettingsAfterSectionsRegistry =
|
|
6
|
+
defineExtensionRegistry<Component>('core.settingsAfterSections');
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Вставки перед секциями настроек. */
|
|
5
|
+
export const useSettingsBeforeSectionsRegistry =
|
|
6
|
+
defineExtensionRegistry<Component>('core.settingsBeforeSections');
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Вставки между секциями на экране настроек. */
|
|
5
|
+
export const useSettingsSectionWidgetsRegistry =
|
|
6
|
+
defineExtensionRegistry<Component>('core.settingsSectionWidgets');
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Доп. действия в строке шейдерпака в редакторе сборки. */
|
|
5
|
+
export const useShaderpackManageActionsRegistry = defineExtensionRegistry<Component>(
|
|
6
|
+
'core.shaderpackManageActions',
|
|
7
|
+
);
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Дополнительные визуальные блоки в конце сайдбара (перед footer). */
|
|
5
|
+
export const useSidebarAfterContentRegistry =
|
|
6
|
+
defineExtensionRegistry<Component>('core.sidebarAfterContent');
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Дополнительные визуальные блоки в начале сайдбара. */
|
|
5
|
+
export const useSidebarBeforeContentRegistry =
|
|
6
|
+
defineExtensionRegistry<Component>('core.sidebarBeforeContent');
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Вставки в конец сайдбара (footer-зона перед версиями). */
|
|
5
|
+
export const useSidebarFooterWidgetsRegistry =
|
|
6
|
+
defineExtensionRegistry<Component>('core.sidebarFooterWidgets');
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Вставки в начало сайдбара (header-зона). */
|
|
5
|
+
export const useSidebarHeaderWidgetsRegistry =
|
|
6
|
+
defineExtensionRegistry<Component>('core.sidebarHeaderWidgets');
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Значение реестра `core.sidebar`. */
|
|
5
|
+
export interface CoreSidebarItem {
|
|
6
|
+
placement: 'strip' | 'footer';
|
|
7
|
+
component: Component;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const useExtensionSidebarRegistry =
|
|
11
|
+
defineExtensionRegistry<CoreSidebarItem>('core.sidebar');
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Вставки после метаданных карточки/строки пользователя. */
|
|
5
|
+
export const useUserCardAfterMetaRegistry =
|
|
6
|
+
defineExtensionRegistry<Component>('core.userCardAfterMeta');
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Вставки перед метаданными карточки/строки пользователя. */
|
|
5
|
+
export const useUserCardBeforeMetaRegistry =
|
|
6
|
+
defineExtensionRegistry<Component>('core.userCardBeforeMeta');
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Дополнительные действия в меню пользователя. */
|
|
5
|
+
export const useUserMenuActionsRegistry =
|
|
6
|
+
defineExtensionRegistry<Component>('core.userMenuActions');
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Вставки после действий в меню пользователя. */
|
|
5
|
+
export const useUserMenuAfterActionsRegistry =
|
|
6
|
+
defineExtensionRegistry<Component>('core.userMenuAfterActions');
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
import { defineExtensionRegistry } from '../define-extension-registry';
|
|
3
|
+
|
|
4
|
+
/** Вставки перед действиями в меню пользователя. */
|
|
5
|
+
export const useUserMenuBeforeActionsRegistry =
|
|
6
|
+
defineExtensionRegistry<Component>('core.userMenuBeforeActions');
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { clearRegistryBucket } from './store';
|
|
2
|
+
|
|
3
|
+
const UI_REGISTRY_IDS = [
|
|
4
|
+
'core.page',
|
|
5
|
+
'core.nav',
|
|
6
|
+
'core.sidebar',
|
|
7
|
+
'core.userStrip',
|
|
8
|
+
'core.shell',
|
|
9
|
+
] as const;
|
|
10
|
+
|
|
11
|
+
export function clearExtensionUiRegistries(): void {
|
|
12
|
+
for (const id of UI_REGISTRY_IDS) {
|
|
13
|
+
clearRegistryBucket(id);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { ExtensionRegistryPayloadMap } from '@rynt/sdk/extension-registry-payload-map';
|
|
2
|
+
import type { BuiltinRegistryValueMap, KnownBuiltinRegistryId } from './registry-value-map';
|
|
3
|
+
import { createExtensionRegistryApi } from './extension-registry-api';
|
|
4
|
+
import type { ExtensionRegistryApi, UseExtensionRegistry } from './extension-registry-api';
|
|
5
|
+
import { declareExtensionRegistryId } from './store';
|
|
6
|
+
|
|
7
|
+
export type {
|
|
8
|
+
ExtensionRegistryApi,
|
|
9
|
+
RegistryRow,
|
|
10
|
+
UseExtensionRegistry,
|
|
11
|
+
} from './extension-registry-api';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Объявляет реестр (идемпотентно, с предупреждением о повторном объявлении в dev)
|
|
15
|
+
* и возвращает **use-функцию** с типизированным API — по духу как {@link defineStore}.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* const useLoaderRegistry = defineExtensionRegistry<BaseLoader>('rynt.minecraft.loader');
|
|
20
|
+
* const { register, getAll } = useLoaderRegistry();
|
|
21
|
+
* register('quilt', new QuiltLoader());
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export function defineExtensionRegistry<I extends KnownBuiltinRegistryId>(
|
|
25
|
+
registryId: I,
|
|
26
|
+
): UseExtensionRegistry<BuiltinRegistryValueMap[I]>;
|
|
27
|
+
export function defineExtensionRegistry<T>(
|
|
28
|
+
registryId: string,
|
|
29
|
+
): UseExtensionRegistry<T>;
|
|
30
|
+
export function defineExtensionRegistry<T>(
|
|
31
|
+
registryId: string,
|
|
32
|
+
): UseExtensionRegistry<T> {
|
|
33
|
+
declareExtensionRegistryId(registryId);
|
|
34
|
+
return () => createExtensionRegistryApi<T>(registryId);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Доступ к реестру по произвольному `registryId` без `defineExtensionRegistry` у себя в пакете.
|
|
39
|
+
* Тип значения: либо явный дженерик `getExtensionRegistry<MyRow>(id)`, либо (предпочтительно)
|
|
40
|
+
* augmentation {@link ExtensionRegistryPayloadMap} в пакете владельца — тогда достаточно
|
|
41
|
+
* `getExtensionRegistry(id)` с литеральным `registryId` (см. `packages/sdk/REGISTRIES.md`).
|
|
42
|
+
*
|
|
43
|
+
* Запись идёт от имени **текущего** расширения (`withExtensionScope` / setup расширения).
|
|
44
|
+
* Чужой реестр обычно объявляют в манифесте (`declaresRegistries`); зависимость — в
|
|
45
|
+
* `extensionDependencies`, чтобы `setup` шёл после владельца.
|
|
46
|
+
*
|
|
47
|
+
* Не помечает id как «объявленный ядром» — только создаёт bucket при первом обращении.
|
|
48
|
+
*/
|
|
49
|
+
export function getExtensionRegistry<I extends KnownBuiltinRegistryId>(
|
|
50
|
+
registryId: I,
|
|
51
|
+
): ExtensionRegistryApi<BuiltinRegistryValueMap[I]>;
|
|
52
|
+
export function getExtensionRegistry<K extends keyof ExtensionRegistryPayloadMap>(
|
|
53
|
+
registryId: K,
|
|
54
|
+
): ExtensionRegistryApi<ExtensionRegistryPayloadMap[K]>;
|
|
55
|
+
export function getExtensionRegistry<T>(registryId: string): ExtensionRegistryApi<T>;
|
|
56
|
+
export function getExtensionRegistry<T>(registryId: string): ExtensionRegistryApi<T> {
|
|
57
|
+
return createExtensionRegistryApi<T>(registryId);
|
|
58
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Публичный API реестров для расширений (NW: `@rynt/sdk/registries` + host-shim).
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
export {
|
|
6
|
+
applyValidatedRyntContributesToManifest,
|
|
7
|
+
validateRyntManifestContributes,
|
|
8
|
+
type ParsedRyntManifestContributes,
|
|
9
|
+
} from './manifest-rynt';
|
|
10
|
+
|
|
11
|
+
export type { BuiltinRegistryId } from './registry-value-map';
|
|
12
|
+
export type { ExtensionRegistryPayloadMap } from '@rynt/sdk/extension-registry-payload-map';
|
|
13
|
+
|
|
14
|
+
export { clearExtensionUiRegistries } from './clear-extension-ui-registries';
|
|
15
|
+
|
|
16
|
+
export { getRegistry } from './get-registry';
|
|
17
|
+
export {
|
|
18
|
+
defineExtensionRegistry,
|
|
19
|
+
getExtensionRegistry,
|
|
20
|
+
} from './define-extension-registry';
|
|
21
|
+
export type {
|
|
22
|
+
ExtensionRegistryApi,
|
|
23
|
+
UseExtensionRegistry,
|
|
24
|
+
} from './define-extension-registry';
|
|
25
|
+
|
|
26
|
+
export {
|
|
27
|
+
HOST_EXTENSION_ID,
|
|
28
|
+
popExtensionScope,
|
|
29
|
+
pushExtensionScope,
|
|
30
|
+
} from './extension-scope';
|
|
31
|
+
|
|
32
|
+
export * from './builtins';
|
|
33
|
+
|
|
34
|
+
export {
|
|
35
|
+
extensionRegistriesRevision,
|
|
36
|
+
getRegistryItem,
|
|
37
|
+
hasRegistryItem,
|
|
38
|
+
listRegistryEntries,
|
|
39
|
+
listRegistryKeys,
|
|
40
|
+
listRegistryValuesSorted,
|
|
41
|
+
} from './store';
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { getCurrentExtensionId } from './extension-scope';
|
|
2
|
+
import {
|
|
3
|
+
deleteRegistryItem,
|
|
4
|
+
getRegistryEntryMeta,
|
|
5
|
+
getRegistryItem,
|
|
6
|
+
hasRegistryItem,
|
|
7
|
+
listRegistryEntries,
|
|
8
|
+
listRegistryKeys,
|
|
9
|
+
listRegistryValuesSorted,
|
|
10
|
+
setRegistryItem,
|
|
11
|
+
touchExtensionRegistryBucket,
|
|
12
|
+
} from './store';
|
|
13
|
+
|
|
14
|
+
/** Одна запись реестра с ключом и метаданными (удобно для `v-for` / ключей Vue). */
|
|
15
|
+
export interface RegistryRow<T> {
|
|
16
|
+
registryKey: string;
|
|
17
|
+
/** Источник записи: id расширения или `rynt` для лаунчера. */
|
|
18
|
+
extensionId: string;
|
|
19
|
+
order?: number;
|
|
20
|
+
value: T;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Типизированный доступ к одному реестру: запись, чтение, удаление.
|
|
25
|
+
*
|
|
26
|
+
* `extensionId` для записи берётся из текущего scope (см. `extension-scope.ts`):
|
|
27
|
+
* - В коде расширения шим `@rynt/extension-build` подставляет `EXTENSION_ID` из `manifest.json`.
|
|
28
|
+
* - В коде лаунчера scope по умолчанию равен `rynt` — записи попадают как «host».
|
|
29
|
+
*
|
|
30
|
+
* Создавайте через {@link defineExtensionRegistry} или {@link getExtensionRegistry}.
|
|
31
|
+
*/
|
|
32
|
+
export interface ExtensionRegistryApi<T> {
|
|
33
|
+
/** Строковый id реестра (`rynt.*` или из `declaresRegistries`). */
|
|
34
|
+
readonly id: string;
|
|
35
|
+
/**
|
|
36
|
+
* Записать значение по ключу. `extensionId` берётся из текущего scope автоматически.
|
|
37
|
+
*/
|
|
38
|
+
register(key: string, value: T, order?: number): void;
|
|
39
|
+
get(key: string): T | undefined;
|
|
40
|
+
has(key: string): boolean;
|
|
41
|
+
keys(): string[];
|
|
42
|
+
/** Пары `[ключ, значение]` без сортировки и без `registryKey` в объекте. */
|
|
43
|
+
keyValuePairs(): [string, T][];
|
|
44
|
+
getMeta(
|
|
45
|
+
key: string,
|
|
46
|
+
):
|
|
47
|
+
| { value: T; extensionId: string; order?: number }
|
|
48
|
+
| undefined;
|
|
49
|
+
/** Значения по `order`, затем по ключу. */
|
|
50
|
+
getAll(): T[];
|
|
51
|
+
/**
|
|
52
|
+
* Все записи с сортировкой по `order`, затем по ключу (удобно для `v-for`).
|
|
53
|
+
* Внутри `computed` даёт реактивность на мутации реестра.
|
|
54
|
+
*/
|
|
55
|
+
entries(): RegistryRow<T>[];
|
|
56
|
+
delete(key: string): boolean;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export type UseExtensionRegistry<T> = () => ExtensionRegistryApi<T>;
|
|
60
|
+
|
|
61
|
+
export function createExtensionRegistryApi<T>(
|
|
62
|
+
registryId: string,
|
|
63
|
+
): ExtensionRegistryApi<T> {
|
|
64
|
+
touchExtensionRegistryBucket(registryId);
|
|
65
|
+
return {
|
|
66
|
+
id: registryId,
|
|
67
|
+
register(key: string, value: T, order?: number): void {
|
|
68
|
+
setRegistryItem(registryId, key, value, getCurrentExtensionId(), order);
|
|
69
|
+
},
|
|
70
|
+
get: (key: string) => getRegistryItem<T>(registryId, key),
|
|
71
|
+
has: (key: string) => hasRegistryItem(registryId, key),
|
|
72
|
+
keys: () => listRegistryKeys(registryId),
|
|
73
|
+
keyValuePairs: () => listRegistryEntries<T>(registryId),
|
|
74
|
+
getMeta: (key: string) => {
|
|
75
|
+
const m = getRegistryEntryMeta<T>(registryId, key);
|
|
76
|
+
if (!m) return undefined;
|
|
77
|
+
return {
|
|
78
|
+
value: m.value,
|
|
79
|
+
extensionId: m.extensionId,
|
|
80
|
+
order: m.order,
|
|
81
|
+
};
|
|
82
|
+
},
|
|
83
|
+
getAll: () => listRegistryValuesSorted<T>(registryId),
|
|
84
|
+
entries(): RegistryRow<T>[] {
|
|
85
|
+
const pairs = listRegistryEntries<T>(registryId);
|
|
86
|
+
const sorted = [...pairs].sort(([ka], [kb]) => {
|
|
87
|
+
const oa = getRegistryEntryMeta(registryId, ka)?.order ?? 100;
|
|
88
|
+
const ob = getRegistryEntryMeta(registryId, kb)?.order ?? 100;
|
|
89
|
+
return oa - ob || ka.localeCompare(kb);
|
|
90
|
+
});
|
|
91
|
+
return sorted.map(([registryKey, value]) => {
|
|
92
|
+
const meta = getRegistryEntryMeta<T>(registryId, registryKey);
|
|
93
|
+
return {
|
|
94
|
+
registryKey,
|
|
95
|
+
value,
|
|
96
|
+
extensionId: meta?.extensionId ?? 'rynt',
|
|
97
|
+
order: meta?.order,
|
|
98
|
+
};
|
|
99
|
+
});
|
|
100
|
+
},
|
|
101
|
+
delete: (key: string) => deleteRegistryItem(registryId, key),
|
|
102
|
+
};
|
|
103
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Типы значений реестров, объявленных расширениями (строковый `registryId` вне `core.*`).
|
|
3
|
+
* Дополняется через `declare module` в пакете **владельца** реестра; зависимые пакеты
|
|
4
|
+
* импортируют этот модуль (или entry пакета, подключающий augmentation) — после этого
|
|
5
|
+
* {@link getExtensionRegistry}(id) выводит тип без явного дженерика.
|
|
6
|
+
*
|
|
7
|
+
* Встроенные реестры ядра описаны в {@link BuiltinRegistryValueMap}.
|
|
8
|
+
*/
|
|
9
|
+
export interface ExtensionRegistryPayloadMap {}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Авто-determination `extensionId` для записей в реестре через scope-переменную.
|
|
3
|
+
*
|
|
4
|
+
* Поток:
|
|
5
|
+
* - Шим `@rynt/extension-build` оборачивает каждый метод API в `pushExtensionScope(EXTENSION_ID)` /
|
|
6
|
+
* `popExtensionScope(prev)` (EXTENSION_ID запекается через Vite `define` из `manifest.json`).
|
|
7
|
+
* - SDK-метод `register(...)` читает `getCurrentExtensionId()` без явного параметра.
|
|
8
|
+
* - Для хоста дефолтный id — {@link HOST_EXTENSION_ID}; всё, что лаунчер пишет напрямую через
|
|
9
|
+
* импортированный `@rynt/sdk` (вне расширения), попадает под этот id.
|
|
10
|
+
*
|
|
11
|
+
* Безопасно для `register` — операция синхронная, между push и pop нет точек потери контекста.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/** Идентификатор «хост-источника» для записей, сделанных самим лаунчером. */
|
|
15
|
+
export const HOST_EXTENSION_ID = 'rynt';
|
|
16
|
+
|
|
17
|
+
let currentExtensionId: string = HOST_EXTENSION_ID;
|
|
18
|
+
|
|
19
|
+
export function getCurrentExtensionId(): string {
|
|
20
|
+
return currentExtensionId;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** Установить новый scope, вернуть предыдущий (для последующего восстановления через pop). */
|
|
24
|
+
export function pushExtensionScope(id: string): string {
|
|
25
|
+
const prev = currentExtensionId;
|
|
26
|
+
currentExtensionId = id;
|
|
27
|
+
return prev;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function popExtensionScope(prev: string): void {
|
|
31
|
+
currentExtensionId = prev;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function withExtensionScope<T>(id: string, fn: () => T): T {
|
|
35
|
+
const prev = pushExtensionScope(id);
|
|
36
|
+
try {
|
|
37
|
+
return fn();
|
|
38
|
+
} finally {
|
|
39
|
+
popExtensionScope(prev);
|
|
40
|
+
}
|
|
41
|
+
}
|