From ffa28927812bddcf8e337d9fe33e7cf9991a506e Mon Sep 17 00:00:00 2001 From: Ash Date: Thu, 15 Aug 2024 01:30:05 +0100 Subject: [PATCH 1/4] feat(sanity): #TEMPORARY use API vX --- packages/sanity/src/core/preview/documentPreviewStore.ts | 2 +- packages/sanity/src/core/studioClient.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/sanity/src/core/preview/documentPreviewStore.ts b/packages/sanity/src/core/preview/documentPreviewStore.ts index 49745baaa2c..8f21f972fef 100644 --- a/packages/sanity/src/core/preview/documentPreviewStore.ts +++ b/packages/sanity/src/core/preview/documentPreviewStore.ts @@ -141,7 +141,7 @@ export function createDocumentPreviewStore({ } const observeDocumentIdSet = createDocumentIdSetObserver( - versionedClient.withConfig({apiVersion: '2024-07-22'}), + versionedClient.withConfig({apiVersion: 'X'}), ) const observeForPreview = createPreviewObserver({observeDocumentTypeFromId, observePaths}) diff --git a/packages/sanity/src/core/studioClient.ts b/packages/sanity/src/core/studioClient.ts index 7e8dc9e9284..e79821751d0 100644 --- a/packages/sanity/src/core/studioClient.ts +++ b/packages/sanity/src/core/studioClient.ts @@ -10,5 +10,5 @@ import {type SourceClientOptions} from './config' * @internal */ export const DEFAULT_STUDIO_CLIENT_OPTIONS: SourceClientOptions = { - apiVersion: '2024-05-28', + apiVersion: 'X', } From 99543e3b8639d278347d47face1d02a2990950cd Mon Sep 17 00:00:00 2001 From: Ash Date: Mon, 2 Sep 2024 10:13:42 +0100 Subject: [PATCH 2/4] feat: #TEMPORARY use `@sanity/client@bundle-perspective` --- package.json | 3 +- pnpm-lock.yaml | 644 +++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 572 insertions(+), 75 deletions(-) diff --git a/package.json b/package.json index d9dd7feb037..73ac3d5a63f 100644 --- a/package.json +++ b/package.json @@ -106,7 +106,7 @@ "@playwright/test": "1.44.1", "@repo/package.config": "workspace:*", "@repo/tsconfig": "workspace:*", - "@sanity/client": "^6.21.2", + "@sanity/client": "bundle-perspective", "@sanity/eslint-config-i18n": "1.0.0", "@sanity/eslint-config-studio": "^4.0.0", "@sanity/mutate": "^0.8.0", @@ -185,6 +185,7 @@ }, "overrides": { "@npmcli/arborist": "^7.5.4", + "@sanity/client": "bundle-perspective", "@sanity/ui@2": "$@sanity/ui", "@typescript-eslint/eslint-plugin": "$@typescript-eslint/eslint-plugin", "@typescript-eslint/parser": "$@typescript-eslint/parser" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ad5f18ec9fd..b54a6a85e8f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,6 +6,7 @@ settings: overrides: '@npmcli/arborist': ^7.5.4 + '@sanity/client': bundle-perspective '@sanity/ui@2': ^2.8.8 '@typescript-eslint/eslint-plugin': ^7.18.0 '@typescript-eslint/parser': ^7.18.0 @@ -46,8 +47,8 @@ importers: specifier: workspace:* version: link:packages/@repo/tsconfig '@sanity/client': - specifier: ^6.21.2 - version: 6.21.2(debug@4.3.6) + specifier: bundle-perspective + version: 6.21.3-bundle-perspective(debug@4.3.6) '@sanity/eslint-config-i18n': specifier: 1.0.0 version: 1.0.0(eslint@8.57.0)(typescript@5.5.4) @@ -448,8 +449,8 @@ importers: specifier: 3.56.0 version: link:../../packages/@sanity/block-tools '@sanity/client': - specifier: ^6.21.2 - version: 6.21.2(debug@4.3.6) + specifier: bundle-perspective + version: 6.21.3-bundle-perspective(debug@4.3.6) '@sanity/color': specifier: ^3.0.0 version: 3.0.6 @@ -485,10 +486,10 @@ importers: version: link:../../packages/@sanity/migrate '@sanity/preview-url-secret': specifier: ^1.6.1 - version: 1.6.20(@sanity/client@6.21.2(debug@4.3.6)) + version: 1.6.20(@sanity/client@6.21.3-bundle-perspective(debug@4.3.6)) '@sanity/react-loader': specifier: ^1.8.3 - version: 1.10.6(@sanity/client@6.21.2)(react@18.3.1) + version: 1.10.6(@sanity/client@6.21.3-bundle-perspective)(react@18.3.1) '@sanity/tsdoc': specifier: 1.0.90 version: 1.0.90(@types/babel__core@7.20.5)(@types/node@18.19.44)(react-dom@18.3.1(react@18.3.1))(react-is@19.0.0-rc-a7d1240c-20240731)(react@18.3.1)(sanity@packages+sanity)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.31.6) @@ -512,7 +513,7 @@ importers: version: link:../../packages/@sanity/vision '@sanity/visual-editing': specifier: 2.1.8 - version: 2.1.8(@sanity/client@6.21.2)(next@15.0.0-rc.0(@babel/core@7.25.2)(@playwright/test@1.44.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.1.8(@sanity/client@6.21.3-bundle-perspective)(next@15.0.0-rc.0(@babel/core@7.25.2)(@playwright/test@1.44.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@turf/helpers': specifier: ^6.0.1 version: 6.5.0 @@ -739,8 +740,8 @@ importers: specifier: ^7.23.5 version: 7.25.3 '@sanity/client': - specifier: ^6.21.2 - version: 6.21.2(debug@4.3.6) + specifier: bundle-perspective + version: 6.21.3-bundle-perspective(debug@4.3.6) '@sanity/codegen': specifier: 3.56.0 version: link:../codegen @@ -1042,8 +1043,8 @@ importers: packages/@sanity/migrate: dependencies: '@sanity/client': - specifier: ^6.21.2 - version: 6.21.2(debug@4.3.6) + specifier: bundle-perspective + version: 6.21.3-bundle-perspective(debug@4.3.6) '@sanity/mutate': specifier: ^0.8.0 version: 0.8.0(debug@4.3.6) @@ -1171,8 +1172,8 @@ importers: packages/@sanity/types: dependencies: '@sanity/client': - specifier: ^6.21.2 - version: 6.21.2(debug@4.3.6) + specifier: bundle-perspective + version: 6.21.3-bundle-perspective(debug@4.3.6) '@types/react': specifier: ^18.3.3 version: 18.3.3 @@ -1193,8 +1194,8 @@ importers: packages/@sanity/util: dependencies: '@sanity/client': - specifier: ^6.21.2 - version: 6.21.2(debug@4.3.6) + specifier: bundle-perspective + version: 6.21.3-bundle-perspective(debug@4.3.6) '@sanity/types': specifier: 3.56.0 version: link:../types @@ -1294,8 +1295,8 @@ importers: specifier: workspace:* version: link:../cli '@sanity/client': - specifier: ^6.21.2 - version: 6.21.2(debug@4.3.6) + specifier: bundle-perspective + version: 6.21.3-bundle-perspective(debug@4.3.6) '@sanity/codegen': specifier: workspace:* version: link:../codegen @@ -1384,8 +1385,8 @@ importers: specifier: 3.56.0 version: link:../@sanity/cli '@sanity/client': - specifier: ^6.21.2 - version: 6.21.2(debug@4.3.6) + specifier: bundle-perspective + version: 6.21.3-bundle-perspective(debug@4.3.6) '@sanity/color': specifier: ^3.0.0 version: 3.0.6 @@ -1424,7 +1425,7 @@ importers: version: link:../@sanity/mutator '@sanity/presentation': specifier: 1.16.4 - version: 1.16.4(@sanity/client@6.21.2(debug@4.3.6))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + version: 1.16.4(@sanity/client@6.21.3-bundle-perspective(debug@4.3.6))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) '@sanity/schema': specifier: 3.56.0 version: link:../@sanity/schema @@ -1874,8 +1875,8 @@ importers: specifier: 1.44.1 version: 1.44.1 '@sanity/client': - specifier: ^6.21.2 - version: 6.21.2(debug@4.3.6) + specifier: bundle-perspective + version: 6.21.3-bundle-perspective(debug@4.3.6) '@sanity/uuid': specifier: ^3.0.1 version: 3.0.2 @@ -2758,6 +2759,12 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.23.0': + resolution: {integrity: sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/aix-ppc64@0.23.1': resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} engines: {node: '>=18'} @@ -2782,6 +2789,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.23.0': + resolution: {integrity: sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.23.1': resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} engines: {node: '>=18'} @@ -2806,6 +2819,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-arm@0.23.0': + resolution: {integrity: sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.23.1': resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} engines: {node: '>=18'} @@ -2830,6 +2849,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/android-x64@0.23.0': + resolution: {integrity: sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.23.1': resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} engines: {node: '>=18'} @@ -2854,6 +2879,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.23.0': + resolution: {integrity: sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.23.1': resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} engines: {node: '>=18'} @@ -2878,6 +2909,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.23.0': + resolution: {integrity: sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.23.1': resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} engines: {node: '>=18'} @@ -2902,6 +2939,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.23.0': + resolution: {integrity: sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.23.1': resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} engines: {node: '>=18'} @@ -2926,6 +2969,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.23.0': + resolution: {integrity: sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.23.1': resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} engines: {node: '>=18'} @@ -2950,6 +2999,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.23.0': + resolution: {integrity: sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.23.1': resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} engines: {node: '>=18'} @@ -2974,6 +3029,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.23.0': + resolution: {integrity: sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.23.1': resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} engines: {node: '>=18'} @@ -2998,6 +3059,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.23.0': + resolution: {integrity: sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.23.1': resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} engines: {node: '>=18'} @@ -3022,6 +3089,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.23.0': + resolution: {integrity: sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.23.1': resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} engines: {node: '>=18'} @@ -3046,6 +3119,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.23.0': + resolution: {integrity: sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.23.1': resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} engines: {node: '>=18'} @@ -3070,6 +3149,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.23.0': + resolution: {integrity: sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.23.1': resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} engines: {node: '>=18'} @@ -3094,6 +3179,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.23.0': + resolution: {integrity: sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.23.1': resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} engines: {node: '>=18'} @@ -3118,6 +3209,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.23.0': + resolution: {integrity: sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.23.1': resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} engines: {node: '>=18'} @@ -3142,6 +3239,12 @@ packages: cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.23.0': + resolution: {integrity: sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.23.1': resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} engines: {node: '>=18'} @@ -3166,12 +3269,24 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.23.0': + resolution: {integrity: sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.23.1': resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] + '@esbuild/openbsd-arm64@0.23.0': + resolution: {integrity: sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-arm64@0.23.1': resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} engines: {node: '>=18'} @@ -3196,6 +3311,12 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.23.0': + resolution: {integrity: sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.23.1': resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} engines: {node: '>=18'} @@ -3220,6 +3341,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.23.0': + resolution: {integrity: sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.23.1': resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} engines: {node: '>=18'} @@ -3244,6 +3371,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.23.0': + resolution: {integrity: sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.23.1': resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} engines: {node: '>=18'} @@ -3268,6 +3401,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.23.0': + resolution: {integrity: sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.23.1': resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} engines: {node: '>=18'} @@ -3292,6 +3431,12 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.23.0': + resolution: {integrity: sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.23.1': resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} engines: {node: '>=18'} @@ -4163,81 +4308,161 @@ packages: rollup: optional: true + '@rollup/rollup-android-arm-eabi@4.20.0': + resolution: {integrity: sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==} + cpu: [arm] + os: [android] + '@rollup/rollup-android-arm-eabi@4.21.0': resolution: {integrity: sha512-WTWD8PfoSAJ+qL87lE7votj3syLavxunWhzCnx3XFxFiI/BA/r3X7MUM8dVrH8rb2r4AiO8jJsr3ZjdaftmnfA==} cpu: [arm] os: [android] + '@rollup/rollup-android-arm64@4.20.0': + resolution: {integrity: sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==} + cpu: [arm64] + os: [android] + '@rollup/rollup-android-arm64@4.21.0': resolution: {integrity: sha512-a1sR2zSK1B4eYkiZu17ZUZhmUQcKjk2/j9Me2IDjk1GHW7LB5Z35LEzj9iJch6gtUfsnvZs1ZNyDW2oZSThrkA==} cpu: [arm64] os: [android] + '@rollup/rollup-darwin-arm64@4.20.0': + resolution: {integrity: sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==} + cpu: [arm64] + os: [darwin] + '@rollup/rollup-darwin-arm64@4.21.0': resolution: {integrity: sha512-zOnKWLgDld/svhKO5PD9ozmL6roy5OQ5T4ThvdYZLpiOhEGY+dp2NwUmxK0Ld91LrbjrvtNAE0ERBwjqhZTRAA==} cpu: [arm64] os: [darwin] + '@rollup/rollup-darwin-x64@4.20.0': + resolution: {integrity: sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==} + cpu: [x64] + os: [darwin] + '@rollup/rollup-darwin-x64@4.21.0': resolution: {integrity: sha512-7doS8br0xAkg48SKE2QNtMSFPFUlRdw9+votl27MvT46vo44ATBmdZdGysOevNELmZlfd+NEa0UYOA8f01WSrg==} cpu: [x64] os: [darwin] + '@rollup/rollup-linux-arm-gnueabihf@4.20.0': + resolution: {integrity: sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm-gnueabihf@4.21.0': resolution: {integrity: sha512-pWJsfQjNWNGsoCq53KjMtwdJDmh/6NubwQcz52aEwLEuvx08bzcy6tOUuawAOncPnxz/3siRtd8hiQ32G1y8VA==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.20.0': + resolution: {integrity: sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.21.0': resolution: {integrity: sha512-efRIANsz3UHZrnZXuEvxS9LoCOWMGD1rweciD6uJQIx2myN3a8Im1FafZBzh7zk1RJ6oKcR16dU3UPldaKd83w==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.20.0': + resolution: {integrity: sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.21.0': resolution: {integrity: sha512-ZrPhydkTVhyeGTW94WJ8pnl1uroqVHM3j3hjdquwAcWnmivjAwOYjTEAuEDeJvGX7xv3Z9GAvrBkEzCgHq9U1w==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-musl@4.20.0': + resolution: {integrity: sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-arm64-musl@4.21.0': resolution: {integrity: sha512-cfaupqd+UEFeURmqNP2eEvXqgbSox/LHOyN9/d2pSdV8xTrjdg3NgOFJCtc1vQ/jEke1qD0IejbBfxleBPHnPw==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.20.0': + resolution: {integrity: sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==} + cpu: [ppc64] + os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.21.0': resolution: {integrity: sha512-ZKPan1/RvAhrUylwBXC9t7B2hXdpb/ufeu22pG2psV7RN8roOfGurEghw1ySmX/CmDDHNTDDjY3lo9hRlgtaHg==} cpu: [ppc64] os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.20.0': + resolution: {integrity: sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==} + cpu: [riscv64] + os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.21.0': resolution: {integrity: sha512-H1eRaCwd5E8eS8leiS+o/NqMdljkcb1d6r2h4fKSsCXQilLKArq6WS7XBLDu80Yz+nMqHVFDquwcVrQmGr28rg==} cpu: [riscv64] os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.20.0': + resolution: {integrity: sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==} + cpu: [s390x] + os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.21.0': resolution: {integrity: sha512-zJ4hA+3b5tu8u7L58CCSI0A9N1vkfwPhWd/puGXwtZlsB5bTkwDNW/+JCU84+3QYmKpLi+XvHdmrlwUwDA6kqw==} cpu: [s390x] os: [linux] + '@rollup/rollup-linux-x64-gnu@4.20.0': + resolution: {integrity: sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==} + cpu: [x64] + os: [linux] + '@rollup/rollup-linux-x64-gnu@4.21.0': resolution: {integrity: sha512-e2hrvElFIh6kW/UNBQK/kzqMNY5mO+67YtEh9OA65RM5IJXYTWiXjX6fjIiPaqOkBthYF1EqgiZ6OXKcQsM0hg==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-musl@4.20.0': + resolution: {integrity: sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==} + cpu: [x64] + os: [linux] + '@rollup/rollup-linux-x64-musl@4.21.0': resolution: {integrity: sha512-1vvmgDdUSebVGXWX2lIcgRebqfQSff0hMEkLJyakQ9JQUbLDkEaMsPTLOmyccyC6IJ/l3FZuJbmrBw/u0A0uCQ==} cpu: [x64] os: [linux] + '@rollup/rollup-win32-arm64-msvc@4.20.0': + resolution: {integrity: sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==} + cpu: [arm64] + os: [win32] + '@rollup/rollup-win32-arm64-msvc@4.21.0': resolution: {integrity: sha512-s5oFkZ/hFcrlAyBTONFY1TWndfyre1wOMwU+6KCpm/iatybvrRgmZVM+vCFwxmC5ZhdlgfE0N4XorsDpi7/4XQ==} cpu: [arm64] os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.20.0': + resolution: {integrity: sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==} + cpu: [ia32] + os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.21.0': resolution: {integrity: sha512-G9+TEqRnAA6nbpqyUqgTiopmnfgnMkR3kMukFBDsiyy23LZvUCpiUwjTRx6ezYCjJODXrh52rBR9oXvm+Fp5wg==} cpu: [ia32] os: [win32] + '@rollup/rollup-win32-x64-msvc@4.20.0': + resolution: {integrity: sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==} + cpu: [x64] + os: [win32] + '@rollup/rollup-win32-x64-msvc@4.21.0': resolution: {integrity: sha512-2jsCDZwtQvRhejHLfZ1JY6w6kEuEtfF9nzYsZxzSlNVKDX+DpsDJ+Rbjkm74nvg2rdx0gwBS+IMdvwJuq3S9pQ==} cpu: [x64] @@ -4306,8 +4531,8 @@ packages: '@sanity/browserslist-config@1.0.3': resolution: {integrity: sha512-UkJuiTyROgPcxbvpHYyXwr+T88Np4eLzu3h05gMgeZ2hv3EM7g/4VMyng5HuA1JdPQPEdq8bmmfQDR+u4KC+TA==} - '@sanity/client@6.21.2': - resolution: {integrity: sha512-+kpIBCJMmqc1tMOsMS5YgI8Q6QQ/HnQbBFwYiPHMWYRGd1gRpHiX/sTbsbqcGkbgzKM8LDMuwymFuJie/V+eNg==} + '@sanity/client@6.21.3-bundle-perspective': + resolution: {integrity: sha512-5KmcqdYrOjFqHDzmzu82FPlUVK5FEo+s1I2LniiYnpfca6C9LZ9OfTZjbaouHLpV7hMUeF0RcsKtlVdRXLZHJQ==} engines: {node: '>=14.18'} '@sanity/color@3.0.6': @@ -4318,7 +4543,7 @@ packages: resolution: {integrity: sha512-GBZy7zwn478BQ6QuH5SO2QCjnmTG/bvUKSNiGN0WNktvjfA2ACG3v5ORCTo9ParQ4Njc0SyobxjTmMxce0DyOA==} engines: {node: '>=18'} peerDependencies: - '@sanity/client': ^6.21.2 + '@sanity/client': bundle-perspective '@sanity/diff-match-patch@3.1.1': resolution: {integrity: sha512-dSZqGeYjHKGIkqAzGqLcG92LZyJGX+nYbs/FWawhBbTBDWi21kvQ0hsL3DJThuFVWtZMWTQijN3z6Cnd44Pf2g==} @@ -4449,7 +4674,7 @@ packages: resolution: {integrity: sha512-NuphMX/XW3TpCfmVRevuna7ExjpvKZu4dXBu6sZKcE09JZh4wRvBDySfWUm/a1qwN8elm05TC24kEwv8RHxRrQ==} engines: {node: '>=16.14'} peerDependencies: - '@sanity/client': ^6.21.2 + '@sanity/client': bundle-perspective '@sanity/prettier-config@1.0.2': resolution: {integrity: sha512-V4HinfhMYxQoyXefJ2B8zJnwlf7A8mVzAzKk24B/iCg4pkVlMGc8bj0buu9Uieh4bNeHvEAHOIQv+Xd7tiLuNA==} @@ -4460,13 +4685,13 @@ packages: resolution: {integrity: sha512-+UB02o1it0Dg7r73ewe+gyDAX/McmyJYcbEQYaEvwOi8VAxXUSyugyjJVKDIlljiyEkG8K4g3DV1tz2SL3N+tw==} engines: {node: '>=18'} peerDependencies: - '@sanity/client': ^6.21.2 + '@sanity/client': bundle-perspective '@sanity/react-loader@1.10.6': resolution: {integrity: sha512-kQOIzChygYLGFE/cmVQfWaNWJLPEXz8j3cRkzLKcekSjnHNz304pIkGD8Lp+RQa9VYsmyx2+Vv0HTfE5GDbQXA==} engines: {node: '>=18'} peerDependencies: - '@sanity/client': ^6.21.2 + '@sanity/client': bundle-perspective react: ^18.3 || >=19.0.0-rc '@sanity/telemetry@0.7.9': @@ -4523,7 +4748,7 @@ packages: engines: {node: '>=18'} peerDependencies: '@remix-run/react': '>= 2' - '@sanity/client': ^6.21.1 + '@sanity/client': bundle-perspective '@sveltejs/kit': '>= 2' next: '>= 13 || >=14.3.0-canary.0 <14.3.0 || >=15.0.0-rc' react: ^18.3 || >=19.0.0-rc @@ -6518,6 +6743,11 @@ packages: engines: {node: '>=12'} hasBin: true + esbuild@0.23.0: + resolution: {integrity: sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==} + engines: {node: '>=18'} + hasBin: true + esbuild@0.23.1: resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} engines: {node: '>=18'} @@ -10016,6 +10246,11 @@ packages: engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true + rollup@4.20.0: + resolution: {integrity: sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + rollup@4.21.0: resolution: {integrity: sha512-vo+S/lfA2lMS7rZ2Qoubi6I5hwZwzXeUIctILZLbHI+laNtvhhOIon2S1JksA5UEDQ7l3vberd0fxK44lTYjbQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -12612,6 +12847,9 @@ snapshots: '@esbuild/aix-ppc64@0.21.5': optional: true + '@esbuild/aix-ppc64@0.23.0': + optional: true + '@esbuild/aix-ppc64@0.23.1': optional: true @@ -12624,6 +12862,9 @@ snapshots: '@esbuild/android-arm64@0.21.5': optional: true + '@esbuild/android-arm64@0.23.0': + optional: true + '@esbuild/android-arm64@0.23.1': optional: true @@ -12636,6 +12877,9 @@ snapshots: '@esbuild/android-arm@0.21.5': optional: true + '@esbuild/android-arm@0.23.0': + optional: true + '@esbuild/android-arm@0.23.1': optional: true @@ -12648,6 +12892,9 @@ snapshots: '@esbuild/android-x64@0.21.5': optional: true + '@esbuild/android-x64@0.23.0': + optional: true + '@esbuild/android-x64@0.23.1': optional: true @@ -12660,6 +12907,9 @@ snapshots: '@esbuild/darwin-arm64@0.21.5': optional: true + '@esbuild/darwin-arm64@0.23.0': + optional: true + '@esbuild/darwin-arm64@0.23.1': optional: true @@ -12672,6 +12922,9 @@ snapshots: '@esbuild/darwin-x64@0.21.5': optional: true + '@esbuild/darwin-x64@0.23.0': + optional: true + '@esbuild/darwin-x64@0.23.1': optional: true @@ -12684,6 +12937,9 @@ snapshots: '@esbuild/freebsd-arm64@0.21.5': optional: true + '@esbuild/freebsd-arm64@0.23.0': + optional: true + '@esbuild/freebsd-arm64@0.23.1': optional: true @@ -12696,6 +12952,9 @@ snapshots: '@esbuild/freebsd-x64@0.21.5': optional: true + '@esbuild/freebsd-x64@0.23.0': + optional: true + '@esbuild/freebsd-x64@0.23.1': optional: true @@ -12708,6 +12967,9 @@ snapshots: '@esbuild/linux-arm64@0.21.5': optional: true + '@esbuild/linux-arm64@0.23.0': + optional: true + '@esbuild/linux-arm64@0.23.1': optional: true @@ -12720,6 +12982,9 @@ snapshots: '@esbuild/linux-arm@0.21.5': optional: true + '@esbuild/linux-arm@0.23.0': + optional: true + '@esbuild/linux-arm@0.23.1': optional: true @@ -12732,6 +12997,9 @@ snapshots: '@esbuild/linux-ia32@0.21.5': optional: true + '@esbuild/linux-ia32@0.23.0': + optional: true + '@esbuild/linux-ia32@0.23.1': optional: true @@ -12744,6 +13012,9 @@ snapshots: '@esbuild/linux-loong64@0.21.5': optional: true + '@esbuild/linux-loong64@0.23.0': + optional: true + '@esbuild/linux-loong64@0.23.1': optional: true @@ -12756,6 +13027,9 @@ snapshots: '@esbuild/linux-mips64el@0.21.5': optional: true + '@esbuild/linux-mips64el@0.23.0': + optional: true + '@esbuild/linux-mips64el@0.23.1': optional: true @@ -12768,6 +13042,9 @@ snapshots: '@esbuild/linux-ppc64@0.21.5': optional: true + '@esbuild/linux-ppc64@0.23.0': + optional: true + '@esbuild/linux-ppc64@0.23.1': optional: true @@ -12780,6 +13057,9 @@ snapshots: '@esbuild/linux-riscv64@0.21.5': optional: true + '@esbuild/linux-riscv64@0.23.0': + optional: true + '@esbuild/linux-riscv64@0.23.1': optional: true @@ -12792,6 +13072,9 @@ snapshots: '@esbuild/linux-s390x@0.21.5': optional: true + '@esbuild/linux-s390x@0.23.0': + optional: true + '@esbuild/linux-s390x@0.23.1': optional: true @@ -12804,6 +13087,9 @@ snapshots: '@esbuild/linux-x64@0.21.5': optional: true + '@esbuild/linux-x64@0.23.0': + optional: true + '@esbuild/linux-x64@0.23.1': optional: true @@ -12816,9 +13102,15 @@ snapshots: '@esbuild/netbsd-x64@0.21.5': optional: true + '@esbuild/netbsd-x64@0.23.0': + optional: true + '@esbuild/netbsd-x64@0.23.1': optional: true + '@esbuild/openbsd-arm64@0.23.0': + optional: true + '@esbuild/openbsd-arm64@0.23.1': optional: true @@ -12831,6 +13123,9 @@ snapshots: '@esbuild/openbsd-x64@0.21.5': optional: true + '@esbuild/openbsd-x64@0.23.0': + optional: true + '@esbuild/openbsd-x64@0.23.1': optional: true @@ -12843,6 +13138,9 @@ snapshots: '@esbuild/sunos-x64@0.21.5': optional: true + '@esbuild/sunos-x64@0.23.0': + optional: true + '@esbuild/sunos-x64@0.23.1': optional: true @@ -12855,6 +13153,9 @@ snapshots: '@esbuild/win32-arm64@0.21.5': optional: true + '@esbuild/win32-arm64@0.23.0': + optional: true + '@esbuild/win32-arm64@0.23.1': optional: true @@ -12867,6 +13168,9 @@ snapshots: '@esbuild/win32-ia32@0.21.5': optional: true + '@esbuild/win32-ia32@0.23.0': + optional: true + '@esbuild/win32-ia32@0.23.1': optional: true @@ -12879,6 +13183,9 @@ snapshots: '@esbuild/win32-x64@0.21.5': optional: true + '@esbuild/win32-x64@0.23.0': + optional: true + '@esbuild/win32-x64@0.23.1': optional: true @@ -13807,7 +14114,7 @@ snapshots: '@octokit/request-error': 3.0.3 '@octokit/types': 9.3.2 is-plain-object: 5.0.0 - node-fetch: 2.7.0(encoding@0.1.13) + node-fetch: 2.6.7(encoding@0.1.13) universal-user-agent: 6.0.1 transitivePeerDependencies: - encoding @@ -13831,6 +14138,12 @@ snapshots: dependencies: '@octokit/openapi-types': 18.1.1 + '@optimize-lodash/rollup-plugin@5.0.0(rollup@4.20.0)': + dependencies: + '@optimize-lodash/transform': 3.0.4 + '@rollup/pluginutils': 5.1.0(rollup@4.20.0) + rollup: 4.20.0 + '@optimize-lodash/rollup-plugin@5.0.0(rollup@4.21.0)': dependencies: '@optimize-lodash/transform': 3.0.4 @@ -13965,12 +14278,29 @@ snapshots: react-lifecycles-compat: 3.0.4 react-style-proptype: 3.2.2 + '@rollup/plugin-alias@5.1.0(rollup@4.20.0)': + dependencies: + slash: 4.0.0 + optionalDependencies: + rollup: 4.20.0 + '@rollup/plugin-alias@5.1.0(rollup@4.21.0)': dependencies: slash: 4.0.0 optionalDependencies: rollup: 4.21.0 + '@rollup/plugin-babel@6.0.4(@babel/core@7.25.2)(@types/babel__core@7.20.5)(rollup@4.20.0)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.24.7 + '@rollup/pluginutils': 5.1.0(rollup@4.20.0) + optionalDependencies: + '@types/babel__core': 7.20.5 + rollup: 4.20.0 + transitivePeerDependencies: + - supports-color + '@rollup/plugin-babel@6.0.4(@babel/core@7.25.2)(@types/babel__core@7.20.5)(rollup@4.21.0)': dependencies: '@babel/core': 7.25.2 @@ -13982,6 +14312,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@rollup/plugin-commonjs@26.0.1(rollup@4.20.0)': + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@4.20.0) + commondir: 1.0.1 + estree-walker: 2.0.2 + glob: 10.4.5 + is-reference: 1.2.1 + magic-string: 0.30.11 + optionalDependencies: + rollup: 4.20.0 + '@rollup/plugin-commonjs@26.0.1(rollup@4.21.0)': dependencies: '@rollup/pluginutils': 5.1.0(rollup@4.21.0) @@ -13993,12 +14334,29 @@ snapshots: optionalDependencies: rollup: 4.21.0 + '@rollup/plugin-json@6.1.0(rollup@4.20.0)': + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@4.20.0) + optionalDependencies: + rollup: 4.20.0 + '@rollup/plugin-json@6.1.0(rollup@4.21.0)': dependencies: '@rollup/pluginutils': 5.1.0(rollup@4.21.0) optionalDependencies: rollup: 4.21.0 + '@rollup/plugin-node-resolve@15.2.3(rollup@4.20.0)': + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@4.20.0) + '@types/resolve': 1.20.2 + deepmerge: 4.3.1 + is-builtin-module: 3.2.1 + is-module: 1.0.0 + resolve: 1.22.8 + optionalDependencies: + rollup: 4.20.0 + '@rollup/plugin-node-resolve@15.2.3(rollup@4.21.0)': dependencies: '@rollup/pluginutils': 5.1.0(rollup@4.21.0) @@ -14010,6 +14368,13 @@ snapshots: optionalDependencies: rollup: 4.21.0 + '@rollup/plugin-replace@5.0.7(rollup@4.20.0)': + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@4.20.0) + magic-string: 0.30.11 + optionalDependencies: + rollup: 4.20.0 + '@rollup/plugin-replace@5.0.7(rollup@4.21.0)': dependencies: '@rollup/pluginutils': 5.1.0(rollup@4.21.0) @@ -14017,6 +14382,14 @@ snapshots: optionalDependencies: rollup: 4.21.0 + '@rollup/plugin-terser@0.4.4(rollup@4.20.0)': + dependencies: + serialize-javascript: 6.0.2 + smob: 1.5.0 + terser: 5.31.6 + optionalDependencies: + rollup: 4.20.0 + '@rollup/plugin-terser@0.4.4(rollup@4.21.0)': dependencies: serialize-javascript: 6.0.2 @@ -14025,6 +14398,14 @@ snapshots: optionalDependencies: rollup: 4.21.0 + '@rollup/pluginutils@5.1.0(rollup@4.20.0)': + dependencies: + '@types/estree': 1.0.5 + estree-walker: 2.0.2 + picomatch: 2.3.1 + optionalDependencies: + rollup: 4.20.0 + '@rollup/pluginutils@5.1.0(rollup@4.21.0)': dependencies: '@types/estree': 1.0.5 @@ -14033,51 +14414,99 @@ snapshots: optionalDependencies: rollup: 4.21.0 + '@rollup/rollup-android-arm-eabi@4.20.0': + optional: true + '@rollup/rollup-android-arm-eabi@4.21.0': optional: true + '@rollup/rollup-android-arm64@4.20.0': + optional: true + '@rollup/rollup-android-arm64@4.21.0': optional: true + '@rollup/rollup-darwin-arm64@4.20.0': + optional: true + '@rollup/rollup-darwin-arm64@4.21.0': optional: true + '@rollup/rollup-darwin-x64@4.20.0': + optional: true + '@rollup/rollup-darwin-x64@4.21.0': optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.20.0': + optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.21.0': optional: true + '@rollup/rollup-linux-arm-musleabihf@4.20.0': + optional: true + '@rollup/rollup-linux-arm-musleabihf@4.21.0': optional: true + '@rollup/rollup-linux-arm64-gnu@4.20.0': + optional: true + '@rollup/rollup-linux-arm64-gnu@4.21.0': optional: true + '@rollup/rollup-linux-arm64-musl@4.20.0': + optional: true + '@rollup/rollup-linux-arm64-musl@4.21.0': optional: true + '@rollup/rollup-linux-powerpc64le-gnu@4.20.0': + optional: true + '@rollup/rollup-linux-powerpc64le-gnu@4.21.0': optional: true + '@rollup/rollup-linux-riscv64-gnu@4.20.0': + optional: true + '@rollup/rollup-linux-riscv64-gnu@4.21.0': optional: true + '@rollup/rollup-linux-s390x-gnu@4.20.0': + optional: true + '@rollup/rollup-linux-s390x-gnu@4.21.0': optional: true + '@rollup/rollup-linux-x64-gnu@4.20.0': + optional: true + '@rollup/rollup-linux-x64-gnu@4.21.0': optional: true + '@rollup/rollup-linux-x64-musl@4.20.0': + optional: true + '@rollup/rollup-linux-x64-musl@4.21.0': optional: true + '@rollup/rollup-win32-arm64-msvc@4.20.0': + optional: true + '@rollup/rollup-win32-arm64-msvc@4.21.0': optional: true + '@rollup/rollup-win32-ia32-msvc@4.20.0': + optional: true + '@rollup/rollup-win32-ia32-msvc@4.21.0': optional: true + '@rollup/rollup-win32-x64-msvc@4.20.0': + optional: true + '@rollup/rollup-win32-x64-msvc@4.21.0': optional: true @@ -14174,7 +14603,7 @@ snapshots: '@sanity/browserslist-config@1.0.3': {} - '@sanity/client@6.21.2(debug@4.3.6)': + '@sanity/client@6.21.3-bundle-perspective(debug@4.3.6)': dependencies: '@sanity/eventsource': 5.0.2 get-it: 8.6.5(debug@4.3.6) @@ -14184,9 +14613,9 @@ snapshots: '@sanity/color@3.0.6': {} - '@sanity/core-loader@1.6.22(@sanity/client@6.21.2)': + '@sanity/core-loader@1.6.22(@sanity/client@6.21.3-bundle-perspective)': dependencies: - '@sanity/client': 6.21.2(debug@4.3.6) + '@sanity/client': 6.21.3-bundle-perspective(debug@4.3.6) '@sanity/diff-match-patch@3.1.1': {} @@ -14230,7 +14659,7 @@ snapshots: '@sanity/export@3.41.0': dependencies: - '@sanity/client': 6.21.2(debug@4.3.6) + '@sanity/client': 6.21.3-bundle-perspective(debug@4.3.6) '@sanity/util': 3.37.2(debug@4.3.6) archiver: 7.0.1 debug: 4.3.6(supports-color@9.4.0) @@ -14362,7 +14791,7 @@ snapshots: '@sanity/mutate@0.8.0(debug@4.3.6)': dependencies: - '@sanity/client': 6.21.2(debug@4.3.6) + '@sanity/client': 6.21.3-bundle-perspective(debug@4.3.6) '@sanity/diff-match-patch': 3.1.1 hotscript: 1.0.13 mendoza: 3.0.7 @@ -14438,22 +14867,22 @@ snapshots: '@babel/types': 7.25.2 '@microsoft/api-extractor': 7.47.5(@types/node@18.19.44) '@microsoft/tsdoc-config': 0.17.0 - '@optimize-lodash/rollup-plugin': 5.0.0(rollup@4.21.0) - '@rollup/plugin-alias': 5.1.0(rollup@4.21.0) - '@rollup/plugin-babel': 6.0.4(@babel/core@7.25.2)(@types/babel__core@7.20.5)(rollup@4.21.0) - '@rollup/plugin-commonjs': 26.0.1(rollup@4.21.0) - '@rollup/plugin-json': 6.1.0(rollup@4.21.0) - '@rollup/plugin-node-resolve': 15.2.3(rollup@4.21.0) - '@rollup/plugin-replace': 5.0.7(rollup@4.21.0) - '@rollup/plugin-terser': 0.4.4(rollup@4.21.0) + '@optimize-lodash/rollup-plugin': 5.0.0(rollup@4.20.0) + '@rollup/plugin-alias': 5.1.0(rollup@4.20.0) + '@rollup/plugin-babel': 6.0.4(@babel/core@7.25.2)(@types/babel__core@7.20.5)(rollup@4.20.0) + '@rollup/plugin-commonjs': 26.0.1(rollup@4.20.0) + '@rollup/plugin-json': 6.1.0(rollup@4.20.0) + '@rollup/plugin-node-resolve': 15.2.3(rollup@4.20.0) + '@rollup/plugin-replace': 5.0.7(rollup@4.20.0) + '@rollup/plugin-terser': 0.4.4(rollup@4.20.0) '@sanity/browserslist-config': 1.0.3 babel-plugin-react-compiler: 0.0.0-experimental-938cd9a-20240601 browserslist: 4.23.3 cac: 6.7.14 chalk: 4.1.2 chokidar: 3.6.0 - esbuild: 0.23.1 - esbuild-register: 3.6.0(esbuild@0.23.1) + esbuild: 0.23.0 + esbuild-register: 3.6.0(esbuild@0.23.0) find-config: 1.0.0 get-latest-version: 5.1.0(debug@4.3.6) git-url-parse: 14.1.0 @@ -14468,8 +14897,8 @@ snapshots: prompts: 2.4.2 recast: 0.23.9 rimraf: 4.4.1 - rollup: 4.21.0 - rollup-plugin-esbuild: 6.1.1(esbuild@0.23.1)(rollup@4.21.0) + rollup: 4.20.0 + rollup-plugin-esbuild: 6.1.1(esbuild@0.23.0)(rollup@4.20.0) rxjs: 7.8.1 treeify: 1.1.0 typescript: 5.5.4 @@ -14482,11 +14911,11 @@ snapshots: - debug - supports-color - '@sanity/presentation@1.16.4(@sanity/client@6.21.2(debug@4.3.6))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': + '@sanity/presentation@1.16.4(@sanity/client@6.21.3-bundle-perspective(debug@4.3.6))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': dependencies: - '@sanity/client': 6.21.2(debug@4.3.6) + '@sanity/client': 6.21.3-bundle-perspective(debug@4.3.6) '@sanity/icons': 3.4.0(react@18.3.1) - '@sanity/preview-url-secret': 1.6.20(@sanity/client@6.21.2(debug@4.3.6)) + '@sanity/preview-url-secret': 1.6.20(@sanity/client@6.21.3-bundle-perspective(debug@4.3.6)) '@sanity/ui': 2.8.8(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) '@sanity/uuid': 3.0.2 '@types/lodash.isequal': 4.5.8 @@ -14510,15 +14939,15 @@ snapshots: prettier: 3.3.3 prettier-plugin-packagejson: 2.5.1(prettier@3.3.3) - '@sanity/preview-url-secret@1.6.20(@sanity/client@6.21.2(debug@4.3.6))': + '@sanity/preview-url-secret@1.6.20(@sanity/client@6.21.3-bundle-perspective(debug@4.3.6))': dependencies: - '@sanity/client': 6.21.2(debug@4.3.6) + '@sanity/client': 6.21.3-bundle-perspective(debug@4.3.6) '@sanity/uuid': 3.0.2 - '@sanity/react-loader@1.10.6(@sanity/client@6.21.2)(react@18.3.1)': + '@sanity/react-loader@1.10.6(@sanity/client@6.21.3-bundle-perspective)(react@18.3.1)': dependencies: - '@sanity/client': 6.21.2(debug@4.3.6) - '@sanity/core-loader': 1.6.22(@sanity/client@6.21.2) + '@sanity/client': 6.21.3-bundle-perspective(debug@4.3.6) + '@sanity/core-loader': 1.6.22(@sanity/client@6.21.3-bundle-perspective) react: 18.3.1 '@sanity/telemetry@0.7.9(react@18.3.1)': @@ -14538,7 +14967,7 @@ snapshots: '@sanity/test@0.0.1-alpha.1': dependencies: '@playwright/test': 1.44.1 - '@sanity/client': 6.21.2(debug@4.3.6) + '@sanity/client': 6.21.3-bundle-perspective(debug@4.3.6) '@sanity/uuid': 3.0.2 cac: 6.7.14 transitivePeerDependencies: @@ -14552,7 +14981,7 @@ snapshots: '@microsoft/tsdoc-config': 0.17.0 '@portabletext/react': 3.1.0(react@18.3.1) '@portabletext/toolkit': 2.0.15 - '@sanity/client': 6.21.2(debug@4.3.6) + '@sanity/client': 6.21.3-bundle-perspective(debug@4.3.6) '@sanity/color': 3.0.6 '@sanity/icons': 3.4.0(react@18.3.1) '@sanity/pkg-utils': 6.10.9(@types/babel__core@7.20.5)(@types/node@18.19.44)(debug@4.3.6)(typescript@5.5.4) @@ -14564,8 +14993,8 @@ snapshots: chokidar: 3.6.0 cors: 2.8.5 dotenv-flow: 3.3.0 - esbuild: 0.23.1 - esbuild-register: 3.6.0(esbuild@0.23.1) + esbuild: 0.23.0 + esbuild-register: 3.6.0(esbuild@0.23.0) express: 4.19.2 globby: 11.1.0 groq: link:packages/groq @@ -14605,7 +15034,7 @@ snapshots: '@microsoft/tsdoc-config': 0.17.0 '@portabletext/react': 3.1.0(react@18.3.1) '@portabletext/toolkit': 2.0.15 - '@sanity/client': 6.21.2(debug@4.3.6) + '@sanity/client': 6.21.3-bundle-perspective(debug@4.3.6) '@sanity/color': 3.0.6 '@sanity/icons': 3.4.0(react@18.3.1) '@sanity/pkg-utils': 6.10.9(@types/babel__core@7.20.5)(@types/node@18.19.44)(debug@4.3.6)(typescript@5.5.4) @@ -14617,8 +15046,8 @@ snapshots: chokidar: 3.6.0 cors: 2.8.5 dotenv-flow: 3.3.0 - esbuild: 0.23.1 - esbuild-register: 3.6.0(esbuild@0.23.1) + esbuild: 0.23.0 + esbuild-register: 3.6.0(esbuild@0.23.0) express: 4.19.2 globby: 11.1.0 groq: link:packages/groq @@ -14658,7 +15087,7 @@ snapshots: '@microsoft/tsdoc-config': 0.17.0 '@portabletext/react': 3.1.0(react@19.0.0-rc-f994737d14-20240522) '@portabletext/toolkit': 2.0.15 - '@sanity/client': 6.21.2(debug@4.3.6) + '@sanity/client': 6.21.3-bundle-perspective(debug@4.3.6) '@sanity/color': 3.0.6 '@sanity/icons': 3.4.0(react@19.0.0-rc-f994737d14-20240522) '@sanity/pkg-utils': 6.10.9(@types/babel__core@7.20.5)(@types/node@18.19.44)(debug@4.3.6)(typescript@5.5.4) @@ -14670,8 +15099,8 @@ snapshots: chokidar: 3.6.0 cors: 2.8.5 dotenv-flow: 3.3.0 - esbuild: 0.23.1 - esbuild-register: 3.6.0(esbuild@0.23.1) + esbuild: 0.23.0 + esbuild-register: 3.6.0(esbuild@0.23.0) express: 4.19.2 globby: 11.1.0 groq: link:packages/groq @@ -14705,7 +15134,7 @@ snapshots: '@sanity/types@3.37.2(debug@4.3.6)': dependencies: - '@sanity/client': 6.21.2(debug@4.3.6) + '@sanity/client': 6.21.3-bundle-perspective(debug@4.3.6) '@types/react': 18.3.3 transitivePeerDependencies: - debug @@ -14830,7 +15259,7 @@ snapshots: '@sanity/util@3.37.2(debug@4.3.6)': dependencies: - '@sanity/client': 6.21.2(debug@4.3.6) + '@sanity/client': 6.21.3-bundle-perspective(debug@4.3.6) '@sanity/types': 3.37.2(debug@4.3.6) get-random-values-esm: 1.0.2 moment: 2.30.1 @@ -14843,16 +15272,16 @@ snapshots: '@types/uuid': 8.3.4 uuid: 8.3.2 - '@sanity/visual-editing@2.1.8(@sanity/client@6.21.2)(next@15.0.0-rc.0(@babel/core@7.25.2)(@playwright/test@1.44.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@sanity/visual-editing@2.1.8(@sanity/client@6.21.3-bundle-perspective)(next@15.0.0-rc.0(@babel/core@7.25.2)(@playwright/test@1.44.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@sanity/preview-url-secret': 1.6.20(@sanity/client@6.21.2(debug@4.3.6)) + '@sanity/preview-url-secret': 1.6.20(@sanity/client@6.21.3-bundle-perspective(debug@4.3.6)) '@vercel/stega': 0.1.2 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) scroll-into-view-if-needed: 3.1.0 valibot: 0.31.1 optionalDependencies: - '@sanity/client': 6.21.2(debug@4.3.6) + '@sanity/client': 6.21.3-bundle-perspective(debug@4.3.6) next: 15.0.0-rc.0(@babel/core@7.25.2)(@playwright/test@1.44.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@sentry-internal/browser-utils@8.25.0': @@ -17206,6 +17635,13 @@ snapshots: transitivePeerDependencies: - supports-color + esbuild-register@3.6.0(esbuild@0.23.0): + dependencies: + debug: 4.3.6(supports-color@9.4.0) + esbuild: 0.23.0 + transitivePeerDependencies: + - supports-color + esbuild-register@3.6.0(esbuild@0.23.1): dependencies: debug: 4.3.6(supports-color@9.4.0) @@ -17290,6 +17726,33 @@ snapshots: '@esbuild/win32-ia32': 0.21.5 '@esbuild/win32-x64': 0.21.5 + esbuild@0.23.0: + optionalDependencies: + '@esbuild/aix-ppc64': 0.23.0 + '@esbuild/android-arm': 0.23.0 + '@esbuild/android-arm64': 0.23.0 + '@esbuild/android-x64': 0.23.0 + '@esbuild/darwin-arm64': 0.23.0 + '@esbuild/darwin-x64': 0.23.0 + '@esbuild/freebsd-arm64': 0.23.0 + '@esbuild/freebsd-x64': 0.23.0 + '@esbuild/linux-arm': 0.23.0 + '@esbuild/linux-arm64': 0.23.0 + '@esbuild/linux-ia32': 0.23.0 + '@esbuild/linux-loong64': 0.23.0 + '@esbuild/linux-mips64el': 0.23.0 + '@esbuild/linux-ppc64': 0.23.0 + '@esbuild/linux-riscv64': 0.23.0 + '@esbuild/linux-s390x': 0.23.0 + '@esbuild/linux-x64': 0.23.0 + '@esbuild/netbsd-x64': 0.23.0 + '@esbuild/openbsd-arm64': 0.23.0 + '@esbuild/openbsd-x64': 0.23.0 + '@esbuild/sunos-x64': 0.23.0 + '@esbuild/win32-arm64': 0.23.0 + '@esbuild/win32-ia32': 0.23.0 + '@esbuild/win32-x64': 0.23.0 + esbuild@0.23.1: optionalDependencies: '@esbuild/aix-ppc64': 0.23.1 @@ -17658,9 +18121,9 @@ snapshots: execa@5.0.0: dependencies: cross-spawn: 7.0.3 - get-stream: 6.0.1 + get-stream: 6.0.0 human-signals: 2.1.0 - is-stream: 2.0.1 + is-stream: 2.0.0 merge-stream: 2.0.0 npm-run-path: 4.0.1 onetime: 5.1.2 @@ -20547,7 +21010,7 @@ snapshots: bl: 4.1.0 chalk: 4.1.2 cli-cursor: 3.1.0 - cli-spinners: 2.9.2 + cli-spinners: 2.6.1 is-interactive: 1.0.0 log-symbols: 4.1.0 strip-ansi: 6.0.1 @@ -21529,6 +21992,17 @@ snapshots: dependencies: glob: 10.4.5 + rollup-plugin-esbuild@6.1.1(esbuild@0.23.0)(rollup@4.20.0): + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@4.20.0) + debug: 4.3.6(supports-color@9.4.0) + es-module-lexer: 1.5.4 + esbuild: 0.23.0 + get-tsconfig: 4.7.6 + rollup: 4.20.0 + transitivePeerDependencies: + - supports-color + rollup-plugin-esbuild@6.1.1(esbuild@0.23.1)(rollup@4.21.0): dependencies: '@rollup/pluginutils': 5.1.0(rollup@4.21.0) @@ -21544,6 +22018,28 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + rollup@4.20.0: + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.20.0 + '@rollup/rollup-android-arm64': 4.20.0 + '@rollup/rollup-darwin-arm64': 4.20.0 + '@rollup/rollup-darwin-x64': 4.20.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.20.0 + '@rollup/rollup-linux-arm-musleabihf': 4.20.0 + '@rollup/rollup-linux-arm64-gnu': 4.20.0 + '@rollup/rollup-linux-arm64-musl': 4.20.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.20.0 + '@rollup/rollup-linux-riscv64-gnu': 4.20.0 + '@rollup/rollup-linux-s390x-gnu': 4.20.0 + '@rollup/rollup-linux-x64-gnu': 4.20.0 + '@rollup/rollup-linux-x64-musl': 4.20.0 + '@rollup/rollup-win32-arm64-msvc': 4.20.0 + '@rollup/rollup-win32-ia32-msvc': 4.20.0 + '@rollup/rollup-win32-x64-msvc': 4.20.0 + fsevents: 2.3.3 + rollup@4.21.0: dependencies: '@types/estree': 1.0.5 @@ -22897,7 +23393,7 @@ snapshots: dependencies: esbuild: 0.21.5 postcss: 8.4.41 - rollup: 4.21.0 + rollup: 4.20.0 optionalDependencies: '@types/node': 18.19.44 fsevents: 2.3.3 From 0bf8723aa628d3bc73f6fa7149167556b735b1e7 Mon Sep 17 00:00:00 2001 From: Ash Date: Thu, 15 Aug 2024 01:31:04 +0100 Subject: [PATCH 3/4] feat(sanity): adopt `bundlePerspective` for listing documents --- .../sanity/src/core/search/common/types.ts | 2 + .../search/text-search/createTextSearch.ts | 4 ++ .../search/weighted/createSearchQuery.test.ts | 18 ++++---- .../core/search/weighted/createSearchQuery.ts | 9 +++- .../searchResults/item/SearchResultItem.tsx | 5 ++- .../item/SearchResultItemPreview.tsx | 24 ++++++----- .../search/contexts/search/SearchProvider.tsx | 17 +++++++- packages/sanity/src/core/util/draftUtils.ts | 42 ++----------------- .../components/paneItem/PaneItemPreview.tsx | 10 ++--- .../structure/panes/documentList/helpers.ts | 9 ++-- .../panes/documentList/listenSearchQuery.ts | 11 ++++- .../panes/documentList/useDocumentList.ts | 9 +--- 12 files changed, 77 insertions(+), 83 deletions(-) diff --git a/packages/sanity/src/core/search/common/types.ts b/packages/sanity/src/core/search/common/types.ts index 3b4784f9b5f..967fe5ba138 100644 --- a/packages/sanity/src/core/search/common/types.ts +++ b/packages/sanity/src/core/search/common/types.ts @@ -107,6 +107,7 @@ export type SearchOptions = { cursor?: string limit?: number perspective?: string + bundlePerspective?: string isCrossDataset?: boolean queryType?: 'prefixLast' | 'prefixNone' } @@ -190,6 +191,7 @@ export type TextSearchParams = { */ order?: TextSearchOrder[] perspective?: string + bundlePerspective?: string } export type TextSearchResponse> = { diff --git a/packages/sanity/src/core/search/text-search/createTextSearch.ts b/packages/sanity/src/core/search/text-search/createTextSearch.ts index 8f70a904bf6..1093e4fd734 100644 --- a/packages/sanity/src/core/search/text-search/createTextSearch.ts +++ b/packages/sanity/src/core/search/text-search/createTextSearch.ts @@ -142,10 +142,14 @@ export const createTextSearch: SearchStrategyFactory = ( searchOptions.includeDrafts === false && "!(_id in path('drafts.**'))", factoryOptions.filter ? `(${factoryOptions.filter})` : false, searchTerms.filter ? `(${searchTerms.filter})` : false, + // Versions are collated server-side using the `bundlePerspective` option. Therefore, they + // must not be fetched individually. + '!(_id in path("versions.**"))', ].filter((baseFilter): baseFilter is string => Boolean(baseFilter)) const textSearchParams: TextSearchParams = { perspective: searchOptions.perspective, + bundlePerspective: searchOptions.bundlePerspective, query: { string: getQueryString(searchTerms.query, searchOptions), }, diff --git a/packages/sanity/src/core/search/weighted/createSearchQuery.test.ts b/packages/sanity/src/core/search/weighted/createSearchQuery.test.ts index 1ed2e951bfd..6b12f3c2be9 100644 --- a/packages/sanity/src/core/search/weighted/createSearchQuery.test.ts +++ b/packages/sanity/src/core/search/weighted/createSearchQuery.test.ts @@ -46,7 +46,7 @@ describe('createSearchQuery', () => { expect(query).toEqual( `// findability-mvi:${FINDABILITY_MVI}\n` + - '*[_type in $__types && (_id match $t0 || _type match $t0 || title match $t0)]' + + '*[_type in $__types && (_id match $t0 || _type match $t0 || title match $t0) && !(_id in path("versions.**"))]' + '| order(_id asc)' + '[0...$__limit]' + '{_type, _id, _version, ...select(_type == "basic-schema-test" => { "w0": _id,"w1": _type,"w2": title })}', @@ -106,7 +106,7 @@ describe('createSearchQuery', () => { }) expect(query).toContain( - '*[_type in $__types && (_id match $t0 || _type match $t0 || title match $t0 || object.field match $t0)]', + '*[_type in $__types && (_id match $t0 || _type match $t0 || title match $t0 || object.field match $t0) && !(_id in path("versions.**"))]', ) }) @@ -117,7 +117,7 @@ describe('createSearchQuery', () => { }) expect(query).toContain( - '*[_type in $__types && (_id match $t0 || _type match $t0 || title match $t0) && (_id match $t1 || _type match $t1 || title match $t1)]', + '*[_type in $__types && (_id match $t0 || _type match $t0 || title match $t0) && (_id match $t1 || _type match $t1 || title match $t1) && !(_id in path("versions.**"))]', ) expect(params.t0).toEqual('term0*') expect(params.t1).toEqual('term1*') @@ -147,7 +147,7 @@ describe('createSearchQuery', () => { const result = [ `// findability-mvi:${FINDABILITY_MVI}\n` + - '*[_type in $__types && (_id match $t0 || _type match $t0 || title match $t0)]{_type, _id, _version, object{field}}', + '*[_type in $__types && (_id match $t0 || _type match $t0 || title match $t0) && !(_id in path("versions.**"))]{_type, _id, _version, object{field}}', '|order(_id asc)[0...$__limit]', '{_type, _id, _version, ...select(_type == "basic-schema-test" => { "w0": _id,"w1": _type,"w2": title })}', ].join('') @@ -193,7 +193,7 @@ describe('createSearchQuery', () => { ) expect(query).toContain( - '*[_type in $__types && (_id match $t0 || _type match $t0 || title match $t0) && (randomCondition == $customParam)]', + '*[_type in $__types && (_id match $t0 || _type match $t0 || title match $t0) && (randomCondition == $customParam) && !(_id in path("versions.**"))]', ) expect(params.customParam).toEqual('custom') }) @@ -241,7 +241,7 @@ describe('createSearchQuery', () => { expect(query).toEqual( `// findability-mvi:${FINDABILITY_MVI}\n` + - '*[_type in $__types && (_id match $t0 || _type match $t0 || title match $t0)]' + + '*[_type in $__types && (_id match $t0 || _type match $t0 || title match $t0) && !(_id in path("versions.**"))]' + '| order(exampleField desc)' + '[0...$__limit]' + '{_type, _id, _version, ...select(_type == "basic-schema-test" => { "w0": _id,"w1": _type,"w2": title })}', @@ -275,7 +275,7 @@ describe('createSearchQuery', () => { const result = [ `// findability-mvi:${FINDABILITY_MVI}\n`, - '*[_type in $__types && (_id match $t0 || _type match $t0 || title match $t0)]| ', + '*[_type in $__types && (_id match $t0 || _type match $t0 || title match $t0) && !(_id in path("versions.**"))]| ', 'order(exampleField desc,anotherExampleField asc,lower(mapWithField) asc)', '[0...$__limit]{_type, _id, _version, ...select(_type == "basic-schema-test" => { "w0": _id,"w1": _type,"w2": title })}', ].join('') @@ -291,7 +291,7 @@ describe('createSearchQuery', () => { expect(query).toEqual( `// findability-mvi:${FINDABILITY_MVI}\n` + - '*[_type in $__types && (_id match $t0 || _type match $t0 || title match $t0)]' + + '*[_type in $__types && (_id match $t0 || _type match $t0 || title match $t0) && !(_id in path("versions.**"))]' + '| order(_id asc)' + '[0...$__limit]' + '{_type, _id, _version, ...select(_type == "basic-schema-test" => { "w0": _id,"w1": _type,"w2": title })}', @@ -403,7 +403,7 @@ describe('createSearchQuery', () => { * This is an improvement over before, where an illegal term was used (number-as-string, ala ["0"]), * which lead to no hits at all. */ `// findability-mvi:${FINDABILITY_MVI}\n` + - '*[_type in $__types && (_id match $t0 || _type match $t0 || cover[].cards[].title match $t0) && (_id match $t1 || _type match $t1 || cover[].cards[].title match $t1)]' + + '*[_type in $__types && (_id match $t0 || _type match $t0 || cover[].cards[].title match $t0) && (_id match $t1 || _type match $t1 || cover[].cards[].title match $t1) && !(_id in path("versions.**"))]' + '| order(_id asc)' + '[0...$__limit]' + // at this point we could refilter using cover[0].cards[0].title. diff --git a/packages/sanity/src/core/search/weighted/createSearchQuery.ts b/packages/sanity/src/core/search/weighted/createSearchQuery.ts index 1b83a0967b8..500ed7ef806 100644 --- a/packages/sanity/src/core/search/weighted/createSearchQuery.ts +++ b/packages/sanity/src/core/search/weighted/createSearchQuery.ts @@ -135,6 +135,9 @@ export function createSearchQuery( ...createConstraints(terms, specs), filter ? `(${filter})` : '', searchTerms.filter ? `(${searchTerms.filter})` : '', + // Versions are collated server-side using the `bundlePerspective` option. Therefore, they must + // not be fetched individually. + '!(_id in path("versions.**"))', ].filter(Boolean) const selections = specs.map((spec) => { @@ -186,7 +189,11 @@ export function createSearchQuery( __limit: limit, ...(params || {}), }, - options: {tag, perspective: searchOpts.perspective}, + options: { + tag, + perspective: searchOpts.perspective, + bundlePerspective: searchOpts.bundlePerspective, + }, searchSpec: specs, terms, } diff --git a/packages/sanity/src/core/studio/components/navbar/search/components/searchResults/item/SearchResultItem.tsx b/packages/sanity/src/core/studio/components/navbar/search/components/searchResults/item/SearchResultItem.tsx index 0ffbeac0b8e..09ff7a74609 100644 --- a/packages/sanity/src/core/studio/components/navbar/search/components/searchResults/item/SearchResultItem.tsx +++ b/packages/sanity/src/core/studio/components/navbar/search/components/searchResults/item/SearchResultItem.tsx @@ -1,7 +1,7 @@ import {type SanityDocumentLike} from '@sanity/types' import {Box, type ResponsiveMarginProps, type ResponsivePaddingProps} from '@sanity/ui' import {type MouseEvent, useCallback, useMemo} from 'react' -import {useIntentLink} from 'sanity/router' +import {useIntentLink, useRouter} from 'sanity/router' import {type GeneralPreviewLayoutKey, PreviewCard} from '../../../../../../../components' import {useSchema} from '../../../../../../../hooks' @@ -31,7 +31,7 @@ export function SearchResultItem({ const schema = useSchema() const type = schema.get(documentType) const documentPresence = useDocumentPresence(documentId) - + const perspective = useRouter().stickyParams.perspective const params = useMemo(() => ({id: documentId, type: type?.name}), [documentId, type?.name]) const {onClick: onIntentClick, href} = useIntentLink({ intent: 'edit', @@ -65,6 +65,7 @@ export function SearchResultItem({ diff --git a/packages/sanity/src/core/studio/components/navbar/search/components/searchResults/item/SearchResultItemPreview.tsx b/packages/sanity/src/core/studio/components/navbar/search/components/searchResults/item/SearchResultItemPreview.tsx index a267d2658af..1ca03684766 100644 --- a/packages/sanity/src/core/studio/components/navbar/search/components/searchResults/item/SearchResultItemPreview.tsx +++ b/packages/sanity/src/core/studio/components/navbar/search/components/searchResults/item/SearchResultItemPreview.tsx @@ -3,7 +3,7 @@ import {type SchemaType} from '@sanity/types' import {Badge, Box, Flex} from '@sanity/ui' import {useMemo} from 'react' import {useObservable} from 'react-rx' -import {getPublishedId, getVersionFromId, isVersionId} from 'sanity' +import {getPublishedId} from 'sanity' import {styled} from 'styled-components' import {type GeneralPreviewLayoutKey} from '../../../../../../../components' @@ -19,6 +19,7 @@ import {type DocumentPresence, useDocumentPreviewStore} from '../../../../../../ interface SearchResultItemPreviewProps { documentId: string + perspective?: string layout?: GeneralPreviewLayoutKey presence?: DocumentPresence[] schemaType: SchemaType @@ -29,7 +30,8 @@ interface SearchResultItemPreviewProps { * Temporary workaround: force all nested boxes on iOS to use `background-attachment: scroll` * to allow components to render correctly within virtual lists. */ -const SearchResultItemPreviewBox = styled(Box)` +const SearchResultItemPreviewBox = styled(Box)<{$isInPerspective: boolean}>` + opacity: ${(props) => (props.$isInPerspective ? 1 : 0.5)}; @supports (-webkit-overflow-scrolling: touch) { * [data-ui='Box'] { background-attachment: scroll; @@ -43,6 +45,7 @@ const SearchResultItemPreviewBox = styled(Box)` export function SearchResultItemPreview({ documentId, layout, + perspective, presence, schemaType, showBadge = true, @@ -56,15 +59,16 @@ export function SearchResultItemPreview({ schemaType, getPublishedId(documentId), '', - getVersionFromId(documentId), + perspective?.startsWith('bundle.') ? perspective.split('bundle.').at(1) : undefined, ), - [documentId, documentPreviewStore, schemaType], + [documentId, documentPreviewStore, perspective, schemaType], ) const {draft, published, isLoading, version} = useObservable(observable, { draft: null, isLoading: true, published: null, + version: null, }) const sanityDocument = useMemo(() => { @@ -80,24 +84,22 @@ export function SearchResultItemPreview({ {presence && presence.length > 0 && } {showBadge && {schemaType.title}} - + ) - }, [draft, isLoading, presence, published, schemaType.title, showBadge]) + }, [draft, isLoading, presence, published, schemaType.title, showBadge, version]) - const tooltip = + const tooltip = return ( - + void) | null>(null) const [searchCommandList, setSearchCommandList] = useState(null) - + const perspective = useRouter().stickyParams.perspective const schema = useSchema() const currentUser = useCurrentUser() const { @@ -140,6 +142,10 @@ export function SearchProvider({children, fullscreen}: SearchProviderProps) { skipSortByScore: ordering.ignoreScore, ...(ordering.sort ? {sort: [ordering.sort]} : {}), cursor: cursor || undefined, + perspective: omitBundlePerspective(perspective), + bundlePerspective: perspective?.startsWith('bundle.') + ? [perspective.split('bundle.').at(1), DRAFTS_FOLDER].join(',') + : undefined, }, terms: { ...terms, @@ -165,6 +171,7 @@ export function SearchProvider({children, fullscreen}: SearchProviderProps) { searchState.terms, terms, cursor, + perspective, ]) /** @@ -197,3 +204,11 @@ export function SearchProvider({children, fullscreen}: SearchProviderProps) { return {children} } + +function omitBundlePerspective(perspective: string | undefined): string | undefined { + if (perspective?.startsWith('bundle.')) { + return undefined + } + + return perspective +} diff --git a/packages/sanity/src/core/util/draftUtils.ts b/packages/sanity/src/core/util/draftUtils.ts index 8bf591653e7..431012cdbbb 100644 --- a/packages/sanity/src/core/util/draftUtils.ts +++ b/packages/sanity/src/core/util/draftUtils.ts @@ -177,57 +177,23 @@ export interface CollatedHit { type: string draft?: T published?: T - version?: T -} - -interface CollateOptions { - bundlePerspective?: string } /** @internal */ -export function collate< - T extends { - _id: string - _type: string - }, ->(documents: T[], {bundlePerspective}: CollateOptions = {}): CollatedHit[] { +export function collate(documents: T[]): CollatedHit[] { const byId = documents.reduce((res, doc) => { const publishedId = getPublishedId(doc._id) - const isVersion = isVersionId(doc._id) - const bundle = getVersionFromId(doc._id) - let entry = res.get(publishedId) if (!entry) { - entry = { - id: publishedId, - type: doc._type, - published: undefined, - draft: undefined, - version: undefined, - } + entry = {id: publishedId, type: doc._type, published: undefined, draft: undefined} res.set(publishedId, entry) } - if (bundlePerspective && bundle === bundlePerspective) { - entry.version = doc - } - - if (!isVersion) { - entry[publishedId === doc._id ? 'published' : 'draft'] = doc - } - + entry[publishedId === doc._id ? 'published' : 'draft'] = doc return res }, new Map()) - return ( - Array.from(byId.values()) - // Remove entries that have no data, because all the following conditions are true: - // - // 1. They have no published version. - // 2. They have no draft version. - // 3. They have a version, but not the one that is currently checked out. - .filter((entry) => entry.published ?? entry.version ?? entry.draft) - ) + return Array.from(byId.values()) } /** @internal */ diff --git a/packages/sanity/src/structure/components/paneItem/PaneItemPreview.tsx b/packages/sanity/src/structure/components/paneItem/PaneItemPreview.tsx index e47a13ae481..ab7795b2a3c 100644 --- a/packages/sanity/src/structure/components/paneItem/PaneItemPreview.tsx +++ b/packages/sanity/src/structure/components/paneItem/PaneItemPreview.tsx @@ -10,7 +10,6 @@ import { DocumentStatus, DocumentStatusIndicator, type GeneralPreviewLayoutKey, - getDocumentIsInPerspective, getPreviewStateObservable, getPreviewValueWithFallback, isRecord, @@ -66,13 +65,10 @@ export function PaneItemPreview(props: PaneItemPreviewProps) { draft: null, isLoading: true, published: null, + version: null, + perspective, }) - const isInPerspective = useMemo( - () => getDocumentIsInPerspective(value._id, perspective), - [perspective, value._id], - ) - const status = isLoading ? null : ( @@ -85,7 +81,7 @@ export function PaneItemPreview(props: PaneItemPreviewProps) { const tooltip = return ( - + { - const doc = entry.version || entry.draft || entry.published +export function removePublishedWithDrafts(documents: SanityDocumentLike[]): DocumentListPaneItem[] { + return collate(documents).map((entry) => { + const doc = entry.draft || entry.published const isVersion = doc?.id && isVersionId(doc._id) const hasDraft = Boolean(entry.draft) diff --git a/packages/sanity/src/structure/panes/documentList/listenSearchQuery.ts b/packages/sanity/src/structure/panes/documentList/listenSearchQuery.ts index 19c321bf663..c6a14d32b5d 100644 --- a/packages/sanity/src/structure/panes/documentList/listenSearchQuery.ts +++ b/packages/sanity/src/structure/panes/documentList/listenSearchQuery.ts @@ -15,7 +15,13 @@ import { timer, } from 'rxjs' import {exhaustMapWithTrailing} from 'rxjs-exhaustmap-with-trailing' -import {createSearch, getSearchableTypes, type SanityDocumentLike, type Schema} from 'sanity' +import { + createSearch, + DRAFTS_FOLDER, + getSearchableTypes, + type SanityDocumentLike, + type Schema, +} from 'sanity' import {getExtendedProjection} from '../../structureBuilder/util/getExtendedProjection' // FIXME @@ -127,6 +133,9 @@ export function listenSearchQuery(options: ListenQueryOptions): Observable - documents - ? removePublishedWithDrafts(documents, { - bundlePerspective: (perspective ?? '').split('bundle.').at(1), - }) - : EMPTY_ARRAY, - [documents, perspective], + () => (documents ? removePublishedWithDrafts(documents) : EMPTY_ARRAY), + [documents], ) // A state variable to keep track of whether we are currently lazy loading the list. From 5bb20a440193d3039e0d33e66b02fc70d5e1553e Mon Sep 17 00:00:00 2001 From: Ash Date: Fri, 13 Sep 2024 11:32:34 +0100 Subject: [PATCH 4/4] feat(sanity): move perspective resolution to `resolvePerspective` function --- packages/sanity/src/core/bundles/util/util.ts | 8 +- .../context/comments/CommentsProvider.tsx | 8 +- .../utils/getPreviewValueWithFallback.tsx | 4 +- .../item/SearchResultItemPreview.tsx | 4 +- .../search/contexts/search/SearchProvider.tsx | 16 +--- .../__tests__/resolvePerspectives.test.ts | 74 +++++++++++++++++++ packages/sanity/src/core/util/index.ts | 1 + .../src/core/util/resolvePerspective.ts | 42 +++++++++++ .../components/paneItem/PaneItemPreview.tsx | 3 +- .../structureTool/StructureTitle.tsx | 12 +-- .../panes/document/DocumentPaneProvider.tsx | 5 +- .../banners/ReferenceChangedBanner.tsx | 5 +- .../document/inspectors/validation/index.ts | 7 +- .../panes/documentList/listenSearchQuery.ts | 19 ++--- 14 files changed, 154 insertions(+), 54 deletions(-) create mode 100644 packages/sanity/src/core/util/__tests__/resolvePerspectives.test.ts create mode 100644 packages/sanity/src/core/util/resolvePerspective.ts diff --git a/packages/sanity/src/core/bundles/util/util.ts b/packages/sanity/src/core/bundles/util/util.ts index dd06aa276dc..3a1804148be 100644 --- a/packages/sanity/src/core/bundles/util/util.ts +++ b/packages/sanity/src/core/bundles/util/util.ts @@ -1,5 +1,5 @@ import {type BundleDocument} from '../../store/bundles/types' -import {getVersionFromId, isVersionId} from '../../util' +import {getVersionFromId, isVersionId, resolveBundlePerspective} from '../../util' /** * @beta @@ -22,11 +22,13 @@ export function getDocumentIsInPerspective( if (!perspective) return !isVersionId(documentId) - if (!perspective.startsWith('bundle.')) return false + const bundlePerspective = resolveBundlePerspective(perspective) + + if (typeof bundlePerspective === 'undefined') return false // perspective is `bundle.${bundleId}` if (bundleId === 'Published') return false - return bundleId === perspective.replace('bundle.', '') + return bundleId === bundlePerspective } export function versionDocumentExists( diff --git a/packages/sanity/src/core/comments/context/comments/CommentsProvider.tsx b/packages/sanity/src/core/comments/context/comments/CommentsProvider.tsx index 049d7abb152..b7d69ad1f53 100644 --- a/packages/sanity/src/core/comments/context/comments/CommentsProvider.tsx +++ b/packages/sanity/src/core/comments/context/comments/CommentsProvider.tsx @@ -6,7 +6,7 @@ import {CommentsContext} from 'sanity/_singletons' import {useEditState, useSchema, useUserListWithPermissions} from '../../../hooks' import {useCurrentUser} from '../../../store' import {useAddonDataset, useWorkspace} from '../../../studio' -import {getPublishedId} from '../../../util' +import {getPublishedId, resolveBundlePerspective} from '../../../util' import { type CommentOperationsHookOptions, useCommentOperations, @@ -85,15 +85,11 @@ export const CommentsProvider = memo(function CommentsProvider(props: CommentsPr const [status, setStatus] = useState('open') const {client, createAddonDataset, isCreatingDataset} = useAddonDataset() - const bundlePerspective = perspective?.startsWith('bundle.') - ? perspective.split('bundle.').at(1) - : undefined - const editState = useEditState( getPublishedId(versionOrPublishedId), documentType, 'default', - bundlePerspective, + resolveBundlePerspective(perspective), ) const schemaType = useSchema().get(documentType) const currentUser = useCurrentUser() diff --git a/packages/sanity/src/core/preview/utils/getPreviewValueWithFallback.tsx b/packages/sanity/src/core/preview/utils/getPreviewValueWithFallback.tsx index ea1a9109c78..ba4ca303e38 100644 --- a/packages/sanity/src/core/preview/utils/getPreviewValueWithFallback.tsx +++ b/packages/sanity/src/core/preview/utils/getPreviewValueWithFallback.tsx @@ -2,6 +2,8 @@ import {WarningOutlineIcon} from '@sanity/icons' import {type PreviewValue, type SanityDocument} from '@sanity/types' import {assignWith} from 'lodash' +import {resolveBundlePerspective} from '../../util' + const getMissingDocumentFallback = (item: SanityDocument) => ({ title: {item.title ? String(item.title) : 'Missing document'}, subtitle: {item.title ? `Missing document ID: ${item._id}` : `Document ID: ${item._id}`}, @@ -30,7 +32,7 @@ export const getPreviewValueWithFallback = ({ let snapshot: Partial | PreviewValue | null | undefined switch (true) { - case perspective?.startsWith('bundle.'): + case typeof resolveBundlePerspective(perspective) !== 'undefined': snapshot = version || draft || published break case perspective === 'published': diff --git a/packages/sanity/src/core/studio/components/navbar/search/components/searchResults/item/SearchResultItemPreview.tsx b/packages/sanity/src/core/studio/components/navbar/search/components/searchResults/item/SearchResultItemPreview.tsx index 1ca03684766..e8cb95844ed 100644 --- a/packages/sanity/src/core/studio/components/navbar/search/components/searchResults/item/SearchResultItemPreview.tsx +++ b/packages/sanity/src/core/studio/components/navbar/search/components/searchResults/item/SearchResultItemPreview.tsx @@ -3,7 +3,7 @@ import {type SchemaType} from '@sanity/types' import {Badge, Box, Flex} from '@sanity/ui' import {useMemo} from 'react' import {useObservable} from 'react-rx' -import {getPublishedId} from 'sanity' +import {getPublishedId, resolveBundlePerspective} from 'sanity' import {styled} from 'styled-components' import {type GeneralPreviewLayoutKey} from '../../../../../../../components' @@ -59,7 +59,7 @@ export function SearchResultItemPreview({ schemaType, getPublishedId(documentId), '', - perspective?.startsWith('bundle.') ? perspective.split('bundle.').at(1) : undefined, + resolveBundlePerspective(perspective), ), [documentId, documentPreviewStore, perspective, schemaType], ) diff --git a/packages/sanity/src/core/studio/components/navbar/search/contexts/search/SearchProvider.tsx b/packages/sanity/src/core/studio/components/navbar/search/contexts/search/SearchProvider.tsx index 7055f78c01c..4905bb360fe 100644 --- a/packages/sanity/src/core/studio/components/navbar/search/contexts/search/SearchProvider.tsx +++ b/packages/sanity/src/core/studio/components/navbar/search/contexts/search/SearchProvider.tsx @@ -8,6 +8,7 @@ import {type CommandListHandle} from '../../../../../../components' import {useSchema} from '../../../../../../hooks' import {type SearchTerms} from '../../../../../../search' import {useCurrentUser} from '../../../../../../store' +import {resolvePerspectiveOptions} from '../../../../../../util/resolvePerspective' import {useSource} from '../../../../../source' import {SEARCH_LIMIT} from '../../constants' import {type RecentSearch} from '../../datastores/recentSearches' @@ -142,10 +143,9 @@ export function SearchProvider({children, fullscreen}: SearchProviderProps) { skipSortByScore: ordering.ignoreScore, ...(ordering.sort ? {sort: [ordering.sort]} : {}), cursor: cursor || undefined, - perspective: omitBundlePerspective(perspective), - bundlePerspective: perspective?.startsWith('bundle.') - ? [perspective.split('bundle.').at(1), DRAFTS_FOLDER].join(',') - : undefined, + ...resolvePerspectiveOptions(perspective, (perspectives, isSystemPerspective) => + isSystemPerspective ? perspectives : perspectives.concat(DRAFTS_FOLDER), + ), }, terms: { ...terms, @@ -204,11 +204,3 @@ export function SearchProvider({children, fullscreen}: SearchProviderProps) { return {children} } - -function omitBundlePerspective(perspective: string | undefined): string | undefined { - if (perspective?.startsWith('bundle.')) { - return undefined - } - - return perspective -} diff --git a/packages/sanity/src/core/util/__tests__/resolvePerspectives.test.ts b/packages/sanity/src/core/util/__tests__/resolvePerspectives.test.ts new file mode 100644 index 00000000000..812c2bf6df9 --- /dev/null +++ b/packages/sanity/src/core/util/__tests__/resolvePerspectives.test.ts @@ -0,0 +1,74 @@ +import {describe, expect, it} from '@jest/globals' + +import {resolveBundlePerspective, resolvePerspectiveOptions} from '../resolvePerspective' + +describe('resolveBundlePerspective', () => { + it('returns the perspective with the `bundle.` prefix removed', () => { + expect(resolveBundlePerspective('bundle.x')).toBe('x') + }) + + it('returns `undefined` if the provided perspective has no `bundle.` prefix', () => { + expect(resolveBundlePerspective('x')).toBeUndefined() + }) + + it('returns `undefined` if no perspective is provided', () => { + expect(resolveBundlePerspective()).toBeUndefined() + }) +}) + +describe('resolvePerspectiveOptions', () => { + it('includes the `bundlePerspective` property if a bundle is provided', () => { + expect(resolvePerspectiveOptions('bundle.x')).toHaveProperty('bundlePerspective') + expect(resolvePerspectiveOptions('bundle.x')).not.toHaveProperty('perspective') + }) + + it('includes the `perspective` property if a system perspective is provided', () => { + expect(resolvePerspectiveOptions('x')).toHaveProperty('perspective') + expect(resolvePerspectiveOptions('x')).not.toHaveProperty('bundlePerspective') + }) + + it(`removes the bundle prefix if it exists`, () => { + expect(resolvePerspectiveOptions('bundle.x').bundlePerspective).toEqual('x') + expect(resolvePerspectiveOptions('x').perspective).toEqual('x') + }) + + it('allows the extracted perspectives to be transformed', () => { + expect(resolvePerspectiveOptions('x', () => ['y'])).toEqual({ + perspective: 'y', + }) + }) + + it('passes the perspective to the `transformPerspectives` function', () => { + expect.assertions(2) + + resolvePerspectiveOptions('x', (perspectives) => { + expect(perspectives).toEqual(['x']) + return perspectives + }) + + resolvePerspectiveOptions('bundle.x', (perspectives) => { + expect(perspectives).toEqual(['x']) + return perspectives + }) + }) + + it('passes the perspective type to the `transformPerspectives` function', () => { + expect.assertions(2) + + resolvePerspectiveOptions('x', (perspectives, isSystemPerspective) => { + expect(isSystemPerspective).toBe(true) + return perspectives + }) + + resolvePerspectiveOptions('bundle.x', (perspectives, isSystemPerspective) => { + expect(isSystemPerspective).toBe(false) + return perspectives + }) + }) + + it('produces a correctly formatted list of perspectives', () => { + expect(resolvePerspectiveOptions('x', (perspectives) => perspectives.concat('y'))).toEqual({ + perspective: 'x,y', + }) + }) +}) diff --git a/packages/sanity/src/core/util/index.ts b/packages/sanity/src/core/util/index.ts index 15ead1cc190..a34f563d5d6 100644 --- a/packages/sanity/src/core/util/index.ts +++ b/packages/sanity/src/core/util/index.ts @@ -9,6 +9,7 @@ export * from './isString' export * from './isTruthy' export * from './PartialExcept' export * from './resizeObserver' +export * from './resolvePerspective' export * from './schemaUtils' export * from './searchUtils' export * from './supportsTouch' diff --git a/packages/sanity/src/core/util/resolvePerspective.ts b/packages/sanity/src/core/util/resolvePerspective.ts new file mode 100644 index 00000000000..1801d09f900 --- /dev/null +++ b/packages/sanity/src/core/util/resolvePerspective.ts @@ -0,0 +1,42 @@ +/** + * If the provided perspective has the `bundle.` prefix, returns it with this + * prefix removed. + * + * @internal + */ +export function resolveBundlePerspective(perspective?: string): string | undefined { + return perspective?.split(/^bundle./).at(1) +} + +/** + * Given a system perspective, or a bundle name prefixed with `bundle.`, returns + * an object with either `perspective` or `bundlePerspective` properties that + * may be submitted directly to Content Lake APIs. + * + * @internal + */ +export function resolvePerspectiveOptions( + perspective: string | undefined, + transformPerspectives: (perspectives: string[], isSystemPerspective: boolean) => string[] = ( + perspectives, + ) => perspectives, +): + | {perspective: string; bundlePerspective?: never} + | {perspective?: never; bundlePerspective: string} + | Record { + if (typeof perspective === 'undefined') { + return {} + } + + const bundlePerspective = resolveBundlePerspective(perspective) + + if (typeof bundlePerspective === 'string') { + return { + bundlePerspective: transformPerspectives([bundlePerspective], false).join(','), + } + } + + return { + perspective: transformPerspectives([perspective], true).join(','), + } +} diff --git a/packages/sanity/src/structure/components/paneItem/PaneItemPreview.tsx b/packages/sanity/src/structure/components/paneItem/PaneItemPreview.tsx index ab7795b2a3c..0a88a37db78 100644 --- a/packages/sanity/src/structure/components/paneItem/PaneItemPreview.tsx +++ b/packages/sanity/src/structure/components/paneItem/PaneItemPreview.tsx @@ -13,6 +13,7 @@ import { getPreviewStateObservable, getPreviewValueWithFallback, isRecord, + resolveBundlePerspective, SanityDefaultPreview, } from 'sanity' import {styled} from 'styled-components' @@ -56,7 +57,7 @@ export function PaneItemPreview(props: PaneItemPreviewProps) { schemaType, value._id, title, - perspective?.startsWith('bundle.') ? perspective.split('bundle.').at(1) : undefined, + resolveBundlePerspective(perspective), ), [props.documentPreviewStore, schemaType, title, value._id, perspective], ) diff --git a/packages/sanity/src/structure/components/structureTool/StructureTitle.tsx b/packages/sanity/src/structure/components/structureTool/StructureTitle.tsx index ac93b3dc194..2bb83344f82 100644 --- a/packages/sanity/src/structure/components/structureTool/StructureTitle.tsx +++ b/packages/sanity/src/structure/components/structureTool/StructureTitle.tsx @@ -1,6 +1,7 @@ import {type ObjectSchemaType} from '@sanity/types' import {useEffect} from 'react' import { + resolveBundlePerspective, unstable_useValuePreview as useValuePreview, useEditState, useSchema, @@ -26,11 +27,12 @@ const DocumentTitle = (props: {documentId: string; documentType: string}) => { const paneRouter = usePaneRouter() const perspective = paneRouter.perspective ?? router.stickyParams.perspective - const bundlePerspective = perspective?.startsWith('bundle.') - ? perspective.split('bundle.').at(1) - : undefined - - const editState = useEditState(documentId, documentType, 'default', bundlePerspective) + const editState = useEditState( + documentId, + documentType, + 'default', + resolveBundlePerspective(perspective), + ) const schema = useSchema() const {t} = useTranslation(structureLocaleNamespace) const isNewDocument = !editState?.published && !editState?.draft diff --git a/packages/sanity/src/structure/panes/document/DocumentPaneProvider.tsx b/packages/sanity/src/structure/panes/document/DocumentPaneProvider.tsx index c00dde3adfb..9eaeb06a04b 100644 --- a/packages/sanity/src/structure/panes/document/DocumentPaneProvider.tsx +++ b/packages/sanity/src/structure/panes/document/DocumentPaneProvider.tsx @@ -23,6 +23,7 @@ import { isVersionId, type OnPathFocusPayload, type PatchEvent, + resolveBundlePerspective, setAtPath, type StateTree, toMutationPatches, @@ -99,9 +100,7 @@ export const DocumentPaneProvider = memo((props: DocumentPaneProviderProps) => { const params = useUnique(paneRouter.params) || EMPTY_PARAMS const {perspective} = paneRouter - const bundlePerspective = perspective?.startsWith('bundle.') - ? perspective.split('bundle.').at(1) - : undefined + const bundlePerspective = resolveBundlePerspective(perspective) /* Version and the global perspective should match. * If user clicks on add document, and then switches to another version, he should click again on create document. diff --git a/packages/sanity/src/structure/panes/document/documentPanel/banners/ReferenceChangedBanner.tsx b/packages/sanity/src/structure/panes/document/documentPanel/banners/ReferenceChangedBanner.tsx index 07dbd1b2afb..09d30b85963 100644 --- a/packages/sanity/src/structure/panes/document/documentPanel/banners/ReferenceChangedBanner.tsx +++ b/packages/sanity/src/structure/panes/document/documentPanel/banners/ReferenceChangedBanner.tsx @@ -9,6 +9,7 @@ import {debounceTime, map} from 'rxjs/operators' import { type DocumentAvailability, getPublishedId, + resolveBundlePerspective, useDocumentPreviewStore, useTranslation, } from 'sanity' @@ -44,9 +45,7 @@ export const ReferenceChangedBanner = memo(() => { }, [params?.parentRefPath]) const {t} = useTranslation(structureLocaleNamespace) - const bundlePerspective = perspective?.startsWith('bundle.') - ? perspective.split('bundle.').at(1) - : undefined + const bundlePerspective = resolveBundlePerspective(perspective) /** * Loads information regarding the reference field of the parent pane. This diff --git a/packages/sanity/src/structure/panes/document/inspectors/validation/index.ts b/packages/sanity/src/structure/panes/document/inspectors/validation/index.ts index 12f25645662..34e5edc51af 100644 --- a/packages/sanity/src/structure/panes/document/inspectors/validation/index.ts +++ b/packages/sanity/src/structure/panes/document/inspectors/validation/index.ts @@ -7,6 +7,7 @@ import { type FormNodeValidation, isValidationError, isValidationWarning, + resolveBundlePerspective, useTranslation, useValidationStatus, } from 'sanity' @@ -20,14 +21,10 @@ function useMenuItem(props: DocumentInspectorUseMenuItemProps): DocumentInspecto const {t} = useTranslation('validation') const paneRouter = usePaneRouter() - const bundlePerspective = paneRouter.perspective?.startsWith('bundle.') - ? paneRouter.perspective.split('bundle.').at(1) - : undefined - const {validation: validationMarkers} = useValidationStatus( documentId, documentType, - bundlePerspective, + resolveBundlePerspective(paneRouter.perspective), ) const validation: FormNodeValidation[] = useMemo( diff --git a/packages/sanity/src/structure/panes/documentList/listenSearchQuery.ts b/packages/sanity/src/structure/panes/documentList/listenSearchQuery.ts index c6a14d32b5d..61a9791703d 100644 --- a/packages/sanity/src/structure/panes/documentList/listenSearchQuery.ts +++ b/packages/sanity/src/structure/panes/documentList/listenSearchQuery.ts @@ -19,8 +19,10 @@ import { createSearch, DRAFTS_FOLDER, getSearchableTypes, + resolvePerspectiveOptions, type SanityDocumentLike, type Schema, + type SearchOptions, } from 'sanity' import {getExtendedProjection} from '../../structureBuilder/util/getExtendedProjection' @@ -128,16 +130,15 @@ export function listenSearchQuery(options: ListenQueryOptions): Observable + isSystemPerspective ? perspectives : perspectives.concat(DRAFTS_FOLDER), + ), } return search(searchTerms, searchOptions).pipe( @@ -160,11 +161,3 @@ export function listenSearchQuery(options: ListenQueryOptions): Observable