UNPKG

nanotypes

Version:

Minimal, runtime-safe type checks for modern Vanilla JS

2 lines (1 loc) 2.53 kB
var s=new Set(["Function","Object","Symbol","Math","JSON","Reflect","Crypto"]);function a([e,n]){return typeof n=="function"&&typeof n.prototype=="object"&&n.prototype!==null&&/^[A-Z]/.test(e)&&!s.has(e)}var p={HTMLCanvasElement:"canvas",HTMLVideoElement:"video",HTMLAudioElement:"audio",URL:"url",URLSearchParams:"urlSearchParams",URIError:"uriError",DOMException:"domException"};function u(e){return p[e]||e[0].toLowerCase()+e.slice(1)}function l(){let e=Reflect.ownKeys(globalThis).map(n=>[n,globalThis[n]]).filter(([n])=>typeof n=="string").filter(a).map(([n,o])=>[u(n),o]);return typeof Intl=="object"&&(e.push(["intlDateTimeFormat",Intl.DateTimeFormat]),e.push(["intlNumberFormat",Intl.NumberFormat]),e.push(["intlCollator",Intl.Collator])),Object.fromEntries(e)}var c=l();var f={string:"string",number:"number",boolean:"boolean",bigint:"bigint",symbol:"symbol",undefined:"undefined",func:"function"};var m=typeof window<"u"&&window.__DEV__===!0;function t(e,n){let o=e instanceof n;return!o&&m&&console.warn(`Expected ${n.name}, got ${e?.constructor?.name||typeof e}`,e),o}for(let[e,n]of Object.entries(c))t[e]=o=>o instanceof n;for(let[e,n]of Object.entries(f))t[e]=o=>typeof o===n;t.numberSafe=e=>typeof e=="number"&&!Number.isNaN(e);t.array=e=>Array.isArray(e);t.defined=e=>e!=null;t.nullish=e=>e==null;t.nil=e=>e===null;t.contentEditable=e=>e instanceof HTMLElement&&e.isContentEditable===!0;t.object=e=>e&&typeof e=="object"&&!Array.isArray(e);t.objectStrict=e=>Object.prototype.toString.call(e)==="[object Object]";t.plainObject=e=>t.objectStrict(e)&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null);t.pojo=t.plainObject;t.objectLoose=e=>typeof e=="object"&&e!==null;var b={truthy:e=>!!e,falsy:e=>!e,emptyString:e=>e==="",nonEmptyString:e=>typeof e=="string"&&e.length>0,positiveNumber:e=>t.numberSafe(e)&&e>0,negativeNumber:e=>t.numberSafe(e)&&e<0,integer:e=>Number.isInteger(e),finite:e=>Number.isFinite(e)};Object.assign(t,b);var r={value(e){return e===null?"null":e===void 0?"undefined":Array.isArray(e)?"Array":typeof e=="object"?e.constructor?.name||"Object":typeof e}};var y=typeof window<"u"&&window.__DEV__===!0;function i(e,n){if(!t(e,n))throw new TypeError(`Expected ${n.name}, got ${r.value(e)}`)}var d=new Set(["length","name","prototype","default","__proto__"]);for(let e of Object.keys(t))d.has(e)||typeof t[e]=="function"&&(i[e]=n=>{if(!t[e](n))throw new TypeError(`Expected ${e}, got ${r.value(n)}`)});y||Object.freeze(i);export{i as assertType,r as describe,t as is};