@thisisagile/easy 17.30.2 → 17.30.3
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.
- package/dist/{chunk-IJVBXBNY.mjs → chunk-WORA2446.mjs} +2 -1
- package/dist/{chunk-IJVBXBNY.mjs.map → chunk-WORA2446.mjs.map} +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/services/ViewRouteGateway.mjs +1 -1
- package/dist/utils/View.d.ts +1 -0
- package/dist/utils/View.mjs +1 -1
- package/package.json +1 -1
- package/src/utils/View.ts +1 -0
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/types/Is.ts","../src/types/Primitive.ts","../src/types/Func.ts","../src/types/Constructor.ts","../src/types/IsA.ts","../src/types/Get.ts","../src/types/Array.ts","../src/types/Text.ts","../src/utils/Traverse.ts","../src/types/List.ts","../src/utils/If.ts","../src/types/Object.ts","../src/types/Json.ts","../src/utils/Convert.ts","../src/data/Condition.ts","../src/types/Meta.ts","../src/types/Enum.ts","../src/types/Template.ts","../src/types/ToText.ts","../src/types/Exception.ts","../src/utils/Promise.ts","../src/types/Gateway.ts","../src/validation/When.ts","../src/types/Context.ts","../src/types/Result.ts","../src/types/Results.ts","../src/types/Value.ts","../src/types/Validatable.ts","../src/validation/Validate.ts","../src/types/Try.ts","../src/types/Case.ts","../src/types/PageList.ts","../src/data/InMemoryGateway.ts","../src/data/Database.ts","../src/utils/Property.ts","../src/data/Field.ts","../src/domain/Struct.ts","../src/domain/DateTime.ts","../src/types/IsDate.ts","../src/utils/Seconds.ts","../src/validation/Contraints.ts","../src/domain/Audit.ts","../src/types/Uuid.ts","../src/types/Id.ts","../src/domain/Child.ts","../src/domain/Entity.ts","../src/types/Repository.ts","../src/domain/Repo.ts","../src/domain/Typo.ts","../src/types/Number.ts","../src/types/CacheAge.ts","../src/http/CacheControl.ts","../src/http/ContentType.ts","../src/http/HttpHeader.ts","../src/http/HttpStatus.ts","../src/http/HttpVerb.ts","../src/http/RequestOptions.ts","../src/http/Response.ts","../src/http/RestResult.ts","../src/http/toResponse.ts","../src/process/Scope.ts","../src/process/App.ts","../src/process/Search.ts","../src/process/Manage.ts","../src/process/UseCase.ts","../src/resources/Req.ts","../src/security/Jwt.ts","../src/services/AxiosProvider.ts","../src/services/Api.ts","../src/services/ApiGateway.ts","../src/services/RouteGateway.ts","../src/utils/State.ts","../src/utils/Mapper.ts","../src/services/MappedRouteGateway.ts","../src/types/IsEqual.ts","../src/utils/View.ts","../src/services/ViewRouteGateway.ts","../src/sql/Clause.ts","../src/sql/Column.ts","../src/sql/SqlQuery.ts","../src/sql/Delete.ts","../src/sql/Insert.ts","../src/sql/Join.ts","../src/sql/Select.ts","../src/sql/Update.ts","../src/sql/Count.ts","../src/sql/Table.ts","../src/sql/TableGateway.ts","../src/types/Builder.ts","../src/types/Cache.ts","../src/types/Currency.ts","../src/types/Environment.ts","../src/types/Falsy.ts","../src/types/Indexed.ts","../src/types/Message.ts","../src/types/Nullish.ts","../src/types/Parser.ts","../src/types/Sort.ts","../src/types/Tag.ts","../src/types/Uri.ts","../src/utils/Base64.ts","../src/utils/Loading.ts","../src/utils/Log.ts","../src/utils/Sentence.ts","../src/utils/Wait.ts"],"sourcesContent":["export * from './data/Condition';\nexport * from './data/InMemoryGateway';\nexport * from './data/Database';\nexport * from './data/DataProvider';\nexport * from './data/Field';\nexport * from './data/Query';\nexport * from './data/QueryProvider';\n\nexport * from './domain/Audit';\nexport * from './domain/Child';\nexport * from './domain/DateTime';\nexport * from './domain/Entity';\nexport * from './domain/Struct';\nexport * from './domain/Repo';\nexport * from './domain/Typo';\n\nexport * from './http/CacheControl';\nexport * from './http/ContentType';\nexport * from './http/HttpHeader';\nexport * from './http/HttpStatus';\nexport * from './http/HttpVerb';\nexport * from './http/Request';\nexport * from './http/RequestOptions';\nexport * from './http/RequestProvider';\nexport * from './http/Response';\nexport * from './http/RestResult';\nexport * from './http/toResponse';\n\nexport * from './process/App';\nexport * from './process/Manage';\nexport * from './process/Scope';\nexport * from './process/Search';\nexport * from './process/UseCase';\n\nexport * from './resources/Req';\n\nexport * from './security/Jwt';\n\nexport * from './services/Api';\nexport * from './services/ApiGateway';\nexport * from './services/AxiosProvider';\nexport * from './services/MappedRouteGateway';\nexport * from './services/RouteGateway';\nexport * from './services/ViewRouteGateway';\n\nexport * from './sql/Clause';\nexport * from './sql/Column';\nexport * from './sql/Delete';\nexport * from './sql/Insert';\nexport * from './sql/Join';\nexport * from './sql/SqlQuery';\nexport * from './sql/Select';\nexport * from './sql/Table';\nexport * from './sql/TableGateway';\nexport * from './sql/Update';\n\nexport * from './types/AnyKey';\nexport * from './types/Array';\nexport * from './types/Builder';\nexport * from './types/Cache';\nexport * from './types/CacheAge';\nexport * from './types/Case';\nexport * from './types/Constructor';\nexport * from './types/Context';\nexport * from './types/Currency';\nexport * from './types/Enum';\nexport * from './types/Environment';\nexport * from './types/ErrorOrigin';\nexport * from './types/Exception';\nexport * from './types/Falsy';\nexport * from './types/Func';\nexport * from './types/Gateway';\nexport * from './types/Get';\nexport * from './types/Id';\nexport * from './types/Identity';\nexport * from './types/IdName';\nexport * from './types/Indexed';\nexport * from './types/Is';\nexport * from './types/IsA';\nexport * from './types/IsDate';\nexport * from './types/IsEqual';\nexport * from './types/Json';\nexport * from './types/List';\nexport * from './types/Message';\nexport * from './types/Meta';\nexport * from './types/Nullish';\nexport * from './types/Number';\nexport * from './types/Object';\nexport * from './types/PageList';\nexport * from './types/Parser';\nexport * from './types/Primitive';\nexport * from './types/Repository';\nexport * from './types/Result';\nexport * from './types/Results';\nexport * from './types/Sort';\nexport * from './types/Tag';\nexport * from './types/Template';\nexport * from './types/Text';\nexport * from './types/Try';\nexport * from './types/TypeGuard';\nexport * from './types/Types';\nexport * from './types/Uri';\nexport * from './types/Uuid';\nexport * from './types/Validatable';\nexport * from './types/Value';\n\nexport * from './utils/Base64';\nexport * from './utils/Convert';\nexport * from './utils/If';\nexport * from './utils/Loading';\nexport * from './utils/Log';\nexport * from './utils/Mapper';\nexport * from './utils/Promise';\nexport * from './utils/Property';\nexport * from './utils/Seconds';\nexport * from './utils/State';\nexport * from './utils/Sentence';\nexport * from './utils/Traverse';\nexport * from './utils/View';\nexport * from './utils/Wait';\nexport * from './validation/Contraints';\nexport * from './validation/Validate';\nexport * from './validation/When';\nexport * from './types/ToText';\n","export const isDefined = <T = unknown>(o?: T): o is NonNullable<T> => o !== undefined && o !== null;\n\nexport const isUndefined = (v?: unknown): v is never => v === undefined || v === null;\n\nexport const isEmpty = (o?: unknown): boolean => o === '' || o === null || o === undefined || (isArray(o) && o.length === 0);\n\nexport const isNotEmpty = <T = unknown>(o?: unknown): o is NonNullable<T> => o !== '' && o !== null && o !== undefined && (!isArray(o) || o.length > 0);\n\nexport const isString = (o?: unknown): o is string => o instanceof String || typeof o === 'string';\n\nexport const isIsoDateString = (o?: unknown): o is string =>\n isString(o) && /^\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z)$/.test(o);\n\nexport const isBoolean = (o?: unknown): o is boolean => isDefined(o) && typeof o === 'boolean';\n\nexport const isTrue = (o?: unknown): o is true => (isFunction(o) ? isTrue(o()) : isBoolean(o) ? o : !!o);\n\nexport const isNumber = (o?: unknown): o is number => isDefined(o) && typeof o === 'number' && !Number.isNaN(o);\n\nexport const isObject = (o?: unknown): o is Record<string, unknown> => o != null && typeof o === 'object' && !isArray(o);\n\nexport const isEmptyObject = (o?: unknown): boolean => isObject(o) && Object.getOwnPropertyNames(o).length === 0;\n\nexport const isFunction = (o?: unknown): o is (...params: unknown[]) => unknown => isDefined(o) && typeof o === 'function';\n\nexport const isArray = <T = any>(o?: unknown): o is Array<T> => isDefined(o) && o instanceof Array;\n\nexport const isIn = (o: unknown, values: unknown[]): boolean => isArray(values) && values.some(v => v === o);\n\nexport const isIntersecting = (o?: unknown[], values?: unknown[]): boolean => isArray(o) && isArray(values) && o.some(ov => isIn(ov, values));\n\nexport const isError = (e: unknown): e is Error => isDefined(e) && e instanceof Error;\n\nexport const isNotPresent = (...os: unknown[]): boolean =>\n os.some(\n o =>\n o === null ||\n o === undefined ||\n o === '' ||\n (o instanceof Array && o.length === 0) ||\n (typeof o === 'object' && Object.getOwnPropertyNames(o).length === 0)\n );\n\nexport const isPresent = (...os: unknown[]): boolean => !isNotPresent(...os);\n","import { isIn } from './Is';\n\nexport type Primitive = string | number | bigint | boolean | symbol | null | undefined;\n\nexport const isPrimitive = (v?: unknown): v is Primitive => {\n return v === null || v === undefined || isIn(typeof v, ['string', 'number', 'bigint', 'boolean', 'symbol']);\n};\n","export type Func<T, Args = unknown> = (...args: Args[]) => T;\n\nexport const isFunc = <T, Args>(o?: unknown): o is (...params: Args[]) => T => !!o && typeof o === 'function';\n","import { Get } from './Get';\nimport { isFunc } from './Func';\nimport { isDefined, isFunction } from './Is';\nimport { isPrimitive } from './Primitive';\nimport { Optional } from './Types';\n\nexport type Constructor<T = unknown> = { new (...args: any[]): T };\n\nexport type Construct<Out, In = any> = Get<Out, In> | Constructor<Out>;\n\nexport const isConstructor = <T>(c?: unknown): c is Constructor<T> => (isDefined(c) && isFunc<T, unknown>(c) && c.prototype && c.prototype.constructor) === c;\n\nexport const isInstance = <T>(ctor: Constructor<T>, o?: unknown): o is T => isFunction(ctor) && o instanceof ctor;\n\nexport const ofConstruct = <T>(c: Construct<T>, ...args: unknown[]): T => (isConstructor<T>(c) ? new c(...args) : isFunc<T, unknown>(c) ? c(...args) : c);\n\nexport const toName = (subject?: unknown, postfix = ''): string => (subject as any)?.constructor?.name?.replace(postfix, '').toLowerCase() ?? '';\n\nconst isPromise = <T>(value: unknown): value is Promise<T> => {\n return value instanceof Promise;\n};\n\nexport const on = <T, R>(t: T, f: (t: T) => R): R extends Promise<unknown> ? Promise<T> : T => {\n const result = f(t);\n return (isPromise(result) ? result.then(() => t) : t) as R extends Promise<unknown> ? Promise<T> : T;\n};\n\nexport const use = <T, Out>(t: T, f: (t: T) => Out): Out => f(t);\n\nexport const ifA = <T>(c: Constructor<T>, t?: unknown, alt?: unknown): Optional<T> => (!isPrimitive(t) && t instanceof c ? t : alt ? ifA(c, alt) : undefined);\n\nexport type RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Pick<T, Exclude<keyof T, Keys>> &\n {\n [K in Keys]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<Keys, K>>>;\n }[Keys];\n","import { isPrimitive } from './Primitive';\nimport { Identity } from './Identity';\nimport { use } from './Constructor';\nimport { isDefined, isObject } from './Is';\n\nexport const isA = <T>(t?: unknown, ...properties: (keyof T)[]): t is T => !isPrimitive(t) && properties.every(p => p.toString() in (t as any));\nexport const isAn = isA;\nexport const isIdentity = (by: unknown): by is Identity => use(by as Identity, b => isObject(b) && isDefined(b.id));\n","import { Func, isFunc } from './Func';\n\nexport type Get<T = any, Args = any> = Func<T, Args> | T;\nexport type Predicate<Args = unknown> = Get<boolean, Args>;\nexport const ofGet = <T, Args = any>(g: Get<T, Args>, ...args: Args[]): T => (isFunc<T, Args>(g) ? g(...args) : g);\nexport const ifGet = <T>(pred: Get, valid: Get<T>, invalid: Get<T>): T => (ofGet(pred) ? ofGet(valid) : ofGet(invalid));\nexport type GetProperty<T, Prop> = keyof T | Func<Prop, T>;\nexport const ofProperty = <T, Prop>(t: T, p: GetProperty<T, Prop>): Prop => (isFunc<Prop, T>(p) ? p(t) : ((t as any)[p] as Prop));\n","import { isArray, isDefined } from './Is';\nimport { on, use } from './Constructor';\n\nexport type OneOrMore<T> = T | Array<T>;\nexport type ArrayLike<T> = OneOrMore<T>[];\n\nexport const toArray = <T>(...items: ArrayLike<T>): T[] =>\n items.length > 1 ? (items as T[]) : isArray(items[0]) ? items[0] : isDefined(items[0]) ? [items[0]] : [];\n\nexport const toObject = <T>(key: keyof T, ...items: ArrayLike<T>): Record<string | number | symbol, T> =>\n toArray(...items).reduce((o: any, i) => {\n o[i[key]] = i;\n return o;\n }, {});\n\nexport const array = {\n merge: (first: any[] = [], second: any[] = [], firstKey = 'id', secondKey = 'id'): any[] =>\n first.map(f => ({\n ...f,\n ...second.find(s => isDefined(s[secondKey]) && isDefined(f[firstKey]) && s[secondKey] === f[firstKey]),\n })),\n switch: <T>(items: T[] = [], item: T): T[] =>\n use([...items], res => {\n on(res.indexOf(item), i => (i !== -1 ? res.splice(i, 1) : res.push(item)));\n return res;\n }),\n splitIn: <T>(items: T[] = [], length = 2): T[][] => {\n const res: T[][] = Array.from({ length }, () => []);\n items.forEach((i, index) => res[index % length].push(i));\n return res;\n },\n chunk: <T>(items: T[] = [], length = 2): T[][] => {\n const chunks = Math.ceil(items.length / length);\n const res: T[][] = Array.from({ length: chunks }, () => []);\n items.forEach((i, index) => res[Math.floor(index / chunks)].push(i));\n return res;\n },\n};\n","import { isDefined } from './Is';\nimport { isFunc } from './Func';\nimport { Get, ofGet } from './Get';\n\nexport type Text = { toString(): string };\n\nexport const isText = (t?: unknown): t is Text => isDefined(t) && isFunc<string, any>((t as any).toString);\n\nexport const asString = (t?: unknown, alt: Get<Text> = ''): string => (isText(t) ? t : ofGet(alt)).toString();\n\nexport const replaceAll = (origin: Text, search: Text, replace: Text = ''): string => asString(origin).split(asString(search)).join(asString(replace));\n\nexport const toWords = (input: unknown): string[] => {\n return asString(input)\n .replace(/(\\p{Lower})(\\p{Upper})/gu, '$1 $2')\n .replace(/(\\p{Upper})(\\p{Upper}\\p{Lower})/gu, '$1 $2')\n .split(/[_\\W]+/g)\n .filter(Boolean);\n};\n\nexport const kebab = (s = ''): string => toWords(s).join('-').toLowerCase();\n\nexport const capitalize = (s = ''): string => s.charAt(0).toUpperCase() + s.slice(1);\n","import { AnyKey } from '../types/AnyKey';\n\nexport const traverse = (subject: unknown, property = ''): unknown => {\n subject ??= {};\n const props = property.split('.');\n const p = props.shift() as string;\n return props.length === 0 ? (subject as any)[p] : traverse((subject as any)[p], props.join('.'));\n};\n\nexport const traverseSet = <T>(subject: T, property: AnyKey<T>, value: unknown): unknown => {\n const props = property.split('.');\n const p = props.shift() as string;\n return {\n ...(subject as any),\n [p]: props.length === 0 ? value : traverseSet((subject as any)[p], props.join('.'), value),\n } as T;\n};\n\nexport const accumulate = <T>(items: T[], ...keys: AnyKey<T>[]): T[] =>\n items.map((t, i, arr) => {\n const acc = keys.reduce(\n (acc, v) => traverseSet(acc, v, i === 0 ? traverse(t, v) : (traverse(arr[i - 1], v) as number) + (traverse(t, v) as number)) as T,\n t\n );\n arr[i] = acc;\n return acc;\n });\n","import { ArrayLike, toArray } from './Array';\nimport { Constructor, on, use } from './Constructor';\nimport type { Json } from './Json';\nimport { isArray, isDefined, isEmpty } from './Is';\nimport { isA } from './IsA';\nimport { Get, GetProperty, ofGet, ofProperty } from './Get';\nimport type { Id } from './Id';\nimport { asString } from './Text';\nimport { Optional } from './Types';\nimport { ifDefined, ifTrue } from '../utils/If';\nimport { AnyKey } from './AnyKey';\nimport { traverse } from '../utils/Traverse';\nimport { Indexed } from './Indexed';\n\ntype Pred<T> = (value: T, index: number, obj: T[]) => unknown;\n\nexport class List<T = unknown> extends Array<T> {\n get ids(): List<Id> {\n return this.mapDefined(i => (i as any).id as Id);\n }\n\n get indexed(): List<Indexed<T>> {\n return this.map((v, index) => ({ ...v, index }));\n }\n\n isSubSetOf(...items: ArrayLike<T>): boolean {\n return this.diff(items).length === 0;\n }\n\n isSuperSetOf(...items: ArrayLike<T>): boolean {\n return this.length > items.length && toList(...items).isSubSetOf(...this);\n }\n\n isIntersectingWith(...items: ArrayLike<T>): boolean {\n return this.intersect(items).length > 0;\n }\n\n isDisjointWith(...items: ArrayLike<T>): boolean {\n return !this.isIntersectingWith(...items);\n }\n\n areEqual(...items: ArrayLike<T>): boolean {\n return this.isSubSetOf(...items) && toList(...items).isSubSetOf(...this);\n }\n\n asc(p: GetProperty<T, any>): List<T> {\n return this.sort((e1, e2) => (ofProperty(e1, p) > ofProperty(e2, p) ? 1 : -1));\n }\n\n desc(p: GetProperty<T, any>): List<T> {\n return this.sort((e1, e2) => (ofProperty(e1, p) < ofProperty(e2, p) ? 1 : -1));\n }\n\n first(p?: Pred<T>, params?: unknown): T {\n return (p ? this.find(p, params) : this[0]) as T;\n }\n\n firstValue<V>(f: (t: T) => V, alt?: Get<V, T>): Optional<V> {\n return ifDefined(\n this.first(t => !!f(t)),\n f,\n v => ofGet(alt, v)\n );\n }\n\n isFirst(value: T): boolean {\n return value === this.first();\n }\n\n next(p?: Pred<T>, params?: unknown): T {\n return p ? this[this.findIndex(p, params) + 1] : this[0];\n }\n\n prev(p?: Pred<T>, params?: unknown): T {\n return p ? this[this.findIndex(p, params) - 1] : this[0];\n }\n\n last(p?: Pred<T>, params?: unknown): T {\n return p ? this.filter(p, params).last() : this[this.length - 1];\n }\n\n isLast(value: T): boolean {\n return value === this.last();\n }\n\n overlaps(...items: ArrayLike<T>): boolean {\n return toList<T>(...items).some(i => this.some(t => i === t));\n }\n\n diff(others: ArrayLike<T>): List<T> {\n return this.filter(i => !others.includes(i));\n }\n\n diffByKey<U = T>(others: ArrayLike<U>, key: keyof T & keyof U): List<T> {\n return this.filter((i: any) => !others.some((o: any) => o[key] === i[key]));\n }\n\n symmetricDiff(others: ArrayLike<T>): List<T> {\n return this.diff(others).concat(toList<T>(...others).diff(this));\n }\n\n symmetricDiffByKey(others: ArrayLike<T>, key: keyof T): List<T> {\n return this.diffByKey(others, key).concat(toList<T>(...others).diffByKey(this, key));\n }\n\n intersect(others: ArrayLike<T>): List<T> {\n return this.filter(i => others.includes(i));\n }\n\n intersectByKey<U>(others: ArrayLike<U>, key: keyof T & keyof U): List<T> {\n return this.filter((i: any) => others.some((o: any) => o[key] === i[key]));\n }\n\n intersectBy<U>(others: ArrayLike<U>, f: (value: T, value2: U) => boolean): List<T> {\n return this.filter(i => others.some(o => f(i, o as U)));\n }\n\n accumulate(...keys: (keyof T)[]): List<T> {\n return this.map((d, i, arr) => {\n const acc = keys.reduce((acc, v) => {\n (acc as any)[v] = i === 0 ? d[v] : (arr[i - 1][v] as number) + (d[v] as number);\n return acc;\n }, d);\n arr[i] = acc;\n return acc;\n });\n }\n\n toJSON(): Json[] {\n return this.reduce((a, i) => {\n a.push(JSON.parse(JSON.stringify(i ?? {})));\n return a;\n }, new Array<Json>());\n }\n\n map<U>(f: (value: T, index: number, array: T[]) => U, params?: unknown): List<U> {\n return toList<U>(super.map(f, params));\n }\n\n flatMap<U, This = unknown>(f: (this: This, value: T, index: number, array: T[]) => ReadonlyArray<U> | U, params?: This): List<U> {\n return toList<U>(super.flatMap(f, params));\n }\n\n mapDefined<U>(f: (value: T, index: number, array: T[]) => U, params?: unknown): List<NonNullable<U>> {\n return this.map(f, params).defined();\n }\n\n mapAsync(f: (i: T) => Promise<T>): Promise<List<T>> {\n return Promise.all(super.map(e => f(e))).then(a => toList<T>(a));\n }\n\n mapSerial<U>(f: (i: T) => Promise<U>): Promise<List<U>> {\n return super.reduce((p, item) => p.then(results => on(results, async r => r.push(await f(item)))), Promise.resolve(toList<U>()));\n }\n\n distinct(): List<T> {\n return this.filter((i, index) => this.indexOf(i) === index);\n }\n\n distinctByKey(key: keyof T): List<T> {\n const seen = new Set<T[keyof T]>();\n return this.filter(item => !seen.has(item[key]) && seen.add(item[key]));\n }\n\n distinctByValue(): List<T> {\n const seen = new Set<string>();\n return this.filter(item => !seen.has(JSON.stringify(item)) && seen.add(JSON.stringify(item)));\n }\n\n filter(p: Pred<T>, params?: unknown): List<T> {\n return toList<T>(super.filter(p, params));\n }\n\n sum(p: (t: T) => number): number {\n return this.reduce((sum: number, i) => sum + p(i), 0);\n }\n\n max(p: (value: T) => any): T;\n\n max(key: keyof T): T;\n\n max(p: keyof T | ((value: T) => any)): T {\n return typeof p === 'function' ? this.sort((e1, e2) => (p(e1) < p(e2) ? 1 : -1)).first() : this.desc(p).first();\n }\n\n min(key: keyof T): T;\n\n min(p: (value: T) => any): T;\n\n min(p: keyof T | ((value: T) => any)): T {\n return typeof p === 'function' ? this.sort((e1, e2) => (p(e1) > p(e2) ? 1 : -1)).first() : this.asc(p).first();\n }\n\n byId(id: Id): T {\n return this.first(i => asString((i as any).id) === asString(id));\n }\n\n byKey(key: keyof T, value: unknown): T {\n return this.first(i => i[key] == value);\n }\n\n add(...items: ArrayLike<T>): this {\n super.push(...toArray(...items));\n return this;\n }\n\n concat(...items: ConcatArray<T>[]): List<T>;\n\n concat(...items: (T | ConcatArray<T>)[]): List<T>;\n\n concat(...items: (T | ConcatArray<T>)[]): List<T> {\n return toList<T>(super.concat(...items));\n }\n\n reverse(): List<T> {\n return toList<T>(super.reverse());\n }\n\n splice(start: number, deleteCount?: number): List<T>;\n\n splice(start: number, deleteCount: number, ...items: T[]): List<T>;\n\n splice(start: number, deleteCount: number, ...items: T[]): List<T> {\n return toList<T>(super.splice(start, deleteCount, ...items));\n }\n\n remove(item: T): List<T> {\n const index = this.indexOf(item);\n if (index > -1) {\n this.splice(index, 1);\n }\n return this;\n }\n\n replace(key: keyof T, item: T): List<T> {\n const index = this.findIndex(i => i[key] === item?.[key]);\n ifTrue(index != -1, () => this.splice(index, 1, item));\n return this;\n }\n\n switch(item: T): List<T> {\n return this.includes(item) ? this.remove(item) : this.add(item);\n }\n\n switchOn<U = T>(item: U, on: AnyKey<U>): List<T>;\n\n switchOn<T>(item: T, on: Pred<T>): List<T>;\n\n switchOn<U = T>(item: T, on: AnyKey<U> | Pred<T>): List<T> {\n return use(typeof on === 'function' ? this.find(on) : use(traverse(item, on), v => this.find(i => traverse(i, on) === v)), i =>\n i ? this.remove(i) : this.add(item)\n );\n }\n\n defined(): List<NonNullable<T>> {\n return this.reduce((l, v) => (isDefined(v) ? l.add(v) : l), toList<NonNullable<T>>());\n }\n\n toObject(key: keyof T, options: { deleteKey?: boolean } = {}): Record<string | number | symbol, T> {\n return this.reduce((o: any, i) => {\n o[i[key]] = i;\n if (options.deleteKey) delete o[i[key]][key];\n return o;\n }, {});\n }\n\n toObjectList(key: keyof T): Record<string | number | symbol, List<T>> {\n return this.reduce(\n (a, t) => {\n const k = t[key] as unknown as string | number | symbol;\n a[k] = a[k] ?? toList();\n a[k].push(t);\n return a;\n },\n {} as Record<string | number | symbol, List<T>>\n );\n }\n\n orElse(...alt: ArrayLike<T>): Optional<List<T>> {\n return !isEmpty(this) ? this : !isEmpty(...alt) ? toList<T>(...alt) : undefined;\n }\n\n weave(insertFrom: T[], interval: number): this {\n for (let i = interval, n = 0; i <= this.length && n < insertFrom.length; i += interval + 1) {\n this.splice(i, 0, insertFrom[n++]);\n }\n return this;\n }\n\n slice(start?: number, end?: number): List<T> {\n return toList(super.slice(start, end));\n }\n\n none(p: (t: T) => boolean): boolean {\n return !this.some(p);\n }\n\n chunk(chunkSize: number): List<List<T>> {\n return this.reduce((acc, _, index) => (index % chunkSize === 0 ? on(acc, a => a.push(this.slice(index, index + chunkSize))) : acc), toList<List<T>>());\n }\n\n //we needed to add U because of a Typescript issue with generics\n update<U = T>(p: Pred<T>, val: T | ((v: U) => T)): List<T> {\n return this.map((v, i, a) => (p(v, i, a) ? ofGet<T>(val, v, i, a) : v));\n }\n\n updateFirst<U = T>(p: Pred<T>, val: T | ((v: U) => T)) {\n const index = this.findIndex(p);\n return this.update((t, i) => p(t, i, this) && i == index, val);\n }\n\n updateFirstById<U = T>(id: Id, val: T | ((v: U) => T)) {\n return this.updateFirst(i => asString((i as any)?.id) === asString(id), val);\n }\n\n updateById<U = T>(id: Id, val: T | ((v: U) => T)) {\n return this.update(i => asString((i as any)?.id) === asString(id), val);\n }\n}\n\nexport const toList = <T = unknown>(...items: ArrayLike<T>): List<T> => new List<T>().add(...items);\n\nexport const isList = <T>(l?: unknown): l is List<T> => isDefined(l) && isArray(l) && isA<List<T>>(l, 'first', 'last', 'asc', 'desc');\n\nexport const asList = <T>(c: Constructor<T>, items: unknown = []): List<T> => toList<T>(toArray(items).map(i => new c(i)));\n\nexport const maxValue = <T>(l: List<T>, key: keyof T): T[keyof T] | undefined => l.desc(key).first()?.[key];\n\nexport const minValue = <T>(l: List<T>, key: keyof T): T[keyof T] | undefined => l.asc(key).first()?.[key];\n","import { isDefined, isNotEmpty, isPresent, isTrue } from '../types/Is';\nimport { Optional } from '../types/Types';\nimport { Construct, ofConstruct, use } from '../types/Constructor';\nimport { OneOrMore } from '../types/Array';\nimport { toList } from '../types/List';\n\nexport function ifTrue<Out, In = unknown>(o: unknown, f: Construct<Out, NonNullable<In>>, alt: Construct<Out>): Out;\nexport function ifTrue<Out, In = unknown>(o: unknown, f: Construct<Out, NonNullable<In>>, alt?: Construct<Out>): Optional<Out>;\nexport function ifTrue<Out, In = unknown>(o: unknown, f: Construct<Out, NonNullable<In>>, alt?: Construct<Out>): Optional<Out> {\n return isTrue(o) ? ofConstruct(f, o) : ofConstruct(alt, o);\n}\n\nexport function ifFalse<Out, In = unknown>(o: unknown, f: Construct<Out, NonNullable<In>>, alt: Construct<Out>): Out;\nexport function ifFalse<Out, In = unknown>(o: unknown, f: Construct<Out, NonNullable<In>>, alt?: Construct<Out>): Optional<Out>;\nexport function ifFalse<Out, In = unknown>(o: unknown, f: Construct<Out, NonNullable<In>>, alt?: Construct<Out>): Optional<Out> {\n return !isTrue(o) ? ofConstruct(f, o) : ofConstruct(alt, o);\n}\n\nexport function ifDefined<Out, In = unknown>(o: Optional<In>, f: Construct<Out, NonNullable<In>>, alt: Construct<Out>): Out;\nexport function ifDefined<Out, In = unknown>(o: Optional<In>, f: Construct<Out, NonNullable<In>>, alt?: Construct<Out>): Optional<Out>;\nexport function ifDefined<Out, In = unknown>(o: Optional<In>, f: Construct<Out, NonNullable<In>>, alt?: Construct<Out>): Optional<Out> {\n return isDefined(o) ? ofConstruct(f, o) : ofConstruct(alt);\n}\n\nexport function ifNotEmpty<Out, In = unknown>(o: In, f: Construct<Out, NonNullable<In>>, alt: Construct<Out>): Out;\nexport function ifNotEmpty<Out, In = unknown>(o: In, f?: Construct<Out, NonNullable<In>>, alt?: Construct<Out>): Optional<Out>;\nexport function ifNotEmpty<Out, In = unknown>(o: In, f: Construct<Out, NonNullable<In>>, alt?: Construct<Out>): Optional<Out>;\nexport function ifNotEmpty<Out, In = unknown>(o: In, f: Construct<Out, NonNullable<In>> = o => o as Out, alt?: Construct<Out>): Optional<Out> {\n return isNotEmpty(o) ? ofConstruct(f, o) : ofConstruct(alt, o);\n}\n\nexport function ifEither<Out, In = unknown>(os: OneOrMore<In>, f: Construct<Out, NonNullable<In>>, alt: Construct<Out>): Out;\nexport function ifEither<Out, In = unknown>(os: OneOrMore<In>, f?: Construct<Out, NonNullable<In>>, alt?: Construct<Out>): Optional<Out>;\nexport function ifEither<Out, In = unknown>(os: OneOrMore<In>, f: Construct<Out, NonNullable<In>>, alt?: Construct<Out>): Optional<Out>;\nexport function ifEither<Out, In = unknown>(os: OneOrMore<In>, f: Construct<Out, NonNullable<In>> = o => o as Out, alt?: Construct<Out>): Optional<Out> {\n return use(\n toList(os).first(o => isPresent(o)),\n o => (isDefined(o) ? ofConstruct(f, o) : ofConstruct(alt, o))\n );\n}\n","import { List, toList } from './List';\nimport { ifDefined } from '../utils/If';\n\nexport type Entry<T = unknown> = [key: string, value: T];\n\nexport function entries<T = unknown>(subject: { [p: string]: T } | ArrayLike<T>): List<Entry<T>> {\n return ifDefined(\n subject,\n () => toList<Entry<T>>([...Object.entries(subject), ...Object.entries(Object.getPrototypeOf(subject) ?? {})] as Entry<T>[]),\n () => toList<Entry<T>>()\n );\n}\n\nexport function values<T = unknown>(subject: { [p: string]: T } | ArrayLike<T>): List<T> {\n return toList([...Object.values<T>(subject), ...Object.values<T>(Object.getPrototypeOf(subject) ?? {})]);\n}\n\nexport function keys<T = unknown>(subject: { [p: string]: T } | ArrayLike<T>): List<string> {\n return toList([...Object.keys(subject), ...Object.keys(Object.getPrototypeOf(subject) ?? {})]);\n}\n\nexport function extractKeys<T extends Record<string | number, unknown>, K extends keyof T>(\n obj: T,\n keys: K[] | readonly (keyof T)[]\n): {\n keys: Pick<T, K>;\n} & Omit<T, K> {\n return keys\n .filter((k): k is K => k in obj)\n .reduce(\n (acc, key) => {\n (acc.keys as T)[key] = obj[key];\n delete acc[key];\n return acc;\n },\n { keys: {} as Pick<T, K>, ...obj }\n );\n}\n","import { isA } from './IsA';\nimport { isDefined, isEmpty, isObject } from './Is';\nimport { Get, ofGet } from './Get';\nimport { ifDefined } from '../utils/If';\nimport { TypeGuard } from './TypeGuard';\nimport { entries } from './Object';\n\nexport type JsonValue = string | number | boolean | null | Json | JsonValue[];\nexport type Json = { [key: string]: JsonValue };\n\nexport const isJson: TypeGuard<{ toJSON: () => Json }> = (subject?: unknown): subject is { toJSON: () => Json } =>\n isA<{ toJSON: () => Json }>(subject, 'toJSON');\n\nexport const json = {\n parse: <T extends Json = Json>(subject: unknown): T => JSON.parse(JSON.stringify(subject ?? {})),\n merge: (...subjects: unknown[]): Json => json.parse(subjects.map(s => asJson(s, s => json.parse(s))).reduce((js, j) => ({ ...js, ...j }), {})),\n delete: <T extends Json = Json>(subject: T, key: string): T => {\n ifDefined(subject, () => delete (subject as any)[key]);\n return subject;\n },\n set: <T extends Json = Json>(subject: T, key = '', value?: unknown): T =>\n isEmpty(key) ? subject : value !== undefined ? { ...(subject as any), ...{ [key]: value as JsonValue } } : json.delete(subject, key),\n omit: <T extends Json = Json>(subject: T, ...keys: string[]): T => keys.reduce((js, k) => json.delete(js, k), json.parse<T>(subject)),\n pick: <T extends Json = Json>(subject: T, ...keys: string[]): T => keys.reduce((js, k) => json.set(js, k, (subject as any)[k]), {} as T),\n defaults: <T extends Json = Json>(options: Partial<T> = {}, defaults: Partial<T> = {}): T => json.merge(defaults, options) as T,\n isSubset: (subject: Json, subset: Json): boolean => !entries(subset).some(([k, v]) => subject[k] !== v),\n split: <T extends Record<string, unknown>, K extends string = 'extracted'>(\n t: T,\n keys: readonly (keyof T)[],\n prop: K = 'extracted' as K\n ): {\n [P in K]: Partial<T>;\n } => {\n const extracted = {} as Partial<T>;\n const rest = { ...t };\n keys.forEach(key => {\n if (key in t) {\n ifDefined(t[key], v => (extracted[key] = v));\n delete rest[key as string];\n }\n });\n return { [prop]: extracted, ...rest };\n },\n};\n\nexport const toJson = json.merge;\n\nexport const asJson = (j?: unknown, alt: Get<Json> = {}): Json => (isJson(j) ? j.toJSON() : isObject(j) ? (j as Json) : ofGet(alt, j));\n\nclass Any<T extends Json> {\n constructor(readonly value: T) {}\n\n merge = (...subjects: T[]): Any<T> => any<T>(json.merge(this.value, ...subjects) as T);\n delete = (key: keyof T): Any<T> => any<T>(json.delete<T>(this.value, key as string));\n omit = (...keys: (keyof T)[]): Any<T> => any<T>(json.omit<T>(this.value, ...(keys as string[])));\n set = (key: keyof T, value?: unknown): Any<T> => any<T>(json.set(this.value, key as string, value));\n\n toJSON(): Json {\n return this.value;\n }\n}\n\nexport const takeFirstKey = (j: unknown, alt: string = ''): string => entries(asJson(j)).first(([, v]) => isDefined(v))?.[0] ?? alt;\n\nexport const takeFirst = <K extends string = string, T = any>(j: Record<K, T>): [K, T] => entries(j).first(([, v]) => isDefined(v)) as [K, T];\n\nexport const any = <T extends Json = Json>(value: T): Any<T> => new Any<T>(value);\n","import { asString } from '../types/Text';\n\nexport class Convert<From = unknown, To = unknown> {\n constructor(\n public readonly from: (f: From) => To,\n public readonly to: (t: To) => From\n ) {}\n}\n\nexport const convert = {\n default: new Convert<any, any>(\n a => a,\n a => a\n ),\n ignore: new Convert<any, any>(\n () => undefined,\n () => undefined\n ),\n toBool: {\n fromNumber: new Convert<boolean, number>(\n b => (b ? 1 : 0),\n n => n !== 0\n ),\n fromString: new Convert<boolean, string>(\n b => (b ? 'true' : 'false'),\n s => s === 'true'\n ),\n },\n toDate: {\n fromString: new Convert<string, string>(\n s => new Date(s).toISOString(),\n s => s\n ),\n },\n toNumber: {\n fromString: new Convert<number, string>(\n n => asString(n),\n s => parseInt(s)\n ),\n },\n};\n","import { json, Json, JsonValue } from '../types/Json';\nimport { Sort } from '../types/Sort';\nimport { convert, Convert } from '../utils/Convert';\nimport { isDefined } from '../types/Is';\n\nexport class Condition {\n constructor(\n readonly key: string,\n readonly operator: string,\n readonly value: unknown\n ) {}\n\n and = (...others: Condition[]): LogicalCondition => new LogicalCondition('and', [this, ...others]);\n or = (...others: Condition[]): LogicalCondition => new LogicalCondition('or', [this, ...others]);\n\n toJSON(): Json {\n return { [this.key]: { [`$${this.operator}`]: json.parse(this.value) } };\n }\n}\n\nexport class LogicalCondition {\n constructor(\n readonly operator: string,\n readonly conditions: Condition[]\n ) {}\n\n toJSON(): Json {\n return { [`$${this.operator}`]: this.conditions.map(c => c.toJSON()) };\n }\n}\n\nexport class SortCondition extends Condition implements Sort {\n constructor(\n readonly key: string,\n readonly value: -1 | 1\n ) {\n super(key, '', value);\n }\n\n toJSON(): Json {\n return { [this.key]: this.value };\n }\n}\n\nexport const toCondition = (field: string, operator: string, value: unknown, conv: Convert = convert.default): Condition =>\n new Condition(field, operator, conv.from(value) as JsonValue);\n\nexport const isSortCondition = (s?: unknown): s is SortCondition => isDefined(s) && s instanceof SortCondition;\n","import 'reflect-metadata';\nimport { List, toList } from './List';\nimport { isDefined } from './Is';\nimport { on, use } from './Constructor';\nimport { Optional } from './Types';\nimport { Entry, entries, values } from './Object';\n\ntype MetaParseOptions = { initial?: any; skipUndefined?: boolean };\n\nclass ClassMeta {\n constructor(\n readonly subject: any,\n private readonly data: any = (subject.prototype ?? subject).constructor\n ) {}\n\n get = <T>(key: string): T => Reflect.getMetadata(key, this.data) as T;\n\n set = <T>(key: string, value: T): T => {\n Reflect.defineMetadata(key, value, this.data);\n return value;\n };\n\n entries = <T = unknown>(): List<Entry<T>> => entries<T>(this.subject);\n\n parse = <Out, Value>(f: (v: Value) => Out, options: MetaParseOptions = {}): Record<string, Out> => {\n const { initial = {}, skipUndefined = false } = options;\n return this.entries<Value>().reduce((a, [k, val]) => use(f(val), v => (isDefined(v) || !skipUndefined ? on(a, a => (a[k] = v)) : a)), initial);\n };\n\n properties = (key?: string): List<PropertyMeta> =>\n toList([...Object.getOwnPropertyNames(this.subject), ...Object.getOwnPropertyNames(Object.getPrototypeOf(this.subject))])\n .map(p => this.property(p))\n .filter(p => (key ? p.get(key) : p));\n\n keys = <T = any>(key: string): List<T> =>\n this.properties()\n .map(p => p.get<T>(key))\n .reduce((list, u) => (u ? list.add(u) : list), toList<T>());\n\n values = <T = unknown>(): List<T> => values<T>(this.subject);\n\n property = (property: string | symbol): PropertyMeta => new PropertyMeta(this.subject, property);\n}\n\nclass PropertyMeta {\n constructor(\n readonly subject: any,\n readonly property: string | symbol,\n private readonly data = Reflect.getMetadata(property, subject)\n ) {}\n\n get value(): any {\n return this.subject[this.property];\n }\n\n get = <T>(key: string): Optional<T> => (isDefined(this.data) && isDefined(this.data[key]) ? (this.data[key] as T) : undefined);\n\n set = <T>(key: string, value: T): T => {\n Reflect.defineMetadata(this.property, { ...this.data, [key]: value }, this.subject);\n return value;\n };\n}\n\nexport const meta = (subject: unknown): ClassMeta => new ClassMeta(subject ?? {});\n","import { Id } from './Id';\nimport { List, toList } from './List';\nimport { isAn } from './IsA';\nimport { meta } from './Meta';\nimport { isDefined, isFunction } from './Is';\nimport { Validatable } from './Validatable';\nimport { JsonValue } from './Json';\nimport { Get, ofGet } from './Get';\nimport { TypeGuard } from './TypeGuard';\n\nexport type EnumConstructor<E = unknown> = {\n byIds<E extends Enum>(ids: Id[]): List<E>;\n byId<E extends Enum>(id: Id, alt?: Get<E, unknown>): E;\n isEnum: boolean;\n};\n\nexport const isEnumConstructor = <E = unknown>(c: unknown): c is EnumConstructor<E> => isFunction(c) && (c as any).isEnum;\n\nexport abstract class Enum implements Validatable {\n static isEnum = true;\n\n protected constructor(\n readonly name: string,\n readonly id: Id = name.toLowerCase(),\n readonly code: string = id.toString()\n ) {}\n\n get isValid(): boolean {\n return isDefined(this.id);\n }\n\n static all<E extends Enum>(): List<E> {\n return meta(this.allTuple<E>()).values<E>();\n }\n\n static filter<E extends Enum>(p: (value: E, index: number, array: E[]) => unknown, params?: unknown): List<E> {\n return this.all<E>().filter(p, params);\n }\n\n static first<E extends Enum>(p?: (value: E, index: number, array: E[]) => unknown, params?: unknown): E {\n return this.all<E>().first(p, params);\n }\n\n static byIds<E extends Enum>(ids: Id[] = []): List<E> {\n return toList(ids)\n .mapDefined(id => this.byId<E>(id))\n .distinct();\n }\n\n static byId<E extends Enum>(id: Id, alt?: Get<E, unknown>): E {\n return this.allTuple<E>()[id] ?? ofGet(alt);\n }\n\n protected static allTuple<E extends Enum>(): Record<Id, E> {\n return meta(this).get(`all-${this.name}`) ?? meta(this).set(`all-${this.name}`, meta(this).values<E>().filter(isEnum).toObject('id'));\n }\n\n equals<E extends Enum>(other: E | Id): other is E {\n return this.id === (isEnum(other) ? other.id : other);\n }\n\n isIn<E extends Enum>(...items: E[] | Id[]): boolean {\n return items.some(i => this.equals(i));\n }\n\n toJSON(): JsonValue {\n return this.id;\n }\n\n toString(): string {\n return this.id.toString();\n }\n}\n\nexport const isEnum: TypeGuard<Enum> = (e?: unknown): e is Enum => isDefined(e) && e instanceof Enum && isAn<Enum>(e, 'name', 'id', 'code');\n","import { List, toList } from './List';\nimport { asString, Text } from './Text';\nimport { toName } from './Constructor';\nimport { entries } from './Object';\nimport { text, textValue } from './ToText';\n\nexport type TemplateOptions = { type?: Text; property?: Text; actual?: Text; subject?: Text };\n\nexport class Template implements Text {\n constructor(\n private readonly template: string,\n private readonly subject: unknown = {},\n private readonly options: TemplateOptions = {}\n ) {}\n\n toString = (): string => {\n return entries(this.options)\n .reduce((t, [k]) => this.option(t, k), this.object())\n .replace(' ', ' ');\n };\n\n private readonly props = (tmpl: string, key: string, result: List<string> = toList()): string[] => {\n const i1 = tmpl.indexOf(`{${key}`);\n if (i1 < 0) {\n return result;\n }\n const i2 = tmpl.indexOf('}', i1);\n return this.props(tmpl.slice(i2 + 1), key, result.add(tmpl.substring(i1 + 1, i2)));\n };\n\n private readonly object = (): string => {\n return this.props(this.template, 'this').reduce((t: string, p) => t.replace(`{${p}}`, textValue(this.subject, p.replace('this.', ''))), this.template);\n };\n\n private readonly option = (tmpl: string, prop: string): string => {\n return this.props(tmpl, prop).reduce((t: string, p) => t.replace(`{${p}}`, textValue(this.options, p)), tmpl);\n };\n}\n\nexport function template(tmpl: Text, subject: unknown, options: TemplateOptions = {}): Text {\n return new Template(asString(tmpl), subject, {\n type: toName(subject),\n subject: text(JSON.stringify(subject)),\n ...options,\n });\n}\n","import { asString, capitalize, replaceAll, Text } from './Text';\nimport { toName } from './Constructor';\nimport { Optional } from './Types';\nimport { Get, ofGet } from './Get';\nimport { isEmpty, isNotEmpty } from './Is';\nimport { List, toList } from './List';\nimport { JsonValue } from './Json';\nimport { template } from './Template';\n\nexport class ToText implements Text {\n constructor(readonly subject: string) {}\n\n get cap(): ToText {\n return this.map(s => capitalize(s?.toLowerCase()));\n }\n\n get capFirst(): ToText {\n return this.map(s => capitalize(s));\n }\n\n get title(): ToText {\n return this.map(s =>\n s\n .split(' ')\n .map(w => text(w).cap)\n .join(' ')\n );\n }\n\n get pascal(): ToText {\n return this.title.replace(' ', '');\n }\n\n get lower(): ToText {\n return this.map(s => s.toLowerCase());\n }\n\n get upper(): ToText {\n return this.map(s => s.toUpperCase());\n }\n\n get camel(): ToText {\n return this.title.trim.map(s => `${s.charAt(0).toLowerCase()}${s.slice(1)}`);\n }\n\n get kebab(): ToText {\n return this.lower.replace(' ', '-');\n }\n\n get strictKebab(): ToText {\n return this.map(s => s.replace(/[^a-z\\d]+/gi, ' ').trim()).kebab;\n }\n\n get slug(): ToText {\n return this.map(s =>\n s\n .replace(/ß/g, 'ss')\n .normalize('NFKD')\n .replace(/[\\u0300-\\u036F]/g, '')\n .toLowerCase()\n .replace(/[^a-z\\d]+/g, '-')\n .replace(/(^-)|(-$)/g, '')\n );\n }\n\n get snake(): ToText {\n return this.upper.replace(' ', '_');\n }\n\n get plural(): ToText {\n return this.ifLike('') ?? this.add('s');\n }\n\n get space(): ToText {\n return this.map(s => s.replace(/([a-z0-9])([A-Z])/g, '$1 $2').replace(/[_-]/g, ' '));\n }\n\n get sentence(): ToText {\n return this.isEmpty ? this : this.map(s => `${s.charAt(0).toUpperCase()}${s.slice(1)}.`);\n }\n\n get initials(): ToText {\n return this.map(s =>\n s\n .split(' ')\n .map(w => w[0])\n .join('')\n );\n }\n\n get trim(): ToText {\n return this.map(s => s.replace(/[- ,_#]/g, ''));\n }\n\n get trimSentence(): ToText {\n return this.map(s =>\n s\n .replace(/[\\u200B-\\u200D\\uFEFF]/g, '')\n .replace(/[\\s\\u00A0]+/g, ' ')\n .replace(/\\s+([.,;:!?])/g, '$1')\n .trim()\n );\n }\n\n get isEmpty(): boolean {\n return isEmpty(this.toString());\n }\n\n parse = (subject: unknown, options = {}): ToText => text(template(this.subject, subject, { type: toName(subject), ...options }));\n\n is = (...others: unknown[]): boolean => others.some(o => this.toString() === text(o).toString());\n\n equals = this.is;\n\n isLike = (...others: unknown[]): boolean => others.some(o => this.trim.lower.is(text(o).trim.lower));\n\n ifLike = (...others: unknown[]): Optional<this> => (this.isLike(...others) ? this : undefined);\n\n endsWith = (end?: unknown): boolean => this.subject.endsWith(asString(end));\n\n startsWith = (end?: unknown): boolean => this.subject.startsWith(asString(end));\n\n first = (n: number): ToText => this.map(s => s.substring(0, n));\n\n last = (n: number): ToText => this.map(s => s.substring(s.length - n));\n\n map = (func: Get<string, string>): ToText => text(ofGet(func, this.subject));\n\n replace = (search: Text, replace: Text): ToText => this.map(s => replaceAll(s, search, replace));\n\n add = (add?: unknown, separator = ''): ToText => this.map(s => (isNotEmpty(add) ? `${s}${separator}${text(add)}` : s));\n\n with = (separator: string, ...other: unknown[]): ToText =>\n this.map(s =>\n toList(s)\n .add(...other.map(u => text(u).toString()))\n .filter(s => isNotEmpty(s))\n .join(separator)\n );\n\n split = (separator: string = ' '): List<string> => toList(this.subject.split(separator));\n\n toString(): string {\n return this.subject;\n }\n\n toJSON(): JsonValue {\n return this.subject;\n }\n}\n\nexport function text(subject?: unknown, alt = ''): ToText {\n const sub = subject ? asString(subject) : alt;\n return new ToText(sub !== '[object Object]' ? sub : '');\n}\n\nexport function textValue(subject: any, prop: string): string {\n const p = prop.split('.');\n const root = subject?.[p[0]];\n const initial = typeof root === 'object' && root !== null ? root : text(root);\n return (\n p\n .splice(1)\n .reduce((t, s) => t?.[s], initial)\n ?.toString() ?? ''\n );\n}\n","import { asString, Text } from './Text';\nimport { Enum } from './Enum';\nimport { isDefined } from './Is';\nimport { Id } from './Id';\n\nimport { text } from './ToText';\n\nexport class Exception extends Enum {\n static readonly AlreadyExists = new Exception('Subject already exists');\n static readonly DoesNotExist = new Exception('Does not exist');\n static readonly IsMissingId = new Exception('Subject is missing an id');\n static readonly IsNotImplemented = new Exception('Is not implemented');\n static readonly IsNotValid = new Exception('Is not valid');\n static readonly Unknown = new Exception('Unknown error');\n\n constructor(\n readonly message: string,\n id?: Id,\n readonly reason?: Text\n ) {\n super(message, id ?? text(message).pascal.toString());\n }\n\n static readonly CouldNotExecute = (target: Text): Exception => new Exception(`Could not execute ${target}.`, 'CouldNotExecute');\n\n static readonly CouldNotValidate = (target: Text): Exception => new Exception(`Could not validate ${target}.`, 'CouldNotValidate');\n\n static readonly EnvironmentVariableNotFound = (variable: Text): Exception =>\n new Exception(`Environment variable ${text(variable).upper} could not be found.`, 'EnvironmentVariableNotFound');\n\n because = (reason: Text): Exception => new Exception(this.message, this.id, reason);\n}\n\nexport const isException = (e?: unknown, t?: Text): e is Exception => e instanceof Exception && (isDefined(t) ? e.equals(asString(t)) : true);\nexport const isDoesNotExist = (e?: unknown): e is Exception => e instanceof Exception && Exception.DoesNotExist.equals(e);\n","import { toArray } from '../types/Array';\nimport { ErrorOrigin } from '../types/ErrorOrigin';\nimport { List, toList } from '../types/List';\nimport { asString } from '../types/Text';\nimport { on, use } from '../types/Constructor';\nimport { keys, values } from '../types/Object';\n\ntype Pro<A> = A | PromiseLike<A>;\ntype Aw<A> = Awaited<A>;\n\nexport const resolve = <S = unknown>(subject: S | PromiseLike<S>): Promise<S> => Promise.resolve(subject);\nexport const reject = <S = never>(e: ErrorOrigin): Promise<S> => Promise.reject(e);\n\nexport const tuple = {\n 2: <F, S>(first: Pro<F>, second: Pro<S>): Promise<[Aw<F>, Aw<S>]> => Promise.all([first, second]),\n 3: <F, S, T>(first: Pro<F>, second: Pro<S>, third: Pro<T>): Promise<[Aw<F>, Aw<S>, Aw<T>]> => Promise.all([first, second, third]),\n 4: <F, S, T, Fo>(first: Pro<F>, second: Pro<S>, third: Pro<T>, forth: Pro<Fo>): Promise<[Aw<F>, Aw<S>, Aw<T>, Aw<Fo>]> =>\n Promise.all([first, second, third, forth]),\n 5: <F, S, T, Fo, Fi>(first: Pro<F>, second: Pro<S>, third: Pro<T>, forth: Pro<Fo>, fifth: Pro<Fi>): Promise<[Aw<F>, Aw<S>, Aw<T>, Aw<Fo>, Aw<Fi>]> =>\n Promise.all([first, second, third, forth, fifth]),\n all: <F, S>(first: Pro<F>, second: Pro<S>[]): Promise<[Aw<F>, Aw<S[]>]> => Promise.all([first, Promise.all(second)]),\n spread: <F, S>(first: Pro<F>, ...second: Pro<S>[]): Promise<[Aw<F>, Aw<S[]>]> => Promise.all([first, Promise.all(toArray(second))]),\n list: <T>(list: Pro<T>[]): Promise<List<Aw<T>>> => Promise.all([...list]).then(toList),\n settled: <T>(list: Pro<T>[]): Promise<{ fulfilled: List<Aw<T>>; rejected: List<string> }> =>\n Promise.allSettled([...list]).then(rs => ({\n fulfilled: toList(...rs.filter(r => r.status === 'fulfilled').map(r => r.value)),\n rejected: toList(...rs.filter(r => r.status === 'rejected').map(r => asString(r.reason))),\n })),\n object: <T extends Record<string, unknown>>(obj: T): Promise<{ [K in keyof T]: Aw<T[K]> }> =>\n use(keys(obj), ks => tuple.list(values(obj)).then(vs => vs.reduce((acc: any, v, i) => on(acc, a => (a[ks[i]] = v)), {}) as { [K in keyof T]: Aw<T[K]> })),\n};\n\nexport const tuple2 = tuple[2];\nexport const tuple3 = tuple[3];\nexport const tuple4 = tuple[4];\nexport const tuple5 = tuple[5];\nexport const tupleO = tuple.object;\nexport const settled = tuple.settled;\n","import { Json, JsonValue } from './Json';\nimport { Id } from './Id';\nimport { Exception } from './Exception';\nimport { PageList, PageOptions } from './PageList';\nimport { List } from './List';\nimport { Optional } from './Types';\nimport { reject } from '../utils/Promise';\n\nexport type FetchOptions = PageOptions;\n\nexport abstract class Gateway<Options = FetchOptions> {\n all(options?: Options): Promise<PageList<Json>> {\n return reject(Exception.IsNotImplemented);\n }\n\n byId(id: Id, options?: Options): Promise<Optional<Json>> {\n return reject(Exception.IsNotImplemented);\n }\n\n by(_key: string, _value: JsonValue, _options?: Options): Promise<PageList<Json>> {\n return reject(Exception.IsNotImplemented);\n }\n\n byIds(..._ids: Id[]): Promise<List<Json>> {\n return reject(Exception.IsNotImplemented);\n }\n\n search(q: JsonValue, options?: Options): Promise<PageList<Json>> {\n return reject(Exception.IsNotImplemented);\n }\n\n filter(options?: Options): Promise<PageList<Json>> {\n return reject(Exception.IsNotImplemented);\n }\n\n exists(id: Id, options?: Options): Promise<boolean> {\n return reject(Exception.IsNotImplemented);\n }\n\n add(item: Json, options?: Options): Promise<Json> {\n return reject(Exception.IsNotImplemented);\n }\n\n update(item: Json, options?: Options): Promise<Json> {\n return reject(Exception.IsNotImplemented);\n }\n\n remove(id: Id, options?: Options): Promise<boolean> {\n return reject(Exception.IsNotImplemented);\n }\n}\n","import { validate } from './Validate';\nimport { Results } from '../types/Results';\nimport { Constructor } from '../types/Constructor';\nimport { Get, ofGet, Predicate } from '../types/Get';\nimport { isDefined, isEmpty, isIn } from '../types/Is';\nimport { toArray } from '../types/Array';\nimport { ErrorOrigin } from '../types/ErrorOrigin';\nimport { reject, resolve } from '../utils/Promise';\nimport { Exception } from '../types/Exception';\n\nexport class When<W> {\n constructor(\n readonly subject: W,\n readonly valid = true,\n private results?: Results\n ) {}\n\n get not(): When<W> {\n return this.clone(!this.valid);\n }\n\n get and(): When<W> {\n return this.clone(this.valid);\n }\n\n get isDefined(): When<W> {\n return this.clone(this.valid === isDefined(this.subject));\n }\n\n get isEmpty(): When<W> {\n return this.clone(this.valid === isEmpty(this.subject));\n }\n\n get isTrue(): When<W> {\n return this.clone(this.valid === !!this.subject);\n }\n\n get isValid(): When<W> {\n this.results = validate(this.subject);\n return this.clone(this.valid === this.results.isValid);\n }\n\n isInstance = <U>(c: Constructor<U>): When<W> => this.clone(this.valid === this.subject instanceof c);\n\n with = (pred: Predicate<W>): When<W> => this.clone(this.valid === ofGet(pred, this.subject));\n\n contains = (property: (w: W) => unknown): When<W> => this.clone(this.valid === isDefined(ofGet(property, this.subject)));\n\n in = (...items: W[]): When<W> => this.clone(this.valid === isIn(this.subject, toArray(...items)));\n\n is = (item: W): When<W> => this.clone(this.valid === (this.subject === item));\n\n reject = (error?: Get<ErrorOrigin, W>): Promise<NonNullable<W>> =>\n !this.valid ? resolve(this.subject as NonNullable<W>) : reject(ofGet(error, this.subject) ?? this.results ?? Exception.Unknown);\n\n recover = (f: (item: W) => W | Promise<W>): Promise<W> => resolve(!this.valid ? this.subject : f(this.subject));\n\n protected clone = (result = true): When<W> => new When(this.subject, result, this.results);\n}\n\nexport const when = <T>(subject: T): When<T> => new When<T>(subject);\n","import { Uuid } from './Uuid';\nimport { Identity } from './Identity';\nimport { Optional } from './Types';\n\nimport { text } from './ToText';\n\nexport interface EnvContext {\n readonly domain: string;\n readonly name: string;\n readonly host: string;\n readonly port: number;\n readonly app: string;\n\n get(key: string, alt?: string): Optional<string>;\n}\n\nexport class DotEnvContext implements EnvContext {\n readonly domain = process.env.DOMAIN ?? 'easy';\n readonly name = process.env.ENVIRONMENT_NAME ?? '';\n readonly host = process.env.HOST ?? '';\n readonly port = Number.parseInt(process.env.PORT ?? '8080');\n readonly app = process.env.APP ?? '';\n\n readonly get = (key: string, alt?: string): Optional<string> => {\n const k = text(key)\n .map(k => k.replace(/([a-z])([A-Z])/g, '$1 $2'))\n .snake.toString();\n return process.env[k] ?? alt;\n };\n}\n\nexport interface RequestContext {\n token?: any;\n identity?: Identity;\n jwt: string;\n correlationId?: Uuid;\n lastError?: string;\n lastErrorStack?: string;\n create: (f: () => void) => void;\n\n get<T>(key: string): T;\n\n set<T>(key: string, value: T): T;\n\n wrap<T>(f: () => Promise<T>): Promise<T>;\n}\n\nexport class BaseRequestContext implements RequestContext {\n private state: any = {};\n\n get token(): any {\n return this.get('token');\n }\n\n set token(token: any) {\n this.set('token', token);\n }\n\n get identity(): Identity {\n return this.token as Identity;\n }\n\n get jwt(): string {\n return this.get('jwt');\n }\n\n set jwt(jwt: string) {\n this.set('jwt', jwt);\n }\n\n get correlationId(): Uuid {\n return this.get('correlationId');\n }\n\n set correlationId(id: Uuid) {\n this.set('correlationId', id);\n }\n\n get lastError(): Optional<string> {\n return this.get('lastError');\n }\n\n set lastError(error: Optional<string>) {\n this.set('lastError', error);\n }\n\n public get<T>(key: string): T {\n return this.state[key] as T;\n }\n\n public set<T>(key: string, value: T): T {\n return (this.state[key] = value);\n }\n\n public readonly create = (f: () => void): void => f();\n\n public readonly wrap = <T>(f: () => Promise<T>): Promise<T> => f();\n}\n\n/**\n * @deprecated Renamed to BaseRequestContext\n */\nexport class BaseContext extends BaseRequestContext {}\n\nexport interface Contexts {\n env?: EnvContext;\n request?: RequestContext;\n other?: any;\n}\n\nexport class Context {\n constructor(protected state: Contexts = {}) {\n this.state = {\n ...{\n env: new DotEnvContext(),\n request: new BaseRequestContext(),\n other: {},\n },\n ...this.state,\n };\n }\n\n get env(): EnvContext {\n return this.state.env as EnvContext;\n }\n\n set env(env: EnvContext) {\n this.state.env = env;\n }\n\n get request(): RequestContext {\n return this.state.request as RequestContext;\n }\n\n set request(request: RequestContext) {\n this.state.request = request;\n }\n\n get other(): any {\n return this.state.other;\n }\n}\n\nexport const ctx = new Context();\n","import { isA } from './IsA';\nimport { Text } from './Text';\nimport { ctx } from './Context';\nimport { TypeGuard } from './TypeGuard';\n\nexport type Result = { message: string; location?: string; domain?: string };\n\nexport const toResult = (message: Text, location?: Text, domain: Text = ctx.env.domain): Result => ({\n message: message.toString(),\n location: location?.toString(),\n domain: domain?.toString(),\n});\n\nexport const isResult: TypeGuard<Result> = (r?: unknown): r is Result => isA<Result>(r, 'message');\n","import { Text } from './Text';\nimport { isResult, Result, toResult } from './Result';\nimport { Validatable } from './Validatable';\nimport { isDefined } from './Is';\nimport { toArray } from './Array';\n\nconst parse = (...rs: (Text | Result)[]): Result[] => toArray(...rs).map(r => (isResult(r) ? r : toResult(r)));\n\nexport class Results implements Validatable {\n public readonly results: Result[];\n\n constructor(...rs: (Text | Result)[]) {\n this.results = parse(...rs);\n }\n\n get length(): number {\n return this.results.length;\n }\n\n get isValid(): boolean {\n return this.results.length === 0;\n }\n\n add = (...rs: (Text | Result)[]): Results => toResults(...this.results, ...parse(...rs));\n}\n\nexport const toResults = (...r: (Text | Result)[]): Results => new Results(...r);\n\nexport const isResults = (r?: unknown): r is Results => isDefined(r) && r instanceof Results;\n","import { Validatable } from './Validatable';\nimport { isDefined } from './Is';\nimport { JsonValue } from './Json';\nimport { asString } from './Text';\n\nexport class Value<V = string> implements Validatable {\n constructor(readonly value: V) {\n this.value = value;\n }\n\n get isValid(): boolean {\n return isDefined(this.value);\n }\n\n toJSON(): JsonValue {\n return this.value as unknown as JsonValue;\n }\n\n toString(): string {\n return asString(this.value);\n }\n}\n\nexport const isValue = (v?: unknown): v is Value => v instanceof Value;\n","import { isA } from './IsA';\nimport { TypeGuard } from './TypeGuard';\n\nexport interface Validatable {\n isValid: boolean;\n}\n\nexport const isValidatable: TypeGuard<Validatable> = (v?: unknown): v is Validatable => isA<Validatable>(v, 'isValid');\n","import { Constraint } from './Contraints';\nimport { when } from './When';\nimport type { TemplateOptions } from '../types/Template';\nimport { isResults, Results, toResults } from '../types/Results';\nimport { toName } from '../types/Constructor';\nimport { toResult } from '../types/Result';\nimport { List, toList } from '../types/List';\nimport { meta } from '../types/Meta';\nimport { isArray, isFunction } from '../types/Is';\nimport type { Text } from '../types/Text';\nimport { asString } from '../types/Text';\nimport { choose } from '../types/Case';\nimport { isEnum } from '../types/Enum';\nimport { isValue } from '../types/Value';\nimport { isValidatable } from '../types/Validatable';\nimport { text } from '../types/ToText';\n\nexport type Validator = { property: string | symbol; constraint: Constraint; text: Text; actual?: Text };\n\nexport const asResults = (subject: unknown, template: Text, options: TemplateOptions = {}): Results =>\n toResults(toResult(text(template).parse(subject, options), toName(subject)));\n\nconst validators = (subject: unknown): List<Validator> =>\n meta(subject)\n .keys<List<Validator>>('constraint')\n .reduce((list, vs) => list.add(vs), toList<Validator>());\n\nconst runValidator = (v: Validator, subject?: unknown): Results => {\n try {\n const actual = isFunction((subject as any)[v.property]) ? (subject as any)[v.property]() : (subject as any)[v.property];\n const constraint = v.constraint(actual);\n return isResults(constraint)\n ? constraint\n : !constraint\n ? asResults(subject, v.text, {\n ...v,\n actual,\n })\n : toResults();\n } catch (e) {\n return asResults(subject, asString(e));\n }\n};\n\nconst constraints = (subject?: unknown): Results =>\n validators(subject)\n .map(vs => runValidator(vs, subject))\n .reduce((rs, r) => rs.add(...r.results), toResults());\n\nexport const validate = (subject?: unknown): Results =>\n choose(subject)\n .is.not.defined(\n s => s,\n () => toResults('Subject is not defined.')\n )\n .type(isEnum, e => (e.isValid ? toResults() : asResults(e, 'This is not a valid {type}.')))\n .type(isValue, v => (v.isValid ? toResults() : asResults(v, 'This is not a valid {type}.')))\n .type(isArray, a => a.map(i => validate(i)).reduce((rs, r) => rs.add(...r.results), toResults()))\n .type(isValidatable, v => constraints(v))\n .else(toResults());\n\nexport const validateReject = <T>(subject: T): Promise<T> => when(subject).not.isValid.reject();\n\nexport const isValid = <T>(t: T): boolean => validate(t).isValid;\n","import { isDefined, isEmpty, isTrue } from './Is';\nimport { validate } from '../validation/Validate';\nimport { Construct, Constructor, ofConstruct } from './Constructor';\nimport { Validatable } from './Validatable';\nimport { Get, ofGet } from './Get';\nimport { Func } from './Func';\nimport { Optional } from './Types';\n\nexport abstract class Try<T = unknown> implements Validatable {\n is = {\n defined: (prop?: Func<unknown, T>): Try<T> => this.filter(v => isDefined(prop ? prop(v) : v)),\n empty: (prop?: Func<unknown, T>): Try<T> => this.filter(v => isEmpty(prop ? prop(v) : v)),\n valid: (prop?: Func<unknown, T>): Try<T> => this.filter(v => validate(prop ? prop(v) : v).isValid),\n true: (prop?: Func<unknown, T>): Try<T> => this.filter(v => isTrue(prop ? prop(v) : v)),\n false: (prop?: Func<unknown, T>): Try<T> => this.filter(v => !isTrue(prop ? prop(v) : v)),\n not: {\n defined: (prop?: Func<unknown, T>): Try<T> => this.filter(v => !isDefined(prop ? prop(v) : v)),\n empty: (prop?: Func<unknown, T>): Try<T> => this.filter(v => !isEmpty(prop ? prop(v) : v)),\n valid: (prop?: Func<unknown, T>): Try<T> => this.filter(v => !validate(prop ? prop(v) : v).isValid),\n },\n };\n\n if = this.is;\n\n abstract get value(): T;\n\n abstract get error(): Error;\n\n abstract get isValid(): boolean;\n\n static of = <T>(c: Get<T | Try<T>>, ...args: unknown[]): Try<T> => {\n try {\n const out = ofGet(c, ...args);\n return new Success(out instanceof Try ? out.value : out);\n } catch (e) {\n return new Failure(e as Error);\n }\n };\n\n abstract map<U>(f: Func<U | Try<U>, T>): Try<U>;\n\n abstract recover(f: Func<T | Try<T>, Error>): Try<T>;\n\n abstract recoverFrom(type: Constructor<Error>, f: Func<T | Try<T>, Error>): Try<T>;\n\n abstract accept(f: Func<void, T>): Try<T>;\n\n abstract filter(predicate: Func<boolean, T>): Try<T>;\n\n abstract or(value: Get<T>): T;\n\n abstract orElse(value?: Get<T>): Optional<T>;\n\n abstract orThrow(error: Construct<Error>): T;\n}\n\nclass Success<T> extends Try<T> {\n constructor(readonly value: T) {\n super();\n }\n\n get error(): Error {\n throw new Error('No error found');\n }\n\n get isValid(): boolean {\n return true;\n }\n\n map<U>(f: Func<U | Try<U>, T>): Try<U> {\n return tryTo<U>(f, this.value);\n }\n\n recover(f: Func<T | Try<T>, Error>): Try<T> {\n return this;\n }\n\n recoverFrom(type: Constructor<Error>, f: Func<T | Try<T>, Error>): Try<T> {\n return this;\n }\n\n accept(f: Func<void, T>): Try<T> {\n return tryTo(() => {\n f(this.value);\n return this;\n });\n }\n\n filter(predicate: Func<boolean, T>): Try<T> {\n return tryTo(() => {\n if (predicate(this.value)) return this;\n throw new Error(`Applying filter(${predicate.toString()}) failed.`);\n });\n }\n\n or(value: Get<T>): T {\n return this.value;\n }\n\n orElse(value?: Get<T>): Optional<T> {\n return this.value;\n }\n\n orThrow(_error: Construct<Error>): T {\n return this.value;\n }\n}\n\nclass Failure<T> extends Try<T> {\n constructor(readonly error: Error) {\n super();\n }\n\n get value(): T {\n throw this.error;\n }\n\n get isValid(): boolean {\n return false;\n }\n\n map<U>(f: Func<U | Try<U>, T>): Try<U> {\n return new Failure<U>(this.error);\n }\n\n recover<U>(f: Func<U | Try<U>, Error>): Try<U> {\n return tryTo<U>(f, this.error);\n }\n\n recoverFrom<U>(type: Constructor<Error>, f: Func<T | Try<T>, Error>): Try<T> {\n return tryTo(() => (this.error instanceof type ? this.recover(f) : this));\n }\n\n accept(f: Func<void, T>): Try<T> {\n return this;\n }\n\n filter(predicate: Func<boolean, T>): Try<T> {\n return this;\n }\n\n or(value: Get<T>): T {\n return ofGet(value);\n }\n\n orElse(value?: Get<T>): Optional<T> {\n return ofGet(value);\n }\n\n orThrow(error: Construct<Error>): T {\n throw ofConstruct(error);\n }\n}\n\nexport const tryTo = <T>(c: Get<T | Try<T>>, ...args: unknown[]) => Try.of<T>(c, ...args);\n","import { Get, ofGet, Predicate } from './Get';\nimport { TypeGuard } from './TypeGuard';\nimport { Func } from './Func';\nimport { isDefined, isEmpty } from './Is';\nimport { validate } from '../validation/Validate';\nimport { tryTo } from './Try';\n\nclass CaseBuilder<V> {\n is = {\n defined: <T>(prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.v).case(isDefined(prop(this.v)), out),\n empty: <T>(prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.v).case(isEmpty(prop(this.v)), out),\n valid: <T>(prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.v).case(validate(prop(this.v)).isValid, out),\n in: <T>(prop: Get<Array<V>, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.v).case(ofGet(prop, this.v).includes(this.v), out),\n not: {\n defined: <T>(prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.v).case(!isDefined(prop(this.v)), out),\n empty: <T>(prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.v).case(!isEmpty(prop(this.v)), out),\n valid: <T>(prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.v).case(!validate(prop(this.v)).isValid, out),\n in: <T>(prop: Get<Array<V>, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.v).case(!ofGet(prop, this.v).includes(this.v), out),\n },\n };\n if = this.is;\n\n constructor(readonly v: V) {}\n\n case<T>(pred: Predicate<V>, out: Get<T, V>): Case<T, V> {\n return new Case<T, V>(this.v).case(pred, out);\n }\n\n type<T, U = unknown>(guard: TypeGuard<U>, out: Func<T, U>): Case<T, V> {\n return new Case<T, V>(this.v).type<U>(guard, out);\n }\n\n equals<T>(value: V, out: Get<T, V>): Case<T, V> {\n return new Case<T, V>(this.v).equals(value, out);\n }\n}\n\nclass Case<T, V = unknown> {\n is = {\n defined: (prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.value).case(isDefined(prop(this.value)), out),\n empty: (prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.value).case(isEmpty(prop(this.value)), out),\n valid: (prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.value).case(validate(prop(this.value)).isValid, out),\n in: (prop: Get<Array<V>, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.value).case(ofGet(prop, this.value).includes(this.value), out),\n not: {\n defined: (prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.value).case(!isDefined(prop(this.value)), out),\n empty: (prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.value).case(!isEmpty(prop(this.value)), out),\n valid: (prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.value).case(!validate(prop(this.value)).isValid, out),\n in: (prop: Get<Array<V>, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.value).case(!ofGet(prop, this.value).includes(this.value), out),\n },\n };\n if = this.is;\n\n constructor(\n protected value: V,\n protected outcome?: T\n ) {}\n\n case(pred: Predicate<V>, out: Get<T, V>): Case<T, V> {\n return tryTo(pred, this.value)\n .is.true()\n .map(() => ofGet(out, this.value))\n .map(res => new Found(this.value, res) as Case<T, V>)\n .or(this);\n }\n\n type<U>(guard: TypeGuard<U>, out: Func<T, U>): Case<T, V> {\n return tryTo(guard, this.value)\n .is.true()\n .map(() => out(this.value as unknown as U))\n .map(res => new Found(this.value, res) as Case<T, V>)\n .or(this);\n }\n\n equals(value: V, out: Get<T, V>): Case<T, V> {\n return this.case(this.value === value, out);\n }\n\n else(alt: Get<T, V>): T {\n return ofGet<T, V>(alt, this.value);\n }\n}\n\nclass Found<T, V> extends Case<T, V> {\n is = {\n defined: (_prop: Func<unknown, V>, _out: Get<T, V>): Case<T, V> => this,\n empty: (_prop: Func<unknown, V>, _out: Get<T, V>): Case<T, V> => this,\n valid: (_prop: Func<unknown, V>, _out: Get<T, V>): Case<T, V> => this,\n in: (_prop: Get<Array<V>, V>, _out: Get<T, V>): Case<T, V> => this,\n not: {\n defined: (_prop: Func<unknown, V>, _out: Get<T, V>): Case<T, V> => this,\n empty: (_prop: Func<unknown, V>, _out: Get<T, V>): Case<T, V> => this,\n valid: (_prop: Func<unknown, V>, _out: Get<T, V>): Case<T, V> => this,\n in: (_prop: Get<unknown, V>, _out: Get<T, V>): Case<T, V> => this,\n },\n };\n if = this.is;\n\n constructor(\n protected value: V,\n protected outcome: T\n ) {\n super(value, outcome);\n }\n\n case(pred: Predicate<V>, out: Get<T, V>): this {\n return this;\n }\n\n type<U>(guard: TypeGuard<U>, out: Func<T, U>): Case<T, V> {\n return this;\n }\n\n equals(value: V, out: Get<T, V>): Case<T, V> {\n return this;\n }\n\n else(alt: Get<T, V>): T {\n return this.outcome;\n }\n}\n\nexport const choose = <V>(value: V) => new CaseBuilder<V>(value);\n","import { isList, List, toList } from './List';\nimport { Construct, ofConstruct } from './Constructor';\nimport { isA } from './IsA';\nimport { PlainSort, Sort } from './Sort';\nimport { GetProperty } from './Get';\nimport { ArrayLike } from './Array';\nimport { Optional } from './Types';\nimport { isNumber } from './Is';\nimport { choose } from './Case';\nimport type { Id } from './Id';\n\nexport type FilterValue = { label?: string; value: any; count?: number };\nexport type Filter = { label?: string; field: string; shortField?: string; values: FilterValue[] };\n\nexport const toFilter = (field: string, value: any): Filter => toShortFilter(field, field, value);\nexport const toShortFilter = (field: string, shortField: string, value: any): Filter => ({\n field,\n shortField,\n values: [{ value }],\n});\n\nexport type PageOptions = { take?: number; skip?: number; sort?: Sort[]; sorts?: PlainSort; filters?: Filter[] };\nexport type PageListOptions = Exclude<PageOptions, 'sort'> & { total?: number };\n\nexport class PageList<T = unknown> extends List<T> {\n private _options?: PageListOptions;\n\n get options(): Optional<PageListOptions> {\n return this._options;\n }\n\n get take(): number {\n return this._options?.take ?? 250;\n }\n\n get skip(): number {\n return this._options?.skip ?? 0;\n }\n\n get total(): Optional<number> {\n return this._options?.total;\n }\n\n get sorts(): Optional<PlainSort> {\n return this._options?.sorts;\n }\n\n get filters(): Optional<Filter[]> {\n return this._options?.filters;\n }\n\n get meta(): PageListOptions {\n return {\n take: this.take,\n skip: this.skip,\n total: this.total,\n sorts: this.sorts,\n filters: this.filters,\n };\n }\n\n get ids(): PageList<Id> {\n return this.mapDefined(i => (i as any).id as Id);\n }\n\n asc(p: GetProperty<T, any>): PageList<T> {\n return toPageList(super.asc(p), this);\n }\n\n desc(p: GetProperty<T, any>): PageList<T> {\n return toPageList(super.desc(p), this);\n }\n\n diff(others: ArrayLike<T>): PageList<T> {\n return toPageList(super.diff(others), this);\n }\n\n diffByKey<U = T>(others: ArrayLike<U>, key: keyof T & keyof U): PageList<T> {\n return toPageList(super.diffByKey(others, key), this);\n }\n\n symmetricDiff(others: ArrayLike<T>): PageList<T> {\n return toPageList(super.symmetricDiff(others), this);\n }\n\n symmetricDiffByKey(others: ArrayLike<T>, key: keyof T): PageList<T> {\n return toPageList(super.symmetricDiffByKey(others, key), this);\n }\n\n intersect(others: ArrayLike<T>): PageList<T> {\n return toPageList(super.intersect(others), this);\n }\n\n intersectByKey<U>(others: ArrayLike<U>, key: keyof T & keyof U): PageList<T> {\n return toPageList(super.intersectByKey(others, key), this);\n }\n\n map<U>(f: (value: T, index: number, array: T[]) => U, params?: unknown): PageList<U> {\n const items = super.map(f, params);\n return toPageList(items, this);\n }\n\n flatMap<U, This = unknown>(f: (this: This, value: T, index: number, array: T[]) => ReadonlyArray<U> | U, params?: This): PageList<U> {\n return toPageList(super.flatMap(f, params), this);\n }\n\n mapDefined<U>(f: (value: T, index: number, array: T[]) => U, params?: unknown): PageList<NonNullable<U>> {\n return toPageList(super.mapDefined(f, params), this);\n }\n\n mapAsync(f: (i: T) => Promise<T>): Promise<PageList<T>> {\n return super.mapAsync(f).then(r => toPageList(r, this));\n }\n\n areEqual(...items: ArrayLike<T>): boolean {\n return this.isSubSetOf(...items) && toList(...items).isSubSetOf(...this);\n }\n\n distinct(): PageList<T> {\n return toPageList(super.distinct(), this);\n }\n\n distinctByKey(key: keyof T): PageList<T> {\n return toPageList(super.distinctByKey(key), this);\n }\n\n distinctByValue(): PageList<T> {\n return toPageList(super.distinctByValue(), this);\n }\n\n filter(p: (value: T, index: number, array: T[]) => unknown, params?: unknown): PageList<T> {\n return toPageList(super.filter(p, params), this);\n }\n\n accumulate(...keys: (keyof T)[]): PageList<T> {\n return toPageList(super.accumulate(...keys), this);\n }\n\n concat(...items: ConcatArray<T>[]): PageList<T>;\n\n concat(...items: (T | ConcatArray<T>)[]): PageList<T>;\n\n concat(...items: (T | ConcatArray<T>)[]): PageList<T> {\n return toPageList(super.concat(...items), this);\n }\n\n reverse(): PageList<T> {\n return toPageList(super.reverse(), this);\n }\n\n splice(start: number, deleteCount?: number): PageList<T>;\n\n splice(start: number, deleteCount: number, ...items: T[]): PageList<T>;\n\n splice(start: number, deleteCount: number, ...items: T[]): PageList<T> {\n return toPageList(super.splice(start, deleteCount, ...items), this);\n }\n\n remove(item: T): PageList<T> {\n return toPageList(super.remove(item), this);\n }\n\n replace(key: keyof T, item: T): PageList<T> {\n return toPageList(super.replace(key, item), this);\n }\n\n switch(item: T): PageList<T> {\n return toPageList(super.switch(item), this);\n }\n\n defined(): PageList<NonNullable<T>> {\n return toPageList(super.defined(), this);\n }\n\n orElse(...alt: ArrayLike<T>): Optional<PageList<T>> {\n return toPageList(super.orElse(...alt), this);\n }\n\n slice(start?: number, end?: number): PageList<T> {\n return toPageList(super.slice(start, end), this);\n }\n\n //we needed to add U because of a Typescript issue with generics\n update<U = T>(p: (value: T, index: number, array: T[]) => unknown, val: T | ((v: U) => T)): PageList<T> {\n return toPageList(super.update(p, val), this);\n }\n\n updateFirst<U = T>(p: (value: T, index: number, array: T[]) => unknown, val: T | ((v: U) => T)): PageList<T> {\n return toPageList(super.updateFirst(p, val), this);\n }\n\n updateFirstById<U = T>(id: Id, val: T | ((v: U) => T)): PageList<T> {\n return toPageList(super.updateFirstById(id, val), this);\n }\n\n updateById<U = T>(id: Id, val: T | ((v: U) => T)): PageList<T> {\n return toPageList(super.updateById(id, val), this);\n }\n\n private setPageOptions(options?: PageListOptions): this {\n this._options = options;\n return this;\n }\n}\n\nexport const isPageList = <T>(l?: unknown): l is PageList<T> => isList<T>(l) && isA(l, 'total');\n\nexport const toPageList = <T>(items: T[] = [], options?: PageListOptions | PageList): PageList<T> => {\n return (\n choose(items)\n .case(\n i => i.length === 1 && isNumber(i[0]),\n i => new PageList<T>().add(...i)\n )\n .else(i => new PageList<T>(...i)) as any\n ).setPageOptions(isPageList(options) ? options.options : options);\n};\n\n/* @deprecated No longer needed as the PageList is now a class that extends from List, use the map function */\nexport const asPageList = <T, U>(c: Construct<T>, items = toPageList<U>()): PageList<T> => items.map(i => ofConstruct(c, i));\n","import { FetchOptions, Gateway } from '../types/Gateway';\nimport { PageList, toPageList } from '../types/PageList';\nimport { Json, JsonValue } from '../types/Json';\nimport { Id } from '../types/Id';\nimport { Optional } from '../types/Types';\nimport { isDefined } from '../types/Is';\nimport { when } from '../validation/When';\nimport { Exception } from '../types/Exception';\n\nexport class InMemoryGateway extends Gateway {\n constructor(private readonly data: Promise<PageList<Json>>) {\n super();\n }\n\n all(options?: FetchOptions): Promise<PageList<Json>> {\n return this.data.then(d => toPageList(d, d));\n }\n\n byId(id: Id): Promise<Optional<Json>> {\n return this.data.then(d => d.byId(id)).then(d => (d ? { ...d } : undefined));\n }\n\n by = (key: string, value: JsonValue): Promise<PageList<Json>> => {\n return this.data.then(d => d.filter(i => i[key] === value));\n };\n\n exists(id: Id): Promise<boolean> {\n return this.byId(id).then(d => isDefined(d));\n }\n\n add(item: Json): Promise<Json> {\n return when(item)\n .not.contains(i => i.id)\n .reject(Exception.IsMissingId)\n .then(i => this.exists(i.id as Id))\n .then(ex => when(ex).isTrue.reject(Exception.AlreadyExists))\n .then(() => this.data.then(d => d.add(item)))\n .then(() => ({ ...item }));\n }\n\n remove(id: Id): Promise<true> {\n return this.data\n .then(d =>\n when(d.findIndex(i => i.id === id))\n .with(i => i < 0)\n .reject(Exception.DoesNotExist)\n .then(i => d.splice(i, 1))\n )\n .then(() => true);\n }\n\n update(item: Json): Promise<Json> {\n return when(item)\n .not.contains(i => i.id)\n .reject(Exception.IsMissingId)\n .then(i => this.remove(i.id as Id).then(() => this.add(i)));\n }\n}\n","import { DataProvider } from './DataProvider';\nimport { Enum } from '../types/Enum';\nimport { Constructor, ofConstruct } from '../types/Constructor';\n\nexport type DatabaseOptions = {\n user?: string;\n password?: string;\n host?: string;\n port?: number;\n cluster?: string;\n connectionString?: string;\n maxPoolSize?: number;\n minPoolSize?: number;\n maxIdleTimeMS?: number;\n socketTimeoutMS?: number;\n // Query specific options\n queryTimeoutMS?: number;\n};\n\nexport class DefaultProvider implements DataProvider {}\n\nexport class Database extends Enum {\n static readonly Default = new Database('Default', DefaultProvider);\n\n constructor(\n name: string,\n readonly provider: Constructor<DataProvider> | DataProvider,\n readonly options?: DatabaseOptions\n ) {\n super(name);\n }\n\n provide = <P>(): P => ofConstruct(this.provider, this);\n}\n","import { convert, Convert } from './Convert';\nimport { Mapping } from './Mapper';\nimport { Get, ofGet } from '../types/Get';\nimport { Json, JsonValue } from '../types/Json';\n\nexport type PropertyOptions<T = unknown> = {\n convert?: Convert<any, any>;\n dflt?: Get<T>;\n format?: string;\n};\n\nexport class Property<T = unknown> implements Mapping {\n constructor(\n readonly property: string,\n readonly options?: PropertyOptions\n ) {\n this.options = { ...options, convert: options?.convert ?? convert.default };\n }\n\n in = (source: Json = {}): JsonValue => this.options?.convert?.to(source[this.property] ?? ofGet(this.options?.dflt));\n out = (source: Json = {}, key = ''): JsonValue => this.options?.convert?.from(source[key]);\n\n toString() {\n return this.property;\n }\n}\n","import { Condition, SortCondition, toCondition } from './Condition';\nimport { Property } from '../utils/Property';\nimport { toArray } from '../types/Array';\nimport { isDefined } from '../types/Is';\n\nexport class Field extends Property {\n is = (value: unknown): Condition => this.condition('eq', value);\n\n isNot = (value: unknown): Condition => this.condition('ne', value);\n\n isIn = (...value: unknown[]): Condition => this.condition('in', toArray(value));\n\n notIn = (...value: unknown[]): Condition => this.condition('nin', toArray(value));\n\n exists = (does: boolean): Condition => this.condition('exists', does);\n\n greater = (value: unknown): Condition => this.condition('gt', value);\n\n greaterEqual = (value: unknown): Condition => this.condition('gte', value);\n\n less = (value: unknown): Condition => this.condition('lt', value);\n\n lessEqual = (value: unknown): Condition => this.condition('lte', value);\n\n asc = (): SortCondition => new SortCondition(this.property, 1);\n\n desc = (): SortCondition => new SortCondition(this.property, -1);\n\n protected condition = (operator: string, value: unknown): Condition => toCondition(this.property, operator, value, this.options?.convert);\n}\n\nexport const isField = (f?: unknown): f is Field => isDefined(f) && f instanceof Field;\n","import { Validatable } from '../types/Validatable';\nimport { validate } from '../validation/Validate';\nimport { json, Json } from '../types/Json';\nimport { isDefined } from '../types/Is';\n\nexport abstract class Struct implements Validatable {\n constructor(protected readonly state: any = {}) {}\n\n get isValid(): boolean {\n return validate(this).isValid;\n }\n\n toJSON(): Json {\n return json.delete(json.parse({ ...this }), 'state');\n }\n\n toString(): string {\n return this.constructor.name;\n }\n\n update(_add: Json): Struct {\n return this;\n }\n\n protected merge(a: unknown): Json {\n return json.merge(this, a);\n }\n}\n\nexport function isStruct(s?: unknown): s is Struct {\n return isDefined(s) && s instanceof Struct;\n}\n","import { DateTime as LuxonDateTime, DateTimeUnit as LuxonDateTimeUnit, DurationUnit as LuxonDurationUnit, Settings } from 'luxon';\nimport { Value } from '../types/Value';\nimport { Optional } from '../types/Types';\nimport { choose } from '../types/Case';\nimport { isDefined, isNumber, isString } from '../types/Is';\nimport { isDate } from '../types/IsDate';\nimport { isA } from '../types/IsA';\nimport { ifDefined } from '../utils/If';\nimport { JsonValue } from '../types/Json';\nimport { seconds } from '../utils/Seconds';\nimport { tryTo } from '../types/Try';\nimport { use } from '../types/Constructor';\n\nSettings.defaultZone = 'utc';\n\nexport type DateTimeUnit = LuxonDateTimeUnit;\nexport type DurationUnit = LuxonDurationUnit;\nexport type Duration = Partial<Record<DurationUnit, number>>;\n\nexport type DiffOptions = {\n rounding: 'floor' | 'ceil' | 'round';\n};\n\nexport type DatetimeInput = string | number | Date | DateTime | null;\n\nexport class DateTime extends Value<Optional<string>> {\n protected readonly luxon: LuxonDateTime;\n\n constructor(value?: DatetimeInput);\n constructor(value?: string, format?: string);\n constructor(value?: DatetimeInput, format?: string) {\n const luxon = choose(value)\n .type(isString, v => (format ? LuxonDateTime.fromFormat(v, format, { setZone: true }) : LuxonDateTime.fromISO(v, { setZone: true })))\n .type(isNumber, v => LuxonDateTime.fromMillis(v))\n .type(isDate, v => LuxonDateTime.fromJSDate(v))\n .type(isDateTime, v => v.luxon)\n // Allow constructing with LuxonDateTime without exposing types\n .else(value instanceof LuxonDateTime ? value : LuxonDateTime.fromISO(undefined as any));\n\n super(luxon.toISO() ?? undefined);\n this.luxon = luxon;\n }\n\n static get now(): DateTime {\n return new DateTime(LuxonDateTime.utc() as any);\n }\n\n get isValid(): boolean {\n return isDefined(this.value) && this.utc.isValid;\n }\n\n /**\n * @deprecated Deprecated in favor for DateTime.from as that also accepts locales and another DateTime\n */\n get fromNow(): string {\n return this.from();\n }\n\n get inAmsterdam(): DateTime {\n return this.withZone('Europe/Amsterdam');\n }\n\n get inNewYork(): DateTime {\n return this.withZone('America/New_York');\n }\n\n get inLondon(): DateTime {\n return this.withZone('Europe/London');\n }\n\n get inWarsaw(): DateTime {\n return this.withZone('Europe/Warsaw');\n }\n\n protected get utc(): LuxonDateTime {\n return this.luxon.setZone('utc');\n }\n\n from(locale?: string): string;\n\n from(date?: DateTime, locale?: string): string;\n\n from(dateOrLocale?: string | DateTime, maybeLocale?: string): string {\n return (\n use((isString(dateOrLocale) ? dateOrLocale : maybeLocale) ?? 'en', locale =>\n ifDefined(\n isA<DateTime>(dateOrLocale) ? dateOrLocale : undefined,\n d => this.utc.setLocale(locale).toRelative({ base: d.utc }),\n () => this.utc.setLocale(locale).toRelative()\n )\n ) ?? ''\n );\n }\n\n isAfter(dt: DateTime): boolean {\n return this.utc > dt.utc;\n }\n\n isBefore(dt: DateTime): boolean {\n return this.utc < dt.utc;\n }\n\n equals(dt: DateTime): boolean {\n return this.utc.hasSame(dt.utc, 'millisecond');\n }\n\n add(n: number, unit?: DurationUnit): DateTime;\n\n add(duration: Duration): DateTime;\n\n add(n: number | Duration, unit: DurationUnit = 'day'): DateTime {\n return new DateTime(this.luxon.plus(isNumber(n) ? { [unit]: n } : n) as any);\n }\n\n subtract(n: number, unit?: DurationUnit): DateTime;\n\n subtract(duration: Duration): DateTime;\n\n subtract(n: number | Duration, unit: DurationUnit = 'day'): DateTime {\n return new DateTime(this.luxon.minus(isNumber(n) ? { [unit]: n } : n) as any);\n }\n\n diff(other: DateTime, unit: DateTimeUnit = 'day', opts?: DiffOptions): number {\n return Math[opts?.rounding ?? 'floor'](this.utc.diff(other.utc).as(unit));\n }\n\n startOf(unit: DateTimeUnit = 'day'): DateTime {\n return new DateTime(this.luxon.startOf(unit) as any);\n }\n\n endOf(unit: DateTimeUnit = 'day'): DateTime {\n return new DateTime(this.luxon.endOf(unit) as any);\n }\n\n isWeekend(): boolean {\n return this.luxon.isWeekend;\n }\n\n withZone(zone: string): DateTime {\n return new DateTime(this.luxon.setZone(zone) as any);\n }\n\n toString(): string {\n return this.value ?? '';\n }\n\n toJSON(): JsonValue {\n return this.utc.toISO();\n }\n\n toFormat(format: string): string {\n return this.luxon.toFormat(format);\n }\n\n toLocale(locale = 'nl-NL', format = 'D'): string {\n return this.luxon.setLocale(locale).toFormat(format);\n }\n\n toFull(locale?: string): string {\n return this.toLocale(locale, 'DDD');\n }\n\n toDate(): Optional<Date> {\n return this.isValid ? this.utc.toJSDate() : undefined;\n }\n\n toEpoch(): number {\n return this.luxon.toMillis();\n }\n\n ago(end: DateTime = DateTime.now): string {\n return seconds.toText(end.diff(this, 'second'));\n }\n\n withClock(clock: DateTime): DateTime {\n return tryTo(() => [this.toDate() as Date, clock.toDate() as Date])\n .map(([td, cd]) => new Date(td.getFullYear(), td.getMonth(), td.getDate(), cd.getHours(), cd.getMinutes(), cd.getSeconds()))\n .map(d => new DateTime(d)).value;\n }\n}\n\nexport const isDateTime = (dt?: unknown): dt is DateTime => isDefined(dt) && dt instanceof DateTime;\n\nexport const dt = (dt?: DatetimeInput): DateTime => new DateTime(dt);\n","export const isDate = (o?: unknown): o is Date => o instanceof Date && !isNaN(o.getTime());\n\nexport const days = {\n add: (date: Date, days: number): Date => {\n date.setDate(date.getDate() + days);\n return date;\n },\n today: (): Date => new Date(),\n yesterday: (): Date => days.add(days.today(), -1),\n tomorrow: (): Date => days.add(days.today(), 1),\n};\n\nexport const inPast = (o?: unknown): boolean => isDate(o) && o <= days.today();\n\nexport const inFuture = (o?: unknown): boolean => isDate(o) && o > days.today();\n","import { ifTrue } from './If';\nimport { toList } from '../types/List';\n\nexport const seconds = {\n toDuration: (s: number) => {\n const seconds = s % 60;\n const minutes = Math.floor(s / 60) % 60;\n const hours = Math.floor(s / 3600) % 24;\n const days = Math.floor(s / 86400);\n return { days, hours, minutes, seconds };\n },\n\n toText: (s: number): string => {\n const { days, hours, minutes, seconds: secs } = seconds.toDuration(s);\n return toList(ifTrue(days, `${days}d`), ifTrue(hours, `${hours}h`), ifTrue(minutes, `${minutes}m`), ifTrue(days + hours + minutes === 0, `${secs}s`))\n .mapDefined(s => s)\n .join(' ');\n },\n};\n","import { validate, Validator } from './Validate';\nimport { Func } from '../types/Func';\nimport { Results } from '../types/Results';\nimport { meta } from '../types/Meta';\nimport { List, toList } from '../types/List';\nimport { isBoolean, isDefined, isFunction, isIn, isNotEmpty, isString } from '../types/Is';\nimport { tryTo } from '../types/Try';\nimport { inFuture, inPast } from '../types/IsDate';\nimport type { Text } from '../types/Text';\nimport { text } from '../types/ToText';\n\nexport type Constraint = Func<boolean | Results, any>;\n\nexport const constraint =\n <T>(c: Constraint, message: Text): PropertyDecorator =>\n (subject: unknown, property: string | symbol): void => {\n const cs = meta(subject).property(property).get<List<Validator>>('constraint') ?? toList<Validator>();\n meta(subject)\n .property(property)\n .set('constraint', cs.add({ property, constraint: c, text: message }));\n };\n\nexport const defined = (message?: Text): PropertyDecorator => constraint(v => isDefined(v), message ?? 'Property {property} must be defined.');\n\nexport const required = (message?: Text): PropertyDecorator =>\n constraint(v => isNotEmpty(v), message ?? 'Property {property} is required, and may not be empty.');\n\nexport const notEmpty = (message?: Text): PropertyDecorator => constraint(v => isNotEmpty(v), message ?? 'Property {property} may not be empty.');\n\nexport const valid = (): PropertyDecorator => constraint(v => validate(v), '');\n\nexport const optional = (): PropertyDecorator => constraint(v => !isDefined(v) || validate(v), '');\n\nexport const includes = (sub: string, message?: string): PropertyDecorator =>\n constraint(s => isDefined(s) && isString(s) && s.includes(sub), message ?? `Value {actual} must include '${sub}'.`);\n\nexport const inList = (values: unknown[], message?: Text): PropertyDecorator =>\n constraint(v => isDefined(v) && isIn(v, values), message ?? 'Value {actual} must appear in list.');\n\nexport const inOptionalList = (values: unknown[], message?: Text): PropertyDecorator =>\n constraint(v => !isDefined(v) || isIn(v, values), message ?? 'Value {actual} must appear in list.');\n\nexport const gt = (limit: number, message?: Text): PropertyDecorator => constraint(v => v > limit, message ?? `Value {actual} must be larger than '${limit}'.`);\n\nexport const gte = (limit: number, message?: Text): PropertyDecorator =>\n constraint(v => v >= limit, message ?? `Value {actual} must be larger than or equal to ${limit}.`);\n\nexport const lt = (limit: number, message?: Text): PropertyDecorator => constraint(v => v < limit, message ?? `Value {actual} must be smaller than ${limit}.`);\n\nexport const lte = (limit: number, message?: Text): PropertyDecorator =>\n constraint(v => v <= limit, message ?? `Value {actual} must be smaller than or equal to ${limit}.`);\n\nexport const past = (message?: Text): PropertyDecorator => constraint(v => inPast(v), message ?? 'Value {actual} must lay in the past.');\n\nexport const future = (message?: Text): PropertyDecorator => constraint(v => inFuture(v), message ?? 'Value {actual} must lay in the future.');\n\nexport const minLength = (length: number, message?: Text): PropertyDecorator =>\n constraint(\n v =>\n tryTo(() => v)\n .is.defined()\n .map(v => text(v).toString().length >= length)\n .orElse(true) as boolean,\n message ?? `Value {actual} must be at least '${length}' characters long.`\n );\n\nexport const maxLength = (length: number, message?: Text): PropertyDecorator =>\n constraint(\n v =>\n tryTo(() => v)\n .is.defined()\n .map(v => text(v).toString().length <= length)\n .orElse(true) as boolean,\n message ?? `Value {actual} cannot be longer than '${length}' characters.`\n );\n\nexport const rule = (message?: Text): PropertyDecorator =>\n constraint(v => (isFunction(v) ? (v() as boolean | Results) : isBoolean(v) ? v : false), message ?? `Value {actual} must be true`);\n","import { Struct } from './Struct';\nimport { DateTime } from './DateTime';\nimport { required, valid } from '../validation/Contraints';\nimport { Identity } from '../types/Identity';\nimport { Json } from '../types/Json';\nimport { choose } from '../types/Case';\nimport { isIdentity } from '../types/IsA';\nimport { ctx } from '../types/Context';\n\nexport class Audit extends Struct {\n @required() readonly by: Identity = { id: this.state.by?.id, user: this.state.by?.user };\n @valid() readonly when: DateTime = new DateTime(this.state.when);\n\n constructor(json?: Json) {\n super(\n choose(json)\n .is.defined(\n j => j,\n j => j\n )\n .else({\n by: isIdentity(ctx.request?.identity) ? ctx.request?.identity : { id: 0, user: 'easy' },\n when: DateTime.now.toJSON(),\n })\n );\n }\n}\n","import { v4 as uuid } from 'uuid';\nimport { isString } from './Is';\nimport { asString } from './Text';\n\nexport type Uuid = string;\nexport const toUuid = (): Uuid => uuid();\n\nconst isValidUuid = new RegExp(/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i);\nexport const isUuid = (id?: unknown): id is Uuid => isString(id) && isValidUuid.test(id);\n\nconst includeUuid = new RegExp(/\\b[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\\b/i);\nexport const includesUuid = (value?: unknown): boolean => includeUuid.test(asString(value));\n","import { toUuid } from './Uuid';\n\nexport type Id = string | number;\nexport type Key = Id;\nexport type Code = Id;\nexport type HasId = { id: Id };\n\nexport const toId = (): Id => toUuid();\n","import { Struct } from './Struct';\nimport { required } from '../validation/Contraints';\nimport { Id, toId } from '../types/Id';\nimport { json, Json } from '../types/Json';\n\nexport abstract class Child extends Struct {\n @required() readonly id: Id = this.state.id ?? toId();\n\n protected merge(a: unknown): Json {\n return json.merge(this, a, { id: this.id });\n }\n}\n","import { Struct } from './Struct';\nimport { Audit } from './Audit';\nimport { required } from '../validation/Contraints';\nimport { Id, toId } from '../types/Id';\nimport { json, Json } from '../types/Json';\n\nexport abstract class Entity extends Struct {\n @required() readonly id: Id = this.state.id ?? toId();\n @required() readonly created: Audit = new Audit(this.state.created);\n @required() readonly lastModified: Audit = new Audit(this.state.lastModified);\n\n protected merge(a: unknown): Json {\n return json.merge(this, a, {\n id: this.id,\n created: this.created,\n lastModified: new Audit(),\n });\n }\n}\n","import { FetchOptions } from './Gateway';\nimport { PageList } from './PageList';\nimport { Exception } from './Exception';\nimport { reject } from '../utils/Promise';\nimport { Id, Key } from './Id';\nimport { List } from './List';\nimport { Json, JsonValue } from './Json';\n\nexport class Repository<T, Options = FetchOptions> {\n all(options?: Options): Promise<PageList<T>> {\n return reject(Exception.IsNotImplemented);\n }\n\n byId(id: Id): Promise<T> {\n return reject(Exception.IsNotImplemented);\n }\n\n byIds(...ids: Id[]): Promise<List<T>> {\n return reject(Exception.IsNotImplemented);\n }\n\n byKey(key: Key, options?: Options): Promise<PageList<T>> {\n return reject(Exception.IsNotImplemented);\n }\n\n by(key: keyof T, value: JsonValue, options?: Options): Promise<PageList<T>> {\n return reject(Exception.IsNotImplemented);\n }\n\n search(q: JsonValue, options?: Options): Promise<PageList<T>> {\n return reject(Exception.IsNotImplemented);\n }\n\n filter(options?: Options): Promise<PageList<T>> {\n return reject(Exception.IsNotImplemented);\n }\n\n exists(id: Id): Promise<boolean> {\n return reject(Exception.IsNotImplemented);\n }\n\n add(t: Partial<T> | Json): Promise<T> {\n return reject(Exception.IsNotImplemented);\n }\n\n update(id: Id, json: Partial<T> | Json): Promise<T> {\n return reject(Exception.IsNotImplemented);\n }\n\n remove(id: Id): Promise<boolean> {\n return reject(Exception.IsNotImplemented);\n }\n\n upsert(id: Id, item: Partial<T> | Json): Promise<T> {\n return reject(Exception.IsNotImplemented);\n }\n}\n","import { Struct } from './Struct';\nimport { FetchOptions, Gateway } from '../types/Gateway';\nimport { Repository } from '../types/Repository';\nimport { Constructor } from '../types/Constructor';\nimport { Json, JsonValue, toJson } from '../types/Json';\nimport { isValidatable } from '../types/Validatable';\nimport { PageList } from '../types/PageList';\nimport { Id, Key } from '../types/Id';\nimport { when } from '../validation/When';\nimport { Exception } from '../types/Exception';\nimport { asList, List } from '../types/List';\nimport { reject, resolve } from '../utils/Promise';\n\nexport type RepoAction = 'add' | 'update' | 'remove';\n\nexport class Repo<T extends Struct, Options = FetchOptions> extends Repository<T, Options> {\n constructor(\n protected ctor: Constructor<T>,\n private readonly gateway: Gateway<Options>\n ) {\n super();\n }\n\n create = (item: T | Json): T => (isValidatable(item) ? item : new this.ctor(item));\n\n all(options?: Options): Promise<PageList<T>> {\n return this.gateway.all(options).then(js => js.map(i => new this.ctor(i)));\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 => new this.ctor(j));\n }\n\n byIds(...ids: Id[]): Promise<List<T>> {\n return this.gateway.byIds(...ids).then(j => asList(this.ctor, j));\n }\n\n byKey(key: Key, options?: Options): Promise<PageList<T>> {\n return this.gateway.by('key', key, options).then(js => js.map(i => new this.ctor(i)));\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(i => new this.ctor(i)));\n }\n\n search(q: JsonValue, options?: Options): Promise<PageList<T>> {\n return this.gateway.search(q, options).then(js => js.map(i => new this.ctor(i)));\n }\n\n filter(options?: Options): Promise<PageList<T>> {\n return this.gateway.filter(options).then(js => js.map(i => new this.ctor(i)));\n }\n\n exists(id: Id): Promise<boolean> {\n return this.gateway.exists(id);\n }\n\n add(t: T | Json): Promise<T> {\n return this.extend(this.create(t), 'add')\n .then(i => when(i).not.isValid.reject())\n .then(i => this.validate(i, 'add'))\n .then(i => this.gateway.add(toJson(i)))\n .then(j => new this.ctor(j));\n }\n\n update(id: Id, json: Json): Promise<T> {\n return this.gateway\n .byId(id)\n .then(j => when(j).not.isDefined.reject(Exception.DoesNotExist))\n .then(j => new this.ctor(j).update(json) as T)\n .then(i => this.extend(i, 'update'))\n .then(i => when(i).not.isValid.reject())\n .then(i => this.validate(i, 'update'))\n .then(i => this.gateway.update(toJson(i)))\n .then(j => new this.ctor(j));\n }\n\n remove(id: Id): Promise<boolean> {\n return this.gateway.remove(id);\n }\n\n extend(item: T, _action?: RepoAction): Promise<T> {\n return resolve(item);\n }\n\n validate(item: T, _action?: RepoAction): Promise<T> {\n return resolve(item);\n }\n\n upsert(id: Id, item: Json): Promise<T> {\n return this.update(id, item).catch(e => (Exception.DoesNotExist.equals(e) ? this.add(item) : reject(e)));\n }\n}\n","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","import { Get, ofGet } from './Get';\nimport { tryTo } from './Try';\nimport { isNumber } from './Is';\nimport { asString } from './Text';\n\nexport const asNumber = (n: unknown, alt?: Get<number>): number =>\n tryTo(() => asString(n))\n .map(s => parseInt(s))\n .filter(n => isNumber(n))\n .or(ofGet(alt) ?? NaN);\n","import { asNumber } from './Number';\nimport { choose } from './Case';\nimport { asString } from './Text';\nimport { isNumber, isString } from './Is';\n\nexport type CacheAge = `${number}${'ms' | 's' | 'm' | 'h' | 'd'}` | number;\n\nconst ageNumber = (s: string): number => asNumber(s.replace(/[a-z]/g, ''));\n\nexport const cacheAge = {\n toMilliseconds: (ca: CacheAge): number =>\n choose(asString(ca))\n .case(\n c => c.endsWith('ms'),\n c => ageNumber(c)\n )\n .case(\n c => c.endsWith('s'),\n c => ageNumber(c) * 1000\n )\n .case(\n c => c.endsWith('m'),\n c => ageNumber(c) * 60 * 1000\n )\n .case(\n c => c.endsWith('h'),\n c => ageNumber(c) * 3600 * 1000\n )\n .case(\n c => c.endsWith('d'),\n c => ageNumber(c) * 24 * 3600 * 1000\n )\n .else(ca as number),\n\n toSeconds: (ca: CacheAge): number =>\n choose(asString(ca))\n .case(\n c => c.endsWith('ms'),\n c => ageNumber(c) / 1000\n )\n .case(\n c => c.endsWith('s'),\n c => ageNumber(c)\n )\n .case(\n c => c.endsWith('m'),\n c => ageNumber(c) * 60\n )\n .case(\n c => c.endsWith('h'),\n c => ageNumber(c) * 3600\n )\n .case(\n c => c.endsWith('d'),\n c => ageNumber(c) * 24 * 3600\n )\n .else(ca as number),\n};\n\nexport const isCacheAge = (ca?: unknown): ca is CacheAge => isString(ca) || isNumber(ca);\n","import { cacheAge, CacheAge, isCacheAge } from '../types/CacheAge';\nimport { on } from '../types/Constructor';\nimport { entries } from '../types/Object';\nimport { ifDefined } from '../utils/If';\n\nexport class CacheControl {\n name = 'Cache-Control';\n\n protected constructor(\n readonly enabled = true,\n private directives: Record<string, boolean | CacheAge | undefined> = {}\n ) {}\n\n static disabled = () => new CacheControl(false);\n\n static OneSecond = () => new CacheControl().maxAge(1).staleWhileRevalidate(1);\n\n static fiveSeconds = () => new CacheControl().maxAge(5).staleWhileRevalidate(5);\n\n static tenSeconds = () => new CacheControl().maxAge(10).staleWhileRevalidate(10);\n\n static thirtySeconds = () => new CacheControl().maxAge(30).staleWhileRevalidate(30);\n\n static sixtySeconds = () => new CacheControl().maxAge(60).staleWhileRevalidate(60);\n\n static custom = (maxAge?: CacheAge, staleWhileRevalidate?: CacheAge) => new CacheControl().maxAge(maxAge).staleWhileRevalidate(staleWhileRevalidate);\n\n readonly maxAge = (ca?: CacheAge): this => on(this, t => (t.directives['max-age'] = ca));\n\n readonly sharedMaxAge = (ca?: CacheAge): this => on(this, t => (t.directives['s-maxage'] = ca));\n\n readonly noCache = (a?: boolean): this => on(this, t => (t.directives['no-cache'] = a));\n\n readonly mustRevalidate = (a?: boolean): this => on(this, t => (t.directives['must-revalidate'] = a));\n\n readonly private = (a?: boolean): this => on(this, t => (t.directives['private'] = a));\n\n readonly public = (a?: boolean): this => on(this, t => (t.directives['public'] = a));\n\n readonly immutable = (a?: boolean): this => on(this, t => (t.directives['immutable'] = a));\n\n readonly staleWhileRevalidate = (ca?: CacheAge): this => on(this, t => (t.directives['stale-while-revalidate'] = ca));\n\n value = (): string => this.toString();\n\n toString(): string {\n return entries(this.directives)\n .mapDefined(([k, v]) => ifDefined(v, isCacheAge(v) ? `${k}=${cacheAge.toSeconds(v)}` : k))\n .join(',');\n }\n}\n","import formUrlEncoded from 'form-urlencoded';\nimport { Enum } from '../types/Enum';\nimport { Get, ofGet } from '../types/Get';\nimport { asString } from '../types/Text';\n\nexport class ContentType extends Enum {\n static Form = new ContentType('form', 'application/x-www-form-urlencoded', b => formUrlEncoded(b));\n static Json = new ContentType('json', 'application/json', b => b);\n static RawJson = new ContentType('rawJson', 'application/json', b => b);\n static Stream = new ContentType('stream', 'application/octet-stream');\n static Text = new ContentType('text', 'text/plain');\n static Xml = new ContentType('xml', 'application/xml');\n\n private constructor(\n name: string,\n readonly type: string,\n protected readonly encoder: Get<string> = b => asString(b)\n ) {\n super(name, type);\n }\n\n encode = (body?: unknown): string => ofGet(this.encoder, body);\n}\n","export const HttpHeader = {\n ContentType: 'Content-Type',\n Correlation: 'X-Correlation-Id',\n};\n","import { Enum } from '../types/Enum';\nimport { TypeGuard } from '../types/TypeGuard';\nimport { isAn } from '../types/IsA';\nimport { Code } from '../types/Id';\n\nexport class HttpStatus extends Enum {\n static Continue = new HttpStatus('Continue', 100);\n static SwitchingProtocols = new HttpStatus('Switching protocols', 101);\n static Processing = new HttpStatus('Processing', 102);\n static EarlyHints = new HttpStatus('Early hints', 103);\n static Ok = new HttpStatus('Ok', 200);\n static Created = new HttpStatus('Created', 201);\n static Accepted = new HttpStatus('Accepted', 202);\n static NonAuthoritativeInformation = new HttpStatus('Non-authoritative information', 203);\n static NoContent = new HttpStatus('No content', 204);\n static ResetContent = new HttpStatus('Reset content', 205);\n static PartialContent = new HttpStatus('Partial content', 206);\n static MultiStatus = new HttpStatus('Multi-status', 207);\n static AlreadyReported = new HttpStatus('Already reported', 208);\n static ImUsed = new HttpStatus('IM used', 226);\n static MultipleChoices = new HttpStatus('Multiple Choices', 300);\n static MovedPermanently = new HttpStatus('Moved Permanently', 301);\n static Found = new HttpStatus('Found', 302);\n static SeeOther = new HttpStatus('See other', 303);\n static NotModified = new HttpStatus('Not modified', 304);\n static UseProxy = new HttpStatus('Use proxy', 305);\n static SwitchProxy = new HttpStatus('Switch proxy', 306);\n static TemporaryRedirect = new HttpStatus('Temporary redirect', 307);\n static PermanentRedirect = new HttpStatus('Permanent redirect', 308);\n static BadRequest = new HttpStatus('Bad request', 400);\n static NotAuthorized = new HttpStatus('Not authorized', 401);\n static PaymentRequired = new HttpStatus('Payment required', 402);\n static Forbidden = new HttpStatus('Forbidden', 403);\n static NotFound = new HttpStatus('Not found', 404);\n static MethodNotAllowed = new HttpStatus('Method not allowed', 405);\n static NotAcceptable = new HttpStatus('Not acceptable', 406);\n static ProxyAuthenticationRequired = new HttpStatus('Proxy authentication required', 407);\n static RequestTimeout = new HttpStatus('Request timeout', 408);\n static Conflict = new HttpStatus('Conflict', 409);\n static Gone = new HttpStatus('Gone', 410);\n static LengthRequired = new HttpStatus('Length required', 411);\n static PreconditionFailed = new HttpStatus('Precondition failed', 412);\n static PayloadTooLarge = new HttpStatus('Payload too large', 413);\n static UriTooLong = new HttpStatus('URI too long', 414);\n static UnsupportedMediaType = new HttpStatus('Unsupported media type', 415);\n static RangeNotSatisfiable = new HttpStatus('Range not satisfiable', 416);\n static ExpectationFailed = new HttpStatus('Expectation failed', 417);\n static ImATeapot = new HttpStatus(\"I'm a teapot\", 418);\n static MisdirectedRequest = new HttpStatus('Misdirected request', 421);\n static UnprocessableEntity = new HttpStatus('Unprocessable entity', 422);\n static Locked = new HttpStatus('Locked', 423);\n static FailedDependency = new HttpStatus('Failed dependency', 424);\n static TooEarly = new HttpStatus('Too early', 425);\n static UpgradeRequired = new HttpStatus('Upgrade required', 426);\n static PreconditionRequired = new HttpStatus('Precondition required', 428);\n static TooManyRequests = new HttpStatus('Too many requests', 429);\n static RequestHeaderFieldsTooLarge = new HttpStatus('Request header fields too large', 431);\n static UnavailableForLegalReasons = new HttpStatus('Unavailable for legal reasons', 451);\n static InternalServerError = new HttpStatus('Internal server error', 500);\n static NotImplemented = new HttpStatus('Not implemented', 501);\n static BadGateway = new HttpStatus('Bad gateway', 502);\n static ServiceUnavailable = new HttpStatus('Service unavailable', 503);\n static GatewayTimeout = new HttpStatus('Gateway timeout', 504);\n static HTTPVersionNotSupported = new HttpStatus('Http version not supported', 505);\n static VariantAlsoNegotiates = new HttpStatus('Variant also negotiates', 506);\n static InsufficientStorage = new HttpStatus('Insufficient storage', 507);\n static LoopDetected = new HttpStatus('Loop detected', 508);\n static NotExtended = new HttpStatus('Not extended', 510);\n static NetworkAuthenticationRequired = new HttpStatus('Network authentication required', 511);\n\n get isError(): boolean {\n return this.isClientError || this.isServerError;\n }\n\n get isClientError(): boolean {\n return (this.id as number) >= 400 && (this.id as number) < 500;\n }\n\n get isServerError(): boolean {\n return (this.id as number) >= 500 && (this.id as number) < 600;\n }\n\n get status(): number {\n return this.id as number;\n }\n}\n\nexport const isHttpStatus: TypeGuard<HttpStatus> = (s?: unknown): s is HttpStatus => isAn<HttpStatus>(s, 'id', 'status');\n\nexport const toHttpStatus = (s: HttpStatus | Code): HttpStatus => (isHttpStatus(s) ? s : HttpStatus.byId(s));\n","import { Enum } from '../types/Enum';\n\nexport class HttpVerb extends Enum {\n static Get = new HttpVerb('Get');\n static Put = new HttpVerb('Put');\n static Patch = new HttpVerb('Patch');\n static Post = new HttpVerb('Post');\n static Delete = new HttpVerb('Delete');\n\n constructor(name: string) {\n super(name, name.toLowerCase(), name.toUpperCase());\n }\n}\n","import { HttpHeader } from './HttpHeader';\nimport { ContentType } from './ContentType';\nimport { PageOptions } from '../types/PageList';\nimport { Optional } from '../types/Types';\nimport { asString, Text } from '../types/Text';\nimport { Enum } from '../types/Enum';\nimport { CacheAge } from '../types/CacheAge';\nimport { ctx } from '../types/Context';\nimport { toUuid } from '../types/Uuid';\nimport { Id } from '../types/Id';\nimport { on } from '../types/Constructor';\nimport { isDefined, isNotEmpty } from '../types/Is';\n\nexport const toPageOptions = (options?: RequestOptions | PageOptions): Optional<PageOptions> =>\n options instanceof RequestOptions ? options.pageOptions : options;\n\nexport class RequestOptions extends Enum {\n public requestOptions: { maxRedirects?: number; validateStatus?: (status: number) => boolean; timeout?: CacheAge } = {};\n\n constructor(\n readonly type: ContentType = ContentType.Json,\n readonly headers: { [key: string]: any } = {},\n public pageOptions?: PageOptions\n ) {\n super(type.name);\n this.headers['Content-Type'] = type.id;\n this.headers[HttpHeader.Correlation] = ctx.request.correlationId ?? toUuid();\n }\n\n static get Form(): RequestOptions {\n return new RequestOptions(ContentType.Form);\n }\n\n static get Json(): RequestOptions {\n return new RequestOptions(ContentType.Json);\n }\n\n static get Stream(): RequestOptions {\n return new RequestOptions(ContentType.Stream);\n }\n\n static get Text(): RequestOptions {\n return new RequestOptions(ContentType.Text);\n }\n\n static get Xml(): RequestOptions {\n return new RequestOptions(ContentType.Xml);\n }\n\n page = (options: PageOptions): this => {\n this.pageOptions = options;\n return this;\n };\n\n authorization = (auth: string): this => this.setHeader('Authorization', auth);\n\n apiKey = (apiKey: string): this => this.setHeader('apiKey', apiKey);\n\n setHeader = (key: Text, value: Id | boolean): this => on(this, t => (t.headers[asString(key)] = value));\n\n setHeaderUnlessPresent = (key: string, value?: Id | boolean): this => (value ? this.setHeader(key, this.headers[key] ?? value) : this);\n\n accept = (type: ContentType): this => this.setHeader('Accept', type.id);\n\n bearer = (jwt: Text): this => {\n return isNotEmpty(jwt) ? this.authorization(`Bearer ${jwt}`) : this;\n };\n\n basic = (username: Text, password: Text): this => {\n const basicAuth = Buffer.from(`${username}:${password}`, 'utf8').toString('base64');\n return this.authorization(`Basic ${basicAuth}`);\n };\n\n maxRedirects = (max?: number): this => {\n this.requestOptions.maxRedirects = max;\n return this;\n };\n\n validateStatus = (validate?: (status: number) => boolean): this => {\n this.requestOptions.validateStatus = validate;\n return this;\n };\n\n timeout = (t?: CacheAge): this => {\n this.requestOptions.timeout = t;\n return this;\n };\n}\n\nexport const isRequestOptions = (o?: unknown): o is RequestOptions => isDefined(o) && o instanceof RequestOptions;\n","import { HttpStatus } from './HttpStatus';\nimport type { RestResult } from './RestResult';\nimport { isA } from '../types/IsA';\nimport { TypeGuard } from '../types/TypeGuard';\n\nexport type Response = {\n status: HttpStatus;\n headers?: { [key: string]: any };\n body: RestResult;\n};\n\nexport const isResponse: TypeGuard<Response> = (r?: unknown): r is Response => isA<Response>(r, 'status', 'body');\n","import { HttpStatus, isHttpStatus } from './HttpStatus';\nimport { isResponse } from './Response';\nimport { List, toList } from '../types/List';\nimport { Json } from '../types/Json';\nimport { isResult, Result, toResult } from '../types/Result';\nimport { isDefined, isError } from '../types/Is';\nimport { choose } from '../types/Case';\nimport { isResults } from '../types/Results';\nimport { Id } from '../types/Id';\n\nexport type RestResult = {\n data?: { code: number; items: List<Json>; itemCount: number; totalItems?: number; meta?: Json };\n error?: { code: number; message: string; errorCount: number; errors: List<Result> };\n};\n\nconst hasErrors = (a: any): a is { error: { code: number; errors: List<Result> } } => isDefined(a?.error?.errors);\nconst hasItems = (a: any): a is { data: { code: number; items: List<Json>; totalItems?: number; meta?: Json } } => isDefined(a?.data.items);\n\nexport const rest = {\n toData: (status: HttpStatus, items: Json[] = [], totalItems?: number, meta?: Json): RestResult => ({\n data: {\n code: status.status,\n items: toList(items),\n itemCount: items.length,\n totalItems,\n meta,\n },\n }),\n toError: (status: HttpStatus, errors: Result[] = [toResult(status.name)]): RestResult => ({\n error: {\n code: status.status,\n message: status.name ?? errors[0].message ?? 'Unknown',\n errors: toList(errors),\n errorCount: errors.length,\n },\n }),\n to: (payload?: any | any[], status?: HttpStatus): RestResult =>\n choose(payload)\n .is.not.defined(p => p, undefined as unknown as RestResult)\n .type(isHttpStatus, h => rest.toError(h ?? status ?? HttpStatus.InternalServerError, [toResult(h.name)]))\n .type(isResult, r => rest.toError(status ?? HttpStatus.BadRequest, [r]))\n .type(isError, e => rest.toError(status ?? HttpStatus.BadRequest, [e]))\n .type(isResults, r => rest.toError(status ?? HttpStatus.BadRequest, r.results))\n .type(isResponse, r => rest.toError(status ?? HttpStatus.byId(r.body.error?.code as Id), r.body.error?.errors))\n .type(hasErrors, e => rest.toError(status ?? HttpStatus.byId(e.error.code, HttpStatus.BadRequest), e.error.errors))\n .type(hasItems, d => rest.toData(status ?? HttpStatus.byId(d.data.code, HttpStatus.Ok), d.data.items, d.data.totalItems, d.data.meta))\n .else(p => rest.toData(status ?? HttpStatus.Ok, toList(p))),\n};\n\nexport const isRestResult = (r: unknown): r is RestResult => isDefined(r) && (isDefined((r as RestResult).data) || isDefined((r as RestResult).error));\n","import { HttpStatus, toHttpStatus } from './HttpStatus';\nimport { rest } from './RestResult';\nimport { Response } from './Response';\nimport { Code } from '../types/Id';\n\nexport function toResponse(status: HttpStatus | Code, body?: unknown, headers?: { [key: string]: any }): Response {\n return {\n status: toHttpStatus(status),\n headers,\n body: rest.to(body),\n };\n}\n","import { Enum } from '../types/Enum';\nimport type { Text } from '../types/Text';\nimport { kebab } from '../types/Text';\nimport { List, toList } from '../types/List';\nimport { isString } from '../types/Is';\nimport { IdNamePlain } from '../types/IdName';\nimport { text } from '../types/ToText';\n\nexport class Scope extends Enum {\n protected constructor(\n readonly name: string,\n id: Text = text(name).kebab,\n readonly subs: List<Scope> = toList()\n ) {\n super(name, id.toString());\n }\n\n for(item: string | IdNamePlain): Scope {\n return new Scope(`${this.name} ${isString(item) ? text(item).title : item.name}`, kebab(`${this.id} ${isString(item) ? item : item.id}`));\n }\n\n combines(...scopes: Scope[]): this {\n this.subs.add(scopes);\n return this;\n }\n\n expand(): List<Scope> {\n return this.subs\n .flatMap(s => s.expand())\n .add(this)\n .distinct();\n }\n}\n","import { Scope } from './Scope';\n\nexport class App extends Scope {\n constructor(name: string) {\n super(name);\n }\n\n static readonly Main = new App('Main');\n}\n","import { FetchOptions } from '../types/Gateway';\nimport { Repository } from '../types/Repository';\nimport { PageList, toPageList } from '../types/PageList';\nimport { Id, Key } from '../types/Id';\nimport { List } from '../types/List';\nimport { Req } from '../resources/Req';\nimport { JsonValue } from '../types/Json';\nimport { choose } from '../types/Case';\nimport { resolve } from '../utils/Promise';\n\nexport class Search<T, Options = FetchOptions> {\n constructor(protected repo: Repository<T, Options>) {}\n\n all(options?: Options): Promise<PageList<T>> {\n return this.repo.all(options);\n }\n\n byId(id: Id): Promise<T> {\n return this.repo.byId(id);\n }\n\n byIds(...ids: Id[]): Promise<List<T>> {\n return this.repo.byIds(...ids);\n }\n\n byKey(key: Key, options?: Options): Promise<PageList<T>> {\n return this.repo.byKey(key, options);\n }\n\n query({ query, skip, take }: Req): Promise<PageList<T>> {\n return this.search(query, { skip, take } as Options);\n }\n\n search(query: JsonValue, options?: Options): Promise<PageList<T>> {\n return choose(query)\n .is.not.empty(\n q => q,\n q => this.repo.search(q, options)\n )\n .else(() => resolve(toPageList<T>()));\n }\n\n filter(options?: Options): Promise<PageList<T>> {\n return this.repo.filter(options);\n }\n\n exists(id: Id): Promise<boolean> {\n return this.repo.exists(id);\n }\n}\n","import { Search } from './Search';\nimport { FetchOptions } from '../types/Gateway';\nimport { Json } from '../types/Json';\nimport { Id } from '../types/Id';\n\nexport class Manage<T, Options = FetchOptions> extends Search<T, Options> {\n add(json: Json): Promise<T> {\n return this.repo.add(json);\n }\n\n update(id: Id, json: Json): Promise<T> {\n return this.repo.update(id, json);\n }\n\n upsert(id: Id, json: Json): Promise<T> {\n return this.repo.upsert(id, json);\n }\n\n remove(id: Id): Promise<boolean> {\n return this.repo.remove(id);\n }\n}\n","import { Scope } from './Scope';\nimport { App } from './App';\nimport { Enum } from '../types/Enum';\nimport { kebab, Text } from '../types/Text';\nimport { List, toList } from '../types/List';\nimport { isIn, isString } from '../types/Is';\nimport { IdNamePlain } from '../types/IdName';\nimport { text } from '../types/ToText';\n\nexport class UseCase extends Enum {\n constructor(\n readonly app: App,\n name: string,\n id: Text = text(name).kebab,\n readonly scopes: List<Scope> = toList<Scope>()\n ) {\n super(name, id.toString());\n }\n\n static byScopes<U extends UseCase>(...s: Scope[]): List<U> {\n return this.filter(u => u.scopes.some(us => isIn(us, s)));\n }\n\n with(...s: Scope[]): this {\n this.scopes.add(\n ...toList(s)\n .flatMap(s => s.expand())\n .distinct()\n );\n return this;\n }\n\n for(item: string | IdNamePlain): UseCase {\n return new UseCase(this.app, `${this.name} ${isString(item) ? item : item?.name}`, kebab(`${this.id} ${isString(item) ? item : item.id}`)).with(\n ...this.scopes.map(s => s?.for(item))\n );\n }\n}\n","import { PageOptions } from '../types/PageList';\nimport { Optional } from '../types/Types';\nimport { Json, JsonValue } from '../types/Json';\nimport { OneOrMore } from '../types/Array';\nimport { ifDefined } from '../utils/If';\nimport { asNumber } from '../types/Number';\nimport { Id } from '../types/Id';\nimport type { Text } from '../types/Text';\n\nexport class Req<T = unknown> implements Omit<PageOptions, 'sort'> {\n readonly skip: Optional<number>;\n readonly take: Optional<number>;\n constructor(\n readonly path: Json = {},\n readonly query: Json = {},\n readonly body: T,\n readonly headers: Record<string, OneOrMore<string>>\n ) {\n this.skip = ifDefined(query.skip, s => asNumber(s));\n this.take = ifDefined(query.take, t => asNumber(t));\n }\n\n get id(): Id {\n return this.get('id');\n }\n\n get q(): JsonValue {\n return this.get('q');\n }\n\n get = (key: Text): any => this.path[key.toString()] ?? this.query[key.toString()];\n}\n\nexport function toReq<T = unknown>(req: { params?: { id?: unknown }; query?: { q?: unknown }; body?: T; headers?: unknown }): Req {\n return new Req(req.params as Json, req.query as Json, req.body as Json, req.headers as Record<string, OneOrMore<string>>);\n}\n","import { jwtDecode as decode } from 'jwt-decode';\nimport { Json } from '../types/Json';\nimport {Value} from \"../types/Value\";\n\nexport class Jwt extends Value {\n static of = (a: { jwt: string }): Jwt => new Jwt(a.jwt);\n\n decode = (): Json => decode(this.value);\n\n toJSON(): Json {\n return { jwt: this.value };\n }\n}\n","import axios, { AxiosError, AxiosInstance, AxiosResponse, Method } from 'axios';\nimport { toResponse } from '../http/toResponse';\nimport { isDefined, isEmpty } from '../types/Is';\nimport { Uri } from '../types/Uri';\nimport { HttpVerb } from '../http/HttpVerb';\nimport { choose } from '../types/Case';\nimport { isRestResult } from '../http/RestResult';\nimport { toResult } from '../types/Result';\nimport { HttpStatus } from '../http/HttpStatus';\nimport { RequestProvider } from '../http/RequestProvider';\nimport { RequestOptions } from '../http/RequestOptions';\nimport { ctx } from '../types/Context';\nimport { cacheAge } from '../types/CacheAge';\nimport { Response } from '../http/Response';\nimport { Request } from '../http/Request';\n\nconst isResponse = (a: unknown): a is { response: AxiosResponse } => isDefined((a as any)?.response);\nconst isRequest = (a: unknown): a is { request: any } => isDefined((a as any)?.request);\n\nconst asResponse = (uri: Uri, verb: HttpVerb, error: AxiosError): Response =>\n choose(error)\n .type(isResponse, r =>\n toResponse(r.response.status, isRestResult(r.response.data) ? r.response.data : toResult(r.response.statusText, uri.path, uri), r.response.headers)\n )\n .type(isRequest, r => toResponse(r.request.status, toResult(r.request.message, uri.path, uri)))\n .else(e => toResponse(HttpStatus.InternalServerError, toResult(e.message, uri.path, uri)));\n\nexport class AxiosProvider implements RequestProvider {\n constructor(readonly ai: AxiosInstance = axios) {}\n\n execute = ({ uri, verb, body, transform = (r: any) => r, transformError = (r: any) => r, options = RequestOptions.Json }: Request): Promise<Response> =>\n this.ai\n .request({\n url: uri.toString(),\n method: verb.toString() as Method,\n headers: uri.isInternal && isEmpty(options.headers.Authorization) ? options.bearer(ctx.request.jwt).headers : options.headers,\n data: options.type.encode(body),\n maxRedirects: options.requestOptions.maxRedirects,\n ...(options.requestOptions.timeout && { timeout: cacheAge.toMilliseconds(options?.requestOptions.timeout) }),\n ...(options.requestOptions.validateStatus && { validateStatus: options.requestOptions.validateStatus }),\n })\n .then(r => toResponse(r.status, transform(r.data), r.headers))\n .catch(e => Promise.reject(asResponse(uri, verb, transformError(e))));\n}\n","import { AxiosProvider } from './AxiosProvider';\nimport { RequestOptions, toPageOptions } from '../http/RequestOptions';\nimport { FetchOptions } from '../types/Gateway';\nimport { RequestProvider } from '../http/RequestProvider';\nimport { Store } from '../types/Cache';\nimport { Uri } from '../types/Uri';\nimport { HttpVerb } from '../http/HttpVerb';\nimport { Request } from '../http/Request';\nimport { Response } from '../http/Response';\n\nexport type RouteOptions = RequestOptions | FetchOptions;\n\nexport class Api {\n constructor(\n readonly provider: RequestProvider = new AxiosProvider(),\n protected store?: Store<Response, Request>\n ) {}\n\n get(uri: Uri, options?: RouteOptions, transform?: (r: any) => any, transformError = (r: any) => r): Promise<Response> {\n return this.execute({\n uri: uri.skip(toPageOptions(options)?.skip).take(toPageOptions(options)?.take),\n verb: HttpVerb.Get,\n transform,\n transformError,\n options: this.options(HttpVerb.Get, options),\n });\n }\n\n post(uri: Uri, body?: unknown, options: RouteOptions = RequestOptions.Json, transform?: (r: any) => any, transformError = (r: any) => r): Promise<Response> {\n return this.execute({\n uri,\n verb: HttpVerb.Post,\n body,\n transform,\n transformError,\n options: this.options(HttpVerb.Post, options),\n });\n }\n\n put(uri: Uri, body?: unknown, options: RouteOptions = RequestOptions.Json, transform?: (r: any) => any, transformError = (r: any) => r): Promise<Response> {\n return this.execute({\n uri,\n verb: HttpVerb.Put,\n body,\n transform,\n transformError,\n options: this.options(HttpVerb.Put, options),\n });\n }\n\n patch(uri: Uri, body?: unknown, options: RouteOptions = RequestOptions.Json, transform?: (r: any) => any, transformError = (r: any) => r): Promise<Response> {\n return this.execute({\n uri,\n verb: HttpVerb.Patch,\n body,\n transform,\n transformError,\n options: this.options(HttpVerb.Patch, options),\n });\n }\n\n delete(uri: Uri, options: RouteOptions = RequestOptions.Json, transform?: (b: any) => any, transformError = (r: any) => r): Promise<Response> {\n return this.execute({\n uri,\n verb: HttpVerb.Delete,\n transform,\n transformError,\n options: this.options(HttpVerb.Delete, options),\n });\n }\n\n options(verb: HttpVerb, options?: RouteOptions): RequestOptions {\n return options instanceof RequestOptions ? options : RequestOptions.Json;\n }\n\n execute(req: Request): Promise<Response> {\n return this.store ? this.store.execute(req, () => this.provider.execute(req)) : this.provider.execute(req);\n }\n}\n\nexport const api: Api = new Api();\n","import { Api, RouteOptions } from './Api';\nimport { FetchOptions, Gateway } from '../types/Gateway';\nimport { Uri } from '../types/Uri';\nimport { PageList, toPageList } from '../types/PageList';\nimport { Json } from '../types/Json';\nimport { use } from '../types/Constructor';\nimport { Optional } from '../types/Types';\nimport { RequestOptions } from '../http/RequestOptions';\n\nexport class ApiGateway extends Gateway<RouteOptions> {\n constructor(readonly api: Api = new Api()) {\n super();\n }\n\n get(uri: Uri, options?: RouteOptions): Promise<PageList<Json>> {\n return this.api.get(uri, options).then(r => use(r.body.data, d => toPageList(d?.items, { total: d?.totalItems, ...d?.meta })));\n }\n\n getOne(uri: Uri, options?: RouteOptions): Promise<Optional<Json>> {\n return this.get(uri, options).then(r => r.first());\n }\n\n post(uri: Uri, item?: Json, options?: RouteOptions): Promise<Json> {\n return this.api.post(uri, item, options).then(r => r.body.data?.items.first() ?? {});\n }\n\n postSearch(uri: Uri, options?: RequestOptions | FetchOptions): Promise<PageList<Json>> {\n return this.api.post(uri, options).then(r => use(r.body.data, d => toPageList(d?.items, { total: d?.totalItems, ...d?.meta })));\n }\n\n patch(uri: Uri, item?: Json, options?: RouteOptions): Promise<Json> {\n return this.api.patch(uri, item, options).then(r => r.body.data?.items.first() ?? {});\n }\n\n put(uri: Uri, item?: Json, options?: RouteOptions): Promise<Json> {\n return this.api.put(uri, item, options).then(r => r.body.data?.items.first() ?? {});\n }\n\n delete(uri: Uri, options?: RouteOptions): Promise<boolean> {\n return this.api.delete(uri, options).then(() => true);\n }\n}\n","import { Api } from './Api';\nimport { ApiGateway } from './ApiGateway';\nimport { Func } from '../types/Func';\nimport { Uri, UriExpandProps } from '../types/Uri';\nimport { PageList } from '../types/PageList';\nimport { Json, JsonValue } from '../types/Json';\nimport { Id } from '../types/Id';\nimport { Optional } from '../types/Types';\nimport { List } from '../types/List';\nimport { toArray } from '../types/Array';\nimport { HttpStatus } from '../http/HttpStatus';\nimport { isDefined } from '../types/Is';\n\nexport class RouteGateway<Props extends UriExpandProps = UriExpandProps> extends ApiGateway {\n constructor(\n readonly route: Func<Uri<Props>>,\n readonly routeId: Func<Uri<Props>>,\n readonly api: Api = new Api()\n ) {\n super(api);\n }\n\n all(options?: Props): Promise<PageList<Json>> {\n return this.get(this.route().expand(options ?? {}) as Uri, options);\n }\n\n byId(id: Id): Promise<Optional<Json>> {\n return this.getOne(this.routeId().id(id) as Uri);\n }\n\n byIds(...ids: Id[]): Promise<List<Json>> {\n return this.get(this.route().ids(toArray(...ids)) as Uri);\n }\n\n search(q: JsonValue, options?: Props): Promise<PageList<Json>> {\n return this.get(this.route().expand({ ...options, q } as Props) as Uri);\n }\n\n exists(id: Id): Promise<boolean> {\n return this.byId(id)\n .then(r => isDefined(r))\n .catch(r => (HttpStatus.NotFound.equals(r.status) ? false : Promise.reject(r)));\n }\n\n add(item: Json): Promise<Json> {\n return this.post(this.route() as Uri, item);\n }\n\n filter(options?: Props): Promise<PageList<Json>> {\n return this.postSearch(this.route().expand(options ?? {}) as Uri);\n }\n\n update(item: Json): Promise<Json> {\n return this.patch(this.routeId().id(item.id) as Uri, item);\n }\n\n upsert(item: Json): Promise<Json> {\n return this.put(this.routeId().id(item.id) as Uri, item);\n }\n\n remove(id: Id): Promise<boolean> {\n return this.delete(this.routeId().id(id) as Uri);\n }\n}\n","import { Construct, ofConstruct } from '../types/Constructor';\n\nexport class State {\n constructor(protected readonly state: any = {}) {}\n\n protected get = <T>(key: string, alt?: Construct<T>): T => this.state[key] ?? (this.state[key] = ofConstruct(alt));\n protected set = <T>(key: string, value: Construct<T>): T => this.get(key, value);\n}\n","import { Property, PropertyOptions } from './Property';\nimport { State } from './State';\nimport { ifNotEmpty } from './If';\nimport { json, Json, JsonValue } from '../types/Json';\nimport { Optional } from '../types/Types';\nimport { TypeGuard } from '../types/TypeGuard';\nimport { isA } from '../types/IsA';\nimport { List, toList } from '../types/List';\nimport { meta } from '../types/Meta';\nimport { isEmpty } from '../types/Is';\nimport { Get, ofGet } from '../types/Get';\nimport { Construct, ofConstruct } from '../types/Constructor';\n\nexport type Mapping = {\n property: string;\n in: (source?: Json, key?: string) => Optional<JsonValue>;\n out: (source?: Json, key?: string) => Optional<JsonValue>;\n};\nexport const isMapping: TypeGuard<Mapping> = (m?: unknown): m is Mapping => isA<Mapping>(m, 'in', 'out');\n\nexport type MapStartFrom = 'scratch' | 'source';\nexport type MapOptions = { startFrom: MapStartFrom };\n\nexport class Mapper extends State implements Mapping {\n protected readonly map = mappings;\n\n constructor(\n readonly options: MapOptions = { startFrom: 'scratch' },\n readonly property = ''\n ) {\n super();\n }\n\n // All properties that are a mapping\n get properties(): List<[string, Mapping]> {\n return this.get('props', () =>\n meta(this)\n .entries<Mapping>()\n .filter(([, v]) => isMapping(v))\n );\n }\n\n // All names of properties (in target) that have a Mapping\n get keys(): List<string> {\n return this.get('keys', () => this.properties.map(([k]) => k));\n }\n\n // All names of properties (in source) that are named in a Mapping\n get columns(): List<string> {\n return this.get('columns', () => this.properties.mapDefined(([, p]) => ifNotEmpty(p.property, p.property))).distinct();\n }\n\n // All names of properties (in source) that are NOT properties in target\n private get droppedIn(): List<string> {\n return this.get('droppedIn', () => this.columns.filter(c => !this.keys.some(k => k === c)));\n }\n\n // All names op properties (in target) that are NOT properties in source\n private get droppedOut(): List<string> {\n return this.get('droppedOut', () => this.properties.filter(([, p]) => !this.keys.some(k => k === p.property)).map(([k]) => k));\n }\n\n public in(from: Json = {}): Json {\n return json.omit(\n this.properties.reduce((a, [k, p]) => json.merge(a, { [k]: p.in({ ...a, ...from }) }), this.options.startFrom === 'source' ? from : {}),\n ...this.droppedIn\n );\n }\n\n public out(to: Json = {}): Json {\n return json.omit(\n this.properties.reduce(\n (a, [k, p]) => json.merge(a, isEmpty(p.property) ? p.out(to, k) : { [p.property ?? '']: p.out({ ...a, ...to }, k) }),\n this.options.startFrom === 'source' ? to : {}\n ),\n ...this.droppedOut\n );\n }\n\n toString(): string {\n return this.constructor.name;\n }\n}\n\nexport const mappings = {\n item: (property: string, options?: PropertyOptions): Property => new Property(property, options),\n ignore: (property = ''): Mapping => ({\n property,\n in: (): Optional<JsonValue> => undefined,\n out: (): Optional<JsonValue> => undefined,\n }),\n skipIn: (property: string): Mapping => ({\n property,\n in: (): Optional<JsonValue> => undefined,\n out: (source: Json = {}): JsonValue => source[property],\n }),\n skipOut: (property: string): Mapping => ({\n property,\n in: (source: Json = {}): JsonValue => source[property],\n out: (): Optional<JsonValue> => undefined,\n }),\n func: (property: string, funcIn: Get<Optional<JsonValue>, Json>, funcOut: Get<Optional<JsonValue>, Json>): Mapping => ({\n property,\n in: (source: Json = {}): Optional<JsonValue> => ofGet(funcIn, source),\n out: (source: Json = {}): Optional<JsonValue> => ofGet(funcOut, source),\n }),\n add: (funcIn: Get<JsonValue, Json>): Mapping => ({\n property: '',\n in: (source: Json = {}): JsonValue => ofGet(funcIn, source),\n out: (): Optional<JsonValue> => undefined,\n }),\n map: (mapper: Construct<Mapper>, property = ''): Mapping => ({\n property,\n in: (source: Json = {}): JsonValue => ofConstruct(mapper).in(isEmpty(property) ? source : (source[property] as Json)),\n out: (source: Json = {}, key = ''): JsonValue => ofConstruct(mapper).out(isEmpty(key) ? source : (source[key] as Json)),\n }),\n propsToList: (...maps: Mapping[]): Mapping => ({\n property: '',\n in: (source: Json = {}): JsonValue => toList(maps.map(m => ofConstruct(m).in(source))).toJSON(),\n out: (source: Json = {}, key = ''): JsonValue =>\n maps.reduce((a: Json, m, i) => {\n const res = toList(source[key])[i];\n const out = m.out(res as Json);\n return { ...a, [m.property]: out ?? {} };\n }, {}),\n }),\n list: (mapper: Mapping, property: string): Mapping => ({\n property,\n in: (source: Json = {}): JsonValue =>\n toList(source[property])\n .map((v: any) => mapper.in(v))\n .toJSON(),\n out: (source: Json = {}, key = ''): JsonValue =>\n toList(isEmpty(key) ? source : (source[key] as Json))\n .map((v: any) => mapper.out(v))\n .toJSON(),\n }),\n};\n","import { Api } from './Api';\nimport { RouteGateway } from './RouteGateway';\nimport { Func } from '../types/Func';\nimport { Uri } from '../types/Uri';\nimport { Mapper } from '../utils/Mapper';\nimport { RequestOptions } from '../http/RequestOptions';\nimport { PageList } from '../types/PageList';\nimport { Json } from '../types/Json';\nimport { Optional } from '../types/Types';\n\nexport class MappedRouteGateway extends RouteGateway {\n constructor(\n readonly route: Func<Uri>,\n readonly routeId: Func<Uri>,\n readonly map = new Mapper(),\n readonly api: Api = new Api()\n ) {\n super(route, routeId, api);\n }\n\n get(uri: Uri, options?: RequestOptions): Promise<PageList<Json>> {\n return super.get(uri, options).then(is => is.map(i => this.map.in(i)));\n }\n\n getOne(uri: Uri, options?: RequestOptions): Promise<Optional<Json>> {\n return super\n .get(uri, options)\n .then(is => is.first())\n .then(i => this.map.in(i));\n }\n\n add(item: Json): Promise<Json> {\n return super.add(this.map.out(item));\n }\n\n update(item: Json): Promise<Json> {\n return super.update(this.map.out(item));\n }\n}\n","import { isArray, isObject } from './Is';\nimport { choose } from './Case';\n\nconst isEqualArray = (one: unknown[], another: unknown[]): boolean =>\n choose([one, another])\n .case(([o, a]) => !isArray(o) || !isArray(a), false)\n .case(([o, a]) => o?.length !== a?.length, false)\n .else(([o, a]) => !o.some((v, i) => !isEqual(v, a[i])));\n\nconst isEqualObject = (one: any, another: any): boolean =>\n choose([Object.keys(one), Object.keys(another)])\n .case(([keysO, keysA]) => keysO.length !== keysA.length, false)\n .case(([keysO, keysA]) => keysO.some(k => !keysA.includes(k)), false)\n .case(([keysO]) => keysO.some(k => !isEqual(one[k], another[k])), false)\n .else(true);\n\nexport const isEqual = (one?: unknown, another?: unknown): boolean =>\n choose([one, another])\n .case(([o, a]) => o === a, true)\n .case(\n ([o, a]) => isArray(o) || isArray(a),\n ([o, a]) => isEqualArray(o as [], a as [])\n )\n .case(\n ([o, a]) => o == null || a == null || (!isObject(o) && !isObject(a)),\n ([o, a]) => o !== o && a !== a\n )\n .else(([o, a]) => isEqualObject(o, a));\n","import { traverse } from './Traverse';\nimport { ifDefined } from './If';\nimport { Primitive } from '../types/Primitive';\nimport { Constructor, isConstructor, use } from '../types/Constructor';\nimport { asJson, json as typesJson } from '../types/Json';\nimport { choose } from '../types/Case';\nimport { isArray, isBoolean, isFunction, isString } from '../types/Is';\nimport { meta } from '../types/Meta';\nimport { isPageList, PageList, toPageList } from '../types/PageList';\nimport { List } from '../types/List';\nimport { isEqual } from '../types/IsEqual';\nimport { DontInfer } from '../types/Types';\nimport { AnyKey } from '../types/AnyKey';\nimport { EnumConstructor, isEnumConstructor } from '../types/Enum';\nimport { Id } from '../types/Id';\n\ntype Func<T = unknown> = (a: any, key?: string) => T;\ntype FuncOn<S> = (a: S, key?: string) => unknown;\ntype Viewer = { key: string; f: Func };\n\ntype ViewType<V = any> = Primitive | EnumConstructor | Constructor | Func | View<V> | undefined;\ntype ViewValue<S = never> = [S] extends [never] ? ViewType : Exclude<ViewType, string | Func> | AnyKey<S> | FuncOn<S>;\ntype ViewRecord<V = any, S = never> = [S] extends [never]\n ? Partial<Record<keyof V, ViewValue<S>>>\n : Partial<Record<keyof V, ViewValue<S>>> & Partial<Record<Exclude<Extract<keyof S, string>, Extract<keyof V, string>>, typeof ignore>>;\n\nconst ignore = Symbol('view.ignore');\nconst keep = Symbol('view.keep');\nconst json = Symbol('view.json');\nconst spread = 'view.spread';\n\nexport const toViewer = (key: string, value: ViewType): Viewer =>\n choose(value)\n .is.not.defined(v => v, { key, f: () => undefined } as Viewer)\n .type(isBoolean, b => ({ key, f: () => b }))\n .equals(ignore, { key, f: () => undefined })\n .equals(keep, { key, f: (a: any) => traverse(a, key) })\n .equals(json, { key, f: (a: any) => asJson(traverse(a, key)) })\n .type(isString, s => ({ key, f: (a: any) => traverse(a, s) }))\n .type(isEnumConstructor, c => ({\n key,\n f: (a, key) => use(traverse(a, key), v => (isArray(v) ? c.byIds(v) : c.byId(v as Id))),\n }))\n .type(isConstructor, c => ({\n key,\n f: (a, key) => use(traverse(a, key), v => (isArray(v) ? v.map(i => optional(c, i)) : optional(c, v))),\n }))\n .type(isSimpleView, f => ({ key, f: (a: any) => ifDefined(traverse(a, key), v => f.from(v)) }))\n .type(isFunction, f => ({ key, f }))\n .else(v => ({ key, f: () => v }));\n\nconst optional = (c: Constructor, v: any) =>\n ifDefined(\n v,\n i => new c(i),\n () => v\n );\n\nconst toViewers = (views: ViewRecord): Viewer[] =>\n meta(views)\n .entries<ViewType>()\n .map(([k, v]) => toViewer(k, v));\n\nexport class View<V = any, S = never> {\n constructor(\n private views = {} as ViewRecord<V, S>,\n readonly startsFrom: 'scratch' | 'source' = 'scratch',\n readonly viewers: Viewer[] = toViewers(views)\n ) {}\n\n get fromSource(): View<V, S> {\n return new View(this.views, 'source', this.viewers);\n }\n\n from<T = unknown>(source: PageList<T>): PageList<V>;\n from<T = unknown>(source: List<T>): List<V>;\n from<T = unknown>(source: T[]): V[];\n from<T = unknown>(source: T): V;\n from<T = unknown>(source: PageList<T> | List<T> | T[] | T): PageList<V> | List<V> | V[] | V {\n if (isPageList(source))\n return toPageList(\n source.map(s => this.reduce(s)),\n source.options\n );\n if (isArray(source)) return source.map(s => this.reduce(s));\n return this.reduce(source);\n }\n\n same = (one?: unknown, another?: unknown): boolean => isEqual(this.from(one), this.from(another));\n\n private reduce = (source: any): any =>\n use(asJson(source), src =>\n this.viewers.reduce(\n (acc, v) => (v.key === spread ? { ...acc, ...asJson(v.f(src, v.key)) } : typesJson.set(acc, v.key, v.f(src, v.key))),\n this.startsFrom === 'scratch' ? {} : src\n )\n );\n}\n\nexport const isSimpleView = (a: unknown): a is View => a instanceof View;\n\nexport const view = <V = any, S = never>(views: ViewRecord<DontInfer<V>, DontInfer<S>>): View<V, S> => new View<V, S>(views);\n\nexport const views = {\n ignore,\n keep,\n json,\n spread,\n skip: ignore,\n value: (value: unknown) => () => value,\n coalesce:\n (...keys: string[]) =>\n (a: unknown) =>\n keys.reduce<unknown>((result, k) => result ?? traverse(a, k), undefined),\n or: {\n key: (altKey: string) => (a: unknown, key?: string) => traverse(a, key) ?? traverse(a, altKey),\n value: (altValue: unknown) => (a: unknown, key?: string) => traverse(a, key) ?? altValue,\n func: (altFunc: Func) => (a: unknown, key?: string) => traverse(a, key) ?? altFunc(a, key),\n },\n} as const;\n\n// spread: (a: any, key: string) => ({...a, ...(use(traverse(a, key), v => isObject(v) ? v : ({[key]: v})))}),\n","import { Api } from './Api';\nimport { RouteGateway } from './RouteGateway';\nimport { Func } from '../types/Func';\nimport { Uri } from '../types/Uri';\nimport { view } from '../utils/View';\nimport { RequestOptions } from '../http/RequestOptions';\nimport { PageList } from '../types/PageList';\nimport { Json } from '../types/Json';\nimport { Optional } from '../types/Types';\n\nexport class ViewRouteGateway extends RouteGateway {\n constructor(\n readonly route: Func<Uri>,\n readonly routeId: Func<Uri>,\n readonly views = {\n in: view({}).fromSource,\n out: view({}).fromSource,\n },\n readonly api: Api = new Api()\n ) {\n super(route, routeId, api);\n }\n\n get(uri: Uri, options?: RequestOptions): Promise<PageList<Json>> {\n return super.get(uri, options).then(is => is.map(i => this.views.in.from(i)));\n }\n\n getOne(uri: Uri, options?: RequestOptions): Promise<Optional<Json>> {\n return super\n .get(uri, options)\n .then(is => is.first())\n .then(i => this.views.in.from(i));\n }\n\n add(item: Json): Promise<Json> {\n return super.add(this.views.out.from(item));\n }\n\n update(item: Json): Promise<Json> {\n return super.update(this.views.out.from(item));\n }\n}\n","import { isBoolean, isNumber } from '../types/Is';\nimport { convert, Convert } from '../utils/Convert';\nimport { TypeGuard } from '../types/TypeGuard';\nimport { isA } from '../types/IsA';\nimport type { Text } from '../types/Text';\n\nexport const quote = (a: unknown): string => (isNumber(a) || isBoolean(a) || isClause(a) ? a.toString() : `'${a as string}'`);\n\nexport class Clause implements Text {\n constructor(\n readonly first: unknown,\n readonly operator: string,\n readonly second: unknown\n ) {}\n\n and = (other: Clause): Clause => new ParathesizedClause(this, 'AND', other);\n or = (other: Clause): Clause => new ParathesizedClause(this, 'OR', other);\n\n toString(): string {\n return `${this.first} ${this.operator} ${quote(this.second)}`;\n }\n}\n\nexport class ParathesizedClause extends Clause {\n toString(): string {\n return `(${this.first} ${this.operator} ${quote(this.second)})`;\n }\n}\n\nexport const toClause = (first: unknown, operator: string, second: unknown, conv: Convert = convert.default): Clause =>\n new Clause(first, operator, conv.from(second));\n\nexport const isClause: TypeGuard<Clause> = (c?: unknown): c is Clause => isA<Clause>(c, 'and', 'or');\n","import { Clause, toClause } from './Clause';\nimport { Table } from './Table';\nimport { Property, PropertyOptions } from '../utils/Property';\nimport { Json, JsonValue } from '../types/Json';\nimport { tryTo } from '../types/Try';\nimport { ofGet } from '../types/Get';\nimport type { Text } from '../types/Text';\n\nexport class Column extends Property implements Text {\n constructor(\n readonly owner: Table,\n property: string,\n options?: PropertyOptions\n ) {\n super(property, options);\n }\n\n get count(): Column {\n return this.function('COUNT');\n }\n\n get max(): Column {\n return this.function('MAX');\n }\n\n get min(): Column {\n return this.function('MIN');\n }\n\n get sum(): Column {\n return this.function('SUM');\n }\n\n get average(): Column {\n return this.function('AVG');\n }\n\n get length(): Column {\n return this.function('LEN');\n }\n\n get asc(): OrderColumn {\n return this.format('$col ASC') as OrderColumn;\n }\n\n get desc(): OrderColumn {\n return this.format('$col DESC') as OrderColumn;\n }\n\n in = (source: Json = {}): JsonValue =>\n tryTo(source)\n .map(s => s[this.property] ?? ofGet(this.options?.dflt))\n .map(v => this.options?.convert?.to(v))\n .orElse();\n\n out = (source: Json = {}, key = ''): JsonValue =>\n tryTo(source)\n .map(s => this.options?.convert?.from(s[key]))\n .orElse();\n\n function = (func: string): Column => this.format(`${func}($name)`);\n\n format = (pattern: string): Column => new PatternColumn(this, pattern);\n\n is = (value: unknown): Clause => this.clause('=', value);\n\n not = (value: unknown): Clause => this.clause('<>', value);\n\n like = (value: unknown): Clause => this.clause('LIKE', `%${value}%`);\n\n startsLike = (value: unknown): Clause => this.clause('LIKE', `${value}%`);\n\n endsLike = (value: unknown): Clause => this.clause('LIKE', `%${value}`);\n\n unlike = (value: unknown): Clause => this.clause('NOT LIKE', `%${value}%`);\n\n less = (value: unknown): Clause => this.clause('<', value);\n\n lessEqual = (value: unknown): Clause => this.clause('<=', value);\n\n greater = (value: unknown): Clause => this.clause('>', value);\n\n greaterEqual = (value: unknown): Clause => this.clause('>=', value);\n\n as = (as: string): Column => this.format(`$col AS ${as}`);\n\n toString(): string {\n return `${this.owner}.${this.property}`;\n }\n\n protected clause = (operator: string, value: unknown): Clause => toClause(this, operator, value, this?.options?.convert);\n}\n\nexport class PatternColumn extends Column {\n constructor(\n protected col: Column,\n protected pattern: string\n ) {\n super(col.owner, col.property);\n }\n\n toString(): string {\n return this.pattern.replace('$col', this.col.toString()).replace('$table', this.col.owner.toString).replace('$name', this.col.property);\n }\n}\n\nexport class OrderColumn extends PatternColumn {}\n","import { Query } from '../data/Query';\nimport { Table } from './Table';\nimport { Join } from './Join';\nimport { List, toList } from '../types/List';\nimport { Clause } from './Clause';\n\nexport class SqlQuery implements Query {\n constructor(\n protected table: Table | Join,\n readonly clauses: List<Clause> = toList()\n ) {}\n\n where = (...clauses: Clause[]): this => {\n this.clauses.add(clauses);\n return this;\n };\n}\n","import { SqlQuery } from './SqlQuery';\nimport { ifGet } from '../types/Get';\n\nexport class Delete extends SqlQuery {\n toString(): string {\n return `DELETE FROM ${this.table}` + ifGet(this.clauses.length, ` WHERE ${this.clauses.join(' AND ')};`, ';');\n }\n}\n","import { SqlQuery } from './SqlQuery';\nimport { quote } from './Clause';\nimport { Table } from './Table';\nimport { Json } from '../types/Json';\n\nexport class Insert extends SqlQuery {\n constructor(\n protected table: Table,\n protected fields: Json\n ) {\n super(table);\n }\n\n toString(): string {\n return (\n `INSERT INTO ${this.table} ` +\n `(${Object.keys(this.fields).join(', ')}) OUTPUT INSERTED.* ` +\n `VALUES (${Object.values(this.fields)\n .map(v => quote(v))\n .join(', ')});`\n );\n }\n}\n","import { Column } from './Column';\nimport { Table } from './Table';\n\nexport class Join {\n readonly db;\n constructor(private first: Table, private second: Table, private c?: Column, private c2?: Column) {\n this.db = this.first.db;\n }\n\n on(c: Column, c2: Column): this {\n this.c = c;\n this.c2 = c2;\n return this;\n }\n\n toString(): string {\n return `${this.first} JOIN ${this.second} ON ${this.c} = ${this.c2}`;\n }\n}\n","import { Column, OrderColumn } from './Column';\nimport { Join } from './Join';\nimport { SqlQuery } from './SqlQuery';\nimport { Table } from './Table';\nimport { List, toList } from '../types/List';\nimport { ifGet } from '../types/Get';\n\nexport class Select extends SqlQuery {\n protected ordered: List<OrderColumn> = toList();\n protected grouped: List<Column> = toList();\n protected _top = 0;\n protected _limit = 0;\n protected _offset = 0;\n\n constructor(\n table: Table | Join,\n readonly columns: List<Column> = toList()\n ) {\n super(table);\n }\n\n from(t?: Table | Join): this {\n this.table = t ?? this.table;\n return this;\n }\n\n orderBy = (...ordered: OrderColumn[]): this => {\n this.ordered.add(ordered);\n return this;\n };\n\n groupBy(...grouped: Column[]): this {\n this.grouped.add(grouped);\n return this;\n }\n\n top(t: number): this {\n this._top = t;\n return this;\n }\n\n limit(l: number): this {\n this._limit = l;\n return this;\n }\n\n offset(o: number): this {\n this._offset = o;\n return this;\n }\n\n toString(): string {\n return (\n `SELECT ` +\n ifGet(this._top, `TOP ${this._top} `, '') +\n ifGet(this.columns.length, this.columns.join(', '), '*') +\n ` FROM ${this.table}` +\n ifGet(this.clauses.length, ` WHERE ${this.clauses.join(' AND ')}`, '') +\n ifGet(this.grouped.length, ` GROUP BY ${this.grouped.join(', ')}`, '') +\n ifGet(this.ordered.length, ` ORDERED BY ${this.ordered.join(', ')}`, '') +\n ifGet(this._limit, ` LIMIT ${this._limit}`, '') +\n ifGet(this._offset, ` OFFSET ${this._offset};`, ';')\n );\n }\n}\n","import { SqlQuery } from './SqlQuery';\nimport { toClause } from './Clause';\nimport { Table } from './Table';\nimport { Json } from '../types/Json';\nimport { ifGet } from '../types/Get';\n\nexport class Update extends SqlQuery {\n constructor(\n protected table: Table,\n protected fields: Json\n ) {\n super(table);\n }\n\n toString(): string {\n return (\n `UPDATE ${this.table} ` +\n `SET ${Object.entries(this.fields)\n .map(([k, v]) => toClause(k, '=', v))\n .join(', ')} ` +\n 'OUTPUT INSERTED.*' +\n ifGet(this.clauses.length, ` WHERE ${this.clauses.join(' AND ')};`, ';')\n );\n }\n}\n","import { Select } from './Select';\nimport { ifGet } from '../types/Get';\n\nexport class Count extends Select {\n toString(): string {\n return (\n `SELECT COUNT(*)` +\n ifGet(this._top, ` TOP ${this._top}`, '') +\n ` FROM ${this.table}` +\n ifGet(this.clauses.length, ` WHERE ${this.clauses.join(' AND ')}`, '') +\n ifGet(this.grouped.length, ` GROUP BY ${this.grouped.join(', ')}`, '') +\n ';'\n );\n }\n}\n","import { Column } from './Column';\nimport { Select } from './Select';\nimport { Insert } from './Insert';\nimport { Update } from './Update';\nimport { Delete } from './Delete';\nimport { Join } from './Join';\nimport { Count } from './Count';\nimport { MapOptions, Mapper, mappings } from '../utils/Mapper';\nimport { PropertyOptions } from '../utils/Property';\nimport { toUuid } from '../types/Uuid';\nimport { Database } from '../data/Database';\nimport { toList } from '../types/List';\nimport { Json } from '../types/Json';\n\nexport class Table extends Mapper {\n protected readonly map = {\n ...mappings,\n column: <T = unknown>(name: string, options?: PropertyOptions<T>): Column => new Column(this, name, options),\n };\n\n readonly id = this.map.column('', { dflt: toUuid });\n\n constructor(options: MapOptions = { startFrom: 'source' }) {\n super(options);\n }\n\n get db(): Database {\n return Database.Default;\n }\n\n get count(): Count {\n return new Count(this);\n }\n\n /**\n * @deprecated Deprecated since version 6.2. Please use map.column instead.\n */\n prop = <T = unknown>(name: string, options?: PropertyOptions<T>): Column => this.map.column(name, options);\n\n select = (...columns: Column[]): Select => new Select(this, toList(columns));\n\n insert = (fields: Json): Insert => new Insert(this, this.out(fields));\n update = (fields: Json): Update => new Update(this, this.out(fields));\n delete = (): Delete => new Delete(this, toList());\n\n readonly join = (t: Table): Join => new Join(this, t);\n}\n","import { Table } from './Table';\nimport { PageList, PageOptions, toPageList } from '../types/PageList';\nimport { QueryProvider } from '../data/QueryProvider';\nimport { Gateway } from '../types/Gateway';\nimport { Json } from '../types/Json';\nimport { Id } from '../types/Id';\nimport { Optional } from '../types/Types';\nimport { ifDefined } from '../utils/If';\nimport { isDefined } from '../types/Is';\nimport { when } from '../validation/When';\n\nexport type TableOptions = PageOptions & { provider?: QueryProvider };\n\nexport class TableGateway<T extends Table> extends Gateway<PageOptions> {\n constructor(\n readonly table: T,\n readonly provider = table.db.provide<QueryProvider>()\n ) {\n super();\n }\n\n protected provide = ({ provider }: TableOptions = {}): QueryProvider => provider ?? this.provider;\n\n all(options?: TableOptions): Promise<PageList<Json>> {\n return this.provide(options)\n .query(this.table.select())\n .then(js =>\n toPageList(\n js.map(j => this.table.in(j)),\n options\n )\n );\n }\n\n byId(id: Id, options?: TableOptions): Promise<Optional<Json>> {\n return this.provide(options)\n .query(this.table.select().where(this.table.id.is(id)))\n .then(js => js.first())\n .then(j => ifDefined(j, this.table.in(j)));\n }\n\n exists(id: Id, options?: TableOptions): Promise<boolean> {\n return this.byId(id).then(j => isDefined(j));\n }\n\n add(item: Json, options?: TableOptions): Promise<Json> {\n return this.provide(options)\n .query(this.table.insert(item))\n .then(js => when(js.first()).not.isDefined.reject(`Could not add items with id ${item.id}`))\n .then(j => this.table.in(j));\n }\n\n remove(id: Id, options?: TableOptions): Promise<boolean> {\n return this.provide(options)\n .command(this.table.delete().where(this.table.id.is(id)))\n .then(() => true);\n }\n\n update(item: Json, options?: TableOptions): Promise<Json> {\n return this.provide(options)\n .query(this.table.update(item).where(this.table.id.is(item.id)))\n .then(js => when(js.first()).not.isDefined.reject(`Could not update item with id ${item.id}`))\n .then(j => this.table.in(j));\n }\n}\n","import { Constructor } from './Constructor';\nimport { asString } from './Text';\n\nclass builder {\n private static state: any = {};\n static singleton = <T>(ctr: Constructor<T>, ...args: any[]): T => builder.state[asString(ctr)] ?? (builder.state[asString(ctr)] = new ctr(...args));\n static reset = (): void => {\n builder.state = {};\n };\n}\n\nexport const build = {\n singleton: <T>(ctr: Constructor<T>, ...args: any[]): T => builder.singleton(ctr, ...args),\n reset: (): void => builder.reset(),\n};\n\nexport const singleton = <T>(ctr: Constructor<T>, ...args: any[]): T => build.singleton(ctr, ...args);\n","import { Func } from './Func';\nimport { CacheAge } from './CacheAge';\nimport { Construct } from './Constructor';\nimport { meta } from './Meta';\n\nexport interface Store<To = any, From = any> {\n execute: (fetch: From, f: Func<Promise<To>, From>) => Promise<To>;\n}\n\nexport type CacheOptions = {\n expiresIn?: CacheAge;\n store?: Construct<Store>;\n};\n\nexport const toCacheOptions = (co: Partial<CacheOptions>): CacheOptions => ({\n expiresIn: co.expiresIn ?? '5m',\n store: co.store,\n});\n\nexport const cache =\n (options: Partial<CacheOptions>): ClassDecorator =>\n (subject: unknown): void => {\n meta(subject).set('cache', toCacheOptions(options));\n };\n","import { isA } from './IsA';\n\nexport type Currency = {\n id: string;\n name: string;\n digits: number;\n code: string;\n};\n\nexport const isCurrency = (c?: unknown): c is Currency => isA<Currency>(c, 'id', 'name', 'digits', 'code');\n","import { Enum } from './Enum';\n\nexport class Environment extends Enum {\n static readonly Dev = new Environment('Development', 'dev');\n static readonly Tst = new Environment('Test', 'tst');\n static readonly Acc = new Environment('Acceptance', 'acc');\n static readonly Prd = new Environment('Production', 'prd');\n}\n","type Falsy = false | 0 | 0n | '' | null | undefined;\ntype Truthy<T = unknown> = Exclude<T, Falsy>;\n\nexport const isFalsy = (v?: unknown): v is Falsy => !v;\nexport const isTruthy = (v?: unknown): v is Truthy => !isFalsy(v);\n","import { isA } from './IsA';\n\nexport type Indexed<T> = T & { index: number };\n\nexport const isIndexed = <T>(u: unknown): u is Indexed<T> => isA<Indexed<T>>(u, 'index');\n","import { Func, isFunc } from './Func';\n\nexport type Message<Args> = string | Func<string, Args>;\n\nexport const ofMessage = <Args>(g: Message<Args>, ...params: Args[]): string => (isFunc<string, Args>(g) ? g(...params) : g);\n","export type Nullish = null | undefined;\n\nexport const isNullish = (v?: unknown): v is Nullish => v == null;\n","import { Get, ofGet, Predicate } from './Get';\nimport { isDefined, isEmpty, isIn, isObject, isString, isTrue } from './Is';\nimport { isValid } from '../validation/Validate';\nimport { Constructor, on } from './Constructor';\nimport { toArray } from './Array';\n\nexport class Parser<T, V> {\n if = {\n equals: (pred?: Predicate<T>): this => this.evaluate(isTrue, pred),\n empty: <U>(pred?: Get<U, T>): this => this.evaluate(isEmpty, pred),\n defined: <U>(pred?: Get<U, T>): this => this.evaluate(isDefined, pred),\n valid: <U>(pred?: Get<U, T>): this => this.evaluate(isValid, pred),\n in: (...items: T[]): this => this.evaluate(() => isIn(this.value, toArray(...items))),\n is: {\n object: <U>(pred?: Get<U, T>): this => this.evaluate(isObject, pred),\n string: <U>(pred?: Get<U, T>): this => this.evaluate(isString, pred),\n instance: <U>(c: Constructor<U>, pred?: Get<U, T>): this => this.evaluate(() => this.value instanceof c, pred),\n },\n not: {\n empty: <U>(pred?: Get<U, T>): this => this.evaluateNot(isEmpty, pred),\n defined: <U>(pred?: Get<U, T>): this => this.evaluateNot(isDefined, pred),\n valid: <U>(pred?: Get<U, T>): this => this.evaluateNot(isValid, pred),\n isObject: <U>(pred?: Get<U, T>): this => this.evaluateNot(isObject, pred),\n in: (...items: T[]): this => this.evaluate(() => !isIn(this.value, toArray(...items))),\n is: {\n object: <U>(pred?: Get<U, T>): this => this.evaluateNot(isObject, pred),\n string: <U>(pred?: Get<U, T>): this => this.evaluateNot(isString, pred),\n instance: <U>(c: Constructor<U>, pred?: Get<U, T>): this => this.evaluate(() => !(this.value instanceof c), pred),\n },\n },\n };\n\n constructor(\n protected value: T,\n protected valid = true\n ) {}\n\n protected evaluate<U>(meta: Get<boolean>, pred?: Get<U, T>): this {\n return on(this, t => (t.valid = ofGet(meta, pred ? ofGet(pred, this.value) : this.value)));\n }\n\n protected evaluateNot<U>(meta: Get<boolean>, pred?: Get<U, T>): this {\n return on(this, t => (t.valid = !ofGet(meta, pred ? ofGet(pred, this.value) : this.value)));\n }\n}\n","export const asc = 1;\nexport const desc = -1;\nexport type SortDirection = typeof asc | typeof desc;\nexport type Sort = { key: string; value: SortDirection };\nexport type PlainSort = Record<string, SortDirection> | string[];\n","import { meta } from './Meta';\n\nexport const tag =\n (name: string): PropertyDecorator =>\n (subject: unknown, property: string | symbol): void => {\n meta(subject).property(property).set(name, property);\n };\n\nexport const searchable = (): PropertyDecorator => tag(searchable.name);\n","import { isBoolean, isNotEmpty, isTrue } from './Is';\nimport { asString, Text } from './Text';\nimport { toName } from './Constructor';\nimport { ctx } from './Context';\nimport { List, toList } from './List';\nimport { meta } from './Meta';\nimport { tryTo } from './Try';\nimport { Optional } from './Types';\nimport { OneOrMore, toArray } from './Array';\nimport { entries } from './Object';\n\nexport type Segment = Text & { key?: string; segment?: string; query?: (value: unknown) => string };\n\nexport const toSegment = (\n key?: Text,\n {\n segment,\n query,\n }: {\n segment?: string;\n query?: (value: unknown) => string;\n } = {}\n): Segment => ({\n key: key as string,\n segment,\n query,\n toString: () => asString(key),\n});\n\nexport const uri = {\n host: (key?: string): Segment => toSegment(key, { segment: key ?? ctx.env.host ?? '$host' }),\n resource: <Props extends UriExpandProps>(resource: Uri<Props>): Segment => toSegment(toName(resource, 'Uri'), { segment: toName(resource, 'Uri') }),\n segment: (key?: Text): Segment => toSegment(key, { segment: key as string }),\n path: (key: Text): Segment => toSegment(key, { segment: `:${key}` }),\n query: (key: Text): Segment =>\n toSegment(key, {\n query: (value: unknown): string =>\n tryTo(value)\n .is.defined()\n .map(v => encodeURIComponent(asString(v)))\n .map(v => `${key}=${v}`)\n .orElse('') ?? '',\n }),\n boolean: (key: Text): Segment => toSegment(key, { query: (value: unknown): string => (isTrue(value) ? `${key}` : '') }),\n};\n\ntype Prop = { segment: Segment; value: any };\n\nconst toRoute = (...segments: Segment[]): string =>\n toList(segments)\n .mapDefined(s => s.segment)\n .join('/');\n\nexport type Uri<Props extends UriExpandProps = UriExpandProps> = {\n id: (id?: unknown) => Uri<Props>;\n ids: (ids: OneOrMore<unknown>) => Uri<Props>;\n query: (q?: unknown) => Uri<Props>;\n sort: (q?: any) => Uri<Props>;\n skip: (n?: number) => Uri<Props>;\n take: (n?: number) => Uri<Props>;\n path: string;\n route: (resource: string) => string;\n isInternal: boolean;\n toString: () => string;\n expand: (props: Partial<Props>) => Uri<Props>;\n};\n\nexport type UriExpandProps = { q?: string; s?: string; skip?: number; take?: number };\n\nexport class EasyUri<Props extends UriExpandProps = UriExpandProps> implements Uri<Props> {\n static readonly id = uri.path('id');\n static readonly ids = uri.query('ids');\n static readonly query = uri.query('q');\n static readonly sort = uri.query('s');\n static readonly skip = uri.query('skip');\n static readonly take = uri.query('take');\n\n readonly host = uri.host();\n protected resource: Segment = uri.resource(this);\n\n protected state: any = {};\n\n constructor(readonly segments: Segment[] = []) {}\n\n get path(): string {\n return toRoute(uri.segment(''), this.resource, ...this.segments);\n }\n\n get complete(): string {\n return toRoute(this.host, this.resource, ...this.segments);\n }\n\n get isInternal(): boolean {\n return toRoute(this.host) === (ctx.env.host ?? '$host');\n }\n\n protected get props(): List<Prop> {\n return meta(this.state).values<Prop>();\n }\n\n route = (resource: Optional<string> = this.resource.key): string => toRoute(uri.segment(''), uri.segment(resource?.toLowerCase()), ...this.segments);\n\n set = (segment: Segment, value?: unknown): this => {\n tryTo(value)\n .is.defined()\n .accept(value => (this.state[segment.key ?? ''] = { segment, value }));\n return this;\n };\n\n toString(): string {\n return tryTo(() => this.props)\n .map(ps => ps.filter(p => p.segment?.segment))\n .map(ps => ps.reduce((r: string, p: Prop) => r.replace(asString(p.segment.segment), asString(p.value)), this.complete))\n .map(route => ({\n route,\n query: this.props.mapDefined(p => (p.segment?.query ? p.segment?.query(p.value) : undefined))?.join('&'),\n }))\n .map(({ route, query }) => (isNotEmpty(query) ? `${route}?${query}` : route)).value;\n }\n\n id = (id?: unknown): this => this.set(EasyUri.id, id);\n ids = (ids: OneOrMore<unknown>): this => this.set(EasyUri.ids, toArray(ids).join(','));\n query = (q?: unknown): this => this.set(EasyUri.query, q);\n sort = (s?: any): this => this.set(EasyUri.sort, asString(s));\n\n skip = (index?: number): this => this.set(EasyUri.skip, index);\n take = (items?: number): this => this.set(EasyUri.take, items);\n\n expand(props: Partial<Props>): this {\n return entries(props as any)\n .filter(([_, v]) => isNotEmpty(v))\n .reduce((u, [k, v]) => (isBoolean(v) ? u.set(uri.boolean(k), v) : u.set(uri.query(k), toArray(v).join(','))), this);\n }\n}\n\nexport const clipUri = (uri?: EasyUri | string | null): string =>\n tryTo(() => asString(uri))\n .map(uri => uri.replace(/^(https?:\\/\\/)?(www\\.)?/, ''))\n .map(uri => uri.replace(/\\/$/, '')).value;\n","import type { Json } from '../types/Json';\n\nexport const base64 = {\n decode: (data: string): string => Buffer.from(data, 'base64').toString('utf-8'),\n encode: (data: string): string => Buffer.from(data, 'utf-8').toString('base64'),\n toJson: (data: string): Json => JSON.parse(base64.decode(data)),\n};\n","import { isNotPresent } from '../types/Is';\n\nexport const isLoading = (...targets: unknown[]): boolean => isNotPresent(...targets);\n","import { Optional } from '../types/Types';\n\nexport function log<T>(t: T): T;\nexport function log<T>(label: string, t: T): T;\nexport function log<T>(labelOrT: string | T, t?: T): T {\n if (t) {\n console.log(labelOrT as string, t);\n return t;\n } else {\n console.log(labelOrT);\n return labelOrT as T;\n }\n}\nexport function dir<T>(t?: T): Optional<T> {\n console.dir(t, { depth: 200 });\n return t;\n}\n","import type { Text } from '../types/Text';\nimport { Id } from '../types/Id';\nimport { text } from '../types/ToText';\n\nexport class Sentence implements Text {\n constructor(\n word: Text,\n pre?: Sentence,\n private sentence: Text[] = (pre?.sentence ?? []).concat(word)\n ) {}\n\n toString(): string {\n return text(this.sentence.join(' ')).sentence.toString();\n }\n}\n\nclass Topic extends Sentence {\n it = new Sentence('it', this);\n anything = new Sentence('anything', this);\n id = (id: Id) => new Sentence(`id '${id}'`, this);\n your = (subject?: Text) => new Sentence(`your ${subject ?? 'item'}`, this);\n a = (subject?: Text) => new Sentence(subject ? `a ${subject}` : 'an item', this);\n an = (subject?: Text) => new Sentence(`an ${subject ?? 'item'}`, this);\n any = (subjects?: Text) => new Sentence(`any ${subjects ?? 'items'}`, this);\n}\n\nclass Verb extends Sentence {\n add = new Topic('add', this);\n check = new Topic('check', this);\n fetch = new Topic('fetch', this);\n find = new Topic('find', this);\n like = new Topic('like', this);\n process = new Topic('process', this);\n remove = new Topic('remove', this);\n translate = new Topic('translate', this);\n update = new Topic('update', this);\n validate = new Topic('validate', this);\n}\n\nclass Not extends Verb {}\n\nclass SupportVerb extends Verb {\n not = new Not('not', this);\n}\n\nclass We extends Sentence {\n could = new SupportVerb('could', this);\n did = new SupportVerb('did', this);\n\n added = new Topic('added', this);\n checked = new Topic('checked', this);\n fetched = new Topic('fetched', this);\n found = new Topic('found', this);\n liked = new Topic('liked', this);\n processed = new Topic('processed', this);\n removed = new Topic('removed', this);\n translated = new Topic('translated', this);\n updated = new Topic('updated', this);\n validated = new Topic('validated', this);\n}\n\nexport const we = new We('we');\n","export class Wait {\n static wait(ms = 0): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n static seconds(s = 0) {\n return this.wait(s * 1000);\n }\n}\n\nexport const wait = (millis: number) => Wait.wait(millis);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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","names":["values","valid","keys","acc","keys","acc","on","o","keys","s","keys","rest","a","template","s","valid","k","template","constraint","keys","days","seconds","days","s","LuxonDateTime","dt","values","v","json","uuid","json","json","view","n","formUrlEncoded","validate","meta","json","s","decode","isResponse","uri","axios","uri","api","uri","api","api","uri","json","key","optional","views","keys","views","api","uri","valid","meta","value","uri","resolve"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/types/Is.ts","../src/types/Primitive.ts","../src/types/Func.ts","../src/types/Constructor.ts","../src/types/IsA.ts","../src/types/Get.ts","../src/types/Array.ts","../src/types/Text.ts","../src/utils/Traverse.ts","../src/types/List.ts","../src/utils/If.ts","../src/types/Object.ts","../src/types/Json.ts","../src/utils/Convert.ts","../src/data/Condition.ts","../src/types/Meta.ts","../src/types/Enum.ts","../src/types/Template.ts","../src/types/ToText.ts","../src/types/Exception.ts","../src/utils/Promise.ts","../src/types/Gateway.ts","../src/validation/When.ts","../src/types/Context.ts","../src/types/Result.ts","../src/types/Results.ts","../src/types/Value.ts","../src/types/Validatable.ts","../src/validation/Validate.ts","../src/types/Try.ts","../src/types/Case.ts","../src/types/PageList.ts","../src/data/InMemoryGateway.ts","../src/data/Database.ts","../src/utils/Property.ts","../src/data/Field.ts","../src/domain/Struct.ts","../src/domain/DateTime.ts","../src/types/IsDate.ts","../src/utils/Seconds.ts","../src/validation/Contraints.ts","../src/domain/Audit.ts","../src/types/Uuid.ts","../src/types/Id.ts","../src/domain/Child.ts","../src/domain/Entity.ts","../src/types/Repository.ts","../src/domain/Repo.ts","../src/domain/Typo.ts","../src/types/Number.ts","../src/types/CacheAge.ts","../src/http/CacheControl.ts","../src/http/ContentType.ts","../src/http/HttpHeader.ts","../src/http/HttpStatus.ts","../src/http/HttpVerb.ts","../src/http/RequestOptions.ts","../src/http/Response.ts","../src/http/RestResult.ts","../src/http/toResponse.ts","../src/process/Scope.ts","../src/process/App.ts","../src/process/Search.ts","../src/process/Manage.ts","../src/process/UseCase.ts","../src/resources/Req.ts","../src/security/Jwt.ts","../src/services/AxiosProvider.ts","../src/services/Api.ts","../src/services/ApiGateway.ts","../src/services/RouteGateway.ts","../src/utils/State.ts","../src/utils/Mapper.ts","../src/services/MappedRouteGateway.ts","../src/types/IsEqual.ts","../src/utils/View.ts","../src/services/ViewRouteGateway.ts","../src/sql/Clause.ts","../src/sql/Column.ts","../src/sql/SqlQuery.ts","../src/sql/Delete.ts","../src/sql/Insert.ts","../src/sql/Join.ts","../src/sql/Select.ts","../src/sql/Update.ts","../src/sql/Count.ts","../src/sql/Table.ts","../src/sql/TableGateway.ts","../src/types/Builder.ts","../src/types/Cache.ts","../src/types/Currency.ts","../src/types/Environment.ts","../src/types/Falsy.ts","../src/types/Indexed.ts","../src/types/Message.ts","../src/types/Nullish.ts","../src/types/Parser.ts","../src/types/Sort.ts","../src/types/Tag.ts","../src/types/Uri.ts","../src/utils/Base64.ts","../src/utils/Loading.ts","../src/utils/Log.ts","../src/utils/Sentence.ts","../src/utils/Wait.ts"],"sourcesContent":["export * from './data/Condition';\nexport * from './data/InMemoryGateway';\nexport * from './data/Database';\nexport * from './data/DataProvider';\nexport * from './data/Field';\nexport * from './data/Query';\nexport * from './data/QueryProvider';\n\nexport * from './domain/Audit';\nexport * from './domain/Child';\nexport * from './domain/DateTime';\nexport * from './domain/Entity';\nexport * from './domain/Struct';\nexport * from './domain/Repo';\nexport * from './domain/Typo';\n\nexport * from './http/CacheControl';\nexport * from './http/ContentType';\nexport * from './http/HttpHeader';\nexport * from './http/HttpStatus';\nexport * from './http/HttpVerb';\nexport * from './http/Request';\nexport * from './http/RequestOptions';\nexport * from './http/RequestProvider';\nexport * from './http/Response';\nexport * from './http/RestResult';\nexport * from './http/toResponse';\n\nexport * from './process/App';\nexport * from './process/Manage';\nexport * from './process/Scope';\nexport * from './process/Search';\nexport * from './process/UseCase';\n\nexport * from './resources/Req';\n\nexport * from './security/Jwt';\n\nexport * from './services/Api';\nexport * from './services/ApiGateway';\nexport * from './services/AxiosProvider';\nexport * from './services/MappedRouteGateway';\nexport * from './services/RouteGateway';\nexport * from './services/ViewRouteGateway';\n\nexport * from './sql/Clause';\nexport * from './sql/Column';\nexport * from './sql/Delete';\nexport * from './sql/Insert';\nexport * from './sql/Join';\nexport * from './sql/SqlQuery';\nexport * from './sql/Select';\nexport * from './sql/Table';\nexport * from './sql/TableGateway';\nexport * from './sql/Update';\n\nexport * from './types/AnyKey';\nexport * from './types/Array';\nexport * from './types/Builder';\nexport * from './types/Cache';\nexport * from './types/CacheAge';\nexport * from './types/Case';\nexport * from './types/Constructor';\nexport * from './types/Context';\nexport * from './types/Currency';\nexport * from './types/Enum';\nexport * from './types/Environment';\nexport * from './types/ErrorOrigin';\nexport * from './types/Exception';\nexport * from './types/Falsy';\nexport * from './types/Func';\nexport * from './types/Gateway';\nexport * from './types/Get';\nexport * from './types/Id';\nexport * from './types/Identity';\nexport * from './types/IdName';\nexport * from './types/Indexed';\nexport * from './types/Is';\nexport * from './types/IsA';\nexport * from './types/IsDate';\nexport * from './types/IsEqual';\nexport * from './types/Json';\nexport * from './types/List';\nexport * from './types/Message';\nexport * from './types/Meta';\nexport * from './types/Nullish';\nexport * from './types/Number';\nexport * from './types/Object';\nexport * from './types/PageList';\nexport * from './types/Parser';\nexport * from './types/Primitive';\nexport * from './types/Repository';\nexport * from './types/Result';\nexport * from './types/Results';\nexport * from './types/Sort';\nexport * from './types/Tag';\nexport * from './types/Template';\nexport * from './types/Text';\nexport * from './types/Try';\nexport * from './types/TypeGuard';\nexport * from './types/Types';\nexport * from './types/Uri';\nexport * from './types/Uuid';\nexport * from './types/Validatable';\nexport * from './types/Value';\n\nexport * from './utils/Base64';\nexport * from './utils/Convert';\nexport * from './utils/If';\nexport * from './utils/Loading';\nexport * from './utils/Log';\nexport * from './utils/Mapper';\nexport * from './utils/Promise';\nexport * from './utils/Property';\nexport * from './utils/Seconds';\nexport * from './utils/State';\nexport * from './utils/Sentence';\nexport * from './utils/Traverse';\nexport * from './utils/View';\nexport * from './utils/Wait';\nexport * from './validation/Contraints';\nexport * from './validation/Validate';\nexport * from './validation/When';\nexport * from './types/ToText';\n","export const isDefined = <T = unknown>(o?: T): o is NonNullable<T> => o !== undefined && o !== null;\n\nexport const isUndefined = (v?: unknown): v is never => v === undefined || v === null;\n\nexport const isEmpty = (o?: unknown): boolean => o === '' || o === null || o === undefined || (isArray(o) && o.length === 0);\n\nexport const isNotEmpty = <T = unknown>(o?: unknown): o is NonNullable<T> => o !== '' && o !== null && o !== undefined && (!isArray(o) || o.length > 0);\n\nexport const isString = (o?: unknown): o is string => o instanceof String || typeof o === 'string';\n\nexport const isIsoDateString = (o?: unknown): o is string =>\n isString(o) && /^\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z)$/.test(o);\n\nexport const isBoolean = (o?: unknown): o is boolean => isDefined(o) && typeof o === 'boolean';\n\nexport const isTrue = (o?: unknown): o is true => (isFunction(o) ? isTrue(o()) : isBoolean(o) ? o : !!o);\n\nexport const isNumber = (o?: unknown): o is number => isDefined(o) && typeof o === 'number' && !Number.isNaN(o);\n\nexport const isObject = (o?: unknown): o is Record<string, unknown> => o != null && typeof o === 'object' && !isArray(o);\n\nexport const isEmptyObject = (o?: unknown): boolean => isObject(o) && Object.getOwnPropertyNames(o).length === 0;\n\nexport const isFunction = (o?: unknown): o is (...params: unknown[]) => unknown => isDefined(o) && typeof o === 'function';\n\nexport const isArray = <T = any>(o?: unknown): o is Array<T> => isDefined(o) && o instanceof Array;\n\nexport const isIn = (o: unknown, values: unknown[]): boolean => isArray(values) && values.some(v => v === o);\n\nexport const isIntersecting = (o?: unknown[], values?: unknown[]): boolean => isArray(o) && isArray(values) && o.some(ov => isIn(ov, values));\n\nexport const isError = (e: unknown): e is Error => isDefined(e) && e instanceof Error;\n\nexport const isNotPresent = (...os: unknown[]): boolean =>\n os.some(\n o =>\n o === null ||\n o === undefined ||\n o === '' ||\n (o instanceof Array && o.length === 0) ||\n (typeof o === 'object' && Object.getOwnPropertyNames(o).length === 0)\n );\n\nexport const isPresent = (...os: unknown[]): boolean => !isNotPresent(...os);\n","import { isIn } from './Is';\n\nexport type Primitive = string | number | bigint | boolean | symbol | null | undefined;\n\nexport const isPrimitive = (v?: unknown): v is Primitive => {\n return v === null || v === undefined || isIn(typeof v, ['string', 'number', 'bigint', 'boolean', 'symbol']);\n};\n","export type Func<T, Args = unknown> = (...args: Args[]) => T;\n\nexport const isFunc = <T, Args>(o?: unknown): o is (...params: Args[]) => T => !!o && typeof o === 'function';\n","import { Get } from './Get';\nimport { isFunc } from './Func';\nimport { isDefined, isFunction } from './Is';\nimport { isPrimitive } from './Primitive';\nimport { Optional } from './Types';\n\nexport type Constructor<T = unknown> = { new (...args: any[]): T };\n\nexport type Construct<Out, In = any> = Get<Out, In> | Constructor<Out>;\n\nexport const isConstructor = <T>(c?: unknown): c is Constructor<T> => (isDefined(c) && isFunc<T, unknown>(c) && c.prototype && c.prototype.constructor) === c;\n\nexport const isInstance = <T>(ctor: Constructor<T>, o?: unknown): o is T => isFunction(ctor) && o instanceof ctor;\n\nexport const ofConstruct = <T>(c: Construct<T>, ...args: unknown[]): T => (isConstructor<T>(c) ? new c(...args) : isFunc<T, unknown>(c) ? c(...args) : c);\n\nexport const toName = (subject?: unknown, postfix = ''): string => (subject as any)?.constructor?.name?.replace(postfix, '').toLowerCase() ?? '';\n\nconst isPromise = <T>(value: unknown): value is Promise<T> => {\n return value instanceof Promise;\n};\n\nexport const on = <T, R>(t: T, f: (t: T) => R): R extends Promise<unknown> ? Promise<T> : T => {\n const result = f(t);\n return (isPromise(result) ? result.then(() => t) : t) as R extends Promise<unknown> ? Promise<T> : T;\n};\n\nexport const use = <T, Out>(t: T, f: (t: T) => Out): Out => f(t);\n\nexport const ifA = <T>(c: Constructor<T>, t?: unknown, alt?: unknown): Optional<T> => (!isPrimitive(t) && t instanceof c ? t : alt ? ifA(c, alt) : undefined);\n\nexport type RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Pick<T, Exclude<keyof T, Keys>> &\n {\n [K in Keys]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<Keys, K>>>;\n }[Keys];\n","import { isPrimitive } from './Primitive';\nimport { Identity } from './Identity';\nimport { use } from './Constructor';\nimport { isDefined, isObject } from './Is';\n\nexport const isA = <T>(t?: unknown, ...properties: (keyof T)[]): t is T => !isPrimitive(t) && properties.every(p => p.toString() in (t as any));\nexport const isAn = isA;\nexport const isIdentity = (by: unknown): by is Identity => use(by as Identity, b => isObject(b) && isDefined(b.id));\n","import { Func, isFunc } from './Func';\n\nexport type Get<T = any, Args = any> = Func<T, Args> | T;\nexport type Predicate<Args = unknown> = Get<boolean, Args>;\nexport const ofGet = <T, Args = any>(g: Get<T, Args>, ...args: Args[]): T => (isFunc<T, Args>(g) ? g(...args) : g);\nexport const ifGet = <T>(pred: Get, valid: Get<T>, invalid: Get<T>): T => (ofGet(pred) ? ofGet(valid) : ofGet(invalid));\nexport type GetProperty<T, Prop> = keyof T | Func<Prop, T>;\nexport const ofProperty = <T, Prop>(t: T, p: GetProperty<T, Prop>): Prop => (isFunc<Prop, T>(p) ? p(t) : ((t as any)[p] as Prop));\n","import { isArray, isDefined } from './Is';\nimport { on, use } from './Constructor';\n\nexport type OneOrMore<T> = T | Array<T>;\nexport type ArrayLike<T> = OneOrMore<T>[];\n\nexport const toArray = <T>(...items: ArrayLike<T>): T[] =>\n items.length > 1 ? (items as T[]) : isArray(items[0]) ? items[0] : isDefined(items[0]) ? [items[0]] : [];\n\nexport const toObject = <T>(key: keyof T, ...items: ArrayLike<T>): Record<string | number | symbol, T> =>\n toArray(...items).reduce((o: any, i) => {\n o[i[key]] = i;\n return o;\n }, {});\n\nexport const array = {\n merge: (first: any[] = [], second: any[] = [], firstKey = 'id', secondKey = 'id'): any[] =>\n first.map(f => ({\n ...f,\n ...second.find(s => isDefined(s[secondKey]) && isDefined(f[firstKey]) && s[secondKey] === f[firstKey]),\n })),\n switch: <T>(items: T[] = [], item: T): T[] =>\n use([...items], res => {\n on(res.indexOf(item), i => (i !== -1 ? res.splice(i, 1) : res.push(item)));\n return res;\n }),\n splitIn: <T>(items: T[] = [], length = 2): T[][] => {\n const res: T[][] = Array.from({ length }, () => []);\n items.forEach((i, index) => res[index % length].push(i));\n return res;\n },\n chunk: <T>(items: T[] = [], length = 2): T[][] => {\n const chunks = Math.ceil(items.length / length);\n const res: T[][] = Array.from({ length: chunks }, () => []);\n items.forEach((i, index) => res[Math.floor(index / chunks)].push(i));\n return res;\n },\n};\n","import { isDefined } from './Is';\nimport { isFunc } from './Func';\nimport { Get, ofGet } from './Get';\n\nexport type Text = { toString(): string };\n\nexport const isText = (t?: unknown): t is Text => isDefined(t) && isFunc<string, any>((t as any).toString);\n\nexport const asString = (t?: unknown, alt: Get<Text> = ''): string => (isText(t) ? t : ofGet(alt)).toString();\n\nexport const replaceAll = (origin: Text, search: Text, replace: Text = ''): string => asString(origin).split(asString(search)).join(asString(replace));\n\nexport const toWords = (input: unknown): string[] => {\n return asString(input)\n .replace(/(\\p{Lower})(\\p{Upper})/gu, '$1 $2')\n .replace(/(\\p{Upper})(\\p{Upper}\\p{Lower})/gu, '$1 $2')\n .split(/[_\\W]+/g)\n .filter(Boolean);\n};\n\nexport const kebab = (s = ''): string => toWords(s).join('-').toLowerCase();\n\nexport const capitalize = (s = ''): string => s.charAt(0).toUpperCase() + s.slice(1);\n","import { AnyKey } from '../types/AnyKey';\n\nexport const traverse = (subject: unknown, property = ''): unknown => {\n subject ??= {};\n const props = property.split('.');\n const p = props.shift() as string;\n return props.length === 0 ? (subject as any)[p] : traverse((subject as any)[p], props.join('.'));\n};\n\nexport const traverseSet = <T>(subject: T, property: AnyKey<T>, value: unknown): unknown => {\n const props = property.split('.');\n const p = props.shift() as string;\n return {\n ...(subject as any),\n [p]: props.length === 0 ? value : traverseSet((subject as any)[p], props.join('.'), value),\n } as T;\n};\n\nexport const accumulate = <T>(items: T[], ...keys: AnyKey<T>[]): T[] =>\n items.map((t, i, arr) => {\n const acc = keys.reduce(\n (acc, v) => traverseSet(acc, v, i === 0 ? traverse(t, v) : (traverse(arr[i - 1], v) as number) + (traverse(t, v) as number)) as T,\n t\n );\n arr[i] = acc;\n return acc;\n });\n","import { ArrayLike, toArray } from './Array';\nimport { Constructor, on, use } from './Constructor';\nimport type { Json } from './Json';\nimport { isArray, isDefined, isEmpty } from './Is';\nimport { isA } from './IsA';\nimport { Get, GetProperty, ofGet, ofProperty } from './Get';\nimport type { Id } from './Id';\nimport { asString } from './Text';\nimport { Optional } from './Types';\nimport { ifDefined, ifTrue } from '../utils/If';\nimport { AnyKey } from './AnyKey';\nimport { traverse } from '../utils/Traverse';\nimport { Indexed } from './Indexed';\n\ntype Pred<T> = (value: T, index: number, obj: T[]) => unknown;\n\nexport class List<T = unknown> extends Array<T> {\n get ids(): List<Id> {\n return this.mapDefined(i => (i as any).id as Id);\n }\n\n get indexed(): List<Indexed<T>> {\n return this.map((v, index) => ({ ...v, index }));\n }\n\n isSubSetOf(...items: ArrayLike<T>): boolean {\n return this.diff(items).length === 0;\n }\n\n isSuperSetOf(...items: ArrayLike<T>): boolean {\n return this.length > items.length && toList(...items).isSubSetOf(...this);\n }\n\n isIntersectingWith(...items: ArrayLike<T>): boolean {\n return this.intersect(items).length > 0;\n }\n\n isDisjointWith(...items: ArrayLike<T>): boolean {\n return !this.isIntersectingWith(...items);\n }\n\n areEqual(...items: ArrayLike<T>): boolean {\n return this.isSubSetOf(...items) && toList(...items).isSubSetOf(...this);\n }\n\n asc(p: GetProperty<T, any>): List<T> {\n return this.sort((e1, e2) => (ofProperty(e1, p) > ofProperty(e2, p) ? 1 : -1));\n }\n\n desc(p: GetProperty<T, any>): List<T> {\n return this.sort((e1, e2) => (ofProperty(e1, p) < ofProperty(e2, p) ? 1 : -1));\n }\n\n first(p?: Pred<T>, params?: unknown): T {\n return (p ? this.find(p, params) : this[0]) as T;\n }\n\n firstValue<V>(f: (t: T) => V, alt?: Get<V, T>): Optional<V> {\n return ifDefined(\n this.first(t => !!f(t)),\n f,\n v => ofGet(alt, v)\n );\n }\n\n isFirst(value: T): boolean {\n return value === this.first();\n }\n\n next(p?: Pred<T>, params?: unknown): T {\n return p ? this[this.findIndex(p, params) + 1] : this[0];\n }\n\n prev(p?: Pred<T>, params?: unknown): T {\n return p ? this[this.findIndex(p, params) - 1] : this[0];\n }\n\n last(p?: Pred<T>, params?: unknown): T {\n return p ? this.filter(p, params).last() : this[this.length - 1];\n }\n\n isLast(value: T): boolean {\n return value === this.last();\n }\n\n overlaps(...items: ArrayLike<T>): boolean {\n return toList<T>(...items).some(i => this.some(t => i === t));\n }\n\n diff(others: ArrayLike<T>): List<T> {\n return this.filter(i => !others.includes(i));\n }\n\n diffByKey<U = T>(others: ArrayLike<U>, key: keyof T & keyof U): List<T> {\n return this.filter((i: any) => !others.some((o: any) => o[key] === i[key]));\n }\n\n symmetricDiff(others: ArrayLike<T>): List<T> {\n return this.diff(others).concat(toList<T>(...others).diff(this));\n }\n\n symmetricDiffByKey(others: ArrayLike<T>, key: keyof T): List<T> {\n return this.diffByKey(others, key).concat(toList<T>(...others).diffByKey(this, key));\n }\n\n intersect(others: ArrayLike<T>): List<T> {\n return this.filter(i => others.includes(i));\n }\n\n intersectByKey<U>(others: ArrayLike<U>, key: keyof T & keyof U): List<T> {\n return this.filter((i: any) => others.some((o: any) => o[key] === i[key]));\n }\n\n intersectBy<U>(others: ArrayLike<U>, f: (value: T, value2: U) => boolean): List<T> {\n return this.filter(i => others.some(o => f(i, o as U)));\n }\n\n accumulate(...keys: (keyof T)[]): List<T> {\n return this.map((d, i, arr) => {\n const acc = keys.reduce((acc, v) => {\n (acc as any)[v] = i === 0 ? d[v] : (arr[i - 1][v] as number) + (d[v] as number);\n return acc;\n }, d);\n arr[i] = acc;\n return acc;\n });\n }\n\n toJSON(): Json[] {\n return this.reduce((a, i) => {\n a.push(JSON.parse(JSON.stringify(i ?? {})));\n return a;\n }, new Array<Json>());\n }\n\n map<U>(f: (value: T, index: number, array: T[]) => U, params?: unknown): List<U> {\n return toList<U>(super.map(f, params));\n }\n\n flatMap<U, This = unknown>(f: (this: This, value: T, index: number, array: T[]) => ReadonlyArray<U> | U, params?: This): List<U> {\n return toList<U>(super.flatMap(f, params));\n }\n\n mapDefined<U>(f: (value: T, index: number, array: T[]) => U, params?: unknown): List<NonNullable<U>> {\n return this.map(f, params).defined();\n }\n\n mapAsync(f: (i: T) => Promise<T>): Promise<List<T>> {\n return Promise.all(super.map(e => f(e))).then(a => toList<T>(a));\n }\n\n mapSerial<U>(f: (i: T) => Promise<U>): Promise<List<U>> {\n return super.reduce((p, item) => p.then(results => on(results, async r => r.push(await f(item)))), Promise.resolve(toList<U>()));\n }\n\n distinct(): List<T> {\n return this.filter((i, index) => this.indexOf(i) === index);\n }\n\n distinctByKey(key: keyof T): List<T> {\n const seen = new Set<T[keyof T]>();\n return this.filter(item => !seen.has(item[key]) && seen.add(item[key]));\n }\n\n distinctByValue(): List<T> {\n const seen = new Set<string>();\n return this.filter(item => !seen.has(JSON.stringify(item)) && seen.add(JSON.stringify(item)));\n }\n\n filter(p: Pred<T>, params?: unknown): List<T> {\n return toList<T>(super.filter(p, params));\n }\n\n sum(p: (t: T) => number): number {\n return this.reduce((sum: number, i) => sum + p(i), 0);\n }\n\n max(p: (value: T) => any): T;\n\n max(key: keyof T): T;\n\n max(p: keyof T | ((value: T) => any)): T {\n return typeof p === 'function' ? this.sort((e1, e2) => (p(e1) < p(e2) ? 1 : -1)).first() : this.desc(p).first();\n }\n\n min(key: keyof T): T;\n\n min(p: (value: T) => any): T;\n\n min(p: keyof T | ((value: T) => any)): T {\n return typeof p === 'function' ? this.sort((e1, e2) => (p(e1) > p(e2) ? 1 : -1)).first() : this.asc(p).first();\n }\n\n byId(id: Id): T {\n return this.first(i => asString((i as any).id) === asString(id));\n }\n\n byKey(key: keyof T, value: unknown): T {\n return this.first(i => i[key] == value);\n }\n\n add(...items: ArrayLike<T>): this {\n super.push(...toArray(...items));\n return this;\n }\n\n concat(...items: ConcatArray<T>[]): List<T>;\n\n concat(...items: (T | ConcatArray<T>)[]): List<T>;\n\n concat(...items: (T | ConcatArray<T>)[]): List<T> {\n return toList<T>(super.concat(...items));\n }\n\n reverse(): List<T> {\n return toList<T>(super.reverse());\n }\n\n splice(start: number, deleteCount?: number): List<T>;\n\n splice(start: number, deleteCount: number, ...items: T[]): List<T>;\n\n splice(start: number, deleteCount: number, ...items: T[]): List<T> {\n return toList<T>(super.splice(start, deleteCount, ...items));\n }\n\n remove(item: T): List<T> {\n const index = this.indexOf(item);\n if (index > -1) {\n this.splice(index, 1);\n }\n return this;\n }\n\n replace(key: keyof T, item: T): List<T> {\n const index = this.findIndex(i => i[key] === item?.[key]);\n ifTrue(index != -1, () => this.splice(index, 1, item));\n return this;\n }\n\n switch(item: T): List<T> {\n return this.includes(item) ? this.remove(item) : this.add(item);\n }\n\n switchOn<U = T>(item: U, on: AnyKey<U>): List<T>;\n\n switchOn<T>(item: T, on: Pred<T>): List<T>;\n\n switchOn<U = T>(item: T, on: AnyKey<U> | Pred<T>): List<T> {\n return use(typeof on === 'function' ? this.find(on) : use(traverse(item, on), v => this.find(i => traverse(i, on) === v)), i =>\n i ? this.remove(i) : this.add(item)\n );\n }\n\n defined(): List<NonNullable<T>> {\n return this.reduce((l, v) => (isDefined(v) ? l.add(v) : l), toList<NonNullable<T>>());\n }\n\n toObject(key: keyof T, options: { deleteKey?: boolean } = {}): Record<string | number | symbol, T> {\n return this.reduce((o: any, i) => {\n o[i[key]] = i;\n if (options.deleteKey) delete o[i[key]][key];\n return o;\n }, {});\n }\n\n toObjectList(key: keyof T): Record<string | number | symbol, List<T>> {\n return this.reduce(\n (a, t) => {\n const k = t[key] as unknown as string | number | symbol;\n a[k] = a[k] ?? toList();\n a[k].push(t);\n return a;\n },\n {} as Record<string | number | symbol, List<T>>\n );\n }\n\n orElse(...alt: ArrayLike<T>): Optional<List<T>> {\n return !isEmpty(this) ? this : !isEmpty(...alt) ? toList<T>(...alt) : undefined;\n }\n\n weave(insertFrom: T[], interval: number): this {\n for (let i = interval, n = 0; i <= this.length && n < insertFrom.length; i += interval + 1) {\n this.splice(i, 0, insertFrom[n++]);\n }\n return this;\n }\n\n slice(start?: number, end?: number): List<T> {\n return toList(super.slice(start, end));\n }\n\n none(p: (t: T) => boolean): boolean {\n return !this.some(p);\n }\n\n chunk(chunkSize: number): List<List<T>> {\n return this.reduce((acc, _, index) => (index % chunkSize === 0 ? on(acc, a => a.push(this.slice(index, index + chunkSize))) : acc), toList<List<T>>());\n }\n\n //we needed to add U because of a Typescript issue with generics\n update<U = T>(p: Pred<T>, val: T | ((v: U) => T)): List<T> {\n return this.map((v, i, a) => (p(v, i, a) ? ofGet<T>(val, v, i, a) : v));\n }\n\n updateFirst<U = T>(p: Pred<T>, val: T | ((v: U) => T)) {\n const index = this.findIndex(p);\n return this.update((t, i) => p(t, i, this) && i == index, val);\n }\n\n updateFirstById<U = T>(id: Id, val: T | ((v: U) => T)) {\n return this.updateFirst(i => asString((i as any)?.id) === asString(id), val);\n }\n\n updateById<U = T>(id: Id, val: T | ((v: U) => T)) {\n return this.update(i => asString((i as any)?.id) === asString(id), val);\n }\n}\n\nexport const toList = <T = unknown>(...items: ArrayLike<T>): List<T> => new List<T>().add(...items);\n\nexport const isList = <T>(l?: unknown): l is List<T> => isDefined(l) && isArray(l) && isA<List<T>>(l, 'first', 'last', 'asc', 'desc');\n\nexport const asList = <T>(c: Constructor<T>, items: unknown = []): List<T> => toList<T>(toArray(items).map(i => new c(i)));\n\nexport const maxValue = <T>(l: List<T>, key: keyof T): T[keyof T] | undefined => l.desc(key).first()?.[key];\n\nexport const minValue = <T>(l: List<T>, key: keyof T): T[keyof T] | undefined => l.asc(key).first()?.[key];\n","import { isDefined, isNotEmpty, isPresent, isTrue } from '../types/Is';\nimport { Optional } from '../types/Types';\nimport { Construct, ofConstruct, use } from '../types/Constructor';\nimport { OneOrMore } from '../types/Array';\nimport { toList } from '../types/List';\n\nexport function ifTrue<Out, In = unknown>(o: unknown, f: Construct<Out, NonNullable<In>>, alt: Construct<Out>): Out;\nexport function ifTrue<Out, In = unknown>(o: unknown, f: Construct<Out, NonNullable<In>>, alt?: Construct<Out>): Optional<Out>;\nexport function ifTrue<Out, In = unknown>(o: unknown, f: Construct<Out, NonNullable<In>>, alt?: Construct<Out>): Optional<Out> {\n return isTrue(o) ? ofConstruct(f, o) : ofConstruct(alt, o);\n}\n\nexport function ifFalse<Out, In = unknown>(o: unknown, f: Construct<Out, NonNullable<In>>, alt: Construct<Out>): Out;\nexport function ifFalse<Out, In = unknown>(o: unknown, f: Construct<Out, NonNullable<In>>, alt?: Construct<Out>): Optional<Out>;\nexport function ifFalse<Out, In = unknown>(o: unknown, f: Construct<Out, NonNullable<In>>, alt?: Construct<Out>): Optional<Out> {\n return !isTrue(o) ? ofConstruct(f, o) : ofConstruct(alt, o);\n}\n\nexport function ifDefined<Out, In = unknown>(o: Optional<In>, f: Construct<Out, NonNullable<In>>, alt: Construct<Out>): Out;\nexport function ifDefined<Out, In = unknown>(o: Optional<In>, f: Construct<Out, NonNullable<In>>, alt?: Construct<Out>): Optional<Out>;\nexport function ifDefined<Out, In = unknown>(o: Optional<In>, f: Construct<Out, NonNullable<In>>, alt?: Construct<Out>): Optional<Out> {\n return isDefined(o) ? ofConstruct(f, o) : ofConstruct(alt);\n}\n\nexport function ifNotEmpty<Out, In = unknown>(o: In, f: Construct<Out, NonNullable<In>>, alt: Construct<Out>): Out;\nexport function ifNotEmpty<Out, In = unknown>(o: In, f?: Construct<Out, NonNullable<In>>, alt?: Construct<Out>): Optional<Out>;\nexport function ifNotEmpty<Out, In = unknown>(o: In, f: Construct<Out, NonNullable<In>>, alt?: Construct<Out>): Optional<Out>;\nexport function ifNotEmpty<Out, In = unknown>(o: In, f: Construct<Out, NonNullable<In>> = o => o as Out, alt?: Construct<Out>): Optional<Out> {\n return isNotEmpty(o) ? ofConstruct(f, o) : ofConstruct(alt, o);\n}\n\nexport function ifEither<Out, In = unknown>(os: OneOrMore<In>, f: Construct<Out, NonNullable<In>>, alt: Construct<Out>): Out;\nexport function ifEither<Out, In = unknown>(os: OneOrMore<In>, f?: Construct<Out, NonNullable<In>>, alt?: Construct<Out>): Optional<Out>;\nexport function ifEither<Out, In = unknown>(os: OneOrMore<In>, f: Construct<Out, NonNullable<In>>, alt?: Construct<Out>): Optional<Out>;\nexport function ifEither<Out, In = unknown>(os: OneOrMore<In>, f: Construct<Out, NonNullable<In>> = o => o as Out, alt?: Construct<Out>): Optional<Out> {\n return use(\n toList(os).first(o => isPresent(o)),\n o => (isDefined(o) ? ofConstruct(f, o) : ofConstruct(alt, o))\n );\n}\n","import { List, toList } from './List';\nimport { ifDefined } from '../utils/If';\n\nexport type Entry<T = unknown> = [key: string, value: T];\n\nexport function entries<T = unknown>(subject: { [p: string]: T } | ArrayLike<T>): List<Entry<T>> {\n return ifDefined(\n subject,\n () => toList<Entry<T>>([...Object.entries(subject), ...Object.entries(Object.getPrototypeOf(subject) ?? {})] as Entry<T>[]),\n () => toList<Entry<T>>()\n );\n}\n\nexport function values<T = unknown>(subject: { [p: string]: T } | ArrayLike<T>): List<T> {\n return toList([...Object.values<T>(subject), ...Object.values<T>(Object.getPrototypeOf(subject) ?? {})]);\n}\n\nexport function keys<T = unknown>(subject: { [p: string]: T } | ArrayLike<T>): List<string> {\n return toList([...Object.keys(subject), ...Object.keys(Object.getPrototypeOf(subject) ?? {})]);\n}\n\nexport function extractKeys<T extends Record<string | number, unknown>, K extends keyof T>(\n obj: T,\n keys: K[] | readonly (keyof T)[]\n): {\n keys: Pick<T, K>;\n} & Omit<T, K> {\n return keys\n .filter((k): k is K => k in obj)\n .reduce(\n (acc, key) => {\n (acc.keys as T)[key] = obj[key];\n delete acc[key];\n return acc;\n },\n { keys: {} as Pick<T, K>, ...obj }\n );\n}\n","import { isA } from './IsA';\nimport { isDefined, isEmpty, isObject } from './Is';\nimport { Get, ofGet } from './Get';\nimport { ifDefined } from '../utils/If';\nimport { TypeGuard } from './TypeGuard';\nimport { entries } from './Object';\n\nexport type JsonValue = string | number | boolean | null | Json | JsonValue[];\nexport type Json = { [key: string]: JsonValue };\n\nexport const isJson: TypeGuard<{ toJSON: () => Json }> = (subject?: unknown): subject is { toJSON: () => Json } =>\n isA<{ toJSON: () => Json }>(subject, 'toJSON');\n\nexport const json = {\n parse: <T extends Json = Json>(subject: unknown): T => JSON.parse(JSON.stringify(subject ?? {})),\n merge: (...subjects: unknown[]): Json => json.parse(subjects.map(s => asJson(s, s => json.parse(s))).reduce((js, j) => ({ ...js, ...j }), {})),\n delete: <T extends Json = Json>(subject: T, key: string): T => {\n ifDefined(subject, () => delete (subject as any)[key]);\n return subject;\n },\n set: <T extends Json = Json>(subject: T, key = '', value?: unknown): T =>\n isEmpty(key) ? subject : value !== undefined ? { ...(subject as any), ...{ [key]: value as JsonValue } } : json.delete(subject, key),\n omit: <T extends Json = Json>(subject: T, ...keys: string[]): T => keys.reduce((js, k) => json.delete(js, k), json.parse<T>(subject)),\n pick: <T extends Json = Json>(subject: T, ...keys: string[]): T => keys.reduce((js, k) => json.set(js, k, (subject as any)[k]), {} as T),\n defaults: <T extends Json = Json>(options: Partial<T> = {}, defaults: Partial<T> = {}): T => json.merge(defaults, options) as T,\n isSubset: (subject: Json, subset: Json): boolean => !entries(subset).some(([k, v]) => subject[k] !== v),\n split: <T extends Record<string, unknown>, K extends string = 'extracted'>(\n t: T,\n keys: readonly (keyof T)[],\n prop: K = 'extracted' as K\n ): {\n [P in K]: Partial<T>;\n } => {\n const extracted = {} as Partial<T>;\n const rest = { ...t };\n keys.forEach(key => {\n if (key in t) {\n ifDefined(t[key], v => (extracted[key] = v));\n delete rest[key as string];\n }\n });\n return { [prop]: extracted, ...rest };\n },\n};\n\nexport const toJson = json.merge;\n\nexport const asJson = (j?: unknown, alt: Get<Json> = {}): Json => (isJson(j) ? j.toJSON() : isObject(j) ? (j as Json) : ofGet(alt, j));\n\nclass Any<T extends Json> {\n constructor(readonly value: T) {}\n\n merge = (...subjects: T[]): Any<T> => any<T>(json.merge(this.value, ...subjects) as T);\n delete = (key: keyof T): Any<T> => any<T>(json.delete<T>(this.value, key as string));\n omit = (...keys: (keyof T)[]): Any<T> => any<T>(json.omit<T>(this.value, ...(keys as string[])));\n set = (key: keyof T, value?: unknown): Any<T> => any<T>(json.set(this.value, key as string, value));\n\n toJSON(): Json {\n return this.value;\n }\n}\n\nexport const takeFirstKey = (j: unknown, alt: string = ''): string => entries(asJson(j)).first(([, v]) => isDefined(v))?.[0] ?? alt;\n\nexport const takeFirst = <K extends string = string, T = any>(j: Record<K, T>): [K, T] => entries(j).first(([, v]) => isDefined(v)) as [K, T];\n\nexport const any = <T extends Json = Json>(value: T): Any<T> => new Any<T>(value);\n","import { asString } from '../types/Text';\n\nexport class Convert<From = unknown, To = unknown> {\n constructor(\n public readonly from: (f: From) => To,\n public readonly to: (t: To) => From\n ) {}\n}\n\nexport const convert = {\n default: new Convert<any, any>(\n a => a,\n a => a\n ),\n ignore: new Convert<any, any>(\n () => undefined,\n () => undefined\n ),\n toBool: {\n fromNumber: new Convert<boolean, number>(\n b => (b ? 1 : 0),\n n => n !== 0\n ),\n fromString: new Convert<boolean, string>(\n b => (b ? 'true' : 'false'),\n s => s === 'true'\n ),\n },\n toDate: {\n fromString: new Convert<string, string>(\n s => new Date(s).toISOString(),\n s => s\n ),\n },\n toNumber: {\n fromString: new Convert<number, string>(\n n => asString(n),\n s => parseInt(s)\n ),\n },\n};\n","import { json, Json, JsonValue } from '../types/Json';\nimport { Sort } from '../types/Sort';\nimport { convert, Convert } from '../utils/Convert';\nimport { isDefined } from '../types/Is';\n\nexport class Condition {\n constructor(\n readonly key: string,\n readonly operator: string,\n readonly value: unknown\n ) {}\n\n and = (...others: Condition[]): LogicalCondition => new LogicalCondition('and', [this, ...others]);\n or = (...others: Condition[]): LogicalCondition => new LogicalCondition('or', [this, ...others]);\n\n toJSON(): Json {\n return { [this.key]: { [`$${this.operator}`]: json.parse(this.value) } };\n }\n}\n\nexport class LogicalCondition {\n constructor(\n readonly operator: string,\n readonly conditions: Condition[]\n ) {}\n\n toJSON(): Json {\n return { [`$${this.operator}`]: this.conditions.map(c => c.toJSON()) };\n }\n}\n\nexport class SortCondition extends Condition implements Sort {\n constructor(\n readonly key: string,\n readonly value: -1 | 1\n ) {\n super(key, '', value);\n }\n\n toJSON(): Json {\n return { [this.key]: this.value };\n }\n}\n\nexport const toCondition = (field: string, operator: string, value: unknown, conv: Convert = convert.default): Condition =>\n new Condition(field, operator, conv.from(value) as JsonValue);\n\nexport const isSortCondition = (s?: unknown): s is SortCondition => isDefined(s) && s instanceof SortCondition;\n","import 'reflect-metadata';\nimport { List, toList } from './List';\nimport { isDefined } from './Is';\nimport { on, use } from './Constructor';\nimport { Optional } from './Types';\nimport { Entry, entries, values } from './Object';\n\ntype MetaParseOptions = { initial?: any; skipUndefined?: boolean };\n\nclass ClassMeta {\n constructor(\n readonly subject: any,\n private readonly data: any = (subject.prototype ?? subject).constructor\n ) {}\n\n get = <T>(key: string): T => Reflect.getMetadata(key, this.data) as T;\n\n set = <T>(key: string, value: T): T => {\n Reflect.defineMetadata(key, value, this.data);\n return value;\n };\n\n entries = <T = unknown>(): List<Entry<T>> => entries<T>(this.subject);\n\n parse = <Out, Value>(f: (v: Value) => Out, options: MetaParseOptions = {}): Record<string, Out> => {\n const { initial = {}, skipUndefined = false } = options;\n return this.entries<Value>().reduce((a, [k, val]) => use(f(val), v => (isDefined(v) || !skipUndefined ? on(a, a => (a[k] = v)) : a)), initial);\n };\n\n properties = (key?: string): List<PropertyMeta> =>\n toList([...Object.getOwnPropertyNames(this.subject), ...Object.getOwnPropertyNames(Object.getPrototypeOf(this.subject))])\n .map(p => this.property(p))\n .filter(p => (key ? p.get(key) : p));\n\n keys = <T = any>(key: string): List<T> =>\n this.properties()\n .map(p => p.get<T>(key))\n .reduce((list, u) => (u ? list.add(u) : list), toList<T>());\n\n values = <T = unknown>(): List<T> => values<T>(this.subject);\n\n property = (property: string | symbol): PropertyMeta => new PropertyMeta(this.subject, property);\n}\n\nclass PropertyMeta {\n constructor(\n readonly subject: any,\n readonly property: string | symbol,\n private readonly data = Reflect.getMetadata(property, subject)\n ) {}\n\n get value(): any {\n return this.subject[this.property];\n }\n\n get = <T>(key: string): Optional<T> => (isDefined(this.data) && isDefined(this.data[key]) ? (this.data[key] as T) : undefined);\n\n set = <T>(key: string, value: T): T => {\n Reflect.defineMetadata(this.property, { ...this.data, [key]: value }, this.subject);\n return value;\n };\n}\n\nexport const meta = (subject: unknown): ClassMeta => new ClassMeta(subject ?? {});\n","import { Id } from './Id';\nimport { List, toList } from './List';\nimport { isAn } from './IsA';\nimport { meta } from './Meta';\nimport { isDefined, isFunction } from './Is';\nimport { Validatable } from './Validatable';\nimport { JsonValue } from './Json';\nimport { Get, ofGet } from './Get';\nimport { TypeGuard } from './TypeGuard';\n\nexport type EnumConstructor<E = unknown> = {\n byIds<E extends Enum>(ids: Id[]): List<E>;\n byId<E extends Enum>(id: Id, alt?: Get<E, unknown>): E;\n isEnum: boolean;\n};\n\nexport const isEnumConstructor = <E = unknown>(c: unknown): c is EnumConstructor<E> => isFunction(c) && (c as any).isEnum;\n\nexport abstract class Enum implements Validatable {\n static isEnum = true;\n\n protected constructor(\n readonly name: string,\n readonly id: Id = name.toLowerCase(),\n readonly code: string = id.toString()\n ) {}\n\n get isValid(): boolean {\n return isDefined(this.id);\n }\n\n static all<E extends Enum>(): List<E> {\n return meta(this.allTuple<E>()).values<E>();\n }\n\n static filter<E extends Enum>(p: (value: E, index: number, array: E[]) => unknown, params?: unknown): List<E> {\n return this.all<E>().filter(p, params);\n }\n\n static first<E extends Enum>(p?: (value: E, index: number, array: E[]) => unknown, params?: unknown): E {\n return this.all<E>().first(p, params);\n }\n\n static byIds<E extends Enum>(ids: Id[] = []): List<E> {\n return toList(ids)\n .mapDefined(id => this.byId<E>(id))\n .distinct();\n }\n\n static byId<E extends Enum>(id: Id, alt?: Get<E, unknown>): E {\n return this.allTuple<E>()[id] ?? ofGet(alt);\n }\n\n protected static allTuple<E extends Enum>(): Record<Id, E> {\n return meta(this).get(`all-${this.name}`) ?? meta(this).set(`all-${this.name}`, meta(this).values<E>().filter(isEnum).toObject('id'));\n }\n\n equals<E extends Enum>(other: E | Id): other is E {\n return this.id === (isEnum(other) ? other.id : other);\n }\n\n isIn<E extends Enum>(...items: E[] | Id[]): boolean {\n return items.some(i => this.equals(i));\n }\n\n toJSON(): JsonValue {\n return this.id;\n }\n\n toString(): string {\n return this.id.toString();\n }\n}\n\nexport const isEnum: TypeGuard<Enum> = (e?: unknown): e is Enum => isDefined(e) && e instanceof Enum && isAn<Enum>(e, 'name', 'id', 'code');\n","import { List, toList } from './List';\nimport { asString, Text } from './Text';\nimport { toName } from './Constructor';\nimport { entries } from './Object';\nimport { text, textValue } from './ToText';\n\nexport type TemplateOptions = { type?: Text; property?: Text; actual?: Text; subject?: Text };\n\nexport class Template implements Text {\n constructor(\n private readonly template: string,\n private readonly subject: unknown = {},\n private readonly options: TemplateOptions = {}\n ) {}\n\n toString = (): string => {\n return entries(this.options)\n .reduce((t, [k]) => this.option(t, k), this.object())\n .replace(' ', ' ');\n };\n\n private readonly props = (tmpl: string, key: string, result: List<string> = toList()): string[] => {\n const i1 = tmpl.indexOf(`{${key}`);\n if (i1 < 0) {\n return result;\n }\n const i2 = tmpl.indexOf('}', i1);\n return this.props(tmpl.slice(i2 + 1), key, result.add(tmpl.substring(i1 + 1, i2)));\n };\n\n private readonly object = (): string => {\n return this.props(this.template, 'this').reduce((t: string, p) => t.replace(`{${p}}`, textValue(this.subject, p.replace('this.', ''))), this.template);\n };\n\n private readonly option = (tmpl: string, prop: string): string => {\n return this.props(tmpl, prop).reduce((t: string, p) => t.replace(`{${p}}`, textValue(this.options, p)), tmpl);\n };\n}\n\nexport function template(tmpl: Text, subject: unknown, options: TemplateOptions = {}): Text {\n return new Template(asString(tmpl), subject, {\n type: toName(subject),\n subject: text(JSON.stringify(subject)),\n ...options,\n });\n}\n","import { asString, capitalize, replaceAll, Text } from './Text';\nimport { toName } from './Constructor';\nimport { Optional } from './Types';\nimport { Get, ofGet } from './Get';\nimport { isEmpty, isNotEmpty } from './Is';\nimport { List, toList } from './List';\nimport { JsonValue } from './Json';\nimport { template } from './Template';\n\nexport class ToText implements Text {\n constructor(readonly subject: string) {}\n\n get cap(): ToText {\n return this.map(s => capitalize(s?.toLowerCase()));\n }\n\n get capFirst(): ToText {\n return this.map(s => capitalize(s));\n }\n\n get title(): ToText {\n return this.map(s =>\n s\n .split(' ')\n .map(w => text(w).cap)\n .join(' ')\n );\n }\n\n get pascal(): ToText {\n return this.title.replace(' ', '');\n }\n\n get lower(): ToText {\n return this.map(s => s.toLowerCase());\n }\n\n get upper(): ToText {\n return this.map(s => s.toUpperCase());\n }\n\n get camel(): ToText {\n return this.title.trim.map(s => `${s.charAt(0).toLowerCase()}${s.slice(1)}`);\n }\n\n get kebab(): ToText {\n return this.lower.replace(' ', '-');\n }\n\n get strictKebab(): ToText {\n return this.map(s => s.replace(/[^a-z\\d]+/gi, ' ').trim()).kebab;\n }\n\n get slug(): ToText {\n return this.map(s =>\n s\n .replace(/ß/g, 'ss')\n .normalize('NFKD')\n .replace(/[\\u0300-\\u036F]/g, '')\n .toLowerCase()\n .replace(/[^a-z\\d]+/g, '-')\n .replace(/(^-)|(-$)/g, '')\n );\n }\n\n get snake(): ToText {\n return this.upper.replace(' ', '_');\n }\n\n get plural(): ToText {\n return this.ifLike('') ?? this.add('s');\n }\n\n get space(): ToText {\n return this.map(s => s.replace(/([a-z0-9])([A-Z])/g, '$1 $2').replace(/[_-]/g, ' '));\n }\n\n get sentence(): ToText {\n return this.isEmpty ? this : this.map(s => `${s.charAt(0).toUpperCase()}${s.slice(1)}.`);\n }\n\n get initials(): ToText {\n return this.map(s =>\n s\n .split(' ')\n .map(w => w[0])\n .join('')\n );\n }\n\n get trim(): ToText {\n return this.map(s => s.replace(/[- ,_#]/g, ''));\n }\n\n get trimSentence(): ToText {\n return this.map(s =>\n s\n .replace(/[\\u200B-\\u200D\\uFEFF]/g, '')\n .replace(/[\\s\\u00A0]+/g, ' ')\n .replace(/\\s+([.,;:!?])/g, '$1')\n .trim()\n );\n }\n\n get isEmpty(): boolean {\n return isEmpty(this.toString());\n }\n\n parse = (subject: unknown, options = {}): ToText => text(template(this.subject, subject, { type: toName(subject), ...options }));\n\n is = (...others: unknown[]): boolean => others.some(o => this.toString() === text(o).toString());\n\n equals = this.is;\n\n isLike = (...others: unknown[]): boolean => others.some(o => this.trim.lower.is(text(o).trim.lower));\n\n ifLike = (...others: unknown[]): Optional<this> => (this.isLike(...others) ? this : undefined);\n\n endsWith = (end?: unknown): boolean => this.subject.endsWith(asString(end));\n\n startsWith = (end?: unknown): boolean => this.subject.startsWith(asString(end));\n\n first = (n: number): ToText => this.map(s => s.substring(0, n));\n\n last = (n: number): ToText => this.map(s => s.substring(s.length - n));\n\n map = (func: Get<string, string>): ToText => text(ofGet(func, this.subject));\n\n replace = (search: Text, replace: Text): ToText => this.map(s => replaceAll(s, search, replace));\n\n add = (add?: unknown, separator = ''): ToText => this.map(s => (isNotEmpty(add) ? `${s}${separator}${text(add)}` : s));\n\n with = (separator: string, ...other: unknown[]): ToText =>\n this.map(s =>\n toList(s)\n .add(...other.map(u => text(u).toString()))\n .filter(s => isNotEmpty(s))\n .join(separator)\n );\n\n split = (separator: string = ' '): List<string> => toList(this.subject.split(separator));\n\n toString(): string {\n return this.subject;\n }\n\n toJSON(): JsonValue {\n return this.subject;\n }\n}\n\nexport function text(subject?: unknown, alt = ''): ToText {\n const sub = subject ? asString(subject) : alt;\n return new ToText(sub !== '[object Object]' ? sub : '');\n}\n\nexport function textValue(subject: any, prop: string): string {\n const p = prop.split('.');\n const root = subject?.[p[0]];\n const initial = typeof root === 'object' && root !== null ? root : text(root);\n return (\n p\n .splice(1)\n .reduce((t, s) => t?.[s], initial)\n ?.toString() ?? ''\n );\n}\n","import { asString, Text } from './Text';\nimport { Enum } from './Enum';\nimport { isDefined } from './Is';\nimport { Id } from './Id';\n\nimport { text } from './ToText';\n\nexport class Exception extends Enum {\n static readonly AlreadyExists = new Exception('Subject already exists');\n static readonly DoesNotExist = new Exception('Does not exist');\n static readonly IsMissingId = new Exception('Subject is missing an id');\n static readonly IsNotImplemented = new Exception('Is not implemented');\n static readonly IsNotValid = new Exception('Is not valid');\n static readonly Unknown = new Exception('Unknown error');\n\n constructor(\n readonly message: string,\n id?: Id,\n readonly reason?: Text\n ) {\n super(message, id ?? text(message).pascal.toString());\n }\n\n static readonly CouldNotExecute = (target: Text): Exception => new Exception(`Could not execute ${target}.`, 'CouldNotExecute');\n\n static readonly CouldNotValidate = (target: Text): Exception => new Exception(`Could not validate ${target}.`, 'CouldNotValidate');\n\n static readonly EnvironmentVariableNotFound = (variable: Text): Exception =>\n new Exception(`Environment variable ${text(variable).upper} could not be found.`, 'EnvironmentVariableNotFound');\n\n because = (reason: Text): Exception => new Exception(this.message, this.id, reason);\n}\n\nexport const isException = (e?: unknown, t?: Text): e is Exception => e instanceof Exception && (isDefined(t) ? e.equals(asString(t)) : true);\nexport const isDoesNotExist = (e?: unknown): e is Exception => e instanceof Exception && Exception.DoesNotExist.equals(e);\n","import { toArray } from '../types/Array';\nimport { ErrorOrigin } from '../types/ErrorOrigin';\nimport { List, toList } from '../types/List';\nimport { asString } from '../types/Text';\nimport { on, use } from '../types/Constructor';\nimport { keys, values } from '../types/Object';\n\ntype Pro<A> = A | PromiseLike<A>;\ntype Aw<A> = Awaited<A>;\n\nexport const resolve = <S = unknown>(subject: S | PromiseLike<S>): Promise<S> => Promise.resolve(subject);\nexport const reject = <S = never>(e: ErrorOrigin): Promise<S> => Promise.reject(e);\n\nexport const tuple = {\n 2: <F, S>(first: Pro<F>, second: Pro<S>): Promise<[Aw<F>, Aw<S>]> => Promise.all([first, second]),\n 3: <F, S, T>(first: Pro<F>, second: Pro<S>, third: Pro<T>): Promise<[Aw<F>, Aw<S>, Aw<T>]> => Promise.all([first, second, third]),\n 4: <F, S, T, Fo>(first: Pro<F>, second: Pro<S>, third: Pro<T>, forth: Pro<Fo>): Promise<[Aw<F>, Aw<S>, Aw<T>, Aw<Fo>]> =>\n Promise.all([first, second, third, forth]),\n 5: <F, S, T, Fo, Fi>(first: Pro<F>, second: Pro<S>, third: Pro<T>, forth: Pro<Fo>, fifth: Pro<Fi>): Promise<[Aw<F>, Aw<S>, Aw<T>, Aw<Fo>, Aw<Fi>]> =>\n Promise.all([first, second, third, forth, fifth]),\n all: <F, S>(first: Pro<F>, second: Pro<S>[]): Promise<[Aw<F>, Aw<S[]>]> => Promise.all([first, Promise.all(second)]),\n spread: <F, S>(first: Pro<F>, ...second: Pro<S>[]): Promise<[Aw<F>, Aw<S[]>]> => Promise.all([first, Promise.all(toArray(second))]),\n list: <T>(list: Pro<T>[]): Promise<List<Aw<T>>> => Promise.all([...list]).then(toList),\n settled: <T>(list: Pro<T>[]): Promise<{ fulfilled: List<Aw<T>>; rejected: List<string> }> =>\n Promise.allSettled([...list]).then(rs => ({\n fulfilled: toList(...rs.filter(r => r.status === 'fulfilled').map(r => r.value)),\n rejected: toList(...rs.filter(r => r.status === 'rejected').map(r => asString(r.reason))),\n })),\n object: <T extends Record<string, unknown>>(obj: T): Promise<{ [K in keyof T]: Aw<T[K]> }> =>\n use(keys(obj), ks => tuple.list(values(obj)).then(vs => vs.reduce((acc: any, v, i) => on(acc, a => (a[ks[i]] = v)), {}) as { [K in keyof T]: Aw<T[K]> })),\n};\n\nexport const tuple2 = tuple[2];\nexport const tuple3 = tuple[3];\nexport const tuple4 = tuple[4];\nexport const tuple5 = tuple[5];\nexport const tupleO = tuple.object;\nexport const settled = tuple.settled;\n","import { Json, JsonValue } from './Json';\nimport { Id } from './Id';\nimport { Exception } from './Exception';\nimport { PageList, PageOptions } from './PageList';\nimport { List } from './List';\nimport { Optional } from './Types';\nimport { reject } from '../utils/Promise';\n\nexport type FetchOptions = PageOptions;\n\nexport abstract class Gateway<Options = FetchOptions> {\n all(options?: Options): Promise<PageList<Json>> {\n return reject(Exception.IsNotImplemented);\n }\n\n byId(id: Id, options?: Options): Promise<Optional<Json>> {\n return reject(Exception.IsNotImplemented);\n }\n\n by(_key: string, _value: JsonValue, _options?: Options): Promise<PageList<Json>> {\n return reject(Exception.IsNotImplemented);\n }\n\n byIds(..._ids: Id[]): Promise<List<Json>> {\n return reject(Exception.IsNotImplemented);\n }\n\n search(q: JsonValue, options?: Options): Promise<PageList<Json>> {\n return reject(Exception.IsNotImplemented);\n }\n\n filter(options?: Options): Promise<PageList<Json>> {\n return reject(Exception.IsNotImplemented);\n }\n\n exists(id: Id, options?: Options): Promise<boolean> {\n return reject(Exception.IsNotImplemented);\n }\n\n add(item: Json, options?: Options): Promise<Json> {\n return reject(Exception.IsNotImplemented);\n }\n\n update(item: Json, options?: Options): Promise<Json> {\n return reject(Exception.IsNotImplemented);\n }\n\n remove(id: Id, options?: Options): Promise<boolean> {\n return reject(Exception.IsNotImplemented);\n }\n}\n","import { validate } from './Validate';\nimport { Results } from '../types/Results';\nimport { Constructor } from '../types/Constructor';\nimport { Get, ofGet, Predicate } from '../types/Get';\nimport { isDefined, isEmpty, isIn } from '../types/Is';\nimport { toArray } from '../types/Array';\nimport { ErrorOrigin } from '../types/ErrorOrigin';\nimport { reject, resolve } from '../utils/Promise';\nimport { Exception } from '../types/Exception';\n\nexport class When<W> {\n constructor(\n readonly subject: W,\n readonly valid = true,\n private results?: Results\n ) {}\n\n get not(): When<W> {\n return this.clone(!this.valid);\n }\n\n get and(): When<W> {\n return this.clone(this.valid);\n }\n\n get isDefined(): When<W> {\n return this.clone(this.valid === isDefined(this.subject));\n }\n\n get isEmpty(): When<W> {\n return this.clone(this.valid === isEmpty(this.subject));\n }\n\n get isTrue(): When<W> {\n return this.clone(this.valid === !!this.subject);\n }\n\n get isValid(): When<W> {\n this.results = validate(this.subject);\n return this.clone(this.valid === this.results.isValid);\n }\n\n isInstance = <U>(c: Constructor<U>): When<W> => this.clone(this.valid === this.subject instanceof c);\n\n with = (pred: Predicate<W>): When<W> => this.clone(this.valid === ofGet(pred, this.subject));\n\n contains = (property: (w: W) => unknown): When<W> => this.clone(this.valid === isDefined(ofGet(property, this.subject)));\n\n in = (...items: W[]): When<W> => this.clone(this.valid === isIn(this.subject, toArray(...items)));\n\n is = (item: W): When<W> => this.clone(this.valid === (this.subject === item));\n\n reject = (error?: Get<ErrorOrigin, W>): Promise<NonNullable<W>> =>\n !this.valid ? resolve(this.subject as NonNullable<W>) : reject(ofGet(error, this.subject) ?? this.results ?? Exception.Unknown);\n\n recover = (f: (item: W) => W | Promise<W>): Promise<W> => resolve(!this.valid ? this.subject : f(this.subject));\n\n protected clone = (result = true): When<W> => new When(this.subject, result, this.results);\n}\n\nexport const when = <T>(subject: T): When<T> => new When<T>(subject);\n","import { Uuid } from './Uuid';\nimport { Identity } from './Identity';\nimport { Optional } from './Types';\n\nimport { text } from './ToText';\n\nexport interface EnvContext {\n readonly domain: string;\n readonly name: string;\n readonly host: string;\n readonly port: number;\n readonly app: string;\n\n get(key: string, alt?: string): Optional<string>;\n}\n\nexport class DotEnvContext implements EnvContext {\n readonly domain = process.env.DOMAIN ?? 'easy';\n readonly name = process.env.ENVIRONMENT_NAME ?? '';\n readonly host = process.env.HOST ?? '';\n readonly port = Number.parseInt(process.env.PORT ?? '8080');\n readonly app = process.env.APP ?? '';\n\n readonly get = (key: string, alt?: string): Optional<string> => {\n const k = text(key)\n .map(k => k.replace(/([a-z])([A-Z])/g, '$1 $2'))\n .snake.toString();\n return process.env[k] ?? alt;\n };\n}\n\nexport interface RequestContext {\n token?: any;\n identity?: Identity;\n jwt: string;\n correlationId?: Uuid;\n lastError?: string;\n lastErrorStack?: string;\n create: (f: () => void) => void;\n\n get<T>(key: string): T;\n\n set<T>(key: string, value: T): T;\n\n wrap<T>(f: () => Promise<T>): Promise<T>;\n}\n\nexport class BaseRequestContext implements RequestContext {\n private state: any = {};\n\n get token(): any {\n return this.get('token');\n }\n\n set token(token: any) {\n this.set('token', token);\n }\n\n get identity(): Identity {\n return this.token as Identity;\n }\n\n get jwt(): string {\n return this.get('jwt');\n }\n\n set jwt(jwt: string) {\n this.set('jwt', jwt);\n }\n\n get correlationId(): Uuid {\n return this.get('correlationId');\n }\n\n set correlationId(id: Uuid) {\n this.set('correlationId', id);\n }\n\n get lastError(): Optional<string> {\n return this.get('lastError');\n }\n\n set lastError(error: Optional<string>) {\n this.set('lastError', error);\n }\n\n public get<T>(key: string): T {\n return this.state[key] as T;\n }\n\n public set<T>(key: string, value: T): T {\n return (this.state[key] = value);\n }\n\n public readonly create = (f: () => void): void => f();\n\n public readonly wrap = <T>(f: () => Promise<T>): Promise<T> => f();\n}\n\n/**\n * @deprecated Renamed to BaseRequestContext\n */\nexport class BaseContext extends BaseRequestContext {}\n\nexport interface Contexts {\n env?: EnvContext;\n request?: RequestContext;\n other?: any;\n}\n\nexport class Context {\n constructor(protected state: Contexts = {}) {\n this.state = {\n ...{\n env: new DotEnvContext(),\n request: new BaseRequestContext(),\n other: {},\n },\n ...this.state,\n };\n }\n\n get env(): EnvContext {\n return this.state.env as EnvContext;\n }\n\n set env(env: EnvContext) {\n this.state.env = env;\n }\n\n get request(): RequestContext {\n return this.state.request as RequestContext;\n }\n\n set request(request: RequestContext) {\n this.state.request = request;\n }\n\n get other(): any {\n return this.state.other;\n }\n}\n\nexport const ctx = new Context();\n","import { isA } from './IsA';\nimport { Text } from './Text';\nimport { ctx } from './Context';\nimport { TypeGuard } from './TypeGuard';\n\nexport type Result = { message: string; location?: string; domain?: string };\n\nexport const toResult = (message: Text, location?: Text, domain: Text = ctx.env.domain): Result => ({\n message: message.toString(),\n location: location?.toString(),\n domain: domain?.toString(),\n});\n\nexport const isResult: TypeGuard<Result> = (r?: unknown): r is Result => isA<Result>(r, 'message');\n","import { Text } from './Text';\nimport { isResult, Result, toResult } from './Result';\nimport { Validatable } from './Validatable';\nimport { isDefined } from './Is';\nimport { toArray } from './Array';\n\nconst parse = (...rs: (Text | Result)[]): Result[] => toArray(...rs).map(r => (isResult(r) ? r : toResult(r)));\n\nexport class Results implements Validatable {\n public readonly results: Result[];\n\n constructor(...rs: (Text | Result)[]) {\n this.results = parse(...rs);\n }\n\n get length(): number {\n return this.results.length;\n }\n\n get isValid(): boolean {\n return this.results.length === 0;\n }\n\n add = (...rs: (Text | Result)[]): Results => toResults(...this.results, ...parse(...rs));\n}\n\nexport const toResults = (...r: (Text | Result)[]): Results => new Results(...r);\n\nexport const isResults = (r?: unknown): r is Results => isDefined(r) && r instanceof Results;\n","import { Validatable } from './Validatable';\nimport { isDefined } from './Is';\nimport { JsonValue } from './Json';\nimport { asString } from './Text';\n\nexport class Value<V = string> implements Validatable {\n constructor(readonly value: V) {\n this.value = value;\n }\n\n get isValid(): boolean {\n return isDefined(this.value);\n }\n\n toJSON(): JsonValue {\n return this.value as unknown as JsonValue;\n }\n\n toString(): string {\n return asString(this.value);\n }\n}\n\nexport const isValue = (v?: unknown): v is Value => v instanceof Value;\n","import { isA } from './IsA';\nimport { TypeGuard } from './TypeGuard';\n\nexport interface Validatable {\n isValid: boolean;\n}\n\nexport const isValidatable: TypeGuard<Validatable> = (v?: unknown): v is Validatable => isA<Validatable>(v, 'isValid');\n","import { Constraint } from './Contraints';\nimport { when } from './When';\nimport type { TemplateOptions } from '../types/Template';\nimport { isResults, Results, toResults } from '../types/Results';\nimport { toName } from '../types/Constructor';\nimport { toResult } from '../types/Result';\nimport { List, toList } from '../types/List';\nimport { meta } from '../types/Meta';\nimport { isArray, isFunction } from '../types/Is';\nimport type { Text } from '../types/Text';\nimport { asString } from '../types/Text';\nimport { choose } from '../types/Case';\nimport { isEnum } from '../types/Enum';\nimport { isValue } from '../types/Value';\nimport { isValidatable } from '../types/Validatable';\nimport { text } from '../types/ToText';\n\nexport type Validator = { property: string | symbol; constraint: Constraint; text: Text; actual?: Text };\n\nexport const asResults = (subject: unknown, template: Text, options: TemplateOptions = {}): Results =>\n toResults(toResult(text(template).parse(subject, options), toName(subject)));\n\nconst validators = (subject: unknown): List<Validator> =>\n meta(subject)\n .keys<List<Validator>>('constraint')\n .reduce((list, vs) => list.add(vs), toList<Validator>());\n\nconst runValidator = (v: Validator, subject?: unknown): Results => {\n try {\n const actual = isFunction((subject as any)[v.property]) ? (subject as any)[v.property]() : (subject as any)[v.property];\n const constraint = v.constraint(actual);\n return isResults(constraint)\n ? constraint\n : !constraint\n ? asResults(subject, v.text, {\n ...v,\n actual,\n })\n : toResults();\n } catch (e) {\n return asResults(subject, asString(e));\n }\n};\n\nconst constraints = (subject?: unknown): Results =>\n validators(subject)\n .map(vs => runValidator(vs, subject))\n .reduce((rs, r) => rs.add(...r.results), toResults());\n\nexport const validate = (subject?: unknown): Results =>\n choose(subject)\n .is.not.defined(\n s => s,\n () => toResults('Subject is not defined.')\n )\n .type(isEnum, e => (e.isValid ? toResults() : asResults(e, 'This is not a valid {type}.')))\n .type(isValue, v => (v.isValid ? toResults() : asResults(v, 'This is not a valid {type}.')))\n .type(isArray, a => a.map(i => validate(i)).reduce((rs, r) => rs.add(...r.results), toResults()))\n .type(isValidatable, v => constraints(v))\n .else(toResults());\n\nexport const validateReject = <T>(subject: T): Promise<T> => when(subject).not.isValid.reject();\n\nexport const isValid = <T>(t: T): boolean => validate(t).isValid;\n","import { isDefined, isEmpty, isTrue } from './Is';\nimport { validate } from '../validation/Validate';\nimport { Construct, Constructor, ofConstruct } from './Constructor';\nimport { Validatable } from './Validatable';\nimport { Get, ofGet } from './Get';\nimport { Func } from './Func';\nimport { Optional } from './Types';\n\nexport abstract class Try<T = unknown> implements Validatable {\n is = {\n defined: (prop?: Func<unknown, T>): Try<T> => this.filter(v => isDefined(prop ? prop(v) : v)),\n empty: (prop?: Func<unknown, T>): Try<T> => this.filter(v => isEmpty(prop ? prop(v) : v)),\n valid: (prop?: Func<unknown, T>): Try<T> => this.filter(v => validate(prop ? prop(v) : v).isValid),\n true: (prop?: Func<unknown, T>): Try<T> => this.filter(v => isTrue(prop ? prop(v) : v)),\n false: (prop?: Func<unknown, T>): Try<T> => this.filter(v => !isTrue(prop ? prop(v) : v)),\n not: {\n defined: (prop?: Func<unknown, T>): Try<T> => this.filter(v => !isDefined(prop ? prop(v) : v)),\n empty: (prop?: Func<unknown, T>): Try<T> => this.filter(v => !isEmpty(prop ? prop(v) : v)),\n valid: (prop?: Func<unknown, T>): Try<T> => this.filter(v => !validate(prop ? prop(v) : v).isValid),\n },\n };\n\n if = this.is;\n\n abstract get value(): T;\n\n abstract get error(): Error;\n\n abstract get isValid(): boolean;\n\n static of = <T>(c: Get<T | Try<T>>, ...args: unknown[]): Try<T> => {\n try {\n const out = ofGet(c, ...args);\n return new Success(out instanceof Try ? out.value : out);\n } catch (e) {\n return new Failure(e as Error);\n }\n };\n\n abstract map<U>(f: Func<U | Try<U>, T>): Try<U>;\n\n abstract recover(f: Func<T | Try<T>, Error>): Try<T>;\n\n abstract recoverFrom(type: Constructor<Error>, f: Func<T | Try<T>, Error>): Try<T>;\n\n abstract accept(f: Func<void, T>): Try<T>;\n\n abstract filter(predicate: Func<boolean, T>): Try<T>;\n\n abstract or(value: Get<T>): T;\n\n abstract orElse(value?: Get<T>): Optional<T>;\n\n abstract orThrow(error: Construct<Error>): T;\n}\n\nclass Success<T> extends Try<T> {\n constructor(readonly value: T) {\n super();\n }\n\n get error(): Error {\n throw new Error('No error found');\n }\n\n get isValid(): boolean {\n return true;\n }\n\n map<U>(f: Func<U | Try<U>, T>): Try<U> {\n return tryTo<U>(f, this.value);\n }\n\n recover(f: Func<T | Try<T>, Error>): Try<T> {\n return this;\n }\n\n recoverFrom(type: Constructor<Error>, f: Func<T | Try<T>, Error>): Try<T> {\n return this;\n }\n\n accept(f: Func<void, T>): Try<T> {\n return tryTo(() => {\n f(this.value);\n return this;\n });\n }\n\n filter(predicate: Func<boolean, T>): Try<T> {\n return tryTo(() => {\n if (predicate(this.value)) return this;\n throw new Error(`Applying filter(${predicate.toString()}) failed.`);\n });\n }\n\n or(value: Get<T>): T {\n return this.value;\n }\n\n orElse(value?: Get<T>): Optional<T> {\n return this.value;\n }\n\n orThrow(_error: Construct<Error>): T {\n return this.value;\n }\n}\n\nclass Failure<T> extends Try<T> {\n constructor(readonly error: Error) {\n super();\n }\n\n get value(): T {\n throw this.error;\n }\n\n get isValid(): boolean {\n return false;\n }\n\n map<U>(f: Func<U | Try<U>, T>): Try<U> {\n return new Failure<U>(this.error);\n }\n\n recover<U>(f: Func<U | Try<U>, Error>): Try<U> {\n return tryTo<U>(f, this.error);\n }\n\n recoverFrom<U>(type: Constructor<Error>, f: Func<T | Try<T>, Error>): Try<T> {\n return tryTo(() => (this.error instanceof type ? this.recover(f) : this));\n }\n\n accept(f: Func<void, T>): Try<T> {\n return this;\n }\n\n filter(predicate: Func<boolean, T>): Try<T> {\n return this;\n }\n\n or(value: Get<T>): T {\n return ofGet(value);\n }\n\n orElse(value?: Get<T>): Optional<T> {\n return ofGet(value);\n }\n\n orThrow(error: Construct<Error>): T {\n throw ofConstruct(error);\n }\n}\n\nexport const tryTo = <T>(c: Get<T | Try<T>>, ...args: unknown[]) => Try.of<T>(c, ...args);\n","import { Get, ofGet, Predicate } from './Get';\nimport { TypeGuard } from './TypeGuard';\nimport { Func } from './Func';\nimport { isDefined, isEmpty } from './Is';\nimport { validate } from '../validation/Validate';\nimport { tryTo } from './Try';\n\nclass CaseBuilder<V> {\n is = {\n defined: <T>(prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.v).case(isDefined(prop(this.v)), out),\n empty: <T>(prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.v).case(isEmpty(prop(this.v)), out),\n valid: <T>(prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.v).case(validate(prop(this.v)).isValid, out),\n in: <T>(prop: Get<Array<V>, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.v).case(ofGet(prop, this.v).includes(this.v), out),\n not: {\n defined: <T>(prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.v).case(!isDefined(prop(this.v)), out),\n empty: <T>(prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.v).case(!isEmpty(prop(this.v)), out),\n valid: <T>(prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.v).case(!validate(prop(this.v)).isValid, out),\n in: <T>(prop: Get<Array<V>, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.v).case(!ofGet(prop, this.v).includes(this.v), out),\n },\n };\n if = this.is;\n\n constructor(readonly v: V) {}\n\n case<T>(pred: Predicate<V>, out: Get<T, V>): Case<T, V> {\n return new Case<T, V>(this.v).case(pred, out);\n }\n\n type<T, U = unknown>(guard: TypeGuard<U>, out: Func<T, U>): Case<T, V> {\n return new Case<T, V>(this.v).type<U>(guard, out);\n }\n\n equals<T>(value: V, out: Get<T, V>): Case<T, V> {\n return new Case<T, V>(this.v).equals(value, out);\n }\n}\n\nclass Case<T, V = unknown> {\n is = {\n defined: (prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.value).case(isDefined(prop(this.value)), out),\n empty: (prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.value).case(isEmpty(prop(this.value)), out),\n valid: (prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.value).case(validate(prop(this.value)).isValid, out),\n in: (prop: Get<Array<V>, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.value).case(ofGet(prop, this.value).includes(this.value), out),\n not: {\n defined: (prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.value).case(!isDefined(prop(this.value)), out),\n empty: (prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.value).case(!isEmpty(prop(this.value)), out),\n valid: (prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.value).case(!validate(prop(this.value)).isValid, out),\n in: (prop: Get<Array<V>, V>, out: Get<T, V>): Case<T, V> => new Case<T, V>(this.value).case(!ofGet(prop, this.value).includes(this.value), out),\n },\n };\n if = this.is;\n\n constructor(\n protected value: V,\n protected outcome?: T\n ) {}\n\n case(pred: Predicate<V>, out: Get<T, V>): Case<T, V> {\n return tryTo(pred, this.value)\n .is.true()\n .map(() => ofGet(out, this.value))\n .map(res => new Found(this.value, res) as Case<T, V>)\n .or(this);\n }\n\n type<U>(guard: TypeGuard<U>, out: Func<T, U>): Case<T, V> {\n return tryTo(guard, this.value)\n .is.true()\n .map(() => out(this.value as unknown as U))\n .map(res => new Found(this.value, res) as Case<T, V>)\n .or(this);\n }\n\n equals(value: V, out: Get<T, V>): Case<T, V> {\n return this.case(this.value === value, out);\n }\n\n else(alt: Get<T, V>): T {\n return ofGet<T, V>(alt, this.value);\n }\n}\n\nclass Found<T, V> extends Case<T, V> {\n is = {\n defined: (_prop: Func<unknown, V>, _out: Get<T, V>): Case<T, V> => this,\n empty: (_prop: Func<unknown, V>, _out: Get<T, V>): Case<T, V> => this,\n valid: (_prop: Func<unknown, V>, _out: Get<T, V>): Case<T, V> => this,\n in: (_prop: Get<Array<V>, V>, _out: Get<T, V>): Case<T, V> => this,\n not: {\n defined: (_prop: Func<unknown, V>, _out: Get<T, V>): Case<T, V> => this,\n empty: (_prop: Func<unknown, V>, _out: Get<T, V>): Case<T, V> => this,\n valid: (_prop: Func<unknown, V>, _out: Get<T, V>): Case<T, V> => this,\n in: (_prop: Get<unknown, V>, _out: Get<T, V>): Case<T, V> => this,\n },\n };\n if = this.is;\n\n constructor(\n protected value: V,\n protected outcome: T\n ) {\n super(value, outcome);\n }\n\n case(pred: Predicate<V>, out: Get<T, V>): this {\n return this;\n }\n\n type<U>(guard: TypeGuard<U>, out: Func<T, U>): Case<T, V> {\n return this;\n }\n\n equals(value: V, out: Get<T, V>): Case<T, V> {\n return this;\n }\n\n else(alt: Get<T, V>): T {\n return this.outcome;\n }\n}\n\nexport const choose = <V>(value: V) => new CaseBuilder<V>(value);\n","import { isList, List, toList } from './List';\nimport { Construct, ofConstruct } from './Constructor';\nimport { isA } from './IsA';\nimport { PlainSort, Sort } from './Sort';\nimport { GetProperty } from './Get';\nimport { ArrayLike } from './Array';\nimport { Optional } from './Types';\nimport { isNumber } from './Is';\nimport { choose } from './Case';\nimport type { Id } from './Id';\n\nexport type FilterValue = { label?: string; value: any; count?: number };\nexport type Filter = { label?: string; field: string; shortField?: string; values: FilterValue[] };\n\nexport const toFilter = (field: string, value: any): Filter => toShortFilter(field, field, value);\nexport const toShortFilter = (field: string, shortField: string, value: any): Filter => ({\n field,\n shortField,\n values: [{ value }],\n});\n\nexport type PageOptions = { take?: number; skip?: number; sort?: Sort[]; sorts?: PlainSort; filters?: Filter[] };\nexport type PageListOptions = Exclude<PageOptions, 'sort'> & { total?: number };\n\nexport class PageList<T = unknown> extends List<T> {\n private _options?: PageListOptions;\n\n get options(): Optional<PageListOptions> {\n return this._options;\n }\n\n get take(): number {\n return this._options?.take ?? 250;\n }\n\n get skip(): number {\n return this._options?.skip ?? 0;\n }\n\n get total(): Optional<number> {\n return this._options?.total;\n }\n\n get sorts(): Optional<PlainSort> {\n return this._options?.sorts;\n }\n\n get filters(): Optional<Filter[]> {\n return this._options?.filters;\n }\n\n get meta(): PageListOptions {\n return {\n take: this.take,\n skip: this.skip,\n total: this.total,\n sorts: this.sorts,\n filters: this.filters,\n };\n }\n\n get ids(): PageList<Id> {\n return this.mapDefined(i => (i as any).id as Id);\n }\n\n asc(p: GetProperty<T, any>): PageList<T> {\n return toPageList(super.asc(p), this);\n }\n\n desc(p: GetProperty<T, any>): PageList<T> {\n return toPageList(super.desc(p), this);\n }\n\n diff(others: ArrayLike<T>): PageList<T> {\n return toPageList(super.diff(others), this);\n }\n\n diffByKey<U = T>(others: ArrayLike<U>, key: keyof T & keyof U): PageList<T> {\n return toPageList(super.diffByKey(others, key), this);\n }\n\n symmetricDiff(others: ArrayLike<T>): PageList<T> {\n return toPageList(super.symmetricDiff(others), this);\n }\n\n symmetricDiffByKey(others: ArrayLike<T>, key: keyof T): PageList<T> {\n return toPageList(super.symmetricDiffByKey(others, key), this);\n }\n\n intersect(others: ArrayLike<T>): PageList<T> {\n return toPageList(super.intersect(others), this);\n }\n\n intersectByKey<U>(others: ArrayLike<U>, key: keyof T & keyof U): PageList<T> {\n return toPageList(super.intersectByKey(others, key), this);\n }\n\n map<U>(f: (value: T, index: number, array: T[]) => U, params?: unknown): PageList<U> {\n const items = super.map(f, params);\n return toPageList(items, this);\n }\n\n flatMap<U, This = unknown>(f: (this: This, value: T, index: number, array: T[]) => ReadonlyArray<U> | U, params?: This): PageList<U> {\n return toPageList(super.flatMap(f, params), this);\n }\n\n mapDefined<U>(f: (value: T, index: number, array: T[]) => U, params?: unknown): PageList<NonNullable<U>> {\n return toPageList(super.mapDefined(f, params), this);\n }\n\n mapAsync(f: (i: T) => Promise<T>): Promise<PageList<T>> {\n return super.mapAsync(f).then(r => toPageList(r, this));\n }\n\n areEqual(...items: ArrayLike<T>): boolean {\n return this.isSubSetOf(...items) && toList(...items).isSubSetOf(...this);\n }\n\n distinct(): PageList<T> {\n return toPageList(super.distinct(), this);\n }\n\n distinctByKey(key: keyof T): PageList<T> {\n return toPageList(super.distinctByKey(key), this);\n }\n\n distinctByValue(): PageList<T> {\n return toPageList(super.distinctByValue(), this);\n }\n\n filter(p: (value: T, index: number, array: T[]) => unknown, params?: unknown): PageList<T> {\n return toPageList(super.filter(p, params), this);\n }\n\n accumulate(...keys: (keyof T)[]): PageList<T> {\n return toPageList(super.accumulate(...keys), this);\n }\n\n concat(...items: ConcatArray<T>[]): PageList<T>;\n\n concat(...items: (T | ConcatArray<T>)[]): PageList<T>;\n\n concat(...items: (T | ConcatArray<T>)[]): PageList<T> {\n return toPageList(super.concat(...items), this);\n }\n\n reverse(): PageList<T> {\n return toPageList(super.reverse(), this);\n }\n\n splice(start: number, deleteCount?: number): PageList<T>;\n\n splice(start: number, deleteCount: number, ...items: T[]): PageList<T>;\n\n splice(start: number, deleteCount: number, ...items: T[]): PageList<T> {\n return toPageList(super.splice(start, deleteCount, ...items), this);\n }\n\n remove(item: T): PageList<T> {\n return toPageList(super.remove(item), this);\n }\n\n replace(key: keyof T, item: T): PageList<T> {\n return toPageList(super.replace(key, item), this);\n }\n\n switch(item: T): PageList<T> {\n return toPageList(super.switch(item), this);\n }\n\n defined(): PageList<NonNullable<T>> {\n return toPageList(super.defined(), this);\n }\n\n orElse(...alt: ArrayLike<T>): Optional<PageList<T>> {\n return toPageList(super.orElse(...alt), this);\n }\n\n slice(start?: number, end?: number): PageList<T> {\n return toPageList(super.slice(start, end), this);\n }\n\n //we needed to add U because of a Typescript issue with generics\n update<U = T>(p: (value: T, index: number, array: T[]) => unknown, val: T | ((v: U) => T)): PageList<T> {\n return toPageList(super.update(p, val), this);\n }\n\n updateFirst<U = T>(p: (value: T, index: number, array: T[]) => unknown, val: T | ((v: U) => T)): PageList<T> {\n return toPageList(super.updateFirst(p, val), this);\n }\n\n updateFirstById<U = T>(id: Id, val: T | ((v: U) => T)): PageList<T> {\n return toPageList(super.updateFirstById(id, val), this);\n }\n\n updateById<U = T>(id: Id, val: T | ((v: U) => T)): PageList<T> {\n return toPageList(super.updateById(id, val), this);\n }\n\n private setPageOptions(options?: PageListOptions): this {\n this._options = options;\n return this;\n }\n}\n\nexport const isPageList = <T>(l?: unknown): l is PageList<T> => isList<T>(l) && isA(l, 'total');\n\nexport const toPageList = <T>(items: T[] = [], options?: PageListOptions | PageList): PageList<T> => {\n return (\n choose(items)\n .case(\n i => i.length === 1 && isNumber(i[0]),\n i => new PageList<T>().add(...i)\n )\n .else(i => new PageList<T>(...i)) as any\n ).setPageOptions(isPageList(options) ? options.options : options);\n};\n\n/* @deprecated No longer needed as the PageList is now a class that extends from List, use the map function */\nexport const asPageList = <T, U>(c: Construct<T>, items = toPageList<U>()): PageList<T> => items.map(i => ofConstruct(c, i));\n","import { FetchOptions, Gateway } from '../types/Gateway';\nimport { PageList, toPageList } from '../types/PageList';\nimport { Json, JsonValue } from '../types/Json';\nimport { Id } from '../types/Id';\nimport { Optional } from '../types/Types';\nimport { isDefined } from '../types/Is';\nimport { when } from '../validation/When';\nimport { Exception } from '../types/Exception';\n\nexport class InMemoryGateway extends Gateway {\n constructor(private readonly data: Promise<PageList<Json>>) {\n super();\n }\n\n all(options?: FetchOptions): Promise<PageList<Json>> {\n return this.data.then(d => toPageList(d, d));\n }\n\n byId(id: Id): Promise<Optional<Json>> {\n return this.data.then(d => d.byId(id)).then(d => (d ? { ...d } : undefined));\n }\n\n by = (key: string, value: JsonValue): Promise<PageList<Json>> => {\n return this.data.then(d => d.filter(i => i[key] === value));\n };\n\n exists(id: Id): Promise<boolean> {\n return this.byId(id).then(d => isDefined(d));\n }\n\n add(item: Json): Promise<Json> {\n return when(item)\n .not.contains(i => i.id)\n .reject(Exception.IsMissingId)\n .then(i => this.exists(i.id as Id))\n .then(ex => when(ex).isTrue.reject(Exception.AlreadyExists))\n .then(() => this.data.then(d => d.add(item)))\n .then(() => ({ ...item }));\n }\n\n remove(id: Id): Promise<true> {\n return this.data\n .then(d =>\n when(d.findIndex(i => i.id === id))\n .with(i => i < 0)\n .reject(Exception.DoesNotExist)\n .then(i => d.splice(i, 1))\n )\n .then(() => true);\n }\n\n update(item: Json): Promise<Json> {\n return when(item)\n .not.contains(i => i.id)\n .reject(Exception.IsMissingId)\n .then(i => this.remove(i.id as Id).then(() => this.add(i)));\n }\n}\n","import { DataProvider } from './DataProvider';\nimport { Enum } from '../types/Enum';\nimport { Constructor, ofConstruct } from '../types/Constructor';\n\nexport type DatabaseOptions = {\n user?: string;\n password?: string;\n host?: string;\n port?: number;\n cluster?: string;\n connectionString?: string;\n maxPoolSize?: number;\n minPoolSize?: number;\n maxIdleTimeMS?: number;\n socketTimeoutMS?: number;\n // Query specific options\n queryTimeoutMS?: number;\n};\n\nexport class DefaultProvider implements DataProvider {}\n\nexport class Database extends Enum {\n static readonly Default = new Database('Default', DefaultProvider);\n\n constructor(\n name: string,\n readonly provider: Constructor<DataProvider> | DataProvider,\n readonly options?: DatabaseOptions\n ) {\n super(name);\n }\n\n provide = <P>(): P => ofConstruct(this.provider, this);\n}\n","import { convert, Convert } from './Convert';\nimport { Mapping } from './Mapper';\nimport { Get, ofGet } from '../types/Get';\nimport { Json, JsonValue } from '../types/Json';\n\nexport type PropertyOptions<T = unknown> = {\n convert?: Convert<any, any>;\n dflt?: Get<T>;\n format?: string;\n};\n\nexport class Property<T = unknown> implements Mapping {\n constructor(\n readonly property: string,\n readonly options?: PropertyOptions\n ) {\n this.options = { ...options, convert: options?.convert ?? convert.default };\n }\n\n in = (source: Json = {}): JsonValue => this.options?.convert?.to(source[this.property] ?? ofGet(this.options?.dflt));\n out = (source: Json = {}, key = ''): JsonValue => this.options?.convert?.from(source[key]);\n\n toString() {\n return this.property;\n }\n}\n","import { Condition, SortCondition, toCondition } from './Condition';\nimport { Property } from '../utils/Property';\nimport { toArray } from '../types/Array';\nimport { isDefined } from '../types/Is';\n\nexport class Field extends Property {\n is = (value: unknown): Condition => this.condition('eq', value);\n\n isNot = (value: unknown): Condition => this.condition('ne', value);\n\n isIn = (...value: unknown[]): Condition => this.condition('in', toArray(value));\n\n notIn = (...value: unknown[]): Condition => this.condition('nin', toArray(value));\n\n exists = (does: boolean): Condition => this.condition('exists', does);\n\n greater = (value: unknown): Condition => this.condition('gt', value);\n\n greaterEqual = (value: unknown): Condition => this.condition('gte', value);\n\n less = (value: unknown): Condition => this.condition('lt', value);\n\n lessEqual = (value: unknown): Condition => this.condition('lte', value);\n\n asc = (): SortCondition => new SortCondition(this.property, 1);\n\n desc = (): SortCondition => new SortCondition(this.property, -1);\n\n protected condition = (operator: string, value: unknown): Condition => toCondition(this.property, operator, value, this.options?.convert);\n}\n\nexport const isField = (f?: unknown): f is Field => isDefined(f) && f instanceof Field;\n","import { Validatable } from '../types/Validatable';\nimport { validate } from '../validation/Validate';\nimport { json, Json } from '../types/Json';\nimport { isDefined } from '../types/Is';\n\nexport abstract class Struct implements Validatable {\n constructor(protected readonly state: any = {}) {}\n\n get isValid(): boolean {\n return validate(this).isValid;\n }\n\n toJSON(): Json {\n return json.delete(json.parse({ ...this }), 'state');\n }\n\n toString(): string {\n return this.constructor.name;\n }\n\n update(_add: Json): Struct {\n return this;\n }\n\n protected merge(a: unknown): Json {\n return json.merge(this, a);\n }\n}\n\nexport function isStruct(s?: unknown): s is Struct {\n return isDefined(s) && s instanceof Struct;\n}\n","import { DateTime as LuxonDateTime, DateTimeUnit as LuxonDateTimeUnit, DurationUnit as LuxonDurationUnit, Settings } from 'luxon';\nimport { Value } from '../types/Value';\nimport { Optional } from '../types/Types';\nimport { choose } from '../types/Case';\nimport { isDefined, isNumber, isString } from '../types/Is';\nimport { isDate } from '../types/IsDate';\nimport { isA } from '../types/IsA';\nimport { ifDefined } from '../utils/If';\nimport { JsonValue } from '../types/Json';\nimport { seconds } from '../utils/Seconds';\nimport { tryTo } from '../types/Try';\nimport { use } from '../types/Constructor';\n\nSettings.defaultZone = 'utc';\n\nexport type DateTimeUnit = LuxonDateTimeUnit;\nexport type DurationUnit = LuxonDurationUnit;\nexport type Duration = Partial<Record<DurationUnit, number>>;\n\nexport type DiffOptions = {\n rounding: 'floor' | 'ceil' | 'round';\n};\n\nexport type DatetimeInput = string | number | Date | DateTime | null;\n\nexport class DateTime extends Value<Optional<string>> {\n protected readonly luxon: LuxonDateTime;\n\n constructor(value?: DatetimeInput);\n constructor(value?: string, format?: string);\n constructor(value?: DatetimeInput, format?: string) {\n const luxon = choose(value)\n .type(isString, v => (format ? LuxonDateTime.fromFormat(v, format, { setZone: true }) : LuxonDateTime.fromISO(v, { setZone: true })))\n .type(isNumber, v => LuxonDateTime.fromMillis(v))\n .type(isDate, v => LuxonDateTime.fromJSDate(v))\n .type(isDateTime, v => v.luxon)\n // Allow constructing with LuxonDateTime without exposing types\n .else(value instanceof LuxonDateTime ? value : LuxonDateTime.fromISO(undefined as any));\n\n super(luxon.toISO() ?? undefined);\n this.luxon = luxon;\n }\n\n static get now(): DateTime {\n return new DateTime(LuxonDateTime.utc() as any);\n }\n\n get isValid(): boolean {\n return isDefined(this.value) && this.utc.isValid;\n }\n\n /**\n * @deprecated Deprecated in favor for DateTime.from as that also accepts locales and another DateTime\n */\n get fromNow(): string {\n return this.from();\n }\n\n get inAmsterdam(): DateTime {\n return this.withZone('Europe/Amsterdam');\n }\n\n get inNewYork(): DateTime {\n return this.withZone('America/New_York');\n }\n\n get inLondon(): DateTime {\n return this.withZone('Europe/London');\n }\n\n get inWarsaw(): DateTime {\n return this.withZone('Europe/Warsaw');\n }\n\n protected get utc(): LuxonDateTime {\n return this.luxon.setZone('utc');\n }\n\n from(locale?: string): string;\n\n from(date?: DateTime, locale?: string): string;\n\n from(dateOrLocale?: string | DateTime, maybeLocale?: string): string {\n return (\n use((isString(dateOrLocale) ? dateOrLocale : maybeLocale) ?? 'en', locale =>\n ifDefined(\n isA<DateTime>(dateOrLocale) ? dateOrLocale : undefined,\n d => this.utc.setLocale(locale).toRelative({ base: d.utc }),\n () => this.utc.setLocale(locale).toRelative()\n )\n ) ?? ''\n );\n }\n\n isAfter(dt: DateTime): boolean {\n return this.utc > dt.utc;\n }\n\n isBefore(dt: DateTime): boolean {\n return this.utc < dt.utc;\n }\n\n equals(dt: DateTime): boolean {\n return this.utc.hasSame(dt.utc, 'millisecond');\n }\n\n add(n: number, unit?: DurationUnit): DateTime;\n\n add(duration: Duration): DateTime;\n\n add(n: number | Duration, unit: DurationUnit = 'day'): DateTime {\n return new DateTime(this.luxon.plus(isNumber(n) ? { [unit]: n } : n) as any);\n }\n\n subtract(n: number, unit?: DurationUnit): DateTime;\n\n subtract(duration: Duration): DateTime;\n\n subtract(n: number | Duration, unit: DurationUnit = 'day'): DateTime {\n return new DateTime(this.luxon.minus(isNumber(n) ? { [unit]: n } : n) as any);\n }\n\n diff(other: DateTime, unit: DateTimeUnit = 'day', opts?: DiffOptions): number {\n return Math[opts?.rounding ?? 'floor'](this.utc.diff(other.utc).as(unit));\n }\n\n startOf(unit: DateTimeUnit = 'day'): DateTime {\n return new DateTime(this.luxon.startOf(unit) as any);\n }\n\n endOf(unit: DateTimeUnit = 'day'): DateTime {\n return new DateTime(this.luxon.endOf(unit) as any);\n }\n\n isWeekend(): boolean {\n return this.luxon.isWeekend;\n }\n\n withZone(zone: string): DateTime {\n return new DateTime(this.luxon.setZone(zone) as any);\n }\n\n toString(): string {\n return this.value ?? '';\n }\n\n toJSON(): JsonValue {\n return this.utc.toISO();\n }\n\n toFormat(format: string): string {\n return this.luxon.toFormat(format);\n }\n\n toLocale(locale = 'nl-NL', format = 'D'): string {\n return this.luxon.setLocale(locale).toFormat(format);\n }\n\n toFull(locale?: string): string {\n return this.toLocale(locale, 'DDD');\n }\n\n toDate(): Optional<Date> {\n return this.isValid ? this.utc.toJSDate() : undefined;\n }\n\n toEpoch(): number {\n return this.luxon.toMillis();\n }\n\n ago(end: DateTime = DateTime.now): string {\n return seconds.toText(end.diff(this, 'second'));\n }\n\n withClock(clock: DateTime): DateTime {\n return tryTo(() => [this.toDate() as Date, clock.toDate() as Date])\n .map(([td, cd]) => new Date(td.getFullYear(), td.getMonth(), td.getDate(), cd.getHours(), cd.getMinutes(), cd.getSeconds()))\n .map(d => new DateTime(d)).value;\n }\n}\n\nexport const isDateTime = (dt?: unknown): dt is DateTime => isDefined(dt) && dt instanceof DateTime;\n\nexport const dt = (dt?: DatetimeInput): DateTime => new DateTime(dt);\n","export const isDate = (o?: unknown): o is Date => o instanceof Date && !isNaN(o.getTime());\n\nexport const days = {\n add: (date: Date, days: number): Date => {\n date.setDate(date.getDate() + days);\n return date;\n },\n today: (): Date => new Date(),\n yesterday: (): Date => days.add(days.today(), -1),\n tomorrow: (): Date => days.add(days.today(), 1),\n};\n\nexport const inPast = (o?: unknown): boolean => isDate(o) && o <= days.today();\n\nexport const inFuture = (o?: unknown): boolean => isDate(o) && o > days.today();\n","import { ifTrue } from './If';\nimport { toList } from '../types/List';\n\nexport const seconds = {\n toDuration: (s: number) => {\n const seconds = s % 60;\n const minutes = Math.floor(s / 60) % 60;\n const hours = Math.floor(s / 3600) % 24;\n const days = Math.floor(s / 86400);\n return { days, hours, minutes, seconds };\n },\n\n toText: (s: number): string => {\n const { days, hours, minutes, seconds: secs } = seconds.toDuration(s);\n return toList(ifTrue(days, `${days}d`), ifTrue(hours, `${hours}h`), ifTrue(minutes, `${minutes}m`), ifTrue(days + hours + minutes === 0, `${secs}s`))\n .mapDefined(s => s)\n .join(' ');\n },\n};\n","import { validate, Validator } from './Validate';\nimport { Func } from '../types/Func';\nimport { Results } from '../types/Results';\nimport { meta } from '../types/Meta';\nimport { List, toList } from '../types/List';\nimport { isBoolean, isDefined, isFunction, isIn, isNotEmpty, isString } from '../types/Is';\nimport { tryTo } from '../types/Try';\nimport { inFuture, inPast } from '../types/IsDate';\nimport type { Text } from '../types/Text';\nimport { text } from '../types/ToText';\n\nexport type Constraint = Func<boolean | Results, any>;\n\nexport const constraint =\n <T>(c: Constraint, message: Text): PropertyDecorator =>\n (subject: unknown, property: string | symbol): void => {\n const cs = meta(subject).property(property).get<List<Validator>>('constraint') ?? toList<Validator>();\n meta(subject)\n .property(property)\n .set('constraint', cs.add({ property, constraint: c, text: message }));\n };\n\nexport const defined = (message?: Text): PropertyDecorator => constraint(v => isDefined(v), message ?? 'Property {property} must be defined.');\n\nexport const required = (message?: Text): PropertyDecorator =>\n constraint(v => isNotEmpty(v), message ?? 'Property {property} is required, and may not be empty.');\n\nexport const notEmpty = (message?: Text): PropertyDecorator => constraint(v => isNotEmpty(v), message ?? 'Property {property} may not be empty.');\n\nexport const valid = (): PropertyDecorator => constraint(v => validate(v), '');\n\nexport const optional = (): PropertyDecorator => constraint(v => !isDefined(v) || validate(v), '');\n\nexport const includes = (sub: string, message?: string): PropertyDecorator =>\n constraint(s => isDefined(s) && isString(s) && s.includes(sub), message ?? `Value {actual} must include '${sub}'.`);\n\nexport const inList = (values: unknown[], message?: Text): PropertyDecorator =>\n constraint(v => isDefined(v) && isIn(v, values), message ?? 'Value {actual} must appear in list.');\n\nexport const inOptionalList = (values: unknown[], message?: Text): PropertyDecorator =>\n constraint(v => !isDefined(v) || isIn(v, values), message ?? 'Value {actual} must appear in list.');\n\nexport const gt = (limit: number, message?: Text): PropertyDecorator => constraint(v => v > limit, message ?? `Value {actual} must be larger than '${limit}'.`);\n\nexport const gte = (limit: number, message?: Text): PropertyDecorator =>\n constraint(v => v >= limit, message ?? `Value {actual} must be larger than or equal to ${limit}.`);\n\nexport const lt = (limit: number, message?: Text): PropertyDecorator => constraint(v => v < limit, message ?? `Value {actual} must be smaller than ${limit}.`);\n\nexport const lte = (limit: number, message?: Text): PropertyDecorator =>\n constraint(v => v <= limit, message ?? `Value {actual} must be smaller than or equal to ${limit}.`);\n\nexport const past = (message?: Text): PropertyDecorator => constraint(v => inPast(v), message ?? 'Value {actual} must lay in the past.');\n\nexport const future = (message?: Text): PropertyDecorator => constraint(v => inFuture(v), message ?? 'Value {actual} must lay in the future.');\n\nexport const minLength = (length: number, message?: Text): PropertyDecorator =>\n constraint(\n v =>\n tryTo(() => v)\n .is.defined()\n .map(v => text(v).toString().length >= length)\n .orElse(true) as boolean,\n message ?? `Value {actual} must be at least '${length}' characters long.`\n );\n\nexport const maxLength = (length: number, message?: Text): PropertyDecorator =>\n constraint(\n v =>\n tryTo(() => v)\n .is.defined()\n .map(v => text(v).toString().length <= length)\n .orElse(true) as boolean,\n message ?? `Value {actual} cannot be longer than '${length}' characters.`\n );\n\nexport const rule = (message?: Text): PropertyDecorator =>\n constraint(v => (isFunction(v) ? (v() as boolean | Results) : isBoolean(v) ? v : false), message ?? `Value {actual} must be true`);\n","import { Struct } from './Struct';\nimport { DateTime } from './DateTime';\nimport { required, valid } from '../validation/Contraints';\nimport { Identity } from '../types/Identity';\nimport { Json } from '../types/Json';\nimport { choose } from '../types/Case';\nimport { isIdentity } from '../types/IsA';\nimport { ctx } from '../types/Context';\n\nexport class Audit extends Struct {\n @required() readonly by: Identity = { id: this.state.by?.id, user: this.state.by?.user };\n @valid() readonly when: DateTime = new DateTime(this.state.when);\n\n constructor(json?: Json) {\n super(\n choose(json)\n .is.defined(\n j => j,\n j => j\n )\n .else({\n by: isIdentity(ctx.request?.identity) ? ctx.request?.identity : { id: 0, user: 'easy' },\n when: DateTime.now.toJSON(),\n })\n );\n }\n}\n","import { v4 as uuid } from 'uuid';\nimport { isString } from './Is';\nimport { asString } from './Text';\n\nexport type Uuid = string;\nexport const toUuid = (): Uuid => uuid();\n\nconst isValidUuid = new RegExp(/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i);\nexport const isUuid = (id?: unknown): id is Uuid => isString(id) && isValidUuid.test(id);\n\nconst includeUuid = new RegExp(/\\b[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\\b/i);\nexport const includesUuid = (value?: unknown): boolean => includeUuid.test(asString(value));\n","import { toUuid } from './Uuid';\n\nexport type Id = string | number;\nexport type Key = Id;\nexport type Code = Id;\nexport type HasId = { id: Id };\n\nexport const toId = (): Id => toUuid();\n","import { Struct } from './Struct';\nimport { required } from '../validation/Contraints';\nimport { Id, toId } from '../types/Id';\nimport { json, Json } from '../types/Json';\n\nexport abstract class Child extends Struct {\n @required() readonly id: Id = this.state.id ?? toId();\n\n protected merge(a: unknown): Json {\n return json.merge(this, a, { id: this.id });\n }\n}\n","import { Struct } from './Struct';\nimport { Audit } from './Audit';\nimport { required } from '../validation/Contraints';\nimport { Id, toId } from '../types/Id';\nimport { json, Json } from '../types/Json';\n\nexport abstract class Entity extends Struct {\n @required() readonly id: Id = this.state.id ?? toId();\n @required() readonly created: Audit = new Audit(this.state.created);\n @required() readonly lastModified: Audit = new Audit(this.state.lastModified);\n\n protected merge(a: unknown): Json {\n return json.merge(this, a, {\n id: this.id,\n created: this.created,\n lastModified: new Audit(),\n });\n }\n}\n","import { FetchOptions } from './Gateway';\nimport { PageList } from './PageList';\nimport { Exception } from './Exception';\nimport { reject } from '../utils/Promise';\nimport { Id, Key } from './Id';\nimport { List } from './List';\nimport { Json, JsonValue } from './Json';\n\nexport class Repository<T, Options = FetchOptions> {\n all(options?: Options): Promise<PageList<T>> {\n return reject(Exception.IsNotImplemented);\n }\n\n byId(id: Id): Promise<T> {\n return reject(Exception.IsNotImplemented);\n }\n\n byIds(...ids: Id[]): Promise<List<T>> {\n return reject(Exception.IsNotImplemented);\n }\n\n byKey(key: Key, options?: Options): Promise<PageList<T>> {\n return reject(Exception.IsNotImplemented);\n }\n\n by(key: keyof T, value: JsonValue, options?: Options): Promise<PageList<T>> {\n return reject(Exception.IsNotImplemented);\n }\n\n search(q: JsonValue, options?: Options): Promise<PageList<T>> {\n return reject(Exception.IsNotImplemented);\n }\n\n filter(options?: Options): Promise<PageList<T>> {\n return reject(Exception.IsNotImplemented);\n }\n\n exists(id: Id): Promise<boolean> {\n return reject(Exception.IsNotImplemented);\n }\n\n add(t: Partial<T> | Json): Promise<T> {\n return reject(Exception.IsNotImplemented);\n }\n\n update(id: Id, json: Partial<T> | Json): Promise<T> {\n return reject(Exception.IsNotImplemented);\n }\n\n remove(id: Id): Promise<boolean> {\n return reject(Exception.IsNotImplemented);\n }\n\n upsert(id: Id, item: Partial<T> | Json): Promise<T> {\n return reject(Exception.IsNotImplemented);\n }\n}\n","import { Struct } from './Struct';\nimport { FetchOptions, Gateway } from '../types/Gateway';\nimport { Repository } from '../types/Repository';\nimport { Constructor } from '../types/Constructor';\nimport { Json, JsonValue, toJson } from '../types/Json';\nimport { isValidatable } from '../types/Validatable';\nimport { PageList } from '../types/PageList';\nimport { Id, Key } from '../types/Id';\nimport { when } from '../validation/When';\nimport { Exception } from '../types/Exception';\nimport { asList, List } from '../types/List';\nimport { reject, resolve } from '../utils/Promise';\n\nexport type RepoAction = 'add' | 'update' | 'remove';\n\nexport class Repo<T extends Struct, Options = FetchOptions> extends Repository<T, Options> {\n constructor(\n protected ctor: Constructor<T>,\n private readonly gateway: Gateway<Options>\n ) {\n super();\n }\n\n create = (item: T | Json): T => (isValidatable(item) ? item : new this.ctor(item));\n\n all(options?: Options): Promise<PageList<T>> {\n return this.gateway.all(options).then(js => js.map(i => new this.ctor(i)));\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 => new this.ctor(j));\n }\n\n byIds(...ids: Id[]): Promise<List<T>> {\n return this.gateway.byIds(...ids).then(j => asList(this.ctor, j));\n }\n\n byKey(key: Key, options?: Options): Promise<PageList<T>> {\n return this.gateway.by('key', key, options).then(js => js.map(i => new this.ctor(i)));\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(i => new this.ctor(i)));\n }\n\n search(q: JsonValue, options?: Options): Promise<PageList<T>> {\n return this.gateway.search(q, options).then(js => js.map(i => new this.ctor(i)));\n }\n\n filter(options?: Options): Promise<PageList<T>> {\n return this.gateway.filter(options).then(js => js.map(i => new this.ctor(i)));\n }\n\n exists(id: Id): Promise<boolean> {\n return this.gateway.exists(id);\n }\n\n add(t: T | Json): Promise<T> {\n return this.extend(this.create(t), 'add')\n .then(i => when(i).not.isValid.reject())\n .then(i => this.validate(i, 'add'))\n .then(i => this.gateway.add(toJson(i)))\n .then(j => new this.ctor(j));\n }\n\n update(id: Id, json: Json): Promise<T> {\n return this.gateway\n .byId(id)\n .then(j => when(j).not.isDefined.reject(Exception.DoesNotExist))\n .then(j => new this.ctor(j).update(json) as T)\n .then(i => this.extend(i, 'update'))\n .then(i => when(i).not.isValid.reject())\n .then(i => this.validate(i, 'update'))\n .then(i => this.gateway.update(toJson(i)))\n .then(j => new this.ctor(j));\n }\n\n remove(id: Id): Promise<boolean> {\n return this.gateway.remove(id);\n }\n\n extend(item: T, _action?: RepoAction): Promise<T> {\n return resolve(item);\n }\n\n validate(item: T, _action?: RepoAction): Promise<T> {\n return resolve(item);\n }\n\n upsert(id: Id, item: Json): Promise<T> {\n return this.update(id, item).catch(e => (Exception.DoesNotExist.equals(e) ? this.add(item) : reject(e)));\n }\n}\n","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","import { Get, ofGet } from './Get';\nimport { tryTo } from './Try';\nimport { isNumber } from './Is';\nimport { asString } from './Text';\n\nexport const asNumber = (n: unknown, alt?: Get<number>): number =>\n tryTo(() => asString(n))\n .map(s => parseInt(s))\n .filter(n => isNumber(n))\n .or(ofGet(alt) ?? NaN);\n","import { asNumber } from './Number';\nimport { choose } from './Case';\nimport { asString } from './Text';\nimport { isNumber, isString } from './Is';\n\nexport type CacheAge = `${number}${'ms' | 's' | 'm' | 'h' | 'd'}` | number;\n\nconst ageNumber = (s: string): number => asNumber(s.replace(/[a-z]/g, ''));\n\nexport const cacheAge = {\n toMilliseconds: (ca: CacheAge): number =>\n choose(asString(ca))\n .case(\n c => c.endsWith('ms'),\n c => ageNumber(c)\n )\n .case(\n c => c.endsWith('s'),\n c => ageNumber(c) * 1000\n )\n .case(\n c => c.endsWith('m'),\n c => ageNumber(c) * 60 * 1000\n )\n .case(\n c => c.endsWith('h'),\n c => ageNumber(c) * 3600 * 1000\n )\n .case(\n c => c.endsWith('d'),\n c => ageNumber(c) * 24 * 3600 * 1000\n )\n .else(ca as number),\n\n toSeconds: (ca: CacheAge): number =>\n choose(asString(ca))\n .case(\n c => c.endsWith('ms'),\n c => ageNumber(c) / 1000\n )\n .case(\n c => c.endsWith('s'),\n c => ageNumber(c)\n )\n .case(\n c => c.endsWith('m'),\n c => ageNumber(c) * 60\n )\n .case(\n c => c.endsWith('h'),\n c => ageNumber(c) * 3600\n )\n .case(\n c => c.endsWith('d'),\n c => ageNumber(c) * 24 * 3600\n )\n .else(ca as number),\n};\n\nexport const isCacheAge = (ca?: unknown): ca is CacheAge => isString(ca) || isNumber(ca);\n","import { cacheAge, CacheAge, isCacheAge } from '../types/CacheAge';\nimport { on } from '../types/Constructor';\nimport { entries } from '../types/Object';\nimport { ifDefined } from '../utils/If';\n\nexport class CacheControl {\n name = 'Cache-Control';\n\n protected constructor(\n readonly enabled = true,\n private directives: Record<string, boolean | CacheAge | undefined> = {}\n ) {}\n\n static disabled = () => new CacheControl(false);\n\n static OneSecond = () => new CacheControl().maxAge(1).staleWhileRevalidate(1);\n\n static fiveSeconds = () => new CacheControl().maxAge(5).staleWhileRevalidate(5);\n\n static tenSeconds = () => new CacheControl().maxAge(10).staleWhileRevalidate(10);\n\n static thirtySeconds = () => new CacheControl().maxAge(30).staleWhileRevalidate(30);\n\n static sixtySeconds = () => new CacheControl().maxAge(60).staleWhileRevalidate(60);\n\n static custom = (maxAge?: CacheAge, staleWhileRevalidate?: CacheAge) => new CacheControl().maxAge(maxAge).staleWhileRevalidate(staleWhileRevalidate);\n\n readonly maxAge = (ca?: CacheAge): this => on(this, t => (t.directives['max-age'] = ca));\n\n readonly sharedMaxAge = (ca?: CacheAge): this => on(this, t => (t.directives['s-maxage'] = ca));\n\n readonly noCache = (a?: boolean): this => on(this, t => (t.directives['no-cache'] = a));\n\n readonly mustRevalidate = (a?: boolean): this => on(this, t => (t.directives['must-revalidate'] = a));\n\n readonly private = (a?: boolean): this => on(this, t => (t.directives['private'] = a));\n\n readonly public = (a?: boolean): this => on(this, t => (t.directives['public'] = a));\n\n readonly immutable = (a?: boolean): this => on(this, t => (t.directives['immutable'] = a));\n\n readonly staleWhileRevalidate = (ca?: CacheAge): this => on(this, t => (t.directives['stale-while-revalidate'] = ca));\n\n value = (): string => this.toString();\n\n toString(): string {\n return entries(this.directives)\n .mapDefined(([k, v]) => ifDefined(v, isCacheAge(v) ? `${k}=${cacheAge.toSeconds(v)}` : k))\n .join(',');\n }\n}\n","import formUrlEncoded from 'form-urlencoded';\nimport { Enum } from '../types/Enum';\nimport { Get, ofGet } from '../types/Get';\nimport { asString } from '../types/Text';\n\nexport class ContentType extends Enum {\n static Form = new ContentType('form', 'application/x-www-form-urlencoded', b => formUrlEncoded(b));\n static Json = new ContentType('json', 'application/json', b => b);\n static RawJson = new ContentType('rawJson', 'application/json', b => b);\n static Stream = new ContentType('stream', 'application/octet-stream');\n static Text = new ContentType('text', 'text/plain');\n static Xml = new ContentType('xml', 'application/xml');\n\n private constructor(\n name: string,\n readonly type: string,\n protected readonly encoder: Get<string> = b => asString(b)\n ) {\n super(name, type);\n }\n\n encode = (body?: unknown): string => ofGet(this.encoder, body);\n}\n","export const HttpHeader = {\n ContentType: 'Content-Type',\n Correlation: 'X-Correlation-Id',\n};\n","import { Enum } from '../types/Enum';\nimport { TypeGuard } from '../types/TypeGuard';\nimport { isAn } from '../types/IsA';\nimport { Code } from '../types/Id';\n\nexport class HttpStatus extends Enum {\n static Continue = new HttpStatus('Continue', 100);\n static SwitchingProtocols = new HttpStatus('Switching protocols', 101);\n static Processing = new HttpStatus('Processing', 102);\n static EarlyHints = new HttpStatus('Early hints', 103);\n static Ok = new HttpStatus('Ok', 200);\n static Created = new HttpStatus('Created', 201);\n static Accepted = new HttpStatus('Accepted', 202);\n static NonAuthoritativeInformation = new HttpStatus('Non-authoritative information', 203);\n static NoContent = new HttpStatus('No content', 204);\n static ResetContent = new HttpStatus('Reset content', 205);\n static PartialContent = new HttpStatus('Partial content', 206);\n static MultiStatus = new HttpStatus('Multi-status', 207);\n static AlreadyReported = new HttpStatus('Already reported', 208);\n static ImUsed = new HttpStatus('IM used', 226);\n static MultipleChoices = new HttpStatus('Multiple Choices', 300);\n static MovedPermanently = new HttpStatus('Moved Permanently', 301);\n static Found = new HttpStatus('Found', 302);\n static SeeOther = new HttpStatus('See other', 303);\n static NotModified = new HttpStatus('Not modified', 304);\n static UseProxy = new HttpStatus('Use proxy', 305);\n static SwitchProxy = new HttpStatus('Switch proxy', 306);\n static TemporaryRedirect = new HttpStatus('Temporary redirect', 307);\n static PermanentRedirect = new HttpStatus('Permanent redirect', 308);\n static BadRequest = new HttpStatus('Bad request', 400);\n static NotAuthorized = new HttpStatus('Not authorized', 401);\n static PaymentRequired = new HttpStatus('Payment required', 402);\n static Forbidden = new HttpStatus('Forbidden', 403);\n static NotFound = new HttpStatus('Not found', 404);\n static MethodNotAllowed = new HttpStatus('Method not allowed', 405);\n static NotAcceptable = new HttpStatus('Not acceptable', 406);\n static ProxyAuthenticationRequired = new HttpStatus('Proxy authentication required', 407);\n static RequestTimeout = new HttpStatus('Request timeout', 408);\n static Conflict = new HttpStatus('Conflict', 409);\n static Gone = new HttpStatus('Gone', 410);\n static LengthRequired = new HttpStatus('Length required', 411);\n static PreconditionFailed = new HttpStatus('Precondition failed', 412);\n static PayloadTooLarge = new HttpStatus('Payload too large', 413);\n static UriTooLong = new HttpStatus('URI too long', 414);\n static UnsupportedMediaType = new HttpStatus('Unsupported media type', 415);\n static RangeNotSatisfiable = new HttpStatus('Range not satisfiable', 416);\n static ExpectationFailed = new HttpStatus('Expectation failed', 417);\n static ImATeapot = new HttpStatus(\"I'm a teapot\", 418);\n static MisdirectedRequest = new HttpStatus('Misdirected request', 421);\n static UnprocessableEntity = new HttpStatus('Unprocessable entity', 422);\n static Locked = new HttpStatus('Locked', 423);\n static FailedDependency = new HttpStatus('Failed dependency', 424);\n static TooEarly = new HttpStatus('Too early', 425);\n static UpgradeRequired = new HttpStatus('Upgrade required', 426);\n static PreconditionRequired = new HttpStatus('Precondition required', 428);\n static TooManyRequests = new HttpStatus('Too many requests', 429);\n static RequestHeaderFieldsTooLarge = new HttpStatus('Request header fields too large', 431);\n static UnavailableForLegalReasons = new HttpStatus('Unavailable for legal reasons', 451);\n static InternalServerError = new HttpStatus('Internal server error', 500);\n static NotImplemented = new HttpStatus('Not implemented', 501);\n static BadGateway = new HttpStatus('Bad gateway', 502);\n static ServiceUnavailable = new HttpStatus('Service unavailable', 503);\n static GatewayTimeout = new HttpStatus('Gateway timeout', 504);\n static HTTPVersionNotSupported = new HttpStatus('Http version not supported', 505);\n static VariantAlsoNegotiates = new HttpStatus('Variant also negotiates', 506);\n static InsufficientStorage = new HttpStatus('Insufficient storage', 507);\n static LoopDetected = new HttpStatus('Loop detected', 508);\n static NotExtended = new HttpStatus('Not extended', 510);\n static NetworkAuthenticationRequired = new HttpStatus('Network authentication required', 511);\n\n get isError(): boolean {\n return this.isClientError || this.isServerError;\n }\n\n get isClientError(): boolean {\n return (this.id as number) >= 400 && (this.id as number) < 500;\n }\n\n get isServerError(): boolean {\n return (this.id as number) >= 500 && (this.id as number) < 600;\n }\n\n get status(): number {\n return this.id as number;\n }\n}\n\nexport const isHttpStatus: TypeGuard<HttpStatus> = (s?: unknown): s is HttpStatus => isAn<HttpStatus>(s, 'id', 'status');\n\nexport const toHttpStatus = (s: HttpStatus | Code): HttpStatus => (isHttpStatus(s) ? s : HttpStatus.byId(s));\n","import { Enum } from '../types/Enum';\n\nexport class HttpVerb extends Enum {\n static Get = new HttpVerb('Get');\n static Put = new HttpVerb('Put');\n static Patch = new HttpVerb('Patch');\n static Post = new HttpVerb('Post');\n static Delete = new HttpVerb('Delete');\n\n constructor(name: string) {\n super(name, name.toLowerCase(), name.toUpperCase());\n }\n}\n","import { HttpHeader } from './HttpHeader';\nimport { ContentType } from './ContentType';\nimport { PageOptions } from '../types/PageList';\nimport { Optional } from '../types/Types';\nimport { asString, Text } from '../types/Text';\nimport { Enum } from '../types/Enum';\nimport { CacheAge } from '../types/CacheAge';\nimport { ctx } from '../types/Context';\nimport { toUuid } from '../types/Uuid';\nimport { Id } from '../types/Id';\nimport { on } from '../types/Constructor';\nimport { isDefined, isNotEmpty } from '../types/Is';\n\nexport const toPageOptions = (options?: RequestOptions | PageOptions): Optional<PageOptions> =>\n options instanceof RequestOptions ? options.pageOptions : options;\n\nexport class RequestOptions extends Enum {\n public requestOptions: { maxRedirects?: number; validateStatus?: (status: number) => boolean; timeout?: CacheAge } = {};\n\n constructor(\n readonly type: ContentType = ContentType.Json,\n readonly headers: { [key: string]: any } = {},\n public pageOptions?: PageOptions\n ) {\n super(type.name);\n this.headers['Content-Type'] = type.id;\n this.headers[HttpHeader.Correlation] = ctx.request.correlationId ?? toUuid();\n }\n\n static get Form(): RequestOptions {\n return new RequestOptions(ContentType.Form);\n }\n\n static get Json(): RequestOptions {\n return new RequestOptions(ContentType.Json);\n }\n\n static get Stream(): RequestOptions {\n return new RequestOptions(ContentType.Stream);\n }\n\n static get Text(): RequestOptions {\n return new RequestOptions(ContentType.Text);\n }\n\n static get Xml(): RequestOptions {\n return new RequestOptions(ContentType.Xml);\n }\n\n page = (options: PageOptions): this => {\n this.pageOptions = options;\n return this;\n };\n\n authorization = (auth: string): this => this.setHeader('Authorization', auth);\n\n apiKey = (apiKey: string): this => this.setHeader('apiKey', apiKey);\n\n setHeader = (key: Text, value: Id | boolean): this => on(this, t => (t.headers[asString(key)] = value));\n\n setHeaderUnlessPresent = (key: string, value?: Id | boolean): this => (value ? this.setHeader(key, this.headers[key] ?? value) : this);\n\n accept = (type: ContentType): this => this.setHeader('Accept', type.id);\n\n bearer = (jwt: Text): this => {\n return isNotEmpty(jwt) ? this.authorization(`Bearer ${jwt}`) : this;\n };\n\n basic = (username: Text, password: Text): this => {\n const basicAuth = Buffer.from(`${username}:${password}`, 'utf8').toString('base64');\n return this.authorization(`Basic ${basicAuth}`);\n };\n\n maxRedirects = (max?: number): this => {\n this.requestOptions.maxRedirects = max;\n return this;\n };\n\n validateStatus = (validate?: (status: number) => boolean): this => {\n this.requestOptions.validateStatus = validate;\n return this;\n };\n\n timeout = (t?: CacheAge): this => {\n this.requestOptions.timeout = t;\n return this;\n };\n}\n\nexport const isRequestOptions = (o?: unknown): o is RequestOptions => isDefined(o) && o instanceof RequestOptions;\n","import { HttpStatus } from './HttpStatus';\nimport type { RestResult } from './RestResult';\nimport { isA } from '../types/IsA';\nimport { TypeGuard } from '../types/TypeGuard';\n\nexport type Response = {\n status: HttpStatus;\n headers?: { [key: string]: any };\n body: RestResult;\n};\n\nexport const isResponse: TypeGuard<Response> = (r?: unknown): r is Response => isA<Response>(r, 'status', 'body');\n","import { HttpStatus, isHttpStatus } from './HttpStatus';\nimport { isResponse } from './Response';\nimport { List, toList } from '../types/List';\nimport { Json } from '../types/Json';\nimport { isResult, Result, toResult } from '../types/Result';\nimport { isDefined, isError } from '../types/Is';\nimport { choose } from '../types/Case';\nimport { isResults } from '../types/Results';\nimport { Id } from '../types/Id';\n\nexport type RestResult = {\n data?: { code: number; items: List<Json>; itemCount: number; totalItems?: number; meta?: Json };\n error?: { code: number; message: string; errorCount: number; errors: List<Result> };\n};\n\nconst hasErrors = (a: any): a is { error: { code: number; errors: List<Result> } } => isDefined(a?.error?.errors);\nconst hasItems = (a: any): a is { data: { code: number; items: List<Json>; totalItems?: number; meta?: Json } } => isDefined(a?.data.items);\n\nexport const rest = {\n toData: (status: HttpStatus, items: Json[] = [], totalItems?: number, meta?: Json): RestResult => ({\n data: {\n code: status.status,\n items: toList(items),\n itemCount: items.length,\n totalItems,\n meta,\n },\n }),\n toError: (status: HttpStatus, errors: Result[] = [toResult(status.name)]): RestResult => ({\n error: {\n code: status.status,\n message: status.name ?? errors[0].message ?? 'Unknown',\n errors: toList(errors),\n errorCount: errors.length,\n },\n }),\n to: (payload?: any | any[], status?: HttpStatus): RestResult =>\n choose(payload)\n .is.not.defined(p => p, undefined as unknown as RestResult)\n .type(isHttpStatus, h => rest.toError(h ?? status ?? HttpStatus.InternalServerError, [toResult(h.name)]))\n .type(isResult, r => rest.toError(status ?? HttpStatus.BadRequest, [r]))\n .type(isError, e => rest.toError(status ?? HttpStatus.BadRequest, [e]))\n .type(isResults, r => rest.toError(status ?? HttpStatus.BadRequest, r.results))\n .type(isResponse, r => rest.toError(status ?? HttpStatus.byId(r.body.error?.code as Id), r.body.error?.errors))\n .type(hasErrors, e => rest.toError(status ?? HttpStatus.byId(e.error.code, HttpStatus.BadRequest), e.error.errors))\n .type(hasItems, d => rest.toData(status ?? HttpStatus.byId(d.data.code, HttpStatus.Ok), d.data.items, d.data.totalItems, d.data.meta))\n .else(p => rest.toData(status ?? HttpStatus.Ok, toList(p))),\n};\n\nexport const isRestResult = (r: unknown): r is RestResult => isDefined(r) && (isDefined((r as RestResult).data) || isDefined((r as RestResult).error));\n","import { HttpStatus, toHttpStatus } from './HttpStatus';\nimport { rest } from './RestResult';\nimport { Response } from './Response';\nimport { Code } from '../types/Id';\n\nexport function toResponse(status: HttpStatus | Code, body?: unknown, headers?: { [key: string]: any }): Response {\n return {\n status: toHttpStatus(status),\n headers,\n body: rest.to(body),\n };\n}\n","import { Enum } from '../types/Enum';\nimport type { Text } from '../types/Text';\nimport { kebab } from '../types/Text';\nimport { List, toList } from '../types/List';\nimport { isString } from '../types/Is';\nimport { IdNamePlain } from '../types/IdName';\nimport { text } from '../types/ToText';\n\nexport class Scope extends Enum {\n protected constructor(\n readonly name: string,\n id: Text = text(name).kebab,\n readonly subs: List<Scope> = toList()\n ) {\n super(name, id.toString());\n }\n\n for(item: string | IdNamePlain): Scope {\n return new Scope(`${this.name} ${isString(item) ? text(item).title : item.name}`, kebab(`${this.id} ${isString(item) ? item : item.id}`));\n }\n\n combines(...scopes: Scope[]): this {\n this.subs.add(scopes);\n return this;\n }\n\n expand(): List<Scope> {\n return this.subs\n .flatMap(s => s.expand())\n .add(this)\n .distinct();\n }\n}\n","import { Scope } from './Scope';\n\nexport class App extends Scope {\n constructor(name: string) {\n super(name);\n }\n\n static readonly Main = new App('Main');\n}\n","import { FetchOptions } from '../types/Gateway';\nimport { Repository } from '../types/Repository';\nimport { PageList, toPageList } from '../types/PageList';\nimport { Id, Key } from '../types/Id';\nimport { List } from '../types/List';\nimport { Req } from '../resources/Req';\nimport { JsonValue } from '../types/Json';\nimport { choose } from '../types/Case';\nimport { resolve } from '../utils/Promise';\n\nexport class Search<T, Options = FetchOptions> {\n constructor(protected repo: Repository<T, Options>) {}\n\n all(options?: Options): Promise<PageList<T>> {\n return this.repo.all(options);\n }\n\n byId(id: Id): Promise<T> {\n return this.repo.byId(id);\n }\n\n byIds(...ids: Id[]): Promise<List<T>> {\n return this.repo.byIds(...ids);\n }\n\n byKey(key: Key, options?: Options): Promise<PageList<T>> {\n return this.repo.byKey(key, options);\n }\n\n query({ query, skip, take }: Req): Promise<PageList<T>> {\n return this.search(query, { skip, take } as Options);\n }\n\n search(query: JsonValue, options?: Options): Promise<PageList<T>> {\n return choose(query)\n .is.not.empty(\n q => q,\n q => this.repo.search(q, options)\n )\n .else(() => resolve(toPageList<T>()));\n }\n\n filter(options?: Options): Promise<PageList<T>> {\n return this.repo.filter(options);\n }\n\n exists(id: Id): Promise<boolean> {\n return this.repo.exists(id);\n }\n}\n","import { Search } from './Search';\nimport { FetchOptions } from '../types/Gateway';\nimport { Json } from '../types/Json';\nimport { Id } from '../types/Id';\n\nexport class Manage<T, Options = FetchOptions> extends Search<T, Options> {\n add(json: Json): Promise<T> {\n return this.repo.add(json);\n }\n\n update(id: Id, json: Json): Promise<T> {\n return this.repo.update(id, json);\n }\n\n upsert(id: Id, json: Json): Promise<T> {\n return this.repo.upsert(id, json);\n }\n\n remove(id: Id): Promise<boolean> {\n return this.repo.remove(id);\n }\n}\n","import { Scope } from './Scope';\nimport { App } from './App';\nimport { Enum } from '../types/Enum';\nimport { kebab, Text } from '../types/Text';\nimport { List, toList } from '../types/List';\nimport { isIn, isString } from '../types/Is';\nimport { IdNamePlain } from '../types/IdName';\nimport { text } from '../types/ToText';\n\nexport class UseCase extends Enum {\n constructor(\n readonly app: App,\n name: string,\n id: Text = text(name).kebab,\n readonly scopes: List<Scope> = toList<Scope>()\n ) {\n super(name, id.toString());\n }\n\n static byScopes<U extends UseCase>(...s: Scope[]): List<U> {\n return this.filter(u => u.scopes.some(us => isIn(us, s)));\n }\n\n with(...s: Scope[]): this {\n this.scopes.add(\n ...toList(s)\n .flatMap(s => s.expand())\n .distinct()\n );\n return this;\n }\n\n for(item: string | IdNamePlain): UseCase {\n return new UseCase(this.app, `${this.name} ${isString(item) ? item : item?.name}`, kebab(`${this.id} ${isString(item) ? item : item.id}`)).with(\n ...this.scopes.map(s => s?.for(item))\n );\n }\n}\n","import { PageOptions } from '../types/PageList';\nimport { Optional } from '../types/Types';\nimport { Json, JsonValue } from '../types/Json';\nimport { OneOrMore } from '../types/Array';\nimport { ifDefined } from '../utils/If';\nimport { asNumber } from '../types/Number';\nimport { Id } from '../types/Id';\nimport type { Text } from '../types/Text';\n\nexport class Req<T = unknown> implements Omit<PageOptions, 'sort'> {\n readonly skip: Optional<number>;\n readonly take: Optional<number>;\n constructor(\n readonly path: Json = {},\n readonly query: Json = {},\n readonly body: T,\n readonly headers: Record<string, OneOrMore<string>>\n ) {\n this.skip = ifDefined(query.skip, s => asNumber(s));\n this.take = ifDefined(query.take, t => asNumber(t));\n }\n\n get id(): Id {\n return this.get('id');\n }\n\n get q(): JsonValue {\n return this.get('q');\n }\n\n get = (key: Text): any => this.path[key.toString()] ?? this.query[key.toString()];\n}\n\nexport function toReq<T = unknown>(req: { params?: { id?: unknown }; query?: { q?: unknown }; body?: T; headers?: unknown }): Req {\n return new Req(req.params as Json, req.query as Json, req.body as Json, req.headers as Record<string, OneOrMore<string>>);\n}\n","import { jwtDecode as decode } from 'jwt-decode';\nimport { Json } from '../types/Json';\nimport {Value} from \"../types/Value\";\n\nexport class Jwt extends Value {\n static of = (a: { jwt: string }): Jwt => new Jwt(a.jwt);\n\n decode = (): Json => decode(this.value);\n\n toJSON(): Json {\n return { jwt: this.value };\n }\n}\n","import axios, { AxiosError, AxiosInstance, AxiosResponse, Method } from 'axios';\nimport { toResponse } from '../http/toResponse';\nimport { isDefined, isEmpty } from '../types/Is';\nimport { Uri } from '../types/Uri';\nimport { HttpVerb } from '../http/HttpVerb';\nimport { choose } from '../types/Case';\nimport { isRestResult } from '../http/RestResult';\nimport { toResult } from '../types/Result';\nimport { HttpStatus } from '../http/HttpStatus';\nimport { RequestProvider } from '../http/RequestProvider';\nimport { RequestOptions } from '../http/RequestOptions';\nimport { ctx } from '../types/Context';\nimport { cacheAge } from '../types/CacheAge';\nimport { Response } from '../http/Response';\nimport { Request } from '../http/Request';\n\nconst isResponse = (a: unknown): a is { response: AxiosResponse } => isDefined((a as any)?.response);\nconst isRequest = (a: unknown): a is { request: any } => isDefined((a as any)?.request);\n\nconst asResponse = (uri: Uri, verb: HttpVerb, error: AxiosError): Response =>\n choose(error)\n .type(isResponse, r =>\n toResponse(r.response.status, isRestResult(r.response.data) ? r.response.data : toResult(r.response.statusText, uri.path, uri), r.response.headers)\n )\n .type(isRequest, r => toResponse(r.request.status, toResult(r.request.message, uri.path, uri)))\n .else(e => toResponse(HttpStatus.InternalServerError, toResult(e.message, uri.path, uri)));\n\nexport class AxiosProvider implements RequestProvider {\n constructor(readonly ai: AxiosInstance = axios) {}\n\n execute = ({ uri, verb, body, transform = (r: any) => r, transformError = (r: any) => r, options = RequestOptions.Json }: Request): Promise<Response> =>\n this.ai\n .request({\n url: uri.toString(),\n method: verb.toString() as Method,\n headers: uri.isInternal && isEmpty(options.headers.Authorization) ? options.bearer(ctx.request.jwt).headers : options.headers,\n data: options.type.encode(body),\n maxRedirects: options.requestOptions.maxRedirects,\n ...(options.requestOptions.timeout && { timeout: cacheAge.toMilliseconds(options?.requestOptions.timeout) }),\n ...(options.requestOptions.validateStatus && { validateStatus: options.requestOptions.validateStatus }),\n })\n .then(r => toResponse(r.status, transform(r.data), r.headers))\n .catch(e => Promise.reject(asResponse(uri, verb, transformError(e))));\n}\n","import { AxiosProvider } from './AxiosProvider';\nimport { RequestOptions, toPageOptions } from '../http/RequestOptions';\nimport { FetchOptions } from '../types/Gateway';\nimport { RequestProvider } from '../http/RequestProvider';\nimport { Store } from '../types/Cache';\nimport { Uri } from '../types/Uri';\nimport { HttpVerb } from '../http/HttpVerb';\nimport { Request } from '../http/Request';\nimport { Response } from '../http/Response';\n\nexport type RouteOptions = RequestOptions | FetchOptions;\n\nexport class Api {\n constructor(\n readonly provider: RequestProvider = new AxiosProvider(),\n protected store?: Store<Response, Request>\n ) {}\n\n get(uri: Uri, options?: RouteOptions, transform?: (r: any) => any, transformError = (r: any) => r): Promise<Response> {\n return this.execute({\n uri: uri.skip(toPageOptions(options)?.skip).take(toPageOptions(options)?.take),\n verb: HttpVerb.Get,\n transform,\n transformError,\n options: this.options(HttpVerb.Get, options),\n });\n }\n\n post(uri: Uri, body?: unknown, options: RouteOptions = RequestOptions.Json, transform?: (r: any) => any, transformError = (r: any) => r): Promise<Response> {\n return this.execute({\n uri,\n verb: HttpVerb.Post,\n body,\n transform,\n transformError,\n options: this.options(HttpVerb.Post, options),\n });\n }\n\n put(uri: Uri, body?: unknown, options: RouteOptions = RequestOptions.Json, transform?: (r: any) => any, transformError = (r: any) => r): Promise<Response> {\n return this.execute({\n uri,\n verb: HttpVerb.Put,\n body,\n transform,\n transformError,\n options: this.options(HttpVerb.Put, options),\n });\n }\n\n patch(uri: Uri, body?: unknown, options: RouteOptions = RequestOptions.Json, transform?: (r: any) => any, transformError = (r: any) => r): Promise<Response> {\n return this.execute({\n uri,\n verb: HttpVerb.Patch,\n body,\n transform,\n transformError,\n options: this.options(HttpVerb.Patch, options),\n });\n }\n\n delete(uri: Uri, options: RouteOptions = RequestOptions.Json, transform?: (b: any) => any, transformError = (r: any) => r): Promise<Response> {\n return this.execute({\n uri,\n verb: HttpVerb.Delete,\n transform,\n transformError,\n options: this.options(HttpVerb.Delete, options),\n });\n }\n\n options(verb: HttpVerb, options?: RouteOptions): RequestOptions {\n return options instanceof RequestOptions ? options : RequestOptions.Json;\n }\n\n execute(req: Request): Promise<Response> {\n return this.store ? this.store.execute(req, () => this.provider.execute(req)) : this.provider.execute(req);\n }\n}\n\nexport const api: Api = new Api();\n","import { Api, RouteOptions } from './Api';\nimport { FetchOptions, Gateway } from '../types/Gateway';\nimport { Uri } from '../types/Uri';\nimport { PageList, toPageList } from '../types/PageList';\nimport { Json } from '../types/Json';\nimport { use } from '../types/Constructor';\nimport { Optional } from '../types/Types';\nimport { RequestOptions } from '../http/RequestOptions';\n\nexport class ApiGateway extends Gateway<RouteOptions> {\n constructor(readonly api: Api = new Api()) {\n super();\n }\n\n get(uri: Uri, options?: RouteOptions): Promise<PageList<Json>> {\n return this.api.get(uri, options).then(r => use(r.body.data, d => toPageList(d?.items, { total: d?.totalItems, ...d?.meta })));\n }\n\n getOne(uri: Uri, options?: RouteOptions): Promise<Optional<Json>> {\n return this.get(uri, options).then(r => r.first());\n }\n\n post(uri: Uri, item?: Json, options?: RouteOptions): Promise<Json> {\n return this.api.post(uri, item, options).then(r => r.body.data?.items.first() ?? {});\n }\n\n postSearch(uri: Uri, options?: RequestOptions | FetchOptions): Promise<PageList<Json>> {\n return this.api.post(uri, options).then(r => use(r.body.data, d => toPageList(d?.items, { total: d?.totalItems, ...d?.meta })));\n }\n\n patch(uri: Uri, item?: Json, options?: RouteOptions): Promise<Json> {\n return this.api.patch(uri, item, options).then(r => r.body.data?.items.first() ?? {});\n }\n\n put(uri: Uri, item?: Json, options?: RouteOptions): Promise<Json> {\n return this.api.put(uri, item, options).then(r => r.body.data?.items.first() ?? {});\n }\n\n delete(uri: Uri, options?: RouteOptions): Promise<boolean> {\n return this.api.delete(uri, options).then(() => true);\n }\n}\n","import { Api } from './Api';\nimport { ApiGateway } from './ApiGateway';\nimport { Func } from '../types/Func';\nimport { Uri, UriExpandProps } from '../types/Uri';\nimport { PageList } from '../types/PageList';\nimport { Json, JsonValue } from '../types/Json';\nimport { Id } from '../types/Id';\nimport { Optional } from '../types/Types';\nimport { List } from '../types/List';\nimport { toArray } from '../types/Array';\nimport { HttpStatus } from '../http/HttpStatus';\nimport { isDefined } from '../types/Is';\n\nexport class RouteGateway<Props extends UriExpandProps = UriExpandProps> extends ApiGateway {\n constructor(\n readonly route: Func<Uri<Props>>,\n readonly routeId: Func<Uri<Props>>,\n readonly api: Api = new Api()\n ) {\n super(api);\n }\n\n all(options?: Props): Promise<PageList<Json>> {\n return this.get(this.route().expand(options ?? {}) as Uri, options);\n }\n\n byId(id: Id): Promise<Optional<Json>> {\n return this.getOne(this.routeId().id(id) as Uri);\n }\n\n byIds(...ids: Id[]): Promise<List<Json>> {\n return this.get(this.route().ids(toArray(...ids)) as Uri);\n }\n\n search(q: JsonValue, options?: Props): Promise<PageList<Json>> {\n return this.get(this.route().expand({ ...options, q } as Props) as Uri);\n }\n\n exists(id: Id): Promise<boolean> {\n return this.byId(id)\n .then(r => isDefined(r))\n .catch(r => (HttpStatus.NotFound.equals(r.status) ? false : Promise.reject(r)));\n }\n\n add(item: Json): Promise<Json> {\n return this.post(this.route() as Uri, item);\n }\n\n filter(options?: Props): Promise<PageList<Json>> {\n return this.postSearch(this.route().expand(options ?? {}) as Uri);\n }\n\n update(item: Json): Promise<Json> {\n return this.patch(this.routeId().id(item.id) as Uri, item);\n }\n\n upsert(item: Json): Promise<Json> {\n return this.put(this.routeId().id(item.id) as Uri, item);\n }\n\n remove(id: Id): Promise<boolean> {\n return this.delete(this.routeId().id(id) as Uri);\n }\n}\n","import { Construct, ofConstruct } from '../types/Constructor';\n\nexport class State {\n constructor(protected readonly state: any = {}) {}\n\n protected get = <T>(key: string, alt?: Construct<T>): T => this.state[key] ?? (this.state[key] = ofConstruct(alt));\n protected set = <T>(key: string, value: Construct<T>): T => this.get(key, value);\n}\n","import { Property, PropertyOptions } from './Property';\nimport { State } from './State';\nimport { ifNotEmpty } from './If';\nimport { json, Json, JsonValue } from '../types/Json';\nimport { Optional } from '../types/Types';\nimport { TypeGuard } from '../types/TypeGuard';\nimport { isA } from '../types/IsA';\nimport { List, toList } from '../types/List';\nimport { meta } from '../types/Meta';\nimport { isEmpty } from '../types/Is';\nimport { Get, ofGet } from '../types/Get';\nimport { Construct, ofConstruct } from '../types/Constructor';\n\nexport type Mapping = {\n property: string;\n in: (source?: Json, key?: string) => Optional<JsonValue>;\n out: (source?: Json, key?: string) => Optional<JsonValue>;\n};\nexport const isMapping: TypeGuard<Mapping> = (m?: unknown): m is Mapping => isA<Mapping>(m, 'in', 'out');\n\nexport type MapStartFrom = 'scratch' | 'source';\nexport type MapOptions = { startFrom: MapStartFrom };\n\nexport class Mapper extends State implements Mapping {\n protected readonly map = mappings;\n\n constructor(\n readonly options: MapOptions = { startFrom: 'scratch' },\n readonly property = ''\n ) {\n super();\n }\n\n // All properties that are a mapping\n get properties(): List<[string, Mapping]> {\n return this.get('props', () =>\n meta(this)\n .entries<Mapping>()\n .filter(([, v]) => isMapping(v))\n );\n }\n\n // All names of properties (in target) that have a Mapping\n get keys(): List<string> {\n return this.get('keys', () => this.properties.map(([k]) => k));\n }\n\n // All names of properties (in source) that are named in a Mapping\n get columns(): List<string> {\n return this.get('columns', () => this.properties.mapDefined(([, p]) => ifNotEmpty(p.property, p.property))).distinct();\n }\n\n // All names of properties (in source) that are NOT properties in target\n private get droppedIn(): List<string> {\n return this.get('droppedIn', () => this.columns.filter(c => !this.keys.some(k => k === c)));\n }\n\n // All names op properties (in target) that are NOT properties in source\n private get droppedOut(): List<string> {\n return this.get('droppedOut', () => this.properties.filter(([, p]) => !this.keys.some(k => k === p.property)).map(([k]) => k));\n }\n\n public in(from: Json = {}): Json {\n return json.omit(\n this.properties.reduce((a, [k, p]) => json.merge(a, { [k]: p.in({ ...a, ...from }) }), this.options.startFrom === 'source' ? from : {}),\n ...this.droppedIn\n );\n }\n\n public out(to: Json = {}): Json {\n return json.omit(\n this.properties.reduce(\n (a, [k, p]) => json.merge(a, isEmpty(p.property) ? p.out(to, k) : { [p.property ?? '']: p.out({ ...a, ...to }, k) }),\n this.options.startFrom === 'source' ? to : {}\n ),\n ...this.droppedOut\n );\n }\n\n toString(): string {\n return this.constructor.name;\n }\n}\n\nexport const mappings = {\n item: (property: string, options?: PropertyOptions): Property => new Property(property, options),\n ignore: (property = ''): Mapping => ({\n property,\n in: (): Optional<JsonValue> => undefined,\n out: (): Optional<JsonValue> => undefined,\n }),\n skipIn: (property: string): Mapping => ({\n property,\n in: (): Optional<JsonValue> => undefined,\n out: (source: Json = {}): JsonValue => source[property],\n }),\n skipOut: (property: string): Mapping => ({\n property,\n in: (source: Json = {}): JsonValue => source[property],\n out: (): Optional<JsonValue> => undefined,\n }),\n func: (property: string, funcIn: Get<Optional<JsonValue>, Json>, funcOut: Get<Optional<JsonValue>, Json>): Mapping => ({\n property,\n in: (source: Json = {}): Optional<JsonValue> => ofGet(funcIn, source),\n out: (source: Json = {}): Optional<JsonValue> => ofGet(funcOut, source),\n }),\n add: (funcIn: Get<JsonValue, Json>): Mapping => ({\n property: '',\n in: (source: Json = {}): JsonValue => ofGet(funcIn, source),\n out: (): Optional<JsonValue> => undefined,\n }),\n map: (mapper: Construct<Mapper>, property = ''): Mapping => ({\n property,\n in: (source: Json = {}): JsonValue => ofConstruct(mapper).in(isEmpty(property) ? source : (source[property] as Json)),\n out: (source: Json = {}, key = ''): JsonValue => ofConstruct(mapper).out(isEmpty(key) ? source : (source[key] as Json)),\n }),\n propsToList: (...maps: Mapping[]): Mapping => ({\n property: '',\n in: (source: Json = {}): JsonValue => toList(maps.map(m => ofConstruct(m).in(source))).toJSON(),\n out: (source: Json = {}, key = ''): JsonValue =>\n maps.reduce((a: Json, m, i) => {\n const res = toList(source[key])[i];\n const out = m.out(res as Json);\n return { ...a, [m.property]: out ?? {} };\n }, {}),\n }),\n list: (mapper: Mapping, property: string): Mapping => ({\n property,\n in: (source: Json = {}): JsonValue =>\n toList(source[property])\n .map((v: any) => mapper.in(v))\n .toJSON(),\n out: (source: Json = {}, key = ''): JsonValue =>\n toList(isEmpty(key) ? source : (source[key] as Json))\n .map((v: any) => mapper.out(v))\n .toJSON(),\n }),\n};\n","import { Api } from './Api';\nimport { RouteGateway } from './RouteGateway';\nimport { Func } from '../types/Func';\nimport { Uri } from '../types/Uri';\nimport { Mapper } from '../utils/Mapper';\nimport { RequestOptions } from '../http/RequestOptions';\nimport { PageList } from '../types/PageList';\nimport { Json } from '../types/Json';\nimport { Optional } from '../types/Types';\n\nexport class MappedRouteGateway extends RouteGateway {\n constructor(\n readonly route: Func<Uri>,\n readonly routeId: Func<Uri>,\n readonly map = new Mapper(),\n readonly api: Api = new Api()\n ) {\n super(route, routeId, api);\n }\n\n get(uri: Uri, options?: RequestOptions): Promise<PageList<Json>> {\n return super.get(uri, options).then(is => is.map(i => this.map.in(i)));\n }\n\n getOne(uri: Uri, options?: RequestOptions): Promise<Optional<Json>> {\n return super\n .get(uri, options)\n .then(is => is.first())\n .then(i => this.map.in(i));\n }\n\n add(item: Json): Promise<Json> {\n return super.add(this.map.out(item));\n }\n\n update(item: Json): Promise<Json> {\n return super.update(this.map.out(item));\n }\n}\n","import { isArray, isObject } from './Is';\nimport { choose } from './Case';\n\nconst isEqualArray = (one: unknown[], another: unknown[]): boolean =>\n choose([one, another])\n .case(([o, a]) => !isArray(o) || !isArray(a), false)\n .case(([o, a]) => o?.length !== a?.length, false)\n .else(([o, a]) => !o.some((v, i) => !isEqual(v, a[i])));\n\nconst isEqualObject = (one: any, another: any): boolean =>\n choose([Object.keys(one), Object.keys(another)])\n .case(([keysO, keysA]) => keysO.length !== keysA.length, false)\n .case(([keysO, keysA]) => keysO.some(k => !keysA.includes(k)), false)\n .case(([keysO]) => keysO.some(k => !isEqual(one[k], another[k])), false)\n .else(true);\n\nexport const isEqual = (one?: unknown, another?: unknown): boolean =>\n choose([one, another])\n .case(([o, a]) => o === a, true)\n .case(\n ([o, a]) => isArray(o) || isArray(a),\n ([o, a]) => isEqualArray(o as [], a as [])\n )\n .case(\n ([o, a]) => o == null || a == null || (!isObject(o) && !isObject(a)),\n ([o, a]) => o !== o && a !== a\n )\n .else(([o, a]) => isEqualObject(o, a));\n","import { traverse } from './Traverse';\nimport { ifDefined } from './If';\nimport { Primitive } from '../types/Primitive';\nimport { Constructor, isConstructor, use } from '../types/Constructor';\nimport { asJson, json as typesJson } from '../types/Json';\nimport { choose } from '../types/Case';\nimport { isArray, isBoolean, isFunction, isString } from '../types/Is';\nimport { meta } from '../types/Meta';\nimport { isPageList, PageList, toPageList } from '../types/PageList';\nimport { List } from '../types/List';\nimport { isEqual } from '../types/IsEqual';\nimport { DontInfer } from '../types/Types';\nimport { AnyKey } from '../types/AnyKey';\nimport { EnumConstructor, isEnumConstructor } from '../types/Enum';\nimport { Id } from '../types/Id';\n\ntype Func<T = unknown> = (a: any, key?: string) => T;\ntype FuncOn<S> = (a: S, key?: string) => unknown;\ntype Viewer = { key: string; f: Func };\n\ntype ViewType<V = any> = Primitive | EnumConstructor | Constructor | Func | View<V> | undefined;\ntype ViewValue<S = never> = [S] extends [never] ? ViewType : Exclude<ViewType, string | Func> | AnyKey<S> | FuncOn<S>;\ntype ViewRecord<V = any, S = never> = [S] extends [never]\n ? Partial<Record<keyof V, ViewValue<S>>>\n : Partial<Record<keyof V, ViewValue<S>>> & Partial<Record<Exclude<Extract<keyof S, string>, Extract<keyof V, string>>, typeof ignore>>;\n\nconst ignore = Symbol('view.ignore');\nconst keep = Symbol('view.keep');\nconst json = Symbol('view.json');\nconst spread = 'view.spread';\n\nexport const toViewer = (key: string, value: ViewType): Viewer =>\n choose(value)\n .is.not.defined(v => v, { key, f: () => undefined } as Viewer)\n .type(isBoolean, b => ({ key, f: () => b }))\n .equals(ignore, { key, f: () => undefined })\n .equals(keep, { key, f: (a: any) => traverse(a, key) })\n .equals(json, { key, f: (a: any) => asJson(traverse(a, key)) })\n .type(isString, s => ({ key, f: (a: any) => traverse(a, s) }))\n .type(isEnumConstructor, c => ({\n key,\n f: (a, key) => use(traverse(a, key), v => (isArray(v) ? c.byIds(v) : c.byId(v as Id))),\n }))\n .type(isConstructor, c => ({\n key,\n f: (a, key) => use(traverse(a, key), v => (isArray(v) ? v.map(i => optional(c, i)) : optional(c, v))),\n }))\n .type(isSimpleView, f => ({ key, f: (a: any) => ifDefined(traverse(a, key), v => f.from(v)) }))\n .type(isFunction, f => ({ key, f }))\n .else(v => ({ key, f: () => v }));\n\nconst optional = (c: Constructor, v: any) =>\n ifDefined(\n v,\n i => new c(i),\n () => v\n );\n\nconst toViewers = (views: ViewRecord): Viewer[] =>\n meta(views)\n .entries<ViewType>()\n .map(([k, v]) => toViewer(k, v));\n\nexport class View<V = any, S = never> {\n constructor(\n private views = {} as ViewRecord<V, S>,\n readonly startsFrom: 'scratch' | 'source' = 'scratch',\n readonly viewers: Viewer[] = toViewers(views)\n ) {}\n\n get fromSource(): View<V, S> {\n return new View(this.views, 'source', this.viewers);\n }\n\n from<T = unknown>(source: PageList<T>): PageList<V>;\n from<T = unknown>(source: List<T>): List<V>;\n from<T = unknown>(source: T[]): V[];\n from<T = unknown>(source: T): V;\n from<T = unknown>(source: PageList<T> | List<T> | T[] | T): PageList<V> | List<V> | V[] | V {\n if (isPageList(source))\n return toPageList(\n source.map(s => this.reduce(s)),\n source.options\n );\n if (isArray(source)) return source.map(s => this.reduce(s));\n return this.reduce(source);\n }\n\n same = (one?: unknown, another?: unknown): boolean => isEqual(this.from(one), this.from(another));\n\n private reduce = (source: any): any =>\n use(asJson(source), src =>\n this.viewers.reduce(\n (acc, v) => (v.key === spread ? { ...acc, ...asJson(v.f(src, v.key)) } : typesJson.set(acc, v.key, v.f(src, v.key))),\n this.startsFrom === 'scratch' ? {} : src\n )\n );\n}\n\nexport const isSimpleView = (a: unknown): a is View => a instanceof View;\n\nexport const view = <V = any, S = never>(views: ViewRecord<DontInfer<V>, DontInfer<S>>): View<V, S> => new View<V, S>(views);\n\nexport const views = {\n ignore,\n keep,\n json,\n spread,\n skip: ignore,\n equals: (key: string, value: unknown) => (a: unknown) => traverse(a, key) === value,\n value: (value: unknown) => () => value,\n coalesce:\n (...keys: string[]) =>\n (a: unknown) =>\n keys.reduce<unknown>((result, k) => result ?? traverse(a, k), undefined),\n or: {\n key: (altKey: string) => (a: unknown, key?: string) => traverse(a, key) ?? traverse(a, altKey),\n value: (altValue: unknown) => (a: unknown, key?: string) => traverse(a, key) ?? altValue,\n func: (altFunc: Func) => (a: unknown, key?: string) => traverse(a, key) ?? altFunc(a, key),\n },\n} as const;\n\n// spread: (a: any, key: string) => ({...a, ...(use(traverse(a, key), v => isObject(v) ? v : ({[key]: v})))}),\n","import { Api } from './Api';\nimport { RouteGateway } from './RouteGateway';\nimport { Func } from '../types/Func';\nimport { Uri } from '../types/Uri';\nimport { view } from '../utils/View';\nimport { RequestOptions } from '../http/RequestOptions';\nimport { PageList } from '../types/PageList';\nimport { Json } from '../types/Json';\nimport { Optional } from '../types/Types';\n\nexport class ViewRouteGateway extends RouteGateway {\n constructor(\n readonly route: Func<Uri>,\n readonly routeId: Func<Uri>,\n readonly views = {\n in: view({}).fromSource,\n out: view({}).fromSource,\n },\n readonly api: Api = new Api()\n ) {\n super(route, routeId, api);\n }\n\n get(uri: Uri, options?: RequestOptions): Promise<PageList<Json>> {\n return super.get(uri, options).then(is => is.map(i => this.views.in.from(i)));\n }\n\n getOne(uri: Uri, options?: RequestOptions): Promise<Optional<Json>> {\n return super\n .get(uri, options)\n .then(is => is.first())\n .then(i => this.views.in.from(i));\n }\n\n add(item: Json): Promise<Json> {\n return super.add(this.views.out.from(item));\n }\n\n update(item: Json): Promise<Json> {\n return super.update(this.views.out.from(item));\n }\n}\n","import { isBoolean, isNumber } from '../types/Is';\nimport { convert, Convert } from '../utils/Convert';\nimport { TypeGuard } from '../types/TypeGuard';\nimport { isA } from '../types/IsA';\nimport type { Text } from '../types/Text';\n\nexport const quote = (a: unknown): string => (isNumber(a) || isBoolean(a) || isClause(a) ? a.toString() : `'${a as string}'`);\n\nexport class Clause implements Text {\n constructor(\n readonly first: unknown,\n readonly operator: string,\n readonly second: unknown\n ) {}\n\n and = (other: Clause): Clause => new ParathesizedClause(this, 'AND', other);\n or = (other: Clause): Clause => new ParathesizedClause(this, 'OR', other);\n\n toString(): string {\n return `${this.first} ${this.operator} ${quote(this.second)}`;\n }\n}\n\nexport class ParathesizedClause extends Clause {\n toString(): string {\n return `(${this.first} ${this.operator} ${quote(this.second)})`;\n }\n}\n\nexport const toClause = (first: unknown, operator: string, second: unknown, conv: Convert = convert.default): Clause =>\n new Clause(first, operator, conv.from(second));\n\nexport const isClause: TypeGuard<Clause> = (c?: unknown): c is Clause => isA<Clause>(c, 'and', 'or');\n","import { Clause, toClause } from './Clause';\nimport { Table } from './Table';\nimport { Property, PropertyOptions } from '../utils/Property';\nimport { Json, JsonValue } from '../types/Json';\nimport { tryTo } from '../types/Try';\nimport { ofGet } from '../types/Get';\nimport type { Text } from '../types/Text';\n\nexport class Column extends Property implements Text {\n constructor(\n readonly owner: Table,\n property: string,\n options?: PropertyOptions\n ) {\n super(property, options);\n }\n\n get count(): Column {\n return this.function('COUNT');\n }\n\n get max(): Column {\n return this.function('MAX');\n }\n\n get min(): Column {\n return this.function('MIN');\n }\n\n get sum(): Column {\n return this.function('SUM');\n }\n\n get average(): Column {\n return this.function('AVG');\n }\n\n get length(): Column {\n return this.function('LEN');\n }\n\n get asc(): OrderColumn {\n return this.format('$col ASC') as OrderColumn;\n }\n\n get desc(): OrderColumn {\n return this.format('$col DESC') as OrderColumn;\n }\n\n in = (source: Json = {}): JsonValue =>\n tryTo(source)\n .map(s => s[this.property] ?? ofGet(this.options?.dflt))\n .map(v => this.options?.convert?.to(v))\n .orElse();\n\n out = (source: Json = {}, key = ''): JsonValue =>\n tryTo(source)\n .map(s => this.options?.convert?.from(s[key]))\n .orElse();\n\n function = (func: string): Column => this.format(`${func}($name)`);\n\n format = (pattern: string): Column => new PatternColumn(this, pattern);\n\n is = (value: unknown): Clause => this.clause('=', value);\n\n not = (value: unknown): Clause => this.clause('<>', value);\n\n like = (value: unknown): Clause => this.clause('LIKE', `%${value}%`);\n\n startsLike = (value: unknown): Clause => this.clause('LIKE', `${value}%`);\n\n endsLike = (value: unknown): Clause => this.clause('LIKE', `%${value}`);\n\n unlike = (value: unknown): Clause => this.clause('NOT LIKE', `%${value}%`);\n\n less = (value: unknown): Clause => this.clause('<', value);\n\n lessEqual = (value: unknown): Clause => this.clause('<=', value);\n\n greater = (value: unknown): Clause => this.clause('>', value);\n\n greaterEqual = (value: unknown): Clause => this.clause('>=', value);\n\n as = (as: string): Column => this.format(`$col AS ${as}`);\n\n toString(): string {\n return `${this.owner}.${this.property}`;\n }\n\n protected clause = (operator: string, value: unknown): Clause => toClause(this, operator, value, this?.options?.convert);\n}\n\nexport class PatternColumn extends Column {\n constructor(\n protected col: Column,\n protected pattern: string\n ) {\n super(col.owner, col.property);\n }\n\n toString(): string {\n return this.pattern.replace('$col', this.col.toString()).replace('$table', this.col.owner.toString).replace('$name', this.col.property);\n }\n}\n\nexport class OrderColumn extends PatternColumn {}\n","import { Query } from '../data/Query';\nimport { Table } from './Table';\nimport { Join } from './Join';\nimport { List, toList } from '../types/List';\nimport { Clause } from './Clause';\n\nexport class SqlQuery implements Query {\n constructor(\n protected table: Table | Join,\n readonly clauses: List<Clause> = toList()\n ) {}\n\n where = (...clauses: Clause[]): this => {\n this.clauses.add(clauses);\n return this;\n };\n}\n","import { SqlQuery } from './SqlQuery';\nimport { ifGet } from '../types/Get';\n\nexport class Delete extends SqlQuery {\n toString(): string {\n return `DELETE FROM ${this.table}` + ifGet(this.clauses.length, ` WHERE ${this.clauses.join(' AND ')};`, ';');\n }\n}\n","import { SqlQuery } from './SqlQuery';\nimport { quote } from './Clause';\nimport { Table } from './Table';\nimport { Json } from '../types/Json';\n\nexport class Insert extends SqlQuery {\n constructor(\n protected table: Table,\n protected fields: Json\n ) {\n super(table);\n }\n\n toString(): string {\n return (\n `INSERT INTO ${this.table} ` +\n `(${Object.keys(this.fields).join(', ')}) OUTPUT INSERTED.* ` +\n `VALUES (${Object.values(this.fields)\n .map(v => quote(v))\n .join(', ')});`\n );\n }\n}\n","import { Column } from './Column';\nimport { Table } from './Table';\n\nexport class Join {\n readonly db;\n constructor(private first: Table, private second: Table, private c?: Column, private c2?: Column) {\n this.db = this.first.db;\n }\n\n on(c: Column, c2: Column): this {\n this.c = c;\n this.c2 = c2;\n return this;\n }\n\n toString(): string {\n return `${this.first} JOIN ${this.second} ON ${this.c} = ${this.c2}`;\n }\n}\n","import { Column, OrderColumn } from './Column';\nimport { Join } from './Join';\nimport { SqlQuery } from './SqlQuery';\nimport { Table } from './Table';\nimport { List, toList } from '../types/List';\nimport { ifGet } from '../types/Get';\n\nexport class Select extends SqlQuery {\n protected ordered: List<OrderColumn> = toList();\n protected grouped: List<Column> = toList();\n protected _top = 0;\n protected _limit = 0;\n protected _offset = 0;\n\n constructor(\n table: Table | Join,\n readonly columns: List<Column> = toList()\n ) {\n super(table);\n }\n\n from(t?: Table | Join): this {\n this.table = t ?? this.table;\n return this;\n }\n\n orderBy = (...ordered: OrderColumn[]): this => {\n this.ordered.add(ordered);\n return this;\n };\n\n groupBy(...grouped: Column[]): this {\n this.grouped.add(grouped);\n return this;\n }\n\n top(t: number): this {\n this._top = t;\n return this;\n }\n\n limit(l: number): this {\n this._limit = l;\n return this;\n }\n\n offset(o: number): this {\n this._offset = o;\n return this;\n }\n\n toString(): string {\n return (\n `SELECT ` +\n ifGet(this._top, `TOP ${this._top} `, '') +\n ifGet(this.columns.length, this.columns.join(', '), '*') +\n ` FROM ${this.table}` +\n ifGet(this.clauses.length, ` WHERE ${this.clauses.join(' AND ')}`, '') +\n ifGet(this.grouped.length, ` GROUP BY ${this.grouped.join(', ')}`, '') +\n ifGet(this.ordered.length, ` ORDERED BY ${this.ordered.join(', ')}`, '') +\n ifGet(this._limit, ` LIMIT ${this._limit}`, '') +\n ifGet(this._offset, ` OFFSET ${this._offset};`, ';')\n );\n }\n}\n","import { SqlQuery } from './SqlQuery';\nimport { toClause } from './Clause';\nimport { Table } from './Table';\nimport { Json } from '../types/Json';\nimport { ifGet } from '../types/Get';\n\nexport class Update extends SqlQuery {\n constructor(\n protected table: Table,\n protected fields: Json\n ) {\n super(table);\n }\n\n toString(): string {\n return (\n `UPDATE ${this.table} ` +\n `SET ${Object.entries(this.fields)\n .map(([k, v]) => toClause(k, '=', v))\n .join(', ')} ` +\n 'OUTPUT INSERTED.*' +\n ifGet(this.clauses.length, ` WHERE ${this.clauses.join(' AND ')};`, ';')\n );\n }\n}\n","import { Select } from './Select';\nimport { ifGet } from '../types/Get';\n\nexport class Count extends Select {\n toString(): string {\n return (\n `SELECT COUNT(*)` +\n ifGet(this._top, ` TOP ${this._top}`, '') +\n ` FROM ${this.table}` +\n ifGet(this.clauses.length, ` WHERE ${this.clauses.join(' AND ')}`, '') +\n ifGet(this.grouped.length, ` GROUP BY ${this.grouped.join(', ')}`, '') +\n ';'\n );\n }\n}\n","import { Column } from './Column';\nimport { Select } from './Select';\nimport { Insert } from './Insert';\nimport { Update } from './Update';\nimport { Delete } from './Delete';\nimport { Join } from './Join';\nimport { Count } from './Count';\nimport { MapOptions, Mapper, mappings } from '../utils/Mapper';\nimport { PropertyOptions } from '../utils/Property';\nimport { toUuid } from '../types/Uuid';\nimport { Database } from '../data/Database';\nimport { toList } from '../types/List';\nimport { Json } from '../types/Json';\n\nexport class Table extends Mapper {\n protected readonly map = {\n ...mappings,\n column: <T = unknown>(name: string, options?: PropertyOptions<T>): Column => new Column(this, name, options),\n };\n\n readonly id = this.map.column('', { dflt: toUuid });\n\n constructor(options: MapOptions = { startFrom: 'source' }) {\n super(options);\n }\n\n get db(): Database {\n return Database.Default;\n }\n\n get count(): Count {\n return new Count(this);\n }\n\n /**\n * @deprecated Deprecated since version 6.2. Please use map.column instead.\n */\n prop = <T = unknown>(name: string, options?: PropertyOptions<T>): Column => this.map.column(name, options);\n\n select = (...columns: Column[]): Select => new Select(this, toList(columns));\n\n insert = (fields: Json): Insert => new Insert(this, this.out(fields));\n update = (fields: Json): Update => new Update(this, this.out(fields));\n delete = (): Delete => new Delete(this, toList());\n\n readonly join = (t: Table): Join => new Join(this, t);\n}\n","import { Table } from './Table';\nimport { PageList, PageOptions, toPageList } from '../types/PageList';\nimport { QueryProvider } from '../data/QueryProvider';\nimport { Gateway } from '../types/Gateway';\nimport { Json } from '../types/Json';\nimport { Id } from '../types/Id';\nimport { Optional } from '../types/Types';\nimport { ifDefined } from '../utils/If';\nimport { isDefined } from '../types/Is';\nimport { when } from '../validation/When';\n\nexport type TableOptions = PageOptions & { provider?: QueryProvider };\n\nexport class TableGateway<T extends Table> extends Gateway<PageOptions> {\n constructor(\n readonly table: T,\n readonly provider = table.db.provide<QueryProvider>()\n ) {\n super();\n }\n\n protected provide = ({ provider }: TableOptions = {}): QueryProvider => provider ?? this.provider;\n\n all(options?: TableOptions): Promise<PageList<Json>> {\n return this.provide(options)\n .query(this.table.select())\n .then(js =>\n toPageList(\n js.map(j => this.table.in(j)),\n options\n )\n );\n }\n\n byId(id: Id, options?: TableOptions): Promise<Optional<Json>> {\n return this.provide(options)\n .query(this.table.select().where(this.table.id.is(id)))\n .then(js => js.first())\n .then(j => ifDefined(j, this.table.in(j)));\n }\n\n exists(id: Id, options?: TableOptions): Promise<boolean> {\n return this.byId(id).then(j => isDefined(j));\n }\n\n add(item: Json, options?: TableOptions): Promise<Json> {\n return this.provide(options)\n .query(this.table.insert(item))\n .then(js => when(js.first()).not.isDefined.reject(`Could not add items with id ${item.id}`))\n .then(j => this.table.in(j));\n }\n\n remove(id: Id, options?: TableOptions): Promise<boolean> {\n return this.provide(options)\n .command(this.table.delete().where(this.table.id.is(id)))\n .then(() => true);\n }\n\n update(item: Json, options?: TableOptions): Promise<Json> {\n return this.provide(options)\n .query(this.table.update(item).where(this.table.id.is(item.id)))\n .then(js => when(js.first()).not.isDefined.reject(`Could not update item with id ${item.id}`))\n .then(j => this.table.in(j));\n }\n}\n","import { Constructor } from './Constructor';\nimport { asString } from './Text';\n\nclass builder {\n private static state: any = {};\n static singleton = <T>(ctr: Constructor<T>, ...args: any[]): T => builder.state[asString(ctr)] ?? (builder.state[asString(ctr)] = new ctr(...args));\n static reset = (): void => {\n builder.state = {};\n };\n}\n\nexport const build = {\n singleton: <T>(ctr: Constructor<T>, ...args: any[]): T => builder.singleton(ctr, ...args),\n reset: (): void => builder.reset(),\n};\n\nexport const singleton = <T>(ctr: Constructor<T>, ...args: any[]): T => build.singleton(ctr, ...args);\n","import { Func } from './Func';\nimport { CacheAge } from './CacheAge';\nimport { Construct } from './Constructor';\nimport { meta } from './Meta';\n\nexport interface Store<To = any, From = any> {\n execute: (fetch: From, f: Func<Promise<To>, From>) => Promise<To>;\n}\n\nexport type CacheOptions = {\n expiresIn?: CacheAge;\n store?: Construct<Store>;\n};\n\nexport const toCacheOptions = (co: Partial<CacheOptions>): CacheOptions => ({\n expiresIn: co.expiresIn ?? '5m',\n store: co.store,\n});\n\nexport const cache =\n (options: Partial<CacheOptions>): ClassDecorator =>\n (subject: unknown): void => {\n meta(subject).set('cache', toCacheOptions(options));\n };\n","import { isA } from './IsA';\n\nexport type Currency = {\n id: string;\n name: string;\n digits: number;\n code: string;\n};\n\nexport const isCurrency = (c?: unknown): c is Currency => isA<Currency>(c, 'id', 'name', 'digits', 'code');\n","import { Enum } from './Enum';\n\nexport class Environment extends Enum {\n static readonly Dev = new Environment('Development', 'dev');\n static readonly Tst = new Environment('Test', 'tst');\n static readonly Acc = new Environment('Acceptance', 'acc');\n static readonly Prd = new Environment('Production', 'prd');\n}\n","type Falsy = false | 0 | 0n | '' | null | undefined;\ntype Truthy<T = unknown> = Exclude<T, Falsy>;\n\nexport const isFalsy = (v?: unknown): v is Falsy => !v;\nexport const isTruthy = (v?: unknown): v is Truthy => !isFalsy(v);\n","import { isA } from './IsA';\n\nexport type Indexed<T> = T & { index: number };\n\nexport const isIndexed = <T>(u: unknown): u is Indexed<T> => isA<Indexed<T>>(u, 'index');\n","import { Func, isFunc } from './Func';\n\nexport type Message<Args> = string | Func<string, Args>;\n\nexport const ofMessage = <Args>(g: Message<Args>, ...params: Args[]): string => (isFunc<string, Args>(g) ? g(...params) : g);\n","export type Nullish = null | undefined;\n\nexport const isNullish = (v?: unknown): v is Nullish => v == null;\n","import { Get, ofGet, Predicate } from './Get';\nimport { isDefined, isEmpty, isIn, isObject, isString, isTrue } from './Is';\nimport { isValid } from '../validation/Validate';\nimport { Constructor, on } from './Constructor';\nimport { toArray } from './Array';\n\nexport class Parser<T, V> {\n if = {\n equals: (pred?: Predicate<T>): this => this.evaluate(isTrue, pred),\n empty: <U>(pred?: Get<U, T>): this => this.evaluate(isEmpty, pred),\n defined: <U>(pred?: Get<U, T>): this => this.evaluate(isDefined, pred),\n valid: <U>(pred?: Get<U, T>): this => this.evaluate(isValid, pred),\n in: (...items: T[]): this => this.evaluate(() => isIn(this.value, toArray(...items))),\n is: {\n object: <U>(pred?: Get<U, T>): this => this.evaluate(isObject, pred),\n string: <U>(pred?: Get<U, T>): this => this.evaluate(isString, pred),\n instance: <U>(c: Constructor<U>, pred?: Get<U, T>): this => this.evaluate(() => this.value instanceof c, pred),\n },\n not: {\n empty: <U>(pred?: Get<U, T>): this => this.evaluateNot(isEmpty, pred),\n defined: <U>(pred?: Get<U, T>): this => this.evaluateNot(isDefined, pred),\n valid: <U>(pred?: Get<U, T>): this => this.evaluateNot(isValid, pred),\n isObject: <U>(pred?: Get<U, T>): this => this.evaluateNot(isObject, pred),\n in: (...items: T[]): this => this.evaluate(() => !isIn(this.value, toArray(...items))),\n is: {\n object: <U>(pred?: Get<U, T>): this => this.evaluateNot(isObject, pred),\n string: <U>(pred?: Get<U, T>): this => this.evaluateNot(isString, pred),\n instance: <U>(c: Constructor<U>, pred?: Get<U, T>): this => this.evaluate(() => !(this.value instanceof c), pred),\n },\n },\n };\n\n constructor(\n protected value: T,\n protected valid = true\n ) {}\n\n protected evaluate<U>(meta: Get<boolean>, pred?: Get<U, T>): this {\n return on(this, t => (t.valid = ofGet(meta, pred ? ofGet(pred, this.value) : this.value)));\n }\n\n protected evaluateNot<U>(meta: Get<boolean>, pred?: Get<U, T>): this {\n return on(this, t => (t.valid = !ofGet(meta, pred ? ofGet(pred, this.value) : this.value)));\n }\n}\n","export const asc = 1;\nexport const desc = -1;\nexport type SortDirection = typeof asc | typeof desc;\nexport type Sort = { key: string; value: SortDirection };\nexport type PlainSort = Record<string, SortDirection> | string[];\n","import { meta } from './Meta';\n\nexport const tag =\n (name: string): PropertyDecorator =>\n (subject: unknown, property: string | symbol): void => {\n meta(subject).property(property).set(name, property);\n };\n\nexport const searchable = (): PropertyDecorator => tag(searchable.name);\n","import { isBoolean, isNotEmpty, isTrue } from './Is';\nimport { asString, Text } from './Text';\nimport { toName } from './Constructor';\nimport { ctx } from './Context';\nimport { List, toList } from './List';\nimport { meta } from './Meta';\nimport { tryTo } from './Try';\nimport { Optional } from './Types';\nimport { OneOrMore, toArray } from './Array';\nimport { entries } from './Object';\n\nexport type Segment = Text & { key?: string; segment?: string; query?: (value: unknown) => string };\n\nexport const toSegment = (\n key?: Text,\n {\n segment,\n query,\n }: {\n segment?: string;\n query?: (value: unknown) => string;\n } = {}\n): Segment => ({\n key: key as string,\n segment,\n query,\n toString: () => asString(key),\n});\n\nexport const uri = {\n host: (key?: string): Segment => toSegment(key, { segment: key ?? ctx.env.host ?? '$host' }),\n resource: <Props extends UriExpandProps>(resource: Uri<Props>): Segment => toSegment(toName(resource, 'Uri'), { segment: toName(resource, 'Uri') }),\n segment: (key?: Text): Segment => toSegment(key, { segment: key as string }),\n path: (key: Text): Segment => toSegment(key, { segment: `:${key}` }),\n query: (key: Text): Segment =>\n toSegment(key, {\n query: (value: unknown): string =>\n tryTo(value)\n .is.defined()\n .map(v => encodeURIComponent(asString(v)))\n .map(v => `${key}=${v}`)\n .orElse('') ?? '',\n }),\n boolean: (key: Text): Segment => toSegment(key, { query: (value: unknown): string => (isTrue(value) ? `${key}` : '') }),\n};\n\ntype Prop = { segment: Segment; value: any };\n\nconst toRoute = (...segments: Segment[]): string =>\n toList(segments)\n .mapDefined(s => s.segment)\n .join('/');\n\nexport type Uri<Props extends UriExpandProps = UriExpandProps> = {\n id: (id?: unknown) => Uri<Props>;\n ids: (ids: OneOrMore<unknown>) => Uri<Props>;\n query: (q?: unknown) => Uri<Props>;\n sort: (q?: any) => Uri<Props>;\n skip: (n?: number) => Uri<Props>;\n take: (n?: number) => Uri<Props>;\n path: string;\n route: (resource: string) => string;\n isInternal: boolean;\n toString: () => string;\n expand: (props: Partial<Props>) => Uri<Props>;\n};\n\nexport type UriExpandProps = { q?: string; s?: string; skip?: number; take?: number };\n\nexport class EasyUri<Props extends UriExpandProps = UriExpandProps> implements Uri<Props> {\n static readonly id = uri.path('id');\n static readonly ids = uri.query('ids');\n static readonly query = uri.query('q');\n static readonly sort = uri.query('s');\n static readonly skip = uri.query('skip');\n static readonly take = uri.query('take');\n\n readonly host = uri.host();\n protected resource: Segment = uri.resource(this);\n\n protected state: any = {};\n\n constructor(readonly segments: Segment[] = []) {}\n\n get path(): string {\n return toRoute(uri.segment(''), this.resource, ...this.segments);\n }\n\n get complete(): string {\n return toRoute(this.host, this.resource, ...this.segments);\n }\n\n get isInternal(): boolean {\n return toRoute(this.host) === (ctx.env.host ?? '$host');\n }\n\n protected get props(): List<Prop> {\n return meta(this.state).values<Prop>();\n }\n\n route = (resource: Optional<string> = this.resource.key): string => toRoute(uri.segment(''), uri.segment(resource?.toLowerCase()), ...this.segments);\n\n set = (segment: Segment, value?: unknown): this => {\n tryTo(value)\n .is.defined()\n .accept(value => (this.state[segment.key ?? ''] = { segment, value }));\n return this;\n };\n\n toString(): string {\n return tryTo(() => this.props)\n .map(ps => ps.filter(p => p.segment?.segment))\n .map(ps => ps.reduce((r: string, p: Prop) => r.replace(asString(p.segment.segment), asString(p.value)), this.complete))\n .map(route => ({\n route,\n query: this.props.mapDefined(p => (p.segment?.query ? p.segment?.query(p.value) : undefined))?.join('&'),\n }))\n .map(({ route, query }) => (isNotEmpty(query) ? `${route}?${query}` : route)).value;\n }\n\n id = (id?: unknown): this => this.set(EasyUri.id, id);\n ids = (ids: OneOrMore<unknown>): this => this.set(EasyUri.ids, toArray(ids).join(','));\n query = (q?: unknown): this => this.set(EasyUri.query, q);\n sort = (s?: any): this => this.set(EasyUri.sort, asString(s));\n\n skip = (index?: number): this => this.set(EasyUri.skip, index);\n take = (items?: number): this => this.set(EasyUri.take, items);\n\n expand(props: Partial<Props>): this {\n return entries(props as any)\n .filter(([_, v]) => isNotEmpty(v))\n .reduce((u, [k, v]) => (isBoolean(v) ? u.set(uri.boolean(k), v) : u.set(uri.query(k), toArray(v).join(','))), this);\n }\n}\n\nexport const clipUri = (uri?: EasyUri | string | null): string =>\n tryTo(() => asString(uri))\n .map(uri => uri.replace(/^(https?:\\/\\/)?(www\\.)?/, ''))\n .map(uri => uri.replace(/\\/$/, '')).value;\n","import type { Json } from '../types/Json';\n\nexport const base64 = {\n decode: (data: string): string => Buffer.from(data, 'base64').toString('utf-8'),\n encode: (data: string): string => Buffer.from(data, 'utf-8').toString('base64'),\n toJson: (data: string): Json => JSON.parse(base64.decode(data)),\n};\n","import { isNotPresent } from '../types/Is';\n\nexport const isLoading = (...targets: unknown[]): boolean => isNotPresent(...targets);\n","import { Optional } from '../types/Types';\n\nexport function log<T>(t: T): T;\nexport function log<T>(label: string, t: T): T;\nexport function log<T>(labelOrT: string | T, t?: T): T {\n if (t) {\n console.log(labelOrT as string, t);\n return t;\n } else {\n console.log(labelOrT);\n return labelOrT as T;\n }\n}\nexport function dir<T>(t?: T): Optional<T> {\n console.dir(t, { depth: 200 });\n return t;\n}\n","import type { Text } from '../types/Text';\nimport { Id } from '../types/Id';\nimport { text } from '../types/ToText';\n\nexport class Sentence implements Text {\n constructor(\n word: Text,\n pre?: Sentence,\n private sentence: Text[] = (pre?.sentence ?? []).concat(word)\n ) {}\n\n toString(): string {\n return text(this.sentence.join(' ')).sentence.toString();\n }\n}\n\nclass Topic extends Sentence {\n it = new Sentence('it', this);\n anything = new Sentence('anything', this);\n id = (id: Id) => new Sentence(`id '${id}'`, this);\n your = (subject?: Text) => new Sentence(`your ${subject ?? 'item'}`, this);\n a = (subject?: Text) => new Sentence(subject ? `a ${subject}` : 'an item', this);\n an = (subject?: Text) => new Sentence(`an ${subject ?? 'item'}`, this);\n any = (subjects?: Text) => new Sentence(`any ${subjects ?? 'items'}`, this);\n}\n\nclass Verb extends Sentence {\n add = new Topic('add', this);\n check = new Topic('check', this);\n fetch = new Topic('fetch', this);\n find = new Topic('find', this);\n like = new Topic('like', this);\n process = new Topic('process', this);\n remove = new Topic('remove', this);\n translate = new Topic('translate', this);\n update = new Topic('update', this);\n validate = new Topic('validate', this);\n}\n\nclass Not extends Verb {}\n\nclass SupportVerb extends Verb {\n not = new Not('not', this);\n}\n\nclass We extends Sentence {\n could = new SupportVerb('could', this);\n did = new SupportVerb('did', this);\n\n added = new Topic('added', this);\n checked = new Topic('checked', this);\n fetched = new Topic('fetched', this);\n found = new Topic('found', this);\n liked = new Topic('liked', this);\n processed = new Topic('processed', this);\n removed = new Topic('removed', this);\n translated = new Topic('translated', this);\n updated = new Topic('updated', this);\n validated = new Topic('validated', this);\n}\n\nexport const we = new We('we');\n","export class Wait {\n static wait(ms = 0): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n static seconds(s = 0) {\n return this.wait(s * 1000);\n }\n}\n\nexport const wait = (millis: number) => Wait.wait(millis);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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","names":["values","valid","keys","acc","keys","acc","on","o","keys","s","keys","rest","a","template","s","valid","k","template","constraint","keys","days","seconds","days","s","LuxonDateTime","dt","values","v","json","uuid","json","json","view","n","formUrlEncoded","validate","meta","json","s","decode","isResponse","uri","axios","uri","api","uri","api","api","uri","json","key","optional","views","keys","views","api","uri","valid","meta","value","uri","resolve"]}
|