UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

3 lines (2 loc) 1.84 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */ import"../has.js";import t from"../Logger.js";import{pathToArray as r,getProperties as n}from"./utils.js";import{Flags as e}from"./tracking/Flags.js";import{TrackingTarget as i}from"./tracking/TrackingTarget.js";const c=new i,o=[];let s=c;function a(t){s.onAccessed(t)}let l=!1,g=!1;function f(r,n,e){if(l)return u(r,n,e);let i;if(g){s=r,o.push(r);try{i=n.call(e)}catch(c){throw t.getLogger("esri.core.accessorSupport.tracking").error(c),c}finally{k()}}else{s=r,o.push(r);try{i=n.call(e)}finally{k()}}return i}function p(t,r){return f(c,t,r)}function u(r,n,e){const i=l;let c;l=!0,s=r,o.push(r);try{c=n.call(e)}catch(a){g&&t.getLogger("esri.core.accessorSupport.tracking").error(a)}return k(),l=i,c}function k(){const t=o.length;if(t>1){const r=o.pop();s=o[t-2],r.onTrackingEnd()}else if(1===t){const t=o.pop();s=c,t.onTrackingEnd()}else s=c}function y(t,r){if(r.flags&e.DepTrackingInitialized)return;r.flags|=e.DepTrackingInitialized;const n=g;g=!1,r.flags&e.AutoTracked?u(r.trackingTarget,r.metadata.get,t):m(t,r),g=n}const d=[];function m(t,n){n.flags&e.ExplicitlyTracking||(n.flags|=e.ExplicitlyTracking,u(n.trackingTarget,()=>{const e=n.metadata.dependsOn||d;for(const n of e)if("string"!=typeof n||n.includes(".")){const e=r(n);for(let r=0,n=t;r<e.length&&null!=n&&"object"==typeof n;++r)n=T(n,e[r],r!==e.length-1)}else T(t,n,!1)}),n.flags&=~e.ExplicitlyTracking)}function T(t,r,e){const i=r.endsWith("?")?r.slice(0,-1):r;if(null!=t.getItemAt||Array.isArray(t)){const r=parseInt(i,10);if(!isNaN(r))return Array.isArray(t)?t[r]:t.at(r)}const c=n(t);if(c){const r=c.propertiesByName.get(i);r&&(a(r),y(t,r))}return e?t[i]:void 0}export{y as initializeDependencyTracking,f as runTracked,u as runTrackedNoThrow,p as runUntracked,a as trackAccess,m as trackExplicitDependencies};