@muze-nl/assert 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/browser.js CHANGED
@@ -1,2 +1 @@
1
- function t(t,n,e,a){Object.defineProperty(t,n,{get:e,set:a,enumerable:!0,configurable:!0})}var n={};function e(){globalThis.assertEnabled=!0}function a(){globalThis.assertEnabled=!1}function r(t,n){if(globalThis.assertEnabled){let e=y(t,n);if(e)throw new b("Assertions failed",e,t)}}function o(t){return function(n,e,a){return null!=n&&void 0!==n&&y(n,t,e,a)}}function i(t){return function(n,e,a){return null==n||void 0===n?m("data is required",n,t||"any value",a):void 0!==t&&y(n,t,e,a)}}function s(...t){return function(n,e,a){return null==n||void 0===n?(console.warn("data does not contain recommended value",n,t,a),!1):y(n,t,e,a)}}function f(...t){return function(n,e,a){for(let r of t)if(!y(n,r,e,a))return!1;return m("data does not match oneOf patterns",n,t,a)}}function l(...t){return function(n,e,a){if(!Array.isArray(n))return m("data is not an array",n,"anyOf",a);for(let e of n)if(f(...t)(e))return m("data does not match anyOf patterns",e,t,a);return!1}}function u(...t){return function(n,e,a){let r=[];for(let o of t)r=r.concat(y(n,o,e,a));if((r=r.filter(Boolean)).length)return m("data does not match all given patterns",n,t,a,r)}}function c(t,n,e){try{t instanceof URL&&(t=t.href);let n=new URL(t);if(n.href!=t&&!(n.href+"/"==t||n.href==t+"/"))return m("data is not a valid url",t,"validURL",e)}catch(n){return m("data is not a valid url",t,"validURL",e)}}function d(t,n,e){if(!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t))return m("data is not a valid email",t,"validEmail",e)}function h(t){return function(n,e,a){if(!(n instanceof t))return m("data is not an instanceof pattern",n,t,a)}}function p(t){return function(n,e,a){if(!y(n,t,e,a))return m("data matches pattern, when required not to",n,t,a)}}function y(t,n,e,a=""){e||(e=t);let r=[];if(n===Boolean)"boolean"==typeof t||t instanceof Boolean||r.push(m("data is not a boolean",t,n,a));else if(n===Number)"number"==typeof t||t instanceof Number||r.push(m("data is not a number",t,n,a));else if(n===String)"string"==typeof t||t instanceof String||r.push(m("data is not a string",t,n,a)),""==t&&r.push(m("data is an empty string, which is not allowed",t,n,a));else if(n instanceof RegExp){if(Array.isArray(t)){let o=t.findIndex((t,r)=>y(t,n,e,a+"["+r+"]"));o>-1&&r.push(m("data["+o+"] does not match pattern",t[o],n,a+"["+o+"]"))}else void 0===t?r.push(m("data is undefined, should match pattern",t,n,a)):n.test(t)||r.push(m("data does not match pattern",t,n,a))}else if(n instanceof Function){let o=n(t,e,a);o&&(Array.isArray(o)?r=r.concat(o):r.push(o))}else if(Array.isArray(n))for(let o of(Array.isArray(t)||r.push(m("data is not an array",t,[],a)),n))for(let n of t.keys()){let i=y(t[n],o,e,a+"["+n+"]");Array.isArray(i)?r=r.concat(i):i&&r.push(i)}else if(n&&"object"==typeof n){if(Array.isArray(t)){let o=t.findIndex((t,r)=>y(t,n,e,a+"["+r+"]"));o>-1&&r.push(m("data["+o+"] does not match pattern",t[o],n,a+"["+o+"]"))}else if(t&&"object"==typeof t){if(t instanceof URLSearchParams&&(t=Object.fromEntries(t)),n instanceof Function){let o=y(t,n,e,a);o&&(r=r.concat(o))}else for(let[o,i]of Object.entries(n)){let n=y(t[o],i,e,a+"."+o);n&&(r=r.concat(n))}}else r.push(m("data is not an object, pattern is",t,n,a))}else n!=t&&r.push(m("data and pattern are not equal",t,n,a));return!!r.length&&r}t(n,"enable",()=>e),t(n,"disable",()=>a),t(n,"assert",()=>r),t(n,"fails",()=>y),t(n,"Optional",()=>o),t(n,"Required",()=>i),t(n,"error",()=>m),t(n,"Recommended",()=>s),t(n,"oneOf",()=>f),t(n,"anyOf",()=>l),t(n,"allOf",()=>u),t(n,"validURL",()=>c),t(n,"validEmail",()=>d),t(n,"instanceOf",()=>h),t(n,"not",()=>p),globalThis.assertEnabled=!1;class b extends Error{constructor(t,n,...e){super(t),this.problems=n,this.details=e}}function m(t,n,e,a,r){let o={message:t,found:n,expected:e,path:a};return r&&(o.problems=r),o}globalThis.assert=n;
2
- //# sourceMappingURL=browser.js.map
1
+ (()=>{var m=Object.defineProperty;var b=(e,o)=>{for(var n in o)m(e,n,{get:o[n],enumerable:!0})};var c={};b(c,{Optional:()=>A,Recommended:()=>g,Required:()=>O,allOf:()=>R,anyOf:()=>v,assert:()=>h,disable:()=>d,enable:()=>x,error:()=>s,fails:()=>l,instanceOf:()=>p,not:()=>_,oneOf:()=>y,validEmail:()=>E,validURL:()=>w});globalThis.assertEnabled=!1;function x(){globalThis.assertEnabled=!0}function d(){globalThis.assertEnabled=!1}function h(e,o){if(globalThis.assertEnabled){let n=l(e,o);if(n)throw new Error("Assertions failed",{cause:{problems:n,source:e}})}}function A(e){return function(n,r,i){if(typeof n<"u"&&n!=null&&typeof e<"u")return l(n,e,r,i)}}function O(e){return function(n,r,i){return n==null||typeof n>"u"?s("data is required",n,e||"any value",i):typeof e<"u"?l(n,e,r,i):!1}}function g(e){return function(n,r,i){return n==null||typeof n>"u"?(console.warn("data does not contain recommended value",n,e,i),!1):l(n,e,r,i)}}function y(...e){return function(n,r,i){for(let f of e)if(!l(n,f,r,i))return!1;return s("data does not match oneOf patterns",n,e,i)}}function v(...e){return function(n,r,i){if(!Array.isArray(n))return s("data is not an array",n,"anyOf",i);for(let f of n)if(y(...e)(f))return s("data does not match anyOf patterns",f,e,i);return!1}}function R(...e){return function(n,r,i){let f=[];for(let t of e)f=f.concat(l(n,t,r,i));if(f=f.filter(Boolean),f.length)return s("data does not match all given patterns",n,e,i,f)}}function w(e,o,n){try{e instanceof URL&&(e=e.href);let r=new URL(e);if(r.href!=e&&!(r.href+"/"==e||r.href==e+"/"))return s("data is not a valid url",e,"validURL",n)}catch{return s("data is not a valid url",e,"validURL",n)}}function E(e,o,n){if(!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e))return s("data is not a valid email",e,"validEmail",n)}function p(e){return function(n,r,i){if(!(n instanceof e))return s("data is not an instanceof pattern",n,e,i)}}function _(e){return function(n,r,i){if(!l(n,e,r,i))return s("data matches pattern, when required not to",n,e,i)}}function l(e,o,n,r=""){n||(n=e);let i=[];if(o===Boolean)typeof e!="boolean"&&!(e instanceof Boolean)&&i.push(s("data is not a boolean",e,o,r));else if(o===Number)typeof e!="number"&&!(e instanceof Number)&&i.push(s("data is not a number",e,o,r));else if(o===String)typeof e!="string"&&!(e instanceof String)&&i.push(s("data is not a string",e,o,r)),e==""&&i.push(s("data is an empty string, which is not allowed",e,o,r));else if(o instanceof RegExp)if(Array.isArray(e)){let f=e.findIndex((t,u)=>l(t,o,n,r+"["+u+"]"));f>-1&&i.push(s("data["+f+"] does not match pattern",e[f],o,r+"["+f+"]"))}else typeof e>"u"?i.push(s("data is undefined, should match pattern",e,o,r)):o.test(e)||i.push(s("data does not match pattern",e,o,r));else if(o instanceof Function){let f=o(e,n,r);f&&(Array.isArray(f)?i=i.concat(f):i.push(f))}else if(Array.isArray(o)){Array.isArray(e)||i.push(s("data is not an array",e,[],r));for(let f of o)for(let t of e.keys()){let u=l(e[t],f,n,r+"["+t+"]");Array.isArray(u)?i=i.concat(u):u&&i.push(u)}}else if(o&&typeof o=="object")if(Array.isArray(e)){let f=e.findIndex((t,u)=>l(t,o,n,r+"["+u+"]"));f>-1&&i.push(s("data["+f+"] does not match pattern",e[f],o,r+"["+f+"]"))}else if(!e||typeof e!="object")i.push(s("data is not an object, pattern is",e,o,r));else if(e instanceof URLSearchParams&&(e=Object.fromEntries(e)),o instanceof Function){let f=l(e,o,n,r);f&&(i=i.concat(f))}else for(let[f,t]of Object.entries(o)){let u=l(e[f],t,n,r+"."+f);u&&(i=i.concat(u))}else o!=e&&i.push(s("data and pattern are not equal",e,o,r));return i.length?i:!1}function s(e,o,n,r,i){let f={message:e,found:o,expected:n,path:r};return i&&(f.problems=i),f}globalThis.assert=c;})();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@muze-nl/assert",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "description": "light optional assert library",
5
5
  "type": "module",
6
6
  "main": "src/assert.mjs",
package/src/assert.mjs CHANGED
@@ -1,7 +1,4 @@
1
1
  /*
2
- FIXME: Optional() fails if the pattern is not set and the value is
3
- TODO: scratch: Required() and Optional() and Recommended() should test multiple patterns
4
- instead: add allOf(...patterns) function
5
2
  TODO: add assertExplain global flag, so that if assert() fails, you can call explain() with
6
3
  the same pattern and it will return text explanation of why it failed, each assertion function must
7
4
  then check assertExplain, and return a text explanation of what fails or succeeds
@@ -39,7 +36,9 @@ export function assert(source, test) {
39
36
  if (globalThis.assertEnabled) {
40
37
  let problems = fails(source,test)
41
38
  if (problems) {
42
- throw new assertError('Assertions failed', problems, source)
39
+ throw new Error('Assertions failed', {
40
+ cause: { problems, source }
41
+ })
43
42
  }
44
43
  }
45
44
  }
@@ -49,9 +48,7 @@ export function assert(source, test) {
49
48
  */
50
49
  export function Optional(pattern) {
51
50
  return function _Optional(data, root, path) {
52
- if (data==null || typeof data == 'undefined') {
53
- return false
54
- } else {
51
+ if (typeof data != 'undefined' && data!=null && typeof pattern != 'undefined' ) {
55
52
  return fails(data, pattern, root, path)
56
53
  }
57
54
  }
@@ -76,7 +73,7 @@ export function Required(pattern) {
76
73
  * Tests a given value against a pattern, only if the value is not null or undefined
77
74
  * If null or undefined, it does print a warning to the console.
78
75
  */
79
- export function Recommended(...pattern) {
76
+ export function Recommended(pattern) {
80
77
  return function _Recommended(data, root, path) {
81
78
  if (data==null || typeof data == 'undefined') {
82
79
  console.warn('data does not contain recommended value', data, pattern, path)
@@ -290,18 +287,6 @@ export function fails(data, pattern, root, path='') {
290
287
  return false
291
288
  }
292
289
 
293
-
294
- /**
295
- * Class used in assert() to add problems found and details to the error object
296
- */
297
- class assertError extends Error {
298
- constructor(message, problems, ...details) {
299
- super(message)
300
- this.problems = problems
301
- this.details = details
302
- }
303
- }
304
-
305
290
  /**
306
291
  * Returns an object with message, found and expected properties
307
292
  */