1 |
- import{g as b,gs as v,eR as M,ca as Q,t as Z,as as F,a as _,c2 as q,c4 as $,gt as A,eT as D,aQ as O}from"./index.6c049565.js";import{t as k,n as C}from"./objectIdUtils.83ac3f67.js";import{u as P}from"./FeatureStore.cb9b2be9.js";import{f as E,g as T}from"./projectionSupport.2b4a8796.js";import{Y as G}from"./QueryEngine.05824aeb.js";import{i as z,o as L,a as W}from"./clientSideDefaults.e21714f1.js";import{w as B,a as I,m as j,f as x,g as w}from"./sourceUtils.3b4ff83d.js";import"./PooledRBush.f1e26fa4.js";import"./centroid.0c969b82.js";import"./json.879c9adc.js";import"./QueryEngineResult.fe74257f.js";import"./quantizationUtils.4f3ed95a.js";import"./WhereClause.39c9a123.js";import"./utils.5216fcae.js";import"./generateRendererUtils.03b1f269.js";import"./utils.9592ea84.js";import"./QueryEngineCapabilities.78217f95.js";import"./timeSupport.4d8d3d9b.js";const U=D,H={xmin:-180,ymin:-90,xmax:180,ymax:90,spatialReference:D},V={hasAttachments:!1,capabilities:"query, editing, create, delete, update",useStandardizedQueries:!0,supportsCoordinatesQuantization:!0,supportsReturningQueryGeometry:!0,advancedQueryCapabilities:{supportsQueryAttachments:!1,supportsStatistics:!0,supportsPercentileStatistics:!0,supportsReturningGeometryCentroid:!0,supportsQueryWithDistance:!0,supportsDistinct:!0,supportsReturningQueryExtent:!0,supportsReturningGeometryProperties:!1,supportsHavingClause:!0,supportsOrderBy:!0,supportsPagination:!0,supportsQueryWithResultType:!1,supportsSqlExpression:!0,supportsDisjointSpatialRel:!0}};function X(h){return O(h)?h.z!=null:!!h.hasZ}function Y(h){return O(h)?h.m!=null:!!h.hasM}class me{constructor(){this._queryEngine=null,this._nextObjectId=null}destroy(){this._queryEngine&&this._queryEngine&&this._queryEngine.destroy(),this._queryEngine=this._fieldsIndex=this._createDefaultAttributes=null}async load(e){const t=[],{features:n}=e,i=this._inferLayerProperties(n,e.fields),l=e.fields||[],f=e.hasM!=null?e.hasM:i.hasM,c=e.hasZ!=null?e.hasZ:i.hasZ,y=!e.spatialReference&&!i.spatialReference,d=y?U:e.spatialReference||i.spatialReference,a=y?H:null,p=e.geometryType||i.geometryType,o=!p;let u=e.objectIdField||i.objectIdField,r=e.timeInfo;if(!o&&(y&&t.push({name:"feature-layer:spatial-reference-not-found",message:"Spatial reference not provided or found in features. Defaults to WGS84"}),!p))throw new b("feature-layer:missing-property","geometryType not set and couldn't be inferred from the provided features");if(!u)throw new b("feature-layer:missing-property","objectIdField not set and couldn't be found in the provided fields");if(i.objectIdField&&u!==i.objectIdField&&(t.push({name:"feature-layer:duplicated-oid-field",message:`Provided objectIdField "${u}" doesn't match the field name "${i.objectIdField}", found in the provided fields`}),u=i.objectIdField),u&&!i.objectIdField){let s=null;l.some(g=>g.name===u&&(s=g,!0))?(s.type="esriFieldTypeOID",s.editable=!1,s.nullable=!1):l.unshift({alias:u,name:u,type:"esriFieldTypeOID",editable:!1,nullable:!1})}for(const s of l){if(s.name==null&&(s.name=s.alias),s.alias==null&&(s.alias=s.name),!s.name)throw new b("feature-layer:invalid-field-name","field name is missing",{field:s});if(s.name===u&&(s.type="esriFieldTypeOID"),!v.jsonValues.includes(s.type))throw new b("feature-layer:invalid-field-type",`invalid type for field "${s.name}"`,{field:s})}const m={};for(const s of l)if(s.type!=="esriFieldTypeOID"&&s.type!=="esriFieldTypeGlobalID"){const g=M(s);g!==void 0&&(m[s.name]=g)}if(this._fieldsIndex=new Q(l),this._createDefaultAttributes=z(m,u),r){if(r.startTimeField){const s=this._fieldsIndex.get(r.startTimeField);s?(r.startTimeField=s.name,s.type="esriFieldTypeDate"):r.startTimeField=null}if(r.endTimeField){const s=this._fieldsIndex.get(r.endTimeField);s?(r.endTimeField=s.name,s.type="esriFieldTypeDate"):r.endTimeField=null}if(r.trackIdField){const s=this._fieldsIndex.get(r.trackIdField);s?r.trackIdField=s.name:(r.trackIdField=null,t.push({name:"feature-layer:invalid-timeInfo-trackIdField",message:"trackIdField is missing",details:{timeInfo:r}}))}r.startTimeField||r.endTimeField||(t.push({name:"feature-layer:invalid-timeInfo",message:"startTimeField and endTimeField are missing or invalid",details:{timeInfo:r}}),r=null)}const R={warnings:t,featureErrors:[],layerDefinition:{...V,drawingInfo:L(p),templates:W(m),extent:a,geometryType:p,objectIdField:u,fields:l,hasZ:!!c,hasM:!!f,timeInfo:r},assignedObjectIds:{}};if(this._queryEngine=new G({fields:l,geometryType:p,hasM:f,hasZ:c,objectIdField:u,spatialReference:d,featureStore:new P({geometryType:p,hasM:f,hasZ:c}),timeInfo:r,cacheSpatialQueries:!0}),!n||!n.length)return this._nextObjectId=k,R;const S=C(u,n);return this._nextObjectId=S+1,await E(n,d),this._loadInitialFeatures(R,n)}async applyEdits(e){const{spatialReference:t,geometryType:n}=this._queryEngine;return await Promise.all([B(t,n),E(e.adds,t),E(e.updates,t)]),this._applyEdits(e)}queryFeatures(e,t={}){return this._queryEngine.executeQuery(e,t.signal)}queryFeatureCount(e,t={}){return this._queryEngine.executeQueryForCount(e,t.signal)}queryObjectIds(e,t={}){return this._queryEngine.executeQueryForIds(e,t.signal)}queryExtent(e,t={}){return this._queryEngine.executeQueryForExtent(e,t.signal)}querySnapping(e,t={}){return this._queryEngine.executeQueryForSnapping(e,t.signal)}_inferLayerProperties(e,t){let n,i,l=null,f=null,c=null;for(const y of e){const d=y.geometry;if(!Z(d)&&(l||(l=F(d)),f||(f=d.spatialReference),n==null&&(n=X(d)),i==null&&(i=Y(d)),l&&f&&n!=null&&i!=null))break}if(t&&t.length){let y=null;t.some(d=>{const a=d.type==="esriFieldTypeOID",p=!d.type&&d.name&&d.name.toLowerCase()==="objectid";return y=d,a||p})&&(c=y.name)}return{geometryType:l,spatialReference:f,objectIdField:c,hasM:i,hasZ:n}}_loadInitialFeatures(e,t){const{geometryType:n,hasM:i,hasZ:l,objectIdField:f,spatialReference:c,featureStore:y}=this._queryEngine,d=[];for(const a of t){if(a.uid!=null&&(e.assignedObjectIds[a.uid]=-1),a.geometry&&n!==F(a.geometry)){e.featureErrors.push(I("Incorrect geometry type."));continue}const p=this._createDefaultAttributes(),o=j(this._fieldsIndex,p,a.attributes,!0,e.warnings);o?e.featureErrors.push(o):(this._assignObjectId(p,a.attributes,!0),a.attributes=p,a.uid!=null&&(e.assignedObjectIds[a.uid]=a.attributes[f]),_(a.geometry)&&(a.geometry=T(a.geometry,a.geometry.spatialReference,c)),d.push(a))}if(y.addMany(q([],d,n,l,i,f)),e.layerDefinition.extent=this._queryEngine.fullExtent,e.layerDefinition.timeInfo){const{start:a,end:p}=this._queryEngine.timeExtent;e.layerDefinition.timeInfo.timeExtent=[a,p]}return e}_applyEdits(e){const{adds:t,updates:n,deletes:i}=e,l={addResults:[],deleteResults:[],updateResults:[],uidToObjectId:{}};if(t&&t.length&&this._applyAddEdits(l,t),n&&n.length&&this._applyUpdateEdits(l,n),i&&i.length){for(const f of i)l.deleteResults.push(x(f));this._queryEngine.featureStore.removeManyById(i)}return{fullExtent:this._queryEngine.fullExtent,featureEditResults:l}}_applyAddEdits(e,t){var p;const{addResults:n}=e,{geometryType:i,hasM:l,hasZ:f,objectIdField:c,spatialReference:y,featureStore:d}=this._queryEngine,a=[];for(const o of t){if(o.geometry&&i!==F(o.geometry)){n.push(I("Incorrect geometry type."));continue}const u=this._createDefaultAttributes(),r=j(this._fieldsIndex,u,o.attributes);if(r)n.push(r);else{if(this._assignObjectId(u,o.attributes),o.attributes=u,o.uid!=null){const m=o.attributes[c];e.uidToObjectId[o.uid]=m}if(_(o.geometry)){const m=(p=o.geometry.spatialReference)!=null?p:y;o.geometry=T(w(o.geometry,m),m,y)}a.push(o),n.push(x(o.attributes[c]))}}d.addMany(q([],a,i,f,l,c))}_applyUpdateEdits({updateResults:e},t){var d;const{geometryType:n,hasM:i,hasZ:l,objectIdField:f,spatialReference:c,featureStore:y}=this._queryEngine;for(const a of t){const{attributes:p,geometry:o}=a,u=p&&p[f];if(u==null){e.push(I(`Identifier field ${f} missing`));continue}if(!y.has(u)){e.push(I(`Feature with object id ${u} missing`));continue}const r=$(y.getFeature(u),n,l,i);if(_(o)){if(n!==F(o)){e.push(I("Incorrect geometry type."));continue}const m=(d=o.spatialReference)!=null?d:c;r.geometry=T(w(o,m),m,c)}if(p){const m=j(this._fieldsIndex,r.attributes,p);if(m){e.push(m);continue}}y.add(A(r,n,l,i,f)),e.push(x(u))}}_assignObjectId(e,t,n=!1){const i=this._queryEngine.objectIdField;n&&t&&isFinite(t[i])?e[i]=t[i]:e[i]=this._nextObjectId++}}export{me as default};
|