{"version":3,"file":"daffodil-core.mjs","sources":["../../../libs/core/src/image/vercel-image-loader.ts","../../../libs/core/src/base64/server/server.service.ts","../../../libs/core/src/base64/browser/browser.service.ts","../../../libs/core/src/injection-tokens/single.factory.ts","../../../libs/core/src/injection-tokens/multi.factory.ts","../../../libs/core/src/injection-tokens/config.factory.ts","../../../libs/core/src/injection-tokens/services.factory.ts","../../../libs/core/src/injection-tokens/singleton.factory.ts","../../../libs/core/src/base64/base64.interface.ts","../../../libs/core/src/collection/sortable.ts","../../../libs/core/src/errors/inheritable-error.ts","../../../libs/core/src/errors/is-error.ts","../../../libs/core/src/collection/page-out-of-bounds.error.ts","../../../libs/core/src/collection/error-map.ts","../../../libs/core/src/collection/build-metadata.ts","../../../libs/core/src/filterable/type/filter-type.ts","../../../libs/core/src/filterable/type/range/separator.ts","../../../libs/core/src/filters/errors/codes.enum.ts","../../../libs/core/src/filters/errors/unknown-filter-type.error.ts","../../../libs/core/src/filters/type/equal/behaviors/apply/apply.ts","../../../libs/core/src/filters/type/range/compute-pair-label.ts","../../../libs/core/src/filters/type/range/behaviors/apply/apply.ts","../../../libs/core/src/filters/errors/filter-not-found.error.ts","../../../libs/core/src/filters/errors/request-name-mismatch.error.ts","../../../libs/core/src/filters/validators/request-name-match.ts","../../../libs/core/src/filters/errors/request-type-mismatch.error.ts","../../../libs/core/src/filters/validators/request-type-match.ts","../../../libs/core/src/filters/behaviors/apply/apply-filter.ts","../../../libs/core/src/filters/behaviors/apply/apply-request-to-filters.ts","../../../libs/core/src/filters/behaviors/apply/apply-requests-to-filters.ts","../../../libs/core/src/filters/type/equal/behaviors/clear/clear.ts","../../../libs/core/src/filters/type/range/behaviors/clear/clear.ts","../../../libs/core/src/filters/behaviors/clear/clear-filter.ts","../../../libs/core/src/filters/behaviors/clear/clear-filters.ts","../../../libs/core/src/filters/type/equal/behaviors/remove/remove.ts","../../../libs/core/src/filters/type/range/behaviors/remove/remove.ts","../../../libs/core/src/filters/behaviors/remove/remove-filter.ts","../../../libs/core/src/filters/behaviors/remove/remove-request-from-filters.ts","../../../libs/core/src/filters/behaviors/remove/remove-requests-from-filters.ts","../../../libs/core/src/filters/type/equal/behaviors/toggle/toggle.ts","../../../libs/core/src/filters/type/range/behaviors/toggle/toggle.ts","../../../libs/core/src/filters/behaviors/toggle/toggle.ts","../../../libs/core/src/filters/behaviors/toggle/toggle-request-on-filters.ts","../../../libs/core/src/filters/type/equal/is-applied/is-applied.ts","../../../libs/core/src/filters/type/range/is-applied/is-applied.ts","../../../libs/core/src/filters/is-applied/is-filter-applied.ts","../../../libs/core/src/filters/type/equal/is-applied/is-toggle-request-applied-to-filter.ts","../../../libs/core/src/filters/type/range/is-applied/is-toggle-request-applied-to-filter.ts","../../../libs/core/src/filters/is-applied/is-toggle-request-applied-to-filter.ts","../../../libs/core/src/filters/find-applied/find-applied-options.ts","../../../libs/core/src/filters/type/equal/to-request/filter-to-request.ts","../../../libs/core/src/filters/type/range/to-request/filter-to-request.ts","../../../libs/core/src/filters/type/range-numeric/to-request/filter-to-request.ts","../../../libs/core/src/filters/to-request/filter-to-request.ts","../../../libs/core/src/filters/to-request/filters-to-requests.ts","../../../libs/core/src/utils/collect.ts","../../../libs/core/src/utils/long-arithmetic.ts","../../../libs/core/src/utils/array-to-dict.ts","../../../libs/core/src/utils/random-slice.ts","../../../libs/core/src/utils/shuffle.ts","../../../libs/core/src/utils/random-subset.ts","../../../libs/core/src/utils/range.ts","../../../libs/core/src/utils/sample.ts","../../../libs/core/src/utils/shallow-compare.ts","../../../libs/core/src/utils/unique.ts","../../../libs/core/src/utils/identity.ts","../../../libs/core/src/utils/observe.ts","../../../libs/core/src/filters/type/range/array-to-dict/pair.ts","../../../libs/core/src/filters/type/equal/array-to-dict/option.ts","../../../libs/core/src/filters/array-to-dict/array-to-dict.ts","../../../libs/core/src/filters/compute-applied-filters/compute-applied-filters.ts","../../../libs/core/src/collection/build-request.ts","../../../libs/core/src/createable/most-recent.ts","../../../libs/core/src/decorators/debounce.decorator.ts","../../../libs/core/src/identifiable/array-to-dict.ts","../../../libs/core/src/merge/mergers/array-concat.ts","../../../libs/core/src/merge/mergers/dict-assign.ts","../../../libs/core/src/merge/merge.ts","../../../libs/core/src/operators/backoff.pipe.ts","../../../libs/core/src/operators/any-of.pipe.ts","../../../libs/core/src/operators/all-of.pipe.ts","../../../libs/core/src/operators/catch-and-arrayify-errors.pipe.ts","../../../libs/core/src/storage/error/error.ts","../../../libs/core/src/storage/error/error.service.ts","../../../libs/core/src/storage/server-error/server-error.ts","../../../libs/core/src/storage/server-error/server-error.service.ts","../../../libs/core/src/storage/localstorage/localstorage.service.ts","../../../libs/core/src/storage/noopstorage/noopstorage.service.ts","../../../libs/core/src/storage/memory/memory.service.ts","../../../libs/core/src/storage/persistence.interface.ts","../../../libs/core/src/storage/persistence-server-safe.token.ts","../../../libs/core/src/validator/field-presence.ts","../../../libs/core/src/daffodil-core.ts"],"sourcesContent":["\nimport {\n  IMAGE_LOADER,\n  ImageLoaderConfig,\n} from '@angular/common';\nimport {\n  EnvironmentProviders,\n  makeEnvironmentProviders,\n} from '@angular/core';\n\n/**\n * Configuration interface for Vercel image optimization settings.\n */\nexport interface VercelAssetsConfig {\n  /**\n   * Default width to use when no width is specified in the image config.\n   */\n  defaultWidth: number;\n  /**\n   * Image quality setting (0-100) for Vercel image optimization.\n   */\n  quality: number;\n}\n\n/**\n * Creates a Vercel image loader function that optimizes images through Vercel's image optimization service.\n *\n * @param domain The domain to match against image URLs for transformation\n * @param configuration Configuration options for image optimization\n * @returns An image loader function that transforms URLs for Vercel image optimization\n */\nexport const createVercelImageLoader = (domain: string, configuration: VercelAssetsConfig) =>\n  (config: ImageLoaderConfig): string => {\n    if (!config.src.startsWith(domain + '/')) {\n      return config.src;\n    }\n\n    const baseUrl = domain + '/_vercel/image';\n    const path = config.src.replace(domain, '');\n    const url = encodeURIComponent(path);\n    const width = config.width || configuration.defaultWidth;\n    const quality = configuration.quality;\n\n    return `${baseUrl}?url=${url}&w=${width}&q=${quality}`;\n  };\n\n/**\n * Provides a Vercel image loader as an Angular environment provider.\n *\n * @param domain The domain to match against image URLs for transformation\n * @param configuration Configuration options for image optimization\n * @returns Environment providers array containing the Vercel image loader\n */\nexport const provideVercelImageLoader = (domain: string, configuration: VercelAssetsConfig): EnvironmentProviders => makeEnvironmentProviders([{\n  provide: IMAGE_LOADER,\n  useFactory: () => createVercelImageLoader(domain, configuration),\n}]);\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n  Inject,\n  Injectable,\n  PLATFORM_ID,\n} from '@angular/core';\n\nimport { DaffBase64Service } from '../base64.interface';\n\ndeclare const Buffer;\n\n/**\n * A base64 service meant to be loaded into SSR contexts.\n *\n * @inheritdoc\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class DaffServerBase64Service implements DaffBase64Service {\n  constructor(@Inject(PLATFORM_ID) platformId: string){\n    if (isPlatformBrowser(platformId)){\n      throw new Error('The DaffBrowserBase64Service can only be instantiated on the server.');\n    }\n  }\n\n  encode(str: string): string {\n    return Buffer.from(str).toString('base64');\n  }\n\n  decode(str: string): string {\n    return Buffer.from(str, 'base64').toString('ascii');\n  }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n  Injectable,\n  Inject,\n  PLATFORM_ID,\n} from '@angular/core';\n\nimport { DaffBase64Service } from '../base64.interface';\n\n/**\n * @inheritdoc\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class DaffBrowserBase64Service implements DaffBase64Service {\n  constructor(@Inject(PLATFORM_ID) platformId: string){\n    if(!isPlatformBrowser(platformId)){\n      throw new Error('The DaffBrowserBase64Service can only be instantiated in the browser.');\n    }\n  }\n\n  encode(str: string): string {\n    return btoa(str);\n  }\n\n  decode(str: string): string {\n    return atob(str);\n  }\n}\n","import { InjectionToken } from '@angular/core';\n\nimport { DaffSingleInjectionToken } from './single.type';\nimport {\n  TokenDesc,\n  TokenOptions,\n} from './token-constuctor-params.type';\n\n/**\n * Creates an injection token/provider pair for a single valued DI token.\n *\n * See {@link DaffSingleInjectionToken}.\n */\nexport const createSingleInjectionToken = <T = unknown>(\n  desc: TokenDesc<T>,\n  options?: TokenOptions<T>,\n): DaffSingleInjectionToken<T> => {\n  const token = new InjectionToken<T>(desc, options);\n  const provider = <R extends T = T>(value: R) => ({\n    provide: token,\n    useValue: value,\n  });\n  const factoryProvider = <R extends T = T>(factory: () => R) => ({\n    provide: token,\n    useFactory: factory,\n  });\n\n  return {\n    token,\n    provider,\n    factoryProvider,\n  };\n};\n","import { InjectionToken } from '@angular/core';\n\nimport { DaffMultiInjectionToken } from './multi.type';\nimport {\n  TokenDesc,\n  TokenOptions,\n} from './token-constuctor-params.type';\n\n// having a single instance of the default factory\n// will hopefully reduce memory footprint\nconst defaultFactory = () => [];\n\n/**\n * Creates an injection token/provider pair for a multi valued DI token.\n *\n * See {@link DaffMultiInjectionToken}.\n */\nexport const createMultiInjectionToken = <T = unknown>(\n  desc: TokenDesc<Array<T>>,\n  options?: Partial<TokenOptions<Array<T>>>,\n): DaffMultiInjectionToken<T> => {\n  const token = new InjectionToken<Array<T>>(\n    desc,\n    {\n      factory: defaultFactory,\n      ...options,\n    },\n  );\n  const provider = <R extends T = T>(...values: Array<R>) => values.map((value) => ({\n    provide: token,\n    useValue: value,\n    multi: true,\n  }));\n  const factoryProvider = <R extends T = T>(...factories: Array<() => R>) => factories.map((factory) => ({\n    provide: token,\n    useFactory: factory,\n    multi: true,\n  }));\n\n  return {\n    token,\n    provider,\n    factoryProvider,\n  };\n};\n","import {\n  inject,\n  InjectionToken,\n} from '@angular/core';\n\nimport { DaffConfigInjectionToken } from './config.type';\nimport {\n  TokenDesc,\n  TokenOptions,\n} from './token-constuctor-params.type';\n\n/**\n * Creates an injection token/provider pair for a DI token that holds a configuration.\n *\n * See {@link DaffConfigInjectionToken}.\n */\nexport const createConfigInjectionToken = <T = unknown>(\n  defaultConfig: T | InjectionToken<T>,\n  desc: TokenDesc<T>,\n  options?: Partial<TokenOptions<T>>,\n): DaffConfigInjectionToken<T> => {\n  const token = new InjectionToken<T>(\n    desc,\n    {\n      factory: () => defaultConfig instanceof InjectionToken ? inject(defaultConfig) : defaultConfig,\n      ...options,\n    },\n  );\n  const provider = <R extends T = T>(config: Partial<R> | InjectionToken<Partial<R>>) => ({\n    provide: token,\n    useFactory: () => ({\n      ...(defaultConfig instanceof InjectionToken ? inject(defaultConfig) : defaultConfig),\n      ...(config instanceof InjectionToken ? inject(config) : config),\n    }),\n  });\n\n  return {\n    token,\n    provider,\n  };\n};\n","import {\n  InjectionToken,\n  Type,\n} from '@angular/core';\n\nimport { DaffServicesInjectionToken } from './services.type';\nimport {\n  TokenDesc,\n  TokenOptions,\n} from './token-constuctor-params.type';\n\n// having a single instance of the default factory\n// will hopefully reduce memory footprint\nconst defaultFactory = () => [];\n\n/**\n * Creates an injection token/provider pair for a DI token that holds services.\n *\n * See {@link DaffServicesInjectionToken}.\n */\nexport const createServicesInjectionToken = <T = unknown>(\n  desc: TokenDesc<Array<T>>,\n  options?: Partial<TokenOptions<Array<T>>>,\n): DaffServicesInjectionToken<T> => {\n  const token = new InjectionToken<Array<T>>(\n    desc,\n    {\n      factory: defaultFactory,\n      ...options,\n    },\n  );\n  const provider = <R extends T = T>(...classes: Array<Type<R>>) => classes.map((klass) => ({\n    provide: token,\n    useExisting: klass,\n    multi: true,\n  }));\n\n  return {\n    token,\n    provider,\n  };\n};\n","import {\n  InjectionToken,\n  Type,\n} from '@angular/core';\n\nimport { DaffSingletonInjectionToken } from './singleton.type';\nimport {\n  TokenDesc,\n  TokenOptions,\n} from './token-constuctor-params.type';\n\n/**\n * Creates an injection token/provider pair for a DI token that holds a singleton service.\n *\n * See {@link DaffSingletonInjectionToken}.\n */\nexport const createSingletonInjectionToken = <T = unknown>(\n  desc: TokenDesc<T>,\n  options?: TokenOptions<T>,\n): DaffSingletonInjectionToken<T> => {\n  const token = new InjectionToken<T>(\n    desc,\n    options,\n  );\n  const provider = <R extends T = T>(klass: Type<R>) => ({\n    provide: token,\n    useExisting: klass,\n  });\n\n  return {\n    token,\n    provider,\n  };\n};\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n  inject,\n  PLATFORM_ID,\n} from '@angular/core';\n\nimport { DaffBrowserBase64Service } from './browser/browser.service';\nimport { DaffServerBase64Service } from './server/public_api';\nimport { createSingleInjectionToken } from '../injection-tokens/public_api';\n\n/**\n * A service for encoding and decoding base64 strings.\n */\nexport interface DaffBase64Service {\n  /**\n   * Encodes an ASCII string to base64.\n   */\n  encode(str: string): string;\n  /**\n   * Decodes a base64 string to ASCII.\n   */\n  decode(str: string): string;\n}\n\nexport const {\n  /**\n   * A token which creates a base64 service appropriate for the current environment, i.e., browser vs. server.\n   */\n  token: DaffBase64ServiceToken,\n  /**\n   * Provider function for {@link DaffBase64ServiceToken}.\n   */\n  provider: provideDaffBase64Service,\n} = createSingleInjectionToken<DaffBase64Service>(\n  'DaffBase64ServiceToken',\n  {\n    providedIn: 'root',\n    factory: () => isPlatformBrowser(inject<string>(PLATFORM_ID))\n      ? new DaffBrowserBase64Service(inject<string>(PLATFORM_ID))\n      : new DaffServerBase64Service(inject<string>(PLATFORM_ID)),\n  },\n);\n","/**\n * The metadata that describes the sorting behavior of a collection of elements.\n */\nexport interface DaffSortOptions {\n  default: DaffSortOption['value'];\n  options: DaffSortOption[];\n}\n\n\n/**\n * One particular option used to sort a collection of elements;\n */\nexport interface DaffSortOption {\n  label: string;\n  value: any;\n}\n\n/**\n * The direction in which to sort a list of elements, e.g. if the list was\n * sorted alphabetically, \"Ascending\" would be from \"A-Z\",\n * and \"Descending\" would be from \"Z-A\".\n */\nexport enum DaffSortDirectionEnum {\n  Ascending = 'ASC',\n  Descending = 'DSC'\n}\n\n/**\n * Describes the properties of a collection that make the collection able to be\n * sorted by Daffodil.\n */\nexport interface DaffSortable {\n\n  /**\n   * The available options by which to sort the collection.\n   */\n  sortOptions: DaffSortOptions;\n\n  /**\n   * The currently applied sorting option.\n   */\n  appliedSortOption: DaffSortOption['value'];\n\n  /**\n   * The currently applied sort direction.\n   */\n  appliedSortDirection: DaffSortDirectionEnum;\n}\n","/**\n * A class which allows you to appropriately check the inheritance of an error.\n *\n * In typescript, when you try to extend an error with a specialized error class,\n * if you try to call something like:\n *\n * ```ts\n * class MyError extends Error {}\n *\n * let myError = new MyError();\n *\n * myError instanceof MyError; // returns false\n * ```\n *\n * You will see unexpected things. This class fixes that issue as described here\n * https://github.com/microsoft/TypeScript/issues/13965\n */\nexport class DaffInheritableError extends Error {\n  __proto__: Error;\n\n  recoverable = false;\n\n  constructor(message?: string) {\n    super(message);\n    const trueProto = new.target.prototype;\n\n    Object.setPrototypeOf(this, trueProto);\n  }\n}\n","import { DaffError } from './error.interface';\nimport { DaffInheritableError } from './inheritable-error';\n\n/**\n * Checks if the passed object is a {@link DaffError}\n */\nexport const daffIsError = (error: any): boolean =>\n  error instanceof DaffInheritableError || !!(<DaffError>error).code;\n","import {\n  DaffError,\n  DaffInheritableError,\n} from '../errors/public_api';\n\nexport const DAFF_COLLECTION_PAGE_OUT_OF_BOUNDS_ERROR_CODE = 'DAFF_COLLECTION_PAGE_OUT_OF_BOUNDS';\n\n/**\n * An error thrown when the requested page is greater than the number of available pages.\n */\nexport class DaffCollectionPageOutOfBoundsError extends DaffInheritableError implements DaffError {\n  public readonly code: string = DAFF_COLLECTION_PAGE_OUT_OF_BOUNDS_ERROR_CODE;\n\n  constructor(message?: string) {\n    super(message);\n  }\n}\n","import {\n  DaffCollectionPageOutOfBoundsError,\n  DAFF_COLLECTION_PAGE_OUT_OF_BOUNDS_ERROR_CODE,\n} from './page-out-of-bounds.error';\n\nexport const daffCollectionErrorMap = {\n  [DAFF_COLLECTION_PAGE_OUT_OF_BOUNDS_ERROR_CODE]: DaffCollectionPageOutOfBoundsError,\n};\n","import { DaffCollectionMetadata } from './metadata.interface';\nimport { DaffCollectionRequest } from './request.interface';\n\ntype MetadataRequestIntersection = keyof DaffCollectionMetadata & keyof DaffCollectionRequest;\n\nconst allowedMetadataKeys: MetadataRequestIntersection[] = [\n  'appliedSortOption',\n  'appliedSortDirection',\n  'currentPage',\n  'pageSize',\n];\n\n/**\n * Extracts the part of the {@link DaffCollectionRequest} that can be directly set in {@link DaffCollectionMetadata}.\n */\nexport const daffCollectionBuildMetadataFromRequest = (request: DaffCollectionRequest): Partial<DaffCollectionMetadata> =>\n  allowedMetadataKeys.reduce(<K extends MetadataRequestIntersection>(acc: Partial<DaffCollectionMetadata>, key: K) => {\n    if (request[key]) {\n      acc[key] = request[key];\n    }\n    return acc;\n  }, <Partial<DaffCollectionMetadata>>{});\n","/**\n * The known types of filters.\n */\nexport enum DaffFilterType {\n  Equal = 'equal',\n  RangeNumeric = 'rangeNumeric'\n}\n","/**\n * The separator between a range type filter's values\n * e.g. \"price\": \"30-40\".\n */\nexport const DaffFilterFromToFilterSeparator = '-';\n","/**\n * The error codes applicable to the filter behaviors of `@daffodil/core`.\n */\nexport enum DaffFilterErrorCodes {\n  FILTER_REQUEST_TYPE_MISMATCH = 'DAFF_FILTER_REQUEST_TYPE_MISMATCH',\n  FILTER_REQUEST_NAME_MISMATCH = 'DAFF_FILTER_REQUEST_NAME_MISMATCH',\n  FILTER_NOT_FOUND = 'DAFF_FILTER_NOT_FOUND',\n  UNKNOWN_FILTER_TYPE = 'DAFF_FILTER_UNKNOWN_TYPE',\n}\n","import { DaffFilterErrorCodes } from './codes.enum';\nimport {\n  DaffError,\n  DaffInheritableError,\n} from '../../errors/public_api';\n\n/**\n * An error thrown when an operation targeting a filter matches a type unknown\n * to Daffodil.\n */\nexport class DaffFilterUnknownType extends DaffInheritableError implements DaffError {\n  public readonly code: string = DaffFilterErrorCodes.UNKNOWN_FILTER_TYPE;\n\n  constructor(message?: string) {\n    super(message);\n  }\n}\n","import {\n  DaffFilterEqual,\n  DaffFilterEqualRequest,\n} from '../../../../../filterable/public_api';\n\n/**\n * Applies a {@link DaffFilterEqualRequest} to a {@link DaffFilterEqual}\n *\n * @idempotent {filter}\n * @docs-private\n */\nexport const daffApplyFilterEqual = (\n  request: DaffFilterEqualRequest,\n  filter: DaffFilterEqual,\n): DaffFilterEqual => ({\n  ...filter,\n  options: request.value.reduce((acc, value) => {\n    const option = filter.options[value];\n\n    if (option) {\n      acc[value] = {\n        ...option,\n        applied: true,\n      };\n    }\n\n    return acc;\n  }, { ...filter.options }),\n});\n","import { DaffFilterFromToFilterSeparator } from '../../../filterable/public_api';\n\nexport const daffFilterComputeRangePairLabel = (min, max): string =>\n  `${min}${DaffFilterFromToFilterSeparator}${max}`;\n","import {\n  DaffFilterRangeRequestBase,\n  DaffFilterRangeBase,\n} from '../../../../../filterable/public_api';\nimport { daffFilterComputeRangePairLabel } from '../../compute-pair-label';\n\n/**\n * Applies a {@link DaffFilterRangeRequestBase} to a {@link DaffFilterRangeBase}\n *\n * @idempotent {filter}\n * @docs-private\n */\nexport const daffApplyFilterRange = <T, U extends DaffFilterRangeRequestBase<T>, V extends DaffFilterRangeBase<T>>(\n  request: U,\n  filter: V,\n): V => ({\n  ...filter,\n  options: {\n    [daffFilterComputeRangePairLabel(request.value.min, request.value.max)]: {\n      min: {\n        value: request.value.min,\n        label: String(request.value.min),\n      },\n      max: {\n        value: request.value.max,\n        label: String(request.value.max),\n      },\n      applied: true,\n    },\n  },\n});\n","import { DaffFilterErrorCodes } from './codes.enum';\nimport {\n  DaffError,\n  DaffInheritableError,\n} from '../../errors/public_api';\n\n/**\n * An error thrown when a lookup for a filter.\n */\nexport class DaffFilterNotFound extends DaffInheritableError implements DaffError {\n  public readonly code: string = DaffFilterErrorCodes.FILTER_NOT_FOUND;\n\n  constructor(message?: string) {\n    super(message);\n  }\n}\n","import { DaffFilterErrorCodes } from './codes.enum';\nimport {\n  DaffError,\n  DaffInheritableError,\n} from '../../errors/public_api';\n\n/**\n * An error thrown when an operation targeting a filter matching one name\n * matches a filter of another name.\n */\nexport class DaffFilterRequestNameMismatch extends DaffInheritableError implements DaffError {\n  public readonly code: string = DaffFilterErrorCodes.FILTER_REQUEST_NAME_MISMATCH;\n\n  constructor(message?: string) {\n    super(message);\n  }\n}\n","import {\n  DaffFilterRequest,\n  DaffFilter,\n  DaffFilterToggleRequest,\n} from '../../filterable/public_api';\nimport { DaffFilterNotFound } from '../errors/filter-not-found.error';\nimport { DaffFilterRequestNameMismatch } from '../errors/request-name-mismatch.error';\n\n/**\n * Ensures that the names of the filter and the filter request match.\n *\n * @throws {@link DaffFilterNotFound} if the names do not match.\n */\nexport const daffFilterValidateRequestNameMatch = (\n  request: DaffFilterRequest | DaffFilterToggleRequest,\n  filter: DaffFilter,\n): void => {\n  if (!filter) {\n    throw new DaffFilterNotFound('Filter does not exist');\n  }\n  if (request.name !== filter.name) {\n    throw new DaffFilterRequestNameMismatch('Filter name does not match request name');\n  }\n};\n","import { DaffFilterErrorCodes } from './codes.enum';\nimport {\n  DaffError,\n  DaffInheritableError,\n} from '../../errors/public_api';\n\n/**\n * An error thrown when an operation targeting a filter matching one type\n * matches a filter of another type.\n */\nexport class DaffFilterRequestTypeMismatch extends DaffInheritableError implements DaffError {\n  public readonly code: string = DaffFilterErrorCodes.FILTER_REQUEST_TYPE_MISMATCH;\n\n  constructor(message?: string) {\n    super(message);\n  }\n}\n","import {\n  DaffFilterRequest,\n  DaffFilter,\n  DaffFilterToggleRequest,\n} from '../../filterable/public_api';\nimport { DaffFilterRequestTypeMismatch } from '../errors/request-type-mismatch.error';\n\n/**\n * Ensures that the types of the filter and the filter request match.\n *\n * @throws {@link DaffFilterRequestTypeMismatch} if the types do not match.\n */\nexport const daffFilterValidateRequestTypeMatch = (\n  request: DaffFilterRequest | DaffFilterToggleRequest,\n  filter: DaffFilter,\n): void => {\n  if (request.type !== filter.type) {\n    throw new DaffFilterRequestTypeMismatch('Filter types don\\'t match');\n  }\n};\n","import {\n  DaffFilterRequest,\n  DaffFilter,\n  DaffFilterType,\n  DaffFilterEqual,\n  DaffFilterRangeNumeric,\n} from '../../../filterable/public_api';\nimport { DaffFilterUnknownType } from '../../errors/unknown-filter-type.error';\nimport { daffApplyFilterEqual } from '../../type/equal/behaviors/apply/apply';\nimport { daffApplyFilterRange } from '../../type/range/behaviors/apply/apply';\nimport {\n  daffFilterValidateRequestNameMatch,\n  daffFilterValidateRequestTypeMatch,\n} from '../../validators/public_api';\n\n/**\n * Applies a filter request to the matching filter.\n *\n * @idempotent {filter}\n * @throws {@link DaffFilterUnknownType}\n */\nexport const daffApplyFilter = (request: DaffFilterRequest, filter: DaffFilter): DaffFilter => {\n  daffFilterValidateRequestNameMatch(request, filter);\n  daffFilterValidateRequestTypeMatch(request, filter);\n\n  switch (request.type) {\n    case DaffFilterType.Equal:\n      return daffApplyFilterEqual(request, <DaffFilterEqual>filter);\n    case(DaffFilterType.RangeNumeric):\n      return daffApplyFilterRange(request, <DaffFilterRangeNumeric>filter);\n    default:\n      throw new DaffFilterUnknownType('Unknown filter type');\n  }\n};\n","\n\nimport { daffApplyFilter } from './apply-filter';\nimport {\n  DaffFilterRequest,\n  DaffFilters,\n} from '../../../filterable/public_api';\n\n/**\n * Applies a {@link DaffFilterRequest} to a dictionary of {@link DaffFilter}\n * returning the updated dictionary.\n *\n * @idempotent {filters}\n */\nexport const daffApplyRequestToFilters = (request: DaffFilterRequest, filters: DaffFilters):  DaffFilters => ({\n  ...filters,\n  [request.name]: daffApplyFilter(request, filters[request.name]),\n});\n\n\n","\n\nimport { daffApplyFilter } from './apply-filter';\nimport {\n  DaffFilterRequest,\n  DaffFilters,\n} from '../../../filterable/public_api';\n\n/**\n * Applies filters from a {@link DaffFilterRequest} to a dictionary\n * of {@link DaffFilter}.\n *\n * @idempotent {filters}\n */\nexport const daffApplyRequestsToFilters = (\n  filtersRequests: DaffFilterRequest[],\n  filters: DaffFilters,\n): DaffFilters =>\n  filtersRequests.reduce((acc, request) => {\n    acc[request.name] = daffApplyFilter(request, filters[request.name]);\n    return acc;\n  }, { ...filters });\n\n\n","import { DaffFilterEqual } from '../../../../../filterable/public_api';\n\n/**\n * Unapplies the applied filter options of a {@link DaffFilterEqual}\n *\n * @idempotent {filter}\n * @docs-private\n */\nexport const daffClearFilterEqual = (filter: DaffFilterEqual): DaffFilterEqual => ({\n  ...filter,\n  options: Object.keys(filter.options).map((key) => filter.options[key]).reduce((acc, option) => {\n    acc[option.value] = {\n      ...option,\n      applied: false,\n    };\n    return acc;\n  }, { ...filter.options }),\n});\n","import { DaffFilterRangeBase } from '../../../../../filterable/public_api';\n\n/**\n * Unapplies the applied filter options of a {@link DaffFilterRangeBase}\n *\n * @idempotent {filter}\n * @docs-private\n */\nexport const daffClearFilterRange = <T, U extends DaffFilterRangeBase<T>>(filter: U): U => ({\n  ...filter,\n  options: {},\n});\n","import {\n  DaffFilterType,\n  DaffFilter,\n} from '../../../filterable/public_api';\nimport { DaffFilterUnknownType } from '../../errors/unknown-filter-type.error';\nimport { daffClearFilterEqual } from '../../type/equal/behaviors/clear/clear';\nimport { daffClearFilterRange } from '../../type/range/behaviors/clear/clear';\n\n/**\n * Undoes the applied state of all applied filter options of a {@link DaffFilter}\n * returning the filter.\n *\n * @idempotent {filter}\n */\nexport const daffClearFilter = (filter: DaffFilter): DaffFilter => {\n  switch (filter.type) {\n    case DaffFilterType.RangeNumeric:\n      return daffClearFilterRange(filter);\n    case DaffFilterType.Equal:\n      return daffClearFilterEqual(filter);\n    default:\n      throw new DaffFilterUnknownType('Unknown filter type');\n  }\n};\n","\n\nimport { daffClearFilter } from './clear-filter';\nimport { DaffFilters } from '../../../filterable/public_api';\n\n/**\n * Undoes the applied state of all applied filter options of a dictionary of {@link DaffFilter}\n * returning updated dictionary.\n *\n * @idempotent {filters}\n */\nexport const daffClearFilters = (filters: DaffFilters): DaffFilters =>\n  Object.keys(filters).map((key) => filters[key]).reduce((acc, filter) => {\n    acc[filter.name] = daffClearFilter(filter);\n    return acc;\n  }, {});\n","import {\n  DaffFilterEqualRequest,\n  DaffFilter,\n  DaffFilterEqual,\n} from '../../../../../filterable/public_api';\n\n/**\n * Removes the matching filter options of a {@link DaffFilterEqual}\n * that match the {@link DaffFilterEqualRequest}\n *\n * If there are no matching options, returns the original {@link DaffFilterEqual}\n *\n * @idempotent {filter}\n * @docs-private\n */\nexport const daffRemoveFilterEqual = (\n  request: DaffFilterEqualRequest,\n  filter: DaffFilterEqual,\n): DaffFilter => ({\n  ...filter,\n  options: request.value.reduce((acc, value) => {\n    const option = filter.options[value];\n\n    if (option) {\n      acc[value] = {\n        ...option,\n        applied: false,\n      };\n    }\n\n    return acc;\n  }, { ...filter.options }),\n});\n","import {\n  DaffFilterRangeRequestBase,\n  DaffFilterRangeBase,\n} from '../../../../../filterable/public_api';\nimport { daffFilterComputeRangePairLabel } from '../../compute-pair-label';\n\n/**\n * Removes the matching filter options of a {@link DaffFilterRangeBase}\n * that match the {@link DaffFilterRangeRequestBase}\n *\n * If there are no matching options, returns the original {@link DaffFilterRangeBase}\n *\n * @idempotent {filter}\n * @docs-private\n */\nexport const daffRemoveFilterRange = <T, U extends DaffFilterRangeBase<T>>(\n  request: DaffFilterRangeRequestBase<T>,\n  filter: U,\n): U =>\n  filter.options[daffFilterComputeRangePairLabel(request.value.min, request.value.max)]\n    ? ({\n      ...filter,\n      options: {},\n    })\n    : filter;\n","import {\n  DaffFilterRequest,\n  DaffFilter,\n  DaffFilterType,\n  DaffFilterEqual,\n  DaffFilterRangeNumeric,\n} from '../../../filterable/public_api';\nimport { DaffFilterUnknownType } from '../../errors/unknown-filter-type.error';\nimport { daffRemoveFilterEqual } from '../../type/equal/behaviors/remove/remove';\nimport { daffRemoveFilterRange } from '../../type/range/behaviors/remove/remove';\nimport {\n  daffFilterValidateRequestNameMatch,\n  daffFilterValidateRequestTypeMatch,\n} from '../../validators/public_api';\n\n/**\n * Undoes any applied options of a {@link DaffFilter} that match the\n * {@link DaffFilterRequest}, returning the {@link DaffFilter}.\n *\n * @idempotent {filter}\n * @pure\n */\nexport const daffRemoveFilter = (request: DaffFilterRequest, filter: DaffFilter): DaffFilter => {\n  daffFilterValidateRequestNameMatch(request, filter);\n  daffFilterValidateRequestTypeMatch(request, filter);\n\n  switch (request.type) {\n    case DaffFilterType.Equal:\n      return daffRemoveFilterEqual(request, <DaffFilterEqual>filter);\n    case (DaffFilterType.RangeNumeric):\n      return daffRemoveFilterRange(request, <DaffFilterRangeNumeric>filter);\n    default:\n      throw new DaffFilterUnknownType('Unknown filter type');\n  }\n};\n","\n\nimport { daffRemoveFilter } from './remove-filter';\nimport {\n  DaffFilterRequest,\n  DaffFilters,\n} from '../../../filterable/public_api';\n\n/**\n * Undoes any applied options of a particular filter of a dictionary of {@link DaffFilter}\n * that match the {@link DaffFilterRequest}, returning the dictionary of {@link DaffFilter}.\n *\n * @idempotent {filters}\n */\nexport const daffRemoveRequestFromFilters = (\n  request: DaffFilterRequest,\n  filters: DaffFilters,\n): DaffFilters => ({\n  ...filters,\n  [request.name]: daffRemoveFilter(request, filters[request.name]),\n});\n","\n\nimport { daffRemoveFilter } from './remove-filter';\nimport {\n  DaffFilterRequest,\n  DaffFilters,\n} from '../../../filterable/public_api';\n\n/**\n * Undoes all applied options of a dictionary of {@link DaffFilter}\n * that match any of the {@link DaffFilterRequest},\n * returning the updated dictionary of {@link DaffFilter}.\n *\n * @idempotent {filters}\n */\nexport const daffRemoveRequestsFromFilters = (\n  requests: (DaffFilterRequest)[],\n  filters: DaffFilters,\n): DaffFilters =>\n  requests.reduce((acc, request) => {\n    acc[request.name] = daffRemoveFilter(request, filters[request.name]);\n    return acc;\n  }, { ...filters });\n","import {\n  DaffFilterEqual ,\n  DaffFilterEqualToggleRequest,\n} from '../../../../../filterable/public_api';\n\n/**\n * Oscillates the applied state of the matching filter options of a {@link DaffFilterEqual}\n * that match the {@link DaffFilterEqualRequest}\n *\n * If there are no matching options, returns the original {@link DaffFilterEqual}\n *\n * @docs-private\n */\nexport const daffToggleFilterEqual = (\n  request: DaffFilterEqualToggleRequest,\n  filter: DaffFilterEqual,\n): DaffFilterEqual => {\n  const option = filter.options[request.value];\n\n  return option\n    ? {\n      ...filter,\n      options: {\n        ...filter.options,\n        [option.value]: {\n          ...option,\n          applied: !option.applied,\n        },\n      },\n    }\n    : filter;\n};\n","import {\n  DaffFilterRangeBase,\n  DaffFilterRangeRequestBase,\n} from '../../../../../filterable/public_api';\nimport { daffFilterComputeRangePairLabel } from '../../compute-pair-label';\nimport { daffApplyFilterRange } from '../apply/apply';\nimport { daffRemoveFilterRange } from '../remove/remove';\n\n/**\n * Oscillates the applied state of the matching filter options of a {@link DaffFilterRangeBase}\n * that match the {@link DaffFilterRangeRequestBase}\n *\n * If there are no matching options, returns the original {@link DaffFilterRangeBase}\n *\n * @docs-private\n */\nexport const daffToggleFilterRange = <T, U extends DaffFilterRangeBase<T>>(\n  request: DaffFilterRangeRequestBase<T>,\n  filter: U,\n): U =>\n  filter.options[daffFilterComputeRangePairLabel(request.value.min, request.value.max)]\n    ? daffRemoveFilterRange(request, filter)\n    : daffApplyFilterRange(request, filter);\n","import {\n  DaffFilterToggleRequest,\n  DaffFilter,\n  DaffFilterType,\n  DaffFilterEqual,\n  DaffFilterRangeNumeric,\n} from '../../../filterable/public_api';\nimport { DaffFilterUnknownType } from '../../errors/unknown-filter-type.error';\nimport { daffToggleFilterEqual } from '../../type/equal/behaviors/toggle/toggle';\nimport { daffToggleFilterRange } from '../../type/range/behaviors/toggle/toggle';\nimport {\n  daffFilterValidateRequestNameMatch,\n  daffFilterValidateRequestTypeMatch,\n} from '../../validators/public_api';\n\n/**\n * Toggles the state of the filters (and their options) in the {@link DaffFilter}\n * that match the {@link DaffFilterToggleRequest} .\n */\nexport function daffToggleFilter(\n  request: DaffFilterToggleRequest,\n  filter: DaffFilter,\n): DaffFilter {\n  daffFilterValidateRequestNameMatch(request, filter);\n  daffFilterValidateRequestTypeMatch(request, filter);\n\n  switch (request.type) {\n    case DaffFilterType.Equal:\n      return daffToggleFilterEqual(request, <DaffFilterEqual>filter);\n    case(DaffFilterType.RangeNumeric):\n      return daffToggleFilterRange(request, <DaffFilterRangeNumeric>filter);\n    default:\n      throw new DaffFilterUnknownType('Unknown filter type');\n  }\n}\n","\n\nimport { daffToggleFilter } from './toggle';\nimport {\n  DaffFilters,\n  DaffFilterToggleRequest,\n} from '../../../filterable/public_api';\n\n/**\n * Toggles the state of a filter option in the {@link DaffFilters}\n * that matches the {@link DaffFilterToggleRequest}.\n */\nexport const daffToggleRequestOnFilters = (\n  request: DaffFilterToggleRequest,\n  filters: DaffFilters,\n): DaffFilters => ({\n  ...filters,\n  [request.name]: daffToggleFilter(request, filters[request.name]),\n});\n\n\n","import { DaffFilterEqual } from '../../../../filterable/public_api';\n\n/**\n * Determines whether or not the {@link DaffFilterEqual} has any applied options.\n */\nexport const daffIsFilterEqualApplied = (filter: DaffFilterEqual): boolean =>\n  Object.keys(filter.options).map((key) => filter.options[key]).findIndex(option => option.applied) > -1;\n","import { DaffFilterRangeBase } from '../../../../filterable/public_api';\n\n/**\n * Determines whether or not a {@link DaffFilterRangeBase} has any applied options.\n */\nexport const daffIsFilterRangeApplied = <T>(filter: DaffFilterRangeBase<T>): boolean =>\n  Object.keys(filter.options).length > 0;\n","import {\n  DaffFilterType,\n  DaffFilter,\n} from '../../filterable/public_api';\nimport { DaffFilterUnknownType } from '../errors/unknown-filter-type.error';\nimport { daffIsFilterEqualApplied } from '../type/equal/is-applied/is-applied';\nimport { daffIsFilterRangeApplied } from '../type/range/is-applied/is-applied';\n\n/**\n * Determines whether or not a filter has any currently applied options.\n */\nexport const daffIsFilterApplied = (filter: DaffFilter): boolean => {\n  switch (filter.type) {\n    case DaffFilterType.RangeNumeric:\n      return daffIsFilterRangeApplied(filter);\n    case DaffFilterType.Equal:\n      return daffIsFilterEqualApplied(filter);\n    default:\n      throw new DaffFilterUnknownType('Unknown filter type');\n  }\n};\n","import {\n  DaffFilterEqualToggleRequest,\n  DaffFilterEqual,\n} from '../../../../filterable/public_api';\n\n/**\n * Determines whether or not any {@link DaffFilterEqual} options matching {@link DaffFilterEqualToggleRequest} are applied.\n */\nexport const daffIsEqualToggleRequestAppliedToFilter = (\n  request: DaffFilterEqualToggleRequest,\n  filter: DaffFilterEqual,\n): boolean => !!filter.options[request.value]?.applied;\n","import {\n  DaffFilterRangeRequestBase,\n  DaffFilterRangeBase,\n} from '../../../../filterable/public_api';\nimport { daffFilterComputeRangePairLabel } from '../compute-pair-label';\n\n/**\n * Determines whether or not any {@link DaffFilterRangeBase} options matching {@link DaffFilterRangeRequestBase} are applied.\n */\nexport const daffIsRangeToggleRequestAppliedToFilter = <T>(\n  request: DaffFilterRangeRequestBase<T>,\n  filter: DaffFilterRangeBase<T>,\n): boolean =>\n  daffFilterComputeRangePairLabel(request.value.min, request.value.max) in filter.options;\n","import {\n  DaffFilter,\n  DaffFilterToggleRequest,\n  DaffFilterType,\n  DaffFilterRangeNumericToggleRequest,\n  DaffFilterEqualToggleRequest,\n} from '../../filterable/public_api';\nimport { DaffFilterUnknownType } from '../errors/unknown-filter-type.error';\nimport { daffIsEqualToggleRequestAppliedToFilter } from '../type/equal/is-applied/is-toggle-request-applied-to-filter';\nimport { daffIsRangeToggleRequestAppliedToFilter } from '../type/range/is-applied/is-toggle-request-applied-to-filter';\n\n/**\n * Determines whether or not a {@link DaffFilterToggleRequest} is already applied to a {@link DaffFilter}.\n */\nexport const daffIsToggleRequestAppliedToFilter = (request: DaffFilterToggleRequest, filter: DaffFilter): boolean => {\n  switch (filter.type) {\n    case DaffFilterType.RangeNumeric:\n      return daffIsRangeToggleRequestAppliedToFilter(<DaffFilterRangeNumericToggleRequest>request, filter);\n    case DaffFilterType.Equal:\n      return daffIsEqualToggleRequestAppliedToFilter(<DaffFilterEqualToggleRequest>request, filter);\n    default:\n      throw new DaffFilterUnknownType('Unknown filter type');\n  }\n};\n","import { DaffFilterBase } from '../../filterable/public_api';\n\n/**\n * Finds the applied options in the filter.\n */\nexport const daffFilterFindAppliedOptions = <T extends DaffFilterBase>(filter: T): T['options'][string][] =>\n  Object.keys(filter.options).map((key) => <T['options'][string]>filter.options[key]).filter((option) => option.applied);\n","import {\n  DaffFilterEqual,\n  DaffFilterEqualRequest,\n  DaffFilterType,\n} from '../../../../filterable/public_api';\nimport { daffFilterFindAppliedOptions } from '../../../find-applied/public_api';\n\n/**\n * Builds an {@link DaffFilterEqualRequest} from the passed filter and options.\n */\nexport const daffFilterEqualToRequest = (\n  filter: DaffFilterEqual,\n): DaffFilterEqualRequest | null => {\n  const options = daffFilterFindAppliedOptions(filter);\n  if(!options.length){\n    return null;\n  }\n\n  return {\n    type: DaffFilterType.Equal,\n    name: filter.name,\n    value: options.map(option => option.value),\n  };\n};\n","import {\n  DaffFilterRangeBase,\n  DaffFilterRangeRequestBase,\n} from '../../../../filterable/public_api';\nimport { daffFilterFindAppliedOptions } from '../../../find-applied/public_api';\n\n/**\n * Builds a {@link DaffFilterRangeRequestBase} from the passed {@link DaffFilterRangeBase} and options.\n */\nexport const daffFilterRangeToRequest = <T, U extends DaffFilterRangeBase<T>>(\n  filter: U,\n): DaffFilterRangeRequestBase<T> => {\n  const options = daffFilterFindAppliedOptions(filter);\n  if(!options.length){\n    return null;\n  }\n\n  return {\n    type: filter.type,\n    name: filter.name,\n    value: {\n      min: options[0].min.value,\n      max: options[0].max.value,\n    },\n  };\n};\n","import {\n  DaffFilterRangeNumeric,\n  DaffFilterRangeNumericRequest,\n} from '../../../../filterable/public_api';\nimport { daffFilterRangeToRequest } from '../../range/to-request/filter-to-request';\n\n/**\n * Transforms a {@link DaffFilterRangeNumeric} into a {@link DaffFilterRangeNumericRequest}\n */\nexport const daffFilterRangeNumericToRequest = (\n  filter: DaffFilterRangeNumeric,\n): DaffFilterRangeNumericRequest => <DaffFilterRangeNumericRequest>daffFilterRangeToRequest(filter);\n","import {\n  DaffFilter,\n  DaffFilterRequest,\n  DaffFilterType,\n} from '../../filterable/public_api';\nimport { DaffFilterUnknownType } from '../errors/unknown-filter-type.error';\nimport { daffFilterEqualToRequest } from '../type/equal/to-request/filter-to-request';\nimport { daffFilterRangeNumericToRequest } from '../type/range-numeric/to-request/filter-to-request';\n\n/**\n * Builds a filter request from a filter.\n * Returns null if the filter does not have at least one applied option.\n */\nexport function daffFilterToRequest(filter: DaffFilter): DaffFilterRequest | null {\n  switch (filter.type) {\n    case DaffFilterType.RangeNumeric:\n      return daffFilterRangeNumericToRequest(filter);\n    case DaffFilterType.Equal:\n      return daffFilterEqualToRequest(filter);\n    default:\n      throw new DaffFilterUnknownType('Unknown filter type');\n  }\n};\n","\n\nimport { daffFilterToRequest } from './filter-to-request';\nimport {\n  DaffFilterRequest,\n  DaffFilters,\n} from '../../filterable/public_api';\n\n/**\n * Builds a list of filter requests from a list of filters.\n * Requests are only built for the filters that have at least one applied option.\n */\nexport function daffFiltersToRequests(filters: DaffFilters): DaffFilterRequest[] {\n  return Object.keys(filters).map((key) => filters[key]).reduce((acc: DaffFilterRequest[], filter) => {\n    const request = daffFilterToRequest(filter);\n\n    if (request) {\n      acc.push(request);\n    }\n\n    return acc;\n  }, []);\n}\n","/**\n * Recurses through a tree, collecting each element in that tree and returning it in an array.\n * The value of getKey should be a field that contains a list of the same type of object.\n * Accepts an optional depth argument which will limit the traversal. This should be used for trees with circular references.\n */\nexport const collect = <T>(obj: T, getChildren: (val: T) => T[], depth?: number): T[] =>\n  !depth || depth > 0\n    ? [obj].concat(...getChildren(obj).map((child) => collect(child, getChildren, depth - 1)))\n    : [obj];\n","/**\n * A helper function to compute a power of 10 required to convert a decimal number to an integer\n * This function will fail if the given number has more than 16 significant figures or\n * the value of the number is greater than 10^11\n *\n * @param value\n */\nexport function daffPrecision(value: number): number {\n  let p = 1;\n  if(\n    value === undefined ||\n      value === null ||\n      Number.isNaN(value) ||\n      value === Infinity ||\n      value === -Infinity\n  ) {\n    return p;\n  }\n  while (Math.round(value * p) / p !== value) {\n    p *= 10;\n    if(p >= 1e11){\n      break;\n    }\n  }\n  return p;\n}\n\n/**\n * A function to add long numbers accurately with conversions and integer math.\n * This function only guarantees correct answers when the numbers given and the result are less than\n * 16 significant figures and less than 10^11\n *\n * @param numbers\n */\nexport function daffAdd(...numbers: number[]): number {\n  if(numbers.length === 0) {\n    return undefined;\n  }\n  if(numbers.length === 1) {\n    return numbers[0];\n  }\n  const precision = Math.max(...numbers.map(daffPrecision));\n  return numbers.slice(1).reduce(\n    (acc, value) => acc + Math.round(value*precision),\n    Math.round(numbers[0]*precision),\n  ) / precision;\n}\n\n/**\n * A function to subtract long numbers accurately with conversions and integer math.\n * This function only guarantees correct answers when the numbers given and the result are each less than\n * 16 significant figures and less than 10^11\n *\n * @param numbers\n */\nexport function daffSubtract(...numbers: number[]): number {\n  if(numbers.length === 0) {\n    return undefined;\n  }\n  if(numbers.length === 1) {\n    return numbers[0];\n  }\n  const precision = Math.max(...numbers.map(daffPrecision));\n  return numbers.slice(1).reduce(\n    (acc, value) => acc - Math.round(value*precision),\n    Math.round(numbers[0]*precision),\n  ) / precision;\n}\n\n/**\n * A function to multiply long numbers accurately with conversions and integer math.\n * This function only guarantees correct answers when the numbers given and the result are each less than 16 significant figures\n * and less than 10^11\n *\n * @param numbers\n */\nexport function daffMultiply(...numbers: number[]): number {\n  if(numbers.length === 0) {\n    return undefined;\n  }\n  if(numbers.length === 1) {\n    return numbers[0];\n  }\n\n  const precision = Math.max(...numbers.map(daffPrecision));\n  return numbers.reduce(\n    (acc, value) => acc * Math.round(value*precision),\n    1,\n  ) / Math.pow(precision, numbers.length);\n}\n\n/**\n * A function to divide long numbers accurately with conversions and integer math.\n * This function only guarantees correct answers when the numbers given and the result are each less than 16 significant figures\n * and less than 10^11\n *\n * Returns NaN when attempting to use NaN as an input.\n * Returns NaN when attempting to divide by 0 or null.\n *\n * @param numbers\n */\nexport function daffDivide(...numbers: number[]): number {\n  if(numbers.length === 0) {\n    return undefined;\n  }\n  if(numbers.length === 1) {\n    return numbers[0];\n  }\n\n  const precision = Math.max(...numbers.map(daffPrecision));\n  return numbers.slice(1).reduce(\n    (acc, value) => acc / Math.round(value*precision),\n    Math.round(numbers[0]*precision),\n  ) * Math.pow(precision, numbers.length - 2);\n}\n","type Dictionary = Record<string | number | symbol, any>;\n\n/**\n * Converts an array into a dictionary.\n * Dictionary values are keyed by the return of the specified `getKey`.\n */\nexport const daffArrayToDict = <T, R extends keyof Dictionary = keyof Dictionary>(array: Array<T>, getKey: (val: T) => R): Record<R, T> =>\n  array.reduce(\n    (dict, val) => {\n      dict[getKey(val)] = val;\n      return dict;\n    },\n    <Record<R, T>>{},\n  );\n","/**\n * Returns a random slice of an array.\n * An optional length may be specified.\n *\n * @param array\n */\nexport const randomSlice = <T>(array: T[], length?: number): T[] => {\n  if(array.length === 0) {\n    return [];\n  };\n  if(length > array.length) {\n    throw new Error('Requested length is longer than array length.');\n  }\n  const arrayLength = length || Math.floor(Math.random() * array.length);\n  const start = Math.floor(Math.random() * (array.length - arrayLength + 1));\n  const end = start + arrayLength;\n  return array.slice(start, end);\n};\n","/**\n * Immutable Fisher-Yates Shuffle\n * https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle\n */\nexport const shuffle = <T>(array: T[]): T[] => {\n  const result = [];\n  array.forEach((el, i) => {\n    const s = Math.floor(Math.random() * (i + 1));\n    if( s !== i ){\n      result[i] = result[s];\n    }\n    result[s] = el;\n  });\n  return result;\n};\n","import { shuffle } from './shuffle';\n\n/**\n * Returns a random subset of an array in a random order.\n *\n * @param array\n * @param length\n */\nexport const randomSubset = <T>(array: T[], length?: number): T[] => {\n  if(length > array.length){\n    throw new Error('Requested length is longer than array length.');\n  }\n  length = length ? length : Math.floor(Math.random() * array.length);\n  return shuffle(array).slice(0, length);\n};\n","/**\n * Range\n *\n * Range accepts two inputs, a `start` and an `end`\n * and returns an array filled with numbers from\n * `start` to `end`.\n *\n * @param start\n * @param end\n * @returns number\n */\nexport const range = (start: number, end: number): Array<number> =>\n  Array(end - start + 1).fill(0).map((val, index) => index + start);\n\n","import { randomSlice } from './random-slice';\n\n/**\n * Returns a random element of an array.\n */\nexport const sample = <T>(array: T[]): T => randomSlice(array, 1)[0];\n","/**\n * Shallow compares two objects using a list of provided property keys to enumerate the values.\n * `null` and `undefined` are considered equal for the purposes of the comparison.\n * A strict equality comparison is used for truthy property values.\n */\nexport function shallowCompare<T>(obj1: T, obj2: T, props: (T extends T ? keyof T: never)[]): boolean {\n  return !!(obj1 && obj2 && props.reduce(\n    (acc, prop) => {\n      const p1 = obj1[prop];\n      const p2 = obj2[prop];\n      return acc && (\n        // undefined and null are treated as equal\n        (p1 === undefined || p1 === null) && (p2 === undefined || p2 === null)\n          || p1 === p2\n      );\n    },\n    true,\n  ));\n}\n","/**\n * Filters an array of elements, removing duplicates.\n * Does not guarantee order of filtered elements.\n *\n * An optional comparator function may be passed for arbitrary comparison behavior.\n * The default is a strict equality comparison: `a === b`.\n */\nexport const unique = <T>(array: T[], comparator: (a: T, b: T) => boolean = (a, b) => a === b): T[] =>\n  array.filter((a, index) => array.slice(index + 1).filter(b => comparator(a, b)).length === 0);\n","/**\n * The unary identity function.\n * Returns whatever is passed to it.\n */\nexport function identity<T>(v: T): T {\n  return v;\n}\n","import {\n  Observable,\n  isObservable,\n  from,\n} from 'rxjs';\n\nimport { MaybeAsync } from '../async/maybe.type';\n\n/**\n * Converts a value to an observable.\n * If the value is an observable, just returns that observable.\n * If the value is a promise, converts it to an observable (see rxjs `from`).\n * If the value is neither, just returns an observable that immediately emits the value.\n */\nexport function observe<T>(val: MaybeAsync<T>): Observable<T> {\n  return isObservable(val) ? val : from(Promise.resolve(val));\n}\n","import { DaffFilterRangePair } from '../../../../filterable/public_api';\nimport { daffArrayToDict } from '../../../../utils/public_api';\nimport { daffFilterComputeRangePairLabel } from '../compute-pair-label';\n\n/**\n * Transforms an {@link DaffFilterRangePair[]} to a dictionary.\n */\nexport const daffFilterRangePairArrayToDict = <T>(pairs: DaffFilterRangePair<T>[]): Record<string, DaffFilterRangePair<T>> =>\n  daffArrayToDict(pairs, pair => daffFilterComputeRangePairLabel(pair.min.value, pair.max.value));\n","import { DaffFilterEqualOption } from '../../../../filterable/public_api';\nimport { daffArrayToDict } from '../../../../utils/public_api';\n\n/**\n * Converts a list of equal filter options to a dict of options keyed by option value.\n */\nexport const daffFilterEqualOptionArrayToDict =\n  (options: DaffFilterEqualOption[]): Record<DaffFilterEqualOption['value'], DaffFilterEqualOption> =>\n    daffArrayToDict(options, option => option.value);\n","import {\n  DaffFilter,\n  DaffFilters,\n} from '../../filterable/public_api';\nimport { daffArrayToDict } from '../../utils/public_api';\n\n/**\n * Converts a list of filters into a dictionary of filters keyed by filter name.\n */\nexport const daffFilterArrayToDict = <T extends DaffFilter = DaffFilter>(filters: Array<T>): DaffFilters<T> =>\n  daffArrayToDict<T, T['name']>(filters, filter => filter.name);\n","\n\nimport {\n  DaffFilterType,\n  DaffFilterEqualOption,\n  DaffFilterRangePair,\n  DaffFilters,\n} from '../../filterable/public_api';\nimport { daffFilterFindAppliedOptions } from '../find-applied/public_api';\nimport { daffFilterEqualOptionArrayToDict } from '../type/equal/public_api';\nimport { daffFilterRangePairArrayToDict } from '../type/range/public_api';\n\n/**\n * Returns a {@link DaffFilters} and only their applied options.\n * {@link DaffFilter} that have no applied options will be omitted.\n */\nexport const daffComputeAppliedFilters = (filters: DaffFilters): DaffFilters =>\n  Object.keys(filters).map(key => filters[key]).reduce((acc, filter) => {\n    const appliedOptions = daffFilterFindAppliedOptions(filter);\n\n    if (appliedOptions.length > 0) {\n      acc[filter.name] = {\n        ...filter,\n        options: filter.type === DaffFilterType.Equal\n          ? daffFilterEqualOptionArrayToDict(<DaffFilterEqualOption[]>appliedOptions)\n          : daffFilterRangePairArrayToDict(<DaffFilterRangePair<unknown>[]>appliedOptions),\n      };\n    }\n\n    return acc;\n  }, {});\n","import { DaffCollectionMetadata } from './metadata.interface';\nimport { DaffCollectionRequest } from './request.interface';\nimport { daffFiltersToRequests } from '../filters/public_api';\n\n/**\n * Builds a {@link DaffCollectionRequest} from {@link DaffCollectionMetadata}.\n */\nexport const daffCollectionBuildRequestFromMetadata = (metadata: DaffCollectionMetadata): Partial<DaffCollectionRequest> => ({\n  appliedSortOption: metadata.appliedSortOption,\n  appliedSortDirection: metadata.appliedSortDirection,\n  currentPage: metadata.currentPage,\n  pageSize: metadata.pageSize,\n  filterRequests: daffFiltersToRequests(metadata.filters),\n});\n","import { DaffCreateable } from './type';\n\n/**\n * Finds and returns the most recently created entity.\n */\nexport function daffCreateableMostRecent<T extends DaffCreateable = DaffCreateable>(createables: T[]): T | null | undefined {\n  return createables.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime())[0];\n}\n","/**\n * A utility decorator that delays method execution until after a specified delay period has elapsed since the last invocation.\n *\n * @param delay - The delay in milliseconds before the method executes. Defaults to 100ms.\n * @returns A method decorator that can be applied to class methods.\n *\n * @example Basic usage with custom delay\n * ```ts\n * import { debounce } from '@daffodil/core';\n *\n * class SearchComponent {\n *   @debounce(300)\n *   onSearchInput(value: string) {\n *     // Only executes after 300ms\n *     this.performSearch(value);\n *   }\n * }\n * ```\n *\n * @example Using default delay (100ms)\n * ```ts\n * class MyComponent {\n *   @debounce() // Uses 100ms default\n *   onInputChange(value: string) {\n *     console.log('Input changed:', value);\n *   }\n * }\n * ```\n *\n * @example Angular component integration\n * ```ts\n * import { Component } from '@angular/core';\n * import { debounce } from '@daffodil/core';\n *\n * @Component({\n *   selector: 'app-search',\n *   template: '<input (input)=\"onSearchInput($event.target.value)\" />',\n * })\n * export class SearchComponent {\n *   @debounce(500)\n *   onSearchInput(value: string) {\n *     this.searchService.search(value);\n *   }\n * }\n * ```\n */\nexport const debounce = (delay: number = 100): MethodDecorator => (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): PropertyDescriptor => {\n  const originalMethod = descriptor.value;\n  let timeoutId: any = null;\n\n  descriptor.value = function(...args: any[]) {\n    if (timeoutId) {\n      clearTimeout(timeoutId);\n      timeoutId = null;\n    }\n\n    timeoutId = setTimeout(() => {\n      originalMethod.apply(this, args);\n      timeoutId = null;\n    }, delay);\n  };\n\n  return descriptor;\n};\n","import { DaffIdentifiable } from './identifiable.interface';\nimport { daffArrayToDict } from '../utils/public_api';\n\n/**\n * Transforms an array of {@link DaffIdentifiable} objects to a dictionary of those objects keyed by ID.\n */\nexport const daffIdentifiableArrayToDict = <T extends DaffIdentifiable = DaffIdentifiable>(ary: T[]): Record<T['id'], T> =>\n  daffArrayToDict(ary, ({ id }) => id);\n","export function daffArrayConcatMerger<T extends Array<unknown> = Array<unknown>>(a: T, b: T): T {\n  return <T>a.concat(b);\n}\n","export function daffDictAssignMerger<T extends Record<string, unknown> = Record<string, unknown>>(a: T, b: T): T {\n  return {\n    ...a,\n    ...b,\n  };\n}\n","import { DaffMergeStrategy } from './strategy.type';\n\n/**\n * Merges dictionaries with a specific strategy for handling collisions.\n * @see {@link DaffMergeStrategy}.\n *\n * @example Merging two dictionaries with predefined mergers\n *\n * ```ts\n * const a = {\n * \t ary: [1, 2],\n *   obj: {foo: 5, bar: 10}\n * }\n * const a = {\n * \t ary: [3, 4],\n *   obj: {foo: 6},\n *   fish: 'tacos'\n * }\n * const result = daffMerge(\n *   [a, b],\n *   {\n *     ary: daffArrayConcatMerger,\n *     obj: daffDictAssignMerger\n *   }\n * )\n * ```\n * the value of result would be:\n * ```ts\n * {\n *   ary: [1, 2, 3, 4],\n *   obj: {foo: 6, bar: 10},\n *   fish: 'tacos'\n * }\n * ```\n *\n * @example Merging two dictionaries with predefined mergers\n *\n * ```ts\n * const a = {\n * \t ary: [1, 2],\n *   obj: {foo: 5, bar: 10}\n * }\n * const a = {\n * \t ary: [3, 4],\n *   obj: {foo: 6},\n *   fish: 'tacos'\n * }\n * const result = daffMerge(\n *   [a, b],\n *   {\n *     ary: daffArrayConcatMerger,\n *     obj: daffDictAssignMerger\n *   }\n * )\n * ```\n * the value of result would be:\n * ```ts\n * {\n *   ary: [1, 2, 3, 4],\n *   obj: {foo: 6, bar: 10},\n *   fish: 'tacos'\n * }\n * ```\n */\nexport const daffMerge = <T extends Record<string, unknown> = Record<string, unknown>>(dicts: Array<T>, strategy: DaffMergeStrategy<T> = {}): T =>\n  dicts.reduce((acc, dict) => {\n    for (const k in dict) {\n      if (Object.hasOwn(acc, k) && strategy[k]) {\n        acc[k] = strategy[k](acc[k], dict[k]);\n      } else {\n        acc[k] = dict[k];\n      }\n    }\n\n    return acc;\n  }, <T>{});\n","import {\n  pipe,\n  timer,\n  throwError,\n} from 'rxjs';\nimport {\n  retryWhen,\n  mergeMap,\n} from 'rxjs/operators';\n\n/**\n * Retries failed Observables\n *\n * @param maxTries The maximum number of tries the observable will be tried\n * @param ms The initial amount of time\n */\nexport function backoff(maxTries: number, ms: number) {\n  return pipe(\n    retryWhen(attempt => attempt.pipe(\n      mergeMap((shadowedAttempt: Error, i) => {\n        if(i >= maxTries) {\n          return throwError(shadowedAttempt);\n        }\n        return timer(ms*Math.pow(2,i));\n      }),\n    )),\n  );\n}\n","import {\n  Observable,\n  combineLatest,\n  map,\n} from 'rxjs';\n\n/**\n * Accepts a list of input observables and emits true when any of the inputs emit a truthy value.\n * Does not emit until all of the input streams have emitted at least once.\n */\nexport const anyOf = (items: Observable<boolean>[]) => combineLatest(items).pipe(map((els) => els.reduce(\n  (agg, el) => agg || el, false)),\n);\n","import {\n  Observable,\n  combineLatest,\n  map,\n} from 'rxjs';\n\n/**\n * Accepts a list of input observables and emits true when all of the inputs emit a truthy value.\n * Does not emit until all of the input streams have emitted at least once.\n */\nexport const allOf = (items: Observable<boolean>[]) => combineLatest(items).pipe(map((els) => els.reduce(\n  (agg, el) => agg && el, true)),\n);\n","import {\n  Observable,\n  pipe,\n  OperatorFunction,\n  catchError,\n} from 'rxjs';\n\nimport { DaffError } from '../errors/public_api';\n\n/**\n * Catches errors and invokes the callback with an array of errors.\n */\nexport const catchAndArrayifyErrors = <TReturn, TError extends DaffError = DaffError>(transformError: (errors: TError[]) => Observable<TReturn>) => pipe<Observable<unknown>, Observable<TReturn>>(\n  <OperatorFunction<unknown, TReturn>>catchError((err: TError | TError[]) => transformError(Array.isArray(err) ? err : [err])),\n);\n","import {\n  DaffError,\n  DaffInheritableError,\n} from '../../errors/public_api';\n\nexport const DAFF_STORAGE_SERVICE_ERROR_CODE = 'DAFF_STORAGE_FAILURE';\n\nexport class DaffStorageServiceError extends DaffInheritableError implements DaffError {\n  public readonly code: string = DAFF_STORAGE_SERVICE_ERROR_CODE;\n\n  constructor(public message: string) {\n    super(message);\n  }\n}\n","import { Injectable } from '@angular/core';\n\nimport { DaffStorageServiceError } from './error';\nimport { DaffPersistenceService } from '../persistence.interface';\n\n/**\n * @inheritdoc\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class DaffErrorStorageService implements DaffPersistenceService {\n  static readonly ERROR_MESSAGE = 'The DaffErrorStorageService always throws an error.';\n\n  setItem(key: string, value: any): void {\n    this.throwError();\n  }\n\n  getItem(key: string): any {\n    this.throwError();\n  }\n\n  removeItem(key: string): any {\n    this.throwError();\n  }\n\n  clear(){\n    this.throwError();\n  }\n\n  private throwError() {\n    throw new DaffStorageServiceError(DaffErrorStorageService.ERROR_MESSAGE);\n  }\n}\n","import { DaffError } from '../../errors/public_api';\nimport { DaffStorageServiceError } from '../error/error';\n\nexport const DAFF_SERVER_STORAGE_SERVICE_ERROR_CODE = 'DAFF_SERVER_STORAGE_FAILURE';\n\n/**\n * An error thrown when there is an attempt to access storage on the server and none is available.\n */\nexport class DaffServerSideStorageError extends DaffStorageServiceError implements DaffError {\n  public readonly code: string = DAFF_SERVER_STORAGE_SERVICE_ERROR_CODE;\n\n  constructor(public message: string) {\n    super(message);\n  }\n}\n","import { Injectable } from '@angular/core';\n\nimport { DaffServerSideStorageError } from './server-error';\nimport { DaffPersistenceService } from '../persistence.interface';\n\n/**\n * A storage service meant to be loaded into SSR contexts.\n * It will always throw the {@link DaffServerSideStorageError}.\n *\n * @inheritdoc\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class DaffServerErrorStorageService implements DaffPersistenceService {\n  static readonly ERROR_MESSAGE = 'The DaffServerErrorStorageService always throws an error.';\n\n  setItem(key: string, value: any): void {\n    this.throwError();\n  }\n\n  getItem(key: string): any {\n    this.throwError();\n  }\n\n  removeItem(key: string): any {\n    this.throwError();\n  }\n\n  clear(){\n    this.throwError();\n  }\n\n  private throwError() {\n    throw new DaffServerSideStorageError(DaffServerErrorStorageService.ERROR_MESSAGE);\n  }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n  Injectable,\n  Inject,\n  PLATFORM_ID,\n} from '@angular/core';\n\nimport { DaffPersistenceService } from '../persistence.interface';\n\n/**\n * @inheritdoc\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class DaffLocalStorageService implements DaffPersistenceService {\n  constructor(@Inject(PLATFORM_ID) platformId: string){\n    if(!isPlatformBrowser(platformId)){\n      throw new Error('The DaffLocalStorageService can only be instantiated in the browser.');\n    }\n  }\n\n  /**\n   * Persist the given item into local storage.\n   */\n  setItem(key: string, value: any): void {\n    localStorage.setItem(key, value);\n  }\n\n  /**\n   * Retrieve the given item from localstorage.\n   */\n  getItem(key: string): any {\n    return localStorage.getItem(key);\n  }\n\n  /**\n   * Remove a given item from localstorage\n   */\n  removeItem(key: string): any {\n    localStorage.removeItem(key);\n  }\n\n  clear(){\n    localStorage.clear();\n  }\n}\n","import { Injectable } from '@angular/core';\n\nimport { DaffPersistenceService } from '../persistence.interface';\n\n/**\n * @inheritdoc\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class DaffNoopStorageService implements DaffPersistenceService {\n  setItem(key: string, value: any): void {};\n  getItem(key: string): any {};\n  clear(): void {};\n  removeItem(key: string): void {};\n}\n","import { DaffPersistenceService } from '../persistence.interface';\n\n/**\n * @inheritdoc\n */\nexport class DaffMemoryStorageService implements DaffPersistenceService {\n  memory: { [x: string]: any } = {};\n\n  setItem(key: string, value: any): void {\n    this.memory[key] = value;\n  }\n\n  getItem(key: string) {\n    return this.memory[key];\n  }\n\n  clear(): void {\n    this.memory = {};\n  }\n\n  /**\n   * We abuse destructuring to remove the key\n   * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment\n   */\n  removeItem(key: string): void {\n    const { [key]: value, ...noKey } = this.memory;\n    this.memory = noKey;\n  }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n  inject,\n  PLATFORM_ID,\n} from '@angular/core';\n\nimport { DaffLocalStorageService } from './localstorage/localstorage.service';\nimport { DaffServerErrorStorageService } from './server-error/public_api';\nimport { createSingleInjectionToken } from '../injection-tokens/public_api';\n\nexport interface DaffPersistenceService {\n  setItem(key: string, value: any): void;\n  getItem(key: string): any;\n  clear(): void;\n  removeItem(key: string): void;\n}\n\nexport const {\n  token: DaffPersistenceServiceToken,\n  /**\n   * Provider function for {@link DaffPersistenceServiceToken}.\n   */\n  provider: provideDaffPersistenceService,\n} = createSingleInjectionToken<DaffPersistenceService>(\n  'DaffPersistenceServiceToken',\n  {\n    providedIn: 'root',\n    factory: () => isPlatformBrowser(inject<string>(PLATFORM_ID))\n      ? new DaffLocalStorageService(inject<string>(PLATFORM_ID))\n      : new DaffServerErrorStorageService(),\n  },\n);\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n  inject,\n  PLATFORM_ID,\n} from '@angular/core';\n\nimport { DaffNoopStorageService } from './noopstorage/noopstorage.service';\nimport {\n  DaffPersistenceService,\n  DaffPersistenceServiceToken,\n} from './persistence.interface';\nimport { createSingleInjectionToken } from '../injection-tokens/public_api';\n\nexport const {\n  /**\n   * Provides noop for the persistence service on the server.\n   */\n  token: DaffServerSafePersistenceServiceToken,\n  /**\n   * Provider function for {@link DaffServerSafePersistenceServiceToken}.\n   */\n  provider: provideDaffServerSafePersistenceServiceToken,\n} = createSingleInjectionToken<DaffPersistenceService>(\n  'DaffServerSafePersistenceService',\n  {\n    providedIn: 'root',\n    factory: () =>\n      isPlatformBrowser(inject<string>(PLATFORM_ID))\n        ? inject<DaffPersistenceService>(DaffPersistenceServiceToken)\n        : inject<DaffPersistenceService>(DaffNoopStorageService),\n  },\n);\n","/**\n * Validates whether all the specified fields are defined in the passed object.\n * Uses `Object.hasOwn` to do the check, so even if a field has been set to `null`\n * or `undefined`, they will be treated as present.\n */\nexport const validateFieldPresence = <T extends Record<string, unknown>>(model: T, ...fields: Array<keyof T>): boolean =>\n  fields.reduce((acc, field) => acc && Object.hasOwn(model, field), true);\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["defaultFactory"],"mappings":"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"}