@sanity/mutate
Advanced tools
| import { a as IdentifiedSanityDocument, d as SanityDocumentBase, f as Transaction, o as Mutation, s as NodePatch } from "./types.js"; | ||
| import { Mutation as SanityMutation, PatchMutationOperation, PatchOperations } from "@sanity/client"; | ||
| import * as _____2 from "../.."; | ||
| type SanityDiffMatchPatch = { | ||
@@ -91,3 +90,3 @@ id: string; | ||
| [x: string]: string | readonly any[]; | ||
| items: _____2.AnyArray; | ||
| items: undefined; | ||
| replace?: undefined; | ||
@@ -141,3 +140,3 @@ }; | ||
| [x: string]: string | readonly any[]; | ||
| items: _____2.AnyArray; | ||
| items: undefined; | ||
| replace?: undefined; | ||
@@ -161,3 +160,3 @@ }; | ||
| replace: string; | ||
| items: _____2.AnyArray; | ||
| items: undefined; | ||
| }; | ||
@@ -164,0 +163,0 @@ unset?: undefined; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/encoders/sanity/types.ts","../../src/encoders/sanity/decode.ts","../../src/encoders/sanity/encode.ts","../../src/encoders/sanity/index.ts"],"mappings":";;;KAaY,oBAAA;EACV,EAAA;EACA,cAAA;IAAA,CAAkB,IAAA;EAAA;AAAA;AAAA,KAGR,cAAA;EACV,EAAA;EACA,GAAA;IAAA,CAAO,IAAA;EAAA;AAAA;AAAA,KAGG,YAAA;EACV,MAAA;EACA,KAAA;AAAA;AAAA,KAGU,WAAA;EACV,KAAA;EACA,KAAA;AAAA;AAAA,KAGU,aAAA;EACV,OAAA;EACA,KAAA;AAAA;AAAA,KAGU,MAAA,GAAS,YAAA,GAAe,WAAA,GAAc,aAAA;AAAA,KAEtC,iBAAA;EACV,EAAA;EACA,MAAA,EAAQ,MAAA;AAAA;AAAA,KAGE,gBAAA;EACV,EAAA;EACA,KAAA;AAAA;AAAA,KAGU,cAAA;EACV,EAAA;EACA,GAAA;IAAA,CAAO,IAAA;EAAA;AAAA;AAAA,KAGG,cAAA;EACV,EAAA;EACA,GAAA;IAAA,CAAO,IAAA;EAAA;AAAA;AAAA,KAGG,uBAAA;EACV,EAAA;EACA,YAAA;IAAA,CAAgB,IAAA;EAAA;AAAA;AAAA,KAGN,WAAA,GAAc,eAAA;EAAmB,EAAA;AAAA;AAAA,KAEjC,+BAAA,aACE,wBAAA,GAA2B,wBAAA;EAEvC,iBAAA,EAAmB,GAAA;AAAA;AAAA,KAGT,6BAAA,aACE,wBAAA,GAA2B,wBAAA;EAEvC,eAAA,EAAiB,GAAA;AAAA;AAAA,KAGP,oBAAA,aAAiC,kBAAA;EAC3C,MAAA,EAAQ,GAAA;AAAA;AAAA,KAGE,oBAAA;EACV,MAAA;IAAS,EAAA;EAAA;AAAA;AAAA,iBCaK,SAAA,aAAsB,kBAAA,CAAA,CACpC,eAAA,EAAiB,cAAA,CAAe,GAAA,MAAM,QAAA;AAAA,iBAKxB,MAAA,aAAmB,kBAAA,CAAA,CACjC,eAAA,EAAiB,cAAA,CAAe,GAAA,IAAI,QAAA;AAAA,iBC9FtB,MAAA,CAAO,QAAA,EAAU,QAAA,GAAW,cAAA,KAAmB,cAAA;AAAA,iBAI/C,SAAA,CAAU,SAAA,EAAW,QAAA,KAAa,cAAA;AAAA,iBAIlC,iBAAA,CAAkB,WAAA,EAAa,WAAA;;aAAA,cAAA;AAAA;AAAA,iBAO/B,cAAA,CACd,QAAA,EAAU,QAAA,GACT,cAAA,KAAmB,cAAA;AAAA,iBA2BN,WAAA,CAAY,KAAA,EAAO,SAAA;;;;;;;;;;WAAS,MAAA,CAAA,QAAA"} | ||
| {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/encoders/sanity/types.ts","../../src/encoders/sanity/decode.ts","../../src/encoders/sanity/encode.ts","../../src/encoders/sanity/index.ts"],"mappings":";;KAaY,oBAAA;EACV,EAAA;EACA,cAAA;IAAA,CAAkB,IAAA;EAAA;AAAA;AAAA,KAGR,cAAA;EACV,EAAA;EACA,GAAA;IAAA,CAAO,IAAA;EAAA;AAAA;AAAA,KAGG,YAAA;EACV,MAAA;EACA,KAAA;AAAA;AAAA,KAGU,WAAA;EACV,KAAA;EACA,KAAA;AAAA;AAAA,KAGU,aAAA;EACV,OAAA;EACA,KAAA;AAAA;AAAA,KAGU,MAAA,GAAS,YAAA,GAAe,WAAA,GAAc,aAAA;AAAA,KAEtC,iBAAA;EACV,EAAA;EACA,MAAA,EAAQ,MAAA;AAAA;AAAA,KAGE,gBAAA;EACV,EAAA;EACA,KAAA;AAAA;AAAA,KAGU,cAAA;EACV,EAAA;EACA,GAAA;IAAA,CAAO,IAAA;EAAA;AAAA;AAAA,KAGG,cAAA;EACV,EAAA;EACA,GAAA;IAAA,CAAO,IAAA;EAAA;AAAA;AAAA,KAGG,uBAAA;EACV,EAAA;EACA,YAAA;IAAA,CAAgB,IAAA;EAAA;AAAA;AAAA,KAGN,WAAA,GAAc,eAAA;EAAmB,EAAA;AAAA;AAAA,KAEjC,+BAAA,aACE,wBAAA,GAA2B,wBAAA;EAEvC,iBAAA,EAAmB,GAAA;AAAA;AAAA,KAGT,6BAAA,aACE,wBAAA,GAA2B,wBAAA;EAEvC,eAAA,EAAiB,GAAA;AAAA;AAAA,KAGP,oBAAA,aAAiC,kBAAA;EAC3C,MAAA,EAAQ,GAAA;AAAA;AAAA,KAGE,oBAAA;EACV,MAAA;IAAS,EAAA;EAAA;AAAA;AAAA,iBCaK,SAAA,aAAsB,kBAAA,CAAA,CACpC,eAAA,EAAiB,cAAA,CAAe,GAAA,MAAM,QAAA;AAAA,iBAKxB,MAAA,aAAmB,kBAAA,CAAA,CACjC,eAAA,EAAiB,cAAA,CAAe,GAAA,IAAI,QAAA;AAAA,iBC9FtB,MAAA,CAAO,QAAA,EAAU,QAAA,GAAW,cAAA,KAAmB,cAAA;AAAA,iBAI/C,SAAA,CAAU,SAAA,EAAW,QAAA,KAAa,cAAA;AAAA,iBAIlC,iBAAA,CAAkB,WAAA,EAAa,WAAA;;aAAA,cAAA;AAAA;AAAA,iBAO/B,cAAA,CACd,QAAA,EAAU,QAAA,GACT,cAAA,KAAmB,cAAA;AAAA,iBA2BN,WAAA,CAAY,KAAA,EAAO,SAAA;;;;;;;;;;WAAS,SAAA"} |
@@ -105,10 +105,47 @@ import { d as SanityMutation } from "./index.js"; | ||
| type MutationGroup = NonTransactionalMutationGroup | TransactionalMutationGroup; | ||
| /** | ||
| * # Subscription requirement | ||
| * | ||
| * `mutate`, `transaction` and `submit` only do useful work while at least one | ||
| * subscriber to `listen(id)` is active. `listen(id)` is what wires the rebase | ||
| * pipeline (remote events ↔ inflight ↔ local mutations) for a document; with | ||
| * no subscriber, the pipeline is torn down and calls to `submit()` are | ||
| * silently dropped. | ||
| * | ||
| * In practice this means: keep a `listen(id)` subscription open for every | ||
| * document you intend to read or write. `listenEvents(id)` alone is not | ||
| * enough — it provides a richer event stream but does not activate the submit | ||
| * pipeline. | ||
| * | ||
| * In development builds the store will emit a `console.warn` if `submit()` is | ||
| * called without an active `listen()` subscriber, to make this contract | ||
| * observable. | ||
| */ | ||
| interface OptimisticStore { | ||
| /** | ||
| * Subscribe to a stream of rich events for a document (sync, optimistic, | ||
| * remote mutation). Useful for inspecting rebase behaviour and staged | ||
| * changes. | ||
| * | ||
| * Note: subscribing to `listenEvents` alone is not sufficient to activate | ||
| * the submit pipeline. Use `listen(id)` for that. | ||
| */ | ||
| listenEvents: (id: string) => Observable<RemoteDocumentEvent | OptimisticDocumentEvent>; | ||
| /** | ||
| * Applies the given mutations. Mutations are not guaranteed to be submitted in the same transaction | ||
| * Stages mutations to be applied optimistically and later submitted to the | ||
| * backend. Mutations are not guaranteed to be submitted in the same | ||
| * transaction. | ||
| * | ||
| * Requires at least one active `listen(id)` subscriber covering the | ||
| * affected document(s) before `submit()` is called; otherwise the staged | ||
| * mutations are dropped when the pipeline tears down. | ||
| */ | ||
| mutate(mutation: Mutation[]): void; | ||
| /** | ||
| * Makes sure the given mutations are posted in a single transaction | ||
| * Stages mutations to be applied optimistically and submitted as a single | ||
| * transaction. | ||
| * | ||
| * Requires at least one active `listen(id)` subscriber covering the | ||
| * affected document(s) before `submit()` is called; otherwise the staged | ||
| * mutations are dropped when the pipeline tears down. | ||
| */ | ||
@@ -120,7 +157,15 @@ transaction(transaction: { | ||
| /** | ||
| * Checkout a document for editing. This is required to be able to see optimistic changes | ||
| * Checkout a document for editing. This is required to be able to see | ||
| * optimistic changes and to flush mutations with `submit()`. Subscribing | ||
| * keeps the store's rebase pipeline alive for `id`; unsubscribing releases | ||
| * it. | ||
| */ | ||
| listen(id: string): Observable<SanityDocumentBase | undefined>; | ||
| /** | ||
| * Submit pending mutations | ||
| * Submit pending mutations to the backend. | ||
| * | ||
| * Only takes effect while at least one `listen(id)` subscriber is active | ||
| * for an affected document. If called with no active subscriber, the | ||
| * pending mutations remain staged (and a `console.warn` is emitted in | ||
| * development). | ||
| */ | ||
@@ -374,4 +419,4 @@ submit(): void; | ||
| declare function createSharedListener(listen: SharedListenerListenFn, options?: ListenerOptions): Observable<WelcomeEvent | ListenerMutationEvent | ReconnectEvent>; | ||
| declare function createOptimisticStoreMockBackend(): OptimisticStoreBackend; | ||
| export { MutationResult as $, DocumentResult as A, DocumentUpdateListener as B, LocalState as C, createDocumentEventListener as D, createOptimisticStoreInternal as E, createReadOnlyStore as F, ListenerDisconnectEvent as G, toTransactions as H, DocumentMutationUpdate as I, ListenerMutationEvent as J, ListenerEndpointEvent as K, DocumentReconnectUpdate as L, InaccessibleReason as M, MapTuple as N, AccessibleDocumentResult as O, ReadOnlyDocumentStore as P, MutationGroup as Q, DocumentSyncUpdate as R, createOptimisticStoreClientBackend as S, createOptimisticStore as T, DocumentMap as U, createDocumentUpdateListener as V, ListenerChannelErrorEvent as W, ListenerSyncEvent as X, ListenerReconnectEvent as Y, ListenerWelcomeEvent as Z, FetchDocuments as _, createSharedListener as a, RemoteMutationEvent as at, createDocumentLoaderFromClient as b, DocumentIdSetState as c, TransactionalMutationGroup as ct, InitialEvent as d, NonTransactionalMutationGroup as et, InsertMethod as f, DocEndpointResponse as g, toState as h, SharedListenerListenFn as i, RemoteDocumentEvent as it, InaccessibleDocumentResult as j, DocumentLoader as k, FetchDocumentIdsFn as l, RawPatch as lt, createIdSetListenerFromClient as m, ListenerOptions as n, OptimisticStore as nt, createSharedListenerFromClient as o, RemoteSyncEvent as ot, createIdSetListener as p, ListenerEvent as q, RequestOptions$1 as r, QueryParams$1 as rt, DocumentIdSetEvent as s, SubmitResult as st, createOptimisticStoreMockBackend as t, OptimisticDocumentEvent as tt, IdSetListenFn as u, OmittedDocument as v, OptimisticStoreBackend as w, SanityClientLike as x, createDocumentLoader as y, DocumentUpdate as z }; | ||
| declare function createOptimisticStoreInMemoryBackend(): OptimisticStoreBackend; | ||
| export { MutationResult as $, DocumentResult as A, DocumentUpdateListener as B, LocalState as C, createDocumentEventListener as D, createOptimisticStoreInternal as E, createReadOnlyStore as F, ListenerDisconnectEvent as G, toTransactions as H, DocumentMutationUpdate as I, ListenerMutationEvent as J, ListenerEndpointEvent as K, DocumentReconnectUpdate as L, InaccessibleReason as M, MapTuple as N, AccessibleDocumentResult as O, ReadOnlyDocumentStore as P, MutationGroup as Q, DocumentSyncUpdate as R, createOptimisticStoreClientBackend as S, createOptimisticStore as T, DocumentMap as U, createDocumentUpdateListener as V, ListenerChannelErrorEvent as W, ListenerSyncEvent as X, ListenerReconnectEvent as Y, ListenerWelcomeEvent as Z, FetchDocuments as _, createSharedListener as a, RemoteMutationEvent as at, createDocumentLoaderFromClient as b, DocumentIdSetState as c, TransactionalMutationGroup as ct, InitialEvent as d, NonTransactionalMutationGroup as et, InsertMethod as f, DocEndpointResponse as g, toState as h, SharedListenerListenFn as i, RemoteDocumentEvent as it, InaccessibleDocumentResult as j, DocumentLoader as k, FetchDocumentIdsFn as l, RawPatch as lt, createIdSetListenerFromClient as m, ListenerOptions as n, OptimisticStore as nt, createSharedListenerFromClient as o, RemoteSyncEvent as ot, createIdSetListener as p, ListenerEvent as q, RequestOptions$1 as r, QueryParams$1 as rt, DocumentIdSetEvent as s, SubmitResult as st, createOptimisticStoreInMemoryBackend as t, OptimisticDocumentEvent as tt, IdSetListenFn as u, OmittedDocument as v, OptimisticStoreBackend as w, SanityClientLike as x, createDocumentLoader as y, DocumentUpdate as z }; | ||
| //# sourceMappingURL=index3.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index3.d.ts","names":["applyPatch","RawPatch","left","patch","applyPatch_2","T","Value","startMeta","ArrayContent","type","elements","metas","Content","ObjectContent","StringContent","getType","Type","value","incremental","wrap","unwrap","rebaseValue","StringPart","fields","key","RawOperation","right","parts","utf8size","uses","endMeta","data","content","meta"],"sources":["../../node_modules/.pnpm/mendoza@3.0.8/node_modules/mendoza/dist/index.d.cts","../../src/store/types.ts","../../src/store/utils/toTransactions.ts","../../src/store/listeners/createDocumentUpdateListener.ts","../../src/store/createReadOnlyStore.ts","../../src/store/listeners/types.ts","../../src/store/listeners/createDocumentEventListener.ts","../../src/store/optimistic/createOptimisticStore.ts","../../src/store/optimistic/backend/createOptimisticStoreClientBackend.ts","../../src/store/listeners/createDocumentLoader.ts","../../src/store/listeners/createIdSetListener.ts","../../src/store/listeners/createSharedListener.ts","../../src/store/optimistic/backend/createOptimisticStoreMockBackend.ts"],"x_google_ignoreList":[0],"mappings":"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"} | ||
| {"version":3,"file":"index3.d.ts","names":["applyPatch","RawPatch","left","patch","applyPatch_2","T","Value","startMeta","ArrayContent","type","elements","metas","Content","ObjectContent","StringContent","getType","Type","value","incremental","wrap","unwrap","rebaseValue","StringPart","fields","key","RawOperation","right","parts","utf8size","uses","endMeta","data","content","meta"],"sources":["../../node_modules/.pnpm/mendoza@3.0.8/node_modules/mendoza/dist/index.d.cts","../../src/store/types.ts","../../src/store/utils/toTransactions.ts","../../src/store/listeners/createDocumentUpdateListener.ts","../../src/store/createReadOnlyStore.ts","../../src/store/listeners/types.ts","../../src/store/listeners/createDocumentEventListener.ts","../../src/store/optimistic/createOptimisticStore.ts","../../src/store/optimistic/backend/createOptimisticStoreClientBackend.ts","../../src/store/listeners/createDocumentLoader.ts","../../src/store/listeners/createIdSetListener.ts","../../src/store/listeners/createSharedListener.ts","../../src/store/optimistic/backend/createOptimisticStoreInMemoryBackend.ts"],"x_google_ignoreList":[0],"mappings":"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"} |
@@ -275,3 +275,4 @@ import groupBy from "lodash/groupBy.js"; | ||
| throw new Error( | ||
| `Failed to apply patch for document "${documentId}": ${second.message}` | ||
| `Failed to apply patch for document "${documentId}": ${second.message}`, | ||
| { cause: second } | ||
| ); | ||
@@ -278,0 +279,0 @@ } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"toTransactions.js","sources":["../../src/store/utils/getMutationDocumentId.ts","../../src/store/documentMap/applyDocumentMutation.ts","../../src/store/documentMap/applyMutations.ts","../../src/store/utils/arrayUtils.ts","../../src/store/optimistic/optimizations/squashNodePatches.ts","../../src/store/optimistic/optimizations/squashDMPStrings.ts","../../src/store/utils/mergeMutationGroups.ts","../../src/store/optimistic/optimizations/squashMutations.ts","../../src/store/optimistic/rebase.ts","../../src/store/utils/createTransactionId.ts","../../src/store/utils/toTransactions.ts"],"sourcesContent":["type MutationLike =\n | {type: 'patch'; id: string}\n | {type: 'create'; document: {_id: string}}\n | {type: 'delete'; id: string}\n | {type: 'createIfNotExists'; document: {_id: string}}\n | {type: 'createOrReplace'; document: {_id: string}}\n\nexport function getMutationDocumentId(mutation: MutationLike): string {\n if (mutation.type === 'patch') {\n return mutation.id\n }\n if (mutation.type === 'create') {\n return mutation.document._id\n }\n if (mutation.type === 'delete') {\n return mutation.id\n }\n if (mutation.type === 'createIfNotExists') {\n return mutation.document._id\n }\n if (mutation.type === 'createOrReplace') {\n return mutation.document._id\n }\n throw new Error('Invalid mutation type')\n}\n","import {nanoid} from 'nanoid'\n\nimport {applyPatchMutation, assignId, hasId} from '../../apply'\nimport {\n type CreateIfNotExistsMutation,\n type CreateMutation,\n type CreateOrReplaceMutation,\n type DeleteMutation,\n type Mutation,\n type PatchMutation,\n type SanityDocumentBase,\n} from '../../mutations/types'\n\nexport type MutationResult<Doc extends SanityDocumentBase> =\n | {\n id: string\n status: 'created'\n after: Doc\n }\n | {\n id: string\n status: 'updated'\n before: Doc\n after: Doc\n }\n | {\n id: string\n status: 'deleted'\n before: Doc | undefined\n after: undefined\n }\n | {\n status: 'error'\n message: string\n }\n | {\n status: 'noop'\n }\n\n/**\n * Applies a set of mutations to the provided document\n * @param current\n * @param mutation\n */\nexport function applyAll<Doc extends SanityDocumentBase>(\n current: Doc | undefined,\n mutation: Mutation<Doc>[],\n): Doc | undefined {\n return mutation.reduce((doc, m) => {\n const res = applyDocumentMutation(doc, m)\n if (res.status === 'error') {\n throw new Error(res.message)\n }\n return res.status === 'noop' ? doc : res.after\n }, current)\n}\n\n/**\n * Applies a mutation to the provided document\n * @param document\n * @param mutation\n */\nexport function applyDocumentMutation<Doc extends SanityDocumentBase>(\n document: Doc | undefined,\n mutation: Mutation<Doc>,\n): MutationResult<Doc> {\n if (mutation.type === 'create') {\n return create(document, mutation)\n }\n if (mutation.type === 'createIfNotExists') {\n return createIfNotExists(document, mutation)\n }\n if (mutation.type === 'delete') {\n return del(document, mutation)\n }\n if (mutation.type === 'createOrReplace') {\n return createOrReplace(document, mutation)\n }\n if (mutation.type === 'patch') {\n return patch(document, mutation)\n }\n // @ts-expect-error all cases should be covered\n throw new Error(`Invalid mutation type: ${mutation.type}`)\n}\n\nfunction create<Doc extends SanityDocumentBase>(\n document: Doc | undefined,\n mutation: CreateMutation<Doc>,\n): MutationResult<Doc> {\n if (document) {\n return {status: 'error', message: 'Document already exist'}\n }\n const result = assignId(mutation.document, nanoid)\n return {status: 'created', id: result._id, after: result}\n}\n\nfunction createIfNotExists<Doc extends SanityDocumentBase>(\n document: Doc | undefined,\n mutation: CreateIfNotExistsMutation<Doc>,\n): MutationResult<Doc> {\n if (!hasId(mutation.document)) {\n return {\n status: 'error',\n message: 'Cannot createIfNotExists on document without _id',\n }\n }\n return document\n ? {status: 'noop'}\n : {status: 'created', id: mutation.document._id, after: mutation.document}\n}\n\nfunction createOrReplace<Doc extends SanityDocumentBase>(\n document: Doc | undefined,\n mutation: CreateOrReplaceMutation<Doc>,\n): MutationResult<Doc> {\n if (!hasId(mutation.document)) {\n return {\n status: 'error',\n message: 'Cannot createIfNotExists on document without _id',\n }\n }\n\n return document\n ? {\n status: 'updated',\n id: mutation.document._id,\n before: document,\n after: mutation.document,\n }\n : {status: 'created', id: mutation.document._id, after: mutation.document}\n}\n\nfunction del<Doc extends SanityDocumentBase>(\n document: Doc | undefined,\n mutation: DeleteMutation,\n): MutationResult<Doc> {\n if (!document) {\n return {status: 'noop'}\n }\n if (mutation.id !== document._id) {\n return {status: 'error', message: 'Delete mutation targeted wrong document'}\n }\n return {\n status: 'deleted',\n id: mutation.id,\n before: document,\n after: undefined,\n }\n}\n\nfunction patch<Doc extends SanityDocumentBase>(\n document: Doc | undefined,\n mutation: PatchMutation,\n): MutationResult<Doc> {\n if (!document) {\n return {\n status: 'error',\n message: 'Cannot apply patch on nonexistent document',\n }\n }\n const next = applyPatchMutation(mutation, document)\n return document === next\n ? {status: 'noop'}\n : {status: 'updated', id: mutation.id, before: document, after: next}\n}\n","import {type Mutation, type SanityDocumentBase} from '../../mutations/types'\nimport {type DocumentMap} from '../types'\nimport {getMutationDocumentId} from '../utils/getMutationDocumentId'\nimport {applyDocumentMutation} from './applyDocumentMutation'\n\nexport interface UpdateResult<T extends SanityDocumentBase> {\n id: string\n status: 'created' | 'updated' | 'deleted'\n before?: T\n after?: T\n mutations: Mutation[]\n}\n\n/**\n * Takes a list of mutations and applies them to documents in a documentMap\n */\nexport function applyMutations<T extends SanityDocumentBase>(\n mutations: Mutation[],\n documentMap: DocumentMap<T>,\n /**\n * note: should never be set client side – only for test purposes\n */\n transactionId?: never,\n): UpdateResult<T>[] {\n const updatedDocs: Record<\n string,\n {\n before: T | undefined\n after: T | undefined\n muts: Mutation[]\n }\n > = Object.create(null)\n\n for (const mutation of mutations) {\n const documentId = getMutationDocumentId(mutation)\n if (!documentId) {\n throw new Error('Unable to get document id from mutation')\n }\n\n const before = updatedDocs[documentId]?.after || documentMap.get(documentId)\n const res = applyDocumentMutation(before, mutation)\n if (res.status === 'error') {\n throw new Error(res.message)\n }\n if (res.status === 'noop') {\n continue\n }\n if (\n res.status === 'updated' ||\n res.status === 'created' ||\n res.status === 'deleted'\n ) {\n if (!(documentId in updatedDocs)) {\n updatedDocs[documentId] = {before, after: undefined, muts: []}\n }\n if (transactionId) {\n // Note: should never be set client side. Only for test purposes\n res.after._rev = transactionId\n }\n documentMap.set(documentId, res.after)\n\n updatedDocs[documentId]!.after = res.after\n updatedDocs[documentId]!.muts.push(mutation)\n }\n }\n\n return Object.entries(updatedDocs).map(([id, {before, after, muts}]) => {\n return {\n id,\n status: after ? (before ? 'updated' : 'created') : 'deleted',\n mutations: muts,\n before,\n after,\n }\n })\n}\n","export function takeUntil<T>(\n arr: T[],\n predicate: (item: T) => boolean,\n opts?: {inclusive: boolean},\n) {\n const result = []\n for (const item of arr) {\n if (predicate(item)) {\n if (opts?.inclusive) {\n result.push(item)\n }\n return result\n }\n result.push(item)\n }\n return result\n}\n\nexport function takeUntilRight<T>(\n arr: T[],\n predicate: (item: T) => boolean,\n opts?: {inclusive: boolean},\n) {\n const result = []\n for (const item of arr.slice().reverse()) {\n if (predicate(item)) {\n if (opts?.inclusive) {\n result.push(item)\n }\n return result\n }\n result.push(item)\n }\n return result.reverse()\n}\n","import {makePatches, stringifyPatches} from '@sanity/diff-match-patch'\n\nimport {applyNodePatch} from '../../../apply'\nimport {type Operation} from '../../../mutations/operations/types'\nimport {type NodePatch, type SanityDocumentBase} from '../../../mutations/types'\nimport {getAtPath, type Path, startsWith, stringify} from '../../../path'\nimport {takeUntilRight} from '../../utils/arrayUtils'\n\nfunction isEqualPath(p1: Path, p2: Path) {\n return stringify(p1) === stringify(p2)\n}\n\nfunction supersedes(later: Operation, earlier: Operation) {\n return (\n (earlier.type === 'set' || earlier.type === 'unset') &&\n (later.type === 'set' || later.type === 'unset')\n )\n}\n\nexport function squashNodePatches(patches: NodePatch[]) {\n return compactSetIfMissingPatches(\n compactSetPatches(compactUnsetPatches(patches)),\n )\n}\n\nexport function compactUnsetPatches(patches: NodePatch[]) {\n return patches.reduce(\n (earlierPatches: NodePatch[], laterPatch: NodePatch) => {\n if (laterPatch.op.type !== 'unset') {\n earlierPatches.push(laterPatch)\n return earlierPatches\n }\n // find all preceding patches that are affected by this unset\n const unaffected = earlierPatches.filter(\n earlierPatch => !startsWith(laterPatch.path, earlierPatch.path),\n )\n unaffected.push(laterPatch)\n return unaffected\n },\n [],\n )\n}\n\nexport function compactSetPatches(patches: NodePatch[]) {\n return patches.reduceRight(\n (laterPatches: NodePatch[], earlierPatch: NodePatch) => {\n const replacement = laterPatches.find(\n later =>\n supersedes(later.op, earlierPatch.op) &&\n isEqualPath(later.path, earlierPatch.path),\n )\n if (replacement) {\n // we already have another patch later in the chain that replaces this one\n return laterPatches\n }\n laterPatches.unshift(earlierPatch)\n return laterPatches\n },\n [],\n )\n}\n\nexport function compactSetIfMissingPatches(patches: NodePatch[]) {\n return patches.reduce(\n (previousPatches: NodePatch[], laterPatch: NodePatch) => {\n if (laterPatch.op.type !== 'setIfMissing') {\n previousPatches.push(laterPatch)\n return previousPatches\n }\n // look at preceding patches up until the first unset\n const check = takeUntilRight(\n previousPatches,\n patch => patch.op.type === 'unset',\n )\n const precedent = check.find(\n precedingPatch =>\n precedingPatch.op.type === 'setIfMissing' &&\n isEqualPath(precedingPatch.path, laterPatch.path),\n )\n if (precedent) {\n // we already have an identical patch earlier in the chain that voids this one\n return previousPatches\n }\n previousPatches.push(laterPatch)\n return previousPatches\n },\n [],\n )\n}\n\nexport function compactDMPSetPatches(\n base: SanityDocumentBase,\n patches: NodePatch[],\n) {\n let edge = base\n return patches.reduce((previousPatches: NodePatch[], patch: NodePatch) => {\n const before = edge\n edge = applyNodePatch(patch, edge)\n if (patch.op.type === 'set' && typeof patch.op.value === 'string') {\n const current = getAtPath(patch.path, before)\n if (typeof current === 'string') {\n // we have a set patch that targets a string node\n // we can replace the set patch with a diffMatchPatch going from the\n // current value to the set patch value\n const replaced: NodePatch = {\n ...patch,\n op: {\n type: 'diffMatchPatch',\n value: stringifyPatches(makePatches(current, patch.op.value)),\n },\n }\n return previousPatches\n .flatMap(ep => {\n return isEqualPath(ep.path, patch.path) &&\n ep.op.type === 'diffMatchPatch'\n ? []\n : ep\n })\n .concat(replaced)\n }\n }\n previousPatches.push(patch)\n return previousPatches\n }, [])\n}\n","import {\n type Mutation,\n type NodePatch,\n type PatchMutation,\n type SanityDocumentBase,\n} from '../../../mutations/types'\nimport {type MutationGroup} from '../../types'\nimport {compactDMPSetPatches} from './squashNodePatches'\n\nexport interface DataStore {\n get: (id: string) => SanityDocumentBase | undefined\n}\nexport function squashDMPStrings(\n base: DataStore,\n mutationGroups: MutationGroup[],\n): MutationGroup[] {\n return mutationGroups.map(mutationGroup => ({\n ...mutationGroup,\n mutations: dmpIfyMutations(base, mutationGroup.mutations),\n }))\n}\n\nexport function dmpIfyMutations(\n store: DataStore,\n mutations: Mutation[],\n): Mutation[] {\n return mutations.map((mutation, i) => {\n if (mutation.type !== 'patch') {\n return mutation\n }\n const base = store.get(mutation.id)\n return base ? dmpifyPatchMutation(base, mutation) : mutation\n })\n}\n\nexport function dmpifyPatchMutation(\n base: SanityDocumentBase,\n mutation: PatchMutation,\n): PatchMutation {\n return {\n ...mutation,\n patches: compactDMPSetPatches(base, mutation.patches as NodePatch[]),\n }\n}\n","import {type MutationGroup} from '../types'\n\n/**\n * Merges adjacent non-transactional mutation groups, interleaving transactional mutations as-is\n * @param mutationGroups\n */\nexport function mergeMutationGroups(\n mutationGroups: readonly MutationGroup[],\n): MutationGroup[] {\n return chunkWhile(mutationGroups, group => !group.transaction).flatMap(\n chunk => ({\n ...chunk[0]!,\n mutations: chunk.flatMap(c => c.mutations),\n }),\n )\n}\n\n/**\n * Groups subsequent mutations into transactions, leaves transactions as-is\n * @param arr\n * @param predicate\n */\nexport function chunkWhile<T>(\n arr: readonly T[],\n predicate: (item: T) => boolean,\n): readonly T[][] {\n const res: T[][] = []\n let currentChunk: T[] = []\n arr.forEach(item => {\n if (predicate(item)) {\n currentChunk.push(item)\n } else {\n if (currentChunk.length > 0) {\n res.push(currentChunk)\n }\n currentChunk = []\n res.push([item])\n }\n })\n if (currentChunk.length > 0) {\n res.push(currentChunk)\n }\n return res\n}\n","import {groupBy} from 'lodash'\n\nimport {type Mutation, type NodePatch} from '../../../mutations/types'\nimport {type MutationGroup} from '../../types'\nimport {takeUntilRight} from '../../utils/arrayUtils'\nimport {getMutationDocumentId} from '../../utils/getMutationDocumentId'\nimport {mergeMutationGroups} from '../../utils/mergeMutationGroups'\nimport {squashNodePatches} from './squashNodePatches'\n\nexport function squashMutationGroups(\n staged: readonly MutationGroup[],\n): MutationGroup[] {\n return mergeMutationGroups(staged)\n .map(transaction => ({\n ...transaction,\n mutations: squashMutations(transaction.mutations),\n }))\n .map(transaction => ({\n ...transaction,\n mutations: transaction.mutations.map(mutation => {\n if (mutation.type !== 'patch') {\n return mutation\n }\n return {\n ...mutation,\n patches: squashNodePatches(mutation.patches as NodePatch[]),\n }\n }),\n }))\n}\n\ntype FIXME = Mutation[]\n\n/*\n assumptions:\n the order documents appear with their mutations within the same transaction doesn't matter\n */\nexport function squashMutations(mutations: Mutation[]): Mutation[] {\n const byDocument = groupBy(mutations, getMutationDocumentId)\n return Object.values(byDocument).flatMap(documentMutations => {\n // these are the mutations that happens for the document with <id> within the same transactions\n return squashCreateIfNotExists(squashDelete(documentMutations as FIXME))\n .flat()\n .reduce((acc: Mutation[], docMutation) => {\n const prev = acc[acc.length - 1]\n if ((!prev || prev.type === 'patch') && docMutation.type === 'patch') {\n return acc.slice(0, -1).concat({\n ...docMutation,\n patches: (prev?.patches || []).concat(docMutation.patches),\n })\n }\n return acc.concat(docMutation)\n }, [])\n })\n}\n\n/**\n * WARNING: This assumes that the mutations are only for a single document\n * @param mutations\n */\nexport function squashCreateIfNotExists(mutations: Mutation[]): Mutation[] {\n if (mutations.length === 0) {\n return mutations\n }\n\n return mutations.reduce((previousMuts: Mutation[], laterMut: Mutation) => {\n if (laterMut.type !== 'createIfNotExists') {\n previousMuts.push(laterMut)\n return previousMuts\n }\n const prev = takeUntilRight(previousMuts, m => m.type === 'delete')\n const precedent = prev.find(\n precedingPatch => precedingPatch.type === 'createIfNotExists',\n )\n if (precedent) {\n // we already have an identical patch earlier in the chain that voids this one\n return previousMuts\n }\n previousMuts.push(laterMut)\n return previousMuts\n }, [])\n}\n\nfunction squashDelete(mutations: Mutation[]): Mutation[] {\n if (mutations.length === 0) {\n return mutations\n }\n\n return mutations.reduce((previousMuts: Mutation[], laterMut: Mutation) => {\n if (laterMut.type === 'delete') {\n return [laterMut]\n }\n previousMuts.push(laterMut)\n return previousMuts\n }, [])\n}\n","import {applyPatches} from '../../apply'\nimport {type NodePatch, type SanityDocumentBase} from '../../mutations/types'\nimport {getAtPath} from '../../path'\nimport {applyAll} from '../documentMap/applyDocumentMutation'\nimport {type MutationGroup} from '../types'\nimport {getMutationDocumentId} from '../utils/getMutationDocumentId'\nimport {compactDMPSetPatches} from './optimizations/squashNodePatches'\n\nexport function rebase(\n documentId: string,\n oldBase: SanityDocumentBase | undefined,\n newBase: SanityDocumentBase | undefined,\n localMutations: readonly MutationGroup[],\n): [newLocal: MutationGroup[], rebased: SanityDocumentBase | undefined] {\n // const flattened = flattenMutations(newStage.flatMap(t => t.mutations))\n\n // 1. get the dmpified mutations from the newStage based on the old base\n // 2. apply those to the new base\n // 3. convert those back into set patches based on the new base and return as a new newStage\n let edge = oldBase\n const dmpified = localMutations.map(transaction => {\n const mutations = transaction.mutations.flatMap(mut => {\n if (getMutationDocumentId(mut) !== documentId) {\n return []\n }\n const before = edge\n edge = applyAll(edge, [mut])\n if (!before) {\n return mut\n }\n if (mut.type !== 'patch') {\n return mut\n }\n return {\n type: 'dmpified' as const,\n mutation: {\n ...mut,\n // Todo: make compactDMPSetPatches return pairs of patches that was dmpified with their\n // original as dmpPatches and original is not 1:1 (e..g some of the original may not be dmpified)\n dmpPatches: compactDMPSetPatches(before, mut.patches as NodePatch[]),\n original: mut.patches,\n },\n }\n })\n return {...transaction, mutations}\n })\n\n let newBaseWithDMPForOldBaseApplied: SanityDocumentBase | undefined = newBase\n // NOTE: It might not be possible to apply them - if so, we fall back to applying the pending changes\n // todo: revisit this\n const appliedCleanly = dmpified.map(transaction => {\n const applied = []\n return transaction.mutations.forEach(mut => {\n if (mut.type === 'dmpified') {\n // go through all dmpified, try to apply, if they fail, use the original un-optimized set patch instead\n try {\n newBaseWithDMPForOldBaseApplied = applyPatches(\n mut.mutation.dmpPatches,\n newBaseWithDMPForOldBaseApplied,\n )\n applied.push(mut)\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn('Failed to apply dmp patch, falling back to original')\n try {\n newBaseWithDMPForOldBaseApplied = applyPatches(\n mut.mutation.original,\n newBaseWithDMPForOldBaseApplied,\n )\n applied.push(mut)\n } catch (second: any) {\n throw new Error(\n `Failed to apply patch for document \"${documentId}\": ${second.message}`,\n )\n }\n }\n } else {\n newBaseWithDMPForOldBaseApplied = applyAll(\n newBaseWithDMPForOldBaseApplied,\n [mut],\n )\n }\n })\n })\n\n const newStage = localMutations.map((transaction): MutationGroup => {\n // update all set patches to set to the current value\n return {\n ...transaction,\n mutations: transaction.mutations.map(mut => {\n if (mut.type !== 'patch' || getMutationDocumentId(mut) !== documentId) {\n return mut\n }\n return {\n ...mut,\n patches: mut.patches.map(patch => {\n if (patch.op.type !== 'set') {\n return patch\n }\n return {\n ...patch,\n op: {\n ...patch.op,\n value: getAtPath(patch.path, newBaseWithDMPForOldBaseApplied),\n },\n }\n }),\n }\n }),\n }\n })\n return [newStage, newBaseWithDMPForOldBaseApplied]\n}\n","import {uuid} from '@sanity/uuid'\n\nexport function createTransactionId() {\n return uuid()\n}\n","import {type Transaction} from '../../mutations/types'\nimport {type MutationGroup} from '../types'\nimport {createTransactionId} from './createTransactionId'\n\n/**\n * Converts a list of mutation groups into a list of transactions, assigning an ID to each.\n * @param groups\n */\nexport function toTransactions(groups: MutationGroup[]): Transaction[] {\n return groups.map(group => {\n if (group.transaction && group.id !== undefined) {\n return {id: group.id!, mutations: group.mutations}\n }\n return {id: createTransactionId(), mutations: group.mutations}\n })\n}\n"],"names":["patch"],"mappings":"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"} | ||
| {"version":3,"file":"toTransactions.js","sources":["../../src/store/utils/getMutationDocumentId.ts","../../src/store/documentMap/applyDocumentMutation.ts","../../src/store/documentMap/applyMutations.ts","../../src/store/utils/arrayUtils.ts","../../src/store/optimistic/optimizations/squashNodePatches.ts","../../src/store/optimistic/optimizations/squashDMPStrings.ts","../../src/store/utils/mergeMutationGroups.ts","../../src/store/optimistic/optimizations/squashMutations.ts","../../src/store/optimistic/rebase.ts","../../src/store/utils/createTransactionId.ts","../../src/store/utils/toTransactions.ts"],"sourcesContent":["type MutationLike =\n | {type: 'patch'; id: string}\n | {type: 'create'; document: {_id: string}}\n | {type: 'delete'; id: string}\n | {type: 'createIfNotExists'; document: {_id: string}}\n | {type: 'createOrReplace'; document: {_id: string}}\n\nexport function getMutationDocumentId(mutation: MutationLike): string {\n if (mutation.type === 'patch') {\n return mutation.id\n }\n if (mutation.type === 'create') {\n return mutation.document._id\n }\n if (mutation.type === 'delete') {\n return mutation.id\n }\n if (mutation.type === 'createIfNotExists') {\n return mutation.document._id\n }\n if (mutation.type === 'createOrReplace') {\n return mutation.document._id\n }\n throw new Error('Invalid mutation type')\n}\n","import {nanoid} from 'nanoid'\n\nimport {applyPatchMutation, assignId, hasId} from '../../apply'\nimport {\n type CreateIfNotExistsMutation,\n type CreateMutation,\n type CreateOrReplaceMutation,\n type DeleteMutation,\n type Mutation,\n type PatchMutation,\n type SanityDocumentBase,\n} from '../../mutations/types'\n\nexport type MutationResult<Doc extends SanityDocumentBase> =\n | {\n id: string\n status: 'created'\n after: Doc\n }\n | {\n id: string\n status: 'updated'\n before: Doc\n after: Doc\n }\n | {\n id: string\n status: 'deleted'\n before: Doc | undefined\n after: undefined\n }\n | {\n status: 'error'\n message: string\n }\n | {\n status: 'noop'\n }\n\n/**\n * Applies a set of mutations to the provided document\n * @param current\n * @param mutation\n */\nexport function applyAll<Doc extends SanityDocumentBase>(\n current: Doc | undefined,\n mutation: Mutation<Doc>[],\n): Doc | undefined {\n return mutation.reduce((doc, m) => {\n const res = applyDocumentMutation(doc, m)\n if (res.status === 'error') {\n throw new Error(res.message)\n }\n return res.status === 'noop' ? doc : res.after\n }, current)\n}\n\n/**\n * Applies a mutation to the provided document\n * @param document\n * @param mutation\n */\nexport function applyDocumentMutation<Doc extends SanityDocumentBase>(\n document: Doc | undefined,\n mutation: Mutation<Doc>,\n): MutationResult<Doc> {\n if (mutation.type === 'create') {\n return create(document, mutation)\n }\n if (mutation.type === 'createIfNotExists') {\n return createIfNotExists(document, mutation)\n }\n if (mutation.type === 'delete') {\n return del(document, mutation)\n }\n if (mutation.type === 'createOrReplace') {\n return createOrReplace(document, mutation)\n }\n if (mutation.type === 'patch') {\n return patch(document, mutation)\n }\n // @ts-expect-error all cases should be covered\n throw new Error(`Invalid mutation type: ${mutation.type}`)\n}\n\nfunction create<Doc extends SanityDocumentBase>(\n document: Doc | undefined,\n mutation: CreateMutation<Doc>,\n): MutationResult<Doc> {\n if (document) {\n return {status: 'error', message: 'Document already exist'}\n }\n const result = assignId(mutation.document, nanoid)\n return {status: 'created', id: result._id, after: result}\n}\n\nfunction createIfNotExists<Doc extends SanityDocumentBase>(\n document: Doc | undefined,\n mutation: CreateIfNotExistsMutation<Doc>,\n): MutationResult<Doc> {\n if (!hasId(mutation.document)) {\n return {\n status: 'error',\n message: 'Cannot createIfNotExists on document without _id',\n }\n }\n return document\n ? {status: 'noop'}\n : {status: 'created', id: mutation.document._id, after: mutation.document}\n}\n\nfunction createOrReplace<Doc extends SanityDocumentBase>(\n document: Doc | undefined,\n mutation: CreateOrReplaceMutation<Doc>,\n): MutationResult<Doc> {\n if (!hasId(mutation.document)) {\n return {\n status: 'error',\n message: 'Cannot createIfNotExists on document without _id',\n }\n }\n\n return document\n ? {\n status: 'updated',\n id: mutation.document._id,\n before: document,\n after: mutation.document,\n }\n : {status: 'created', id: mutation.document._id, after: mutation.document}\n}\n\nfunction del<Doc extends SanityDocumentBase>(\n document: Doc | undefined,\n mutation: DeleteMutation,\n): MutationResult<Doc> {\n if (!document) {\n return {status: 'noop'}\n }\n if (mutation.id !== document._id) {\n return {status: 'error', message: 'Delete mutation targeted wrong document'}\n }\n return {\n status: 'deleted',\n id: mutation.id,\n before: document,\n after: undefined,\n }\n}\n\nfunction patch<Doc extends SanityDocumentBase>(\n document: Doc | undefined,\n mutation: PatchMutation,\n): MutationResult<Doc> {\n if (!document) {\n return {\n status: 'error',\n message: 'Cannot apply patch on nonexistent document',\n }\n }\n const next = applyPatchMutation(mutation, document)\n return document === next\n ? {status: 'noop'}\n : {status: 'updated', id: mutation.id, before: document, after: next}\n}\n","import {type Mutation, type SanityDocumentBase} from '../../mutations/types'\nimport {type DocumentMap} from '../types'\nimport {getMutationDocumentId} from '../utils/getMutationDocumentId'\nimport {applyDocumentMutation} from './applyDocumentMutation'\n\nexport interface UpdateResult<T extends SanityDocumentBase> {\n id: string\n status: 'created' | 'updated' | 'deleted'\n before?: T\n after?: T\n mutations: Mutation[]\n}\n\n/**\n * Takes a list of mutations and applies them to documents in a documentMap\n */\nexport function applyMutations<T extends SanityDocumentBase>(\n mutations: Mutation[],\n documentMap: DocumentMap<T>,\n /**\n * note: should never be set client side – only for test purposes\n */\n transactionId?: never,\n): UpdateResult<T>[] {\n const updatedDocs: Record<\n string,\n {\n before: T | undefined\n after: T | undefined\n muts: Mutation[]\n }\n > = Object.create(null)\n\n for (const mutation of mutations) {\n const documentId = getMutationDocumentId(mutation)\n if (!documentId) {\n throw new Error('Unable to get document id from mutation')\n }\n\n const before = updatedDocs[documentId]?.after || documentMap.get(documentId)\n const res = applyDocumentMutation(before, mutation)\n if (res.status === 'error') {\n throw new Error(res.message)\n }\n if (res.status === 'noop') {\n continue\n }\n if (\n res.status === 'updated' ||\n res.status === 'created' ||\n res.status === 'deleted'\n ) {\n if (!(documentId in updatedDocs)) {\n updatedDocs[documentId] = {before, after: undefined, muts: []}\n }\n if (transactionId) {\n // Note: should never be set client side. Only for test purposes\n res.after._rev = transactionId\n }\n documentMap.set(documentId, res.after)\n\n updatedDocs[documentId]!.after = res.after\n updatedDocs[documentId]!.muts.push(mutation)\n }\n }\n\n return Object.entries(updatedDocs).map(([id, {before, after, muts}]) => {\n return {\n id,\n status: after ? (before ? 'updated' : 'created') : 'deleted',\n mutations: muts,\n before,\n after,\n }\n })\n}\n","export function takeUntil<T>(\n arr: T[],\n predicate: (item: T) => boolean,\n opts?: {inclusive: boolean},\n) {\n const result = []\n for (const item of arr) {\n if (predicate(item)) {\n if (opts?.inclusive) {\n result.push(item)\n }\n return result\n }\n result.push(item)\n }\n return result\n}\n\nexport function takeUntilRight<T>(\n arr: T[],\n predicate: (item: T) => boolean,\n opts?: {inclusive: boolean},\n) {\n const result = []\n for (const item of arr.slice().reverse()) {\n if (predicate(item)) {\n if (opts?.inclusive) {\n result.push(item)\n }\n return result\n }\n result.push(item)\n }\n return result.reverse()\n}\n","import {makePatches, stringifyPatches} from '@sanity/diff-match-patch'\n\nimport {applyNodePatch} from '../../../apply'\nimport {type Operation} from '../../../mutations/operations/types'\nimport {type NodePatch, type SanityDocumentBase} from '../../../mutations/types'\nimport {getAtPath, type Path, startsWith, stringify} from '../../../path'\nimport {takeUntilRight} from '../../utils/arrayUtils'\n\nfunction isEqualPath(p1: Path, p2: Path) {\n return stringify(p1) === stringify(p2)\n}\n\nfunction supersedes(later: Operation, earlier: Operation) {\n return (\n (earlier.type === 'set' || earlier.type === 'unset') &&\n (later.type === 'set' || later.type === 'unset')\n )\n}\n\nexport function squashNodePatches(patches: NodePatch[]) {\n return compactSetIfMissingPatches(\n compactSetPatches(compactUnsetPatches(patches)),\n )\n}\n\nexport function compactUnsetPatches(patches: NodePatch[]) {\n return patches.reduce(\n (earlierPatches: NodePatch[], laterPatch: NodePatch) => {\n if (laterPatch.op.type !== 'unset') {\n earlierPatches.push(laterPatch)\n return earlierPatches\n }\n // find all preceding patches that are affected by this unset\n const unaffected = earlierPatches.filter(\n earlierPatch => !startsWith(laterPatch.path, earlierPatch.path),\n )\n unaffected.push(laterPatch)\n return unaffected\n },\n [],\n )\n}\n\nexport function compactSetPatches(patches: NodePatch[]) {\n return patches.reduceRight(\n (laterPatches: NodePatch[], earlierPatch: NodePatch) => {\n const replacement = laterPatches.find(\n later =>\n supersedes(later.op, earlierPatch.op) &&\n isEqualPath(later.path, earlierPatch.path),\n )\n if (replacement) {\n // we already have another patch later in the chain that replaces this one\n return laterPatches\n }\n laterPatches.unshift(earlierPatch)\n return laterPatches\n },\n [],\n )\n}\n\nexport function compactSetIfMissingPatches(patches: NodePatch[]) {\n return patches.reduce(\n (previousPatches: NodePatch[], laterPatch: NodePatch) => {\n if (laterPatch.op.type !== 'setIfMissing') {\n previousPatches.push(laterPatch)\n return previousPatches\n }\n // look at preceding patches up until the first unset\n const check = takeUntilRight(\n previousPatches,\n patch => patch.op.type === 'unset',\n )\n const precedent = check.find(\n precedingPatch =>\n precedingPatch.op.type === 'setIfMissing' &&\n isEqualPath(precedingPatch.path, laterPatch.path),\n )\n if (precedent) {\n // we already have an identical patch earlier in the chain that voids this one\n return previousPatches\n }\n previousPatches.push(laterPatch)\n return previousPatches\n },\n [],\n )\n}\n\nexport function compactDMPSetPatches(\n base: SanityDocumentBase,\n patches: NodePatch[],\n) {\n let edge = base\n return patches.reduce((previousPatches: NodePatch[], patch: NodePatch) => {\n const before = edge\n edge = applyNodePatch(patch, edge)\n if (patch.op.type === 'set' && typeof patch.op.value === 'string') {\n const current = getAtPath(patch.path, before)\n if (typeof current === 'string') {\n // we have a set patch that targets a string node\n // we can replace the set patch with a diffMatchPatch going from the\n // current value to the set patch value\n const replaced: NodePatch = {\n ...patch,\n op: {\n type: 'diffMatchPatch',\n value: stringifyPatches(makePatches(current, patch.op.value)),\n },\n }\n return previousPatches\n .flatMap(ep => {\n return isEqualPath(ep.path, patch.path) &&\n ep.op.type === 'diffMatchPatch'\n ? []\n : ep\n })\n .concat(replaced)\n }\n }\n previousPatches.push(patch)\n return previousPatches\n }, [])\n}\n","import {\n type Mutation,\n type NodePatch,\n type PatchMutation,\n type SanityDocumentBase,\n} from '../../../mutations/types'\nimport {type MutationGroup} from '../../types'\nimport {compactDMPSetPatches} from './squashNodePatches'\n\nexport interface DataStore {\n get: (id: string) => SanityDocumentBase | undefined\n}\nexport function squashDMPStrings(\n base: DataStore,\n mutationGroups: MutationGroup[],\n): MutationGroup[] {\n return mutationGroups.map(mutationGroup => ({\n ...mutationGroup,\n mutations: dmpIfyMutations(base, mutationGroup.mutations),\n }))\n}\n\nexport function dmpIfyMutations(\n store: DataStore,\n mutations: Mutation[],\n): Mutation[] {\n return mutations.map((mutation, i) => {\n if (mutation.type !== 'patch') {\n return mutation\n }\n const base = store.get(mutation.id)\n return base ? dmpifyPatchMutation(base, mutation) : mutation\n })\n}\n\nexport function dmpifyPatchMutation(\n base: SanityDocumentBase,\n mutation: PatchMutation,\n): PatchMutation {\n return {\n ...mutation,\n patches: compactDMPSetPatches(base, mutation.patches as NodePatch[]),\n }\n}\n","import {type MutationGroup} from '../types'\n\n/**\n * Merges adjacent non-transactional mutation groups, interleaving transactional mutations as-is\n * @param mutationGroups\n */\nexport function mergeMutationGroups(\n mutationGroups: readonly MutationGroup[],\n): MutationGroup[] {\n return chunkWhile(mutationGroups, group => !group.transaction).flatMap(\n chunk => ({\n ...chunk[0]!,\n mutations: chunk.flatMap(c => c.mutations),\n }),\n )\n}\n\n/**\n * Groups subsequent mutations into transactions, leaves transactions as-is\n * @param arr\n * @param predicate\n */\nexport function chunkWhile<T>(\n arr: readonly T[],\n predicate: (item: T) => boolean,\n): readonly T[][] {\n const res: T[][] = []\n let currentChunk: T[] = []\n arr.forEach(item => {\n if (predicate(item)) {\n currentChunk.push(item)\n } else {\n if (currentChunk.length > 0) {\n res.push(currentChunk)\n }\n currentChunk = []\n res.push([item])\n }\n })\n if (currentChunk.length > 0) {\n res.push(currentChunk)\n }\n return res\n}\n","import {groupBy} from 'lodash'\n\nimport {type Mutation, type NodePatch} from '../../../mutations/types'\nimport {type MutationGroup} from '../../types'\nimport {takeUntilRight} from '../../utils/arrayUtils'\nimport {getMutationDocumentId} from '../../utils/getMutationDocumentId'\nimport {mergeMutationGroups} from '../../utils/mergeMutationGroups'\nimport {squashNodePatches} from './squashNodePatches'\n\nexport function squashMutationGroups(\n staged: readonly MutationGroup[],\n): MutationGroup[] {\n return mergeMutationGroups(staged)\n .map(transaction => ({\n ...transaction,\n mutations: squashMutations(transaction.mutations),\n }))\n .map(transaction => ({\n ...transaction,\n mutations: transaction.mutations.map(mutation => {\n if (mutation.type !== 'patch') {\n return mutation\n }\n return {\n ...mutation,\n patches: squashNodePatches(mutation.patches as NodePatch[]),\n }\n }),\n }))\n}\n\ntype FIXME = Mutation[]\n\n/*\n assumptions:\n the order documents appear with their mutations within the same transaction doesn't matter\n */\nexport function squashMutations(mutations: Mutation[]): Mutation[] {\n const byDocument = groupBy(mutations, getMutationDocumentId)\n return Object.values(byDocument).flatMap(documentMutations => {\n // these are the mutations that happens for the document with <id> within the same transactions\n return squashCreateIfNotExists(squashDelete(documentMutations as FIXME))\n .flat()\n .reduce((acc: Mutation[], docMutation) => {\n const prev = acc[acc.length - 1]\n if ((!prev || prev.type === 'patch') && docMutation.type === 'patch') {\n return acc.slice(0, -1).concat({\n ...docMutation,\n patches: (prev?.patches || []).concat(docMutation.patches),\n })\n }\n return acc.concat(docMutation)\n }, [])\n })\n}\n\n/**\n * WARNING: This assumes that the mutations are only for a single document\n * @param mutations\n */\nexport function squashCreateIfNotExists(mutations: Mutation[]): Mutation[] {\n if (mutations.length === 0) {\n return mutations\n }\n\n return mutations.reduce((previousMuts: Mutation[], laterMut: Mutation) => {\n if (laterMut.type !== 'createIfNotExists') {\n previousMuts.push(laterMut)\n return previousMuts\n }\n const prev = takeUntilRight(previousMuts, m => m.type === 'delete')\n const precedent = prev.find(\n precedingPatch => precedingPatch.type === 'createIfNotExists',\n )\n if (precedent) {\n // we already have an identical patch earlier in the chain that voids this one\n return previousMuts\n }\n previousMuts.push(laterMut)\n return previousMuts\n }, [])\n}\n\nfunction squashDelete(mutations: Mutation[]): Mutation[] {\n if (mutations.length === 0) {\n return mutations\n }\n\n return mutations.reduce((previousMuts: Mutation[], laterMut: Mutation) => {\n if (laterMut.type === 'delete') {\n return [laterMut]\n }\n previousMuts.push(laterMut)\n return previousMuts\n }, [])\n}\n","import {applyPatches} from '../../apply'\nimport {type NodePatch, type SanityDocumentBase} from '../../mutations/types'\nimport {getAtPath} from '../../path'\nimport {applyAll} from '../documentMap/applyDocumentMutation'\nimport {type MutationGroup} from '../types'\nimport {getMutationDocumentId} from '../utils/getMutationDocumentId'\nimport {compactDMPSetPatches} from './optimizations/squashNodePatches'\n\nexport function rebase(\n documentId: string,\n oldBase: SanityDocumentBase | undefined,\n newBase: SanityDocumentBase | undefined,\n localMutations: readonly MutationGroup[],\n): [newLocal: MutationGroup[], rebased: SanityDocumentBase | undefined] {\n // 1. get the dmpified mutations from the newStage based on the old base\n // 2. apply those to the new base\n // 3. convert those back into set patches based on the new base and return as a new newStage\n let edge = oldBase\n const dmpified = localMutations.map(transaction => {\n const mutations = transaction.mutations.flatMap(mut => {\n if (getMutationDocumentId(mut) !== documentId) {\n return []\n }\n const before = edge\n edge = applyAll(edge, [mut])\n if (!before) {\n return mut\n }\n if (mut.type !== 'patch') {\n return mut\n }\n return {\n type: 'dmpified' as const,\n mutation: {\n ...mut,\n // Todo: make compactDMPSetPatches return pairs of patches that was dmpified with their\n // original as dmpPatches and original is not 1:1 (e..g some of the original may not be dmpified)\n dmpPatches: compactDMPSetPatches(before, mut.patches as NodePatch[]),\n original: mut.patches,\n },\n }\n })\n return {...transaction, mutations}\n })\n\n let newBaseWithDMPForOldBaseApplied: SanityDocumentBase | undefined = newBase\n // NOTE: It might not be possible to apply them - if so, we fall back to applying the pending changes\n // todo: revisit this\n const appliedCleanly = dmpified.map(transaction => {\n const applied = []\n return transaction.mutations.forEach(mut => {\n if (mut.type === 'dmpified') {\n // go through all dmpified, try to apply, if they fail, use the original un-optimized set patch instead\n try {\n newBaseWithDMPForOldBaseApplied = applyPatches(\n mut.mutation.dmpPatches,\n newBaseWithDMPForOldBaseApplied,\n )\n applied.push(mut)\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn('Failed to apply dmp patch, falling back to original')\n try {\n newBaseWithDMPForOldBaseApplied = applyPatches(\n mut.mutation.original,\n newBaseWithDMPForOldBaseApplied,\n )\n applied.push(mut)\n } catch (second: any) {\n throw new Error(\n `Failed to apply patch for document \"${documentId}\": ${second.message}`,\n {cause: second},\n )\n }\n }\n } else {\n newBaseWithDMPForOldBaseApplied = applyAll(\n newBaseWithDMPForOldBaseApplied,\n [mut],\n )\n }\n })\n })\n\n const newStage = localMutations.map((transaction): MutationGroup => {\n // update all set patches to set to the current value\n return {\n ...transaction,\n mutations: transaction.mutations.map(mut => {\n if (mut.type !== 'patch' || getMutationDocumentId(mut) !== documentId) {\n return mut\n }\n return {\n ...mut,\n patches: mut.patches.map(patch => {\n if (patch.op.type !== 'set') {\n return patch\n }\n return {\n ...patch,\n op: {\n ...patch.op,\n value: getAtPath(patch.path, newBaseWithDMPForOldBaseApplied),\n },\n }\n }),\n }\n }),\n }\n })\n return [newStage, newBaseWithDMPForOldBaseApplied]\n}\n","import {uuid} from '@sanity/uuid'\n\nexport function createTransactionId() {\n return uuid()\n}\n","import {type Transaction} from '../../mutations/types'\nimport {type MutationGroup} from '../types'\nimport {createTransactionId} from './createTransactionId'\n\n/**\n * Converts a list of mutation groups into a list of transactions, assigning an ID to each.\n * @param groups\n */\nexport function toTransactions(groups: MutationGroup[]): Transaction[] {\n return groups.map(group => {\n if (group.transaction && group.id !== undefined) {\n return {id: group.id!, mutations: group.mutations}\n }\n return {id: createTransactionId(), mutations: group.mutations}\n })\n}\n"],"names":["patch"],"mappings":"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"} |
@@ -1,9 +0,8 @@ | ||
| import "./_chunks-dts/index.js"; | ||
| import { $ as PathElement, A as SafePath, B as Try, C as ParseInnerExpression, D as ParseProperty, E as ParseObject, F as ToArray, G as AnyEmptyArray, H as Get, I as ToNumber, J as FindBy, K as ByIndex, L as Trim, M as SplitAll, N as StringToPath, O as ParseValue, P as StripError, Q as Path, R as TrimLeft, S as ParseExpressions, T as ParseNumber, U as GetAtPath, V as Unwrap, W as getAtPath, X as Index, Y as FindInArray, Z as KeyedPathElement, _ as MergeInner, a as isKeyElement, b as ParseAllProps, c as startsWith, d as parse, et as PropertyName, f as Concat, g as Merge, h as Err, i as isIndexElement, j as Split, k as Result, l as normalize, m as Digit, n as isElementEqual, o as isKeyedElement, p as ConcatInner, q as ElementType, r as isEqual, s as isPropertyElement, st as Optional, t as isArrayElement, tt as AnyArray, u as stringify, v as Ok, w as ParseKVPair, x as ParseError, y as OnlyDigits, z as TrimRight } from "./_chunks-dts/index2.js"; | ||
| import { A as StringOp, C as Operation, D as ReplaceOp, E as RemoveOp, M as UnassignOp, N as UnsetOp, O as SetIfMissingOp, P as UpsertOp, S as ObjectOp, T as RelativePosition, _ as DiffMatchPatchOp, b as InsertOp, c as NodePatchList, d as SanityDocumentBase, f as Transaction, g as DecOp, h as AssignOp, i as DeleteMutation, j as TruncateOp, k as SetOp, l as PatchMutation, m as ArrayOp, n as CreateMutation, o as Mutation, p as AnyOp, r as CreateOrReplaceMutation, s as NodePatch, t as CreateIfNotExistsMutation, u as PatchOptions, v as IncOp, w as PrimitiveOp, x as NumberOp, y as InsertIfMissingOp } from "./_chunks-dts/types.js"; | ||
| import { $ as MutationResult, H as toTransactions, Q as MutationGroup, U as DocumentMap, at as RemoteMutationEvent, ct as TransactionalMutationGroup, et as NonTransactionalMutationGroup, it as RemoteDocumentEvent, lt as RawPatch, ot as RemoteSyncEvent, st as SubmitResult, tt as OptimisticDocumentEvent } from "./_chunks-dts/index3.js"; | ||
| import * as rxjs0 from "rxjs"; | ||
| import * as _sanity_client5 from "@sanity/client"; | ||
| import * as _$rxjs from "rxjs"; | ||
| import * as _$_sanity_client0 from "@sanity/client"; | ||
| import { MutationEvent, ReconnectEvent, SanityClient, SanityDocument, WelcomeEvent } from "@sanity/client"; | ||
| import * as xstate43 from "xstate"; | ||
| import * as _$xstate from "xstate"; | ||
| interface UpdateResult<T extends SanityDocumentBase> { | ||
@@ -35,3 +34,3 @@ id: string; | ||
| */ | ||
| declare function createSharedListener(client: SanityClient): rxjs0.Observable<WelcomeEvent | ReconnectEvent | MutationEvent>; | ||
| declare function createSharedListener(client: SanityClient): _$rxjs.Observable<WelcomeEvent | ReconnectEvent | MutationEvent>; | ||
| interface DocumentMutatorMachineInput { | ||
@@ -68,3 +67,3 @@ id: string; | ||
| }; | ||
| declare const documentMutatorMachine: xstate43.StateMachine<{ | ||
| declare const documentMutatorMachine: _$xstate.StateMachine<{ | ||
| client: SanityClient; /** A shared listener can be provided, if not it'll be created using `client.listen()` */ | ||
@@ -82,3 +81,3 @@ sharedListener?: ReturnType<typeof createSharedListener>; /** The document id */ | ||
| submitTransactionsAttempts: number; | ||
| }, _sanity_client5.WelcomeEvent | _sanity_client5.ReconnectEvent | MutationEvent | { | ||
| }, _$_sanity_client0.WelcomeEvent | _$_sanity_client0.ReconnectEvent | MutationEvent | { | ||
| type: "error"; | ||
@@ -105,98 +104,98 @@ } | { | ||
| }, { | ||
| [x: string]: xstate43.ActorRefFromLogic<xstate43.PromiseActorLogic<void | SanityDocument<Record<string, any>> | undefined, { | ||
| [x: string]: _$xstate.ActorRefFromLogic<_$xstate.PromiseActorLogic<void | SanityDocument<Record<string, any>> | undefined, { | ||
| client: SanityClient; | ||
| id: string; | ||
| }, xstate43.EventObject>> | xstate43.ActorRefFromLogic<xstate43.PromiseActorLogic<void, { | ||
| }, _$xstate.EventObject>> | _$xstate.ActorRefFromLogic<_$xstate.PromiseActorLogic<void, { | ||
| client: SanityClient; | ||
| transactions: Transaction[]; | ||
| }, xstate43.EventObject>> | xstate43.ActorRefFromLogic<xstate43.ObservableActorLogic<_sanity_client5.WelcomeEvent | _sanity_client5.ReconnectEvent | MutationEvent, { | ||
| }, _$xstate.EventObject>> | _$xstate.ActorRefFromLogic<_$xstate.ObservableActorLogic<_$_sanity_client0.WelcomeEvent | _$_sanity_client0.ReconnectEvent | MutationEvent, { | ||
| listener: ReturnType<typeof createSharedListener>; | ||
| id: string; | ||
| }, xstate43.EventObject>> | undefined; | ||
| getDocument?: xstate43.ActorRefFromLogic<xstate43.PromiseActorLogic<void | SanityDocument<Record<string, any>> | undefined, { | ||
| }, _$xstate.EventObject>> | undefined; | ||
| getDocument?: _$xstate.ActorRefFromLogic<_$xstate.PromiseActorLogic<void | SanityDocument<Record<string, any>> | undefined, { | ||
| client: SanityClient; | ||
| id: string; | ||
| }, xstate43.EventObject>> | undefined; | ||
| submitTransactions?: xstate43.ActorRefFromLogic<xstate43.PromiseActorLogic<void, { | ||
| }, _$xstate.EventObject>> | undefined; | ||
| submitTransactions?: _$xstate.ActorRefFromLogic<_$xstate.PromiseActorLogic<void, { | ||
| client: SanityClient; | ||
| transactions: Transaction[]; | ||
| }, xstate43.EventObject>> | undefined; | ||
| }, _$xstate.EventObject>> | undefined; | ||
| }, { | ||
| src: "fetch remote snapshot"; | ||
| logic: xstate43.PromiseActorLogic<void | SanityDocument<Record<string, any>> | undefined, { | ||
| logic: _$xstate.PromiseActorLogic<void | SanityDocument<Record<string, any>> | undefined, { | ||
| client: SanityClient; | ||
| id: string; | ||
| }, xstate43.EventObject>; | ||
| }, _$xstate.EventObject>; | ||
| id: "getDocument"; | ||
| } | { | ||
| src: "submit mutations as transactions"; | ||
| logic: xstate43.PromiseActorLogic<void, { | ||
| logic: _$xstate.PromiseActorLogic<void, { | ||
| client: SanityClient; | ||
| transactions: Transaction[]; | ||
| }, xstate43.EventObject>; | ||
| }, _$xstate.EventObject>; | ||
| id: "submitTransactions"; | ||
| } | { | ||
| src: "server-sent events"; | ||
| logic: xstate43.ObservableActorLogic<_sanity_client5.WelcomeEvent | _sanity_client5.ReconnectEvent | MutationEvent, { | ||
| logic: _$xstate.ObservableActorLogic<_$_sanity_client0.WelcomeEvent | _$_sanity_client0.ReconnectEvent | MutationEvent, { | ||
| listener: ReturnType<typeof createSharedListener>; | ||
| id: string; | ||
| }, xstate43.EventObject>; | ||
| }, _$xstate.EventObject>; | ||
| id: string | undefined; | ||
| }, { | ||
| type: "assign error to context"; | ||
| params: xstate43.NonReducibleUnknown; | ||
| params: _$xstate.NonReducibleUnknown; | ||
| } | { | ||
| type: "clear error from context"; | ||
| params: xstate43.NonReducibleUnknown; | ||
| params: _$xstate.NonReducibleUnknown; | ||
| } | { | ||
| type: "connect to server-sent events"; | ||
| params: xstate43.NonReducibleUnknown; | ||
| params: _$xstate.NonReducibleUnknown; | ||
| } | { | ||
| type: "listen to server-sent events"; | ||
| params: xstate43.NonReducibleUnknown; | ||
| params: _$xstate.NonReducibleUnknown; | ||
| } | { | ||
| type: "stop listening to server-sent events"; | ||
| params: xstate43.NonReducibleUnknown; | ||
| params: _$xstate.NonReducibleUnknown; | ||
| } | { | ||
| type: "buffer remote mutation events"; | ||
| params: xstate43.NonReducibleUnknown; | ||
| params: _$xstate.NonReducibleUnknown; | ||
| } | { | ||
| type: "restore stashed changes"; | ||
| params: xstate43.NonReducibleUnknown; | ||
| params: _$xstate.NonReducibleUnknown; | ||
| } | { | ||
| type: "rebase fetched remote snapshot"; | ||
| params: xstate43.NonReducibleUnknown; | ||
| params: _$xstate.NonReducibleUnknown; | ||
| } | { | ||
| type: "apply mendoza patch"; | ||
| params: xstate43.NonReducibleUnknown; | ||
| params: _$xstate.NonReducibleUnknown; | ||
| } | { | ||
| type: "increment fetch attempts"; | ||
| params: xstate43.NonReducibleUnknown; | ||
| params: _$xstate.NonReducibleUnknown; | ||
| } | { | ||
| type: "reset fetch attempts"; | ||
| params: xstate43.NonReducibleUnknown; | ||
| params: _$xstate.NonReducibleUnknown; | ||
| } | { | ||
| type: "increment submit attempts"; | ||
| params: xstate43.NonReducibleUnknown; | ||
| params: _$xstate.NonReducibleUnknown; | ||
| } | { | ||
| type: "reset submit attempts"; | ||
| params: xstate43.NonReducibleUnknown; | ||
| params: _$xstate.NonReducibleUnknown; | ||
| } | { | ||
| type: "stage mutation"; | ||
| params: xstate43.NonReducibleUnknown; | ||
| params: _$xstate.NonReducibleUnknown; | ||
| } | { | ||
| type: "stash mutation"; | ||
| params: xstate43.NonReducibleUnknown; | ||
| params: _$xstate.NonReducibleUnknown; | ||
| } | { | ||
| type: "rebase local snapshot"; | ||
| params: xstate43.NonReducibleUnknown; | ||
| params: _$xstate.NonReducibleUnknown; | ||
| } | { | ||
| type: "send pristine event to parent"; | ||
| params: xstate43.NonReducibleUnknown; | ||
| params: _$xstate.NonReducibleUnknown; | ||
| } | { | ||
| type: "send sync event to parent"; | ||
| params: xstate43.NonReducibleUnknown; | ||
| params: _$xstate.NonReducibleUnknown; | ||
| } | { | ||
| type: "send mutation event to parent"; | ||
| params: xstate43.NonReducibleUnknown; | ||
| params: _$xstate.NonReducibleUnknown; | ||
| }, never, "fetchRemoteSnapshotTimeout" | "submitTransactionsTimeout", "disconnected" | "connecting" | "reconnecting" | "connectFailure" | { | ||
@@ -206,3 +205,3 @@ connected: "loading" | "loadFailure" | { | ||
| }; | ||
| }, "busy" | "error" | "ready", DocumentMutatorMachineInput, xstate43.NonReducibleUnknown, xstate43.EventObject, xstate43.MetaObject, { | ||
| }, "busy" | "error" | "ready", DocumentMutatorMachineInput, _$xstate.NonReducibleUnknown, _$xstate.EventObject, _$xstate.MetaObject, { | ||
| id: "document-mutator"; | ||
@@ -209,0 +208,0 @@ states: { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"_unstable_machine.d.ts","names":[],"sources":["../src/store/documentMap/applyMutations.ts","../src/store/documentMap/commit.ts","../src/store/optimistic/optimizations/squashDMPStrings.ts","../src/store/optimistic/optimizations/squashMutations.ts","../src/store/optimistic/rebase.ts","../src/machine/listener.ts","../src/machine/documentMutatorMachine.ts"],"mappings":";;;;;;;;UAKiB,YAAA,WAAuB,kBAAA;EACtC,EAAA;EACA,MAAA;EACA,MAAA,GAAS,CAAA;EACT,KAAA,GAAQ,CAAA;EACR,SAAA,EAAW,QAAA;AAAA;AALb;;;AAAA,iBAWgB,cAAA,WAAyB,kBAAA,CAAA,CACvC,SAAA,EAAW,QAAA,IACX,WAAA,EAAa,WAAA,CAAY,CAAA;;;;;AAIzB,aAAA,WACC,YAAA,CAAa,CAAA;AAAA,iBCnBA,MAAA,aAAmB,kBAAA,CAAA,CACjC,OAAA,EAAS,YAAA,CAAa,GAAA,KACtB,WAAA,EAAa,WAAA,CAAY,GAAA;AAAA,UCGV,SAAA;EACf,GAAA,GAAM,EAAA,aAAe,kBAAA;AAAA;AAAA,iBAEP,gBAAA,CACd,IAAA,EAAM,SAAA,EACN,cAAA,EAAgB,aAAA,KACf,aAAA;AAAA,iBCNa,oBAAA,CACd,MAAA,WAAiB,aAAA,KAChB,aAAA;AAAA,iBCHa,MAAA,CACd,UAAA,UACA,OAAA,EAAS,kBAAA,cACT,OAAA,EAAS,kBAAA,cACT,cAAA,WAAyB,aAAA,MACvB,QAAA,EAAU,aAAA,IAAiB,OAAA,EAAS,kBAAA;;;;iBCFxB,oBAAA,CAAqB,MAAA,EAAQ,YAAA,GAAY,KAAA,CAAA,UAAA,CAAA,YAAA,GAAA,cAAA,GAAA,aAAA;AAAA,UCyBxC,2BAAA;EACf,EAAA;EACA,MAAA,EAAQ,YAAA;ENjCO;EMmCf,cAAA,GAAiB,UAAA,QAAkB,oBAAA;EAEnC,KAAA,GAAQ,GAAA,SAAY,cAAA;AAAA;AAAA,KAGV,iCAAA;EACP,IAAA;EAAc,EAAA;EAAY,QAAA,EAAU,kBAAA;AAAA;EAEnC,IAAA;EACA,EAAA;EACA,OAAA;IAAU,KAAA,EAAO,QAAA;EAAA;EACjB,WAAA;EACA,SAAA;AAAA;EAED,IAAA;EAAuB,EAAA;EAAY,QAAA,EAAU,kBAAA;AAAA;EAC7C,IAAA;EAAwB,EAAA;EAAY,QAAA,EAAU,kBAAA;AAAA;EAC9C,IAAA;EAAkB,EAAA;AAAA;AAAA,cAEV,sBAAA,WAAsB,YAAA;UAQrB,YAAA,EN3CC;mBM6CQ,UAAA,QAAkB,oBAAA,GNpDV;;UMwDjB,GAAA,SAAY,cAAA;UAEZ,cAAA;SAED,cAAA;kBAES,aAAA;iBAED,aAAA;kBAEC,aAAA;;;;GAAa,eAAA,CAAA,YAAA;;;;;;;;;;;;aAeC,QAAA;AAAA;;;;UAIlB,cAAA;AAAA;;;;;YAqPM,YAAA;;KAAY,QAAA,CAAA,WAAA;YAqBZ,YAAA;kBAA4B,WAAA;EAAA,GAAW,QAAA,CAAA,WAAA;cAzCrC,UAAA,QAAkB,oBAAA;;KAAR,QAAA,CAAA,WAAA;;YAoBZ,YAAA;;KAAY,QAAA,CAAA,WAAA;;YAqBZ,YAAA;kBAA4B,WAAA;EAAA,GAAW,QAAA,CAAA,WAAA;AAAA;;;YArBvC,YAAA;;KAAY,QAAA,CAAA,WAAA;;;;;YAqBZ,YAAA;kBAA4B,WAAA;EAAA,GAAW,QAAA,CAAA,WAAA;;;;;cAzCrC,UAAA,QAAkB,oBAAA;;KAAR,QAAA,CAAA,WAAA"} | ||
| {"version":3,"file":"_unstable_machine.d.ts","names":[],"sources":["../src/store/documentMap/applyMutations.ts","../src/store/documentMap/commit.ts","../src/store/optimistic/optimizations/squashDMPStrings.ts","../src/store/optimistic/optimizations/squashMutations.ts","../src/store/optimistic/rebase.ts","../src/machine/listener.ts","../src/machine/documentMutatorMachine.ts"],"mappings":";;;;;;;UAKiB,YAAA,WAAuB,kBAAA;EACtC,EAAA;EACA,MAAA;EACA,MAAA,GAAS,CAAA;EACT,KAAA,GAAQ,CAAA;EACR,SAAA,EAAW,QAAA;AAAA;AALb;;;AAAA,iBAWgB,cAAA,WAAyB,kBAAA,CAAA,CACvC,SAAA,EAAW,QAAA,IACX,WAAA,EAAa,WAAA,CAAY,CAAA;;;;;AAIzB,aAAA,WACC,YAAA,CAAa,CAAA;AAAA,iBCnBA,MAAA,aAAmB,kBAAA,CAAA,CACjC,OAAA,EAAS,YAAA,CAAa,GAAA,KACtB,WAAA,EAAa,WAAA,CAAY,GAAA;AAAA,UCGV,SAAA;EACf,GAAA,GAAM,EAAA,aAAe,kBAAA;AAAA;AAAA,iBAEP,gBAAA,CACd,IAAA,EAAM,SAAA,EACN,cAAA,EAAgB,aAAA,KACf,aAAA;AAAA,iBCNa,oBAAA,CACd,MAAA,WAAiB,aAAA,KAChB,aAAA;AAAA,iBCHa,MAAA,CACd,UAAA,UACA,OAAA,EAAS,kBAAA,cACT,OAAA,EAAS,kBAAA,cACT,cAAA,WAAyB,aAAA,MACvB,QAAA,EAAU,aAAA,IAAiB,OAAA,EAAS,kBAAA;;;;iBCFxB,oBAAA,CAAqB,MAAA,EAAQ,YAAA,GAAY,MAAA,CAAA,UAAA,CAAA,YAAA,GAAA,cAAA,GAAA,aAAA;AAAA,UCyBxC,2BAAA;EACf,EAAA;EACA,MAAA,EAAQ,YAAA;ENjCO;EMmCf,cAAA,GAAiB,UAAA,QAAkB,oBAAA;EAEnC,KAAA,GAAQ,GAAA,SAAY,cAAA;AAAA;AAAA,KAGV,iCAAA;EACP,IAAA;EAAc,EAAA;EAAY,QAAA,EAAU,kBAAA;AAAA;EAEnC,IAAA;EACA,EAAA;EACA,OAAA;IAAU,KAAA,EAAO,QAAA;EAAA;EACjB,WAAA;EACA,SAAA;AAAA;EAED,IAAA;EAAuB,EAAA;EAAY,QAAA,EAAU,kBAAA;AAAA;EAC7C,IAAA;EAAwB,EAAA;EAAY,QAAA,EAAU,kBAAA;AAAA;EAC9C,IAAA;EAAkB,EAAA;AAAA;AAAA,cAEV,sBAAA,WAAsB,YAAA;UAQrB,YAAA,EN3CC;mBM6CQ,UAAA,QAAkB,oBAAA,GNpDV;;UMwDjB,GAAA,SAAY,cAAA;UAEZ,cAAA;SAED,cAAA;kBAES,aAAA;iBAED,aAAA;kBAEC,aAAA;;;;GAAa,iBAAA,CAAA,YAAA;;;;;;;;;;;;aAeC,QAAA;AAAA;;;;UAIlB,cAAA;AAAA;;;;;YAqPM,YAAA;;KAAY,QAAA,CAAA,WAAA;YAqBZ,YAAA;kBAA4B,WAAA;EAAA,GAAW,QAAA,CAAA,WAAA;cAzCrC,UAAA,QAAkB,oBAAA;;KAAR,QAAA,CAAA,WAAA;;YAoBZ,YAAA;;KAAY,QAAA,CAAA,WAAA;;YAqBZ,YAAA;kBAA4B,WAAA;EAAA,GAAW,QAAA,CAAA,WAAA;AAAA;;;YArBvC,YAAA;;KAAY,QAAA,CAAA,WAAA;;;;;YAqBZ,YAAA;kBAA4B,WAAA;EAAA,GAAW,QAAA,CAAA,WAAA;;;;;cAzCrC,UAAA,QAAkB,oBAAA;;KAAR,QAAA,CAAA,WAAA"} |
| import { a as SanityCreateOrReplaceMutation, c as SanityDiffMatchPatch, d as SanityMutation, f as SanitySetIfMissingPatch, i as SanityCreateMutation, l as SanityIncPatch, m as SanityUnsetPatch, n as Insert, o as SanityDecPatch, p as SanitySetPatch, r as SanityCreateIfNotExistsMutation, s as SanityDeleteMutation, u as SanityInsertPatch } from "./_chunks-dts/index.js"; | ||
| import { $ as PathElement, A as SafePath, B as Try, C as ParseInnerExpression, D as ParseProperty, E as ParseObject, F as ToArray, G as AnyEmptyArray, H as Get, I as ToNumber, J as FindBy, K as ByIndex, L as Trim, M as SplitAll, N as StringToPath, O as ParseValue, P as StripError, Q as Path, R as TrimLeft, S as ParseExpressions, T as ParseNumber, U as GetAtPath, V as Unwrap, W as getAtPath, X as Index, Y as FindInArray, Z as KeyedPathElement, _ as MergeInner, a as isKeyElement, b as ParseAllProps, c as startsWith, d as parse, et as PropertyName, f as Concat, g as Merge, h as Err, i as isIndexElement, j as Split, k as Result, l as normalize, m as Digit, n as isElementEqual, o as isKeyedElement, p as ConcatInner, q as ElementType, r as isEqual, s as isPropertyElement, st as Optional, t as isArrayElement, tt as AnyArray, u as stringify, v as Ok, w as ParseKVPair, x as ParseError, y as OnlyDigits, z as TrimRight } from "./_chunks-dts/index2.js"; | ||
| import { A as StringOp, C as Operation, D as ReplaceOp, E as RemoveOp, M as UnassignOp, N as UnsetOp, O as SetIfMissingOp, P as UpsertOp, S as ObjectOp, T as RelativePosition, _ as DiffMatchPatchOp, b as InsertOp, c as NodePatchList, d as SanityDocumentBase, f as Transaction, g as DecOp, h as AssignOp, i as DeleteMutation, j as TruncateOp, k as SetOp, l as PatchMutation, m as ArrayOp, n as CreateMutation, o as Mutation, p as AnyOp, r as CreateOrReplaceMutation, s as NodePatch, t as CreateIfNotExistsMutation, u as PatchOptions, v as IncOp, w as PrimitiveOp, x as NumberOp, y as InsertIfMissingOp } from "./_chunks-dts/types.js"; | ||
| import { $ as MutationResult, A as DocumentResult, B as DocumentUpdateListener, C as LocalState, D as createDocumentEventListener, E as createOptimisticStoreInternal, F as createReadOnlyStore, G as ListenerDisconnectEvent, H as toTransactions, I as DocumentMutationUpdate, J as ListenerMutationEvent, K as ListenerEndpointEvent, L as DocumentReconnectUpdate, M as InaccessibleReason, N as MapTuple, O as AccessibleDocumentResult, P as ReadOnlyDocumentStore, Q as MutationGroup, R as DocumentSyncUpdate, S as createOptimisticStoreClientBackend, T as createOptimisticStore, U as DocumentMap, V as createDocumentUpdateListener, W as ListenerChannelErrorEvent, X as ListenerSyncEvent, Y as ListenerReconnectEvent, Z as ListenerWelcomeEvent, _ as FetchDocuments, a as createSharedListener, at as RemoteMutationEvent, b as createDocumentLoaderFromClient, c as DocumentIdSetState, ct as TransactionalMutationGroup, d as InitialEvent, et as NonTransactionalMutationGroup, f as InsertMethod, g as DocEndpointResponse, h as toState, i as SharedListenerListenFn, it as RemoteDocumentEvent, j as InaccessibleDocumentResult, k as DocumentLoader, l as FetchDocumentIdsFn, m as createIdSetListenerFromClient, n as ListenerOptions, nt as OptimisticStore, o as createSharedListenerFromClient, ot as RemoteSyncEvent, p as createIdSetListener, q as ListenerEvent, r as RequestOptions, rt as QueryParams, s as DocumentIdSetEvent, st as SubmitResult, t as createOptimisticStoreMockBackend, tt as OptimisticDocumentEvent, u as IdSetListenFn, v as OmittedDocument, w as OptimisticStoreBackend, x as SanityClientLike, y as createDocumentLoader, z as DocumentUpdate } from "./_chunks-dts/index3.js"; | ||
| export { AccessibleDocumentResult, AnyArray, AnyEmptyArray, AnyOp, ArrayOp, AssignOp, ByIndex, Concat, ConcatInner, CreateIfNotExistsMutation, CreateMutation, CreateOrReplaceMutation, DecOp, DeleteMutation, DiffMatchPatchOp, Digit, DocEndpointResponse, DocumentIdSetEvent, DocumentIdSetState, DocumentLoader, DocumentMap, DocumentMutationUpdate, DocumentReconnectUpdate, DocumentResult, DocumentSyncUpdate, DocumentUpdate, DocumentUpdateListener, ElementType, Err, FetchDocumentIdsFn, FetchDocuments, FindBy, FindInArray, Get, GetAtPath, IdSetListenFn, InaccessibleDocumentResult, InaccessibleReason, IncOp, Index, InitialEvent, Insert, InsertIfMissingOp, InsertMethod, InsertOp, KeyedPathElement, ListenerChannelErrorEvent, ListenerDisconnectEvent, ListenerEndpointEvent, ListenerEvent, ListenerMutationEvent, ListenerOptions, ListenerReconnectEvent, ListenerSyncEvent, ListenerWelcomeEvent, LocalState, MapTuple, Merge, MergeInner, Mutation, MutationGroup, MutationResult, NodePatch, NodePatchList, NonTransactionalMutationGroup, NumberOp, ObjectOp, Ok, OmittedDocument, OnlyDigits, Operation, OptimisticDocumentEvent, OptimisticStore, OptimisticStoreBackend, Optional, ParseAllProps, ParseError, ParseExpressions, ParseInnerExpression, ParseKVPair, ParseNumber, ParseObject, ParseProperty, ParseValue, PatchMutation, PatchOptions, Path, PathElement, PrimitiveOp, PropertyName, QueryParams, ReadOnlyDocumentStore, RelativePosition, RemoteDocumentEvent, RemoteMutationEvent, RemoteSyncEvent, RemoveOp, ReplaceOp, RequestOptions, Result, SafePath, SanityClientLike, SanityCreateIfNotExistsMutation, SanityCreateMutation, SanityCreateOrReplaceMutation, SanityDecPatch, SanityDeleteMutation, SanityDiffMatchPatch, SanityDocumentBase, SanityIncPatch, SanityInsertPatch, SanityMutation, SanitySetIfMissingPatch, SanitySetPatch, SanityUnsetPatch, SetIfMissingOp, SetOp, SharedListenerListenFn, Split, SplitAll, StringOp, StringToPath, StripError, SubmitResult, ToArray, ToNumber, Transaction, TransactionalMutationGroup, Trim, TrimLeft, TrimRight, TruncateOp, Try, UnassignOp, UnsetOp, Unwrap, UpsertOp, createDocumentEventListener, createDocumentLoader, createDocumentLoaderFromClient, createDocumentUpdateListener, createIdSetListener, createIdSetListenerFromClient, createOptimisticStore, createOptimisticStoreClientBackend, createOptimisticStoreInternal, createOptimisticStoreMockBackend, createReadOnlyStore, createSharedListener, createSharedListenerFromClient, getAtPath, isArrayElement, isElementEqual, isEqual, isIndexElement, isKeyElement, isKeyedElement, isPropertyElement, normalize, parse, startsWith, stringify, toState, toTransactions }; | ||
| import { $ as MutationResult, A as DocumentResult, B as DocumentUpdateListener, C as LocalState, D as createDocumentEventListener, E as createOptimisticStoreInternal, F as createReadOnlyStore, G as ListenerDisconnectEvent, H as toTransactions, I as DocumentMutationUpdate, J as ListenerMutationEvent, K as ListenerEndpointEvent, L as DocumentReconnectUpdate, M as InaccessibleReason, N as MapTuple, O as AccessibleDocumentResult, P as ReadOnlyDocumentStore, Q as MutationGroup, R as DocumentSyncUpdate, S as createOptimisticStoreClientBackend, T as createOptimisticStore, U as DocumentMap, V as createDocumentUpdateListener, W as ListenerChannelErrorEvent, X as ListenerSyncEvent, Y as ListenerReconnectEvent, Z as ListenerWelcomeEvent, _ as FetchDocuments, a as createSharedListener, at as RemoteMutationEvent, b as createDocumentLoaderFromClient, c as DocumentIdSetState, ct as TransactionalMutationGroup, d as InitialEvent, et as NonTransactionalMutationGroup, f as InsertMethod, g as DocEndpointResponse, h as toState, i as SharedListenerListenFn, it as RemoteDocumentEvent, j as InaccessibleDocumentResult, k as DocumentLoader, l as FetchDocumentIdsFn, m as createIdSetListenerFromClient, n as ListenerOptions, nt as OptimisticStore, o as createSharedListenerFromClient, ot as RemoteSyncEvent, p as createIdSetListener, q as ListenerEvent, r as RequestOptions, rt as QueryParams, s as DocumentIdSetEvent, st as SubmitResult, t as createOptimisticStoreInMemoryBackend, tt as OptimisticDocumentEvent, u as IdSetListenFn, v as OmittedDocument, w as OptimisticStoreBackend, x as SanityClientLike, y as createDocumentLoader, z as DocumentUpdate } from "./_chunks-dts/index3.js"; | ||
| export { AccessibleDocumentResult, AnyArray, AnyEmptyArray, AnyOp, ArrayOp, AssignOp, ByIndex, Concat, ConcatInner, CreateIfNotExistsMutation, CreateMutation, CreateOrReplaceMutation, DecOp, DeleteMutation, DiffMatchPatchOp, Digit, DocEndpointResponse, DocumentIdSetEvent, DocumentIdSetState, DocumentLoader, DocumentMap, DocumentMutationUpdate, DocumentReconnectUpdate, DocumentResult, DocumentSyncUpdate, DocumentUpdate, DocumentUpdateListener, ElementType, Err, FetchDocumentIdsFn, FetchDocuments, FindBy, FindInArray, Get, GetAtPath, IdSetListenFn, InaccessibleDocumentResult, InaccessibleReason, IncOp, Index, InitialEvent, Insert, InsertIfMissingOp, InsertMethod, InsertOp, KeyedPathElement, ListenerChannelErrorEvent, ListenerDisconnectEvent, ListenerEndpointEvent, ListenerEvent, ListenerMutationEvent, ListenerOptions, ListenerReconnectEvent, ListenerSyncEvent, ListenerWelcomeEvent, LocalState, MapTuple, Merge, MergeInner, Mutation, MutationGroup, MutationResult, NodePatch, NodePatchList, NonTransactionalMutationGroup, NumberOp, ObjectOp, Ok, OmittedDocument, OnlyDigits, Operation, OptimisticDocumentEvent, OptimisticStore, OptimisticStoreBackend, Optional, ParseAllProps, ParseError, ParseExpressions, ParseInnerExpression, ParseKVPair, ParseNumber, ParseObject, ParseProperty, ParseValue, PatchMutation, PatchOptions, Path, PathElement, PrimitiveOp, PropertyName, QueryParams, ReadOnlyDocumentStore, RelativePosition, RemoteDocumentEvent, RemoteMutationEvent, RemoteSyncEvent, RemoveOp, ReplaceOp, RequestOptions, Result, SafePath, SanityClientLike, SanityCreateIfNotExistsMutation, SanityCreateMutation, SanityCreateOrReplaceMutation, SanityDecPatch, SanityDeleteMutation, SanityDiffMatchPatch, SanityDocumentBase, SanityIncPatch, SanityInsertPatch, SanityMutation, SanitySetIfMissingPatch, SanitySetPatch, SanityUnsetPatch, SetIfMissingOp, SetOp, SharedListenerListenFn, Split, SplitAll, StringOp, StringToPath, StripError, SubmitResult, ToArray, ToNumber, Transaction, TransactionalMutationGroup, Trim, TrimLeft, TrimRight, TruncateOp, Try, UnassignOp, UnsetOp, Unwrap, UpsertOp, createDocumentEventListener, createDocumentLoader, createDocumentLoaderFromClient, createDocumentUpdateListener, createIdSetListener, createIdSetListenerFromClient, createOptimisticStore, createOptimisticStoreClientBackend, createOptimisticStoreInMemoryBackend, createOptimisticStoreInternal, createReadOnlyStore, createSharedListener, createSharedListenerFromClient, getAtPath, isArrayElement, isElementEqual, isEqual, isIndexElement, isKeyElement, isKeyedElement, isPropertyElement, normalize, parse, startsWith, stringify, toState, toTransactions }; |
+38
-21
@@ -604,6 +604,6 @@ import { combineLatest, finalize, share, ReplaySubject, timer, switchMap, concat, of, throwError, concatMap, EMPTY, catchError, map, BehaviorSubject, Subject, filter, bufferWhen, mergeMap as mergeMap$1, takeUntil, Observable, defer, merge, takeWhile, scheduled, asyncScheduler, tap, from, withLatestFrom, startWith } from "rxjs"; | ||
| type: "welcome", | ||
| listenerName: "mock" + Math.random().toString(32).substring(2) | ||
| listenerName: "in-memory-" + Math.random().toString(32).substring(2) | ||
| }; | ||
| } | ||
| function createMockBackend() { | ||
| function createInMemoryBackend() { | ||
| const store = createDocumentMap(), listenerEvents = new Subject(); | ||
@@ -639,12 +639,10 @@ return { | ||
| } | ||
| function createOptimisticStoreMockBackend() { | ||
| const mockBackend = createMockBackend(), sharedListener = createSharedListener( | ||
| (query, options) => mockBackend.listen(query) | ||
| ), loadDocument = createDocumentLoader( | ||
| (ids) => mockBackend.getDocuments(ids) | ||
| ); | ||
| function createOptimisticStoreInMemoryBackend() { | ||
| const backend = createInMemoryBackend(), sharedListener = createSharedListener( | ||
| (query, options) => backend.listen(query) | ||
| ), loadDocument = createDocumentLoader((ids) => backend.getDocuments(ids)); | ||
| return { listen: createDocumentEventListener({ | ||
| loadDocument, | ||
| listenerEvents: sharedListener | ||
| }), submit: mockBackend.submit }; | ||
| }), submit: backend.submit }; | ||
| } | ||
@@ -665,2 +663,3 @@ function filterDocumentTransactions(transactions, id) { | ||
| }); | ||
| let activeListenSubscribers = 0; | ||
| return { | ||
@@ -700,4 +699,8 @@ listenEvents(id) { | ||
| }, remoteEvents$ = backend.listen(id).pipe(share()), subscription = merge( | ||
| remoteEvents$.pipe(map((event) => ({ source: "remote", event }))), | ||
| localMutations$.pipe(map((group) => ({ source: "local", group }))) | ||
| remoteEvents$.pipe( | ||
| map((event) => ({ source: "remote", event })) | ||
| ), | ||
| localMutations$.pipe( | ||
| map((group) => ({ source: "local", group })) | ||
| ) | ||
| ).subscribe({ | ||
@@ -785,5 +788,17 @@ next: (action) => { | ||
| submit: () => { | ||
| if (activeListenSubscribers === 0) { | ||
| console.warn( | ||
| "[@sanity/mutate] submit() was called without an active listen() subscriber. Pending mutations will not be sent to the backend until at least one listen(id) subscription exists and submit() is called again. See the OptimisticStore docs for details." | ||
| ); | ||
| return; | ||
| } | ||
| onSubmitLocal.next(); | ||
| }, | ||
| listen: store.listen, | ||
| listen(id) { | ||
| return defer(() => (activeListenSubscribers++, store.listen(id))).pipe( | ||
| finalize(() => { | ||
| activeListenSubscribers--; | ||
| }) | ||
| ); | ||
| }, | ||
| mutate(mutations) { | ||
@@ -880,11 +895,14 @@ localMutations$.next({ transaction: !1, mutations }); | ||
| }), | ||
| concatMap( | ||
| (submitRequest) => merge( | ||
| of(submitRequest), | ||
| from(submitRequest.transaction).pipe( | ||
| concatMap((transaction) => submitTransactions(transaction)), | ||
| mergeMap$1(() => EMPTY) | ||
| ) | ||
| ) | ||
| ), | ||
| share() | ||
| ); | ||
| return submitRequests.pipe( | ||
| concatMap( | ||
| (submitRequest) => from(submitRequest.transaction).pipe( | ||
| concatMap((transaction) => submitTransactions(transaction)) | ||
| ) | ||
| ) | ||
| ).subscribe(), { | ||
| return { | ||
| listen(id) { | ||
@@ -948,3 +966,2 @@ const remoteUpdates = listenDocumentUpdates(id).pipe(share()), remoteMutations = remoteUpdates.pipe( | ||
| startWith({ inflight: [], local: [], base: void 0 }), | ||
| //tap(s => console.log(s)), | ||
| map((state) => { | ||
@@ -973,4 +990,4 @@ const nextEdge = applyAll( | ||
| createOptimisticStoreClientBackend, | ||
| createOptimisticStoreInMemoryBackend, | ||
| createOptimisticStoreInternal, | ||
| createOptimisticStoreMockBackend, | ||
| createReadOnlyStore, | ||
@@ -977,0 +994,0 @@ createSharedListener, |
+7
-8
| import { h as __exportAll, t as index_d_exports$2 } from "./_chunks-dts/index.js"; | ||
| import { $ as PathElement, A as SafePath, B as Try, C as ParseInnerExpression, D as ParseProperty, E as ParseObject, F as ToArray, G as AnyEmptyArray, I as ToNumber, J as FindBy, K as ByIndex, L as Trim, M as SplitAll, N as StringToPath, O as ParseValue, P as StripError, Q as Path, R as TrimLeft, S as ParseExpressions, T as ParseNumber, V as Unwrap, X as Index, Y as FindInArray, Z as KeyedPathElement, _ as MergeInner, b as ParseAllProps, ct as Tuplify, et as PropertyName, f as Concat, g as Merge, h as Err, j as Split, k as Result, m as Digit, nt as ArrayElement, ot as NormalizeReadOnlyArray, p as ConcatInner, q as ElementType, st as Optional, tt as AnyArray, v as Ok, w as ParseKVPair, x as ParseError, y as OnlyDigits, z as TrimRight } from "./_chunks-dts/index2.js"; | ||
| import { A as StringOp, C as Operation, D as ReplaceOp, E as RemoveOp, M as UnassignOp, N as UnsetOp, O as SetIfMissingOp, P as UpsertOp, S as ObjectOp, T as RelativePosition, _ as DiffMatchPatchOp, a as IdentifiedSanityDocument, b as InsertOp, c as NodePatchList, d as SanityDocumentBase, f as Transaction, g as DecOp, h as AssignOp, i as DeleteMutation, j as TruncateOp, k as SetOp, l as PatchMutation, m as ArrayOp, n as CreateMutation, o as Mutation, p as AnyOp, r as CreateOrReplaceMutation, s as NodePatch, t as CreateIfNotExistsMutation, u as PatchOptions, v as IncOp, w as PrimitiveOp, x as NumberOp, y as InsertIfMissingOp } from "./_chunks-dts/types.js"; | ||
| import * as __8 from ".."; | ||
| type Id = string; | ||
@@ -168,21 +167,21 @@ type RevisionLock = string; | ||
| declare function autoKeys<Item>(generateKey: (item: Item) => string): { | ||
| insert: <Pos extends RelativePosition, Ref extends Index | KeyedPathElement>(position: Pos, referenceItem: Ref, items: Item[]) => __8.InsertOp<(Item & { | ||
| insert: <Pos extends RelativePosition, Ref extends Index | KeyedPathElement>(position: Pos, referenceItem: Ref, items: Item[]) => undefined<(Item & { | ||
| _key: string; | ||
| })[], Pos, Ref>; | ||
| upsert: <Pos extends RelativePosition, ReferenceItem extends KeyedPathElement>(items: Item[], position: Pos, referenceItem: ReferenceItem) => __8.UpsertOp<__8.Arrify<Item & { | ||
| upsert: <Pos extends RelativePosition, ReferenceItem extends KeyedPathElement>(items: Item[], position: Pos, referenceItem: ReferenceItem) => undefined<undefined<Item & { | ||
| _key: string; | ||
| }>, Pos, ReferenceItem>; | ||
| replace: <Pos extends RelativePosition, ReferenceItem extends Index | KeyedPathElement>(items: Item[], position: Pos, referenceItem: ReferenceItem) => __8.ReplaceOp<(Item & { | ||
| replace: <Pos extends RelativePosition, ReferenceItem extends Index | KeyedPathElement>(items: Item[], position: Pos, referenceItem: ReferenceItem) => undefined<(Item & { | ||
| _key: string; | ||
| })[], ReferenceItem>; | ||
| insertBefore: <Ref extends Index | KeyedPathElement>(ref: Ref, items: Item[]) => __8.InsertOp<(Item & { | ||
| insertBefore: <Ref extends Index | KeyedPathElement>(ref: Ref, items: Item[]) => undefined<(Item & { | ||
| _key: string; | ||
| })[], "before", Ref>; | ||
| prepend: (items: Item[]) => __8.InsertOp<(Item & { | ||
| prepend: (items: Item[]) => undefined<(Item & { | ||
| _key: string; | ||
| })[], "before", 0>; | ||
| insertAfter: <Ref extends Index | KeyedPathElement>(ref: Ref, items: Item[]) => __8.InsertOp<(Item & { | ||
| insertAfter: <Ref extends Index | KeyedPathElement>(ref: Ref, items: Item[]) => undefined<(Item & { | ||
| _key: string; | ||
| })[], "after", Ref>; | ||
| append: (items: Item[]) => __8.InsertOp<(Item & { | ||
| append: (items: Item[]) => undefined<(Item & { | ||
| _key: string; | ||
@@ -189,0 +188,0 @@ })[], "after", -1>; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","names":[],"sources":["../src/encoders/compact/types.ts","../src/encoders/compact/decode.ts","../src/encoders/compact/encode.ts","../src/encoders/compact/index.ts","../src/encoders/form-compat/form-patch-types.ts","../src/encoders/form-compat/encode.ts","../src/encoders/form-compat/index.ts","../src/formatters/compact.ts","../src/mutations/autoKeys.ts","../src/mutations/creators.ts","../src/utils/arrify.ts","../src/mutations/operations/creators.ts"],"mappings":"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"} | ||
| {"version":3,"file":"index.d.ts","names":[],"sources":["../src/encoders/compact/types.ts","../src/encoders/compact/decode.ts","../src/encoders/compact/encode.ts","../src/encoders/compact/index.ts","../src/encoders/form-compat/form-patch-types.ts","../src/encoders/form-compat/encode.ts","../src/encoders/form-compat/index.ts","../src/formatters/compact.ts","../src/mutations/autoKeys.ts","../src/mutations/creators.ts","../src/utils/arrify.ts","../src/mutations/operations/creators.ts"],"mappings":";;;KAGY,EAAA;AAAA,KACA,YAAA;AAAA,KACA,WAAA;AAAA,KACA,SAAA;AAAA,KAEA,gBAAA,cAA4B,EAAA;AAAA,KAC5B,gBAAA,mBAAiC,GAAA;AAAA,KACjC,2BAAA,8BAAuD,GAAA;AAAA,KACvD,yBAAA,4BAAmD,GAAA;AAAA,KAEnD,aAAA,sBAGV,EAAA,EACA,WAAA,MAEA,YAAA;AAAA,KAEU,cAAA,uBAGV,EAAA,EACA,WAAA,GACC,gBAAA,EAAkB,SAAA,EAAS,QAAA,GAC5B,YAAA;AAAA,KAGU,cAAA,uBAGV,EAAA,EACA,WAAA,GACC,gBAAA,EAAkB,SAAA,EAAS,QAAA,GAC5B,YAAA;AAAA,KAGU,uBAAA,gCAGV,EAAA,EACA,WAAA,GACC,gBAAA,EAAkB,SAAA,EAAS,QAAA,GAC5B,YAAA;AAAA,KAGU,gBAAA,yBAGV,EAAA,EACA,WAAA,GACC,UAAA,UAAoB,QAAA,uBACrB,YAAA;AAAA,KAGU,WAAA,oBAGV,EAAA,EACA,WAAA,YAEA,YAAA;AAAA,KAEU,WAAA,oBAGV,EAAA,EACA,WAAA,YAEA,YAAA;AAAA,KAEU,cAAA,uBAGV,EAAA,EACA,WAAA,YAEA,YAAA;AAAA,KAEU,gBAAA,uBAGV,EAAA,EACA,WAAA,cAEA,YAAA;AAAA,KAEU,eAAA,wBAGV,EAAA,EACA,WAAA,GACC,SAAA,EAAS,QAAA,GACV,YAAA;AAAA,KAEU,cAAA,uBAGV,EAAA,EACA,WAAA,GACC,SAAA,GACD,YAAA;AAAA,KAEU,WAAA,oBAA+B,EAAA,EAAI,WAAA,OAAkB,YAAA;AAAA,KACrD,oBAAA,6BAGV,EAAA,EACA,WAAA,aAEA,YAAA;AAAA,KAGU,sBAAA,+BAGV,EAAA,EACA,WAAA,YAEA,YAAA;AAAA,KAGU,oBAAA,GACR,aAAA,GACA,cAAA,GACA,cAAA,GACA,uBAAA,GACA,gBAAA,GACA,WAAA,GACA,WAAA,GACA,WAAA,GACA,oBAAA,GACA,sBAAA,GACA,cAAA,GACA,gBAAA,GACA,eAAA,GACA,cAAA;AAAA,KAEQ,eAAA,QACR,gBAAA,GACA,gBAAA,CAAe,GAAA,IACf,2BAAA,CAA0B,GAAA,IAC1B,yBAAA,CAAwB,GAAA,IACxB,oBAAA;AAAA,iBC5HY,MAAA,aAAmB,kBAAA,CAAA,CACjC,SAAA,EAAW,eAAA,CAAgB,GAAA,MAC1B,QAAA;AAAA,iBCTa,MAAA,aAAmB,kBAAA,CAAA,CACjC,SAAA,EAAW,QAAA,KACV,eAAA,CAAgB,GAAA;AAAA;;;;AFbnB;;KIKY,yBAAA;EAA6B,IAAA;AAAA;AJJzC;;;AAAA,KIQY,uBAAA;;AJPZ;;KIYY,oBAAA,qBAGR,yBAAA,GACA,uBAAA;;;AJfJ;KIoBY,aAAA,GAAgB,oBAAA;;;;KAKhB,UAAA,GAAa,OAAA,CACvB,WAAA,CAAY,aAAA,GACZ,uBAAA;;;;;AJxBF;KIgCY,kBAAA;EAAA,CAIN,GAAA,WAAc,kBAAA;AAAA,IAChB,kBAAA;;AJpCJ;;;;KI2CY,eAAA;AJ1CZ;;;;;AAAA,UIiDiB,YAAA;EACf,IAAA,EAAM,aAAA;EACN,IAAA;EACA,KAAA,EAAO,kBAAA;AAAA;;;;;;UAQQ,YAAA;EACf,IAAA,EAAM,aAAA;EACN,IAAA;EACA,KAAA,EAAO,kBAAA;AAAA;;;;;;UAQQ,YAAA;EACf,IAAA,EAAM,aAAA;EACN,IAAA;EACA,KAAA,EAAO,kBAAA;AAAA;;;;;;UAQQ,qBAAA;EACf,IAAA,EAAM,aAAA;EACN,IAAA;EACA,KAAA,EAAO,kBAAA;AAAA;;;;;;UAQQ,cAAA;EACf,IAAA,EAAM,aAAA;EACN,IAAA;AAAA;;;;;;KAQU,uBAAA;;AJ3EZ;;;;UIkFiB,eAAA;EACf,IAAA,EAAM,aAAA;EACN,IAAA;EACA,QAAA,EAAU,uBAAA;EACV,KAAA,EAAO,kBAAA;AAAA;;;;;;UAQQ,kBAAA;EACf,IAAA,EAAM,aAAA;EACN,IAAA;EACA,KAAA;AAAA;;;;;;KAQU,aAAA,GACR,YAAA,GACA,qBAAA,GACA,cAAA,GACA,eAAA,GACA,kBAAA;;;;AJlJJ;;;iBK+BgB,aAAA,CAAc,OAAA,EAAS,aAAA,KAAkB,SAAA;AAAA;;;;;;KEzB7C,OAAA;AAAA,iBAEI,MAAA,aAAmB,kBAAA,CAAA,CACjC,SAAA,EAAW,QAAA;AAAA,iBCHG,QAAA,MAAA,CAAe,WAAA,GAAc,IAAA,EAAM,IAAA;uBAInC,gBAAA,cACA,KAAA,GAAQ,gBAAA,EAAgB,QAAA,EAE1B,GAAA,EAAG,aAAA,EACE,GAAA,EAAG,KAAA,EACX,IAAA,kBAAM,IAAA;;;uBAID,gBAAA,wBACU,gBAAA,EAAgB,KAAA,EAE/B,IAAA,IAAM,QAAA,EACH,GAAA,EAAG,aAAA,EACE,aAAA,eAAa,SAAA,CAAA,IAAA;;;wBAIhB,gBAAA,wBACU,KAAA,GAAQ,gBAAA,EAAgB,KAAA,EAEvC,IAAA,IAAM,QAAA,EACH,GAAA,EAAG,aAAA,EACE,aAAA,gBAAa,IAAA;;;6BAGI,KAAA,GAAQ,gBAAA,EAAgB,GAAA,EACnD,GAAA,EAAG,KAAA,EACD,IAAA,kBAAM,IAAA;;;mBAGS,IAAA,OAAM,SAAA,EAAA,IAAA;;;4BAEG,KAAA,GAAQ,gBAAA,EAAgB,GAAA,EAClD,GAAA,EAAG,KAAA,EACD,IAAA,kBAAM,IAAA;;;kBAGQ,IAAA,OAAM,SAAA,EAAA,IAAA;;;;iBC/Bf,MAAA,aAAmB,QAAA,CAAS,kBAAA,SAAA,CAC1C,QAAA,EAAU,GAAA,GACT,cAAA,CAAe,GAAA;AAAA,iBAIF,KAAA,WAAgB,aAAA,GAAgB,SAAA,CAAA,CAC9C,EAAA,UACA,OAAA,EAAS,CAAA,EACT,OAAA,GAAU,YAAA,GACT,aAAA,CAAc,sBAAA,CAAuB,OAAA,CAAQ,CAAA;AAAA,iBAShC,EAAA,iBAAmB,IAAA,YAAgB,SAAA,CAAA,CACjD,IAAA,EAAM,CAAA,EACN,SAAA,EAAW,CAAA,GACV,SAAA,CAAU,sBAAA,CAAuB,CAAA,GAAI,CAAA;AAAA,iBAExB,EAAA,mCAAqC,SAAA,CAAA,CACnD,IAAA,EAAM,CAAA,EACN,SAAA,EAAW,CAAA,GACV,SAAA,CAAU,QAAA,CAAS,CAAA,GAAI,CAAA;AAAA,iBAYV,iBAAA,aAA8B,kBAAA,CAAA,CAC5C,QAAA,EAAU,GAAA,GACT,yBAAA,CAA0B,GAAA;AAAA,iBAIb,eAAA,aAA4B,kBAAA,CAAA,CAC1C,QAAA,EAAU,GAAA,GACT,uBAAA,CAAwB,GAAA;AAAA,iBAIX,OAAA,CAAQ,EAAA,WAAa,cAAA;AAAA,cAIxB,GAAA,SAAG,OAAA;AAAA,cACH,OAAA,SAAO,OAAA;AAAA,KC5ER,MAAA,OAAa,CAAA,uBAAwB,CAAA,GAAI,CAAA;AAAA,cC0BxC,GAAA,YAAgB,KAAA,EAAO,CAAA,KAAI,KAAA,CAAM,CAAA;AAAA,cAEjC,MAAA,+CACX,KAAA,EAAO,CAAA,KACN,QAAA,CAAS,CAAA;AAAA,cAKC,QAAA,sCACX,IAAA,EAAM,CAAA,KACL,UAAA,CAAW,CAAA;AAAA,cAKD,YAAA,YAAyB,KAAA,EAAO,CAAA,KAAI,cAAA,CAAe,CAAA;AAAA,cAKnD,KAAA,QAAY,OAAA;AAAA,cAEZ,GAAA,+BACX,MAAA,GAAQ,CAAA,KACP,KAAA,CAAM,CAAA;AAAA,cAKI,GAAA,+BACX,MAAA,GAAQ,CAAA,KACP,KAAA,CAAM,CAAA;AAAA,cAKI,cAAA,GAAkB,KAAA,aAAgB,gBAAA;AAAA,iBAK/B,MAAA,qBACM,QAAA,6BACF,gBAAA,8BACU,KAAA,GAAQ,gBAAA,CAAA,CAEpC,KAAA,EAAO,KAAA,GAAQ,YAAA,CAAa,KAAA,GAC5B,QAAA,EAAU,GAAA,EACV,oBAAA,EAAsB,aAAA,GACrB,QAAA,CAAS,sBAAA,CAAuB,KAAA,GAAQ,GAAA,EAAK,aAAA;AAAA,iBAShC,MAAA,qBAA2B,QAAA,UAAA,CACzC,KAAA,EAAO,KAAA,GAAQ,YAAA,CAAa,KAAA,IAAM,QAAA,CAAA,sBAAA,CAAA,KAAA;AAAA,iBAKpB,OAAA,qBAA4B,QAAA,UAAA,CAC1C,KAAA,EAAO,KAAA,GAAQ,YAAA,CAAa,KAAA,IAAM,QAAA,CAAA,sBAAA,CAAA,KAAA;AAAA,iBAKpB,YAAA,qBACM,QAAA,uCACQ,KAAA,GAAQ,gBAAA,CAAA,CACpC,KAAA,EAAO,KAAA,GAAQ,YAAA,CAAa,KAAA,GAAQ,oBAAA,EAAsB,aAAA,GAAa,QAAA,CAAA,sBAAA,CAAA,KAAA,aAAA,aAAA;AAAA,cAI5D,WAAA,uBACS,QAAA,uCACQ,KAAA,GAAQ,gBAAA,EAEpC,KAAA,EAAO,KAAA,GAAQ,YAAA,CAAa,KAAA,GAC5B,oBAAA,EAAsB,aAAA,KAAa,QAAA,CAAA,sBAAA,CAAA,KAAA,YAAA,aAAA;AAAA,iBAKrB,QAAA,CAAS,UAAA,UAAoB,QAAA,YAAoB,UAAA;AAAA,iBAWjD,OAAA,4CAEQ,KAAA,GAAQ,gBAAA,CAAA,CAE9B,KAAA,EAAO,KAAA,GAAQ,YAAA,CAAa,KAAA,GAC5B,aAAA,EAAe,aAAA,GACd,SAAA,CAAU,KAAA,EAAO,aAAA;AAAA,iBAWJ,MAAA,uBAA6B,KAAA,GAAQ,gBAAA,CAAA,CACnD,aAAA,EAAe,aAAA,GACd,QAAA,CAAS,aAAA;AAAA,iBAUI,MAAA;EACM,IAAA;AAAA,qBACF,gBAAA,8BACU,KAAA,GAAQ,gBAAA,CAAA,CAEpC,KAAA,EAAO,IAAA,GAAO,IAAA,IACd,QAAA,EAAU,GAAA,EACV,aAAA,EAAe,aAAA,GACd,QAAA,CAAS,MAAA,CAAO,IAAA,GAAO,GAAA,EAAK,aAAA;AAAA,iBAYf,eAAA;EACM,IAAA;AAAA,qBACF,gBAAA,8BACU,KAAA,GAAQ,gBAAA,CAAA,CAEpC,KAAA,EAAO,IAAA,GAAO,IAAA,IACd,QAAA,EAAU,GAAA,EACV,aAAA,EAAe,aAAA,GACd,iBAAA,CAAkB,MAAA,CAAO,IAAA,GAAO,GAAA,EAAK,aAAA"} |
+27
-41
| { | ||
| "name": "@sanity/mutate", | ||
| "version": "0.17.0-media-library.1", | ||
| "version": "0.17.0", | ||
| "description": "Experimental toolkit for working with Sanity mutations in JavaScript & TypeScript", | ||
@@ -23,22 +23,7 @@ "keywords": [ | ||
| "exports": { | ||
| ".": { | ||
| "import": "./dist/index.js", | ||
| "default": "./dist/index.js" | ||
| }, | ||
| "./path": { | ||
| "import": "./dist/_path.js", | ||
| "default": "./dist/_path.js" | ||
| }, | ||
| "./_unstable_apply": { | ||
| "import": "./dist/_unstable_apply.js", | ||
| "default": "./dist/_unstable_apply.js" | ||
| }, | ||
| "./_unstable_machine": { | ||
| "import": "./dist/_unstable_machine.js", | ||
| "default": "./dist/_unstable_machine.js" | ||
| }, | ||
| "./_unstable_store": { | ||
| "import": "./dist/_unstable_store.js", | ||
| "default": "./dist/_unstable_store.js" | ||
| }, | ||
| ".": "./dist/index.js", | ||
| "./path": "./dist/_path.js", | ||
| "./_unstable_apply": "./dist/_unstable_apply.js", | ||
| "./_unstable_machine": "./dist/_unstable_machine.js", | ||
| "./_unstable_store": "./dist/_unstable_store.js", | ||
| "./package.json": "./package.json" | ||
@@ -57,32 +42,33 @@ }, | ||
| "@isaacs/ttlcache": "^2.1.4", | ||
| "@sanity/client": "^7.14.1", | ||
| "@sanity/client": "^7.22.0", | ||
| "@sanity/diff-match-patch": "^3.2.0", | ||
| "@sanity/uuid": "^3.0.2", | ||
| "hotscript": "^1.0.13", | ||
| "lodash": "^4.17.23", | ||
| "lodash": "^4.18.1", | ||
| "mendoza": "^3.0.8", | ||
| "nanoid": "^5.1.6", | ||
| "nanoid": "^5.1.11", | ||
| "rxjs": "^7.8.2" | ||
| }, | ||
| "devDependencies": { | ||
| "@eslint/js": "^9.39.2", | ||
| "@sanity/pkg-utils": "^10.4.1", | ||
| "@eslint/js": "^10.0.1", | ||
| "@sanity/pkg-utils": "^10.4.18", | ||
| "@sanity/prettier-config": "^3.0.0", | ||
| "@types/diff-match-patch": "^1.0.36", | ||
| "@types/lodash": "^4.17.23", | ||
| "@typescript-eslint/parser": "^8.54.0", | ||
| "@vitest/coverage-v8": "^4.0.18", | ||
| "@vitest/ui": "^4.0.18", | ||
| "eslint": "^9.39.2", | ||
| "@types/lodash": "^4.17.24", | ||
| "@typescript-eslint/parser": "^8.59.2", | ||
| "@vitest/coverage-v8": "^4.1.5", | ||
| "@vitest/ui": "^4.1.5", | ||
| "eslint": "^10.3.0", | ||
| "eslint-plugin-import": "^2.32.0", | ||
| "eslint-plugin-prettier": "^5.5.5", | ||
| "eslint-plugin-simple-import-sort": "^12.1.1", | ||
| "eslint-plugin-unused-imports": "^4.3.0", | ||
| "eslint-plugin-simple-import-sort": "^13.0.0", | ||
| "eslint-plugin-unused-imports": "^4.4.1", | ||
| "npm-run-all2": "^8.0.4", | ||
| "prettier": "^3.8.1", | ||
| "rimraf": "^6.1.2", | ||
| "prettier": "^3.8.3", | ||
| "prettier-plugin-packagejson": "^3.0.2", | ||
| "rimraf": "^6.1.3", | ||
| "tsx": "^4.21.0", | ||
| "typescript": "^5.9.3", | ||
| "typescript-eslint": "^8.54.0", | ||
| "vitest": "^4.0.18" | ||
| "typescript": "^6.0.3", | ||
| "typescript-eslint": "^8.59.2", | ||
| "vitest": "^4.1.5" | ||
| }, | ||
@@ -97,5 +83,2 @@ "peerDependencies": { | ||
| }, | ||
| "engines": { | ||
| "node": ">=20.19 <22 || >=22.12" | ||
| }, | ||
| "scripts": { | ||
@@ -106,2 +89,5 @@ "build": "run-p pkg:build", | ||
| "dev": "run-p pkg:watch", | ||
| "docs:dev": "pnpm --filter @sanity/mutate-docs run dev", | ||
| "docs:build": "pnpm --filter @sanity/mutate-docs run build", | ||
| "docs:preview": "pnpm --filter @sanity/mutate-docs run preview", | ||
| "example:visual-editing": "pnpm --filter example-visual-editing run dev", | ||
@@ -108,0 +94,0 @@ "example:web": "pnpm --filter example-web run dev", |
+39
-243
@@ -0,28 +1,27 @@ | ||
| <p align="center"> | ||
| <picture> | ||
| <source media="(prefers-color-scheme: dark)" srcset="docs/public/mark-display-dark.svg"> | ||
| <img src="docs/public/mark-display-light.svg" alt="@sanity/mutate" width="144" height="144"> | ||
| </picture> | ||
| </p> | ||
| # @sanity/mutate | ||
| > [!WARNING] | ||
| > Disclaimer: This is work in progress, use at own risk! | ||
| > [!NOTE] | ||
| > Experimental. Use at your own risk. | ||
| **Experimental** toolkit for working with [Sanity](https://sanity.io) mutations in JavaScript & TypeScript | ||
| A TypeScript toolkit for [Sanity](https://sanity.io) mutations: | ||
| ## At a glance | ||
| - Declarative, composable mutation creators | ||
| - A pure, in-memory apply engine | ||
| - An optimistic local store with rebase semantics | ||
| - Declarative & composable mutation creators | ||
| - Utilities for applying mutations on in-memory documents (experimental) | ||
| - Local in-memory dataset replica with support for optimistic updates (experimental) | ||
| ## Install | ||
| ## Features | ||
| ```sh | ||
| npm install @sanity/mutate | ||
| ``` | ||
| - Mutations can be declared using creator functions and passed around like any other values, transformed and composed | ||
| into larger operations spanning multiple documents | ||
| - Mutations are mere descriptions of operations and can be serialized to a compact json format or a Sanity mutation API | ||
| request payload | ||
| - Nodes can be addressed using paths as JavaScript values instead of string paths | ||
| - Closely aligned with the [Sanity.io mutation format](https://www.sanity.io/docs/http-mutations) | ||
| - Supports automatically adding `_key`'s to objects in arrays, so you don't have to. | ||
| - Experimental support for applying mutations on in-memory documents | ||
| - Great TypeScript support | ||
| ## Example | ||
| ## Usage Example | ||
| ```ts | ||
@@ -39,6 +38,8 @@ import { | ||
| const projectId = '<projectId>' | ||
| const dataset = '<dataset>' | ||
| const mutations = [ | ||
| create({_type: 'dog', name: 'Fido'}), | ||
| createIfNotExists({_id: 'document-1', _type: 'someType'}), | ||
| createIfNotExists({_id: 'other-document', _type: 'author'}), | ||
| patch('other-document', [ | ||
@@ -51,232 +52,27 @@ at('published', set(true)), | ||
| // get a projectId and dataset at sanity.io | ||
| const projectId = '<projectId>' | ||
| const dataset = '<dataset>' | ||
| // Submit mutations to the Sanity API | ||
| fetch(`https://${projectId}.api.sanity.io/v2023-08-01/data/mutate/${dataset}`, { | ||
| method: 'POST', | ||
| mode: 'cors', | ||
| credentials: 'include', | ||
| headers: { | ||
| 'Content-Type': 'application/json', | ||
| await fetch( | ||
| `https://${projectId}.api.sanity.io/v2026-05-12/data/mutate/${dataset}`, | ||
| { | ||
| method: 'POST', | ||
| mode: 'cors', | ||
| credentials: 'include', | ||
| headers: {'Content-Type': 'application/json'}, | ||
| body: JSON.stringify(SanityEncoder.encodeAll(mutations)), | ||
| }, | ||
| body: JSON.stringify(SanityEncoder.encodeAll(mutations)), | ||
| }) | ||
| .then(response => response.json()) | ||
| .then(result => console.log(result)) | ||
| ``` | ||
| ## Mutation creators | ||
| ### Mutations | ||
| - `create(document: SanityDocument)`: Create a new document | ||
| - `createIfNotExists(document: SanityDocument)`: Create a new document if it does not exist | ||
| - `createOrReplace(document: SanityDocument)`: Create a new document or replace an existing one | ||
| - `delete(documentId: SanityDocument)`: Delete a document (aliases: `del`, `destroy`) | ||
| - `patch(documentId: string, patches: Patch | Patch[], options?: {ifRevision?: string})`: Patch a document. Can | ||
| optionally provide a `revisionId` for [optimistic locking](https://www.sanity.io/docs/http-mutations#26600a871378). If | ||
| the current document revision doesn't match the given revision the patch mutation will fail when applied. | ||
| ### Patches | ||
| A patch is a combination of a node path and an operation. The node path is a | ||
| simplified [JSONMatch](https://www.sanity.io/docs/json-match) path or an array of path segments that points to a | ||
| specific node in the document. The operation is one of the operations described [below](https://github.com/sanity-io/mutate#patch-operations). | ||
| - `at(path: Path | string, operation: Operation)`: Create a patch from a path and an operation | ||
| #### Examples: | ||
| ```js | ||
| at('foo.bar', set('baz')) | ||
| // equivalent to the above | ||
| at(['foo', 'bar'], set('baz')) | ||
| at(['array[0]'], insert('baz')) | ||
| // Set a value deep into an array of objects addressed by `_key` | ||
| at(['people', {_key: 'xyz'}, 'name'], set('Bjørge')) | ||
| // equivalent to the above, using a serialized path: | ||
| at('people[_key=="xyz"].name', set('Bjørge')) | ||
| ``` | ||
| ### Patch Operations | ||
| #### Patch operations applicable for all data types | ||
| - `set(value: any)`: Set the value of the node to the given `value` | ||
| - `setIfMissing(value: any)`: Set the value of the node to the given `value` if the node has no value | ||
| - `unset()`: Remove the node from the document | ||
| #### Object operations | ||
| - `assign(value: object)`: Do a shallow merge of the node with the given value. If the node is an object, the value will | ||
| be merged into the object similar to `Object.assign(<currentValue>, value)`. | ||
| - `unassign(attributes: string[])`: Remove the given attributes from the existing value. | ||
| #### Array operations | ||
| - `prepend(items: any[])`: Prepend the given items to the beginning of the array | ||
| - `append(items: any[])`: Append the given items to the end of the array | ||
| - `insert(items: any | any[], position: "before" | "after", referenceItem: number | {_key: string})`: Insert the given | ||
| items before or after the given `before` or `after` item. If `before` or `after` is not provided, the items will be | ||
| inserted at the beginning or end of the array. | ||
| - `truncate(startIndex: number, endIndex?: number)`: Remove items from the array starting at `startIndex` and ending | ||
| at `endIndex`. If `endIndex` is not provided, all items after `startIndex` will be removed. | ||
| - `replace(items: any | any[], referenceItem: number | {_key: string})`: Replaces the `referenceItem` (addressed by | ||
| index or \_key) with the given `item` or `items`. If `items` is an array, `referenceItem` will be replaced by the | ||
| items and any existing elements that comes after `referenceItem` will be shifted to the right. | ||
| - `upsert(items: any | any[], position: "before" | "after", referenceItem: number | {_key: string})`: Upsert one or more items | ||
| into the array. If the items match existing items in the array, the existing items will be replaced with the given | ||
| items. If the items do not match any existing items, it will be inserted into the array. The`referenceItem` specifies a reference item to place missing items relative to. If. If not provided, any missing items will be inserted at | ||
| the beginning or end of the array, depending on `position`. The `position`option can be used to specify where to insert the item if it does not | ||
| match any existing items. If not provided, the item will be inserted at the end of the array. | ||
| #### Number operations | ||
| - `inc(value: number)`: Increment the number by the given value | ||
| - `dec(value: number)`: Decrement the number by the given value | ||
| #### String operations | ||
| - `diffMatchPatch(patch: string)`: Apply an incremental text patch to the current string. Read more | ||
| about [diffMatchPatch](https://www.sanity.io/docs/http-patches#aTbJhlAJ). | ||
| ## Advanced examples | ||
| Define a set of operations and turn it into a patch mutation that can be applied on a set of documents | ||
| ```js | ||
| const patches = [ | ||
| at('metadata', setIfMissing({})), // make sure metadata object exists | ||
| at('metadata.published', set(true)), | ||
| at('metadata.publishedAt', set(new Date().toISOString())), | ||
| ] | ||
| const mutations = ['document-1', 'document-2', 'document-3'].map(id => | ||
| patch(id, patches), | ||
| ) | ||
| // commit mutations to datastore | ||
| commitMutations(mutations) | ||
| ``` | ||
| ## Apply mutations on local documents (experimental) | ||
| ## Documentation | ||
| Mutations can be applied to an in-memory collection of documents | ||
| Full reference and guides at **<https://sanity-io.github.io/mutate>** (sources in [`docs/`](./docs); run the site locally with `pnpm docs:dev`): | ||
| ```ts | ||
| import {applyInCollection} from '@sanity/mutate/_unstable_apply' | ||
| import {createIfNotExists, del} from '@sanity/mutate' | ||
| - [Getting Started](https://sanity-io.github.io/mutate/guide/getting-started) | ||
| - [Applying Mutations](https://sanity-io.github.io/mutate/guide/applying-mutations) — in-memory apply | ||
| - [Optimistic Store](https://sanity-io.github.io/mutate/guide/optimistic-store) — local replica with rebase | ||
| - [Recipes](https://sanity-io.github.io/mutate/guide/recipes) | ||
| - [Differences from the Sanity API](https://sanity-io.github.io/mutate/guide/differences-from-sanity-api) | ||
| - API reference: [mutations](https://sanity-io.github.io/mutate/api/mutations), [patches](https://sanity-io.github.io/mutate/api/patches), [operations](https://sanity-io.github.io/mutate/api/operations), [encoders](https://sanity-io.github.io/mutate/api/encoders) | ||
| const initial = [{_id: 'deleteme', _type: 'foo'}] | ||
| ## License | ||
| const updated = applyInCollection(initial, [ | ||
| createIfNotExists({_id: 'mydocument', _type: 'foo'}), | ||
| createIfNotExists({_id: 'anotherDocument', _type: 'foo'}), | ||
| del('deleteme'), | ||
| ]) | ||
| console.log(updated) | ||
| /*=> | ||
| [ | ||
| { _id: 'mydocument', _type: 'foo' }, | ||
| { _id: 'anotherDocument', _type: 'foo' } | ||
| ] | ||
| */ | ||
| ``` | ||
| Note: when applying mutations on a collection, referential integrity is preserved. This means that if a mutation is effectively a noop (e.g. nothing actually changed), the same object reference will be returned. | ||
| ```ts | ||
| import {applyInCollection} from '@sanity/mutate/_unstable_apply' | ||
| import {at, createIfNotExists, patch, set} from '@sanity/mutate' | ||
| const initial = [ | ||
| { | ||
| _id: 'someDoc', | ||
| _type: 'foo', | ||
| value: 'ok', | ||
| nested: {value: 'something'}, | ||
| otherNested: {message: 'something else'}, | ||
| }, | ||
| ] | ||
| const updated = applyInCollection(initial, [ | ||
| createIfNotExists({_id: 'someDoc', _type: 'foo'}), | ||
| patch('someDoc', [at('value', set('ok'))]), | ||
| patch('someDoc', [at('nested.value', set('something'))]), | ||
| ]) | ||
| // the mutation didn't cause anything to change | ||
| console.log(initial === updated) | ||
| //=> true | ||
| ``` | ||
| This is also the case for _nodes_ unaffected by the mutations: | ||
| ```ts | ||
| import {applyInCollection} from '@sanity/mutate/_unstable_apply' | ||
| import {at, createIfNotExists, patch, set} from '@sanity/mutate' | ||
| const initial = [ | ||
| { | ||
| _id: 'someDoc', | ||
| _type: 'foo', | ||
| value: 'ok', | ||
| nested: {value: 'something'}, | ||
| otherNested: {message: 'something else'}, | ||
| }, | ||
| ] | ||
| const updated = applyInCollection(initial, [ | ||
| createIfNotExists({_id: 'someDoc', _type: 'foo'}), | ||
| patch('someDoc', [at('value', set('ok'))]), | ||
| patch('someDoc', [at('nested.value', set('something'))]), | ||
| patch('someDoc', [at('otherNested.message', set('hello'))]), | ||
| ]) | ||
| // the `nested` object unaffected by the mutation | ||
| console.log(initial[0].nested === updated[0].nested) | ||
| //=> true | ||
| ``` | ||
| ## Apply a patch mutation to a single document | ||
| Alternatively, a patch mutation can be applied to a single document as long as its id matches the document id of the mutation: | ||
| ```ts | ||
| import {applyPatchMutation} from '@sanity/mutate/_unstable_apply' | ||
| import {at, insert, patch, setIfMissing} from '@sanity/mutate' | ||
| const document = {_id: 'test', _type: 'foo'} | ||
| const updated = applyPatchMutation( | ||
| document, | ||
| patch('test', [ | ||
| at('title', setIfMissing('Foo')), | ||
| at('cities', setIfMissing([])), | ||
| at('cities', insert(['Oslo', 'San Francisco'], 'after', 0)), | ||
| ]), | ||
| ) | ||
| console.log(updated) | ||
| /*=> | ||
| { | ||
| _id: 'test', | ||
| _type: 'foo', | ||
| title: 'Foo', | ||
| cities: [ 'Oslo', 'San Francisco' ] | ||
| } | ||
| */ | ||
| ``` | ||
| ### Differences from Sanity API | ||
| To better align with a strict type system, `@sanity/mutate` differs slightly from the Sanity API when applying patches. Although all the mutation types you can express with `@sanity/mutate` can also be expressed as Sanity API mutations, the inverse is not necessarily true; The Sanity API (e.g. a listener) may produce patches that can't be represented in `@sanity/mutate` without an extra conversion step that takes the current document into account. In addition, applying a patch in `@sanity/mutate` behaves differently from applying the same patch using the Sanity API on a few accounts: | ||
| - `set` and`setIfMissing` does not create intermediate empty objects - Using the Sanity API, `set` and `setIfMissing` will create intermediate empty objects if any object along the given path doesn't already exist. In `@sanity/mutate`, these patches will only apply to already existing objects. | ||
| - Limited json match support. Sanity mutations supports a powerful path selection syntax for targeting multiple document nodes at once with [json-match](https://www.sanity.io/docs/json-match). To keep things simple, a `@sanity/mutate` patch can only target a single document node. | ||
| MIT |
Sorry, the diff of this file is too big to display
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
4544
1.34%3
-25%475876
-1.11%21
5%77
-72.6%Updated
Updated
Updated