ast-is-empty 4.2.1 → 4.2.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/CHANGELOG.md CHANGED
@@ -3,6 +3,12 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## 4.2.2 (2026-09-01)
7
+
8
+ ### Bug Fixes
9
+
10
+ - **ast-is-empty:** make traversal graph-safe ([653714b](https://github.com/codsen/codsen/commit/653714bc23a3cffe46099781f2d24f2f0ad5445a))
11
+
6
12
  ## 4.2.1 (2026-08-22)
7
13
 
8
14
  ### Performance Improvements
@@ -1,10 +1,10 @@
1
1
  /**
2
2
  * @name ast-is-empty
3
3
  * @fileoverview Find out, is nested array/object/string/AST tree is empty
4
- * @version 4.2.1
4
+ * @version 4.2.2
5
5
  * @author Roy Revelt
6
6
  * @license MIT
7
7
  * {@link https://codsen.com/os/ast-is-empty/}
8
8
  */
9
9
 
10
- import{isPlainObject as l}from"codsen-utils";var r="4.2.1";var m=r;function n(e){let t=!0;if(Array.isArray(e)){if(e.length===0)return!0;for(let s of e){if(t=n(s),t===null)return null;if(!t)return!1}}else if(l(e)){let s=Object.keys(e);if(s.length===0)return!0;for(let o of s){if(t=n(e[o]),t===null)return null;if(!t)return!1}}else if(typeof e=="string"){if(e.length!==0)return!1}else return null;return t}export{n as isEmpty,m as version};
10
+ import{isPlainObject as g}from"codsen-utils";var T="4.2.2";var V=T,A=Object.freeze({reportCompletionFunc:null,reportProgressFunc:null,reportProgressFuncFrom:0,reportProgressFuncTo:100}),F=Object.prototype.hasOwnProperty,I=new Set(["reportCompletionFunc","reportProgressFunc","reportProgressFuncFrom","reportProgressFuncTo"]),_=32;function v(e){let r=new WeakMap;for(let o=1;o<e.length;o+=2)r.set(e[o],e[o+1]);return e.push(r),r}function O(e,r,o,t){if(typeof e=="string")return e.length!==0&&(r[0]=!0),1;if(!Array.isArray(e)&&!g(e))return-1;let s=o.get(e);if(s===1){for(let i=1;i<r.length-1;i+=2)if(r[i]===e){if(r[i+1]===2)return o.set(e,2),1;break}return-1}return s===2?1:(o.set(e,1),Array.isArray(e)?t.push({index:0,kind:"array",length:e.length,value:e}):t.push({index:0,keys:Object.keys(e),kind:"object",value:e}),2)}function W(e,r,o){let t=[],s=O(e,r,o,t);if(s===-1)return!1;if(s===1)return!0;for(;t.length;){let i=t[t.length-1];if(i.kind==="array"){if(i.index===i.length){o.set(i.value,2),t.pop();continue}let p=i.index++;if(!F.call(i.value,p)||O(i.value[p],r,o,t)===-1)return!1}else{if(i.index===i.keys.length){o.set(i.value,2),t.pop();continue}let p=i.keys[i.index++];if(O(i.value[p],r,o,t)===-1)return!1}}return!0}function y(e,r){if(typeof e=="string")return e.length!==0&&(r[0]=!0),!0;if(!Array.isArray(e)&&!g(e))return!1;if(r.length>_*2){let t=(r.length&1)===0?r[r.length-1]:v(r);return W(e,r,t)}for(let t=1;t<r.length;t+=2)if(r[t]===e)return r[t+1]===2;let o=r.length+1;if(r.push(e,1),Array.isArray(e)){let t=e.length;for(let s=0;s<t;s++)if(!F.call(e,s)||!y(e[s],r))return!1}else{let t=Object.keys(e);for(let s=0;s<t.length;s++)if(!y(e[t[s]],r))return!1}return r[o]=2,!0}function x(e,r){if(e)try{e(r)}catch{}}function R(){try{let e=Date.now();return Number.isFinite(e)?e:null}catch{return null}}function D(e,r){let o=r.reportCompletionFunc?R():null,t=new WeakMap,s=[],i=0,p=0,a=0,l=0,j=0,m=0,b=!1,P;function h(n=!1){if(!r.reportProgressFunc)return;let c=r.reportProgressFuncTo-r.reportProgressFuncFrom,u=n?r.reportProgressFuncTo:r.reportProgressFuncFrom+c*Math.min(.99,m/(m+1e3));u!==P&&(P=u,x(r.reportProgressFunc,u))}function f(){m++,m%1e3===0&&h()}function d(n){if(h(!0),r.reportCompletionFunc){let c=R(),u=o===null||c===null?null:c-o,C=u===null||!Number.isFinite(u)?0:Math.max(0,u);x(r.reportCompletionFunc,Object.freeze({aliasesSkipped:i,arrayElementsVisited:p,maxDepth:a,objectPropertiesVisited:l,timeTakenInMilliseconds:C,uniqueContainersVisited:j}))}return n}function k(n,c){if(c>a&&(a=c),typeof n=="string")return n.length===0?1:0;if(!Array.isArray(n)&&!g(n))return-1;let u=t.get(n);return u===1?-1:u===2?(i++,f(),1):(t.set(n,1),j++,f(),Array.isArray(n)?s.push({depth:c,index:0,kind:"array",length:n.length,value:n}):s.push({depth:c,index:0,keys:Object.keys(n),kind:"object",value:n}),2)}h();let w=k(e,0);if(w===-1)return d(null);if(w!==2)return d(w===1);for(;s.length;){let n=s[s.length-1];if(n.kind==="array"){if(n.index===n.length){t.set(n.value,2),s.pop();continue}let c=n.index++;if(p++,f(),!F.call(n.value,c))return n.depth+1>a&&(a=n.depth+1),d(null);let u=k(n.value[c],n.depth+1);if(u===-1)return d(null);u===0&&(b=!0)}else{if(n.index===n.keys.length){t.set(n.value,2),s.pop();continue}let c=n.keys[n.index++];l++,f();let u=k(n.value[c],n.depth+1);if(u===-1)return d(null);u===0&&(b=!0)}}return d(!b)}function M(e){if(e!=null&&!g(e))throw new TypeError("ast-is-empty/isEmpty(): [THROW_ID_01] The second argument must be a plain options object, null, or undefined.");let r=e??{},o=Object.keys(r).find(l=>!I.has(l));if(o!==void 0)throw new TypeError(`ast-is-empty/isEmpty(): [THROW_ID_02] Unknown option ${JSON.stringify(o)}.`);let t=l=>F.call(r,l)&&r[l]!==void 0?r[l]:A[l],s=t("reportCompletionFunc");if(s!==null&&typeof s!="function")throw new TypeError("ast-is-empty/isEmpty(): [THROW_ID_03] opts.reportCompletionFunc must be a function, null, or undefined.");let i=t("reportProgressFunc");if(i!==null&&typeof i!="function")throw new TypeError("ast-is-empty/isEmpty(): [THROW_ID_04] opts.reportProgressFunc must be a function, null, or undefined.");let p=t("reportProgressFuncFrom");if(!Number.isFinite(p))throw new TypeError("ast-is-empty/isEmpty(): [THROW_ID_05] opts.reportProgressFuncFrom must be a finite number or undefined.");let a=t("reportProgressFuncTo");if(!Number.isFinite(a))throw new TypeError("ast-is-empty/isEmpty(): [THROW_ID_06] opts.reportProgressFuncTo must be a finite number or undefined.");if(p>a)throw new RangeError(`ast-is-empty/isEmpty(): [THROW_ID_07] opts.reportProgressFuncFrom cannot exceed opts.reportProgressFuncTo; received ${p} and ${a}.`);if(!Number.isFinite(a-p))throw new RangeError(`ast-is-empty/isEmpty(): [THROW_ID_08] opts.reportProgressFuncFrom and opts.reportProgressFuncTo must define a finite span; received ${p} and ${a}.`);return{reportCompletionFunc:s,reportProgressFunc:i,reportProgressFuncFrom:p,reportProgressFuncTo:a}}function K(e,r){if(r===void 0){let s=[!1];return y(e,s)?s[0]!==!0:null}let o=M(r);if(o.reportCompletionFunc||o.reportProgressFunc)return D(e,o);let t=[!1];return y(e,t)?t[0]!==!0:null}export{A as defaults,K as isEmpty,V as version};
@@ -1,17 +1,25 @@
1
1
  /**
2
2
  * @name ast-is-empty
3
3
  * @fileoverview Find out, is nested array/object/string/AST tree is empty
4
- * @version 4.2.1
4
+ * @version 4.2.2
5
5
  * @author Roy Revelt
6
6
  * @license MIT
7
7
  * {@link https://codsen.com/os/ast-is-empty/}
8
8
  */
9
9
 
10
- "use strict";var astIsEmpty=(()=>{var s=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var h=(e,t)=>{for(var r in t)s(e,r,{get:t[r],enumerable:!0})},d=(e,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of c(t))!p.call(e,n)&&n!==r&&s(e,n,{get:()=>t[n],enumerable:!(i=f(t,n))||i.enumerable});return e};var g=e=>d(s({},"__esModule",{value:!0}),e);var b={};h(b,{isEmpty:()=>l,version:()=>m});var w=new Set([..."\u060B$\u20BC\u17DB\xA5\u20A1\u20B1\xA3\u20AC\xA2\u20B9\uFDFC\u20AA\u20A9\u20AD\u20A8\u20AE\u20A6\u20BD\u20AB\u0E3F\u20A9\u20BA\u20B4","$U","$b","B/.","BZ$","Br","Bs","C$","CHF","Ft","Gs","J$","KM","K\u010D","L","MT","NT$","P","Q","R","R$","RD$","RM","Rp","S","S/.","TT$","Z$","kn","kr","lei","z\u0142","\u0192","\u0414\u0438\u043D.","\u0434\u0435\u043D","\u043B\u0432","\u062F.\u0625","Lek"]);function u(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)}var o,C=(o=Object.getOwnPropertyDescriptor(RegExp.prototype,"source"))==null?void 0:o.get;var k=Date.prototype.getTime;var a="4.2.1";var m=a;function l(e){let t=!0;if(Array.isArray(e)){if(e.length===0)return!0;for(let r of e){if(t=l(r),t===null)return null;if(!t)return!1}}else if(u(e)){let r=Object.keys(e);if(r.length===0)return!0;for(let i of r){if(t=l(e[i]),t===null)return null;if(!t)return!1}}else if(typeof e=="string"){if(e.length!==0)return!1}else return null;return t}return g(b);})();
10
+ "use strict";var astIsEmpty=(()=>{var O=Object.defineProperty;var $=Object.getOwnPropertyDescriptor;var N=Object.getOwnPropertyNames;var B=Object.prototype.hasOwnProperty;var L=(e,t)=>{for(var _ in t)O(e,_,{get:t[_],enumerable:!0})},z=(e,t,_,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of N(t))!B.call(e,n)&&n!==_&&O(e,n,{get:()=>t[n],enumerable:!(r=$(t,n))||r.enumerable});return e};var U=e=>z(O({},"__esModule",{value:!0}),e);var re={};L(re,{defaults:()=>W,isEmpty:()=>te,version:()=>Q});var V=["_16_0_a_0_4_0_5_m_1_u_1_cp_4_b_e_4_7_0_1_0_3l_4_1_1_2_3_1_0_6_0_1_2_1_0_1_j_1_2a_1_3u_8_4l_1_11_2_0_","6_14_1z_q_4_3_19_16_z_1_1_2q_1_0_f_1_7_1_a_2_2_0_g_0_1_t_t_2g_b_0_o_w_9_1_4_0_5_l_4_0_9_0_3_0_n_o_7_","a_5_n_1_6_g_15_1m_1h_3_0_i_0_7_9_f_f_4_7_2_1_2_l_1_6_1_0_3_3_3_0_g_0_d_1_1_2_e_1_a_0_8_5_4_1_2_l_1_6","_1_1_1_1_1_1_v_3_1_0_j_2_g_8_1_2_1_l_1_6_1_1_1_4_3_0_i_0_f_1_n_0_b_7_2_1_2_l_1_6_1_1_1_4_3_0_u_1_1_2","_f_0_h_0_1_5_3_2_1_3_3_1_1_0_1_1_3_1_3_2_3_b_m_0_1g_7_1_2_1_m_1_f_3_0_q_2_1_1_2_1_u_0_4_7_1_2_1_m_1_","9_1_4_3_0_u_2_1_1_f_1_h_8_1_2_1_14_2_0_g_0_5_2_8_2_o_5_5_h_3_n_1_8_1_0_2_6_1m_1b_1_1_c_6_1m_1_1_0_1_","4_1_n_1_0_1_9_1_1_9_0_2_4_1_0_l_3_w_0_1r_7_1_z_r_4_37_16_k_0_g_5_4_3_3_0_3_1_7_2_4_c_c_0_h_11_1_0_5_","0_2_16_1_98_1_3_2_6_1_0_1_3_2_14_1_3_2_w_1_3_2_6_1_0_1_3_2_e_1_1k_1_3_2_1u_11_f_g_2d_2_5_3_h7_2_g_1_","p_5_22_6_7_7_h_d_i_e_h_e_c_1_2_f_1f_z_0_4_0_1v_2g_7_4_2_x_1_0_5_1x_a_u_1d_t_2_4_b_17_4_p_1i_m_9_1g_2","a_0_2l_1a_h_7_1i_t_d_1_a_17_q_z_15_2_a_z_2_a_5_16_2_2_15_3_1_5_1_1_3_0_5_5b_1s_7p_2_5_2_11_2_5_2_7_1","_0_1_0_1_0_1_u_2_1g_1_6_1_0_3_2_1_6_3_3_2_5_4_c_5_2_1_6_38_0_d_0_g_c_2t_0_4_0_2_9_1_0_3_4_6_0_1_0_1_","0_1_3_1_a_2_3_5_4_4_0_1g_1_22j_6c_6_3_3_1_c_11_1_0_5_0_2_1j_7_0_g_m_9_6_1_6_1_6_1_6_1_6_1_6_1_6_1_6_","28_0_d1_1_16_4_5_1_4_2d_6_2_1_2h_1_3_5_16_1_2l_h_v_1c_f_e8_533_1s_h3g_1v_19_2_7g_3_f_a_1_k_1a_g_u_2_","1x_1d_8_2_2u_2_29_k_g_1_2_1_3_1_m_t_1f_e_1d_1q_5_3_0_1_1_b_r_a_m_p_s_7_1a_s_0_g_4_1_9_a_4_1_14_n_2_1","_7_k_m_3_0_3_1d_1_0_3_1_2_4_2_0_1_0_o_2_2_a_7_2_c_5_2_5_2_5_9_6_1_6_1_16_1_d_6_36_t_8mb_c_m_4_1c_6is","_a5_2_2x_12_6_c_4_5_0_1_9_1_c_1_4_1_0_1_1_1_1_1_2z_x_a2_i_1r_2_1h_14_b_38_4_1_3q_10_p_6_p_b_2g_3_5_2","_5_2_5_2_2_z_b_1_p_1_i_1_1_1_e_2_d_y_3e_at_s_3_1c_1b_v_d_j_1_7_6_11_a_t_2_z_4_7_1c_4d_i_z_4_z_4_13_8","_1f_c_a_1_e_1_6_1_1_1_a_1_e_1_6_1_1_3_1f_c_8m_9_l_a_7_o_5_1_15_1_8_1x_5_2_0_1_17_1_1_3_0_2_m_a_m_9_u","_1t_i_1_1_a_l_a_p_6_p_12_1j_6_1_1s_0_f_3_1_2_1_s_16_s_3_s_z_7_1_r_r_1h_a_l_a_i_d_h_32_20_1j_1e_d_1e_","d_z_12_r_9_m_6y_15_6_1_g_5_1k_s_a_0_8_l_16_h_1a_k_r_m_c_1g_1l_1_2_0_d_18_w_o_q_z_t_0_2_0_8_y_3_0_c_1","b_e_3_l_0_1_0_z_h_1_o_j_1_1r_6_1_0_1_3_1_e_1_9_7_1a_12_7_2_1_2_l_1_6_1_1_1_4_3_0_i_0_c_4_u_9_1_0_2_0","_1_11_1_0_p_0_1_0_18_1g_i_3_k_2_u_1b_k_1_1_0_54_1a_15_3_10_1b_k_0_1n_16_d_0_1z_q_11_6_55_17_38_1r_v_","7_2_0_2_7_1_1_1_n_f_0_1_0_2m_7_2_12_g_0_1_0_s_0_a_13_7_0_l_0_b_19_j_0_i_20_5j_w_v_8_1_10_h_0_1d_t_34","_6_1_1_1_11_l_0_p_5_1_1_1_v_e_0_n_17_78_i_f_0_1_c_1_x_3g_0_27_pl_6e_5f_218_2o_f_tr_h_5_p_32y_5_g6_5a","1_t_1cy_fs_7_u_h_26_h_t_i_1b_g_3_v_k_5_i_c0_18_5v_1r_w_o_2_o_18_22_5_0_1u_c_1s_1_1_0_e_1_c_5p1_15_v_","2p_36_6pp_3_1_6_1_1_1_82_f_0_t_2_2_0_e_3_8_az_1s4_2y_5_c_3_8_7_9_4me_2c_1_1y_1_1_2_0_2_1_2_3_1_b_1_0","_1_6_1_1s_1_3_2_7_1_6_1_r_1_3_1_4_1_0_3_6_1_9f_2_o_1_o_1_u_1_o_1_u_1_o_1_u_1_o_1_u_1_o_1_7_1f8_u_6_5","_79_1p_42_18_a_6_g_0_8x_t_i_17_dg_r_6c_t_2_0_5r_u_1_2_1_1_1_6_2_4_9_1_68_6_1_3_1_1_1_e_1_5g_1n_1v_7_","0_xg_3_1_q_1_1_1_0_2_0_1_9_1_3_1_0_1_0_6_0_4_0_1_0_1_0_1_2_1_1_1_0_2_0_1_0_1_0_1_0_1_0_1_1_1_0_2_3_1","_6_1_3_1_3_1_0_1_9_1_g_5_2_1_4_1_g_3es_wyn_w_3dp_2_4gd_2_5rk_f_h9_1wi_f1_15u_3t6_5_6jt"].join(""),k=V.slice(1).split("_"),q=[],x=127;for(let e=0;e<k.length;e+=2){let t=x+1+Number.parseInt(k[e],36),_=t+Number.parseInt(k[e+1],36);q.push([t,_]),x=_}var le=new Set([..."\u060B$\u20BC\u17DB\xA5\u20A1\u20B1\xA3\u20AC\xA2\u20B9\uFDFC\u20AA\u20A9\u20AD\u20A8\u20AE\u20A6\u20BD\u20AB\u0E3F\u20A9\u20BA\u20B4","$U","$b","B/.","BZ$","Br","Bs","C$","CHF","Ft","Gs","J$","KM","K\u010D","L","MT","NT$","P","Q","R","R$","RD$","RM","Rp","S","S/.","TT$","Z$","kn","kr","lei","z\u0142","\u0192","\u0414\u0438\u043D.","\u0434\u0435\u043D","\u043B\u0432","\u062F.\u0625","Lek"]);var D=Function.prototype.toString,H=D.call(Object);var ue=Map.prototype.entries,ae=Set.prototype.values;var C,ce=(C=Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength"))==null?void 0:C.get,P,fe=(P=Object.getOwnPropertyDescriptor(RegExp.prototype,"flags"))==null?void 0:P.get,R,pe=(R=Object.getOwnPropertyDescriptor(RegExp.prototype,"global"))==null?void 0:R.get,S,de=(S=Object.getOwnPropertyDescriptor(RegExp.prototype,"source"))==null?void 0:S.get,ge=RegExp.prototype.test;function p(e){var r;if(e==null||typeof e!="object")return!1;let t=Object.getPrototypeOf(e);if(t===null||t===Object.prototype)return!0;let _=Object.getOwnPropertyDescriptor(t,"constructor");return!_||!("value"in _)||typeof _.value!="function"?!1:((r=Object.getOwnPropertyDescriptor(_.value,"prototype"))==null?void 0:r.value)===t&&D.call(_.value)===H}var he=Date.prototype.getTime;var T="4.2.2";var Q=T,W=Object.freeze({reportCompletionFunc:null,reportProgressFunc:null,reportProgressFuncFrom:0,reportProgressFuncTo:100}),y=Object.prototype.hasOwnProperty,G=new Set(["reportCompletionFunc","reportProgressFunc","reportProgressFuncFrom","reportProgressFuncTo"]),J=32;function Z(e){let t=new WeakMap;for(let _=1;_<e.length;_+=2)t.set(e[_],e[_+1]);return e.push(t),t}function v(e,t,_,r){if(typeof e=="string")return e.length!==0&&(t[0]=!0),1;if(!Array.isArray(e)&&!p(e))return-1;let n=_.get(e);if(n===1){for(let s=1;s<t.length-1;s+=2)if(t[s]===e){if(t[s+1]===2)return _.set(e,2),1;break}return-1}return n===2?1:(_.set(e,1),Array.isArray(e)?r.push({index:0,kind:"array",length:e.length,value:e}):r.push({index:0,keys:Object.keys(e),kind:"object",value:e}),2)}function Y(e,t,_){let r=[],n=v(e,t,_,r);if(n===-1)return!1;if(n===1)return!0;for(;r.length;){let s=r[r.length-1];if(s.kind==="array"){if(s.index===s.length){_.set(s.value,2),r.pop();continue}let l=s.index++;if(!y.call(s.value,l)||v(s.value[l],t,_,r)===-1)return!1}else{if(s.index===s.keys.length){_.set(s.value,2),r.pop();continue}let l=s.keys[s.index++];if(v(s.value[l],t,_,r)===-1)return!1}}return!0}function h(e,t){if(typeof e=="string")return e.length!==0&&(t[0]=!0),!0;if(!Array.isArray(e)&&!p(e))return!1;if(t.length>J*2){let r=(t.length&1)===0?t[t.length-1]:Z(t);return Y(e,t,r)}for(let r=1;r<t.length;r+=2)if(t[r]===e)return t[r+1]===2;let _=t.length+1;if(t.push(e,1),Array.isArray(e)){let r=e.length;for(let n=0;n<r;n++)if(!y.call(e,n)||!h(e[n],t))return!1}else{let r=Object.keys(e);for(let n=0;n<r.length;n++)if(!h(e[r[n]],t))return!1}return t[_]=2,!0}function E(e,t){if(e)try{e(t)}catch(_){}}function I(){try{let e=Date.now();return Number.isFinite(e)?e:null}catch(e){return null}}function X(e,t){let _=t.reportCompletionFunc?I():null,r=new WeakMap,n=[],s=0,l=0,a=0,c=0,j=0,d=0,m=!1,A;function b(i=!1){if(!t.reportProgressFunc)return;let u=t.reportProgressFuncTo-t.reportProgressFuncFrom,o=i?t.reportProgressFuncTo:t.reportProgressFuncFrom+u*Math.min(.99,d/(d+1e3));o!==A&&(A=o,E(t.reportProgressFunc,o))}function g(){d++,d%1e3===0&&b()}function f(i){if(b(!0),t.reportCompletionFunc){let u=I(),o=_===null||u===null?null:u-_,M=o===null||!Number.isFinite(o)?0:Math.max(0,o);E(t.reportCompletionFunc,Object.freeze({aliasesSkipped:s,arrayElementsVisited:l,maxDepth:a,objectPropertiesVisited:c,timeTakenInMilliseconds:M,uniqueContainersVisited:j}))}return i}function w(i,u){if(u>a&&(a=u),typeof i=="string")return i.length===0?1:0;if(!Array.isArray(i)&&!p(i))return-1;let o=r.get(i);return o===1?-1:o===2?(s++,g(),1):(r.set(i,1),j++,g(),Array.isArray(i)?n.push({depth:u,index:0,kind:"array",length:i.length,value:i}):n.push({depth:u,index:0,keys:Object.keys(i),kind:"object",value:i}),2)}b();let F=w(e,0);if(F===-1)return f(null);if(F!==2)return f(F===1);for(;n.length;){let i=n[n.length-1];if(i.kind==="array"){if(i.index===i.length){r.set(i.value,2),n.pop();continue}let u=i.index++;if(l++,g(),!y.call(i.value,u))return i.depth+1>a&&(a=i.depth+1),f(null);let o=w(i.value[u],i.depth+1);if(o===-1)return f(null);o===0&&(m=!0)}else{if(i.index===i.keys.length){r.set(i.value,2),n.pop();continue}let u=i.keys[i.index++];c++,g();let o=w(i.value[u],i.depth+1);if(o===-1)return f(null);o===0&&(m=!0)}}return f(!m)}function ee(e){if(e!=null&&!p(e))throw new TypeError("ast-is-empty/isEmpty(): [THROW_ID_01] The second argument must be a plain options object, null, or undefined.");let t=e!=null?e:{},_=Object.keys(t).find(c=>!G.has(c));if(_!==void 0)throw new TypeError("ast-is-empty/isEmpty(): [THROW_ID_02] Unknown option ".concat(JSON.stringify(_),"."));let r=c=>y.call(t,c)&&t[c]!==void 0?t[c]:W[c],n=r("reportCompletionFunc");if(n!==null&&typeof n!="function")throw new TypeError("ast-is-empty/isEmpty(): [THROW_ID_03] opts.reportCompletionFunc must be a function, null, or undefined.");let s=r("reportProgressFunc");if(s!==null&&typeof s!="function")throw new TypeError("ast-is-empty/isEmpty(): [THROW_ID_04] opts.reportProgressFunc must be a function, null, or undefined.");let l=r("reportProgressFuncFrom");if(!Number.isFinite(l))throw new TypeError("ast-is-empty/isEmpty(): [THROW_ID_05] opts.reportProgressFuncFrom must be a finite number or undefined.");let a=r("reportProgressFuncTo");if(!Number.isFinite(a))throw new TypeError("ast-is-empty/isEmpty(): [THROW_ID_06] opts.reportProgressFuncTo must be a finite number or undefined.");if(l>a)throw new RangeError("ast-is-empty/isEmpty(): [THROW_ID_07] opts.reportProgressFuncFrom cannot exceed opts.reportProgressFuncTo; received ".concat(l," and ").concat(a,"."));if(!Number.isFinite(a-l))throw new RangeError("ast-is-empty/isEmpty(): [THROW_ID_08] opts.reportProgressFuncFrom and opts.reportProgressFuncTo must define a finite span; received ".concat(l," and ").concat(a,"."));return{reportCompletionFunc:n,reportProgressFunc:s,reportProgressFuncFrom:l,reportProgressFuncTo:a}}function te(e,t){if(t===void 0){let n=[!1];return h(e,n)?n[0]!==!0:null}let _=ee(t);if(_.reportCompletionFunc||_.reportProgressFunc)return X(e,_);let r=[!1];return h(e,r)?r[0]!==!0:null}return U(re);})();
11
+ /**
12
+ * @name codsen-format-diagnostic-value
13
+ * @fileoverview Safely format untrusted JavaScript values for diagnostics
14
+ * @version 1.1.0
15
+ * @author Roy Revelt
16
+ * @license MIT
17
+ * {@link https://codsen.com/os/codsen-format-diagnostic-value/}
18
+ */
11
19
  /**
12
20
  * @name codsen-utils
13
21
  * @fileoverview Various utility functions
14
- * @version 1.9.0
22
+ * @version 1.10.0
15
23
  * @author Roy Revelt
16
24
  * @license MIT
17
25
  * {@link https://codsen.com/os/codsen-utils/}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ast-is-empty",
3
- "version": "4.2.1",
3
+ "version": "4.2.2",
4
4
  "description": "Find out, is nested array/object/string/AST tree is empty",
5
5
  "keywords": [
6
6
  "array",
@@ -80,7 +80,7 @@
80
80
  }
81
81
  },
82
82
  "dependencies": {
83
- "codsen-utils": "^1.9.0"
83
+ "codsen-utils": "^1.10.0"
84
84
  },
85
85
  "engines": {
86
86
  "node": ">=18.20.8"
package/types/index.d.ts CHANGED
@@ -1,7 +1,52 @@
1
1
  declare const version: string;
2
+ interface CompletionStats {
3
+ /** Number of links to already-completed containers that were skipped. */
4
+ readonly aliasesSkipped: number;
5
+ /** Number of array indices inspected, including a sparse hole that determines the result. */
6
+ readonly arrayElementsVisited: number;
7
+ /** Deepest value or array slot inspected, where the root has depth zero. */
8
+ readonly maxDepth: number;
9
+ /** Number of own enumerable string-keyed object properties inspected. */
10
+ readonly objectPropertiesVisited: number;
11
+ /** Best-effort elapsed time for user-facing completion feedback. */
12
+ readonly timeTakenInMilliseconds: number;
13
+ /** Number of distinct arrays and plain objects entered. */
14
+ readonly uniqueContainersVisited: number;
15
+ }
16
+ interface Opts {
17
+ reportCompletionFunc: null | ((stats: Readonly<CompletionStats>) => void);
18
+ reportProgressFunc: null | ((percentageDone: number) => void);
19
+ reportProgressFuncFrom: number;
20
+ reportProgressFuncTo: number;
21
+ }
22
+ interface InputOpts {
23
+ reportCompletionFunc?: Opts["reportCompletionFunc"] | undefined;
24
+ reportProgressFunc?: Opts["reportProgressFunc"] | undefined;
25
+ reportProgressFuncFrom?: number | undefined;
26
+ reportProgressFuncTo?: number | undefined;
27
+ }
28
+ declare const defaults: Readonly<Opts>;
29
+ type Result = boolean | null;
2
30
  /**
3
- * Find out, is nested array/object/string/AST tree is empty
31
+ * Check whether a string or recursively nested array/plain-object tree is
32
+ * strictly empty.
33
+ *
34
+ * `true` means every inspected string has zero code units and every inspected
35
+ * container is empty or contains only empty supported values. Whitespace is
36
+ * content and therefore produces `false`. `null` means the tree contains an
37
+ * unsupported value, a sparse array hole, or a cycle; `null` takes precedence
38
+ * over known content regardless of traversal order.
39
+ *
40
+ * Arrays are read through their own indexed slots without invoking an
41
+ * iterator, and extra array properties are ignored. Plain objects contribute
42
+ * their own enumerable string-keyed properties; symbol and non-enumerable
43
+ * properties are ignored. Completed shared subtrees are inspected only once.
44
+ *
45
+ * Reporting callbacks are observational: their errors are ignored and cannot
46
+ * change the tri-state result. Progress is finite and monotonic within the
47
+ * configured range, and completion statistics are frozen.
4
48
  */
5
- declare function isEmpty(input: unknown): boolean | null;
49
+ declare function isEmpty(input: unknown, opts?: InputOpts | null): Result;
6
50
 
7
- export { isEmpty, version };
51
+ export { defaults, isEmpty, version };
52
+ export type { CompletionStats, InputOpts, Opts };