@esri/hub-common 9.22.0 → 9.23.2

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.
@@ -1,5 +1,5 @@
1
1
  /* @preserve
2
- * @esri/hub-common - v9.21.2 - Tue Mar 01 2022 21:10:25 GMT+0000 (Coordinated Universal Time)
2
+ * @esri/hub-common - v9.23.1 - Fri Mar 18 2022 14:46:12 GMT+0000 (Coordinated Universal Time)
3
3
  * Copyright (c) 2022 Environmental Systems Research Institute, Inc.
4
4
  * Apache-2.0
5
5
  */
@@ -6067,6 +6067,70 @@
6067
6067
  })));
6068
6068
  }
6069
6069
 
6070
+ /* Copyright (c) 2017-2018 Environmental Systems Research Institute, Inc.
6071
+ * Apache-2.0 */
6072
+ /**
6073
+ * ```js
6074
+ * import { queryFeatures } from '@esri/arcgis-rest-feature-layer';
6075
+ * //
6076
+ * queryFeatures({
6077
+ * url: "http://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/3",
6078
+ * where: "STATE_NAME = 'Alaska'"
6079
+ * })
6080
+ * .then(result)
6081
+ * ```
6082
+ * Query a feature service. See [REST Documentation](https://developers.arcgis.com/rest/services-reference/query-feature-service-layer-.htm) for more information.
6083
+ *
6084
+ * @param requestOptions - Options for the request
6085
+ * @returns A Promise that will resolve with the query response.
6086
+ */
6087
+ function queryFeatures(requestOptions) {
6088
+ var queryOptions = appendCustomParams(requestOptions, [
6089
+ "where",
6090
+ "objectIds",
6091
+ "relationParam",
6092
+ "time",
6093
+ "distance",
6094
+ "units",
6095
+ "outFields",
6096
+ "geometry",
6097
+ "geometryType",
6098
+ "spatialRel",
6099
+ "returnGeometry",
6100
+ "maxAllowableOffset",
6101
+ "geometryPrecision",
6102
+ "inSR",
6103
+ "outSR",
6104
+ "gdbVersion",
6105
+ "returnDistinctValues",
6106
+ "returnIdsOnly",
6107
+ "returnCountOnly",
6108
+ "returnExtentOnly",
6109
+ "orderByFields",
6110
+ "groupByFieldsForStatistics",
6111
+ "outStatistics",
6112
+ "returnZ",
6113
+ "returnM",
6114
+ "multipatchOption",
6115
+ "resultOffset",
6116
+ "resultRecordCount",
6117
+ "quantizationParameters",
6118
+ "returnCentroid",
6119
+ "resultType",
6120
+ "historicMoment",
6121
+ "returnTrueCurves",
6122
+ "sqlFormat",
6123
+ "returnExceededLimitFeatures",
6124
+ "f"
6125
+ ], {
6126
+ httpMethod: "GET",
6127
+ params: __assign({
6128
+ // set default query parameters
6129
+ where: "1=1", outFields: "*" }, requestOptions.params)
6130
+ });
6131
+ return request(cleanUrl(requestOptions.url) + "/query", queryOptions);
6132
+ }
6133
+
6070
6134
  /* Copyright (c) 2017-2019 Environmental Systems Research Institute, Inc.
6071
6135
  * Apache-2.0 */
6072
6136
  var serviceRegex = new RegExp(/.+(?:map|feature|image)server/i);
@@ -6953,8 +7017,8 @@
6953
7017
 
6954
7018
  // helper fns - move this to _internal if needed elsewhere
6955
7019
  var getOnlyQueryLayer = function (layers) {
6956
- var layer = layers && layers.length === 1 && layers[0];
6957
- return layer && layer.capabilities.includes("Query") && layer;
7020
+ var layer = layers && layers.length === 1 ? layers[0] : undefined;
7021
+ return layer && layer.capabilities.includes("Query") ? layer : undefined;
6958
7022
  };
6959
7023
  var shouldUseLayerInfo = function (layer, layers, url) {
6960
7024
  return (layer &&
@@ -6963,6 +7027,13 @@
6963
7027
  // we use item info instead of layer info for single layer items
6964
7028
  !getLayerIdFromUrl(url));
6965
7029
  };
7030
+ // this logic adapted from hub-indexer's determineName(), see
7031
+ // https://github.com/ArcGIS/hub-indexer/blob/8f4dd6f928124c1f35dd02bc11bd996191ee1160/packages/duke/compose/common.js#L7-L34
7032
+ var getContentName = function (item, layer, layers) {
7033
+ return ((shouldUseLayerInfo(layer, layers, item.url)
7034
+ ? layer.name
7035
+ : item.title || item.name) || "").replace(/_/g, " ");
7036
+ };
6966
7037
  /**
6967
7038
  * The possible values for updateFrequency
6968
7039
  *
@@ -7315,6 +7386,38 @@
7315
7386
  var flattened = parsed.reduce(function (acc, arr, _) { return __spreadArrays(acc, arr); }, []);
7316
7387
  return flattened.filter(function (cat) { return !includes(exclude, cat.toLowerCase()); });
7317
7388
  }
7389
+ /**
7390
+ * get the layer object for
7391
+ * - an item that refers to a specific layer of a service
7392
+ * - a multi-layer services (if a layer id was passed in)
7393
+ * - a single layer feature service
7394
+ * @param item
7395
+ * @param layers the layers and tables returned from the service
7396
+ * @param layerId a specific id
7397
+ * @returns layer definition
7398
+ * @private
7399
+ */
7400
+ var getItemLayer = function (item, layers, layerId) {
7401
+ // if item refers to a layer we always want to use that layer id
7402
+ // otherwise use the layer id that was passed in (if any)
7403
+ var _layerIdFromUrl = getLayerIdFromUrl(item.url);
7404
+ var _layerId = _layerIdFromUrl ? parseInt(_layerIdFromUrl, 10) : layerId;
7405
+ return (layers &&
7406
+ (!isNil(_layerId)
7407
+ ? // find the explicitly set layer id
7408
+ layers.find(function (_layer) { return _layer.id === _layerId; })
7409
+ : // for feature servers with a single layer always show the layer
7410
+ isFeatureService(item.type) && getOnlyQueryLayer(layers)));
7411
+ };
7412
+ /**
7413
+ * determine if a layer is a layer view
7414
+ * @param layer
7415
+ * @returns
7416
+ * @private
7417
+ */
7418
+ var isLayerView = function (layer) {
7419
+ return layer.isView;
7420
+ };
7318
7421
  /**
7319
7422
  * Compose a new content object out of an item, enrichments, and context
7320
7423
  * @param item
@@ -7325,18 +7428,7 @@
7325
7428
  // extract enrichments and context out of the options
7326
7429
  var _a = options || {}, slug = _a.slug, requestOptions = _a.requestOptions, data = _a.data, metadata = _a.metadata, groupIds = _a.groupIds, ownerUser = _a.ownerUser, org = _a.org, errors = _a.errors, server = _a.server, layers = _a.layers, recordCount = _a.recordCount, boundary = _a.boundary, extent = _a.extent, searchDescription = _a.searchDescription, statistics = _a.statistics;
7327
7430
  // set common variables that we will use in the derived properties below
7328
- // if item refers to a layer we always want to use that layer id
7329
- // otherwise use the layer id that was passed in (if any)
7330
- var _layerIdFromUrl = getLayerIdFromUrl(item.url);
7331
- var layerId = _layerIdFromUrl
7332
- ? parseInt(_layerIdFromUrl, 10)
7333
- : options === null || options === void 0 ? void 0 : options.layerId;
7334
- var layer = layers &&
7335
- (!isNil(layerId)
7336
- ? // find the explicitly set layer id
7337
- layers.find(function (_layer) { return _layer.id === layerId; })
7338
- : // for feature servers with a single layer always show the layer
7339
- isFeatureService(item.type) && getOnlyQueryLayer(layers));
7431
+ var layer = getItemLayer(item, layers, options === null || options === void 0 ? void 0 : options.layerId);
7340
7432
  // NOTE: we only set hubId for public items in online
7341
7433
  var hubId = canUseHubApiForItem(item, requestOptions)
7342
7434
  ? layer
@@ -7345,9 +7437,8 @@
7345
7437
  : undefined;
7346
7438
  var identifier = slug || hubId || item.id;
7347
7439
  // whether or not we should show layer info for name, description, etc
7348
- var _shouldUseLayerInfo = shouldUseLayerInfo(layer, layers, item.url);
7349
- var name = _shouldUseLayerInfo ? layer.name : item.title;
7350
- var _layerDescription = _shouldUseLayerInfo && layer.description;
7440
+ var name = getContentName(item, layer, layers);
7441
+ var _layerDescription = shouldUseLayerInfo(layer, layers, item.url) && layer.description;
7351
7442
  // so much depends on type
7352
7443
  var type = layer
7353
7444
  ? // use layer type (Feature Layer, Table, etc) for layer content
@@ -7402,7 +7493,7 @@
7402
7493
  }, get url() {
7403
7494
  return _proxyUrl
7404
7495
  ? _proxyUrl
7405
- : _shouldUseLayerInfo
7496
+ : layer
7406
7497
  ? parseServiceUrl(item.url) + "/" + layer.id
7407
7498
  : item.url;
7408
7499
  }, get categories() {
@@ -7518,7 +7609,17 @@
7518
7609
  return (getItemSpatialReference(item) ||
7519
7610
  getServerSpatialReference(server, layer) ||
7520
7611
  null);
7521
- }, get orgId() {
7612
+ }, get viewDefinition() {
7613
+ // if this is a layer view and we have the item data
7614
+ // find the definition that corresponds to the current layer
7615
+ var dataLayer = layer &&
7616
+ isLayerView(layer) &&
7617
+ data &&
7618
+ Array.isArray(data.layers) &&
7619
+ data.layers.find(function (_layer) { return _layer.id === layer.id; });
7620
+ return dataLayer ? dataLayer.layerDefinition : undefined;
7621
+ },
7622
+ get orgId() {
7522
7623
  // NOTE: it's undocumented, but the portal API will return orgId for items... sometimes
7523
7624
  return org ? org.id : item.orgId || (ownerUser === null || ownerUser === void 0 ? void 0 : ownerUser.orgId);
7524
7625
  },
@@ -8862,6 +8963,34 @@
8862
8963
  });
8863
8964
  }); };
8864
8965
 
8966
+ var maybeFetchLayerEnrichments = function (itemAndEnrichments, options) { return __awaiter(void 0, void 0, void 0, function () {
8967
+ var item, data, layers, layer, layerEnrichments, _a;
8968
+ return __generator(this, function (_b) {
8969
+ switch (_b.label) {
8970
+ case 0:
8971
+ item = itemAndEnrichments.item, data = itemAndEnrichments.data, layers = itemAndEnrichments.layers;
8972
+ layer = layers && getItemLayer(item, layers, options && options.layerId);
8973
+ if (!(layer && isLayerView(layer) && !data)) return [3 /*break*/, 2];
8974
+ // to store (at least part of) it's view definition in item data
8975
+ // it seems that most do not, but until we have a reliable signal
8976
+ // we just fetch the item data for all layer views
8977
+ return [4 /*yield*/, fetchItemEnrichments(item, ["data"], options)];
8978
+ case 1:
8979
+ // to store (at least part of) it's view definition in item data
8980
+ // it seems that most do not, but until we have a reliable signal
8981
+ // we just fetch the item data for all layer views
8982
+ _a = _b.sent();
8983
+ return [3 /*break*/, 3];
8984
+ case 2:
8985
+ _a = undefined;
8986
+ _b.label = 3;
8987
+ case 3:
8988
+ layerEnrichments = _a;
8989
+ // TODO: merge errors
8990
+ return [2 /*return*/, __assign(__assign({}, itemAndEnrichments), layerEnrichments)];
8991
+ }
8992
+ });
8993
+ }); };
8865
8994
  var fetchItemAndEnrichments = function (itemId, options) { return __awaiter(void 0, void 0, void 0, function () {
8866
8995
  var item, enrichmentsToFetch, enrichments;
8867
8996
  return __generator(this, function (_a) {
@@ -8873,7 +9002,7 @@
8873
9002
  return [4 /*yield*/, fetchItemEnrichments(item, enrichmentsToFetch, options)];
8874
9003
  case 2:
8875
9004
  enrichments = _a.sent();
8876
- return [2 /*return*/, __assign(__assign({}, enrichments), { item: item })];
9005
+ return [2 /*return*/, maybeFetchLayerEnrichments(__assign(__assign({}, enrichments), { item: item }), options)];
8877
9006
  }
8878
9007
  });
8879
9008
  }); };
@@ -8886,7 +9015,7 @@
8886
9015
  return [4 /*yield*/, fetchItemAndEnrichments(itemId, options)];
8887
9016
  case 1:
8888
9017
  _a = _d.sent(), item = _a.item, itemEnrichments = __rest(_a, ["item"]);
8889
- specifiedLayerId = options && !isNil(options.layerId) && options.layerId;
9018
+ specifiedLayerId = options && options.layerId;
8890
9019
  if (!canUseHubApiForItem(item, options)) return [3 /*break*/, 3];
8891
9020
  return [4 /*yield*/, fetchHubEnrichmentsById(hubId, options)];
8892
9021
  case 2:
@@ -8898,7 +9027,7 @@
8898
9027
  case 4:
8899
9028
  _b = _c, slug = _b.slug, layerId = _b.layerId, boundary = _b.boundary, extent = _b.extent, searchDescription = _b.searchDescription, statistics = _b.statistics;
8900
9029
  // return a new content object composed from the item and enrichments we fetched
8901
- return [2 /*return*/, composeContent(item, __assign(__assign({ requestOptions: options }, itemEnrichments), { slug: slug, layerId: specifiedLayerId || layerId, boundary: boundary,
9030
+ return [2 /*return*/, composeContent(item, __assign(__assign({ requestOptions: options }, itemEnrichments), { slug: slug, layerId: isNil(specifiedLayerId) ? layerId : specifiedLayerId, boundary: boundary,
8902
9031
  extent: extent,
8903
9032
  searchDescription: searchDescription,
8904
9033
  statistics: statistics }))];
@@ -8917,8 +9046,8 @@
8917
9046
  return [4 /*yield*/, fetchItemAndEnrichments(itemId, options)];
8918
9047
  case 2:
8919
9048
  _a = _b.sent(), item = _a.item, itemEnrichments = __rest(_a, ["item"]);
8920
- specifiedLayerId = options && !isNil(options.layerId) && options.layerId;
8921
- if (!(specifiedLayerId && specifiedLayerId !== layerId)) return [3 /*break*/, 4];
9049
+ specifiedLayerId = options && options.layerId;
9050
+ if (!(!isNil(specifiedLayerId) && specifiedLayerId !== layerId)) return [3 /*break*/, 4];
8922
9051
  // we fetched Hub enrichments by slug for another dataset,
8923
9052
  // most likely for the parent service of this layer,
8924
9053
  // we need to fetch them for the specified layer instead
@@ -8939,6 +9068,24 @@
8939
9068
  }
8940
9069
  });
8941
9070
  }); };
9071
+ var fetchContentRecordCount = function (content) { return __awaiter(void 0, void 0, void 0, function () {
9072
+ var url, viewDefinition, where, response;
9073
+ return __generator(this, function (_a) {
9074
+ switch (_a.label) {
9075
+ case 0:
9076
+ url = content.url, viewDefinition = content.viewDefinition;
9077
+ where = viewDefinition === null || viewDefinition === void 0 ? void 0 : viewDefinition.definitionExpression;
9078
+ return [4 /*yield*/, queryFeatures({
9079
+ url: url,
9080
+ where: where,
9081
+ returnCountOnly: true,
9082
+ })];
9083
+ case 1:
9084
+ response = _a.sent();
9085
+ return [2 /*return*/, response.count];
9086
+ }
9087
+ });
9088
+ }); };
8942
9089
  /**
8943
9090
  * Fetch enriched content from the Portal and Hub APIs.
8944
9091
  * @param identifier content slug or id
@@ -8951,11 +9098,38 @@
8951
9098
  * const content = await fetchContent('my-org::item-name')
8952
9099
  * ```
8953
9100
  */
8954
- var fetchContent = function (identifier, options) {
8955
- return isSlug(identifier)
8956
- ? fetchContentBySlug(addContextToSlug(identifier, options === null || options === void 0 ? void 0 : options.siteOrgKey), options)
8957
- : fetchContentById(identifier, options);
8958
- };
9101
+ var fetchContent = function (identifier, options) { return __awaiter(void 0, void 0, void 0, function () {
9102
+ var content, _a, isProxied, layer, _b, _c;
9103
+ return __generator(this, function (_d) {
9104
+ switch (_d.label) {
9105
+ case 0:
9106
+ if (!isSlug(identifier)) return [3 /*break*/, 2];
9107
+ return [4 /*yield*/, fetchContentBySlug(addContextToSlug(identifier, options === null || options === void 0 ? void 0 : options.siteOrgKey), options)];
9108
+ case 1:
9109
+ _a = _d.sent();
9110
+ return [3 /*break*/, 4];
9111
+ case 2: return [4 /*yield*/, fetchContentById(identifier, options)];
9112
+ case 3:
9113
+ _a = _d.sent();
9114
+ _d.label = 4;
9115
+ case 4:
9116
+ content = _a;
9117
+ isProxied = content.isProxied, layer = content.layer;
9118
+ _b = content;
9119
+ if (!(isProxied || !!layer)) return [3 /*break*/, 6];
9120
+ return [4 /*yield*/, fetchContentRecordCount(content)];
9121
+ case 5:
9122
+ _c = _d.sent();
9123
+ return [3 /*break*/, 7];
9124
+ case 6:
9125
+ _c = undefined;
9126
+ _d.label = 7;
9127
+ case 7:
9128
+ _b.recordCount = _c;
9129
+ return [2 /*return*/, content];
9130
+ }
9131
+ });
9132
+ }); };
8959
9133
 
8960
9134
  // TODO: remove this at next breaking version
8961
9135
  /**
@@ -14481,6 +14655,7 @@
14481
14655
  exports.getItemHomeUrl = getItemHomeUrl;
14482
14656
  exports.getItemHubId = getItemHubId;
14483
14657
  exports.getItemHubType = getItemHubType;
14658
+ exports.getItemLayer = getItemLayer;
14484
14659
  exports.getItemLayerId = getItemLayerId;
14485
14660
  exports.getItemThumbnailUrl = getItemThumbnailUrl;
14486
14661
  exports.getLayerIdFromUrl = getLayerIdFromUrl;
@@ -14529,6 +14704,7 @@
14529
14704
  exports.isFeatureService = isFeatureService;
14530
14705
  exports.isFieldworkerView = isFieldworkerView;
14531
14706
  exports.isGuid = isGuid;
14707
+ exports.isLayerView = isLayerView;
14532
14708
  exports.isMapOrFeatureServerUrl = isMapOrFeatureServerUrl;
14533
14709
  exports.isNil = isNil;
14534
14710
  exports.isSlug = isSlug;