{"version":3,"file":"ng2-rest-browser.mjs","sources":["../../../tmp-libs-for-dist/ng2-rest/projects/ng2-rest/src/lib/new-mapping.ts","../../../tmp-libs-for-dist/ng2-rest/projects/ng2-rest/src/lib/ng2-rest.ts","../../../tmp-libs-for-dist/ng2-rest/projects/ng2-rest/src/lib/index.ts","../../../tmp-libs-for-dist/ng2-rest/projects/ng2-rest/src/ng2-rest-browser.ts"],"sourcesContent":["//#region imports\nimport { Circ, JSON10 } from 'json10/browser';\nimport { _, Helpers, UtilsOs } from 'tnp-core/browser';\nimport { CLASS } from 'typescript-class-helpers/browser';\n//#endregion\n\n//#region constatns\nconst mappingStore = new WeakMap<\n  Function,\n  { mapping?: () => EncodeSchema<any> }\n>();\n\nconst defaultValueStore = new WeakMap<\n  Function,\n  { defaults?: () => ModelValue<any> }\n>();\n//#endregion\n\n//#region models\ntype DeepPartial<T> = {\n  [K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K];\n};\n\nexport type ModelValue<T> =\n  | DeepPartial<T>\n  | Partial<Record<MappingFrom<T>, any>>;\n\ntype Constructor<T = any> = new (...args: any[]) => T;\n\ntype DecrementDepth = [never, 0, 1, 2, 3, 4, 5];\n\ntype MappingFrom<T, Depth extends number = 5> = [Depth] extends [never]\n  ? never\n  : {\n      [K in keyof T & string]: T[K] extends Primitive\n        ? K\n        : T[K] extends Array<infer U>\n          ? K | `${K}.${MappingFrom<U, DecrementDepth[Depth]>}`\n          : K | `${K}.${MappingFrom<T[K], DecrementDepth[Depth]>}`;\n    }[keyof T & string];\n\n/**\n * Mapping schema that can be set from decorator\n *\n * @DefaultMapping(() => ({\n *   '': User,\n *   'book': Book,\n *   'book.author': Author,\n * }))\n * class User { }\n *\n */\nexport type EncodeSchema<T = any> = {\n  ''?: Constructor<T>;\n} & {\n  [K in MappingFrom<T>]?: Constructor<any> | [Constructor<any>];\n};\n\n/**\n * Mapping schema returned or sended inside http headers\n */\nexport type EncodeSchemaString<T = any> = {\n  ''?: string;\n  '[]'?: string[]; // returned only for array, cant be set on class mapping\n} & {\n  [K in MappingFrom<T>]?: string | string[];\n};\n\ntype Primitive =\n  | string\n  | number\n  | boolean\n  | bigint\n  | symbol\n  | null\n  | undefined\n  | Date\n  | Function;\n//#endregion\n\n//#region decorators\n\nexport function DefaultMapping<T>(mapping?: () => EncodeSchema<T>) {\n  return function (target: Constructor<T>) {\n    mappingStore.set(target, { mapping });\n  };\n}\n\nexport function DefaultModel<T>(defaults?: () => ModelValue<T>) {\n  return function (target: Constructor<T>) {\n    defaultValueStore.set(target, { defaults });\n  };\n}\n\n//#endregion\n\n//#region helpers\n\nconst isPlainObject = (v: any) =>\n  !!v && typeof v === 'object' && !Array.isArray(v) && !(v instanceof Date);\n\nconst deepClone = <T>(v: T): T => {\n  if (Array.isArray(v)) return v.map(deepClone) as any;\n  if (isPlainObject(v)) {\n    const out: any = {};\n    for (const k of Object.keys(v)) out[k] = deepClone((v as any)[k]);\n    return out;\n  }\n  return v;\n};\n\n/**\n * Merge defaults into target, but only when target value is undefined.\n * (Does not overwrite defined values.)\n */\nconst deepMergeIfUndefined = (target: any, defaults: any) => {\n  if (!isPlainObject(defaults)) return;\n\n  for (const k of Object.keys(defaults)) {\n    const dv = defaults[k];\n    const tv = target[k];\n\n    if (tv === undefined) {\n      target[k] = deepClone(dv);\n      continue;\n    }\n\n    if (isPlainObject(tv) && isPlainObject(dv)) {\n      deepMergeIfUndefined(tv, dv);\n    }\n  }\n};\n\nconst applyDefaultsToInstance = (instance: any, defaults?: any) => {\n  if (!defaults) return;\n\n  // Path-based defaults (keys containing '.')\n  for (const k of Object.keys(defaults)) {\n    if (k.includes('.')) {\n      const value = defaults[k];\n      const current = _.get(instance, k);\n      if (current === undefined) {\n        _.set(instance, k, deepClone(value));\n      }\n    }\n  }\n\n  // Object-based defaults (no dots) -> deep merge (only if undefined)\n  const objDefaults: any = {};\n  for (const k of Object.keys(defaults)) {\n    if (!k.includes('.')) objDefaults[k] = defaults[k];\n  }\n  deepMergeIfUndefined(instance, objDefaults);\n};\n\nconst getClassNameTokenFromItem = (item: any): string => {\n  if (item == null) return '';\n  if (item == undefined) return '';\n\n  // If already constructor\n  if (typeof item === 'function') {\n    return CLASS.getName(item) || '';\n  }\n\n  if (typeof item !== 'object') {\n    return '';\n  }\n\n  // If instance\n  const classFn = item.constructor;\n  if (typeof classFn === 'function') {\n    return CLASS.getName(classFn) || '';\n  }\n\n  return '';\n};\n\n/**\n * Encode consecutive equal tokens using # run-length.\n *\n * Examples:\n * - ['User','User','Author','User'] -> ['User#2','Author','User']\n * - ['User','User','User','User'] -> ['User#4']\n * - ['User', '', '', '', 'Author', ''] -> ['User', '#3', 'Author', '']\n */\nconst rleEncodeTokens = (tokens: string[]): string[] => {\n  const out: string[] = [];\n  let i = 0;\n\n  while (i < tokens.length) {\n    const token = tokens[i];\n    let j = i + 1;\n    while (j < tokens.length && tokens[j] === token) j++;\n    const count = j - i;\n\n    if (token === '') {\n      // null/undefined run\n      out.push(count >= 2 ? `#${count}` : '');\n    } else {\n      out.push(count >= 2 ? `${token}#${count}` : token);\n    }\n\n    i = j;\n  }\n\n  return out;\n};\n\ntype ParsedToken = { name: string; count: number };\n\nconst parseRleToken = (token: string): ParsedToken => {\n  // '' => no mapping for 1\n  if (token === '') return { name: '', count: 1 };\n\n  // '#N' => no mapping for next N\n  if (token.startsWith('#')) {\n    const count = Number(token.slice(1));\n    return { name: '', count: Number.isFinite(count) && count > 0 ? count : 1 };\n  }\n\n  // 'Name#N' => Name for next N\n  const idx = token.lastIndexOf('#');\n  if (idx > 0) {\n    const name = token.slice(0, idx);\n    const count = Number(token.slice(idx + 1));\n    if (name && Number.isFinite(count) && count > 0) {\n      return { name, count };\n    }\n  }\n\n  // 'Name' => Name for 1\n  return { name: token, count: 1 };\n};\n\nconst expandRleTokens = (tokens: string[]): string[] => {\n  const out: string[] = [];\n  for (const t of tokens) {\n    const { name, count } = parseRleToken(t);\n    for (let i = 0; i < count; i++) out.push(name);\n  }\n  return out;\n};\n\n//#endregion\n\n//#region get default value for class instance from decorator data\nexport function getDefaultModel<T>(\n  instanceOrClass: T | Constructor<T>,\n): ModelValue<T> | undefined {\n  const classFn =\n    typeof instanceOrClass === 'function'\n      ? instanceOrClass\n      : (instanceOrClass as any)?.constructor;\n\n  if (classFn === undefined) {\n    return undefined;\n  }\n\n  const getter = defaultValueStore.get(classFn)?.defaults;\n  return getter ? (getter() as any) : undefined;\n}\n//#endregion\n\n//#region get mapping from decorator data (may container Entites classes)\nexport function getDefaultMappingSingleObjOrClass<T>(\n  instanceOrClass: T | Constructor<T>,\n): EncodeSchema<T> | undefined {\n  const classFn =\n    typeof instanceOrClass === 'function'\n      ? instanceOrClass\n      : (instanceOrClass as any)?.constructor;\n\n  if (classFn === undefined) {\n    return undefined;\n  }\n\n  const getter = mappingStore.get(classFn)?.mapping;\n  return getter ? (getter() as any) : undefined;\n}\n//#endregion\n\n//#region decode mapping (replace entites with names)\n\n/**\n * This will be send in request header to later restore class mapping\n */\nexport function getMappingHeaderString<T = any>(\n  instanceOrClass: T | Constructor<T> | (T | Constructor<T>)[],\n): string {\n  return JSON.stringify(decodeMappingForHeaderJson(instanceOrClass));\n}\n\n/**\n *\n * @param instanceOrClass class instance or class object\n * OR array of class instancess or class objects\n * @returns Mapping object ready to be JSON.stringify\n */\nexport function decodeMappingForHeaderJson<T>(\n  instanceOrClass: T | Constructor<T> | (T | Constructor<T>)[],\n  options?: {\n    useFirstArrayItemClassNameForAllElements?: boolean;\n  },\n): EncodeSchemaString<T> {\n  options = options || {};\n  // Array encoding (special protocol)\n  if (\n    Array.isArray(instanceOrClass) &&\n    !options.useFirstArrayItemClassNameForAllElements\n  ) {\n    const tokens = instanceOrClass.map(getClassNameTokenFromItem);\n    return { '[]': rleEncodeTokens(tokens) } as any;\n  }\n\n  if (\n    Array.isArray(instanceOrClass) &&\n    options.useFirstArrayItemClassNameForAllElements\n  ) {\n    instanceOrClass = _.first(instanceOrClass);\n  }\n\n  // Single object / class encoding\n  const mapping = getDefaultMappingSingleObjOrClass(instanceOrClass);\n  if (!mapping || !mapping['']) {\n    const className =\n      CLASS.getClassNameFromObjInstanceOrClassFn(instanceOrClass as any) || '';\n\n    return {\n      '': className,\n    };\n  }\n\n  // Your EncodeSchema is flat (dot-path keys), so we can encode it flat too.\n  const mappingObj: any = {};\n\n  for (const key of Object.keys(mapping)) {\n    const v: any = (mapping as any)[key];\n\n    if (key === '') {\n      mappingObj[''] = CLASS.getName(v);\n      continue;\n    }\n\n    if (Array.isArray(v) && v.length === 1) {\n      const item = v[0];\n      mappingObj[key] =\n        typeof item === 'function' ? CLASS.getName(item) : String(item);\n      continue;\n    }\n\n    if (typeof v === 'function') {\n      mappingObj[key] = CLASS.getName(v);\n      continue;\n    }\n  }\n\n  return mappingObj;\n}\n//#endregion\n\n//#region encode mapping from mapping schema and circular metadata\nexport const encodeMapping = <T>(\n  input: any,\n  schema: EncodeSchema | EncodeSchemaString,\n  circular: Circ[] = [],\n): T => {\n  const mapped = encodeMappingFn<{}>(input, schema as any, circular);\n  JSON10.applyCircularMapping(mapped, circular);\n  return mapped as any;\n};\n\nconst encodeMappingFn = <T>(\n  input: any,\n  schema: EncodeSchema<T> | EncodeSchemaString<T>,\n  circular: Circ[],\n  parentPath: string = '',\n): T => {\n  /**\n   * HANDLE ARRAYS IN SCHEMA (header-only protocol)\n   *\n   * {\n   *   '[]': ['User#1000'], // input should be in this case array...\n   * }                      // 1000 objects ready to be changed to User class instances\n   */\n  if (Array.isArray(input) && (schema as any)['[]']) {\n    const rle = (schema as any)['[]'] as string[];\n    const expanded = expandRleTokens(rle);\n\n    const out: any[] = [];\n    const max = input.length;\n\n    for (let i = 0; i < max; i++) {\n      const className = expanded[i] ?? '';\n      const raw = input[i];\n\n      // keep null/undefined and \"no mapping\" items as-is\n      if (!className || raw == null) {\n        out.push(raw);\n        continue;\n      }\n\n      const ClassFn = CLASS.getBy(className);\n\n      if (!ClassFn) {\n        out.push(raw);\n        continue;\n      }\n\n      out.push(\n        encodeMappingFn(\n          raw,\n          { ...(schema as any), '': ClassFn },\n          circular,\n          parentPath,\n        ),\n      );\n    }\n\n    return out as any;\n  }\n\n  // Normal array (no header array schema) -> map items using same schema\n  if (Array.isArray(input)) {\n    return input.map(item =>\n      encodeMappingFn(item, schema, circular, parentPath),\n    ) as any;\n  }\n\n  if (!input || typeof input !== 'object') {\n    return input;\n  }\n\n  const classNameOrFunctionInSchema: string | Constructor = (schema as any)[''];\n\n  let RootClass = (\n    _.isString(classNameOrFunctionInSchema) &&\n    classNameOrFunctionInSchema !== ''\n      ? CLASS.getBy(classNameOrFunctionInSchema)\n      : classNameOrFunctionInSchema\n  ) as Constructor | undefined;\n\n  const classNameOfRootClass =\n    CLASS.getClassNameFromObjInstanceOrClassFn(RootClass);\n  if (classNameOfRootClass === '' || !classNameOfRootClass) {\n    RootClass = undefined;\n  }\n\n  const instance = RootClass ? new RootClass() : {};\n\n  // Apply defaults from decorator (if RootClass is known)\n  if (RootClass) {\n    const defaults = getDefaultModel(RootClass);\n    applyDefaultsToInstance(instance, defaults);\n  }\n\n  for (const key of Object.keys(input)) {\n    const value = (input as any)[key];\n\n    const fullPath = parentPath ? `${parentPath}.${key}` : key;\n    const rule: any = (schema as any)[fullPath];\n\n    if (!rule) {\n      // still recurse so nested objects/arrays also get mapped when they have deep rules\n      (instance as any)[key] = encodeMappingFn(\n        value,\n        schema,\n        circular,\n        fullPath,\n      );\n      continue;\n    }\n\n    // Array rule (value is expected to be array)\n    if (Array.isArray(rule)) {\n      const ItemClass =\n        typeof rule[0] === 'string' ? CLASS.getBy(rule[0]) : rule[0];\n\n      (instance as any)[key] = Array.isArray(value)\n        ? value.map(v =>\n            encodeMappingFn(\n              v,\n              { ...(schema as any), '': ItemClass },\n              circular,\n              fullPath,\n            ),\n          )\n        : [];\n\n      continue;\n    }\n\n    // Object rule\n    const NestedClass = typeof rule === 'string' ? CLASS.getBy(rule) : rule;\n\n    (instance as any)[key] = encodeMappingFn(\n      value,\n      { ...(schema as any), '': NestedClass },\n      circular,\n      fullPath,\n    );\n  }\n\n  return instance as any;\n};\n\n//#endregion","//#region imports\n/* */                                  \n\nimport { AxiosHeaders, AxiosRequestConfig, AxiosResponse } from 'axios';\nimport axios from 'axios';\nimport type express from 'express';\n/* */                                              \nimport { Circ, JSON10 } from 'json10/browser';\nimport { Level, Log } from 'ng2-logger/browser';\nimport {\n  firstValueFrom,\n  from,\n  Observable,\n  shareReplay,\n  Subject,\n  switchMap,\n  throwError,\n} from 'rxjs';\nimport { CoreModels, Helpers, _ } from 'tnp-core/browser';\nimport { CLASS } from 'typescript-class-helpers/browser';\n\nimport { encodeMapping, EncodeSchema, EncodeSchemaString } from './new-mapping';\n\n// import { Mapping } from './mapping';\n//#endregion\n\nconst log = Log.create('ng2-rest', Level.WARN, Level.ERROR);\n\nconst listenErrorsSrc = new Subject<BackendError>();\n\n//#region cookie\n\n// TODO do it for nodejs\n\n// import { CookieJar } from 'tough-cookie';\n\n// const jar = new CookieJar();\n\n// const rest = Resource.create('http://my-website.pl', 'api/v3/user/:userId', {\n//   cookieJar: jar,\n// });\n\n// await rest.model({ userId: 1 }).get(); // cookies persist across requests\n\n// import type { CookieJar } from 'tough-cookie';\n\n// interface ResourceOptions {\n//   // ...\n//   cookieJar?: CookieJar;\n// }\n\n// export class CookieJarInterceptor implements TaonAxiosClientInterceptor<any> {\n//   constructor(private readonly jar: CookieJar) {}\n\n//   intercept({ req, next }: TaonClientMiddlewareInterceptOptions<any>) {\n//     return new Observable<AxiosResponse<any>>(subscriber => {\n//       const url = req.url || '';\n\n//       // 1) attach Cookie header from jar\n//       this.jar.getCookieString(url, (err, cookieString) => {\n//         if (err) {\n//           subscriber.error(err);\n//           return;\n//         }\n\n//         if (cookieString) {\n//           req.headers = req.headers || {};\n//           // axios headers can be plain object or AxiosHeaders\n//           if (req.headers instanceof AxiosHeaders) {\n//             req.headers.set('Cookie', cookieString);\n//           } else {\n//             (req.headers as any)['Cookie'] = cookieString;\n//           }\n//         }\n\n//         // 2) proceed\n//         const sub = next.handle(req).subscribe({\n//           next: res => {\n//             // 3) store Set-Cookie back into jar\n//             const setCookie = (res.headers as any)?.['set-cookie'];\n//             const cookies: string[] =\n//               typeof setCookie === 'string'\n//                 ? [setCookie]\n//                 : Array.isArray(setCookie)\n//                   ? setCookie\n//                   : [];\n\n//             if (!cookies.length) {\n//               subscriber.next(res);\n//               return;\n//             }\n\n//             let pending = cookies.length;\n//             for (const c of cookies) {\n//               this.jar.setCookie(c, url, () => {\n//                 pending--;\n//                 if (pending === 0) {\n//                   subscriber.next(res);\n//                 }\n//               });\n//             }\n//           },\n//           error: e => subscriber.error(e),\n//           complete: () => subscriber.complete(),\n//         });\n\n//         return () => sub.unsubscribe();\n//       });\n//     });\n//   }\n// }\n\nexport class Cookie {\n  public static get Instance(): Cookie {\n    if (!Cookie.__instance) {\n      Cookie.__instance = new Cookie();\n    }\n    return Cookie.__instance as any;\n  }\n\n  private static __instance;\n\n  private constructor() {}\n\n  read(name: string): string {\n    if (typeof document === 'undefined') return null;\n    var result = new RegExp(\n      '(?:^|; )' + encodeURIComponent(name) + '=([^;]*)',\n    ).exec(document.cookie);\n    return result ? result[1] : null;\n  }\n\n  write(name: string, value: string, days?: number): void {\n    if (typeof document === 'undefined') return null;\n    if (!days) {\n      days = 365 * 20;\n    }\n\n    var date = new Date();\n    date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n\n    var expires = '; expires=' + date.toUTCString();\n\n    document.cookie = name + '=' + value + expires + '; path=/';\n  }\n\n  remove(name: string): void {\n    if (typeof document === 'undefined') return null;\n    this.write(name, '', -1);\n  }\n}\n\n//#endregion\n\n//#region get params url\n\n/**\n * Create query params string for url\n *\n * @export\n * @param {UrlParams[]} params\n * @returns {string}\n */\nexport function getParamsUrl(\n  params: UrlParams[],\n  doNotSerialize: boolean = false,\n): string {\n  params = _.cloneDeep(params); // TODO refactor it\n  let urlparts: string[] = [];\n  if (!params) return '';\n  if (!(params instanceof Array)) return '';\n  if (params.length === 0) return '';\n\n  params.forEach(urlparam => {\n    if (JSON.stringify(urlparam) !== '{}') {\n      let parameters: string[] = [];\n      let paramObject = <Object>urlparam;\n\n      for (let p in paramObject) {\n        if (paramObject[p] === void 0) delete paramObject[p];\n        if (\n          paramObject.hasOwnProperty(p) &&\n          typeof p === 'string' &&\n          p !== 'regex' &&\n          !(paramObject[p] instanceof RegExp)\n        ) {\n          if (p.length > 0 && p[0] === '/') {\n            let newName = p.slice(1, p.length - 1);\n            urlparam[newName] = urlparam[p];\n            urlparam[p] = void 0;\n            p = newName;\n          }\n          if (p.length > 0 && p[p.length - 1] === '/') {\n            let newName = p.slice(0, p.length - 2);\n            urlparam[newName] = urlparam[p];\n            urlparam[p] = void 0;\n            p = newName;\n          }\n          let v: any = urlparam[p];\n          if (v instanceof Object) {\n            urlparam[p] = JSON.stringify(urlparam[p]);\n          }\n          urlparam[p] = doNotSerialize\n            ? <string>urlparam[p]\n            : encodeURIComponent(<string>urlparam[p]);\n          if (urlparam.regex !== void 0 && urlparam.regex instanceof RegExp) {\n            if (!urlparam.regex.test(<string>urlparam[p])) {\n              console.warn(\n                `Data: ${urlparam[p]} incostistent with regex ${urlparam.regex.source}`,\n              );\n            }\n          }\n          parameters.push(`${p}=${urlparam[p]}`);\n        }\n      }\n\n      urlparts.push(parameters.join('&'));\n    }\n  });\n  let join = urlparts.join().trim();\n  if (join.trim() === '') return '';\n  return `?${urlparts.join('&')}`;\n}\n\n//#endregion\n\n//#region interpolate utils\nexport const regexisPath = /[^\\..]+(\\.[^\\..]+)+/g;\n\n/**\n * Models like books/:id\n */\nconst cutUrlModel = (params: Object, models: string[], output: string[]) => {\n  if (models.length === 0) return output.join('\\/');\n  let m = models.pop();\n\n  let param = m.match(/:[a-zA-Z0-9\\.]+/)[0].replace(':', '');\n  const paramIsPath = regexisPath.test(param);\n  // log.i('cut param', param)\n  let model = m.match(/[a-zA-Z0-9]+\\//)[0].replace('\\/', '');\n  if (\n    params === void 0 ||\n    (paramIsPath\n      ? _.get(params, param) === void 0\n      : params[param] === void 0) ||\n    param === 'undefined'\n  ) {\n    output.length = 0;\n    output.unshift(model);\n    return cutUrlModel(params, models, output);\n  } else {\n    if (paramIsPath) {\n      // log.i('param is path', param)\n      let mrep = m.replace(\n        new RegExp(`:${param}`, 'g'),\n        `${_.get(params, param)}`,\n      );\n      output.unshift(mrep);\n      return cutUrlModel(params, models, output);\n    } else {\n      // log.i('param is normal', param)\n      let mrep = m.replace(new RegExp(`:${param}`, 'g'), `${params[param]}`);\n      output.unshift(mrep);\n      return cutUrlModel(params, models, output);\n    }\n  }\n};\n\n/**\n * let pattern = '/books/:bookid';\n * let url = `/books/34`;\n */\nexport function interpolateParamsToUrl(params: Object, url: string): string {\n  const regexInt = /\\[\\[([^\\..]+\\.[^\\..]+)+\\]\\]/g;\n\n  url = url\n    .split('/')\n    .map(p => {\n      // log.d('url parts', p)\n      let isParam = p.startsWith(':');\n      if (isParam) {\n        let part = p.slice(1);\n        // log.d('url param part', p)\n        if (regexInt.test(part)) {\n          // let level = (url.split('.').length - 1)\n          part = part.replace('[[', '');\n          part = part.replace(']]', '');\n        }\n        return `:${part}`;\n      }\n      return p;\n    })\n    .join('/');\n\n  // log.i('URL TO EXPOSE', url)\n\n  // log.i('params', params)\n\n  let slash = {\n    start: url.charAt(0) === '\\/',\n    end: url.charAt(url.length - 1) === '\\/',\n  };\n\n  let morePramsOnEnd = url.match(/(\\/:[a-zA-Z0-9\\.]+){2,10}/g);\n  if (\n    morePramsOnEnd &&\n    Array.isArray(morePramsOnEnd) &&\n    morePramsOnEnd.length === 1\n  ) {\n    // log.i('morePramsOnEnd', morePramsOnEnd)\n    let m = morePramsOnEnd[0];\n    let match = m.match(/\\/:[a-zA-Z0-9\\.]+/g);\n    // log.i('match', match)\n    match.forEach(e => {\n      let c = e.replace('\\/:', '');\n      // log.i('c', c)\n      if (regexisPath.test(c)) {\n        url = url.replace(e, `/${_.get(params, c)}`);\n      } else {\n        url = url.replace(e, `/${params[c]}`);\n      }\n\n      // log.i('prog url', url)\n    });\n    return url;\n  }\n\n  let nestedParams = url.match(/[a-zA-Z0-9]+\\/:[a-zA-Z0-9\\.]+/g);\n  if (\n    !nestedParams ||\n    (Array.isArray(nestedParams) && nestedParams.length === 0)\n  )\n    return url;\n\n  // check alone params\n  if (!slash.end) url = `${url}/`;\n  let addUndefinedForAlone =\n    !/:[a-zA-Z0-9\\.]+\\/$/g.test(url) && /[a-zA-Z0-9]+\\/$/g.test(url);\n\n  let replace =\n    (nestedParams.length > 1 ? nestedParams.join('\\/') : nestedParams[0]) +\n    (addUndefinedForAlone ? '\\/' + url.match(/[a-zA-Z0-9]+\\/$/g)[0] : '\\/');\n  let beginHref = url.replace(replace, '');\n\n  if (addUndefinedForAlone) {\n    url = url.replace(/\\/$/g, '/:undefined');\n    nestedParams = url.match(/[a-zA-Z0-9]+\\/:[a-zA-Z0-9\\.]+/g);\n    url = cutUrlModel(params, nestedParams, []);\n  } else {\n    url = cutUrlModel(params, nestedParams, []);\n  }\n  url = beginHref + url;\n\n  if (url.charAt(url.length - 1) !== '/' && slash.end) url = `${url}/`;\n  if (url.charAt(0) !== '\\/' && slash.start) url = `/${url}`;\n\n  return url;\n}\n//#endregion\n\n//#region axios intercepstors\nexport interface AxiosTaonHttpHandler<T = any> {\n  handle(req: AxiosRequestConfig): Observable<AxiosResponse<T>>;\n}\n\nexport interface TaonClientMiddlewareInterceptOptions<T = any> {\n  req: AxiosRequestConfig; // <- request config only (no AxiosResponse here)\n  next: AxiosTaonHttpHandler<T>;\n}\n\nexport interface TaonServerMiddlewareInterceptOptions<T = any> {\n  req: express.Request;\n  res: express.Response;\n  next: express.NextFunction;\n}\n\nexport interface TaonAxiosClientInterceptor<T = any> {\n  intercept(\n    client: TaonClientMiddlewareInterceptOptions<T>,\n  ): Observable<AxiosResponse<T>>;\n}\n\n// Optional helper for passing around context (browser/client)\n\n// === Backend handler (last in chain) ===\nexport class AxiosBackendHandler<T = any> implements AxiosTaonHttpHandler<T> {\n  handle(req: AxiosRequestConfig): Observable<AxiosResponse<T>> {\n    // axios returns a Promise; wrap as Observable\n    return from(axios.request<T>(req));\n  }\n}\n\n// === Chain builder (request: forward order, response: reverse order) ===\nexport const buildInterceptorChain = <T = any>(\n  globalInterceptors: Array<TaonAxiosClientInterceptor<T>>,\n  backend: AxiosTaonHttpHandler<T>,\n): AxiosTaonHttpHandler<T> => {\n  return globalInterceptors.reduceRight<AxiosTaonHttpHandler<T>>(\n    (next, interceptor) => ({\n      handle: req => interceptor.intercept({ req, next }),\n    }),\n    backend,\n  );\n};\n\n//#endregion\n\n//#region response type axios\nexport type ResponseTypeAxios =\n  | 'blob'\n  | 'text'\n  | 'json'\n/* */\n/* */\n/* */\n/* */\n/* */\n  \n//#endregion\n\n//#region rest headers\nexport type RestHeadersOptions =\n  | RestHeaders\n  | { [name: string]: string | string[] };\n\nexport class RestHeaders {\n  /** @internal header names are lower case */\n  protected _headers: Map<string, string[]> = new Map();\n\n  /** @internal map lower case names to actual names */\n  protected _normalizedNames: Map<string, string> = new Map();\n\n  public static from(headers?: RestHeadersOptions): RestHeaders {\n    return new RestHeaders(headers || {});\n  }\n\n  apply(headers?: RestHeadersOptions): RestHeaders {\n    if (headers instanceof RestHeaders) {\n      headers.forEach((values: string[], name: string) => {\n        values.forEach(value => this.set(name, value));\n      });\n    } else {\n      Object.keys(headers).forEach((name: string) => {\n        const values: string[] = (\n          Array.isArray(headers[name]) ? headers[name] : [headers[name]]\n        ) as any;\n        this.delete(name);\n        values.forEach(value => this.set(name, value));\n      });\n    }\n    return this;\n  }\n\n  private constructor(headers?: RestHeadersOptions) {\n    this.apply(headers);\n  }\n\n  /**\n   * Returns a new RestHeaders instance from the given DOMString of Response RestHeaders\n   */\n  static fromResponseHeaderString(headersString: string): RestHeaders {\n    const headers = new RestHeaders();\n    // console.log({\n    //   headersString\n    // })\n    headersString.split('\\n').forEach(line => {\n      const index = line.indexOf(':');\n      if (index > 0) {\n        const name = line.slice(0, index);\n        const value = line.slice(index + 1).trim();\n        headers.set(name, value);\n      }\n    });\n\n    return headers;\n  }\n\n  /**\n   * Appends a header to existing list of header values for a given header name.\n   */\n  append(name: string, value: string): void {\n    const values = this.getAll(name);\n\n    if (values === null) {\n      this.set(name, value);\n    } else {\n      values.push(value);\n    }\n  }\n\n  /**\n   * Deletes all header values for the given name.\n   */\n  delete(name: string): void {\n    const lcName = name.toLowerCase();\n    this._normalizedNames.delete(lcName);\n    this._headers.delete(lcName);\n  }\n\n  forEach(\n    fn: (\n      values: string[],\n      name: string,\n      headers: Map<string, string[]>,\n    ) => void,\n  ): void {\n    this._headers.forEach((values, lcName) =>\n      fn(values, this._normalizedNames.get(lcName), this._headers),\n    );\n  }\n\n  /**\n   * Returns first header that matches given name.\n   */\n  get(name: string): string {\n    const values = this.getAll(name);\n\n    if (values === null) {\n      return null;\n    }\n\n    return values.length > 0 ? values[0] : null;\n  }\n\n  /**\n   * Checks for existence of header by given name.\n   */\n  has(name: string): boolean {\n    return this._headers.has(name.toLowerCase());\n  }\n\n  /**\n   * Returns the names of the headers\n   */\n  keys(): string[] {\n    return Array.from(this._normalizedNames.values());\n  }\n\n  /**\n   * Sets or overrides header value for given name.\n   */\n  set(name: string, value: string | string[]): void {\n    if (Array.isArray(value)) {\n      if (value.length) {\n        this._headers.set(name.toLowerCase(), [value.join(',')]);\n      }\n    } else {\n      this._headers.set(name.toLowerCase(), [value]);\n    }\n    this.mayBeSetNormalizedName(name);\n  }\n\n  /**\n   * Returns values of all headers.\n   */\n  values(): string[][] {\n    return Array.from(this._headers.values());\n  }\n\n  /**\n   * Returns string of all headers.\n   */\n  // TODO(vicb): returns {[name: string]: string[]}\n  toJSON(): { [name: string]: any } {\n    const serialized: { [name: string]: string[] } = {};\n    if (!this._headers) {\n      // debugger\n    }\n    // console.log('serializing headers',this._headers)\n    this._headers.forEach((values: string[], name: string) => {\n      const split: string[] = [];\n      values.forEach(v => split.push(...v.split(',')));\n      // console.log({\n      //   values\n      // })\n      // values.forEach(v => split.push(...(v ? v : '').split(',')));\n      serialized[this._normalizedNames.get(name)] = split;\n    });\n\n    return serialized;\n  }\n\n  /**\n   * Returns list of header values for a given name.\n   */\n  getAll(name: string): string[] {\n    return this.has(name) ? this._headers.get(name.toLowerCase()) : null;\n  }\n\n  private mayBeSetNormalizedName(name: string): void {\n    const lcName = name.toLowerCase();\n\n    if (!this._normalizedNames.has(lcName)) {\n      this._normalizedNames.set(lcName, name);\n    }\n  }\n}\n//#endregion\n\n//#region handle result source request options\n\nclass RestCommonHttpResponseWrapper {\n  declare success?: boolean;\n}\n\nexport class RestResponseWrapper extends RestCommonHttpResponseWrapper {\n  declare data?: any;\n}\n\nexport class RestErrorResponseWrapper extends RestCommonHttpResponseWrapper {\n  declare message: string;\n\n  /**\n   * stack trace / more details about error\n   */\n  declare details?: string;\n\n  /**\n   * http status code\n   */\n  declare status?: number;\n\n  /**\n   * custom error code from backend\n   */\n  declare code?: string;\n}\n//#endregion\n\n//#region base body\nexport abstract class BaseBody {\n  protected toJSON(\n    data,\n    opt: {\n      isJSONArray?: boolean;\n      parsingError?: boolean;\n    },\n  ): object | undefined {\n    opt = opt || { isJSONArray: false };\n    let r = opt.isJSONArray ? [] : {};\n    if (typeof data === 'string') {\n      try {\n        let parsed = JSON.parse(data);\n        if (typeof parsed === 'string' && parsed.trim().startsWith('{')) {\n          parsed = JSON.parse(parsed);\n        }\n        if (opt.parsingError && parsed[CoreModels.TaonHttpErrorCustomProp]) {\n          return _.merge(new RestErrorResponseWrapper(), parsed);\n        }\n        return parsed;\n      } catch (e) {}\n    } else if (typeof data === 'object') {\n      return data;\n    }\n    return r as any;\n  }\n}\n\nexport class HttpBody<T> extends BaseBody {\n  constructor(\n    private readonly url: string,\n    private readonly method: string,\n    private readonly headers: RestHeaders,\n    private readonly responseText: string | Blob,\n    private readonly options: ResourceOptions,\n    private readonly isArray: boolean,\n  ) {\n    super();\n  }\n\n  private get entity(): EncodeSchema | EncodeSchemaString {\n    if (typeof this.options.responseMapping?.entity === 'string') {\n      // const headerWithMapping = headers.get(entity);\n      // console.log('header key ',this.options.responseMapping?.entity);\n      // console.log(this.headers)\n      let entityJSON = this.headers?.getAll(\n        this.options.responseMapping?.entity,\n      );\n      if (!!entityJSON) {\n        return JSON.parse(entityJSON.join());\n      }\n    }\n\n    const entityAsResolvableFn = this.options?.responseMapping?.entity as () =>\n      | EncodeSchema\n      | EncodeSchemaString;\n\n    if (typeof entityAsResolvableFn === 'function') {\n      const mappingFromFunction = entityAsResolvableFn();\n      // console.log({ mappingFromFunction });\n      return mappingFromFunction as any;\n    }\n\n    return this.options.responseMapping?.entity as any;\n  }\n\n  private get circular(): Circ[] {\n    if (typeof this.options.responseMapping?.circular === 'string') {\n      // const headerWithMapping = headers.get(circular);\n      let circuralJSON = this.headers?.getAll(\n        this.options.responseMapping.circular,\n      );\n      if (!!circuralJSON) {\n        return JSON.parse(circuralJSON.join());\n      }\n    }\n    return (this.options.responseMapping?.circular || []) as any;\n  }\n\n  public get blob(): Blob {\n    return this.responseText as Blob;\n  }\n\n  public get booleanValue(): boolean | undefined {\n    if (!Helpers.isBlob(this.responseText)) {\n      return ['ok', 'true'].includes((this.responseText as string)?.trim());\n    }\n  }\n\n  public get numericValue(): number | undefined {\n    if (!Helpers.isBlob(this.responseText)) {\n      return Number((this.responseText as string)?.trim());\n    }\n  }\n\n  public get rawJson(): Partial<T> {\n    if (!Helpers.isBlob(this.responseText)) {\n      let res = this.toJSON(this.responseText, { isJSONArray: this.isArray });\n      if (this.circular && Array.isArray(this.circular)) {\n        res = JSON10.parse(JSON.stringify(res), this.circular);\n      }\n\n      return res;\n    }\n  }\n\n  public get json(): T {\n    const isBlob = Helpers.isBlob(this.responseText);\n    if (isBlob) {\n      return void 0;\n    }\n\n    if (this.entity && typeof this.entity === 'object') {\n      const json = this.toJSON(this.responseText, {\n        isJSONArray: this.isArray,\n      });\n      // console.log({ entityMapping: this.entity })\n\n      const resEntityMapping = encodeMapping(\n        json,\n        this.entity,\n        this.circular,\n      ) as any;\n\n      // console.log({ resEntityMapping })\n\n      this.displayWarningWhenNotUsingProperAPI(resEntityMapping);\n\n      return resEntityMapping;\n    }\n    let res = this.toJSON(this.responseText, { isJSONArray: this.isArray });\n    if (this.circular && Array.isArray(this.circular)) {\n      res = JSON10.parse(JSON.stringify(res), this.circular);\n    }\n    this.displayWarningWhenNotUsingProperAPI(res);\n    return res as any;\n  }\n\n  private displayWarningWhenNotUsingProperAPI(res: any): void {\n    if (!this.options.useArrayApiWarning) {\n      return;\n    }\n    if (this.isArray) {\n      Helpers.warn(`[${this.method}: ${this.url}]\nYour api response is object, but you are using .array api`);\n    } else {\n      if (Array.isArray(res)) {\n        Helpers.warn(\n          `[${this.method}: ${this.url}]\nYour api response is array, but you are using object api instread .arrray.`,\n        );\n      }\n    }\n  }\n\n  /**\n   * undefined when blob\n   */\n  public get text(): string | undefined {\n    if (!Helpers.isBlob(this.responseText)) {\n      return (this.responseText as string)\n        .replace(/^\\\"/, '')\n        .replace(/\\\"$/, '');\n    }\n  }\n}\n\nexport class ErrorBody<T = RestErrorResponseWrapper> extends BaseBody {\n  constructor(\n    private readonly url: string,\n    private readonly data: any,\n  ) {\n    super();\n  }\n\n  public get json(): T {\n    return this.toJSON(this.data, { parsingError: true }) as any;\n  }\n\n  public get text(): string {\n    return this.data;\n  }\n}\n\nexport abstract class BaseResponse<T> {\n  constructor(\n    public readonly responseText: string | Blob,\n    public readonly options: ResourceOptions,\n    public readonly statusCode: number,\n    public readonly headers: RestHeaders,\n    public readonly isArray: boolean,\n  ) {}\n}\n\n//#endregion\n\n//#region http response\nexport class HttpResponse<T> extends BaseResponse<T> {\n  public body: HttpBody<T>;\n\n  constructor(\n    public readonly url: string,\n    public readonly method: CoreModels.HttpMethod,\n    public readonly responseText: string | Blob,\n    public readonly headers: RestHeaders,\n    public readonly statusCode: number,\n    public readonly options: ResourceOptions,\n    public readonly isArray: boolean,\n  ) {\n    super(responseText, options, statusCode, headers, isArray);\n\n    this.body = new HttpBody(\n      url,\n      method,\n      headers,\n      responseText,\n      options,\n      isArray,\n    );\n  }\n}\n\nexport class HttpResponseError<ERROR_BODY = object> extends BaseResponse<any> {\n  public readonly body: ErrorBody<ERROR_BODY>;\n\n  constructor(\n    public readonly url: string,\n    public readonly method: CoreModels.HttpMethod,\n    public readonly responseText: string,\n    public readonly options: ResourceOptions,\n    public readonly headers: RestHeaders,\n    public readonly statusCode: number,\n    public readonly isArray: boolean,\n  ) {\n    super(responseText, options, statusCode, headers, isArray);\n    this.body = new ErrorBody<ERROR_BODY>(url, responseText);\n  }\n}\n\n//#endregion\n\n//#region resource strategy\nexport type ResourceStrategy = 'http' | 'ipc-electron' | 'js-mock';\n\ninterface ResourceOptions {\n  strategy?: ResourceStrategy;\n  headers?: RestHeaders;\n  useArrayApiWarning?: boolean;\n  defaultHeadersProfile?: keyof typeof DEFAULT_HEADERS;\n  responseMapping?: {\n    /**\n     * Use ()=> MyEntity to avoid js circural dependencies.\n     * String only when as header key value.\n     */\n    entity?:\n      | (EncodeSchema | EncodeSchemaString)\n      | { (): EncodeSchema | EncodeSchemaString }\n      | string;\n    /**\n     * Metadata for remapping circular objects.\n     * Generated from json10 packages.\n     * String only when as header key value.\n     */\n    circular?: Circ[] | string;\n  };\n}\n//#endregion\n\ntype BackendError = {\n  msg?: string;\n  stack?: string[];\n  data: any;\n};\n\n//#region default headers\nexport const HeaderKeyContentType = 'Content-Type';\nexport const HeaderKeyAccept = 'Accept';\n\nexport const DEFAULT_HEADERS = {\n  // JSON (most APIs)\n  APPLICATION_JSON: RestHeaders.from({\n    [HeaderKeyContentType]: 'application/json',\n    [HeaderKeyAccept]: 'application/json',\n  }),\n\n  // JSON:API (you already have)\n  APPLICATION_VND_API_JSON: RestHeaders.from({\n    [HeaderKeyContentType]: 'application/vnd.api+json',\n    [HeaderKeyAccept]: 'application/vnd.api+json',\n  }),\n\n  // Form URL encoded (old APIs, OAuth token endpoints)\n  APPLICATION_X_WWW_FORM_URLENCODED: RestHeaders.from({\n    [HeaderKeyContentType]: 'application/x-www-form-urlencoded',\n    [HeaderKeyAccept]: 'application/json',\n  }),\n\n  // Multipart form-data (file uploads) — note: boundary will be set by FormData in Node\n  MULTIPART_FORM_DATA: RestHeaders.from({\n    [HeaderKeyContentType]: 'multipart/form-data',\n    [HeaderKeyAccept]: 'application/json',\n  }),\n\n  // Plain text request/response (health checks, simple endpoints)\n  TEXT_PLAIN: RestHeaders.from({\n    [HeaderKeyContentType]: 'text/plain; charset=utf-8',\n    [HeaderKeyAccept]: 'text/plain',\n  }),\n\n  // Accept anything (downloads, weird backends)\n  ACCEPT_ANY: RestHeaders.from({\n    [HeaderKeyAccept]: '*/*',\n  }),\n\n  // Binary download (still just headers; axios responseType controls actual handling)\n  OCTET_STREAM: RestHeaders.from({\n    [HeaderKeyAccept]: 'application/octet-stream',\n  }),\n} as const;\n//#endregion\n\n//#region abstract resource reponse class\nexport abstract class ResourceResponse<\n  DATA = any,\n  ERROR = any,\n> implements Promise<HttpResponse<DATA> | HttpResponseError<ERROR>> {\n  [Symbol.toStringTag] = 'Promise';\n\n  private _promise?: Promise<HttpResponse<DATA>>;\n\n  private _promiseAbort?: AbortController;\n\n  private _observable?: Observable<HttpResponse<DATA>>;\n\n  //#region constructor\n  constructor(\n    protected httpMethodName: CoreModels.HttpMethod,\n    protected urlOrigin: string,\n    protected urlPathname: string,\n    protected options: ResourceOptions,\n    protected body: DATA | DATA,\n    protected urlParams: UrlParams[],\n    protected axiosOptions: Ng2RestAxiosRequestConfig,\n    protected isArray: boolean,\n    protected headers: RestHeaders,\n    protected globalInterceptors: Map<string, TaonAxiosClientInterceptor>,\n    protected methodsInterceptors: Map<string, TaonAxiosClientInterceptor>,\n  ) {}\n  //#endregion\n\n  // ✅ NEW: make request cancellable\n  protected abstract makeRequest(\n    abortSignal: AbortSignal,\n  ): Promise<HttpResponse<DATA>>;\n\n  /**\n   * ✅ Explicit cancel (useful for \"promise style\")\n   */\n  public cancel(reason?: string): void {\n    this._promiseAbort?.abort(reason);\n  }\n\n  /**\n   * Promise API (cannot be auto-cancelled by consumer, so we expose cancel())\n   */\n  public get promise(): Promise<HttpResponse<DATA> | HttpResponseError<ERROR>> {\n    if (!this._promise) {\n      this._promiseAbort = new AbortController();\n      this._promise = this.makeRequest(this._promiseAbort.signal);\n    }\n    return this._promise;\n  }\n\n  then<TResult1 = HttpResponse<DATA>, TResult2 = never>(\n    onfulfilled?:\n      | ((value: HttpResponse<DATA>) => TResult1 | PromiseLike<TResult1>)\n      | null,\n    onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null,\n  ): Promise<TResult1 | TResult2> {\n    return this.promise.then(onfulfilled as any, onrejected as any);\n  }\n\n  catch<TResult = never>(\n    onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null,\n  ): Promise<(HttpResponse<DATA> | HttpResponseError<ERROR>) | TResult> {\n    return this.promise.catch(onrejected as any);\n  }\n\n  finally(\n    onfinally?: (() => void) | null,\n  ): Promise<HttpResponse<DATA> | HttpResponseError<ERROR>> {\n    return this.promise.finally(onfinally as any);\n  }\n\n  /**\n   * ✅ Observable owns AbortController:\n   * - subscribe starts request\n   * - unsubscribe aborts request\n   * - shareReplay shares the same in-flight request among subscribers\n   */\n  get observable(): Observable<HttpResponse<DATA>> {\n    if (!this._observable) {\n      this._observable = new Observable<HttpResponse<DATA>>(subscriber => {\n        const ac = new AbortController();\n\n        this.makeRequest(ac.signal)\n          .then(res => {\n            if (res instanceof HttpResponseError) {\n              subscriber.error(res);\n              return;\n            }\n            subscriber.next(res);\n            subscriber.complete();\n          })\n          .catch(err => subscriber.error(err));\n\n        return () => ac.abort('rxjs-unsubscribe');\n      }).pipe(shareReplay({ bufferSize: 1, refCount: true }));\n    }\n    return this._observable;\n  }\n\n  // -------------------------\n  // Internals\n  // -------------------------\n\n  protected creatUrl(\n    params: any,\n    doNotSerializeParams: boolean = false,\n  ): string {\n    const origin = (this.urlOrigin || '').replace(/\\/+$/, '');\n    const path = (this.urlPathname || '').replace(/^\\/+/, '');\n    const endpoint = `${origin}/${path}`;\n    return `${endpoint}${getParamsUrl(params, doNotSerializeParams)}`;\n  }\n}\n//#endregion\n\n//#region resource reponse http strategy\n\nclass ResourceResponseHttp<DATA = any, ERROR = any> extends ResourceResponse<\n  DATA,\n  ERROR\n> {\n  protected async makeRequest(\n    abortSignal: AbortSignal,\n  ): Promise<HttpResponse<DATA>> {\n    const url = this.creatUrl(\n      this.urlParams,\n      !!this.axiosOptions?.doNotSerializeParams,\n    );\n    const method = this.httpMethodName;\n\n    log.d(`Requesting ${method} ${url}`);\n\n    const isFormData = CLASS.getNameFromObject(this.body) === 'FormData';\n    const formData: FormData = isFormData ? (this.body as any) : void 0;\n\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n  \n\n    const responseType: ResponseTypeAxios =\n      (this.headers.get('responsetypeaxios')?.toString() as any) || 'text';\n\n    const headersObj = Object.fromEntries(\n      Object.entries(this.headers.toJSON()).map(([k, v]) => [\n        k,\n        Array.isArray(v) ? v.join(',') : v,\n      ]),\n    );\n\n    const axiosConfig: AxiosRequestConfig = {\n      url,\n      method,\n      data: this.body,\n      responseType,\n      headers: headersObj,\n      signal: abortSignal, // ✅ this is the key\n      ...this.axiosOptions,\n    };\n\n    if (isFormData) {\n      axiosConfig.maxBodyLength = Infinity;\n    }\n\n    try {\n      const uri = new URL(url);\n      const backend = new AxiosBackendHandler<any>();\n\n      const globalInterceptors = Array.from(this.globalInterceptors.values());\n      const methodInterceptors = Array.from(this.methodsInterceptors.entries())\n        .filter(([key]) =>\n          key.endsWith(`-${method?.toUpperCase()}-${uri.pathname}`),\n        )\n        .map(([_, interceptor]) => interceptor);\n\n      const handler = buildInterceptorChain(\n        [...globalInterceptors, ...methodInterceptors],\n        backend,\n      );\n      const response = await firstValueFrom(handler.handle(axiosConfig));\n\n      return new HttpResponse<DATA>(\n        url,\n        method,\n        response.data,\n        RestHeaders.from(response.headers as any),\n        response.status,\n        this.options,\n        this.isArray,\n      );\n    } catch (catchedError: any) {\n      // ✅ treat cancellation separately (nice UX)\n      if (\n        catchedError?.code === 'ERR_CANCELED' ||\n        catchedError?.name === 'CanceledError'\n      ) {\n        throw new HttpResponseError<ERROR>(\n          url,\n          method,\n          JSON.stringify({ message: 'Request canceled' }),\n          this.options,\n          RestHeaders.from(),\n          0,\n          this.isArray,\n        );\n      }\n\n      //#region handle global error listener for notificaitons\n      if (\n        typeof catchedError === 'object' &&\n        catchedError.response &&\n        catchedError.response.data\n      ) {\n        const err = catchedError.response.data;\n        const msg: string = catchedError.response.data.message || '';\n        // console.log({\n        //   'err.stack': err?.stack\n        // })\n        let stack: string[] = (err.stack || '').split('\\n');\n\n        listenErrorsSrc.next({\n          msg,\n          stack,\n          data: catchedError.response.data,\n        });\n      }\n      //#endregion\n\n      const status = catchedError?.response?.status ?? 0; // ✅ FIX: you used \"status\" before defining it\n      const data =\n        catchedError?.response?.data ?? catchedError?.message ?? catchedError;\n\n      const responseText =\n        typeof data === 'string' ? data : JSON.stringify(data);\n\n      throw new HttpResponseError<ERROR>(\n        url,\n        method,\n        responseText,\n        this.options,\n        RestHeaders.from(catchedError?.response?.headers),\n        status,\n        this.isArray,\n      );\n    }\n  }\n}\n\n//#endregion\n\n//#region models\nexport interface UrlParams {\n  [urlModelName: string]: string | number | boolean | RegExp | Object;\n  regex?: RegExp;\n}\n[];\n\nexport type Ng2RestAxiosRequestConfig = {\n  doNotSerializeParams?: boolean;\n} & AxiosRequestConfig<any>;\n\n//#endregion\n\n//#region resource namespace\nexport namespace Resource {\n  export const globalInterceptors = new Map<\n    string,\n    TaonAxiosClientInterceptor\n  >();\n  export const methodsInterceptors = new Map<\n    string,\n    TaonAxiosClientInterceptor\n  >();\n\n  export const listenErrors = listenErrorsSrc.asObservable();\n\n  export const Cookies = Cookie.Instance;\n\n  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n  export function create<MODEL = any>(\n    originUrl: string,\n    pathnameModel: string,\n    resourceOptions?: ResourceOptions,\n  ) {\n    return {\n      model: <INTERPOLATE_ARGS = {}>(\n        interpolateParams?: INTERPOLATE_ARGS,\n        overrideOptions?:\n          | ResourceOptions\n          | { (options: ResourceOptions): ResourceOptions },\n      ) => {\n        const methods = <T>(\n          isArray = false,\n        ): {\n          [method in CoreModels.HttpMethod]: (\n            item?: T,\n            urlParams?: UrlParams[],\n            axiosOptions?: Ng2RestAxiosRequestConfig,\n          ) => ResourceResponse<T>;\n        } => {\n          const methodsObj = {};\n          for (const methodName of CoreModels.HttpMethodArr) {\n            methodsObj[methodName] = (\n              body?: MODEL,\n              urlParams?: UrlParams[],\n              axiosOptions?: Ng2RestAxiosRequestConfig,\n            ) => {\n              let localPathname = pathnameModel;\n              if (!localPathname.startsWith('/')) {\n                localPathname = `/${localPathname}`;\n              }\n              let localOriginUrl = originUrl;\n              if (localOriginUrl.endsWith('/')) {\n                localOriginUrl = localOriginUrl.replace(/\\/$/, '');\n              }\n\n              let localUrl: URL = new URL(`${localOriginUrl}${localPathname}`);\n\n              //#region validate pathname model\n              const badRestRegEX = new RegExp('((\\/:)[a-z]+)+', 'g');\n              const matchArr = localPathname.match(badRestRegEX) || [];\n              const badModelsNextToEachOther = matchArr.join();\n              const atleas2DoubleDots =\n                (badModelsNextToEachOther.match(new RegExp(':', 'g')) || [])\n                  .length >= 2;\n              if (\n                atleas2DoubleDots &&\n                localPathname.search(badModelsNextToEachOther) !== -1\n              ) {\n                throw new Error(`\n\nBad rest model: ${localPathname}\n\nDo not create rest models like this:    /book/author/:bookid/:authorid\nInstead use nested approach:            /book/:bookid/author/:authorid\n            `);\n              }\n              //#endregion\n\n              let options: ResourceOptions = resourceOptions;\n              options = options || {};\n\n              options.responseMapping = options.responseMapping || {};\n\n              options = {\n                ...options,\n                ...(_.isFunction(overrideOptions)\n                  ? overrideOptions(options)\n                  : overrideOptions || {}),\n              };\n\n              if (interpolateParams) {\n                // console.log({ interpolateParams });\n                // interpolate args\n                let pathNameInterpolated = interpolateParamsToUrl(\n                  interpolateParams,\n                  localUrl.pathname,\n                );\n                // console.log(\n                //   `interpolated ${pathNameInterpolated}, url ${url.toString()}`,\n                // );\n                localUrl = new URL(\n                  `${localUrl.origin}/${pathNameInterpolated}`,\n                );\n              }\n\n              const headers: RestHeaders = RestHeaders.from(options.headers);\n\n              options.strategy = options.strategy || 'http';\n\n              options.defaultHeadersProfile =\n                options.defaultHeadersProfile || 'APPLICATION_JSON';\n\n              if (options.defaultHeadersProfile) {\n                DEFAULT_HEADERS[options.defaultHeadersProfile].forEach(\n                  (values, name) => {\n                    values.forEach(headerValue =>\n                      headers.set(name, headerValue),\n                    );\n                  },\n                );\n              }\n\n              if (options.strategy === 'http') {\n                return new ResourceResponseHttp(\n                  methodName,\n                  localUrl.origin,\n                  localUrl.pathname,\n                  options,\n                  body,\n                  urlParams,\n                  axiosOptions,\n                  isArray,\n                  headers,\n                  globalInterceptors,\n                  methodsInterceptors,\n                );\n              } else if (options.strategy === 'ipc-electron') {\n                // TODO later\n              } else if (options.strategy === 'js-mock') {\n                // TODO later\n              }\n            };\n          }\n          return methodsObj as any;\n        };\n\n        const methodsRes = methods<MODEL>();\n        const methodsArrayRes = methods<MODEL[]>(true);\n\n        const res = {\n          get array() {\n            return methodsArrayRes;\n          },\n          ...methodsRes,\n        };\n        return res;\n      },\n    };\n  }\n}\n//#endregion\n\n//#region exmaple usage\n/**\n * EXample useage\n */\n\nclass ExampleBook {\n  title: string;\n}\n\nasync function example() {\n  const rest = Resource.create<ExampleBook>(\n    'http://my-website.pl',\n    'api/v3/user/:userId',\n    {\n      responseMapping: {\n        entity: () => ({ '': ExampleBook }),\n      },\n    },\n  );\n\n  const response = await rest.model({ userId: 1 }).get();\n\n  response; // type of response should be HttpResponse\n\n  const responseObservable = rest\n    .model({ userId: 1 })\n    .array.post([new ExampleBook()], [{ 'location-id': 123 }]).observable;\n\n  const responseObservableOnlyONe = rest\n    .model({ userId: 1 })\n    .post(new ExampleBook(), [{ 'location-id': 123 }]).observable;\n\n  responseObservable.subscribe(data => {\n    data; // HttpResponse<ExampleBook>\n  });\n}\n//#endregion","export * from './ng2-rest';\nexport * from './new-mapping';\n/* */                                               ","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}