bruce-models 3.4.3 → 3.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2473,6 +2473,129 @@ var Color;
2473
2473
  Color.ColorFromStr = ColorFromStr;
2474
2474
  })(Color || (Color = {}));
2475
2475
 
2476
+ /**
2477
+ * Describes vector geometry that Bruce uses.
2478
+ */
2479
+ var Geometry;
2480
+ (function (Geometry) {
2481
+ let EPolygonRingType;
2482
+ (function (EPolygonRingType) {
2483
+ EPolygonRingType["Boundaries"] = "out";
2484
+ EPolygonRingType["Hole"] = "in";
2485
+ })(EPolygonRingType = Geometry.EPolygonRingType || (Geometry.EPolygonRingType = {}));
2486
+ /**
2487
+ * Turns an array of points into string vector geometry that Bruce can use.
2488
+ * This is used for saving polyline and polygon data.
2489
+ * @param points
2490
+ * @returns
2491
+ */
2492
+ function LineStrFromPoints(points) {
2493
+ if (!points.length) {
2494
+ throw ("points is empty.");
2495
+ }
2496
+ let carto = points[0];
2497
+ let lineString = `${carto.longitude},${carto.latitude}` + (carto.altitude != null ? `,${carto.altitude}` : "");
2498
+ for (let i = 1; i < points.length; i++) {
2499
+ carto = points[i];
2500
+ lineString += ` ${carto.longitude},${carto.latitude}` + (carto.altitude != null ? `,${carto.altitude}` : "");
2501
+ }
2502
+ return lineString;
2503
+ }
2504
+ Geometry.LineStrFromPoints = LineStrFromPoints;
2505
+ /**
2506
+ * Removes same points that occur in a row.
2507
+ * This will not modify the original array.
2508
+ * @param positions
2509
+ * @returns
2510
+ */
2511
+ function RemoveRepeatPoints(positions) {
2512
+ const filteredList = [];
2513
+ for (let i = 0; i < positions.length; i++) {
2514
+ const pos = positions[i];
2515
+ const lastPos = filteredList.length > 0 ? filteredList[filteredList.length - 1] : null;
2516
+ if (!lastPos || (pos.latitude != lastPos.latitude || pos.longitude != lastPos.longitude || pos.altitude != lastPos.altitude)) {
2517
+ filteredList.push(pos);
2518
+ }
2519
+ }
2520
+ return filteredList;
2521
+ }
2522
+ Geometry.RemoveRepeatPoints = RemoveRepeatPoints;
2523
+ /**
2524
+ * Parses a string of points into an array of points.
2525
+ * @param pointsStr
2526
+ * @returns
2527
+ */
2528
+ function ParsePoints(pointsStr) {
2529
+ pointsStr = pointsStr.replace(/[^\d.,-\s]/g, "");
2530
+ let splitterCoordinates = " ";
2531
+ let splitterAxis = ",";
2532
+ const commaIndex = pointsStr.indexOf(",");
2533
+ const spaceIndex = pointsStr.indexOf(" ");
2534
+ if ((spaceIndex > -1 && commaIndex > spaceIndex) || commaIndex <= -1) {
2535
+ splitterCoordinates = ",";
2536
+ splitterAxis = " ";
2537
+ }
2538
+ let points = pointsStr.trim().split(splitterCoordinates);
2539
+ points = points.filter(a => a != "");
2540
+ const result = [];
2541
+ for (let i = 0; i < points.length; i++) {
2542
+ const pointData = points[i];
2543
+ const coords = pointData.trim().split(splitterAxis);
2544
+ if (coords.length == 2 || coords.length == 3) {
2545
+ const longitude = Number(coords[0]);
2546
+ const latitude = Number(coords[1]);
2547
+ const altitude = Number(coords.length >= 3 ? coords[2] : 0);
2548
+ if (longitude != null && latitude != null) {
2549
+ result.push({
2550
+ altitude: altitude,
2551
+ latitude: latitude,
2552
+ longitude: longitude
2553
+ });
2554
+ }
2555
+ else {
2556
+ console.warn("Invalid point data detected.", pointData);
2557
+ }
2558
+ }
2559
+ }
2560
+ return result;
2561
+ }
2562
+ Geometry.ParsePoints = ParsePoints;
2563
+ /**
2564
+ * Parses both string and object Bruce geometry.
2565
+ * String geometry is legacy Bruce data.
2566
+ * @param geometry
2567
+ * @returns
2568
+ */
2569
+ function ParseGeometry(geometry) {
2570
+ if (typeof geometry == "string") {
2571
+ let positions = [];
2572
+ const geometryParsed = (geometry || "").split(";");
2573
+ for (let i = 0; i < geometryParsed.length; i++) {
2574
+ const data = geometryParsed[i];
2575
+ const points = ParsePoints(data);
2576
+ if (points && points.length > 0) {
2577
+ positions = positions.concat(points);
2578
+ }
2579
+ }
2580
+ positions = RemoveRepeatPoints(positions);
2581
+ const newGeometry = {};
2582
+ if (positions.length > 0) {
2583
+ const topPoint = positions[0];
2584
+ newGeometry.Point = `${topPoint.latitude},${topPoint.longitude}` + (topPoint.altitude != null ? `,${topPoint.altitude}` : "");
2585
+ if (positions.length > 1) {
2586
+ newGeometry.Polygon = [{ Facing: EPolygonRingType.Boundaries, LinearRing: LineStrFromPoints(positions) }];
2587
+ }
2588
+ if (positions.length > 2) {
2589
+ newGeometry.LineString = LineStrFromPoints(positions);
2590
+ }
2591
+ }
2592
+ return newGeometry;
2593
+ }
2594
+ return geometry;
2595
+ }
2596
+ Geometry.ParseGeometry = ParseGeometry;
2597
+ })(Geometry || (Geometry = {}));
2598
+
2476
2599
  var ObjectUtils;
2477
2600
  (function (ObjectUtils) {
2478
2601
  const DEFAULT_LENGTH = 36;
@@ -2746,6 +2869,28 @@ var PathUtils;
2746
2869
  PathUtils.ParseLegacy = ParseLegacy;
2747
2870
  })(PathUtils || (PathUtils = {}));
2748
2871
 
2872
+ /**
2873
+ * Describes an expectation on what should be rendered for a menu item-
2874
+ * between a min-max distance of an entity to the camera.
2875
+ */
2876
+ var ZoomControl;
2877
+ (function (ZoomControl) {
2878
+ /**
2879
+ * Available display types for a menu item.
2880
+ */
2881
+ let EDisplayType;
2882
+ (function (EDisplayType) {
2883
+ // Hidden means it will not be rendered.
2884
+ EDisplayType["Hidden"] = "hidden";
2885
+ // Point will try render a point based on any available Entity data.
2886
+ EDisplayType["Point"] = "point";
2887
+ // Geometry means it will try render multi-geometry, polygon, polyline, or point in order of priority.
2888
+ EDisplayType["Geometry"] = "geometry";
2889
+ // 3D means it will try render 3D model, multi-geometry, polygon, polyline, or point in order of priority.
2890
+ EDisplayType["Model3D"] = "3d";
2891
+ })(EDisplayType = ZoomControl.EDisplayType || (ZoomControl.EDisplayType = {}));
2892
+ })(ZoomControl || (ZoomControl = {}));
2893
+
2749
2894
  /**
2750
2895
  * Describes the "Entity" concept within Nextspace.
2751
2896
  * An entity is a JSON blob containing both internal data and user-defined data.
@@ -3265,6 +3410,121 @@ var Entity;
3265
3410
  });
3266
3411
  }
3267
3412
  Entity.GetList = GetList;
3413
+ function ToGeoJson(params) {
3414
+ const { entities, excludeAltitude, altitude, includeUserData, allowedDisplayTypes } = params;
3415
+ const features = [];
3416
+ const allowPoint = allowedDisplayTypes == null || allowedDisplayTypes.includes(ZoomControl.EDisplayType.Point);
3417
+ const allowGeometry = allowedDisplayTypes == null || allowedDisplayTypes.includes(ZoomControl.EDisplayType.Geometry);
3418
+ const cloneObj = (obj) => {
3419
+ return JSON.parse(JSON.stringify(obj));
3420
+ };
3421
+ const areCoordinatesEqual = (coord1, coord2) => {
3422
+ return coord1[0] === coord2[0] && coord1[1] === coord2[1] && (coord1[2] === coord2[2] || (coord1.length < 3 && coord2.length < 3));
3423
+ };
3424
+ const removeConsecutiveDuplicates = (coordinates) => {
3425
+ return coordinates.filter((coord, index, array) => {
3426
+ return index === 0 || !areCoordinatesEqual(coord, array[index - 1]);
3427
+ });
3428
+ };
3429
+ const closePolygonCoordinates = (coordinates) => {
3430
+ if (coordinates.length > 0 && !areCoordinatesEqual(coordinates[0], coordinates[coordinates.length - 1])) {
3431
+ const firstPointCopy = [...coordinates[0]];
3432
+ coordinates.push(firstPointCopy);
3433
+ }
3434
+ return coordinates;
3435
+ };
3436
+ const populateProperties = (feature, entity) => {
3437
+ let properties = null;
3438
+ // All properties.
3439
+ if (includeUserData != false) {
3440
+ properties = cloneObj(entity);
3441
+ // We exclude geometry since the geojson is supposed to represent that attribute.
3442
+ delete properties.geometry;
3443
+ }
3444
+ // Only specific internal properties.
3445
+ else {
3446
+ properties = {
3447
+ Bruce: entity.Bruce ? cloneObj(entity.Bruce) : null,
3448
+ location: entity.location ? cloneObj(entity.location) : null,
3449
+ transform: entity.transform ? cloneObj(entity.transform) : null,
3450
+ boundaries: entity.boundaries ? cloneObj(entity.boundaries) : null,
3451
+ };
3452
+ }
3453
+ feature.properties = properties;
3454
+ };
3455
+ const processGeometry = (geometry, entity) => {
3456
+ var _a, _b;
3457
+ const feature = {
3458
+ type: "Feature",
3459
+ properties: {},
3460
+ geometry: null
3461
+ };
3462
+ populateProperties(feature, entity);
3463
+ if (((_a = geometry.MultiGeometry) === null || _a === void 0 ? void 0 : _a.length) && allowGeometry) {
3464
+ geometry.MultiGeometry.forEach(geo => processGeometry(geo, entity));
3465
+ return;
3466
+ }
3467
+ else if (((_b = geometry.Polygon) === null || _b === void 0 ? void 0 : _b.length) && allowGeometry) {
3468
+ const sortedPolygons = geometry.Polygon.sort((a, b) => a.Facing === Geometry.EPolygonRingType.Boundaries ? -1 : 1);
3469
+ const coordinates = sortedPolygons.map(polygonRing => closePolygonCoordinates(removeConsecutiveDuplicates(polygonRing.LinearRing.split(' ').map(coord => {
3470
+ const [lon, lat, alt] = coord.split(',').map(Number);
3471
+ return excludeAltitude ? [lon, lat] : [lon, lat, altitude !== undefined ? altitude : (alt !== undefined ? alt : [])];
3472
+ }))));
3473
+ // Check if the polygon has at least 4 points.
3474
+ const isValidPolygon = coordinates.every(polygon => polygon.length >= 4);
3475
+ if (!isValidPolygon) {
3476
+ // Perhaps try other geometry instead of returning?
3477
+ return;
3478
+ }
3479
+ feature.geometry = {
3480
+ type: "Polygon",
3481
+ coordinates: coordinates,
3482
+ };
3483
+ }
3484
+ else if (geometry.LineString && (allowedDisplayTypes == null || allowedDisplayTypes.includes(ZoomControl.EDisplayType.Geometry))) {
3485
+ const coordinates = removeConsecutiveDuplicates(geometry.LineString.split(' ').map(coord => {
3486
+ const [lon, lat, alt] = coord.split(',').map(Number);
3487
+ return excludeAltitude ? [lon, lat] : [lon, lat, altitude !== undefined ? altitude : (alt !== undefined ? alt : [])];
3488
+ }));
3489
+ // Check if the polyline has at least 2 points.
3490
+ if (coordinates.length < 2) {
3491
+ // Perhaps try other geometry instead of returning?
3492
+ return;
3493
+ }
3494
+ feature.geometry = {
3495
+ type: "LineString",
3496
+ coordinates,
3497
+ };
3498
+ }
3499
+ else if (geometry.Point && allowPoint) {
3500
+ const [lon, lat, alt] = geometry.Point.split(',').map(Number);
3501
+ const coordinates = excludeAltitude ? [lon, lat] : [lon, lat, altitude !== undefined ? altitude : (alt !== undefined ? alt : [])];
3502
+ feature.geometry = {
3503
+ type: "Point",
3504
+ coordinates,
3505
+ };
3506
+ }
3507
+ features.push(feature);
3508
+ };
3509
+ entities.forEach(entity => {
3510
+ var _a, _b, _c;
3511
+ if (!((_a = entity === null || entity === void 0 ? void 0 : entity.Bruce) === null || _a === void 0 ? void 0 : _a.ID)) {
3512
+ return;
3513
+ }
3514
+ let geometry = entity.geometry;
3515
+ if (!geometry && (((_b = entity.location) === null || _b === void 0 ? void 0 : _b.longitude) && ((_c = entity.location) === null || _c === void 0 ? void 0 : _c.latitude))) {
3516
+ geometry = {
3517
+ Point: `${entity.location.longitude},${entity.location.latitude}` + (entity.location.altitude != null ? `,${entity.location.altitude}` : ""),
3518
+ };
3519
+ }
3520
+ processGeometry(geometry, entity);
3521
+ });
3522
+ return {
3523
+ type: "FeatureCollection",
3524
+ features,
3525
+ };
3526
+ }
3527
+ Entity.ToGeoJson = ToGeoJson;
3268
3528
  })(Entity || (Entity = {}));
3269
3529
 
3270
3530
  /**
@@ -3773,197 +4033,6 @@ var Calculator;
3773
4033
  Calculator.GetInputValue = GetInputValue;
3774
4034
  })(Calculator || (Calculator = {}));
3775
4035
 
3776
- /**
3777
- * Describes vector geometry that Bruce uses.
3778
- */
3779
- var Geometry;
3780
- (function (Geometry) {
3781
- let EPolygonRingType;
3782
- (function (EPolygonRingType) {
3783
- EPolygonRingType["Boundaries"] = "out";
3784
- EPolygonRingType["Hole"] = "in";
3785
- })(EPolygonRingType = Geometry.EPolygonRingType || (Geometry.EPolygonRingType = {}));
3786
- /**
3787
- * Turns an array of points into string vector geometry that Bruce can use.
3788
- * This is used for saving polyline and polygon data.
3789
- * @param points
3790
- * @returns
3791
- */
3792
- function LineStrFromPoints(points) {
3793
- if (!points.length) {
3794
- throw ("points is empty.");
3795
- }
3796
- let carto = points[0];
3797
- let lineString = `${carto.longitude},${carto.latitude}` + (carto.altitude != null ? `,${carto.altitude}` : "");
3798
- for (let i = 1; i < points.length; i++) {
3799
- carto = points[i];
3800
- lineString += ` ${carto.longitude},${carto.latitude}` + (carto.altitude != null ? `,${carto.altitude}` : "");
3801
- }
3802
- return lineString;
3803
- }
3804
- Geometry.LineStrFromPoints = LineStrFromPoints;
3805
- /**
3806
- * Removes same points that occur in a row.
3807
- * This will not modify the original array.
3808
- * @param positions
3809
- * @returns
3810
- */
3811
- function RemoveRepeatPoints(positions) {
3812
- const filteredList = [];
3813
- for (let i = 0; i < positions.length; i++) {
3814
- const pos = positions[i];
3815
- const lastPos = filteredList.length > 0 ? filteredList[filteredList.length - 1] : null;
3816
- if (!lastPos || (pos.latitude != lastPos.latitude || pos.longitude != lastPos.longitude || pos.altitude != lastPos.altitude)) {
3817
- filteredList.push(pos);
3818
- }
3819
- }
3820
- return filteredList;
3821
- }
3822
- Geometry.RemoveRepeatPoints = RemoveRepeatPoints;
3823
- /**
3824
- * Parses a string of points into an array of points.
3825
- * @param pointsStr
3826
- * @returns
3827
- */
3828
- function ParsePoints(pointsStr) {
3829
- pointsStr = pointsStr.replace(/[^\d.,-\s]/g, "");
3830
- let splitterCoordinates = " ";
3831
- let splitterAxis = ",";
3832
- const commaIndex = pointsStr.indexOf(",");
3833
- const spaceIndex = pointsStr.indexOf(" ");
3834
- if ((spaceIndex > -1 && commaIndex > spaceIndex) || commaIndex <= -1) {
3835
- splitterCoordinates = ",";
3836
- splitterAxis = " ";
3837
- }
3838
- let points = pointsStr.trim().split(splitterCoordinates);
3839
- points = points.filter(a => a != "");
3840
- const result = [];
3841
- for (let i = 0; i < points.length; i++) {
3842
- const pointData = points[i];
3843
- const coords = pointData.trim().split(splitterAxis);
3844
- if (coords.length == 2 || coords.length == 3) {
3845
- const longitude = Number(coords[0]);
3846
- const latitude = Number(coords[1]);
3847
- const altitude = Number(coords.length >= 3 ? coords[2] : 0);
3848
- if (longitude != null && latitude != null) {
3849
- result.push({
3850
- altitude: altitude,
3851
- latitude: latitude,
3852
- longitude: longitude
3853
- });
3854
- }
3855
- else {
3856
- console.warn("Invalid point data detected.", pointData);
3857
- }
3858
- }
3859
- }
3860
- return result;
3861
- }
3862
- Geometry.ParsePoints = ParsePoints;
3863
- /**
3864
- * Parses both string and object Bruce geometry.
3865
- * String geometry is legacy Bruce data.
3866
- * @param geometry
3867
- * @returns
3868
- */
3869
- function ParseGeometry(geometry) {
3870
- if (typeof geometry == "string") {
3871
- let positions = [];
3872
- const geometryParsed = (geometry || "").split(";");
3873
- for (let i = 0; i < geometryParsed.length; i++) {
3874
- const data = geometryParsed[i];
3875
- const points = ParsePoints(data);
3876
- if (points && points.length > 0) {
3877
- positions = positions.concat(points);
3878
- }
3879
- }
3880
- positions = RemoveRepeatPoints(positions);
3881
- const newGeometry = {};
3882
- if (positions.length > 0) {
3883
- const topPoint = positions[0];
3884
- newGeometry.Point = `${topPoint.latitude},${topPoint.longitude}` + (topPoint.altitude != null ? `,${topPoint.altitude}` : "");
3885
- if (positions.length > 1) {
3886
- newGeometry.Polygon = [{ Facing: EPolygonRingType.Boundaries, LinearRing: LineStrFromPoints(positions) }];
3887
- }
3888
- if (positions.length > 2) {
3889
- newGeometry.LineString = LineStrFromPoints(positions);
3890
- }
3891
- }
3892
- return newGeometry;
3893
- }
3894
- return geometry;
3895
- }
3896
- Geometry.ParseGeometry = ParseGeometry;
3897
- function ToGeoJson(params) {
3898
- const { entities, excludeAltitude } = params;
3899
- const features = [];
3900
- const processGeometry = (geometry, ID) => {
3901
- if (geometry.Polygon) {
3902
- const sortedPolygons = geometry.Polygon.sort((a, b) => a.Facing === EPolygonRingType.Boundaries ? -1 : 1);
3903
- const coordinates = sortedPolygons.map(polygonRing => polygonRing.LinearRing.split(' ').map(coord => {
3904
- const [lon, lat, alt] = coord.split(',').map(Number);
3905
- return excludeAltitude ? [lon, lat] : [lon, lat, ...(alt ? [alt] : [])];
3906
- }));
3907
- features.push({
3908
- type: 'Feature',
3909
- properties: { ID },
3910
- geometry: {
3911
- type: 'Polygon',
3912
- coordinates: coordinates,
3913
- }
3914
- });
3915
- }
3916
- if (geometry.Point) {
3917
- const [lon, lat, alt] = geometry.Point.split(',').map(Number);
3918
- const coordinates = excludeAltitude ? [lon, lat] : [lon, lat, ...(alt ? [alt] : [])];
3919
- features.push({
3920
- type: 'Feature',
3921
- properties: { ID },
3922
- geometry: {
3923
- type: 'Point',
3924
- coordinates,
3925
- }
3926
- });
3927
- }
3928
- if (geometry.LineString) {
3929
- const coordinates = geometry.LineString.split(' ').map(coord => {
3930
- const [lon, lat, alt] = coord.split(',').map(Number);
3931
- return excludeAltitude ? [lon, lat] : [lon, lat, ...(alt ? [alt] : [])];
3932
- });
3933
- features.push({
3934
- type: 'Feature',
3935
- properties: { ID },
3936
- geometry: {
3937
- type: 'LineString',
3938
- coordinates,
3939
- }
3940
- });
3941
- }
3942
- if (geometry.MultiGeometry) {
3943
- geometry.MultiGeometry.forEach(geo => processGeometry(geo, ID));
3944
- }
3945
- };
3946
- entities.forEach(entity => {
3947
- var _a, _b, _c;
3948
- if (!((_a = entity === null || entity === void 0 ? void 0 : entity.Bruce) === null || _a === void 0 ? void 0 : _a.ID)) {
3949
- return;
3950
- }
3951
- let geometry = entity.geometry;
3952
- if (!geometry && (((_b = entity.location) === null || _b === void 0 ? void 0 : _b.longitude) && ((_c = entity.location) === null || _c === void 0 ? void 0 : _c.latitude))) {
3953
- geometry = {
3954
- Point: `${entity.location.longitude},${entity.location.latitude}` + (entity.location.altitude != null ? `,${entity.location.altitude}` : ""),
3955
- };
3956
- }
3957
- processGeometry(geometry, entity.Bruce.ID);
3958
- });
3959
- return {
3960
- type: 'FeatureCollection',
3961
- features,
3962
- };
3963
- }
3964
- Geometry.ToGeoJson = ToGeoJson;
3965
- })(Geometry || (Geometry = {}));
3966
-
3967
4036
  var Bounds;
3968
4037
  (function (Bounds) {
3969
4038
  /**
@@ -7058,28 +7127,6 @@ var ProgramKey;
7058
7127
  ProgramKey.Update = Update;
7059
7128
  })(ProgramKey || (ProgramKey = {}));
7060
7129
 
7061
- /**
7062
- * Describes an expectation on what should be rendered for a menu item-
7063
- * between a min-max distance of an entity to the camera.
7064
- */
7065
- var ZoomControl;
7066
- (function (ZoomControl) {
7067
- /**
7068
- * Available display types for a menu item.
7069
- */
7070
- let EDisplayType;
7071
- (function (EDisplayType) {
7072
- // Hidden means it will not be rendered.
7073
- EDisplayType["Hidden"] = "hidden";
7074
- // Point will try render a point based on any available Entity data.
7075
- EDisplayType["Point"] = "point";
7076
- // Geometry means it will try render multi-geometry, polygon, polyline, or point in order of priority.
7077
- EDisplayType["Geometry"] = "geometry";
7078
- // 3D means it will try render 3D model, multi-geometry, polygon, polyline, or point in order of priority.
7079
- EDisplayType["Model3D"] = "3d";
7080
- })(EDisplayType = ZoomControl.EDisplayType || (ZoomControl.EDisplayType = {}));
7081
- })(ZoomControl || (ZoomControl = {}));
7082
-
7083
7130
  /**
7084
7131
  * Describes the "Tileset" concept in Nextspace.
7085
7132
  *
@@ -10778,7 +10825,7 @@ var DataSource;
10778
10825
  DataSource.GetList = GetList;
10779
10826
  })(DataSource || (DataSource = {}));
10780
10827
 
10781
- const VERSION = "3.4.3";
10828
+ const VERSION = "3.4.5";
10782
10829
 
10783
10830
  export { VERSION, AnnDocument, CustomForm, AbstractApi, Api, BruceApi, GlobalApi, GuardianApi, ApiGetters, Calculator, Bounds, BruceEvent, CacheControl, Camera, Cartes, Carto, Color, DelayQueue, Geometry, UTC, BruceVariable, LRUCache, EntityAttachmentType, EntityAttachment, EntityComment, EntityLink, EntityLod, EntityLodCategory, EntityRelationType, EntityRelation, EntitySource, EntityTag, EntityType, Entity, EntityCoords, EntityTypeVisualSettings, EntityAttribute, ClientFile, ProgramKey, ZoomControl, MenuItem, ProjectViewBookmark, ProjectView, ProjectViewLegacyTile, ProjectViewTile, ProjectViewLegacy, ProjectViewLegacyBookmark, PendingAction, MessageBroker, HostingLocation, Style, Tileset, Permission, Session, UserGroup, User, Account, AccountInvite, EncryptUtils, MathUtils, ObjectUtils, PathUtils, UrlUtils, DataLab, ImportCad, ImportCsv, ImportJson, ImportKml, ImportedFile, Markup, Uploader, Plugin, ENVIRONMENT, DataSource };
10784
10831
  //# sourceMappingURL=bruce-models.es5.js.map