{"version":3,"file":"feathers-pinia.umd.cjs","sources":["../node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js","../node_modules/.pnpm/fast-copy@3.0.1/node_modules/fast-copy/dist/esm/index.mjs","../src/utils/define-properties.ts","../src/utils/convert-data.ts","../src/utils/utils.ts","../src/utils/use-counter.ts","../src/utils/deep-unref.ts","../src/utils/use-instance-defaults.ts","../src/utils/service-utils.ts","../src/utils/index.ts","../node_modules/.pnpm/@vueuse+shared@10.8.0_@vue+composition-api@1.7.2_vue@3.4.19/node_modules/@vueuse/shared/index.mjs","../node_modules/.pnpm/fast-json-stable-stringify@2.1.0/node_modules/fast-json-stable-stringify/index.js","../src/use-find-get/utils.ts","../src/use-find-get/utils-pagination.ts","../src/use-find-get/use-find.ts","../src/use-find-get/use-get.ts","../src/create-pinia-service.ts","../node_modules/.pnpm/isomorphic-mongo-objectid@1.0.9/node_modules/isomorphic-mongo-objectid/src/isomorphic-mongo-objectid.js","../node_modules/.pnpm/isomorphic-mongo-objectid@1.0.9/node_modules/isomorphic-mongo-objectid/index.js","../src/modeling/use-model-instance.ts","../node_modules/.pnpm/sift@17.0.1/node_modules/sift/es5m/index.js","../src/custom-operators/sql-like.ts","../src/stores/filter-query.ts","../src/stores/local-queries.ts","../src/stores/storage.ts","../src/stores/temps.ts","../src/stores/clones.ts","../src/stores/all-storage-types.ts","../src/stores/use-data-store.ts","../node_modules/.pnpm/@feathersjs+commons@5.0.22/node_modules/@feathersjs/commons/lib/debug.js","../node_modules/.pnpm/@feathersjs+commons@5.0.22/node_modules/@feathersjs/commons/lib/index.js","../src/stores/pagination.ts","../src/stores/pending.ts","../src/stores/event-locks.ts","../src/stores/ssr-query-cache.ts","../src/stores/use-service-store.ts","../src/stores/event-queue-promise.ts","../node_modules/.pnpm/just-debounce@1.1.0/node_modules/just-debounce/index.js","../src/stores/events.ts","../src/hooks/0-prepare-query.ts","../src/hooks/1-set-pending.ts","../src/hooks/2-event-locks.ts","../src/hooks/3-sync-store.ts","../src/hooks/4-model-instances.ts","../src/hooks/5-handle-find-ssr.ts","../src/hooks/6-normalize-find.ts","../src/hooks/7-skip-get-if-exists.ts","../src/hooks/8-patch-diffs.ts","../src/hooks/9-ssr-qid-cache.ts","../src/hooks/index.ts","../src/modeling/use-feathers-instance.ts","../src/modeling/store-associated.ts","../src/localstorage/storage-sync.ts","../src/localstorage/clear-storage.ts","../src/create-pinia-client.ts","../src/feathers-ofetch.ts","../src/unplugin-auto-import-preset.ts","../node_modules/.pnpm/jwt-decode@4.0.0/node_modules/jwt-decode/build/esm/index.js","../src/use-auth/use-auth.ts","../src/composables/use-backup.ts"],"sourcesContent":["'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    if (a.constructor !== b.constructor) return false;\n\n    var length, i, keys;\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n\n\n    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) return false;\n\n    for (i = length; i-- !== 0;)\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n    for (i = length; i-- !== 0;) {\n      var key = keys[i];\n\n      if (!equal(a[key], b[key])) return false;\n    }\n\n    return true;\n  }\n\n  // true if both NaN, false otherwise\n  return a!==a && b!==b;\n};\n","var toStringFunction = Function.prototype.toString;\nvar create = Object.create;\nvar toStringObject = Object.prototype.toString;\n/**\n * @classdesc Fallback cache for when WeakMap is not natively supported\n */\nvar LegacyCache = /** @class */ (function () {\n    function LegacyCache() {\n        this._keys = [];\n        this._values = [];\n    }\n    LegacyCache.prototype.has = function (key) {\n        return !!~this._keys.indexOf(key);\n    };\n    LegacyCache.prototype.get = function (key) {\n        return this._values[this._keys.indexOf(key)];\n    };\n    LegacyCache.prototype.set = function (key, value) {\n        this._keys.push(key);\n        this._values.push(value);\n    };\n    return LegacyCache;\n}());\nfunction createCacheLegacy() {\n    return new LegacyCache();\n}\nfunction createCacheModern() {\n    return new WeakMap();\n}\n/**\n * Get a new cache object to prevent circular references.\n */\nvar createCache = typeof WeakMap !== 'undefined' ? createCacheModern : createCacheLegacy;\n/**\n * Get an empty version of the object with the same prototype it has.\n */\nfunction getCleanClone(prototype) {\n    if (!prototype) {\n        return create(null);\n    }\n    var Constructor = prototype.constructor;\n    if (Constructor === Object) {\n        return prototype === Object.prototype ? {} : create(prototype);\n    }\n    if (~toStringFunction.call(Constructor).indexOf('[native code]')) {\n        try {\n            return new Constructor();\n        }\n        catch (_a) { }\n    }\n    return create(prototype);\n}\nfunction getRegExpFlagsLegacy(regExp) {\n    var flags = '';\n    if (regExp.global) {\n        flags += 'g';\n    }\n    if (regExp.ignoreCase) {\n        flags += 'i';\n    }\n    if (regExp.multiline) {\n        flags += 'm';\n    }\n    if (regExp.unicode) {\n        flags += 'u';\n    }\n    if (regExp.sticky) {\n        flags += 'y';\n    }\n    return flags;\n}\nfunction getRegExpFlagsModern(regExp) {\n    return regExp.flags;\n}\n/**\n * Get the flags to apply to the copied regexp.\n */\nvar getRegExpFlags = /test/g.flags === 'g' ? getRegExpFlagsModern : getRegExpFlagsLegacy;\nfunction getTagLegacy(value) {\n    var type = toStringObject.call(value);\n    return type.substring(8, type.length - 1);\n}\nfunction getTagModern(value) {\n    return value[Symbol.toStringTag] || getTagLegacy(value);\n}\n/**\n * Get the tag of the value passed, so that the correct copier can be used.\n */\nvar getTag = typeof Symbol !== 'undefined' ? getTagModern : getTagLegacy;\n\nvar defineProperty = Object.defineProperty, getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor, getOwnPropertyNames = Object.getOwnPropertyNames, getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar _a = Object.prototype, hasOwnProperty = _a.hasOwnProperty, propertyIsEnumerable = _a.propertyIsEnumerable;\nvar SUPPORTS_SYMBOL = typeof getOwnPropertySymbols === 'function';\nfunction getStrictPropertiesModern(object) {\n    return getOwnPropertyNames(object).concat(getOwnPropertySymbols(object));\n}\n/**\n * Get the properites used when copying objects strictly. This includes both keys and symbols.\n */\nvar getStrictProperties = SUPPORTS_SYMBOL\n    ? getStrictPropertiesModern\n    : getOwnPropertyNames;\n/**\n * Striclty copy all properties contained on the object.\n */\nfunction copyOwnPropertiesStrict(value, clone, state) {\n    var properties = getStrictProperties(value);\n    for (var index = 0, length_1 = properties.length, property = void 0, descriptor = void 0; index < length_1; ++index) {\n        property = properties[index];\n        if (property === 'callee' || property === 'caller') {\n            continue;\n        }\n        descriptor = getOwnPropertyDescriptor(value, property);\n        if (!descriptor) {\n            // In extra edge cases where the property descriptor cannot be retrived, fall back to\n            // the loose assignment.\n            clone[property] = state.copier(value[property], state);\n            continue;\n        }\n        // Only clone the value if actually a value, not a getter / setter.\n        if (!descriptor.get && !descriptor.set) {\n            descriptor.value = state.copier(descriptor.value, state);\n        }\n        try {\n            defineProperty(clone, property, descriptor);\n        }\n        catch (error) {\n            // Tee above can fail on node in edge cases, so fall back to the loose assignment.\n            clone[property] = descriptor.value;\n        }\n    }\n    return clone;\n}\n/**\n * Deeply copy the indexed values in the array.\n */\nfunction copyArrayLoose(array, state) {\n    var clone = new state.Constructor();\n    // set in the cache immediately to be able to reuse the object recursively\n    state.cache.set(array, clone);\n    for (var index = 0, length_2 = array.length; index < length_2; ++index) {\n        clone[index] = state.copier(array[index], state);\n    }\n    return clone;\n}\n/**\n * Deeply copy the indexed values in the array, as well as any custom properties.\n */\nfunction copyArrayStrict(array, state) {\n    var clone = new state.Constructor();\n    // set in the cache immediately to be able to reuse the object recursively\n    state.cache.set(array, clone);\n    return copyOwnPropertiesStrict(array, clone, state);\n}\n/**\n * Copy the contents of the ArrayBuffer.\n */\nfunction copyArrayBuffer(arrayBuffer, _state) {\n    return arrayBuffer.slice(0);\n}\n/**\n * Create a new Blob with the contents of the original.\n */\nfunction copyBlob(blob, _state) {\n    return blob.slice(0, blob.size, blob.type);\n}\n/**\n * Create a new DataView with the contents of the original.\n */\nfunction copyDataView(dataView, state) {\n    return new state.Constructor(copyArrayBuffer(dataView.buffer));\n}\n/**\n * Create a new Date based on the time of the original.\n */\nfunction copyDate(date, state) {\n    return new state.Constructor(date.getTime());\n}\n/**\n * Deeply copy the keys and values of the original.\n */\nfunction copyMapLoose(map, state) {\n    var clone = new state.Constructor();\n    // set in the cache immediately to be able to reuse the object recursively\n    state.cache.set(map, clone);\n    map.forEach(function (value, key) {\n        clone.set(key, state.copier(value, state));\n    });\n    return clone;\n}\n/**\n * Deeply copy the keys and values of the original, as well as any custom properties.\n */\nfunction copyMapStrict(map, state) {\n    return copyOwnPropertiesStrict(map, copyMapLoose(map, state), state);\n}\nfunction copyObjectLooseLegacy(object, state) {\n    var clone = getCleanClone(state.prototype);\n    // set in the cache immediately to be able to reuse the object recursively\n    state.cache.set(object, clone);\n    for (var key in object) {\n        if (hasOwnProperty.call(object, key)) {\n            clone[key] = state.copier(object[key], state);\n        }\n    }\n    return clone;\n}\nfunction copyObjectLooseModern(object, state) {\n    var clone = getCleanClone(state.prototype);\n    // set in the cache immediately to be able to reuse the object recursively\n    state.cache.set(object, clone);\n    for (var key in object) {\n        if (hasOwnProperty.call(object, key)) {\n            clone[key] = state.copier(object[key], state);\n        }\n    }\n    var symbols = getOwnPropertySymbols(object);\n    for (var index = 0, length_3 = symbols.length, symbol = void 0; index < length_3; ++index) {\n        symbol = symbols[index];\n        if (propertyIsEnumerable.call(object, symbol)) {\n            clone[symbol] = state.copier(object[symbol], state);\n        }\n    }\n    return clone;\n}\n/**\n * Deeply copy the properties (keys and symbols) and values of the original.\n */\nvar copyObjectLoose = SUPPORTS_SYMBOL\n    ? copyObjectLooseModern\n    : copyObjectLooseLegacy;\n/**\n * Deeply copy the properties (keys and symbols) and values of the original, as well\n * as any hidden or non-enumerable properties.\n */\nfunction copyObjectStrict(object, state) {\n    var clone = getCleanClone(state.prototype);\n    // set in the cache immediately to be able to reuse the object recursively\n    state.cache.set(object, clone);\n    return copyOwnPropertiesStrict(object, clone, state);\n}\n/**\n * Create a new primitive wrapper from the value of the original.\n */\nfunction copyPrimitiveWrapper(primitiveObject, state) {\n    return new state.Constructor(primitiveObject.valueOf());\n}\n/**\n * Create a new RegExp based on the value and flags of the original.\n */\nfunction copyRegExp(regExp, state) {\n    var clone = new state.Constructor(regExp.source, getRegExpFlags(regExp));\n    clone.lastIndex = regExp.lastIndex;\n    return clone;\n}\n/**\n * Return the original value (an identity function).\n *\n * @note\n * THis is used for objects that cannot be copied, such as WeakMap.\n */\nfunction copySelf(value, _state) {\n    return value;\n}\n/**\n * Deeply copy the values of the original.\n */\nfunction copySetLoose(set, state) {\n    var clone = new state.Constructor();\n    // set in the cache immediately to be able to reuse the object recursively\n    state.cache.set(set, clone);\n    set.forEach(function (value) {\n        clone.add(state.copier(value, state));\n    });\n    return clone;\n}\n/**\n * Deeply copy the values of the original, as well as any custom properties.\n */\nfunction copySetStrict(set, state) {\n    return copyOwnPropertiesStrict(set, copySetLoose(set, state), state);\n}\n\nvar isArray = Array.isArray;\nvar assign = Object.assign;\nvar getPrototypeOf = Object.getPrototypeOf || (function (obj) { return obj.__proto__; });\nvar DEFAULT_LOOSE_OPTIONS = {\n    array: copyArrayLoose,\n    arrayBuffer: copyArrayBuffer,\n    blob: copyBlob,\n    dataView: copyDataView,\n    date: copyDate,\n    error: copySelf,\n    map: copyMapLoose,\n    object: copyObjectLoose,\n    regExp: copyRegExp,\n    set: copySetLoose,\n};\nvar DEFAULT_STRICT_OPTIONS = assign({}, DEFAULT_LOOSE_OPTIONS, {\n    array: copyArrayStrict,\n    map: copyMapStrict,\n    object: copyObjectStrict,\n    set: copySetStrict,\n});\n/**\n * Get the copiers used for each specific object tag.\n */\nfunction getTagSpecificCopiers(options) {\n    return {\n        Arguments: options.object,\n        Array: options.array,\n        ArrayBuffer: options.arrayBuffer,\n        Blob: options.blob,\n        Boolean: copyPrimitiveWrapper,\n        DataView: options.dataView,\n        Date: options.date,\n        Error: options.error,\n        Float32Array: options.arrayBuffer,\n        Float64Array: options.arrayBuffer,\n        Int8Array: options.arrayBuffer,\n        Int16Array: options.arrayBuffer,\n        Int32Array: options.arrayBuffer,\n        Map: options.map,\n        Number: copyPrimitiveWrapper,\n        Object: options.object,\n        Promise: copySelf,\n        RegExp: options.regExp,\n        Set: options.set,\n        String: copyPrimitiveWrapper,\n        WeakMap: copySelf,\n        WeakSet: copySelf,\n        Uint8Array: options.arrayBuffer,\n        Uint8ClampedArray: options.arrayBuffer,\n        Uint16Array: options.arrayBuffer,\n        Uint32Array: options.arrayBuffer,\n        Uint64Array: options.arrayBuffer,\n    };\n}\n/**\n * Create a custom copier based on the object-specific copy methods passed.\n */\nfunction createCopier(options) {\n    var normalizedOptions = assign({}, DEFAULT_LOOSE_OPTIONS, options);\n    var tagSpecificCopiers = getTagSpecificCopiers(normalizedOptions);\n    var array = tagSpecificCopiers.Array, object = tagSpecificCopiers.Object;\n    function copier(value, state) {\n        state.prototype = state.Constructor = undefined;\n        if (!value || typeof value !== 'object') {\n            return value;\n        }\n        if (state.cache.has(value)) {\n            return state.cache.get(value);\n        }\n        state.prototype = getPrototypeOf(value);\n        state.Constructor = state.prototype && state.prototype.constructor;\n        // plain objects\n        if (!state.Constructor || state.Constructor === Object) {\n            return object(value, state);\n        }\n        // arrays\n        if (isArray(value)) {\n            return array(value, state);\n        }\n        var tagSpecificCopier = tagSpecificCopiers[getTag(value)];\n        if (tagSpecificCopier) {\n            return tagSpecificCopier(value, state);\n        }\n        return typeof value.then === 'function' ? value : object(value, state);\n    }\n    return function copy(value) {\n        return copier(value, {\n            Constructor: undefined,\n            cache: createCache(),\n            copier: copier,\n            prototype: undefined,\n        });\n    };\n}\n/**\n * Create a custom copier based on the object-specific copy methods passed, defaulting to the\n * same internals as `copyStrict`.\n */\nfunction createStrictCopier(options) {\n    return createCopier(assign({}, DEFAULT_STRICT_OPTIONS, options));\n}\n/**\n * Copy an value deeply as much as possible, where strict recreation of object properties\n * are maintained. All properties (including non-enumerable ones) are copied with their\n * original property descriptors on both objects and arrays.\n */\nvar copyStrict = createStrictCopier({});\n/**\n * Copy an value deeply as much as possible.\n */\nvar index = createCopier({});\n\nexport { copyStrict, createCopier, createStrictCopier, index as default };\n//# sourceMappingURL=index.mjs.map\n","import type { AnyData } from '../types.js'\n\n/**\n * Defines all provided properties as non-enumerable, configurable, values\n */\nexport function defineValues<M extends AnyData, D extends AnyData>(data: M, properties: D) {\n  Object.keys(properties).forEach((key) => {\n    Object.defineProperty(data, key, {\n      enumerable: false,\n      configurable: true,\n      value: properties[key],\n    })\n  })\n  return data\n}\n\n/**\n * Defines all provided properties as non-enumerable, configurable, getters\n */\nexport function defineGetters<M extends AnyData, D extends AnyData>(data: M, properties: D) {\n  Object.keys(properties).forEach((key) => {\n    Object.defineProperty(data, key, {\n      enumerable: false,\n      configurable: true,\n      get: properties[key],\n    })\n  })\n  return data\n}\n\n/**\n * Defines all provided properties as non-enumerable, configurable, setters\n */\nexport function defineSetters<M extends AnyData, D extends AnyData>(data: M, properties: D) {\n  Object.keys(properties).forEach((key) => {\n    // eslint-disable-next-line accessor-pairs\n    Object.defineProperty(data, key, {\n      enumerable: false,\n      configurable: true,\n      set: properties[key],\n    })\n  })\n  return data\n}\n","import type { FeathersService } from '@feathersjs/feathers'\nimport type { PiniaService } from '../create-pinia-service.js'\nimport type { AnyData, AnyDataOrArray } from '../types.js'\nimport type { ServiceInstance } from '../modeling/index.js'\n\nexport function convertData(service: PiniaService<FeathersService>, result: AnyDataOrArray<AnyData>) {\n  if (!result) {\n    return result\n  }\n  else if (Array.isArray(result)) {\n    return result.map(i => service.new(i)) as ServiceInstance<AnyData>[]\n  }\n  else if (result && Array.isArray(result.data)) {\n    result.data = result.data.map(i => service.new(i)) as ServiceInstance<AnyData>[]\n    return result\n  }\n  else {\n    return service.new(result) as ServiceInstance<AnyData>\n  }\n}\n","import type { MaybeRef } from '@vueuse/core'\nimport type { Ref } from 'vue-demi'\nimport { _ } from '@feathersjs/commons'\nimport { unref } from 'vue-demi'\nimport isEqual from 'fast-deep-equal'\nimport fastCopy from 'fast-copy'\nimport type { AnyData, AnyDataOrArray, DiffDefinition, Params, Query, QueryInfo } from '../types.js'\nimport { defineValues } from './define-properties.js'\nimport { convertData } from './convert-data.js'\n\n// copied from @feathersjs/commons\nexport function createSymbol(name: string) {\n  return typeof Symbol !== 'undefined' ? Symbol.for(name) : name\n}\n\nexport const SERVICE = createSymbol('@feathersjs/service')\n\ninterface GetExtendedQueryInfoOptions {\n  queryInfo: QueryInfo\n  service: any\n  store: any\n  qid: Ref<string>\n}\nexport function getExtendedQueryInfo({ queryInfo, service, store, qid }: GetExtendedQueryInfoOptions) {\n  const qidState: any = store.pagination[qid.value]\n  const queryState = qidState[queryInfo.queryId]\n  if (!queryState)\n    return null\n\n  const { total } = queryState\n  const pageState = queryState[queryInfo.pageId as string]\n  if (!pageState)\n    return null\n\n  const { ids, queriedAt, ssr } = pageState\n  const result = ids.map((id: any) => store.itemsById[id]).filter((i: any) => i)\n  const items = convertData(service, result)\n  const info = { ...queryInfo, ids, items, total, queriedAt, queryState, ssr }\n  return info || null\n}\n\nexport function hasOwn(obj: AnyData, prop: string) {\n  return Object.prototype.hasOwnProperty.call(obj, prop)\n}\n\n/**\n *\n * @param data item or array of items\n * @returns object with { items[], isArray } where isArray is a boolean of if the data was an array.\n */\nexport function getArray<T>(data: T | T[]) {\n  const isArray = Array.isArray(data)\n  return { items: isArray ? data : [data], isArray }\n}\n\nexport function pickDiff(obj: any, diffDef: DiffDefinition) {\n  // If no diff definition was given, return the entire object.\n  if (!diffDef)\n    return obj\n\n  // Normalize all types into an array and pick the keys\n  const keys = typeof diffDef === 'string' ? [diffDef] : Array.isArray(diffDef) ? diffDef : Object.keys(diffDef || obj)\n  const topLevelKeys = keys.map(key => key.toString().split('.')[0])\n  return _.pick(obj, ...topLevelKeys)\n}\n\nexport function diff(dest: AnyData, source: AnyData, diffDef?: DiffDefinition) {\n  const originalVal = pickDiff(dest, diffDef)\n  const cloneVal = pickDiff(source, diffDef)\n\n  // If diff was an object, merge the values into the cloneVal\n  if (typeof diffDef !== 'string' && !Array.isArray(diffDef))\n    Object.assign(cloneVal, diffDef)\n\n  const areEqual = isEqual(originalVal, cloneVal)\n\n  if (areEqual)\n    return {}\n\n  // Loop through clone, compare original value to clone value, if different add to diff object.\n  const diff = Object.keys(cloneVal).reduce((diff: AnyData, key) => {\n    if (!isEqual(dest[key], cloneVal[key]))\n      diff[key] = cloneVal[key]\n\n    return diff\n  }, {})\n\n  return diff\n}\n\n/**\n * Restores tempIds to the records returned from the server. The tempIds need to be\n * temporarily put back in place in order to migrate the objects from the tempsById\n * into the itemsById. A shallow copy of the object\n *\n * Note when data is an array, it doesn't matter if the server\n * returns the items in the same order. It's only important that all of the correct\n * records are moved from tempsById to itemsById\n *\n * @param data item(s) before being passed to the server\n * @param responseData items(s) returned from the server\n */\nexport function restoreTempIds(data: AnyDataOrArray<any>, resData: AnyDataOrArray<any>, tempIdField = '__tempId') {\n  const { items: sourceItems, isArray } = getArray(data)\n  const { items: responseItems } = getArray(resData)\n\n  responseItems.forEach((item: any, index: number) => {\n    const tempId = sourceItems[index][tempIdField]\n    if (tempId)\n      defineValues(item, { [tempIdField]: tempId })\n  })\n\n  return isArray ? responseItems : responseItems[0]\n}\n\nfunction stringifyIfObject(val: any): string | any {\n  if (typeof val === 'object' && val != null)\n    return val.toString()\n\n  return val\n}\n\n/**\n * Get the id from a record in this order:\n *   1. the `idField`\n *   2. id\n *   3. _id\n * @param item\n * @param idField\n */\nexport function getId(item: any, idField: string) {\n  if (!item)\n    return\n  if (idField && item[idField] !== undefined)\n    return stringifyIfObject(item[idField as string])\n\n  if (item.id !== undefined)\n    return stringifyIfObject(item.id)\n\n  if (item._id !== undefined)\n    return stringifyIfObject(item._id)\n}\n\n/**\n * Assures params exist.\n * @param params existing params\n */\nexport function getParams(params?: MaybeRef<Params<Query>>): Params<Query> {\n  if (!params)\n    return {}\n\n  return fastCopy(unref(params))\n}\n\nexport function timeout(ms: number) {\n  return new Promise(resolve => setTimeout(resolve, ms))\n}\n","import { ref } from 'vue-demi'\n\n/**\n * Use a counter to track the number of pending queries. Prevents collisions with overlapping queries.\n */\nexport function useCounter() {\n  const count = ref(0)\n  const add = () => {\n    count.value = count.value + 1\n  }\n  const sub = () => {\n    count.value = count.value === 0 ? 0 : count.value - 1\n  }\n  return { count, add, sub }\n}\n","import type { MaybeRef } from '@vueuse/core'\nimport { isRef, unref } from 'vue-demi'\n\nconst isObject = (val: Record<string, any>) => val !== null && typeof val === 'object'\nconst isArray = Array.isArray\n\n// Unref a value, recursing into it if it's an object.\nfunction smartUnref(val: Record<string, any>) {\n  // Non-ref object?  Go deeper!\n  if (val !== null && !isRef(val) && typeof val === 'object')\n    return deepUnref(val)\n\n  return unref(val)\n}\n\n// Unref an array, recursively.\nconst unrefArray = (arr: any) => arr.map(smartUnref)\n\n// Unref an object, recursively.\nfunction unrefObject(obj: Record<string, any>) {\n  const unreffed: Record<string, any> = {}\n\n  Object.keys(obj).forEach((key) => {\n    unreffed[key] = smartUnref(obj[key])\n  })\n\n  return unreffed\n}\n\n/**\n * Deeply unref a value, recursing into objects and arrays.\n *\n * Adapted from https://github.com/DanHulton/vue-deepunref\n */\nexport function deepUnref(val: MaybeRef<Record<string, any>>) {\n  const checkedVal: any = isRef(val) ? unref(val) : val\n\n  if (!isObject(checkedVal))\n    return checkedVal\n\n  if (isArray(checkedVal))\n    return unrefArray(checkedVal)\n\n  return unrefObject(checkedVal)\n}\n","import fastCopy from 'fast-copy'\nimport { _ } from '@feathersjs/commons'\nimport type { AnyData } from '../types.js'\n\nexport function useInstanceDefaults<D extends AnyData, M extends AnyData>(defaults: D, data: M) {\n  const dataKeys = Object.keys(data)\n  const defaultsToApply = _.omit(defaults, ...dataKeys) as D\n  const cloned = Object.assign(data, fastCopy(defaultsToApply))\n\n  return cloned\n}\n","/**\n * Push data to the store and return the new data.\n */\nexport function pushToStore<Data>(data: Data, service: { createInStore: any }) {\n  if (!data)\n    return data\n\n  const createInStore = (item: any) => service.createInStore(item)\n\n  if (Array.isArray(data))\n    return data.map(createInStore)\n\n  else\n    return createInStore(data)\n}\n\n/**\n * Define a virtual property on an object.\n */\nexport function defineVirtualProperty<Data>(data: Data, key: string, getter: any) {\n  const definition: any = { enumerable: false }\n  if (typeof getter === 'function') {\n    definition.get = function get(this: Data) {\n      return getter(this as Data)\n    }\n  }\n  else { definition.value = getter }\n\n  Object.defineProperty(data, key, definition)\n}\n\nexport function defineVirtualProperties<Data>(data: Data, getters: Record<string, any>) {\n  Object.keys(getters).forEach(key => defineVirtualProperty(data, key, getters[key]))\n}\n","export * from './utils'\nexport * from './use-counter'\nexport * from './convert-data'\nexport * from './define-properties'\nexport * from './deep-unref'\nexport * from './use-instance-defaults'\nexport * from './service-utils'\n\n// typical Feathers service methods not on PiniaService\nexport const existingServiceMethods = [\n  'update',\n  'hooks',\n  'setMaxListeners',\n  'getMaxListeners',\n  'addListener',\n  'prependListener',\n  'once',\n  'prependOnceListener',\n  'removeListener',\n  'off',\n  'removeAllListeners',\n  'listeners',\n  'rawListeners',\n  'emit',\n  'eventNames',\n  'listenerCount',\n  'on',\n]\n","import { shallowRef, watchEffect, readonly, ref, watch, customRef, getCurrentScope, onScopeDispose, effectScope, getCurrentInstance, provide, inject, isVue3, version, isRef, unref, computed, reactive, toRefs as toRefs$1, toRef as toRef$1, isVue2, set as set$1, onBeforeMount, nextTick, onBeforeUnmount, onMounted, onUnmounted, isReactive } from 'vue-demi';\n\nfunction computedEager(fn, options) {\n  var _a;\n  const result = shallowRef();\n  watchEffect(() => {\n    result.value = fn();\n  }, {\n    ...options,\n    flush: (_a = options == null ? void 0 : options.flush) != null ? _a : \"sync\"\n  });\n  return readonly(result);\n}\n\nfunction computedWithControl(source, fn) {\n  let v = void 0;\n  let track;\n  let trigger;\n  const dirty = ref(true);\n  const update = () => {\n    dirty.value = true;\n    trigger();\n  };\n  watch(source, update, { flush: \"sync\" });\n  const get = typeof fn === \"function\" ? fn : fn.get;\n  const set = typeof fn === \"function\" ? void 0 : fn.set;\n  const result = customRef((_track, _trigger) => {\n    track = _track;\n    trigger = _trigger;\n    return {\n      get() {\n        if (dirty.value) {\n          v = get();\n          dirty.value = false;\n        }\n        track();\n        return v;\n      },\n      set(v2) {\n        set == null ? void 0 : set(v2);\n      }\n    };\n  });\n  if (Object.isExtensible(result))\n    result.trigger = update;\n  return result;\n}\n\nfunction tryOnScopeDispose(fn) {\n  if (getCurrentScope()) {\n    onScopeDispose(fn);\n    return true;\n  }\n  return false;\n}\n\nfunction createEventHook() {\n  const fns = /* @__PURE__ */ new Set();\n  const off = (fn) => {\n    fns.delete(fn);\n  };\n  const on = (fn) => {\n    fns.add(fn);\n    const offFn = () => off(fn);\n    tryOnScopeDispose(offFn);\n    return {\n      off: offFn\n    };\n  };\n  const trigger = (...args) => {\n    return Promise.all(Array.from(fns).map((fn) => fn(...args)));\n  };\n  return {\n    on,\n    off,\n    trigger\n  };\n}\n\nfunction createGlobalState(stateFactory) {\n  let initialized = false;\n  let state;\n  const scope = effectScope(true);\n  return (...args) => {\n    if (!initialized) {\n      state = scope.run(() => stateFactory(...args));\n      initialized = true;\n    }\n    return state;\n  };\n}\n\nconst localProvidedStateMap = /* @__PURE__ */ new WeakMap();\n\nconst provideLocal = (key, value) => {\n  var _a;\n  const instance = (_a = getCurrentInstance()) == null ? void 0 : _a.proxy;\n  if (instance == null)\n    throw new Error(\"provideLocal must be called in setup\");\n  if (!localProvidedStateMap.has(instance))\n    localProvidedStateMap.set(instance, /* @__PURE__ */ Object.create(null));\n  const localProvidedState = localProvidedStateMap.get(instance);\n  localProvidedState[key] = value;\n  provide(key, value);\n};\n\nconst injectLocal = (...args) => {\n  var _a;\n  const key = args[0];\n  const instance = (_a = getCurrentInstance()) == null ? void 0 : _a.proxy;\n  if (instance == null)\n    throw new Error(\"injectLocal must be called in setup\");\n  if (localProvidedStateMap.has(instance) && key in localProvidedStateMap.get(instance))\n    return localProvidedStateMap.get(instance)[key];\n  return inject(...args);\n};\n\nfunction createInjectionState(composable, options) {\n  const key = (options == null ? void 0 : options.injectionKey) || Symbol(composable.name || \"InjectionState\");\n  const useProvidingState = (...args) => {\n    const state = composable(...args);\n    provideLocal(key, state);\n    return state;\n  };\n  const useInjectedState = () => injectLocal(key);\n  return [useProvidingState, useInjectedState];\n}\n\nfunction createSharedComposable(composable) {\n  let subscribers = 0;\n  let state;\n  let scope;\n  const dispose = () => {\n    subscribers -= 1;\n    if (scope && subscribers <= 0) {\n      scope.stop();\n      state = void 0;\n      scope = void 0;\n    }\n  };\n  return (...args) => {\n    subscribers += 1;\n    if (!state) {\n      scope = effectScope(true);\n      state = scope.run(() => composable(...args));\n    }\n    tryOnScopeDispose(dispose);\n    return state;\n  };\n}\n\nfunction extendRef(ref, extend, { enumerable = false, unwrap = true } = {}) {\n  if (!isVue3 && !version.startsWith(\"2.7.\")) {\n    if (process.env.NODE_ENV !== \"production\")\n      throw new Error(\"[VueUse] extendRef only works in Vue 2.7 or above.\");\n    return;\n  }\n  for (const [key, value] of Object.entries(extend)) {\n    if (key === \"value\")\n      continue;\n    if (isRef(value) && unwrap) {\n      Object.defineProperty(ref, key, {\n        get() {\n          return value.value;\n        },\n        set(v) {\n          value.value = v;\n        },\n        enumerable\n      });\n    } else {\n      Object.defineProperty(ref, key, { value, enumerable });\n    }\n  }\n  return ref;\n}\n\nfunction get(obj, key) {\n  if (key == null)\n    return unref(obj);\n  return unref(obj)[key];\n}\n\nfunction isDefined(v) {\n  return unref(v) != null;\n}\n\nfunction makeDestructurable(obj, arr) {\n  if (typeof Symbol !== \"undefined\") {\n    const clone = { ...obj };\n    Object.defineProperty(clone, Symbol.iterator, {\n      enumerable: false,\n      value() {\n        let index = 0;\n        return {\n          next: () => ({\n            value: arr[index++],\n            done: index > arr.length\n          })\n        };\n      }\n    });\n    return clone;\n  } else {\n    return Object.assign([...arr], obj);\n  }\n}\n\nfunction toValue(r) {\n  return typeof r === \"function\" ? r() : unref(r);\n}\nconst resolveUnref = toValue;\n\nfunction reactify(fn, options) {\n  const unrefFn = (options == null ? void 0 : options.computedGetter) === false ? unref : toValue;\n  return function(...args) {\n    return computed(() => fn.apply(this, args.map((i) => unrefFn(i))));\n  };\n}\n\nfunction reactifyObject(obj, optionsOrKeys = {}) {\n  let keys = [];\n  let options;\n  if (Array.isArray(optionsOrKeys)) {\n    keys = optionsOrKeys;\n  } else {\n    options = optionsOrKeys;\n    const { includeOwnProperties = true } = optionsOrKeys;\n    keys.push(...Object.keys(obj));\n    if (includeOwnProperties)\n      keys.push(...Object.getOwnPropertyNames(obj));\n  }\n  return Object.fromEntries(\n    keys.map((key) => {\n      const value = obj[key];\n      return [\n        key,\n        typeof value === \"function\" ? reactify(value.bind(obj), options) : value\n      ];\n    })\n  );\n}\n\nfunction toReactive(objectRef) {\n  if (!isRef(objectRef))\n    return reactive(objectRef);\n  const proxy = new Proxy({}, {\n    get(_, p, receiver) {\n      return unref(Reflect.get(objectRef.value, p, receiver));\n    },\n    set(_, p, value) {\n      if (isRef(objectRef.value[p]) && !isRef(value))\n        objectRef.value[p].value = value;\n      else\n        objectRef.value[p] = value;\n      return true;\n    },\n    deleteProperty(_, p) {\n      return Reflect.deleteProperty(objectRef.value, p);\n    },\n    has(_, p) {\n      return Reflect.has(objectRef.value, p);\n    },\n    ownKeys() {\n      return Object.keys(objectRef.value);\n    },\n    getOwnPropertyDescriptor() {\n      return {\n        enumerable: true,\n        configurable: true\n      };\n    }\n  });\n  return reactive(proxy);\n}\n\nfunction reactiveComputed(fn) {\n  return toReactive(computed(fn));\n}\n\nfunction reactiveOmit(obj, ...keys) {\n  const flatKeys = keys.flat();\n  const predicate = flatKeys[0];\n  return reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => !predicate(toValue(v), k))) : Object.fromEntries(Object.entries(toRefs$1(obj)).filter((e) => !flatKeys.includes(e[0]))));\n}\n\nconst isClient = typeof window !== \"undefined\" && typeof document !== \"undefined\";\nconst isWorker = typeof WorkerGlobalScope !== \"undefined\" && globalThis instanceof WorkerGlobalScope;\nconst isDef = (val) => typeof val !== \"undefined\";\nconst notNullish = (val) => val != null;\nconst assert = (condition, ...infos) => {\n  if (!condition)\n    console.warn(...infos);\n};\nconst toString = Object.prototype.toString;\nconst isObject = (val) => toString.call(val) === \"[object Object]\";\nconst now = () => Date.now();\nconst timestamp = () => +Date.now();\nconst clamp = (n, min, max) => Math.min(max, Math.max(min, n));\nconst noop = () => {\n};\nconst rand = (min, max) => {\n  min = Math.ceil(min);\n  max = Math.floor(max);\n  return Math.floor(Math.random() * (max - min + 1)) + min;\n};\nconst hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key);\nconst isIOS = /* @__PURE__ */ getIsIOS();\nfunction getIsIOS() {\n  var _a, _b;\n  return isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && (/iP(ad|hone|od)/.test(window.navigator.userAgent) || ((_b = window == null ? void 0 : window.navigator) == null ? void 0 : _b.maxTouchPoints) > 2 && /iPad|Macintosh/.test(window == null ? void 0 : window.navigator.userAgent));\n}\n\nfunction createFilterWrapper(filter, fn) {\n  function wrapper(...args) {\n    return new Promise((resolve, reject) => {\n      Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })).then(resolve).catch(reject);\n    });\n  }\n  return wrapper;\n}\nconst bypassFilter = (invoke) => {\n  return invoke();\n};\nfunction debounceFilter(ms, options = {}) {\n  let timer;\n  let maxTimer;\n  let lastRejector = noop;\n  const _clearTimeout = (timer2) => {\n    clearTimeout(timer2);\n    lastRejector();\n    lastRejector = noop;\n  };\n  const filter = (invoke) => {\n    const duration = toValue(ms);\n    const maxDuration = toValue(options.maxWait);\n    if (timer)\n      _clearTimeout(timer);\n    if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {\n      if (maxTimer) {\n        _clearTimeout(maxTimer);\n        maxTimer = null;\n      }\n      return Promise.resolve(invoke());\n    }\n    return new Promise((resolve, reject) => {\n      lastRejector = options.rejectOnCancel ? reject : resolve;\n      if (maxDuration && !maxTimer) {\n        maxTimer = setTimeout(() => {\n          if (timer)\n            _clearTimeout(timer);\n          maxTimer = null;\n          resolve(invoke());\n        }, maxDuration);\n      }\n      timer = setTimeout(() => {\n        if (maxTimer)\n          _clearTimeout(maxTimer);\n        maxTimer = null;\n        resolve(invoke());\n      }, duration);\n    });\n  };\n  return filter;\n}\nfunction throttleFilter(...args) {\n  let lastExec = 0;\n  let timer;\n  let isLeading = true;\n  let lastRejector = noop;\n  let lastValue;\n  let ms;\n  let trailing;\n  let leading;\n  let rejectOnCancel;\n  if (!isRef(args[0]) && typeof args[0] === \"object\")\n    ({ delay: ms, trailing = true, leading = true, rejectOnCancel = false } = args[0]);\n  else\n    [ms, trailing = true, leading = true, rejectOnCancel = false] = args;\n  const clear = () => {\n    if (timer) {\n      clearTimeout(timer);\n      timer = void 0;\n      lastRejector();\n      lastRejector = noop;\n    }\n  };\n  const filter = (_invoke) => {\n    const duration = toValue(ms);\n    const elapsed = Date.now() - lastExec;\n    const invoke = () => {\n      return lastValue = _invoke();\n    };\n    clear();\n    if (duration <= 0) {\n      lastExec = Date.now();\n      return invoke();\n    }\n    if (elapsed > duration && (leading || !isLeading)) {\n      lastExec = Date.now();\n      invoke();\n    } else if (trailing) {\n      lastValue = new Promise((resolve, reject) => {\n        lastRejector = rejectOnCancel ? reject : resolve;\n        timer = setTimeout(() => {\n          lastExec = Date.now();\n          isLeading = true;\n          resolve(invoke());\n          clear();\n        }, Math.max(0, duration - elapsed));\n      });\n    }\n    if (!leading && !timer)\n      timer = setTimeout(() => isLeading = true, duration);\n    isLeading = false;\n    return lastValue;\n  };\n  return filter;\n}\nfunction pausableFilter(extendFilter = bypassFilter) {\n  const isActive = ref(true);\n  function pause() {\n    isActive.value = false;\n  }\n  function resume() {\n    isActive.value = true;\n  }\n  const eventFilter = (...args) => {\n    if (isActive.value)\n      extendFilter(...args);\n  };\n  return { isActive: readonly(isActive), pause, resume, eventFilter };\n}\n\nconst directiveHooks = {\n  mounted: isVue3 ? \"mounted\" : \"inserted\",\n  updated: isVue3 ? \"updated\" : \"componentUpdated\",\n  unmounted: isVue3 ? \"unmounted\" : \"unbind\"\n};\n\nfunction cacheStringFunction(fn) {\n  const cache = /* @__PURE__ */ Object.create(null);\n  return (str) => {\n    const hit = cache[str];\n    return hit || (cache[str] = fn(str));\n  };\n}\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, \"-$1\").toLowerCase());\nconst camelizeRE = /-(\\w)/g;\nconst camelize = cacheStringFunction((str) => {\n  return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n});\n\nfunction promiseTimeout(ms, throwOnTimeout = false, reason = \"Timeout\") {\n  return new Promise((resolve, reject) => {\n    if (throwOnTimeout)\n      setTimeout(() => reject(reason), ms);\n    else\n      setTimeout(resolve, ms);\n  });\n}\nfunction identity(arg) {\n  return arg;\n}\nfunction createSingletonPromise(fn) {\n  let _promise;\n  function wrapper() {\n    if (!_promise)\n      _promise = fn();\n    return _promise;\n  }\n  wrapper.reset = async () => {\n    const _prev = _promise;\n    _promise = void 0;\n    if (_prev)\n      await _prev;\n  };\n  return wrapper;\n}\nfunction invoke(fn) {\n  return fn();\n}\nfunction containsProp(obj, ...props) {\n  return props.some((k) => k in obj);\n}\nfunction increaseWithUnit(target, delta) {\n  var _a;\n  if (typeof target === \"number\")\n    return target + delta;\n  const value = ((_a = target.match(/^-?[0-9]+\\.?[0-9]*/)) == null ? void 0 : _a[0]) || \"\";\n  const unit = target.slice(value.length);\n  const result = Number.parseFloat(value) + delta;\n  if (Number.isNaN(result))\n    return target;\n  return result + unit;\n}\nfunction objectPick(obj, keys, omitUndefined = false) {\n  return keys.reduce((n, k) => {\n    if (k in obj) {\n      if (!omitUndefined || obj[k] !== void 0)\n        n[k] = obj[k];\n    }\n    return n;\n  }, {});\n}\nfunction objectOmit(obj, keys, omitUndefined = false) {\n  return Object.fromEntries(Object.entries(obj).filter(([key, value]) => {\n    return (!omitUndefined || value !== void 0) && !keys.includes(key);\n  }));\n}\nfunction objectEntries(obj) {\n  return Object.entries(obj);\n}\nfunction getLifeCycleTarget(target) {\n  return target || getCurrentInstance();\n}\n\nfunction toRef(...args) {\n  if (args.length !== 1)\n    return toRef$1(...args);\n  const r = args[0];\n  return typeof r === \"function\" ? readonly(customRef(() => ({ get: r, set: noop }))) : ref(r);\n}\nconst resolveRef = toRef;\n\nfunction reactivePick(obj, ...keys) {\n  const flatKeys = keys.flat();\n  const predicate = flatKeys[0];\n  return reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => predicate(toValue(v), k))) : Object.fromEntries(flatKeys.map((k) => [k, toRef(obj, k)])));\n}\n\nfunction refAutoReset(defaultValue, afterMs = 1e4) {\n  return customRef((track, trigger) => {\n    let value = toValue(defaultValue);\n    let timer;\n    const resetAfter = () => setTimeout(() => {\n      value = toValue(defaultValue);\n      trigger();\n    }, toValue(afterMs));\n    tryOnScopeDispose(() => {\n      clearTimeout(timer);\n    });\n    return {\n      get() {\n        track();\n        return value;\n      },\n      set(newValue) {\n        value = newValue;\n        trigger();\n        clearTimeout(timer);\n        timer = resetAfter();\n      }\n    };\n  });\n}\n\nfunction useDebounceFn(fn, ms = 200, options = {}) {\n  return createFilterWrapper(\n    debounceFilter(ms, options),\n    fn\n  );\n}\n\nfunction refDebounced(value, ms = 200, options = {}) {\n  const debounced = ref(value.value);\n  const updater = useDebounceFn(() => {\n    debounced.value = value.value;\n  }, ms, options);\n  watch(value, () => updater());\n  return debounced;\n}\n\nfunction refDefault(source, defaultValue) {\n  return computed({\n    get() {\n      var _a;\n      return (_a = source.value) != null ? _a : defaultValue;\n    },\n    set(value) {\n      source.value = value;\n    }\n  });\n}\n\nfunction useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {\n  return createFilterWrapper(\n    throttleFilter(ms, trailing, leading, rejectOnCancel),\n    fn\n  );\n}\n\nfunction refThrottled(value, delay = 200, trailing = true, leading = true) {\n  if (delay <= 0)\n    return value;\n  const throttled = ref(value.value);\n  const updater = useThrottleFn(() => {\n    throttled.value = value.value;\n  }, delay, trailing, leading);\n  watch(value, () => updater());\n  return throttled;\n}\n\nfunction refWithControl(initial, options = {}) {\n  let source = initial;\n  let track;\n  let trigger;\n  const ref = customRef((_track, _trigger) => {\n    track = _track;\n    trigger = _trigger;\n    return {\n      get() {\n        return get();\n      },\n      set(v) {\n        set(v);\n      }\n    };\n  });\n  function get(tracking = true) {\n    if (tracking)\n      track();\n    return source;\n  }\n  function set(value, triggering = true) {\n    var _a, _b;\n    if (value === source)\n      return;\n    const old = source;\n    if (((_a = options.onBeforeChange) == null ? void 0 : _a.call(options, value, old)) === false)\n      return;\n    source = value;\n    (_b = options.onChanged) == null ? void 0 : _b.call(options, value, old);\n    if (triggering)\n      trigger();\n  }\n  const untrackedGet = () => get(false);\n  const silentSet = (v) => set(v, false);\n  const peek = () => get(false);\n  const lay = (v) => set(v, false);\n  return extendRef(\n    ref,\n    {\n      get,\n      set,\n      untrackedGet,\n      silentSet,\n      peek,\n      lay\n    },\n    { enumerable: true }\n  );\n}\nconst controlledRef = refWithControl;\n\nfunction set(...args) {\n  if (args.length === 2) {\n    const [ref, value] = args;\n    ref.value = value;\n  }\n  if (args.length === 3) {\n    if (isVue2) {\n      set$1(...args);\n    } else {\n      const [target, key, value] = args;\n      target[key] = value;\n    }\n  }\n}\n\nfunction watchWithFilter(source, cb, options = {}) {\n  const {\n    eventFilter = bypassFilter,\n    ...watchOptions\n  } = options;\n  return watch(\n    source,\n    createFilterWrapper(\n      eventFilter,\n      cb\n    ),\n    watchOptions\n  );\n}\n\nfunction watchPausable(source, cb, options = {}) {\n  const {\n    eventFilter: filter,\n    ...watchOptions\n  } = options;\n  const { eventFilter, pause, resume, isActive } = pausableFilter(filter);\n  const stop = watchWithFilter(\n    source,\n    cb,\n    {\n      ...watchOptions,\n      eventFilter\n    }\n  );\n  return { stop, pause, resume, isActive };\n}\n\nfunction syncRef(left, right, ...[options]) {\n  const {\n    flush = \"sync\",\n    deep = false,\n    immediate = true,\n    direction = \"both\",\n    transform = {}\n  } = options || {};\n  const watchers = [];\n  const transformLTR = \"ltr\" in transform && transform.ltr || ((v) => v);\n  const transformRTL = \"rtl\" in transform && transform.rtl || ((v) => v);\n  if (direction === \"both\" || direction === \"ltr\") {\n    watchers.push(watchPausable(\n      left,\n      (newValue) => {\n        watchers.forEach((w) => w.pause());\n        right.value = transformLTR(newValue);\n        watchers.forEach((w) => w.resume());\n      },\n      { flush, deep, immediate }\n    ));\n  }\n  if (direction === \"both\" || direction === \"rtl\") {\n    watchers.push(watchPausable(\n      right,\n      (newValue) => {\n        watchers.forEach((w) => w.pause());\n        left.value = transformRTL(newValue);\n        watchers.forEach((w) => w.resume());\n      },\n      { flush, deep, immediate }\n    ));\n  }\n  const stop = () => {\n    watchers.forEach((w) => w.stop());\n  };\n  return stop;\n}\n\nfunction syncRefs(source, targets, options = {}) {\n  const {\n    flush = \"sync\",\n    deep = false,\n    immediate = true\n  } = options;\n  if (!Array.isArray(targets))\n    targets = [targets];\n  return watch(\n    source,\n    (newValue) => targets.forEach((target) => target.value = newValue),\n    { flush, deep, immediate }\n  );\n}\n\nfunction toRefs(objectRef, options = {}) {\n  if (!isRef(objectRef))\n    return toRefs$1(objectRef);\n  const result = Array.isArray(objectRef.value) ? Array.from({ length: objectRef.value.length }) : {};\n  for (const key in objectRef.value) {\n    result[key] = customRef(() => ({\n      get() {\n        return objectRef.value[key];\n      },\n      set(v) {\n        var _a;\n        const replaceRef = (_a = toValue(options.replaceRef)) != null ? _a : true;\n        if (replaceRef) {\n          if (Array.isArray(objectRef.value)) {\n            const copy = [...objectRef.value];\n            copy[key] = v;\n            objectRef.value = copy;\n          } else {\n            const newObject = { ...objectRef.value, [key]: v };\n            Object.setPrototypeOf(newObject, Object.getPrototypeOf(objectRef.value));\n            objectRef.value = newObject;\n          }\n        } else {\n          objectRef.value[key] = v;\n        }\n      }\n    }));\n  }\n  return result;\n}\n\nfunction tryOnBeforeMount(fn, sync = true, target) {\n  const instance = getLifeCycleTarget(target);\n  if (instance)\n    onBeforeMount(fn, target);\n  else if (sync)\n    fn();\n  else\n    nextTick(fn);\n}\n\nfunction tryOnBeforeUnmount(fn, target) {\n  const instance = getLifeCycleTarget(target);\n  if (instance)\n    onBeforeUnmount(fn, target);\n}\n\nfunction tryOnMounted(fn, sync = true, target) {\n  const instance = getLifeCycleTarget();\n  if (instance)\n    onMounted(fn, target);\n  else if (sync)\n    fn();\n  else\n    nextTick(fn);\n}\n\nfunction tryOnUnmounted(fn, target) {\n  const instance = getLifeCycleTarget(target);\n  if (instance)\n    onUnmounted(fn, target);\n}\n\nfunction createUntil(r, isNot = false) {\n  function toMatch(condition, { flush = \"sync\", deep = false, timeout, throwOnTimeout } = {}) {\n    let stop = null;\n    const watcher = new Promise((resolve) => {\n      stop = watch(\n        r,\n        (v) => {\n          if (condition(v) !== isNot) {\n            stop == null ? void 0 : stop();\n            resolve(v);\n          }\n        },\n        {\n          flush,\n          deep,\n          immediate: true\n        }\n      );\n    });\n    const promises = [watcher];\n    if (timeout != null) {\n      promises.push(\n        promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => stop == null ? void 0 : stop())\n      );\n    }\n    return Promise.race(promises);\n  }\n  function toBe(value, options) {\n    if (!isRef(value))\n      return toMatch((v) => v === value, options);\n    const { flush = \"sync\", deep = false, timeout, throwOnTimeout } = options != null ? options : {};\n    let stop = null;\n    const watcher = new Promise((resolve) => {\n      stop = watch(\n        [r, value],\n        ([v1, v2]) => {\n          if (isNot !== (v1 === v2)) {\n            stop == null ? void 0 : stop();\n            resolve(v1);\n          }\n        },\n        {\n          flush,\n          deep,\n          immediate: true\n        }\n      );\n    });\n    const promises = [watcher];\n    if (timeout != null) {\n      promises.push(\n        promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => {\n          stop == null ? void 0 : stop();\n          return toValue(r);\n        })\n      );\n    }\n    return Promise.race(promises);\n  }\n  function toBeTruthy(options) {\n    return toMatch((v) => Boolean(v), options);\n  }\n  function toBeNull(options) {\n    return toBe(null, options);\n  }\n  function toBeUndefined(options) {\n    return toBe(void 0, options);\n  }\n  function toBeNaN(options) {\n    return toMatch(Number.isNaN, options);\n  }\n  function toContains(value, options) {\n    return toMatch((v) => {\n      const array = Array.from(v);\n      return array.includes(value) || array.includes(toValue(value));\n    }, options);\n  }\n  function changed(options) {\n    return changedTimes(1, options);\n  }\n  function changedTimes(n = 1, options) {\n    let count = -1;\n    return toMatch(() => {\n      count += 1;\n      return count >= n;\n    }, options);\n  }\n  if (Array.isArray(toValue(r))) {\n    const instance = {\n      toMatch,\n      toContains,\n      changed,\n      changedTimes,\n      get not() {\n        return createUntil(r, !isNot);\n      }\n    };\n    return instance;\n  } else {\n    const instance = {\n      toMatch,\n      toBe,\n      toBeTruthy,\n      toBeNull,\n      toBeNaN,\n      toBeUndefined,\n      changed,\n      changedTimes,\n      get not() {\n        return createUntil(r, !isNot);\n      }\n    };\n    return instance;\n  }\n}\nfunction until(r) {\n  return createUntil(r);\n}\n\nfunction defaultComparator(value, othVal) {\n  return value === othVal;\n}\nfunction useArrayDifference(...args) {\n  var _a;\n  const list = args[0];\n  const values = args[1];\n  let compareFn = (_a = args[2]) != null ? _a : defaultComparator;\n  if (typeof compareFn === \"string\") {\n    const key = compareFn;\n    compareFn = (value, othVal) => value[key] === othVal[key];\n  }\n  return computed(() => toValue(list).filter((x) => toValue(values).findIndex((y) => compareFn(x, y)) === -1));\n}\n\nfunction useArrayEvery(list, fn) {\n  return computed(() => toValue(list).every((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction useArrayFilter(list, fn) {\n  return computed(() => toValue(list).map((i) => toValue(i)).filter(fn));\n}\n\nfunction useArrayFind(list, fn) {\n  return computed(() => toValue(\n    toValue(list).find((element, index, array) => fn(toValue(element), index, array))\n  ));\n}\n\nfunction useArrayFindIndex(list, fn) {\n  return computed(() => toValue(list).findIndex((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction findLast(arr, cb) {\n  let index = arr.length;\n  while (index-- > 0) {\n    if (cb(arr[index], index, arr))\n      return arr[index];\n  }\n  return void 0;\n}\nfunction useArrayFindLast(list, fn) {\n  return computed(() => toValue(\n    !Array.prototype.findLast ? findLast(toValue(list), (element, index, array) => fn(toValue(element), index, array)) : toValue(list).findLast((element, index, array) => fn(toValue(element), index, array))\n  ));\n}\n\nfunction isArrayIncludesOptions(obj) {\n  return isObject(obj) && containsProp(obj, \"formIndex\", \"comparator\");\n}\nfunction useArrayIncludes(...args) {\n  var _a;\n  const list = args[0];\n  const value = args[1];\n  let comparator = args[2];\n  let formIndex = 0;\n  if (isArrayIncludesOptions(comparator)) {\n    formIndex = (_a = comparator.fromIndex) != null ? _a : 0;\n    comparator = comparator.comparator;\n  }\n  if (typeof comparator === \"string\") {\n    const key = comparator;\n    comparator = (element, value2) => element[key] === toValue(value2);\n  }\n  comparator = comparator != null ? comparator : (element, value2) => element === toValue(value2);\n  return computed(() => toValue(list).slice(formIndex).some((element, index, array) => comparator(\n    toValue(element),\n    toValue(value),\n    index,\n    toValue(array)\n  )));\n}\n\nfunction useArrayJoin(list, separator) {\n  return computed(() => toValue(list).map((i) => toValue(i)).join(toValue(separator)));\n}\n\nfunction useArrayMap(list, fn) {\n  return computed(() => toValue(list).map((i) => toValue(i)).map(fn));\n}\n\nfunction useArrayReduce(list, reducer, ...args) {\n  const reduceCallback = (sum, value, index) => reducer(toValue(sum), toValue(value), index);\n  return computed(() => {\n    const resolved = toValue(list);\n    return args.length ? resolved.reduce(reduceCallback, toValue(args[0])) : resolved.reduce(reduceCallback);\n  });\n}\n\nfunction useArraySome(list, fn) {\n  return computed(() => toValue(list).some((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction uniq(array) {\n  return Array.from(new Set(array));\n}\nfunction uniqueElementsBy(array, fn) {\n  return array.reduce((acc, v) => {\n    if (!acc.some((x) => fn(v, x, array)))\n      acc.push(v);\n    return acc;\n  }, []);\n}\nfunction useArrayUnique(list, compareFn) {\n  return computed(() => {\n    const resolvedList = toValue(list).map((element) => toValue(element));\n    return compareFn ? uniqueElementsBy(resolvedList, compareFn) : uniq(resolvedList);\n  });\n}\n\nfunction useCounter(initialValue = 0, options = {}) {\n  let _initialValue = unref(initialValue);\n  const count = ref(initialValue);\n  const {\n    max = Number.POSITIVE_INFINITY,\n    min = Number.NEGATIVE_INFINITY\n  } = options;\n  const inc = (delta = 1) => count.value = Math.max(Math.min(max, count.value + delta), min);\n  const dec = (delta = 1) => count.value = Math.min(Math.max(min, count.value - delta), max);\n  const get = () => count.value;\n  const set = (val) => count.value = Math.max(min, Math.min(max, val));\n  const reset = (val = _initialValue) => {\n    _initialValue = val;\n    return set(val);\n  };\n  return { count, inc, dec, get, set, reset };\n}\n\nconst REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/;\nconst REGEX_FORMAT = /[YMDHhms]o|\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|SSS/g;\nfunction defaultMeridiem(hours, minutes, isLowercase, hasPeriod) {\n  let m = hours < 12 ? \"AM\" : \"PM\";\n  if (hasPeriod)\n    m = m.split(\"\").reduce((acc, curr) => acc += `${curr}.`, \"\");\n  return isLowercase ? m.toLowerCase() : m;\n}\nfunction formatOrdinal(num) {\n  const suffixes = [\"th\", \"st\", \"nd\", \"rd\"];\n  const v = num % 100;\n  return num + (suffixes[(v - 20) % 10] || suffixes[v] || suffixes[0]);\n}\nfunction formatDate(date, formatStr, options = {}) {\n  var _a;\n  const years = date.getFullYear();\n  const month = date.getMonth();\n  const days = date.getDate();\n  const hours = date.getHours();\n  const minutes = date.getMinutes();\n  const seconds = date.getSeconds();\n  const milliseconds = date.getMilliseconds();\n  const day = date.getDay();\n  const meridiem = (_a = options.customMeridiem) != null ? _a : defaultMeridiem;\n  const matches = {\n    Yo: () => formatOrdinal(years),\n    YY: () => String(years).slice(-2),\n    YYYY: () => years,\n    M: () => month + 1,\n    Mo: () => formatOrdinal(month + 1),\n    MM: () => `${month + 1}`.padStart(2, \"0\"),\n    MMM: () => date.toLocaleDateString(options.locales, { month: \"short\" }),\n    MMMM: () => date.toLocaleDateString(options.locales, { month: \"long\" }),\n    D: () => String(days),\n    Do: () => formatOrdinal(days),\n    DD: () => `${days}`.padStart(2, \"0\"),\n    H: () => String(hours),\n    Ho: () => formatOrdinal(hours),\n    HH: () => `${hours}`.padStart(2, \"0\"),\n    h: () => `${hours % 12 || 12}`.padStart(1, \"0\"),\n    ho: () => formatOrdinal(hours % 12 || 12),\n    hh: () => `${hours % 12 || 12}`.padStart(2, \"0\"),\n    m: () => String(minutes),\n    mo: () => formatOrdinal(minutes),\n    mm: () => `${minutes}`.padStart(2, \"0\"),\n    s: () => String(seconds),\n    so: () => formatOrdinal(seconds),\n    ss: () => `${seconds}`.padStart(2, \"0\"),\n    SSS: () => `${milliseconds}`.padStart(3, \"0\"),\n    d: () => day,\n    dd: () => date.toLocaleDateString(options.locales, { weekday: \"narrow\" }),\n    ddd: () => date.toLocaleDateString(options.locales, { weekday: \"short\" }),\n    dddd: () => date.toLocaleDateString(options.locales, { weekday: \"long\" }),\n    A: () => meridiem(hours, minutes),\n    AA: () => meridiem(hours, minutes, false, true),\n    a: () => meridiem(hours, minutes, true),\n    aa: () => meridiem(hours, minutes, true, true)\n  };\n  return formatStr.replace(REGEX_FORMAT, (match, $1) => {\n    var _a2, _b;\n    return (_b = $1 != null ? $1 : (_a2 = matches[match]) == null ? void 0 : _a2.call(matches)) != null ? _b : match;\n  });\n}\nfunction normalizeDate(date) {\n  if (date === null)\n    return new Date(Number.NaN);\n  if (date === void 0)\n    return /* @__PURE__ */ new Date();\n  if (date instanceof Date)\n    return new Date(date);\n  if (typeof date === \"string\" && !/Z$/i.test(date)) {\n    const d = date.match(REGEX_PARSE);\n    if (d) {\n      const m = d[2] - 1 || 0;\n      const ms = (d[7] || \"0\").substring(0, 3);\n      return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n    }\n  }\n  return new Date(date);\n}\nfunction useDateFormat(date, formatStr = \"HH:mm:ss\", options = {}) {\n  return computed(() => formatDate(normalizeDate(toValue(date)), toValue(formatStr), options));\n}\n\nfunction useIntervalFn(cb, interval = 1e3, options = {}) {\n  const {\n    immediate = true,\n    immediateCallback = false\n  } = options;\n  let timer = null;\n  const isActive = ref(false);\n  function clean() {\n    if (timer) {\n      clearInterval(timer);\n      timer = null;\n    }\n  }\n  function pause() {\n    isActive.value = false;\n    clean();\n  }\n  function resume() {\n    const intervalValue = toValue(interval);\n    if (intervalValue <= 0)\n      return;\n    isActive.value = true;\n    if (immediateCallback)\n      cb();\n    clean();\n    timer = setInterval(cb, intervalValue);\n  }\n  if (immediate && isClient)\n    resume();\n  if (isRef(interval) || typeof interval === \"function\") {\n    const stopWatch = watch(interval, () => {\n      if (isActive.value && isClient)\n        resume();\n    });\n    tryOnScopeDispose(stopWatch);\n  }\n  tryOnScopeDispose(pause);\n  return {\n    isActive,\n    pause,\n    resume\n  };\n}\n\nfunction useInterval(interval = 1e3, options = {}) {\n  const {\n    controls: exposeControls = false,\n    immediate = true,\n    callback\n  } = options;\n  const counter = ref(0);\n  const update = () => counter.value += 1;\n  const reset = () => {\n    counter.value = 0;\n  };\n  const controls = useIntervalFn(\n    callback ? () => {\n      update();\n      callback(counter.value);\n    } : update,\n    interval,\n    { immediate }\n  );\n  if (exposeControls) {\n    return {\n      counter,\n      reset,\n      ...controls\n    };\n  } else {\n    return counter;\n  }\n}\n\nfunction useLastChanged(source, options = {}) {\n  var _a;\n  const ms = ref((_a = options.initialValue) != null ? _a : null);\n  watch(\n    source,\n    () => ms.value = timestamp(),\n    options\n  );\n  return ms;\n}\n\nfunction useTimeoutFn(cb, interval, options = {}) {\n  const {\n    immediate = true\n  } = options;\n  const isPending = ref(false);\n  let timer = null;\n  function clear() {\n    if (timer) {\n      clearTimeout(timer);\n      timer = null;\n    }\n  }\n  function stop() {\n    isPending.value = false;\n    clear();\n  }\n  function start(...args) {\n    clear();\n    isPending.value = true;\n    timer = setTimeout(() => {\n      isPending.value = false;\n      timer = null;\n      cb(...args);\n    }, toValue(interval));\n  }\n  if (immediate) {\n    isPending.value = true;\n    if (isClient)\n      start();\n  }\n  tryOnScopeDispose(stop);\n  return {\n    isPending: readonly(isPending),\n    start,\n    stop\n  };\n}\n\nfunction useTimeout(interval = 1e3, options = {}) {\n  const {\n    controls: exposeControls = false,\n    callback\n  } = options;\n  const controls = useTimeoutFn(\n    callback != null ? callback : noop,\n    interval,\n    options\n  );\n  const ready = computed(() => !controls.isPending.value);\n  if (exposeControls) {\n    return {\n      ready,\n      ...controls\n    };\n  } else {\n    return ready;\n  }\n}\n\nfunction useToNumber(value, options = {}) {\n  const {\n    method = \"parseFloat\",\n    radix,\n    nanToZero\n  } = options;\n  return computed(() => {\n    let resolved = toValue(value);\n    if (typeof resolved === \"string\")\n      resolved = Number[method](resolved, radix);\n    if (nanToZero && Number.isNaN(resolved))\n      resolved = 0;\n    return resolved;\n  });\n}\n\nfunction useToString(value) {\n  return computed(() => `${toValue(value)}`);\n}\n\nfunction useToggle(initialValue = false, options = {}) {\n  const {\n    truthyValue = true,\n    falsyValue = false\n  } = options;\n  const valueIsRef = isRef(initialValue);\n  const _value = ref(initialValue);\n  function toggle(value) {\n    if (arguments.length) {\n      _value.value = value;\n      return _value.value;\n    } else {\n      const truthy = toValue(truthyValue);\n      _value.value = _value.value === truthy ? toValue(falsyValue) : truthy;\n      return _value.value;\n    }\n  }\n  if (valueIsRef)\n    return toggle;\n  else\n    return [_value, toggle];\n}\n\nfunction watchArray(source, cb, options) {\n  let oldList = (options == null ? void 0 : options.immediate) ? [] : [...source instanceof Function ? source() : Array.isArray(source) ? source : toValue(source)];\n  return watch(source, (newList, _, onCleanup) => {\n    const oldListRemains = Array.from({ length: oldList.length });\n    const added = [];\n    for (const obj of newList) {\n      let found = false;\n      for (let i = 0; i < oldList.length; i++) {\n        if (!oldListRemains[i] && obj === oldList[i]) {\n          oldListRemains[i] = true;\n          found = true;\n          break;\n        }\n      }\n      if (!found)\n        added.push(obj);\n    }\n    const removed = oldList.filter((_2, i) => !oldListRemains[i]);\n    cb(newList, oldList, added, removed, onCleanup);\n    oldList = [...newList];\n  }, options);\n}\n\nfunction watchAtMost(source, cb, options) {\n  const {\n    count,\n    ...watchOptions\n  } = options;\n  const current = ref(0);\n  const stop = watchWithFilter(\n    source,\n    (...args) => {\n      current.value += 1;\n      if (current.value >= toValue(count))\n        nextTick(() => stop());\n      cb(...args);\n    },\n    watchOptions\n  );\n  return { count: current, stop };\n}\n\nfunction watchDebounced(source, cb, options = {}) {\n  const {\n    debounce = 0,\n    maxWait = void 0,\n    ...watchOptions\n  } = options;\n  return watchWithFilter(\n    source,\n    cb,\n    {\n      ...watchOptions,\n      eventFilter: debounceFilter(debounce, { maxWait })\n    }\n  );\n}\n\nfunction watchDeep(source, cb, options) {\n  return watch(\n    source,\n    cb,\n    {\n      ...options,\n      deep: true\n    }\n  );\n}\n\nfunction watchIgnorable(source, cb, options = {}) {\n  const {\n    eventFilter = bypassFilter,\n    ...watchOptions\n  } = options;\n  const filteredCb = createFilterWrapper(\n    eventFilter,\n    cb\n  );\n  let ignoreUpdates;\n  let ignorePrevAsyncUpdates;\n  let stop;\n  if (watchOptions.flush === \"sync\") {\n    const ignore = ref(false);\n    ignorePrevAsyncUpdates = () => {\n    };\n    ignoreUpdates = (updater) => {\n      ignore.value = true;\n      updater();\n      ignore.value = false;\n    };\n    stop = watch(\n      source,\n      (...args) => {\n        if (!ignore.value)\n          filteredCb(...args);\n      },\n      watchOptions\n    );\n  } else {\n    const disposables = [];\n    const ignoreCounter = ref(0);\n    const syncCounter = ref(0);\n    ignorePrevAsyncUpdates = () => {\n      ignoreCounter.value = syncCounter.value;\n    };\n    disposables.push(\n      watch(\n        source,\n        () => {\n          syncCounter.value++;\n        },\n        { ...watchOptions, flush: \"sync\" }\n      )\n    );\n    ignoreUpdates = (updater) => {\n      const syncCounterPrev = syncCounter.value;\n      updater();\n      ignoreCounter.value += syncCounter.value - syncCounterPrev;\n    };\n    disposables.push(\n      watch(\n        source,\n        (...args) => {\n          const ignore = ignoreCounter.value > 0 && ignoreCounter.value === syncCounter.value;\n          ignoreCounter.value = 0;\n          syncCounter.value = 0;\n          if (ignore)\n            return;\n          filteredCb(...args);\n        },\n        watchOptions\n      )\n    );\n    stop = () => {\n      disposables.forEach((fn) => fn());\n    };\n  }\n  return { stop, ignoreUpdates, ignorePrevAsyncUpdates };\n}\n\nfunction watchImmediate(source, cb, options) {\n  return watch(\n    source,\n    cb,\n    {\n      ...options,\n      immediate: true\n    }\n  );\n}\n\nfunction watchOnce(source, cb, options) {\n  const stop = watch(source, (...args) => {\n    nextTick(() => stop());\n    return cb(...args);\n  }, options);\n  return stop;\n}\n\nfunction watchThrottled(source, cb, options = {}) {\n  const {\n    throttle = 0,\n    trailing = true,\n    leading = true,\n    ...watchOptions\n  } = options;\n  return watchWithFilter(\n    source,\n    cb,\n    {\n      ...watchOptions,\n      eventFilter: throttleFilter(throttle, trailing, leading)\n    }\n  );\n}\n\nfunction watchTriggerable(source, cb, options = {}) {\n  let cleanupFn;\n  function onEffect() {\n    if (!cleanupFn)\n      return;\n    const fn = cleanupFn;\n    cleanupFn = void 0;\n    fn();\n  }\n  function onCleanup(callback) {\n    cleanupFn = callback;\n  }\n  const _cb = (value, oldValue) => {\n    onEffect();\n    return cb(value, oldValue, onCleanup);\n  };\n  const res = watchIgnorable(source, _cb, options);\n  const { ignoreUpdates } = res;\n  const trigger = () => {\n    let res2;\n    ignoreUpdates(() => {\n      res2 = _cb(getWatchSources(source), getOldValue(source));\n    });\n    return res2;\n  };\n  return {\n    ...res,\n    trigger\n  };\n}\nfunction getWatchSources(sources) {\n  if (isReactive(sources))\n    return sources;\n  if (Array.isArray(sources))\n    return sources.map((item) => toValue(item));\n  return toValue(sources);\n}\nfunction getOldValue(source) {\n  return Array.isArray(source) ? source.map(() => void 0) : void 0;\n}\n\nfunction whenever(source, cb, options) {\n  return watch(\n    source,\n    (v, ov, onInvalidate) => {\n      if (v)\n        cb(v, ov, onInvalidate);\n    },\n    options\n  );\n}\n\nexport { assert, refAutoReset as autoResetRef, bypassFilter, camelize, clamp, computedEager, computedWithControl, containsProp, computedWithControl as controlledComputed, controlledRef, createEventHook, createFilterWrapper, createGlobalState, createInjectionState, reactify as createReactiveFn, createSharedComposable, createSingletonPromise, debounceFilter, refDebounced as debouncedRef, watchDebounced as debouncedWatch, directiveHooks, computedEager as eagerComputed, extendRef, formatDate, get, getLifeCycleTarget, hasOwn, hyphenate, identity, watchIgnorable as ignorableWatch, increaseWithUnit, injectLocal, invoke, isClient, isDef, isDefined, isIOS, isObject, isWorker, makeDestructurable, noop, normalizeDate, notNullish, now, objectEntries, objectOmit, objectPick, pausableFilter, watchPausable as pausableWatch, promiseTimeout, provideLocal, rand, reactify, reactifyObject, reactiveComputed, reactiveOmit, reactivePick, refAutoReset, refDebounced, refDefault, refThrottled, refWithControl, resolveRef, resolveUnref, set, syncRef, syncRefs, throttleFilter, refThrottled as throttledRef, watchThrottled as throttledWatch, timestamp, toReactive, toRef, toRefs, toValue, tryOnBeforeMount, tryOnBeforeUnmount, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useArrayDifference, useArrayEvery, useArrayFilter, useArrayFind, useArrayFindIndex, useArrayFindLast, useArrayIncludes, useArrayJoin, useArrayMap, useArrayReduce, useArraySome, useArrayUnique, useCounter, useDateFormat, refDebounced as useDebounce, useDebounceFn, useInterval, useIntervalFn, useLastChanged, refThrottled as useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useToNumber, useToString, useToggle, watchArray, watchAtMost, watchDebounced, watchDeep, watchIgnorable, watchImmediate, watchOnce, watchPausable, watchThrottled, watchTriggerable, watchWithFilter, whenever };\n","'use strict';\n\nmodule.exports = function (data, opts) {\n    if (!opts) opts = {};\n    if (typeof opts === 'function') opts = { cmp: opts };\n    var cycles = (typeof opts.cycles === 'boolean') ? opts.cycles : false;\n\n    var cmp = opts.cmp && (function (f) {\n        return function (node) {\n            return function (a, b) {\n                var aobj = { key: a, value: node[a] };\n                var bobj = { key: b, value: node[b] };\n                return f(aobj, bobj);\n            };\n        };\n    })(opts.cmp);\n\n    var seen = [];\n    return (function stringify (node) {\n        if (node && node.toJSON && typeof node.toJSON === 'function') {\n            node = node.toJSON();\n        }\n\n        if (node === undefined) return;\n        if (typeof node == 'number') return isFinite(node) ? '' + node : 'null';\n        if (typeof node !== 'object') return JSON.stringify(node);\n\n        var i, out;\n        if (Array.isArray(node)) {\n            out = '[';\n            for (i = 0; i < node.length; i++) {\n                if (i) out += ',';\n                out += stringify(node[i]) || 'null';\n            }\n            return out + ']';\n        }\n\n        if (node === null) return 'null';\n\n        if (seen.indexOf(node) !== -1) {\n            if (cycles) return JSON.stringify('__cycle__');\n            throw new TypeError('Converting circular structure to JSON');\n        }\n\n        var seenIndex = seen.push(node) - 1;\n        var keys = Object.keys(node).sort(cmp && cmp(node));\n        out = '';\n        for (i = 0; i < keys.length; i++) {\n            var key = keys[i];\n            var value = stringify(node[key]);\n\n            if (!value) continue;\n            if (out) out += ',';\n            out += JSON.stringify(key) + ':' + value;\n        }\n        seen.splice(seenIndex, 1);\n        return '{' + out + '}';\n    })(data);\n};\n","import type { MaybeRef } from '@vueuse/core'\nimport type { Ref } from 'vue-demi'\nimport { _ } from '@feathersjs/commons'\nimport { unref } from 'vue-demi'\nimport type { Params, Query } from '../types.js'\nimport type { UseFindParams } from './types.js'\n\nexport function makeParamsWithoutPage(params: MaybeRef<UseFindParams>) {\n  params = unref(params)\n  const query = _.omit(params.query, '$limit', '$skip')\n  const newParams = _.omit(params, 'query', 'store')\n  return { ...newParams, query }\n}\n\n// Updates the _params with everything from _newParams except `$limit` and `$skip`\nexport function updateParamsExcludePage(_params: Ref<UseFindParams>, _newParams: MaybeRef<UseFindParams>) {\n  _params.value.query = {\n    ...unref(_newParams).query,\n    ..._.pick(unref(_params).query, '$limit', '$skip'),\n  }\n}\n\nexport function getIdsFromQueryInfo(pagination: any, queryInfo: any): any[] {\n  const { queryId, pageId } = queryInfo\n  const queryLevel = pagination[queryId]\n  const pageLevel = queryLevel && queryLevel[pageId]\n  const ids = pageLevel && pageLevel.ids\n\n  return ids || []\n}\n\n/**\n * A wrapper for findInStore that can return server-paginated data\n */\nexport function itemsFromPagination(store: any, service: any, params: Params<Query>) {\n  const qid = params.qid || 'default'\n  const pagination = store.pagination[qid] || {}\n  const queryInfo = store.getQueryInfo(params)\n  const ids = getIdsFromQueryInfo(pagination, queryInfo)\n  const items = ids\n    .map((id) => {\n      const fromStore = service.getFromStore(id).value\n      return fromStore\n    })\n    .filter(i => i) // filter out undefined values\n  return items\n}\n\nexport function getAllIdsFromQueryInfo(pagination: any, queryInfo: any): any[] {\n  const { queryId } = queryInfo\n  const queryLevel = pagination[queryId] || {}\n  \n  const ids = [...new Set(Object.keys(queryLevel).filter(key => !['total', 'queryParams'].includes(key)).reduce((acc, qkey) => {\n    acc = acc.concat(queryLevel?.[qkey]?.ids || [])\n    return acc\n  }, []))]\n  \n  return ids || []\n}\n\n/**\n * A wrapper for findInStore that can return all server-paginated data\n */\nexport function allItemsFromPagination(store: any, service: any, params: Params<Query>) {\n  const qid = params.qid || 'default'\n  const pagination = store.pagination[qid] || {}\n  const queryInfo = store.getQueryInfo(params)\n  const ids = getAllIdsFromQueryInfo(pagination, queryInfo)\n  const items = ids\n    .map((id) => {\n      const fromStore = service.getFromStore(id).value\n      return fromStore\n    })\n    .filter(i => i) // filter out undefined values\n  return items\n}\n","import type { Ref } from 'vue-demi'\nimport { computed } from 'vue-demi'\nimport { timeout } from '../utils/index.js'\n\ninterface Options {\n  limit: Ref<number>\n  skip: Ref<number>\n  total: Ref<number>\n  request?: any\n}\n\nexport function usePageData(options: Options) {\n  const { limit, skip, total, request } = options\n  /**\n   * The number of pages available based on the results returned in the latestQuery prop.\n   */\n  const pageCount = computed(() => {\n    if (total.value)\n      return Math.ceil(total.value / limit.value)\n    else return 1\n  })\n\n  // Uses Math.floor so we can't land on a non-integer page like 1.4\n  const currentPage = computed({\n    set(pageNumber: number) {\n      if (pageNumber < 1)\n        pageNumber = 1\n      else if (pageNumber > pageCount.value)\n        pageNumber = pageCount.value\n      const newSkip = limit.value * Math.floor(pageNumber - 1)\n      skip.value = newSkip\n    },\n    get() {\n      const skipVal = skip.value || 0\n      return pageCount.value === 0 ? 0 : Math.floor(skipVal / limit.value + 1)\n    },\n  })\n\n  const canPrev = computed(() => {\n    return currentPage.value - 1 > 0\n  })\n  const canNext = computed(() => {\n    return currentPage.value < pageCount.value\n  })\n\n  const wait = async () => {\n    if (request?.value)\n      await request.value\n  }\n  const toStart = async () => {\n    currentPage.value = 1\n    await timeout(0)\n    return wait()\n  }\n  const toEnd = async () => {\n    currentPage.value = pageCount.value\n    await timeout(0)\n    return wait()\n  }\n  const toPage = async (page: number) => {\n    currentPage.value = page\n    await timeout(0)\n    return wait()\n  }\n  const next = async () => {\n    currentPage.value++\n    await timeout(0)\n    return wait()\n  }\n  const prev = async () => {\n    currentPage.value--\n    await timeout(0)\n    return wait()\n  }\n\n  return { pageCount, currentPage, canPrev, canNext, toStart, toEnd, toPage, next, prev }\n}\n","import type { ComputedRef, Ref, UnwrapNestedRefs, WritableComputedRef } from 'vue-demi'\nimport { computed, reactive, ref, unref, watch } from 'vue-demi'\nimport { _ } from '@feathersjs/commons'\nimport { useDebounceFn } from '@vueuse/core'\nimport stringify from 'fast-json-stable-stringify'\nimport { deepUnref, getExtendedQueryInfo } from '../utils/index.js'\nimport type { AnyData, ExtendedQueryInfo, Paginated, Params, Query } from '../types.js'\nimport { itemsFromPagination, allItemsFromPagination } from './utils.js'\nimport { usePageData } from './utils-pagination.js'\nimport type { UseFindGetDeps, UseFindOptions, UseFindParams } from './types.js'\n\nexport type UseFindReturn<M = AnyData> = UnwrapNestedRefs<{\n  paramsWithPagination: ComputedRef<Params<Query>>\n  isSsr: ComputedRef<boolean>\n  qid: WritableComputedRef<string>\n\n  data: ComputedRef<M[]>\n  allLocalData: ComputedRef<M[]>\n  total: ComputedRef<number>\n  limit: Ref<number>\n  skip: number\n\n  currentQuery: ComputedRef<ExtendedQueryInfo | null>\n  cachedQuery: ComputedRef<ExtendedQueryInfo | null>\n  latestQuery: ComputedRef<ExtendedQueryInfo | null>\n  previousQuery: ComputedRef<ExtendedQueryInfo | null>\n\n  find: () => Promise<void>\n  request: Ref<Promise<Paginated<M>> | null>\n  requestCount: Ref<number>\n  queryWhen: (queryWhenFn: () => boolean) => void\n\n  isPending: ComputedRef<boolean>\n  haveBeenRequested: ComputedRef<boolean>\n  haveLoaded: ComputedRef<boolean>\n  error: ComputedRef<any>\n  clearError: () => void\n\n  pageCount: Ref<number>\n  currentPage: Ref<number>\n  canPrev: ComputedRef<boolean>\n  canNext: ComputedRef<boolean>\n  next: () => Promise<void>\n  prev: () => Promise<void>\n  toStart: () => Promise<void>\n  toEnd: () => Promise<void>\n  toPage: (page: number) => Promise<void>\n}>\n\nexport function useFind<M = AnyData>(params: ComputedRef<UseFindParams | null>, options: UseFindOptions = {}, deps: UseFindGetDeps): UseFindReturn<M> {\n  const { pagination, debounce = 100, immediate = true, watch: _watch = true, paginateOn = 'client' } = options\n  const { service } = deps\n  const { store } = service\n\n  /** PARAMS */\n  const qid = computed(() => params.value?.qid || 'default')\n  const limit = pagination?.limit || ref(params.value?.query?.$limit || store.defaultLimit)\n  const skip = pagination?.skip || ref(params.value?.query?.$skip || 0)\n\n  const paramsWithPagination = computed<Params<Query>>(() => {\n    const query = deepUnref(params.value?.query || {})\n    return {\n      ...params.value,\n      query: {\n        ...query,\n        $limit: limit.value,\n        $skip: skip.value,\n      },\n    }\n  })\n  const paramsWithoutPagination = computed(() => {\n    const queryShallowCopy = deepUnref(params.value?.query || {})\n    const query = _.omit(queryShallowCopy, '$limit', '$skip')\n    const newParams = { ...params.value, query }\n    return newParams\n  })\n\n  /** REQUEST STATE */\n  const isPending = ref(false)\n  const haveBeenRequested = ref(false)\n  const haveLoaded = ref(false)\n  const error = ref<any>(null)\n  const clearError = () => (error.value = null)\n\n  /** Cached Params */\n  const cachedParams = ref(deepUnref(params.value || {}))\n  function updateCachedParams() {\n    if (stringify(cachedParams.value) !== stringify(paramsWithPagination.value))\n      cachedParams.value = paramsWithPagination.value\n  }\n\n  /** QUERY WHEN */\n  let queryWhenFn = () => true\n  const queryWhen = (_queryWhenFn: () => boolean) => {\n    queryWhenFn = _queryWhenFn\n  }\n  // returns cached query data from the store BEFORE the request is sent.\n  const cachedQuery = computed(() => {\n    const qidState: any = store.pagination[qid.value]\n    if (!qidState)\n      return null\n\n    const queryInfo = store.getQueryInfo(cachedParams.value)\n    const extendedInfo = getExtendedQueryInfo({ queryInfo, service, store, qid })\n    return extendedInfo\n  })\n\n  const currentQuery = computed(() => {\n    const qidState: any = store.pagination[qid.value]\n    if (!qidState)\n      return null\n\n    const queryInfo = store.getQueryInfo(paramsWithPagination.value)\n    const extendedInfo = getExtendedQueryInfo({ queryInfo, service, store, qid })\n    return extendedInfo\n  })\n\n  const allLocalData = computed<M[]>(() => {\n    const whichQuery = isPending.value ? cachedQuery.value : currentQuery.value\n    if (whichQuery == null && paginateOn !== 'client')\n      return []\n    \n    if (paginateOn === 'server') {\n      const values = allItemsFromPagination(store, service, cachedParams.value)\n      return values\n    } else {\n      const result = service.findInStore(deepUnref(paramsWithoutPagination.value)).data\n      return result.filter((i: any) => i)\n    }\n  })\n  const itemsBeforeCurrent = computed(() => {\n    const whichQuery = isPending.value ? cachedQuery.value : currentQuery.value\n    if (whichQuery == null)\n      return []\n\n    const allItems = allLocalData.value\n    const firstOfCurrentPage = whichQuery.items.find((i: any) => i)\n    const indexInItems = allItems.findIndex((i: any) => i[store.idField] === firstOfCurrentPage[store.idField])\n    // if indexInItems is higher than skip, use the skip value instead\n    const adjustedIndex = Math.min(indexInItems, skip.value)\n    const beforeCurrent = allItems.slice(0, adjustedIndex)\n    return beforeCurrent\n  })\n\n  /** STORE ITEMS */\n  const localParams = computed(() => {\n    const beforeCurrent = itemsBeforeCurrent.value\n    const adjustedSkip = skip.value + (beforeCurrent.length - skip.value)\n    const params = {\n      ...paramsWithPagination.value,\n      query: {\n        ...paramsWithPagination.value.query,\n        $limit: limit.value,\n        $skip: adjustedSkip,\n      },\n    }\n    return params\n  })\n\n  const data = computed<M[]>(() => {\n    if (paginateOn === 'server') {\n      const values = itemsFromPagination(store, service, cachedParams.value)\n      return values\n    }\n    else if (paginateOn === 'hybrid') {\n      const result = service.findInStore(deepUnref(localParams)).data\n      return result.filter((i: any) => i)\n    }\n    else {\n      const result = service.findInStore(deepUnref(paramsWithPagination)).data\n      return result.filter((i: any) => i)\n    }\n  })\n\n  /** QUERIES */\n  const queries: Ref<ExtendedQueryInfo[]> = ref([]) // query info after the response returns\n  const latestQuery = computed(() => {\n    return queries.value[queries.value.length - 1] || null\n  })\n  const previousQuery = computed(() => {\n    return queries.value[queries.value.length - 2] || null\n  })\n\n  /** SERVER FETCHING */\n  const requestCount = ref(0)\n  const request = ref<Promise<Paginated<M>> | null>(null)\n\n  // pulled into its own function so it can be called from `makeRequest` or `find`\n  function setupPendingState() {\n    // prevent setting pending state for cached ssr requests\n    if (currentQuery.value?.ssr)\n      return\n\n    if (!haveBeenRequested.value)\n      haveBeenRequested.value = true // never resets\n    clearError()\n    if (!isPending.value)\n      isPending.value = true\n    if (haveLoaded.value)\n      haveLoaded.value = false\n  }\n\n  async function find(__params?: Params<Query>) {\n    // When `paginateOn: 'server'` is enabled, the computed params will always be used, __params ignored.\n    const ___params = unref(\n      __params != null\n        ? __params\n        : paginateOn === 'client'\n          ? paramsWithoutPagination.value\n          : paramsWithPagination.value,\n    )\n\n    // if queryWhen is falsey, return early with dummy data\n    if (!queryWhenFn())\n      return Promise.resolve({ data: [] as AnyData[] } as Paginated<AnyData>)\n\n    setupPendingState()\n    requestCount.value++\n\n    try {\n      const response = await service.find(___params as any)\n\n      // Keep the two most-recent queries\n      if (response.total) {\n        const queryInfo = store.getQueryInfo(paramsWithPagination.value)\n        const extendedQueryInfo = getExtendedQueryInfo({ queryInfo, service, store, qid })\n        if (extendedQueryInfo)\n          queries.value.push(extendedQueryInfo as unknown as ExtendedQueryInfo)\n        if (queries.value.length > 2)\n          queries.value.shift()\n      }\n      haveLoaded.value = true\n\n      return response\n    }\n    catch (err: any) {\n      error.value = err\n      throw err\n    }\n    finally {\n      isPending.value = false\n    }\n  }\n  const findDebounced = useDebounceFn<any>(find, debounce)\n\n  /** Query Gatekeeping */\n  const makeRequest = async (p?: Params<Query>) => {\n    // If params are null, do nothing\n    if (params.value === null)\n      return\n\n    // If we already have data for the currentQuery, update the cachedParams immediately\n    if (currentQuery.value)\n      updateCachedParams()\n\n    // if the query passes queryWhen, setup the state before the debounce timer starts.\n    if (queryWhenFn())\n      setupPendingState()\n\n    request.value = findDebounced(p)\n    await request.value\n\n    // cache the params to update the computed `data``\n    updateCachedParams()\n  }\n\n  /** Pagination Data */\n  const total = computed(() => {\n    if (['server', 'hybrid'].includes(paginateOn)) {\n      const whichQuery = currentQuery.value || cachedQuery.value\n      return whichQuery?.total || 0\n    }\n    else {\n      const count = service.countInStore(paramsWithoutPagination.value)\n      return count.value\n    }\n  })\n  const pageData = usePageData({ limit, skip, total, request })\n  const { pageCount, currentPage, canPrev, canNext, toStart, toEnd, toPage, next, prev } = pageData\n\n  const isSsr = computed(() => {\n    // hack: read total early during SSR to prevent hydration mismatch\n    setTimeout(() => {\n      ref(total.value)\n    }, 0)\n    return store.isSsr\n  })\n\n  // SSR servers directly make requests\n  if (isSsr.value) {\n    if (immediate)\n      makeRequest()\n  }\n  // Browsers make requests from the watcher\n  else {\n    if (['server', 'hybrid'].includes(paginateOn) && _watch) {\n      watch(\n        paramsWithPagination,\n        () => {\n          makeRequest()\n        },\n        { immediate: false, flush: 'sync' },\n      )\n\n      if (immediate)\n        makeRequest()\n    }\n  }\n\n  if (paginateOn === 'server' && service.on) {\n    // watch realtime events and re-query\n    // TODO: only re-query when relevant\n    service.on('created', () => {\n      makeRequest()\n    })\n    service.on('patched', () => {\n      makeRequest()\n    })\n\n    // if the current list had an item removed, re-query.\n    service.on('removed', () => {\n      // const id = item[service.store.idField]\n      // const currentIds = data.value.map((i: any) => i[service.store.idField])\n      // if (currentIds.includes(id))\n      makeRequest()\n    })\n  }\n\n  const toReturn = reactive({\n    paramsWithPagination,\n    isSsr, // ComputedRef<boolean>\n    qid, // WritableComputedRef<string>\n\n    // Data\n    data, // ComputedRef<M[]>\n    allLocalData, // ComputedRef<M[]>\n    total, // ComputedRef<number>\n    limit, // Ref<number>\n    skip, // Ref<number>\n\n    // Queries\n    currentQuery, // ComputedRef<CurrentQuery<M> | null>\n    cachedQuery, // ComputedRef<CurrentQuery<M> | null>\n    latestQuery, // ComputedRef<QueryInfo | null>\n    previousQuery, // ComputedRef<QueryInfo | null>\n\n    // Requests & Watching\n    find: makeRequest, // FindFn<M>\n    request, // Ref<Promise<Paginated<M>>>\n    requestCount, // Ref<number>\n    queryWhen, // (queryWhenFn: () => boolean) => void\n\n    // Request State\n    isPending: computed(() => isPending.value), // ComputedRef<boolean>\n    haveBeenRequested: computed(() => haveBeenRequested.value), // ComputedRef<boolean>\n    haveLoaded: computed(() => haveLoaded.value), // ComputedRef<boolean>\n    error: computed(() => error.value), // ComputedRef<any>\n    clearError, // () => void\n\n    // Pagination Utils\n    pageCount, // Ref<number>\n    currentPage, // Ref<number>\n    canPrev, // ComputedRef<boolean>\n    canNext, // ComputedRef<boolean>\n    next, // () => Promise<void>\n    prev, // () => Promise<void>\n    toStart, // () => Promise<void>\n    toEnd, // () => Promise<void>\n    toPage, // (page: number) => Promise<void>\n  })\n\n  return toReturn\n}\n","import type { Id } from '@feathersjs/feathers'\nimport type { MaybeRef } from '@vueuse/core'\nimport { computed, isRef, reactive, ref, unref, watch } from 'vue-demi'\nimport type { AnyData, MaybeRefOrComputed } from '../types.js'\nimport type { UseFindGetDeps, UseGetParams } from './types.js'\n\nexport function useGet<M = AnyData>(_id: MaybeRefOrComputed<Id | null>, _params: MaybeRef<UseGetParams> = ref({}), deps: UseFindGetDeps) {\n  const { service } = deps\n\n  // normalize args into refs\n  const id = isRef(_id) ? _id : ref(_id)\n  const params = isRef(_params) ? _params : ref(_params)\n\n  /** ID & PARAMS */\n  const { immediate = true, watch: _watch = true } = params.value\n  const isSsr = computed<boolean>(() => service.store.isSsr)\n\n  /** REQUEST STATE */\n  const isPending = ref(false)\n  const hasBeenRequested = ref(false)\n  const error = ref<any>(null)\n  const clearError = () => (error.value = null)\n\n  /** STORE ITEMS */\n  const ids = ref<Id[]>([])\n  const mostRecentId = computed(() => {\n    return ids.value.length && ids.value[ids.value.length - 1]\n  })\n  const data = computed<M | null>(() => {\n    if (isPending.value && mostRecentId.value != null) {\n      const result = service.store.getFromStore(mostRecentId.value, params).value\n      return result\n    }\n    const result = service.store.getFromStore(id.value, params).value\n    return result\n  })\n  const getFromStore = service.store.getFromStore\n\n  const hasLoaded = computed(() => !!data.value)\n\n  /** QUERY WHEN */\n  let queryWhenFn = () => true\n  const queryWhen = (_queryWhenFn: () => boolean) => {\n    queryWhenFn = _queryWhenFn\n  }\n\n  /** SERVER FETCHING */\n  const requestCount = ref(0)\n  const request = ref<Promise<AnyData> | null>(null)\n  async function get() {\n    const _id = unref(id)\n    const _params = unref(params)\n\n    if (!queryWhenFn())\n      return\n\n    if (_id == null)\n      return null\n\n    requestCount.value++\n    hasBeenRequested.value = true // never resets\n    isPending.value = true\n    error.value = null\n\n    try {\n      const response = await service.get(_id, _params)\n\n      // Keep a list of retrieved ids\n      if (response && _id)\n        ids.value.push(_id)\n\n      return response\n    }\n    catch (err: any) {\n      error.value = err\n    }\n    finally {\n      isPending.value = false\n    }\n  }\n\n  async function makeRequest() {\n    request.value = get()\n    const val = await request.value\n    return val\n  }\n\n  // SSR servers directly make the request\n  if (isSsr.value) {\n    if (immediate)\n      makeRequest()\n  }\n  // Browsers make requests from the watcher\n  else {\n    if (_watch) {\n      watch(\n        id,\n        async () => {\n          await makeRequest()\n        },\n        { immediate, flush: 'pre' },\n      )\n    }\n  }\n\n  return reactive({\n    params, // Ref<GetClassParams>\n    isSsr, // ComputedRef<boolean>\n\n    // Data\n    data, // ComputedRef<M | null>\n    ids, // Ref<Id[]>\n    getFromStore, // (id: Id | null, params: Params<Query>) => M | undefined\n\n    // Requests & Watching\n    get: makeRequest, // GetFn<M>\n    request, // Ref<Promise<M | undefined>>\n    requestCount, // Ref<number>\n    queryWhen, // (queryWhenFn: () => boolean) => void\n\n    // Request State\n    isPending: computed(() => isPending.value), // ComputedRef<boolean>\n    hasBeenRequested: computed(() => hasBeenRequested.value), // ComputedRef<boolean>\n    hasLoaded: computed(() => hasLoaded.value), // ComputedRef<boolean>\n    error: computed(() => error.value), // ComputedRef<any>\n    clearError, // () => void\n  })\n}\n","import type { Params as FeathersParams, FeathersService, Id, Paginated, PaginationOptions } from '@feathersjs/feathers'\nimport type { MaybeRef } from '@vueuse/core'\nimport type { ComputedRef } from 'vue-demi'\nimport { computed, isRef, reactive, ref, unref } from 'vue-demi'\nimport type { UseFindOptions, UseFindParams, UseGetParams } from './use-find-get/index.js'\nimport type { AnyData, Params, Query } from './types.js'\nimport { SERVICE, existingServiceMethods, getParams } from './utils/index.js'\nimport { useFind, useGet } from './use-find-get/index.js'\nimport { convertData } from './utils/convert-data'\nimport type { ServiceInstance } from './modeling/index.js'\n\ninterface PiniaServiceOptions {\n  servicePath: string\n  store: any\n  methods?: string[]\n  events?: string[]\n}\n\n// FIXME: Those are very hacky, there should be a simpler way of recovering service types\ntype SvcResult<S extends FeathersService> = S extends { get: (...args: any[]) => Promise<infer T> } ? T : never\ntype SvcParams<S extends FeathersService> = (S extends { find: (params: infer T) => any } ? T : never) & Params<Query>\ntype SvcData<S extends FeathersService> = S extends { create: (data: (infer T)[]) => any } ? T : never\ntype SvcPatchData<S extends FeathersService> = S extends { patch: (id: any, data: infer T) => any } ? T : never\n\ntype SvcModel<S extends FeathersService> = ServiceInstance<SvcResult<S>>\n\nexport class PiniaService<Svc extends FeathersService> {\n  store\n  servicePath = ''\n  \n  constructor(public service: Svc, public options: PiniaServiceOptions) {\n    this.store = options.store\n    this.servicePath = options.servicePath\n    this.options = options\n    this.options.methods = ['create', 'patch', 'remove']\n    this.options.events = ['created', 'patched', 'removed']\n\n    // copy custom methods from service onto this instance, exclude existing methods\n    const keysToIgnore = Object.getOwnPropertyNames(Object.getPrototypeOf(this)).concat(existingServiceMethods)\n    for (const key in service) {\n      if (typeof service[key] === 'function' && !keysToIgnore.includes(key)) {\n        const instance = this as any\n        instance[key] = (service[key] as any).bind(service)\n        this.options.methods.push(key)\n      }\n    }\n\n    Object.defineProperty(this, SERVICE, {\n      value: this.options\n    })\n  }\n\n  /**\n   * Prepare new \"instances\" outside of store\n   *\n   * Functionally upgrades plain data to a service model \"instance\".\n   * - flags each record with `__isSetup` to avoid duplicate work.\n   */\n  new(data: Partial<SvcResult<Svc>> = {}): SvcModel<Svc> {\n    const asInstance = this.store.new(data)\n    return reactive(asInstance)\n  }\n\n  /* service methods clone params */\n\n  /**\n   * finds records from the API server by query. Each record is reactive. Lists are non reactive.\n   * For reactive lists, use `findInStore`.\n   */\n  async find(params?: MaybeRef<SvcParams<Svc> & { paginate?: PaginationOptions }>): Promise<Paginated<SvcModel<Svc>>>\n  async find(params?: MaybeRef<SvcParams<Svc> & { paginate: false }>): Promise<SvcModel<Svc>[]>\n  async find(params?: MaybeRef<SvcParams<Svc>>): Promise<Paginated<SvcModel<Svc>> | SvcModel<Svc>[]>\n  async find(params?: MaybeRef<SvcParams<Svc>>): Promise<Paginated<SvcModel<Svc>> | SvcModel<Svc>[]>\n  async find(_params?: MaybeRef<Params<Query>>) {\n    const params = getParams(_params)\n    const result = await this.service.find(params as FeathersParams)\n    return result\n  }\n\n  /**\n   * finds a single record from the API server by query. The record is reactive.\n   */\n  async findOne(params?: MaybeRef<SvcParams<Svc>>): Promise<SvcModel<Svc>>\n  async findOne(_params?: MaybeRef<Params<Query>>) {\n    const params = getParams(_params)\n    params.query = params.query || {}\n    params.query.$limit = 1\n    const result = await this.service.find(params as FeathersParams)\n    const item = (result.data || result)[0] || null\n    return item\n  }\n\n  /**\n   * count records on the API server by query. Returns the number of matching records.\n   */\n  async count(params?: MaybeRef<SvcParams<Svc>>): Promise<Paginated<never>>\n  async count(_params?: MaybeRef<Params<Query>>) {\n    const params = getParams(_params)\n    params.query = params.query || {}\n    params.query.$limit = 0\n    const result = await this.service.find(params as FeathersParams)\n    return result\n  }\n\n  /**\n   * retrieve a record from the API server by id. The record is reactive.\n   */\n  async get(id: Id, params?: MaybeRef<SvcParams<Svc>>): Promise<SvcModel<Svc>>\n  async get(id: Id, _params?: MaybeRef<Params<Query>>) {\n    const params = getParams(_params)\n    const result = await this.service.get(id, params)\n    return result\n  }\n\n  /**\n   * create a record on the API server.\n   */\n  async create(data: SvcData<Svc>, params?: MaybeRef<SvcParams<Svc>>): Promise<SvcModel<Svc>>\n  async create(data: AnyData, _params?: MaybeRef<Params<Query>>) {\n    const params = getParams(_params)\n    const result = await this.service.create(data, params)\n    return result\n  }\n\n  /**\n   * patch a record on the API server.\n   */\n  async patch(id: Id, data: SvcPatchData<Svc>, params?: MaybeRef<SvcParams<Svc>>): Promise<SvcModel<Svc>>\n  async patch(id: null, data: SvcPatchData<Svc>, params: MaybeRef<SvcParams<Svc>>): Promise<SvcModel<Svc>[]>\n  async patch(id: Id | null, data: AnyData, _params?: MaybeRef<Params<Query>>) {\n    const params = getParams(_params)\n    const result = await this.service.patch(id, data, params)\n    return result\n  }\n\n  /**\n   * remove a record from the API server.\n   */\n  async remove(id: MaybeRef<Id>, params?: MaybeRef<SvcParams<Svc>>): Promise<SvcModel<Svc>>\n  async remove(id: MaybeRef<null>, params: MaybeRef<SvcParams<Svc>>): Promise<SvcModel<Svc>[]>\n  async remove(id: MaybeRef<Id | null>, _params?: MaybeRef<Params<Query>>) {\n    const params = getParams(_params)\n    const result = await this.service.remove(unref(id), params)\n    return result\n  }\n\n  /* store methods accept refs and don't copy params */\n\n  /**\n   * find records in the local store. The returned list and records are reactive.\n   */\n  findInStore(params?: MaybeRef<SvcParams<Svc> & { paginate?: PaginationOptions }>): Paginated<SvcModel<Svc>>\n  findInStore(params?: MaybeRef<SvcParams<Svc> & { paginate: false }>): SvcModel<Svc>[]\n  findInStore(params?: MaybeRef<SvcParams<Svc>>): Paginated<SvcModel<Svc>> | SvcModel<Svc>[]\n  findInStore(params?: MaybeRef<SvcParams<Svc>>): Paginated<SvcModel<Svc>> | SvcModel<Svc>[]\n  findInStore(params?: MaybeRef<Params<Query>>) {\n    const result = this.store.findInStore(params)\n    return reactive({\n      ...result,\n      data: computed(() => {\n        return result.data.map((i: any) => convertData(this, i))\n      }),\n    })\n  }\n\n  /**\n   * find a single record in the local store by query.\n   */\n  findOneInStore(params?: MaybeRef<SvcParams<Svc>>): ComputedRef<SvcModel<Svc>>\n  findOneInStore(params?: MaybeRef<Params<Query>>) {\n    const result = this.store.findOneInStore(params)\n    return result\n  }\n\n  /**\n   * count records matching a query in the store.\n   */\n  countInStore(params?: MaybeRef<SvcParams<Svc>>): Paginated<never>\n  countInStore(params?: MaybeRef<Params<Query>>) {\n    const result = this.store.countInStore(params)\n    return result\n  }\n\n  /**\n   * get a single record from the store by id\n   */\n  getFromStore(id: MaybeRef<undefined | null>, params: MaybeRef<SvcParams<Svc>>): ComputedRef<SvcModel<Svc>>\n  getFromStore(id: MaybeRef<Id>, params?: MaybeRef<SvcParams<Svc>>): ComputedRef<SvcModel<Svc>>\n  getFromStore(id: MaybeRef<Id | undefined | null>, params?: MaybeRef<Params<Query>>): ComputedRef<SvcModel<Svc>> {\n    const result = this.store.getFromStore(id, params)\n    return result\n  }\n\n  /**\n   * creates or adds an item to the store.\n   */\n  createInStore(data: SvcData<Svc>): SvcModel<Svc>\n  createInStore(data: AnyData) {\n    const result = this.store.createInStore(data)\n    return result\n  }\n\n  /**\n   * patches an item in the store\n   */\n  patchInStore(id: MaybeRef<Id | SvcResult<Svc>>, data: SvcPatchData<Svc>, params?: MaybeRef<SvcParams<Svc>>): SvcModel<Svc>\n  patchInStore(id: MaybeRef<null | SvcResult<Svc>[]>, data: SvcPatchData<Svc>, params: MaybeRef<SvcPatchData<Svc>>): SvcModel<Svc>[]\n  patchInStore(\n    idOrData: MaybeRef<SvcResult<Svc> | SvcResult<Svc>[] | Id | null>,\n    data: MaybeRef<AnyData> = {},\n    params: MaybeRef<AnyData> = {},\n  ) {\n    const result = this.store.patchInStore(idOrData, data, params)\n    return result\n  }\n\n  /**\n   * removes one or more items from the store.\n   */\n  removeFromStore(id: Id, params?: MaybeRef<SvcParams<Svc>>): SvcModel<Svc>\n  removeFromStore(id: undefined | null, params: MaybeRef<SvcParams<Svc>>): SvcModel<Svc>[]\n  removeFromStore(id?: Id | null, params?: MaybeRef<Params<Query>>) {\n    const item = id != null ? this.getFromStore(id).value : null\n    if (item) {\n      const result = this.store.removeFromStore(item)\n      return result\n    }\n    else if (id == null && unref(params)?.query) {\n      const result = this.store.removeByQuery(params)\n      return result\n    }\n  }\n\n  /* hybrid methods */\n\n  useFind<M>(params: ComputedRef<UseFindParams | null>, options?: UseFindOptions) {\n    const _params = isRef(params) ? params : ref(params)\n    return useFind<M | SvcModel<Svc>>(_params as ComputedRef<UseFindParams | null>, options, { service: this })\n  }\n\n  useGet<M>(id: MaybeRef<Id | null>, params: MaybeRef<UseGetParams> = ref({})) {\n    const _id = isRef(id) ? id : ref(id)\n    const _params = isRef(params) ? params : ref(params)\n    return useGet<M | SvcModel<Svc>>(_id, _params, { service: this })\n  }\n\n  useGetOnce<M>(_id: MaybeRef<Id | null>, params: MaybeRef<UseGetParams> = {}) {\n    const _params = isRef(params) ? params : ref(params)\n    Object.assign(_params.value, { immediate: false })\n    const results = this.useGet<M>(_id, _params)\n    results.queryWhen(() => !results.data)\n    results.get()\n    return results\n  }\n\n  /* events */\n\n  on(eventName: string | symbol, listener: (...args: any[]) => void) {\n    if (!this.service.on)\n      return\n    return this.service.on(eventName, listener)\n  }\n\n  emit(eventName: string | symbol, ...args: any[]): boolean {\n    if (!this.service.emit)\n      return false\n    return this.service.emit(eventName, ...args)\n  }\n\n  removeListener(eventName: string | symbol, listener: (...args: any[]) => void) {\n    if (!this.service.removeListener)\n      return\n    return this.service.removeListener(eventName, listener)\n  }\n}\n","/*!\n * isomorphic-mongo-objectid - v@version@\n * Pure JavaScript implementation of mongodb ObjectId for the browser and server\n * https://github.com/john-doherty/isomorphic-mongo-objectid\n * @author John Doherty <www.johndoherty.info>\n * @license MIT\n */\n(function () {\n\n    'use strict';\n\n    /*\n     * Refactored version of source by Jonathan Häberle (jonathan.haeberle@gmail.com)\n     * https://github.com/dreampulse/ObjectId.js\n     */\n\n    var _increment = 0;\n    var _pid = Math.floor(Math.random() * (32767));\n    var _machine = Math.floor(Math.random() * (16777216));\n\n    if (typeof window !== 'undefined') {\n\n        var storage = window.localStorage;\n\n        var mongoMachineId = parseInt(storage.mongoMachineId, 10);\n\n        if (mongoMachineId >= 0 && mongoMachineId <= 16777215) {\n            _machine = Math.floor(storage.mongoMachineId);\n        }\n\n        storage.mongoMachineId = _machine;\n    }\n\n    /**\n     * Creates a new mongo db style ObjectID\n     * @returns {ObjectID} instance of ObjectID\n     */\n    function ObjectID() {\n\n        var args = arguments;\n\n        if (!(this instanceof ObjectID)) {\n            if (args.length > 0) {\n                return new ObjectID(args[0], args[1], args[2], args[3]);\n            }\n            else {\n                return new ObjectID();\n            }\n        }\n\n        if (typeof args[0] === 'object') {\n            this.timestamp = args[0].timestamp;\n            this.machine = args[0].machine;\n            this.pid = args[0].pid;\n            this.increment = args[0].increment;\n        }\n        else if (typeof args[0] === 'string' && args[0].length === 24) {\n            this.timestamp = Number('0x' + args[0].substr(0, 8));\n            this.machine = Number('0x' + args[0].substr(8, 6));\n            this.pid = Number('0x' + args[0].substr(14, 4));\n            this.increment = Number('0x' + args[0].substr(18, 6));\n        }\n        else if (args.length === 4 && args[0] !== null) {\n            this.timestamp = args[0];\n            this.machine = args[1];\n            this.pid = args[2];\n            this.increment = args[3];\n        }\n        else {\n            this.timestamp = Math.floor(new Date().valueOf() / 1000);\n            this.machine = _machine;\n            this.pid = _pid;\n            this.increment = _increment++;\n            if (_increment > 0xffffff) {\n                _increment = 0;\n            }\n        }\n    }\n\n    ObjectID.prototype.getDate = function () {\n        return new Date(this.timestamp * 1000);\n    };\n\n    ObjectID.prototype.toArray = function () {\n        var strOid = this.toString();\n        var array = [];\n        var i;\n        for (i = 0; i < 12; i++) {\n            array[i] = parseInt(strOid.slice(i * 2, i * 2 + 2), 16);\n        }\n        return array;\n    };\n\n    ObjectID.prototype.toString = function () {\n\n        var timestamp = this.timestamp.toString(16);\n        var machine = this.machine.toString(16);\n        var pid = this.pid.toString(16);\n        var increment = this.increment.toString(16);\n\n        return [\n            '00000000'.substr(0, 8 - timestamp.length) + timestamp,\n            '000000'.substr(0, 6 - machine.length) + machine,\n            '0000'.substr(0, 4 - pid.length) + pid,\n            '000000'.substr(0, 6 - increment.length) + increment\n        ].join('');\n    };\n\n    if (typeof module !== 'undefined') {\n        module.exports = ObjectID;\n    }\n    else {\n        window.ObjectID = ObjectID;\n    }\n\n})();\n","module.exports = require('./src/isomorphic-mongo-objectid.js');\n","import ObjectID from 'isomorphic-mongo-objectid'\nimport type { Ref } from 'vue-demi'\nimport type { CloneOptions } from '../stores/index.js'\nimport type { AnyData, ById, Params } from '../types.js'\nimport { defineValues } from '../utils/define-properties'\nimport type { BaseModelData, ModelInstanceData, StoreInstanceProps } from './types.js'\n\ninterface UseModelInstanceOptions<M, Q extends AnyData> {\n  idField: string\n  clonesById: Ref<ById<AnyData>>\n  clone: (item: M, data?: Record<string, any>, options?: CloneOptions) => M\n  commit: (item: M, data?: Partial<M>) => M\n  reset: (item: M, data?: Record<string, any>) => M\n  createInStore: (data: M | M[]) => M | M[]\n  removeFromStore: (data: M | M[] | null, params?: Params<Q>) => M | M[] | null\n}\n\nexport function useModelInstance<M extends AnyData, Q extends AnyData>(data: ModelInstanceData<M>,\n  options: UseModelInstanceOptions<M, Q>) {\n  if (data.__isStoreInstance)\n    return data\n\n  const { idField, clonesById, clone, commit, reset, createInStore, removeFromStore } = options\n  const __isClone = data.__isClone || false\n\n  // instance.__isTemp\n  Object.defineProperty(data, '__isTemp', {\n    configurable: true,\n    enumerable: false,\n    get() {\n      return this[this.__idField] == null\n    },\n  })\n\n  // BaseModel properties\n  const asBaseModel = defineValues(data, {\n    __isStoreInstance: true,\n    __isClone,\n    __idField: idField,\n    __tempId: data[idField] == null && data.__tempId == null ? new ObjectID().toString() : data.__tempId || undefined,\n    hasClone(this: M) {\n      const id = this[this.__idField] || this.__tempId\n      const item = clonesById.value[id]\n      return item || null\n    },\n    clone(this: M, data: Partial<M> = {}, options: CloneOptions = {}) {\n      const item = clone(this, data, options)\n      return item\n    },\n    commit(this: M, data: Partial<M> = {}) {\n      const item = commit(this, data)\n      return item\n    },\n    reset(this: M, data: Partial<M> = {}) {\n      const item = reset(this, data)\n      return item\n    },\n    createInStore(this: M) {\n      const item = createInStore(this)\n      return item\n    },\n    removeFromStore(this: M) {\n      const item = removeFromStore(this)\n      return item\n    },\n  }) as M & BaseModelData & StoreInstanceProps<M>\n\n  return asBaseModel\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\n\nvar typeChecker = function (type) {\n    var typeString = \"[object \" + type + \"]\";\n    return function (value) {\n        return getClassName(value) === typeString;\n    };\n};\nvar getClassName = function (value) { return Object.prototype.toString.call(value); };\nvar comparable = function (value) {\n    if (value instanceof Date) {\n        return value.getTime();\n    }\n    else if (isArray(value)) {\n        return value.map(comparable);\n    }\n    else if (value && typeof value.toJSON === \"function\") {\n        return value.toJSON();\n    }\n    return value;\n};\nvar coercePotentiallyNull = function (value) {\n    return value == null ? null : value;\n};\nvar isArray = typeChecker(\"Array\");\nvar isObject = typeChecker(\"Object\");\nvar isFunction = typeChecker(\"Function\");\nvar isVanillaObject = function (value) {\n    return (value &&\n        (value.constructor === Object ||\n            value.constructor === Array ||\n            value.constructor.toString() === \"function Object() { [native code] }\" ||\n            value.constructor.toString() === \"function Array() { [native code] }\") &&\n        !value.toJSON);\n};\nvar equals = function (a, b) {\n    if (a == null && a == b) {\n        return true;\n    }\n    if (a === b) {\n        return true;\n    }\n    if (Object.prototype.toString.call(a) !== Object.prototype.toString.call(b)) {\n        return false;\n    }\n    if (isArray(a)) {\n        if (a.length !== b.length) {\n            return false;\n        }\n        for (var i = 0, length_1 = a.length; i < length_1; i++) {\n            if (!equals(a[i], b[i]))\n                return false;\n        }\n        return true;\n    }\n    else if (isObject(a)) {\n        if (Object.keys(a).length !== Object.keys(b).length) {\n            return false;\n        }\n        for (var key in a) {\n            if (!equals(a[key], b[key]))\n                return false;\n        }\n        return true;\n    }\n    return false;\n};\n\n/**\n * Walks through each value given the context - used for nested operations. E.g:\n * { \"person.address\": { $eq: \"blarg\" }}\n */\nvar walkKeyPathValues = function (item, keyPath, next, depth, key, owner) {\n    var currentKey = keyPath[depth];\n    // if array, then try matching. Might fall through for cases like:\n    // { $eq: [1, 2, 3] }, [ 1, 2, 3 ].\n    if (isArray(item) && isNaN(Number(currentKey))) {\n        for (var i = 0, length_1 = item.length; i < length_1; i++) {\n            // if FALSE is returned, then terminate walker. For operations, this simply\n            // means that the search critera was met.\n            if (!walkKeyPathValues(item[i], keyPath, next, depth, i, item)) {\n                return false;\n            }\n        }\n    }\n    if (depth === keyPath.length || item == null) {\n        return next(item, key, owner, depth === 0);\n    }\n    return walkKeyPathValues(item[currentKey], keyPath, next, depth + 1, currentKey, item);\n};\nvar BaseOperation = /** @class */ (function () {\n    function BaseOperation(params, owneryQuery, options, name) {\n        this.params = params;\n        this.owneryQuery = owneryQuery;\n        this.options = options;\n        this.name = name;\n        this.init();\n    }\n    BaseOperation.prototype.init = function () { };\n    BaseOperation.prototype.reset = function () {\n        this.done = false;\n        this.keep = false;\n    };\n    return BaseOperation;\n}());\nvar GroupOperation = /** @class */ (function (_super) {\n    __extends(GroupOperation, _super);\n    function GroupOperation(params, owneryQuery, options, children) {\n        var _this = _super.call(this, params, owneryQuery, options) || this;\n        _this.children = children;\n        return _this;\n    }\n    /**\n     */\n    GroupOperation.prototype.reset = function () {\n        this.keep = false;\n        this.done = false;\n        for (var i = 0, length_2 = this.children.length; i < length_2; i++) {\n            this.children[i].reset();\n        }\n    };\n    /**\n     */\n    GroupOperation.prototype.childrenNext = function (item, key, owner, root) {\n        var done = true;\n        var keep = true;\n        for (var i = 0, length_3 = this.children.length; i < length_3; i++) {\n            var childOperation = this.children[i];\n            if (!childOperation.done) {\n                childOperation.next(item, key, owner, root);\n            }\n            if (!childOperation.keep) {\n                keep = false;\n            }\n            if (childOperation.done) {\n                if (!childOperation.keep) {\n                    break;\n                }\n            }\n            else {\n                done = false;\n            }\n        }\n        this.done = done;\n        this.keep = keep;\n    };\n    return GroupOperation;\n}(BaseOperation));\nvar NamedGroupOperation = /** @class */ (function (_super) {\n    __extends(NamedGroupOperation, _super);\n    function NamedGroupOperation(params, owneryQuery, options, children, name) {\n        var _this = _super.call(this, params, owneryQuery, options, children) || this;\n        _this.name = name;\n        return _this;\n    }\n    return NamedGroupOperation;\n}(GroupOperation));\nvar QueryOperation = /** @class */ (function (_super) {\n    __extends(QueryOperation, _super);\n    function QueryOperation() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.propop = true;\n        return _this;\n    }\n    /**\n     */\n    QueryOperation.prototype.next = function (item, key, parent, root) {\n        this.childrenNext(item, key, parent, root);\n    };\n    return QueryOperation;\n}(GroupOperation));\nvar NestedOperation = /** @class */ (function (_super) {\n    __extends(NestedOperation, _super);\n    function NestedOperation(keyPath, params, owneryQuery, options, children) {\n        var _this = _super.call(this, params, owneryQuery, options, children) || this;\n        _this.keyPath = keyPath;\n        _this.propop = true;\n        /**\n         */\n        _this._nextNestedValue = function (value, key, owner, root) {\n            _this.childrenNext(value, key, owner, root);\n            return !_this.done;\n        };\n        return _this;\n    }\n    /**\n     */\n    NestedOperation.prototype.next = function (item, key, parent) {\n        walkKeyPathValues(item, this.keyPath, this._nextNestedValue, 0, key, parent);\n    };\n    return NestedOperation;\n}(GroupOperation));\nvar createTester = function (a, compare) {\n    if (a instanceof Function) {\n        return a;\n    }\n    if (a instanceof RegExp) {\n        return function (b) {\n            var result = typeof b === \"string\" && a.test(b);\n            a.lastIndex = 0;\n            return result;\n        };\n    }\n    var comparableA = comparable(a);\n    return function (b) { return compare(comparableA, comparable(b)); };\n};\nvar EqualsOperation = /** @class */ (function (_super) {\n    __extends(EqualsOperation, _super);\n    function EqualsOperation() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.propop = true;\n        return _this;\n    }\n    EqualsOperation.prototype.init = function () {\n        this._test = createTester(this.params, this.options.compare);\n    };\n    EqualsOperation.prototype.next = function (item, key, parent) {\n        if (!Array.isArray(parent) || parent.hasOwnProperty(key)) {\n            if (this._test(item, key, parent)) {\n                this.done = true;\n                this.keep = true;\n            }\n        }\n    };\n    return EqualsOperation;\n}(BaseOperation));\nvar createEqualsOperation = function (params, owneryQuery, options) { return new EqualsOperation(params, owneryQuery, options); };\nvar numericalOperationCreator = function (createNumericalOperation) { return function (params, owneryQuery, options, name) {\n    return createNumericalOperation(params, owneryQuery, options, name);\n}; };\nvar numericalOperation = function (createTester) {\n    return numericalOperationCreator(function (params, owneryQuery, options, name) {\n        var typeofParams = typeof comparable(params);\n        var test = createTester(params);\n        return new EqualsOperation(function (b) {\n            var actualValue = coercePotentiallyNull(b);\n            return (typeof comparable(actualValue) === typeofParams && test(actualValue));\n        }, owneryQuery, options, name);\n    });\n};\nvar createNamedOperation = function (name, params, parentQuery, options) {\n    var operationCreator = options.operations[name];\n    if (!operationCreator) {\n        throwUnsupportedOperation(name);\n    }\n    return operationCreator(params, parentQuery, options, name);\n};\nvar throwUnsupportedOperation = function (name) {\n    throw new Error(\"Unsupported operation: \" + name);\n};\nvar containsOperation = function (query, options) {\n    for (var key in query) {\n        if (options.operations.hasOwnProperty(key) || key.charAt(0) === \"$\")\n            return true;\n    }\n    return false;\n};\nvar createNestedOperation = function (keyPath, nestedQuery, parentKey, owneryQuery, options) {\n    if (containsOperation(nestedQuery, options)) {\n        var _a = createQueryOperations(nestedQuery, parentKey, options), selfOperations = _a[0], nestedOperations = _a[1];\n        if (nestedOperations.length) {\n            throw new Error(\"Property queries must contain only operations, or exact objects.\");\n        }\n        return new NestedOperation(keyPath, nestedQuery, owneryQuery, options, selfOperations);\n    }\n    return new NestedOperation(keyPath, nestedQuery, owneryQuery, options, [\n        new EqualsOperation(nestedQuery, owneryQuery, options)\n    ]);\n};\nvar createQueryOperation = function (query, owneryQuery, _a) {\n    if (owneryQuery === void 0) { owneryQuery = null; }\n    var _b = _a === void 0 ? {} : _a, compare = _b.compare, operations = _b.operations;\n    var options = {\n        compare: compare || equals,\n        operations: Object.assign({}, operations || {})\n    };\n    var _c = createQueryOperations(query, null, options), selfOperations = _c[0], nestedOperations = _c[1];\n    var ops = [];\n    if (selfOperations.length) {\n        ops.push(new NestedOperation([], query, owneryQuery, options, selfOperations));\n    }\n    ops.push.apply(ops, nestedOperations);\n    if (ops.length === 1) {\n        return ops[0];\n    }\n    return new QueryOperation(query, owneryQuery, options, ops);\n};\nvar createQueryOperations = function (query, parentKey, options) {\n    var selfOperations = [];\n    var nestedOperations = [];\n    if (!isVanillaObject(query)) {\n        selfOperations.push(new EqualsOperation(query, query, options));\n        return [selfOperations, nestedOperations];\n    }\n    for (var key in query) {\n        if (options.operations.hasOwnProperty(key)) {\n            var op = createNamedOperation(key, query[key], query, options);\n            if (op) {\n                if (!op.propop && parentKey && !options.operations[parentKey]) {\n                    throw new Error(\"Malformed query. \" + key + \" cannot be matched against property.\");\n                }\n            }\n            // probably just a flag for another operation (like $options)\n            if (op != null) {\n                selfOperations.push(op);\n            }\n        }\n        else if (key.charAt(0) === \"$\") {\n            throwUnsupportedOperation(key);\n        }\n        else {\n            nestedOperations.push(createNestedOperation(key.split(\".\"), query[key], key, query, options));\n        }\n    }\n    return [selfOperations, nestedOperations];\n};\nvar createOperationTester = function (operation) { return function (item, key, owner) {\n    operation.reset();\n    operation.next(item, key, owner);\n    return operation.keep;\n}; };\nvar createQueryTester = function (query, options) {\n    if (options === void 0) { options = {}; }\n    return createOperationTester(createQueryOperation(query, null, options));\n};\n\nvar $Ne = /** @class */ (function (_super) {\n    __extends($Ne, _super);\n    function $Ne() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.propop = true;\n        return _this;\n    }\n    $Ne.prototype.init = function () {\n        this._test = createTester(this.params, this.options.compare);\n    };\n    $Ne.prototype.reset = function () {\n        _super.prototype.reset.call(this);\n        this.keep = true;\n    };\n    $Ne.prototype.next = function (item) {\n        if (this._test(item)) {\n            this.done = true;\n            this.keep = false;\n        }\n    };\n    return $Ne;\n}(BaseOperation));\n// https://docs.mongodb.com/manual/reference/operator/query/elemMatch/\nvar $ElemMatch = /** @class */ (function (_super) {\n    __extends($ElemMatch, _super);\n    function $ElemMatch() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.propop = true;\n        return _this;\n    }\n    $ElemMatch.prototype.init = function () {\n        if (!this.params || typeof this.params !== \"object\") {\n            throw new Error(\"Malformed query. $elemMatch must by an object.\");\n        }\n        this._queryOperation = createQueryOperation(this.params, this.owneryQuery, this.options);\n    };\n    $ElemMatch.prototype.reset = function () {\n        _super.prototype.reset.call(this);\n        this._queryOperation.reset();\n    };\n    $ElemMatch.prototype.next = function (item) {\n        if (isArray(item)) {\n            for (var i = 0, length_1 = item.length; i < length_1; i++) {\n                // reset query operation since item being tested needs to pass _all_ query\n                // operations for it to be a success\n                this._queryOperation.reset();\n                var child = item[i];\n                this._queryOperation.next(child, i, item, false);\n                this.keep = this.keep || this._queryOperation.keep;\n            }\n            this.done = true;\n        }\n        else {\n            this.done = false;\n            this.keep = false;\n        }\n    };\n    return $ElemMatch;\n}(BaseOperation));\nvar $Not = /** @class */ (function (_super) {\n    __extends($Not, _super);\n    function $Not() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.propop = true;\n        return _this;\n    }\n    $Not.prototype.init = function () {\n        this._queryOperation = createQueryOperation(this.params, this.owneryQuery, this.options);\n    };\n    $Not.prototype.reset = function () {\n        _super.prototype.reset.call(this);\n        this._queryOperation.reset();\n    };\n    $Not.prototype.next = function (item, key, owner, root) {\n        this._queryOperation.next(item, key, owner, root);\n        this.done = this._queryOperation.done;\n        this.keep = !this._queryOperation.keep;\n    };\n    return $Not;\n}(BaseOperation));\nvar $Size = /** @class */ (function (_super) {\n    __extends($Size, _super);\n    function $Size() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.propop = true;\n        return _this;\n    }\n    $Size.prototype.init = function () { };\n    $Size.prototype.next = function (item) {\n        if (isArray(item) && item.length === this.params) {\n            this.done = true;\n            this.keep = true;\n        }\n        // if (parent && parent.length === this.params) {\n        //   this.done = true;\n        //   this.keep = true;\n        // }\n    };\n    return $Size;\n}(BaseOperation));\nvar assertGroupNotEmpty = function (values) {\n    if (values.length === 0) {\n        throw new Error(\"$and/$or/$nor must be a nonempty array\");\n    }\n};\nvar $Or = /** @class */ (function (_super) {\n    __extends($Or, _super);\n    function $Or() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.propop = false;\n        return _this;\n    }\n    $Or.prototype.init = function () {\n        var _this = this;\n        assertGroupNotEmpty(this.params);\n        this._ops = this.params.map(function (op) {\n            return createQueryOperation(op, null, _this.options);\n        });\n    };\n    $Or.prototype.reset = function () {\n        this.done = false;\n        this.keep = false;\n        for (var i = 0, length_2 = this._ops.length; i < length_2; i++) {\n            this._ops[i].reset();\n        }\n    };\n    $Or.prototype.next = function (item, key, owner) {\n        var done = false;\n        var success = false;\n        for (var i = 0, length_3 = this._ops.length; i < length_3; i++) {\n            var op = this._ops[i];\n            op.next(item, key, owner);\n            if (op.keep) {\n                done = true;\n                success = op.keep;\n                break;\n            }\n        }\n        this.keep = success;\n        this.done = done;\n    };\n    return $Or;\n}(BaseOperation));\nvar $Nor = /** @class */ (function (_super) {\n    __extends($Nor, _super);\n    function $Nor() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.propop = false;\n        return _this;\n    }\n    $Nor.prototype.next = function (item, key, owner) {\n        _super.prototype.next.call(this, item, key, owner);\n        this.keep = !this.keep;\n    };\n    return $Nor;\n}($Or));\nvar $In = /** @class */ (function (_super) {\n    __extends($In, _super);\n    function $In() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.propop = true;\n        return _this;\n    }\n    $In.prototype.init = function () {\n        var _this = this;\n        this._testers = this.params.map(function (value) {\n            if (containsOperation(value, _this.options)) {\n                throw new Error(\"cannot nest $ under \" + _this.name.toLowerCase());\n            }\n            return createTester(value, _this.options.compare);\n        });\n    };\n    $In.prototype.next = function (item, key, owner) {\n        var done = false;\n        var success = false;\n        for (var i = 0, length_4 = this._testers.length; i < length_4; i++) {\n            var test = this._testers[i];\n            if (test(item)) {\n                done = true;\n                success = true;\n                break;\n            }\n        }\n        this.keep = success;\n        this.done = done;\n    };\n    return $In;\n}(BaseOperation));\nvar $Nin = /** @class */ (function (_super) {\n    __extends($Nin, _super);\n    function $Nin(params, ownerQuery, options, name) {\n        var _this = _super.call(this, params, ownerQuery, options, name) || this;\n        _this.propop = true;\n        _this._in = new $In(params, ownerQuery, options, name);\n        return _this;\n    }\n    $Nin.prototype.next = function (item, key, owner, root) {\n        this._in.next(item, key, owner);\n        if (isArray(owner) && !root) {\n            if (this._in.keep) {\n                this.keep = false;\n                this.done = true;\n            }\n            else if (key == owner.length - 1) {\n                this.keep = true;\n                this.done = true;\n            }\n        }\n        else {\n            this.keep = !this._in.keep;\n            this.done = true;\n        }\n    };\n    $Nin.prototype.reset = function () {\n        _super.prototype.reset.call(this);\n        this._in.reset();\n    };\n    return $Nin;\n}(BaseOperation));\nvar $Exists = /** @class */ (function (_super) {\n    __extends($Exists, _super);\n    function $Exists() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.propop = true;\n        return _this;\n    }\n    $Exists.prototype.next = function (item, key, owner) {\n        if (owner.hasOwnProperty(key) === this.params) {\n            this.done = true;\n            this.keep = true;\n        }\n    };\n    return $Exists;\n}(BaseOperation));\nvar $And = /** @class */ (function (_super) {\n    __extends($And, _super);\n    function $And(params, owneryQuery, options, name) {\n        var _this = _super.call(this, params, owneryQuery, options, params.map(function (query) { return createQueryOperation(query, owneryQuery, options); }), name) || this;\n        _this.propop = false;\n        assertGroupNotEmpty(params);\n        return _this;\n    }\n    $And.prototype.next = function (item, key, owner, root) {\n        this.childrenNext(item, key, owner, root);\n    };\n    return $And;\n}(NamedGroupOperation));\nvar $All = /** @class */ (function (_super) {\n    __extends($All, _super);\n    function $All(params, owneryQuery, options, name) {\n        var _this = _super.call(this, params, owneryQuery, options, params.map(function (query) { return createQueryOperation(query, owneryQuery, options); }), name) || this;\n        _this.propop = true;\n        return _this;\n    }\n    $All.prototype.next = function (item, key, owner, root) {\n        this.childrenNext(item, key, owner, root);\n    };\n    return $All;\n}(NamedGroupOperation));\nvar $eq = function (params, owneryQuery, options) {\n    return new EqualsOperation(params, owneryQuery, options);\n};\nvar $ne = function (params, owneryQuery, options, name) { return new $Ne(params, owneryQuery, options, name); };\nvar $or = function (params, owneryQuery, options, name) { return new $Or(params, owneryQuery, options, name); };\nvar $nor = function (params, owneryQuery, options, name) { return new $Nor(params, owneryQuery, options, name); };\nvar $elemMatch = function (params, owneryQuery, options, name) { return new $ElemMatch(params, owneryQuery, options, name); };\nvar $nin = function (params, owneryQuery, options, name) { return new $Nin(params, owneryQuery, options, name); };\nvar $in = function (params, owneryQuery, options, name) {\n    return new $In(params, owneryQuery, options, name);\n};\nvar $lt = numericalOperation(function (params) { return function (b) {\n    return b != null && b < params;\n}; });\nvar $lte = numericalOperation(function (params) { return function (b) {\n    return b === params || b <= params;\n}; });\nvar $gt = numericalOperation(function (params) { return function (b) {\n    return b != null && b > params;\n}; });\nvar $gte = numericalOperation(function (params) { return function (b) {\n    return b === params || b >= params;\n}; });\nvar $mod = function (_a, owneryQuery, options) {\n    var mod = _a[0], equalsValue = _a[1];\n    return new EqualsOperation(function (b) { return comparable(b) % mod === equalsValue; }, owneryQuery, options);\n};\nvar $exists = function (params, owneryQuery, options, name) { return new $Exists(params, owneryQuery, options, name); };\nvar $regex = function (pattern, owneryQuery, options) {\n    return new EqualsOperation(new RegExp(pattern, owneryQuery.$options), owneryQuery, options);\n};\nvar $not = function (params, owneryQuery, options, name) { return new $Not(params, owneryQuery, options, name); };\nvar typeAliases = {\n    number: function (v) { return typeof v === \"number\"; },\n    string: function (v) { return typeof v === \"string\"; },\n    bool: function (v) { return typeof v === \"boolean\"; },\n    array: function (v) { return Array.isArray(v); },\n    null: function (v) { return v === null; },\n    timestamp: function (v) { return v instanceof Date; }\n};\nvar $type = function (clazz, owneryQuery, options) {\n    return new EqualsOperation(function (b) {\n        if (typeof clazz === \"string\") {\n            if (!typeAliases[clazz]) {\n                throw new Error(\"Type alias does not exist\");\n            }\n            return typeAliases[clazz](b);\n        }\n        return b != null ? b instanceof clazz || b.constructor === clazz : false;\n    }, owneryQuery, options);\n};\nvar $and = function (params, ownerQuery, options, name) { return new $And(params, ownerQuery, options, name); };\nvar $all = function (params, ownerQuery, options, name) { return new $All(params, ownerQuery, options, name); };\nvar $size = function (params, ownerQuery, options) { return new $Size(params, ownerQuery, options, \"$size\"); };\nvar $options = function () { return null; };\nvar $where = function (params, ownerQuery, options) {\n    var test;\n    if (isFunction(params)) {\n        test = params;\n    }\n    else if (!process.env.CSP_ENABLED) {\n        test = new Function(\"obj\", \"return \" + params);\n    }\n    else {\n        throw new Error(\"In CSP mode, sift does not support strings in \\\"$where\\\" condition\");\n    }\n    return new EqualsOperation(function (b) { return test.bind(b)(b); }, ownerQuery, options);\n};\n\nvar defaultOperations = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    $Size: $Size,\n    $eq: $eq,\n    $ne: $ne,\n    $or: $or,\n    $nor: $nor,\n    $elemMatch: $elemMatch,\n    $nin: $nin,\n    $in: $in,\n    $lt: $lt,\n    $lte: $lte,\n    $gt: $gt,\n    $gte: $gte,\n    $mod: $mod,\n    $exists: $exists,\n    $regex: $regex,\n    $not: $not,\n    $type: $type,\n    $and: $and,\n    $all: $all,\n    $size: $size,\n    $options: $options,\n    $where: $where\n});\n\nvar createDefaultQueryOperation = function (query, ownerQuery, _a) {\n    var _b = _a === void 0 ? {} : _a, compare = _b.compare, operations = _b.operations;\n    return createQueryOperation(query, ownerQuery, {\n        compare: compare,\n        operations: Object.assign({}, defaultOperations, operations || {})\n    });\n};\nvar createDefaultQueryTester = function (query, options) {\n    if (options === void 0) { options = {}; }\n    var op = createDefaultQueryOperation(query, null, options);\n    return createOperationTester(op);\n};\n\nexport { $Size, $all, $and, $elemMatch, $eq, $exists, $gt, $gte, $in, $lt, $lte, $mod, $ne, $nin, $nor, $not, $options, $or, $regex, $size, $type, $where, EqualsOperation, createDefaultQueryOperation, createEqualsOperation, createOperationTester, createQueryOperation, createQueryTester, createDefaultQueryTester as default };\n//# sourceMappingURL=index.js.map\n","import { createEqualsOperation } from 'sift'\n\n// Simulate SQL's case-sensitive LIKE.\n// A combination of answers from https://stackoverflow.com/questions/1314045/emulating-sql-like-in-javascript\nexport function like(value: string, search: string, regexOptions = 'g') {\n  const specials = ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\\\']\n  // Remove specials\n  search = search.replace(new RegExp(`(\\\\${specials.join('|\\\\')})`, regexOptions), '\\\\$1')\n  // Replace % and _ with equivalent regex\n  search = search.replace(/%/g, '.*').replace(/_/g, '.')\n  // Check matches\n  return RegExp(`^${search}$`, regexOptions).test(value)\n}\n\n// Simulate PostgreSQL's case-insensitive ILIKE\nexport function iLike(str: string, search: string) {\n  return like(str, search, 'ig')\n}\n\nexport function $like(params: any, ownerQuery: any, options: any) {\n  return createEqualsOperation((value: any) => like(value, params), ownerQuery, options)\n}\n\nexport function $notLike(params: any, ownerQuery: any, options: any) {\n  return createEqualsOperation((value: any) => !like(value, params), ownerQuery, options)\n}\n\nexport function $ilike(params: any, ownerQuery: any, options: any) {\n  return createEqualsOperation((value: any) => iLike(value, params), ownerQuery, options)\n}\n\nfunction $notILike(params: any, ownerQuery: any, options: any) {\n  return createEqualsOperation((value: any) => !iLike(value, params), ownerQuery, options)\n}\n\nexport const sqlOperations = {\n  $like,\n  $notLike,\n  $notlike: $notLike,\n  $ilike,\n  $iLike: $ilike,\n  $notILike,\n}\n","import { _ } from '@feathersjs/commons'\nimport type { Query } from '@feathersjs/feathers'\nimport type { FilterQueryOptions, FilterSettings, PaginationParams } from '@feathersjs/adapter-commons'\n\nconst parse = (value: any) => (typeof value !== 'undefined' ? Number.parseInt(value, 10) : value)\n\nfunction getFilters(query: Query, settings: any) {\n  const filterNames = Object.keys(settings.filters)\n\n  return filterNames.reduce((current, key) => {\n    const queryValue = query[key]\n    const filter = settings.filters[key]\n\n    if (filter) {\n      const value = typeof filter === 'function' ? filter(queryValue, settings) : queryValue\n\n      if (value !== undefined)\n        current[key] = value\n    }\n\n    return current\n  }, {} as { [key: string]: any })\n}\n\nfunction getQuery(query: Query) {\n  const keys = Object.keys(query).concat(Object.getOwnPropertySymbols(query) as any as string[])\n\n  return keys.reduce((rebuiltQuery, key) => {\n    if (!(typeof key === 'string' && key.startsWith('$')))\n      rebuiltQuery[key] = query[key]\n\n    return rebuiltQuery\n  }, {} as Query)\n}\n\n/**\n * Returns the converted `$limit` value based on the `paginate` configuration.\n * @param _limit The limit value\n * @param paginate The pagination options\n * @returns The converted $limit value\n */\nexport function getLimit(_limit: any, paginate?: PaginationParams) {\n  const limit = parse(_limit)\n\n  if (paginate && (paginate.default || paginate.max)) {\n    const base = paginate.default || 0\n    const lower = typeof limit === 'number' && !Number.isNaN(limit) && limit >= 0 ? limit : base\n    const upper = typeof paginate.max === 'number' ? paginate.max : Number.MAX_VALUE\n\n    return Math.min(lower, upper)\n  }\n\n  return limit\n}\n\nexport const OPERATORS = ['$in', '$nin', '$lt', '$lte', '$gt', '$gte', '$ne', '$or']\n\nexport const FILTERS: FilterSettings = {\n  $skip: (value: any) => parse(value),\n  $sort: (sort: any): { [key: string]: number } => {\n    if (typeof sort !== 'object' || Array.isArray(sort))\n      return sort\n\n    return Object.keys(sort).reduce((result, key) => {\n      result[key] = typeof sort[key] === 'object' ? sort[key] : parse(sort[key])\n\n      return result\n    }, {} as { [key: string]: number })\n  },\n  $limit: (_limit: any, { paginate }: FilterQueryOptions) => getLimit(_limit, paginate),\n  $select: (select: any) => {\n    if (Array.isArray(select))\n      return select.map(current => `${current}`)\n\n    return select\n  },\n  $or: (or: any) => or,\n  $and: (and: any) => and,\n}\n\n/**\n * Converts Feathers special query parameters and pagination settings\n * and returns them separately as `filters` and the rest of the query\n * as `query`. `options` also gets passed the pagination settings and\n * a list of additional `operators` to allow when querying properties.\n *\n * @param query The initial query\n * @param options Options for filtering the query\n * @returns An object with `query` which contains the query without `filters`\n * and `filters` which contains the converted values for each filter.\n */\nexport function filterQuery(_query: Query, options: FilterQueryOptions = {}) {\n  const query = _query || {}\n  const settings = {\n    ...options,\n    filters: {\n      ...FILTERS,\n      ...options.filters,\n    },\n    operators: OPERATORS.concat(options.operators || []),\n  }\n\n  return {\n    filters: getFilters(query, settings),\n    query: getQuery(query),\n  }\n}\n","import type { MaybeRef } from '@vueuse/core'\nimport type { Id } from '@feathersjs/feathers'\nimport { _ } from '@feathersjs/commons'\nimport { computed, reactive, unref } from 'vue-demi'\nimport { select, sorter } from '@feathersjs/adapter-commons'\nimport sift from 'sift'\nimport fastCopy from 'fast-copy'\nimport type { AnyData, CustomFilter, Params } from '../types.js'\nimport { deepUnref, getArray } from '../utils/index.js'\nimport { sqlOperations } from '../custom-operators/index.js'\nimport { filterQuery } from './filter-query.js'\nimport type { StorageMapUtils } from './storage.js'\n\ninterface UseServiceLocalOptions<M extends AnyData> {\n  idField: string\n  itemStorage: StorageMapUtils<M>\n  tempStorage?: StorageMapUtils<M>\n  cloneStorage?: StorageMapUtils<M>\n  addItemToStorage: any\n  whitelist?: string[]\n  paramsForServer?: string[]\n  customSiftOperators?: Record<string, any>\n  customFilters?: CustomFilter[]\n}\n\nconst FILTERS = ['$sort', '$limit', '$skip', '$select']\nconst additionalOperators = [\n  '$in',\n  '$nin',\n  '$exists',\n  'eq',\n  'ne',\n  '$mod',\n  '$all',\n  '$not',\n  '$size',\n  '$type',\n  '$regex',\n  '$options',\n  '$where',\n  '$elemMatch',\n]\n\nexport function useServiceLocal<M extends AnyData, Q extends AnyData>(options: UseServiceLocalOptions<M>) {\n  const {\n    idField,\n    itemStorage,\n    tempStorage,\n    cloneStorage,\n    addItemToStorage,\n    paramsForServer = [],\n    whitelist = [],\n    customSiftOperators = {},\n    customFilters = [],\n  } = options\n\n  const operations = Object.assign({}, sqlOperations, customSiftOperators)\n\n  /** @private */\n  const _filterQueryOperators = computed(() => {\n    return additionalOperators.concat(whitelist || []).concat(Object.keys(operations))\n  })\n\n  const filterItems = (params: Params<Q>, startingValues: M[] = []) => {\n    params = { ...unref(params) } || {}\n\n    const q = _.omit(params.query || {}, ...paramsForServer)\n    const { query, filters } = filterQuery(q, {\n      operators: _filterQueryOperators.value,\n    })\n    let values = startingValues.concat(itemStorage.list.value)\n\n    if (tempStorage && params.temps)\n      values.push(...tempStorage.list.value)\n\n    // pass values through each of the custom filters\n    values = customFilters.reduce((items, filter) => {\n      if (!q[filter.key])\n        return items\n      return filter.operator(items, q[filter.key], q)\n    }, values)\n\n    // put $or and $and back in the query for sift.js to handle\n    if (filters.$or)\n      query.$or = q.$or\n    if (filters.$and)\n      query.$and = q.$and\n\n    values = values.filter(sift(query, { operations }))\n    return { values, filters }\n  }\n\n  function findInStore(_params: MaybeRef<Params<Q>>) {\n    const result = computed(() => {\n      const params = unref(_params)\n      // clean up any nested refs\n      if (params.query)\n        params.query = deepUnref(params.query)\n\n      const filtered = filterItems(params)\n      const filters = filtered.filters\n      let values = filtered.values\n\n      const total = values.length\n\n      if (filters.$sort)\n        values.sort(sorter(filters.$sort))\n\n      if (filters.$skip)\n        values = values.slice(filters.$skip)\n\n      if (typeof filters.$limit !== 'undefined')\n        values = values.slice(0, filters.$limit)\n\n      return {\n        total,\n        limit: filters.$limit || 0,\n        skip: filters.$skip || 0,\n        data: params.clones\n          ? values.map((v: any) => (v.clone ? v.clone(undefined, { useExisting: true }) : v))\n          : values,\n      }\n    })\n    return reactive({\n      total: computed(() => result.value.total),\n      limit: computed(() => result.value.limit),\n      skip: computed(() => result.value.skip),\n      data: computed(() => result.value.data),\n    })\n  }\n\n  function findOneInStore(params: MaybeRef<Params<Q>>) {\n    const result = findInStore(params)\n    const item = computed(() => {\n      return result.data[0] || null\n    })\n    return item\n  }\n\n  function countInStore(params: MaybeRef<Params<Q>>) {\n    const value = computed(() => {\n      params = { ...unref(params) }\n\n      if (!params.query)\n        throw new Error('params must contain a query object')\n\n      params.query = _.omit(params.query, ...FILTERS)\n      return findInStore(params).total\n    })\n    return value\n  }\n\n  const getFromStore = (_id: MaybeRef<Id | null>, params?: Params<Q>) => {\n    return computed((): M | null => {\n      const id = unref(_id)\n      params = fastCopy(unref(params) || {})\n      if (params.query)\n        params.query = deepUnref(params.query)\n\n      let item = null\n      const existingItem = itemStorage.getItem(id as Id) && select(params, idField)(itemStorage.getItem(id as Id))\n      const tempItem\n        = tempStorage && tempStorage.getItem(id as Id) && select(params, '__tempId')(tempStorage.getItem(id as Id))\n\n      if (existingItem)\n        item = existingItem\n      else if (tempItem)\n        item = tempItem\n\n      const toReturn = params.clones && item.clone ? item.clone(undefined, { useExisting: true }) : item || null\n      return toReturn\n    })\n  }\n\n  /**\n   * Write records to the store.\n   * @param data a single record or array of records.\n   * @returns data added or modified in the store. If you pass an array, you get an array back.\n   */\n  function createInStore<N = MaybeRef<M | M[]>>(data: N): N {\n    const { items, isArray } = getArray(unref(data))\n\n    const _items = items.map((item: N) => {\n      const stored = addItemToStorage(unref(item))\n      return stored\n    })\n\n    return isArray ? _items : _items[0]\n  }\n\n  // TODO\n  function patchInStore(\n    _idOrData: MaybeRef<M | M[] | Id | null>,\n    _data: MaybeRef<AnyData> = {},\n    _params: MaybeRef<Params<Q>> = {},\n  ) {\n    const idOrData = unref(_idOrData)\n    const data = unref(_data)\n    const params = unref(_params)\n\n    // patches provided items using the `data` from the closure scope.\n    function updateItems(items: any[]) {\n      const patched = items\n        .map((item: M | Id | null) => {\n          item = unref(item)\n          // convert ids to items from the store\n          if (typeof item === 'number' || typeof item === 'string')\n            item = getFromStore(item as Id).value\n\n          if (item == null)\n            return null\n\n          const toWrite = { ...item, ...data }\n          const stored = addItemToStorage(toWrite)\n          return stored\n        })\n        .filter(i => i)\n      return patched\n    }\n\n    if (idOrData === null) {\n      // patching multiple cannot use an empty array\n      if (params?.query && !Object.keys(params?.query).length) {\n        throw new Error(\n          'cannot perform multiple patchInStore with an empty query. You must explicitly provide a query. To patch all items, try using a query that matches all items, like \"{ id: { $exists: true } }\"',\n        )\n      }\n      // patch by query\n      const fromStore = findInStore(params).data\n      const items = updateItems(fromStore)\n\n      return items\n    }\n    else {\n      // patch provided data\n      const { items, isArray } = getArray(idOrData)\n      const patchedItems = updateItems(items)\n\n      return isArray ? patchedItems : patchedItems[0]\n    }\n  }\n\n  /**\n   * If a clone is provided, it removes the clone from the store.\n   * If a temp is provided, it removes the temp from the store.\n   * If an item is provided, the item and its associated temp and clone are removed.\n   * If a string is provided, it removes any item, temp, or clone from the stores.\n   * @param data\n   */\n  function removeFromStore(data: M | M[] | null, params?: Params<Q>) {\n    if (data === null && params?.query && Object.keys(params?.query).length) {\n      const clones = cloneStorage ? cloneStorage.list.value : []\n      const { values } = filterItems(params, clones)\n      const result = removeItems(values)\n      return result\n    }\n    else if (data !== null) {\n      removeItems(data)\n    }\n\n    return data\n  }\n\n  function removeItems(data: M | M[]) {\n    const { items } = getArray(data)\n    items.forEach((item: M) => {\n      if (typeof item === 'string') {\n        itemStorage.removeItem(item)\n        tempStorage?.removeItem(item)\n        cloneStorage?.removeItem(item)\n      }\n      else {\n        if ((item as M).__isClone)\n          return cloneStorage?.remove(item as M)\n\n        if ((item as M).__isTemp)\n          return tempStorage?.remove(item as M)\n\n        itemStorage.remove(item)\n        tempStorage?.remove(item)\n        cloneStorage?.remove(item)\n      }\n    })\n    return data\n  }\n\n  return {\n    findInStore,\n    findOneInStore,\n    countInStore,\n    getFromStore,\n    createInStore,\n    patchInStore,\n    removeFromStore,\n  }\n}\n","import type { Id } from '@feathersjs/feathers'\nimport { type Ref, computed, ref, del as vueDel, set as vueSet } from 'vue-demi'\nimport type { AnyData, ById } from '../types.js'\nimport type { AssignFn, beforeWriteFn, onReadFn } from './types.js'\n\ninterface UseServiceStorageOptions<M extends AnyData> {\n  getId: (item: M) => string\n  onRead?: onReadFn<M>\n  beforeWrite?: beforeWriteFn<M>\n  assign?: AssignFn<M>\n}\n\nexport type StorageMapUtils<M extends AnyData> = ReturnType<typeof useServiceStorage<M>>\n\n/**\n * General storage adapter\n */\nexport function useServiceStorage<M extends AnyData>({\n  getId,\n  onRead = item => item,\n  beforeWrite = item => item,\n  assign = (dest, src) => Object.assign(dest, src),\n}: UseServiceStorageOptions<M>) {\n  const byId: Ref<ById<M>> = ref({})\n\n  const list = computed(() => {\n    return Object.values(byId.value)\n  })\n\n  const ids = computed(() => {\n    return Object.keys(byId.value)\n  })\n\n  /**\n   * Checks if an item with the provided `id` is stored.\n   * @param id\n   * @returns\n   */\n  const hasItem = (id: Id) => {\n    return !!byId.value[id]\n  }\n\n  /**\n   * Checks if the provided `item` is stored.\n   * @param item\n   * @returns boolean\n   */\n  const has = (item: M) => {\n    const id = getId(item)\n    return hasItem(id as Id)\n  }\n\n  /**\n   * Retrives the stored record that matches the provided `id`.\n   * @param id\n   * @returns\n   */\n  const getItem = (id: Id) => {\n    const inStore = byId.value[id]\n    const _item = inStore ? onRead(inStore) : null\n    return _item as M\n  }\n\n  const setItem = (id: Id, item: M) => {\n    if (id == null)\n      throw new Error('item has no id')\n    vueSet(byId.value, id, beforeWrite(item))\n    return getItem(id)\n  }\n\n  /**\n   * Writes the provided item to the store\n   * @param item item to store\n   * @returns\n   */\n  const set = (item: M) => {\n    const id = getId(item) as Id\n    return setItem(id, item)\n  }\n\n  /**\n   * If the item is stored, merges the `item` into the stored version.\n   * If not yet stored, the item is stored.\n   * @param item the item to merge or write to the store.\n   * @returns the stored item\n   */\n  const merge = (item: M) => {\n    const id = getId(item) as Id\n    const existing = getItem(id)\n    if (existing)\n      assign(existing, item)\n    else setItem(id, item)\n\n    return getItem(id)\n  }\n\n  /**\n   * Retrieves the stored record that matches the provided `item`.\n   * @param item\n   * @returns\n   */\n  const get = (item: M) => {\n    const id = getId(item) as Id\n    return getItem(id)\n  }\n\n  /**\n   * Remove item with matching `id`, if found.\n   * @param id\n   * @returns boolean indicating if an item was removed\n   */\n  const removeItem = (id: Id) => {\n    const hadItem = hasItem(id)\n    if (hadItem)\n      vueDel(byId.value, id)\n\n    return hadItem\n  }\n\n  /**\n   * remove `item` if found\n   * @param item\n   * @returns boolean indicating if item was removed\n   */\n  const remove = (item: M) => {\n    const id = getId(item) as Id\n    return removeItem(id)\n  }\n\n  const getKeys = () => {\n    return ids.value\n  }\n\n  /**\n   * empties the store\n   */\n  const clear = () => {\n    Object.keys(byId.value).forEach((id) => {\n      vueDel(byId.value, id)\n    })\n  }\n\n  return { byId, list, ids, getId, clear, has, hasItem, get, getItem, set, setItem, remove, removeItem, getKeys, merge }\n}\n","import type { AnyData } from '../types.js'\nimport type { beforeWriteFn, onReadFn } from './types.js'\nimport type { StorageMapUtils } from './storage.js'\nimport { useServiceStorage } from './storage.js'\n\ninterface UseServiceTempsOptions<M extends AnyData> {\n  getId: (item: M) => string\n  itemStorage: StorageMapUtils<M>\n  onRead?: onReadFn<M>\n  beforeWrite?: beforeWriteFn<M>\n}\n\nexport function useServiceTemps<M extends AnyData>(options: UseServiceTempsOptions<M>) {\n  const { getId, itemStorage, onRead, beforeWrite } = options\n\n  const tempStorage = useServiceStorage<M>({\n    getId,\n    onRead,\n    beforeWrite,\n  })\n\n  function moveTempToItems(data: M) {\n    if (tempStorage.has(data))\n      tempStorage.remove(data)\n\n    return itemStorage.set(data)\n  }\n\n  return { tempStorage, moveTempToItems }\n}\n","import { del as vueDelete } from 'vue-demi'\nimport fastCopy from 'fast-copy'\nimport type { AnyData, MakeCopyOptions } from '../types.js'\nimport type { CloneOptions, beforeWriteFn, onReadFn } from './types.js'\nimport type { StorageMapUtils } from './storage.js'\nimport { useServiceStorage } from './storage.js'\n\nexport interface UseServiceClonesOptions<M extends AnyData> {\n  itemStorage: StorageMapUtils<M>\n  tempStorage: StorageMapUtils<M>\n  onRead?: onReadFn<M>\n  beforeWrite?: beforeWriteFn<M>\n  makeCopy?: (item: M, data: AnyData, { isClone }: MakeCopyOptions) => M\n}\n\nexport function useServiceClones<M extends AnyData>(options: UseServiceClonesOptions<M>) {\n  const { itemStorage, tempStorage, onRead, beforeWrite } = options\n  const defaultMakeCopy = (item: M, data: AnyData = {}, { isClone }: MakeCopyOptions) => {\n    return fastCopy(Object.assign({}, item, data, { __isClone: isClone }))\n  }\n  const makeCopy = options.makeCopy || defaultMakeCopy\n\n  const cloneStorage = useServiceStorage({\n    getId: (item) => {\n      const id = itemStorage.getId(item as M)\n      return id != null ? id : tempStorage.getId(item)\n    },\n    onRead,\n    beforeWrite,\n  })\n\n  /**\n   * Makes sure the provided item is stored in itemStorage or tempStorage.\n   * Private\n   */\n  function assureOriginalIsStored(item: M): M {\n    // Make sure the stored version is always up to date with the latest instance data. (the instance used to call instance.clone)\n    if (!item.__isClone) {\n      if (itemStorage.has(item))\n        itemStorage.merge(item)\n      else if (tempStorage.has(item))\n        tempStorage.merge(item)\n    }\n    const existingItem = itemStorage.get(item) || tempStorage.get(item)\n    if (!existingItem) {\n      if (itemStorage.getId(item) != null)\n        itemStorage.merge(item)\n      else if (tempStorage.getId(item) != null)\n        tempStorage.merge(item)\n    }\n    return itemStorage.get(item) || tempStorage.get(item)\n  }\n\n  /**\n   * Fast-copies the provided `item`, placing it in `cloneStorage`.\n   * @param item the object to clone.\n   * @param data an object to be merged before storing in cloneStorage.\n   * @param options.useExisting {Boolean} allows using the existing clone instead of re-cloning.\n   * @returns\n   */\n  function clone(item: M, data = {}, options: CloneOptions = {}): M {\n    const existingClone = cloneStorage.get(item)\n\n    assureOriginalIsStored(item)\n\n    if (existingClone && options.useExisting) {\n      return existingClone as M\n    }\n    else {\n      const clone = reset(item, data)\n      return clone as M\n    }\n  }\n\n  /**\n   * If the `item` has an id, it's merged or written to the itemStore.\n   * If the `item` does not have an id, it's merged or written to the tempStore.\n   * @param item\n   * @param data\n   * @returns stored item or stored temp\n   */\n  function commit(item: M, data: Partial<M> = {}) {\n    const itemId = itemStorage.getId(item)\n    const _item = makeCopy(item, data, { isClone: false })\n    // copyAssociations(clone, newOriginal, clone.getModel().associations)\n    if (itemId) {\n      itemStorage.merge(_item)\n      return itemStorage.get(_item)\n    }\n    else {\n      tempStorage.merge(_item)\n      return tempStorage.get(_item)\n    }\n  }\n\n  /**\n   * If a clone exists, resets the clone to match the item or temp\n   * If a clone does not exist, writes the item as the clone.\n   * @param item\n   * @param data\n   * @returns\n   */\n  function reset(item: M, data = {}): M {\n    const original = assureOriginalIsStored(item)\n    const existingClone = cloneStorage.get(item)\n\n    if (existingClone) {\n      const copied = makeCopy(original, data, { isClone: true })\n      Object.keys(original).forEach((key) => {\n        if (original[key] == null)\n          vueDelete(copied, key)\n      })\n      cloneStorage.merge(copied)\n    }\n    else {\n      const copied = makeCopy(item, data, { isClone: true })\n      cloneStorage.set(copied)\n    }\n    return cloneStorage.get(item)\n  }\n\n  function markAsClone(item: M) {\n    Object.defineProperty(item, '__isClone', {\n      writable: false,\n      enumerable: false,\n      value: true,\n    })\n    return item\n  }\n\n  return {\n    cloneStorage,\n    clone,\n    commit,\n    reset,\n    markAsClone,\n  }\n}\n","import fastCopy from 'fast-copy'\nimport type { AnyData, MakeCopyOptions } from '../types.js'\nimport { defineValues } from '../utils/index.js'\nimport { useServiceTemps } from './temps.js'\nimport { useServiceClones } from './clones.js'\nimport { useServiceStorage } from './storage.js'\n\ninterface UseAllStorageOptions {\n  getIdField: (val: AnyData) => any\n  setupInstance: any\n}\n\nexport function useAllStorageTypes<M extends AnyData>(options: UseAllStorageOptions) {\n  const { getIdField, setupInstance } = options\n\n  /**\n   * Makes a copy of the Model instance with __isClone properly set\n   * Private\n   */\n  const makeCopy = (item: M, data: AnyData = {}, { isClone }: MakeCopyOptions) => {\n    const copied = fastCopy(item)\n    Object.assign(copied, data)\n    // instance.__isTemp\n    Object.defineProperty(copied, '__isTemp', {\n      configurable: true,\n      enumerable: false,\n      get() {\n        return this[this.__idField] == null\n      },\n    })\n    const withExtras = defineValues(copied, {\n      __isClone: isClone,\n      __tempId: item.__tempId,\n    })\n    return withExtras\n  }\n\n  // item storage\n  const itemStorage = useServiceStorage<M>({\n    getId: getIdField,\n    beforeWrite: setupInstance,\n    onRead: setupInstance,\n  })\n\n  // temp item storage\n  const { tempStorage, moveTempToItems } = useServiceTemps<M>({\n    getId: item => item.__tempId,\n    itemStorage,\n    beforeWrite: setupInstance,\n    onRead: setupInstance,\n  })\n\n  // clones\n  const { cloneStorage, clone, commit, reset, markAsClone } = useServiceClones<M>({\n    itemStorage,\n    tempStorage,\n    makeCopy,\n    beforeWrite: (item) => {\n      markAsClone(item)\n      return setupInstance(item)\n    },\n    onRead: setupInstance,\n  })\n\n  /**\n   * Stores the provided item in the correct storage (itemStorage, tempStorage, or cloneStorage).\n   * If an item has both an id and a tempId, it gets moved from tempStorage to itemStorage.\n   * Private\n   */\n  const addItemToStorage = (item: M) => {\n    const id = getIdField(item)\n    item = setupInstance(item)\n\n    if (item.__isClone)\n      return cloneStorage.merge(item)\n    else if (id != null && item.__tempId != null)\n      return moveTempToItems(item)\n    else if (id != null)\n      return itemStorage.merge(item)\n    else if (tempStorage && item.__tempId != null)\n      return tempStorage?.merge(item)\n\n    return itemStorage.merge(item)\n  }\n\n  return {\n    itemStorage,\n    tempStorage,\n    cloneStorage,\n    clone,\n    commit,\n    reset,\n    addItemToStorage,\n  }\n}\n","import type { Query } from '@feathersjs/feathers'\n\nimport { computed, unref } from 'vue-demi'\nimport type { MaybeRef } from '@vueuse/core'\nimport type { AnyData } from '../types.js'\nimport { useModelInstance } from '../modeling/use-model-instance'\nimport { useServiceLocal } from './local-queries.js'\n\nimport { useAllStorageTypes } from './all-storage-types.js'\n\nexport interface UseDataStoreOptions {\n  idField: string\n  ssr?: MaybeRef<boolean>\n  customSiftOperators?: Record<string, any>\n  setupInstance?: any\n}\n\nfunction makeDefaultOptions() {\n  return {\n    skipGetIfExists: false,\n  }\n}\n\nexport function useDataStore<M extends AnyData, Q extends Query>(_options: UseDataStoreOptions) {\n  const options = Object.assign({}, makeDefaultOptions(), _options)\n  const { idField, customSiftOperators } = options\n\n  // storage\n  const { itemStorage, tempStorage, cloneStorage, clone, commit, reset, addItemToStorage } = useAllStorageTypes<M>({\n    getIdField: (val: AnyData) => val[idField],\n    setupInstance,\n  })\n\n  // local data filtering\n  const { findInStore, findOneInStore, countInStore, getFromStore, createInStore, patchInStore, removeFromStore }\n    = useServiceLocal<M, Q>({\n      idField,\n      itemStorage,\n      tempStorage,\n      cloneStorage,\n      addItemToStorage,\n      customSiftOperators,\n    })\n\n  function setupInstance<N extends M>(this: any, data: N) {\n    const asBaseModel = useModelInstance(data, {\n      idField,\n      clonesById: cloneStorage.byId,\n      clone,\n      commit,\n      reset,\n      createInStore,\n      removeFromStore,\n    })\n\n    if (data.__isSetup) {\n      return asBaseModel\n    }\n    else {\n      const afterSetup = options.setupInstance ? options.setupInstance(asBaseModel) : asBaseModel\n      Object.defineProperty(afterSetup, '__isSetup', { value: true })\n      return afterSetup\n    }\n  }\n\n  const isSsr = computed(() => {\n    const ssr = unref(options.ssr)\n    return !!ssr\n  })\n\n  function clearAll() {\n    itemStorage.clear()\n    tempStorage.clear()\n    cloneStorage.clear()\n  }\n\n  const store = {\n    new: setupInstance,\n    idField,\n    isSsr,\n\n    // items\n    itemsById: itemStorage.byId,\n    items: itemStorage.list,\n    itemIds: itemStorage.ids,\n\n    // temps\n    tempsById: tempStorage.byId,\n    temps: tempStorage.list,\n    tempIds: tempStorage.ids,\n\n    // clones\n    clonesById: cloneStorage.byId,\n    clones: cloneStorage.list,\n    cloneIds: cloneStorage.ids,\n    clone,\n    commit,\n    reset,\n\n    // local queries\n    findInStore,\n    findOneInStore,\n    countInStore,\n    createInStore,\n    getFromStore,\n    patchInStore,\n    removeFromStore,\n    clearAll,\n  }\n\n  return store\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createDebug = exports.setDebug = exports.noopDebug = void 0;\nconst debuggers = {};\nfunction noopDebug() {\n    return function () { };\n}\nexports.noopDebug = noopDebug;\nlet defaultInitializer = noopDebug;\nfunction setDebug(debug) {\n    defaultInitializer = debug;\n    Object.keys(debuggers).forEach((name) => {\n        debuggers[name] = debug(name);\n    });\n}\nexports.setDebug = setDebug;\nfunction createDebug(name) {\n    if (!debuggers[name]) {\n        debuggers[name] = defaultInitializer(name);\n    }\n    return (...args) => debuggers[name](...args);\n}\nexports.createDebug = createDebug;\n//# sourceMappingURL=debug.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createSymbol = exports.isPromise = exports._ = exports.stripSlashes = void 0;\n// Removes all leading and trailing slashes from a path\nfunction stripSlashes(name) {\n    return name.replace(/^(\\/+)|(\\/+)$/g, '');\n}\nexports.stripSlashes = stripSlashes;\n// A set of lodash-y utility functions that use ES6\nexports._ = {\n    each(obj, callback) {\n        if (obj && typeof obj.forEach === 'function') {\n            obj.forEach(callback);\n        }\n        else if (exports._.isObject(obj)) {\n            Object.keys(obj).forEach((key) => callback(obj[key], key));\n        }\n    },\n    some(value, callback) {\n        return Object.keys(value)\n            .map((key) => [value[key], key])\n            .some(([val, key]) => callback(val, key));\n    },\n    every(value, callback) {\n        return Object.keys(value)\n            .map((key) => [value[key], key])\n            .every(([val, key]) => callback(val, key));\n    },\n    keys(obj) {\n        return Object.keys(obj);\n    },\n    values(obj) {\n        return exports._.keys(obj).map((key) => obj[key]);\n    },\n    isMatch(obj, item) {\n        return exports._.keys(item).every((key) => obj[key] === item[key]);\n    },\n    isEmpty(obj) {\n        return exports._.keys(obj).length === 0;\n    },\n    isObject(item) {\n        return typeof item === 'object' && !Array.isArray(item) && item !== null;\n    },\n    isObjectOrArray(value) {\n        return typeof value === 'object' && value !== null;\n    },\n    extend(first, ...rest) {\n        return Object.assign(first, ...rest);\n    },\n    omit(obj, ...keys) {\n        const result = exports._.extend({}, obj);\n        keys.forEach((key) => delete result[key]);\n        return result;\n    },\n    pick(source, ...keys) {\n        return keys.reduce((result, key) => {\n            if (source[key] !== undefined) {\n                result[key] = source[key];\n            }\n            return result;\n        }, {});\n    },\n    // Recursively merge the source object into the target object\n    merge(target, source) {\n        if (exports._.isObject(target) && exports._.isObject(source)) {\n            Object.keys(source).forEach((key) => {\n                if (exports._.isObject(source[key])) {\n                    if (!target[key]) {\n                        Object.assign(target, { [key]: {} });\n                    }\n                    exports._.merge(target[key], source[key]);\n                }\n                else {\n                    Object.assign(target, { [key]: source[key] });\n                }\n            });\n        }\n        return target;\n    }\n};\n// Duck-checks if an object looks like a promise\nfunction isPromise(result) {\n    return exports._.isObject(result) && typeof result.then === 'function';\n}\nexports.isPromise = isPromise;\nfunction createSymbol(name) {\n    return typeof Symbol !== 'undefined' ? Symbol.for(name) : name;\n}\nexports.createSymbol = createSymbol;\n__exportStar(require(\"./debug\"), exports);\n//# sourceMappingURL=index.js.map","import type { ComputedRef, Ref } from 'vue-demi'\nimport { ref, set } from 'vue-demi'\nimport stringify from 'fast-json-stable-stringify'\nimport { _ } from '@feathersjs/commons/lib'\nimport { deepUnref, getId, hasOwn } from '../utils/index.js'\nimport type { Params, Query, QueryInfo } from '../types.js'\nimport type { PaginationState, UpdatePaginationForQueryOptions } from './types.js'\n\nexport interface UseServicePagination {\n  idField: string\n  isSsr: ComputedRef<boolean>\n  defaultLimit?: number\n}\n\nexport function useServicePagination(options: UseServicePagination) {\n  const { idField, isSsr } = options\n  const defaultLimit = options.defaultLimit || 10\n\n  const pagination = ref({}) as Ref<PaginationState>\n\n  function clearPagination() {\n    const { defaultLimit, defaultSkip } = pagination.value\n    pagination.value = { defaultLimit, defaultSkip } as any\n  }\n\n  /**\n   * Stores pagination data on state.pagination based on the query identifier\n   * (qid) The qid must be manually assigned to `params.qid`\n   */\n  function updatePaginationForQuery({\n    qid,\n    response,\n    query = {},\n    preserveSsr = false,\n  }: UpdatePaginationForQueryOptions) {\n    const { data, total } = response\n    const ids = data.map((i: any) => getId(i, idField))\n    const queriedAt = new Date().getTime()\n    const { queryId, queryParams, pageId, pageParams } = getQueryInfo({ qid, query })\n\n    if (!pagination.value[qid])\n      set(pagination.value, qid, {})\n\n    if (!hasOwn(query, '$limit') && hasOwn(response, 'limit'))\n      set(pagination.value, 'defaultLimit', response.limit)\n\n    if (!hasOwn(query, '$skip') && hasOwn(response, 'skip'))\n      set(pagination.value, 'defaultSkip', response.skip)\n\n    const mostRecent = {\n      query,\n      queryId,\n      queryParams,\n      pageId,\n      pageParams,\n      queriedAt,\n      total,\n    }\n\n    const existingPageData = pagination.value[qid]?.[queryId]?.[pageId as string]\n\n    const qidData = pagination.value[qid] || {}\n    Object.assign(qidData, { mostRecent })\n\n    set(qidData, queryId, qidData[queryId] || {})\n    const queryData = {\n      total,\n      queryParams,\n    }\n\n    set(qidData, queryId, Object.assign({}, qidData[queryId], queryData))\n\n    const ssr = preserveSsr ? existingPageData?.ssr : isSsr.value\n\n    const pageData = {\n      [pageId as string]: { pageParams, ids, queriedAt, ssr: !!ssr },\n    }\n\n    Object.assign(qidData[queryId], pageData)\n\n    const newState = Object.assign({}, pagination.value[qid], qidData)\n\n    set(pagination.value, qid, newState)\n  }\n\n  function unflagSsr(params: Params<Query>) {\n    const queryInfo = getQueryInfo(params)\n    const { qid, queryId, pageId } = queryInfo\n\n    const pageData = pagination.value[qid]?.[queryId]?.[pageId as string]\n    pageData.ssr = false\n  }\n\n  function getQueryInfo(_params: Params<Query>): QueryInfo {\n    const params = deepUnref(_params)\n    const { query = {} } = params\n    const qid = params.qid || 'default'\n    const $limit = query?.$limit || defaultLimit\n    const $skip = query?.$skip || 0\n\n    const pageParams = $limit !== undefined ? { $limit, $skip } : undefined\n    const pageId = pageParams ? stringify(pageParams) : undefined\n\n    const queryParams = _.omit(query, '$limit', '$skip')\n    const queryId = stringify(queryParams)\n\n    return {\n      qid,\n      query,\n      queryId,\n      queryParams,\n      pageParams,\n      pageId,\n      isExpired: false,\n    }\n  }\n\n  return {\n    pagination,\n    updatePaginationForQuery,\n    unflagSsr,\n    getQueryInfo,\n    clearPagination,\n  }\n}\n","import type { NullableId } from '@feathersjs/feathers'\nimport type { Ref } from 'vue-demi'\nimport { computed, del, ref, set } from 'vue-demi'\nimport type { RequestTypeById } from './types.js'\n\nfunction defaultPending() {\n  return {\n    find: 0,\n    count: 0,\n    get: 0,\n    create: 0,\n    update: 0,\n    patch: 0,\n    remove: 0,\n  }\n}\n\nexport function useServicePending() {\n  const isPending = ref(defaultPending())\n\n  const createPendingById = ref({}) as Ref<Record<string | number | symbol, true>>\n  const updatePendingById = ref({}) as Ref<Record<string | number | symbol, true>>\n  const patchPendingById = ref({}) as Ref<Record<string | number | symbol, true>>\n  const removePendingById = ref({}) as Ref<Record<string | number | symbol, true>>\n\n  const isFindPending = computed(() => {\n    return isPending.value.find > 0\n  })\n\n  const isCountPending = computed(() => {\n    return isPending.value.count > 0\n  })\n\n  const isGetPending = computed(() => {\n    return isPending.value.get > 0\n  })\n\n  const isCreatePending = computed(() => {\n    return isPending.value.create > 0 || Object.keys(createPendingById.value).length > 0\n  })\n\n  const isUpdatePending = computed(() => {\n    return isPending.value.update > 0 || Object.keys(updatePendingById.value).length > 0\n  })\n\n  const isPatchPending = computed(() => {\n    return isPending.value.patch > 0 || Object.keys(patchPendingById.value).length > 0\n  })\n\n  const isRemovePending = computed(() => {\n    return isPending.value.remove > 0 || Object.keys(removePendingById.value).length > 0\n  })\n\n  function setPending(method: 'find' | 'count' | 'get' | 'create' | 'update' | 'patch' | 'remove', value: boolean) {\n    if (value)\n      isPending.value[method]++\n    else isPending.value[method]--\n  }\n\n  function setPendingById(id: NullableId, method: RequestTypeById, val: boolean) {\n    if (id == null)\n      return\n\n    let place\n\n    if (method === 'create')\n      place = createPendingById.value\n    else if (method === 'update')\n      place = updatePendingById.value\n    else if (method === 'patch')\n      place = patchPendingById.value\n    else if (method === 'remove')\n      place = removePendingById.value\n\n    if (val)\n      set(place, id, true)\n    else del(place, id)\n  }\n\n  function unsetPendingById(...ids: NullableId[]) {\n    ids.forEach((id) => {\n      if (id == null)\n        return\n      del(createPendingById.value, id)\n      del(updatePendingById.value, id)\n      del(patchPendingById.value, id)\n      del(removePendingById.value, id)\n    })\n  }\n\n  function clearAllPending() {\n    isPending.value = defaultPending()\n\n    createPendingById.value = {}\n    updatePendingById.value = {}\n    patchPendingById.value = {}\n    removePendingById.value = {}\n  }\n\n  return {\n    isPending,\n    createPendingById,\n    updatePendingById,\n    patchPendingById,\n    removePendingById,\n    isFindPending,\n    isCountPending,\n    isGetPending,\n    isCreatePending,\n    isUpdatePending,\n    isPatchPending,\n    isRemovePending,\n    setPending,\n    setPendingById,\n    unsetPendingById,\n    clearAllPending,\n  }\n}\n","import type { Id } from '@feathersjs/feathers'\nimport { del, reactive, set } from 'vue-demi'\nimport type { MaybeArray } from '../types.js'\nimport { getArray } from '../utils/index.js'\nimport type { EventLocks, EventName } from './types.js'\n\nexport function useServiceEventLocks() {\n  const eventLocks = reactive<EventLocks>({\n    created: {},\n    patched: {},\n    updated: {},\n    removed: {},\n  })\n\n  function toggleEventLock(data: MaybeArray<Id>, event: EventName) {\n    const { items: ids } = getArray(data)\n    ids.forEach((id) => {\n      const currentLock = eventLocks[event][id]\n      if (currentLock) {\n        clearEventLock(data, event)\n      }\n      else {\n        set(eventLocks[event], id, true)\n        // auto-clear event lock after 250 ms\n        setTimeout(() => {\n          clearEventLock(data, event)\n        }, 250)\n      }\n    })\n  }\n  function clearEventLock(data: MaybeArray<Id>, event: EventName) {\n    const { items: ids } = getArray(data)\n    ids.forEach((id) => {\n      del(eventLocks[event], id)\n    })\n  }\n  return { eventLocks, toggleEventLock, clearEventLock }\n}\n","import { reactive } from 'vue'\nimport type { AnyData } from '../types'\n\nexport function useSsrQueryCache() {\n  const resultsByQid = reactive<Record<string, AnyData>>({})\n\n  function getQid(qid: string) {\n    return resultsByQid[qid]\n  }\n  function setQid(qid: string, data: any) {\n    resultsByQid[qid] = data\n  }\n  function clearQid(qid: string) {\n    delete resultsByQid[qid]\n  }\n  function clearAllQids() {\n    Object.keys(resultsByQid).forEach((qid) => {\n      clearQid(qid)\n    })\n  }\n\n  return { resultsByQid, getQid, setQid, clearQid, clearAllQids }\n}\n","import type { Query } from '@feathersjs/feathers'\n\nimport { computed, unref } from 'vue-demi'\nimport type { MaybeRef } from '@vueuse/core'\nimport type { AnyData, CustomFilter } from '../types.js'\nimport { useModelInstance } from '../modeling/use-model-instance'\nimport { useServiceLocal } from './local-queries.js'\n\nimport { useServicePagination } from './pagination.js'\nimport { useServicePending } from './pending.js'\nimport { useServiceEventLocks } from './event-locks.js'\nimport { useAllStorageTypes } from './all-storage-types.js'\nimport { useSsrQueryCache } from './ssr-query-cache.js'\n\nexport interface UseServiceStoreOptions {\n  idField: string\n  servicePath: string\n  defaultLimit?: number\n  whitelist?: string[]\n  paramsForServer?: string[]\n  skipGetIfExists?: boolean\n  ssr?: MaybeRef<boolean>\n  customSiftOperators?: Record<string, any>\n  customFilters?: CustomFilter[]\n  setupInstance?: any\n}\n\nfunction makeDefaultOptions() {\n  return {\n    skipGetIfExists: false,\n  }\n}\n\nexport function useServiceStore<M extends AnyData, Q extends Query>(_options: UseServiceStoreOptions) {\n  const options = Object.assign({}, makeDefaultOptions(), _options)\n  const { idField, servicePath, whitelist, paramsForServer, defaultLimit, customSiftOperators, customFilters } = options\n\n  // storage\n  const { itemStorage, tempStorage, cloneStorage, clone, commit, reset, addItemToStorage } = useAllStorageTypes<M>({\n    getIdField: (val: AnyData) => val[idField],\n    setupInstance,\n  })\n\n  // local data filtering\n  const { findInStore, findOneInStore, countInStore, getFromStore, createInStore, patchInStore, removeFromStore }\n    = useServiceLocal<M, Q>({\n      idField,\n      itemStorage,\n      tempStorage,\n      cloneStorage,\n      addItemToStorage,\n      whitelist,\n      paramsForServer,\n      customSiftOperators,\n      customFilters,\n    })\n\n  function setupInstance<N extends M>(this: any, data: N) {\n    const asBaseModel = useModelInstance(data, {\n      idField,\n      clonesById: cloneStorage.byId,\n      clone,\n      commit,\n      reset,\n      createInStore,\n      removeFromStore,\n    })\n\n    if (data.__isSetup) {\n      return asBaseModel\n    }\n    else {\n      const afterSetup = options.setupInstance ? options.setupInstance(asBaseModel) : asBaseModel\n      Object.defineProperty(afterSetup, '__isSetup', { value: true })\n      return afterSetup\n    }\n  }\n\n  // pending state\n  const pendingState = useServicePending()\n\n  const isSsr = computed(() => {\n    const ssr = unref(options.ssr)\n    return !!ssr\n  })\n\n  // pagination\n  const { pagination, clearPagination, updatePaginationForQuery, getQueryInfo, unflagSsr } = useServicePagination({\n    idField,\n    isSsr,\n    defaultLimit,\n  })\n\n  // ssr qid cache\n  const { resultsByQid, getQid, setQid, clearQid, clearAllQids } = useSsrQueryCache()\n\n  function clearAll() {\n    itemStorage.clear()\n    tempStorage.clear()\n    cloneStorage.clear()\n    clearPagination()\n    pendingState.clearAllPending()\n    clearAllQids()\n  }\n\n  // event locks\n  const eventLocks = useServiceEventLocks()\n\n  const store = {\n    new: setupInstance,\n    idField,\n    servicePath,\n    isSsr,\n    defaultLimit,\n\n    // items\n    itemsById: itemStorage.byId,\n    items: itemStorage.list,\n    itemIds: itemStorage.ids,\n\n    // temps\n    tempsById: tempStorage.byId,\n    temps: tempStorage.list,\n    tempIds: tempStorage.ids,\n\n    // clones\n    clonesById: cloneStorage.byId,\n    clones: cloneStorage.list,\n    cloneIds: cloneStorage.ids,\n    clone,\n    commit,\n    reset,\n\n    // local queries\n    findInStore,\n    findOneInStore,\n    countInStore,\n    createInStore,\n    getFromStore,\n    patchInStore,\n    removeFromStore,\n    clearAll,\n\n    // ssr qid cache\n    resultsByQid,\n    getQid,\n    setQid,\n    clearQid,\n    clearAllQids,\n\n    // server options\n    whitelist,\n    paramsForServer,\n\n    // server pagination\n    pagination,\n    updatePaginationForQuery,\n    unflagSsr,\n    getQueryInfo,\n    ...pendingState,\n    ...eventLocks,\n  }\n\n  return store\n}\n","import { watch } from 'vue-demi'\n\ntype EventName = 'created' | 'updated' | 'patched' | 'removed'\n\ninterface QueuePromiseState {\n  promise: Promise<any>\n  isResolved: boolean\n  getter: 'isCreatePending' | 'isUpdatePending' | 'isPatchPending' | 'isRemovePending'\n}\n\nconst events = ['created', 'updated', 'patched', 'removed']\nconst state: { [key: string]: QueuePromiseState } = {}\n\nexport function makeGetterName(event: EventName) {\n  return `is${event.slice(0, 1).toUpperCase()}${event.slice(1, event.length - 1)}Pending`\n}\n\nexport function makeState(event: EventName) {\n  return {\n    promise: null,\n    isResolved: false,\n    getter: makeGetterName(event),\n  }\n}\nexport function resetState() {\n  events.forEach((e) => {\n    delete state[e]\n  })\n}\n/**\n * Creates or reuses a promise for each event type, like \"created\". The promise\n * resolves when the matching `isPending` attribute, like \"isCreatePending\" becomes\n * false.\n * @param store\n * @param event\n * @returns\n */\nexport function useQueuePromise(store: any, event: EventName) {\n  state[event] = state[event] || makeState(event)\n\n  if (!state[event].promise || state[event].isResolved) {\n    state[event].promise = new Promise((resolve) => {\n      const stopWatching = watch(\n        () => store[state[event].getter],\n        async (isPending) => {\n          if (!isPending) {\n            setTimeout(() => {\n              stopWatching()\n              state[event].isResolved = true\n              resolve(state[event].isResolved)\n            }, 0)\n          }\n        },\n        { immediate: true },\n      )\n    })\n  }\n  return state[event].promise\n}\n","module.exports = debounce;\n\nfunction debounce(fn, delay, atStart, guarantee) {\n  var timeout;\n  var args;\n  var self;\n\n  return function debounced() {\n    self = this;\n    args = Array.prototype.slice.call(arguments);\n\n    if (timeout && (atStart || guarantee)) {\n      return;\n    } else if (!atStart) {\n      clear();\n\n      timeout = setTimeout(run, delay);\n      return timeout;\n    }\n\n    timeout = setTimeout(clear, delay);\n    fn.apply(self, args);\n\n    function run() {\n      clear();\n      fn.apply(self, args);\n    }\n\n    function clear() {\n      clearTimeout(timeout);\n      timeout = null;\n    }\n  };\n}\n","import type { FeathersService } from '@feathersjs/feathers'\nimport { del, ref, set } from 'vue-demi'\nimport _debounce from 'just-debounce'\nimport type { AnyData } from '../types.js'\nimport { convertData, getId, hasOwn } from '../utils/index.js'\nimport type { PiniaService } from '../create-pinia-service.js'\nimport type { HandleEvents, HandledEvents } from './types.js'\n\ninterface UseServiceStoreEventsOptions<M extends AnyData> {\n  service: PiniaService<FeathersService<any, any>>\n  debounceEventsTime?: number\n  debounceEventsGuarantee?: boolean\n  handleEvents?: HandleEvents<M>\n}\n\nexport function useServiceEvents<M extends AnyData>(options: UseServiceStoreEventsOptions<M>) {\n  if (!options.service || options.handleEvents === false)\n    return\n\n  const service = options.service\n\n  const addOrUpdateById = ref({})\n  const removeItemsById = ref({})\n\n  const flushAddOrUpdateQueue = _debounce(\n    async () => {\n      const values = Object.values(addOrUpdateById.value)\n      if (values.length === 0)\n        return\n      service.store.createInStore(values)\n      addOrUpdateById.value = {}\n    },\n    options.debounceEventsTime || 20,\n    undefined,\n    options.debounceEventsGuarantee,\n  )\n\n  function enqueueAddOrUpdate(item: any) {\n    const id = getId(item, service.store.idField)\n    if (!id)\n      return\n\n    set(addOrUpdateById, id, item)\n\n    if (hasOwn(removeItemsById.value, id))\n      del(removeItemsById, id)\n\n    flushAddOrUpdateQueue()\n  }\n\n  const flushRemoveItemQueue = _debounce(\n    () => {\n      const values = Object.values(removeItemsById.value)\n      if (values.length === 0)\n        return\n      service.store.removeFromStore(values)\n      removeItemsById.value = {}\n    },\n    options.debounceEventsTime || 20,\n    undefined,\n    options.debounceEventsGuarantee,\n  )\n\n  function enqueueRemoval(item: any) {\n    const id = getId(item, service.store.idField)\n    if (!id)\n      return\n\n    set(removeItemsById, id, item)\n\n    if (hasOwn(addOrUpdateById.value, id))\n      del(addOrUpdateById.value, id)\n\n    flushRemoveItemQueue()\n  }\n\n  function handleEvent(eventName: HandledEvents, item: any) {\n    const handler = (options.handleEvents as any)?.[eventName]\n    if (handler === false)\n      return\n\n    /**\n     * For `created` events, we don't know the id since it gets assigned on the server. Also, since `created` events\n     * arrive before the `create` response, we only act on other events. For all other events, toggle the event lock.\n     */\n    const id = getId(item, service.store.idField)\n    if (eventName !== 'created' && service.store.eventLocks[eventName][id]) {\n      service.store.toggleEventLock(id, eventName)\n      return\n    }\n\n    if (handler) {\n      const handled = handler(item, { service })\n      if (!handled)\n        return\n    }\n\n    if (!options.debounceEventsTime)\n      eventName === 'removed' ? service.store.removeFromStore(item) : service.store.createInStore(item)\n    else eventName === 'removed' ? enqueueRemoval(item) : enqueueAddOrUpdate(item)\n  }\n\n  // Listen to socket events when available.\n  service.on('created', (item: any) => {\n    const data = convertData(service, item)\n    handleEvent('created', data)\n  })\n  service.on('updated', (item: any) => {\n    const data = convertData(service, item)\n    handleEvent('updated', data)\n  })\n  service.on('patched', (item: any) => {\n    const data = convertData(service, item)\n    handleEvent('patched', data)\n  })\n  service.on('removed', (item: any) => {\n    const data = convertData(service, item)\n    handleEvent('removed', data)\n  })\n}\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport { deepUnref } from '../utils/index.js'\n\n/**\n * deeply unrefs `params.query`\n */\nexport function unrefQuery() {\n  return async (context: HookContext, next: NextFunction) => {\n    if (context.params.value)\n      context.params = deepUnref(context.params)\n\n    if (context.params.query)\n      context.params.query = deepUnref(context.params.query)\n\n    if (context.method === 'find') {\n      const query = context.params.query || {}\n      if (query.$limit == null)\n        query.$limit = context.service.store.defaultLimit\n\n      if (query.$skip == null)\n        query.$skip = 0\n\n      context.params.query = query\n    }\n\n    next && await next()\n  }\n}\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\n\n/**\n * Controls pending state\n */\nexport function setPending() {\n  return async (context: HookContext, next: NextFunction) => {\n    const store = context.service.store\n    let unsetPending\n\n    if (!store.isSsr) {\n      const method = context.method === 'find' ? (context.params.query?.$limit === 0 ? 'count' : 'find') : context.method\n\n      store.setPending(method, true)\n      if (context.id != null && method !== 'get')\n        store.setPendingById(context.id, method, true)\n\n      const isTemp = context.data?.__isTemp\n      const tempId = context.data?.__tempId\n      if (isTemp && method === 'create')\n        store.setPendingById(context.data.__tempId, method, true)\n\n      unsetPending = () => {\n        store.setPending(method, false)\n        const id = context.id != null ? context.id : tempId\n        if (id != null && method !== 'get')\n          store.setPendingById(id, method, false)\n      }\n    }\n\n    try {\n      await next()\n    }\n    catch (error) {\n      if (unsetPending)\n        unsetPending()\n\n      throw error\n    }\n\n    if (unsetPending)\n      unsetPending()\n  }\n}\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\n\nexport function eventLocks() {\n  return async (context: HookContext, next: NextFunction) => {\n    const { id, method } = context\n    const store = context.service.store\n    const isLockableMethod = ['update', 'patch', 'remove'].includes(method)\n    const eventNames: any = {\n      update: 'updated',\n      patch: 'patched',\n      remove: 'removed',\n    }\n    const eventName = eventNames[method]\n\n    if (isLockableMethod && id && !store.isSsr)\n      store.toggleEventLock(id, eventName)\n\n    await next()\n\n    if (isLockableMethod && id && !store.isSsr)\n      store.clearEventLock(id, eventName)\n  }\n}\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport { restoreTempIds } from '../utils/index.js'\n\nexport function syncStore() {\n  return async (context: HookContext, next: NextFunction) => {\n    const { method, params } = context\n    const store = context.service.store\n\n    if (method === 'patch' && params.data)\n      context.data = params.data\n\n    if (next)\n      await next()\n\n    if (!context.params.skipStore) {\n      if (method === 'remove') {\n        store.removeFromStore(context.result)\n      }\n      else if (method === 'create') {\n        const restoredTempIds = restoreTempIds(context.data, context.result)\n        context.result = store.createInStore(restoredTempIds)\n      }\n      else if (method === 'find' && Array.isArray(context.result.data)) {\n        context.result.data = store.createInStore(context.result.data)\n      }\n      else {\n        context.result = store.createInStore(context.result)\n      }\n\n      // Update pagination based on the qid\n      if (method === 'find' && context.result.total) {\n        const { qid = 'default', query, preserveSsr = false } = context.params\n        store.updatePaginationForQuery({ qid, response: context.result, query, preserveSsr })\n      }\n    }\n  }\n}\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport type { AnyData } from '../types.js'\n\nexport function makeModelInstances() {\n  return async (context: HookContext, next: NextFunction) => {\n    if (next)\n      await next()\n\n    if (context.service.new) {\n      if (Array.isArray(context.result?.data))\n        context.result.data = context.result.data.map((i: AnyData) => context.service.new(i))\n\n      else if (Array.isArray(context.result))\n        context.result = context.result.map((i: AnyData) => context.service.new(i))\n\n      else\n        context.result = context.service.new(context.result)\n    }\n  }\n}\n","import type { HookContext, Id, NextFunction } from '@feathersjs/feathers'\n\n/**\n * Assures that the client reuses SSR-provided data instead of re-making the same query.\n *\n * Checks the `store.pagination` object to see if a query's results came from SSR-provided data.\n * If the data was from SSR, the SSR'd data is used and then set to `fromSSR = false` to allow\n * normal queries to happen again.\n */\nexport function handleFindSsr() {\n  return async (context: HookContext, next: NextFunction) => {\n    const store = context.service.store\n\n    if (context.method === 'find') {\n      const { params } = context\n      const info = store.getQueryInfo(params)\n      const qidData = store.pagination[info.qid]\n      const queryData = qidData?.[info.queryId]\n      const pageData = queryData?.[info.pageId as string]\n\n      if (pageData?.ssr) {\n        context.result = {\n          data: pageData.ids.map((id: Id) => store.getFromStore(id).value),\n          limit: pageData.pageParams.$limit,\n          skip: pageData.pageParams.$skip,\n          total: queryData.total,\n          fromSsr: true,\n        }\n        if (!params.preserveSsr)\n          store.unflagSsr(params)\n      }\n    }\n\n    if (next)\n      await next()\n  }\n}\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport { hasOwn } from '../utils/index.js'\n\n/**\n * Normalizes two things\n *  - pagination across all adapters, including @feathersjs/memory\n *  - the find response so that it always holds data at `response.data`\n * @returns { data: AnyData[] }\n */\nexport function normalizeFind() {\n  return async (context: HookContext, next?: NextFunction) => {\n  // Client-side services, like feathers-memory, require paginate.default to be truthy.\n    if (context.method === 'find') {\n      const { params } = context\n      const { query = {} } = params\n      const isPaginated = params.paginate === true || hasOwn(query, '$limit') || hasOwn(query, '$skip')\n      if (isPaginated)\n        params.paginate = { default: true }\n    }\n\n    next && await next()\n\n    // this makes sure it only affects finds that are not paginated and are not custom.\n    // so the custom find responses fall through.\n    if (context.method === 'find' && !context.result?.data && Array.isArray(context.result)) {\n      context.result = {\n        data: context.result,\n        limit: context.params.$limit || context.result.length,\n        skip: context.params.$skip || 0,\n        total: context.result.length,\n      }\n    }\n  }\n}\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\n\nexport function skipGetIfExists() {\n  return async (context: HookContext, next: NextFunction) => {\n    const { params, id } = context\n    const store = context.service.store\n\n    if (context.method === 'get' && id != null) {\n      const skipIfExists = params.skipGetIfExists || store.skipGetIfExists\n      delete params.skipGetIfExists\n\n      // If the records is already in store, return it\n      const existingItem = store.getFromStore(context.id, params)\n      if (existingItem && skipIfExists)\n        context.result = existingItem\n    }\n    await next()\n  }\n}\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport fastCopy from 'fast-copy'\nimport { diff, pickDiff } from '../utils/index.js'\n\nexport function patchDiffing() {\n  return async (context: HookContext, next: NextFunction) => {\n    const { method, data, params, id } = context\n    const store = context.service.store\n\n    let rollbackData: any\n    let clone: any\n    const shouldDiff = method === 'patch' && !params.data && (data.__isClone || params.diff)\n\n    if (shouldDiff) {\n      clone = data\n      const original = store.getFromStore(id).value\n      const diffedData = diff(original, clone, params.diff)\n      rollbackData = fastCopy(original)\n\n      // Do eager updating.\n      if (params.eager !== false)\n        data.commit(diffedData)\n\n      // Always include matching values from `params.with`.\n      if (params.with) {\n        const dataFromWith = pickDiff(clone, params.with)\n        // If params.with was an object, merge the values into dataFromWith\n        if (typeof params.with !== 'string' && !Array.isArray(params.with))\n          Object.assign(dataFromWith, params.with)\n\n        Object.assign(diffedData, dataFromWith)\n      }\n\n      context.data = diffedData\n\n      // If diff is empty, return the clone without making a request.\n      if (Object.keys(context.data).length === 0)\n        context.result = clone\n    }\n    else {\n      context.data = fastCopy(data)\n    }\n\n    try {\n      await next()\n    }\n    catch (error) {\n      if (shouldDiff) {\n        // If saving fails, reverse the eager update\n        clone && clone.commit(rollbackData)\n      }\n      throw error\n    }\n  }\n}\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\n\n/**\n * Prevents duplicate requests by cacheing results from qid-enabled queries.\n * Clears the cache on the client after 500ms.\n */\nexport function handleQidCache() {\n  return async (context: HookContext, next: NextFunction) => {\n    const { params } = context\n    const store = context.service.store\n\n    // Reuse any cached results for the same qid\n    // this prevents duplicate requests on the server and client.\n    // The client will cache the result for 500ms. It is assumed that all startup\n    // requests will be completed within 500ms.\n    if (params.qid) {\n      const cached = store.getQid(params.qid)\n\n      // specifically check for undefined because null is a valid value\n      if (cached !== undefined) {\n        // on the client, schedule the value to be removed from the cache after 500ms\n        if (!store.isSsr) {\n          setTimeout(() => {\n            store.clearQid(params.qid)\n          }, 500)\n        }\n\n        // set the result to prevent the request\n        context.result = cached\n        return await next()\n      }\n    }\n\n    await next()\n\n    // on the ssr server, cache the result if params.qid is set\n    if (params.qid && store.isSsr)\n      store.setQid(params.qid, context.result)\n  }\n}\n","import { unrefQuery } from './0-prepare-query.js'\nimport { setPending } from './1-set-pending.js'\nimport { eventLocks } from './2-event-locks.js'\nimport { syncStore } from './3-sync-store.js'\nimport { makeModelInstances } from './4-model-instances.js'\nimport { handleFindSsr } from './5-handle-find-ssr.js'\nimport { normalizeFind } from './6-normalize-find.js'\nimport { skipGetIfExists } from './7-skip-get-if-exists.js'\nimport { patchDiffing } from './8-patch-diffs.js'\nimport { handleQidCache } from './9-ssr-qid-cache.js'\n\nexport { syncStore, setPending, eventLocks, normalizeFind, skipGetIfExists, makeModelInstances }\n\nexport function feathersPiniaHooks() {\n  return [\n    unrefQuery(),\n    setPending(),\n    eventLocks(),\n    syncStore(),\n    makeModelInstances(),\n    handleFindSsr(),\n    normalizeFind(),\n    skipGetIfExists(),\n    patchDiffing(),\n    handleQidCache(),\n  ]\n}\n","import { BadRequest } from '@feathersjs/errors'\nimport type { FeathersService, Params } from '@feathersjs/feathers'\nimport type { AnyData } from '../types.js'\nimport { defineGetters, defineValues } from '../utils/define-properties'\nimport type { PiniaService } from '../create-pinia-service.js'\nimport type { ServiceInstanceProps } from './types.js'\n\nexport type Service = FeathersService | PiniaService<FeathersService>\n\nexport interface useServiceInstanceOptions<S extends Service> {\n  service: S\n  store: any\n}\n\nexport function useServiceInstance<M extends AnyData, S extends Service, P extends Params = Params>(data: M,\n  options: useServiceInstanceOptions<S>) {\n  if (data.__isServiceInstance)\n    return data\n\n  const { service, store } = options\n  const merge = (data: M, toMerge: AnyData) => Object.assign(data, toMerge)\n\n  defineGetters(data, {\n    isPending() {\n      return this.isCreatePending || this.isPatchPending || this.isRemovePending\n    },\n    isSavePending() {\n      return this.isCreatePending || this.isPatchPending\n    },\n    isCreatePending() {\n      return !!(store.createPendingById[this[store.idField]] || store.createPendingById[this.__tempId])\n    },\n    isPatchPending() {\n      return !!store.patchPendingById[this[store.idField]]\n    },\n    isRemovePending() {\n      return !!store.removePendingById[this[store.idField]]\n    },\n  } as any)\n\n  defineValues(data, {\n    __isServiceInstance: true,\n    save(this: M, params?: P) {\n      const id = this[store.idField]\n      return id != null ? this.patch(params) : this.create(params)\n    },\n    create(this: M, params?: P): Promise<M> {\n      return service.create(this, params).then(result => merge(this, result))\n    },\n    patch(this: M, params?: P): Promise<M> {\n      const id = this[store.idField]\n      if (id === undefined)\n        throw new BadRequest('the item has no id')\n      return (service as FeathersService).patch(id as any, this as any, params as any).then(result => merge(this, result))\n    },\n    remove(this: M, params?: P): Promise<M> {\n      if (this.__isTemp) {\n        store.removeFromStore(this.__tempId)\n        return Promise.resolve(this)\n      }\n      else {\n        const id = this[store.idField]\n        return (service as FeathersService).remove(id, params).then(result => merge(this, result))\n      }\n    },\n  })\n\n  return data as M & ServiceInstanceProps<M, AnyData, P>\n}\n","import { defineValues } from '../utils/index.js'\n\nexport function storeAssociated(this: any, data: any, config: Record<string, string>) {\n  const updatedValues: any = {}\n  Object.keys(config).forEach((key) => {\n    const related = data[key]\n    const servicePath = config[key]\n    const service = this.service(servicePath)\n    if (!service)\n      console.error(`there is no service at path ${servicePath}. Check your storeAssociated config`, data, config)\n    if (related && service) {\n      const created = service.createInStore(related)\n      updatedValues[key] = created\n    }\n  })\n\n  defineValues(data, updatedValues)\n}\n","import { computed, watch } from 'vue-demi'\nimport { _ } from '@feathersjs/commons'\nimport debounce from 'just-debounce'\n\n// Writes data to localStorage\nexport function writeToStorage(id: string, data: any, storage: any) {\n  const compressed = JSON.stringify(data)\n  storage.setItem(id, compressed)\n}\n\n// Moves data from localStorage into the store\nexport function hydrateStore(store: any, storage: any) {\n  const data = storage.getItem(store.$id)\n  if (data) {\n    const hydrationData = JSON.parse(data as string) || {}\n    Object.assign(store, hydrationData)\n  }\n}\n\n/**\n *\n * @param store pinia store\n * @param keys an array of keys to watch and write to localStorage.\n */\nexport function syncWithStorage(store: any, stateKeys: Array<string>, storage: Storage = window.localStorage) {\n  hydrateStore(store, storage)\n\n  const debouncedWrite = debounce(writeToStorage, 500)\n  const toWatch = computed(() => _.pick(store, ...stateKeys))\n\n  watch(toWatch, val => debouncedWrite(store.$id, val, storage), { deep: true })\n}\n","/**\n * Clears all services from localStorage. You might use this when a user\n * logs out to make sure their data doesn't persist for the next user.\n *\n * @param storage an object using the Storage interface\n */\nexport function clearStorage(storage: Storage = window.localStorage) {\n  const prefix = 'service:' // replace this with your prefix\n  for (let i = 0; i < storage.length; i++) {\n    const key = storage.key(i)\n    if (key?.startsWith(prefix))\n      storage.removeItem(key)\n  }\n}\n","import type { Application, FeathersService } from '@feathersjs/feathers'\nimport { feathers } from '@feathersjs/feathers'\nimport { defineStore } from 'pinia'\nimport type { HandleEvents } from './stores/index.js'\nimport type { AnyData, CustomFilter } from './types.js'\nimport { PiniaService } from './create-pinia-service.js'\nimport type { Service } from './modeling/use-feathers-instance.js'\nimport { useServiceEvents, useServiceStore } from './stores/index.js'\nimport { feathersPiniaHooks } from './hooks/index.js'\nimport { storeAssociated, useServiceInstance } from './modeling/index.js'\nimport { defineGetters, defineVirtualProperties, defineVirtualProperty, pushToStore } from './utils/index.js'\nimport { syncWithStorage as __sync, clearStorage } from './localstorage/index.js'\n\nexport interface SetupInstanceUtils {\n  app?: any\n  service?: any\n  servicePath?: string\n}\n\nexport interface PiniaServiceConfig {\n  /**\n   * The name of the store to use for this service. Defaults to `service:${servicePath}`.\n   * You can also use storeName to make two services share the same store.\n   */\n  storeName?: string\n  /**\n   * Overrides the service used for instance-level service methods, like patch, and remove.\n   * Useful for \"proxy\" services. For example: `pages/full` loads the page record with populated\n   * data, but you want to patch/remove the record through the `pages` service.\n   */\n  instanceServicePath?: string\n  idField?: string\n  defaultLimit?: number\n  syncWithStorage?: boolean | string[]\n  whitelist?: string[]\n  paramsForServer?: string[]\n  skipGetIfExists?: boolean\n  handleEvents?: HandleEvents<AnyData>\n  debounceEventsTime?: number\n  debounceEventsGuarantee?: boolean\n  setupInstance?: (data: any, utils: SetupInstanceUtils) => any\n  customizeStore?: (data: ReturnType<typeof useServiceStore>) => Record<string, any>\n  customSiftOperators?: Record<string, any>\n  /**\n   * Custom filters are applied before the sift operators. They are useful for custom\n   * filters that are not supported by sift, like `$fuzzy`.\n   */\n  customFilters?: CustomFilter[]\n}\n\nexport interface CreatePiniaClientConfig extends PiniaServiceConfig {\n  idField: string\n  pinia: any\n  ssr?: boolean\n  storage?: Storage\n  services?: Record<string, PiniaServiceConfig>\n}\n\nexport type AppWithServices = {\n  services: { [key: string]: FeathersService }\n}\n\nexport type CreatePiniaServiceTypes<T extends AppWithServices> = {\n  [Key in keyof T['services']]: PiniaService<T['services'][Key]> & T['services'][Key]\n}\n\nexport interface AppExtensions {\n  storeAssociated: (data: any, config: Record<string, string>) => void\n  clearStorage: () => void\n  pushToStore: <Data>(data: Data, servicePath: string) => void\n  defineVirtualProperty: <Data>(data: Data, key: string, getter: any) => void\n  defineVirtualProperties: <Data>(data: Data, getters: Record<string, any>) => void\n}\n\n/**\n * ```ts\n * import { FeathersPiniaClient } from 'feathers-pinia'\n * import { Application, Service } from '@feathersjs/feathers'\n * interface Book {\n *   id: string\n *   title: string\n * }\n * interface ServiceTypes {\n *   books: Service<Book>\n * }\n * export type MyFeathersPiniaApp = FeathersPiniaClient<Application<ServiceTypes>>\n * ```\n */\nexport type FeathersPiniaClient<App extends Application> = Application<CreatePiniaServiceTypes<App>> & AppExtensions\n\nexport function createPiniaClient<App extends Application>(\n  client: App,\n  options: CreatePiniaClientConfig,\n): Application<CreatePiniaServiceTypes<App>> & AppExtensions {\n  const vueApp = feathers()\n\n    ;(vueApp as any).defaultService = function (location: string) {\n    const serviceOptions = options.services?.[location] || {}\n\n    // combine service and global options\n    const idField = serviceOptions.idField || options.idField\n    const defaultLimit = serviceOptions.defaultLimit || options.defaultLimit || 10\n    const whitelist = (serviceOptions.whitelist || []).concat(options.whitelist || [])\n    const paramsForServer = (serviceOptions.paramsForServer || []).concat(options.paramsForServer || [])\n    const handleEvents = serviceOptions.handleEvents || options.handleEvents\n    const debounceEventsTime\n      = serviceOptions.debounceEventsTime != null ? serviceOptions.debounceEventsTime : options.debounceEventsTime\n    const debounceEventsGuarantee\n      = serviceOptions.debounceEventsGuarantee != null\n        ? serviceOptions.debounceEventsGuarantee\n        : options.debounceEventsGuarantee\n    const customSiftOperators = Object.assign({}, serviceOptions.customSiftOperators || {}, options.customSiftOperators || {})\n    const customFilters = [...(serviceOptions.customFilters || []), ...(options.customFilters || [])]\n    function customizeStore(utils: any) {\n      const fromGlobal = Object.assign(utils, options.customizeStore ? options.customizeStore(utils) : utils)\n      const fromService = Object.assign(\n        fromGlobal,\n        serviceOptions.customizeStore ? serviceOptions.customizeStore(fromGlobal) : fromGlobal,\n      )\n      return fromService\n    }\n\n    function wrappedSetupInstance(data: any) {\n      // if serviceOptions.instanceServicePath is set, it's an instance-level override, so use that instead of location\n      const servicePath = serviceOptions.instanceServicePath || location\n      const service = vueApp.service(servicePath) as Service\n\n      const asFeathersModel = useServiceInstance(data, {\n        service,\n        // eslint-disable-next-line @typescript-eslint/no-use-before-define\n        store,\n      })\n\n      // call the provided `setupInstance`\n      const utils = { app: vueApp, service, servicePath }\n      const fromGlobal = options.setupInstance ? options.setupInstance(asFeathersModel, utils) : asFeathersModel\n      const serviceLevel = serviceOptions.setupInstance ? serviceOptions.setupInstance(fromGlobal, utils) : fromGlobal\n      return serviceLevel\n    }\n\n    // create pinia store, or reuse existing one by storeName\n    const storeName = serviceOptions.storeName || `service:${location}`\n    const existingStore = options.pinia._s.get(storeName)\n    let store: any\n    if (existingStore) {\n      store = existingStore\n    }\n    else {\n      const useStore = defineStore(storeName, () => {\n        const utils = useServiceStore({\n          idField,\n          servicePath: location,\n          defaultLimit,\n          whitelist,\n          paramsForServer,\n          customSiftOperators,\n          customFilters,\n          ssr: options.ssr,\n          setupInstance: wrappedSetupInstance,\n        })\n        const custom = customizeStore(utils)\n        return { ...utils, ...custom }\n      })\n      store = useStore(options.pinia)\n    }\n\n    // storage-sync\n    if (!options.ssr && options.storage) {\n      const defaultStorageKeys = ['itemsById', 'pagination']\n      const globalStorageKeys\n        = options.syncWithStorage === true\n          ? defaultStorageKeys\n          : Array.isArray(options.syncWithStorage)\n            ? options.syncWithStorage\n            : []\n      const serviceStorageKeys\n        = serviceOptions.syncWithStorage === true\n          ? defaultStorageKeys\n          : Array.isArray(serviceOptions.syncWithStorage)\n            ? serviceOptions.syncWithStorage\n            : []\n      const syncWithStorage = [...new Set([...globalStorageKeys, ...serviceStorageKeys])]\n      const shouldSyncStorage = syncWithStorage.length > 0\n      if (shouldSyncStorage)\n        __sync(store, syncWithStorage, options.storage)\n    }\n\n    const clientService = client.service(location)\n    const piniaService = new PiniaService(clientService, { store, servicePath: location })\n\n    useServiceEvents({\n      service: piniaService,\n      debounceEventsTime,\n      debounceEventsGuarantee,\n      handleEvents,\n    })\n\n    return piniaService\n  }\n\n  // register hooks on every service\n  const mixin: any = (service: any) => {\n    service.hooks({\n      around: feathersPiniaHooks(),\n    })\n  }\n  vueApp.mixins.push(mixin)\n\n  defineGetters(vueApp, {\n    authentication() {\n      return (client as any).authentication\n    },\n    authenticate() {\n      return (client as any).authenticate\n    },\n    reAuthenticate() {\n      return (client as any).reAuthenticate\n    },\n    logout() {\n      return (client as any).logout\n    },\n    clearStorage() {\n      if (!options.ssr && options.storage)\n        return clearStorage(options.storage)\n    },\n  })\n\n  Object.assign(vueApp, {\n    // TODO: remove in v5\n    storeAssociated,\n    pushToStore<Data>(data: Data, servicePath: string) {\n      const service = vueApp.service(servicePath) as unknown as { createInStore: any }\n      return pushToStore(data, service)\n    },\n    defineVirtualProperty,\n    defineVirtualProperties,\n  })\n\n  return vueApp as FeathersPiniaClient<App>\n}\n","import { FetchClient } from '@feathersjs/rest-client'\nimport type { Params } from '@feathersjs/feathers'\n\n// A feathers-rest transport adapter for https://github.com/unjs/ofetch\nexport class OFetch extends FetchClient {\n  async request(options: any, params: Params) {\n    const fetchOptions = Object.assign({}, options, (params as any).connection)\n\n    fetchOptions.headers = Object.assign({ Accept: 'application/json' }, this.options.headers, fetchOptions.headers)\n\n    if (options.body)\n      fetchOptions.body = options.body\n\n    try {\n      const response = await this.connection.raw(options.url, fetchOptions)\n      const { _data, status } = response\n\n      if (status === 204)\n        return null\n      return _data\n    }\n    catch (error: any) {\n      throw error.data\n    }\n  }\n}\n","export const feathersPiniaAutoImport = {\n  'feathers-pinia': [\n    'useServiceInstance',\n    'useInstanceDefaults',\n    'useDataStore',\n    'useAuth',\n    'createPiniaClient',\n    'defineGetters',\n    'defineSetters',\n    'defineValues',\n    'useBackup',\n  ],\n}\n","export class InvalidTokenError extends Error {\n}\nInvalidTokenError.prototype.name = \"InvalidTokenError\";\nfunction b64DecodeUnicode(str) {\n    return decodeURIComponent(atob(str).replace(/(.)/g, (m, p) => {\n        let code = p.charCodeAt(0).toString(16).toUpperCase();\n        if (code.length < 2) {\n            code = \"0\" + code;\n        }\n        return \"%\" + code;\n    }));\n}\nfunction base64UrlDecode(str) {\n    let output = str.replace(/-/g, \"+\").replace(/_/g, \"/\");\n    switch (output.length % 4) {\n        case 0:\n            break;\n        case 2:\n            output += \"==\";\n            break;\n        case 3:\n            output += \"=\";\n            break;\n        default:\n            throw new Error(\"base64 string is not of the correct length\");\n    }\n    try {\n        return b64DecodeUnicode(output);\n    }\n    catch (err) {\n        return atob(output);\n    }\n}\nexport function jwtDecode(token, options) {\n    if (typeof token !== \"string\") {\n        throw new InvalidTokenError(\"Invalid token specified: must be a string\");\n    }\n    options || (options = {});\n    const pos = options.header === true ? 0 : 1;\n    const part = token.split(\".\")[pos];\n    if (typeof part !== \"string\") {\n        throw new InvalidTokenError(`Invalid token specified: missing part #${pos + 1}`);\n    }\n    let decoded;\n    try {\n        decoded = base64UrlDecode(part);\n    }\n    catch (e) {\n        throw new InvalidTokenError(`Invalid token specified: invalid base64 for part #${pos + 1} (${e.message})`);\n    }\n    try {\n        return JSON.parse(decoded);\n    }\n    catch (e) {\n        throw new InvalidTokenError(`Invalid token specified: invalid json for part #${pos + 1} (${e.message})`);\n    }\n}\n","import type { Ref } from 'vue-demi'\nimport type { NullableId } from '@feathersjs/feathers'\nimport { computed, ref } from 'vue-demi'\nimport { jwtDecode } from 'jwt-decode'\nimport { useCounter } from '../utils/use-counter'\n\ntype SuccessHandler = (result: Record<string, any>) => Promise<Record<string, any> | void>\ntype ErrorHandler = (error: Error) => Promise<void>\n\ninterface UseAuthOptions {\n  api: any\n  servicePath?: string\n  skipTokenCheck?: boolean\n  entityKey?: string\n  onSuccess?: SuccessHandler\n  onError?: ErrorHandler\n  onInitSuccess?: SuccessHandler\n  onInitError?: ErrorHandler\n  onLogoutSuccess?: SuccessHandler\n  onLogoutError?: ErrorHandler\n}\n\nexport interface AuthenticateData {\n  strategy: 'jwt' | 'local'\n  accessToken?: string\n  email?: string\n  password?: string\n}\n\nexport function useAuth<d = AuthenticateData, U = any>(options: UseAuthOptions) {\n  const { api, servicePath, skipTokenCheck } = options\n  const entityService = servicePath ? api.service(servicePath) : null\n  const entityKey = options.entityKey || 'user'\n\n  // external flow\n  const promise = ref() as Ref<Promise<Record<string, any>>>\n  const defaultHandler = async () => undefined\n  const defaultErrorHandler = async (error: any) => {\n    throw error\n  }\n  const onSuccess: SuccessHandler = options.onSuccess || defaultHandler\n  const onError: ErrorHandler = options.onError || defaultErrorHandler\n  const onInitSuccess: SuccessHandler = options.onInitSuccess || defaultHandler\n  const onInitError: ErrorHandler = options.onInitError || defaultHandler\n  const onLogoutSuccess: SuccessHandler = options.onLogoutSuccess || defaultHandler\n  const onLogoutError: ErrorHandler = options.onLogoutError || defaultErrorHandler\n\n  // user\n  const userId = ref<NullableId>(null)\n  const user = computed<U | null>(() => {\n    if (!entityService || !userId.value)\n      return null\n    const u = entityService?.store.itemsById[userId.value]\n    return u || null\n  })\n\n  // error\n  const error = ref<Error | null>(null)\n  const clearError = () => (error.value = null)\n\n  // authenticate\n  const authCounter = useCounter()\n  const isPending = computed(() => !!authCounter.count.value)\n  const isAuthenticated = ref(false)\n  const handleAuthResult = (result: any) => {\n    const entity = result[entityKey]\n    if (entityService && entity) {\n      const stored = entityService.store.createInStore(entity)\n      userId.value = stored[entityService.store.idField] || stored.__tempId\n    }\n    isAuthenticated.value = true\n    return result\n  }\n  const authenticate = async (data?: d) => {\n    authCounter.add()\n    clearError()\n    promise.value = api\n      .authenticate(data)\n      .then(handleAuthResult)\n      .then(async (result: Record<string, any>) => {\n        const _result = await onSuccess(result)\n        return _result || result\n      })\n      .catch((err: any) => {\n        error.value = err\n        return onError(err)\n      })\n      .finally(() => {\n        authCounter.sub()\n      })\n    return promise.value\n  }\n\n  // token check\n  const isTokenExpired = (jwt: string) => {\n    try {\n      const payload = jwtDecode(jwt) as any\n      return new Date().getTime() > payload.exp * 1000\n    }\n    catch (error) {\n      return false\n    }\n  }\n\n  // reauthentication at app start\n  const isInitDone = ref(false)\n  const reAuthenticate = async () => {\n    authCounter.add()\n    promise.value = api.reAuthenticate()\n      .then(handleAuthResult)\n      .then(async (result: Record<string, any>) => {\n        const _result = await onInitSuccess(result)\n        return _result || result\n      })\n      .catch((error: any) => {\n        error.value = error\n        return onInitError(error)\n      })\n      .finally(() => {\n        authCounter.sub()\n        isInitDone.value = true\n      })\n    return promise.value\n  }\n\n  // logout\n  const logoutCounter = useCounter()\n  const isLogoutPending = computed(() => !!logoutCounter.count.value)\n  const logout = async () => {\n    logoutCounter.add()\n    return api\n      .logout()\n      .then((response: any) => {\n        userId.value = null\n        isAuthenticated.value = false\n        return response\n      })\n      .then(onLogoutSuccess)\n      .catch((error: any) => {\n        error.value = error\n        return onLogoutError(error)\n      })\n      .finally(() => logoutCounter.sub())\n  }\n\n  // login redirect\n  const loginRedirect = ref<string | Record<string, any> | null>(null)\n\n  return {\n    userId,\n    user,\n    error,\n    isPending,\n    isLogoutPending,\n    isInitDone,\n    isAuthenticated,\n    loginRedirect,\n    getPromise: () => promise.value,\n    isTokenExpired,\n    authenticate,\n    reAuthenticate,\n    logout,\n    clearError,\n  }\n}\n","import { copyStrict } from 'fast-copy'\nimport { isRef, ref, unref, watch } from 'vue'\nimport type { ComputedRef, Ref } from 'vue'\nimport { diff } from '../utils/utils'\nimport type { AnyData, DiffDefinition } from '../types'\n\ntype AnyRef<D> = Ref<D> | ComputedRef<D>\n\ninterface UseBackupOptions<D> {\n  onlyProps?: keyof D\n  idField?: keyof D\n}\n\n/**\n * Provides a backup of the current instance, and methods to save and restore it.\n * The `save` method will diff the current instance with the backup. Any values in the new\n * instance that are different in the old instance will be passed to the save method as data.\n */\nexport function useBackup<D extends AnyData>(data: AnyRef<D>, options?: UseBackupOptions<D>) {\n  const backup = ref<any>(null)\n\n  // automatically update if the record changes\n  watch(data, async (val: any) => {\n    if (!data)\n      return\n\n    const idField = options?.idField\n    const id = idField ? val?.[idField] : val?.id\n    const backupId = idField ? backup.value?.[idField] : backup.value?.id\n    if (id !== backupId)\n      backup.value = copyStrict(val)\n  }, { immediate: true })\n\n  /**\n   * Diff the current instance with the backup. Any values in the new instance that are\n   * different in the old instance will be passed to the save method as data.\n   */\n  async function save() {\n    const toDiff = unref(data as any)\n    const diffData = diff(backup.value, toDiff, options?.onlyProps as DiffDefinition)\n    // if any keys were different...\n    if (Object.keys(diffData).length) {\n      // save the diff\n      try {\n        const withUpdates = await data.value.save({ data: diffData })\n\n        // update the backup to match the new instance\n        backup.value = copyStrict(withUpdates)\n      }\n      catch (error) {\n        console.error('could not save', error)\n        throw error\n      }\n    }\n    // if nothing changed, return the original record\n    else { return toDiff }\n  }\n\n  function restore(currentInstance: any) {\n    if (backup.value) {\n      const target = isRef(currentInstance) ? currentInstance.value : currentInstance\n      Object.assign(target, backup.value)\n    }\n    return currentInstance\n  }\n\n  return { data, backup, save, restore }\n}\n"],"names":["fastDeepEqual","equal","a","b","length","i","keys","key","toStringFunction","create","toStringObject","LegacyCache","value","createCacheLegacy","createCacheModern","createCache","getCleanClone","prototype","Constructor","getRegExpFlagsLegacy","regExp","flags","getRegExpFlagsModern","getRegExpFlags","getTagLegacy","type","getTagModern","getTag","defineProperty","getOwnPropertyDescriptor","getOwnPropertyNames","getOwnPropertySymbols","_a","hasOwnProperty","propertyIsEnumerable","SUPPORTS_SYMBOL","getStrictPropertiesModern","object","getStrictProperties","copyOwnPropertiesStrict","clone","state","properties","index","length_1","property","descriptor","copyArrayLoose","array","length_2","copyArrayStrict","copyArrayBuffer","arrayBuffer","_state","copyBlob","blob","copyDataView","dataView","copyDate","date","copyMapLoose","map","copyMapStrict","copyObjectLooseLegacy","copyObjectLooseModern","symbols","length_3","symbol","copyObjectLoose","copyObjectStrict","copyPrimitiveWrapper","primitiveObject","copyRegExp","copySelf","copySetLoose","set","copySetStrict","isArray","assign","getPrototypeOf","obj","DEFAULT_LOOSE_OPTIONS","DEFAULT_STRICT_OPTIONS","getTagSpecificCopiers","options","createCopier","normalizedOptions","tagSpecificCopiers","copier","tagSpecificCopier","createStrictCopier","copyStrict","defineValues","data","defineGetters","defineSetters","convertData","service","result","createSymbol","name","SERVICE","getExtendedQueryInfo","queryInfo","store","qid","queryState","total","pageState","ids","queriedAt","ssr","id","items","hasOwn","prop","getArray","pickDiff","diffDef","topLevelKeys","_","diff","dest","source","originalVal","cloneVal","isEqual","restoreTempIds","resData","tempIdField","sourceItems","responseItems","item","tempId","stringifyIfObject","val","getId","idField","getParams","params","fastCopy","unref","timeout","ms","resolve","useCounter","count","ref","isObject","smartUnref","isRef","deepUnref","unrefArray","arr","unrefObject","unreffed","checkedVal","useInstanceDefaults","defaults","dataKeys","defaultsToApply","pushToStore","createInStore","defineVirtualProperty","getter","definition","defineVirtualProperties","getters","existingServiceMethods","toValue","r","noop","createFilterWrapper","filter","fn","wrapper","args","reject","debounceFilter","timer","maxTimer","lastRejector","_clearTimeout","timer2","invoke","duration","maxDuration","useDebounceFn","fastJsonStableStringify","opts","cycles","cmp","f","node","aobj","bobj","seen","stringify","out","seenIndex","getIdsFromQueryInfo","pagination","queryId","pageId","queryLevel","pageLevel","itemsFromPagination","getAllIdsFromQueryInfo","acc","qkey","allItemsFromPagination","usePageData","limit","skip","request","pageCount","computed","currentPage","pageNumber","newSkip","skipVal","canPrev","canNext","wait","page","useFind","deps","debounce","immediate","_watch","paginateOn","_b","_d","_c","paramsWithPagination","query","paramsWithoutPagination","queryShallowCopy","isPending","haveBeenRequested","haveLoaded","error","clearError","cachedParams","updateCachedParams","queryWhenFn","queryWhen","_queryWhenFn","cachedQuery","currentQuery","allLocalData","itemsBeforeCurrent","whichQuery","allItems","firstOfCurrentPage","indexInItems","adjustedIndex","localParams","beforeCurrent","adjustedSkip","queries","latestQuery","previousQuery","requestCount","setupPendingState","find","__params","___params","response","extendedQueryInfo","err","findDebounced","makeRequest","p","pageData","toStart","toEnd","toPage","next","prev","isSsr","watch","reactive","useGet","_id","_params","hasBeenRequested","mostRecentId","getFromStore","hasLoaded","get","PiniaService","__publicField","keysToIgnore","instance","asInstance","idOrData","results","eventName","listener","_increment","_pid","_machine","storage","mongoMachineId","ObjectID","strOid","timestamp","machine","pid","increment","module","isomorphicMongoObjectid","require$$0","useModelInstance","clonesById","commit","reset","removeFromStore","__isClone","extendStatics","d","__extends","__","typeChecker","typeString","getClassName","comparable","coercePotentiallyNull","isFunction","isVanillaObject","equals","walkKeyPathValues","keyPath","depth","owner","currentKey","BaseOperation","owneryQuery","GroupOperation","_super","children","_this","root","done","keep","childOperation","NamedGroupOperation","QueryOperation","parent","NestedOperation","createTester","compare","comparableA","EqualsOperation","createEqualsOperation","numericalOperationCreator","createNumericalOperation","numericalOperation","typeofParams","test","actualValue","createNamedOperation","parentQuery","operationCreator","throwUnsupportedOperation","containsOperation","createNestedOperation","nestedQuery","parentKey","createQueryOperations","selfOperations","nestedOperations","createQueryOperation","operations","ops","op","createOperationTester","operation","$Ne","$ElemMatch","child","$Not","$Size","assertGroupNotEmpty","values","$Or","success","$Nor","$In","length_4","$Nin","ownerQuery","$Exists","$And","$All","$eq","$ne","$or","$nor","$elemMatch","$nin","$in","$lt","$lte","$gt","$gte","$mod","mod","equalsValue","$exists","$regex","pattern","$not","typeAliases","v","$type","clazz","$and","$all","$size","$options","$where","defaultOperations","createDefaultQueryOperation","createDefaultQueryTester","like","search","regexOptions","specials","iLike","str","$like","$notLike","$ilike","$notILike","sqlOperations","parse","getFilters","settings","current","queryValue","getQuery","rebuiltQuery","getLimit","_limit","paginate","base","lower","upper","OPERATORS","FILTERS","sort","select","or","and","filterQuery","_query","additionalOperators","useServiceLocal","itemStorage","tempStorage","cloneStorage","addItemToStorage","paramsForServer","whitelist","customSiftOperators","customFilters","_filterQueryOperators","filterItems","startingValues","q","filters","sift","findInStore","filtered","sorter","findOneInStore","countInStore","existingItem","tempItem","_items","patchInStore","_idOrData","_data","updateItems","toWrite","fromStore","patchedItems","clones","removeItems","useServiceStorage","onRead","beforeWrite","src","byId","list","hasItem","has","getItem","inStore","setItem","vueSet","merge","existing","removeItem","hadItem","vueDel","useServiceTemps","moveTempToItems","useServiceClones","defaultMakeCopy","isClone","makeCopy","assureOriginalIsStored","existingClone","itemId","_item","original","copied","vueDelete","markAsClone","useAllStorageTypes","getIdField","setupInstance","makeDefaultOptions","useDataStore","_options","asBaseModel","afterSetup","clearAll","debug","debuggers","noopDebug","defaultInitializer","setDebug","createDebug","__createBinding","this","m","k","k2","desc","__exportStar","exports","stripSlashes","callback","first","rest","target","isPromise","useServicePagination","defaultLimit","clearPagination","defaultSkip","updatePaginationForQuery","preserveSsr","queryParams","pageParams","getQueryInfo","mostRecent","existingPageData","qidData","queryData","newState","unflagSsr","$limit","$skip","defaultPending","useServicePending","createPendingById","updatePendingById","patchPendingById","removePendingById","isFindPending","isCountPending","isGetPending","isCreatePending","isUpdatePending","isPatchPending","isRemovePending","setPending","method","setPendingById","place","del","unsetPendingById","clearAllPending","useServiceEventLocks","eventLocks","toggleEventLock","event","clearEventLock","useSsrQueryCache","resultsByQid","getQid","setQid","clearQid","clearAllQids","useServiceStore","servicePath","pendingState","makeGetterName","makeState","useQueuePromise","stopWatching","justDebounce","delay","atStart","guarantee","self","clear","run","useServiceEvents","addOrUpdateById","removeItemsById","flushAddOrUpdateQueue","_debounce","enqueueAddOrUpdate","flushRemoveItemQueue","enqueueRemoval","handleEvent","handler","unrefQuery","context","unsetPending","isTemp","isLockableMethod","syncStore","restoredTempIds","makeModelInstances","handleFindSsr","info","normalizeFind","skipGetIfExists","skipIfExists","patchDiffing","rollbackData","shouldDiff","diffedData","dataFromWith","handleQidCache","cached","feathersPiniaHooks","useServiceInstance","toMerge","BadRequest","storeAssociated","config","updatedValues","related","created","writeToStorage","compressed","hydrateStore","hydrationData","syncWithStorage","stateKeys","debouncedWrite","toWatch","clearStorage","prefix","createPiniaClient","client","vueApp","feathers","location","serviceOptions","handleEvents","debounceEventsTime","debounceEventsGuarantee","customizeStore","utils","fromGlobal","wrappedSetupInstance","asFeathersModel","storeName","existingStore","defineStore","custom","defaultStorageKeys","globalStorageKeys","serviceStorageKeys","__sync","clientService","piniaService","mixin","OFetch","FetchClient","fetchOptions","status","feathersPiniaAutoImport","InvalidTokenError","b64DecodeUnicode","code","base64UrlDecode","output","jwtDecode","token","pos","part","decoded","e","useAuth","api","skipTokenCheck","entityService","entityKey","promise","defaultHandler","defaultErrorHandler","onSuccess","onError","onInitSuccess","onInitError","onLogoutSuccess","onLogoutError","userId","user","authCounter","isAuthenticated","handleAuthResult","entity","stored","authenticate","isTokenExpired","jwt","payload","isInitDone","reAuthenticate","logoutCounter","isLogoutPending","logout","loginRedirect","useBackup","backup","backupId","save","toDiff","diffData","withUpdates","restore","currentInstance"],"mappings":"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","x_google_ignoreList":[0,1,10,11,17,18,20,29,30,37,57]}