import type { ReactiveDataDocument } from "@warp-drive/core/reactive.js"; import type { TypedRecordInstance } from "@warp-drive/core/types/record"; import type { ConstrainedRequestOptions, CreateRequestOptions, DeleteRequestOptions, UpdateRequestOptions } from "@warp-drive/core/types/request"; /** * :::warning ⚠️ **These Mutation Builders DO NOT Set The Request Body** * While this may come as a surprise, the app providing the body ensures that only * desired and correctly formatted data is sent with the request. * ::: * * Builds request options to delete record for resources, * configured for the url, method and header expectations of most JSON:API APIs. * * **Basic Usage** * * ```ts * import { deleteRecord } from '@warp-drive/utilities/json-api'; * * const person = store.peekRecord('person', '1'); * * // mark record as deleted * store.deleteRecord(person); * * // persist deletion * const data = await store.request(deleteRecord(person)); * ``` * * **Supplying Options to Modify the Request Behavior** * * The following options are supported: * * - `host` - The host to use for the request, defaults to the `host` configured with `setBuildURLConfig`. * - `namespace` - The namespace to use for the request, defaults to the `namespace` configured with `setBuildURLConfig`. * - `resourcePath` - The resource path to use for the request, defaults to pluralizing the supplied type * - `reload` - Whether to forcibly reload the request if it is already in the store, not supplying this * option will delegate to the store's CachePolicy, defaulting to `false` if none is configured. * - `backgroundReload` - Whether to reload the request if it is already in the store, but to also resolve the * promise with the cached value, not supplying this option will delegate to the store's CachePolicy, * defaulting to `false` if none is configured. * - `urlParamsSetting` - an object containing options for how to serialize the query params (see `buildQueryParams`) * * ```ts * import { deleteRecord } from '@warp-drive/utilities/json-api'; * * const person = store.peekRecord('person', '1'); * * // mark record as deleted * store.deleteRecord(person); * * // persist deletion * const options = deleteRecord(person, { namespace: 'api/v1' }); * const data = await store.request(options); * ``` * * @public * @param record * @param options */ export declare function deleteRecord(record: T, options?: ConstrainedRequestOptions): DeleteRequestOptions; export declare function deleteRecord(record: unknown, options?: ConstrainedRequestOptions): DeleteRequestOptions; /** * :::warning ⚠️ **These Mutation Builders DO NOT Set The Necessary Request Body** * While this may come as a surprise, the app providing the body ensures that only * desired and correctly formatted data is sent with the request. * ::: * * Builds request options to create new record for resources, * configured for the url, method and header expectations of most JSON:API APIs. * * **Basic Usage** * * ```ts * import { cacheKeyFor } from '@warp-drive/core'; * import { createRecord } from '@warp-drive/utilities/json-api'; * import type { Person } from '#/data/types'; * * const person = store.createRecord('person', { name: 'Ted' }); * const init = createRecord(person); * init.body = JSON.stringify( * { * // it's likely you will want to transform this data * // somewhat * data: store.cache.peek(cacheKeyFor(person)) * } * ); * const data = await store.request(init); * ``` * * **Supplying Options to Modify the Request Behavior** * * The following options are supported: * * - `host` - The host to use for the request, defaults to the `host` configured with `setBuildURLConfig`. * - `namespace` - The namespace to use for the request, defaults to the `namespace` configured with `setBuildURLConfig`. * - `resourcePath` - The resource path to use for the request, defaults to pluralizing the supplied type * - `reload` - Whether to forcibly reload the request if it is already in the store, not supplying this * option will delegate to the store's CachePolicy, defaulting to `false` if none is configured. * - `backgroundReload` - Whether to reload the request if it is already in the store, but to also resolve the * promise with the cached value, not supplying this option will delegate to the store's CachePolicy, * defaulting to `false` if none is configured. * - `urlParamsSetting` - an object containing options for how to serialize the query params (see `buildQueryParams`) * * ```ts * import { createRecord } from '@warp-drive/utilities/json-api'; * * const person = store.createRecord('person', { name: 'Ted' }); * const options = createRecord(person, { namespace: 'api/v1' }); * const data = await store.request(options); * ``` * * @public * @param record * @param options */ export declare function createRecord(record: T, options?: ConstrainedRequestOptions): CreateRequestOptions; export declare function createRecord(record: unknown, options?: ConstrainedRequestOptions): CreateRequestOptions; /** * :::warning ⚠️ **These Mutation Builders DO NOT Set The Necessary Request Body** * While this may come as a surprise, the app providing the body ensures that only * desired and correctly formatted data is sent with the request. * ::: * * Builds request options to update existing record for resources, * configured for the url, method and header expectations of most JSON:API APIs. * * **Example Usage** * * ```ts * import { cacheKeyFor } from '@warp-drive/core'; * import { updateRecord } from '@warp-drive/utilities/json-api'; * import type { EditablePerson } from '#/data/types'; * * const mutable = await checkout(person); * mutable.name = 'Chris'; * const init = updateRecord(mutable); * * init.body = JSON.stringify( * // it's likely you will want to transform this data * // somewhat, or serialize only specific properties instead * serializePatch(store.cache, cacheKeyFor(mutable)) * ); * const data = await store.request(init); * ``` * * * **Supplying Options to Modify the Request Behavior** * * The following options are supported: * * - `patch` - Allows caller to specify whether to use a PATCH request instead of a PUT request, defaults to `false`. * - `host` - The host to use for the request, defaults to the `host` configured with `setBuildURLConfig`. * - `namespace` - The namespace to use for the request, defaults to the `namespace` configured with `setBuildURLConfig`. * - `resourcePath` - The resource path to use for the request, defaults to pluralizing the supplied type * - `reload` - Whether to forcibly reload the request if it is already in the store, not supplying this * option will delegate to the store's CachePolicy, defaulting to `false` if none is configured. * - `backgroundReload` - Whether to reload the request if it is already in the store, but to also resolve the * promise with the cached value, not supplying this option will delegate to the store's CachePolicy, * defaulting to `false` if none is configured. * - `urlParamsSetting` - an object containing options for how to serialize the query params (see `buildQueryParams`) * * ```ts * import { updateRecord } from '@warp-drive/utilities/json-api'; * * const person = store.peekRecord('person', '1'); * person.name = 'Chris'; * const options = updateRecord(person, { patch: true }); * const data = await store.request(options); * ``` * * @public * @param record * @param options */ export declare function updateRecord< T extends TypedRecordInstance, RT extends TypedRecordInstance = T >(record: T, options?: ConstrainedRequestOptions & { patch?: boolean; }): UpdateRequestOptions, T>; export declare function updateRecord(record: unknown, options?: ConstrainedRequestOptions & { patch?: boolean; }): UpdateRequestOptions; /** * Builds request options to update existing record for resources, * configured for the url and header expectations of most JSON:API APIs * for a PATCH request. * * Note: This is a convenience method that calls `updateRecord` with the * supplied request with the `patch` option set to `true`. * * **Basic Usage** * * ```ts * import { patchRecord } from '@warp-drive/utilities/json-api'; * * const person = store.peekRecord('person', '1'); * person.name = 'Chris'; * const data = await store.request(patchRecord(person)); * ``` * * **Supplying Options to Modify the Request Behavior** * * The following options are supported: * * - `host` - The host to use for the request, defaults to the `host` configured with `setBuildURLConfig`. * - `namespace` - The namespace to use for the request, defaults to the `namespace` configured with `setBuildURLConfig`. * - `resourcePath` - The resource path to use for the request, defaults to pluralizing the supplied type * - `reload` - Whether to forcibly reload the request if it is already in the store, not supplying this * option will delegate to the store's CachePolicy, defaulting to `false` if none is configured. * - `backgroundReload` - Whether to reload the request if it is already in the store, but to also resolve the * promise with the cached value, not supplying this option will delegate to the store's CachePolicy, * defaulting to `false` if none is configured. * - `urlParamsSetting` - an object containing options for how to serialize the query params (see `buildQueryParams`) * * ```ts * import { patchRecord } from '@warp-drive/utilities/json-api'; * * const person = store.peekRecord('person', '1'); * person.name = 'Chris'; * const options = patchRecord(person); * const data = await store.request(options); * ``` * * @public * @param record * @param options */ export declare function patchRecord(record: T, options?: ConstrainedRequestOptions): UpdateRequestOptions; export declare function patchRecord(record: unknown, options?: ConstrainedRequestOptions): UpdateRequestOptions;