@sanity/util 6.13.0-next.85 → 6.13.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/lib/client.js +3 -2
- package/lib/client.js.map +1 -1
- package/package.json +4 -3
package/lib/client.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { t as ConcurrencyLimiter } from "./concurrency-limiter-BSWisa-q.js";
|
|
2
|
+
import { anySignal } from "get-it/any-signal";
|
|
2
3
|
import { Observable, defer, finalize, switchMap } from "rxjs";
|
|
3
4
|
function acquireSlot(limiter, signal) {
|
|
4
5
|
return new Observable((subscriber) => {
|
|
5
|
-
let subscriptionController = new AbortController(), waitSignal = signal ?
|
|
6
|
+
let subscriptionController = new AbortController(), waitSignal = signal ? anySignal([signal, subscriptionController.signal]) : subscriptionController.signal;
|
|
6
7
|
return limiter.ready(waitSignal).then(() => {
|
|
7
8
|
if (subscriber.closed) {
|
|
8
9
|
limiter.release();
|
|
@@ -23,7 +24,7 @@ function runObservable(limiter, work, signal) {
|
|
|
23
24
|
function createClientConcurrencyLimiter(maxConcurrency, defaultSignal) {
|
|
24
25
|
let limiter = new ConcurrencyLimiter(maxConcurrency);
|
|
25
26
|
function resolveSignal(signal) {
|
|
26
|
-
return !defaultSignal || defaultSignal === signal ? signal || defaultSignal : signal ?
|
|
27
|
+
return !defaultSignal || defaultSignal === signal ? signal || defaultSignal : signal ? anySignal([defaultSignal, signal]) : defaultSignal;
|
|
27
28
|
}
|
|
28
29
|
function wrapClient(client) {
|
|
29
30
|
return new Proxy(client, { get: (target, property) => {
|
package/lib/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","names":[],"sources":["../src/client/concurrency-limiter/createClientConcurrencyLimiter.ts"],"sourcesContent":["import {type ObservableSanityClient, type SanityClient} from '@sanity/client'\nimport {defer, finalize, Observable, switchMap} from 'rxjs'\n\nimport {ConcurrencyLimiter} from '../../concurrency-limiter'\n\nfunction acquireSlot(limiter: ConcurrencyLimiter, signal?: AbortSignal): Observable<() => void> {\n return new Observable((subscriber) => {\n const subscriptionController = new AbortController()\n const waitSignal = signal\n ?
|
|
1
|
+
{"version":3,"file":"client.js","names":[],"sources":["../src/client/concurrency-limiter/createClientConcurrencyLimiter.ts"],"sourcesContent":["import {type ObservableSanityClient, type SanityClient} from '@sanity/client'\nimport {anySignal} from 'get-it/any-signal'\nimport {defer, finalize, Observable, switchMap} from 'rxjs'\n\nimport {ConcurrencyLimiter} from '../../concurrency-limiter'\n\nfunction acquireSlot(limiter: ConcurrencyLimiter, signal?: AbortSignal): Observable<() => void> {\n return new Observable((subscriber) => {\n const subscriptionController = new AbortController()\n const waitSignal = signal\n ? anySignal([signal, subscriptionController.signal])\n : subscriptionController.signal\n\n void limiter.ready(waitSignal).then(\n () => {\n if (subscriber.closed) {\n limiter.release()\n return\n }\n\n subscriber.next(limiter.release)\n subscriber.complete()\n },\n (error) => subscriber.error(error),\n )\n\n return () => subscriptionController.abort()\n })\n}\n\nfunction runObservable<T>(\n limiter: ConcurrencyLimiter,\n work: () => Observable<T>,\n signal?: AbortSignal,\n): Observable<T> {\n return acquireSlot(limiter, signal).pipe(\n switchMap((release) =>\n defer(() => {\n signal?.throwIfAborted()\n return work()\n }).pipe(finalize(release)),\n ),\n )\n}\n\n/**\n * Decorates a sanity client to limit the concurrency of `client.fetch`\n * requests. Keeps the concurrency limit state and returns wrapped clients with\n * that same state if the `clone` `config` or `withConfig` methods are called.\n */\nexport function createClientConcurrencyLimiter(\n maxConcurrency: number,\n defaultSignal?: AbortSignal,\n): (input: SanityClient) => SanityClient {\n const limiter = new ConcurrencyLimiter(maxConcurrency)\n\n function resolveSignal(signal?: AbortSignal): AbortSignal | undefined {\n if (!defaultSignal || defaultSignal === signal) return signal || defaultSignal\n if (!signal) return defaultSignal\n return anySignal([defaultSignal, signal])\n }\n\n function wrapClient(client: SanityClient): SanityClient {\n return new Proxy(client, {\n get: (target, property) => {\n switch (property) {\n case 'fetch': {\n return (...args: Parameters<SanityClient['fetch']>) => {\n const signal = resolveSignal(args[2]?.signal)\n if (signal !== args[2]?.signal) args[2] = {...args[2], signal}\n return limiter.run(() => target.fetch(...args), signal)\n }\n }\n case 'clone': {\n return (...args: Parameters<SanityClient['clone']>) => {\n return wrapClient(target.clone(...args))\n }\n }\n case 'config': {\n return (...args: Parameters<SanityClient['config']>) => {\n const result = target.config(...args)\n\n // if there is a config, it returns a client so we need to wrap again\n if (args[0]) return wrapClient(result)\n return result\n }\n }\n case 'withConfig': {\n return (...args: Parameters<SanityClient['withConfig']>) => {\n return wrapClient(target.withConfig(...args))\n }\n }\n case 'observable': {\n return wrapObservableClient(target.observable)\n }\n default: {\n return target[property as keyof SanityClient]\n }\n }\n },\n })\n }\n\n function wrapObservableClient(\n observableSanityClient: ObservableSanityClient,\n ): ObservableSanityClient {\n return new Proxy(observableSanityClient, {\n get: (target, property) => {\n switch (property) {\n case 'fetch': {\n return (...args: Parameters<ObservableSanityClient['fetch']>) => {\n const signal = resolveSignal(args[2]?.signal)\n if (signal !== args[2]?.signal) args[2] = {...args[2], signal}\n return runObservable(limiter, () => target.fetch(...args), signal)\n }\n }\n case 'clone': {\n return (...args: Parameters<ObservableSanityClient['clone']>) => {\n return wrapObservableClient(target.clone(...args))\n }\n }\n case 'config': {\n return (...args: Parameters<ObservableSanityClient['config']>) => {\n const result = target.config(...args)\n\n // if there is a config, it returns a client so we need to wrap again\n if (args[0]) return wrapObservableClient(result)\n return result\n }\n }\n case 'withConfig': {\n return (...args: Parameters<ObservableSanityClient['withConfig']>) => {\n return wrapObservableClient(target.withConfig(...args))\n }\n }\n default: {\n return target[property as keyof ObservableSanityClient]\n }\n }\n },\n })\n }\n\n return wrapClient\n}\n"],"mappings":";;;AAMA,SAAS,YAAY,SAA6B,QAA8C;CAC9F,OAAO,IAAI,YAAY,eAAe;EACpC,IAAM,yBAAyB,IAAI,gBAAgB,GAC7C,aAAa,SACf,UAAU,CAAC,QAAQ,uBAAuB,MAAM,CAAC,IACjD,uBAAuB;EAe3B,OAbA,QAAa,MAAM,UAAU,CAAC,CAAC,WACvB;GACJ,IAAI,WAAW,QAAQ;IACrB,QAAQ,QAAQ;IAChB;GACF;GAGA,AADA,WAAW,KAAK,QAAQ,OAAO,GAC/B,WAAW,SAAS;EACtB,IACC,UAAU,WAAW,MAAM,KAAK,CACnC,SAEa,uBAAuB,MAAM;CAC5C,CAAC;AACH;AAEA,SAAS,cACP,SACA,MACA,QACe;CACf,OAAO,YAAY,SAAS,MAAM,CAAC,CAAC,KAClC,WAAW,YACT,aACE,QAAQ,eAAe,GAChB,KAAK,EACb,CAAC,CAAC,KAAK,SAAS,OAAO,CAAC,CAC3B,CACF;AACF;;;;;;AAOA,SAAgB,+BACd,gBACA,eACuC;CACvC,IAAM,UAAU,IAAI,mBAAmB,cAAc;CAErD,SAAS,cAAc,QAA+C;EAGpE,OAFI,CAAC,iBAAiB,kBAAkB,SAAe,UAAU,gBAC5D,SACE,UAAU,CAAC,eAAe,MAAM,CAAC,IADpB;CAEtB;CAEA,SAAS,WAAW,QAAoC;EACtD,OAAO,IAAI,MAAM,QAAQ,EACvB,MAAM,QAAQ,aAAa;GACzB,QAAQ,UAAR;IACE,KAAK,SACH,QAAQ,GAAG,SAA4C;KACrD,IAAM,SAAS,cAAc,KAAK,EAAE,EAAE,MAAM;KAE5C,OADI,WAAW,KAAK,EAAE,EAAE,WAAQ,KAAK,KAAK;MAAC,GAAG,KAAK;MAAI;KAAM,IACtD,QAAQ,UAAU,OAAO,MAAM,GAAG,IAAI,GAAG,MAAM;IACxD;IAEF,KAAK,SACH,QAAQ,GAAG,SACF,WAAW,OAAO,MAAM,GAAG,IAAI,CAAC;IAG3C,KAAK,UACH,QAAQ,GAAG,SAA6C;KACtD,IAAM,SAAS,OAAO,OAAO,GAAG,IAAI;KAIpC,OADI,KAAK,KAAW,WAAW,MAAM,IAC9B;IACT;IAEF,KAAK,cACH,QAAQ,GAAG,SACF,WAAW,OAAO,WAAW,GAAG,IAAI,CAAC;IAGhD,KAAK,cACH,OAAO,qBAAqB,OAAO,UAAU;IAE/C,SACE,OAAO,OAAO;GAElB;EACF,EACF,CAAC;CACH;CAEA,SAAS,qBACP,wBACwB;EACxB,OAAO,IAAI,MAAM,wBAAwB,EACvC,MAAM,QAAQ,aAAa;GACzB,QAAQ,UAAR;IACE,KAAK,SACH,QAAQ,GAAG,SAAsD;KAC/D,IAAM,SAAS,cAAc,KAAK,EAAE,EAAE,MAAM;KAE5C,OADI,WAAW,KAAK,EAAE,EAAE,WAAQ,KAAK,KAAK;MAAC,GAAG,KAAK;MAAI;KAAM,IACtD,cAAc,eAAe,OAAO,MAAM,GAAG,IAAI,GAAG,MAAM;IACnE;IAEF,KAAK,SACH,QAAQ,GAAG,SACF,qBAAqB,OAAO,MAAM,GAAG,IAAI,CAAC;IAGrD,KAAK,UACH,QAAQ,GAAG,SAAuD;KAChE,IAAM,SAAS,OAAO,OAAO,GAAG,IAAI;KAIpC,OADI,KAAK,KAAW,qBAAqB,MAAM,IACxC;IACT;IAEF,KAAK,cACH,QAAQ,GAAG,SACF,qBAAqB,OAAO,WAAW,GAAG,IAAI,CAAC;IAG1D,SACE,OAAO,OAAO;GAElB;EACF,EACF,CAAC;CACH;CAEA,OAAO;AACT"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sanity/util",
|
|
3
|
-
"version": "6.13.0
|
|
3
|
+
"version": "6.13.0",
|
|
4
4
|
"description": "Utilities shared across projects of Sanity",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cms",
|
|
@@ -66,9 +66,10 @@
|
|
|
66
66
|
"dependencies": {
|
|
67
67
|
"@date-fns/tz": "^1.5.0",
|
|
68
68
|
"@date-fns/utc": "^2.1.1",
|
|
69
|
-
"@sanity/client": "^8.
|
|
70
|
-
"@sanity/types": "6.13.0
|
|
69
|
+
"@sanity/client": "^8.6.1",
|
|
70
|
+
"@sanity/types": "6.13.0",
|
|
71
71
|
"date-fns": "^4.4.0",
|
|
72
|
+
"get-it": "^9.5.4",
|
|
72
73
|
"rxjs": "^7.8.2"
|
|
73
74
|
},
|
|
74
75
|
"devDependencies": {
|