{"version":3,"file":"ngneat-bind-query-params.mjs","sources":["../../../../projects/ngneat/bind-query-params/src/lib/options.ts","../../../../projects/ngneat/bind-query-params/src/lib/utils.ts","../../../../projects/ngneat/bind-query-params/src/lib/query-param-def.ts","../../../../projects/ngneat/bind-query-params/src/lib/bind-query-params-manager.ts","../../../../projects/ngneat/bind-query-params/src/lib/bind-query-params-factory.ts","../../../../projects/ngneat/bind-query-params/src/ngneat-bind-query-params.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { BindQueryParamsOptions } from './types';\n\nexport const BIND_QUERY_PARAMS_OPTIONS = new InjectionToken<BindQueryParamsOptions>('BIND_QUERY_PARAMS_OPTIONS', {\n  providedIn: 'root',\n  factory() {\n    return {\n      windowRef: window,\n    };\n  },\n});\n","import { AbstractControl } from '@angular/forms';\nimport { ParamDefType, ResolveParamsOption } from './types';\nimport { QueryParamDef } from './query-param-def';\n\nfunction isEmptyValue(def: QueryParamDef, value: any) {\n  switch (def.type) {\n    case 'array':\n      return !value || !value.length;\n    case 'object':\n      return !value || !Object.keys(value).length;\n    case 'string':\n      return !value || value === '';\n    default:\n      return false;\n  }\n}\n\nexport function parse(value: any, type: ParamDefType) {\n  switch (type) {\n    case 'string':\n      return value;\n    case 'boolean':\n      return value === 'false' ? false : !!value;\n    case 'array':\n      return value?.split(',');\n    case 'number':\n      return +value;\n    case 'object':\n      return JSON.parse(value);\n    default:\n      return value;\n  }\n}\n\nexport function get(obj: Record<string, any>, path: string): any {\n  let current = obj;\n  path.split('.').forEach((p) => (current = current[p]));\n\n  return current;\n}\n\nexport function resolveParams(params: ResolveParamsOption | ResolveParamsOption[]) {\n  const toArray = coerceArray(params);\n\n  const result: Record<string, string | null> = {};\n\n  toArray.forEach(({ def, value }) => {\n    let defValue: string | null;\n\n    if (def.removeEmptyValue) {\n      defValue = isEmptyValue(def, value) ? null : def.serialize(value);\n    } else {\n      defValue = def.serialize(value);\n    }\n\n    result[def.queryKey] = defValue;\n  });\n\n  return result;\n}\n\nexport function coerceArray<T>(value: T | T[]): T[] {\n  return Array.isArray(value) ? value : [value];\n}\n\nexport function defsToParams(defs: QueryParamDef[], group: AbstractControl) {\n  return defs.map((def) => {\n    return {\n      queryKey: def.queryKey,\n      value: group.get(def.path)!.value,\n    };\n  });\n}\n","import { QueryDefOptions } from './types';\nimport { parse } from './utils';\n\nexport class QueryParamDef<QueryParams = any> {\n  constructor(private config: QueryDefOptions<QueryParams>) {}\n\n  get queryKey() {\n    return this.config.queryKey;\n  }\n\n  get path() {\n    return this.config.path || this.queryKey;\n  }\n\n  get type() {\n    return this.config.type || 'string';\n  }\n\n  get parser() {\n    return this.config.parser;\n  }\n\n  get syncInitialControlValue() {\n    return this.config.syncInitialControlValue;\n  }\n\n  get syncInitialQueryParamValue() {\n    return this.config.syncInitialQueryParamValue ?? true;\n  }\n\n  get serializer() {\n    return this.config.serializer;\n  }\n\n  get removeEmptyValue() {\n    return this.config.removeEmptyValue === undefined ? true : this.config.removeEmptyValue;\n  }\n\n  serialize(controlValue: any): string | null {\n    if (this.serializer) {\n      return this.serializer(controlValue);\n    }\n\n    if (controlValue === null || controlValue === undefined || controlValue === '') {\n      return null;\n    }\n\n    const serializedValue = controlValue.toString();\n\n    return serializedValue === '[object Object]' ? JSON.stringify(controlValue) : serializedValue;\n  }\n\n  parse(queryParamValue: string) {\n    if (this.parser) {\n      return this.parser(queryParamValue);\n    }\n\n    return parse(queryParamValue, this.type);\n  }\n}\n","import { FormGroup } from '@angular/forms';\nimport { merge, Subject } from 'rxjs';\nimport { Router } from '@angular/router';\nimport { coerceArray, get, resolveParams } from './utils';\nimport { auditTime, map, takeUntil } from 'rxjs/operators';\nimport { BindQueryParamsOptions, CreateOptions, QueryDefOptions, ResolveParamsOption, SyncDefsOptions } from './types';\nimport { QueryParamDef } from './query-param-def';\nimport set from 'lodash-es/set';\n\nexport class BindQueryParamsManager<T = any> {\n  private defs: QueryParamDef<T>[];\n  private group!: FormGroup;\n  private destroy$ = new Subject();\n  private syncedDefs = {} as Record<keyof T, boolean>;\n\n  connect(group: FormGroup) {\n    this.group = group;\n    this.init();\n\n    return this;\n  }\n\n  reconnect(group: FormGroup) {\n    this.destroy();\n    this.group = group;\n    this.init({ reconnect: true });\n\n    return this;\n  }\n\n  constructor(\n    private router: Router,\n    defs: QueryDefOptions<T>[] | QueryDefOptions<T>,\n    private options: BindQueryParamsOptions,\n    private createOptions?: CreateOptions\n  ) {\n    this.defs = coerceArray(defs).map((def) => new QueryParamDef(def));\n  }\n\n  private init(options?: { reconnect: boolean }) {\n    this.handleInitialURLSync(options?.reconnect);\n\n    if (!options?.reconnect) {\n      this.updateControl(\n        this.defs,\n        { emitEvent: true },\n        (def) => def.syncInitialQueryParamValue ?? !!this.createOptions?.syncInitialQueryParamValue\n      );\n    }\n\n    const controls = this.defs.map((def) => {\n      return this.group.get(def.path)!.valueChanges.pipe(\n        map((value) => ({\n          def,\n          value,\n        }))\n      );\n    });\n\n    // Could be a several changes in the same tick,\n    // for example when we use reset() or patchValue.\n    // We need to aggregate the changes and apply them once\n    // because the router navigates in micro task\n    let buffer: ResolveParamsOption[] = [];\n\n    merge(...controls)\n      .pipe(\n        map((result) => buffer.push(result)),\n        auditTime(0),\n        takeUntil(this.destroy$)\n      )\n      .subscribe(() => {\n        this.updateQueryParams(resolveParams(buffer));\n        buffer = [];\n      });\n  }\n\n  destroy() {\n    this.destroy$.next();\n  }\n\n  getDef(queryKey: keyof T) {\n    return this.defs.find((def) => def.queryKey === queryKey);\n  }\n\n  parse(queryParams: Partial<T>) {\n    const result: Record<string, unknown> = {};\n\n    for (const [key, value] of Object.entries(queryParams)) {\n      const def = this.getDef(key as keyof T);\n\n      if (def) {\n        result[key] = def.parse(value as string);\n      }\n    }\n\n    return result;\n  }\n\n  syncAllDefs(options: SyncDefsOptions = { emitEvent: true }) {\n    const allKeys = this.defs.map((def) => def.queryKey);\n    this.syncDefs(allKeys, options);\n  }\n\n  syncDefs(queryKeys: (keyof T & string) | (keyof T & string)[], options: SyncDefsOptions = { emitEvent: true }) {\n    const defs: QueryParamDef<T>[] = [];\n\n    coerceArray(queryKeys).forEach((key) => {\n      if (!this.syncedDefs[key]) {\n        this.syncedDefs[key] = true;\n        const def = this.getDef(key as keyof T);\n\n        if (def) {\n          defs.push(def);\n        }\n      }\n    });\n\n    if (defs.length) {\n      this.updateControl(defs, options);\n    }\n  }\n\n  paramExists(queryKey: keyof T): boolean {\n    return this.search.has(queryKey as string);\n  }\n\n  someParamExists(): boolean {\n    return this.defs.some((def) => {\n      return this.search.has(def.queryKey);\n    });\n  }\n\n  get search() {\n    return new URLSearchParams(this.options.windowRef.location.search);\n  }\n\n  private handleInitialURLSync(reconnect?: boolean) {\n    const initialSyncDefs: Parameters<typeof resolveParams>[0] = [];\n\n    for (const def of this.defs) {\n      const syncInitialControlValue = def.syncInitialControlValue ?? this.createOptions?.syncInitialControlValue;\n\n      if (reconnect || (syncInitialControlValue && !this.paramExists(def.queryKey))) {\n        initialSyncDefs.push({ def, value: get(this.group.value, def.path) });\n      }\n    }\n\n    if (initialSyncDefs.length) {\n      this.updateQueryParams({\n        // The router doesn't know the current query params,\n        // so we need to add it manually\n        ...Object.fromEntries(this.search),\n        ...resolveParams(initialSyncDefs),\n      });\n    }\n  }\n\n  private updateQueryParams(queryParams: Record<string, string | null>) {\n    this.router.navigate([], {\n      queryParams,\n      queryParamsHandling: 'merge',\n      replaceUrl: true,\n    });\n  }\n\n  private updateControl(\n    defs: QueryParamDef[],\n    options: { emitEvent: boolean },\n    updatePredicate = (_: QueryParamDef) => true\n  ) {\n    const queryParams = this.search;\n    let value: Partial<T> = {};\n\n    for (const def of defs) {\n      if (updatePredicate(def)) {\n        const { queryKey } = def;\n        const queryParamValue = queryParams.get(queryKey);\n\n        if (!queryParamValue) continue;\n\n        set(value, def.path.split('.'), def.parse(queryParamValue));\n      }\n    }\n\n    if (Object.keys(value).length) {\n      this.group.patchValue(value, options);\n    }\n  }\n}\n","import { Inject, Injectable, inject, Injector, DestroyRef, assertInInjectionContext } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { BindQueryParamsManager } from './bind-query-params-manager';\nimport { BIND_QUERY_PARAMS_OPTIONS } from './options';\nimport { BindQueryParamsOptions, CreateOptions, QueryDefOptions } from './types';\n\n@Injectable({ providedIn: 'root' })\nexport class BindQueryParamsFactory {\n  private router = inject(Router);\n  private options = inject(BIND_QUERY_PARAMS_OPTIONS);\n\n  create<T>(defs: QueryDefOptions<T>[] | QueryDefOptions<T>, options?: CreateOptions): BindQueryParamsManager<T> {\n    !options?.injector && assertInInjectionContext(this.create);\n    const injector = options?.injector ?? inject(Injector);\n    const manager = new BindQueryParamsManager<T>(this.router, defs, this.options, options);\n\n    injector.get(DestroyRef).onDestroy(() => manager.destroy());\n\n    return manager;\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}