@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 1.64 kB
JavaScript
import"../has.js";import t from"../Logger.js";import{pathToArray as n,getProperties as e}from"./utils.js";import{Flags as r}from"./tracking/Flags.js";const o={onObservableAccessed:()=>{},onTrackingEnd:()=>{}},c=[];let s=o;function i(t){s.onObservableAccessed(t)}let l=!1,a=!1;function f(t,n,e){if(l)return u(t,n,e);p(t);const r=n.call(e);return d(),r}function g(t,n){return f(o,t,n)}function u(n,e,r){const o=l;l=!0,p(n);let c=null;try{c=e.call(r)}catch(s){a&&t.getLogger("esri.core.accessorSupport.tracking").error(s)}return d(),l=o,c}function p(t){s=t,c.push(t)}function d(){const t=c.length;if(t>1){const n=c.pop();s=c[t-2],n.onTrackingEnd()}else if(1===t){const t=c.pop();s=o,t.onTrackingEnd()}else s=o}function b(t,n){const e=n.observerObject;if(e.flags&r.DepTrackingInitialized)return;const o=a;a=!1,e.flags&r.AutoTracked?u(n,n.metadata.get,t):k(t,n),a=o}const m=[];function k(t,e){const o=e.observerObject;o.flags&r.ExplicitlyTracking||(o.flags|=r.ExplicitlyTracking,u(e,(()=>{const r=e.metadata.dependsOn||m;for(const e of r)if("string"!=typeof e||e.includes(".")){const r=n(e);for(let n=0,e=t;n<r.length&&null!=e&&"object"==typeof e;++n)e=y(e,r[n],n!==r.length-1)}else y(t,e,!1)})),o.flags&=~r.ExplicitlyTracking)}function y(t,n,r){const o="?"===n[n.length-1]?n.slice(0,-1):n;if(null!=t.getItemAt||Array.isArray(t)){const n=parseInt(o,10);if(!isNaN(n))return Array.isArray(t)?t[n]:t.getItemAt(n)}const c=e(t)?.properties.get(o);return c&&(i(c.observerObject),b(t,c)),r?t[o]:void 0}export{b as initializeDependencyTracking,f as runTracked,u as runTrackedNoThrow,g as runUntracked,i as trackAccess,k as trackExplicitDependencies};