feathers-utils 10.0.0-2 → 10.0.0-4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,16 +2,32 @@
2
2
 
3
3
  ## [Unreleased](https://github.com/feathersjs/feathers-utils/tree/HEAD)
4
4
 
5
- [Full Changelog](https://github.com/feathersjs/feathers-utils/compare/v10.0.0-1...HEAD)
5
+ [Full Changelog](https://github.com/feathersjs/feathers-utils/compare/v10.0.0-3...HEAD)
6
6
 
7
7
  **Merged pull requests:**
8
8
 
9
- - feat\(utils\): new util walkQuery [\#5](https://github.com/feathersjs/feathers-utils/pull/5) ([fratzinger](https://github.com/fratzinger))
9
+ - chore: tsup external packages [\#7](https://github.com/feathersjs/feathers-utils/pull/7) ([fratzinger](https://github.com/fratzinger))
10
+
11
+ ## [v10.0.0-3](https://github.com/feathersjs/feathers-utils/tree/v10.0.0-3) (2025-09-26)
12
+
13
+ [Full Changelog](https://github.com/feathersjs/feathers-utils/compare/v10.0.0-2...v10.0.0-3)
14
+
15
+ ## [v10.0.0-2](https://github.com/feathersjs/feathers-utils/tree/v10.0.0-2) (2025-09-25)
16
+
17
+ [Full Changelog](https://github.com/feathersjs/feathers-utils/compare/v10.0.0-1...v10.0.0-2)
18
+
19
+ **Merged pull requests:**
20
+
21
+ - feat\(utils\): new util addToQuery [\#6](https://github.com/feathersjs/feathers-utils/pull/6) ([fratzinger](https://github.com/fratzinger))
10
22
 
11
23
  ## [v10.0.0-1](https://github.com/feathersjs/feathers-utils/tree/v10.0.0-1) (2025-09-23)
12
24
 
13
25
  [Full Changelog](https://github.com/feathersjs/feathers-utils/compare/v10.0.0-0...v10.0.0-1)
14
26
 
27
+ **Merged pull requests:**
28
+
29
+ - feat\(utils\): new util walkQuery [\#5](https://github.com/feathersjs/feathers-utils/pull/5) ([fratzinger](https://github.com/fratzinger))
30
+
15
31
  ## [v10.0.0-0](https://github.com/feathersjs/feathers-utils/tree/v10.0.0-0) (2025-09-08)
16
32
 
17
33
  [Full Changelog](https://github.com/feathersjs/feathers-utils/compare/1fae88209c16bda8b0cf58ddd8af6e24d4b5792b...v10.0.0-0)
@@ -1,4 +1,4 @@
1
- import { mutateResult, checkContext, getDataIsArray, getResultIsArray, mutateData, contextToJson, transformParams } from './chunk-4TBKW4G4.js';
1
+ import { mutateResult, checkContext, getDataIsArray, getResultIsArray, mutateData, contextToJson, transformParams } from './chunk-VXZDTJGY.js';
2
2
  import { isMulti, isProvider, isPromise, every, traverse } from './chunk-KSCPQLU3.js';
3
3
  import { toArray } from './chunk-DKP457HT.js';
4
4
  import isObject from 'lodash/isObject.js';
@@ -765,5 +765,5 @@ function unless(predicate, ...hooks) {
765
765
  }
766
766
 
767
767
  export { cache, checkMulti, checkRequired, combine, createRelated, debug, disablePagination, disallow, iff, iffElse, onDelete, paramsForServer, paramsFromClient, preventChanges, setData, setField, setResult, setSlug, skippable, softDelete, stashBefore, throwIf, throwIfIsMulti, throwIfIsProvider, transformData, transformQuery, transformResult, traverse2 as traverse, unless };
768
- //# sourceMappingURL=chunk-U2HKW5ZL.js.map
769
- //# sourceMappingURL=chunk-U2HKW5ZL.js.map
768
+ //# sourceMappingURL=chunk-TIH5MKEQ.js.map
769
+ //# sourceMappingURL=chunk-TIH5MKEQ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/combine/combine.util.ts","../src/hooks/cache/cache-utils.ts","../src/hooks/cache/cache.hook.ts","../src/hooks/check-multi/check-multi.hook.ts","../src/hooks/check-required/check-required.hook.ts","../src/hooks/create-related/create-related.hook.ts","../src/hooks/debug/debug.hook.ts","../src/hooks/disable-pagination/disable-pagination.hook.ts","../src/hooks/disallow/disallow.hook.ts","../src/hooks/iff-else/iff-else.hook.ts","../src/hooks/iff/iff.hook.ts","../src/hooks/on-delete/on-delete.hook.ts","../src/hooks/params-for-server/params-for-from-shared.ts","../src/hooks/params-for-server/params-for-server.hook.ts","../src/hooks/params-from-client/params-from-client.hook.ts","../src/hooks/transform-data/transform-data.hook.ts","../src/hooks/prevent-changes/prevent-changes.hook.ts","../src/hooks/set-data/set-data.hook.ts","../src/hooks/set-field/set-field.hook.ts","../src/hooks/set-result/set-result.hook.ts","../src/hooks/set-slug/set-slug.hook.ts","../src/hooks/skippable/skippable.ts","../src/hooks/soft-delete/soft-delete.hook.ts","../src/hooks/stash-before/stash-before.hook.ts","../src/hooks/throw-if/throw-if.hook.ts","../src/hooks/throw-if-is-multi/throw-if-is-multi.hook.ts","../src/hooks/throw-if-is-provider/throw-if-is-provider.hook.ts","../src/hooks/transform-query/transform-query.hook.ts","../src/hooks/transform-result/transform-result.hook.ts","../src/hooks/traverse/traverse.hook.ts","../src/hooks/unless/unless.hook.ts"],"names":["key","_has","MethodNotAllowed","onDelete","BadRequest","_get","Forbidden","_set","skip","isMulti","defaultError","traverse"],"mappings":"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","file":"chunk-U2HKW5ZL.js","sourcesContent":["import type { HookContext } from '@feathersjs/feathers'\nimport type { HookFunction } from '../../types.js'\n\n/**\n * Sequentially execute multiple hooks.\n *\n * @see https://utils.feathersjs.com/utils/combine.html\n */\nexport function combine<H extends HookContext = HookContext>(\n ...serviceHooks: HookFunction<H>[]\n) {\n const isContext = function (ctx: H) {\n return typeof ctx?.method === 'string' && typeof ctx?.type === 'string'\n }\n\n return async function (context: H) {\n let ctx = context\n\n const updateCurrentHook = (current: void | H) => {\n // Either use the returned hook object or the current\n // hook object from the chain if the hook returned undefined\n if (current) {\n if (!isContext(current)) {\n throw new Error(\n `${ctx.type} hook for '${ctx.method}' method returned invalid hook object`,\n )\n }\n\n ctx = current\n }\n\n return ctx\n }\n\n // Go through all hooks and chain them into our promise\n\n // @ts-expect-error TODO\n const promise = serviceHooks.reduce(async (current, fn) => {\n // @ts-expect-error TODO\n const hook = fn.bind(this)\n\n // Use the returned hook object or the old one\n\n const currentHook = await current\n const currentCtx = await hook(currentHook)\n return updateCurrentHook(currentCtx)\n }, Promise.resolve(ctx))\n\n try {\n await promise\n return ctx\n } catch (error: any) {\n // Add the hook information to any errors\n error.hook = ctx\n throw error\n }\n }\n}\n","import isObject from 'lodash/isObject.js'\n\nexport const stableStringify = (obj: Record<string, any>) => {\n return JSON.stringify(obj, (key, value) => {\n if (typeof value === 'function') {\n throw new Error('Cannot stringify non JSON value')\n }\n\n if (isObject(value)) {\n return Object.keys(value)\n .sort()\n .reduce(\n (result, key) => {\n result[key] = (value as any)[key]\n return result\n },\n {} as Record<string, any>,\n )\n }\n\n return value\n })\n}\n","import type { HookContext, NextFunction, Params } from '@feathersjs/feathers'\nimport { stableStringify } from './cache-utils.js'\nimport copy from 'fast-copy'\nimport type { Promisable } from '../../internal.utils.js'\n\ntype Cache = {\n get: (key: string) => Promisable<any>\n set: (key: string, value: any) => Promisable<any>\n delete: (key: string) => Promisable<any>\n clear: () => any\n keys: () => Generator<string, void, unknown>\n}\n\nexport type CacheOptions = {\n /**\n * The cache implementation to use. It should implement the methods `get`, `set`, `delete`, `clear`, and `keys`.\n * This can be a Map, Redis client, or any other cache implementation.\n *\n * Use 'lru-cache' for an LRU cache implementation.\n */\n map: Cache\n /**\n * The id field to use for caching. Defaults to `service.options.id` and if not found, then 'id'.\n */\n id?: string\n /**\n * params are stringified for the key-value cache.\n * There are params properties you don't want to include in the cache key.\n * You can use this function to transform the params before they are stringified.\n */\n transformParams: (params: Params) => Params\n}\n\nexport const cache = <H extends HookContext = HookContext>(\n options: CacheOptions,\n) => {\n const cacheMap = new ContextCacheMap(options)\n return async (context: H, next?: NextFunction) => {\n if (context.type === 'before') {\n return await cacheBefore(context, cacheMap)\n }\n if (context.type === 'after') {\n return await cacheAfter(context, cacheMap)\n }\n\n if (context.type === 'around' && next) {\n await cacheBefore(context, cacheMap)\n await next()\n await cacheAfter(context, cacheMap)\n return context\n }\n }\n}\n\nconst cacheBefore = async (context: HookContext, cacheMap: ContextCacheMap) => {\n if (context.method === 'get' || context.method === 'find') {\n const value = await cacheMap.get(context)\n if (value) {\n context.result = value\n }\n }\n\n return context\n}\n\nconst cacheAfter = async (context: HookContext, cacheMap: ContextCacheMap) => {\n if (context.method === 'get' || context.method === 'find') {\n await cacheMap.set(context)\n } else {\n await cacheMap.clear(context)\n }\n\n return context\n}\n\nclass ContextCacheMap {\n map: Cache\n private delimiter = ':'\n private options: CacheOptions\n\n constructor(options: CacheOptions) {\n this.map = options.map\n this.options = options\n }\n\n private stringifyCacheKey(context: HookContext) {\n if (context.method !== 'get' && context.method !== 'find') {\n throw new Error(\n `Cache can only be used with 'get' or 'find' methods, not '${context.method}'`,\n )\n }\n\n const stringifiedParams = stableStringify(\n this.options.transformParams(context.params ?? {}),\n )\n\n return `${context.id ?? 'null'}${this.delimiter}${stringifiedParams}`\n }\n\n private getCachedId(key: string) {\n const index = key.indexOf(this.delimiter)\n if (index === -1) {\n throw new Error(\n `Cache key '${key}' does not contain a delimiter '${this.delimiter}'`,\n )\n }\n return key.substring(0, index)\n }\n\n private getId(item: Record<string, any>, context: HookContext) {\n const idField = context.service.options?.id || this.options.id || 'id'\n const id = item[idField]\n return id && id.toString ? id.toString() : id\n }\n\n /**\n * Called before get() and find()\n *\n * returns a cached result for the given context if it exists.\n */\n async get(context: HookContext) {\n const key = this.stringifyCacheKey(context)\n const result = this.map.get(key)\n if (result) {\n return copy(result) // Use copy to avoid mutation of the original result\n }\n }\n\n /**\n * Called after get() and find()\n *\n * Caches the result for the given context.\n */\n async set(context: HookContext) {\n const key = this.stringifyCacheKey(context)\n return this.map.set(key, copy(context.result)) // Use copy to avoid mutation of the original result\n }\n\n // Called after create(), update(), patch(), and remove()\n async clear<H extends HookContext>(context: H): Promise<H> {\n const results = Array.isArray(context.result)\n ? context.result\n : [context.result]\n\n const promises: Promise<any>[] = []\n\n const itemIds = results\n .map((item: any) => this.getId(item, context))\n .filter(Boolean)\n\n // If no itemIds are found, clear the entire cache to avoid stale data\n if (!itemIds.length) {\n await this.map.clear()\n return context\n }\n\n for (const key of this.map.keys()) {\n const cachedId = this.getCachedId(key)\n if (cachedId === 'null') {\n // This is a cached `find` request. Any create/patch/update/del\n // could affect the results of this query so it should be deleted\n promises.push(this.map.delete(key))\n continue\n }\n\n // This is a cached `get` request\n\n if (context.method === 'create') {\n // If this is a create, we don't need to delete any cached get requests\n continue\n }\n\n for (const itemId of itemIds) {\n if (cachedId === itemId) {\n // If the cached id matches the item id, delete the cached get\n promises.push(this.map.delete(key))\n }\n }\n }\n\n await Promise.all(promises)\n\n return context\n }\n}\n","import type { FeathersError } from '@feathersjs/errors'\nimport { MethodNotAllowed } from '@feathersjs/errors'\nimport type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport { isMulti } from '../../predicates/index.js'\n\nexport type CheckMultiOptions = {\n /**\n * Customize the error that is thrown if the service does not allow multi operations.\n *\n * If not provided, throws a `MethodNotAllowed` error with a message indicating the operation.\n */\n error?: (context: HookContext) => FeathersError\n}\n\n/**\n * Check if the 'multi' option is set for a method. You can use this to early throw an error if 'multi' is not set.\n *\n * @see https://utils.feathersjs.com/hooks/check-multi.html\n */\nexport function checkMulti<H extends HookContext = HookContext>(\n options?: CheckMultiOptions,\n) {\n return (context: H, next?: NextFunction) => {\n const { service, method } = context\n if (!service.allowsMulti || !isMulti(context) || method === 'find') {\n return context\n }\n\n if (!service.allowsMulti(method)) {\n throw options?.error\n ? options.error(context)\n : new MethodNotAllowed(`Can not ${method} multiple entries`)\n }\n\n if (next) {\n return next()\n }\n\n return context\n }\n}\n","import _get from 'lodash/get.js'\nimport _has from 'lodash/has.js'\nimport { BadRequest } from '@feathersjs/errors'\n\nimport { checkContext, getDataIsArray } from '../../utils/index.js'\nimport type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport type { MaybeArray } from '../../internal.utils.js'\nimport { toArray } from '../../internal.utils.js'\n\n/**\n * Check selected fields exist and are not falsey. Numeric 0 is acceptable.\n *\n * @see https://utils.feathersjs.com/hooks/check-required.html\n */\nexport function checkRequired<H extends HookContext = HookContext>(\n fieldNames: MaybeArray<string>,\n) {\n const fieldNamesArray = toArray(fieldNames)\n return (context: H, next?: NextFunction) => {\n checkContext(\n context,\n ['before', 'around'],\n ['create', 'update', 'patch'],\n 'checkRequired',\n )\n\n const { data } = getDataIsArray(context)\n\n for (let i = 0; i < data.length; i++) {\n const item = data[i]\n\n for (let j = 0; j < fieldNamesArray.length; j++) {\n const name = fieldNamesArray[j]\n\n if (!_has(item, name)) {\n throw new BadRequest(`Field ${name} does not exist. (required)`)\n }\n\n const value = _get(item, name)\n\n if (!value && value !== 0 && value !== false) {\n throw new BadRequest(`Field ${name} is null. (required)`)\n }\n }\n }\n\n if (next) return next().then(() => context)\n }\n}\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport { checkContext, getResultIsArray } from '../../utils/index.js'\nimport type { MaybeArray, Promisable } from '../../internal.utils.js'\n\nexport interface CreateRelatedOptions<S = Record<string, any>> {\n service: keyof S\n multi?: boolean\n data: (item: any, context: HookContext) => Promisable<Record<string, any>>\n}\n\n/**\n * Create related records in other services.\n *\n * @see https://utils.feathersjs.com/hooks/create-related.html\n */\nexport function createRelated<\n S = Record<string, any>,\n H extends HookContext = HookContext,\n>(options: MaybeArray<CreateRelatedOptions<S>>) {\n return async (context: H, next?: NextFunction) => {\n checkContext(context, ['after', 'around'], ['create'], 'createRelated')\n\n if (next) {\n await next()\n }\n\n const { result } = getResultIsArray(context)\n\n const entries = Array.isArray(options) ? options : [options]\n\n await Promise.all(\n entries.map(async (entry) => {\n const { data, service, multi } = entry\n\n const dataToCreate = (\n await Promise.all(result.map(async (item) => data(item, context)))\n ).filter((x) => !!x)\n\n if (!dataToCreate || dataToCreate.length <= 0) {\n return context\n }\n\n if (multi || dataToCreate.length === 1) {\n await context.app\n .service(service as string)\n .create(dataToCreate.length === 1 ? dataToCreate[0] : dataToCreate)\n } else {\n await Promise.all(\n dataToCreate.map(async (item) =>\n context.app.service(service as string).create(item),\n ),\n )\n }\n }),\n )\n\n return context\n }\n}\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\n\n/**\n * Display the current hook context for debugging.\n *\n * @see https://utils.feathersjs.com/hooks/debug.html\n */\nexport const debug =\n <H extends HookContext = HookContext>(msg: string, ...fieldNames: string[]) =>\n async (context: H, next?: NextFunction) => {\n if (next) {\n await next()\n }\n\n // display timestamp\n const now = new Date()\n console.log(\n `${now.getFullYear()}-${\n now.getMonth() + 1\n }-${now.getDate()} ${now.getHours()}:${now.getMinutes()}:${now.getSeconds()}`,\n )\n\n if (msg) {\n console.log(msg)\n }\n\n // display service, method & type of hook (before/after/error)\n console.log(\n `${context.type} service('${context.path}').${context.method}()`,\n )\n\n // display id for get, patch, update & remove\n if (!['find', 'create'].includes(context.method) && 'id' in context) {\n console.log('id:', context.id)\n }\n\n if (context.data) {\n console.log('data:', context.data)\n }\n\n if (context.params?.query) {\n console.log('query:', context.params.query)\n }\n\n if (context.result) {\n console.log('result:', context.result)\n }\n\n // display additional params\n const params = context.params || {}\n console.log('params props:', Object.keys(params).sort())\n\n fieldNames.forEach((name) => {\n console.log(`params.${name}:`, params[name])\n })\n\n if (context.error) {\n console.log('error', context.error)\n }\n }\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport { checkContext } from '../../utils/index.js'\n\n/**\n * Disables pagination when `query.$limit` is `-1` or `'-1'`.\n *\n * @see https://utils.feathersjs.com/hooks/disable-pagination.html\n */\nexport const disablePagination =\n <H extends HookContext = HookContext>() =>\n (context: H, next?: NextFunction) => {\n checkContext(context, 'before', ['find'], 'disablePagination')\n const $limit = context.params?.query?.$limit\n\n if ($limit === '-1' || $limit === -1) {\n context.params.paginate = false\n delete context.params.query.$limit\n }\n\n if (next) return next().then(() => context)\n\n return context\n }\n","import { MethodNotAllowed } from '@feathersjs/errors'\nimport type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport type { TransportName } from '../../types.js'\nimport { isProvider } from '../../predicates/index.js'\nimport type { MaybeArray } from '../../internal.utils.js'\nimport { toArray } from '../../internal.utils.js'\n\n/**\n * Prevents access to a service method completely or for specific transports.\n *\n * @see https://utils.feathersjs.com/hooks/disallow.html\n */\nexport const disallow = <H extends HookContext = HookContext>(\n transports?: MaybeArray<TransportName>,\n) => {\n const transportsArr = toArray(transports)\n return (context: H, next?: NextFunction) => {\n if (!transports) {\n throw new MethodNotAllowed('Method not allowed')\n }\n\n if (isProvider(...(transportsArr as TransportName[]))(context)) {\n throw new MethodNotAllowed(\n `Provider '${context.params.provider}' can not call '${context.method}'. (disallow)`,\n )\n }\n\n if (next) return next().then(() => context)\n }\n}\n","import type { HookContext } from '@feathersjs/feathers'\nimport { isPromise } from '../../common/index.js'\nimport { combine } from '../../utils/combine/combine.util.js'\nimport type { HookFunction, PredicateFn } from '../../types.js'\n\n/**\n * Execute one array of hooks or another based on a sync or async predicate.\n *\n * @see https://utils.feathersjs.com/hooks/iff-else.html\n */\nexport function iffElse<H extends HookContext = HookContext>(\n predicate: boolean | PredicateFn<H>,\n trueHook: HookFunction<H> | HookFunction<H>[] | undefined,\n falseHook?: HookFunction<H> | HookFunction<H>[] | undefined,\n) {\n // fnArgs is [context] for service & permission hooks, [data, connection, context] for event filters\n return function (this: any, ctx: H) {\n const trueHooks = Array.isArray(trueHook)\n ? trueHook\n : typeof trueHook === 'function'\n ? [trueHook]\n : undefined\n\n const falseHooks = Array.isArray(falseHook)\n ? falseHook\n : typeof falseHook === 'function'\n ? [falseHook]\n : undefined\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const that = this\n const check =\n typeof predicate === 'function'\n ? predicate.apply(that, [ctx])\n : !!predicate\n\n if (!check) {\n return callHooks.call(that, ctx, falseHooks as any)\n }\n\n if (!isPromise(check)) {\n return callHooks.call(that, ctx, trueHooks as any)\n }\n\n return check.then((check1: any) => {\n const hooks = check1 ? trueHooks : falseHooks\n return callHooks.call(that, ctx, hooks as any)\n })\n }\n}\n\nfunction callHooks<H extends HookContext = HookContext>(\n this: any,\n ctx: H,\n serviceHooks: HookFunction<H>[],\n) {\n return serviceHooks ? combine(...serviceHooks).call(this, ctx) : ctx\n}\n","import type { HookContext } from '@feathersjs/feathers'\nimport { iffElse } from '../iff-else/iff-else.hook.js'\nimport type { HookFunction, PredicateFn } from '../../types.js'\n\nexport interface IffHook<H extends HookContext = HookContext>\n extends HookFunction<H> {\n else(...hooks: HookFunction<H>[]): HookFunction<H>\n}\n\n/**\n * Execute one or another series of hooks depending on a sync or async predicate.\n *\n * @see https://utils.feathersjs.com/hooks/iff.html\n */\nexport function iff<H extends HookContext = HookContext>(\n predicate: boolean | PredicateFn<H>,\n ...hooks: HookFunction<H>[]\n): IffHook<H> {\n if (hooks.length && Array.isArray(hooks[0])) {\n hooks = hooks[0]\n }\n\n const iffWithoutElse = function (context: H) {\n return iffElse(predicate, hooks.slice())(context)\n }\n\n iffWithoutElse.else =\n (...falseHooks: any[]) =>\n (context: H) =>\n iffElse(predicate, hooks.slice(), falseHooks.slice())(context)\n\n return iffWithoutElse as IffHook<H>\n}\n\nexport { iff as when }\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport { checkContext, getResultIsArray } from '../../utils/index.js'\nimport type { KeyOf, MaybeArray } from '../../internal.utils.js'\n\nexport type OnDeleteAction = 'cascade' | 'set null'\n\nexport interface OnDeleteOptions<Path extends string = string> {\n /**\n * The related service where related items should be manipulated\n */\n service: Path\n /**\n * The propertyKey in the related service\n */\n keyThere: string\n /**\n * The propertyKey in the current service.\n */\n keyHere: string\n /**\n * The action to perform on the related items.\n *\n * - `cascade`: remove related items\n * - `set null`: set the related property to null\n */\n onDelete: OnDeleteAction\n /**\n * If true, the hook will wait for the service to finish before continuing\n *\n * @default false\n */\n blocking?: boolean\n}\n\n/**\n * hook to manipulate related items on delete.\n *\n * This can be handled by your database, but this hook allows you to do it in your application logic.\n * Then you get service events and hooks for the related items.\n *\n * @see https://utils.feathersjs.com/hooks/on-delete.html\n */\nexport const onDelete = <\n S = Record<string, any>,\n H extends HookContext = HookContext,\n>(\n options: MaybeArray<OnDeleteOptions<KeyOf<S>>>,\n) => {\n const optionsMulti = Array.isArray(options) ? options : [options]\n\n return async (context: H, next?: NextFunction) => {\n checkContext(context, ['after', 'around'], 'remove', 'onDelete')\n\n if (next) {\n await next()\n }\n\n const { result } = getResultIsArray(context)\n\n if (!result.length) {\n return context\n }\n\n const promises: Promise<any>[] = []\n\n optionsMulti.forEach(\n async ({ keyHere, keyThere, onDelete, service, blocking }) => {\n let ids = result.map((x) => x[keyHere]).filter((x) => !!x)\n ids = [...new Set(ids)]\n\n if (!ids || ids.length <= 0) {\n return context\n }\n\n const params = {\n query: {\n ...(ids.length === 1\n ? { [keyThere]: ids[0] }\n : { [keyThere]: { $in: ids } }),\n },\n paginate: false,\n }\n\n let promise: Promise<any> | undefined = undefined\n\n if (onDelete === 'cascade') {\n promise = context.app.service(service as string).remove(null, params)\n } else if (onDelete === 'set null') {\n const data = { [keyThere]: null }\n promise = context.app\n .service(service as string)\n .patch(null, data, params)\n }\n\n if (promise && blocking) {\n promises.push(promise)\n }\n },\n )\n\n if (promises.length) {\n await Promise.all(promises)\n }\n\n return context\n }\n}\n","export const FROM_CLIENT_FOR_SERVER_DEFAULT_KEY = '_$client' as const\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport type { MaybeArray } from '../../internal.utils.js'\nimport { toArray } from '../../internal.utils.js'\nimport { FROM_CLIENT_FOR_SERVER_DEFAULT_KEY } from './params-for-from-shared.js'\n\nexport type ParamsForServerOptions = {\n /**\n * @default '_$client'\n */\n keyToHide?: string\n}\n\n/**\n * a hook to move params to query._$client\n * the server only receives 'query' from params. All other params are ignored.\n * So, to use `$populateParams` on the server, we need to move the params to query._$client\n * the server will move them back to params\n *\n * @see https://utils.feathersjs.com/hooks/params-for-server.html\n */\nexport const paramsForServer = (\n whitelist: MaybeArray<string>,\n options?: ParamsForServerOptions,\n) => {\n const whitelistArr = toArray(whitelist)\n\n const { keyToHide = FROM_CLIENT_FOR_SERVER_DEFAULT_KEY } = options || {}\n\n return <H extends HookContext>(context: H, next?: NextFunction) => {\n // clone params on demand\n let clonedParams: any\n\n Object.keys(context.params).forEach((key) => {\n if (key === 'query') {\n return\n }\n\n if (whitelistArr.includes(key)) {\n if (!clonedParams) {\n clonedParams = {\n ...context.params,\n query: {\n ...context.params.query,\n },\n }\n }\n\n if (!clonedParams.query[keyToHide]) {\n clonedParams.query[keyToHide] = {}\n }\n\n clonedParams.query[keyToHide][key] = clonedParams[key]\n delete clonedParams[key]\n }\n })\n\n if (clonedParams) {\n context.params = clonedParams\n }\n\n if (next) {\n return next()\n }\n\n return context\n }\n}\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport type { MaybeArray } from '../../internal.utils.js'\nimport { toArray } from '../../internal.utils.js'\nimport { FROM_CLIENT_FOR_SERVER_DEFAULT_KEY } from '../params-for-server/params-for-from-shared.js'\n\nexport type paramsFromClientOptions = {\n /**\n * @default '_$client'\n */\n keyToHide?: string\n}\n\n/**\n * Pass `context.params` from client to server. Server hook.\n *\n * @see https://utils.feathersjs.com/hooks/params-from-client.html\n */\nexport const paramsFromClient = (\n whitelist: MaybeArray<string>,\n options?: paramsFromClientOptions,\n) => {\n const whitelistArr = toArray(whitelist)\n const { keyToHide = FROM_CLIENT_FOR_SERVER_DEFAULT_KEY } = options || {}\n return (context: HookContext, next?: NextFunction) => {\n if (\n !context.params?.query?.[keyToHide] ||\n typeof context.params.query[keyToHide] !== 'object'\n ) {\n return context\n }\n\n const params = {\n ...context.params,\n query: {\n ...context.params.query,\n [keyToHide]: {\n ...context.params.query[keyToHide],\n },\n },\n }\n\n const client = params.query[keyToHide]\n\n whitelistArr.forEach((key) => {\n if (key in client) {\n params[key] = client[key]\n delete client[key]\n }\n })\n\n if (Object.keys(client).length === 0) {\n delete params.query[keyToHide]\n }\n\n context.params = params\n\n if (next) {\n return next()\n }\n\n return context\n }\n}\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport { mutateData } from '../../utils/mutate-data/mutate-data.util.js'\nimport type { TransformerFn } from '../../types.js'\n\n/**\n * Make changes to items in `context.data`. Very flexible.\n *\n * @see https://utils.feathersjs.com/hooks/transform-data.html\n */\nexport const transformData =\n <T = Record<string, any>, H extends HookContext = HookContext>(\n transformer: TransformerFn<T, H>,\n ) =>\n async (context: H, next?: NextFunction) => {\n await mutateData(context, transformer)\n\n if (next) {\n return next()\n }\n\n return context\n }\n","import _has from 'lodash/has.js'\nimport _omit from 'lodash/omit.js'\nimport type { FeathersError } from '@feathersjs/errors'\nimport { BadRequest } from '@feathersjs/errors'\nimport { transformData } from '../transform-data/transform-data.hook.js'\nimport type { MaybeArray } from '../../internal.utils.js'\nimport { toArray } from '../../internal.utils.js'\n\nexport type PreventChangesOptions = {\n /**\n * Customize the error that is thrown if the service tries to patch a field that is not allowed.\n *\n * If not provided, throws a `BadRequest` error with a message indicating the field that is not allowed.\n */\n error?: boolean | ((item: any, name: string) => FeathersError)\n}\n\n/**\n * Prevent patch service calls from changing certain fields.\n *\n * @see https://utils.feathersjs.com/hooks/prevent-changes.html\n */\nexport const preventChanges = (\n fieldNames: MaybeArray<string>,\n options?: PreventChangesOptions,\n) => {\n const fieldNamesArr = toArray(fieldNames)\n\n return transformData((item) => {\n if (options?.error) {\n for (let i = 0; i < fieldNamesArr.length; i++) {\n const name = fieldNamesArr[i]\n\n if (_has(item, name)) {\n const error =\n typeof options.error === 'function'\n ? options.error(item, name)\n : new BadRequest(\n `Field ${name} may not be patched. (preventChanges)`,\n )\n\n throw error\n }\n }\n } else {\n item = _omit(item, fieldNamesArr)\n }\n\n return item\n })\n}\n","import _get from 'lodash/get.js'\nimport _set from 'lodash/set.js'\nimport _has from 'lodash/has.js'\n\nimport type { FeathersError } from '@feathersjs/errors'\nimport { Forbidden } from '@feathersjs/errors'\n\nimport type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport type { PropertyPath } from 'lodash'\nimport { contextToJson } from '../../utils/context-to-json/context-to-json.util.js'\nimport { getDataIsArray } from '../../utils/index.js'\nimport type { PredicateItemWithContext } from '../../types.js'\n\nexport interface HookSetDataOptions {\n /**\n * Wether to throw if the context[from] is undefined.\n *\n * @default false\n */\n allowUndefined?: boolean\n /**\n * @default true\n */\n overwrite?: boolean | PredicateItemWithContext\n /**\n * Customize the error that is thrown if the context[from] is not available.\n * If not provided, throws a `Forbidden` error with a message indicating the missing field.\n */\n error?: (context: HookContext, from: PropertyPath) => FeathersError\n}\n\n/**\n * hook to set properties on `context.data`\n *\n * @see https://utils.feathersjs.com/hooks/set-data.html\n */\nexport function setData<H extends HookContext = HookContext>(\n /**\n * The property path of the context to set the value from. 'dot.notation' is supported.\n *\n * If the property does not exist, the hook will throw an error unless `allowUndefined` is set to true.\n * If the property exists, it will be set to the value of the `to` property path of the data item.\n *\n * @example 'params.user.id'\n */\n from: PropertyPath,\n /**\n * The property path of the data item to set the value to. 'dot.notation' is supported.\n *\n * If the property does not exist, it will be created.\n * If the property exists, it will be overwritten unless `overwrite` is set to false.\n *\n * @example 'userId'\n */\n to: PropertyPath,\n options?: HookSetDataOptions,\n) {\n const { allowUndefined = false, overwrite = true } = options ?? {}\n\n return (context: H, next?: NextFunction) => {\n const { data } = getDataIsArray(context)\n\n const contextJson = contextToJson(context)\n\n if (!_has(contextJson, from)) {\n if (!context.params?.provider || allowUndefined === true) {\n return context\n }\n\n if (\n !overwrite &&\n data.every((item: Record<string, unknown>) => _has(item, to))\n ) {\n return context\n }\n\n throw options?.error\n ? options.error(context, from)\n : new Forbidden(`Expected field ${from.toString()} not available`)\n }\n\n const val = _get(contextJson, from)\n\n for (let i = 0, len = data.length; i < len; i++) {\n const item: Record<string, unknown> = data[i]\n\n const currentOverwrite =\n typeof overwrite === 'function' ? overwrite(item, context) : overwrite\n\n if (!currentOverwrite && _has(item, to)) {\n continue\n }\n\n _set(item, to, val)\n }\n\n if (next) {\n return next()\n }\n\n return context\n }\n}\n","import _get from 'lodash/get.js'\nimport _setWith from 'lodash/setWith.js'\nimport _clone from 'lodash/clone.js'\nimport { checkContext } from '../../utils/index.js'\nimport type { FeathersError } from '@feathersjs/errors'\nimport { Forbidden } from '@feathersjs/errors'\nimport type { HookContext, NextFunction } from '@feathersjs/feathers'\n\nexport interface SetFieldOptions {\n as: string\n from: string\n /**\n * If set to `true`, allows the field to be undefined.\n * If the field is not available and this is `true`, the hook will not throw an error.\n *\n * If set to `false`, the hook will throw an error if the field is not available.\n *\n * @default false\n */\n allowUndefined?: boolean\n /**\n * Customize the error that is thrown if the field is not available.\n *\n * If not provided, throws a `Forbidden` error with a message indicating the missing field.\n */\n error?: (context: HookContext, from: string) => FeathersError\n}\n\n/**\n * The `setField` hook allows to set a field on the hook context based on the value of another field on the hook context.\n *\n * @see https://utils.feathersjs.com/hooks/set-field.html\n */\nexport const setField =\n <H extends HookContext = HookContext>({\n as,\n from,\n allowUndefined = false,\n error,\n }: SetFieldOptions) =>\n (context: H, next?: NextFunction) => {\n const { params } = context\n\n checkContext(context, ['before', 'around'], null, 'setField')\n\n const value = _get(context, from)\n\n if (value === undefined) {\n if (!params.provider || allowUndefined) {\n return context\n }\n\n throw error\n ? error(context, from)\n : new Forbidden(`Expected field ${as} not available`)\n }\n\n context = _setWith(context, as, value, _clone)\n\n if (next) return next()\n\n return context\n }\n","import _get from 'lodash/get.js'\nimport _set from 'lodash/set.js'\nimport _has from 'lodash/has.js'\n\nimport type { FeathersError } from '@feathersjs/errors'\nimport { Forbidden } from '@feathersjs/errors'\n\nimport type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport type { PropertyPath } from 'lodash'\nimport { contextToJson } from '../../utils/context-to-json/context-to-json.util.js'\nimport { getResultIsArray } from '../../utils/index.js'\nimport type { DispatchOption, PredicateItemWithContext } from '../../types.js'\n\nexport interface SetResultOptions {\n /**\n * Wether to throw if the context[from] is undefined.\n *\n * @default false\n */\n allowUndefined?: boolean\n /**\n * @default true\n */\n overwrite?: boolean | PredicateItemWithContext\n /**\n * Customize the error that is thrown if the context[from] is not available.\n * If not provided, throws a `Forbidden` error with a message indicating the missing field.\n */\n error?: (context: HookContext, from: PropertyPath) => FeathersError\n dispatch?: DispatchOption\n}\n\n/**\n * hook to set properties on `context.result`\n *\n * @see https://utils.feathersjs.com/hooks/set-result.html\n */\nexport function setResult<H extends HookContext = HookContext>(\n /**\n * The property path of the context to set the value from. 'dot.notation' is supported.\n *\n * If the property does not exist, the hook will throw an error unless `allowUndefined` is set to true.\n * If the property exists, it will be set to the value of the `to` property path of the data item.\n *\n * @example 'params.user.id'\n */\n from: PropertyPath,\n /**\n * The property path of the data item to set the value to. 'dot.notation' is supported.\n *\n * If the property does not exist, it will be created.\n * If the property exists, it will be overwritten unless `overwrite` is set to false.\n *\n * @example 'userId'\n */\n to: PropertyPath,\n options?: SetResultOptions,\n) {\n const { allowUndefined = false, overwrite = true } = options ?? {}\n\n const forResultOrDispatch = (context: H, dispatch: boolean) => {\n const { result } = getResultIsArray(context, { dispatch })\n\n const contextJson = contextToJson(context)\n\n if (!_has(contextJson, from)) {\n if (!context.params?.provider || allowUndefined === true) {\n return context\n }\n\n if (\n !overwrite &&\n result.every((item: Record<string, unknown>) => _has(item, to))\n ) {\n return context\n }\n\n throw options?.error\n ? options.error(context, from)\n : new Forbidden(`Expected field ${from.toString()} not available`)\n }\n\n const val = _get(contextJson, from)\n\n for (let i = 0; i < result.length; i++) {\n const item: Record<string, unknown> = result[i]\n\n const currentOverwrite =\n typeof overwrite === 'function' ? overwrite(item, context) : overwrite\n\n if (!currentOverwrite && _has(item, to)) {\n continue\n }\n\n _set(item, to, val)\n }\n\n return context\n }\n\n const fn = (context: H) => {\n if (options?.dispatch === 'both') {\n forResultOrDispatch(context, true)\n return forResultOrDispatch(context, false)\n }\n\n return forResultOrDispatch(context, !!options?.dispatch)\n }\n\n return (context: H, next?: NextFunction) => {\n if (next) {\n next().then(() => fn(context))\n }\n\n return fn(context)\n }\n}\n","import _set from 'lodash/set.js'\nimport type { HookContext, NextFunction } from '@feathersjs/feathers'\n\n/**\n * Fix slugs in URL, e.g. /stores/:storeId.\n *\n * @see https://utils.feathersjs.com/hooks/set-slug.html\n */\nexport const setSlug = <H extends HookContext = HookContext>(\n slug: string,\n fieldName?: string,\n) => {\n if (typeof fieldName !== 'string') {\n fieldName = `query.${slug}`\n }\n\n return (context: H, next?: NextFunction) => {\n if (context.params && context.params.provider === 'rest') {\n const value = context.params.route[slug]\n if (typeof value === 'string' && value[0] !== ':') {\n _set(context.params, fieldName, value)\n }\n }\n\n if (next) return next()\n\n return context\n }\n}\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport type { HookFunction, PredicateFn } from '../../types.js'\n\n/**\n * Wrap a hook to make it skippable\n */\nexport const skippable =\n <H extends HookContext = HookContext>(\n hook: HookFunction<H>,\n predicate: PredicateFn<H>,\n ) =>\n (context: H, next?: NextFunction) => {\n const skip = predicate(context)\n\n function skipOrRun(skip: boolean) {\n if (skip) {\n return context\n } else {\n return hook(context, next)\n }\n }\n\n if (!skip || typeof skip === 'boolean') {\n return skipOrRun(skip)\n }\n\n return skip.then(skipOrRun)\n }\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport { checkContext } from '../../utils/index.js'\nimport type { TransformParamsFn } from '../../types.js'\nimport { transformParams } from '../../utils/transform-params/transform-params.util.js'\nimport type { Promisable } from '../../internal.utils.js'\n\nexport type SoftDeleteOptionFunction<H extends HookContext = HookContext> = (\n context?: H,\n) => Promisable<{ [key: string]: any }>\n\nexport interface SoftDeleteOptions<H extends HookContext = HookContext> {\n /**\n * @example { deletedAt: null }\n */\n deletedQuery: { [key: string]: any } | SoftDeleteOptionFunction<H>\n /**\n * @example { deletedAt: new Date() }\n */\n removeData: { [key: string]: any } | SoftDeleteOptionFunction<H>\n /**\n * Transform the params before calling the service method. E.g. remove 'params.provider' or add custom params.\n */\n transformParams?: TransformParamsFn\n\n /**\n * Key in `params` to disable the soft delete functionality.\n *\n * @default 'disableSoftDelete'\n */\n disableSoftDeleteKey?: string\n}\n\n/**\n * Allow to mark items as deleted instead of removing them.\n *\n * @see https://utils.feathersjs.com/hooks/soft-delete.html\n */\nexport const softDelete = <H extends HookContext = HookContext>(\n options: SoftDeleteOptions<H>,\n) => {\n if (!options?.deletedQuery || !options?.removeData) {\n throw new Error(\n 'You must provide `deletedQuery` and `removeData` options to the softDelete hook.',\n )\n }\n\n return async (context: H, next?: NextFunction) => {\n checkContext(context, ['before', 'around'], null, 'softDelete')\n\n const { disableSoftDeleteKey = 'disableSoftDelete' } = options\n\n if (context.params[disableSoftDeleteKey]) {\n return context\n }\n\n const { deletedQuery, removeData } = options\n\n const deleteQuery = await getValue(deletedQuery, context)\n\n const params = transformParams(\n {\n ...context.params,\n query: {\n ...context.params.query,\n ...deleteQuery,\n },\n },\n options.transformParams,\n )\n\n context.params = params\n\n if (context.method === 'remove') {\n const data = await getValue(removeData, context)\n const result = await context.service.patch(context.id, data, params)\n\n context.result = result\n }\n\n if (next) {\n await next()\n }\n\n return context\n }\n}\n\nconst getValue = (value: any, ...args: any[]) => {\n if (typeof value === 'function') {\n return value(...args)\n }\n return value\n}\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport { checkContext } from '../../utils/index.js'\n\n/**\n * Stash current value of record, usually before mutating it. Performs a get call.\n *\n * @see https://utils.feathersjs.com/hooks/stash-before.html\n */\nexport function stashBefore<H extends HookContext = HookContext>(\n fieldName?: string,\n) {\n const beforeField = fieldName || 'before'\n\n return async (context: H, next?: NextFunction) => {\n if (context.params.disableStashBefore) {\n return context\n }\n\n checkContext(\n context,\n ['before', 'around'],\n ['update', 'patch', 'remove'],\n 'stashBefore',\n )\n\n const isMulti = context.id == null\n\n const params = {\n ...context.params,\n disableStashBefore: true,\n ...(isMulti ? { paginate: false } : {}),\n }\n\n await (\n !isMulti\n ? context.service.get(context.id, params)\n : context.service.find(params)\n )\n .then((result: any) => {\n context.params[beforeField] = result\n return context\n })\n .catch(() => {\n return context\n })\n\n if (next) {\n return await next()\n }\n\n return context\n }\n}\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport type { PredicateFn } from '../../types.js'\nimport { BadRequest } from '@feathersjs/errors'\nimport type { FeathersError } from '@feathersjs/errors'\n\nexport type ThrowIfOptions = {\n /**\n * Customize the error that is thrown if the predicate returns true.\n *\n * If not provided, throws a `BadRequest` error with 'Invalid operation'.\n */\n error?: (context: HookContext) => FeathersError\n}\n\n/**\n * Throw an error if the predicate function returns true.\n *\n * This hook is useful for validating conditions before proceeding with the request.\n *\n * @see https://utils.feathersjs.com/hooks/throw-if.html\n */\nexport const throwIf = <H extends HookContext = HookContext>(\n predicate: PredicateFn,\n options?: ThrowIfOptions,\n) => {\n return async (context: H, next?: NextFunction) => {\n const result = await predicate(context)\n\n if (result) {\n throw options?.error\n ? options.error(context)\n : new BadRequest('Invalid operation')\n }\n\n if (next) {\n await next()\n }\n\n return context\n }\n}\n","import type { HookContext } from '@feathersjs/feathers'\nimport type { PredicateFn } from '../../types.js'\nimport { BadRequest, type FeathersError } from '@feathersjs/errors'\nimport { every, isMulti } from '../../predicates/index.js'\nimport { throwIf } from '../throw-if/throw-if.hook.js'\n\nexport type ThrowIfIsMultiOptions = {\n /**\n * A predicate function to filter the contexts that should be checked for multi operations.\n * If provided, only contexts that pass this predicate will be checked for multi operations.\n */\n filter?: PredicateFn\n /**\n * Customize the error that is thrown if the context is multi and the service does not allow it.\n * If not provided, throws a `BadRequest` error.\n */\n error?: (context: HookContext) => FeathersError\n}\n\nconst defaultError = (context: HookContext) =>\n new BadRequest(`Cannot perform multi operation on method '${context.method}'`)\n\n/**\n * Throw an error if the context is multi. You can use this to early return if a user provides an array on create or id:null on patch or remove.\n *\n * @see https://utils.feathersjs.com/hooks/throw-if-is-multi.html\n */\nexport const throwIfIsMulti = <H extends HookContext = HookContext>(\n options?: ThrowIfIsMultiOptions,\n) =>\n throwIf<H>(\n every(\n every(isMulti, (context) => context.method !== 'find'),\n options?.filter,\n ),\n {\n error: options?.error ?? defaultError,\n },\n )\n","import type { HookContext } from '@feathersjs/feathers'\nimport type { PredicateFn, TransportName } from '../../types.js'\nimport { throwIf } from '../throw-if/throw-if.hook.js'\nimport { every, isProvider } from '../../predicates/index.js'\nimport type { FeathersError } from '@feathersjs/errors'\nimport { MethodNotAllowed } from '@feathersjs/errors'\nimport { toArray } from '../../internal.utils.js'\n\nconst defaultError = (context: HookContext) =>\n new MethodNotAllowed(\n `Provider '${context.params.provider}' can not call '${context.method}'.`,\n )\n\nexport type ThrowIfIsIsProviderOptions = {\n filter?: PredicateFn\n /**\n * Customize the error that is thrown if the context is a provider and the service does not allow it.\n * If not provided, throws a `MethodNotAllowed` error.\n */\n error?: (context: HookContext) => FeathersError\n}\n\n/**\n * Throw an error for certain transports.\n *\n * @see https://utils.feathersjs.com/hooks/throw-if-is-provider.html\n */\nexport const throwIfIsProvider = <H extends HookContext = HookContext>(\n transports: TransportName | TransportName[],\n options?: ThrowIfIsIsProviderOptions,\n) => {\n const disallowTransports = toArray(transports)\n\n return throwIf<H>(\n every(isProvider(...(disallowTransports as any)), options?.filter),\n {\n error: options?.error ?? defaultError,\n },\n )\n}\n","import type { HookContext, NextFunction, Query } from '@feathersjs/feathers'\nimport type { TransformerFn } from '../../types.js'\n\n/**\n * Transforms the query object.\n */\nexport const transformQuery = <\n Q extends Query,\n H extends HookContext = HookContext,\n>(\n transformer: TransformerFn<Q, H>,\n) => {\n return (context: H, next?: NextFunction) => {\n context.params.query = transformer(context.params.query ?? {}, {\n context,\n i: 0,\n })\n\n if (next) {\n return next().then(() => context)\n }\n\n return context\n }\n}\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport { mutateResult } from '../../utils/mutate-result/mutate-result.util.js'\nimport type { DispatchOption, TransformerFn } from '../../types.js'\n\nexport type TransformResultOptions = {\n dispatch?: DispatchOption\n}\n\n/**\n * Make changes to items in `context.result`. Very flexible.\n *\n * @see https://utils.feathersjs.com/hooks/transform-result.html\n */\nexport const transformResult =\n <T = Record<string, any>, H extends HookContext = HookContext>(\n transformer: TransformerFn<T, H>,\n options?: TransformResultOptions,\n ) =>\n (context: H, next?: NextFunction) =>\n mutateResult(context, transformer, {\n next,\n dispatch: options?.dispatch,\n })\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport { traverse as _traverse } from '../../common/index.js'\n\nexport type TraverseOptions = {\n transformer: (transformContext: any) => any\n getObject: (\n context: HookContext,\n ) => Record<string, any> | Record<string, any>[]\n}\n\n/**\n * Transform fields & objects in place in the record(s) using a recursive walk. Powerful.\n * Check docs at https://github.com/substack/js-traverse for info on transformContext!\n *\n * @see https://utils.feathersjs.com/hooks/traverse.html\n */\nexport const traverse =\n <H extends HookContext = HookContext>({\n transformer,\n getObject,\n }: TraverseOptions) =>\n (context: H, next?: NextFunction) => {\n _traverse(getObject(context), transformer)\n\n if (next) {\n return next()\n }\n\n return context\n }\n","import type { HookContext } from '@feathersjs/feathers'\nimport { iffElse } from '../iff-else/iff-else.hook.js'\nimport type { PredicateFn, HookFunction } from '../../types.js'\n\n/**\n * Execute a series of hooks if a sync or async predicate is falsy.\n *\n * @see https://utils.feathersjs.com/hooks/unless.html\n */\nexport function unless<H extends HookContext = HookContext>(\n predicate: boolean | PredicateFn,\n ...hooks: HookFunction<H>[]\n) {\n return iffElse(predicate, undefined, [...hooks])\n}\n"]}
1
+ {"version":3,"sources":["../src/utils/combine/combine.util.ts","../src/hooks/cache/cache-utils.ts","../src/hooks/cache/cache.hook.ts","../src/hooks/check-multi/check-multi.hook.ts","../src/hooks/check-required/check-required.hook.ts","../src/hooks/create-related/create-related.hook.ts","../src/hooks/debug/debug.hook.ts","../src/hooks/disable-pagination/disable-pagination.hook.ts","../src/hooks/disallow/disallow.hook.ts","../src/hooks/iff-else/iff-else.hook.ts","../src/hooks/iff/iff.hook.ts","../src/hooks/on-delete/on-delete.hook.ts","../src/hooks/params-for-server/params-for-from-shared.ts","../src/hooks/params-for-server/params-for-server.hook.ts","../src/hooks/params-from-client/params-from-client.hook.ts","../src/hooks/transform-data/transform-data.hook.ts","../src/hooks/prevent-changes/prevent-changes.hook.ts","../src/hooks/set-data/set-data.hook.ts","../src/hooks/set-field/set-field.hook.ts","../src/hooks/set-result/set-result.hook.ts","../src/hooks/set-slug/set-slug.hook.ts","../src/hooks/skippable/skippable.ts","../src/hooks/soft-delete/soft-delete.hook.ts","../src/hooks/stash-before/stash-before.hook.ts","../src/hooks/throw-if/throw-if.hook.ts","../src/hooks/throw-if-is-multi/throw-if-is-multi.hook.ts","../src/hooks/throw-if-is-provider/throw-if-is-provider.hook.ts","../src/hooks/transform-query/transform-query.hook.ts","../src/hooks/transform-result/transform-result.hook.ts","../src/hooks/traverse/traverse.hook.ts","../src/hooks/unless/unless.hook.ts"],"names":["key","_has","MethodNotAllowed","onDelete","BadRequest","_get","Forbidden","_set","skip","isMulti","defaultError","traverse"],"mappings":"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","file":"chunk-TIH5MKEQ.js","sourcesContent":["import type { HookContext } from '@feathersjs/feathers'\nimport type { HookFunction } from '../../types.js'\n\n/**\n * Sequentially execute multiple hooks.\n *\n * @see https://utils.feathersjs.com/utils/combine.html\n */\nexport function combine<H extends HookContext = HookContext>(\n ...serviceHooks: HookFunction<H>[]\n) {\n const isContext = function (ctx: H) {\n return typeof ctx?.method === 'string' && typeof ctx?.type === 'string'\n }\n\n return async function (context: H) {\n let ctx = context\n\n const updateCurrentHook = (current: void | H) => {\n // Either use the returned hook object or the current\n // hook object from the chain if the hook returned undefined\n if (current) {\n if (!isContext(current)) {\n throw new Error(\n `${ctx.type} hook for '${ctx.method}' method returned invalid hook object`,\n )\n }\n\n ctx = current\n }\n\n return ctx\n }\n\n // Go through all hooks and chain them into our promise\n\n // @ts-expect-error TODO\n const promise = serviceHooks.reduce(async (current, fn) => {\n // @ts-expect-error TODO\n const hook = fn.bind(this)\n\n // Use the returned hook object or the old one\n\n const currentHook = await current\n const currentCtx = await hook(currentHook)\n return updateCurrentHook(currentCtx)\n }, Promise.resolve(ctx))\n\n try {\n await promise\n return ctx\n } catch (error: any) {\n // Add the hook information to any errors\n error.hook = ctx\n throw error\n }\n }\n}\n","import isObject from 'lodash/isObject.js'\n\nexport const stableStringify = (obj: Record<string, any>) => {\n return JSON.stringify(obj, (key, value) => {\n if (typeof value === 'function') {\n throw new Error('Cannot stringify non JSON value')\n }\n\n if (isObject(value)) {\n return Object.keys(value)\n .sort()\n .reduce(\n (result, key) => {\n result[key] = (value as any)[key]\n return result\n },\n {} as Record<string, any>,\n )\n }\n\n return value\n })\n}\n","import type { HookContext, NextFunction, Params } from '@feathersjs/feathers'\nimport { stableStringify } from './cache-utils.js'\nimport copy from 'fast-copy'\nimport type { Promisable } from '../../internal.utils.js'\n\ntype Cache = {\n get: (key: string) => Promisable<any>\n set: (key: string, value: any) => Promisable<any>\n delete: (key: string) => Promisable<any>\n clear: () => any\n keys: () => Generator<string, void, unknown>\n}\n\nexport type CacheOptions = {\n /**\n * The cache implementation to use. It should implement the methods `get`, `set`, `delete`, `clear`, and `keys`.\n * This can be a Map, Redis client, or any other cache implementation.\n *\n * Use 'lru-cache' for an LRU cache implementation.\n */\n map: Cache\n /**\n * The id field to use for caching. Defaults to `service.options.id` and if not found, then 'id'.\n */\n id?: string\n /**\n * params are stringified for the key-value cache.\n * There are params properties you don't want to include in the cache key.\n * You can use this function to transform the params before they are stringified.\n */\n transformParams: (params: Params) => Params\n}\n\nexport const cache = <H extends HookContext = HookContext>(\n options: CacheOptions,\n) => {\n const cacheMap = new ContextCacheMap(options)\n return async (context: H, next?: NextFunction) => {\n if (context.type === 'before') {\n return await cacheBefore(context, cacheMap)\n }\n if (context.type === 'after') {\n return await cacheAfter(context, cacheMap)\n }\n\n if (context.type === 'around' && next) {\n await cacheBefore(context, cacheMap)\n await next()\n await cacheAfter(context, cacheMap)\n return context\n }\n }\n}\n\nconst cacheBefore = async (context: HookContext, cacheMap: ContextCacheMap) => {\n if (context.method === 'get' || context.method === 'find') {\n const value = await cacheMap.get(context)\n if (value) {\n context.result = value\n }\n }\n\n return context\n}\n\nconst cacheAfter = async (context: HookContext, cacheMap: ContextCacheMap) => {\n if (context.method === 'get' || context.method === 'find') {\n await cacheMap.set(context)\n } else {\n await cacheMap.clear(context)\n }\n\n return context\n}\n\nclass ContextCacheMap {\n map: Cache\n private delimiter = ':'\n private options: CacheOptions\n\n constructor(options: CacheOptions) {\n this.map = options.map\n this.options = options\n }\n\n private stringifyCacheKey(context: HookContext) {\n if (context.method !== 'get' && context.method !== 'find') {\n throw new Error(\n `Cache can only be used with 'get' or 'find' methods, not '${context.method}'`,\n )\n }\n\n const stringifiedParams = stableStringify(\n this.options.transformParams(context.params ?? {}),\n )\n\n return `${context.id ?? 'null'}${this.delimiter}${stringifiedParams}`\n }\n\n private getCachedId(key: string) {\n const index = key.indexOf(this.delimiter)\n if (index === -1) {\n throw new Error(\n `Cache key '${key}' does not contain a delimiter '${this.delimiter}'`,\n )\n }\n return key.substring(0, index)\n }\n\n private getId(item: Record<string, any>, context: HookContext) {\n const idField = context.service.options?.id || this.options.id || 'id'\n const id = item[idField]\n return id && id.toString ? id.toString() : id\n }\n\n /**\n * Called before get() and find()\n *\n * returns a cached result for the given context if it exists.\n */\n async get(context: HookContext) {\n const key = this.stringifyCacheKey(context)\n const result = this.map.get(key)\n if (result) {\n return copy(result) // Use copy to avoid mutation of the original result\n }\n }\n\n /**\n * Called after get() and find()\n *\n * Caches the result for the given context.\n */\n async set(context: HookContext) {\n const key = this.stringifyCacheKey(context)\n return this.map.set(key, copy(context.result)) // Use copy to avoid mutation of the original result\n }\n\n // Called after create(), update(), patch(), and remove()\n async clear<H extends HookContext>(context: H): Promise<H> {\n const results = Array.isArray(context.result)\n ? context.result\n : [context.result]\n\n const promises: Promise<any>[] = []\n\n const itemIds = results\n .map((item: any) => this.getId(item, context))\n .filter(Boolean)\n\n // If no itemIds are found, clear the entire cache to avoid stale data\n if (!itemIds.length) {\n await this.map.clear()\n return context\n }\n\n for (const key of this.map.keys()) {\n const cachedId = this.getCachedId(key)\n if (cachedId === 'null') {\n // This is a cached `find` request. Any create/patch/update/del\n // could affect the results of this query so it should be deleted\n promises.push(this.map.delete(key))\n continue\n }\n\n // This is a cached `get` request\n\n if (context.method === 'create') {\n // If this is a create, we don't need to delete any cached get requests\n continue\n }\n\n for (const itemId of itemIds) {\n if (cachedId === itemId) {\n // If the cached id matches the item id, delete the cached get\n promises.push(this.map.delete(key))\n }\n }\n }\n\n await Promise.all(promises)\n\n return context\n }\n}\n","import type { FeathersError } from '@feathersjs/errors'\nimport { MethodNotAllowed } from '@feathersjs/errors'\nimport type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport { isMulti } from '../../predicates/index.js'\n\nexport type CheckMultiOptions = {\n /**\n * Customize the error that is thrown if the service does not allow multi operations.\n *\n * If not provided, throws a `MethodNotAllowed` error with a message indicating the operation.\n */\n error?: (context: HookContext) => FeathersError\n}\n\n/**\n * Check if the 'multi' option is set for a method. You can use this to early throw an error if 'multi' is not set.\n *\n * @see https://utils.feathersjs.com/hooks/check-multi.html\n */\nexport function checkMulti<H extends HookContext = HookContext>(\n options?: CheckMultiOptions,\n) {\n return (context: H, next?: NextFunction) => {\n const { service, method } = context\n if (!service.allowsMulti || !isMulti(context) || method === 'find') {\n return context\n }\n\n if (!service.allowsMulti(method)) {\n throw options?.error\n ? options.error(context)\n : new MethodNotAllowed(`Can not ${method} multiple entries`)\n }\n\n if (next) {\n return next()\n }\n\n return context\n }\n}\n","import _get from 'lodash/get.js'\nimport _has from 'lodash/has.js'\nimport { BadRequest } from '@feathersjs/errors'\n\nimport { checkContext, getDataIsArray } from '../../utils/index.js'\nimport type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport type { MaybeArray } from '../../internal.utils.js'\nimport { toArray } from '../../internal.utils.js'\n\n/**\n * Check selected fields exist and are not falsey. Numeric 0 is acceptable.\n *\n * @see https://utils.feathersjs.com/hooks/check-required.html\n */\nexport function checkRequired<H extends HookContext = HookContext>(\n fieldNames: MaybeArray<string>,\n) {\n const fieldNamesArray = toArray(fieldNames)\n return (context: H, next?: NextFunction) => {\n checkContext(\n context,\n ['before', 'around'],\n ['create', 'update', 'patch'],\n 'checkRequired',\n )\n\n const { data } = getDataIsArray(context)\n\n for (let i = 0; i < data.length; i++) {\n const item = data[i]\n\n for (let j = 0; j < fieldNamesArray.length; j++) {\n const name = fieldNamesArray[j]\n\n if (!_has(item, name)) {\n throw new BadRequest(`Field ${name} does not exist. (required)`)\n }\n\n const value = _get(item, name)\n\n if (!value && value !== 0 && value !== false) {\n throw new BadRequest(`Field ${name} is null. (required)`)\n }\n }\n }\n\n if (next) return next().then(() => context)\n }\n}\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport { checkContext, getResultIsArray } from '../../utils/index.js'\nimport type { MaybeArray, Promisable } from '../../internal.utils.js'\n\nexport interface CreateRelatedOptions<S = Record<string, any>> {\n service: keyof S\n multi?: boolean\n data: (item: any, context: HookContext) => Promisable<Record<string, any>>\n}\n\n/**\n * Create related records in other services.\n *\n * @see https://utils.feathersjs.com/hooks/create-related.html\n */\nexport function createRelated<\n S = Record<string, any>,\n H extends HookContext = HookContext,\n>(options: MaybeArray<CreateRelatedOptions<S>>) {\n return async (context: H, next?: NextFunction) => {\n checkContext(context, ['after', 'around'], ['create'], 'createRelated')\n\n if (next) {\n await next()\n }\n\n const { result } = getResultIsArray(context)\n\n const entries = Array.isArray(options) ? options : [options]\n\n await Promise.all(\n entries.map(async (entry) => {\n const { data, service, multi } = entry\n\n const dataToCreate = (\n await Promise.all(result.map(async (item) => data(item, context)))\n ).filter((x) => !!x)\n\n if (!dataToCreate || dataToCreate.length <= 0) {\n return context\n }\n\n if (multi || dataToCreate.length === 1) {\n await context.app\n .service(service as string)\n .create(dataToCreate.length === 1 ? dataToCreate[0] : dataToCreate)\n } else {\n await Promise.all(\n dataToCreate.map(async (item) =>\n context.app.service(service as string).create(item),\n ),\n )\n }\n }),\n )\n\n return context\n }\n}\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\n\n/**\n * Display the current hook context for debugging.\n *\n * @see https://utils.feathersjs.com/hooks/debug.html\n */\nexport const debug =\n <H extends HookContext = HookContext>(msg: string, ...fieldNames: string[]) =>\n async (context: H, next?: NextFunction) => {\n if (next) {\n await next()\n }\n\n // display timestamp\n const now = new Date()\n console.log(\n `${now.getFullYear()}-${\n now.getMonth() + 1\n }-${now.getDate()} ${now.getHours()}:${now.getMinutes()}:${now.getSeconds()}`,\n )\n\n if (msg) {\n console.log(msg)\n }\n\n // display service, method & type of hook (before/after/error)\n console.log(\n `${context.type} service('${context.path}').${context.method}()`,\n )\n\n // display id for get, patch, update & remove\n if (!['find', 'create'].includes(context.method) && 'id' in context) {\n console.log('id:', context.id)\n }\n\n if (context.data) {\n console.log('data:', context.data)\n }\n\n if (context.params?.query) {\n console.log('query:', context.params.query)\n }\n\n if (context.result) {\n console.log('result:', context.result)\n }\n\n // display additional params\n const params = context.params || {}\n console.log('params props:', Object.keys(params).sort())\n\n fieldNames.forEach((name) => {\n console.log(`params.${name}:`, params[name])\n })\n\n if (context.error) {\n console.log('error', context.error)\n }\n }\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport { checkContext } from '../../utils/index.js'\n\n/**\n * Disables pagination when `query.$limit` is `-1` or `'-1'`.\n *\n * @see https://utils.feathersjs.com/hooks/disable-pagination.html\n */\nexport const disablePagination =\n <H extends HookContext = HookContext>() =>\n (context: H, next?: NextFunction) => {\n checkContext(context, 'before', ['find'], 'disablePagination')\n const $limit = context.params?.query?.$limit\n\n if ($limit === '-1' || $limit === -1) {\n context.params.paginate = false\n delete context.params.query.$limit\n }\n\n if (next) return next().then(() => context)\n\n return context\n }\n","import { MethodNotAllowed } from '@feathersjs/errors'\nimport type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport type { TransportName } from '../../types.js'\nimport { isProvider } from '../../predicates/index.js'\nimport type { MaybeArray } from '../../internal.utils.js'\nimport { toArray } from '../../internal.utils.js'\n\n/**\n * Prevents access to a service method completely or for specific transports.\n *\n * @see https://utils.feathersjs.com/hooks/disallow.html\n */\nexport const disallow = <H extends HookContext = HookContext>(\n transports?: MaybeArray<TransportName>,\n) => {\n const transportsArr = toArray(transports)\n return (context: H, next?: NextFunction) => {\n if (!transports) {\n throw new MethodNotAllowed('Method not allowed')\n }\n\n if (isProvider(...(transportsArr as TransportName[]))(context)) {\n throw new MethodNotAllowed(\n `Provider '${context.params.provider}' can not call '${context.method}'. (disallow)`,\n )\n }\n\n if (next) return next().then(() => context)\n }\n}\n","import type { HookContext } from '@feathersjs/feathers'\nimport { isPromise } from '../../common/index.js'\nimport { combine } from '../../utils/combine/combine.util.js'\nimport type { HookFunction, PredicateFn } from '../../types.js'\n\n/**\n * Execute one array of hooks or another based on a sync or async predicate.\n *\n * @see https://utils.feathersjs.com/hooks/iff-else.html\n */\nexport function iffElse<H extends HookContext = HookContext>(\n predicate: boolean | PredicateFn<H>,\n trueHook: HookFunction<H> | HookFunction<H>[] | undefined,\n falseHook?: HookFunction<H> | HookFunction<H>[] | undefined,\n) {\n // fnArgs is [context] for service & permission hooks, [data, connection, context] for event filters\n return function (this: any, ctx: H) {\n const trueHooks = Array.isArray(trueHook)\n ? trueHook\n : typeof trueHook === 'function'\n ? [trueHook]\n : undefined\n\n const falseHooks = Array.isArray(falseHook)\n ? falseHook\n : typeof falseHook === 'function'\n ? [falseHook]\n : undefined\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const that = this\n const check =\n typeof predicate === 'function'\n ? predicate.apply(that, [ctx])\n : !!predicate\n\n if (!check) {\n return callHooks.call(that, ctx, falseHooks as any)\n }\n\n if (!isPromise(check)) {\n return callHooks.call(that, ctx, trueHooks as any)\n }\n\n return check.then((check1: any) => {\n const hooks = check1 ? trueHooks : falseHooks\n return callHooks.call(that, ctx, hooks as any)\n })\n }\n}\n\nfunction callHooks<H extends HookContext = HookContext>(\n this: any,\n ctx: H,\n serviceHooks: HookFunction<H>[],\n) {\n return serviceHooks ? combine(...serviceHooks).call(this, ctx) : ctx\n}\n","import type { HookContext } from '@feathersjs/feathers'\nimport { iffElse } from '../iff-else/iff-else.hook.js'\nimport type { HookFunction, PredicateFn } from '../../types.js'\n\nexport interface IffHook<H extends HookContext = HookContext>\n extends HookFunction<H> {\n else(...hooks: HookFunction<H>[]): HookFunction<H>\n}\n\n/**\n * Execute one or another series of hooks depending on a sync or async predicate.\n *\n * @see https://utils.feathersjs.com/hooks/iff.html\n */\nexport function iff<H extends HookContext = HookContext>(\n predicate: boolean | PredicateFn<H>,\n ...hooks: HookFunction<H>[]\n): IffHook<H> {\n if (hooks.length && Array.isArray(hooks[0])) {\n hooks = hooks[0]\n }\n\n const iffWithoutElse = function (context: H) {\n return iffElse(predicate, hooks.slice())(context)\n }\n\n iffWithoutElse.else =\n (...falseHooks: any[]) =>\n (context: H) =>\n iffElse(predicate, hooks.slice(), falseHooks.slice())(context)\n\n return iffWithoutElse as IffHook<H>\n}\n\nexport { iff as when }\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport { checkContext, getResultIsArray } from '../../utils/index.js'\nimport type { KeyOf, MaybeArray } from '../../internal.utils.js'\n\nexport type OnDeleteAction = 'cascade' | 'set null'\n\nexport interface OnDeleteOptions<Path extends string = string> {\n /**\n * The related service where related items should be manipulated\n */\n service: Path\n /**\n * The propertyKey in the related service\n */\n keyThere: string\n /**\n * The propertyKey in the current service.\n */\n keyHere: string\n /**\n * The action to perform on the related items.\n *\n * - `cascade`: remove related items\n * - `set null`: set the related property to null\n */\n onDelete: OnDeleteAction\n /**\n * If true, the hook will wait for the service to finish before continuing\n *\n * @default false\n */\n blocking?: boolean\n}\n\n/**\n * hook to manipulate related items on delete.\n *\n * This can be handled by your database, but this hook allows you to do it in your application logic.\n * Then you get service events and hooks for the related items.\n *\n * @see https://utils.feathersjs.com/hooks/on-delete.html\n */\nexport const onDelete = <\n S = Record<string, any>,\n H extends HookContext = HookContext,\n>(\n options: MaybeArray<OnDeleteOptions<KeyOf<S>>>,\n) => {\n const optionsMulti = Array.isArray(options) ? options : [options]\n\n return async (context: H, next?: NextFunction) => {\n checkContext(context, ['after', 'around'], 'remove', 'onDelete')\n\n if (next) {\n await next()\n }\n\n const { result } = getResultIsArray(context)\n\n if (!result.length) {\n return context\n }\n\n const promises: Promise<any>[] = []\n\n optionsMulti.forEach(\n async ({ keyHere, keyThere, onDelete, service, blocking }) => {\n let ids = result.map((x) => x[keyHere]).filter((x) => !!x)\n ids = [...new Set(ids)]\n\n if (!ids || ids.length <= 0) {\n return context\n }\n\n const params = {\n query: {\n ...(ids.length === 1\n ? { [keyThere]: ids[0] }\n : { [keyThere]: { $in: ids } }),\n },\n paginate: false,\n }\n\n let promise: Promise<any> | undefined = undefined\n\n if (onDelete === 'cascade') {\n promise = context.app.service(service as string).remove(null, params)\n } else if (onDelete === 'set null') {\n const data = { [keyThere]: null }\n promise = context.app\n .service(service as string)\n .patch(null, data, params)\n }\n\n if (promise && blocking) {\n promises.push(promise)\n }\n },\n )\n\n if (promises.length) {\n await Promise.all(promises)\n }\n\n return context\n }\n}\n","export const FROM_CLIENT_FOR_SERVER_DEFAULT_KEY = '_$client' as const\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport type { MaybeArray } from '../../internal.utils.js'\nimport { toArray } from '../../internal.utils.js'\nimport { FROM_CLIENT_FOR_SERVER_DEFAULT_KEY } from './params-for-from-shared.js'\n\nexport type ParamsForServerOptions = {\n /**\n * @default '_$client'\n */\n keyToHide?: string\n}\n\n/**\n * a hook to move params to query._$client\n * the server only receives 'query' from params. All other params are ignored.\n * So, to use `$populateParams` on the server, we need to move the params to query._$client\n * the server will move them back to params\n *\n * @see https://utils.feathersjs.com/hooks/params-for-server.html\n */\nexport const paramsForServer = (\n whitelist: MaybeArray<string>,\n options?: ParamsForServerOptions,\n) => {\n const whitelistArr = toArray(whitelist)\n\n const { keyToHide = FROM_CLIENT_FOR_SERVER_DEFAULT_KEY } = options || {}\n\n return <H extends HookContext>(context: H, next?: NextFunction) => {\n // clone params on demand\n let clonedParams: any\n\n Object.keys(context.params).forEach((key) => {\n if (key === 'query') {\n return\n }\n\n if (whitelistArr.includes(key)) {\n if (!clonedParams) {\n clonedParams = {\n ...context.params,\n query: {\n ...context.params.query,\n },\n }\n }\n\n if (!clonedParams.query[keyToHide]) {\n clonedParams.query[keyToHide] = {}\n }\n\n clonedParams.query[keyToHide][key] = clonedParams[key]\n delete clonedParams[key]\n }\n })\n\n if (clonedParams) {\n context.params = clonedParams\n }\n\n if (next) {\n return next()\n }\n\n return context\n }\n}\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport type { MaybeArray } from '../../internal.utils.js'\nimport { toArray } from '../../internal.utils.js'\nimport { FROM_CLIENT_FOR_SERVER_DEFAULT_KEY } from '../params-for-server/params-for-from-shared.js'\n\nexport type paramsFromClientOptions = {\n /**\n * @default '_$client'\n */\n keyToHide?: string\n}\n\n/**\n * Pass `context.params` from client to server. Server hook.\n *\n * @see https://utils.feathersjs.com/hooks/params-from-client.html\n */\nexport const paramsFromClient = (\n whitelist: MaybeArray<string>,\n options?: paramsFromClientOptions,\n) => {\n const whitelistArr = toArray(whitelist)\n const { keyToHide = FROM_CLIENT_FOR_SERVER_DEFAULT_KEY } = options || {}\n return (context: HookContext, next?: NextFunction) => {\n if (\n !context.params?.query?.[keyToHide] ||\n typeof context.params.query[keyToHide] !== 'object'\n ) {\n return context\n }\n\n const params = {\n ...context.params,\n query: {\n ...context.params.query,\n [keyToHide]: {\n ...context.params.query[keyToHide],\n },\n },\n }\n\n const client = params.query[keyToHide]\n\n whitelistArr.forEach((key) => {\n if (key in client) {\n params[key] = client[key]\n delete client[key]\n }\n })\n\n if (Object.keys(client).length === 0) {\n delete params.query[keyToHide]\n }\n\n context.params = params\n\n if (next) {\n return next()\n }\n\n return context\n }\n}\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport { mutateData } from '../../utils/mutate-data/mutate-data.util.js'\nimport type { TransformerFn } from '../../types.js'\n\n/**\n * Make changes to items in `context.data`. Very flexible.\n *\n * @see https://utils.feathersjs.com/hooks/transform-data.html\n */\nexport const transformData =\n <T = Record<string, any>, H extends HookContext = HookContext>(\n transformer: TransformerFn<T, H>,\n ) =>\n async (context: H, next?: NextFunction) => {\n await mutateData(context, transformer)\n\n if (next) {\n return next()\n }\n\n return context\n }\n","import _has from 'lodash/has.js'\nimport _omit from 'lodash/omit.js'\nimport type { FeathersError } from '@feathersjs/errors'\nimport { BadRequest } from '@feathersjs/errors'\nimport { transformData } from '../transform-data/transform-data.hook.js'\nimport type { MaybeArray } from '../../internal.utils.js'\nimport { toArray } from '../../internal.utils.js'\n\nexport type PreventChangesOptions = {\n /**\n * Customize the error that is thrown if the service tries to patch a field that is not allowed.\n *\n * If not provided, throws a `BadRequest` error with a message indicating the field that is not allowed.\n */\n error?: boolean | ((item: any, name: string) => FeathersError)\n}\n\n/**\n * Prevent patch service calls from changing certain fields.\n *\n * @see https://utils.feathersjs.com/hooks/prevent-changes.html\n */\nexport const preventChanges = (\n fieldNames: MaybeArray<string>,\n options?: PreventChangesOptions,\n) => {\n const fieldNamesArr = toArray(fieldNames)\n\n return transformData((item) => {\n if (options?.error) {\n for (let i = 0; i < fieldNamesArr.length; i++) {\n const name = fieldNamesArr[i]\n\n if (_has(item, name)) {\n const error =\n typeof options.error === 'function'\n ? options.error(item, name)\n : new BadRequest(\n `Field ${name} may not be patched. (preventChanges)`,\n )\n\n throw error\n }\n }\n } else {\n item = _omit(item, fieldNamesArr)\n }\n\n return item\n })\n}\n","import _get from 'lodash/get.js'\nimport _set from 'lodash/set.js'\nimport _has from 'lodash/has.js'\n\nimport type { FeathersError } from '@feathersjs/errors'\nimport { Forbidden } from '@feathersjs/errors'\n\nimport type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport type { PropertyPath } from 'lodash'\nimport { contextToJson } from '../../utils/context-to-json/context-to-json.util.js'\nimport { getDataIsArray } from '../../utils/index.js'\nimport type { PredicateItemWithContext } from '../../types.js'\n\nexport interface HookSetDataOptions {\n /**\n * Wether to throw if the context[from] is undefined.\n *\n * @default false\n */\n allowUndefined?: boolean\n /**\n * @default true\n */\n overwrite?: boolean | PredicateItemWithContext\n /**\n * Customize the error that is thrown if the context[from] is not available.\n * If not provided, throws a `Forbidden` error with a message indicating the missing field.\n */\n error?: (context: HookContext, from: PropertyPath) => FeathersError\n}\n\n/**\n * hook to set properties on `context.data`\n *\n * @see https://utils.feathersjs.com/hooks/set-data.html\n */\nexport function setData<H extends HookContext = HookContext>(\n /**\n * The property path of the context to set the value from. 'dot.notation' is supported.\n *\n * If the property does not exist, the hook will throw an error unless `allowUndefined` is set to true.\n * If the property exists, it will be set to the value of the `to` property path of the data item.\n *\n * @example 'params.user.id'\n */\n from: PropertyPath,\n /**\n * The property path of the data item to set the value to. 'dot.notation' is supported.\n *\n * If the property does not exist, it will be created.\n * If the property exists, it will be overwritten unless `overwrite` is set to false.\n *\n * @example 'userId'\n */\n to: PropertyPath,\n options?: HookSetDataOptions,\n) {\n const { allowUndefined = false, overwrite = true } = options ?? {}\n\n return (context: H, next?: NextFunction) => {\n const { data } = getDataIsArray(context)\n\n const contextJson = contextToJson(context)\n\n if (!_has(contextJson, from)) {\n if (!context.params?.provider || allowUndefined === true) {\n return context\n }\n\n if (\n !overwrite &&\n data.every((item: Record<string, unknown>) => _has(item, to))\n ) {\n return context\n }\n\n throw options?.error\n ? options.error(context, from)\n : new Forbidden(`Expected field ${from.toString()} not available`)\n }\n\n const val = _get(contextJson, from)\n\n for (let i = 0, len = data.length; i < len; i++) {\n const item: Record<string, unknown> = data[i]\n\n const currentOverwrite =\n typeof overwrite === 'function' ? overwrite(item, context) : overwrite\n\n if (!currentOverwrite && _has(item, to)) {\n continue\n }\n\n _set(item, to, val)\n }\n\n if (next) {\n return next()\n }\n\n return context\n }\n}\n","import _get from 'lodash/get.js'\nimport _setWith from 'lodash/setWith.js'\nimport _clone from 'lodash/clone.js'\nimport { checkContext } from '../../utils/index.js'\nimport type { FeathersError } from '@feathersjs/errors'\nimport { Forbidden } from '@feathersjs/errors'\nimport type { HookContext, NextFunction } from '@feathersjs/feathers'\n\nexport interface SetFieldOptions {\n as: string\n from: string\n /**\n * If set to `true`, allows the field to be undefined.\n * If the field is not available and this is `true`, the hook will not throw an error.\n *\n * If set to `false`, the hook will throw an error if the field is not available.\n *\n * @default false\n */\n allowUndefined?: boolean\n /**\n * Customize the error that is thrown if the field is not available.\n *\n * If not provided, throws a `Forbidden` error with a message indicating the missing field.\n */\n error?: (context: HookContext, from: string) => FeathersError\n}\n\n/**\n * The `setField` hook allows to set a field on the hook context based on the value of another field on the hook context.\n *\n * @see https://utils.feathersjs.com/hooks/set-field.html\n */\nexport const setField =\n <H extends HookContext = HookContext>({\n as,\n from,\n allowUndefined = false,\n error,\n }: SetFieldOptions) =>\n (context: H, next?: NextFunction) => {\n const { params } = context\n\n checkContext(context, ['before', 'around'], null, 'setField')\n\n const value = _get(context, from)\n\n if (value === undefined) {\n if (!params.provider || allowUndefined) {\n return context\n }\n\n throw error\n ? error(context, from)\n : new Forbidden(`Expected field ${as} not available`)\n }\n\n context = _setWith(context, as, value, _clone)\n\n if (next) return next()\n\n return context\n }\n","import _get from 'lodash/get.js'\nimport _set from 'lodash/set.js'\nimport _has from 'lodash/has.js'\n\nimport type { FeathersError } from '@feathersjs/errors'\nimport { Forbidden } from '@feathersjs/errors'\n\nimport type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport type { PropertyPath } from 'lodash'\nimport { contextToJson } from '../../utils/context-to-json/context-to-json.util.js'\nimport { getResultIsArray } from '../../utils/index.js'\nimport type { DispatchOption, PredicateItemWithContext } from '../../types.js'\n\nexport interface SetResultOptions {\n /**\n * Wether to throw if the context[from] is undefined.\n *\n * @default false\n */\n allowUndefined?: boolean\n /**\n * @default true\n */\n overwrite?: boolean | PredicateItemWithContext\n /**\n * Customize the error that is thrown if the context[from] is not available.\n * If not provided, throws a `Forbidden` error with a message indicating the missing field.\n */\n error?: (context: HookContext, from: PropertyPath) => FeathersError\n dispatch?: DispatchOption\n}\n\n/**\n * hook to set properties on `context.result`\n *\n * @see https://utils.feathersjs.com/hooks/set-result.html\n */\nexport function setResult<H extends HookContext = HookContext>(\n /**\n * The property path of the context to set the value from. 'dot.notation' is supported.\n *\n * If the property does not exist, the hook will throw an error unless `allowUndefined` is set to true.\n * If the property exists, it will be set to the value of the `to` property path of the data item.\n *\n * @example 'params.user.id'\n */\n from: PropertyPath,\n /**\n * The property path of the data item to set the value to. 'dot.notation' is supported.\n *\n * If the property does not exist, it will be created.\n * If the property exists, it will be overwritten unless `overwrite` is set to false.\n *\n * @example 'userId'\n */\n to: PropertyPath,\n options?: SetResultOptions,\n) {\n const { allowUndefined = false, overwrite = true } = options ?? {}\n\n const forResultOrDispatch = (context: H, dispatch: boolean) => {\n const { result } = getResultIsArray(context, { dispatch })\n\n const contextJson = contextToJson(context)\n\n if (!_has(contextJson, from)) {\n if (!context.params?.provider || allowUndefined === true) {\n return context\n }\n\n if (\n !overwrite &&\n result.every((item: Record<string, unknown>) => _has(item, to))\n ) {\n return context\n }\n\n throw options?.error\n ? options.error(context, from)\n : new Forbidden(`Expected field ${from.toString()} not available`)\n }\n\n const val = _get(contextJson, from)\n\n for (let i = 0; i < result.length; i++) {\n const item: Record<string, unknown> = result[i]\n\n const currentOverwrite =\n typeof overwrite === 'function' ? overwrite(item, context) : overwrite\n\n if (!currentOverwrite && _has(item, to)) {\n continue\n }\n\n _set(item, to, val)\n }\n\n return context\n }\n\n const fn = (context: H) => {\n if (options?.dispatch === 'both') {\n forResultOrDispatch(context, true)\n return forResultOrDispatch(context, false)\n }\n\n return forResultOrDispatch(context, !!options?.dispatch)\n }\n\n return (context: H, next?: NextFunction) => {\n if (next) {\n next().then(() => fn(context))\n }\n\n return fn(context)\n }\n}\n","import _set from 'lodash/set.js'\nimport type { HookContext, NextFunction } from '@feathersjs/feathers'\n\n/**\n * Fix slugs in URL, e.g. /stores/:storeId.\n *\n * @see https://utils.feathersjs.com/hooks/set-slug.html\n */\nexport const setSlug = <H extends HookContext = HookContext>(\n slug: string,\n fieldName?: string,\n) => {\n if (typeof fieldName !== 'string') {\n fieldName = `query.${slug}`\n }\n\n return (context: H, next?: NextFunction) => {\n if (context.params && context.params.provider === 'rest') {\n const value = context.params.route[slug]\n if (typeof value === 'string' && value[0] !== ':') {\n _set(context.params, fieldName, value)\n }\n }\n\n if (next) return next()\n\n return context\n }\n}\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport type { HookFunction, PredicateFn } from '../../types.js'\n\n/**\n * Wrap a hook to make it skippable\n */\nexport const skippable =\n <H extends HookContext = HookContext>(\n hook: HookFunction<H>,\n predicate: PredicateFn<H>,\n ) =>\n (context: H, next?: NextFunction) => {\n const skip = predicate(context)\n\n function skipOrRun(skip: boolean) {\n if (skip) {\n return context\n } else {\n return hook(context, next)\n }\n }\n\n if (!skip || typeof skip === 'boolean') {\n return skipOrRun(skip)\n }\n\n return skip.then(skipOrRun)\n }\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport { checkContext } from '../../utils/index.js'\nimport type { TransformParamsFn } from '../../types.js'\nimport { transformParams } from '../../utils/transform-params/transform-params.util.js'\nimport type { Promisable } from '../../internal.utils.js'\n\nexport type SoftDeleteOptionFunction<H extends HookContext = HookContext> = (\n context?: H,\n) => Promisable<{ [key: string]: any }>\n\nexport interface SoftDeleteOptions<H extends HookContext = HookContext> {\n /**\n * @example { deletedAt: null }\n */\n deletedQuery: { [key: string]: any } | SoftDeleteOptionFunction<H>\n /**\n * @example { deletedAt: new Date() }\n */\n removeData: { [key: string]: any } | SoftDeleteOptionFunction<H>\n /**\n * Transform the params before calling the service method. E.g. remove 'params.provider' or add custom params.\n */\n transformParams?: TransformParamsFn\n\n /**\n * Key in `params` to disable the soft delete functionality.\n *\n * @default 'disableSoftDelete'\n */\n disableSoftDeleteKey?: string\n}\n\n/**\n * Allow to mark items as deleted instead of removing them.\n *\n * @see https://utils.feathersjs.com/hooks/soft-delete.html\n */\nexport const softDelete = <H extends HookContext = HookContext>(\n options: SoftDeleteOptions<H>,\n) => {\n if (!options?.deletedQuery || !options?.removeData) {\n throw new Error(\n 'You must provide `deletedQuery` and `removeData` options to the softDelete hook.',\n )\n }\n\n return async (context: H, next?: NextFunction) => {\n checkContext(context, ['before', 'around'], null, 'softDelete')\n\n const { disableSoftDeleteKey = 'disableSoftDelete' } = options\n\n if (context.params[disableSoftDeleteKey]) {\n return context\n }\n\n const { deletedQuery, removeData } = options\n\n const deleteQuery = await getValue(deletedQuery, context)\n\n const params = transformParams(\n {\n ...context.params,\n query: {\n ...context.params.query,\n ...deleteQuery,\n },\n },\n options.transformParams,\n )\n\n context.params = params\n\n if (context.method === 'remove') {\n const data = await getValue(removeData, context)\n const result = await context.service.patch(context.id, data, params)\n\n context.result = result\n }\n\n if (next) {\n await next()\n }\n\n return context\n }\n}\n\nconst getValue = (value: any, ...args: any[]) => {\n if (typeof value === 'function') {\n return value(...args)\n }\n return value\n}\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport { checkContext } from '../../utils/index.js'\n\n/**\n * Stash current value of record, usually before mutating it. Performs a get call.\n *\n * @see https://utils.feathersjs.com/hooks/stash-before.html\n */\nexport function stashBefore<H extends HookContext = HookContext>(\n fieldName?: string,\n) {\n const beforeField = fieldName || 'before'\n\n return async (context: H, next?: NextFunction) => {\n if (context.params.disableStashBefore) {\n return context\n }\n\n checkContext(\n context,\n ['before', 'around'],\n ['update', 'patch', 'remove'],\n 'stashBefore',\n )\n\n const isMulti = context.id == null\n\n const params = {\n ...context.params,\n disableStashBefore: true,\n ...(isMulti ? { paginate: false } : {}),\n }\n\n await (\n !isMulti\n ? context.service.get(context.id, params)\n : context.service.find(params)\n )\n .then((result: any) => {\n context.params[beforeField] = result\n return context\n })\n .catch(() => {\n return context\n })\n\n if (next) {\n return await next()\n }\n\n return context\n }\n}\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport type { PredicateFn } from '../../types.js'\nimport { BadRequest } from '@feathersjs/errors'\nimport type { FeathersError } from '@feathersjs/errors'\n\nexport type ThrowIfOptions = {\n /**\n * Customize the error that is thrown if the predicate returns true.\n *\n * If not provided, throws a `BadRequest` error with 'Invalid operation'.\n */\n error?: (context: HookContext) => FeathersError\n}\n\n/**\n * Throw an error if the predicate function returns true.\n *\n * This hook is useful for validating conditions before proceeding with the request.\n *\n * @see https://utils.feathersjs.com/hooks/throw-if.html\n */\nexport const throwIf = <H extends HookContext = HookContext>(\n predicate: PredicateFn,\n options?: ThrowIfOptions,\n) => {\n return async (context: H, next?: NextFunction) => {\n const result = await predicate(context)\n\n if (result) {\n throw options?.error\n ? options.error(context)\n : new BadRequest('Invalid operation')\n }\n\n if (next) {\n await next()\n }\n\n return context\n }\n}\n","import type { HookContext } from '@feathersjs/feathers'\nimport type { PredicateFn } from '../../types.js'\nimport { BadRequest, type FeathersError } from '@feathersjs/errors'\nimport { every, isMulti } from '../../predicates/index.js'\nimport { throwIf } from '../throw-if/throw-if.hook.js'\n\nexport type ThrowIfIsMultiOptions = {\n /**\n * A predicate function to filter the contexts that should be checked for multi operations.\n * If provided, only contexts that pass this predicate will be checked for multi operations.\n */\n filter?: PredicateFn\n /**\n * Customize the error that is thrown if the context is multi and the service does not allow it.\n * If not provided, throws a `BadRequest` error.\n */\n error?: (context: HookContext) => FeathersError\n}\n\nconst defaultError = (context: HookContext) =>\n new BadRequest(`Cannot perform multi operation on method '${context.method}'`)\n\n/**\n * Throw an error if the context is multi. You can use this to early return if a user provides an array on create or id:null on patch or remove.\n *\n * @see https://utils.feathersjs.com/hooks/throw-if-is-multi.html\n */\nexport const throwIfIsMulti = <H extends HookContext = HookContext>(\n options?: ThrowIfIsMultiOptions,\n) =>\n throwIf<H>(\n every(\n every(isMulti, (context) => context.method !== 'find'),\n options?.filter,\n ),\n {\n error: options?.error ?? defaultError,\n },\n )\n","import type { HookContext } from '@feathersjs/feathers'\nimport type { PredicateFn, TransportName } from '../../types.js'\nimport { throwIf } from '../throw-if/throw-if.hook.js'\nimport { every, isProvider } from '../../predicates/index.js'\nimport type { FeathersError } from '@feathersjs/errors'\nimport { MethodNotAllowed } from '@feathersjs/errors'\nimport { toArray } from '../../internal.utils.js'\n\nconst defaultError = (context: HookContext) =>\n new MethodNotAllowed(\n `Provider '${context.params.provider}' can not call '${context.method}'.`,\n )\n\nexport type ThrowIfIsIsProviderOptions = {\n filter?: PredicateFn\n /**\n * Customize the error that is thrown if the context is a provider and the service does not allow it.\n * If not provided, throws a `MethodNotAllowed` error.\n */\n error?: (context: HookContext) => FeathersError\n}\n\n/**\n * Throw an error for certain transports.\n *\n * @see https://utils.feathersjs.com/hooks/throw-if-is-provider.html\n */\nexport const throwIfIsProvider = <H extends HookContext = HookContext>(\n transports: TransportName | TransportName[],\n options?: ThrowIfIsIsProviderOptions,\n) => {\n const disallowTransports = toArray(transports)\n\n return throwIf<H>(\n every(isProvider(...(disallowTransports as any)), options?.filter),\n {\n error: options?.error ?? defaultError,\n },\n )\n}\n","import type { HookContext, NextFunction, Query } from '@feathersjs/feathers'\nimport type { TransformerFn } from '../../types.js'\n\n/**\n * Transforms the query object.\n */\nexport const transformQuery = <\n Q extends Query,\n H extends HookContext = HookContext,\n>(\n transformer: TransformerFn<Q, H>,\n) => {\n return (context: H, next?: NextFunction) => {\n context.params.query = transformer(context.params.query ?? {}, {\n context,\n i: 0,\n })\n\n if (next) {\n return next().then(() => context)\n }\n\n return context\n }\n}\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport { mutateResult } from '../../utils/mutate-result/mutate-result.util.js'\nimport type { DispatchOption, TransformerFn } from '../../types.js'\n\nexport type TransformResultOptions = {\n dispatch?: DispatchOption\n}\n\n/**\n * Make changes to items in `context.result`. Very flexible.\n *\n * @see https://utils.feathersjs.com/hooks/transform-result.html\n */\nexport const transformResult =\n <T = Record<string, any>, H extends HookContext = HookContext>(\n transformer: TransformerFn<T, H>,\n options?: TransformResultOptions,\n ) =>\n (context: H, next?: NextFunction) =>\n mutateResult(context, transformer, {\n next,\n dispatch: options?.dispatch,\n })\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport { traverse as _traverse } from '../../common/index.js'\n\nexport type TraverseOptions = {\n transformer: (transformContext: any) => any\n getObject: (\n context: HookContext,\n ) => Record<string, any> | Record<string, any>[]\n}\n\n/**\n * Transform fields & objects in place in the record(s) using a recursive walk. Powerful.\n * Check docs at https://github.com/substack/js-traverse for info on transformContext!\n *\n * @see https://utils.feathersjs.com/hooks/traverse.html\n */\nexport const traverse =\n <H extends HookContext = HookContext>({\n transformer,\n getObject,\n }: TraverseOptions) =>\n (context: H, next?: NextFunction) => {\n _traverse(getObject(context), transformer)\n\n if (next) {\n return next()\n }\n\n return context\n }\n","import type { HookContext } from '@feathersjs/feathers'\nimport { iffElse } from '../iff-else/iff-else.hook.js'\nimport type { PredicateFn, HookFunction } from '../../types.js'\n\n/**\n * Execute a series of hooks if a sync or async predicate is falsy.\n *\n * @see https://utils.feathersjs.com/hooks/unless.html\n */\nexport function unless<H extends HookContext = HookContext>(\n predicate: boolean | PredicateFn,\n ...hooks: HookFunction<H>[]\n) {\n return iffElse(predicate, undefined, [...hooks])\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import { isContext, isPromise, isMulti, isPaginated } from './chunk-KSCPQLU3.js';
2
2
  import { deepEqual } from 'fast-equals';
3
- import { SERVICE } from '@feathersjs/feathers';
3
+ import * as feathers from '@feathersjs/feathers';
4
4
  import copy from 'fast-copy';
5
5
 
6
6
  var addToQuery = (targetQuery, property, value) => {
@@ -86,8 +86,11 @@ function getDataIsArray(context) {
86
86
  data: isArray ? context.data : [context.data]
87
87
  };
88
88
  }
89
+ var SERVICE2 = feathers.SERVICE || feathers.default?.SERVICE;
90
+
91
+ // src/utils/get-exposed-methods/get-exposed-methods.util.ts
89
92
  function getExposedMethods(service) {
90
- const result = service[SERVICE].methods;
93
+ const result = service[SERVICE2].methods;
91
94
  if (!result || !Array.isArray(result)) {
92
95
  throw new Error(`Service does not have exposed methods`);
93
96
  }
@@ -358,5 +361,5 @@ var walkQuery = (query, walker) => {
358
361
  };
359
362
 
360
363
  export { addSkip, addToQuery, checkContext, contextToJson, defineHooks, getDataIsArray, getExposedMethods, getResultIsArray, iterateFind, mutateData, mutateResult, patchBatch, skipResult, transformParams, walkQuery };
361
- //# sourceMappingURL=chunk-4TBKW4G4.js.map
362
- //# sourceMappingURL=chunk-4TBKW4G4.js.map
364
+ //# sourceMappingURL=chunk-VXZDTJGY.js.map
365
+ //# sourceMappingURL=chunk-VXZDTJGY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/add-to-query/add-to-query.util.ts","../src/utils/add-skip/add-skip.util.ts","../src/utils/check-context/check-context.util.ts","../src/utils/context-to-json/context-to-json.util.ts","../src/utils/define-hooks/define-hooks.util.ts","../src/utils/get-data-is-array/get-data-is-array.util.ts","../src/feathers-cjs-fix.ts","../src/utils/get-exposed-methods/get-exposed-methods.util.ts","../src/utils/get-result-is-array/get-result-is-array.util.ts","../src/utils/iterate-find/iterate-find.util.ts","../src/utils/mutate-data/mutate-data.util.ts","../src/utils/mutate-result/mutate-result.util.ts","../src/utils/patch-batch/patch-batch.util.ts","../src/utils/skip-result/skip-result.util.ts","../src/utils/transform-params/transform-params.util.ts","../src/utils/walk-query/walk-query.util.ts"],"names":["SERVICE","data","copy","result","deepEqual"],"mappings":"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","file":"chunk-VXZDTJGY.js","sourcesContent":["import type { Query } from '@feathersjs/feathers'\nimport { deepEqual } from 'fast-equals'\n\n/**\n * Safely adds a property to a query object. If the property already exists, it adds it to the `$and` array.\n * If the exact same property-value pair already exists, it does nothing.\n */\nexport const addToQuery = <Q extends Query>(\n targetQuery: Q,\n property: string,\n value: any,\n) => {\n if (!(property in targetQuery)) {\n return {\n ...targetQuery,\n [property]: value,\n }\n }\n\n if (deepEqual(targetQuery[property], value)) {\n // if the exact same value already exists, do nothing\n return targetQuery\n }\n\n if (!targetQuery.$and) {\n return {\n ...targetQuery,\n $and: [{ [property]: value }],\n }\n }\n\n // check if the exact same value already exists in $and\n if (\n targetQuery.$and.some(\n (q: any) => property in q && deepEqual(q[property], value),\n )\n ) {\n return targetQuery\n }\n\n return {\n ...targetQuery,\n $and: [...targetQuery.$and, { [property]: value }],\n }\n}\n","import type { HookContext, HookType } from '@feathersjs/feathers'\nimport type { MaybeArray } from '../../internal.utils.js'\n\nexport type SkipHookName =\n | 'all'\n | HookType\n | `${HookType}:${string}`\n | (string & {})\n\n/**\n * Add names to `context.params.skipHooks` for `skippable` hooks.\n */\nexport const addSkip = <H extends HookContext>(\n context: H,\n hooks: MaybeArray<SkipHookName>,\n) => {\n const names = Array.isArray(hooks) ? hooks : [hooks]\n\n if (context.params.skipHooks === undefined) {\n context.params = {\n ...context.params,\n skipHooks: [...names],\n }\n } else {\n if (!Array.isArray(context.params.skipHooks)) {\n throw new Error('Invalid skipHooks parameter')\n }\n\n context.params = {\n ...context.params,\n skipHooks: [...new Set([...context.params.skipHooks, ...names])],\n }\n }\n}\n","import type { HookContext } from '@feathersjs/feathers'\nimport type { HookType, MethodName } from '../../types.js'\nimport { isContext } from '../../predicates/is-context/is-context.predicate.js'\n\n/**\n * Restrict a hook to run for certain methods and method types.\n *\n * @see https://utils.feathersjs.com/utils/check-context.html\n */\nexport function checkContext<H extends HookContext = HookContext>(\n context: H,\n type?: HookType | HookType[] | null,\n methods?: MethodName | MethodName[] | null,\n label = 'anonymous',\n): void {\n if (\n !isContext({\n method: methods ?? undefined,\n type: type ?? undefined,\n })(context)\n ) {\n throw new Error(`The '${label}' hook has invalid context.`)\n }\n}\n","import type { HookContext } from '@feathersjs/feathers'\n\n/**\n * Converts a FeathersJS HookContext to JSON.\n * If the context has a `toJSON` method, it will call that method.\n * Otherwise, it will return the context as is.\n *\n * This is useful for serializing the context for logging or debugging purposes.\n * E.g. when you use 'has'/'get' from lodash to access properties of the context.\n *\n * @see https://utils.feathersjs.com/utils/context-to-json.html\n */\nexport const contextToJson = (context: HookContext) => {\n if (context.toJSON) {\n return context.toJSON()\n }\n return context\n}\n","import type { Application, HookOptions } from '@feathersjs/feathers'\n\n/**\n * Typescript helper function to define hooks with type safety.\n *\n * @see https://utils.feathersjs.com/utils/define-hooks.html\n */\nexport function defineHooks<\n A extends Application = Application,\n S = {\n find: any\n get: any\n create: any\n update: any\n patch: any\n remove: any\n },\n Options = HookOptions<A, S>,\n>(hooks: Options): Options {\n return hooks\n}\n","import type { HookContext } from '@feathersjs/feathers'\n\n/**\n * Always returns the `context.data` as an array.\n * If `context.data` is not an array, it will be wrapped in an array.\n *\n * @see https://utils.feathersjs.com/utils/get-data-is-array.html\n */\nexport function getDataIsArray<H extends HookContext = HookContext>(\n context: H,\n): { data: any[]; isArray: boolean } {\n if (!context.data) {\n return {\n isArray: false,\n data: [],\n }\n }\n\n const isArray = Array.isArray(context.data)\n\n return {\n isArray,\n data: isArray ? context.data : [context.data],\n }\n}\n","// src/feathers.ts\nimport * as feathers from '@feathersjs/feathers'\n\n// Type-safe re-export of only what you need\nexport const SERVICE = (feathers as any).SERVICE || feathers.default?.SERVICE\n","import type { Service } from '@feathersjs/feathers'\nimport { SERVICE } from '../../feathers-cjs-fix.js'\n\n/**\n * Little helper to get methods are publicly exposed by a service.\n *\n * @see https://utils.feathersjs.com/utils/get-exposed-methods.html\n */\nexport function getExposedMethods(service: Service) {\n const result = (service as any)[SERVICE].methods\n\n if (!result || !Array.isArray(result)) {\n throw new Error(`Service does not have exposed methods`)\n }\n\n return result\n}\n","import type { HookContext } from '@feathersjs/feathers'\nimport copy from 'fast-copy'\n\ntype GetResultIsArrayOptions = {\n dispatch?: boolean\n}\n\nexport function getResultIsArray<H extends HookContext = HookContext>(\n context: H,\n options?: GetResultIsArrayOptions,\n): { isArray: boolean; result: any[]; key: 'dispatch' | 'result' } {\n const { dispatch = false } = options || {}\n\n const isDispatch: boolean = dispatch && context.dispatch !== undefined\n\n const result = dispatch\n ? isDispatch\n ? context.dispatch\n : copy(context.result)\n : context.result\n\n if (!result) {\n return {\n isArray: false,\n result: [],\n key: isDispatch ? 'dispatch' : 'result',\n }\n }\n\n const items = context.method === 'find' ? result.data || result : result\n\n const isArray = Array.isArray(items)\n\n return {\n isArray,\n result: isArray ? items : items ? [items] : [],\n key: isDispatch ? 'dispatch' : 'result',\n }\n}\n","import type { Application, Params } from '@feathersjs/feathers'\nimport type { KeyOf } from '../../internal.utils.js'\nimport type {\n InferFindParams,\n InferFindResultSingle,\n} from '../../utility-types/infer-service-methods.js'\n\ntype IterateFindOptions<P extends Params = Params> = {\n params?: P\n}\n\n/**\n * Use `for await` to iterate over the results of a `find` method.\n *\n * This function is useful for iterating over large datasets without loading everything into memory at once.\n * It uses pagination to fetch results in chunks, allowing you to process each item as it is retrieved.\n */\nexport async function* iterateFind<\n Services,\n Path extends KeyOf<Services>,\n Service extends Services[Path] = Services[Path],\n P extends Params = InferFindParams<Service>,\n Item = InferFindResultSingle<Service>,\n>(\n app: Application<Services>,\n servicePath: Path,\n options?: IterateFindOptions<P>,\n): AsyncGenerator<Item, void, unknown> {\n const service = app.service(servicePath)\n\n if (!service || !('find' in service)) {\n throw new Error(`Service '${servicePath}' does not have a 'find' method.`)\n }\n\n const params = {\n ...options?.params,\n query: {\n ...(options?.params?.query ?? {}),\n $limit: options?.params?.query?.$limit ?? 10,\n $skip: options?.params?.query?.$skip ?? 0,\n },\n }\n\n let result\n\n do {\n result = await (service as any).find(params)\n\n for (const item of result.data) {\n yield item\n }\n\n params.query.$skip = (params.query.$skip ?? 0) + result.data.length\n } while (result.total > params.query.$skip)\n}\n","import type { HookContext } from '@feathersjs/feathers'\nimport { getDataIsArray } from '../get-data-is-array/get-data-is-array.util.js'\nimport { isPromise } from '../../common/index.js'\nimport type { Promisable } from '../../internal.utils.js'\nimport type { TransformerFn } from '../../types.js'\n\nexport function mutateData<H extends HookContext = HookContext>(\n context: H,\n transformer: TransformerFn<any, H>,\n): Promisable<H> {\n if (!context.data) {\n return context\n }\n\n const { data, isArray } = getDataIsArray(context)\n\n if (!data.length) {\n return context\n }\n\n let hasPromises = false\n\n const results = data.map((item, i) => {\n const result = transformer(item, { context, i })\n\n if (isPromise(result)) {\n hasPromises = true\n return result.then((res: any) => res ?? item)\n }\n\n return result ?? item\n })\n\n function mutate(data: any) {\n context.data = isArray ? data : data[0]\n\n return context\n }\n\n if (hasPromises) {\n return Promise.all(results).then(mutate)\n } else {\n return mutate(results)\n }\n}\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport { getResultIsArray } from '../get-result-is-array/get-result-is-array.util.js'\nimport { isPromise } from '../../common/index.js'\nimport copy from 'fast-copy'\nimport type { DispatchOption, TransformerFn } from '../../types.js'\n\nexport type MutateResultOptions = {\n next?: NextFunction\n transform?: (items: any[]) => any[]\n dispatch?: DispatchOption\n}\n\nexport async function mutateResult<H extends HookContext = HookContext>(\n context: H,\n transformer: TransformerFn<any, H>,\n options?: MutateResultOptions,\n): Promise<H> {\n if (options?.next) {\n await options.next()\n }\n\n if (!!options?.dispatch && !context.dispatch) {\n context.dispatch = copy(context.result)\n }\n\n async function forResult(dispatch: boolean) {\n const { result, isArray, key } = getResultIsArray(context, { dispatch })\n\n if (!result.length) {\n return context\n }\n\n let hasPromises = false\n\n const results = result.map((item, i) => {\n const result = transformer(item, { context, i })\n\n if (isPromise(result)) {\n hasPromises = true\n return result.then((res: any) => res ?? item)\n }\n\n return result ?? item\n })\n\n function mutate(r: any) {\n if (options?.transform) {\n r = options.transform(r)\n }\n\n if (!isArray) {\n context[key] = r[0]\n } else if (isArray && !Array.isArray(context[key]) && context[key].data) {\n context[key].data = r\n } else {\n context[key] = r\n }\n\n return context\n }\n\n if (hasPromises) {\n return await Promise.all(results).then(mutate)\n } else {\n return mutate(results)\n }\n }\n\n if (options?.dispatch === 'both') {\n await Promise.all([forResult(true), forResult(false)])\n return context\n }\n\n return await forResult(options?.dispatch ?? false)\n}\n","import type { Id, Params } from '@feathersjs/feathers'\nimport { deepEqual } from 'fast-equals'\nimport type { KeyOf } from '../../internal.utils.js'\n\nexport type PatchBatchOptions<IdKey extends string> = {\n /** the key of the id property */\n id?: IdKey\n}\n\nexport type PatchBatchResultItem<T = Record<string, unknown>, P = Params> = [\n Id | null,\n T,\n P | undefined,\n]\n\n/**\n * Batch patching utility that takes an array of items to be changed and returns an array of arguments to be called with the `patch` method.\n *\n * This utility is useful when you need to patch multiple items with varying data in as few requests as possible.\n *\n * @example\n * ```ts\n * const items = [\n * { id: 1, value: 10 },\n * { id: 2, value: 10 },\n * { id: 3, value: 20 },\n * ];\n *\n * const batched = patchBatch(items, { id: 'id' });\n * // batched will be:\n * // [\n * // [null, { value: 10 }, { query: { id: { $in: [1, 2] } } }],\n * // [3, { value: 20 }, undefined],\n * // ]\n *\n * await Promise.all(batched.map(args => service.patch(...args)));\n * ```\n */\nexport function patchBatch<\n T extends Record<string, any>,\n IdKey extends KeyOf<T>,\n P extends Params,\n R extends Omit<T, IdKey> = Omit<T, IdKey>,\n>(\n items: T[],\n options?: PatchBatchOptions<IdKey>,\n): PatchBatchResultItem<R, P>[] {\n const map: { ids: Id[]; data: R }[] = []\n\n const idKey = options?.id ?? 'id'\n\n for (const _data of items) {\n const data = _data as unknown as R\n const id = _data[idKey]\n delete (data as any)[idKey as any]\n\n const index = map.findIndex((item) => {\n return deepEqual(item.data, data)\n })\n\n if (index === -1) {\n map.push({ ids: [id], data })\n } else {\n map[index].ids.push(id)\n }\n }\n\n return map.map(({ ids, data }) => {\n return ids.length === 1\n ? ([ids[0], data, undefined] as PatchBatchResultItem<R, P>)\n : ([\n null,\n data,\n {\n query: {\n [idKey]: { $in: ids },\n },\n },\n ] as PatchBatchResultItem<R, P>)\n })\n}\n","import type { HookContext } from '@feathersjs/feathers'\nimport { isMulti, isPaginated } from '../../predicates/index.js'\n\n/**\n * Set `context.result` to an empty array or object, depending on the hook type\n */\nexport const skipResult = <H extends HookContext = HookContext>(context: H) => {\n if (context.result) {\n return context\n }\n\n const multi = isMulti(context)\n\n if (multi) {\n if (context.method === 'find' && isPaginated(context)) {\n context.result = {\n total: 0,\n skip: 0,\n limit: 0,\n data: [],\n }\n } else {\n context.result = []\n }\n } else {\n context.result = null\n }\n\n return context\n}\n","import type { Params } from '@feathersjs/feathers'\nimport type { TransformParamsFn } from '../../types.js'\n\n/**\n * Safely use a transformParams function to modify params.\n */\nexport const transformParams = <P extends Params = Params>(\n params: P,\n fn: TransformParamsFn<P> | undefined,\n): P => {\n if (!fn) {\n return params\n }\n\n const result = fn({ ...params })\n\n return result ?? params\n}\n","import type { Query } from '@feathersjs/feathers'\n\ntype WalkQueryOptionsInit = {\n property?: string\n operator?: string | undefined\n value?: any\n path: (string | number)[]\n}\n\nexport type WalkQueryOptions = {\n property: string\n operator: string | undefined\n value: any\n path: (string | number)[]\n}\n\nexport type WalkQueryCallback = (options: WalkQueryOptions) => any\n\nconst _walkQueryUtil = <Q extends Query>(\n query: Q,\n walker: WalkQueryCallback,\n options?: WalkQueryOptionsInit | WalkQueryOptions,\n): Q => {\n let cloned = false\n const clonedSecond: Record<string, boolean> = {}\n function set(key: string, value: any, secondKey?: string | number) {\n if (!cloned) {\n query = { ...query }\n cloned = true\n }\n\n if (secondKey !== undefined) {\n if (!clonedSecond[key]) {\n ;(query as any)[key] = { ...query[key] }\n clonedSecond[key] = true\n }\n query[key][secondKey] = value\n return\n }\n\n ;(query as any)[key] = value\n }\n\n for (const key in query) {\n if (\n (key === '$or' || key === '$and' || key === '$nor' || key === '$not') &&\n Array.isArray(query[key])\n ) {\n let array = query[key]\n\n let copiedArray = false\n\n for (let i = 0, n = array.length; i < n; i++) {\n const nestedQuery = array[i]\n const transformed = _walkQueryUtil(nestedQuery, walker, {\n ...options,\n path: [...(options?.path || []), key, i],\n })\n\n if (transformed !== nestedQuery) {\n if (!copiedArray) {\n array = [...array] as any\n copiedArray = true\n }\n\n array[i] = transformed\n }\n }\n\n if (copiedArray) {\n set(key, array)\n }\n } else if (\n typeof query[key] === 'object' &&\n query[key] !== null &&\n !Array.isArray(query[key])\n ) {\n let hasOperator = false\n for (const operator in query[key]) {\n if (operator.startsWith('$')) {\n hasOperator = true\n const value = walker({\n operator,\n path: [...(options?.path ?? []), key],\n property: key,\n value: query[key][operator],\n })\n\n if (value !== undefined && value !== query[key][operator]) {\n set(key, value, operator)\n }\n }\n }\n\n if (!hasOperator) {\n const value = walker({\n operator: undefined,\n path: [...(options?.path ?? []), key],\n property: key,\n value: query[key],\n })\n\n if (value !== undefined && value !== query[key]) {\n set(key, value)\n }\n }\n } else {\n const value = walker({\n operator: undefined,\n path: [...(options?.path ?? []), key],\n property: key,\n value: query[key],\n })\n\n if (value !== undefined && value !== query[key]) {\n set(key, value)\n }\n }\n }\n\n return query\n}\n\n/**\n * Walks the given Feathers query and calls the `walker` function for each property. The\n * `walker` function can return a new value which will replace the original value in the\n * returned query. If no changes were made the original query will be returned.\n */\nexport const walkQuery = <Q extends Query>(\n query: Q,\n walker: WalkQueryCallback,\n): Q => {\n return _walkQueryUtil(query, walker)\n}\n"]}
package/dist/hooks.js CHANGED
@@ -1,5 +1,5 @@
1
- export { cache, checkMulti, checkRequired, combine, createRelated, debug, disablePagination, disallow, iff, iffElse, onDelete, paramsForServer, paramsFromClient, preventChanges, setData, setField, setResult, setSlug, skippable, softDelete, stashBefore, throwIf, throwIfIsMulti, throwIfIsProvider, transformData, transformQuery, transformResult, traverse, unless, iff as when } from './chunk-U2HKW5ZL.js';
2
- import './chunk-4TBKW4G4.js';
1
+ export { cache, checkMulti, checkRequired, combine, createRelated, debug, disablePagination, disallow, iff, iffElse, onDelete, paramsForServer, paramsFromClient, preventChanges, setData, setField, setResult, setSlug, skippable, softDelete, stashBefore, throwIf, throwIfIsMulti, throwIfIsProvider, transformData, transformQuery, transformResult, traverse, unless, iff as when } from './chunk-TIH5MKEQ.js';
2
+ import './chunk-VXZDTJGY.js';
3
3
  import './chunk-KSCPQLU3.js';
4
4
  import './chunk-DKP457HT.js';
5
5
  //# sourceMappingURL=hooks.js.map
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- export { cache, checkMulti, checkRequired, combine, createRelated, debug, disablePagination, disallow, iff, iffElse, onDelete, paramsForServer, paramsFromClient, preventChanges, setData, setField, setResult, setSlug, skippable, softDelete, stashBefore, throwIf, throwIfIsMulti, throwIfIsProvider, transformData, transformQuery, transformResult, traverse, unless, iff as when } from './chunk-U2HKW5ZL.js';
2
- export { addSkip, addToQuery, checkContext, contextToJson, defineHooks, getDataIsArray, getExposedMethods, getResultIsArray, iterateFind, mutateData, mutateResult, patchBatch, skipResult, transformParams, walkQuery } from './chunk-4TBKW4G4.js';
1
+ export { cache, checkMulti, checkRequired, combine, createRelated, debug, disablePagination, disallow, iff, iffElse, onDelete, paramsForServer, paramsFromClient, preventChanges, setData, setField, setResult, setSlug, skippable, softDelete, stashBefore, throwIf, throwIfIsMulti, throwIfIsProvider, transformData, transformQuery, transformResult, traverse, unless, iff as when } from './chunk-TIH5MKEQ.js';
2
+ export { addSkip, addToQuery, checkContext, contextToJson, defineHooks, getDataIsArray, getExposedMethods, getResultIsArray, iterateFind, mutateData, mutateResult, patchBatch, skipResult, transformParams, walkQuery } from './chunk-VXZDTJGY.js';
3
3
  export { every, getPaginate, isContext, isMulti, isPaginated, isProvider, not, shouldSkip, some } from './chunk-KSCPQLU3.js';
4
4
  import './chunk-DKP457HT.js';
5
5
 
package/dist/resolvers.js CHANGED
@@ -1,4 +1,4 @@
1
- import { mutateData, mutateResult } from './chunk-4TBKW4G4.js';
1
+ import { mutateData, mutateResult } from './chunk-VXZDTJGY.js';
2
2
  import './chunk-KSCPQLU3.js';
3
3
  import './chunk-DKP457HT.js';
4
4
  import { BadRequest } from '@feathersjs/errors';
package/dist/utils.js CHANGED
@@ -1,4 +1,4 @@
1
- export { addSkip, addToQuery, checkContext, contextToJson, defineHooks, getDataIsArray, getExposedMethods, getResultIsArray, iterateFind, mutateData, mutateResult, patchBatch, skipResult, transformParams, walkQuery } from './chunk-4TBKW4G4.js';
1
+ export { addSkip, addToQuery, checkContext, contextToJson, defineHooks, getDataIsArray, getExposedMethods, getResultIsArray, iterateFind, mutateData, mutateResult, patchBatch, skipResult, transformParams, walkQuery } from './chunk-VXZDTJGY.js';
2
2
  export { getPaginate } from './chunk-KSCPQLU3.js';
3
3
  import './chunk-DKP457HT.js';
4
4
  //# sourceMappingURL=utils.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "feathers-utils",
3
- "version": "10.0.0-2",
3
+ "version": "10.0.0-4",
4
4
  "description": "Useful hooks and utils for use with feathers services.",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -88,7 +88,7 @@
88
88
  "@feathersjs/adapter-commons": "^5.0.34",
89
89
  "@feathersjs/errors": "^5.0.34",
90
90
  "fast-copy": "^3.0.2",
91
- "fast-equals": "^5.2.2",
91
+ "fast-equals": "^5.3.2",
92
92
  "lodash": "^4.17.21",
93
93
  "neotraverse": "^0.6.18"
94
94
  },
@@ -0,0 +1,5 @@
1
+ // src/feathers.ts
2
+ import * as feathers from '@feathersjs/feathers'
3
+
4
+ // Type-safe re-export of only what you need
5
+ export const SERVICE = (feathers as any).SERVICE || feathers.default?.SERVICE
@@ -1,5 +1,5 @@
1
1
  import type { Service } from '@feathersjs/feathers'
2
- import { SERVICE } from '@feathersjs/feathers'
2
+ import { SERVICE } from '../../feathers-cjs-fix.js'
3
3
 
4
4
  /**
5
5
  * Little helper to get methods are publicly exposed by a service.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/add-to-query/add-to-query.util.ts","../src/utils/add-skip/add-skip.util.ts","../src/utils/check-context/check-context.util.ts","../src/utils/context-to-json/context-to-json.util.ts","../src/utils/define-hooks/define-hooks.util.ts","../src/utils/get-data-is-array/get-data-is-array.util.ts","../src/utils/get-exposed-methods/get-exposed-methods.util.ts","../src/utils/get-result-is-array/get-result-is-array.util.ts","../src/utils/iterate-find/iterate-find.util.ts","../src/utils/mutate-data/mutate-data.util.ts","../src/utils/mutate-result/mutate-result.util.ts","../src/utils/patch-batch/patch-batch.util.ts","../src/utils/skip-result/skip-result.util.ts","../src/utils/transform-params/transform-params.util.ts","../src/utils/walk-query/walk-query.util.ts"],"names":["data","copy","result","deepEqual"],"mappings":"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","file":"chunk-4TBKW4G4.js","sourcesContent":["import type { Query } from '@feathersjs/feathers'\nimport { deepEqual } from 'fast-equals'\n\n/**\n * Safely adds a property to a query object. If the property already exists, it adds it to the `$and` array.\n * If the exact same property-value pair already exists, it does nothing.\n */\nexport const addToQuery = <Q extends Query>(\n targetQuery: Q,\n property: string,\n value: any,\n) => {\n if (!(property in targetQuery)) {\n return {\n ...targetQuery,\n [property]: value,\n }\n }\n\n if (deepEqual(targetQuery[property], value)) {\n // if the exact same value already exists, do nothing\n return targetQuery\n }\n\n if (!targetQuery.$and) {\n return {\n ...targetQuery,\n $and: [{ [property]: value }],\n }\n }\n\n // check if the exact same value already exists in $and\n if (\n targetQuery.$and.some(\n (q: any) => property in q && deepEqual(q[property], value),\n )\n ) {\n return targetQuery\n }\n\n return {\n ...targetQuery,\n $and: [...targetQuery.$and, { [property]: value }],\n }\n}\n","import type { HookContext, HookType } from '@feathersjs/feathers'\nimport type { MaybeArray } from '../../internal.utils.js'\n\nexport type SkipHookName =\n | 'all'\n | HookType\n | `${HookType}:${string}`\n | (string & {})\n\n/**\n * Add names to `context.params.skipHooks` for `skippable` hooks.\n */\nexport const addSkip = <H extends HookContext>(\n context: H,\n hooks: MaybeArray<SkipHookName>,\n) => {\n const names = Array.isArray(hooks) ? hooks : [hooks]\n\n if (context.params.skipHooks === undefined) {\n context.params = {\n ...context.params,\n skipHooks: [...names],\n }\n } else {\n if (!Array.isArray(context.params.skipHooks)) {\n throw new Error('Invalid skipHooks parameter')\n }\n\n context.params = {\n ...context.params,\n skipHooks: [...new Set([...context.params.skipHooks, ...names])],\n }\n }\n}\n","import type { HookContext } from '@feathersjs/feathers'\nimport type { HookType, MethodName } from '../../types.js'\nimport { isContext } from '../../predicates/is-context/is-context.predicate.js'\n\n/**\n * Restrict a hook to run for certain methods and method types.\n *\n * @see https://utils.feathersjs.com/utils/check-context.html\n */\nexport function checkContext<H extends HookContext = HookContext>(\n context: H,\n type?: HookType | HookType[] | null,\n methods?: MethodName | MethodName[] | null,\n label = 'anonymous',\n): void {\n if (\n !isContext({\n method: methods ?? undefined,\n type: type ?? undefined,\n })(context)\n ) {\n throw new Error(`The '${label}' hook has invalid context.`)\n }\n}\n","import type { HookContext } from '@feathersjs/feathers'\n\n/**\n * Converts a FeathersJS HookContext to JSON.\n * If the context has a `toJSON` method, it will call that method.\n * Otherwise, it will return the context as is.\n *\n * This is useful for serializing the context for logging or debugging purposes.\n * E.g. when you use 'has'/'get' from lodash to access properties of the context.\n *\n * @see https://utils.feathersjs.com/utils/context-to-json.html\n */\nexport const contextToJson = (context: HookContext) => {\n if (context.toJSON) {\n return context.toJSON()\n }\n return context\n}\n","import type { Application, HookOptions } from '@feathersjs/feathers'\n\n/**\n * Typescript helper function to define hooks with type safety.\n *\n * @see https://utils.feathersjs.com/utils/define-hooks.html\n */\nexport function defineHooks<\n A extends Application = Application,\n S = {\n find: any\n get: any\n create: any\n update: any\n patch: any\n remove: any\n },\n Options = HookOptions<A, S>,\n>(hooks: Options): Options {\n return hooks\n}\n","import type { HookContext } from '@feathersjs/feathers'\n\n/**\n * Always returns the `context.data` as an array.\n * If `context.data` is not an array, it will be wrapped in an array.\n *\n * @see https://utils.feathersjs.com/utils/get-data-is-array.html\n */\nexport function getDataIsArray<H extends HookContext = HookContext>(\n context: H,\n): { data: any[]; isArray: boolean } {\n if (!context.data) {\n return {\n isArray: false,\n data: [],\n }\n }\n\n const isArray = Array.isArray(context.data)\n\n return {\n isArray,\n data: isArray ? context.data : [context.data],\n }\n}\n","import type { Service } from '@feathersjs/feathers'\nimport { SERVICE } from '@feathersjs/feathers'\n\n/**\n * Little helper to get methods are publicly exposed by a service.\n *\n * @see https://utils.feathersjs.com/utils/get-exposed-methods.html\n */\nexport function getExposedMethods(service: Service) {\n const result = (service as any)[SERVICE].methods\n\n if (!result || !Array.isArray(result)) {\n throw new Error(`Service does not have exposed methods`)\n }\n\n return result\n}\n","import type { HookContext } from '@feathersjs/feathers'\nimport copy from 'fast-copy'\n\ntype GetResultIsArrayOptions = {\n dispatch?: boolean\n}\n\nexport function getResultIsArray<H extends HookContext = HookContext>(\n context: H,\n options?: GetResultIsArrayOptions,\n): { isArray: boolean; result: any[]; key: 'dispatch' | 'result' } {\n const { dispatch = false } = options || {}\n\n const isDispatch: boolean = dispatch && context.dispatch !== undefined\n\n const result = dispatch\n ? isDispatch\n ? context.dispatch\n : copy(context.result)\n : context.result\n\n if (!result) {\n return {\n isArray: false,\n result: [],\n key: isDispatch ? 'dispatch' : 'result',\n }\n }\n\n const items = context.method === 'find' ? result.data || result : result\n\n const isArray = Array.isArray(items)\n\n return {\n isArray,\n result: isArray ? items : items ? [items] : [],\n key: isDispatch ? 'dispatch' : 'result',\n }\n}\n","import type { Application, Params } from '@feathersjs/feathers'\nimport type { KeyOf } from '../../internal.utils.js'\nimport type {\n InferFindParams,\n InferFindResultSingle,\n} from '../../utility-types/infer-service-methods.js'\n\ntype IterateFindOptions<P extends Params = Params> = {\n params?: P\n}\n\n/**\n * Use `for await` to iterate over the results of a `find` method.\n *\n * This function is useful for iterating over large datasets without loading everything into memory at once.\n * It uses pagination to fetch results in chunks, allowing you to process each item as it is retrieved.\n */\nexport async function* iterateFind<\n Services,\n Path extends KeyOf<Services>,\n Service extends Services[Path] = Services[Path],\n P extends Params = InferFindParams<Service>,\n Item = InferFindResultSingle<Service>,\n>(\n app: Application<Services>,\n servicePath: Path,\n options?: IterateFindOptions<P>,\n): AsyncGenerator<Item, void, unknown> {\n const service = app.service(servicePath)\n\n if (!service || !('find' in service)) {\n throw new Error(`Service '${servicePath}' does not have a 'find' method.`)\n }\n\n const params = {\n ...options?.params,\n query: {\n ...(options?.params?.query ?? {}),\n $limit: options?.params?.query?.$limit ?? 10,\n $skip: options?.params?.query?.$skip ?? 0,\n },\n }\n\n let result\n\n do {\n result = await (service as any).find(params)\n\n for (const item of result.data) {\n yield item\n }\n\n params.query.$skip = (params.query.$skip ?? 0) + result.data.length\n } while (result.total > params.query.$skip)\n}\n","import type { HookContext } from '@feathersjs/feathers'\nimport { getDataIsArray } from '../get-data-is-array/get-data-is-array.util.js'\nimport { isPromise } from '../../common/index.js'\nimport type { Promisable } from '../../internal.utils.js'\nimport type { TransformerFn } from '../../types.js'\n\nexport function mutateData<H extends HookContext = HookContext>(\n context: H,\n transformer: TransformerFn<any, H>,\n): Promisable<H> {\n if (!context.data) {\n return context\n }\n\n const { data, isArray } = getDataIsArray(context)\n\n if (!data.length) {\n return context\n }\n\n let hasPromises = false\n\n const results = data.map((item, i) => {\n const result = transformer(item, { context, i })\n\n if (isPromise(result)) {\n hasPromises = true\n return result.then((res: any) => res ?? item)\n }\n\n return result ?? item\n })\n\n function mutate(data: any) {\n context.data = isArray ? data : data[0]\n\n return context\n }\n\n if (hasPromises) {\n return Promise.all(results).then(mutate)\n } else {\n return mutate(results)\n }\n}\n","import type { HookContext, NextFunction } from '@feathersjs/feathers'\nimport { getResultIsArray } from '../get-result-is-array/get-result-is-array.util.js'\nimport { isPromise } from '../../common/index.js'\nimport copy from 'fast-copy'\nimport type { DispatchOption, TransformerFn } from '../../types.js'\n\nexport type MutateResultOptions = {\n next?: NextFunction\n transform?: (items: any[]) => any[]\n dispatch?: DispatchOption\n}\n\nexport async function mutateResult<H extends HookContext = HookContext>(\n context: H,\n transformer: TransformerFn<any, H>,\n options?: MutateResultOptions,\n): Promise<H> {\n if (options?.next) {\n await options.next()\n }\n\n if (!!options?.dispatch && !context.dispatch) {\n context.dispatch = copy(context.result)\n }\n\n async function forResult(dispatch: boolean) {\n const { result, isArray, key } = getResultIsArray(context, { dispatch })\n\n if (!result.length) {\n return context\n }\n\n let hasPromises = false\n\n const results = result.map((item, i) => {\n const result = transformer(item, { context, i })\n\n if (isPromise(result)) {\n hasPromises = true\n return result.then((res: any) => res ?? item)\n }\n\n return result ?? item\n })\n\n function mutate(r: any) {\n if (options?.transform) {\n r = options.transform(r)\n }\n\n if (!isArray) {\n context[key] = r[0]\n } else if (isArray && !Array.isArray(context[key]) && context[key].data) {\n context[key].data = r\n } else {\n context[key] = r\n }\n\n return context\n }\n\n if (hasPromises) {\n return await Promise.all(results).then(mutate)\n } else {\n return mutate(results)\n }\n }\n\n if (options?.dispatch === 'both') {\n await Promise.all([forResult(true), forResult(false)])\n return context\n }\n\n return await forResult(options?.dispatch ?? false)\n}\n","import type { Id, Params } from '@feathersjs/feathers'\nimport { deepEqual } from 'fast-equals'\nimport type { KeyOf } from '../../internal.utils.js'\n\nexport type PatchBatchOptions<IdKey extends string> = {\n /** the key of the id property */\n id?: IdKey\n}\n\nexport type PatchBatchResultItem<T = Record<string, unknown>, P = Params> = [\n Id | null,\n T,\n P | undefined,\n]\n\n/**\n * Batch patching utility that takes an array of items to be changed and returns an array of arguments to be called with the `patch` method.\n *\n * This utility is useful when you need to patch multiple items with varying data in as few requests as possible.\n *\n * @example\n * ```ts\n * const items = [\n * { id: 1, value: 10 },\n * { id: 2, value: 10 },\n * { id: 3, value: 20 },\n * ];\n *\n * const batched = patchBatch(items, { id: 'id' });\n * // batched will be:\n * // [\n * // [null, { value: 10 }, { query: { id: { $in: [1, 2] } } }],\n * // [3, { value: 20 }, undefined],\n * // ]\n *\n * await Promise.all(batched.map(args => service.patch(...args)));\n * ```\n */\nexport function patchBatch<\n T extends Record<string, any>,\n IdKey extends KeyOf<T>,\n P extends Params,\n R extends Omit<T, IdKey> = Omit<T, IdKey>,\n>(\n items: T[],\n options?: PatchBatchOptions<IdKey>,\n): PatchBatchResultItem<R, P>[] {\n const map: { ids: Id[]; data: R }[] = []\n\n const idKey = options?.id ?? 'id'\n\n for (const _data of items) {\n const data = _data as unknown as R\n const id = _data[idKey]\n delete (data as any)[idKey as any]\n\n const index = map.findIndex((item) => {\n return deepEqual(item.data, data)\n })\n\n if (index === -1) {\n map.push({ ids: [id], data })\n } else {\n map[index].ids.push(id)\n }\n }\n\n return map.map(({ ids, data }) => {\n return ids.length === 1\n ? ([ids[0], data, undefined] as PatchBatchResultItem<R, P>)\n : ([\n null,\n data,\n {\n query: {\n [idKey]: { $in: ids },\n },\n },\n ] as PatchBatchResultItem<R, P>)\n })\n}\n","import type { HookContext } from '@feathersjs/feathers'\nimport { isMulti, isPaginated } from '../../predicates/index.js'\n\n/**\n * Set `context.result` to an empty array or object, depending on the hook type\n */\nexport const skipResult = <H extends HookContext = HookContext>(context: H) => {\n if (context.result) {\n return context\n }\n\n const multi = isMulti(context)\n\n if (multi) {\n if (context.method === 'find' && isPaginated(context)) {\n context.result = {\n total: 0,\n skip: 0,\n limit: 0,\n data: [],\n }\n } else {\n context.result = []\n }\n } else {\n context.result = null\n }\n\n return context\n}\n","import type { Params } from '@feathersjs/feathers'\nimport type { TransformParamsFn } from '../../types.js'\n\n/**\n * Safely use a transformParams function to modify params.\n */\nexport const transformParams = <P extends Params = Params>(\n params: P,\n fn: TransformParamsFn<P> | undefined,\n): P => {\n if (!fn) {\n return params\n }\n\n const result = fn({ ...params })\n\n return result ?? params\n}\n","import type { Query } from '@feathersjs/feathers'\n\ntype WalkQueryOptionsInit = {\n property?: string\n operator?: string | undefined\n value?: any\n path: (string | number)[]\n}\n\nexport type WalkQueryOptions = {\n property: string\n operator: string | undefined\n value: any\n path: (string | number)[]\n}\n\nexport type WalkQueryCallback = (options: WalkQueryOptions) => any\n\nconst _walkQueryUtil = <Q extends Query>(\n query: Q,\n walker: WalkQueryCallback,\n options?: WalkQueryOptionsInit | WalkQueryOptions,\n): Q => {\n let cloned = false\n const clonedSecond: Record<string, boolean> = {}\n function set(key: string, value: any, secondKey?: string | number) {\n if (!cloned) {\n query = { ...query }\n cloned = true\n }\n\n if (secondKey !== undefined) {\n if (!clonedSecond[key]) {\n ;(query as any)[key] = { ...query[key] }\n clonedSecond[key] = true\n }\n query[key][secondKey] = value\n return\n }\n\n ;(query as any)[key] = value\n }\n\n for (const key in query) {\n if (\n (key === '$or' || key === '$and' || key === '$nor' || key === '$not') &&\n Array.isArray(query[key])\n ) {\n let array = query[key]\n\n let copiedArray = false\n\n for (let i = 0, n = array.length; i < n; i++) {\n const nestedQuery = array[i]\n const transformed = _walkQueryUtil(nestedQuery, walker, {\n ...options,\n path: [...(options?.path || []), key, i],\n })\n\n if (transformed !== nestedQuery) {\n if (!copiedArray) {\n array = [...array] as any\n copiedArray = true\n }\n\n array[i] = transformed\n }\n }\n\n if (copiedArray) {\n set(key, array)\n }\n } else if (\n typeof query[key] === 'object' &&\n query[key] !== null &&\n !Array.isArray(query[key])\n ) {\n let hasOperator = false\n for (const operator in query[key]) {\n if (operator.startsWith('$')) {\n hasOperator = true\n const value = walker({\n operator,\n path: [...(options?.path ?? []), key],\n property: key,\n value: query[key][operator],\n })\n\n if (value !== undefined && value !== query[key][operator]) {\n set(key, value, operator)\n }\n }\n }\n\n if (!hasOperator) {\n const value = walker({\n operator: undefined,\n path: [...(options?.path ?? []), key],\n property: key,\n value: query[key],\n })\n\n if (value !== undefined && value !== query[key]) {\n set(key, value)\n }\n }\n } else {\n const value = walker({\n operator: undefined,\n path: [...(options?.path ?? []), key],\n property: key,\n value: query[key],\n })\n\n if (value !== undefined && value !== query[key]) {\n set(key, value)\n }\n }\n }\n\n return query\n}\n\n/**\n * Walks the given Feathers query and calls the `walker` function for each property. The\n * `walker` function can return a new value which will replace the original value in the\n * returned query. If no changes were made the original query will be returned.\n */\nexport const walkQuery = <Q extends Query>(\n query: Q,\n walker: WalkQueryCallback,\n): Q => {\n return _walkQueryUtil(query, walker)\n}\n"]}