12345 |
- /*
- All material copyright ESRI, All Rights Reserved, unless otherwise specified.
- See https://js.arcgis.com/4.25/esri/copyright.txt for details.
- */
- import e from"../core/Error.js";import t from"../layers/support/Field.js";function n(e){return Object.keys(e.attributes).map((n=>{const r=e.attributes[n];return"objectid"===n.toLowerCase()||"fid"===n.toLowerCase()?new t({name:n,alias:n,type:"oid"}):new t("number"==typeof r?{name:n,alias:n,type:"double"}:{name:n,alias:n,type:"string"})}))}function r(e){if(!e.fields){const t=e.features[0];if(t.layer){e.fields=t.layer.fields;const n=Object.keys(t.attributes),r=e.fields.filter((e=>n.includes(e.name)));e.fields=r}else e.fields=n(t)}return e}function i(e){return e.map((({attributes:e})=>e))}function o(e){const{delimiter:t,fields:n=[],outFields:r=[]}=e,i=t||",",o=n.map((e=>e.name));return e=>{let t="";return o.filter((e=>r.includes(e))).forEach((r=>{const o=n.find((({name:e})=>e===r));let a=e[r]||"";if("date"===o?.type&&(a=new Date(a).toString()),o?.domain&&"coded-value"===o.domain.type){const e=o.domain.codedValues.find((e=>a===e.code));e&&(a=e.name)}"string"==typeof a&&a.includes(i)&&(a=`"${a}"`),t+=`${a}${i}`})),`${t}\r\n`}}async function a(n,{includeGeometry:a=!0,delimiter:s=",",outFields:l=["*"]}={}){if(n=r(n),a&&"point"!==n.geometryType)throw new e("export-csv:invalid-geometries",`the input geometry ${n.geometryType} is not supported, must be point`);const{features:u}=n;if(!u.length)return null;let d=n.fields;const[m]=l;"*"===m&&(l=d.map((e=>e.name))),a&&"point"===n.geometryType&&(d.some((e=>"x"===e.name||"y"===e.name))||(d=[...d,new t({name:"lon",alias:"Longitude",type:"double"}),new t({name:"lat",alias:"Latitude",type:"double"})],l=[...l,"lon","lat"]),u.forEach((e=>{e.attributes.lon=e.geometry.longitude,e.attributes.lat=e.geometry.latitude}))),d=d.filter((e=>l.includes(e.name)));const f=s||",",c=i(u),p=d.map((e=>e.name)).join(f),y=o({delimiter:f,outFields:l||d.map((e=>e.name)),fields:d});let g=`${p}${f}\r\n`;c.forEach((e=>{g+=y(e)}));const b=new RegExp(`${f}\r\ns*$`,"g");return g.replace(b,"")}async function s(t,n){if(!t||t.features&&!t.features.length)throw new e("csv-export:features-required","exportFeaturesToCSV requires features to export");return a(t,n)}export{o as attributeToString,a as convertFeaturesToCSV,s as exportFeaturesToCSV,i as extractAttributes,n as extractFieldsFromFeature,r as validateFeatureSetFields};
|