@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 2.27 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.33/esri/copyright.txt for details.
*/
import e from"../core/Logger.js";import t from"../layers/support/Field.js";function n(e){return Object.keys(e.attributes).map((n=>{const i=e.attributes[n];return"objectid"===n.toLowerCase()||"fid"===n.toLowerCase()?new t({name:n,alias:n,type:"oid"}):new t("number"==typeof i?{name:n,alias:n,type:"double"}:{name:n,alias:n,type:"string"})}))}function i(e){if(!e.fields){const t=e.features[0];if(t.layer){e.fields=t.layer.fields;const n=Object.keys(t.attributes),i=e.fields.filter((e=>n.includes(e.name)));e.fields=i}else e.fields=n(t)}return e}function o(e){return e.map((({attributes:e})=>e))}function r(e){const{delimiter:t,fields:n=[],outFields:i=[]}=e,o=t||",",r=n.map((e=>e.name));return e=>{let t="";return r.filter((e=>i.includes(e))).forEach((i=>{const r=n.find((({name:e})=>e===i));let a=e[i]||"";if("date"===r?.type&&(a=new Date(a).toString()),r?.domain&&"coded-value"===r.domain.type){const e=r.domain.codedValues.find((e=>a===e.code));e&&(a=e.name)}"string"==typeof a&&a.includes(o)&&(a=`"${a}"`),t+=`${a}${o}`})),`${t}\r\n`}}async function a(n,{includeGeometry:a=!0,delimiter:l=",",outFields:s=["*"]}={}){n=i(n),a&&"point"!==n.geometryType&&e.getLogger("esri.exports.csv").warn(`The input geometry ${n.geometryType} is not supported. Geometry will be excluded from export.`);const{features:d}=n;if(!d.length)return null;let u=n.fields;const[m]=s;"*"===m&&(s=u.map((e=>e.name))),a&&"point"===n.geometryType&&(u.some((e=>"x"===e.name||"y"===e.name))||(u=[...u,new t({name:"lon",alias:"Longitude",type:"double"}),new t({name:"lat",alias:"Latitude",type:"double"})],s=[...s,"lon","lat"]),d.forEach((({attributes:e,geometry:t})=>{e.lon="point"===t?.type?t.longitude:null,e.lat="point"===t?.type?t.latitude:null}))),u=u.filter((e=>s.includes(e.name)));const p=l||",",c=o(d),f=u.map((e=>e.name)).join(p),y=r({delimiter:p,outFields:s||u.map((e=>e.name)),fields:u});let g=`${f}${p}\r\n`;c.forEach((e=>{g+=y(e)}));const b=new RegExp(`${p}\r\n\\s*$`,"g");return g.replace(b,"")}export{r as attributeToString,a as convertFeaturesToCSV,o as extractAttributes,n as extractFieldsFromFeature,i as validateFeatureSetFields};