{"version":3,"sources":["assertion.ts"],"sourcesContent":["import { VOID } from \"../runtime/constants.ts\";\nimport type { datex_scope } from \"../utils/global_types.ts\";\nimport type { ValueConsumer } from \"./abstract_types.ts\";\nimport { AssertionError, RuntimeError, ValueError } from \"./errors.ts\";\nimport { ExtensibleFunction } from \"./function-utils.ts\";\nimport { Callable } from \"./function.ts\";\nimport { Scope } from \"./scope.ts\";\nimport { Tuple } from \"./tuple.ts\";\n\nexport class Assertion<T=any> extends ExtensibleFunction implements ValueConsumer {\n\n    // datex scope\n    scope:Scope\n    // native js function\n    ntarget:(...values:any[])=>Promise<boolean|string|undefined>|boolean|string|undefined\n    ntarget_async:boolean // does ntarget return a promise\n    \n\n    public static get<T extends (...values:any[])=>Promise<boolean|string|undefined>|boolean|string|undefined = (...values:any[])=>Promise<boolean|string|undefined>|boolean|string|undefined>(\n        scope?:Scope, \n        ntarget?:T, \n        ntarget_async = true\n    ):Assertion & Callable<Parameters<T>, void|Promise<void>> {\n        return <Assertion & Callable<Parameters<T>, void|Promise<void>>> new Assertion(scope, ntarget, ntarget_async);\n    }\n\n\n    // assertion function/datex: return true or void if okay, otherwise return a string or false\n    // TODO constructor should be private, but ts error with setJSInterface\n    constructor(scope?:Scope, ntarget?:(...values:any[])=>Promise<boolean|string|undefined>|boolean|string|undefined, ntarget_async = true) {\n        super((...args:any[]) => this.handleApply(new Tuple(args)));\n        this.scope = scope;\n        this.ntarget = ntarget;\n        this.ntarget_async = ntarget_async;\n    }\n\n    \n    assert(value:T|Tuple<T>, SCOPE?:datex_scope, return_boolean = false): boolean|Promise<boolean> {\n        // ntarget\n        if (this.ntarget) {\n            if (this.ntarget_async) return this.checkResultPromise(<Promise<string | boolean>>this.ntarget(...(value instanceof Tuple ? value.toArray() : (value instanceof Array ? value : [value]))), return_boolean)\n            else return this.checkResult(<string | boolean>this.ntarget(...(value instanceof Tuple ? value.toArray() : (value instanceof Array ? value : [value]))), return_boolean)\n        }\n\n        // datex\n        else if (this.scope) return this.checkResultPromise(this.scope.execute(SCOPE?.sender, SCOPE?.context, value), return_boolean);\n\n        // invalid\n        else throw new RuntimeError(\"Cannot execute <Assertion>\");\n    }\n\n    private async checkResultPromise(valid_promise:Promise<string|boolean|undefined>, return_boolean = false) {\n        return this.checkResult(await valid_promise, return_boolean);\n    }\n\n    private checkResult(valid:string|boolean|undefined, return_boolean = false):boolean {\n        if (return_boolean) return valid === true || valid === VOID\n\n        if (valid !== true && valid !== VOID) {\n            if (valid == false) throw new AssertionError(this.scope?.decompiled ? `${this.scope.decompiled.replace(/;$/,'')} is false` : 'Invalid');\n            else if (typeof valid == \"string\") throw new AssertionError(valid);\n            else throw new ValueError(\"Invalid assertion result - must be of type <float>, <boolean>, or <text>\")\n        }\n        return true;\n    }\n\n    handleApply(value: T|Tuple<T>, SCOPE?: datex_scope) {\n        return this.assert(value, SCOPE);\n    }\n}"],"names":["VOID","AssertionError","RuntimeError","ValueError","ExtensibleFunction","Tuple","Assertion","scope","ntarget","ntarget_async","get","constructor","args","handleApply","assert","value","SCOPE","return_boolean","checkResultPromise","toArray","Array","checkResult","execute","sender","context","valid_promise","valid","decompiled","replace"],"mappings":"AAAA,SAASA,IAAI,QAAQ,0BAA0B;AAG/C,SAASC,cAAc,EAAEC,YAAY,EAAEC,UAAU,QAAQ,cAAc;AACvE,SAASC,kBAAkB,QAAQ,sBAAsB;AAGzD,SAASC,KAAK,QAAQ,aAAa;AAEnC,OAAO,MAAMC,kBAAyBF;IAGlCG,MAAW;IAEXC,QAAqF;IACrFC,cAAqB;IAGrB,OAAcC,IACVH,KAAY,EACZC,OAAU,EACVC,gBAAgB,CAAA,CAAI,EACkC;QACtD,OAAiE,IAAIH,UAAUC,OAAOC,SAASC;IACnG;IAKAE,YAAYJ,KAAY,EAAEC,OAAsF,EAAEC,gBAAgB,CAAA,CAAI,CAAE;QACpI,KAAK,CAAC,CAAC,GAAGG,OAAe,IAAI,CAACC,WAAW,CAAC,IAAIR,MAAMO,SACpD,IAAI,CAACL,KAAK,GAAGA,OACb,IAAI,CAACC,OAAO,GAAGA,SACf,IAAI,CAACC,aAAa,GAAGA;IACzB;IAGAK,OAAOC,KAAgB,EAAEC,KAAkB,EAAEC,iBAAiB,CAAA,CAAK,EAA4B;QAE3F,IAAI,IAAI,CAACT,OAAO,SACZ,AAAI,IAAI,CAACC,aAAa,GAAS,IAAI,CAACS,kBAAkB,CAA4B,IAAI,CAACV,OAAO,IAAKO,iBAAiBV,QAAQU,MAAMI,OAAO,KAAMJ,iBAAiBK,QAAQL,QAAQ;YAACA;SAAM,GAAKE,kBAChL,IAAI,CAACI,WAAW,CAAmB,IAAI,CAACb,OAAO,IAAKO,iBAAiBV,QAAQU,MAAMI,OAAO,KAAMJ,iBAAiBK,QAAQL,QAAQ;YAACA;SAAM,GAAKE;QAIxJ,IAAI,IAAI,CAACV,KAAK,EAAE,OAAO,IAAI,CAACW,kBAAkB,CAAC,IAAI,CAACX,KAAK,CAACe,OAAO,CAACN,OAAOO,QAAQP,OAAOQ,SAAST,QAAQE;QAGzG,MAAM,IAAIf,aAAa;IAChC;IAEA,MAAcgB,mBAAmBO,aAA+C,EAAER,iBAAiB,CAAA,CAAK,EAAE;QACtG,OAAO,IAAI,CAACI,WAAW,CAAC,MAAMI,eAAeR;IACjD;IAEQI,YAAYK,KAA8B,EAAET,iBAAiB,CAAA,CAAK,EAAU;QAChF,IAAIA,gBAAgB,OAAOS,AAAU,CAAA,MAAVA,SAAkBA,UAAU1B;QAEvD,IAAI0B,AAAU,CAAA,MAAVA,SAAkBA,UAAU1B,MAAM;YAClC,IAAI0B,AAAS,CAAA,KAATA,OAAgB,MAAM,IAAIzB,eAAe,IAAI,CAACM,KAAK,EAAEoB,aAAa,CAAC,EAAE,IAAI,CAACpB,KAAK,CAACoB,UAAU,CAACC,OAAO,CAAC,MAAK,IAAI,SAAS,CAAC,GAAG;YACxH,IAAI,AAAgB,YAAhB,OAAOF,OAAmB,MAAM,IAAIzB,eAAeyB;YACvD,MAAM,IAAIvB,WAAW;QAC9B;QACA,OAAO,CAAA;IACX;IAEAU,YAAYE,KAAiB,EAAEC,KAAmB,EAAE;QAChD,OAAO,IAAI,CAACF,MAAM,CAACC,OAAOC;IAC9B;AACJ","sourceRoot":"/lib/datex-core-js-legacy-0.3.15/types/","file":"assertion.ts"}