UNPKG

ast-compare

Version:

Compare anything: AST, objects, arrays, strings and nested thereof

43 lines (41 loc) 14.1 kB
/** * @name ast-compare * @fileoverview Compare anything: AST, objects, arrays, strings and nested thereof * @version 4.1.0 * @author Roy Revelt * @license MIT * {@link https://codsen.com/os/ast-compare/} */ "use strict";var astCompare=(()=>{var ae=Object.create,J=Object.freeze,v=Object.defineProperty,le=Object.defineProperties,ce=Object.getOwnPropertyDescriptor,ue=Object.getOwnPropertyDescriptors,fe=Object.getOwnPropertyNames,I=Object.getOwnPropertySymbols,pe=Object.getPrototypeOf,_=Object.prototype.hasOwnProperty,ye=Object.prototype.propertyIsEnumerable;var F=(e,t,i)=>t in e?v(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i,b=(e,t)=>{for(var i in t||(t={}))_.call(t,i)&&F(e,i,t[i]);if(I)for(var i of I(t))ye.call(t,i)&&F(e,i,t[i]);return e},w=(e,t)=>le(e,ue(t));var K=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ge=(e,t)=>{for(var i in t)v(e,i,{get:t[i],enumerable:!0})},R=(e,t,i,c)=>{if(t&&typeof t=="object"||typeof t=="function")for(let u of fe(t))!_.call(e,u)&&u!==i&&v(e,u,{get:()=>t[u],enumerable:!(c=ce(t,u))||c.enumerable});return e};var x=(e,t,i)=>(i=e!=null?ae(pe(e)):{},R(t||!e||!e.__esModule?v(i,"default",{value:e,enumerable:!0}):i,e)),he=e=>R(v({},"__esModule",{value:!0}),e);var j=(e,t)=>J(v(e,"raw",{value:J(t||e.slice())}));var H=K((V,k)=>{(function(e,t){typeof V=="object"&&typeof k<"u"?k.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self,e.typeDetect=t())})(V,(function(){"use strict";var e=typeof Promise=="function",t=(function(y){if(typeof globalThis=="object")return globalThis;Object.defineProperty(y,"typeDetectGlobalObject",{get:function(){return this},configurable:!0});var $=typeDetectGlobalObject;return delete y.typeDetectGlobalObject,$})(Object.prototype),i=typeof Symbol<"u",c=typeof Map<"u",u=typeof Set<"u",f=typeof WeakMap<"u",l=typeof WeakSet<"u",n=typeof DataView<"u",r=i&&typeof Symbol.iterator<"u",o=i&&typeof Symbol.toStringTag<"u",a=u&&typeof Set.prototype.entries=="function",s=c&&typeof Map.prototype.entries=="function",p=a&&Object.getPrototypeOf(new Set().entries()),d=s&&Object.getPrototypeOf(new Map().entries()),g=r&&typeof Array.prototype[Symbol.iterator]=="function",E=g&&Object.getPrototypeOf([][Symbol.iterator]()),L=r&&typeof String.prototype[Symbol.iterator]=="function",ne=L&&Object.getPrototypeOf(""[Symbol.iterator]()),oe=8,se=-1;function ie(y){var $=typeof y;if($!=="object")return $;if(y===null)return"null";if(y===t)return"global";if(Array.isArray(y)&&(o===!1||!(Symbol.toStringTag in y)))return"Array";if(typeof window=="object"&&window!==null){if(typeof window.location=="object"&&y===window.location)return"Location";if(typeof window.document=="object"&&y===window.document)return"Document";if(typeof window.navigator=="object"){if(typeof window.navigator.mimeTypes=="object"&&y===window.navigator.mimeTypes)return"MimeTypeArray";if(typeof window.navigator.plugins=="object"&&y===window.navigator.plugins)return"PluginArray"}if((typeof window.HTMLElement=="function"||typeof window.HTMLElement=="object")&&y instanceof window.HTMLElement){if(y.tagName==="BLOCKQUOTE")return"HTMLQuoteElement";if(y.tagName==="TD")return"HTMLTableDataCellElement";if(y.tagName==="TH")return"HTMLTableHeaderCellElement"}}var D=o&&y[Symbol.toStringTag];if(typeof D=="string")return D;var h=Object.getPrototypeOf(y);return h===RegExp.prototype?"RegExp":h===Date.prototype?"Date":e&&h===Promise.prototype?"Promise":u&&h===Set.prototype?"Set":c&&h===Map.prototype?"Map":l&&h===WeakSet.prototype?"WeakSet":f&&h===WeakMap.prototype?"WeakMap":n&&h===DataView.prototype?"DataView":c&&h===d?"Map Iterator":u&&h===p?"Set Iterator":g&&h===E?"Array Iterator":L&&h===ne?"String Iterator":h===null?"Object":Object.prototype.toString.call(y).slice(oe,se)}return ie}))});var T=K((je,Q)=>{"use strict";Q.exports=de;function S(e){return e instanceof Buffer?Buffer.from(e):new e.constructor(e.buffer.slice(),e.byteOffset,e.length)}function de(e){if(e=e||{},e.circles)return me(e);let t=new Map;if(t.set(Date,l=>new Date(l)),t.set(Map,(l,n)=>new Map(c(Array.from(l),n))),t.set(Set,(l,n)=>new Set(c(Array.from(l),n))),e.constructorHandlers)for(let l of e.constructorHandlers)t.set(l[0],l[1]);let i=null;return e.proto?f:u;function c(l,n){let r=Object.keys(l),o=new Array(r.length);for(let a=0;a<r.length;a++){let s=r[a],p=l[s];typeof p!="object"||p===null?o[s]=p:p.constructor!==Object&&(i=t.get(p.constructor))?o[s]=i(p,n):ArrayBuffer.isView(p)?o[s]=S(p):o[s]=n(p)}return o}function u(l){if(typeof l!="object"||l===null)return l;if(Array.isArray(l))return c(l,u);if(l.constructor!==Object&&(i=t.get(l.constructor)))return i(l,u);let n={};for(let r in l){if(Object.hasOwnProperty.call(l,r)===!1)continue;let o=l[r];typeof o!="object"||o===null?n[r]=o:o.constructor!==Object&&(i=t.get(o.constructor))?n[r]=i(o,u):ArrayBuffer.isView(o)?n[r]=S(o):n[r]=u(o)}return n}function f(l){if(typeof l!="object"||l===null)return l;if(Array.isArray(l))return c(l,f);if(l.constructor!==Object&&(i=t.get(l.constructor)))return i(l,f);let n={};for(let r in l){let o=l[r];typeof o!="object"||o===null?n[r]=o:o.constructor!==Object&&(i=t.get(o.constructor))?n[r]=i(o,f):ArrayBuffer.isView(o)?n[r]=S(o):n[r]=f(o)}return n}}function me(e){let t=[],i=[],c=new Map;if(c.set(Date,r=>new Date(r)),c.set(Map,(r,o)=>new Map(f(Array.from(r),o))),c.set(Set,(r,o)=>new Set(f(Array.from(r),o))),e.constructorHandlers)for(let r of e.constructorHandlers)c.set(r[0],r[1]);let u=null;return e.proto?n:l;function f(r,o){let a=Object.keys(r),s=new Array(a.length);for(let p=0;p<a.length;p++){let d=a[p],g=r[d];if(typeof g!="object"||g===null)s[d]=g;else if(g.constructor!==Object&&(u=c.get(g.constructor)))s[d]=u(g,o);else if(ArrayBuffer.isView(g))s[d]=S(g);else{let E=t.indexOf(g);E!==-1?s[d]=i[E]:s[d]=o(g)}}return s}function l(r){if(typeof r!="object"||r===null)return r;if(Array.isArray(r))return f(r,l);if(r.constructor!==Object&&(u=c.get(r.constructor)))return u(r,l);let o={};t.push(r),i.push(o);for(let a in r){if(Object.hasOwnProperty.call(r,a)===!1)continue;let s=r[a];if(typeof s!="object"||s===null)o[a]=s;else if(s.constructor!==Object&&(u=c.get(s.constructor)))o[a]=u(s,l);else if(ArrayBuffer.isView(s))o[a]=S(s);else{let p=t.indexOf(s);p!==-1?o[a]=i[p]:o[a]=l(s)}}return t.pop(),i.pop(),o}function n(r){if(typeof r!="object"||r===null)return r;if(Array.isArray(r))return f(r,n);if(r.constructor!==Object&&(u=c.get(r.constructor)))return u(r,n);let o={};t.push(r),i.push(o);for(let a in r){let s=r[a];if(typeof s!="object"||s===null)o[a]=s;else if(s.constructor!==Object&&(u=c.get(s.constructor)))o[a]=u(s,n);else if(ArrayBuffer.isView(s))o[a]=S(s);else{let p=t.indexOf(s);p!==-1?o[a]=i[p]:o[a]=n(s)}}return t.pop(),i.pop(),o}}});var Ee={};ge(Ee,{compare:()=>B,defaults:()=>re,version:()=>Se});var A=x(H(),1);var z=x(T(),1);var q=x(T(),1);var De=(0,q.default)();function O(e){if(e==null||typeof e!="object")return!1;let t=Object.getPrototypeOf(e);return t!==null&&t!==Object.prototype&&Object.getPrototypeOf(t)!==null?!1:!(Symbol.iterator in e)&&!(Symbol.toStringTag in e)}function be(e){return typeof e=="string"}function U(e,t){return O(e)&&be(t)&&t in e}function M(e){if(e.includes(".")){let t=e.lastIndexOf(".");if(!e.slice(0,t).includes("."))return e.slice(0,t);for(let i=t-1;i--;)if(e[i]===".")return e.slice(i+1,t)}return null}var C=(0,z.default)();function G(e,t){let i={now:!1};function c(u,f,l,n){let r=C(u),o,a=b({depth:-1,path:""},l);if(a.depth+=1,Array.isArray(r))for(let s=0,p=r.length;s<p&&!n.now;s++){let d=a.path?"".concat(a.path,".").concat(s):"".concat(s);r[s]!==void 0?(a.parent=C(r),a.parentType="array",a.parentKey=M(d),o=c(f(r[s],void 0,w(b({},a),{path:d}),n),f,w(b({},a),{path:d}),n),Number.isNaN(o)&&s<r.length?(r.splice(s,1),s-=1):r[s]=o):r.splice(s,1)}else if(O(r))for(let s in r){if(n.now&&s!=null)break;let p=a.path?"".concat(a.path,".").concat(s):s;a.depth===0&&s!=null&&(a.topmostKey=s),a.parent=C(r),a.parentType="object",a.parentKey=M(p),o=c(f(s,r[s],w(b({},a),{path:p}),n),f,w(b({},a),{path:p}),n),Number.isNaN(o)?delete r[s]:r[s]=o}return r}return c(e,t,{},i)}function m(e){if(typeof e=="string")return!e.trim();if(!["object","string"].includes(typeof e)||!e)return!1;let t=!0;return e=G(e,(i,c,u,f)=>{let l=c!==void 0?c:i;return typeof l=="string"&&l.trim()&&(t=!1,f.now=!0),l}),t}function P(e){if(typeof e!="string")throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}var W=new Map,Z=(e,t)=>{if(!Array.isArray(e))switch(typeof e){case"string":{e=[e];break}case"undefined":{e=[];break}default:throw new TypeError("Expected '".concat(t,"' to be a string or an array, but got a type of '").concat(typeof e,"'"))}return e.filter(i=>{if(typeof i!="string"){if(i===void 0)return!1;throw new TypeError("Expected '".concat(t,"' to be an array of strings, but found a type of '").concat(typeof i,"' in the array"))}return!0})},X,Y,ee,Oe=(e,t)=>{t=b({caseSensitive:!1},t);let i="s"+(t.caseSensitive?"":"i"),c=e+"|"+i;if(W.has(c))return W.get(c);let u=e[0]==="!";u&&(e=e.slice(1)),e=e.replaceAll(String.raw(X||(X=j(["*"],["\\*"]))),"__ESCAPED_STAR__").replaceAll("\\\\","__ESCAPED_BACKSLASH__").replaceAll(/\\(.)/g,"$1"),e=P(e).replaceAll(String.raw(Y||(Y=j(["*"],["\\*"]))),".*"),e=e.replaceAll("__ESCAPED_STAR__",String.raw(ee||(ee=j(["*"],["\\*"])))).replaceAll("__ESCAPED_BACKSLASH__","\\\\");let f=new RegExp("^".concat(e,"$"),i);return f.negated=u,W.set(c,f),f},Ae=(e,t,i,c)=>{if(e=Z(e,"inputs"),t=Z(t,"patterns"),t.length===0)return[];t=t.map(r=>Oe(r,i));let u=t.filter(r=>r.negated),f=t.filter(r=>!r.negated),{allPatterns:l}=i||{},n=[];if(l&&c&&u.length>1&&f.length===0){for(let r of e)for(let o of u)if(o.test(r))return[];return e.slice(0,1)}for(let r of e){let o=!1;for(let a of u)if(a.test(r)){o=!0;break}if(!o){if(f.length===0)n.push(r);else if(l){let a=Array.from({length:f.length},()=>!1);for(let[s,p]of f.entries())p.test(r)&&(a[s]=!0);a.every(Boolean)&&n.push(r)}else{let a=!1;for(let s of f)if(s.test(r)){a=!0;break}a&&n.push(r)}if(c&&n.length>0)break}}return n};function N(e,t,i){return Ae(e,t,i,!0).length>0}var te="4.1.0";var Se=te;function we(e){return O(e)?!Object.keys(e).length:Array.isArray(e)||typeof e=="string"?!e.length:!1}var re={hungryForWhitespace:!1,matchStrictly:!1,verboseWhenMismatches:!1,useWildcards:!1};function B(e,t,i){let c,u,f,l=0,n=b(b({},re),i);if(n.hungryForWhitespace&&n.matchStrictly&&O(e)&&m(e)&&O(t)&&!Object.keys(t).length)return!0;if((!n.hungryForWhitespace||n.hungryForWhitespace&&!m(e)&&m(t))&&O(e)&&Object.keys(e).length!==0&&O(t)&&Object.keys(t).length===0||(0,A.default)(e)!==(0,A.default)(t)&&(!n.hungryForWhitespace||n.hungryForWhitespace&&!m(e)))return!1;if(typeof e=="string"&&typeof t=="string")return n.hungryForWhitespace&&m(e)&&m(t)?!0:n.verboseWhenMismatches?e===t?!0:"Given string ".concat(t," is not matched! We have ").concat(e," on the other end."):n.useWildcards?N(e,t,{caseSensitive:!0}):e===t;if(Array.isArray(e)&&Array.isArray(t)){if(n.hungryForWhitespace&&m(t)&&(!n.matchStrictly||n.matchStrictly&&e.length===t.length))return!0;if(!n.hungryForWhitespace&&t.length>e.length||n.matchStrictly&&t.length!==e.length)return n.verboseWhenMismatches?"The length of a given array, ".concat(JSON.stringify(t,null,4)," is ").concat(t.length," but the length of an array on the other end, ").concat(JSON.stringify(e,null,4)," is ").concat(e.length):!1;if(t.length===0)return e.length===0?!0:n.verboseWhenMismatches?"The given array has no elements, but the array on the other end, ".concat(JSON.stringify(e,null,4)," does have some"):!1;for(let r=0,o=t.length;r<o;r++){f=!1;for(let a=l,s=e.length;a<s;a++)if(l+=1,B(e[a],t[r],n)===!0){f=!0;break}if(!f)return n.verboseWhenMismatches?"The given array ".concat(JSON.stringify(t,null,4)," is not a subset of an array on the other end, ").concat(JSON.stringify(e,null,4)):!1}}else if(O(e)&&O(t)){if(c=new Set(Object.keys(t)),u=new Set(Object.keys(e)),n.matchStrictly&&c.size!==u.size){if(!n.verboseWhenMismatches)return!1;let r=new Set([...c].filter(p=>!u.has(p))),o=r.size?" First object has unique keys: ".concat(JSON.stringify(r,null,4),"."):"",a=new Set([...u].filter(p=>!c.has(p))),s=a.size?" Second object has unique keys:\n ".concat(JSON.stringify(a,null,4),"."):"";return"When matching strictly, we found that both objects have different amount of keys.".concat(o).concat(s)}for(let r of c){if(!U(e,r))return!n.useWildcards||n.useWildcards&&!r.includes("*")?n.verboseWhenMismatches?'The given object has key "'.concat(r,'" which the other-one does not have.'):!1:Object.keys(e).some(o=>N(o,r,{caseSensitive:!0}))?!0:n.verboseWhenMismatches?'The given object has key "'.concat(r,'" which the other-one does not have.'):!1;if(e[r]!=null&&(0,A.default)(e[r])!==(0,A.default)(t[r])){if(!(m(e[r])&&m(t[r])&&n.hungryForWhitespace))return n.verboseWhenMismatches?"The given key ".concat(r," is of a different type on both objects. On the first-one, it's ").concat((0,A.default)(t[r]),", on the second-one, it's ").concat((0,A.default)(e[r])):!1}else if(B(e[r],t[r],n)!==!0)return n.verboseWhenMismatches?"The given piece ".concat(JSON.stringify(t[r],null,4)," and ").concat(JSON.stringify(e[r],null,4)," don't match."):!1}}else return n.hungryForWhitespace&&m(e)&&m(t)&&(!n.matchStrictly||n.matchStrictly&&we(t))?!0:e===t;return!0}return he(Ee);})(); /** * @name codsen-utils * @fileoverview Various utility functions * @version 1.7.0 * @author Roy Revelt * @license MIT * {@link https://codsen.com/os/codsen-utils/} */ /** * @name ast-monkey-util * @fileoverview Utility library of AST helper functions * @version 3.1.0 * @author Roy Revelt * @license MIT * {@link https://codsen.com/os/ast-monkey-util/} */ /** * @name ast-monkey-traverse * @fileoverview Utility library to traverse AST * @version 4.1.0 * @author Roy Revelt * @license MIT * {@link https://codsen.com/os/ast-monkey-traverse/} */ /** * @name ast-contains-only-empty-space * @fileoverview Does AST contain only empty space? * @version 4.1.0 * @author Roy Revelt * @license MIT * {@link https://codsen.com/os/ast-contains-only-empty-space/} */