UNPKG

@arcgis/core

Version:

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

3 lines (2 loc) 4 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */ import"../has.js";import{equals as t}from"../lang.js";import"../Logger.js";import e from"../ObjectPool.js";import{Lifecycle as i}from"./Lifecycle.js";import{Property as s}from"./Property.js";import{idToName as r,nameToId as n}from"./PropertyOrigin.js";import{Store as a}from"./Store.js";import{trackAccess as o,runTracked as c,initializeDependencyTracking as l}from"./tracking.js";import{Flags as h}from"./tracking/Flags.js";import{TrackingTarget as g}from"./tracking/TrackingTarget.js";function f(t,e,i){return void 0!==t}function p(t,e,s,r){return void 0!==t&&(!(null==s&&t.flags&h.NonNullable)||(r.lifecycle,i.INITIALIZING,!1))}class m{constructor(t){this.host=t,this.propertiesByName=new Map,this.ctorArgs=null,this.lifecycle=i.INITIALIZING,this.store=new a,this.mutable=!0,this._origin=7;const e=this.host.constructor.__accessorMetadata__;for(const i in e){const t=new s(i,e[i]);this.propertiesByName.set(i,t)}this.metadata=e}initialize(){this.lifecycle=i.CONSTRUCTING}constructed(){this.lifecycle=i.CONSTRUCTED}destroy(){this.lifecycle=i.DESTROYED,this.propertiesByName.forEach(t=>t.destroy())}get initialized(){return this.lifecycle!==i.INITIALIZING}get(t){const e=this.propertiesByName.get(t);if(!f(e))return;const i=e.metadata.get;if(i)return e.getComputed(this,i);this.mutable&&o(e);const s=this.store;return s.has(t)?s.get(t):e.metadata.value}originOf(t){const e=this.store.originOf(t);if(void 0===e){const e=this.propertiesByName.get(t);if(void 0!==e&&e.flags&h.HasDefaultValue)return"defaults"}return r(e)}has(t){return this.propertiesByName.has(t)&&this.store.has(t)}keys(){return[...this.propertiesByName.keys()]}internalGet(t){const e=this.propertiesByName.get(t);if(f(e))return this.store.has(t)?this.store.get(t):e.metadata.value}internalSet(t,e){const i=this.propertiesByName.get(t);f(i)&&this._internalSet(i,e)}getDependsInfo(t,e,i){const r=this.propertiesByName.get(e);if(!f(r))return"";const n=new g,a=c(n,()=>r.metadata.get?.call(t));let o=`${i}${t.declaredClass.split(".").pop()}.${e}: ${a}\n`;const l=n.accessed??new Set;if(0===l.size)return o;i+=" ";for(const c of l){if(!(c instanceof s))continue;o+=`${i}${c.propertyName}: undefined\n`}return o}setAtOrigin(t,e,i){const s=this.propertiesByName.get(t);if(f(s))return this._setAtOrigin(s,e,i)}isOverridden(t){const e=this.propertiesByName.get(t);return void 0!==e&&!!(e.flags&h.Overridden)}clearOrigin(t,e){const i=this.store,s=this.propertiesByName.get(t);if(!f(s))return;const r=i.isAtOrigin(t,e)&&!(s.flags&h.Overridden);i.delete(t,e),r&&s.notifyChange()}clearOverride(t){const e=this.propertiesByName.get(t);e&&e.flags&h.Overridden&&(e.flags&=~h.Overridden,e.notifyChange())}override(t,e){const i=this.propertiesByName.get(t);if(!p(i,t,e,this))return;const s=i.metadata.cast;if(s){const t=this._cast(s,e),{valid:i,value:r}=t;if(d.release(t),!i)return;e=r}i.flags|=h.Overridden,this._internalSet(i,e)}set(t,e){const i=this.propertiesByName.get(t);if(!p(i,t,e,this))return;const s=i.metadata.cast;if(s){const t=this._cast(s,e),{valid:i,value:r}=t;if(d.release(t),!i)return;e=r}const r=i.metadata.set;r?r.call(this.host,e):this._internalSet(i,e)}setDefaultOrigin(t){this._origin=n(t)}getDefaultOrigin(){return r(this._origin)}notifyChange(t){this.propertiesByName.get(t)?.notifyChange()}invalidate(t){this.propertiesByName.get(t)?.invalidate()}commit(t){this.propertiesByName.get(t)?.commit()}_internalSet(t,e){const s=this.lifecycle!==i.INITIALIZING?this._origin:0;this._setAtOrigin(t,e,s)}_setAtOrigin(e,i,s){const r=this.store,n=e.propertyName,a=r.isAtOrigin(n,s);if(a&&~e.flags&h.Overridden&&t(i,r.get(n)))return;const o=r.isBelowOrigin(n,s)||a;o&&e.invalidate(),r.set(n,i,s),o&&e.commit(),l(this.host,e)}_cast(t,e){const i=d.acquire();return i.valid=!0,i.value=e,t&&(i.value=t.call(this.host,e,i)),i}}class u{constructor(){this.value=null,this.valid=!0}acquire(){this.valid=!0}release(){this.value=null}}const d=new e(()=>new u);export{m as default};