import { Constructor, Expression, expression } from '../expressions' import { ArrayType, BooleanType, IntegerType, TextType, JSONBType, JSONType, MathLiteral, CharacterArg } from '../types' export function JSONOps (Base: T) { return class JSONOps extends Base { get (item: Expression | MathLiteral | CharacterArg): Expression | Expression { return expression`${this} -> ${item}` } getText (item: Expression | MathLiteral | CharacterArg): Expression { return expression`${this} ->> ${item}` } getByPath (path: Expression> | Array): Expression | Expression { return expression`${this} #> ${path}` } getTextByPath (path: Expression> | Array): Expression { return expression`${this} #>> ${path}` } includes (text: CharacterArg): Expression { return expression`${this} ? ${text}` } includesAny (text: Expression> | Array): Expression { return expression`${this} ?| ${text}` } includesAll (text: Expression> | Array): Expression { return expression`${this} ?& ${text}` } unset (item: CharacterArg | Expression | MathLiteral): Expression { return expression`${this} - ${item}` } unsetAll (item: Expression> | Array): Expression { return expression`${this} - ${item}` } unsetByPath (path: Expression> | Array): Expression { return expression`${this} #- ${path}` } jsonPathExist (path: CharacterArg): Expression { return expression`${this} @? ${path}` } jsonPathCheck (path: CharacterArg): Expression { return expression`${this} @@ ${path}` } } }