Dictionary.js 2.9 KB

12345
  1. /*
  2. All material copyright ESRI, All Rights Reserved, unless otherwise specified.
  3. See https://js.arcgis.com/4.25/esri/copyright.txt for details.
  4. */
  5. import{ArcadeExecutionError as t,ExecutionErrorCodes as s}from"./executionError.js";import i from"./ImmutableArray.js";import{i as e,a as n,b as r,c as o,t as a,d as u,e as l,f as c,g as f,h,j as b,k as y,l as m,m as d}from"../chunks/languageUtils.js";import g from"../geometry/Geometry.js";function w(t,s=!1){if(null==t)return null;if(r(t))return f(t);if(n(t))return h(t);if(o(t))return b(t);if(y(t))return m(t);if(d(t)){const i=[];for(const e of t)i.push(w(e,s));return i}const i=new J;i.immutable=!1;for(const e of Object.keys(t)){const n=t[e];void 0!==n&&i.setField(e,w(n,s))}return i.immutable=s,i}class J{constructor(t){this.declaredClass="esri.arcade.Dictionary",this.attributes=null,this.plain=!1,this.immutable=!0,this.attributes=t instanceof J?t.attributes:t??{}}field(i){const e=i.toLowerCase(),n=this.attributes[i];if(void 0!==n)return n;for(const t in this.attributes)if(t.toLowerCase()===e)return this.attributes[t];throw new t(null,s.FieldNotFound,null,{key:i})}setField(i,n){if(this.immutable)throw new t(null,s.Immutable,null);if(e(n))throw new t(null,s.NoFunctionInDictionary,null);const r=i.toLowerCase();if(void 0===this.attributes[i]){for(const t in this.attributes)if(t.toLowerCase()===r)return void(this.attributes[t]=n);this.attributes[i]=n}else this.attributes[i]=n}hasField(t){const s=t.toLowerCase();if(void 0!==this.attributes[t])return!0;for(const i in this.attributes)if(i.toLowerCase()===s)return!0;return!1}keys(){let t=[];for(const s in this.attributes)t.push(s);return t=t.sort(),t}castToText(t=!1){let s="";for(const e in this.attributes){""!==s&&(s+=",");const u=this.attributes[e];null==u?s+=JSON.stringify(e)+":null":n(u)||r(u)||o(u)?s+=JSON.stringify(e)+":"+JSON.stringify(u):u instanceof g?s+=JSON.stringify(e)+":"+a(u):u instanceof i||u instanceof Array?s+=JSON.stringify(e)+":"+a(u,null,t):u instanceof Date?s+=t?JSON.stringify(e)+":"+JSON.stringify(u.getTime()):JSON.stringify(e)+":"+JSON.stringify(u):null!==u&&"object"==typeof u&&void 0!==u.castToText&&(s+=JSON.stringify(e)+":"+u.castToText(t))}return"{"+s+"}"}static convertObjectToArcadeDictionary(t,s=!0){const i=new J;i.immutable=!1;for(const e in t){const s=t[e];void 0!==s&&i.setField(e.toString(),w(s))}return i.immutable=s,i}static convertJsonToArcade(t,s=!1){return w(t,s)}castAsJson(t=null){const s={};for(let i in this.attributes){const e=this.attributes[i];void 0!==e&&(t?.keyTranslate&&(i=t.keyTranslate(i)),s[i]=u(e,t))}return s}async castDictionaryValueAsJsonAsync(t,s,i,e=null,n){const r=await l(i,e,n);return t[s]=r,r}async castAsJsonAsync(t=null,s=null){const i={},e=[];for(let n in this.attributes){const r=this.attributes[n];s?.keyTranslate&&(n=s.keyTranslate(n)),void 0!==r&&(c(r)||r instanceof g||r instanceof Date?i[n]=u(r,s):e.push(this.castDictionaryValueAsJsonAsync(i,n,r,t,s)))}return e.length>0&&await Promise.all(e),i}}export{J as default};