diff --git a/CHANGELOG.md b/CHANGELOG.md index 17e357f..78910ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ All notable changes to this project will be documented in this file. +## [1.2.4] - 2024-04-21 + +### Fixed + +- Bug fixed for nest.js fastify support + ## [1.2.3] - 2024-04-19 ### Changed diff --git a/README.md b/README.md index ce6629c..942a10e 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Syntaxe middleware for Express.js and Nest.js
[![MIT licensed](https://img.shields.io/badge/license-MIT-0091F7)](./LICENSE) -![NPM Version](https://img.shields.io/badge/npm-v1.2.3-D50100) +![NPM Version](https://img.shields.io/badge/npm-v1.2.4-D50100) ![Top Language](https://img.shields.io/badge/javascript-100%25-F0DC4E)
diff --git a/dist/cjs/lib/engine.js b/dist/cjs/lib/engine.js index 95b7436..f4eae92 100644 --- a/dist/cjs/lib/engine.js +++ b/dist/cjs/lib/engine.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.filterSchema=void 0,Object.defineProperty(exports,"flags",{enumerable:!0,get:function(){return k.flags}}),exports.walkThroughHandler=exports.scanDirectives=void 0;var k=require("./helpers.js");const I=(e,t,a,r)=>new RegExp((t?"^":"")+String(e).substr(1,String(e).length-2)+(a?"$":""),r||"gi"),w=(...e)=>e.length?new Date(...e):new Date,x=(e,t,a)=>Math.random().toString(e??20).substring(t??2,a??12),M=e=>{for(var t of k.monthMap)if(t[1].includes(e.toLowerCase()))return t[0]+1;return 0},L=e=>{for(var t of k.dayMap)if(t[1].includes(e.toLowerCase()))return t[0]+1;return 0};exports.scanDirectives=(e,t)=>{let a=!1,r=String(),i=!1;try{for(var n in e.headers)n.toLowerCase()==k.flags.resolve.toLowerCase()?(a=!0,r=atob(e.headers[n])):n.toLowerCase()==k.flags.client.toLowerCase()&&(i=!0);return{resolve:a,schema:r,client:i}}catch(e){return t.set("Syntaxe-Schema-Resolved",!1),t.set("Syntaxe-Schema-Resolved-Error",String(e)),console.error({date:new Date,error:e}),{resolve:!1}}};exports.filterSchema=async e=>{try{var t=await(async t=>{try{k.holder.propertyOps=new Map,k.holder.objectOps=new Map,k.holder.rootOp=null,k.holder.context="json";let m;return String(t).trim().startsWith("[")&&(k.holder.context="root",t="{ rootPropertyIdentifier }"+t),String(t).replace(I(k.patterns.general.newLine),"").replace(I(k.patterns.operations.propertyOp),(_,e)=>{let t=_.split("").indexOf("["),a=_.substring(0,t),r=_.substring(t).replace(I(k.patterns.general.opList),"]*^*[").split("*^*"),i="*instr-p:id_"+x(),n=r.map(e=>String(e).replace(I(k.patterns.general.operation,!0,!0),"")),s="and";(m=JSON.stringify(n)).match(/"cond:/)&&(s=m.match(/"cond:\\"or\\"/)?"or":"and",n=n.filter(e=>!e.match(/cond:/)));var _=I(k.patterns.general.omission,null,!0),l=a.trim().match(_);return k.holder.propertyOps.set(i,{property:a.trim().replace(_,""),operation:n,condition:s,omit:Boolean(l)}),i}).replace(I(k.patterns.operations.objectOp,null,!0),(_,e)=>{let t=_.split("").indexOf("["),a=_.substring(t).replace(I(k.patterns.general.opList),"]*^*[").split("*^*"),r=a.map(e=>String(e).replace(I(k.patterns.general.operation,!0,!0),""));return m=JSON.stringify(r),k.holder.condition=m.match(/"cond:/)&&m.match(/"cond:\\"or\\"/)?"or":"and",k.holder.mode=m.match(/"mode:/)&&m.match(/"mode:\\"or\\"/)?"or":"and",r=r.filter(e=>!e.match(/mode:/)&&!e.match(/cond:/)),k.holder.rootOp=r,"}"}).replace(I(k.patterns.operations.objectOp),(_,e)=>{let t=_.split("").indexOf("["),a=_.substring(t).replace(I(k.patterns.general.opList),"]*^*[").split("*^*"),r="*instr-o:id_"+x(),i=a.map(e=>String(e).replace(I(k.patterns.general.operation,!0,!0),"")),n="and",s="and";return(m=JSON.stringify(i)).match(/"cond:/)&&(n=m.match(/"cond:\\"or\\"/)?"or":"and",i=i.filter(e=>!e.match(/cond:/))),m.match(/"mode:/)&&(s=m.match(/"mode:\\"or\\"/)?"or":"and",i=i.filter(e=>!e.match(/mode:/))),k.holder.objectOps.set(r,{operation:i,mode:s,condition:n}),"} "+r})}catch(e){return t}})(e),a=String(t).replace(I(k.patterns.general.newLine),"").replace(I(k.patterns.schema.commaAndSpace)," ").replace(I(k.patterns.schema.objectProperty),(_,e)=>`"${e}"`).replace(I(k.patterns.schema.spaceAndBrace),(_,e)=>({'" "':'":1, "','" {':'": {','"{':'": {','" }':'":1 }','"}':'":1 }'})[_]||"").replace(I(k.patterns.schema.braceAndSpace),'}, "');return{status:!0,schema:JSON.parse(a)}}catch(e){return{status:!1}}};exports.walkThroughHandler=async({data:t,res:a})=>{var r=a.syntaxeSchema["schema"];if(r)try{var i,n,s="string"==typeof t&&"root"!=k.holder.context?JSON.parse(t):t;let e="json"==k.holder.context?(await T({schema:r,subject:s})).result:s;return k.holder.rootOp&&(i="*instr-p:id_"+x(),k.holder.propertyOps.set(i,{property:k.holder.rootKey,operation:k.holder.rootOp,condition:k.holder.condition}),n=await T({schema:{[i]:1},subject:{[k.holder.rootKey]:e}}),e=n.schemaPass?n.result[k.holder.rootKey]:n.result[k.holder.rootKey]instanceof Array?[]:Object.create(null)),a.set("Syntaxe-Schema-Resolved",!0),JSON.stringify(e)}catch(e){a.set("Syntaxe-Schema-Resolved",!1),a.set("Syntaxe-Schema-Resolved-Error",String(e)),console.error({date:new Date,error:e,schema:r})}};const T=async({schema:c,subject:d,mode:e})=>{let g={},t=!0,a=new Set([]),D=null;if(Array.isArray(d)){g=[];for(var r of d){r=await T({schema:c,subject:r,mode:e});r.schemaPass&&g.push(r.result)}}else{let s=Object.keys(c),o=-1;for(var h of s){++o;let l=!0,m=new Set([]),u=null,e=I(k.patterns.general.omission,null,!0),i=Boolean(h.match(e)),n=h;if(h=h.replace(e,""),k.holder.propertyOps.has(h)){let s=d[(u=k.holder.propertyOps.get(h)).property];if(d.hasOwnProperty(u.property)){for(let t=0;t{e=String(e).trim().replace(I(k.patterns.general.quotes,!0,!0),"");return["sin","snin","yin","ynin","btw"].includes(r)?Number(e):e}):[]);switch(r){case"as":u.alias=D;break;case"rew":D=D==r?"":D,s=String(s).replace(I(k.patterns.general.raws),D||"");break;case"rw":D=D==r?"":D,s=String(s).replace(I(k.patterns.general.ws),D||"");break;case"eq":l=String(s)===D;break;case"eqi":l=String(s).toLowerCase()===D.toLowerCase();break;case"ne":l=String(s)!==D;break;case"nei":l=String(s).toLowerCase()!==D.toLowerCase();break;case"gt":l=Number(s)>Number(D);break;case"gte":l=Number(s)>=Number(D);break;case"lt":l=Number(s)n.some(e=>e==t||e===t)):n.some(e=>e==s||e===s);break;case"nin":l=Array.isArray(s)?s.every(t=>!n.some(e=>e==t||e===t)):!n.some(e=>e==s||e===s);break;case"ini":case"nini":n=n.join(",").toLowerCase().split(","),i.status=Array.isArray(s)?s.some(e=>Array.from(n).includes(String(e).toLowerCase())):Array.from(n).includes(String(s).toLowerCase()),l="ini"==r?i.status:!i.status;break;case"regex":case"regexne":i.regexPattern=D.trim().substring(1).split("/"),i.status=new RegExp(i.regexPattern[0],i.regexPattern[1]).test(s),l="regex"==r?i.status:!i.status;break;case"regexin":case"regexnin":i.regexCluster=D.replace(I(k.patterns.general.operation,!0,!0),"").split(","),l=i.regexCluster.some(e=>(i.regexPattern=e.trim().substring(1).split("/"),i.status=Array.isArray(s)?s.some(e=>new RegExp(i.regexPattern[0],i.regexPattern[1]).test(e)):new RegExp(i.regexPattern[0],i.regexPattern[1]).test(s),"regexin"==r?i.status:!i.status));break;case"size":s=s instanceof Array||"string"==typeof s?s.length:"object"==typeof s?Object.keys(s).length:s;break;case"seq":l=s.length==Number(D);break;case"sne":l=s.length!=Number(D);break;case"sgt":l=s.length>Number(D);break;case"slt":l=s.length=Number(D);break;case"slte":l=s.length<=Number(D);break;case"sin":case"snin":var[b,f]=[Math.min(...Array.from(n)),Math.max(...Array.from(n))];i.status=s.length>=b&&s.length<=f,l="sin"==r?i.status:!i.status;break;case"dteq":case"dtne":[i.valueDate,i.filteredDate]=[w(s).toLocaleDateString(),w(D).toLocaleDateString()],i.status="Invalid Date"!=i.valueDate&&i.valueDate==i.filteredDate,l="dteq"==r?i.status:!i.status;break;case"dtgt":case"dtlt":[i.valueDate,i.filteredDate]=[w(w(s).toLocaleDateString()),w(w(D).toLocaleDateString())],l=![String(i.valueDate),String(i.filteredDate)].includes("Invalid Date")&&("dtgt"==r?i.valueDate>i.filteredDate:i.valueDatei.filteredDate:i.valueDate{e=w(e).toLocaleDateString();return"Invalid Date"!=e&&i.valueDate==e}),l=![String(i.valueDate)].includes("Invalid Date")&&("dtin"==r?i.status:!i.status);break;case"dtinrange":case"dtninrange":i.valueDate=w(w(s).toLocaleDateString()),i.haystack={min:w(w(n[0]).toLocaleDateString()),max:2==n.length?w(w(n[1]).toLocaleDateString()):w().toLocaleDateString()},i.status=(i.valueDate>i.haystack.min||i.valueDate.toLocaleDateString()==i.haystack.min.toLocaleDateString())&&(i.valueDatei.filteredDate:i.valueDatei.filteredDate:i.valueDate{e=w(e);return"Invalid Date"!=e&&String(i.valueDate)==String(e)}),l=![String(i.valueDate)].includes("Invalid Date")&&("dtmin"==r?i.status:!i.status);break;case"dtminrange":case"dtmninrange":i.valueDate=w(s),i.haystack={min:w(n[0]),max:w(n[1])},i.status=(i.valueDate>i.haystack.min||String(i.valueDate)==String(i.haystack.min))&&(i.valueDateNumber(i.filteredDate):Number(i.valueDate.getFullYear())=Number(i.filteredDate):Number(i.valueDate.getFullYear())<=Number(i.filteredDate));break;case"yin":case"ynin":i.valueDate=w(s),i.haystack=n,i.status=i.haystack.some(e=>"Invalid Date"!=e&&String(i.valueDate.getFullYear())==String(e)),l=![String(i.valueDate)].includes("Invalid Date")&&("yin"==r?i.status:!i.status);break;case"yinrange":case"yninrange":i.valueDate=w(s),i.haystack={min:n[0],max:n[1]},i.status=Number(i.valueDate.getFullYear())>=Number(i.haystack.min)&&Number(i.valueDate.getFullYear())<=Number(i.haystack.max),l=![String(i.valueDate)].includes("Invalid Date")&&("yinrange"==r?i.status:!i.status);break;case"meq":case"mne":[i.valueDate,i.filteredDate]=[w(s),D],i.monthFilter=(i.valueDate.getMonth()||0)+1,i.status=![String(i.valueDate)].includes("Invalid Date")&&(isNaN(i.filteredDate)&&Array.from(k.monthMap.get(i.valueDate.getMonth())).includes(String(i.filteredDate).toLowerCase())||!isNaN(i.filteredDate)&&String(i.monthFilter)==String(Number(i.filteredDate))),l="meq"==r?i.status:!i.status;break;case"mgt":case"mlt":i.valueDate=w(s),i.monthFilter=(i.valueDate.getMonth()||0)+1,i.filteredDate=isNaN(D)?M(D):D,l=![String(i.valueDate)].includes("Invalid Date")&&1<=Number(i.filteredDate)&&Number(i.filteredDate)<=12&&("mgt"==r?Number(i.monthFilter)>Number(i.filteredDate):Number(i.monthFilter)=Number(i.filteredDate):Number(i.monthFilter)<=Number(i.filteredDate));break;case"min":case"mnin":i.valueDate=w(s),i.monthFilter=(i.valueDate.getMonth()||0)+1,i.haystack=n,i.status=i.haystack.some(e=>{e=isNaN(e)?M(e):e;return String(i.monthFilter)==String(Number(e))}),l=![String(i.valueDate)].includes("Invalid Date")&&("min"==r?i.status:!i.status);break;case"minrange":case"mninrange":i.valueDate=w(s),i.monthFilter=(i.valueDate.getMonth()||0)+1,i.isNaN=n.some(e=>isNaN(e)),i.haystack=i.isNaN?n.map(e=>isNaN(e)?M(e):e):[n[0],n[1]],i.haystack={min:Math.min(i.haystack[0],i.haystack[1]),max:Math.max(i.haystack[0],i.haystack[1])},i.status=1<=Number(i.haystack.min)&&Number(i.haystack.max)<=12&&Number(i.monthFilter)>=Number(i.haystack.min)&&Number(i.monthFilter)<=Number(i.haystack.max),l=![String(i.valueDate)].includes("Invalid Date")&&("minrange"==r?i.status:!i.status);break;case"today":[i.valueDate,i.filteredDate]=[w(s),w()],l=![String(i.valueDate)].includes("Invalid Date")&&i.valueDate.toLocaleDateString()==i.filteredDate.toLocaleDateString();break;case"deq":case"dne":[i.valueDate,i.filteredDate]=[w(s),D],i.status=![String(i.valueDate)].includes("Invalid Date")&&(isNaN(i.filteredDate)&&Array.from(k.dayMap.get(i.valueDate.getDay())).includes(String(i.filteredDate).toLowerCase())||!isNaN(i.filteredDate)&&String(i.valueDate.getDate())==String(Number(i.filteredDate))),l="deq"==r?i.status:!i.status;break;case"dgt":case"dlt":[i.valueDate,i.filteredDate]=[w(s),D],l=![String(i.valueDate)].includes("Invalid Date")&&("dgt"==r?Number(i.valueDate.getDate())>Number(i.filteredDate):Number(i.valueDate.getDate())=Number(i.filteredDate):Number(i.valueDate.getDate())<=Number(i.filteredDate));break;case"din":case"dnin":i.valueDate=w(s),i.haystack=n,i.status=i.haystack.some(e=>String(Number(i.valueDate.getDate()))==String(Number(e))),l=![String(i.valueDate)].includes("Invalid Date")&&("din"==r?i.status:!i.status);break;case"dinrange":case"dninrange":i.valueDate=w(s),i.haystack={min:Math.min(n[0],n[1]),max:Math.max(n[0],n[1])},i.status=1<=Number(i.haystack.min)&&Number(i.haystack.max)<=31&&Number(i.valueDate.getDate())>=Number(i.haystack.min)&&Number(i.valueDate.getDate())<=Number(i.haystack.max),l=![String(i.valueDate)].includes("Invalid Date")&&("dinrange"==r?i.status:!i.status);break;case"dweq":case"dwne":[i.valueDate,i.filteredDate]=[w(s),D],i.dayFilter=(i.valueDate.getDay()||0)+1,i.status=![String(i.valueDate)].includes("Invalid Date")&&(isNaN(i.filteredDate)&&Array.from(k.dayMap.get(i.valueDate.getDay())).includes(String(i.filteredDate).toLowerCase())||!isNaN(i.filteredDate)&&String(i.dayFilter)==String(Number(i.filteredDate))),l="dweq"==r?i.status:!i.status;break;case"dwgt":case"dwlt":i.valueDate=w(s),i.dayFilter=(i.valueDate.getDay()||0)+1,i.filteredDate=isNaN(D)?L(D):D,l=![String(i.valueDate)].includes("Invalid Date")&&1<=Number(i.filteredDate)&&Number(i.filteredDate)<=7&&("dwgt"==r?Number(i.dayFilter)>Number(i.filteredDate):Number(i.dayFilter)=Number(i.filteredDate):Number(i.dayFilter)<=Number(i.filteredDate));break;case"dwin":case"dwnin":i.valueDate=w(s),i.dayFilter=(i.valueDate.getDay()||0)+1,i.haystack=n,i.status=i.haystack.some(e=>{e=isNaN(e)?L(e):e;return String(i.dayFilter)==String(Number(e))}),l=![String(i.valueDate)].includes("Invalid Date")&&("dwin"==r?i.status:!i.status);break;case"dwinrange":case"dwninrange":i.valueDate=w(s),i.dayFilter=(i.valueDate.getDay()||0)+1,i.isNaN=n.some(e=>isNaN(e)),i.haystack=i.isNaN?n.map(e=>isNaN(e)?L(e):e):[n[0],n[1]],i.haystack={min:Math.min(i.haystack[0],i.haystack[1]),max:Math.max(i.haystack[0],i.haystack[1])},i.status=1<=Number(i.haystack.min)&&Number(i.haystack.max)<=7&&Number(i.dayFilter)>=Number(i.haystack.min)&&Number(i.dayFilter)<=Number(i.haystack.max),l=![String(i.valueDate)].includes("Invalid Date")&&("dwinrange"==r?i.status:!i.status);break;case"heq":case"hne":case"hgt":case"hlt":case"hgte":case"hlte":switch([i.valueDate,i.filteredDate]=[w(s),D],i.isNaN=isNaN(i.filteredDate),i.timeInfo=i.isNaN?{hour:Number(i.filteredDate.replace(I(k.patterns.general.nonDigit),"")),meridiem:i.filteredDate.replace(I(k.patterns.general.nonAlphabet),"")}:{hour:Number(i.filteredDate)},i.isNaN&&(i.timeInfo.hour+="pm"==i.timeInfo.meridiem.toLowerCase()&&12!=i.timeInfo.hour?12:"am"==i.timeInfo.meridiem.toLowerCase()&&12!=i.timeInfo.hour||"am"==i.timeInfo.meridiem.toLowerCase()?0:-12),r){case"heq":case"hne":i.status=![String(i.valueDate)].includes("Invalid Date")&&String(i.valueDate.getHours())==String(i.timeInfo.hour),l="heq"==r?i.status:!i.status;break;case"hgt":case"hlt":l=![String(i.valueDate)].includes("Invalid Date")&&("hgt"==r?i.valueDate.getHours()>i.timeInfo.hour:i.valueDate.getHours()=i.timeInfo.hour:i.valueDate.getHours()<=i.timeInfo.hour)}break;case"hin":case"hnin":i.valueDate=w(s),i.status=![String(i.valueDate)].includes("Invalid Date")&&n.some(e=>(i.isNaN=isNaN(e),i.timeInfo=i.isNaN?{hour:Number(String(e).replace(I(k.patterns.general.nonDigit),"")),meridiem:String(e).replace(I(k.patterns.general.nonAlphabet),"")}:{hour:Number(e)},i.isNaN&&(i.timeInfo.hour+="pm"==i.timeInfo.meridiem.toLowerCase()&&12!=i.timeInfo.hour?12:"am"==i.timeInfo.meridiem.toLowerCase()&&12!=i.timeInfo.hour||"am"==i.timeInfo.meridiem.toLowerCase()?0:-12),String(i.valueDate.getHours())==String(i.timeInfo.hour))),l="hin"==r?i.status:!i.status;break;case"hinrange":case"hninrange":i.valueDate=w(s),i.haystack=2<=n.length?[n[0],n[1]]:[n[0],n[0]],i.timeInfoRange=i.haystack.map(e=>(i.isNaN=isNaN(e),i.timeInfo=i.isNaN?{hour:Number(String(e).replace(I(k.patterns.general.nonDigit),"")),meridiem:String(e).replace(I(k.patterns.general.nonAlphabet),"")}:{hour:Number(e)},i.isNaN&&(i.timeInfo.hour+="pm"==i.timeInfo.meridiem.toLowerCase()&&12!=i.timeInfo.hour?12:"am"==i.timeInfo.meridiem.toLowerCase()&&12!=i.timeInfo.hour||"am"==i.timeInfo.meridiem.toLowerCase()?0:-12),i.timeInfo.hour)),i.haystack=[Math.min(...i.timeInfoRange),Math.max(...i.timeInfoRange)],i.status=![String(i.valueDate)].includes("Invalid Date")&&Number(i.valueDate.getHours())>=i.haystack[0]&&Number(i.valueDate.getHours())<=i.haystack[1],l="hinrange"==r?i.status:!i.status;break;case"mineq":case"minne":case"mingt":case"minlt":case"mingte":case"minlte":switch([i.valueDate,i.filteredDate]=[w(s),D],i.minutes=i.valueDate.getMinutes(),r){case"mineq":case"minne":i.status=![String(i.valueDate)].includes("Invalid Date")&&String(i.minutes)==String(Number(i.filteredDate)),l="mineq"==r?i.status:!i.status;break;case"mingt":case"minlt":l=![String(i.valueDate)].includes("Invalid Date")&&("mingt"==r?i.minutes>Number(i.filteredDate):i.minutes=Number(i.filteredDate):i.minutes<=Number(i.filteredDate))}break;case"minin":case"minnin":i.valueDate=w(s),i.minutes=i.valueDate.getMinutes(),i.status=![String(i.valueDate)].includes("Invalid Date")&&n.some(e=>String(Number(e))==String(i.minutes)),l="minin"==r?i.status:!i.status;break;case"mininrange":case"minninrange":i.valueDate=w(s),i.minutes=i.valueDate.getMinutes(),i.haystack=2<=n.length?[n[0],n[1]]:[n[0],n[n.length-1]],i.status=![String(i.valueDate)].includes("Invalid Date")&&i.minutes>=i.haystack[0]&&i.minutes<=i.haystack[1],l="mininrange"==r?i.status:!i.status;break;case"teq":case"tne":case"tgt":case"tlt":switch([i.valueDate,i.filteredDate]=[w(s),D],i.possibleMeridiem=i.filteredDate.replace(I(k.patterns.general.nonAlphabet),"").toLowerCase(),i.hasMeridiem=["am","pm"].includes(i.possibleMeridiem),i.timeParts=i.filteredDate.replace(I(k.patterns.general.nonTimeXter),"").split(":").map(e=>Number(e)),i.timeInfo=i.hasMeridiem?{hour:Number(i.timeParts[0]),meridiem:i.possibleMeridiem}:{hour:Number(i.timeParts[0])},i.hasMeridiem&&(i.timeInfo.hour+="pm"==i.timeInfo.meridiem&&12!=i.timeInfo.hour?12:"am"==i.timeInfo.meridiem&&12!=i.timeInfo.hour||"am"==i.timeInfo.meridiem?0:-12),i.timeParts[0]=i.timeInfo.hour,i.valueTimeParts=[i.valueDate.getHours(),i.valueDate.getMinutes(),i.valueDate.getSeconds()],i.valueDateTime=w(...k.holder.defaultDate,...i.valueTimeParts),i.filteredDateTime=w(...k.holder.defaultDate,...i.timeParts),r){case"teq":case"tne":i.status=![String(i.valueDate)].includes("Invalid Date")&&String(i.valueDateTime)==String(i.filteredDateTime),l="teq"==r?i.status:!i.status;break;case"tgt":case"tlt":l=![String(i.valueDate)].includes("Invalid Date")&&("tgt"==r?i.valueDateTime>i.filteredDateTime:i.valueDateTime=i.filteredDateTime:i.valueDateTime<=i.filteredDateTime)}break;case"tin":case"tnin":i.valueDate=w(s),i.valueTimeParts=[i.valueDate.getHours(),i.valueDate.getMinutes(),i.valueDate.getSeconds()],i.valueDateTime=w(...k.holder.defaultDate,...i.valueTimeParts),i.status=![String(i.valueDate)].includes("Invalid Date")&&n.some(e=>(i.possibleMeridiem=String(e).replace(I(k.patterns.general.nonAlphabet),"").toLowerCase(),i.hasMeridiem=["am","pm"].includes(i.possibleMeridiem),i.timeParts=String(e).replace(I(k.patterns.general.nonTimeXter),"").split(":").map(e=>Number(e)),i.timeInfo=i.hasMeridiem?{hour:Number(i.timeParts[0]),meridiem:i.possibleMeridiem}:{hour:Number(i.timeParts[0])},i.hasMeridiem&&(i.timeInfo.hour+="pm"==i.timeInfo.meridiem&&12!=i.timeInfo.hour?12:"am"==i.timeInfo.meridiem&&12!=i.timeInfo.hour||"am"==i.timeInfo.meridiem?0:-12),i.timeParts[0]=i.timeInfo.hour,i.filteredDateTime=w(...k.holder.defaultDate,...i.timeParts),String(i.valueDateTime)==String(i.filteredDateTime))),l="tin"==r?i.status:!i.status;break;case"tinrange":case"tninrange":i.valueDate=w(s),i.valueTimeParts=[i.valueDate.getHours(),i.valueDate.getMinutes(),i.valueDate.getSeconds()],i.valueDateTime=w(...k.holder.defaultDate,...i.valueTimeParts),i.haystack=2<=n.length?[n[0],n[1]]:[n[0],n[0]],i.haystackTimeParts=i.haystack.map(e=>(i.possibleMeridiem=String(e).replace(I(k.patterns.general.nonAlphabet),"").toLowerCase(),i.hasMeridiem=["am","pm"].includes(i.possibleMeridiem),i.timeParts=String(e).replace(I(k.patterns.general.nonTimeXter),"").split(":").map(e=>Number(e)),i.timeInfo=i.hasMeridiem?{hour:Number(i.timeParts[0]),meridiem:i.possibleMeridiem}:{hour:Number(i.timeParts[0])},i.hasMeridiem&&(i.timeInfo.hour+="pm"==i.timeInfo.meridiem&&12!=i.timeInfo.hour?12:"am"==i.timeInfo.meridiem&&12!=i.timeInfo.hour||"am"==i.timeInfo.meridiem?0:-12),i.timeParts[0]=i.timeInfo.hour,w(...k.holder.defaultDate,...i.timeParts))),i.status=![String(i.valueDate)].includes("Invalid Date")&&(i.valueDateTime>i.haystackTimeParts[0]||String(i.valueDateTime)==String(i.haystackTimeParts[0]))&&(i.valueDateTime=i.range.min&&i.valueDate.getTime()<=(i.range.maxWithSign||i.range.max):i.valueDate.getTime()<=i.range.min:i.valueDate.getTime()>=i.range.min&&i.valueDate.getTime()<=i.range.max,![String(i.valueDate)].includes("Invalid Date"))&&i.status;break;case"agoin":i.valueDate=w(s),i.haystack=2==n.length?[n[0],n[1]]:[n[0],n[0]],i.haystackTimeMs=i.haystack.map(e=>(i.timeSpan={time:e.replace(I(k.patterns.general.nonDecimal),""),duration:e.replace(I(k.patterns.general.nonAlphabet),"").toLowerCase()},k.timeDuration.includes(i.timeSpan.duration)&&0=i.range.min&&i.valueDate.getTime()<=i.range.max,l=![String(i.valueDate)].includes("Invalid Date")&&i.status;break;case"first":s=Array.isArray(s)?isNaN(D)?s[0]||[]:s.slice(0,Number(D)):s;break;case"last":s=Array.isArray(s)?isNaN(D)?s[s.length-1]||[]:s.slice(-Number(D.replace(I(k.patterns.general.nonDigit),""))):s;break;case"btw":i.haystack=2==n.length?[Number(n[0])-1,n[1]]:[0,n[0]],s=Array.isArray(s)?s.slice(i.haystack[0],i.haystack[1])||[]:s;break;case"dist":let t=new Set([]),a=new Set([]);s=Array.isArray(s)?Array.from(s,e=>"object"!=typeof e||r==D?t.add(e):e[D]&&a.has(e[D])?null:t.add(e)&&a.add(e[D])):s,s=Array.from(t.values())}m.add(l)}u.omit||(g[u.alias||u.property]=s)}}else if(d.hasOwnProperty(h))if(1===c[h])i||(g[h]=d[h]);else{let e=!1,t="and",a=String(),r=null;var S,y,N;k.holder.objectOps.has(s[o+1])&&(y=s[o+1],S=h,r=k.holder.objectOps.get(y),a="*instr-p:id_"+x(),t=r.mode,r.operation.length)&&(y=r.operation.findIndex(e=>e.match(/^as:\".*\"$/)),e=!(0<=y)||(N=String(r.operation[y]).split(":")[1],r.currentKeyAlias=N.replace(I(k.patterns.general.quotes,!0,!0),""),r.operation.splice(y,1),0new RegExp((t?"^":"")+String(e).substr(1,String(e).length-2)+(a?"$":""),r||"gi"),w=(...e)=>e.length?new Date(...e):new Date,x=(e,t,a)=>Math.random().toString(e??20).substring(t??2,a??12),M=e=>{for(var t of k.monthMap)if(t[1].includes(e.toLowerCase()))return t[0]+1;return 0},L=e=>{for(var t of k.dayMap)if(t[1].includes(e.toLowerCase()))return t[0]+1;return 0};exports.scanDirectives=(e,t)=>{let a=!1,r=String(),i=!1;try{for(var n in e.headers)n.toLowerCase()==k.flags.resolve.toLowerCase()?(a=!0,r=atob(e.headers[n])):n.toLowerCase()==k.flags.client.toLowerCase()&&(i=!0);return{resolve:a,schema:r,client:i}}catch(e){return t.setHeader("Syntaxe-Schema-Resolved",!1),t.setHeader("Syntaxe-Schema-Resolved-Error",String(e)),console.error({date:new Date,error:e}),{resolve:!1}}};exports.filterSchema=async e=>{try{var t=await(async t=>{try{k.holder.propertyOps=new Map,k.holder.objectOps=new Map,k.holder.rootOp=null,k.holder.context="json";let m;return String(t).trim().startsWith("[")&&(k.holder.context="root",t="{ rootPropertyIdentifier }"+t),String(t).replace(I(k.patterns.general.newLine),"").replace(I(k.patterns.operations.propertyOp),(_,e)=>{let t=_.split("").indexOf("["),a=_.substring(0,t),r=_.substring(t).replace(I(k.patterns.general.opList),"]*^*[").split("*^*"),i="*instr-p:id_"+x(),n=r.map(e=>String(e).replace(I(k.patterns.general.operation,!0,!0),"")),s="and";(m=JSON.stringify(n)).match(/"cond:/)&&(s=m.match(/"cond:\\"or\\"/)?"or":"and",n=n.filter(e=>!e.match(/cond:/)));var _=I(k.patterns.general.omission,null,!0),l=a.trim().match(_);return k.holder.propertyOps.set(i,{property:a.trim().replace(_,""),operation:n,condition:s,omit:Boolean(l)}),i}).replace(I(k.patterns.operations.objectOp,null,!0),(_,e)=>{let t=_.split("").indexOf("["),a=_.substring(t).replace(I(k.patterns.general.opList),"]*^*[").split("*^*"),r=a.map(e=>String(e).replace(I(k.patterns.general.operation,!0,!0),""));return m=JSON.stringify(r),k.holder.condition=m.match(/"cond:/)&&m.match(/"cond:\\"or\\"/)?"or":"and",k.holder.mode=m.match(/"mode:/)&&m.match(/"mode:\\"or\\"/)?"or":"and",r=r.filter(e=>!e.match(/mode:/)&&!e.match(/cond:/)),k.holder.rootOp=r,"}"}).replace(I(k.patterns.operations.objectOp),(_,e)=>{let t=_.split("").indexOf("["),a=_.substring(t).replace(I(k.patterns.general.opList),"]*^*[").split("*^*"),r="*instr-o:id_"+x(),i=a.map(e=>String(e).replace(I(k.patterns.general.operation,!0,!0),"")),n="and",s="and";return(m=JSON.stringify(i)).match(/"cond:/)&&(n=m.match(/"cond:\\"or\\"/)?"or":"and",i=i.filter(e=>!e.match(/cond:/))),m.match(/"mode:/)&&(s=m.match(/"mode:\\"or\\"/)?"or":"and",i=i.filter(e=>!e.match(/mode:/))),k.holder.objectOps.set(r,{operation:i,mode:s,condition:n}),"} "+r})}catch(e){return t}})(e),a=String(t).replace(I(k.patterns.general.newLine),"").replace(I(k.patterns.schema.commaAndSpace)," ").replace(I(k.patterns.schema.objectProperty),(_,e)=>`"${e}"`).replace(I(k.patterns.schema.spaceAndBrace),(_,e)=>({'" "':'":1, "','" {':'": {','"{':'": {','" }':'":1 }','"}':'":1 }'})[_]||"").replace(I(k.patterns.schema.braceAndSpace),'}, "');return{status:!0,schema:JSON.parse(a)}}catch(e){return{status:!1}}};exports.walkThroughHandler=async({data:t,res:a})=>{var r=a.syntaxeSchema["schema"];if(r)try{var i,n,s="string"==typeof t&&"root"!=k.holder.context?JSON.parse(t):t;let e="json"==k.holder.context?(await T({schema:r,subject:s})).result:s;return k.holder.rootOp&&(i="*instr-p:id_"+x(),k.holder.propertyOps.set(i,{property:k.holder.rootKey,operation:k.holder.rootOp,condition:k.holder.condition}),n=await T({schema:{[i]:1},subject:{[k.holder.rootKey]:e}}),e=n.schemaPass?n.result[k.holder.rootKey]:n.result[k.holder.rootKey]instanceof Array?[]:Object.create(null)),a.setHeader("Syntaxe-Schema-Resolved",!0),JSON.stringify(e)}catch(e){a.setHeader("Syntaxe-Schema-Resolved",!1),a.setHeader("Syntaxe-Schema-Resolved-Error",String(e)),console.error({date:new Date,error:e,schema:r})}};const T=async({schema:d,subject:c,mode:e})=>{let g={},t=!0,a=new Set([]),D=null;if(Array.isArray(c)){g=[];for(var r of c){r=await T({schema:d,subject:r,mode:e});r.schemaPass&&g.push(r.result)}}else{let s=Object.keys(d),o=-1;for(var h of s){++o;let l=!0,m=new Set([]),u=null,e=I(k.patterns.general.omission,null,!0),i=Boolean(h.match(e)),n=h;if(h=h.replace(e,""),k.holder.propertyOps.has(h)){let s=c[(u=k.holder.propertyOps.get(h)).property];if(c.hasOwnProperty(u.property)){for(let t=0;t{e=String(e).trim().replace(I(k.patterns.general.quotes,!0,!0),"");return["sin","snin","yin","ynin","btw"].includes(r)?Number(e):e}):[]);switch(r){case"as":u.alias=D;break;case"rew":D=D==r?"":D,s=String(s).replace(I(k.patterns.general.raws),D||"");break;case"rw":D=D==r?"":D,s=String(s).replace(I(k.patterns.general.ws),D||"");break;case"eq":l=String(s)===D;break;case"eqi":l=String(s).toLowerCase()===D.toLowerCase();break;case"ne":l=String(s)!==D;break;case"nei":l=String(s).toLowerCase()!==D.toLowerCase();break;case"gt":l=Number(s)>Number(D);break;case"gte":l=Number(s)>=Number(D);break;case"lt":l=Number(s)n.some(e=>e==t||e===t)):n.some(e=>e==s||e===s);break;case"nin":l=Array.isArray(s)?s.every(t=>!n.some(e=>e==t||e===t)):!n.some(e=>e==s||e===s);break;case"ini":case"nini":n=n.join(",").toLowerCase().split(","),i.status=Array.isArray(s)?s.some(e=>Array.from(n).includes(String(e).toLowerCase())):Array.from(n).includes(String(s).toLowerCase()),l="ini"==r?i.status:!i.status;break;case"regex":case"regexne":i.regexPattern=D.trim().substring(1).split("/"),i.status=new RegExp(i.regexPattern[0],i.regexPattern[1]).test(s),l="regex"==r?i.status:!i.status;break;case"regexin":case"regexnin":i.regexCluster=D.replace(I(k.patterns.general.operation,!0,!0),"").split(","),l=i.regexCluster.some(e=>(i.regexPattern=e.trim().substring(1).split("/"),i.status=Array.isArray(s)?s.some(e=>new RegExp(i.regexPattern[0],i.regexPattern[1]).test(e)):new RegExp(i.regexPattern[0],i.regexPattern[1]).test(s),"regexin"==r?i.status:!i.status));break;case"size":s=s instanceof Array||"string"==typeof s?s.length:"object"==typeof s?Object.keys(s).length:s;break;case"seq":l=s.length==Number(D);break;case"sne":l=s.length!=Number(D);break;case"sgt":l=s.length>Number(D);break;case"slt":l=s.length=Number(D);break;case"slte":l=s.length<=Number(D);break;case"sin":case"snin":var[b,f]=[Math.min(...Array.from(n)),Math.max(...Array.from(n))];i.status=s.length>=b&&s.length<=f,l="sin"==r?i.status:!i.status;break;case"dteq":case"dtne":[i.valueDate,i.filteredDate]=[w(s).toLocaleDateString(),w(D).toLocaleDateString()],i.status="Invalid Date"!=i.valueDate&&i.valueDate==i.filteredDate,l="dteq"==r?i.status:!i.status;break;case"dtgt":case"dtlt":[i.valueDate,i.filteredDate]=[w(w(s).toLocaleDateString()),w(w(D).toLocaleDateString())],l=![String(i.valueDate),String(i.filteredDate)].includes("Invalid Date")&&("dtgt"==r?i.valueDate>i.filteredDate:i.valueDatei.filteredDate:i.valueDate{e=w(e).toLocaleDateString();return"Invalid Date"!=e&&i.valueDate==e}),l=![String(i.valueDate)].includes("Invalid Date")&&("dtin"==r?i.status:!i.status);break;case"dtinrange":case"dtninrange":i.valueDate=w(w(s).toLocaleDateString()),i.haystack={min:w(w(n[0]).toLocaleDateString()),max:2==n.length?w(w(n[1]).toLocaleDateString()):w().toLocaleDateString()},i.status=(i.valueDate>i.haystack.min||i.valueDate.toLocaleDateString()==i.haystack.min.toLocaleDateString())&&(i.valueDatei.filteredDate:i.valueDatei.filteredDate:i.valueDate{e=w(e);return"Invalid Date"!=e&&String(i.valueDate)==String(e)}),l=![String(i.valueDate)].includes("Invalid Date")&&("dtmin"==r?i.status:!i.status);break;case"dtminrange":case"dtmninrange":i.valueDate=w(s),i.haystack={min:w(n[0]),max:w(n[1])},i.status=(i.valueDate>i.haystack.min||String(i.valueDate)==String(i.haystack.min))&&(i.valueDateNumber(i.filteredDate):Number(i.valueDate.getFullYear())=Number(i.filteredDate):Number(i.valueDate.getFullYear())<=Number(i.filteredDate));break;case"yin":case"ynin":i.valueDate=w(s),i.haystack=n,i.status=i.haystack.some(e=>"Invalid Date"!=e&&String(i.valueDate.getFullYear())==String(e)),l=![String(i.valueDate)].includes("Invalid Date")&&("yin"==r?i.status:!i.status);break;case"yinrange":case"yninrange":i.valueDate=w(s),i.haystack={min:n[0],max:n[1]},i.status=Number(i.valueDate.getFullYear())>=Number(i.haystack.min)&&Number(i.valueDate.getFullYear())<=Number(i.haystack.max),l=![String(i.valueDate)].includes("Invalid Date")&&("yinrange"==r?i.status:!i.status);break;case"meq":case"mne":[i.valueDate,i.filteredDate]=[w(s),D],i.monthFilter=(i.valueDate.getMonth()||0)+1,i.status=![String(i.valueDate)].includes("Invalid Date")&&(isNaN(i.filteredDate)&&Array.from(k.monthMap.get(i.valueDate.getMonth())).includes(String(i.filteredDate).toLowerCase())||!isNaN(i.filteredDate)&&String(i.monthFilter)==String(Number(i.filteredDate))),l="meq"==r?i.status:!i.status;break;case"mgt":case"mlt":i.valueDate=w(s),i.monthFilter=(i.valueDate.getMonth()||0)+1,i.filteredDate=isNaN(D)?M(D):D,l=![String(i.valueDate)].includes("Invalid Date")&&1<=Number(i.filteredDate)&&Number(i.filteredDate)<=12&&("mgt"==r?Number(i.monthFilter)>Number(i.filteredDate):Number(i.monthFilter)=Number(i.filteredDate):Number(i.monthFilter)<=Number(i.filteredDate));break;case"min":case"mnin":i.valueDate=w(s),i.monthFilter=(i.valueDate.getMonth()||0)+1,i.haystack=n,i.status=i.haystack.some(e=>{e=isNaN(e)?M(e):e;return String(i.monthFilter)==String(Number(e))}),l=![String(i.valueDate)].includes("Invalid Date")&&("min"==r?i.status:!i.status);break;case"minrange":case"mninrange":i.valueDate=w(s),i.monthFilter=(i.valueDate.getMonth()||0)+1,i.isNaN=n.some(e=>isNaN(e)),i.haystack=i.isNaN?n.map(e=>isNaN(e)?M(e):e):[n[0],n[1]],i.haystack={min:Math.min(i.haystack[0],i.haystack[1]),max:Math.max(i.haystack[0],i.haystack[1])},i.status=1<=Number(i.haystack.min)&&Number(i.haystack.max)<=12&&Number(i.monthFilter)>=Number(i.haystack.min)&&Number(i.monthFilter)<=Number(i.haystack.max),l=![String(i.valueDate)].includes("Invalid Date")&&("minrange"==r?i.status:!i.status);break;case"today":[i.valueDate,i.filteredDate]=[w(s),w()],l=![String(i.valueDate)].includes("Invalid Date")&&i.valueDate.toLocaleDateString()==i.filteredDate.toLocaleDateString();break;case"deq":case"dne":[i.valueDate,i.filteredDate]=[w(s),D],i.status=![String(i.valueDate)].includes("Invalid Date")&&(isNaN(i.filteredDate)&&Array.from(k.dayMap.get(i.valueDate.getDay())).includes(String(i.filteredDate).toLowerCase())||!isNaN(i.filteredDate)&&String(i.valueDate.getDate())==String(Number(i.filteredDate))),l="deq"==r?i.status:!i.status;break;case"dgt":case"dlt":[i.valueDate,i.filteredDate]=[w(s),D],l=![String(i.valueDate)].includes("Invalid Date")&&("dgt"==r?Number(i.valueDate.getDate())>Number(i.filteredDate):Number(i.valueDate.getDate())=Number(i.filteredDate):Number(i.valueDate.getDate())<=Number(i.filteredDate));break;case"din":case"dnin":i.valueDate=w(s),i.haystack=n,i.status=i.haystack.some(e=>String(Number(i.valueDate.getDate()))==String(Number(e))),l=![String(i.valueDate)].includes("Invalid Date")&&("din"==r?i.status:!i.status);break;case"dinrange":case"dninrange":i.valueDate=w(s),i.haystack={min:Math.min(n[0],n[1]),max:Math.max(n[0],n[1])},i.status=1<=Number(i.haystack.min)&&Number(i.haystack.max)<=31&&Number(i.valueDate.getDate())>=Number(i.haystack.min)&&Number(i.valueDate.getDate())<=Number(i.haystack.max),l=![String(i.valueDate)].includes("Invalid Date")&&("dinrange"==r?i.status:!i.status);break;case"dweq":case"dwne":[i.valueDate,i.filteredDate]=[w(s),D],i.dayFilter=(i.valueDate.getDay()||0)+1,i.status=![String(i.valueDate)].includes("Invalid Date")&&(isNaN(i.filteredDate)&&Array.from(k.dayMap.get(i.valueDate.getDay())).includes(String(i.filteredDate).toLowerCase())||!isNaN(i.filteredDate)&&String(i.dayFilter)==String(Number(i.filteredDate))),l="dweq"==r?i.status:!i.status;break;case"dwgt":case"dwlt":i.valueDate=w(s),i.dayFilter=(i.valueDate.getDay()||0)+1,i.filteredDate=isNaN(D)?L(D):D,l=![String(i.valueDate)].includes("Invalid Date")&&1<=Number(i.filteredDate)&&Number(i.filteredDate)<=7&&("dwgt"==r?Number(i.dayFilter)>Number(i.filteredDate):Number(i.dayFilter)=Number(i.filteredDate):Number(i.dayFilter)<=Number(i.filteredDate));break;case"dwin":case"dwnin":i.valueDate=w(s),i.dayFilter=(i.valueDate.getDay()||0)+1,i.haystack=n,i.status=i.haystack.some(e=>{e=isNaN(e)?L(e):e;return String(i.dayFilter)==String(Number(e))}),l=![String(i.valueDate)].includes("Invalid Date")&&("dwin"==r?i.status:!i.status);break;case"dwinrange":case"dwninrange":i.valueDate=w(s),i.dayFilter=(i.valueDate.getDay()||0)+1,i.isNaN=n.some(e=>isNaN(e)),i.haystack=i.isNaN?n.map(e=>isNaN(e)?L(e):e):[n[0],n[1]],i.haystack={min:Math.min(i.haystack[0],i.haystack[1]),max:Math.max(i.haystack[0],i.haystack[1])},i.status=1<=Number(i.haystack.min)&&Number(i.haystack.max)<=7&&Number(i.dayFilter)>=Number(i.haystack.min)&&Number(i.dayFilter)<=Number(i.haystack.max),l=![String(i.valueDate)].includes("Invalid Date")&&("dwinrange"==r?i.status:!i.status);break;case"heq":case"hne":case"hgt":case"hlt":case"hgte":case"hlte":switch([i.valueDate,i.filteredDate]=[w(s),D],i.isNaN=isNaN(i.filteredDate),i.timeInfo=i.isNaN?{hour:Number(i.filteredDate.replace(I(k.patterns.general.nonDigit),"")),meridiem:i.filteredDate.replace(I(k.patterns.general.nonAlphabet),"")}:{hour:Number(i.filteredDate)},i.isNaN&&(i.timeInfo.hour+="pm"==i.timeInfo.meridiem.toLowerCase()&&12!=i.timeInfo.hour?12:"am"==i.timeInfo.meridiem.toLowerCase()&&12!=i.timeInfo.hour||"am"==i.timeInfo.meridiem.toLowerCase()?0:-12),r){case"heq":case"hne":i.status=![String(i.valueDate)].includes("Invalid Date")&&String(i.valueDate.getHours())==String(i.timeInfo.hour),l="heq"==r?i.status:!i.status;break;case"hgt":case"hlt":l=![String(i.valueDate)].includes("Invalid Date")&&("hgt"==r?i.valueDate.getHours()>i.timeInfo.hour:i.valueDate.getHours()=i.timeInfo.hour:i.valueDate.getHours()<=i.timeInfo.hour)}break;case"hin":case"hnin":i.valueDate=w(s),i.status=![String(i.valueDate)].includes("Invalid Date")&&n.some(e=>(i.isNaN=isNaN(e),i.timeInfo=i.isNaN?{hour:Number(String(e).replace(I(k.patterns.general.nonDigit),"")),meridiem:String(e).replace(I(k.patterns.general.nonAlphabet),"")}:{hour:Number(e)},i.isNaN&&(i.timeInfo.hour+="pm"==i.timeInfo.meridiem.toLowerCase()&&12!=i.timeInfo.hour?12:"am"==i.timeInfo.meridiem.toLowerCase()&&12!=i.timeInfo.hour||"am"==i.timeInfo.meridiem.toLowerCase()?0:-12),String(i.valueDate.getHours())==String(i.timeInfo.hour))),l="hin"==r?i.status:!i.status;break;case"hinrange":case"hninrange":i.valueDate=w(s),i.haystack=2<=n.length?[n[0],n[1]]:[n[0],n[0]],i.timeInfoRange=i.haystack.map(e=>(i.isNaN=isNaN(e),i.timeInfo=i.isNaN?{hour:Number(String(e).replace(I(k.patterns.general.nonDigit),"")),meridiem:String(e).replace(I(k.patterns.general.nonAlphabet),"")}:{hour:Number(e)},i.isNaN&&(i.timeInfo.hour+="pm"==i.timeInfo.meridiem.toLowerCase()&&12!=i.timeInfo.hour?12:"am"==i.timeInfo.meridiem.toLowerCase()&&12!=i.timeInfo.hour||"am"==i.timeInfo.meridiem.toLowerCase()?0:-12),i.timeInfo.hour)),i.haystack=[Math.min(...i.timeInfoRange),Math.max(...i.timeInfoRange)],i.status=![String(i.valueDate)].includes("Invalid Date")&&Number(i.valueDate.getHours())>=i.haystack[0]&&Number(i.valueDate.getHours())<=i.haystack[1],l="hinrange"==r?i.status:!i.status;break;case"mineq":case"minne":case"mingt":case"minlt":case"mingte":case"minlte":switch([i.valueDate,i.filteredDate]=[w(s),D],i.minutes=i.valueDate.getMinutes(),r){case"mineq":case"minne":i.status=![String(i.valueDate)].includes("Invalid Date")&&String(i.minutes)==String(Number(i.filteredDate)),l="mineq"==r?i.status:!i.status;break;case"mingt":case"minlt":l=![String(i.valueDate)].includes("Invalid Date")&&("mingt"==r?i.minutes>Number(i.filteredDate):i.minutes=Number(i.filteredDate):i.minutes<=Number(i.filteredDate))}break;case"minin":case"minnin":i.valueDate=w(s),i.minutes=i.valueDate.getMinutes(),i.status=![String(i.valueDate)].includes("Invalid Date")&&n.some(e=>String(Number(e))==String(i.minutes)),l="minin"==r?i.status:!i.status;break;case"mininrange":case"minninrange":i.valueDate=w(s),i.minutes=i.valueDate.getMinutes(),i.haystack=2<=n.length?[n[0],n[1]]:[n[0],n[n.length-1]],i.status=![String(i.valueDate)].includes("Invalid Date")&&i.minutes>=i.haystack[0]&&i.minutes<=i.haystack[1],l="mininrange"==r?i.status:!i.status;break;case"teq":case"tne":case"tgt":case"tlt":switch([i.valueDate,i.filteredDate]=[w(s),D],i.possibleMeridiem=i.filteredDate.replace(I(k.patterns.general.nonAlphabet),"").toLowerCase(),i.hasMeridiem=["am","pm"].includes(i.possibleMeridiem),i.timeParts=i.filteredDate.replace(I(k.patterns.general.nonTimeXter),"").split(":").map(e=>Number(e)),i.timeInfo=i.hasMeridiem?{hour:Number(i.timeParts[0]),meridiem:i.possibleMeridiem}:{hour:Number(i.timeParts[0])},i.hasMeridiem&&(i.timeInfo.hour+="pm"==i.timeInfo.meridiem&&12!=i.timeInfo.hour?12:"am"==i.timeInfo.meridiem&&12!=i.timeInfo.hour||"am"==i.timeInfo.meridiem?0:-12),i.timeParts[0]=i.timeInfo.hour,i.valueTimeParts=[i.valueDate.getHours(),i.valueDate.getMinutes(),i.valueDate.getSeconds()],i.valueDateTime=w(...k.holder.defaultDate,...i.valueTimeParts),i.filteredDateTime=w(...k.holder.defaultDate,...i.timeParts),r){case"teq":case"tne":i.status=![String(i.valueDate)].includes("Invalid Date")&&String(i.valueDateTime)==String(i.filteredDateTime),l="teq"==r?i.status:!i.status;break;case"tgt":case"tlt":l=![String(i.valueDate)].includes("Invalid Date")&&("tgt"==r?i.valueDateTime>i.filteredDateTime:i.valueDateTime=i.filteredDateTime:i.valueDateTime<=i.filteredDateTime)}break;case"tin":case"tnin":i.valueDate=w(s),i.valueTimeParts=[i.valueDate.getHours(),i.valueDate.getMinutes(),i.valueDate.getSeconds()],i.valueDateTime=w(...k.holder.defaultDate,...i.valueTimeParts),i.status=![String(i.valueDate)].includes("Invalid Date")&&n.some(e=>(i.possibleMeridiem=String(e).replace(I(k.patterns.general.nonAlphabet),"").toLowerCase(),i.hasMeridiem=["am","pm"].includes(i.possibleMeridiem),i.timeParts=String(e).replace(I(k.patterns.general.nonTimeXter),"").split(":").map(e=>Number(e)),i.timeInfo=i.hasMeridiem?{hour:Number(i.timeParts[0]),meridiem:i.possibleMeridiem}:{hour:Number(i.timeParts[0])},i.hasMeridiem&&(i.timeInfo.hour+="pm"==i.timeInfo.meridiem&&12!=i.timeInfo.hour?12:"am"==i.timeInfo.meridiem&&12!=i.timeInfo.hour||"am"==i.timeInfo.meridiem?0:-12),i.timeParts[0]=i.timeInfo.hour,i.filteredDateTime=w(...k.holder.defaultDate,...i.timeParts),String(i.valueDateTime)==String(i.filteredDateTime))),l="tin"==r?i.status:!i.status;break;case"tinrange":case"tninrange":i.valueDate=w(s),i.valueTimeParts=[i.valueDate.getHours(),i.valueDate.getMinutes(),i.valueDate.getSeconds()],i.valueDateTime=w(...k.holder.defaultDate,...i.valueTimeParts),i.haystack=2<=n.length?[n[0],n[1]]:[n[0],n[0]],i.haystackTimeParts=i.haystack.map(e=>(i.possibleMeridiem=String(e).replace(I(k.patterns.general.nonAlphabet),"").toLowerCase(),i.hasMeridiem=["am","pm"].includes(i.possibleMeridiem),i.timeParts=String(e).replace(I(k.patterns.general.nonTimeXter),"").split(":").map(e=>Number(e)),i.timeInfo=i.hasMeridiem?{hour:Number(i.timeParts[0]),meridiem:i.possibleMeridiem}:{hour:Number(i.timeParts[0])},i.hasMeridiem&&(i.timeInfo.hour+="pm"==i.timeInfo.meridiem&&12!=i.timeInfo.hour?12:"am"==i.timeInfo.meridiem&&12!=i.timeInfo.hour||"am"==i.timeInfo.meridiem?0:-12),i.timeParts[0]=i.timeInfo.hour,w(...k.holder.defaultDate,...i.timeParts))),i.status=![String(i.valueDate)].includes("Invalid Date")&&(i.valueDateTime>i.haystackTimeParts[0]||String(i.valueDateTime)==String(i.haystackTimeParts[0]))&&(i.valueDateTime=i.range.min&&i.valueDate.getTime()<=(i.range.maxWithSign||i.range.max):i.valueDate.getTime()<=i.range.min:i.valueDate.getTime()>=i.range.min&&i.valueDate.getTime()<=i.range.max,![String(i.valueDate)].includes("Invalid Date"))&&i.status;break;case"agoin":i.valueDate=w(s),i.haystack=2==n.length?[n[0],n[1]]:[n[0],n[0]],i.haystackTimeMs=i.haystack.map(e=>(i.timeSpan={time:e.replace(I(k.patterns.general.nonDecimal),""),duration:e.replace(I(k.patterns.general.nonAlphabet),"").toLowerCase()},k.timeDuration.includes(i.timeSpan.duration)&&0=i.range.min&&i.valueDate.getTime()<=i.range.max,l=![String(i.valueDate)].includes("Invalid Date")&&i.status;break;case"first":s=Array.isArray(s)?isNaN(D)?s[0]||[]:s.slice(0,Number(D)):s;break;case"last":s=Array.isArray(s)?isNaN(D)?s[s.length-1]||[]:s.slice(-Number(D.replace(I(k.patterns.general.nonDigit),""))):s;break;case"btw":i.haystack=2==n.length?[Number(n[0])-1,n[1]]:[0,n[0]],s=Array.isArray(s)?s.slice(i.haystack[0],i.haystack[1])||[]:s;break;case"dist":let t=new Set([]),a=new Set([]);s=Array.isArray(s)?Array.from(s,e=>"object"!=typeof e||r==D?t.add(e):e[D]&&a.has(e[D])?null:t.add(e)&&a.add(e[D])):s,s=Array.from(t.values())}m.add(l)}u.omit||(g[u.alias||u.property]=s)}}else if(c.hasOwnProperty(h))if(1===d[h])i||(g[h]=c[h]);else{let e=!1,t="and",a=String(),r=null;var S,y,N;k.holder.objectOps.has(s[o+1])&&(y=s[o+1],S=h,r=k.holder.objectOps.get(y),a="*instr-p:id_"+x(),t=r.mode,r.operation.length)&&(y=r.operation.findIndex(e=>e.match(/^as:\".*\"$/)),e=!(0<=y)||(N=String(r.operation[y]).split(":")[1],r.currentKeyAlias=N.replace(I(k.patterns.general.quotes,!0,!0),""),r.operation.splice(y,1),0{if(!e||!e.app)throw new Error("No app detected.");new s(e)};const s=class{constructor(e=null){e.app.set("syntaxeEnabledStatus",e.enabled),e.app.use(this.#request)}async#request(e,s,t){var{resolve:a,schema:n}=(0,r.scanDirectives)(e,s),e=e.app.get("syntaxeEnabledStatus");s.set("Syntaxe-Enabled",e),e&&a&&(s.syntaxeSchema=await(0,r.filterSchema)(n),s.syntaxeSchema.status?new d(s):(s.set("Syntaxe-Schema-Resolved",!1),s.set("Syntaxe-Schema-Resolved-Error","Query failed. Check your schema and try again."))),t()}},d=class{#response;#data;#send;constructor(e){this.#response=e,this.#send=this.#response.send,this.#response.send=this.#delegate()}#delegate(){return async e=>{this.#data=await(0,r.walkThroughHandler)({data:e,res:this.#response})??e,this.#respond()}}#respond(){this.#send.call(this.#response,this.#data)}};exports.default=e; \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var r=require("./lib/engine.js"),e=new Object;e.init=(e=null)=>{if(!e||!e.app)throw new Error("No app detected.");new t(e)};const t=class{constructor(e=null){this.#configureForAdapter(e)}#configureForAdapter(e){try{e.app&&"function"==typeof e.app.getHttpAdapter&&Object.getOwnPropertySymbols(e.app.getHttpAdapter().getInstance()).find(e=>"Symbol(fastify.state)"==e.toString())&&e.enabled&&this.#adjustToAdapterInstance(e);var t=e.enabled?this.#syntaxeEnabled:this.#syntaxeDisabled;e.app.use(t)}catch(e){console.error(e)}}#adjustToAdapterInstance(e){try{var t=e.app.getHttpAdapter().getInstance();t.addHook("onRequest",(e,t,a)=>{t.setHeader=function(e,t){return this.raw.setHeader(e,t)},t.end=function(){this.raw.end()},e.res=t,a()}),t.addHook("onSend",(e,t,a,s)=>{t.syntaxeSchema=e.raw.syntaxeSchema,(0,r.walkThroughHandler)({data:a,res:t}).then(e=>{s(null,e)}).catch(e=>s(null,a))})}catch(e){console.error(e)}}async#syntaxeEnabled(e,t,a){try{var{resolve:s,schema:n}=(0,r.scanDirectives)(e,t);t.setHeader("Syntaxe-Enabled",!0),s&&(t.syntaxeSchema=e.syntaxeSchema=await(0,r.filterSchema)(n),t.syntaxeSchema.status?new d(t):(t.setHeader("Syntaxe-Schema-Resolved",!1),t.setHeader("Syntaxe-Schema-Resolved-Error","Query failed. Check your schema and try again.")))}catch(e){console.error(e)}a()}async#syntaxeDisabled(e,t,a){t.setHeader("Syntaxe-Enabled",!1),a()}},d=class{#response;#data;#send;constructor(e){this.#response=e,this.#send=this.#response.send,this.#response.send=this.#delegate()}#delegate(){return async e=>{this.#data=await(0,r.walkThroughHandler)({data:e,res:this.#response})??e,this.#respond()}}#respond(){this.#send.call(this.#response,this.#data)}};exports.default=e; \ No newline at end of file diff --git a/dist/esm/index.js b/dist/esm/index.js index 650a10e..97866fe 100644 --- a/dist/esm/index.js +++ b/dist/esm/index.js @@ -1 +1 @@ -import{scanDirectives as r,filterSchema as d,walkThroughHandler as s}from"./lib/engine.js";var e=new Object;e.init=(e=null)=>{if(!e||!e.app)throw new Error("No app detected.");new a(e)};const a=class{constructor(e=null){e.app.set("syntaxeEnabledStatus",e.enabled),e.app.use(this.#request)}async#request(e,s,a){var{resolve:t,schema:n}=r(e,s),e=e.app.get("syntaxeEnabledStatus");s.set("Syntaxe-Enabled",e),e&&t&&(s.syntaxeSchema=await d(n),s.syntaxeSchema.status?new i(s):(s.set("Syntaxe-Schema-Resolved",!1),s.set("Syntaxe-Schema-Resolved-Error","Query failed. Check your schema and try again."))),a()}},i=class{#response;#data;#send;constructor(e){this.#response=e,this.#send=this.#response.send,this.#response.send=this.#delegate()}#delegate(){return async e=>{this.#data=await s({data:e,res:this.#response})??e,this.#respond()}}#respond(){this.#send.call(this.#response,this.#data)}};export default e; \ No newline at end of file +import{scanDirectives as r,filterSchema as o,walkThroughHandler as n}from"./lib/engine.js";var e=new Object;e.init=(e=null)=>{if(!e||!e.app)throw new Error("No app detected.");new t(e)};const t=class{constructor(e=null){this.#configureForAdapter(e)}#configureForAdapter(e){try{e.app&&"function"==typeof e.app.getHttpAdapter&&Object.getOwnPropertySymbols(e.app.getHttpAdapter().getInstance()).find(e=>"Symbol(fastify.state)"==e.toString())&&e.enabled&&this.#adjustToAdapterInstance(e);var t=e.enabled?this.#syntaxeEnabled:this.#syntaxeDisabled;e.app.use(t)}catch(e){console.error(e)}}#adjustToAdapterInstance(e){try{var t=e.app.getHttpAdapter().getInstance();t.addHook("onRequest",(e,t,a)=>{t.setHeader=function(e,t){return this.raw.setHeader(e,t)},t.end=function(){this.raw.end()},e.res=t,a()}),t.addHook("onSend",(e,t,a,s)=>{t.syntaxeSchema=e.raw.syntaxeSchema,n({data:a,res:t}).then(e=>{s(null,e)}).catch(e=>s(null,a))})}catch(e){console.error(e)}}async#syntaxeEnabled(e,t,a){try{var{resolve:s,schema:n}=r(e,t);t.setHeader("Syntaxe-Enabled",!0),s&&(t.syntaxeSchema=e.syntaxeSchema=await o(n),t.syntaxeSchema.status?new d(t):(t.setHeader("Syntaxe-Schema-Resolved",!1),t.setHeader("Syntaxe-Schema-Resolved-Error","Query failed. Check your schema and try again.")))}catch(e){console.error(e)}a()}async#syntaxeDisabled(e,t,a){t.setHeader("Syntaxe-Enabled",!1),a()}},d=class{#response;#data;#send;constructor(e){this.#response=e,this.#send=this.#response.send,this.#response.send=this.#delegate()}#delegate(){return async e=>{this.#data=await n({data:e,res:this.#response})??e,this.#respond()}}#respond(){this.#send.call(this.#response,this.#data)}};export default e; \ No newline at end of file diff --git a/dist/esm/lib/engine.js b/dist/esm/lib/engine.js index 0004751..192984f 100644 --- a/dist/esm/lib/engine.js +++ b/dist/esm/lib/engine.js @@ -1 +1 @@ -import{flags as s,patterns as k,holder as I,monthMap as w,dayMap as x,timeDuration as L,timeDurationMap as M}from"./helpers.js";const T=(e,a,t,r)=>new RegExp((a?"^":"")+String(e).substr(1,String(e).length-2)+(t?"$":""),r||"gi"),A=(...e)=>e.length?new Date(...e):new Date,P=(e,a,t)=>Math.random().toString(e??20).substring(a??2,t??12),F=e=>{for(var a of w)if(a[1].includes(e.toLowerCase()))return a[0]+1;return 0},O=e=>{for(var a of x)if(a[1].includes(e.toLowerCase()))return a[0]+1;return 0};var e=(e,a)=>{let t=!1,r=String(),i=!1;try{for(var n in e.headers)n.toLowerCase()==s.resolve.toLowerCase()?(t=!0,r=atob(e.headers[n])):n.toLowerCase()==s.client.toLowerCase()&&(i=!0);return{resolve:t,schema:r,client:i}}catch(e){return a.set("Syntaxe-Schema-Resolved",!1),a.set("Syntaxe-Schema-Resolved-Error",String(e)),console.error({date:new Date,error:e}),{resolve:!1}}};var a=async e=>{try{var a=await(async a=>{try{I.propertyOps=new Map,I.objectOps=new Map,I.rootOp=null,I.context="json";let m;return String(a).trim().startsWith("[")&&(I.context="root",a="{ rootPropertyIdentifier }"+a),String(a).replace(T(k.general.newLine),"").replace(T(k.operations.propertyOp),(_,e)=>{let a=_.split("").indexOf("["),t=_.substring(0,a),r=_.substring(a).replace(T(k.general.opList),"]*^*[").split("*^*"),i="*instr-p:id_"+P(),n=r.map(e=>String(e).replace(T(k.general.operation,!0,!0),"")),s="and";(m=JSON.stringify(n)).match(/"cond:/)&&(s=m.match(/"cond:\\"or\\"/)?"or":"and",n=n.filter(e=>!e.match(/cond:/)));var _=T(k.general.omission,null,!0),l=t.trim().match(_);return I.propertyOps.set(i,{property:t.trim().replace(_,""),operation:n,condition:s,omit:Boolean(l)}),i}).replace(T(k.operations.objectOp,null,!0),(_,e)=>{let a=_.split("").indexOf("["),t=_.substring(a).replace(T(k.general.opList),"]*^*[").split("*^*"),r=t.map(e=>String(e).replace(T(k.general.operation,!0,!0),""));return m=JSON.stringify(r),I.condition=m.match(/"cond:/)&&m.match(/"cond:\\"or\\"/)?"or":"and",I.mode=m.match(/"mode:/)&&m.match(/"mode:\\"or\\"/)?"or":"and",r=r.filter(e=>!e.match(/mode:/)&&!e.match(/cond:/)),I.rootOp=r,"}"}).replace(T(k.operations.objectOp),(_,e)=>{let a=_.split("").indexOf("["),t=_.substring(a).replace(T(k.general.opList),"]*^*[").split("*^*"),r="*instr-o:id_"+P(),i=t.map(e=>String(e).replace(T(k.general.operation,!0,!0),"")),n="and",s="and";return(m=JSON.stringify(i)).match(/"cond:/)&&(n=m.match(/"cond:\\"or\\"/)?"or":"and",i=i.filter(e=>!e.match(/cond:/))),m.match(/"mode:/)&&(s=m.match(/"mode:\\"or\\"/)?"or":"and",i=i.filter(e=>!e.match(/mode:/))),I.objectOps.set(r,{operation:i,mode:s,condition:n}),"} "+r})}catch(e){return a}})(e),t=String(a).replace(T(k.general.newLine),"").replace(T(k.schema.commaAndSpace)," ").replace(T(k.schema.objectProperty),(_,e)=>`"${e}"`).replace(T(k.schema.spaceAndBrace),(_,e)=>({'" "':'":1, "','" {':'": {','"{':'": {','" }':'":1 }','"}':'":1 }'})[_]||"").replace(T(k.schema.braceAndSpace),'}, "');return{status:!0,schema:JSON.parse(t)}}catch(e){return{status:!1}}},t=async({data:a,res:t})=>{var r=t.syntaxeSchema["schema"];if(r)try{var i,n,s="string"==typeof a&&"root"!=I.context?JSON.parse(a):a;let e="json"==I.context?(await C({schema:r,subject:s})).result:s;return I.rootOp&&(i="*instr-p:id_"+P(),I.propertyOps.set(i,{property:I.rootKey,operation:I.rootOp,condition:I.condition}),n=await C({schema:{[i]:1},subject:{[I.rootKey]:e}}),e=n.schemaPass?n.result[I.rootKey]:n.result[I.rootKey]instanceof Array?[]:Object.create(null)),t.set("Syntaxe-Schema-Resolved",!0),JSON.stringify(e)}catch(e){t.set("Syntaxe-Schema-Resolved",!1),t.set("Syntaxe-Schema-Resolved-Error",String(e)),console.error({date:new Date,error:e,schema:r})}};const C=async({schema:c,subject:d,mode:e})=>{let g={},a=!0,t=new Set([]),D=null;if(Array.isArray(d)){g=[];for(var r of d){r=await C({schema:c,subject:r,mode:e});r.schemaPass&&g.push(r.result)}}else{let s=Object.keys(c),o=-1;for(var h of s){++o;let l=!0,m=new Set([]),u=null,e=T(k.general.omission,null,!0),i=Boolean(h.match(e)),n=h;if(h=h.replace(e,""),I.propertyOps.has(h)){let s=d[(u=I.propertyOps.get(h)).property];if(d.hasOwnProperty(u.property)){for(let a=0;a{e=String(e).trim().replace(T(k.general.quotes,!0,!0),"");return["sin","snin","yin","ynin","btw"].includes(r)?Number(e):e}):[]);switch(r){case"as":u.alias=D;break;case"rew":D=D==r?"":D,s=String(s).replace(T(k.general.raws),D||"");break;case"rw":D=D==r?"":D,s=String(s).replace(T(k.general.ws),D||"");break;case"eq":l=String(s)===D;break;case"eqi":l=String(s).toLowerCase()===D.toLowerCase();break;case"ne":l=String(s)!==D;break;case"nei":l=String(s).toLowerCase()!==D.toLowerCase();break;case"gt":l=Number(s)>Number(D);break;case"gte":l=Number(s)>=Number(D);break;case"lt":l=Number(s)n.some(e=>e==a||e===a)):n.some(e=>e==s||e===s);break;case"nin":l=Array.isArray(s)?s.every(a=>!n.some(e=>e==a||e===a)):!n.some(e=>e==s||e===s);break;case"ini":case"nini":n=n.join(",").toLowerCase().split(","),i.status=Array.isArray(s)?s.some(e=>Array.from(n).includes(String(e).toLowerCase())):Array.from(n).includes(String(s).toLowerCase()),l="ini"==r?i.status:!i.status;break;case"regex":case"regexne":i.regexPattern=D.trim().substring(1).split("/"),i.status=new RegExp(i.regexPattern[0],i.regexPattern[1]).test(s),l="regex"==r?i.status:!i.status;break;case"regexin":case"regexnin":i.regexCluster=D.replace(T(k.general.operation,!0,!0),"").split(","),l=i.regexCluster.some(e=>(i.regexPattern=e.trim().substring(1).split("/"),i.status=Array.isArray(s)?s.some(e=>new RegExp(i.regexPattern[0],i.regexPattern[1]).test(e)):new RegExp(i.regexPattern[0],i.regexPattern[1]).test(s),"regexin"==r?i.status:!i.status));break;case"size":s=s instanceof Array||"string"==typeof s?s.length:"object"==typeof s?Object.keys(s).length:s;break;case"seq":l=s.length==Number(D);break;case"sne":l=s.length!=Number(D);break;case"sgt":l=s.length>Number(D);break;case"slt":l=s.length=Number(D);break;case"slte":l=s.length<=Number(D);break;case"sin":case"snin":var[p,f]=[Math.min(...Array.from(n)),Math.max(...Array.from(n))];i.status=s.length>=p&&s.length<=f,l="sin"==r?i.status:!i.status;break;case"dteq":case"dtne":[i.valueDate,i.filteredDate]=[A(s).toLocaleDateString(),A(D).toLocaleDateString()],i.status="Invalid Date"!=i.valueDate&&i.valueDate==i.filteredDate,l="dteq"==r?i.status:!i.status;break;case"dtgt":case"dtlt":[i.valueDate,i.filteredDate]=[A(A(s).toLocaleDateString()),A(A(D).toLocaleDateString())],l=![String(i.valueDate),String(i.filteredDate)].includes("Invalid Date")&&("dtgt"==r?i.valueDate>i.filteredDate:i.valueDatei.filteredDate:i.valueDate{e=A(e).toLocaleDateString();return"Invalid Date"!=e&&i.valueDate==e}),l=![String(i.valueDate)].includes("Invalid Date")&&("dtin"==r?i.status:!i.status);break;case"dtinrange":case"dtninrange":i.valueDate=A(A(s).toLocaleDateString()),i.haystack={min:A(A(n[0]).toLocaleDateString()),max:2==n.length?A(A(n[1]).toLocaleDateString()):A().toLocaleDateString()},i.status=(i.valueDate>i.haystack.min||i.valueDate.toLocaleDateString()==i.haystack.min.toLocaleDateString())&&(i.valueDatei.filteredDate:i.valueDatei.filteredDate:i.valueDate{e=A(e);return"Invalid Date"!=e&&String(i.valueDate)==String(e)}),l=![String(i.valueDate)].includes("Invalid Date")&&("dtmin"==r?i.status:!i.status);break;case"dtminrange":case"dtmninrange":i.valueDate=A(s),i.haystack={min:A(n[0]),max:A(n[1])},i.status=(i.valueDate>i.haystack.min||String(i.valueDate)==String(i.haystack.min))&&(i.valueDateNumber(i.filteredDate):Number(i.valueDate.getFullYear())=Number(i.filteredDate):Number(i.valueDate.getFullYear())<=Number(i.filteredDate));break;case"yin":case"ynin":i.valueDate=A(s),i.haystack=n,i.status=i.haystack.some(e=>"Invalid Date"!=e&&String(i.valueDate.getFullYear())==String(e)),l=![String(i.valueDate)].includes("Invalid Date")&&("yin"==r?i.status:!i.status);break;case"yinrange":case"yninrange":i.valueDate=A(s),i.haystack={min:n[0],max:n[1]},i.status=Number(i.valueDate.getFullYear())>=Number(i.haystack.min)&&Number(i.valueDate.getFullYear())<=Number(i.haystack.max),l=![String(i.valueDate)].includes("Invalid Date")&&("yinrange"==r?i.status:!i.status);break;case"meq":case"mne":[i.valueDate,i.filteredDate]=[A(s),D],i.monthFilter=(i.valueDate.getMonth()||0)+1,i.status=![String(i.valueDate)].includes("Invalid Date")&&(isNaN(i.filteredDate)&&Array.from(w.get(i.valueDate.getMonth())).includes(String(i.filteredDate).toLowerCase())||!isNaN(i.filteredDate)&&String(i.monthFilter)==String(Number(i.filteredDate))),l="meq"==r?i.status:!i.status;break;case"mgt":case"mlt":i.valueDate=A(s),i.monthFilter=(i.valueDate.getMonth()||0)+1,i.filteredDate=isNaN(D)?F(D):D,l=![String(i.valueDate)].includes("Invalid Date")&&1<=Number(i.filteredDate)&&Number(i.filteredDate)<=12&&("mgt"==r?Number(i.monthFilter)>Number(i.filteredDate):Number(i.monthFilter)=Number(i.filteredDate):Number(i.monthFilter)<=Number(i.filteredDate));break;case"min":case"mnin":i.valueDate=A(s),i.monthFilter=(i.valueDate.getMonth()||0)+1,i.haystack=n,i.status=i.haystack.some(e=>{e=isNaN(e)?F(e):e;return String(i.monthFilter)==String(Number(e))}),l=![String(i.valueDate)].includes("Invalid Date")&&("min"==r?i.status:!i.status);break;case"minrange":case"mninrange":i.valueDate=A(s),i.monthFilter=(i.valueDate.getMonth()||0)+1,i.isNaN=n.some(e=>isNaN(e)),i.haystack=i.isNaN?n.map(e=>isNaN(e)?F(e):e):[n[0],n[1]],i.haystack={min:Math.min(i.haystack[0],i.haystack[1]),max:Math.max(i.haystack[0],i.haystack[1])},i.status=1<=Number(i.haystack.min)&&Number(i.haystack.max)<=12&&Number(i.monthFilter)>=Number(i.haystack.min)&&Number(i.monthFilter)<=Number(i.haystack.max),l=![String(i.valueDate)].includes("Invalid Date")&&("minrange"==r?i.status:!i.status);break;case"today":[i.valueDate,i.filteredDate]=[A(s),A()],l=![String(i.valueDate)].includes("Invalid Date")&&i.valueDate.toLocaleDateString()==i.filteredDate.toLocaleDateString();break;case"deq":case"dne":[i.valueDate,i.filteredDate]=[A(s),D],i.status=![String(i.valueDate)].includes("Invalid Date")&&(isNaN(i.filteredDate)&&Array.from(x.get(i.valueDate.getDay())).includes(String(i.filteredDate).toLowerCase())||!isNaN(i.filteredDate)&&String(i.valueDate.getDate())==String(Number(i.filteredDate))),l="deq"==r?i.status:!i.status;break;case"dgt":case"dlt":[i.valueDate,i.filteredDate]=[A(s),D],l=![String(i.valueDate)].includes("Invalid Date")&&("dgt"==r?Number(i.valueDate.getDate())>Number(i.filteredDate):Number(i.valueDate.getDate())=Number(i.filteredDate):Number(i.valueDate.getDate())<=Number(i.filteredDate));break;case"din":case"dnin":i.valueDate=A(s),i.haystack=n,i.status=i.haystack.some(e=>String(Number(i.valueDate.getDate()))==String(Number(e))),l=![String(i.valueDate)].includes("Invalid Date")&&("din"==r?i.status:!i.status);break;case"dinrange":case"dninrange":i.valueDate=A(s),i.haystack={min:Math.min(n[0],n[1]),max:Math.max(n[0],n[1])},i.status=1<=Number(i.haystack.min)&&Number(i.haystack.max)<=31&&Number(i.valueDate.getDate())>=Number(i.haystack.min)&&Number(i.valueDate.getDate())<=Number(i.haystack.max),l=![String(i.valueDate)].includes("Invalid Date")&&("dinrange"==r?i.status:!i.status);break;case"dweq":case"dwne":[i.valueDate,i.filteredDate]=[A(s),D],i.dayFilter=(i.valueDate.getDay()||0)+1,i.status=![String(i.valueDate)].includes("Invalid Date")&&(isNaN(i.filteredDate)&&Array.from(x.get(i.valueDate.getDay())).includes(String(i.filteredDate).toLowerCase())||!isNaN(i.filteredDate)&&String(i.dayFilter)==String(Number(i.filteredDate))),l="dweq"==r?i.status:!i.status;break;case"dwgt":case"dwlt":i.valueDate=A(s),i.dayFilter=(i.valueDate.getDay()||0)+1,i.filteredDate=isNaN(D)?O(D):D,l=![String(i.valueDate)].includes("Invalid Date")&&1<=Number(i.filteredDate)&&Number(i.filteredDate)<=7&&("dwgt"==r?Number(i.dayFilter)>Number(i.filteredDate):Number(i.dayFilter)=Number(i.filteredDate):Number(i.dayFilter)<=Number(i.filteredDate));break;case"dwin":case"dwnin":i.valueDate=A(s),i.dayFilter=(i.valueDate.getDay()||0)+1,i.haystack=n,i.status=i.haystack.some(e=>{e=isNaN(e)?O(e):e;return String(i.dayFilter)==String(Number(e))}),l=![String(i.valueDate)].includes("Invalid Date")&&("dwin"==r?i.status:!i.status);break;case"dwinrange":case"dwninrange":i.valueDate=A(s),i.dayFilter=(i.valueDate.getDay()||0)+1,i.isNaN=n.some(e=>isNaN(e)),i.haystack=i.isNaN?n.map(e=>isNaN(e)?O(e):e):[n[0],n[1]],i.haystack={min:Math.min(i.haystack[0],i.haystack[1]),max:Math.max(i.haystack[0],i.haystack[1])},i.status=1<=Number(i.haystack.min)&&Number(i.haystack.max)<=7&&Number(i.dayFilter)>=Number(i.haystack.min)&&Number(i.dayFilter)<=Number(i.haystack.max),l=![String(i.valueDate)].includes("Invalid Date")&&("dwinrange"==r?i.status:!i.status);break;case"heq":case"hne":case"hgt":case"hlt":case"hgte":case"hlte":switch([i.valueDate,i.filteredDate]=[A(s),D],i.isNaN=isNaN(i.filteredDate),i.timeInfo=i.isNaN?{hour:Number(i.filteredDate.replace(T(k.general.nonDigit),"")),meridiem:i.filteredDate.replace(T(k.general.nonAlphabet),"")}:{hour:Number(i.filteredDate)},i.isNaN&&(i.timeInfo.hour+="pm"==i.timeInfo.meridiem.toLowerCase()&&12!=i.timeInfo.hour?12:"am"==i.timeInfo.meridiem.toLowerCase()&&12!=i.timeInfo.hour||"am"==i.timeInfo.meridiem.toLowerCase()?0:-12),r){case"heq":case"hne":i.status=![String(i.valueDate)].includes("Invalid Date")&&String(i.valueDate.getHours())==String(i.timeInfo.hour),l="heq"==r?i.status:!i.status;break;case"hgt":case"hlt":l=![String(i.valueDate)].includes("Invalid Date")&&("hgt"==r?i.valueDate.getHours()>i.timeInfo.hour:i.valueDate.getHours()=i.timeInfo.hour:i.valueDate.getHours()<=i.timeInfo.hour)}break;case"hin":case"hnin":i.valueDate=A(s),i.status=![String(i.valueDate)].includes("Invalid Date")&&n.some(e=>(i.isNaN=isNaN(e),i.timeInfo=i.isNaN?{hour:Number(String(e).replace(T(k.general.nonDigit),"")),meridiem:String(e).replace(T(k.general.nonAlphabet),"")}:{hour:Number(e)},i.isNaN&&(i.timeInfo.hour+="pm"==i.timeInfo.meridiem.toLowerCase()&&12!=i.timeInfo.hour?12:"am"==i.timeInfo.meridiem.toLowerCase()&&12!=i.timeInfo.hour||"am"==i.timeInfo.meridiem.toLowerCase()?0:-12),String(i.valueDate.getHours())==String(i.timeInfo.hour))),l="hin"==r?i.status:!i.status;break;case"hinrange":case"hninrange":i.valueDate=A(s),i.haystack=2<=n.length?[n[0],n[1]]:[n[0],n[0]],i.timeInfoRange=i.haystack.map(e=>(i.isNaN=isNaN(e),i.timeInfo=i.isNaN?{hour:Number(String(e).replace(T(k.general.nonDigit),"")),meridiem:String(e).replace(T(k.general.nonAlphabet),"")}:{hour:Number(e)},i.isNaN&&(i.timeInfo.hour+="pm"==i.timeInfo.meridiem.toLowerCase()&&12!=i.timeInfo.hour?12:"am"==i.timeInfo.meridiem.toLowerCase()&&12!=i.timeInfo.hour||"am"==i.timeInfo.meridiem.toLowerCase()?0:-12),i.timeInfo.hour)),i.haystack=[Math.min(...i.timeInfoRange),Math.max(...i.timeInfoRange)],i.status=![String(i.valueDate)].includes("Invalid Date")&&Number(i.valueDate.getHours())>=i.haystack[0]&&Number(i.valueDate.getHours())<=i.haystack[1],l="hinrange"==r?i.status:!i.status;break;case"mineq":case"minne":case"mingt":case"minlt":case"mingte":case"minlte":switch([i.valueDate,i.filteredDate]=[A(s),D],i.minutes=i.valueDate.getMinutes(),r){case"mineq":case"minne":i.status=![String(i.valueDate)].includes("Invalid Date")&&String(i.minutes)==String(Number(i.filteredDate)),l="mineq"==r?i.status:!i.status;break;case"mingt":case"minlt":l=![String(i.valueDate)].includes("Invalid Date")&&("mingt"==r?i.minutes>Number(i.filteredDate):i.minutes=Number(i.filteredDate):i.minutes<=Number(i.filteredDate))}break;case"minin":case"minnin":i.valueDate=A(s),i.minutes=i.valueDate.getMinutes(),i.status=![String(i.valueDate)].includes("Invalid Date")&&n.some(e=>String(Number(e))==String(i.minutes)),l="minin"==r?i.status:!i.status;break;case"mininrange":case"minninrange":i.valueDate=A(s),i.minutes=i.valueDate.getMinutes(),i.haystack=2<=n.length?[n[0],n[1]]:[n[0],n[n.length-1]],i.status=![String(i.valueDate)].includes("Invalid Date")&&i.minutes>=i.haystack[0]&&i.minutes<=i.haystack[1],l="mininrange"==r?i.status:!i.status;break;case"teq":case"tne":case"tgt":case"tlt":switch([i.valueDate,i.filteredDate]=[A(s),D],i.possibleMeridiem=i.filteredDate.replace(T(k.general.nonAlphabet),"").toLowerCase(),i.hasMeridiem=["am","pm"].includes(i.possibleMeridiem),i.timeParts=i.filteredDate.replace(T(k.general.nonTimeXter),"").split(":").map(e=>Number(e)),i.timeInfo=i.hasMeridiem?{hour:Number(i.timeParts[0]),meridiem:i.possibleMeridiem}:{hour:Number(i.timeParts[0])},i.hasMeridiem&&(i.timeInfo.hour+="pm"==i.timeInfo.meridiem&&12!=i.timeInfo.hour?12:"am"==i.timeInfo.meridiem&&12!=i.timeInfo.hour||"am"==i.timeInfo.meridiem?0:-12),i.timeParts[0]=i.timeInfo.hour,i.valueTimeParts=[i.valueDate.getHours(),i.valueDate.getMinutes(),i.valueDate.getSeconds()],i.valueDateTime=A(...I.defaultDate,...i.valueTimeParts),i.filteredDateTime=A(...I.defaultDate,...i.timeParts),r){case"teq":case"tne":i.status=![String(i.valueDate)].includes("Invalid Date")&&String(i.valueDateTime)==String(i.filteredDateTime),l="teq"==r?i.status:!i.status;break;case"tgt":case"tlt":l=![String(i.valueDate)].includes("Invalid Date")&&("tgt"==r?i.valueDateTime>i.filteredDateTime:i.valueDateTime=i.filteredDateTime:i.valueDateTime<=i.filteredDateTime)}break;case"tin":case"tnin":i.valueDate=A(s),i.valueTimeParts=[i.valueDate.getHours(),i.valueDate.getMinutes(),i.valueDate.getSeconds()],i.valueDateTime=A(...I.defaultDate,...i.valueTimeParts),i.status=![String(i.valueDate)].includes("Invalid Date")&&n.some(e=>(i.possibleMeridiem=String(e).replace(T(k.general.nonAlphabet),"").toLowerCase(),i.hasMeridiem=["am","pm"].includes(i.possibleMeridiem),i.timeParts=String(e).replace(T(k.general.nonTimeXter),"").split(":").map(e=>Number(e)),i.timeInfo=i.hasMeridiem?{hour:Number(i.timeParts[0]),meridiem:i.possibleMeridiem}:{hour:Number(i.timeParts[0])},i.hasMeridiem&&(i.timeInfo.hour+="pm"==i.timeInfo.meridiem&&12!=i.timeInfo.hour?12:"am"==i.timeInfo.meridiem&&12!=i.timeInfo.hour||"am"==i.timeInfo.meridiem?0:-12),i.timeParts[0]=i.timeInfo.hour,i.filteredDateTime=A(...I.defaultDate,...i.timeParts),String(i.valueDateTime)==String(i.filteredDateTime))),l="tin"==r?i.status:!i.status;break;case"tinrange":case"tninrange":i.valueDate=A(s),i.valueTimeParts=[i.valueDate.getHours(),i.valueDate.getMinutes(),i.valueDate.getSeconds()],i.valueDateTime=A(...I.defaultDate,...i.valueTimeParts),i.haystack=2<=n.length?[n[0],n[1]]:[n[0],n[0]],i.haystackTimeParts=i.haystack.map(e=>(i.possibleMeridiem=String(e).replace(T(k.general.nonAlphabet),"").toLowerCase(),i.hasMeridiem=["am","pm"].includes(i.possibleMeridiem),i.timeParts=String(e).replace(T(k.general.nonTimeXter),"").split(":").map(e=>Number(e)),i.timeInfo=i.hasMeridiem?{hour:Number(i.timeParts[0]),meridiem:i.possibleMeridiem}:{hour:Number(i.timeParts[0])},i.hasMeridiem&&(i.timeInfo.hour+="pm"==i.timeInfo.meridiem&&12!=i.timeInfo.hour?12:"am"==i.timeInfo.meridiem&&12!=i.timeInfo.hour||"am"==i.timeInfo.meridiem?0:-12),i.timeParts[0]=i.timeInfo.hour,A(...I.defaultDate,...i.timeParts))),i.status=![String(i.valueDate)].includes("Invalid Date")&&(i.valueDateTime>i.haystackTimeParts[0]||String(i.valueDateTime)==String(i.haystackTimeParts[0]))&&(i.valueDateTime=i.range.min&&i.valueDate.getTime()<=(i.range.maxWithSign||i.range.max):i.valueDate.getTime()<=i.range.min:i.valueDate.getTime()>=i.range.min&&i.valueDate.getTime()<=i.range.max,![String(i.valueDate)].includes("Invalid Date"))&&i.status;break;case"agoin":i.valueDate=A(s),i.haystack=2==n.length?[n[0],n[1]]:[n[0],n[0]],i.haystackTimeMs=i.haystack.map(e=>(i.timeSpan={time:e.replace(T(k.general.nonDecimal),""),duration:e.replace(T(k.general.nonAlphabet),"").toLowerCase()},L.includes(i.timeSpan.duration)&&0=i.range.min&&i.valueDate.getTime()<=i.range.max,l=![String(i.valueDate)].includes("Invalid Date")&&i.status;break;case"first":s=Array.isArray(s)?isNaN(D)?s[0]||[]:s.slice(0,Number(D)):s;break;case"last":s=Array.isArray(s)?isNaN(D)?s[s.length-1]||[]:s.slice(-Number(D.replace(T(k.general.nonDigit),""))):s;break;case"btw":i.haystack=2==n.length?[Number(n[0])-1,n[1]]:[0,n[0]],s=Array.isArray(s)?s.slice(i.haystack[0],i.haystack[1])||[]:s;break;case"dist":let a=new Set([]),t=new Set([]);s=Array.isArray(s)?Array.from(s,e=>"object"!=typeof e||r==D?a.add(e):e[D]&&t.has(e[D])?null:a.add(e)&&t.add(e[D])):s,s=Array.from(a.values())}m.add(l)}u.omit||(g[u.alias||u.property]=s)}}else if(d.hasOwnProperty(h))if(1===c[h])i||(g[h]=d[h]);else{let e=!1,a="and",t=String(),r=null;var S,y,N;I.objectOps.has(s[o+1])&&(y=s[o+1],S=h,r=I.objectOps.get(y),t="*instr-p:id_"+P(),a=r.mode,r.operation.length)&&(y=r.operation.findIndex(e=>e.match(/^as:\".*\"$/)),e=!(0<=y)||(N=String(r.operation[y]).split(":")[1],r.currentKeyAlias=N.replace(T(k.general.quotes,!0,!0),""),r.operation.splice(y,1),0new RegExp((a?"^":"")+String(e).substr(1,String(e).length-2)+(t?"$":""),r||"gi"),A=(...e)=>e.length?new Date(...e):new Date,P=(e,a,t)=>Math.random().toString(e??20).substring(a??2,t??12),F=e=>{for(var a of w)if(a[1].includes(e.toLowerCase()))return a[0]+1;return 0},O=e=>{for(var a of x)if(a[1].includes(e.toLowerCase()))return a[0]+1;return 0};var e=(e,a)=>{let t=!1,r=String(),i=!1;try{for(var n in e.headers)n.toLowerCase()==s.resolve.toLowerCase()?(t=!0,r=atob(e.headers[n])):n.toLowerCase()==s.client.toLowerCase()&&(i=!0);return{resolve:t,schema:r,client:i}}catch(e){return a.setHeader("Syntaxe-Schema-Resolved",!1),a.setHeader("Syntaxe-Schema-Resolved-Error",String(e)),console.error({date:new Date,error:e}),{resolve:!1}}};var a=async e=>{try{var a=await(async a=>{try{I.propertyOps=new Map,I.objectOps=new Map,I.rootOp=null,I.context="json";let m;return String(a).trim().startsWith("[")&&(I.context="root",a="{ rootPropertyIdentifier }"+a),String(a).replace(T(k.general.newLine),"").replace(T(k.operations.propertyOp),(_,e)=>{let a=_.split("").indexOf("["),t=_.substring(0,a),r=_.substring(a).replace(T(k.general.opList),"]*^*[").split("*^*"),i="*instr-p:id_"+P(),n=r.map(e=>String(e).replace(T(k.general.operation,!0,!0),"")),s="and";(m=JSON.stringify(n)).match(/"cond:/)&&(s=m.match(/"cond:\\"or\\"/)?"or":"and",n=n.filter(e=>!e.match(/cond:/)));var _=T(k.general.omission,null,!0),l=t.trim().match(_);return I.propertyOps.set(i,{property:t.trim().replace(_,""),operation:n,condition:s,omit:Boolean(l)}),i}).replace(T(k.operations.objectOp,null,!0),(_,e)=>{let a=_.split("").indexOf("["),t=_.substring(a).replace(T(k.general.opList),"]*^*[").split("*^*"),r=t.map(e=>String(e).replace(T(k.general.operation,!0,!0),""));return m=JSON.stringify(r),I.condition=m.match(/"cond:/)&&m.match(/"cond:\\"or\\"/)?"or":"and",I.mode=m.match(/"mode:/)&&m.match(/"mode:\\"or\\"/)?"or":"and",r=r.filter(e=>!e.match(/mode:/)&&!e.match(/cond:/)),I.rootOp=r,"}"}).replace(T(k.operations.objectOp),(_,e)=>{let a=_.split("").indexOf("["),t=_.substring(a).replace(T(k.general.opList),"]*^*[").split("*^*"),r="*instr-o:id_"+P(),i=t.map(e=>String(e).replace(T(k.general.operation,!0,!0),"")),n="and",s="and";return(m=JSON.stringify(i)).match(/"cond:/)&&(n=m.match(/"cond:\\"or\\"/)?"or":"and",i=i.filter(e=>!e.match(/cond:/))),m.match(/"mode:/)&&(s=m.match(/"mode:\\"or\\"/)?"or":"and",i=i.filter(e=>!e.match(/mode:/))),I.objectOps.set(r,{operation:i,mode:s,condition:n}),"} "+r})}catch(e){return a}})(e),t=String(a).replace(T(k.general.newLine),"").replace(T(k.schema.commaAndSpace)," ").replace(T(k.schema.objectProperty),(_,e)=>`"${e}"`).replace(T(k.schema.spaceAndBrace),(_,e)=>({'" "':'":1, "','" {':'": {','"{':'": {','" }':'":1 }','"}':'":1 }'})[_]||"").replace(T(k.schema.braceAndSpace),'}, "');return{status:!0,schema:JSON.parse(t)}}catch(e){return{status:!1}}},t=async({data:a,res:t})=>{var r=t.syntaxeSchema["schema"];if(r)try{var i,n,s="string"==typeof a&&"root"!=I.context?JSON.parse(a):a;let e="json"==I.context?(await C({schema:r,subject:s})).result:s;return I.rootOp&&(i="*instr-p:id_"+P(),I.propertyOps.set(i,{property:I.rootKey,operation:I.rootOp,condition:I.condition}),n=await C({schema:{[i]:1},subject:{[I.rootKey]:e}}),e=n.schemaPass?n.result[I.rootKey]:n.result[I.rootKey]instanceof Array?[]:Object.create(null)),t.setHeader("Syntaxe-Schema-Resolved",!0),JSON.stringify(e)}catch(e){t.setHeader("Syntaxe-Schema-Resolved",!1),t.setHeader("Syntaxe-Schema-Resolved-Error",String(e)),console.error({date:new Date,error:e,schema:r})}};const C=async({schema:c,subject:d,mode:e})=>{let g={},a=!0,t=new Set([]),D=null;if(Array.isArray(d)){g=[];for(var r of d){r=await C({schema:c,subject:r,mode:e});r.schemaPass&&g.push(r.result)}}else{let s=Object.keys(c),o=-1;for(var h of s){++o;let l=!0,m=new Set([]),u=null,e=T(k.general.omission,null,!0),i=Boolean(h.match(e)),n=h;if(h=h.replace(e,""),I.propertyOps.has(h)){let s=d[(u=I.propertyOps.get(h)).property];if(d.hasOwnProperty(u.property)){for(let a=0;a{e=String(e).trim().replace(T(k.general.quotes,!0,!0),"");return["sin","snin","yin","ynin","btw"].includes(r)?Number(e):e}):[]);switch(r){case"as":u.alias=D;break;case"rew":D=D==r?"":D,s=String(s).replace(T(k.general.raws),D||"");break;case"rw":D=D==r?"":D,s=String(s).replace(T(k.general.ws),D||"");break;case"eq":l=String(s)===D;break;case"eqi":l=String(s).toLowerCase()===D.toLowerCase();break;case"ne":l=String(s)!==D;break;case"nei":l=String(s).toLowerCase()!==D.toLowerCase();break;case"gt":l=Number(s)>Number(D);break;case"gte":l=Number(s)>=Number(D);break;case"lt":l=Number(s)n.some(e=>e==a||e===a)):n.some(e=>e==s||e===s);break;case"nin":l=Array.isArray(s)?s.every(a=>!n.some(e=>e==a||e===a)):!n.some(e=>e==s||e===s);break;case"ini":case"nini":n=n.join(",").toLowerCase().split(","),i.status=Array.isArray(s)?s.some(e=>Array.from(n).includes(String(e).toLowerCase())):Array.from(n).includes(String(s).toLowerCase()),l="ini"==r?i.status:!i.status;break;case"regex":case"regexne":i.regexPattern=D.trim().substring(1).split("/"),i.status=new RegExp(i.regexPattern[0],i.regexPattern[1]).test(s),l="regex"==r?i.status:!i.status;break;case"regexin":case"regexnin":i.regexCluster=D.replace(T(k.general.operation,!0,!0),"").split(","),l=i.regexCluster.some(e=>(i.regexPattern=e.trim().substring(1).split("/"),i.status=Array.isArray(s)?s.some(e=>new RegExp(i.regexPattern[0],i.regexPattern[1]).test(e)):new RegExp(i.regexPattern[0],i.regexPattern[1]).test(s),"regexin"==r?i.status:!i.status));break;case"size":s=s instanceof Array||"string"==typeof s?s.length:"object"==typeof s?Object.keys(s).length:s;break;case"seq":l=s.length==Number(D);break;case"sne":l=s.length!=Number(D);break;case"sgt":l=s.length>Number(D);break;case"slt":l=s.length=Number(D);break;case"slte":l=s.length<=Number(D);break;case"sin":case"snin":var[p,f]=[Math.min(...Array.from(n)),Math.max(...Array.from(n))];i.status=s.length>=p&&s.length<=f,l="sin"==r?i.status:!i.status;break;case"dteq":case"dtne":[i.valueDate,i.filteredDate]=[A(s).toLocaleDateString(),A(D).toLocaleDateString()],i.status="Invalid Date"!=i.valueDate&&i.valueDate==i.filteredDate,l="dteq"==r?i.status:!i.status;break;case"dtgt":case"dtlt":[i.valueDate,i.filteredDate]=[A(A(s).toLocaleDateString()),A(A(D).toLocaleDateString())],l=![String(i.valueDate),String(i.filteredDate)].includes("Invalid Date")&&("dtgt"==r?i.valueDate>i.filteredDate:i.valueDatei.filteredDate:i.valueDate{e=A(e).toLocaleDateString();return"Invalid Date"!=e&&i.valueDate==e}),l=![String(i.valueDate)].includes("Invalid Date")&&("dtin"==r?i.status:!i.status);break;case"dtinrange":case"dtninrange":i.valueDate=A(A(s).toLocaleDateString()),i.haystack={min:A(A(n[0]).toLocaleDateString()),max:2==n.length?A(A(n[1]).toLocaleDateString()):A().toLocaleDateString()},i.status=(i.valueDate>i.haystack.min||i.valueDate.toLocaleDateString()==i.haystack.min.toLocaleDateString())&&(i.valueDatei.filteredDate:i.valueDatei.filteredDate:i.valueDate{e=A(e);return"Invalid Date"!=e&&String(i.valueDate)==String(e)}),l=![String(i.valueDate)].includes("Invalid Date")&&("dtmin"==r?i.status:!i.status);break;case"dtminrange":case"dtmninrange":i.valueDate=A(s),i.haystack={min:A(n[0]),max:A(n[1])},i.status=(i.valueDate>i.haystack.min||String(i.valueDate)==String(i.haystack.min))&&(i.valueDateNumber(i.filteredDate):Number(i.valueDate.getFullYear())=Number(i.filteredDate):Number(i.valueDate.getFullYear())<=Number(i.filteredDate));break;case"yin":case"ynin":i.valueDate=A(s),i.haystack=n,i.status=i.haystack.some(e=>"Invalid Date"!=e&&String(i.valueDate.getFullYear())==String(e)),l=![String(i.valueDate)].includes("Invalid Date")&&("yin"==r?i.status:!i.status);break;case"yinrange":case"yninrange":i.valueDate=A(s),i.haystack={min:n[0],max:n[1]},i.status=Number(i.valueDate.getFullYear())>=Number(i.haystack.min)&&Number(i.valueDate.getFullYear())<=Number(i.haystack.max),l=![String(i.valueDate)].includes("Invalid Date")&&("yinrange"==r?i.status:!i.status);break;case"meq":case"mne":[i.valueDate,i.filteredDate]=[A(s),D],i.monthFilter=(i.valueDate.getMonth()||0)+1,i.status=![String(i.valueDate)].includes("Invalid Date")&&(isNaN(i.filteredDate)&&Array.from(w.get(i.valueDate.getMonth())).includes(String(i.filteredDate).toLowerCase())||!isNaN(i.filteredDate)&&String(i.monthFilter)==String(Number(i.filteredDate))),l="meq"==r?i.status:!i.status;break;case"mgt":case"mlt":i.valueDate=A(s),i.monthFilter=(i.valueDate.getMonth()||0)+1,i.filteredDate=isNaN(D)?F(D):D,l=![String(i.valueDate)].includes("Invalid Date")&&1<=Number(i.filteredDate)&&Number(i.filteredDate)<=12&&("mgt"==r?Number(i.monthFilter)>Number(i.filteredDate):Number(i.monthFilter)=Number(i.filteredDate):Number(i.monthFilter)<=Number(i.filteredDate));break;case"min":case"mnin":i.valueDate=A(s),i.monthFilter=(i.valueDate.getMonth()||0)+1,i.haystack=n,i.status=i.haystack.some(e=>{e=isNaN(e)?F(e):e;return String(i.monthFilter)==String(Number(e))}),l=![String(i.valueDate)].includes("Invalid Date")&&("min"==r?i.status:!i.status);break;case"minrange":case"mninrange":i.valueDate=A(s),i.monthFilter=(i.valueDate.getMonth()||0)+1,i.isNaN=n.some(e=>isNaN(e)),i.haystack=i.isNaN?n.map(e=>isNaN(e)?F(e):e):[n[0],n[1]],i.haystack={min:Math.min(i.haystack[0],i.haystack[1]),max:Math.max(i.haystack[0],i.haystack[1])},i.status=1<=Number(i.haystack.min)&&Number(i.haystack.max)<=12&&Number(i.monthFilter)>=Number(i.haystack.min)&&Number(i.monthFilter)<=Number(i.haystack.max),l=![String(i.valueDate)].includes("Invalid Date")&&("minrange"==r?i.status:!i.status);break;case"today":[i.valueDate,i.filteredDate]=[A(s),A()],l=![String(i.valueDate)].includes("Invalid Date")&&i.valueDate.toLocaleDateString()==i.filteredDate.toLocaleDateString();break;case"deq":case"dne":[i.valueDate,i.filteredDate]=[A(s),D],i.status=![String(i.valueDate)].includes("Invalid Date")&&(isNaN(i.filteredDate)&&Array.from(x.get(i.valueDate.getDay())).includes(String(i.filteredDate).toLowerCase())||!isNaN(i.filteredDate)&&String(i.valueDate.getDate())==String(Number(i.filteredDate))),l="deq"==r?i.status:!i.status;break;case"dgt":case"dlt":[i.valueDate,i.filteredDate]=[A(s),D],l=![String(i.valueDate)].includes("Invalid Date")&&("dgt"==r?Number(i.valueDate.getDate())>Number(i.filteredDate):Number(i.valueDate.getDate())=Number(i.filteredDate):Number(i.valueDate.getDate())<=Number(i.filteredDate));break;case"din":case"dnin":i.valueDate=A(s),i.haystack=n,i.status=i.haystack.some(e=>String(Number(i.valueDate.getDate()))==String(Number(e))),l=![String(i.valueDate)].includes("Invalid Date")&&("din"==r?i.status:!i.status);break;case"dinrange":case"dninrange":i.valueDate=A(s),i.haystack={min:Math.min(n[0],n[1]),max:Math.max(n[0],n[1])},i.status=1<=Number(i.haystack.min)&&Number(i.haystack.max)<=31&&Number(i.valueDate.getDate())>=Number(i.haystack.min)&&Number(i.valueDate.getDate())<=Number(i.haystack.max),l=![String(i.valueDate)].includes("Invalid Date")&&("dinrange"==r?i.status:!i.status);break;case"dweq":case"dwne":[i.valueDate,i.filteredDate]=[A(s),D],i.dayFilter=(i.valueDate.getDay()||0)+1,i.status=![String(i.valueDate)].includes("Invalid Date")&&(isNaN(i.filteredDate)&&Array.from(x.get(i.valueDate.getDay())).includes(String(i.filteredDate).toLowerCase())||!isNaN(i.filteredDate)&&String(i.dayFilter)==String(Number(i.filteredDate))),l="dweq"==r?i.status:!i.status;break;case"dwgt":case"dwlt":i.valueDate=A(s),i.dayFilter=(i.valueDate.getDay()||0)+1,i.filteredDate=isNaN(D)?O(D):D,l=![String(i.valueDate)].includes("Invalid Date")&&1<=Number(i.filteredDate)&&Number(i.filteredDate)<=7&&("dwgt"==r?Number(i.dayFilter)>Number(i.filteredDate):Number(i.dayFilter)=Number(i.filteredDate):Number(i.dayFilter)<=Number(i.filteredDate));break;case"dwin":case"dwnin":i.valueDate=A(s),i.dayFilter=(i.valueDate.getDay()||0)+1,i.haystack=n,i.status=i.haystack.some(e=>{e=isNaN(e)?O(e):e;return String(i.dayFilter)==String(Number(e))}),l=![String(i.valueDate)].includes("Invalid Date")&&("dwin"==r?i.status:!i.status);break;case"dwinrange":case"dwninrange":i.valueDate=A(s),i.dayFilter=(i.valueDate.getDay()||0)+1,i.isNaN=n.some(e=>isNaN(e)),i.haystack=i.isNaN?n.map(e=>isNaN(e)?O(e):e):[n[0],n[1]],i.haystack={min:Math.min(i.haystack[0],i.haystack[1]),max:Math.max(i.haystack[0],i.haystack[1])},i.status=1<=Number(i.haystack.min)&&Number(i.haystack.max)<=7&&Number(i.dayFilter)>=Number(i.haystack.min)&&Number(i.dayFilter)<=Number(i.haystack.max),l=![String(i.valueDate)].includes("Invalid Date")&&("dwinrange"==r?i.status:!i.status);break;case"heq":case"hne":case"hgt":case"hlt":case"hgte":case"hlte":switch([i.valueDate,i.filteredDate]=[A(s),D],i.isNaN=isNaN(i.filteredDate),i.timeInfo=i.isNaN?{hour:Number(i.filteredDate.replace(T(k.general.nonDigit),"")),meridiem:i.filteredDate.replace(T(k.general.nonAlphabet),"")}:{hour:Number(i.filteredDate)},i.isNaN&&(i.timeInfo.hour+="pm"==i.timeInfo.meridiem.toLowerCase()&&12!=i.timeInfo.hour?12:"am"==i.timeInfo.meridiem.toLowerCase()&&12!=i.timeInfo.hour||"am"==i.timeInfo.meridiem.toLowerCase()?0:-12),r){case"heq":case"hne":i.status=![String(i.valueDate)].includes("Invalid Date")&&String(i.valueDate.getHours())==String(i.timeInfo.hour),l="heq"==r?i.status:!i.status;break;case"hgt":case"hlt":l=![String(i.valueDate)].includes("Invalid Date")&&("hgt"==r?i.valueDate.getHours()>i.timeInfo.hour:i.valueDate.getHours()=i.timeInfo.hour:i.valueDate.getHours()<=i.timeInfo.hour)}break;case"hin":case"hnin":i.valueDate=A(s),i.status=![String(i.valueDate)].includes("Invalid Date")&&n.some(e=>(i.isNaN=isNaN(e),i.timeInfo=i.isNaN?{hour:Number(String(e).replace(T(k.general.nonDigit),"")),meridiem:String(e).replace(T(k.general.nonAlphabet),"")}:{hour:Number(e)},i.isNaN&&(i.timeInfo.hour+="pm"==i.timeInfo.meridiem.toLowerCase()&&12!=i.timeInfo.hour?12:"am"==i.timeInfo.meridiem.toLowerCase()&&12!=i.timeInfo.hour||"am"==i.timeInfo.meridiem.toLowerCase()?0:-12),String(i.valueDate.getHours())==String(i.timeInfo.hour))),l="hin"==r?i.status:!i.status;break;case"hinrange":case"hninrange":i.valueDate=A(s),i.haystack=2<=n.length?[n[0],n[1]]:[n[0],n[0]],i.timeInfoRange=i.haystack.map(e=>(i.isNaN=isNaN(e),i.timeInfo=i.isNaN?{hour:Number(String(e).replace(T(k.general.nonDigit),"")),meridiem:String(e).replace(T(k.general.nonAlphabet),"")}:{hour:Number(e)},i.isNaN&&(i.timeInfo.hour+="pm"==i.timeInfo.meridiem.toLowerCase()&&12!=i.timeInfo.hour?12:"am"==i.timeInfo.meridiem.toLowerCase()&&12!=i.timeInfo.hour||"am"==i.timeInfo.meridiem.toLowerCase()?0:-12),i.timeInfo.hour)),i.haystack=[Math.min(...i.timeInfoRange),Math.max(...i.timeInfoRange)],i.status=![String(i.valueDate)].includes("Invalid Date")&&Number(i.valueDate.getHours())>=i.haystack[0]&&Number(i.valueDate.getHours())<=i.haystack[1],l="hinrange"==r?i.status:!i.status;break;case"mineq":case"minne":case"mingt":case"minlt":case"mingte":case"minlte":switch([i.valueDate,i.filteredDate]=[A(s),D],i.minutes=i.valueDate.getMinutes(),r){case"mineq":case"minne":i.status=![String(i.valueDate)].includes("Invalid Date")&&String(i.minutes)==String(Number(i.filteredDate)),l="mineq"==r?i.status:!i.status;break;case"mingt":case"minlt":l=![String(i.valueDate)].includes("Invalid Date")&&("mingt"==r?i.minutes>Number(i.filteredDate):i.minutes=Number(i.filteredDate):i.minutes<=Number(i.filteredDate))}break;case"minin":case"minnin":i.valueDate=A(s),i.minutes=i.valueDate.getMinutes(),i.status=![String(i.valueDate)].includes("Invalid Date")&&n.some(e=>String(Number(e))==String(i.minutes)),l="minin"==r?i.status:!i.status;break;case"mininrange":case"minninrange":i.valueDate=A(s),i.minutes=i.valueDate.getMinutes(),i.haystack=2<=n.length?[n[0],n[1]]:[n[0],n[n.length-1]],i.status=![String(i.valueDate)].includes("Invalid Date")&&i.minutes>=i.haystack[0]&&i.minutes<=i.haystack[1],l="mininrange"==r?i.status:!i.status;break;case"teq":case"tne":case"tgt":case"tlt":switch([i.valueDate,i.filteredDate]=[A(s),D],i.possibleMeridiem=i.filteredDate.replace(T(k.general.nonAlphabet),"").toLowerCase(),i.hasMeridiem=["am","pm"].includes(i.possibleMeridiem),i.timeParts=i.filteredDate.replace(T(k.general.nonTimeXter),"").split(":").map(e=>Number(e)),i.timeInfo=i.hasMeridiem?{hour:Number(i.timeParts[0]),meridiem:i.possibleMeridiem}:{hour:Number(i.timeParts[0])},i.hasMeridiem&&(i.timeInfo.hour+="pm"==i.timeInfo.meridiem&&12!=i.timeInfo.hour?12:"am"==i.timeInfo.meridiem&&12!=i.timeInfo.hour||"am"==i.timeInfo.meridiem?0:-12),i.timeParts[0]=i.timeInfo.hour,i.valueTimeParts=[i.valueDate.getHours(),i.valueDate.getMinutes(),i.valueDate.getSeconds()],i.valueDateTime=A(...I.defaultDate,...i.valueTimeParts),i.filteredDateTime=A(...I.defaultDate,...i.timeParts),r){case"teq":case"tne":i.status=![String(i.valueDate)].includes("Invalid Date")&&String(i.valueDateTime)==String(i.filteredDateTime),l="teq"==r?i.status:!i.status;break;case"tgt":case"tlt":l=![String(i.valueDate)].includes("Invalid Date")&&("tgt"==r?i.valueDateTime>i.filteredDateTime:i.valueDateTime=i.filteredDateTime:i.valueDateTime<=i.filteredDateTime)}break;case"tin":case"tnin":i.valueDate=A(s),i.valueTimeParts=[i.valueDate.getHours(),i.valueDate.getMinutes(),i.valueDate.getSeconds()],i.valueDateTime=A(...I.defaultDate,...i.valueTimeParts),i.status=![String(i.valueDate)].includes("Invalid Date")&&n.some(e=>(i.possibleMeridiem=String(e).replace(T(k.general.nonAlphabet),"").toLowerCase(),i.hasMeridiem=["am","pm"].includes(i.possibleMeridiem),i.timeParts=String(e).replace(T(k.general.nonTimeXter),"").split(":").map(e=>Number(e)),i.timeInfo=i.hasMeridiem?{hour:Number(i.timeParts[0]),meridiem:i.possibleMeridiem}:{hour:Number(i.timeParts[0])},i.hasMeridiem&&(i.timeInfo.hour+="pm"==i.timeInfo.meridiem&&12!=i.timeInfo.hour?12:"am"==i.timeInfo.meridiem&&12!=i.timeInfo.hour||"am"==i.timeInfo.meridiem?0:-12),i.timeParts[0]=i.timeInfo.hour,i.filteredDateTime=A(...I.defaultDate,...i.timeParts),String(i.valueDateTime)==String(i.filteredDateTime))),l="tin"==r?i.status:!i.status;break;case"tinrange":case"tninrange":i.valueDate=A(s),i.valueTimeParts=[i.valueDate.getHours(),i.valueDate.getMinutes(),i.valueDate.getSeconds()],i.valueDateTime=A(...I.defaultDate,...i.valueTimeParts),i.haystack=2<=n.length?[n[0],n[1]]:[n[0],n[0]],i.haystackTimeParts=i.haystack.map(e=>(i.possibleMeridiem=String(e).replace(T(k.general.nonAlphabet),"").toLowerCase(),i.hasMeridiem=["am","pm"].includes(i.possibleMeridiem),i.timeParts=String(e).replace(T(k.general.nonTimeXter),"").split(":").map(e=>Number(e)),i.timeInfo=i.hasMeridiem?{hour:Number(i.timeParts[0]),meridiem:i.possibleMeridiem}:{hour:Number(i.timeParts[0])},i.hasMeridiem&&(i.timeInfo.hour+="pm"==i.timeInfo.meridiem&&12!=i.timeInfo.hour?12:"am"==i.timeInfo.meridiem&&12!=i.timeInfo.hour||"am"==i.timeInfo.meridiem?0:-12),i.timeParts[0]=i.timeInfo.hour,A(...I.defaultDate,...i.timeParts))),i.status=![String(i.valueDate)].includes("Invalid Date")&&(i.valueDateTime>i.haystackTimeParts[0]||String(i.valueDateTime)==String(i.haystackTimeParts[0]))&&(i.valueDateTime=i.range.min&&i.valueDate.getTime()<=(i.range.maxWithSign||i.range.max):i.valueDate.getTime()<=i.range.min:i.valueDate.getTime()>=i.range.min&&i.valueDate.getTime()<=i.range.max,![String(i.valueDate)].includes("Invalid Date"))&&i.status;break;case"agoin":i.valueDate=A(s),i.haystack=2==n.length?[n[0],n[1]]:[n[0],n[0]],i.haystackTimeMs=i.haystack.map(e=>(i.timeSpan={time:e.replace(T(k.general.nonDecimal),""),duration:e.replace(T(k.general.nonAlphabet),"").toLowerCase()},L.includes(i.timeSpan.duration)&&0=i.range.min&&i.valueDate.getTime()<=i.range.max,l=![String(i.valueDate)].includes("Invalid Date")&&i.status;break;case"first":s=Array.isArray(s)?isNaN(D)?s[0]||[]:s.slice(0,Number(D)):s;break;case"last":s=Array.isArray(s)?isNaN(D)?s[s.length-1]||[]:s.slice(-Number(D.replace(T(k.general.nonDigit),""))):s;break;case"btw":i.haystack=2==n.length?[Number(n[0])-1,n[1]]:[0,n[0]],s=Array.isArray(s)?s.slice(i.haystack[0],i.haystack[1])||[]:s;break;case"dist":let a=new Set([]),t=new Set([]);s=Array.isArray(s)?Array.from(s,e=>"object"!=typeof e||r==D?a.add(e):e[D]&&t.has(e[D])?null:a.add(e)&&t.add(e[D])):s,s=Array.from(a.values())}m.add(l)}u.omit||(g[u.alias||u.property]=s)}}else if(d.hasOwnProperty(h))if(1===c[h])i||(g[h]=d[h]);else{let e=!1,a="and",t=String(),r=null;var S,y,N;I.objectOps.has(s[o+1])&&(y=s[o+1],S=h,r=I.objectOps.get(y),t="*instr-p:id_"+P(),a=r.mode,r.operation.length)&&(y=r.operation.findIndex(e=>e.match(/^as:\".*\"$/)),e=!(0<=y)||(N=String(r.operation[y]).split(":")[1],r.currentKeyAlias=N.replace(T(k.general.quotes,!0,!0),""),r.operation.splice(y,1),0 { }; const SyntaxeRequestGate = class { - constructor(config = null){ - config.app.set('syntaxeEnabledStatus', config.enabled); - config.app.use(this.#request); + constructor(config = null) { + this.#configureForAdapter(config); } - async #request(req, res, next) { - const { resolve, schema, client } = scanDirectives(req, res); + #configureForAdapter(config) { + try { + if (config.app && typeof config.app.getHttpAdapter == "function") { + const fastifyEnabled = Object.getOwnPropertySymbols(config.app.getHttpAdapter().getInstance()) + .find(s => s.toString() == 'Symbol(fastify.state)'); + if (fastifyEnabled && config.enabled) + this.#adjustToAdapterInstance(config); + } + + const syntaxeProcessor = (config.enabled ? this.#syntaxeEnabled : this.#syntaxeDisabled); + + config.app.use(syntaxeProcessor); + } catch(err) { + console.error(err); + } + } + + #adjustToAdapterInstance(config) { + try { + const instance = config.app.getHttpAdapter().getInstance(); + instance.addHook('onRequest', (request, reply, done) => { + reply.setHeader = function (key, value) { + return this.raw.setHeader(key, value); + }; - const enabledStatus = req.app.get('syntaxeEnabledStatus'); - - res.set('Syntaxe-Enabled', enabledStatus); + reply.end = function () { + this.raw.end(); + }; - if (enabledStatus && resolve) { - res.syntaxeSchema = await filterSchema(schema); - if (res.syntaxeSchema.status) - new SyntaxeResponseGate(res); - else { - res.set('Syntaxe-Schema-Resolved', false); - res.set('Syntaxe-Schema-Resolved-Error', 'Query failed. Check your schema and try again.'); + request.res = reply; + + done(); + }); + instance.addHook('onSend', (request, reply, data, done) => { + reply.syntaxeSchema = request.raw.syntaxeSchema; + walkThroughHandler({ data, res: reply }) + .then(result => { + done(null, result); + }).catch(e => done(null, data)); + }); + } catch(err) { + console.error(err); + } + } + + async #syntaxeEnabled(req, res, next) { + try { + const { resolve, schema, client } = scanDirectives(req, res); + + res.setHeader('Syntaxe-Enabled', true); + + if (resolve) { + res.syntaxeSchema = req.syntaxeSchema = await filterSchema(schema); + if (res.syntaxeSchema.status) + new SyntaxeResponseGate(res); + else { + res.setHeader('Syntaxe-Schema-Resolved', false); + res.setHeader('Syntaxe-Schema-Resolved-Error', 'Query failed. Check your schema and try again.'); + } } + } catch(err) { + console.error(err); } next(); } + + async #syntaxeDisabled(req, res, next) { + res.setHeader('Syntaxe-Enabled', false); + next(); + } }; const SyntaxeResponseGate = class { diff --git a/src/lib/engine.js b/src/lib/engine.js index cd2bbdf..43a3076 100644 --- a/src/lib/engine.js +++ b/src/lib/engine.js @@ -53,8 +53,8 @@ const scanDirectives = (req, res) => { return { resolve, schema, client }; } catch(err) { - res.set('Syntaxe-Schema-Resolved', false); - res.set('Syntaxe-Schema-Resolved-Error', String(err)); + res.setHeader('Syntaxe-Schema-Resolved', false); + res.setHeader('Syntaxe-Schema-Resolved-Error', String(err)); console.error({ date: new Date(), error: err @@ -247,12 +247,12 @@ const walkThroughHandler = async({ data, res }) => { } // response header - res.set('Syntaxe-Schema-Resolved', true); + res.setHeader('Syntaxe-Schema-Resolved', true); return JSON.stringify(result); } catch(err) { - res.set('Syntaxe-Schema-Resolved', false); - res.set('Syntaxe-Schema-Resolved-Error', String(err)); + res.setHeader('Syntaxe-Schema-Resolved', false); + res.setHeader('Syntaxe-Schema-Resolved-Error', String(err)); console.error({ date: new Date(), error: err,