import * as gracely from "gracely" import * as isoly from "isoly" import { Processor } from "./Processor" import { Reconciliation } from "./Reconciliation" import { Risk } from "./Risk" import { Rules } from "./Rules" export interface Creatable { activated?: isoly.Date categoryCode?: string country?: isoly.CountryCode.Alpha2 currency?: isoly.Currency descriptor: string | { statement: string; soft: boolean } guard?: string[] name: string number?: string processor?: Processor | { visa: Processor; mastercard: Processor } | "baboba" psp: typeof Creatable.psps[number] reconciliation?: Reconciliation risk?: Risk rules?: Rules storage?: "cosmos" | "cloudly" website?: string } export namespace Creatable { export const psps = ["intergiro", "cleanpay", "devcode", "transact365"] export function is(value: any | Creatable): value is Creatable { return ( typeof value == "object" && value && (value.activated == undefined || isoly.Date.is(value.activated)) && ((typeof value.descriptor == "string" && value.descriptor.length > 0) || (typeof value.descriptor == "object" && value.descriptor && value.descriptor.statement == "string" && value.descriptor.statement.length > 0 && typeof value.descriptor.soft == "boolean")) && typeof value.name == "string" && value.name.length > 0 && psps.includes(value.psp) && (value.number == undefined || typeof value.number == "string") && (value.country == undefined || isoly.CountryCode.Alpha2.is(value.country)) && (value.categoryCode == undefined || typeof value.categoryCode == "string") && (value.currency == undefined || isoly.Currency.is(value.currency)) && (value.reconciliation == undefined || Reconciliation.is(value.reconciliation)) && (value.processor == undefined || Processor.is(value.processor) || (typeof value.processor == "object" && value.processor && Processor.is(value.processor.visa) && Processor.is(value.processor.mastercard)) || value.processor == "baboba") && Risk.is(value.risk) && (value.rules == undefined || Rules.is(value.rules)) && (value.guard == undefined || (Array.isArray(value.guard) && value.guard.every((g: any) => typeof g == "string"))) && (value.website == undefined || typeof value.website == "string") && (value.storage == undefined || value.storage == "cosmos" || value.storage == "cloudly") ) } export function flaw(value: any | Creatable): gracely.Flaw { return { type: "Merchant", flaws: typeof value != "object" || !value ? undefined : ([ value.activated == undefined || isoly.Date.is(value.activated) || { property: "activated", type: "isoly.Date" }, (typeof value.descriptor == "string" && value.descriptor.length > 0) || (typeof value.descriptor == "object" && value.descriptor && value.descriptor.statement == "string" && value.descriptor.statement.length > 0 && typeof value.descriptor.soft == "boolean") || { property: "descriptor", type: "string | { statement: string, soft: boolean }", }, (typeof value.name == "string" && value.name.length > 0) || { property: "name", type: "string" }, psps.includes(value.psp) || { property: "psp", type: psps.map(psp => `"${psp}"`).join(" | "), }, value.number == undefined || typeof value.number == "string" || { property: "number", type: "string | undefined" }, value.country == undefined || isoly.CountryCode.Alpha2.is(value.country) || { property: "country", type: "undefined | isoly.CountryCode.Alpha2", }, value.reconciliation == undefined || Reconciliation.is(value.reconciliation) || Reconciliation.flaw(value.reconciliation), value.processor == undefined || Processor.is(value.processor) || (typeof value.processor == "object" && value.processor && Processor.is(value.processor.visa) && Processor.is(value.processor.mastercard)) || value.processor == "baboba" || { property: "processor", type: 'undefined | Processor | { visa: Processor; mastercard: Processor } | "baboba"', }, Risk.is(value.risk) || { property: "risk", type: "risk" }, Rules.is(value.rules) || Rules.flaw(value.rules), value.guard == undefined || (Array.isArray(value.guard) && value.guard.every((g: any) => typeof g == "string")) || { property: "guard", type: "undefined | string[]", }, value.website == undefined || typeof value.website == "string" || { property: "website", type: "undefined | string", }, value.storage == undefined || value.storage == "cosmos" || value.storage == "cloudly" || { property: "storage", type: '"cosmos" | "cloudly" | undefined', }, ].filter(gracely.Flaw.is) as gracely.Flaw[]), } } }