@esri/hub-common 9.20.0 → 9.21.0

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.
Files changed (53) hide show
  1. package/dist/es2017/content/_internal.js +70 -0
  2. package/dist/es2017/content/_internal.js.map +1 -1
  3. package/dist/es2017/content/compose.js +4 -1
  4. package/dist/es2017/content/compose.js.map +1 -1
  5. package/dist/es2017/content/index.js.map +1 -1
  6. package/dist/es2017/core/types/IHubAdditionalResource.js +1 -0
  7. package/dist/es2017/core/types/IHubAdditionalResource.js.map +1 -0
  8. package/dist/es2017/projects/HubProjects.js +15 -16
  9. package/dist/es2017/projects/HubProjects.js.map +1 -1
  10. package/dist/es2017/search/_searchContent.js +18 -20
  11. package/dist/es2017/search/_searchContent.js.map +1 -1
  12. package/dist/es2017/search/_searchGroups.js +18 -19
  13. package/dist/es2017/search/_searchGroups.js.map +1 -1
  14. package/dist/es2017/search/_searchUsers.js +16 -16
  15. package/dist/es2017/search/_searchUsers.js.map +1 -1
  16. package/dist/esm/content/_internal.js +70 -0
  17. package/dist/esm/content/_internal.js.map +1 -1
  18. package/dist/esm/content/compose.js +4 -1
  19. package/dist/esm/content/compose.js.map +1 -1
  20. package/dist/esm/content/index.js.map +1 -1
  21. package/dist/esm/core/types/IHubAdditionalResource.js +1 -0
  22. package/dist/esm/core/types/IHubAdditionalResource.js.map +1 -0
  23. package/dist/esm/projects/HubProjects.js +14 -17
  24. package/dist/esm/projects/HubProjects.js.map +1 -1
  25. package/dist/esm/search/_searchContent.js +22 -26
  26. package/dist/esm/search/_searchContent.js.map +1 -1
  27. package/dist/esm/search/_searchGroups.js +20 -23
  28. package/dist/esm/search/_searchGroups.js.map +1 -1
  29. package/dist/esm/search/_searchUsers.js +17 -19
  30. package/dist/esm/search/_searchUsers.js.map +1 -1
  31. package/dist/node/content/_internal.js +71 -1
  32. package/dist/node/content/_internal.js.map +1 -1
  33. package/dist/node/content/compose.js +3 -0
  34. package/dist/node/content/compose.js.map +1 -1
  35. package/dist/node/content/index.js.map +1 -1
  36. package/dist/node/core/types/IHubAdditionalResource.js +3 -0
  37. package/dist/node/core/types/IHubAdditionalResource.js.map +1 -0
  38. package/dist/node/projects/HubProjects.js +15 -16
  39. package/dist/node/projects/HubProjects.js.map +1 -1
  40. package/dist/node/search/_searchContent.js +17 -19
  41. package/dist/node/search/_searchContent.js.map +1 -1
  42. package/dist/node/search/_searchGroups.js +17 -18
  43. package/dist/node/search/_searchGroups.js.map +1 -1
  44. package/dist/node/search/_searchUsers.js +15 -15
  45. package/dist/node/search/_searchUsers.js.map +1 -1
  46. package/dist/types/content/_internal.d.ts +44 -0
  47. package/dist/types/core/types/IHubAdditionalResource.d.ts +10 -0
  48. package/dist/types/core/types/IHubContent.d.ts +5 -1
  49. package/dist/umd/common.umd.js +149 -99
  50. package/dist/umd/common.umd.js.map +1 -1
  51. package/dist/umd/common.umd.min.js +1 -1
  52. package/dist/umd/common.umd.min.js.map +1 -1
  53. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  /* @preserve
2
- * @esri/hub-common - v9.19.0 - Fri Feb 25 2022 14:52:42 GMT+0000 (Coordinated Universal Time)
2
+ * @esri/hub-common - v9.20.0 - Mon Feb 28 2022 15:56:25 GMT+0000 (Coordinated Universal Time)
3
3
  * Copyright (c) 2022 Environmental Systems Research Institute, Inc.
4
4
  * Apache-2.0
5
5
  */
@@ -5963,6 +5963,26 @@
5963
5963
  })));
5964
5964
  }
5965
5965
 
5966
+ /* Copyright (c) 2017-2019 Environmental Systems Research Institute, Inc.
5967
+ * Apache-2.0 */
5968
+ var serviceRegex = new RegExp(/.+(?:map|feature|image)server/i);
5969
+ /**
5970
+ * Return the service url. If not matched, returns what was passed in
5971
+ */
5972
+ function parseServiceUrl(url) {
5973
+ var match = url.match(serviceRegex);
5974
+ if (match) {
5975
+ return match[0];
5976
+ }
5977
+ else {
5978
+ return stripQueryString(url);
5979
+ }
5980
+ }
5981
+ function stripQueryString(url) {
5982
+ var stripped = url.split('?')[0];
5983
+ return cleanUrl(stripped);
5984
+ }
5985
+
5966
5986
  function createExtent(xmin, ymin, xmax, ymax, wkid) {
5967
5987
  if (wkid === void 0) { wkid = 4326; }
5968
5988
  return {
@@ -6330,26 +6350,65 @@
6330
6350
  : //
6331
6351
  { wkid: wkid };
6332
6352
  };
6333
-
6334
- /* Copyright (c) 2017-2019 Environmental Systems Research Institute, Inc.
6335
- * Apache-2.0 */
6336
- var serviceRegex = new RegExp(/.+(?:map|feature|image)server/i);
6337
6353
  /**
6338
- * Return the service url. If not matched, returns what was passed in
6354
+ * Extracts additional resources from the provided metadata
6355
+ * and transforms them into a hub-friendly format.
6356
+ *
6357
+ * Returns null if no resources are available
6358
+ *
6359
+ * @param item
6360
+ * @param metadata formal metadata
6361
+ * @returns
6339
6362
  */
6340
- function parseServiceUrl(url) {
6341
- var match = url.match(serviceRegex);
6342
- if (match) {
6343
- return match[0];
6363
+ var getAdditionalResources = function (item, metadata, requestOptions) {
6364
+ var rawResources = getProp(metadata, "metadata.distInfo.distTranOps.onLineSrc") || null;
6365
+ if (rawResources === null) {
6366
+ return null;
6344
6367
  }
6345
- else {
6346
- return stripQueryString(url);
6368
+ // Coerce to array since rawResources will be an object if only 1 resource is available
6369
+ rawResources = Array.isArray(rawResources) ? rawResources : [rawResources];
6370
+ return rawResources.map(function (resource) { return ({
6371
+ name: resource.orName,
6372
+ url: getAdditionalResourceUrl(resource, item, requestOptions),
6373
+ isDataSource: isDataSourceOfItem(resource, item),
6374
+ }); });
6375
+ };
6376
+ /**
6377
+ * Determines whether a raw additional resource (i.e. extracted out of formal
6378
+ * metadata with no transformation) references the underlying service that backs
6379
+ * the item.
6380
+ *
6381
+ * @param resource raw additional resource of an item
6382
+ * @param item
6383
+ * @returns
6384
+ */
6385
+ var isDataSourceOfItem = function (resource, item) {
6386
+ var serviceUrl = item.url && parseServiceUrl(item.url);
6387
+ return serviceUrl && resource.linkage.includes(serviceUrl);
6388
+ };
6389
+ /**
6390
+ * Returns the url for an additional resource.
6391
+ *
6392
+ * Automatically appends auth token if token is available
6393
+ * and resource points to the backing service of an item.
6394
+ *
6395
+ * @param resource raw additional resource of an item
6396
+ * @param item
6397
+ * @param requestOptions IHubRequestOptions, including authentication
6398
+ * @returns
6399
+ */
6400
+ var getAdditionalResourceUrl = function (resource, item, requestOptions) {
6401
+ var result = resource.linkage;
6402
+ var token = getProp(requestOptions, "authentication.token");
6403
+ if (token && isDataSourceOfItem(resource, item)) {
6404
+ var resUrl = new URL(resource.linkage);
6405
+ var params = new URLSearchParams(resUrl.search);
6406
+ params.set("token", token);
6407
+ resUrl.search = params.toString();
6408
+ result = resUrl.toString();
6347
6409
  }
6348
- }
6349
- function stripQueryString(url) {
6350
- var stripped = url.split('?')[0];
6351
- return cleanUrl(stripped);
6352
- }
6410
+ return result;
6411
+ };
6353
6412
 
6354
6413
  var STANDARD_LICENSES = [
6355
6414
  {
@@ -7259,6 +7318,9 @@
7259
7318
  console.warn("DEPRECATED: use family instead");
7260
7319
  /* tslint:enable no-console */
7261
7320
  return getFamily(type);
7321
+ },
7322
+ get additionalResources() {
7323
+ return getAdditionalResources(item, metadata);
7262
7324
  } });
7263
7325
  };
7264
7326
 
@@ -9927,7 +9989,7 @@
9927
9989
  function searchProjects(filter, options) {
9928
9990
  var _a;
9929
9991
  return __awaiter(this, void 0, void 0, function () {
9930
- var scopingFilter, projectFilter, expanded, so;
9992
+ var scopingFilter, projectFilter, expanded, so, props;
9931
9993
  return __generator(this, function (_b) {
9932
9994
  scopingFilter = {
9933
9995
  filterType: "content",
@@ -9943,22 +10005,19 @@
9943
10005
  so.countFields = options.aggregations.join(",");
9944
10006
  so.countSize = 200;
9945
10007
  }
9946
- // copy over various options
9947
- if (options.num) {
9948
- so.num = options.num;
9949
- }
9950
- if (options.sortField) {
9951
- so.sortField = options.sortField;
9952
- }
9953
- if (options.sortOrder) {
9954
- so.sortOrder = options.sortOrder;
9955
- }
9956
- if (options.site) {
9957
- so.site = cloneObject$1(options.site);
9958
- }
9959
- if (options.authentication) {
9960
- so.authentication = options.authentication;
9961
- }
10008
+ props = [
10009
+ "authentication",
10010
+ "num",
10011
+ "sortField",
10012
+ "sortOrder",
10013
+ "site",
10014
+ ];
10015
+ // copy the props over
10016
+ props.forEach(function (prop) {
10017
+ if (options.hasOwnProperty(prop)) {
10018
+ so[prop] = options[prop];
10019
+ }
10020
+ });
9962
10021
  return [2 /*return*/, searchPortalProjects(so)];
9963
10022
  });
9964
10023
  });
@@ -11603,40 +11662,36 @@
11603
11662
  function _searchContent(filter, options) {
11604
11663
  var _a;
11605
11664
  return __awaiter(this, void 0, void 0, function () {
11606
- var expanded, api, searchPromise, so;
11665
+ var expanded, api, searchPromise, so_1, props;
11607
11666
  return __generator(this, function (_b) {
11608
11667
  expanded = expandContentFilter(filter);
11609
11668
  api = expandApi(options.api || "arcgis");
11610
11669
  // Portal Search
11611
11670
  if (api.type === "arcgis") {
11612
- so = serializeContentFilterForPortal(expanded);
11613
- // if we have auth, pass it forward
11614
- // otherwise set the portal property
11615
- if (options.authentication) {
11616
- so.authentication = options.authentication;
11617
- }
11618
- else {
11619
- so.portal = api.url + "/sharing/rest";
11671
+ so_1 = serializeContentFilterForPortal(expanded);
11672
+ props = [
11673
+ "authentication",
11674
+ "num",
11675
+ "sortField",
11676
+ "sortOrder",
11677
+ "site",
11678
+ ];
11679
+ // copy the props over
11680
+ props.forEach(function (prop) {
11681
+ if (options.hasOwnProperty(prop)) {
11682
+ so_1[prop] = options[prop];
11683
+ }
11684
+ });
11685
+ // If we don't have auth, ensure we have .portal
11686
+ if (!so_1.authentication) {
11687
+ so_1.portal = api.url + "/sharing/rest";
11620
11688
  }
11621
11689
  // Aggregations
11622
11690
  if ((_a = options.aggregations) === null || _a === void 0 ? void 0 : _a.length) {
11623
- so.countFields = options.aggregations.join(",");
11624
- so.countSize = 200;
11625
- }
11626
- // copy over various options
11627
- if (options.num) {
11628
- so.num = options.num;
11629
- }
11630
- if (options.sortField) {
11631
- so.sortField = options.sortField;
11632
- }
11633
- if (options.sortOrder) {
11634
- so.sortOrder = options.sortOrder;
11691
+ so_1.countFields = options.aggregations.join(",");
11692
+ so_1.countSize = 200;
11635
11693
  }
11636
- if (options.site) {
11637
- so.site = cloneObject$1(options.site);
11638
- }
11639
- searchPromise = searchPortal(so);
11694
+ searchPromise = searchPortal(so_1);
11640
11695
  }
11641
11696
  else {
11642
11697
  // Hub API Search
@@ -11708,33 +11763,30 @@
11708
11763
  */
11709
11764
  function _searchGroups(filter, options) {
11710
11765
  return __awaiter(this, void 0, void 0, function () {
11711
- var expanded, api, so;
11766
+ var expanded, api, so_1, props;
11712
11767
  return __generator(this, function (_a) {
11713
11768
  expanded = expandGroupFilter(filter);
11714
11769
  api = expandApi(options.api || "arcgis");
11715
11770
  if (api.type === "arcgis") {
11716
- so = serializeGroupFilterForPortal(expanded);
11717
- // if we have auth, pass it forward
11718
- // otherwise set the portal property
11719
- if (options.authentication) {
11720
- so.authentication = options.authentication;
11721
- }
11722
- else {
11723
- so.portal = api.url + "/sharing/rest";
11724
- }
11725
- if (options.num) {
11726
- so.num = options.num;
11727
- }
11728
- if (options.sortField) {
11729
- so.sortField = options.sortField;
11730
- }
11731
- if (options.sortOrder) {
11732
- so.sortOrder = options.sortOrder;
11733
- }
11734
- if (options.site) {
11735
- so.site = cloneObject$1(options.site);
11771
+ so_1 = serializeGroupFilterForPortal(expanded);
11772
+ props = [
11773
+ "authentication",
11774
+ "num",
11775
+ "sortField",
11776
+ "sortOrder",
11777
+ "site",
11778
+ ];
11779
+ // copy the props over
11780
+ props.forEach(function (prop) {
11781
+ if (options.hasOwnProperty(prop)) {
11782
+ so_1[prop] = options[prop];
11783
+ }
11784
+ });
11785
+ // If we don't have auth, ensure we have .portal
11786
+ if (!so_1.authentication) {
11787
+ so_1.portal = api.url + "/sharing/rest";
11736
11788
  }
11737
- return [2 /*return*/, searchPortalGroups(so)];
11789
+ return [2 /*return*/, searchPortalGroups(so_1)];
11738
11790
  }
11739
11791
  else {
11740
11792
  throw new Error("_searchGroups is not implemented for non-arcgis apis");
@@ -11795,7 +11847,7 @@
11795
11847
  */
11796
11848
  function _searchUsers(filter, options) {
11797
11849
  return __awaiter(this, void 0, void 0, function () {
11798
- var expanded, api, searchOptions;
11850
+ var expanded, api, searchOptions_1, props;
11799
11851
  return __generator(this, function (_a) {
11800
11852
  // JS Clients may not pass in authentication
11801
11853
  if (!options.authentication) {
@@ -11804,23 +11856,21 @@
11804
11856
  expanded = expandUserFilter(filter);
11805
11857
  api = expandApi(options.api || "arcgis");
11806
11858
  if (api.type === "arcgis") {
11807
- searchOptions = serializeUserFilterForPortal(expanded);
11808
- // carry the auth forward
11809
- searchOptions.authentication = options.authentication;
11810
- // TODO: Dry this up - typscript makes this... inconvenient
11811
- if (options.num) {
11812
- searchOptions.num = options.num;
11813
- }
11814
- if (options.sortField) {
11815
- searchOptions.sortField = options.sortField;
11816
- }
11817
- if (options.sortOrder) {
11818
- searchOptions.sortOrder = options.sortOrder;
11819
- }
11820
- if (options.site) {
11821
- searchOptions.site = cloneObject$1(options.site);
11822
- }
11823
- return [2 /*return*/, searchPortalUsers(searchOptions)];
11859
+ searchOptions_1 = serializeUserFilterForPortal(expanded);
11860
+ props = [
11861
+ "authentication",
11862
+ "num",
11863
+ "sortField",
11864
+ "sortOrder",
11865
+ "site",
11866
+ ];
11867
+ // copy the props over
11868
+ props.forEach(function (prop) {
11869
+ if (options.hasOwnProperty(prop)) {
11870
+ searchOptions_1[prop] = options[prop];
11871
+ }
11872
+ });
11873
+ return [2 /*return*/, searchPortalUsers(searchOptions_1)];
11824
11874
  }
11825
11875
  else {
11826
11876
  throw new Error("_searchUsers is not implemented for non-arcgis apis");