@sanity/sdk 2.14.1 → 2.16.0
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/dist/_chunks-dts/createGroqSearchFilter.d.ts +5 -4
- package/dist/_chunks-dts/createGroqSearchFilter.d.ts.map +1 -1
- package/dist/_chunks-es/createGroqSearchFilter.js +152 -148
- package/dist/_chunks-es/createGroqSearchFilter.js.map +1 -1
- package/dist/_chunks-es/version.js +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +32 -34
- package/src/auth/authStore.test.ts +1 -1
- package/src/auth/handleAuthCallback.test.ts +1 -1
- package/src/auth/refreshStampedToken.test.ts +199 -477
- package/src/auth/refreshStampedToken.ts +67 -195
- package/src/client/liveEvents.test.ts +151 -0
- package/src/client/liveEvents.ts +107 -0
- package/src/document/sharedListener.test.ts +1 -0
- package/src/document/sharedListener.ts +2 -0
- package/src/query/queryStore.test.ts +232 -38
- package/src/query/queryStore.ts +47 -47
- package/src/query/reducers.test.ts +0 -42
- package/src/query/reducers.ts +0 -16
- package/src/releases/getPerspectiveState.test.ts +3 -8
- package/src/releases/getPerspectiveState.ts +6 -19
- package/src/releases/observeReleases.test.ts +127 -0
- package/src/releases/observeReleases.ts +102 -0
- package/src/releases/releasesStore.test.ts +51 -53
- package/src/releases/releasesStore.ts +32 -32
- package/src/releases/utils/sortReleases.test.ts +36 -0
- package/src/releases/utils/sortReleases.ts +14 -9
|
@@ -333,4 +333,40 @@ describe('sortReleases()', () => {
|
|
|
333
333
|
expect(sorted[idx]['_id']).toContain(expectedName)
|
|
334
334
|
})
|
|
335
335
|
})
|
|
336
|
+
|
|
337
|
+
it('should not throw when a release has no metadata', () => {
|
|
338
|
+
// Releases created without a title/type can come back from the API with no
|
|
339
|
+
// `metadata` object at all. Sorting must not throw on these, otherwise the
|
|
340
|
+
// whole releases subscription errors and the list comes back empty.
|
|
341
|
+
const releaseWithoutMetadata = {
|
|
342
|
+
_id: '_.releases.rnometa',
|
|
343
|
+
_rev: 'rev',
|
|
344
|
+
_type: 'system.release',
|
|
345
|
+
_createdAt: '2024-10-24T00:00:00Z',
|
|
346
|
+
_updatedAt: '2024-10-24T00:00:00Z',
|
|
347
|
+
state: 'active',
|
|
348
|
+
name: 'rnometa',
|
|
349
|
+
} as unknown as ReleaseDocument
|
|
350
|
+
|
|
351
|
+
const releases: ReleaseDocument[] = [
|
|
352
|
+
createReleaseMock({
|
|
353
|
+
_id: '_.releases.rasap1',
|
|
354
|
+
_createdAt: '2024-10-25T00:00:00Z',
|
|
355
|
+
metadata: {releaseType: 'asap'},
|
|
356
|
+
}),
|
|
357
|
+
releaseWithoutMetadata,
|
|
358
|
+
createReleaseMock({
|
|
359
|
+
_id: '_.releases.rundecided1',
|
|
360
|
+
_createdAt: '2024-10-26T00:00:00Z',
|
|
361
|
+
metadata: {releaseType: 'undecided'},
|
|
362
|
+
}),
|
|
363
|
+
]
|
|
364
|
+
|
|
365
|
+
let sorted: ReleaseDocument[] = []
|
|
366
|
+
expect(() => {
|
|
367
|
+
sorted = sortReleases(releases)
|
|
368
|
+
}).not.toThrow()
|
|
369
|
+
expect(sorted).toHaveLength(3)
|
|
370
|
+
expect(sorted.map((r) => r._id)).toContain('_.releases.rnometa')
|
|
371
|
+
})
|
|
336
372
|
})
|
|
@@ -6,25 +6,30 @@ export function sortReleases(releases: ReleaseDocument[] = []): ReleaseDocument[
|
|
|
6
6
|
// The order should always be:
|
|
7
7
|
// [undecided (sortByCreatedAt), scheduled(sortBy publishAt || metadata.intendedPublishAt), asap(sortByCreatedAt)]
|
|
8
8
|
return [...releases].sort((a, b) => {
|
|
9
|
+
// metadata is optional on a release document; guard against releases that
|
|
10
|
+
// have no metadata at all so sorting can't throw and wipe out the list.
|
|
11
|
+
const aType = a.metadata?.releaseType
|
|
12
|
+
const bType = b.metadata?.releaseType
|
|
13
|
+
|
|
9
14
|
// undecided are always first, then by createdAt descending
|
|
10
|
-
if (
|
|
15
|
+
if (aType === 'undecided' && bType !== 'undecided') {
|
|
11
16
|
return -1
|
|
12
17
|
}
|
|
13
|
-
if (
|
|
18
|
+
if (aType !== 'undecided' && bType === 'undecided') {
|
|
14
19
|
return 1
|
|
15
20
|
}
|
|
16
|
-
if (
|
|
21
|
+
if (aType === 'undecided' && bType === 'undecided') {
|
|
17
22
|
// Sort by createdAt
|
|
18
23
|
return new Date(b._createdAt).getTime() - new Date(a._createdAt).getTime()
|
|
19
24
|
}
|
|
20
25
|
|
|
21
26
|
// Scheduled are always at the middle, then by publishAt descending
|
|
22
|
-
if (
|
|
23
|
-
const aPublishAt = a['publishAt'] || a.metadata['intendedPublishAt']
|
|
27
|
+
if (aType === 'scheduled' && bType === 'scheduled') {
|
|
28
|
+
const aPublishAt = a['publishAt'] || a.metadata?.['intendedPublishAt']
|
|
24
29
|
if (!aPublishAt) {
|
|
25
30
|
return 1
|
|
26
31
|
}
|
|
27
|
-
const bPublishAt = b['publishAt'] || b.metadata['intendedPublishAt']
|
|
32
|
+
const bPublishAt = b['publishAt'] || b.metadata?.['intendedPublishAt']
|
|
28
33
|
if (!bPublishAt) {
|
|
29
34
|
return -1
|
|
30
35
|
}
|
|
@@ -32,13 +37,13 @@ export function sortReleases(releases: ReleaseDocument[] = []): ReleaseDocument[
|
|
|
32
37
|
}
|
|
33
38
|
|
|
34
39
|
// ASAP are always last, then by createdAt descending
|
|
35
|
-
if (
|
|
40
|
+
if (aType === 'asap' && bType !== 'asap') {
|
|
36
41
|
return 1
|
|
37
42
|
}
|
|
38
|
-
if (
|
|
43
|
+
if (aType !== 'asap' && bType === 'asap') {
|
|
39
44
|
return -1
|
|
40
45
|
}
|
|
41
|
-
if (
|
|
46
|
+
if (aType === 'asap' && bType === 'asap') {
|
|
42
47
|
// Sort by createdAt
|
|
43
48
|
return new Date(b._createdAt).getTime() - new Date(a._createdAt).getTime()
|
|
44
49
|
}
|