@basmilius/http-client 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -544,7 +544,7 @@ function validate(clazz) {
544
544
  }
545
545
  }
546
546
  if (OVERRIDE_CONSOLE_LOG) {
547
- const _error = console.error.bind(console);
547
+ const _error2 = console.error.bind(console);
548
548
  const _info = console.info.bind(console);
549
549
  const _log = console.log.bind(console);
550
550
  const _warn = console.warn.bind(console);
@@ -559,7 +559,7 @@ if (OVERRIDE_CONSOLE_LOG) {
559
559
  }
560
560
  return fn(...args);
561
561
  };
562
- console.error = override(_error);
562
+ console.error = override(_error2);
563
563
  console.info = override(_info);
564
564
  console.log = override(_log);
565
565
  console.warn = override(_warn);
@@ -737,9 +737,6 @@ var BaseResponse = class {
737
737
  get data() {
738
738
  return this.#data;
739
739
  }
740
- get errors() {
741
- return this.#errors;
742
- }
743
740
  get headers() {
744
741
  return this.#response.headers;
745
742
  }
@@ -753,11 +750,9 @@ var BaseResponse = class {
753
750
  return this.#response.status;
754
751
  }
755
752
  #data;
756
- #errors;
757
753
  #response;
758
- constructor(data, errors, response) {
754
+ constructor(data, response) {
759
755
  this.#data = data;
760
- this.#errors = errors;
761
756
  this.#response = response;
762
757
  }
763
758
  };
@@ -945,9 +940,11 @@ var RequestBuilder = class _RequestBuilder {
945
940
  async fetchBlob() {
946
941
  let response = await this.#execute();
947
942
  if (response.status !== 200 /* Ok */) {
948
- const { errors } = await response.json();
949
- const responseErrors = errors;
950
- throw new RequestError("Request failed.", responseErrors, response.status);
943
+ const data = await response.json();
944
+ if ("code" in data && "error" in data && "error_description" in data) {
945
+ throw new RequestError(data.code, data.error, data.error_description, response.status);
946
+ }
947
+ throw new RequestError(-1, "failed_without_info", "Request failed without any information from the backend.", response.status);
951
948
  }
952
949
  let filename = response.headers.has("content-disposition") ? HttpAdapter.parseFileNameFromContentDispositionHeader(response.headers.get("content-disposition")) : `download-${formatFileDateTime()}`;
953
950
  return new BlobResponse(
@@ -957,7 +954,7 @@ var RequestBuilder = class _RequestBuilder {
957
954
  }
958
955
  async runAdapter(adapterMethod) {
959
956
  const { data, response } = await this.#executeSafe();
960
- return new BaseResponse(adapterMethod(data), null, response);
957
+ return new BaseResponse(adapterMethod(data), response);
961
958
  }
962
959
  async runArrayAdapter(adapterMethod) {
963
960
  return this.runAdapter((data) => data.map(adapterMethod));
@@ -973,7 +970,7 @@ var RequestBuilder = class _RequestBuilder {
973
970
  }
974
971
  async runDataKey(key) {
975
972
  const { data, response } = await this.#executeSafe();
976
- return new BaseResponse(data[key], null, response);
973
+ return new BaseResponse(data[key], response);
977
974
  }
978
975
  async runStatusCode() {
979
976
  const response = await this.#executeSafe();
@@ -991,61 +988,62 @@ var RequestBuilder = class _RequestBuilder {
991
988
  });
992
989
  }
993
990
  async #executeSafe() {
994
- const response = await this.#execute().then(_RequestBuilder.#handleResponse).then((response2) => {
995
- this.#client.onResponse(response2);
996
- return response2;
991
+ return await this.#execute().then(_RequestBuilder.#handleResponse).then((response) => {
992
+ this.#client.onResponse(response);
993
+ return response;
997
994
  });
998
- const { errors, statusCode } = response;
999
- if (statusCode < 200 /* Ok */ || statusCode >= 300 /* MultipleChoices */) {
1000
- if (!!errors) {
1001
- throw new RequestError("Request failed with errors.", errors, statusCode);
1002
- }
1003
- throw new RequestError("Request failed without errors.", {}, statusCode);
1004
- }
1005
- return response;
1006
995
  }
1007
996
  static async #handleResponse(response) {
1008
997
  if (response.status === 204 /* NoContent */) {
1009
- return new BaseResponse(null, null, response);
998
+ return new BaseResponse(null, response);
1010
999
  }
1011
1000
  if (response.headers.has("content-type") && response.headers.get("content-type").startsWith("application/json")) {
1012
- const { data: data2, errors } = await response.json();
1013
- return new BaseResponse(data2, errors, response);
1001
+ const data2 = await response.json();
1002
+ if ("code" in data2 && "error" in data2 && "error_description" in data2) {
1003
+ throw new RequestError(data2.code, data2.error, data2.error_description, response.status);
1004
+ }
1005
+ return new BaseResponse(data2, response);
1014
1006
  }
1015
1007
  if (response.status === 401 /* Unauthorized */ || response.status === 403 /* Forbidden */) {
1016
- return new BaseResponse(null, null, response);
1008
+ return new BaseResponse(null, response);
1017
1009
  }
1018
1010
  const data = await response.text();
1019
1011
  if (data.length === 0 && response.status >= 200 /* Ok */ && response.status < 300 /* MultipleChoices */) {
1020
- return new BaseResponse(null, null, response);
1012
+ return new BaseResponse(null, response);
1021
1013
  }
1022
- throw new RequestError("Response was not a JSON response.", {}, response.status);
1014
+ throw new RequestError(-1, "not_a_json_response", "The response was not a JSON response.", response.status);
1023
1015
  }
1024
1016
  };
1025
1017
 
1026
1018
  // src/http/RequestError.ts
1027
- var _errors, _message, _statusCode;
1019
+ var _code, _error, _errorDescription, _statusCode;
1028
1020
  var RequestError = class {
1029
- constructor(message, errors, statusCode) {
1030
- __privateAdd(this, _errors);
1031
- __privateAdd(this, _message);
1021
+ constructor(code, error, errorDescription, statusCode) {
1022
+ __privateAdd(this, _code);
1023
+ __privateAdd(this, _error);
1024
+ __privateAdd(this, _errorDescription);
1032
1025
  __privateAdd(this, _statusCode);
1033
- __privateSet(this, _errors, errors);
1034
- __privateSet(this, _message, message);
1026
+ __privateSet(this, _code, code);
1027
+ __privateSet(this, _error, error);
1028
+ __privateSet(this, _errorDescription, errorDescription);
1035
1029
  __privateSet(this, _statusCode, statusCode);
1036
1030
  }
1037
- get errors() {
1038
- return __privateGet(this, _errors);
1031
+ get code() {
1032
+ return __privateGet(this, _code);
1033
+ }
1034
+ get error() {
1035
+ return __privateGet(this, _error);
1039
1036
  }
1040
- get message() {
1041
- return __privateGet(this, _message);
1037
+ get errorDescription() {
1038
+ return __privateGet(this, _errorDescription);
1042
1039
  }
1043
1040
  get statusCode() {
1044
1041
  return __privateGet(this, _statusCode);
1045
1042
  }
1046
1043
  };
1047
- _errors = new WeakMap();
1048
- _message = new WeakMap();
1044
+ _code = new WeakMap();
1045
+ _error = new WeakMap();
1046
+ _errorDescription = new WeakMap();
1049
1047
  _statusCode = new WeakMap();
1050
1048
  RequestError = __decorateClass([
1051
1049
  dto_default
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/decorator/adapter.ts", "../src/decorator/debounce.ts", "../src/util/datetime.ts", "../src/util/reflection.ts", "../src/decorator/dto/constant.ts", "../src/decorator/dto/symbols.ts", "../src/decorator/dto/helper/isDto.ts", "../src/decorator/dto/helper/areEqual.ts", "../src/decorator/dto/helper/assertDto.ts", "../src/decorator/dto/helper/circularProtect.ts", "../src/decorator/dto/helper/cloneDto.ts", "../src/decorator/dto/helper/isDtoDirty.ts", "../src/decorator/dto/helper/triggerDto.ts", "../src/decorator/dto/helper/markDtoClean.ts", "../src/decorator/dto/helper/executeIfDtoDirtyAndMarkClean.ts", "../src/decorator/dto/helper/instance.ts", "../src/decorator/dto/helper/isDtoClean.ts", "../src/decorator/dto/helper/markDtoDirty.ts", "../src/decorator/dto/helper/relateDtoTo.ts", "../src/decorator/dto/helper/relateValueTo.ts", "../src/decorator/dto/helper/trackDto.ts", "../src/decorator/dto/helper/unrelateDtoFrom.ts", "../src/decorator/dto/helper/unrelateValueFrom.ts", "../src/decorator/dto/classProxy.ts", "../src/decorator/dto/arrayProxy.ts", "../src/decorator/dto/instanceProxy.ts", "../src/decorator/dto/refProxy.ts", "../src/decorator/dto/clone.ts", "../src/decorator/dto/fill.ts", "../src/decorator/dto/toJSON.ts", "../src/decorator/dto/index.ts", "../src/dto/BlobResponse.ts", "../src/dto/Paginated.ts", "../src/adapter/HttpAdapter.ts", "../src/enum/HttpMethod.ts", "../src/enum/HttpStatusCode.ts", "../src/http/BaseResponse.ts", "../src/http/BaseService.ts", "../src/http/HttpClient.ts", "../src/http/QueryString.ts", "../src/http/RequestBuilder.ts", "../src/http/RequestError.ts", "../src/http/helpers.ts"],
4
- "sourcesContent": ["import type { Constructor } from '@/util';\n\nconst isStrict = true;\n\nexport default function <T extends Constructor>(Parent: T): T {\n return class extends Parent {\n constructor(...args: any[]) {\n if (isStrict) {\n throw new Error('Adapters cannot be instantiated.');\n }\n\n super(...args);\n }\n } as T;\n}\n", "export default function (interval: number) {\n return (target: object, method: string, descriptor: PropertyDescriptor) => {\n descriptor.value = debounce(descriptor.value, interval, target);\n };\n}\n\nfunction debounce<F extends ((...args: any[]) => any)>(fn: F, interval: number, $this: object): Function {\n let resolvers = [], rejecters = [], timeout = null;\n\n return (...args: any[]) => {\n clearTimeout(timeout);\n\n timeout = setTimeout(async () => {\n try {\n let result = await fn.apply($this, args);\n resolvers.forEach(resolve => resolve(result));\n } catch (err) {\n rejecters.forEach(reject => reject(err));\n }\n\n resolvers = [];\n rejecters = [];\n }, interval);\n\n return new Promise((resolve, reject) => {\n resolvers.push(resolve);\n rejecters.push(reject);\n });\n };\n}\n", "import { DateTime } from 'luxon';\n\nexport function formatFileDateTime(dateTime?: DateTime): string {\n dateTime = dateTime || DateTime.now();\n\n return dateTime.toFormat('yyyy-MM-dd HH-mm-ss');\n}\n", "export type Constructor<T = {}> = new (...args: any[]) => T;\nexport type Descriptors = Record<string | symbol, TypedPropertyDescriptor<unknown> | PropertyDescriptor>;\n\nexport function getPrototypeChain(obj: Function): Descriptors {\n const entries: Descriptors = {};\n\n do {\n if (obj.name === '') {\n break;\n }\n\n for (const [key, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(obj.prototype))) {\n if (['constructor', 'clone', 'toJSON'].includes(key)) {\n continue;\n }\n\n if (!descriptor.get && !descriptor.set) {\n continue;\n }\n\n entries[key] = descriptor;\n }\n } while (obj = Object.getPrototypeOf(obj));\n\n return entries;\n}\n\nexport function setMutableObjectValue(obj: object, key: symbol | string, value: unknown): void {\n Object.defineProperty(obj, key, {\n configurable: false,\n writable: true,\n value\n });\n}\n\nexport function setObjectMethod(obj: Function, key: string, fn: Function): void {\n obj.prototype[key] = fn;\n}\n\nexport function setObjectValue(obj: object, key: symbol | string, value: unknown): void {\n Object.defineProperty(obj, key, {value});\n}\n", "export const ENABLE_CIRCULAR_LOGGING = false;\nexport const ENABLE_DIRTY_LOGGING = false;\nexport const ENABLE_REACTIVE_LOGGING = false;\nexport const ENABLE_GET_LOGGING = false;\nexport const ENABLE_SET_LOGGING = false;\nexport const OVERRIDE_CONSOLE_LOG = true;\n", "export const ARGS = Symbol();\nexport const CHILDREN = Symbol();\nexport const DESCRIPTORS = Symbol();\nexport const DIRTY = Symbol();\nexport const NAME = Symbol();\nexport const PARENT = Symbol();\nexport const PARENT_KEY = Symbol();\nexport const PROPERTIES = Symbol();\nexport const PROXY = Symbol();\nexport const TRACK = Symbol();\nexport const TRIGGER = Symbol();\n", "import { NAME } from '../symbols';\nimport DtoInstance from '../instance';\n\n/**\n * Checks if the given object is a dto.\n */\nexport default function (obj: unknown): obj is DtoInstance<unknown> {\n return obj && typeof obj === 'object' && obj[NAME];\n}\n", "import isDto from './isDto';\n\n/**\n * Checks if the two given values are equal. When both values are a\n * dto, the check is done by firstly converthing them to JSON.\n */\nexport default function (a: unknown, b: unknown): boolean {\n if (!isDto(a) || !isDto(b)) {\n return a === b;\n }\n\n return JSON.stringify(a) === JSON.stringify(b);\n}\n", "import type DtoInstance from '../instance';\nimport isDto from './isDto';\n\n/**\n * Asserts that the given object is a dto.\n */\nexport default function (obj: unknown): asserts obj is DtoInstance<never> {\n if (!isDto(obj)) {\n throw new Error('@dto assert given object is not a class decorated with @Dto.');\n }\n}\n", "import type DtoInstance from '../instance';\nimport { ENABLE_CIRCULAR_LOGGING } from '@/decorator/dto/constant';\n\ntype CircularMap = WeakMap<DtoInstance<unknown>, (string | symbol)[]>;\nconst CIRCULAR_MAP = Symbol();\n\nexport default function <T extends (...args: any[]) => unknown>(fn: T, arg1: number = 0, arg2?: number): T {\n return function (...args: any[]): unknown {\n const hasMap = CIRCULAR_MAP in fn;\n const map: CircularMap = fn[CIRCULAR_MAP] ??= new WeakMap();\n const primary = args[arg1];\n const secondary = arg2 !== undefined ? args[arg2] : 'self';\n\n if (typeof primary !== 'object') {\n return fn.call(this, ...args);\n }\n\n if (!map.has(primary)) {\n map.set(primary, []);\n }\n\n if (map.get(primary).includes(secondary)) {\n ENABLE_CIRCULAR_LOGGING && console.log(`%c@dto %ccircular protect %cdetected a circular reference`, 'color: #0891b2', 'color: #059669', 'color: #1d4ed8', {fn, primary, secondary});\n return;\n }\n\n map.get(primary).push(secondary);\n\n const result = fn.call(this, ...args);\n\n !hasMap && (delete fn[CIRCULAR_MAP]);\n\n return result;\n } as T;\n}\n", "import assertDto from './assertDto';\n\n/**\n * Clones the given dto.\n */\nexport default function <T>(obj: T): T {\n assertDto(obj);\n return obj.clone() as T;\n}\n", "import { DIRTY } from '../symbols';\nimport assertDto from './assertDto';\n\n/**\n * Checks if the given dto is dirty.\n */\nexport default function (obj: unknown): boolean {\n assertDto(obj);\n return obj[DIRTY];\n}\n", "import { ENABLE_REACTIVE_LOGGING } from '../constant';\nimport { NAME, PARENT, PARENT_KEY, TRIGGER } from '../symbols';\nimport type DtoInstance from '../instance';\nimport circularProtect from './circularProtect';\n\n/**\n * Trigger for when a dto property is being updated.\n */\nconst triggerDto = circularProtect(function (dto: DtoInstance<unknown>, key: string | symbol, value: unknown, oldValue?: unknown): void {\n const trigger = dto[TRIGGER];\n trigger(dto, key, value, oldValue);\n\n ENABLE_REACTIVE_LOGGING && console.log(`%c@dto %c${dto[NAME]} %ctrigger`, 'color: #0891b2', 'color: #059669', 'color: #1d4ed8', key, {dto, value, oldValue});\n\n dto[PARENT] && triggerDto(dto[PARENT], dto[PARENT_KEY], dto[PARENT][dto[PARENT_KEY]]);\n}, 0, 1);\n\nexport default triggerDto;\n", "import { ENABLE_DIRTY_LOGGING } from '../constant';\nimport { CHILDREN, DIRTY, NAME } from '../symbols';\nimport assertDto from './assertDto';\nimport circularProtect from './circularProtect';\nimport isDtoDirty from './isDtoDirty';\nimport triggerDto from './triggerDto';\n\n/**\n * Marks the given dto clean.\n */\nconst markDtoClean = circularProtect(function (obj: unknown): void {\n assertDto(obj);\n\n if (obj[DIRTY]) {\n obj[DIRTY] = false;\n ENABLE_DIRTY_LOGGING && console.log(`%c@dto %c${obj[NAME]} %cdirty`, 'color: #0891b2', 'color: #059669', 'color: #1d4ed8', 'marked clean', {obj});\n triggerDto(obj, DIRTY, false, true);\n }\n\n if (!obj[CHILDREN] || obj[CHILDREN].length === 0) {\n return;\n }\n\n obj[CHILDREN]\n .filter(isDtoDirty)\n .forEach(markDtoClean);\n});\n\nexport default markDtoClean;\n", "import type DtoInstance from '../instance';\nimport isDto from './isDto';\nimport isDtoDirty from './isDtoDirty';\nimport markDtoClean from './markDtoClean';\n\n/**\n * Executes the given function if the given dto is marked dirty.\n */\nexport default async function <T, R = void>(obj: T, fn: (dto: T & DtoInstance<T>) => Promise<R>): Promise<void> {\n if (!isDto(obj) || !isDtoDirty(obj)) {\n return;\n }\n\n await fn(obj);\n markDtoClean(obj);\n}\n", "import type DtoInstance from '../instance';\n\nexport default function <T>(dto: DtoInstance<T>): DtoInstance<T> {\n return (dto as any)?.value ?? dto;\n}\n", "import { DIRTY } from '../symbols';\nimport assertDto from './assertDto';\n\n/**\n * Checks if the given dto is clean.\n */\nexport default function (obj: unknown): boolean {\n assertDto(obj);\n return !obj[DIRTY];\n}\n", "import { ENABLE_DIRTY_LOGGING } from '../constant';\nimport { DIRTY, NAME, PARENT, PARENT_KEY } from '../symbols';\nimport assertDto from './assertDto';\nimport circularProtect from './circularProtect';\nimport triggerDto from './triggerDto';\n\n/**\n * Marks the given dto dirty.\n */\nconst markDtoDirty = circularProtect(function (obj: unknown, key?: string | number): void {\n assertDto(obj);\n\n if (!obj[DIRTY]) {\n obj[DIRTY] = true;\n ENABLE_DIRTY_LOGGING && console.log(`%c@dto %c${obj[NAME]} %cdirty`, 'color: #0891b2', 'color: #059669', 'color: #1d4ed8', 'marked dirty', {obj, key});\n triggerDto(obj, DIRTY, true, false);\n }\n\n if (!obj[PARENT]) {\n return;\n }\n\n markDtoDirty(obj[PARENT], obj[PARENT_KEY]);\n});\n\nexport default markDtoDirty;\n", "import { CHILDREN, PARENT, PARENT_KEY } from '../symbols';\nimport type DtoInstance from '../instance';\n\n/**\n * Creates a parent-child relationship between the given two dtos.\n */\nexport default function (dto: DtoInstance<unknown>, parent: DtoInstance<unknown>, key: string): void {\n parent[CHILDREN] ??= [];\n !parent[CHILDREN].includes(dto) && parent[CHILDREN].push(dto);\n\n dto[PARENT] !== parent && (dto[PARENT] = parent);\n dto[PARENT_KEY] !== key && (dto[PARENT_KEY] = key);\n}\n", "import { PARENT, PARENT_KEY } from '../symbols';\nimport type DtoInstance from '../instance';\nimport isDto from './isDto';\nimport relateDtoTo from './relateDtoTo';\n\n/**\n * Creates relationships between the given value and dto.\n */\nexport default function (dto: DtoInstance<unknown>, key: string, value: unknown): void {\n if (isDto(value)) {\n relateDtoTo(value, dto, key);\n } else if (Array.isArray(value)) {\n if (value.some(isDto)) {\n value\n .filter(isDto)\n .forEach(val => relateDtoTo(val, dto, key));\n }\n\n value[PARENT] = dto;\n value[PARENT_KEY] = key;\n }\n}\n", "import { ENABLE_REACTIVE_LOGGING } from '../constant';\nimport { NAME, TRACK } from '../symbols';\nimport type DtoInstance from '../instance';\n\n/**\n * Tracking for when a dto property is being accessed.\n */\nexport default function trackDto(dto: DtoInstance<unknown>, key: string): void {\n const track = dto[TRACK];\n track(dto, key);\n\n ENABLE_REACTIVE_LOGGING && console.log(`%c@dto %c${dto[NAME]} %ctrack`, 'color: #0891b2', 'color: #059669', 'color: #1d4ed8', key, {dto});\n}\n", "import { CHILDREN, PARENT, PARENT_KEY } from '../symbols';\nimport type DtoInstance from '../instance';\n\n/**\n * Removes a parent-child relationship between the given two dtos.\n */\nexport default function (dto: DtoInstance<unknown>, parent: DtoInstance<unknown>): void {\n if (CHILDREN in parent) {\n const index = parent[CHILDREN].indexOf(dto);\n parent[CHILDREN].splice(index, 1);\n }\n\n dto[PARENT] = undefined;\n dto[PARENT_KEY] = undefined;\n}\n", "import { PARENT, PARENT_KEY } from '../symbols';\nimport type DtoInstance from '../instance';\nimport isDto from './isDto';\nimport unrelateDtoFrom from './unrelateDtoFrom';\n\n/**\n * Removes relationships between the given value and dto.\n */\nexport default function (dto: DtoInstance<unknown>, value: unknown): void {\n if (isDto(value)) {\n unrelateDtoFrom(value, dto);\n } else if (Array.isArray(value)) {\n if (value.some(isDto)) {\n value\n .filter(isDto)\n .forEach(val => unrelateDtoFrom(val, dto));\n }\n\n value[PARENT] = undefined;\n value[PARENT_KEY] = undefined;\n }\n}\n", "import { customRef, markRaw } from 'vue';\nimport type { Constructor } from '@/util';\nimport { ARGS, DIRTY, TRACK, TRIGGER } from './symbols';\nimport DtoInstance from './instance';\nimport arrayProxy from './arrayProxy';\nimport instanceProxy from './instanceProxy';\nimport refProxy from './refProxy';\n\nexport default {\n /**\n * Trap for when a dto is being constructed. Reactivity is provided\n * to all arguments and a proxied custom ref is returned that references\n * the actual dto instance.\n */\n construct(target: Constructor, argsArray: any[], newTarget: Function): DtoInstance<unknown> {\n // note(Bas): This will apply reactivity to any array arguments.\n argsArray = argsArray.map(arg => {\n if (!Array.isArray(arg)) {\n return arg;\n }\n\n return new Proxy(arg, arrayProxy);\n });\n\n const ref = customRef((track, trigger) => {\n const instance = markRaw(Reflect.construct(target, argsArray, newTarget));\n instance[ARGS] = argsArray;\n instance[DIRTY] = false;\n instance[TRACK] = track;\n instance[TRIGGER] = trigger;\n\n const proxied = new Proxy(instance, instanceProxy);\n\n return {\n // note(Bas): track that the dto itself is being accessed.\n get: () => {\n track();\n return proxied;\n },\n\n // note(Bas): setter is never used, but we don't want to\n // cause any errors.\n set: () => void 0\n };\n });\n\n return new Proxy(ref, refProxy) as unknown as DtoInstance<unknown>;\n }\n} satisfies ProxyHandler<Constructor>;\n", "import { markDtoDirty, trackDto, triggerDto } from './helper';\nimport { PARENT, PARENT_KEY, PROXY } from './symbols';\nimport type DtoInstance from './instance';\n\nexport default {\n /**\n * Trap for when a property is deleted from the target. This\n * will mark the parent dto as dirty and trigger an update.\n */\n deleteProperty(target: unknown[], key: string | symbol): boolean {\n Reflect.deleteProperty(target, key);\n\n if (ignored(target, key)) {\n return true;\n }\n\n const dto = target[PARENT] as DtoInstance<unknown>;\n dto && triggerDto(dto, target[PARENT_KEY], dto[target[PARENT_KEY]]);\n dto && markDtoDirty(dto, target[PARENT_KEY]);\n\n return true;\n },\n\n /**\n * Trap for when a property of the target is being accessed. The\n * property access is being tracked for further updates.\n */\n get(target: unknown[], key: string | symbol, receiver: any): unknown {\n if (key === PROXY) {\n return true;\n }\n\n if (ignored(target, key)) {\n return Reflect.get(target, key, receiver);\n }\n\n const dto = target[PARENT] as DtoInstance<unknown>;\n dto && trackDto(dto, target[PARENT_KEY]);\n\n return Reflect.get(target, key);\n },\n\n /**\n * Trap for when a property of the target is being updated. This\n * will mark the parent dto as dirty and trigger an update.\n */\n set(target: unknown[], key: string | symbol, value: unknown, receiver: any) {\n if (ignored(target, key)) {\n return Reflect.set(target, key, value, receiver);\n }\n\n const dto = target[PARENT] as DtoInstance<unknown>;\n dto && triggerDto(dto, target[PARENT_KEY], dto[target[PARENT_KEY]]);\n dto && markDtoDirty(dto, target[PARENT_KEY]);\n\n return Reflect.set(target, key, value);\n }\n} satisfies ProxyHandler<unknown[]>;\n\n/**\n * Checks if the given key should be ignored by the proxy.\n */\nfunction ignored(target: unknown[], key: string | symbol): key is symbol {\n return typeof key === 'symbol' || typeof target[key] === 'function' || key === 'length';\n}\n", "import { ENABLE_GET_LOGGING, ENABLE_SET_LOGGING } from './constant';\nimport { areEqual, markDtoDirty, relateValueTo, trackDto, triggerDto, unrelateValueFrom } from './helper';\nimport { DESCRIPTORS, NAME, PROPERTIES, PROXY } from './symbols';\nimport type DtoInstance from './instance';\nimport arrayProxy from './arrayProxy';\n\nexport default {\n /**\n * Trap for when a dto property is being accessed. The property\n * access is being tracked for further updates. If the dto has\n * any child dtos, a relationship will be added between them.\n */\n get(target: DtoInstance<unknown>, key: string | symbol, receiver: any): unknown {\n if (key === PROXY) {\n return true;\n }\n\n if (typeof key === 'symbol') {\n return Reflect.get(target, key, receiver);\n }\n\n const descriptor = target[DESCRIPTORS][key];\n\n if (!descriptor || !descriptor.get) {\n return Reflect.get(target, key, receiver);\n }\n\n const value = descriptor.get.call(target);\n\n ENABLE_GET_LOGGING && console.log(`%c@dto %c${target[NAME]} %cget`, 'color: #0891b2', 'color: #059669', 'color: #1d4ed8', key);\n trackDto(target, key);\n\n relateValueTo(target, key, value);\n\n return value;\n },\n\n /**\n * Trap for when a descriptor of a dto property is requested.\n */\n getOwnPropertyDescriptor(target: DtoInstance<unknown>, key: string | symbol): PropertyDescriptor | undefined {\n return target[DESCRIPTORS][key];\n },\n\n /**\n * Trap for when the keys of a dto are requested.\n */\n ownKeys(target: DtoInstance<unknown>) {\n return target[PROPERTIES];\n },\n\n /**\n * Trap for when a dto property is being updated. This will\n * mark the dto dirty and trigger an update. If an array is\n * passed, that array will be made reactive as well.\n */\n set(target: DtoInstance<unknown>, key: string | symbol, value: unknown, receiver: any): boolean {\n if (typeof key === 'symbol') {\n return Reflect.set(target, key, value, receiver);\n }\n\n const descriptor = target[DESCRIPTORS][key];\n\n if (!descriptor || !descriptor.set) {\n return Reflect.set(target, key, value, receiver);\n }\n\n const oldValue = descriptor.get?.call(target) ?? undefined;\n\n if (areEqual(value, oldValue)) {\n return true;\n }\n\n unrelateValueFrom(target, oldValue);\n\n if (Array.isArray(value) && !value[PROXY]) {\n value = new Proxy(value, arrayProxy);\n }\n\n ENABLE_SET_LOGGING && console.log(`%c@dto %c${target[NAME]} %cset`, 'color: #0891b2', 'color: #059669', 'color: #1d4ed8', key, {value});\n descriptor.set.call(target, value);\n\n relateValueTo(target, key, value);\n markDtoDirty(target, key);\n triggerDto(target, key, value, oldValue);\n\n return true;\n }\n} satisfies ProxyHandler<DtoInstance<unknown>>;\n", "import type { Ref } from 'vue';\nimport { PROXY } from './symbols';\nimport type DtoInstance from './instance';\n\nexport default {\n /**\n * Trap for when a ref property is being accessed. The property\n * access is being tracked for further updates. If the requested\n * property is not a part of {Ref}, the get is proxied to the\n * underlying dto instance.\n *\n * A little trick with __v_isRef is done here, all the features\n * of refs are used by our dto, but we don't want Vue to treat\n * it as a ref. We return false here to trick Vue.\n */\n get(target: Ref<DtoInstance<unknown>>, key: string | symbol, receiver: any): unknown {\n if (key === '__v_isRef') {\n return false;\n }\n\n if (key === PROXY) {\n return true;\n }\n\n if (key in target) {\n return Reflect.get(target, key, receiver);\n }\n\n return Reflect.get(target.value, key);\n },\n\n /**\n * Trap for when a descriptor of a property is requested, that\n * request is proxied to the underlying dto.\n */\n getOwnPropertyDescriptor(target: Ref<DtoInstance<unknown>>, key: string | symbol): PropertyDescriptor | undefined {\n return Reflect.getOwnPropertyDescriptor(target.value, key);\n },\n\n /**\n * Trap for when the keys of the ref are requested, that request\n * is proxied to the underlying dto.\n */\n ownKeys(target: Ref<DtoInstance<unknown>>) {\n return Reflect.ownKeys(target.value);\n },\n\n /**\n * Trap for when a ref property is being updated. If the property\n * is not part of {Ref}, the set is proxied to the underlying dto\n * instance. In that proxy, the dto will be marked dirty and an\n * update is triggered.\n */\n set(target: Ref<DtoInstance<unknown>>, key: string | symbol, value: unknown, receiver: any): boolean {\n if (key in target) {\n return Reflect.set(target, key, value, receiver);\n }\n\n return Reflect.set(target.value, key, value);\n }\n} satisfies ProxyHandler<Ref<DtoInstance<unknown>>>;\n", "import { assertDto, isDto } from './helper';\nimport type DtoInstance from './instance';\nimport { ARGS, DESCRIPTORS } from './symbols';\n\n/**\n * Returns a clone of the dto.\n */\nexport default function <T>(this: DtoInstance<T>): DtoInstance<T> {\n const instance = this;\n assertDto(instance);\n\n const clone = Reflect.construct(instance.prototype.constructor, instance[ARGS]);\n\n Object.entries(this[DESCRIPTORS])\n .filter(([, descriptor]) => !!descriptor.set)\n .map(([name]) => name)\n .forEach(key => clone[key] = isDto(this[key])\n ? this[key].clone()\n : this[key]);\n\n return clone as DtoInstance<T>;\n}\n", "import { isDto } from './helper';\nimport { DESCRIPTORS } from './symbols';\nimport type DtoInstance from './instance';\n\n/**\n * Fills the dto with the given data.\n */\nexport default function (this: DtoInstance<unknown>, data: Record<string, unknown>): void {\n for (let key in data) {\n const descriptor = this[DESCRIPTORS][key];\n\n if (isDto(this[key]) && typeof data[key] === 'object') {\n this[key].fill(data[key] as Record<string, unknown>);\n } else if (descriptor && descriptor.set) {\n this[key] = data[key];\n }\n }\n}\n", "import { isDto } from './helper';\nimport { PROPERTIES } from './symbols';\nimport type DtoInstance from './instance';\n\n/**\n * Returns the json object representation of the dto.\n */\nexport default function (this: DtoInstance<unknown>): Record<string, unknown> {\n return Object.fromEntries(\n this[PROPERTIES].map(property => {\n let value: unknown = Reflect.get.call(this, this, property, this);\n\n if (isDto(value)) {\n value = value.toJSON();\n }\n\n return [property, value];\n })\n );\n}\n", "import { Constructor, getPrototypeChain, setObjectMethod, setObjectValue } from '@/util';\nimport { OVERRIDE_CONSOLE_LOG } from './constant';\nimport { instance, isDto } from './helper';\nimport { ARGS, DESCRIPTORS, NAME, PROPERTIES } from './symbols';\nimport classProxy from './classProxy';\nimport type DtoInstance from './instance';\nimport clone from './clone';\nimport fill from './fill';\nimport toJSON from './toJSON';\n\n/**\n * Provides reactivity to the decorated class.\n */\nexport default function <T extends Constructor>(clazz: T): T {\n validate(clazz);\n\n const descriptors = Object.freeze(getPrototypeChain(clazz));\n const properties = Object.keys(descriptors);\n\n setObjectValue(clazz.prototype, DESCRIPTORS, descriptors);\n setObjectValue(clazz.prototype, NAME, clazz.name);\n setObjectValue(clazz.prototype, PROPERTIES, properties);\n setObjectValue(clazz, Symbol.hasInstance, (instance: unknown) => typeof instance === 'object' && instance?.[NAME] === clazz.name);\n\n setObjectMethod(clazz, 'clone', clone<T>);\n setObjectMethod(clazz, 'fill', fill);\n setObjectMethod(clazz, 'toJSON', toJSON);\n\n return proxy(clazz);\n}\n\nexport {\n assertDto,\n cloneDto,\n executeIfDtoDirtyAndMarkClean,\n isDto,\n isDtoClean,\n isDtoDirty,\n markDtoClean,\n markDtoDirty,\n relateDtoTo,\n relateValueTo,\n trackDto,\n triggerDto\n} from './helper';\n\nexport const DTO_CLASS_MAP: Record<string, Constructor<DtoInstance<unknown>>> = {};\n\nexport {\n ARGS,\n NAME,\n PROPERTIES\n};\n\nexport type {\n DtoInstance\n};\n\nfunction proxy<T extends Constructor>(clazz: T): T {\n const proxied = new Proxy(clazz, classProxy) as T;\n\n DTO_CLASS_MAP[clazz.name] = proxied as unknown as Constructor<DtoInstance<unknown>>;\n\n return proxied;\n}\n\nfunction validate(clazz: Function): void {\n const parent = Object.getPrototypeOf(clazz.prototype);\n\n if (NAME in parent) {\n throw new Error(`\u26D4\uFE0F @dto ${clazz.name} cannot extend parent @dto ${parent[NAME]}. A non-dto base implementation should be created with separate implementations. TL;DR a class marked as @dto cannot extend another @dto class.`);\n }\n}\n\nif (OVERRIDE_CONSOLE_LOG) {\n const _error = console.error.bind(console);\n const _info = console.info.bind(console);\n const _log = console.log.bind(console);\n const _warn = console.warn.bind(console);\n\n const override = (fn: Function) => (...args: unknown[]) => {\n for (let i = args.length - 1; i >= 0; --i) {\n const arg = args[i];\n\n if (!isDto(arg)) {\n continue;\n }\n\n const dto = instance(arg);\n args.splice(i, 1, `\uD83D\uDCE6 ${dto[NAME]}`, dto.toJSON());\n }\n\n return fn(...args);\n };\n\n console.error = override(_error);\n console.info = override(_info);\n console.log = override(_log);\n console.warn = override(_warn);\n}\n", "import { dto } from '@/decorator';\n\n@dto\nexport class BlobResponse {\n get blob(): Blob {\n return this.#blob;\n }\n\n get name(): string {\n return this.#name;\n }\n\n readonly #blob: Blob;\n readonly #name: string;\n\n constructor(blob: Blob, name: string) {\n this.#blob = blob;\n this.#name = name;\n }\n}\n", "import { dto } from '@/decorator';\n\n@dto\nexport class Paginated<T> {\n get items(): T[] {\n return this.#items;\n }\n\n get page(): number {\n return this.#page;\n }\n\n get pageSize(): number {\n return this.#pageSize;\n }\n\n get pages(): number {\n return this.#pages;\n }\n\n get totalItems(): number {\n return this.#totalItems;\n }\n\n readonly #items: T[];\n readonly #page: number;\n readonly #pageSize: number;\n readonly #pages: number;\n readonly #totalItems: number;\n\n constructor(items: T[], page: number, pageSize: number, pages: number, totalItems: number) {\n this.#items = items;\n this.#page = page;\n this.#pageSize = pageSize;\n this.#pages = pages;\n this.#totalItems = totalItems;\n }\n}\n", "import { adapter } from '@/decorator';\nimport { Paginated } from '@/dto';\nimport { formatFileDateTime } from '@/util';\n\n@adapter\nexport class HttpAdapter {\n public static parsePaginatedAdapter<T>(response: object, adapterMethod: (item: object) => T): Paginated<T> {\n return new Paginated<T>(\n response['items'].map(adapterMethod),\n response['page'],\n response['pageSize'],\n response['pages'],\n response['totalItems']\n );\n }\n\n public static parseFileNameFromContentDispositionHeader(header: string): string {\n if (!header.startsWith('attachment')) {\n return `download-${formatFileDateTime()}`;\n }\n\n let filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\n let matches = filenameRegex.exec(header);\n\n if ((matches?.length || 0) < 2) {\n return `download-${formatFileDateTime()}`;\n }\n\n return matches[1]\n .replaceAll('\\'', '')\n .replaceAll('\\\"', '')\n .replaceAll('\\/', '-')\n .replaceAll('\\:', '-');\n }\n}\n", "export enum HttpMethod {\n Delete = 'DELETE',\n Get = 'GET',\n Head = 'HEAD',\n Options = 'OPTIONS',\n Patch = 'PATCH',\n Post = 'POST',\n Put = 'PUT'\n}\n", "export enum HttpStatusCode {\n Continue = 100,\n SwitchingProtocols = 101,\n Processing = 102,\n\n Ok = 200,\n Created = 201,\n Accepted = 202,\n NonAuthoritativeInformation = 203,\n NoContent = 204,\n ResetContent = 205,\n PartialContent = 206,\n MultiStatus = 207,\n AlreadyReported = 208,\n ImUsed = 226,\n\n MultipleChoices = 300,\n MovedPermanently = 301,\n Found = 302,\n SeeOther = 303,\n NotModified = 304,\n UseProxy = 305,\n SwitchProxy = 306,\n TemporaryRedirect = 307,\n PermanentRedirect = 308,\n\n BadRequest = 400,\n Unauthorized = 401,\n PaymentRequired = 402,\n Forbidden = 403,\n NotFound = 404,\n MethodNotAllowed = 405,\n NotAcceptable = 406,\n ProxyAuthenticationRequired = 407,\n RequestTimeout = 408,\n Conflict = 409,\n Gone = 410,\n LengthRequired = 411,\n PreconditionFailed = 412,\n PayloadTooLarge = 413,\n UriTooLong = 414,\n UnsupportedMediaType = 415,\n RangeNotSatisfiable = 416,\n ExpectationFailed = 417,\n IAmATeapot = 418,\n MisdirectedRequest = 421,\n UnprocessableEntity = 422,\n Locked = 423,\n FailedDependency = 424,\n UpgradeRequired = 426,\n PreconditionRequired = 428,\n TooManyRequests = 429,\n RequestHeaderFieldsTooLarge = 431,\n UnavailableForLegalReasons = 451,\n\n InternalServerError = 500,\n NotImplemented = 501,\n BadGateway = 502,\n ServiceUnavailable = 503,\n GatewayTimeout = 504,\n HttpVersionNotSupported = 505,\n VariantAlsoNegotiates = 506,\n InsufficientStorage = 507,\n LoopDetected = 508,\n NotExtended = 510,\n NetworkAuthenticationRequired = 511\n}\n", "import type { IResponseErrors } from '@/http';\nimport type { HttpStatusCode } from '@/enum';\n\nexport class BaseResponse<T> {\n get data(): T {\n return this.#data;\n }\n\n get errors(): IResponseErrors | null {\n return this.#errors;\n }\n\n get headers(): Headers {\n return this.#response.headers;\n }\n\n get ok(): boolean {\n return this.statusCode >= 200 && this.statusCode < 300;\n }\n\n get response(): Response {\n return this.#response;\n }\n\n get statusCode(): HttpStatusCode {\n return this.#response.status;\n }\n\n readonly #data: T;\n readonly #errors: IResponseErrors;\n readonly #response: Response;\n\n constructor(data: T, errors: IResponseErrors | null, response: Response) {\n this.#data = data;\n this.#errors = errors;\n this.#response = response;\n }\n}\n", "import { HttpClient, RequestBuilder } from '.';\n\nexport class BaseService {\n protected request(path: string, client?: HttpClient): RequestBuilder {\n return new RequestBuilder(path, client);\n }\n}\n", "import type { BaseResponse, RequestBuilder } from '@/http';\n\nexport class HttpClient {\n get authToken(): string | null {\n return this.#authToken;\n }\n\n set authToken(value: string | null) {\n this.#authToken = value;\n }\n\n get baseUrl(): string {\n return this.#baseUrl;\n }\n\n get timezone(): string | null {\n return this.#timezone;\n }\n\n set timezone(value: string | null) {\n this.#timezone = value;\n }\n\n #authToken: string | null;\n #timezone: string | null;\n readonly #baseUrl: string;\n\n constructor(authToken: string | null, baseUrl: string) {\n this.#authToken = authToken;\n this.#baseUrl = baseUrl;\n this.#timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n }\n\n onException(err: unknown, caller: unknown): void {\n }\n\n onRequest(request: RequestBuilder): RequestBuilder {\n return request;\n }\n\n onResponse(response: BaseResponse<unknown>): void {\n }\n\n static get instance(): HttpClient {\n if (HttpClient.#instance === null) {\n throw new Error('There is currently no HttpClient instance registered. Register one using the HttpClient.register() function.');\n }\n\n return HttpClient.#instance;\n }\n\n static #instance: HttpClient | null = null;\n\n static register(client: HttpClient): void {\n HttpClient.#instance = client;\n }\n}\n", "export class QueryString {\n readonly #builder: URLSearchParams;\n\n constructor() {\n this.#builder = new URLSearchParams();\n }\n\n public build(): string {\n return this.#builder.toString();\n }\n\n public append(name: string, value: QueryStringValue): QueryString {\n return this.#add(this.#builder.append.bind(this.#builder), name, value);\n }\n\n public appendArray(name: string, values: QueryStringValue[] | null): QueryString {\n if (values === undefined || values === null) {\n return this;\n }\n\n values.forEach(value => this.append(name, value));\n\n return this;\n }\n\n public delete(name: string): QueryString {\n this.#builder.delete(name);\n\n return this;\n }\n\n public get(name: string): string | null {\n return this.#builder.get(name);\n }\n\n public getAll(name: string): string[] {\n return this.#builder.getAll(name);\n }\n\n public has(name: string): boolean {\n return this.#builder.has(name);\n }\n\n public set(name: string, value: QueryStringValue): QueryString {\n return this.#add(this.#builder.set.bind(this.#builder), name, value);\n }\n\n #add(fn: ((name: string, value: string) => void), name: string, value: QueryStringValue): QueryString {\n if (!value && value !== false) {\n return this;\n }\n\n switch (typeof value) {\n case 'boolean':\n fn(name, value ? 'true' : 'false');\n break;\n\n case 'number':\n fn(name, value.toString(10));\n break;\n\n case 'string':\n fn(name, value);\n break;\n }\n\n return this;\n }\n\n public static builder(): QueryString {\n return new QueryString();\n }\n}\n\ntype QueryStringValue = boolean | number | string | null;\n", "import { HttpAdapter } from '@/adapter';\nimport { BlobResponse, Paginated } from '@/dto';\nimport { HttpMethod, HttpStatusCode } from '@/enum';\nimport { formatFileDateTime } from '@/util';\nimport { BaseResponse, HttpClient, type IResponseErrors, QueryString, RequestError } from '.';\n\nexport class RequestBuilder {\n get client(): HttpClient {\n return this.#client;\n }\n\n get options(): RequestInit {\n return this.#options;\n }\n\n get path(): string {\n return this.#path;\n }\n\n set path(value: string) {\n this.#path = value;\n }\n\n get query(): QueryString | null {\n return this.#query;\n }\n\n set query(value: QueryString | null) {\n this.#query = value;\n }\n\n readonly #client: HttpClient;\n #path: string;\n #options: RequestInit = {};\n #query: QueryString | null = null;\n\n constructor(path: string, client?: HttpClient) {\n this.#client = client ?? HttpClient.instance;\n this.#options.cache = 'no-cache';\n this.#options.method = HttpMethod.Get;\n this.#path = path;\n }\n\n public bearerToken(token?: string): RequestBuilder {\n token = token ?? this.#client.authToken;\n\n if (token) {\n return this.header('Authorization', `Bearer ${token}`);\n }\n\n if (this.#options.headers && 'Authorization' in this.#options.headers) {\n delete this.#options.headers['Authorization'];\n }\n\n return this;\n }\n\n public body(body: BodyInit | FormData | object | null, contentType: string | null = 'application/octet-stream'): RequestBuilder {\n if (body instanceof FormData) {\n // note: this allows browsers to set formdata with their custom boundary.\n contentType = null;\n } else if (Array.isArray(body) || typeof body === 'object') {\n body = JSON.stringify(body);\n contentType = 'application/json';\n }\n\n this.#options.body = body;\n\n if (contentType !== null) {\n return this.header('Content-Type', contentType);\n }\n\n return this;\n }\n\n public asOrganization(value: string): RequestBuilder {\n return this.header('X-Organization-Id', value);\n }\n\n public header(name: string, value: string): RequestBuilder {\n this.#options.headers = this.#options.headers || {};\n this.#options.headers[name] = value;\n\n return this;\n }\n\n public method(method: HttpMethod): RequestBuilder {\n this.#options.method = method;\n\n return this;\n }\n\n public queryString(queryString: QueryString): RequestBuilder {\n this.#query = queryString;\n\n return this;\n }\n\n public async fetch<TResult>(): Promise<TResult> {\n return this.#execute()\n .then(r => r.json());\n }\n\n public async fetchBlob(): Promise<BlobResponse> {\n let response = await this.#execute();\n\n if (response.status !== HttpStatusCode.Ok) {\n const {errors} = await response.json();\n const responseErrors = errors as IResponseErrors;\n throw new RequestError('Request failed.', responseErrors, response.status);\n }\n\n let filename = response.headers.has('content-disposition')\n ? HttpAdapter.parseFileNameFromContentDispositionHeader(response.headers.get('content-disposition'))\n : `download-${formatFileDateTime()}`;\n\n return new BlobResponse(\n await response.blob(),\n filename\n );\n }\n\n public async runAdapter<TResult extends {}>(adapterMethod: (item: object) => TResult): Promise<BaseResponse<TResult>> {\n const {data, response} = await this.#executeSafe<TResult>();\n\n return new BaseResponse(adapterMethod(data), null, response);\n }\n\n public async runArrayAdapter<TResult extends {}>(adapterMethod: (item: object) => TResult): Promise<BaseResponse<TResult[]>> {\n return this.runAdapter<TResult[]>((data: []) => data.map(adapterMethod));\n }\n\n public async runEmpty(): Promise<BaseResponse<never>> {\n return await this.#executeSafe<never>();\n }\n\n public async runPaginatedAdapter<TResult extends {}>(adapterMethod: (item: object) => TResult): Promise<BaseResponse<Paginated<TResult>>> {\n return this.runAdapter<Paginated<TResult>>(response => HttpAdapter.parsePaginatedAdapter(response, adapterMethod));\n }\n\n public async runData<TResult>(): Promise<BaseResponse<TResult>> {\n return await this.#executeSafe<TResult>();\n }\n\n public async runDataKey<TResult extends object, TKey extends keyof TResult = keyof TResult>(key: TKey): Promise<BaseResponse<TResult[TKey]>> {\n const {data, response} = await this.#executeSafe<TResult>();\n\n return new BaseResponse(data[key] as TResult[TKey], null, response);\n }\n\n public async runStatusCode(): Promise<HttpStatusCode> {\n const response = await this.#executeSafe<never>();\n\n return response.statusCode;\n }\n\n async #execute(): Promise<Response> {\n const request = this.#client.onRequest(this);\n\n let path = request.path;\n\n if (request.query !== null) {\n path += `?${request.query.build()}`;\n }\n\n return await fetch(request.client.baseUrl + path, request.options)\n .catch(err => {\n this.#client.onException(err, request);\n throw err;\n });\n }\n\n async #executeSafe<TResult>(): Promise<BaseResponse<TResult>> {\n const response = await this\n .#execute()\n .then(RequestBuilder.#handleResponse<TResult>)\n .then(response => {\n this.#client.onResponse(response);\n return response;\n });\n\n const {errors, statusCode} = response;\n\n if (statusCode < HttpStatusCode.Ok || statusCode >= HttpStatusCode.MultipleChoices) {\n if (!!errors) {\n throw new RequestError('Request failed with errors.', errors, statusCode);\n }\n\n throw new RequestError('Request failed without errors.', {}, statusCode);\n }\n\n return response;\n }\n\n static async #handleResponse<TResult>(response: Response): Promise<BaseResponse<TResult | null>> {\n if (response.status === HttpStatusCode.NoContent) {\n return new BaseResponse(null, null, response);\n }\n\n if (response.headers.has('content-type') && response.headers.get('content-type').startsWith('application/json')) {\n const {data, errors} = await response.json();\n\n return new BaseResponse(data, errors, response);\n }\n\n if (response.status === HttpStatusCode.Unauthorized || response.status === HttpStatusCode.Forbidden) {\n return new BaseResponse(null, null, response);\n }\n\n const data = await response.text();\n\n if (data.length === 0 && response.status >= HttpStatusCode.Ok && response.status < HttpStatusCode.MultipleChoices) {\n return new BaseResponse(null, null, response);\n }\n\n throw new RequestError('Response was not a JSON response.', {}, response.status);\n }\n}\n", "import type { IResponseErrors } from '@/http';\nimport { dto } from '@/decorator';\nimport { HttpStatusCode } from '@/enum';\n\n@dto\nexport class RequestError {\n get errors(): IResponseErrors {\n return this.#errors;\n }\n\n get message(): string {\n return this.#message;\n }\n\n get statusCode(): HttpStatusCode {\n return this.#statusCode;\n }\n\n readonly #errors: IResponseErrors;\n readonly #message: string;\n readonly #statusCode: HttpStatusCode;\n\n constructor(message: string, errors: IResponseErrors, statusCode: HttpStatusCode) {\n this.#errors = errors;\n this.#message = message;\n this.#statusCode = statusCode;\n }\n}\n", "import { HttpStatusCode } from '@/enum';\nimport { RequestError } from '@/http';\n\nexport function isRequestError(obj: unknown): obj is RequestError {\n return obj instanceof RequestError;\n}\n\nexport function isUnsanctionedRequest(statusCode: unknown): boolean {\n if (statusCode instanceof RequestError) {\n statusCode = statusCode.statusCode;\n }\n\n return statusCode === HttpStatusCode.Forbidden || statusCode === HttpStatusCode.Unauthorized;\n}\n"],
5
- "mappings": "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",
6
- "names": ["HttpMethod", "HttpStatusCode", "HttpClient", "HttpClient", "response", "data"]
4
+ "sourcesContent": ["import type { Constructor } from '@/util';\n\nconst isStrict = true;\n\nexport default function <T extends Constructor>(Parent: T): T {\n return class extends Parent {\n constructor(...args: any[]) {\n if (isStrict) {\n throw new Error('Adapters cannot be instantiated.');\n }\n\n super(...args);\n }\n } as T;\n}\n", "export default function (interval: number) {\n return (target: object, method: string, descriptor: PropertyDescriptor) => {\n descriptor.value = debounce(descriptor.value, interval, target);\n };\n}\n\nfunction debounce<F extends ((...args: any[]) => any)>(fn: F, interval: number, $this: object): Function {\n let resolvers = [], rejecters = [], timeout = null;\n\n return (...args: any[]) => {\n clearTimeout(timeout);\n\n timeout = setTimeout(async () => {\n try {\n let result = await fn.apply($this, args);\n resolvers.forEach(resolve => resolve(result));\n } catch (err) {\n rejecters.forEach(reject => reject(err));\n }\n\n resolvers = [];\n rejecters = [];\n }, interval);\n\n return new Promise((resolve, reject) => {\n resolvers.push(resolve);\n rejecters.push(reject);\n });\n };\n}\n", "import { DateTime } from 'luxon';\n\nexport function formatFileDateTime(dateTime?: DateTime): string {\n dateTime = dateTime || DateTime.now();\n\n return dateTime.toFormat('yyyy-MM-dd HH-mm-ss');\n}\n", "export type Constructor<T = {}> = new (...args: any[]) => T;\nexport type Descriptors = Record<string | symbol, TypedPropertyDescriptor<unknown> | PropertyDescriptor>;\n\nexport function getPrototypeChain(obj: Function): Descriptors {\n const entries: Descriptors = {};\n\n do {\n if (obj.name === '') {\n break;\n }\n\n for (const [key, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(obj.prototype))) {\n if (['constructor', 'clone', 'toJSON'].includes(key)) {\n continue;\n }\n\n if (!descriptor.get && !descriptor.set) {\n continue;\n }\n\n entries[key] = descriptor;\n }\n } while (obj = Object.getPrototypeOf(obj));\n\n return entries;\n}\n\nexport function setMutableObjectValue(obj: object, key: symbol | string, value: unknown): void {\n Object.defineProperty(obj, key, {\n configurable: false,\n writable: true,\n value\n });\n}\n\nexport function setObjectMethod(obj: Function, key: string, fn: Function): void {\n obj.prototype[key] = fn;\n}\n\nexport function setObjectValue(obj: object, key: symbol | string, value: unknown): void {\n Object.defineProperty(obj, key, {value});\n}\n", "export const ENABLE_CIRCULAR_LOGGING = false;\nexport const ENABLE_DIRTY_LOGGING = false;\nexport const ENABLE_REACTIVE_LOGGING = false;\nexport const ENABLE_GET_LOGGING = false;\nexport const ENABLE_SET_LOGGING = false;\nexport const OVERRIDE_CONSOLE_LOG = true;\n", "export const ARGS = Symbol();\nexport const CHILDREN = Symbol();\nexport const DESCRIPTORS = Symbol();\nexport const DIRTY = Symbol();\nexport const NAME = Symbol();\nexport const PARENT = Symbol();\nexport const PARENT_KEY = Symbol();\nexport const PROPERTIES = Symbol();\nexport const PROXY = Symbol();\nexport const TRACK = Symbol();\nexport const TRIGGER = Symbol();\n", "import { NAME } from '../symbols';\nimport DtoInstance from '../instance';\n\n/**\n * Checks if the given object is a dto.\n */\nexport default function (obj: unknown): obj is DtoInstance<unknown> {\n return obj && typeof obj === 'object' && obj[NAME];\n}\n", "import isDto from './isDto';\n\n/**\n * Checks if the two given values are equal. When both values are a\n * dto, the check is done by firstly converthing them to JSON.\n */\nexport default function (a: unknown, b: unknown): boolean {\n if (!isDto(a) || !isDto(b)) {\n return a === b;\n }\n\n return JSON.stringify(a) === JSON.stringify(b);\n}\n", "import type DtoInstance from '../instance';\nimport isDto from './isDto';\n\n/**\n * Asserts that the given object is a dto.\n */\nexport default function (obj: unknown): asserts obj is DtoInstance<never> {\n if (!isDto(obj)) {\n throw new Error('@dto assert given object is not a class decorated with @Dto.');\n }\n}\n", "import type DtoInstance from '../instance';\nimport { ENABLE_CIRCULAR_LOGGING } from '@/decorator/dto/constant';\n\ntype CircularMap = WeakMap<DtoInstance<unknown>, (string | symbol)[]>;\nconst CIRCULAR_MAP = Symbol();\n\nexport default function <T extends (...args: any[]) => unknown>(fn: T, arg1: number = 0, arg2?: number): T {\n return function (...args: any[]): unknown {\n const hasMap = CIRCULAR_MAP in fn;\n const map: CircularMap = fn[CIRCULAR_MAP] ??= new WeakMap();\n const primary = args[arg1];\n const secondary = arg2 !== undefined ? args[arg2] : 'self';\n\n if (typeof primary !== 'object') {\n return fn.call(this, ...args);\n }\n\n if (!map.has(primary)) {\n map.set(primary, []);\n }\n\n if (map.get(primary).includes(secondary)) {\n ENABLE_CIRCULAR_LOGGING && console.log(`%c@dto %ccircular protect %cdetected a circular reference`, 'color: #0891b2', 'color: #059669', 'color: #1d4ed8', {fn, primary, secondary});\n return;\n }\n\n map.get(primary).push(secondary);\n\n const result = fn.call(this, ...args);\n\n !hasMap && (delete fn[CIRCULAR_MAP]);\n\n return result;\n } as T;\n}\n", "import assertDto from './assertDto';\n\n/**\n * Clones the given dto.\n */\nexport default function <T>(obj: T): T {\n assertDto(obj);\n return obj.clone() as T;\n}\n", "import { DIRTY } from '../symbols';\nimport assertDto from './assertDto';\n\n/**\n * Checks if the given dto is dirty.\n */\nexport default function (obj: unknown): boolean {\n assertDto(obj);\n return obj[DIRTY];\n}\n", "import { ENABLE_REACTIVE_LOGGING } from '../constant';\nimport { NAME, PARENT, PARENT_KEY, TRIGGER } from '../symbols';\nimport type DtoInstance from '../instance';\nimport circularProtect from './circularProtect';\n\n/**\n * Trigger for when a dto property is being updated.\n */\nconst triggerDto = circularProtect(function (dto: DtoInstance<unknown>, key: string | symbol, value: unknown, oldValue?: unknown): void {\n const trigger = dto[TRIGGER];\n trigger(dto, key, value, oldValue);\n\n ENABLE_REACTIVE_LOGGING && console.log(`%c@dto %c${dto[NAME]} %ctrigger`, 'color: #0891b2', 'color: #059669', 'color: #1d4ed8', key, {dto, value, oldValue});\n\n dto[PARENT] && triggerDto(dto[PARENT], dto[PARENT_KEY], dto[PARENT][dto[PARENT_KEY]]);\n}, 0, 1);\n\nexport default triggerDto;\n", "import { ENABLE_DIRTY_LOGGING } from '../constant';\nimport { CHILDREN, DIRTY, NAME } from '../symbols';\nimport assertDto from './assertDto';\nimport circularProtect from './circularProtect';\nimport isDtoDirty from './isDtoDirty';\nimport triggerDto from './triggerDto';\n\n/**\n * Marks the given dto clean.\n */\nconst markDtoClean = circularProtect(function (obj: unknown): void {\n assertDto(obj);\n\n if (obj[DIRTY]) {\n obj[DIRTY] = false;\n ENABLE_DIRTY_LOGGING && console.log(`%c@dto %c${obj[NAME]} %cdirty`, 'color: #0891b2', 'color: #059669', 'color: #1d4ed8', 'marked clean', {obj});\n triggerDto(obj, DIRTY, false, true);\n }\n\n if (!obj[CHILDREN] || obj[CHILDREN].length === 0) {\n return;\n }\n\n obj[CHILDREN]\n .filter(isDtoDirty)\n .forEach(markDtoClean);\n});\n\nexport default markDtoClean;\n", "import type DtoInstance from '../instance';\nimport isDto from './isDto';\nimport isDtoDirty from './isDtoDirty';\nimport markDtoClean from './markDtoClean';\n\n/**\n * Executes the given function if the given dto is marked dirty.\n */\nexport default async function <T, R = void>(obj: T, fn: (dto: T & DtoInstance<T>) => Promise<R>): Promise<void> {\n if (!isDto(obj) || !isDtoDirty(obj)) {\n return;\n }\n\n await fn(obj);\n markDtoClean(obj);\n}\n", "import type DtoInstance from '../instance';\n\nexport default function <T>(dto: DtoInstance<T>): DtoInstance<T> {\n return (dto as any)?.value ?? dto;\n}\n", "import { DIRTY } from '../symbols';\nimport assertDto from './assertDto';\n\n/**\n * Checks if the given dto is clean.\n */\nexport default function (obj: unknown): boolean {\n assertDto(obj);\n return !obj[DIRTY];\n}\n", "import { ENABLE_DIRTY_LOGGING } from '../constant';\nimport { DIRTY, NAME, PARENT, PARENT_KEY } from '../symbols';\nimport assertDto from './assertDto';\nimport circularProtect from './circularProtect';\nimport triggerDto from './triggerDto';\n\n/**\n * Marks the given dto dirty.\n */\nconst markDtoDirty = circularProtect(function (obj: unknown, key?: string | number): void {\n assertDto(obj);\n\n if (!obj[DIRTY]) {\n obj[DIRTY] = true;\n ENABLE_DIRTY_LOGGING && console.log(`%c@dto %c${obj[NAME]} %cdirty`, 'color: #0891b2', 'color: #059669', 'color: #1d4ed8', 'marked dirty', {obj, key});\n triggerDto(obj, DIRTY, true, false);\n }\n\n if (!obj[PARENT]) {\n return;\n }\n\n markDtoDirty(obj[PARENT], obj[PARENT_KEY]);\n});\n\nexport default markDtoDirty;\n", "import { CHILDREN, PARENT, PARENT_KEY } from '../symbols';\nimport type DtoInstance from '../instance';\n\n/**\n * Creates a parent-child relationship between the given two dtos.\n */\nexport default function (dto: DtoInstance<unknown>, parent: DtoInstance<unknown>, key: string): void {\n parent[CHILDREN] ??= [];\n !parent[CHILDREN].includes(dto) && parent[CHILDREN].push(dto);\n\n dto[PARENT] !== parent && (dto[PARENT] = parent);\n dto[PARENT_KEY] !== key && (dto[PARENT_KEY] = key);\n}\n", "import { PARENT, PARENT_KEY } from '../symbols';\nimport type DtoInstance from '../instance';\nimport isDto from './isDto';\nimport relateDtoTo from './relateDtoTo';\n\n/**\n * Creates relationships between the given value and dto.\n */\nexport default function (dto: DtoInstance<unknown>, key: string, value: unknown): void {\n if (isDto(value)) {\n relateDtoTo(value, dto, key);\n } else if (Array.isArray(value)) {\n if (value.some(isDto)) {\n value\n .filter(isDto)\n .forEach(val => relateDtoTo(val, dto, key));\n }\n\n value[PARENT] = dto;\n value[PARENT_KEY] = key;\n }\n}\n", "import { ENABLE_REACTIVE_LOGGING } from '../constant';\nimport { NAME, TRACK } from '../symbols';\nimport type DtoInstance from '../instance';\n\n/**\n * Tracking for when a dto property is being accessed.\n */\nexport default function trackDto(dto: DtoInstance<unknown>, key: string): void {\n const track = dto[TRACK];\n track(dto, key);\n\n ENABLE_REACTIVE_LOGGING && console.log(`%c@dto %c${dto[NAME]} %ctrack`, 'color: #0891b2', 'color: #059669', 'color: #1d4ed8', key, {dto});\n}\n", "import { CHILDREN, PARENT, PARENT_KEY } from '../symbols';\nimport type DtoInstance from '../instance';\n\n/**\n * Removes a parent-child relationship between the given two dtos.\n */\nexport default function (dto: DtoInstance<unknown>, parent: DtoInstance<unknown>): void {\n if (CHILDREN in parent) {\n const index = parent[CHILDREN].indexOf(dto);\n parent[CHILDREN].splice(index, 1);\n }\n\n dto[PARENT] = undefined;\n dto[PARENT_KEY] = undefined;\n}\n", "import { PARENT, PARENT_KEY } from '../symbols';\nimport type DtoInstance from '../instance';\nimport isDto from './isDto';\nimport unrelateDtoFrom from './unrelateDtoFrom';\n\n/**\n * Removes relationships between the given value and dto.\n */\nexport default function (dto: DtoInstance<unknown>, value: unknown): void {\n if (isDto(value)) {\n unrelateDtoFrom(value, dto);\n } else if (Array.isArray(value)) {\n if (value.some(isDto)) {\n value\n .filter(isDto)\n .forEach(val => unrelateDtoFrom(val, dto));\n }\n\n value[PARENT] = undefined;\n value[PARENT_KEY] = undefined;\n }\n}\n", "import { customRef, markRaw } from 'vue';\nimport type { Constructor } from '@/util';\nimport { ARGS, DIRTY, TRACK, TRIGGER } from './symbols';\nimport DtoInstance from './instance';\nimport arrayProxy from './arrayProxy';\nimport instanceProxy from './instanceProxy';\nimport refProxy from './refProxy';\n\nexport default {\n /**\n * Trap for when a dto is being constructed. Reactivity is provided\n * to all arguments and a proxied custom ref is returned that references\n * the actual dto instance.\n */\n construct(target: Constructor, argsArray: any[], newTarget: Function): DtoInstance<unknown> {\n // note(Bas): This will apply reactivity to any array arguments.\n argsArray = argsArray.map(arg => {\n if (!Array.isArray(arg)) {\n return arg;\n }\n\n return new Proxy(arg, arrayProxy);\n });\n\n const ref = customRef((track, trigger) => {\n const instance = markRaw(Reflect.construct(target, argsArray, newTarget));\n instance[ARGS] = argsArray;\n instance[DIRTY] = false;\n instance[TRACK] = track;\n instance[TRIGGER] = trigger;\n\n const proxied = new Proxy(instance, instanceProxy);\n\n return {\n // note(Bas): track that the dto itself is being accessed.\n get: () => {\n track();\n return proxied;\n },\n\n // note(Bas): setter is never used, but we don't want to\n // cause any errors.\n set: () => void 0\n };\n });\n\n return new Proxy(ref, refProxy) as unknown as DtoInstance<unknown>;\n }\n} satisfies ProxyHandler<Constructor>;\n", "import { markDtoDirty, trackDto, triggerDto } from './helper';\nimport { PARENT, PARENT_KEY, PROXY } from './symbols';\nimport type DtoInstance from './instance';\n\nexport default {\n /**\n * Trap for when a property is deleted from the target. This\n * will mark the parent dto as dirty and trigger an update.\n */\n deleteProperty(target: unknown[], key: string | symbol): boolean {\n Reflect.deleteProperty(target, key);\n\n if (ignored(target, key)) {\n return true;\n }\n\n const dto = target[PARENT] as DtoInstance<unknown>;\n dto && triggerDto(dto, target[PARENT_KEY], dto[target[PARENT_KEY]]);\n dto && markDtoDirty(dto, target[PARENT_KEY]);\n\n return true;\n },\n\n /**\n * Trap for when a property of the target is being accessed. The\n * property access is being tracked for further updates.\n */\n get(target: unknown[], key: string | symbol, receiver: any): unknown {\n if (key === PROXY) {\n return true;\n }\n\n if (ignored(target, key)) {\n return Reflect.get(target, key, receiver);\n }\n\n const dto = target[PARENT] as DtoInstance<unknown>;\n dto && trackDto(dto, target[PARENT_KEY]);\n\n return Reflect.get(target, key);\n },\n\n /**\n * Trap for when a property of the target is being updated. This\n * will mark the parent dto as dirty and trigger an update.\n */\n set(target: unknown[], key: string | symbol, value: unknown, receiver: any) {\n if (ignored(target, key)) {\n return Reflect.set(target, key, value, receiver);\n }\n\n const dto = target[PARENT] as DtoInstance<unknown>;\n dto && triggerDto(dto, target[PARENT_KEY], dto[target[PARENT_KEY]]);\n dto && markDtoDirty(dto, target[PARENT_KEY]);\n\n return Reflect.set(target, key, value);\n }\n} satisfies ProxyHandler<unknown[]>;\n\n/**\n * Checks if the given key should be ignored by the proxy.\n */\nfunction ignored(target: unknown[], key: string | symbol): key is symbol {\n return typeof key === 'symbol' || typeof target[key] === 'function' || key === 'length';\n}\n", "import { ENABLE_GET_LOGGING, ENABLE_SET_LOGGING } from './constant';\nimport { areEqual, markDtoDirty, relateValueTo, trackDto, triggerDto, unrelateValueFrom } from './helper';\nimport { DESCRIPTORS, NAME, PROPERTIES, PROXY } from './symbols';\nimport type DtoInstance from './instance';\nimport arrayProxy from './arrayProxy';\n\nexport default {\n /**\n * Trap for when a dto property is being accessed. The property\n * access is being tracked for further updates. If the dto has\n * any child dtos, a relationship will be added between them.\n */\n get(target: DtoInstance<unknown>, key: string | symbol, receiver: any): unknown {\n if (key === PROXY) {\n return true;\n }\n\n if (typeof key === 'symbol') {\n return Reflect.get(target, key, receiver);\n }\n\n const descriptor = target[DESCRIPTORS][key];\n\n if (!descriptor || !descriptor.get) {\n return Reflect.get(target, key, receiver);\n }\n\n const value = descriptor.get.call(target);\n\n ENABLE_GET_LOGGING && console.log(`%c@dto %c${target[NAME]} %cget`, 'color: #0891b2', 'color: #059669', 'color: #1d4ed8', key);\n trackDto(target, key);\n\n relateValueTo(target, key, value);\n\n return value;\n },\n\n /**\n * Trap for when a descriptor of a dto property is requested.\n */\n getOwnPropertyDescriptor(target: DtoInstance<unknown>, key: string | symbol): PropertyDescriptor | undefined {\n return target[DESCRIPTORS][key];\n },\n\n /**\n * Trap for when the keys of a dto are requested.\n */\n ownKeys(target: DtoInstance<unknown>) {\n return target[PROPERTIES];\n },\n\n /**\n * Trap for when a dto property is being updated. This will\n * mark the dto dirty and trigger an update. If an array is\n * passed, that array will be made reactive as well.\n */\n set(target: DtoInstance<unknown>, key: string | symbol, value: unknown, receiver: any): boolean {\n if (typeof key === 'symbol') {\n return Reflect.set(target, key, value, receiver);\n }\n\n const descriptor = target[DESCRIPTORS][key];\n\n if (!descriptor || !descriptor.set) {\n return Reflect.set(target, key, value, receiver);\n }\n\n const oldValue = descriptor.get?.call(target) ?? undefined;\n\n if (areEqual(value, oldValue)) {\n return true;\n }\n\n unrelateValueFrom(target, oldValue);\n\n if (Array.isArray(value) && !value[PROXY]) {\n value = new Proxy(value, arrayProxy);\n }\n\n ENABLE_SET_LOGGING && console.log(`%c@dto %c${target[NAME]} %cset`, 'color: #0891b2', 'color: #059669', 'color: #1d4ed8', key, {value});\n descriptor.set.call(target, value);\n\n relateValueTo(target, key, value);\n markDtoDirty(target, key);\n triggerDto(target, key, value, oldValue);\n\n return true;\n }\n} satisfies ProxyHandler<DtoInstance<unknown>>;\n", "import type { Ref } from 'vue';\nimport { PROXY } from './symbols';\nimport type DtoInstance from './instance';\n\nexport default {\n /**\n * Trap for when a ref property is being accessed. The property\n * access is being tracked for further updates. If the requested\n * property is not a part of {Ref}, the get is proxied to the\n * underlying dto instance.\n *\n * A little trick with __v_isRef is done here, all the features\n * of refs are used by our dto, but we don't want Vue to treat\n * it as a ref. We return false here to trick Vue.\n */\n get(target: Ref<DtoInstance<unknown>>, key: string | symbol, receiver: any): unknown {\n if (key === '__v_isRef') {\n return false;\n }\n\n if (key === PROXY) {\n return true;\n }\n\n if (key in target) {\n return Reflect.get(target, key, receiver);\n }\n\n return Reflect.get(target.value, key);\n },\n\n /**\n * Trap for when a descriptor of a property is requested, that\n * request is proxied to the underlying dto.\n */\n getOwnPropertyDescriptor(target: Ref<DtoInstance<unknown>>, key: string | symbol): PropertyDescriptor | undefined {\n return Reflect.getOwnPropertyDescriptor(target.value, key);\n },\n\n /**\n * Trap for when the keys of the ref are requested, that request\n * is proxied to the underlying dto.\n */\n ownKeys(target: Ref<DtoInstance<unknown>>) {\n return Reflect.ownKeys(target.value);\n },\n\n /**\n * Trap for when a ref property is being updated. If the property\n * is not part of {Ref}, the set is proxied to the underlying dto\n * instance. In that proxy, the dto will be marked dirty and an\n * update is triggered.\n */\n set(target: Ref<DtoInstance<unknown>>, key: string | symbol, value: unknown, receiver: any): boolean {\n if (key in target) {\n return Reflect.set(target, key, value, receiver);\n }\n\n return Reflect.set(target.value, key, value);\n }\n} satisfies ProxyHandler<Ref<DtoInstance<unknown>>>;\n", "import { assertDto, isDto } from './helper';\nimport type DtoInstance from './instance';\nimport { ARGS, DESCRIPTORS } from './symbols';\n\n/**\n * Returns a clone of the dto.\n */\nexport default function <T>(this: DtoInstance<T>): DtoInstance<T> {\n const instance = this;\n assertDto(instance);\n\n const clone = Reflect.construct(instance.prototype.constructor, instance[ARGS]);\n\n Object.entries(this[DESCRIPTORS])\n .filter(([, descriptor]) => !!descriptor.set)\n .map(([name]) => name)\n .forEach(key => clone[key] = isDto(this[key])\n ? this[key].clone()\n : this[key]);\n\n return clone as DtoInstance<T>;\n}\n", "import { isDto } from './helper';\nimport { DESCRIPTORS } from './symbols';\nimport type DtoInstance from './instance';\n\n/**\n * Fills the dto with the given data.\n */\nexport default function (this: DtoInstance<unknown>, data: Record<string, unknown>): void {\n for (let key in data) {\n const descriptor = this[DESCRIPTORS][key];\n\n if (isDto(this[key]) && typeof data[key] === 'object') {\n this[key].fill(data[key] as Record<string, unknown>);\n } else if (descriptor && descriptor.set) {\n this[key] = data[key];\n }\n }\n}\n", "import { isDto } from './helper';\nimport { PROPERTIES } from './symbols';\nimport type DtoInstance from './instance';\n\n/**\n * Returns the json object representation of the dto.\n */\nexport default function (this: DtoInstance<unknown>): Record<string, unknown> {\n return Object.fromEntries(\n this[PROPERTIES].map(property => {\n let value: unknown = Reflect.get.call(this, this, property, this);\n\n if (isDto(value)) {\n value = value.toJSON();\n }\n\n return [property, value];\n })\n );\n}\n", "import { Constructor, getPrototypeChain, setObjectMethod, setObjectValue } from '@/util';\nimport { OVERRIDE_CONSOLE_LOG } from './constant';\nimport { instance, isDto } from './helper';\nimport { ARGS, DESCRIPTORS, NAME, PROPERTIES } from './symbols';\nimport classProxy from './classProxy';\nimport type DtoInstance from './instance';\nimport clone from './clone';\nimport fill from './fill';\nimport toJSON from './toJSON';\n\n/**\n * Provides reactivity to the decorated class.\n */\nexport default function <T extends Constructor>(clazz: T): T {\n validate(clazz);\n\n const descriptors = Object.freeze(getPrototypeChain(clazz));\n const properties = Object.keys(descriptors);\n\n setObjectValue(clazz.prototype, DESCRIPTORS, descriptors);\n setObjectValue(clazz.prototype, NAME, clazz.name);\n setObjectValue(clazz.prototype, PROPERTIES, properties);\n setObjectValue(clazz, Symbol.hasInstance, (instance: unknown) => typeof instance === 'object' && instance?.[NAME] === clazz.name);\n\n setObjectMethod(clazz, 'clone', clone<T>);\n setObjectMethod(clazz, 'fill', fill);\n setObjectMethod(clazz, 'toJSON', toJSON);\n\n return proxy(clazz);\n}\n\nexport {\n assertDto,\n cloneDto,\n executeIfDtoDirtyAndMarkClean,\n isDto,\n isDtoClean,\n isDtoDirty,\n markDtoClean,\n markDtoDirty,\n relateDtoTo,\n relateValueTo,\n trackDto,\n triggerDto\n} from './helper';\n\nexport const DTO_CLASS_MAP: Record<string, Constructor<DtoInstance<unknown>>> = {};\n\nexport {\n ARGS,\n NAME,\n PROPERTIES\n};\n\nexport type {\n DtoInstance\n};\n\nfunction proxy<T extends Constructor>(clazz: T): T {\n const proxied = new Proxy(clazz, classProxy) as T;\n\n DTO_CLASS_MAP[clazz.name] = proxied as unknown as Constructor<DtoInstance<unknown>>;\n\n return proxied;\n}\n\nfunction validate(clazz: Function): void {\n const parent = Object.getPrototypeOf(clazz.prototype);\n\n if (NAME in parent) {\n throw new Error(`\u26D4\uFE0F @dto ${clazz.name} cannot extend parent @dto ${parent[NAME]}. A non-dto base implementation should be created with separate implementations. TL;DR a class marked as @dto cannot extend another @dto class.`);\n }\n}\n\nif (OVERRIDE_CONSOLE_LOG) {\n const _error = console.error.bind(console);\n const _info = console.info.bind(console);\n const _log = console.log.bind(console);\n const _warn = console.warn.bind(console);\n\n const override = (fn: Function) => (...args: unknown[]) => {\n for (let i = args.length - 1; i >= 0; --i) {\n const arg = args[i];\n\n if (!isDto(arg)) {\n continue;\n }\n\n const dto = instance(arg);\n args.splice(i, 1, `\uD83D\uDCE6 ${dto[NAME]}`, dto.toJSON());\n }\n\n return fn(...args);\n };\n\n console.error = override(_error);\n console.info = override(_info);\n console.log = override(_log);\n console.warn = override(_warn);\n}\n", "import { dto } from '@/decorator';\n\n@dto\nexport class BlobResponse {\n get blob(): Blob {\n return this.#blob;\n }\n\n get name(): string {\n return this.#name;\n }\n\n readonly #blob: Blob;\n readonly #name: string;\n\n constructor(blob: Blob, name: string) {\n this.#blob = blob;\n this.#name = name;\n }\n}\n", "import { dto } from '@/decorator';\n\n@dto\nexport class Paginated<T> {\n get items(): T[] {\n return this.#items;\n }\n\n get page(): number {\n return this.#page;\n }\n\n get pageSize(): number {\n return this.#pageSize;\n }\n\n get pages(): number {\n return this.#pages;\n }\n\n get totalItems(): number {\n return this.#totalItems;\n }\n\n readonly #items: T[];\n readonly #page: number;\n readonly #pageSize: number;\n readonly #pages: number;\n readonly #totalItems: number;\n\n constructor(items: T[], page: number, pageSize: number, pages: number, totalItems: number) {\n this.#items = items;\n this.#page = page;\n this.#pageSize = pageSize;\n this.#pages = pages;\n this.#totalItems = totalItems;\n }\n}\n", "import { adapter } from '@/decorator';\nimport { Paginated } from '@/dto';\nimport { formatFileDateTime } from '@/util';\n\n@adapter\nexport class HttpAdapter {\n public static parsePaginatedAdapter<T>(response: object, adapterMethod: (item: object) => T): Paginated<T> {\n return new Paginated<T>(\n response['items'].map(adapterMethod),\n response['page'],\n response['pageSize'],\n response['pages'],\n response['totalItems']\n );\n }\n\n public static parseFileNameFromContentDispositionHeader(header: string): string {\n if (!header.startsWith('attachment')) {\n return `download-${formatFileDateTime()}`;\n }\n\n let filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\n let matches = filenameRegex.exec(header);\n\n if ((matches?.length || 0) < 2) {\n return `download-${formatFileDateTime()}`;\n }\n\n return matches[1]\n .replaceAll('\\'', '')\n .replaceAll('\\\"', '')\n .replaceAll('\\/', '-')\n .replaceAll('\\:', '-');\n }\n}\n", "export enum HttpMethod {\n Delete = 'DELETE',\n Get = 'GET',\n Head = 'HEAD',\n Options = 'OPTIONS',\n Patch = 'PATCH',\n Post = 'POST',\n Put = 'PUT'\n}\n", "export enum HttpStatusCode {\n Continue = 100,\n SwitchingProtocols = 101,\n Processing = 102,\n\n Ok = 200,\n Created = 201,\n Accepted = 202,\n NonAuthoritativeInformation = 203,\n NoContent = 204,\n ResetContent = 205,\n PartialContent = 206,\n MultiStatus = 207,\n AlreadyReported = 208,\n ImUsed = 226,\n\n MultipleChoices = 300,\n MovedPermanently = 301,\n Found = 302,\n SeeOther = 303,\n NotModified = 304,\n UseProxy = 305,\n SwitchProxy = 306,\n TemporaryRedirect = 307,\n PermanentRedirect = 308,\n\n BadRequest = 400,\n Unauthorized = 401,\n PaymentRequired = 402,\n Forbidden = 403,\n NotFound = 404,\n MethodNotAllowed = 405,\n NotAcceptable = 406,\n ProxyAuthenticationRequired = 407,\n RequestTimeout = 408,\n Conflict = 409,\n Gone = 410,\n LengthRequired = 411,\n PreconditionFailed = 412,\n PayloadTooLarge = 413,\n UriTooLong = 414,\n UnsupportedMediaType = 415,\n RangeNotSatisfiable = 416,\n ExpectationFailed = 417,\n IAmATeapot = 418,\n MisdirectedRequest = 421,\n UnprocessableEntity = 422,\n Locked = 423,\n FailedDependency = 424,\n UpgradeRequired = 426,\n PreconditionRequired = 428,\n TooManyRequests = 429,\n RequestHeaderFieldsTooLarge = 431,\n UnavailableForLegalReasons = 451,\n\n InternalServerError = 500,\n NotImplemented = 501,\n BadGateway = 502,\n ServiceUnavailable = 503,\n GatewayTimeout = 504,\n HttpVersionNotSupported = 505,\n VariantAlsoNegotiates = 506,\n InsufficientStorage = 507,\n LoopDetected = 508,\n NotExtended = 510,\n NetworkAuthenticationRequired = 511\n}\n", "import type { HttpStatusCode } from '@/enum';\n\nexport class BaseResponse<T> {\n get data(): T {\n return this.#data;\n }\n\n get headers(): Headers {\n return this.#response.headers;\n }\n\n get ok(): boolean {\n return this.statusCode >= 200 && this.statusCode < 300;\n }\n\n get response(): Response {\n return this.#response;\n }\n\n get statusCode(): HttpStatusCode {\n return this.#response.status;\n }\n\n readonly #data: T;\n readonly #response: Response;\n\n constructor(data: T, response: Response) {\n this.#data = data;\n this.#response = response;\n }\n}\n", "import { HttpClient, RequestBuilder } from '.';\n\nexport class BaseService {\n protected request(path: string, client?: HttpClient): RequestBuilder {\n return new RequestBuilder(path, client);\n }\n}\n", "import type { BaseResponse, RequestBuilder } from '@/http';\n\nexport class HttpClient {\n get authToken(): string | null {\n return this.#authToken;\n }\n\n set authToken(value: string | null) {\n this.#authToken = value;\n }\n\n get baseUrl(): string {\n return this.#baseUrl;\n }\n\n get timezone(): string | null {\n return this.#timezone;\n }\n\n set timezone(value: string | null) {\n this.#timezone = value;\n }\n\n #authToken: string | null;\n #timezone: string | null;\n readonly #baseUrl: string;\n\n constructor(authToken: string | null, baseUrl: string) {\n this.#authToken = authToken;\n this.#baseUrl = baseUrl;\n this.#timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n }\n\n onException(err: unknown, caller: unknown): void {\n }\n\n onRequest(request: RequestBuilder): RequestBuilder {\n return request;\n }\n\n onResponse(response: BaseResponse<unknown>): void {\n }\n\n static get instance(): HttpClient {\n if (HttpClient.#instance === null) {\n throw new Error('There is currently no HttpClient instance registered. Register one using the HttpClient.register() function.');\n }\n\n return HttpClient.#instance;\n }\n\n static #instance: HttpClient | null = null;\n\n static register(client: HttpClient): void {\n HttpClient.#instance = client;\n }\n}\n", "export class QueryString {\n readonly #builder: URLSearchParams;\n\n constructor() {\n this.#builder = new URLSearchParams();\n }\n\n public build(): string {\n return this.#builder.toString();\n }\n\n public append(name: string, value: QueryStringValue): QueryString {\n return this.#add(this.#builder.append.bind(this.#builder), name, value);\n }\n\n public appendArray(name: string, values: QueryStringValue[] | null): QueryString {\n if (values === undefined || values === null) {\n return this;\n }\n\n values.forEach(value => this.append(name, value));\n\n return this;\n }\n\n public delete(name: string): QueryString {\n this.#builder.delete(name);\n\n return this;\n }\n\n public get(name: string): string | null {\n return this.#builder.get(name);\n }\n\n public getAll(name: string): string[] {\n return this.#builder.getAll(name);\n }\n\n public has(name: string): boolean {\n return this.#builder.has(name);\n }\n\n public set(name: string, value: QueryStringValue): QueryString {\n return this.#add(this.#builder.set.bind(this.#builder), name, value);\n }\n\n #add(fn: ((name: string, value: string) => void), name: string, value: QueryStringValue): QueryString {\n if (!value && value !== false) {\n return this;\n }\n\n switch (typeof value) {\n case 'boolean':\n fn(name, value ? 'true' : 'false');\n break;\n\n case 'number':\n fn(name, value.toString(10));\n break;\n\n case 'string':\n fn(name, value);\n break;\n }\n\n return this;\n }\n\n public static builder(): QueryString {\n return new QueryString();\n }\n}\n\ntype QueryStringValue = boolean | number | string | null;\n", "import { HttpAdapter } from '@/adapter';\nimport { BlobResponse, Paginated } from '@/dto';\nimport { HttpMethod, HttpStatusCode } from '@/enum';\nimport { formatFileDateTime } from '@/util';\nimport { BaseResponse, HttpClient, QueryString, RequestError } from '.';\n\nexport class RequestBuilder {\n get client(): HttpClient {\n return this.#client;\n }\n\n get options(): RequestInit {\n return this.#options;\n }\n\n get path(): string {\n return this.#path;\n }\n\n set path(value: string) {\n this.#path = value;\n }\n\n get query(): QueryString | null {\n return this.#query;\n }\n\n set query(value: QueryString | null) {\n this.#query = value;\n }\n\n readonly #client: HttpClient;\n #path: string;\n #options: RequestInit = {};\n #query: QueryString | null = null;\n\n constructor(path: string, client?: HttpClient) {\n this.#client = client ?? HttpClient.instance;\n this.#options.cache = 'no-cache';\n this.#options.method = HttpMethod.Get;\n this.#path = path;\n }\n\n public bearerToken(token?: string): RequestBuilder {\n token = token ?? this.#client.authToken;\n\n if (token) {\n return this.header('Authorization', `Bearer ${token}`);\n }\n\n if (this.#options.headers && 'Authorization' in this.#options.headers) {\n delete this.#options.headers['Authorization'];\n }\n\n return this;\n }\n\n public body(body: BodyInit | FormData | object | null, contentType: string | null = 'application/octet-stream'): RequestBuilder {\n if (body instanceof FormData) {\n // note: this allows browsers to set formdata with their custom boundary.\n contentType = null;\n } else if (Array.isArray(body) || typeof body === 'object') {\n body = JSON.stringify(body);\n contentType = 'application/json';\n }\n\n this.#options.body = body;\n\n if (contentType !== null) {\n return this.header('Content-Type', contentType);\n }\n\n return this;\n }\n\n public asOrganization(value: string): RequestBuilder {\n return this.header('X-Organization-Id', value);\n }\n\n public header(name: string, value: string): RequestBuilder {\n this.#options.headers = this.#options.headers || {};\n this.#options.headers[name] = value;\n\n return this;\n }\n\n public method(method: HttpMethod): RequestBuilder {\n this.#options.method = method;\n\n return this;\n }\n\n public queryString(queryString: QueryString): RequestBuilder {\n this.#query = queryString;\n\n return this;\n }\n\n public async fetch<TResult>(): Promise<TResult> {\n return this.#execute()\n .then(r => r.json());\n }\n\n public async fetchBlob(): Promise<BlobResponse> {\n let response = await this.#execute();\n\n if (response.status !== HttpStatusCode.Ok) {\n const data = await response.json();\n\n if ('code' in data && 'error' in data && 'error_description' in data) {\n throw new RequestError(data.code, data.error, data.error_description, response.status);\n }\n\n throw new RequestError(-1, 'failed_without_info', 'Request failed without any information from the backend.', response.status);\n }\n\n let filename = response.headers.has('content-disposition')\n ? HttpAdapter.parseFileNameFromContentDispositionHeader(response.headers.get('content-disposition'))\n : `download-${formatFileDateTime()}`;\n\n return new BlobResponse(\n await response.blob(),\n filename\n );\n }\n\n public async runAdapter<TResult extends {}>(adapterMethod: (item: object) => TResult): Promise<BaseResponse<TResult>> {\n const {data, response} = await this.#executeSafe<TResult>();\n\n return new BaseResponse(adapterMethod(data), response);\n }\n\n public async runArrayAdapter<TResult extends {}>(adapterMethod: (item: object) => TResult): Promise<BaseResponse<TResult[]>> {\n return this.runAdapter<TResult[]>((data: []) => data.map(adapterMethod));\n }\n\n public async runEmpty(): Promise<BaseResponse<never>> {\n return await this.#executeSafe<never>();\n }\n\n public async runPaginatedAdapter<TResult extends {}>(adapterMethod: (item: object) => TResult): Promise<BaseResponse<Paginated<TResult>>> {\n return this.runAdapter<Paginated<TResult>>(response => HttpAdapter.parsePaginatedAdapter(response, adapterMethod));\n }\n\n public async runData<TResult>(): Promise<BaseResponse<TResult>> {\n return await this.#executeSafe<TResult>();\n }\n\n public async runDataKey<TResult extends object, TKey extends keyof TResult = keyof TResult>(key: TKey): Promise<BaseResponse<TResult[TKey]>> {\n const {data, response} = await this.#executeSafe<TResult>();\n\n return new BaseResponse(data[key] as TResult[TKey], response);\n }\n\n public async runStatusCode(): Promise<HttpStatusCode> {\n const response = await this.#executeSafe<never>();\n\n return response.statusCode;\n }\n\n async #execute(): Promise<Response> {\n const request = this.#client.onRequest(this);\n\n let path = request.path;\n\n if (request.query !== null) {\n path += `?${request.query.build()}`;\n }\n\n return await fetch(request.client.baseUrl + path, request.options)\n .catch(err => {\n this.#client.onException(err, request);\n throw err;\n });\n }\n\n async #executeSafe<TResult>(): Promise<BaseResponse<TResult>> {\n return await this\n .#execute()\n .then(RequestBuilder.#handleResponse<TResult>)\n .then(response => {\n this.#client.onResponse(response);\n return response;\n });\n }\n\n static async #handleResponse<TResult>(response: Response): Promise<BaseResponse<TResult | null>> {\n if (response.status === HttpStatusCode.NoContent) {\n return new BaseResponse(null, response);\n }\n\n if (response.headers.has('content-type') && response.headers.get('content-type').startsWith('application/json')) {\n const data = await response.json();\n\n if ('code' in data && 'error' in data && 'error_description' in data) {\n throw new RequestError(data.code, data.error, data.error_description, response.status);\n }\n\n return new BaseResponse(data, response);\n }\n\n if (response.status === HttpStatusCode.Unauthorized || response.status === HttpStatusCode.Forbidden) {\n return new BaseResponse(null, response);\n }\n\n const data = await response.text();\n\n if (data.length === 0 && response.status >= HttpStatusCode.Ok && response.status < HttpStatusCode.MultipleChoices) {\n return new BaseResponse(null, response);\n }\n\n throw new RequestError(-1, 'not_a_json_response', 'The response was not a JSON response.', response.status);\n }\n}\n", "import { dto } from '@/decorator';\nimport type { HttpStatusCode } from '@/enum';\n\n@dto\nexport class RequestError {\n get code(): number {\n return this.#code;\n }\n\n get error(): string {\n return this.#error;\n }\n\n get errorDescription(): string {\n return this.#errorDescription;\n }\n\n get statusCode(): HttpStatusCode {\n return this.#statusCode;\n }\n\n readonly #code: number;\n readonly #error: string;\n readonly #errorDescription: string;\n readonly #statusCode: HttpStatusCode;\n\n constructor(code: number, error: string, errorDescription: string, statusCode: HttpStatusCode) {\n this.#code = code;\n this.#error = error;\n this.#errorDescription = errorDescription;\n this.#statusCode = statusCode;\n }\n}\n", "import { HttpStatusCode } from '@/enum';\nimport { RequestError } from '@/http';\n\nexport function isRequestError(obj: unknown): obj is RequestError {\n return obj instanceof RequestError;\n}\n\nexport function isUnsanctionedRequest(statusCode: unknown): boolean {\n if (statusCode instanceof RequestError) {\n statusCode = statusCode.statusCode;\n }\n\n return statusCode === HttpStatusCode.Forbidden || statusCode === HttpStatusCode.Unauthorized;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["_error", "HttpMethod", "HttpStatusCode", "HttpClient", "HttpClient", "data"]
7
7
  }
@@ -1,12 +1,10 @@
1
- import type { IResponseErrors } from '../http';
2
1
  import type { HttpStatusCode } from '../enum';
3
2
  export declare class BaseResponse<T> {
4
3
  #private;
5
4
  get data(): T;
6
- get errors(): IResponseErrors | null;
7
5
  get headers(): Headers;
8
6
  get ok(): boolean;
9
7
  get response(): Response;
10
8
  get statusCode(): HttpStatusCode;
11
- constructor(data: T, errors: IResponseErrors | null, response: Response);
9
+ constructor(data: T, response: Response);
12
10
  }
@@ -1,9 +1,9 @@
1
- import type { IResponseErrors } from '../http';
2
- import { HttpStatusCode } from '../enum';
1
+ import type { HttpStatusCode } from '../enum';
3
2
  export declare class RequestError {
4
3
  #private;
5
- get errors(): IResponseErrors;
6
- get message(): string;
4
+ get code(): number;
5
+ get error(): string;
6
+ get errorDescription(): string;
7
7
  get statusCode(): HttpStatusCode;
8
- constructor(message: string, errors: IResponseErrors, statusCode: HttpStatusCode);
8
+ constructor(code: number, error: string, errorDescription: string, statusCode: HttpStatusCode);
9
9
  }
@@ -1,4 +1,3 @@
1
- export type { IResponseErrors } from './IResponseErrors';
2
1
  export { BaseResponse } from './BaseResponse';
3
2
  export { BaseService } from './BaseService';
4
3
  export { HttpClient } from './HttpClient';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@basmilius/http-client",
3
3
  "description": "Http client for Vue projects.",
4
- "version": "1.0.0",
4
+ "version": "1.1.0",
5
5
  "engines": {
6
6
  "node": ">=20"
7
7
  },
@@ -1,3 +0,0 @@
1
- export interface IResponseErrors {
2
- readonly [key: string]: string[];
3
- }