UNPKG

typizator-test

Version:

Test utilities for the typizator library.

2 lines (1 loc) 3.83 kB
"use strict";var B=Object.create;var f=Object.defineProperty;var j=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var I=Object.getPrototypeOf,E=Object.prototype.hasOwnProperty;var $=(n,r)=>{for(var g in r)f(n,g,{get:r[g],enumerable:!0})},w=(n,r,g,b)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of A(r))!E.call(n,o)&&o!==g&&f(n,o,{get:()=>r[o],enumerable:!(b=j(r,o))||b.enumerable});return n};var F=(n,r,g)=>(g=n!=null?B(I(n)):{},w(r||!n||!n.__esModule?f(g,"default",{value:n,enumerable:!0}):g,n)),U=n=>w(f({},"__esModule",{value:!0}),n);var Y={};$(Y,{extendExpectWithToBeUlidish:()=>J,extendExpectWithToContainTable:()=>P});module.exports=U(Y);var x=require("typizator"),T=F(require("json-bigint")),S=require("console-table-printer"),p=n=>{try{return BigInt(n),!0}catch{return!1}},P=()=>expect.extend({toContainTable(n,r,g,b){if(!Array.isArray(n))return{pass:!1,message:()=>`Received object ${n} is not an array`};let o=(0,x.transformToArray)(g);if(o.length==0)return{pass:!1,message:()=>"Cannot compare to an empty table"};let u=[],N=[],l=new Map;Object.keys(o[0]).forEach(i=>{let m=r.metadata.fields.get(i);m?(l.set(i,m),N.push({name:i,alignment:"left"})):(u.push(i),N.push({name:i,alignment:"left",color:"red"}))});let e=new S.Table({title:b,columns:N});if(u.length>0)return o.forEach(i=>e.addRow(i)),e.printTable(),{pass:!1,message:()=>`Columns absent in the checked type: ${u.join(",")}`};let y={},M=o.every(i=>{let m={},C=Array.from(Object.keys(i).reduce((a,s)=>{let t=i[s];m[s]=t;let c=l.get(s);return a.set(s,t==="*"?"*":typeof t=="string"&&(t.startsWith(">")||t.startsWith("<")||t.startsWith("~"))?t:c.unbox(t))},new Map)),O=-1,h={key:"",value:""},D=n.some(a=>C.every(([s,t],c)=>{let W=t==="*"||typeof t=="string"&&typeof a[s]=="bigint"&&(t.startsWith("<=")&&p(t.substring(2))&&BigInt(t.substring(2)).valueOf()>=a[s]||t.startsWith(">=")&&p(t.substring(2))&&BigInt(t.substring(2)).valueOf()<=a[s]||t.startsWith("<")&&p(t.substring(1))&&BigInt(t.substring(1)).valueOf()>a[s]||t.startsWith(">")&&p(t.substring(1))&&BigInt(t.substring(1)).valueOf()<a[s])||typeof t=="string"&&typeof a[s]=="number"&&(t.startsWith("<=")&&!Number.isNaN(t.substring(2))&&Number(t.substring(2)).valueOf()>=a[s]||t.startsWith(">=")&&!Number.isNaN(t.substring(2))&&Number(t.substring(2)).valueOf()<=a[s]||t.startsWith("<")&&!Number.isNaN(t.substring(1))&&Number(t.substring(1)).valueOf()>a[s]||t.startsWith(">")&&!Number.isNaN(t.substring(1))&&Number(t.substring(1)).valueOf()<a[s])||typeof t=="string"&&a[s]instanceof Date&&(t.startsWith("<=")&&!isNaN(Date.parse(t.substring(2)))&&new Date(t.substring(2)).getTime()>=a[s].getTime()||t.startsWith(">=")&&!isNaN(Date.parse(t.substring(2)))&&new Date(t.substring(2)).getTime()<=a[s].getTime()||t.startsWith("<")&&!isNaN(Date.parse(t.substring(1)))&&new Date(t.substring(1)).getTime()>a[s].getTime()||t.startsWith(">")&&!isNaN(Date.parse(t.substring(1)))&&new Date(t.substring(1)).getTime()<a[s].getTime())||typeof t=="string"&&t.startsWith("~")&&Number(t.substring(1))===Math.round(Number(a[s]))||t==="@ulid"&&d(a[s])||t==="@blankString"&&a[s]?.toString().trim()===""||t==="@sha256"&&a[s]?.match(/\b[A-Fa-f0-9]{64}\b/)||t?.getTime&&a[s]?.getTime()===t.getTime()||a[s]===t;return!W&&c>O&&(h={key:s,value:a[s]},O=c),W}));return D?e.addRow(m,{color:"green"}):(y=i,m[h.key]=`--> ${m[h.key]?.toString().trim()??"EMPTY"} !== ${h.value?.toString().trim()??"EMPTY"} <--`,e.addRow(m,{color:"red"})),D}),R=e.table.rows.length;return o.forEach((i,m)=>{m>=R&&e.addRow(i)}),e.printTable(),{pass:M,message:()=>`Received ${T.default.stringify(n,null,3)} doesn't contain ${T.default.stringify(y,null,3)}`}}}),d=n=>n.match(/[0-7][0-9A-HJKMNP-TV-Z]{25}/)!==null,J=()=>expect.extend({toBeUlidish(n){return{pass:d(n),message:()=>`Received ${n} result doesn't match the ULID pattern`}}});