@sanity/sdk 3.4.0 → 3.5.0-next.20260922182803

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sanity/sdk",
3
- "version": "3.4.0",
3
+ "version": "3.5.0-next.20260922182803",
4
4
  "private": false,
5
5
  "description": "Sanity SDK",
6
6
  "keywords": [
@@ -26,6 +26,7 @@ export type {
26
26
  DocumentActivity,
27
27
  EventTopic,
28
28
  EventTopicDef,
29
+ LocalApplication,
29
30
  NavigationLocation,
30
31
  NavigationTarget,
31
32
  PayloadOf,
@@ -9,7 +9,9 @@ type SanityGlobal = typeof globalThis & {__SANITY_STAGING__?: boolean}
9
9
  *
10
10
  * @internal
11
11
  */
12
- export function getApplicationOrigin(application: ApplicationBase): string | null {
12
+ export function getApplicationOrigin(
13
+ application: Pick<ApplicationBase, 'externalUrl' | 'slug' | 'isSingleton' | 'organizationId'>,
14
+ ): string | null {
13
15
  if (application.externalUrl !== null) return new URL(application.externalUrl).origin
14
16
  if (application.slug === null) return null
15
17
 
@@ -1,6 +1,7 @@
1
1
  import {describe, expect, expectTypeOf, it} from 'vitest'
2
2
 
3
3
  import {type Application, type ApplicationInclude} from '../../applications/applications'
4
+ import {type Installation, type InstallationInclude} from '../../installations/installations'
4
5
  import {type MessageBus} from './bus'
5
6
  import {
6
7
  type ApplicationActivity,
@@ -12,6 +13,7 @@ import {
12
13
  DASHBOARD_TOPIC_MANIFEST,
13
14
  type DashboardTopics,
14
15
  type EventTopic,
16
+ type LocalApplication,
15
17
  type PayloadOf,
16
18
  type ReplyOf,
17
19
  type StateTopic,
@@ -25,8 +27,9 @@ type ListedApplication = Extract<
25
27
  NonNullable<ValueOf<'applications.list'>>,
26
28
  {ok: true}
27
29
  >['value'][number]
30
+ // The list value mixes applications and installations; interface shape lives on applications.
28
31
  type ListedInterface = NonNullable<
29
- NonNullable<ListedApplication['activeDeployment']>['interfaces']
32
+ NonNullable<Extract<ListedApplication, {type: unknown}>['activeDeployment']>['interfaces']
30
33
  >[number]
31
34
 
32
35
  describe('dashboard topic types', () => {
@@ -59,8 +62,12 @@ describe('dashboard topic types', () => {
59
62
  expectTypeOf<ValueOf<'applications.capabilities'>>().toEqualTypeOf<CapabilityRecord>()
60
63
  expectTypeOf<ValueOf<'applications.config'>>().toEqualTypeOf<ApplicationConfig[] | null>()
61
64
  expectTypeOf<ValueOf<'applications.list'>>().toEqualTypeOf<TopicResult<
62
- Application<ApplicationInclude>[]
65
+ (Application<ApplicationInclude> | LocalApplication | Installation<InstallationInclude>)[]
63
66
  > | null>()
67
+ // Every kind joins the list value element, distinguished by shape rather than a tag.
68
+ expectTypeOf<Application<ApplicationInclude>>().toMatchTypeOf<ListedApplication>()
69
+ expectTypeOf<LocalApplication>().toMatchTypeOf<ListedApplication>()
70
+ expectTypeOf<Installation<InstallationInclude>>().toMatchTypeOf<ListedApplication>()
64
71
  expectTypeOf<Extract<ListedInterface, {type: 'tile'}>['metadata']>().toEqualTypeOf<{
65
72
  order?: number
66
73
  size: 'small' | 'large' | 'banner'
@@ -1,6 +1,7 @@
1
1
  import {type CurrentUser} from '@sanity/types'
2
2
 
3
3
  import {type Application, type ApplicationInclude} from '../../applications/applications'
4
+ import {type Installation, type InstallationInclude} from '../../installations/installations'
4
5
  import {type OrganizationBase} from '../../organization/organization'
5
6
 
6
7
  /**
@@ -108,6 +109,15 @@ export interface ApplicationContext {
108
109
  readonly document: {readonly id: string} | null
109
110
  }
110
111
 
112
+ /**
113
+ * An application served by a CLI dev server. The workbench publishes it in the same shape as a
114
+ * deployed application; `local` marks it and names the dev server it is served from.
115
+ * @public
116
+ */
117
+ export type LocalApplication = Application<ApplicationInclude> & {
118
+ readonly local: {readonly host: string; readonly port: number}
119
+ }
120
+
111
121
  /**
112
122
  * Declares a topic that stores and replays its current value.
113
123
  * @public
@@ -180,8 +190,16 @@ export interface DashboardTopics {
180
190
  'applications.context.update': EventTopicDef<ApplicationContext | null>
181
191
  /** The foreground application ID, or `null` on dashboard-level routes. */
182
192
  'applications.foreground': StateTopicDef<Application['id'] | null>
183
- /** The dashboard applications available to the current user. */
184
- 'applications.list': StateTopicDef<TopicResult<Application<ApplicationInclude>[]> | null>
193
+ /**
194
+ * The dashboard applications and installations available to the current user. Each member
195
+ * publishes its own raw serialised record, so the kinds are distinguished by shape: an
196
+ * {@link Application} has a `type` of `'studio' | 'coreApp'`, a {@link LocalApplication} adds
197
+ * `local`, and an {@link Installation} has no `type` and carries `applicationId` with a nested
198
+ * `application` object.
199
+ */
200
+ 'applications.list': StateTopicDef<TopicResult<
201
+ (Application<ApplicationInclude> | LocalApplication | Installation<InstallationInclude>)[]
202
+ > | null>
185
203
  'applications.status.update': EventTopicDef<ApplicationStatusUpdate>
186
204
  /**
187
205
  * The session token for the reading connection, or `null` while signed out. The host
@@ -67,6 +67,10 @@ export interface InstallationBase {
67
67
  /** Qualified, globally-unique handle of the installed singleton (e.g. `sanity/<name>`). */
68
68
  reference: string
69
69
  slug: string | null
70
+ /** Sanitized SVG icon markup, or `null` when the singleton has no icon. */
71
+ icon: string | null
72
+ /** The singleton's publishing organization; the top-level `organizationId` is the installing one. */
73
+ organizationId: string
70
74
  }
71
75
  }
72
76
 
@@ -1 +0,0 @@
1
- {"version":3,"file":"topicStore-fPK2CfqH.d.ts","names":[],"sources":["../src/dashboard/messageBus/topics.ts","../src/dashboard/messageBus/bus.ts","../src/dashboard/messageBus/topicStore.ts"],"mappings":"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"}