{"version":3,"sources":["../../src/domain/Typo.ts"],"sourcesContent":["import { View } from '../utils/View';\nimport { FetchOptions, Gateway } from '../types/Gateway';\nimport { Repository } from '../types/Repository';\nimport { Json, JsonValue, toJson } from '../types/Json';\nimport { PageList } from '../types/PageList';\nimport { Id, Key } from '../types/Id';\nimport { when } from '../validation/When';\nimport { Exception } from '../types/Exception';\nimport { List } from '../types/List';\nimport { RouteGateway } from '../services/RouteGateway';\nimport { RouteOptions } from '../services/Api';\n\nexport class Typo<T, Options extends RouteOptions = RouteOptions> extends Repository<T, Options> {\n  constructor(\n    protected view: View<T>,\n    private readonly gateway: Gateway<Options>\n  ) {\n    super();\n  }\n\n  create = (j: Json): T => this.view.from(j);\n\n  all(options?: Options): Promise<PageList<T>> {\n    return this.gateway.all(options).then(js => js.map(this.create));\n  }\n\n  byId(id: Id): Promise<T> {\n    return this.gateway\n      .byId(id)\n      .then(j => when(j).not.isDefined.reject(Exception.DoesNotExist))\n      .then(j => this.create(j));\n  }\n\n  byIds(...ids: Id[]): Promise<List<T>> {\n    return this.gateway.byIds(...ids).then(js => js.map(this.create));\n  }\n\n  byKey(key: Key, options?: Options): Promise<PageList<T>> {\n    return this.gateway.by('key', key, options).then(js => js.map(this.create));\n  }\n\n  by(key: keyof T, value: JsonValue, options?: Options): Promise<PageList<T>> {\n    return this.gateway.by(key.toString(), value, options).then(js => js.map(this.create));\n  }\n\n  search(q: JsonValue, options?: Options): Promise<PageList<T>> {\n    return this.gateway.search(q, options).then(js => js.map(this.create));\n  }\n\n  filter(options?: Options): Promise<PageList<T>> {\n    return this.gateway.filter(options).then(js => js.map(j => this.create(j)));\n  }\n\n  exists(id: Id): Promise<boolean> {\n    return this.gateway.exists(id);\n  }\n}\n\nexport class Agent<T, Options extends FetchOptions = FetchOptions> extends Repository<T, Options> {\n  constructor(private gateway: RouteGateway) {\n    super();\n  }\n\n  all(options?: Options): Promise<PageList<T>> {\n    return this.gateway.all(options) as Promise<PageList<T>>;\n  }\n\n  byId(id: Id): Promise<T> {\n    return this.gateway.byId(id) as Promise<T>;\n  }\n\n  byIds(...ids: Id[]): Promise<List<T>> {\n    return this.gateway.byIds(...ids) as Promise<List<T>>;\n  }\n\n  byKey(key: Key, options?: Options): Promise<PageList<T>> {\n    return this.gateway.by('key', key, options) as Promise<PageList<T>>;\n  }\n\n  by(key: keyof T, value: JsonValue, options?: Options): Promise<PageList<T>> {\n    return this.gateway.by(key.toString(), value, options) as Promise<PageList<T>>;\n  }\n\n  search(q: JsonValue, options?: Options): Promise<PageList<T>> {\n    return this.gateway.search(q, options) as Promise<PageList<T>>;\n  }\n\n  filter(options?: Options): Promise<PageList<T>> {\n    return this.gateway.filter(options) as Promise<PageList<T>>;\n  }\n\n  exists(id: Id): Promise<boolean> {\n    return this.gateway.exists(id);\n  }\n\n  add(t: Partial<T>): Promise<T> {\n    return this.gateway.add(toJson(t)) as Promise<T>;\n  }\n\n  update(id: Id, t: Partial<T>): Promise<T> {\n    return this.gateway.update({ ...toJson(t), id }) as Promise<T>;\n  }\n\n  upsert(id: Id, t: Partial<T>): Promise<T> {\n    return this.gateway.upsert({ ...toJson(t), id }) as Promise<T>;\n  }\n\n  remove(id: Id): Promise<boolean> {\n    return this.gateway.remove(id);\n  }\n}\n"],"mappings":"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","names":[]}