@lightningkite/ktor-batteries
Version:
484 lines (423 loc) • 17.6 kB
text/typescript
// Package: com.lightningkite.ktordb
// Generated by Khrysalis - this file will be overwritten.
import { Condition } from './Condition'
import { keySet } from './TProperty1Extensions'
import { EqualOverrideSet, ReifiedType, TProperty1, cMax, cMin, reflectiveGet, setUpDataClass, tryCastClass, xIterableMinusMultiple } from '@lightningkite/khrysalis-runtime'
import { filter, map, reduce, toArray } from 'iter-tools-es'
//! Declares com.lightningkite.ktordb.Modification
export class Modification<T extends any> {
protected constructor() {
}
public hashCode(): number { throw undefined; }
public equals(other: (any | null)): boolean { throw undefined; }
public invoke(on: T): T { throw undefined; }
public invokeDefault(): T { throw undefined; }
public then(other: Modification<T>): Modification.Chain<T> {
return new Modification.Chain<T>([this, other]);
}
}
export namespace Modification {
//! Declares com.lightningkite.ktordb.Modification.Chain
export class Chain<T extends any> extends Modification<T> {
public constructor(public readonly modifications: Array<Modification<T>>) {
super();
}
public static properties = ["modifications"]
public static propertyTypes(T: ReifiedType) { return {modifications: [Array, [Modification, T]]} }
copy: (values: Partial<Chain<T>>) => this;
equals: (other: any) => boolean;
hashCode: () => number;
public invoke(on: T): T {
return reduce(on, (item: T, mod: Modification<T>): T => (mod.invoke(item)), this.modifications);
}
public invokeDefault(): T {
const on = this.modifications[0].invokeDefault();
return reduce(on, (item: T, mod: Modification<T>): T => (mod.invoke(item)), this.modifications.slice(1));
}
}
setUpDataClass(Chain)
}
export namespace Modification {
//! Declares com.lightningkite.ktordb.Modification.IfNotNull
export class IfNotNull<T extends any> extends Modification<(T | null)> {
public constructor(public readonly modification: Modification<T>) {
super();
}
public static properties = ["modification"]
public static propertyTypes(T: ReifiedType) { return {modification: [Modification, T]} }
copy: (values: Partial<IfNotNull<T>>) => this;
equals: (other: any) => boolean;
hashCode: () => number;
public invoke(on: (T | null)): (T | null) {
return ((): (T | null) => {
const temp6 = on;
if(temp6 === null) { return null }
return ((it: T): T => (this.modification.invoke(it)))(temp6)
})();
}
public invokeDefault(): (T | null) {
return null;
}
}
setUpDataClass(IfNotNull)
}
export namespace Modification {
//! Declares com.lightningkite.ktordb.Modification.Assign
export class Assign<T extends any> extends Modification<T> {
public constructor(public readonly value: T) {
super();
}
public static properties = ["value"]
public static propertyTypes(T: ReifiedType) { return {value: T} }
copy: (values: Partial<Assign<T>>) => this;
equals: (other: any) => boolean;
hashCode: () => number;
public invoke(on: T): T {
return this.value;
}
public invokeDefault(): T {
return this.value;
}
}
setUpDataClass(Assign)
}
export namespace Modification {
//! Declares com.lightningkite.ktordb.Modification.CoerceAtMost
export class CoerceAtMost<T extends any> extends Modification<T> {
public constructor(public readonly value: T) {
super();
}
public static properties = ["value"]
public static propertyTypes(T: ReifiedType) { return {value: T} }
copy: (values: Partial<CoerceAtMost<T>>) => this;
equals: (other: any) => boolean;
hashCode: () => number;
public invoke(on: T): T {
return cMin(on, this.value);
}
public invokeDefault(): T {
return this.value;
}
}
setUpDataClass(CoerceAtMost)
}
export namespace Modification {
//! Declares com.lightningkite.ktordb.Modification.CoerceAtLeast
export class CoerceAtLeast<T extends any> extends Modification<T> {
public constructor(public readonly value: T) {
super();
}
public static properties = ["value"]
public static propertyTypes(T: ReifiedType) { return {value: T} }
copy: (values: Partial<CoerceAtLeast<T>>) => this;
equals: (other: any) => boolean;
hashCode: () => number;
public invoke(on: T): T {
return cMax(on, this.value);
}
public invokeDefault(): T {
return this.value;
}
}
setUpDataClass(CoerceAtLeast)
}
export namespace Modification {
//! Declares com.lightningkite.ktordb.Modification.Increment
export class Increment<T extends number> extends Modification<T> {
public constructor(public readonly by: T) {
super();
}
public static properties = ["by"]
public static propertyTypes(T: ReifiedType) { return {by: T} }
copy: (values: Partial<Increment<T>>) => this;
equals: (other: any) => boolean;
hashCode: () => number;
public invoke(on: T): T {
return (on + this.by) as T;
}
public invokeDefault(): T {
return this.by;
}
}
setUpDataClass(Increment)
}
export namespace Modification {
//! Declares com.lightningkite.ktordb.Modification.Multiply
export class Multiply<T extends number> extends Modification<T> {
public constructor(public readonly by: T) {
super();
}
public static properties = ["by"]
public static propertyTypes(T: ReifiedType) { return {by: T} }
copy: (values: Partial<Multiply<T>>) => this;
equals: (other: any) => boolean;
hashCode: () => number;
public invoke(on: T): T {
return (on * this.by) as T;
}
public invokeDefault(): T {
return ((): T => {
if (typeof (this.by) === "number") {
return 0 as T
} else if (typeof (this.by) === "number") {
return 0 as T
} else if (typeof (this.by) === "number") {
return 0 as T
} else if (typeof (this.by) === "number") {
return 0 as T
} else if (typeof (this.by) === "number") {
return 0 as T
} else if (typeof (this.by) === "number") {
return 0.0 as T
} else {
throw undefined
}
})();
}
}
setUpDataClass(Multiply)
}
export namespace Modification {
//! Declares com.lightningkite.ktordb.Modification.AppendString
export class AppendString extends Modification<string> {
public constructor(public readonly value: string) {
super();
}
public static properties = ["value"]
public static propertyTypes() { return {value: [String]} }
copy: (values: Partial<AppendString>) => this;
equals: (other: any) => boolean;
hashCode: () => number;
public invoke(on: string): string {
return on + this.value;
}
public invokeDefault(): string {
return this.value;
}
}
setUpDataClass(AppendString)
}
export namespace Modification {
//! Declares com.lightningkite.ktordb.Modification.AppendList
export class AppendList<T extends any> extends Modification<Array<T>> {
public constructor(public readonly items: Array<T>) {
super();
}
public static properties = ["items"]
public static propertyTypes(T: ReifiedType) { return {items: [Array, T]} }
copy: (values: Partial<AppendList<T>>) => this;
equals: (other: any) => boolean;
hashCode: () => number;
public invoke(on: Array<T>): Array<T> {
return on.concat(this.items);
}
public invokeDefault(): Array<T> {
return this.items;
}
}
setUpDataClass(AppendList)
}
export namespace Modification {
//! Declares com.lightningkite.ktordb.Modification.AppendSet
export class AppendSet<T extends any> extends Modification<Array<T>> {
public constructor(public readonly items: Array<T>) {
super();
}
public static properties = ["items"]
public static propertyTypes(T: ReifiedType) { return {items: [Array, T]} }
copy: (values: Partial<AppendSet<T>>) => this;
equals: (other: any) => boolean;
hashCode: () => number;
public invoke(on: Array<T>): Array<T> {
return toArray(new EqualOverrideSet((on.concat(this.items))));
}
public invokeDefault(): Array<T> {
return this.items;
}
}
setUpDataClass(AppendSet)
}
export namespace Modification {
//! Declares com.lightningkite.ktordb.Modification.Remove
export class Remove<T extends any> extends Modification<Array<T>> {
public constructor(public readonly condition: Condition<T>) {
super();
}
public static properties = ["condition"]
public static propertyTypes(T: ReifiedType) { return {condition: [Condition, T]} }
copy: (values: Partial<Remove<T>>) => this;
equals: (other: any) => boolean;
hashCode: () => number;
public invoke(on: Array<T>): Array<T> {
return on.filter((it: T): boolean => ((!this.condition.invoke(it))));
}
public invokeDefault(): Array<T> {
return [];
}
}
setUpDataClass(Remove)
}
export namespace Modification {
//! Declares com.lightningkite.ktordb.Modification.RemoveInstances
export class RemoveInstances<T extends any> extends Modification<Array<T>> {
public constructor(public readonly items: Array<T>) {
super();
}
public static properties = ["items"]
public static propertyTypes(T: ReifiedType) { return {items: [Array, T]} }
copy: (values: Partial<RemoveInstances<T>>) => this;
equals: (other: any) => boolean;
hashCode: () => number;
public invoke(on: Array<T>): Array<T> {
return xIterableMinusMultiple(on, this.items);
}
public invokeDefault(): Array<T> {
return [];
}
}
setUpDataClass(RemoveInstances)
}
export namespace Modification {
//! Declares com.lightningkite.ktordb.Modification.DropFirst
export class DropFirst<T extends any> extends Modification<Array<T>> {
public constructor() {
super();
}
public invoke(on: Array<T>): Array<T> {
return on.slice(1);
}
public invokeDefault(): Array<T> {
return [];
}
public hashCode(): number {
return 1;
}
public equals(other: (any | null)): boolean {
return (tryCastClass<Modification.DropFirst<T>>(other, Modification.DropFirst)) !== null;
}
}
}
export namespace Modification {
//! Declares com.lightningkite.ktordb.Modification.DropLast
export class DropLast<T extends any> extends Modification<Array<T>> {
public constructor() {
super();
}
public invoke(on: Array<T>): Array<T> {
return on.slice(0, -1);
}
public invokeDefault(): Array<T> {
return [];
}
public hashCode(): number {
return 1;
}
public equals(other: (any | null)): boolean {
return (tryCastClass<Modification.DropLast<T>>(other, Modification.DropLast)) !== null;
}
}
}
export namespace Modification {
//! Declares com.lightningkite.ktordb.Modification.PerElement
export class PerElement<T extends any> extends Modification<Array<T>> {
public constructor(public readonly condition: Condition<T>, public readonly modification: Modification<T>) {
super();
}
public static properties = ["condition", "modification"]
public static propertyTypes(T: ReifiedType) { return {condition: [Condition, T], modification: [Modification, T]} }
copy: (values: Partial<PerElement<T>>) => this;
equals: (other: any) => boolean;
hashCode: () => number;
public invoke(on: Array<T>): Array<T> {
return on.map((it: T): T => (this.condition.invoke(it) ? this.modification.invoke(it) : it));
}
public invokeDefault(): Array<T> {
return [];
}
}
setUpDataClass(PerElement)
}
export namespace Modification {
//! Declares com.lightningkite.ktordb.Modification.Combine
export class Combine<T extends any> extends Modification<Map<string, T>> {
public constructor(public readonly map: Map<string, T>) {
super();
}
public static properties = ["map"]
public static propertyTypes(T: ReifiedType) { return {map: [Map, [String], T]} }
copy: (values: Partial<Combine<T>>) => this;
equals: (other: any) => boolean;
hashCode: () => number;
public invoke(on: Map<string, T>): Map<string, T> {
return new Map([...on, ...this.map]);
}
public invokeDefault(): Map<string, T> {
return this.map;
}
}
setUpDataClass(Combine)
}
export namespace Modification {
//! Declares com.lightningkite.ktordb.Modification.ModifyByKey
export class ModifyByKey<T extends any> extends Modification<Map<string, T>> {
public constructor(public readonly map: Map<string, Modification<T>>) {
super();
}
public static properties = ["map"]
public static propertyTypes(T: ReifiedType) { return {map: [Map, [String], [Modification, T]]} }
copy: (values: Partial<ModifyByKey<T>>) => this;
equals: (other: any) => boolean;
hashCode: () => number;
public invoke(on: Map<string, T>): Map<string, T> {
return new Map([...on, ...new Map(map(x => [x[0], ((it: [string, Modification<T>]): T => ((((): (T | null) => {
const temp25 = (on.get(it[0]) ?? null);
if(temp25 === null) { return null }
return ((e: T): T => (it[1].invoke(e)))(temp25)
})() ?? it[1].invokeDefault())))(x)], this.map.entries()))]);
}
public invokeDefault(): Map<string, T> {
return new Map(map(x => [x[0], ((it: [string, Modification<T>]): T => (it[1].invokeDefault()))(x)], this.map.entries()));
}
}
setUpDataClass(ModifyByKey)
}
export namespace Modification {
//! Declares com.lightningkite.ktordb.Modification.RemoveKeys
export class RemoveKeys<T extends any> extends Modification<Map<string, T>> {
public constructor(public readonly fields: Set<string>) {
super();
}
public static properties = ["fields"]
public static propertyTypes(T: ReifiedType) { return {fields: [Set, [String]]} }
copy: (values: Partial<RemoveKeys<T>>) => this;
equals: (other: any) => boolean;
hashCode: () => number;
public invoke(on: Map<string, T>): Map<string, T> {
return new Map(filter(x => ((it: string): boolean => (!(this.fields.has(it))))(x[0]), on.entries()));
}
public invokeDefault(): Map<string, T> {
return new Map([]);
}
}
setUpDataClass(RemoveKeys)
}
export namespace Modification {
//! Declares com.lightningkite.ktordb.Modification.OnField
export class OnField<K extends any, V extends any> extends Modification<K> {
public constructor(public readonly key: TProperty1<K, V>, public readonly modification: Modification<V>) {
super();
}
public static properties = ["key", "modification"]
public static propertyTypes(K: ReifiedType, V: ReifiedType) { return {key: [String, K, V], modification: [Modification, V]} }
copy: (values: Partial<OnField<K, V>>) => this;
equals: (other: any) => boolean;
hashCode: () => number;
public invoke(on: K): K {
return keySet(on, this.key, this.modification.invoke(reflectiveGet(on, this.key)));
}
public invokeDefault(): K {
throw "Cannot mutate a field that doesn't exist";
}
}
setUpDataClass(OnField)
}