@esri/hub-common 9.21.2 → 9.22.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 (61) hide show
  1. package/dist/es2017/content/_fetch.js +87 -0
  2. package/dist/es2017/content/_fetch.js.map +1 -0
  3. package/dist/es2017/content/_internal.js +75 -3
  4. package/dist/es2017/content/_internal.js.map +1 -1
  5. package/dist/es2017/content/compose.js +18 -10
  6. package/dist/es2017/content/compose.js.map +1 -1
  7. package/dist/es2017/content/fetch.js +78 -0
  8. package/dist/es2017/content/fetch.js.map +1 -0
  9. package/dist/es2017/content/index.js +9 -80
  10. package/dist/es2017/content/index.js.map +1 -1
  11. package/dist/es2017/content/slugs.js +63 -0
  12. package/dist/es2017/content/slugs.js.map +1 -0
  13. package/dist/es2017/content/types.js +1 -0
  14. package/dist/es2017/content/types.js.map +1 -0
  15. package/dist/es2017/items/_enrichments.js +176 -0
  16. package/dist/es2017/items/_enrichments.js.map +1 -0
  17. package/dist/esm/content/_fetch.js +102 -0
  18. package/dist/esm/content/_fetch.js.map +1 -0
  19. package/dist/esm/content/_internal.js +75 -3
  20. package/dist/esm/content/_internal.js.map +1 -1
  21. package/dist/esm/content/compose.js +18 -10
  22. package/dist/esm/content/compose.js.map +1 -1
  23. package/dist/esm/content/fetch.js +103 -0
  24. package/dist/esm/content/fetch.js.map +1 -0
  25. package/dist/esm/content/index.js +9 -80
  26. package/dist/esm/content/index.js.map +1 -1
  27. package/dist/esm/content/slugs.js +63 -0
  28. package/dist/esm/content/slugs.js.map +1 -0
  29. package/dist/esm/content/types.js +1 -0
  30. package/dist/esm/content/types.js.map +1 -0
  31. package/dist/esm/items/_enrichments.js +177 -0
  32. package/dist/esm/items/_enrichments.js.map +1 -0
  33. package/dist/node/content/_fetch.js +90 -0
  34. package/dist/node/content/_fetch.js.map +1 -0
  35. package/dist/node/content/_internal.js +76 -4
  36. package/dist/node/content/_internal.js.map +1 -1
  37. package/dist/node/content/compose.js +17 -9
  38. package/dist/node/content/compose.js.map +1 -1
  39. package/dist/node/content/fetch.js +81 -0
  40. package/dist/node/content/fetch.js.map +1 -0
  41. package/dist/node/content/index.js +11 -86
  42. package/dist/node/content/index.js.map +1 -1
  43. package/dist/node/content/slugs.js +70 -0
  44. package/dist/node/content/slugs.js.map +1 -0
  45. package/dist/node/content/types.js +3 -0
  46. package/dist/node/content/types.js.map +1 -0
  47. package/dist/node/items/_enrichments.js +179 -0
  48. package/dist/node/items/_enrichments.js.map +1 -0
  49. package/dist/types/content/_fetch.d.ts +61 -0
  50. package/dist/types/content/_internal.d.ts +76 -0
  51. package/dist/types/content/compose.d.ts +11 -0
  52. package/dist/types/content/fetch.d.ts +23 -0
  53. package/dist/types/content/index.d.ts +4 -41
  54. package/dist/types/content/slugs.d.ts +34 -0
  55. package/dist/types/content/types.d.ts +7 -0
  56. package/dist/types/items/_enrichments.d.ts +24 -0
  57. package/dist/umd/common.umd.js +2082 -850
  58. package/dist/umd/common.umd.js.map +1 -1
  59. package/dist/umd/common.umd.min.js +1 -1
  60. package/dist/umd/common.umd.min.js.map +1 -1
  61. package/package.json +2 -1
@@ -1,5 +1,5 @@
1
1
  /* @preserve
2
- * @esri/hub-common - v9.21.1 - Mon Feb 28 2022 23:32:15 GMT+0000 (Coordinated Universal Time)
2
+ * @esri/hub-common - v9.21.2 - Tue Mar 01 2022 21:10:25 GMT+0000 (Coordinated Universal Time)
3
3
  * Copyright (c) 2022 Environmental Systems Research Institute, Inc.
4
4
  * Apache-2.0
5
5
  */
@@ -860,6 +860,18 @@
860
860
  return __assign.apply(this, arguments);
861
861
  };
862
862
 
863
+ function __rest(s, e) {
864
+ var t = {};
865
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
866
+ t[p] = s[p];
867
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
868
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
869
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
870
+ t[p[i]] = s[p[i]];
871
+ }
872
+ return t;
873
+ }
874
+
863
875
  function __awaiter(thisArg, _arguments, P, generator) {
864
876
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
865
877
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -3350,6 +3362,19 @@
3350
3362
  return createItemInFolder(options);
3351
3363
  }
3352
3364
 
3365
+ // eslint-disable-next-line no-control-regex
3366
+ var CONTROL_CHAR_MATCHER = /[\x00-\x1F\x7F-\x9F\xA0]/g;
3367
+ /**
3368
+ * Returns a new string with all control characters removed.
3369
+ *
3370
+ * Doesn't remove characters from input string.
3371
+ *
3372
+ * @param str - the string to scrub
3373
+ */
3374
+ function scrubControlChars(str) {
3375
+ return str.replace(CONTROL_CHAR_MATCHER, "");
3376
+ }
3377
+
3353
3378
  /* Copyright (c) 2018 Environmental Systems Research Institute, Inc.
3354
3379
  * Apache-2.0 */
3355
3380
  /**
@@ -3466,6 +3491,85 @@
3466
3491
  options.params = __assign({ num: 1000 }, options.params);
3467
3492
  return request(url, options);
3468
3493
  }
3494
+ /**
3495
+ * ```js
3496
+ * import { getItemGroups } from "@esri/arcgis-rest-portal";
3497
+ * //
3498
+ * getItemGroups("30e5fe3149c34df1ba922e6f5bbf808f")
3499
+ * .then(response)
3500
+ * ```
3501
+ * Lists the groups of which the item is a part, only showing the groups that the calling user can access. See the [REST Documentation](https://developers.arcgis.com/rest/users-groups-and-items/groups.htm) for more information.
3502
+ *
3503
+ * @param id - The Id of the item to query group association for.
3504
+ * @param requestOptions - Options for the request
3505
+ * @returns A Promise to get some item groups.
3506
+ */
3507
+ function getItemGroups(id, requestOptions) {
3508
+ var url = getItemBaseUrl(id, requestOptions) + "/groups";
3509
+ return request(url, requestOptions);
3510
+ }
3511
+ /**
3512
+ * ```
3513
+ * import { getItemInfo } from "@esri/arcgis-rest-portal";
3514
+ * // get the "Info Card" for the item
3515
+ * getItemInfo("ae7")
3516
+ * .then(itemInfoXml) // XML document as a string
3517
+ * // or get the contents of a specific file
3518
+ * getItemInfo("ae7", { fileName: "form.json", readAs: "json", authentication })
3519
+ * .then(formJson) // JSON document as JSON
3520
+ * ```
3521
+ * Get an info file for an item. See the [REST Documentation](https://developers.arcgis.com/rest/users-groups-and-items/item-info-file.htm) for more information.
3522
+ * @param id - Item Id
3523
+ * @param requestOptions - Options for the request, including the file name which defaults to `iteminfo.xml`.
3524
+ * If the file is not a text file (XML, HTML, etc) you will need to specify the `readAs` parameter
3525
+ * @returns A Promise that will resolve with the contents of the info file for the item.
3526
+ */
3527
+ function getItemInfo(id, requestOptions) {
3528
+ var _a = requestOptions || {}, _b = _a.fileName, fileName = _b === void 0 ? "iteminfo.xml" : _b, _c = _a.readAs, readAs = _c === void 0 ? "text" : _c;
3529
+ var options = __assign({ httpMethod: "GET" }, requestOptions);
3530
+ return getItemFile(id, "/info/" + fileName, readAs, options);
3531
+ }
3532
+ /**
3533
+ * ```
3534
+ * import { getItemMetadata } from "@esri/arcgis-rest-portal";
3535
+ * // get the metadata for the item
3536
+ * getItemMetadata("ae7")
3537
+ * .then(itemMetadataXml) // XML document as a string
3538
+ * // or with additional request options
3539
+ * getItemMetadata("ae7", { authentication })
3540
+ * .then(itemMetadataXml) // XML document as a string
3541
+ * ```
3542
+ * Get the standard formal metadata XML file for an item (`/info/metadata/metadata.xml`)
3543
+ * @param id - Item Id
3544
+ * @param requestOptions - Options for the request
3545
+ * @returns A Promise that will resolve with the contents of the metadata file for the item as a string.
3546
+ */
3547
+ function getItemMetadata(id, requestOptions) {
3548
+ var options = __assign(__assign({}, requestOptions), { fileName: "metadata/metadata.xml" });
3549
+ return getItemInfo(id, options);
3550
+ }
3551
+ // overrides request()'s default behavior for reading the response
3552
+ // which is based on `params.f` and defaults to JSON
3553
+ // Also adds JSON parse error protection by sanitizing out any unescaped control characters before parsing
3554
+ function getItemFile(id,
3555
+ // NOTE: fileName should include any folder/subfolders
3556
+ fileName, readMethod, requestOptions) {
3557
+ var url = "" + getItemBaseUrl(id, requestOptions) + fileName;
3558
+ // preserve escape hatch to let the consumer read the response
3559
+ // and ensure the f param is not appended to the query string
3560
+ var options = __assign({ params: {} }, requestOptions);
3561
+ var justReturnResponse = options.rawResponse;
3562
+ options.rawResponse = true;
3563
+ options.params.f = null;
3564
+ return request(url, options).then(function (response) {
3565
+ if (justReturnResponse) {
3566
+ return response;
3567
+ }
3568
+ return readMethod !== 'json'
3569
+ ? response[readMethod]()
3570
+ : response.text().then(function (text) { return JSON.parse(scrubControlChars(text)); });
3571
+ });
3572
+ }
3469
3573
 
3470
3574
  /* Copyright (c) 2018 Environmental Systems Research Institute, Inc.
3471
3575
  * Apache-2.0 */
@@ -5963,6 +6067,67 @@
5963
6067
  })));
5964
6068
  }
5965
6069
 
6070
+ /* Copyright (c) 2017-2019 Environmental Systems Research Institute, Inc.
6071
+ * Apache-2.0 */
6072
+ var serviceRegex = new RegExp(/.+(?:map|feature|image)server/i);
6073
+ /**
6074
+ * Return the service url. If not matched, returns what was passed in
6075
+ */
6076
+ function parseServiceUrl(url) {
6077
+ var match = url.match(serviceRegex);
6078
+ if (match) {
6079
+ return match[0];
6080
+ }
6081
+ else {
6082
+ return stripQueryString(url);
6083
+ }
6084
+ }
6085
+ function stripQueryString(url) {
6086
+ var stripped = url.split('?')[0];
6087
+ return cleanUrl(stripped);
6088
+ }
6089
+
6090
+ /**
6091
+ * ```js
6092
+ * import { getAllLayersAndTables } from '@esri/arcgis-rest-feature-layer';
6093
+ * getAllLayersAndTables({
6094
+ * url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/ServiceRequest/FeatureServer/0"
6095
+ * })
6096
+ * .then(response) // { layers: [...], tables: [...] }
6097
+ * ```
6098
+ * Fetches all the layers and tables associated with a given layer service.
6099
+ * Wrapper for https://developers.arcgis.com/rest/services-reference/all-layers-and-tables.htm
6100
+ *
6101
+ * @param options - Request options, including the url for the layer service
6102
+ * @returns A Promise that will resolve with the layers and tables for the given service
6103
+ */
6104
+ // TODO: should we expand this to support other valid params of the endpoint?
6105
+ function getAllLayersAndTables(options) {
6106
+ var url = options.url, requestOptions = __rest(options, ["url"]);
6107
+ var layersUrl = parseServiceUrl(url) + "/layers";
6108
+ return request(layersUrl, requestOptions);
6109
+ }
6110
+
6111
+ /* Copyright (c) 2018 Environmental Systems Research Institute, Inc.
6112
+ * Apache-2.0 */
6113
+ /**
6114
+ * ```js
6115
+ * import { getService } from '@esri/arcgis-rest-feature-layer';
6116
+ * //
6117
+ * getService({
6118
+ * url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/ServiceRequest/FeatureServer"
6119
+ * })
6120
+ * .then(response) // { name: "311", id: 0, ... }
6121
+ * ```
6122
+ * Feature Service request. See the [REST Documentation](https://developers.arcgis.com/rest/services-reference/feature-service.htm) for more information.
6123
+ *
6124
+ * @param options - Options for the request.
6125
+ * @returns A Promise that will resolve with the getService response.
6126
+ */
6127
+ function getService(options) {
6128
+ return request(cleanUrl(options.url), options);
6129
+ }
6130
+
5966
6131
  function createExtent(xmin, ymin, xmax, ymax, wkid) {
5967
6132
  if (wkid === void 0) { wkid = 4326; }
5968
6133
  return {
@@ -6105,26 +6270,6 @@
6105
6270
  };
6106
6271
  };
6107
6272
 
6108
- /* Copyright (c) 2017-2019 Environmental Systems Research Institute, Inc.
6109
- * Apache-2.0 */
6110
- var serviceRegex = new RegExp(/.+(?:map|feature|image)server/i);
6111
- /**
6112
- * Return the service url. If not matched, returns what was passed in
6113
- */
6114
- function parseServiceUrl(url) {
6115
- var match = url.match(serviceRegex);
6116
- if (match) {
6117
- return match[0];
6118
- }
6119
- else {
6120
- return stripQueryString(url);
6121
- }
6122
- }
6123
- function stripQueryString(url) {
6124
- var stripped = url.split('?')[0];
6125
- return cleanUrl(stripped);
6126
- }
6127
-
6128
6273
  // private helper functions
6129
6274
  function collectionToFamily(collection) {
6130
6275
  var overrides = {
@@ -6166,6 +6311,12 @@
6166
6311
  return family;
6167
6312
  }
6168
6313
 
6314
+ /**
6315
+ * get a content's boundary based on the item's boundary property
6316
+ * @param item
6317
+ * @returns
6318
+ * @private
6319
+ */
6169
6320
  // TODO: this needs to be able to handle "automatic"
6170
6321
  var getContentBoundary = function (item) {
6171
6322
  var _a;
@@ -6191,18 +6342,36 @@
6191
6342
  geometry: geometry,
6192
6343
  };
6193
6344
  };
6194
- // when no request options are provided, the underlying
6195
- // request functions assume that we are online in production
6196
- // so we only want use enterprise logic if isPortal is explicitly defined
6345
+ /**
6346
+ * Determine if we are in an enterprise environment
6347
+ * NOTE: when no request options are provided, the underlying
6348
+ * request functions assume that we are online in production
6349
+ * so we only want use enterprise logic if isPortal is explicitly defined
6350
+ * @param requestOptions
6351
+ * @returns
6352
+ * @private
6353
+ */
6197
6354
  var isPortal = function (requestOptions) {
6198
6355
  return requestOptions && requestOptions.isPortal;
6199
6356
  };
6357
+ /**
6358
+ * Determine if we can use the Hub API for an item, i.e.
6359
+ * the item is public and we are not in an enterprise environment
6360
+ * @param item
6361
+ * @param requestOptions
6362
+ * @returns
6363
+ * @private
6364
+ */
6365
+ var canUseHubApiForItem = function (item, requestOptions) {
6366
+ return !!item && item.access === "public" && !isPortal(requestOptions);
6367
+ };
6200
6368
  /**
6201
6369
  * Returns whether or not an item is a proxied csv
6202
6370
  *
6203
6371
  * @param item
6204
6372
  * @param requestOptions Hub Request Options (including whether we're in portal)
6205
6373
  * @returns
6374
+ * @private
6206
6375
  */
6207
6376
  var isProxiedCSV = function (item, requestOptions) {
6208
6377
  return !isPortal(requestOptions) &&
@@ -6210,6 +6379,14 @@
6210
6379
  item.type === "CSV" &&
6211
6380
  item.size <= 5000000;
6212
6381
  };
6382
+ /**
6383
+ * Get the relative URL to use for the item in a hub site
6384
+ * @param type
6385
+ * @param identifier
6386
+ * @param typeKeywords
6387
+ * @returns
6388
+ * @private
6389
+ */
6213
6390
  var getHubRelativeUrl = function (type, identifier, typeKeywords) {
6214
6391
  // solution types have their own logic
6215
6392
  var contentUrl = getSolutionUrl(type, identifier, typeKeywords);
@@ -6242,6 +6419,12 @@
6242
6419
  }
6243
6420
  return contentUrl;
6244
6421
  };
6422
+ /**
6423
+ * Is this content type a page?
6424
+ * @param type
6425
+ * @returns
6426
+ * @private
6427
+ */
6245
6428
  var isPageType = function (type) {
6246
6429
  return ["Hub Page", "Site Page"].includes(type);
6247
6430
  };
@@ -6260,6 +6443,12 @@
6260
6443
  }
6261
6444
  return hubUrl;
6262
6445
  };
6446
+ /**
6447
+ * Get the path to a well known metadata value
6448
+ * @param identifier identifier for well known metadata value
6449
+ * @returns path to be used like get(metadata, path)
6450
+ * @private
6451
+ */
6263
6452
  function getMetadataPath(identifier) {
6264
6453
  // NOTE: i have verified that this will work regardless of the "Metadata Style" set on the org
6265
6454
  var metadataPaths = {
@@ -6272,10 +6461,20 @@
6272
6461
  };
6273
6462
  return metadataPaths[identifier];
6274
6463
  }
6464
+ /**
6465
+ * Get a well known value from metadata
6466
+ * @param metadata
6467
+ * @param identifier identifier for well known metadata value
6468
+ * @returns
6469
+ * @private
6470
+ */
6275
6471
  function getValueFromMetadata(metadata, identifier) {
6276
6472
  var path = getMetadataPath(identifier);
6277
6473
  return path && getProp(metadata, path);
6278
6474
  }
6475
+ /**
6476
+ * Date precisions
6477
+ */
6279
6478
  var DatePrecision;
6280
6479
  (function (DatePrecision) {
6281
6480
  DatePrecision["Year"] = "year";
@@ -6293,6 +6492,7 @@
6293
6492
  *
6294
6493
  * @param {string} isoString
6295
6494
  * @return { date: Date, precision: DatePrecision }
6495
+ * @private
6296
6496
  */
6297
6497
  function parseISODateString(isoString) {
6298
6498
  isoString = "" + isoString;
@@ -6324,6 +6524,13 @@
6324
6524
  }
6325
6525
  return date && precision && { date: date, precision: precision };
6326
6526
  }
6527
+ /**
6528
+ * Get the spatial reference from layer or server info
6529
+ * @param server
6530
+ * @param layer
6531
+ * @returns
6532
+ * @private
6533
+ */
6327
6534
  var getServerSpatialReference = function (server, layer) {
6328
6535
  var _a;
6329
6536
  var layerSpatialReference = (_a = layer === null || layer === void 0 ? void 0 : layer.extent) === null || _a === void 0 ? void 0 : _a.spatialReference;
@@ -6334,6 +6541,12 @@
6334
6541
  // that is always either WKID like "102100" or
6335
6542
  // WKT like "NAD_1983_HARN_StatePlane_Hawaii_3_FIPS_5103_Feet"
6336
6543
  // so we coerce those string into a ISpatialReference object
6544
+ /**
6545
+ * Get the spatial reference as an object for an item
6546
+ * @param item
6547
+ * @returns spatial reference object
6548
+ * @private
6549
+ */
6337
6550
  var getItemSpatialReference = function (item) {
6338
6551
  var spatialReference = item.spatialReference;
6339
6552
  if (!spatialReference || typeof spatialReference === "object") {
@@ -6359,6 +6572,7 @@
6359
6572
  * @param item
6360
6573
  * @param metadata formal metadata
6361
6574
  * @returns
6575
+ * @private
6362
6576
  */
6363
6577
  var getAdditionalResources = function (item, metadata, requestOptions) {
6364
6578
  var rawResources = getProp(metadata, "metadata.distInfo.distTranOps.onLineSrc") || null;
@@ -6381,6 +6595,7 @@
6381
6595
  * @param resource raw additional resource of an item
6382
6596
  * @param item
6383
6597
  * @returns
6598
+ * @private
6384
6599
  */
6385
6600
  var isDataSourceOfItem = function (resource, item) {
6386
6601
  var serviceUrl = item.url && parseServiceUrl(item.url);
@@ -6396,6 +6611,7 @@
6396
6611
  * @param item
6397
6612
  * @param requestOptions IHubRequestOptions, including authentication
6398
6613
  * @returns
6614
+ * @private
6399
6615
  */
6400
6616
  var getAdditionalResourceUrl = function (resource, item, requestOptions) {
6401
6617
  var result = resource.linkage;
@@ -7107,7 +7323,7 @@
7107
7323
  */
7108
7324
  var composeContent = function (item, options) {
7109
7325
  // extract enrichments and context out of the options
7110
- 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, statistics = _a.statistics;
7326
+ 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;
7111
7327
  // set common variables that we will use in the derived properties below
7112
7328
  // if item refers to a layer we always want to use that layer id
7113
7329
  // otherwise use the layer id that was passed in (if any)
@@ -7122,8 +7338,7 @@
7122
7338
  : // for feature servers with a single layer always show the layer
7123
7339
  isFeatureService(item.type) && getOnlyQueryLayer(layers));
7124
7340
  // NOTE: we only set hubId for public items in online
7125
- var _canUseHubApi = !isPortal(requestOptions) && item.access === "public";
7126
- var hubId = _canUseHubApi
7341
+ var hubId = canUseHubApiForItem(item, requestOptions)
7127
7342
  ? layer
7128
7343
  ? item.id + "_" + layer.id
7129
7344
  : getItemHubId(item)
@@ -7181,7 +7396,7 @@
7181
7396
  return name;
7182
7397
  },
7183
7398
  get description() {
7184
- return _layerDescription || item.description;
7399
+ return searchDescription || _layerDescription || item.description;
7185
7400
  }, type: type, get family() {
7186
7401
  return getFamily(type);
7187
7402
  }, get url() {
@@ -7212,6 +7427,15 @@
7212
7427
  };
7213
7428
  },
7214
7429
  // TODO: do we want to add dataset extent logic as a getter here?
7430
+ get extent() {
7431
+ return !isBBox(item.extent) && extent && isBBox(extent.coordinates)
7432
+ ? // we fall back to the extent derived by the Hub API
7433
+ // which prefers layer or service extents and ultimately
7434
+ // falls back to the org's extent
7435
+ extent.coordinates
7436
+ : // prefer item extent
7437
+ item.extent;
7438
+ },
7215
7439
  // would require us to do client-side projection of server/layer extent
7216
7440
  get boundary() {
7217
7441
  // TODO: need to be able to handle automatic w/ additional enrichment
@@ -7294,11 +7518,10 @@
7294
7518
  return (getItemSpatialReference(item) ||
7295
7519
  getServerSpatialReference(server, layer) ||
7296
7520
  null);
7297
- },
7298
- get orgId() {
7521
+ }, get orgId() {
7299
7522
  // NOTE: it's undocumented, but the portal API will return orgId for items... sometimes
7300
- return org ? org.id : item.orgId;
7301
- },
7523
+ return org ? org.id : item.orgId || (ownerUser === null || ownerUser === void 0 ? void 0 : ownerUser.orgId);
7524
+ },
7302
7525
  // deprecated properties
7303
7526
  // TODO: should we add these in legacy wrappers
7304
7527
  // like itemToContent or datasetToContent instead?
@@ -7326,173 +7549,58 @@
7326
7549
  } });
7327
7550
  };
7328
7551
 
7329
- // TODO: remove this at next breaking version
7552
+ //////////////////////
7553
+ // Slug Helpers
7554
+ //////////////////////
7330
7555
  /**
7331
- * ```js
7332
- * import { getCategory } from "@esri/hub-common";
7333
- * //
7334
- * getCategory('Feature Layer')
7335
- * > 'dataset'
7336
- * ```
7337
- * **DEPRECATED: Use getCollection() instead**
7338
- * returns the Hub category for a given item type
7339
- * @param itemType The ArcGIS [item type](https://developers.arcgis.com/rest/users-groups-and-items/items-and-item-types.htm).
7340
- * @returns the category of a given item type.
7556
+ * Parse item ID and layer ID (if any) from dataset record ID
7557
+ *
7558
+ * @param datasetId Hub API dataset record id ({itemId}_{layerId} or {itemId})
7559
+ * @returns A hash with the `itemId` and `layerId` (if any)
7341
7560
  */
7342
- function getCategory(itemType) {
7343
- if (itemType === void 0) { itemType = ""; }
7344
- /* tslint:disable no-console */
7345
- console.warn("DEPRECATED: Use getCollection() instead. getCategory will be removed at v10.0.0");
7346
- /* tslint:enable no-console */
7347
- var collection = getCollection(itemType);
7348
- // for backwards compatibility
7349
- return collection === "feedback" ? "app" : collection;
7561
+ function parseDatasetId(datasetId) {
7562
+ var _a = datasetId ? datasetId.split("_") : [], itemId = _a[0], layerId = _a[1];
7563
+ return { itemId: itemId, layerId: layerId };
7350
7564
  }
7351
7565
  /**
7352
- * ```js
7353
- * import { getTypes } from "@esri/hub-common";
7354
- * //
7355
- * getTypes('site')
7356
- * > [ 'hub site application' ]
7357
- * ```
7358
- * To do.
7359
- * @param category The ArcGIS Hub category.
7360
- * @returns all the item types for the given category.
7566
+ * Determine if an identifier is a Hub API slug
7361
7567
  *
7568
+ * @param identifier Hub API slug ({orgKey}::{title-as-slug} or {title-as-slug})
7569
+ * or record id ((itemId}_{layerId} or {itemId})
7570
+ * @returns true if the identifier is valid _and_ is **not** a record id
7362
7571
  */
7363
- function getTypes(category) {
7364
- if (category === void 0) { category = ""; }
7365
- return categories[category.toLowerCase()];
7572
+ function isSlug(identifier) {
7573
+ var itemId = parseDatasetId(identifier).itemId;
7574
+ if (!itemId || isGuid(itemId)) {
7575
+ // it's either invalid, or an item id, or a dataset id
7576
+ return false;
7577
+ }
7578
+ // otherwise assume it's a slug
7579
+ return true;
7366
7580
  }
7367
7581
  /**
7368
- * ```js
7369
- * import { getTypeCategories } from "@esri/hub-common";
7370
- * //
7371
- * getTypeCategories(item)
7372
- * > [ 'Hub Site Application' ]
7373
- * ```
7374
- * @param item Item object.
7375
- * @returns typeCategory of the input item.
7582
+ * Add a context (prefix) to slug if it doesn't already have one
7376
7583
  *
7584
+ * @param slug Hub API slug (with or without context)
7585
+ * @param context usually a portal's orgKey
7586
+ * @returns slug with context ({context}::{slug})
7377
7587
  */
7378
- function getTypeCategories(item) {
7379
- if (item === void 0) { item = {}; }
7380
- var type = normalizeItemType(item);
7381
- var category = getCategory(type);
7382
- if (category) {
7383
- // upper case first letter and return as element in array for backwards compatibility
7384
- var chars = Array.from(category);
7385
- chars[0] = chars[0].toUpperCase();
7386
- return [chars.join("")];
7588
+ function addContextToSlug(slug, context) {
7589
+ // the slug has an org key already e.g. dc::crime-incidents
7590
+ if (/.+::.+/.test(slug)) {
7591
+ return slug;
7592
+ // the slug belongs to the org that owns the site e.g. crime-incidents
7387
7593
  }
7388
7594
  else {
7389
- return ["Other"];
7595
+ return context + "::" + slug;
7390
7596
  }
7391
7597
  }
7392
7598
  /**
7393
- * ```js
7394
- * import { getContentIdentifier } from "@esri/hub-common";
7395
- * //
7396
- * getContentIdentifier(content, site)
7397
- * > 'f12hhjk32' // id
7398
- * // OR
7399
- * > 'content-slug' // human-readable slug
7400
- * ```
7401
- * Returns the preferred identifier for a piece of content (determined by content type):
7402
- * - Content from the 'template' and 'feedback' families return the standard id field
7403
- * - Pages that are linked to the site parameter will return the slug defined by the site. Otherwise, the page id will be returned
7404
- * - All other content will return the highest available item in the following hierarchy:
7405
- * 1. slug - includes org prefix if the site parameter is a portal or has an orgKey different from the slug prefix
7406
- * 2. hubId
7407
- * 3. id
7408
- * @param content The IHubContent item
7409
- * @param site The site to compare content against
7410
- * @returns the preferred id for the given content.
7411
- */
7412
- function getContentIdentifier(content, site) {
7413
- // We don't currently support slugs for hub initiative templates, solutions or surveys
7414
- if (includes(["template", "feedback"], content.family)) {
7415
- return content.id;
7416
- }
7417
- // If it is a hub page linked to a site, return the page slug at the
7418
- // site data instead. Because this one is the original one that was used
7419
- // to create the page url (not mutable once created) and the slug (below)
7420
- // generated by the hub-indexer could simply change with page name.
7421
- if (isPageType(content.type)) {
7422
- // check if the page is linked to the current site
7423
- var pages = getProp(site, "data.values.pages") || [];
7424
- // if so, return the page slug otherwise the page id
7425
- var page = pages.find(function (p) { return p.id === content.id; });
7426
- return page ? page.slug : content.id;
7427
- }
7428
- // If a slug is present, always return it
7429
- if (content.slug) {
7430
- var slug = void 0;
7431
- var orgKey = getProp(site, "domainInfo.orgKey");
7432
- // Use namespaced slug when on the umbrella site
7433
- if (getProp(site, "data.values.isUmbrella")) {
7434
- slug = content.slug;
7435
- }
7436
- else {
7437
- // Use shortened slug if the slug's namespace is the same as the orgKey
7438
- slug = removeContextFromSlug(content.slug, orgKey);
7439
- }
7440
- return slug;
7441
- }
7442
- return content.hubId || content.id;
7443
- }
7444
- //////////////////////
7445
- // Slug Helpers
7446
- //////////////////////
7447
- /**
7448
- * Parse item ID and layer ID (if any) from dataset record ID
7449
- *
7450
- * @param datasetId Hub API dataset record id ({itemId}_{layerId} or {itemId})
7451
- * @returns A hash with the `itemId` and `layerId` (if any)
7452
- */
7453
- function parseDatasetId(datasetId) {
7454
- var _a = datasetId ? datasetId.split("_") : [], itemId = _a[0], layerId = _a[1];
7455
- return { itemId: itemId, layerId: layerId };
7456
- }
7457
- /**
7458
- * Determine if an identifier is a Hub API slug
7459
- *
7460
- * @param identifier Hub API slug ({orgKey}::{title-as-slug} or {title-as-slug})
7461
- * or record id ((itemId}_{layerId} or {itemId})
7462
- * @returns true if the identifier is valid _and_ is **not** a record id
7463
- */
7464
- function isSlug(identifier) {
7465
- var itemId = parseDatasetId(identifier).itemId;
7466
- if (!itemId || isGuid(itemId)) {
7467
- // it's either invalid, or an item id, or a dataset id
7468
- return false;
7469
- }
7470
- // otherwise assume it's a slug
7471
- return true;
7472
- }
7473
- /**
7474
- * Add a context (prefix) to slug if it doesn't already have one
7475
- *
7476
- * @param slug Hub API slug (with or without context)
7477
- * @param context usually a portal's orgKey
7478
- * @returns slug with context ({context}::{slug})
7479
- */
7480
- function addContextToSlug(slug, context) {
7481
- // the slug has an org key already e.g. dc::crime-incidents
7482
- if (/.+::.+/.test(slug)) {
7483
- return slug;
7484
- // the slug belongs to the org that owns the site e.g. crime-incidents
7485
- }
7486
- else {
7487
- return context + "::" + slug;
7488
- }
7489
- }
7490
- /**
7491
- * Remove context (prefix) from a slug
7492
- *
7493
- * @param slug Hub API slug with context
7494
- * @param context usually a portal's orgKey
7495
- * @returns slug without context
7599
+ * Remove context (prefix) from a slug
7600
+ *
7601
+ * @param slug Hub API slug with context
7602
+ * @param context usually a portal's orgKey
7603
+ * @returns slug without context
7496
7604
  */
7497
7605
  function removeContextFromSlug(slug, context) {
7498
7606
  if (context && slug.match(context + "::")) {
@@ -7502,164 +7610,1613 @@
7502
7610
  return slug;
7503
7611
  }
7504
7612
  }
7613
+
7614
+ /* Copyright (c) 2018-2020 Environmental Systems Research Institute, Inc.
7615
+ * Apache-2.0 */
7505
7616
  /**
7506
- * DEPRECATED: Use getFamily() instead.
7617
+ * Allows an application to track a series of operations, storing information
7618
+ * about the arguments passes in and the results returned
7507
7619
  *
7508
- * get the HubType for a given item or item type
7620
+ * ```js
7621
+ * import { OperationStack } from '@esri/solution-common';
7509
7622
  *
7510
- * @param itemOrType an item or item.type
7511
- */
7512
- function getItemHubType(itemOrType) {
7513
- /* tslint:disable no-console */
7514
- console.warn("DEPRECATED: Use getFamily() instead. getItemHubType() will be removed at v10.0.0");
7515
- /* tslint:enable no-console */
7516
- if (typeof itemOrType === "string") {
7517
- itemOrType = { type: itemOrType };
7518
- }
7519
- var itemType = normalizeItemType(itemOrType);
7520
- // TODO: not all categories are Hub types, may need to validate
7521
- return getCollection(itemType);
7522
- }
7523
- /**
7524
- * Convert a Portal item to Hub content
7623
+ * const stack = new OperationStack();
7525
7624
  *
7526
- * @param item Portal Item
7527
- * @returns Hub content
7528
- * @export
7529
- */
7530
- function itemToContent(item) {
7531
- return composeContent(item);
7532
- }
7533
- /**
7534
- * Convert a Hub API dataset resource to Hub Content
7625
+ * // start an operation by type
7626
+ * const id = stack.start('getItem');
7627
+ * //.. work happens...
7628
+ * stack.finish(id);
7535
7629
  *
7536
- * @param {DatasetResource} Dataset resource
7537
- * @returns {IHubContent} Hub content object
7538
- * @export
7539
- */
7540
- function datasetToContent(dataset) {
7541
- // extract item from dataset, create content from the item
7542
- var item = datasetToItem(dataset);
7543
- // extract enrichments from attributes
7544
- var _a = dataset.attributes,
7545
- // item enrichments
7546
- errors = _a.errors, boundary = _a.boundary, metadata = _a.metadata, slug = _a.slug, groupIds = _a.groupIds, orgId = _a.orgId, orgName = _a.orgName, organization = _a.organization, orgExtent = _a.orgExtent,
7547
- // map and feature server enrichments
7548
- server = _a.server, layers = _a.layers, layer = _a.layer, recordCount = _a.recordCount, statistics = _a.statistics,
7549
- // additional attributes needed
7550
- extent = _a.extent; _a.itemExtent; var searchDescription = _a.searchDescription;
7551
- // get the layerId from the layer
7552
- var layerId = layer && layer.id;
7553
- // re-assemble the org as an enrichment
7554
- var org = orgId && {
7555
- id: orgId,
7556
- name: orgName || organization,
7557
- extent: orgExtent,
7558
- };
7559
- // compose a content out of the above
7560
- var content = composeContent(item, {
7561
- layerId: layerId,
7562
- slug: slug,
7563
- errors: errors,
7564
- // setting this to null signals to enrichMetadata to skip this
7565
- metadata: metadata || null,
7566
- groupIds: groupIds,
7567
- org: org,
7568
- server: server,
7569
- layers: layers,
7570
- recordCount: recordCount,
7571
- boundary: boundary,
7572
- statistics: statistics,
7573
- });
7574
- // TODO: need to add searchDescription logic to composeContent()
7575
- // or fetch it as a Hub enrichment like boundary
7576
- if (searchDescription) {
7577
- // overwrite default summary (from snippet) w/ search description
7578
- content.summary = searchDescription;
7579
- }
7580
- // TODO: need to add extent logic to composeContent()
7581
- // or fetch it as a Hub enrichment like boundary
7582
- if (!isBBox(item.extent) && extent && isBBox(extent.coordinates)) {
7583
- // we fall back to the extent derived by the API
7584
- // which prefers layer or service extents and ultimately
7585
- // falls back to the org's extent
7586
- content.extent = extent.coordinates;
7587
- }
7588
- return content;
7589
- }
7590
- /**
7591
- * Convert a Hub API dataset resource to a portal item
7630
+ * // start an operation with an Operation object
7631
+ * stack.start({
7632
+ * id: 'createItem_1',
7633
+ * type: 'createItem',
7634
+ * inputs: {
7635
+ * item: {...truncated...},
7636
+ * portal: 'https://www.arcgis.com',
7637
+ * username: 'jsmith'
7638
+ * },
7639
+ * });
7640
+ * // make the call
7641
+ * stack.finish('createItem_1', {newItemId: '00cf213'});
7592
7642
  *
7593
- * @param {DatasetResource} Dataset resource
7594
- * @returns {IItem} portal item
7595
- * @export
7643
+ * // later you can get that information back out of the stack
7644
+ * const prevOp = stack.getOperation('createItem_1);
7645
+ *
7646
+ * // and if you need to roll back you can use the
7647
+ * // .cleanup and .output properties to help orchestrate
7648
+ *
7649
+ * ```
7650
+ *
7651
+ *
7652
+ * Can be used to implement "atomic" operations in an environment that does not
7653
+ * have this as a core feature
7596
7654
  */
7597
- function datasetToItem(dataset) {
7598
- if (!dataset) {
7599
- return;
7600
- }
7601
- var id = dataset.id, attributes = dataset.attributes;
7602
- if (!attributes) {
7603
- return;
7655
+ var OperationStack = /** @class */ (function () {
7656
+ /**
7657
+ * Creates an instance of OperationStack.
7658
+ * @memberof OperationStack
7659
+ */
7660
+ function OperationStack() {
7661
+ this.operations = [];
7604
7662
  }
7605
- // parse item id
7606
- var itemId = parseDatasetId(id).itemId;
7607
- // read item properties from attributes
7608
- // NOTE: we attempt to read all item properties
7609
- // even though some may not be currently returned
7610
- var
7611
- // start w/ item properties from
7612
- // https://developers.arcgis.com/rest/users-groups-and-items/item.htm
7613
- owner = attributes.owner, orgId = attributes.orgId, created = attributes.created,
7614
- // the Hub API returns item.modified in attributes.itemModified (below)
7615
- modified = attributes.modified,
7616
- // NOTE: we use attributes.name to store the title or the service/layer name
7617
- // but in Portal name is only used for file types to store the file name (read only)
7618
- name = attributes.name, title = attributes.title, type = attributes.type, typeKeywords = attributes.typeKeywords, description = attributes.description, snippet = attributes.snippet, tags = attributes.tags, thumbnail = attributes.thumbnail,
7619
- // the Hub API returns item.extent in attributes.itemExtent (below)
7620
- // extent,
7621
- categories = attributes.categories, contentStatus = attributes.contentStatus,
7622
- // the Hub API doesn't currently return spatialReference
7623
- spatialReference = attributes.spatialReference,
7624
- // the Hub API doesn't currently return accessInformation
7625
- accessInformation = attributes.accessInformation, licenseInfo = attributes.licenseInfo, culture = attributes.culture, url = attributes.url, access = attributes.access,
7626
- // the Hub API doesn't currently return proxyFilter
7627
- proxyFilter = attributes.proxyFilter, properties = attributes.properties,
7628
- // the Hub API doesn't currently return appCategories, industries,
7629
- // languages, largeThumbnail, banner, screenshots, listed, ownerFolder
7630
- appCategories = attributes.appCategories, industries = attributes.industries, languages = attributes.languages, largeThumbnail = attributes.largeThumbnail, banner = attributes.banner, screenshots = attributes.screenshots, listed = attributes.listed, ownerFolder = attributes.ownerFolder, size = attributes.size,
7631
- // the Hub API doesn't currently return protected
7632
- isProtected = attributes.protected, commentsEnabled = attributes.commentsEnabled,
7633
- // the Hub API doesn't currently return numComments, numRatings,
7634
- // avgRating, numViews, itemControl, scoreCompleteness
7635
- numComments = attributes.numComments, numRatings = attributes.numRatings, avgRating = attributes.avgRating, numViews = attributes.numViews, itemControl = attributes.itemControl, scoreCompleteness = attributes.scoreCompleteness,
7636
- // additional attributes we'll need
7637
- // to derive the above values when missing
7638
- itemExtent = attributes.itemExtent, itemModified = attributes.itemModified, modifiedProvenance = attributes.modifiedProvenance, serviceSpatialReference = attributes.serviceSpatialReference;
7639
- // layer datasets will get their type from the layer
7640
- // so we will need to derive the item type from the URL
7641
- var serviceType = url && getServiceTypeFromUrl(url);
7642
- // build and return an item from properties
7643
- // NOTE: we currently do NOT provide default values
7644
- // (i.e. null for scalar attributes, [] for arrays, etc)
7645
- // for attributes that are not returned by the Hub API
7646
- // this helps distinguish an item that comes from the API
7647
- // but forces all consumers to do handle missing properties
7648
- return {
7649
- id: itemId,
7650
- owner: owner,
7651
- orgId: orgId,
7652
- created: created,
7653
- // for feature layers, modified will usually come from the layer so
7654
- // we prefer itemModified, but fall back to modified if it came from the item
7655
- modified: (itemModified ||
7656
- (modifiedProvenance === "item.modified" && modified)),
7657
- title: (title || name),
7658
- type: serviceType || type,
7659
- typeKeywords: typeKeywords,
7660
- description: description,
7661
- tags: tags,
7662
- snippet: snippet,
7663
+ /**
7664
+ * Start an Operation
7665
+ *
7666
+ * ```js
7667
+ * const stack = new OperationStack();
7668
+ * stack.startOperation({
7669
+ * id: 'get-bc3',
7670
+ * type: 'getItem',
7671
+ * cleanup: 'n/a',
7672
+ * inputs: {
7673
+ * id: 'bc3',
7674
+ * owner: 'vader'
7675
+ * }
7676
+ * });
7677
+ * // do work
7678
+ * stack.finish('get-bc3');
7679
+ * ```
7680
+ *
7681
+ *
7682
+ * @param {IOperation} operation
7683
+ * @memberof OperationStack
7684
+ */
7685
+ OperationStack.prototype.startOperation = function (operation) {
7686
+ var op = cloneObject$1(operation);
7687
+ op.startedAt = new Date().getTime();
7688
+ op.state = "working";
7689
+ this.operations.push(op);
7690
+ };
7691
+ /**
7692
+ * Start an operation without requiring a full operation
7693
+ *
7694
+ * ```js
7695
+ * const opId = stack.start('getItems');
7696
+ * //...work happens
7697
+ * stack.finish(opId);
7698
+ * ```
7699
+ *
7700
+ * @param {string} type Type of the operation. i.e. getItem
7701
+ * @param {Record<string, unknown>} [params] optionally pass in id, inputs, cleanup
7702
+ * @returns {string} Identifier of the new stack entry
7703
+ * @memberof OperationStack
7704
+ */
7705
+ OperationStack.prototype.start = function (type, params) {
7706
+ var op = {
7707
+ type: type,
7708
+ id: getWithDefault$1(params, "id", createId(type + "_")),
7709
+ inputs: getWithDefault$1(params, "inputs", {}),
7710
+ cleanup: getWithDefault$1(params, "cleanup", "n/a"),
7711
+ startedAt: new Date().getTime(),
7712
+ state: "working"
7713
+ };
7714
+ this.operations.push(op);
7715
+ return op.id;
7716
+ };
7717
+ /**
7718
+ * Returns a reference to an Operation
7719
+ *
7720
+ * @param {string} id Unique Identifier
7721
+ * @returns {Operation}
7722
+ * @memberof OperationStack
7723
+ */
7724
+ OperationStack.prototype.getOperation = function (id) {
7725
+ return this.operations.find(function (o) { return o.id === id; });
7726
+ };
7727
+ /**
7728
+ * Returns reference to the operations array
7729
+ *
7730
+ * @returns {Operation[]}
7731
+ * @memberof OperationStack
7732
+ */
7733
+ OperationStack.prototype.getOperations = function () {
7734
+ return this.operations;
7735
+ };
7736
+ /**
7737
+ * Inform the stack that an operation has finished.
7738
+ *
7739
+ * This will append in a duration property, and mark
7740
+ * the state as 'completed'.
7741
+ *
7742
+ * @param {string} id Unique identifier of the Operation
7743
+ * @param {Record<string, unknown>} [options] outputs
7744
+ * @memberof OperationStack
7745
+ */
7746
+ OperationStack.prototype.finish = function (id, options) {
7747
+ var op = this.getOperation(id);
7748
+ if (op) {
7749
+ op.duration = new Date().getTime() - op.startedAt;
7750
+ op.state = "completed";
7751
+ if (options) {
7752
+ op.output = cloneObject$1(options);
7753
+ }
7754
+ }
7755
+ else {
7756
+ throw new Error("No operation with id " + id + " present in stack");
7757
+ }
7758
+ };
7759
+ /**
7760
+ * Merge a serialized operation stack into
7761
+ * a stack instance
7762
+ *
7763
+ * ```js
7764
+ * import { OperationStack } from '@esri/solution-common';
7765
+ * function someFunction() {
7766
+ * const stack = new OperationStack();
7767
+ * stack.start('getItem', {id: 'get-bc3'});
7768
+ * // do some work...
7769
+ * stack.finish('get-bc3');
7770
+ *
7771
+ * const itm = {title: 'Fake Item', type: 'Web Map'};
7772
+ * // create an entry for the function we are about to call...
7773
+ * stack.start('createItem', {id: 'createItem_01', inputs: {item: itm}});
7774
+ * // call a function that does work, and has it's own stack
7775
+ * // and returns a serialized version as part of it's results
7776
+ * return createItem(itm)
7777
+ * .then((result) => {
7778
+ * // tell the stack the last operation finished...
7779
+ * stack.finish('createItem_01');
7780
+ * // merge in the stack from the function we called
7781
+ * stack.merge(result.stack);
7782
+ * // > stack.getCompleted().length === 3
7783
+ * });
7784
+ * }
7785
+ *
7786
+ * function createItem (itm) {
7787
+ * const otherStack = new OperationStack();
7788
+ * const id = otherStack.start('createItem');
7789
+ * // make calls to create item etc
7790
+ * otherStack.finish(id, {itemId: newItem.id});
7791
+ * otherStack.start('protectItem', {id: 'protect-00c'});
7792
+ * // make call to protect item...
7793
+ * otherStack.finish('protect-00c');
7794
+ * // all done... return a result with a stack
7795
+ * return Promise.resolve({
7796
+ * success:true,
7797
+ * stack: otherStack.serialize()
7798
+ * });
7799
+ * }
7800
+ * ```
7801
+ *
7802
+ * Typically used to create a comprehensive list of operations
7803
+ * when a function returns a `SerializedOperationStack` as part of
7804
+ * it's response
7805
+ *
7806
+ *
7807
+ * @param {ISerializedOperationStack} stack
7808
+ * @memberof OperationStack
7809
+ */
7810
+ OperationStack.prototype.merge = function (stack) {
7811
+ this.operations = __spreadArrays(this.operations, stack.operations);
7812
+ };
7813
+ /**
7814
+ * Get a list of the completed operations
7815
+ *
7816
+ * @returns {IOperation[]}
7817
+ * @memberof OperationStack
7818
+ */
7819
+ OperationStack.prototype.getCompleted = function () {
7820
+ return cloneObject$1(this.operations.filter(function (e) { return e.state === "completed"; }));
7821
+ };
7822
+ /**
7823
+ * Return an array of working operations
7824
+ *
7825
+ * @returns {IOperation[]}
7826
+ * @memberof OperationStack
7827
+ */
7828
+ OperationStack.prototype.getWorking = function () {
7829
+ return cloneObject$1(this.operations.filter(function (e) { return e.state === "working"; }));
7830
+ };
7831
+ /**
7832
+ * Serialize the completed operations into a set of
7833
+ * human readable messages, sorted by the startedAt timestamp
7834
+ *
7835
+ *
7836
+ * @returns {string}
7837
+ * @memberof IOperationStack
7838
+ */
7839
+ OperationStack.prototype.toString = function () {
7840
+ // sort the operations by StartedAt
7841
+ var allOps = this.operations.sort(function (a, b) {
7842
+ if (a.startedAt < b.startedAt) {
7843
+ return -1;
7844
+ }
7845
+ if (b.startedAt < a.startedAt) {
7846
+ return 1;
7847
+ }
7848
+ return 0;
7849
+ });
7850
+ return allOps.map(getOperationMessage).join("\n");
7851
+ };
7852
+ /**
7853
+ * Serialize the stack into simple objects
7854
+ *
7855
+ * @returns {ISerializedOperationStack}
7856
+ * @memberof OperationStack
7857
+ */
7858
+ OperationStack.prototype.serialize = function () {
7859
+ return {
7860
+ operations: cloneObject$1(this.getOperations())
7861
+ };
7862
+ };
7863
+ return OperationStack;
7864
+ }());
7865
+ function getOperationMessage(op) {
7866
+ var msg = op.startedAt + " : Operation " + op.id + " started with inputs " + JSON.stringify(op.inputs) + " but was not completed";
7867
+ if (op.state === "completed") {
7868
+ msg = op.startedAt + " : Operation " + op.id + " took " + op.duration + " ms with inputs " + JSON.stringify(op.inputs) + " and output " + (op.output ? JSON.stringify(op.output) : "n/a");
7869
+ }
7870
+ return msg;
7871
+ }
7872
+
7873
+ var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
7874
+
7875
+ function createCommonjsModule(fn, basedir, module) {
7876
+ return module = {
7877
+ path: basedir,
7878
+ exports: {},
7879
+ require: function (path, base) {
7880
+ return commonjsRequire(path, (base === undefined || base === null) ? module.path : base);
7881
+ }
7882
+ }, fn(module, module.exports), module.exports;
7883
+ }
7884
+
7885
+ function commonjsRequire () {
7886
+ throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs');
7887
+ }
7888
+
7889
+ var util = createCommonjsModule(function (module, exports) {
7890
+ var getAllMatches = function(string, regex) {
7891
+ var matches = [];
7892
+ var match = regex.exec(string);
7893
+ while (match) {
7894
+ var allmatches = [];
7895
+ var len = match.length;
7896
+ for (var index = 0; index < len; index++) {
7897
+ allmatches.push(match[index]);
7898
+ }
7899
+ matches.push(allmatches);
7900
+ match = regex.exec(string);
7901
+ }
7902
+ return matches;
7903
+ };
7904
+
7905
+
7906
+ var doesMatch = function(string,regex){
7907
+ var match = regex.exec(string);
7908
+ if(match === null || typeof match === "undefined") return false;
7909
+ else return true;
7910
+ };
7911
+
7912
+ var doesNotMatch = function(string,regex){
7913
+ return !doesMatch(string,regex);
7914
+ };
7915
+
7916
+
7917
+ exports.isExist= function(v){
7918
+ return typeof v !== "undefined";
7919
+ };
7920
+
7921
+ exports.isEmptyObject= function(obj) {
7922
+ return Object.keys(obj).length === 0
7923
+ };
7924
+
7925
+ /**
7926
+ * Copy all the properties of a into b.
7927
+ * @param {*} target
7928
+ * @param {*} a
7929
+ */
7930
+ exports.merge =function (target,a){
7931
+ if(a){
7932
+ var keys = Object.keys(a); // will return an array of own properties
7933
+ var len = keys.length; //don't make it inline
7934
+ for(var i = 0; i < len; i++){
7935
+ target[keys[i]] = a[keys[i]] ;
7936
+ }
7937
+ }
7938
+ };
7939
+ /* exports.merge =function (b,a){
7940
+ return Object.assign(b,a);
7941
+ } */
7942
+
7943
+ exports.getValue = function (v){
7944
+ if(exports.isExist(v)){
7945
+ return v;
7946
+ }else {
7947
+ return "";
7948
+ }
7949
+ };
7950
+
7951
+ exports.doesMatch = doesMatch;
7952
+ exports.doesNotMatch = doesNotMatch;
7953
+ exports.getAllMatches = getAllMatches;
7954
+ });
7955
+
7956
+ var xmlNode = function(tagname,parent,val){
7957
+ this.tagname = tagname;
7958
+ this.parent = parent;
7959
+ this.child = [];//child tags
7960
+ this.attrsMap;//attributes map
7961
+ this.val = val;//text only
7962
+ this.addChild = function (child){
7963
+ this.child.push(child);
7964
+ };
7965
+ };
7966
+
7967
+ var he = createCommonjsModule(function (module, exports) {
7968
+ (function(root) {
7969
+
7970
+ // Detect free variables `exports`.
7971
+ var freeExports = exports;
7972
+
7973
+ // Detect free variable `module`.
7974
+ var freeModule = module &&
7975
+ module.exports == freeExports && module;
7976
+
7977
+ // Detect free variable `global`, from Node.js or Browserified code,
7978
+ // and use it as `root`.
7979
+ var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal;
7980
+ if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {
7981
+ root = freeGlobal;
7982
+ }
7983
+
7984
+ /*--------------------------------------------------------------------------*/
7985
+
7986
+ // All astral symbols.
7987
+ var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
7988
+ // All ASCII symbols (not just printable ASCII) except those listed in the
7989
+ // first column of the overrides table.
7990
+ // https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides
7991
+ var regexAsciiWhitelist = /[\x01-\x7F]/g;
7992
+ // All BMP symbols that are not ASCII newlines, printable ASCII symbols, or
7993
+ // code points listed in the first column of the overrides table on
7994
+ // https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides.
7995
+ var regexBmpWhitelist = /[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g;
7996
+
7997
+ var regexEncodeNonAscii = /<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g;
7998
+ var encodeMap = {'\xAD':'shy','\u200C':'zwnj','\u200D':'zwj','\u200E':'lrm','\u2063':'ic','\u2062':'it','\u2061':'af','\u200F':'rlm','\u200B':'ZeroWidthSpace','\u2060':'NoBreak','\u0311':'DownBreve','\u20DB':'tdot','\u20DC':'DotDot','\t':'Tab','\n':'NewLine','\u2008':'puncsp','\u205F':'MediumSpace','\u2009':'thinsp','\u200A':'hairsp','\u2004':'emsp13','\u2002':'ensp','\u2005':'emsp14','\u2003':'emsp','\u2007':'numsp','\xA0':'nbsp','\u205F\u200A':'ThickSpace','\u203E':'oline','_':'lowbar','\u2010':'dash','\u2013':'ndash','\u2014':'mdash','\u2015':'horbar',',':'comma',';':'semi','\u204F':'bsemi',':':'colon','\u2A74':'Colone','!':'excl','\xA1':'iexcl','?':'quest','\xBF':'iquest','.':'period','\u2025':'nldr','\u2026':'mldr','\xB7':'middot','\'':'apos','\u2018':'lsquo','\u2019':'rsquo','\u201A':'sbquo','\u2039':'lsaquo','\u203A':'rsaquo','"':'quot','\u201C':'ldquo','\u201D':'rdquo','\u201E':'bdquo','\xAB':'laquo','\xBB':'raquo','(':'lpar',')':'rpar','[':'lsqb',']':'rsqb','{':'lcub','}':'rcub','\u2308':'lceil','\u2309':'rceil','\u230A':'lfloor','\u230B':'rfloor','\u2985':'lopar','\u2986':'ropar','\u298B':'lbrke','\u298C':'rbrke','\u298D':'lbrkslu','\u298E':'rbrksld','\u298F':'lbrksld','\u2990':'rbrkslu','\u2991':'langd','\u2992':'rangd','\u2993':'lparlt','\u2994':'rpargt','\u2995':'gtlPar','\u2996':'ltrPar','\u27E6':'lobrk','\u27E7':'robrk','\u27E8':'lang','\u27E9':'rang','\u27EA':'Lang','\u27EB':'Rang','\u27EC':'loang','\u27ED':'roang','\u2772':'lbbrk','\u2773':'rbbrk','\u2016':'Vert','\xA7':'sect','\xB6':'para','@':'commat','*':'ast','/':'sol','undefined':null,'&':'amp','#':'num','%':'percnt','\u2030':'permil','\u2031':'pertenk','\u2020':'dagger','\u2021':'Dagger','\u2022':'bull','\u2043':'hybull','\u2032':'prime','\u2033':'Prime','\u2034':'tprime','\u2057':'qprime','\u2035':'bprime','\u2041':'caret','`':'grave','\xB4':'acute','\u02DC':'tilde','^':'Hat','\xAF':'macr','\u02D8':'breve','\u02D9':'dot','\xA8':'die','\u02DA':'ring','\u02DD':'dblac','\xB8':'cedil','\u02DB':'ogon','\u02C6':'circ','\u02C7':'caron','\xB0':'deg','\xA9':'copy','\xAE':'reg','\u2117':'copysr','\u2118':'wp','\u211E':'rx','\u2127':'mho','\u2129':'iiota','\u2190':'larr','\u219A':'nlarr','\u2192':'rarr','\u219B':'nrarr','\u2191':'uarr','\u2193':'darr','\u2194':'harr','\u21AE':'nharr','\u2195':'varr','\u2196':'nwarr','\u2197':'nearr','\u2198':'searr','\u2199':'swarr','\u219D':'rarrw','\u219D\u0338':'nrarrw','\u219E':'Larr','\u219F':'Uarr','\u21A0':'Rarr','\u21A1':'Darr','\u21A2':'larrtl','\u21A3':'rarrtl','\u21A4':'mapstoleft','\u21A5':'mapstoup','\u21A6':'map','\u21A7':'mapstodown','\u21A9':'larrhk','\u21AA':'rarrhk','\u21AB':'larrlp','\u21AC':'rarrlp','\u21AD':'harrw','\u21B0':'lsh','\u21B1':'rsh','\u21B2':'ldsh','\u21B3':'rdsh','\u21B5':'crarr','\u21B6':'cularr','\u21B7':'curarr','\u21BA':'olarr','\u21BB':'orarr','\u21BC':'lharu','\u21BD':'lhard','\u21BE':'uharr','\u21BF':'uharl','\u21C0':'rharu','\u21C1':'rhard','\u21C2':'dharr','\u21C3':'dharl','\u21C4':'rlarr','\u21C5':'udarr','\u21C6':'lrarr','\u21C7':'llarr','\u21C8':'uuarr','\u21C9':'rrarr','\u21CA':'ddarr','\u21CB':'lrhar','\u21CC':'rlhar','\u21D0':'lArr','\u21CD':'nlArr','\u21D1':'uArr','\u21D2':'rArr','\u21CF':'nrArr','\u21D3':'dArr','\u21D4':'iff','\u21CE':'nhArr','\u21D5':'vArr','\u21D6':'nwArr','\u21D7':'neArr','\u21D8':'seArr','\u21D9':'swArr','\u21DA':'lAarr','\u21DB':'rAarr','\u21DD':'zigrarr','\u21E4':'larrb','\u21E5':'rarrb','\u21F5':'duarr','\u21FD':'loarr','\u21FE':'roarr','\u21FF':'hoarr','\u2200':'forall','\u2201':'comp','\u2202':'part','\u2202\u0338':'npart','\u2203':'exist','\u2204':'nexist','\u2205':'empty','\u2207':'Del','\u2208':'in','\u2209':'notin','\u220B':'ni','\u220C':'notni','\u03F6':'bepsi','\u220F':'prod','\u2210':'coprod','\u2211':'sum','+':'plus','\xB1':'pm','\xF7':'div','\xD7':'times','<':'lt','\u226E':'nlt','<\u20D2':'nvlt','=':'equals','\u2260':'ne','=\u20E5':'bne','\u2A75':'Equal','>':'gt','\u226F':'ngt','>\u20D2':'nvgt','\xAC':'not','|':'vert','\xA6':'brvbar','\u2212':'minus','\u2213':'mp','\u2214':'plusdo','\u2044':'frasl','\u2216':'setmn','\u2217':'lowast','\u2218':'compfn','\u221A':'Sqrt','\u221D':'prop','\u221E':'infin','\u221F':'angrt','\u2220':'ang','\u2220\u20D2':'nang','\u2221':'angmsd','\u2222':'angsph','\u2223':'mid','\u2224':'nmid','\u2225':'par','\u2226':'npar','\u2227':'and','\u2228':'or','\u2229':'cap','\u2229\uFE00':'caps','\u222A':'cup','\u222A\uFE00':'cups','\u222B':'int','\u222C':'Int','\u222D':'tint','\u2A0C':'qint','\u222E':'oint','\u222F':'Conint','\u2230':'Cconint','\u2231':'cwint','\u2232':'cwconint','\u2233':'awconint','\u2234':'there4','\u2235':'becaus','\u2236':'ratio','\u2237':'Colon','\u2238':'minusd','\u223A':'mDDot','\u223B':'homtht','\u223C':'sim','\u2241':'nsim','\u223C\u20D2':'nvsim','\u223D':'bsim','\u223D\u0331':'race','\u223E':'ac','\u223E\u0333':'acE','\u223F':'acd','\u2240':'wr','\u2242':'esim','\u2242\u0338':'nesim','\u2243':'sime','\u2244':'nsime','\u2245':'cong','\u2247':'ncong','\u2246':'simne','\u2248':'ap','\u2249':'nap','\u224A':'ape','\u224B':'apid','\u224B\u0338':'napid','\u224C':'bcong','\u224D':'CupCap','\u226D':'NotCupCap','\u224D\u20D2':'nvap','\u224E':'bump','\u224E\u0338':'nbump','\u224F':'bumpe','\u224F\u0338':'nbumpe','\u2250':'doteq','\u2250\u0338':'nedot','\u2251':'eDot','\u2252':'efDot','\u2253':'erDot','\u2254':'colone','\u2255':'ecolon','\u2256':'ecir','\u2257':'cire','\u2259':'wedgeq','\u225A':'veeeq','\u225C':'trie','\u225F':'equest','\u2261':'equiv','\u2262':'nequiv','\u2261\u20E5':'bnequiv','\u2264':'le','\u2270':'nle','\u2264\u20D2':'nvle','\u2265':'ge','\u2271':'nge','\u2265\u20D2':'nvge','\u2266':'lE','\u2266\u0338':'nlE','\u2267':'gE','\u2267\u0338':'ngE','\u2268\uFE00':'lvnE','\u2268':'lnE','\u2269':'gnE','\u2269\uFE00':'gvnE','\u226A':'ll','\u226A\u0338':'nLtv','\u226A\u20D2':'nLt','\u226B':'gg','\u226B\u0338':'nGtv','\u226B\u20D2':'nGt','\u226C':'twixt','\u2272':'lsim','\u2274':'nlsim','\u2273':'gsim','\u2275':'ngsim','\u2276':'lg','\u2278':'ntlg','\u2277':'gl','\u2279':'ntgl','\u227A':'pr','\u2280':'npr','\u227B':'sc','\u2281':'nsc','\u227C':'prcue','\u22E0':'nprcue','\u227D':'sccue','\u22E1':'nsccue','\u227E':'prsim','\u227F':'scsim','\u227F\u0338':'NotSucceedsTilde','\u2282':'sub','\u2284':'nsub','\u2282\u20D2':'vnsub','\u2283':'sup','\u2285':'nsup','\u2283\u20D2':'vnsup','\u2286':'sube','\u2288':'nsube','\u2287':'supe','\u2289':'nsupe','\u228A\uFE00':'vsubne','\u228A':'subne','\u228B\uFE00':'vsupne','\u228B':'supne','\u228D':'cupdot','\u228E':'uplus','\u228F':'sqsub','\u228F\u0338':'NotSquareSubset','\u2290':'sqsup','\u2290\u0338':'NotSquareSuperset','\u2291':'sqsube','\u22E2':'nsqsube','\u2292':'sqsupe','\u22E3':'nsqsupe','\u2293':'sqcap','\u2293\uFE00':'sqcaps','\u2294':'sqcup','\u2294\uFE00':'sqcups','\u2295':'oplus','\u2296':'ominus','\u2297':'otimes','\u2298':'osol','\u2299':'odot','\u229A':'ocir','\u229B':'oast','\u229D':'odash','\u229E':'plusb','\u229F':'minusb','\u22A0':'timesb','\u22A1':'sdotb','\u22A2':'vdash','\u22AC':'nvdash','\u22A3':'dashv','\u22A4':'top','\u22A5':'bot','\u22A7':'models','\u22A8':'vDash','\u22AD':'nvDash','\u22A9':'Vdash','\u22AE':'nVdash','\u22AA':'Vvdash','\u22AB':'VDash','\u22AF':'nVDash','\u22B0':'prurel','\u22B2':'vltri','\u22EA':'nltri','\u22B3':'vrtri','\u22EB':'nrtri','\u22B4':'ltrie','\u22EC':'nltrie','\u22B4\u20D2':'nvltrie','\u22B5':'rtrie','\u22ED':'nrtrie','\u22B5\u20D2':'nvrtrie','\u22B6':'origof','\u22B7':'imof','\u22B8':'mumap','\u22B9':'hercon','\u22BA':'intcal','\u22BB':'veebar','\u22BD':'barvee','\u22BE':'angrtvb','\u22BF':'lrtri','\u22C0':'Wedge','\u22C1':'Vee','\u22C2':'xcap','\u22C3':'xcup','\u22C4':'diam','\u22C5':'sdot','\u22C6':'Star','\u22C7':'divonx','\u22C8':'bowtie','\u22C9':'ltimes','\u22CA':'rtimes','\u22CB':'lthree','\u22CC':'rthree','\u22CD':'bsime','\u22CE':'cuvee','\u22CF':'cuwed','\u22D0':'Sub','\u22D1':'Sup','\u22D2':'Cap','\u22D3':'Cup','\u22D4':'fork','\u22D5':'epar','\u22D6':'ltdot','\u22D7':'gtdot','\u22D8':'Ll','\u22D8\u0338':'nLl','\u22D9':'Gg','\u22D9\u0338':'nGg','\u22DA\uFE00':'lesg','\u22DA':'leg','\u22DB':'gel','\u22DB\uFE00':'gesl','\u22DE':'cuepr','\u22DF':'cuesc','\u22E6':'lnsim','\u22E7':'gnsim','\u22E8':'prnsim','\u22E9':'scnsim','\u22EE':'vellip','\u22EF':'ctdot','\u22F0':'utdot','\u22F1':'dtdot','\u22F2':'disin','\u22F3':'isinsv','\u22F4':'isins','\u22F5':'isindot','\u22F5\u0338':'notindot','\u22F6':'notinvc','\u22F7':'notinvb','\u22F9':'isinE','\u22F9\u0338':'notinE','\u22FA':'nisd','\u22FB':'xnis','\u22FC':'nis','\u22FD':'notnivc','\u22FE':'notnivb','\u2305':'barwed','\u2306':'Barwed','\u230C':'drcrop','\u230D':'dlcrop','\u230E':'urcrop','\u230F':'ulcrop','\u2310':'bnot','\u2312':'profline','\u2313':'profsurf','\u2315':'telrec','\u2316':'target','\u231C':'ulcorn','\u231D':'urcorn','\u231E':'dlcorn','\u231F':'drcorn','\u2322':'frown','\u2323':'smile','\u232D':'cylcty','\u232E':'profalar','\u2336':'topbot','\u233D':'ovbar','\u233F':'solbar','\u237C':'angzarr','\u23B0':'lmoust','\u23B1':'rmoust','\u23B4':'tbrk','\u23B5':'bbrk','\u23B6':'bbrktbrk','\u23DC':'OverParenthesis','\u23DD':'UnderParenthesis','\u23DE':'OverBrace','\u23DF':'UnderBrace','\u23E2':'trpezium','\u23E7':'elinters','\u2423':'blank','\u2500':'boxh','\u2502':'boxv','\u250C':'boxdr','\u2510':'boxdl','\u2514':'boxur','\u2518':'boxul','\u251C':'boxvr','\u2524':'boxvl','\u252C':'boxhd','\u2534':'boxhu','\u253C':'boxvh','\u2550':'boxH','\u2551':'boxV','\u2552':'boxdR','\u2553':'boxDr','\u2554':'boxDR','\u2555':'boxdL','\u2556':'boxDl','\u2557':'boxDL','\u2558':'boxuR','\u2559':'boxUr','\u255A':'boxUR','\u255B':'boxuL','\u255C':'boxUl','\u255D':'boxUL','\u255E':'boxvR','\u255F':'boxVr','\u2560':'boxVR','\u2561':'boxvL','\u2562':'boxVl','\u2563':'boxVL','\u2564':'boxHd','\u2565':'boxhD','\u2566':'boxHD','\u2567':'boxHu','\u2568':'boxhU','\u2569':'boxHU','\u256A':'boxvH','\u256B':'boxVh','\u256C':'boxVH','\u2580':'uhblk','\u2584':'lhblk','\u2588':'block','\u2591':'blk14','\u2592':'blk12','\u2593':'blk34','\u25A1':'squ','\u25AA':'squf','\u25AB':'EmptyVerySmallSquare','\u25AD':'rect','\u25AE':'marker','\u25B1':'fltns','\u25B3':'xutri','\u25B4':'utrif','\u25B5':'utri','\u25B8':'rtrif','\u25B9':'rtri','\u25BD':'xdtri','\u25BE':'dtrif','\u25BF':'dtri','\u25C2':'ltrif','\u25C3':'ltri','\u25CA':'loz','\u25CB':'cir','\u25EC':'tridot','\u25EF':'xcirc','\u25F8':'ultri','\u25F9':'urtri','\u25FA':'lltri','\u25FB':'EmptySmallSquare','\u25FC':'FilledSmallSquare','\u2605':'starf','\u2606':'star','\u260E':'phone','\u2640':'female','\u2642':'male','\u2660':'spades','\u2663':'clubs','\u2665':'hearts','\u2666':'diams','\u266A':'sung','\u2713':'check','\u2717':'cross','\u2720':'malt','\u2736':'sext','\u2758':'VerticalSeparator','\u27C8':'bsolhsub','\u27C9':'suphsol','\u27F5':'xlarr','\u27F6':'xrarr','\u27F7':'xharr','\u27F8':'xlArr','\u27F9':'xrArr','\u27FA':'xhArr','\u27FC':'xmap','\u27FF':'dzigrarr','\u2902':'nvlArr','\u2903':'nvrArr','\u2904':'nvHarr','\u2905':'Map','\u290C':'lbarr','\u290D':'rbarr','\u290E':'lBarr','\u290F':'rBarr','\u2910':'RBarr','\u2911':'DDotrahd','\u2912':'UpArrowBar','\u2913':'DownArrowBar','\u2916':'Rarrtl','\u2919':'latail','\u291A':'ratail','\u291B':'lAtail','\u291C':'rAtail','\u291D':'larrfs','\u291E':'rarrfs','\u291F':'larrbfs','\u2920':'rarrbfs','\u2923':'nwarhk','\u2924':'nearhk','\u2925':'searhk','\u2926':'swarhk','\u2927':'nwnear','\u2928':'toea','\u2929':'tosa','\u292A':'swnwar','\u2933':'rarrc','\u2933\u0338':'nrarrc','\u2935':'cudarrr','\u2936':'ldca','\u2937':'rdca','\u2938':'cudarrl','\u2939':'larrpl','\u293C':'curarrm','\u293D':'cularrp','\u2945':'rarrpl','\u2948':'harrcir','\u2949':'Uarrocir','\u294A':'lurdshar','\u294B':'ldrushar','\u294E':'LeftRightVector','\u294F':'RightUpDownVector','\u2950':'DownLeftRightVector','\u2951':'LeftUpDownVector','\u2952':'LeftVectorBar','\u2953':'RightVectorBar','\u2954':'RightUpVectorBar','\u2955':'RightDownVectorBar','\u2956':'DownLeftVectorBar','\u2957':'DownRightVectorBar','\u2958':'LeftUpVectorBar','\u2959':'LeftDownVectorBar','\u295A':'LeftTeeVector','\u295B':'RightTeeVector','\u295C':'RightUpTeeVector','\u295D':'RightDownTeeVector','\u295E':'DownLeftTeeVector','\u295F':'DownRightTeeVector','\u2960':'LeftUpTeeVector','\u2961':'LeftDownTeeVector','\u2962':'lHar','\u2963':'uHar','\u2964':'rHar','\u2965':'dHar','\u2966':'luruhar','\u2967':'ldrdhar','\u2968':'ruluhar','\u2969':'rdldhar','\u296A':'lharul','\u296B':'llhard','\u296C':'rharul','\u296D':'lrhard','\u296E':'udhar','\u296F':'duhar','\u2970':'RoundImplies','\u2971':'erarr','\u2972':'simrarr','\u2973':'larrsim','\u2974':'rarrsim','\u2975':'rarrap','\u2976':'ltlarr','\u2978':'gtrarr','\u2979':'subrarr','\u297B':'suplarr','\u297C':'lfisht','\u297D':'rfisht','\u297E':'ufisht','\u297F':'dfisht','\u299A':'vzigzag','\u299C':'vangrt','\u299D':'angrtvbd','\u29A4':'ange','\u29A5':'range','\u29A6':'dwangle','\u29A7':'uwangle','\u29A8':'angmsdaa','\u29A9':'angmsdab','\u29AA':'angmsdac','\u29AB':'angmsdad','\u29AC':'angmsdae','\u29AD':'angmsdaf','\u29AE':'angmsdag','\u29AF':'angmsdah','\u29B0':'bemptyv','\u29B1':'demptyv','\u29B2':'cemptyv','\u29B3':'raemptyv','\u29B4':'laemptyv','\u29B5':'ohbar','\u29B6':'omid','\u29B7':'opar','\u29B9':'operp','\u29BB':'olcross','\u29BC':'odsold','\u29BE':'olcir','\u29BF':'ofcir','\u29C0':'olt','\u29C1':'ogt','\u29C2':'cirscir','\u29C3':'cirE','\u29C4':'solb','\u29C5':'bsolb','\u29C9':'boxbox','\u29CD':'trisb','\u29CE':'rtriltri','\u29CF':'LeftTriangleBar','\u29CF\u0338':'NotLeftTriangleBar','\u29D0':'RightTriangleBar','\u29D0\u0338':'NotRightTriangleBar','\u29DC':'iinfin','\u29DD':'infintie','\u29DE':'nvinfin','\u29E3':'eparsl','\u29E4':'smeparsl','\u29E5':'eqvparsl','\u29EB':'lozf','\u29F4':'RuleDelayed','\u29F6':'dsol','\u2A00':'xodot','\u2A01':'xoplus','\u2A02':'xotime','\u2A04':'xuplus','\u2A06':'xsqcup','\u2A0D':'fpartint','\u2A10':'cirfnint','\u2A11':'awint','\u2A12':'rppolint','\u2A13':'scpolint','\u2A14':'npolint','\u2A15':'pointint','\u2A16':'quatint','\u2A17':'intlarhk','\u2A22':'pluscir','\u2A23':'plusacir','\u2A24':'simplus','\u2A25':'plusdu','\u2A26':'plussim','\u2A27':'plustwo','\u2A29':'mcomma','\u2A2A':'minusdu','\u2A2D':'loplus','\u2A2E':'roplus','\u2A2F':'Cross','\u2A30':'timesd','\u2A31':'timesbar','\u2A33':'smashp','\u2A34':'lotimes','\u2A35':'rotimes','\u2A36':'otimesas','\u2A37':'Otimes','\u2A38':'odiv','\u2A39':'triplus','\u2A3A':'triminus','\u2A3B':'tritime','\u2A3C':'iprod','\u2A3F':'amalg','\u2A40':'capdot','\u2A42':'ncup','\u2A43':'ncap','\u2A44':'capand','\u2A45':'cupor','\u2A46':'cupcap','\u2A47':'capcup','\u2A48':'cupbrcap','\u2A49':'capbrcup','\u2A4A':'cupcup','\u2A4B':'capcap','\u2A4C':'ccups','\u2A4D':'ccaps','\u2A50':'ccupssm','\u2A53':'And','\u2A54':'Or','\u2A55':'andand','\u2A56':'oror','\u2A57':'orslope','\u2A58':'andslope','\u2A5A':'andv','\u2A5B':'orv','\u2A5C':'andd','\u2A5D':'ord','\u2A5F':'wedbar','\u2A66':'sdote','\u2A6A':'simdot','\u2A6D':'congdot','\u2A6D\u0338':'ncongdot','\u2A6E':'easter','\u2A6F':'apacir','\u2A70':'apE','\u2A70\u0338':'napE','\u2A71':'eplus','\u2A72':'pluse','\u2A73':'Esim','\u2A77':'eDDot','\u2A78':'equivDD','\u2A79':'ltcir','\u2A7A':'gtcir','\u2A7B':'ltquest','\u2A7C':'gtquest','\u2A7D':'les','\u2A7D\u0338':'nles','\u2A7E':'ges','\u2A7E\u0338':'nges','\u2A7F':'lesdot','\u2A80':'gesdot','\u2A81':'lesdoto','\u2A82':'gesdoto','\u2A83':'lesdotor','\u2A84':'gesdotol','\u2A85':'lap','\u2A86':'gap','\u2A87':'lne','\u2A88':'gne','\u2A89':'lnap','\u2A8A':'gnap','\u2A8B':'lEg','\u2A8C':'gEl','\u2A8D':'lsime','\u2A8E':'gsime','\u2A8F':'lsimg','\u2A90':'gsiml','\u2A91':'lgE','\u2A92':'glE','\u2A93':'lesges','\u2A94':'gesles','\u2A95':'els','\u2A96':'egs','\u2A97':'elsdot','\u2A98':'egsdot','\u2A99':'el','\u2A9A':'eg','\u2A9D':'siml','\u2A9E':'simg','\u2A9F':'simlE','\u2AA0':'simgE','\u2AA1':'LessLess','\u2AA1\u0338':'NotNestedLessLess','\u2AA2':'GreaterGreater','\u2AA2\u0338':'NotNestedGreaterGreater','\u2AA4':'glj','\u2AA5':'gla','\u2AA6':'ltcc','\u2AA7':'gtcc','\u2AA8':'lescc','\u2AA9':'gescc','\u2AAA':'smt','\u2AAB':'lat','\u2AAC':'smte','\u2AAC\uFE00':'smtes','\u2AAD':'late','\u2AAD\uFE00':'lates','\u2AAE':'bumpE','\u2AAF':'pre','\u2AAF\u0338':'npre','\u2AB0':'sce','\u2AB0\u0338':'nsce','\u2AB3':'prE','\u2AB4':'scE','\u2AB5':'prnE','\u2AB6':'scnE','\u2AB7':'prap','\u2AB8':'scap','\u2AB9':'prnap','\u2ABA':'scnap','\u2ABB':'Pr','\u2ABC':'Sc','\u2ABD':'subdot','\u2ABE':'supdot','\u2ABF':'subplus','\u2AC0':'supplus','\u2AC1':'submult','\u2AC2':'supmult','\u2AC3':'subedot','\u2AC4':'supedot','\u2AC5':'subE','\u2AC5\u0338':'nsubE','\u2AC6':'supE','\u2AC6\u0338':'nsupE','\u2AC7':'subsim','\u2AC8':'supsim','\u2ACB\uFE00':'vsubnE','\u2ACB':'subnE','\u2ACC\uFE00':'vsupnE','\u2ACC':'supnE','\u2ACF':'csub','\u2AD0':'csup','\u2AD1':'csube','\u2AD2':'csupe','\u2AD3':'subsup','\u2AD4':'supsub','\u2AD5':'subsub','\u2AD6':'supsup','\u2AD7':'suphsub','\u2AD8':'supdsub','\u2AD9':'forkv','\u2ADA':'topfork','\u2ADB':'mlcp','\u2AE4':'Dashv','\u2AE6':'Vdashl','\u2AE7':'Barv','\u2AE8':'vBar','\u2AE9':'vBarv','\u2AEB':'Vbar','\u2AEC':'Not','\u2AED':'bNot','\u2AEE':'rnmid','\u2AEF':'cirmid','\u2AF0':'midcir','\u2AF1':'topcir','\u2AF2':'nhpar','\u2AF3':'parsim','\u2AFD':'parsl','\u2AFD\u20E5':'nparsl','\u266D':'flat','\u266E':'natur','\u266F':'sharp','\xA4':'curren','\xA2':'cent','$':'dollar','\xA3':'pound','\xA5':'yen','\u20AC':'euro','\xB9':'sup1','\xBD':'half','\u2153':'frac13','\xBC':'frac14','\u2155':'frac15','\u2159':'frac16','\u215B':'frac18','\xB2':'sup2','\u2154':'frac23','\u2156':'frac25','\xB3':'sup3','\xBE':'frac34','\u2157':'frac35','\u215C':'frac38','\u2158':'frac45','\u215A':'frac56','\u215D':'frac58','\u215E':'frac78','\uD835\uDCB6':'ascr','\uD835\uDD52':'aopf','\uD835\uDD1E':'afr','\uD835\uDD38':'Aopf','\uD835\uDD04':'Afr','\uD835\uDC9C':'Ascr','\xAA':'ordf','\xE1':'aacute','\xC1':'Aacute','\xE0':'agrave','\xC0':'Agrave','\u0103':'abreve','\u0102':'Abreve','\xE2':'acirc','\xC2':'Acirc','\xE5':'aring','\xC5':'angst','\xE4':'auml','\xC4':'Auml','\xE3':'atilde','\xC3':'Atilde','\u0105':'aogon','\u0104':'Aogon','\u0101':'amacr','\u0100':'Amacr','\xE6':'aelig','\xC6':'AElig','\uD835\uDCB7':'bscr','\uD835\uDD53':'bopf','\uD835\uDD1F':'bfr','\uD835\uDD39':'Bopf','\u212C':'Bscr','\uD835\uDD05':'Bfr','\uD835\uDD20':'cfr','\uD835\uDCB8':'cscr','\uD835\uDD54':'copf','\u212D':'Cfr','\uD835\uDC9E':'Cscr','\u2102':'Copf','\u0107':'cacute','\u0106':'Cacute','\u0109':'ccirc','\u0108':'Ccirc','\u010D':'ccaron','\u010C':'Ccaron','\u010B':'cdot','\u010A':'Cdot','\xE7':'ccedil','\xC7':'Ccedil','\u2105':'incare','\uD835\uDD21':'dfr','\u2146':'dd','\uD835\uDD55':'dopf','\uD835\uDCB9':'dscr','\uD835\uDC9F':'Dscr','\uD835\uDD07':'Dfr','\u2145':'DD','\uD835\uDD3B':'Dopf','\u010F':'dcaron','\u010E':'Dcaron','\u0111':'dstrok','\u0110':'Dstrok','\xF0':'eth','\xD0':'ETH','\u2147':'ee','\u212F':'escr','\uD835\uDD22':'efr','\uD835\uDD56':'eopf','\u2130':'Escr','\uD835\uDD08':'Efr','\uD835\uDD3C':'Eopf','\xE9':'eacute','\xC9':'Eacute','\xE8':'egrave','\xC8':'Egrave','\xEA':'ecirc','\xCA':'Ecirc','\u011B':'ecaron','\u011A':'Ecaron','\xEB':'euml','\xCB':'Euml','\u0117':'edot','\u0116':'Edot','\u0119':'eogon','\u0118':'Eogon','\u0113':'emacr','\u0112':'Emacr','\uD835\uDD23':'ffr','\uD835\uDD57':'fopf','\uD835\uDCBB':'fscr','\uD835\uDD09':'Ffr','\uD835\uDD3D':'Fopf','\u2131':'Fscr','\uFB00':'fflig','\uFB03':'ffilig','\uFB04':'ffllig','\uFB01':'filig','fj':'fjlig','\uFB02':'fllig','\u0192':'fnof','\u210A':'gscr','\uD835\uDD58':'gopf','\uD835\uDD24':'gfr','\uD835\uDCA2':'Gscr','\uD835\uDD3E':'Gopf','\uD835\uDD0A':'Gfr','\u01F5':'gacute','\u011F':'gbreve','\u011E':'Gbreve','\u011D':'gcirc','\u011C':'Gcirc','\u0121':'gdot','\u0120':'Gdot','\u0122':'Gcedil','\uD835\uDD25':'hfr','\u210E':'planckh','\uD835\uDCBD':'hscr','\uD835\uDD59':'hopf','\u210B':'Hscr','\u210C':'Hfr','\u210D':'Hopf','\u0125':'hcirc','\u0124':'Hcirc','\u210F':'hbar','\u0127':'hstrok','\u0126':'Hstrok','\uD835\uDD5A':'iopf','\uD835\uDD26':'ifr','\uD835\uDCBE':'iscr','\u2148':'ii','\uD835\uDD40':'Iopf','\u2110':'Iscr','\u2111':'Im','\xED':'iacute','\xCD':'Iacute','\xEC':'igrave','\xCC':'Igrave','\xEE':'icirc','\xCE':'Icirc','\xEF':'iuml','\xCF':'Iuml','\u0129':'itilde','\u0128':'Itilde','\u0130':'Idot','\u012F':'iogon','\u012E':'Iogon','\u012B':'imacr','\u012A':'Imacr','\u0133':'ijlig','\u0132':'IJlig','\u0131':'imath','\uD835\uDCBF':'jscr','\uD835\uDD5B':'jopf','\uD835\uDD27':'jfr','\uD835\uDCA5':'Jscr','\uD835\uDD0D':'Jfr','\uD835\uDD41':'Jopf','\u0135':'jcirc','\u0134':'Jcirc','\u0237':'jmath','\uD835\uDD5C':'kopf','\uD835\uDCC0':'kscr','\uD835\uDD28':'kfr','\uD835\uDCA6':'Kscr','\uD835\uDD42':'Kopf','\uD835\uDD0E':'Kfr','\u0137':'kcedil','\u0136':'Kcedil','\uD835\uDD29':'lfr','\uD835\uDCC1':'lscr','\u2113':'ell','\uD835\uDD5D':'lopf','\u2112':'Lscr','\uD835\uDD0F':'Lfr','\uD835\uDD43':'Lopf','\u013A':'lacute','\u0139':'Lacute','\u013E':'lcaron','\u013D':'Lcaron','\u013C':'lcedil','\u013B':'Lcedil','\u0142':'lstrok','\u0141':'Lstrok','\u0140':'lmidot','\u013F':'Lmidot','\uD835\uDD2A':'mfr','\uD835\uDD5E':'mopf','\uD835\uDCC2':'mscr','\uD835\uDD10':'Mfr','\uD835\uDD44':'Mopf','\u2133':'Mscr','\uD835\uDD2B':'nfr','\uD835\uDD5F':'nopf','\uD835\uDCC3':'nscr','\u2115':'Nopf','\uD835\uDCA9':'Nscr','\uD835\uDD11':'Nfr','\u0144':'nacute','\u0143':'Nacute','\u0148':'ncaron','\u0147':'Ncaron','\xF1':'ntilde','\xD1':'Ntilde','\u0146':'ncedil','\u0145':'Ncedil','\u2116':'numero','\u014B':'eng','\u014A':'ENG','\uD835\uDD60':'oopf','\uD835\uDD2C':'ofr','\u2134':'oscr','\uD835\uDCAA':'Oscr','\uD835\uDD12':'Ofr','\uD835\uDD46':'Oopf','\xBA':'ordm','\xF3':'oacute','\xD3':'Oacute','\xF2':'ograve','\xD2':'Ograve','\xF4':'ocirc','\xD4':'Ocirc','\xF6':'ouml','\xD6':'Ouml','\u0151':'odblac','\u0150':'Odblac','\xF5':'otilde','\xD5':'Otilde','\xF8':'oslash','\xD8':'Oslash','\u014D':'omacr','\u014C':'Omacr','\u0153':'oelig','\u0152':'OElig','\uD835\uDD2D':'pfr','\uD835\uDCC5':'pscr','\uD835\uDD61':'popf','\u2119':'Popf','\uD835\uDD13':'Pfr','\uD835\uDCAB':'Pscr','\uD835\uDD62':'qopf','\uD835\uDD2E':'qfr','\uD835\uDCC6':'qscr','\uD835\uDCAC':'Qscr','\uD835\uDD14':'Qfr','\u211A':'Qopf','\u0138':'kgreen','\uD835\uDD2F':'rfr','\uD835\uDD63':'ropf','\uD835\uDCC7':'rscr','\u211B':'Rscr','\u211C':'Re','\u211D':'Ropf','\u0155':'racute','\u0154':'Racute','\u0159':'rcaron','\u0158':'Rcaron','\u0157':'rcedil','\u0156':'Rcedil','\uD835\uDD64':'sopf','\uD835\uDCC8':'sscr','\uD835\uDD30':'sfr','\uD835\uDD4A':'Sopf','\uD835\uDD16':'Sfr','\uD835\uDCAE':'Sscr','\u24C8':'oS','\u015B':'sacute','\u015A':'Sacute','\u015D':'scirc','\u015C':'Scirc','\u0161':'scaron','\u0160':'Scaron','\u015F':'scedil','\u015E':'Scedil','\xDF':'szlig','\uD835\uDD31':'tfr','\uD835\uDCC9':'tscr','\uD835\uDD65':'topf','\uD835\uDCAF':'Tscr','\uD835\uDD17':'Tfr','\uD835\uDD4B':'Topf','\u0165':'tcaron','\u0164':'Tcaron','\u0163':'tcedil','\u0162':'Tcedil','\u2122':'trade','\u0167':'tstrok','\u0166':'Tstrok','\uD835\uDCCA':'uscr','\uD835\uDD66':'uopf','\uD835\uDD32':'ufr','\uD835\uDD4C':'Uopf','\uD835\uDD18':'Ufr','\uD835\uDCB0':'Uscr','\xFA':'uacute','\xDA':'Uacute','\xF9':'ugrave','\xD9':'Ugrave','\u016D':'ubreve','\u016C':'Ubreve','\xFB':'ucirc','\xDB':'Ucirc','\u016F':'uring','\u016E':'Uring','\xFC':'uuml','\xDC':'Uuml','\u0171':'udblac','\u0170':'Udblac','\u0169':'utilde','\u0168':'Utilde','\u0173':'uogon','\u0172':'Uogon','\u016B':'umacr','\u016A':'Umacr','\uD835\uDD33':'vfr','\uD835\uDD67':'vopf','\uD835\uDCCB':'vscr','\uD835\uDD19':'Vfr','\uD835\uDD4D':'Vopf','\uD835\uDCB1':'Vscr','\uD835\uDD68':'wopf','\uD835\uDCCC':'wscr','\uD835\uDD34':'wfr','\uD835\uDCB2':'Wscr','\uD835\uDD4E':'Wopf','\uD835\uDD1A':'Wfr','\u0175':'wcirc','\u0174':'Wcirc','\uD835\uDD35':'xfr','\uD835\uDCCD':'xscr','\uD835\uDD69':'xopf','\uD835\uDD4F':'Xopf','\uD835\uDD1B':'Xfr','\uD835\uDCB3':'Xscr','\uD835\uDD36':'yfr','\uD835\uDCCE':'yscr','\uD835\uDD6A':'yopf','\uD835\uDCB4':'Yscr','\uD835\uDD1C':'Yfr','\uD835\uDD50':'Yopf','\xFD':'yacute','\xDD':'Yacute','\u0177':'ycirc','\u0176':'Ycirc','\xFF':'yuml','\u0178':'Yuml','\uD835\uDCCF':'zscr','\uD835\uDD37':'zfr','\uD835\uDD6B':'zopf','\u2128':'Zfr','\u2124':'Zopf','\uD835\uDCB5':'Zscr','\u017A':'zacute','\u0179':'Zacute','\u017E':'zcaron','\u017D':'Zcaron','\u017C':'zdot','\u017B':'Zdot','\u01B5':'imped','\xFE':'thorn','\xDE':'THORN','\u0149':'napos','\u03B1':'alpha','\u0391':'Alpha','\u03B2':'beta','\u0392':'Beta','\u03B3':'gamma','\u0393':'Gamma','\u03B4':'delta','\u0394':'Delta','\u03B5':'epsi','\u03F5':'epsiv','\u0395':'Epsilon','\u03DD':'gammad','\u03DC':'Gammad','\u03B6':'zeta','\u0396':'Zeta','\u03B7':'eta','\u0397':'Eta','\u03B8':'theta','\u03D1':'thetav','\u0398':'Theta','\u03B9':'iota','\u0399':'Iota','\u03BA':'kappa','\u03F0':'kappav','\u039A':'Kappa','\u03BB':'lambda','\u039B':'Lambda','\u03BC':'mu','\xB5':'micro','\u039C':'Mu','\u03BD':'nu','\u039D':'Nu','\u03BE':'xi','\u039E':'Xi','\u03BF':'omicron','\u039F':'Omicron','\u03C0':'pi','\u03D6':'piv','\u03A0':'Pi','\u03C1':'rho','\u03F1':'rhov','\u03A1':'Rho','\u03C3':'sigma','\u03A3':'Sigma','\u03C2':'sigmaf','\u03C4':'tau','\u03A4':'Tau','\u03C5':'upsi','\u03A5':'Upsilon','\u03D2':'Upsi','\u03C6':'phi','\u03D5':'phiv','\u03A6':'Phi','\u03C7':'chi','\u03A7':'Chi','\u03C8':'psi','\u03A8':'Psi','\u03C9':'omega','\u03A9':'ohm','\u0430':'acy','\u0410':'Acy','\u0431':'bcy','\u0411':'Bcy','\u0432':'vcy','\u0412':'Vcy','\u0433':'gcy','\u0413':'Gcy','\u0453':'gjcy','\u0403':'GJcy','\u0434':'dcy','\u0414':'Dcy','\u0452':'djcy','\u0402':'DJcy','\u0435':'iecy','\u0415':'IEcy','\u0451':'iocy','\u0401':'IOcy','\u0454':'jukcy','\u0404':'Jukcy','\u0436':'zhcy','\u0416':'ZHcy','\u0437':'zcy','\u0417':'Zcy','\u0455':'dscy','\u0405':'DScy','\u0438':'icy','\u0418':'Icy','\u0456':'iukcy','\u0406':'Iukcy','\u0457':'yicy','\u0407':'YIcy','\u0439':'jcy','\u0419':'Jcy','\u0458':'jsercy','\u0408':'Jsercy','\u043A':'kcy','\u041A':'Kcy','\u045C':'kjcy','\u040C':'KJcy','\u043B':'lcy','\u041B':'Lcy','\u0459':'ljcy','\u0409':'LJcy','\u043C':'mcy','\u041C':'Mcy','\u043D':'ncy','\u041D':'Ncy','\u045A':'njcy','\u040A':'NJcy','\u043E':'ocy','\u041E':'Ocy','\u043F':'pcy','\u041F':'Pcy','\u0440':'rcy','\u0420':'Rcy','\u0441':'scy','\u0421':'Scy','\u0442':'tcy','\u0422':'Tcy','\u045B':'tshcy','\u040B':'TSHcy','\u0443':'ucy','\u0423':'Ucy','\u045E':'ubrcy','\u040E':'Ubrcy','\u0444':'fcy','\u0424':'Fcy','\u0445':'khcy','\u0425':'KHcy','\u0446':'tscy','\u0426':'TScy','\u0447':'chcy','\u0427':'CHcy','\u045F':'dzcy','\u040F':'DZcy','\u0448':'shcy','\u0428':'SHcy','\u0449':'shchcy','\u0429':'SHCHcy','\u044A':'hardcy','\u042A':'HARDcy','\u044B':'ycy','\u042B':'Ycy','\u044C':'softcy','\u042C':'SOFTcy','\u044D':'ecy','\u042D':'Ecy','\u044E':'yucy','\u042E':'YUcy','\u044F':'yacy','\u042F':'YAcy','\u2135':'aleph','\u2136':'beth','\u2137':'gimel','\u2138':'daleth'};
7999
+
8000
+ var regexEscape = /["&'<>`]/g;
8001
+ var escapeMap = {
8002
+ '"': '&quot;',
8003
+ '&': '&amp;',
8004
+ '\'': '&#x27;',
8005
+ '<': '&lt;',
8006
+ // See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the
8007
+ // following is not strictly necessary unless it’s part of a tag or an
8008
+ // unquoted attribute value. We’re only escaping it to support those
8009
+ // situations, and for XML support.
8010
+ '>': '&gt;',
8011
+ // In Internet Explorer ≤ 8, the backtick character can be used
8012
+ // to break out of (un)quoted attribute values or HTML comments.
8013
+ // See http://html5sec.org/#102, http://html5sec.org/#108, and
8014
+ // http://html5sec.org/#133.
8015
+ '`': '&#x60;'
8016
+ };
8017
+
8018
+ var regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/;
8019
+ var regexInvalidRawCodePoint = /[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;
8020
+ var regexDecode = /&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)([=a-zA-Z0-9])?/g;
8021
+ var decodeMap = {'aacute':'\xE1','Aacute':'\xC1','abreve':'\u0103','Abreve':'\u0102','ac':'\u223E','acd':'\u223F','acE':'\u223E\u0333','acirc':'\xE2','Acirc':'\xC2','acute':'\xB4','acy':'\u0430','Acy':'\u0410','aelig':'\xE6','AElig':'\xC6','af':'\u2061','afr':'\uD835\uDD1E','Afr':'\uD835\uDD04','agrave':'\xE0','Agrave':'\xC0','alefsym':'\u2135','aleph':'\u2135','alpha':'\u03B1','Alpha':'\u0391','amacr':'\u0101','Amacr':'\u0100','amalg':'\u2A3F','amp':'&','AMP':'&','and':'\u2227','And':'\u2A53','andand':'\u2A55','andd':'\u2A5C','andslope':'\u2A58','andv':'\u2A5A','ang':'\u2220','ange':'\u29A4','angle':'\u2220','angmsd':'\u2221','angmsdaa':'\u29A8','angmsdab':'\u29A9','angmsdac':'\u29AA','angmsdad':'\u29AB','angmsdae':'\u29AC','angmsdaf':'\u29AD','angmsdag':'\u29AE','angmsdah':'\u29AF','angrt':'\u221F','angrtvb':'\u22BE','angrtvbd':'\u299D','angsph':'\u2222','angst':'\xC5','angzarr':'\u237C','aogon':'\u0105','Aogon':'\u0104','aopf':'\uD835\uDD52','Aopf':'\uD835\uDD38','ap':'\u2248','apacir':'\u2A6F','ape':'\u224A','apE':'\u2A70','apid':'\u224B','apos':'\'','ApplyFunction':'\u2061','approx':'\u2248','approxeq':'\u224A','aring':'\xE5','Aring':'\xC5','ascr':'\uD835\uDCB6','Ascr':'\uD835\uDC9C','Assign':'\u2254','ast':'*','asymp':'\u2248','asympeq':'\u224D','atilde':'\xE3','Atilde':'\xC3','auml':'\xE4','Auml':'\xC4','awconint':'\u2233','awint':'\u2A11','backcong':'\u224C','backepsilon':'\u03F6','backprime':'\u2035','backsim':'\u223D','backsimeq':'\u22CD','Backslash':'\u2216','Barv':'\u2AE7','barvee':'\u22BD','barwed':'\u2305','Barwed':'\u2306','barwedge':'\u2305','bbrk':'\u23B5','bbrktbrk':'\u23B6','bcong':'\u224C','bcy':'\u0431','Bcy':'\u0411','bdquo':'\u201E','becaus':'\u2235','because':'\u2235','Because':'\u2235','bemptyv':'\u29B0','bepsi':'\u03F6','bernou':'\u212C','Bernoullis':'\u212C','beta':'\u03B2','Beta':'\u0392','beth':'\u2136','between':'\u226C','bfr':'\uD835\uDD1F','Bfr':'\uD835\uDD05','bigcap':'\u22C2','bigcirc':'\u25EF','bigcup':'\u22C3','bigodot':'\u2A00','bigoplus':'\u2A01','bigotimes':'\u2A02','bigsqcup':'\u2A06','bigstar':'\u2605','bigtriangledown':'\u25BD','bigtriangleup':'\u25B3','biguplus':'\u2A04','bigvee':'\u22C1','bigwedge':'\u22C0','bkarow':'\u290D','blacklozenge':'\u29EB','blacksquare':'\u25AA','blacktriangle':'\u25B4','blacktriangledown':'\u25BE','blacktriangleleft':'\u25C2','blacktriangleright':'\u25B8','blank':'\u2423','blk12':'\u2592','blk14':'\u2591','blk34':'\u2593','block':'\u2588','bne':'=\u20E5','bnequiv':'\u2261\u20E5','bnot':'\u2310','bNot':'\u2AED','bopf':'\uD835\uDD53','Bopf':'\uD835\uDD39','bot':'\u22A5','bottom':'\u22A5','bowtie':'\u22C8','boxbox':'\u29C9','boxdl':'\u2510','boxdL':'\u2555','boxDl':'\u2556','boxDL':'\u2557','boxdr':'\u250C','boxdR':'\u2552','boxDr':'\u2553','boxDR':'\u2554','boxh':'\u2500','boxH':'\u2550','boxhd':'\u252C','boxhD':'\u2565','boxHd':'\u2564','boxHD':'\u2566','boxhu':'\u2534','boxhU':'\u2568','boxHu':'\u2567','boxHU':'\u2569','boxminus':'\u229F','boxplus':'\u229E','boxtimes':'\u22A0','boxul':'\u2518','boxuL':'\u255B','boxUl':'\u255C','boxUL':'\u255D','boxur':'\u2514','boxuR':'\u2558','boxUr':'\u2559','boxUR':'\u255A','boxv':'\u2502','boxV':'\u2551','boxvh':'\u253C','boxvH':'\u256A','boxVh':'\u256B','boxVH':'\u256C','boxvl':'\u2524','boxvL':'\u2561','boxVl':'\u2562','boxVL':'\u2563','boxvr':'\u251C','boxvR':'\u255E','boxVr':'\u255F','boxVR':'\u2560','bprime':'\u2035','breve':'\u02D8','Breve':'\u02D8','brvbar':'\xA6','bscr':'\uD835\uDCB7','Bscr':'\u212C','bsemi':'\u204F','bsim':'\u223D','bsime':'\u22CD','bsol':'\\','bsolb':'\u29C5','bsolhsub':'\u27C8','bull':'\u2022','bullet':'\u2022','bump':'\u224E','bumpe':'\u224F','bumpE':'\u2AAE','bumpeq':'\u224F','Bumpeq':'\u224E','cacute':'\u0107','Cacute':'\u0106','cap':'\u2229','Cap':'\u22D2','capand':'\u2A44','capbrcup':'\u2A49','capcap':'\u2A4B','capcup':'\u2A47','capdot':'\u2A40','CapitalDifferentialD':'\u2145','caps':'\u2229\uFE00','caret':'\u2041','caron':'\u02C7','Cayleys':'\u212D','ccaps':'\u2A4D','ccaron':'\u010D','Ccaron':'\u010C','ccedil':'\xE7','Ccedil':'\xC7','ccirc':'\u0109','Ccirc':'\u0108','Cconint':'\u2230','ccups':'\u2A4C','ccupssm':'\u2A50','cdot':'\u010B','Cdot':'\u010A','cedil':'\xB8','Cedilla':'\xB8','cemptyv':'\u29B2','cent':'\xA2','centerdot':'\xB7','CenterDot':'\xB7','cfr':'\uD835\uDD20','Cfr':'\u212D','chcy':'\u0447','CHcy':'\u0427','check':'\u2713','checkmark':'\u2713','chi':'\u03C7','Chi':'\u03A7','cir':'\u25CB','circ':'\u02C6','circeq':'\u2257','circlearrowleft':'\u21BA','circlearrowright':'\u21BB','circledast':'\u229B','circledcirc':'\u229A','circleddash':'\u229D','CircleDot':'\u2299','circledR':'\xAE','circledS':'\u24C8','CircleMinus':'\u2296','CirclePlus':'\u2295','CircleTimes':'\u2297','cire':'\u2257','cirE':'\u29C3','cirfnint':'\u2A10','cirmid':'\u2AEF','cirscir':'\u29C2','ClockwiseContourIntegral':'\u2232','CloseCurlyDoubleQuote':'\u201D','CloseCurlyQuote':'\u2019','clubs':'\u2663','clubsuit':'\u2663','colon':':','Colon':'\u2237','colone':'\u2254','Colone':'\u2A74','coloneq':'\u2254','comma':',','commat':'@','comp':'\u2201','compfn':'\u2218','complement':'\u2201','complexes':'\u2102','cong':'\u2245','congdot':'\u2A6D','Congruent':'\u2261','conint':'\u222E','Conint':'\u222F','ContourIntegral':'\u222E','copf':'\uD835\uDD54','Copf':'\u2102','coprod':'\u2210','Coproduct':'\u2210','copy':'\xA9','COPY':'\xA9','copysr':'\u2117','CounterClockwiseContourIntegral':'\u2233','crarr':'\u21B5','cross':'\u2717','Cross':'\u2A2F','cscr':'\uD835\uDCB8','Cscr':'\uD835\uDC9E','csub':'\u2ACF','csube':'\u2AD1','csup':'\u2AD0','csupe':'\u2AD2','ctdot':'\u22EF','cudarrl':'\u2938','cudarrr':'\u2935','cuepr':'\u22DE','cuesc':'\u22DF','cularr':'\u21B6','cularrp':'\u293D','cup':'\u222A','Cup':'\u22D3','cupbrcap':'\u2A48','cupcap':'\u2A46','CupCap':'\u224D','cupcup':'\u2A4A','cupdot':'\u228D','cupor':'\u2A45','cups':'\u222A\uFE00','curarr':'\u21B7','curarrm':'\u293C','curlyeqprec':'\u22DE','curlyeqsucc':'\u22DF','curlyvee':'\u22CE','curlywedge':'\u22CF','curren':'\xA4','curvearrowleft':'\u21B6','curvearrowright':'\u21B7','cuvee':'\u22CE','cuwed':'\u22CF','cwconint':'\u2232','cwint':'\u2231','cylcty':'\u232D','dagger':'\u2020','Dagger':'\u2021','daleth':'\u2138','darr':'\u2193','dArr':'\u21D3','Darr':'\u21A1','dash':'\u2010','dashv':'\u22A3','Dashv':'\u2AE4','dbkarow':'\u290F','dblac':'\u02DD','dcaron':'\u010F','Dcaron':'\u010E','dcy':'\u0434','Dcy':'\u0414','dd':'\u2146','DD':'\u2145','ddagger':'\u2021','ddarr':'\u21CA','DDotrahd':'\u2911','ddotseq':'\u2A77','deg':'\xB0','Del':'\u2207','delta':'\u03B4','Delta':'\u0394','demptyv':'\u29B1','dfisht':'\u297F','dfr':'\uD835\uDD21','Dfr':'\uD835\uDD07','dHar':'\u2965','dharl':'\u21C3','dharr':'\u21C2','DiacriticalAcute':'\xB4','DiacriticalDot':'\u02D9','DiacriticalDoubleAcute':'\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\u02DC','diam':'\u22C4','diamond':'\u22C4','Diamond':'\u22C4','diamondsuit':'\u2666','diams':'\u2666','die':'\xA8','DifferentialD':'\u2146','digamma':'\u03DD','disin':'\u22F2','div':'\xF7','divide':'\xF7','divideontimes':'\u22C7','divonx':'\u22C7','djcy':'\u0452','DJcy':'\u0402','dlcorn':'\u231E','dlcrop':'\u230D','dollar':'$','dopf':'\uD835\uDD55','Dopf':'\uD835\uDD3B','dot':'\u02D9','Dot':'\xA8','DotDot':'\u20DC','doteq':'\u2250','doteqdot':'\u2251','DotEqual':'\u2250','dotminus':'\u2238','dotplus':'\u2214','dotsquare':'\u22A1','doublebarwedge':'\u2306','DoubleContourIntegral':'\u222F','DoubleDot':'\xA8','DoubleDownArrow':'\u21D3','DoubleLeftArrow':'\u21D0','DoubleLeftRightArrow':'\u21D4','DoubleLeftTee':'\u2AE4','DoubleLongLeftArrow':'\u27F8','DoubleLongLeftRightArrow':'\u27FA','DoubleLongRightArrow':'\u27F9','DoubleRightArrow':'\u21D2','DoubleRightTee':'\u22A8','DoubleUpArrow':'\u21D1','DoubleUpDownArrow':'\u21D5','DoubleVerticalBar':'\u2225','downarrow':'\u2193','Downarrow':'\u21D3','DownArrow':'\u2193','DownArrowBar':'\u2913','DownArrowUpArrow':'\u21F5','DownBreve':'\u0311','downdownarrows':'\u21CA','downharpoonleft':'\u21C3','downharpoonright':'\u21C2','DownLeftRightVector':'\u2950','DownLeftTeeVector':'\u295E','DownLeftVector':'\u21BD','DownLeftVectorBar':'\u2956','DownRightTeeVector':'\u295F','DownRightVector':'\u21C1','DownRightVectorBar':'\u2957','DownTee':'\u22A4','DownTeeArrow':'\u21A7','drbkarow':'\u2910','drcorn':'\u231F','drcrop':'\u230C','dscr':'\uD835\uDCB9','Dscr':'\uD835\uDC9F','dscy':'\u0455','DScy':'\u0405','dsol':'\u29F6','dstrok':'\u0111','Dstrok':'\u0110','dtdot':'\u22F1','dtri':'\u25BF','dtrif':'\u25BE','duarr':'\u21F5','duhar':'\u296F','dwangle':'\u29A6','dzcy':'\u045F','DZcy':'\u040F','dzigrarr':'\u27FF','eacute':'\xE9','Eacute':'\xC9','easter':'\u2A6E','ecaron':'\u011B','Ecaron':'\u011A','ecir':'\u2256','ecirc':'\xEA','Ecirc':'\xCA','ecolon':'\u2255','ecy':'\u044D','Ecy':'\u042D','eDDot':'\u2A77','edot':'\u0117','eDot':'\u2251','Edot':'\u0116','ee':'\u2147','efDot':'\u2252','efr':'\uD835\uDD22','Efr':'\uD835\uDD08','eg':'\u2A9A','egrave':'\xE8','Egrave':'\xC8','egs':'\u2A96','egsdot':'\u2A98','el':'\u2A99','Element':'\u2208','elinters':'\u23E7','ell':'\u2113','els':'\u2A95','elsdot':'\u2A97','emacr':'\u0113','Emacr':'\u0112','empty':'\u2205','emptyset':'\u2205','EmptySmallSquare':'\u25FB','emptyv':'\u2205','EmptyVerySmallSquare':'\u25AB','emsp':'\u2003','emsp13':'\u2004','emsp14':'\u2005','eng':'\u014B','ENG':'\u014A','ensp':'\u2002','eogon':'\u0119','Eogon':'\u0118','eopf':'\uD835\uDD56','Eopf':'\uD835\uDD3C','epar':'\u22D5','eparsl':'\u29E3','eplus':'\u2A71','epsi':'\u03B5','epsilon':'\u03B5','Epsilon':'\u0395','epsiv':'\u03F5','eqcirc':'\u2256','eqcolon':'\u2255','eqsim':'\u2242','eqslantgtr':'\u2A96','eqslantless':'\u2A95','Equal':'\u2A75','equals':'=','EqualTilde':'\u2242','equest':'\u225F','Equilibrium':'\u21CC','equiv':'\u2261','equivDD':'\u2A78','eqvparsl':'\u29E5','erarr':'\u2971','erDot':'\u2253','escr':'\u212F','Escr':'\u2130','esdot':'\u2250','esim':'\u2242','Esim':'\u2A73','eta':'\u03B7','Eta':'\u0397','eth':'\xF0','ETH':'\xD0','euml':'\xEB','Euml':'\xCB','euro':'\u20AC','excl':'!','exist':'\u2203','Exists':'\u2203','expectation':'\u2130','exponentiale':'\u2147','ExponentialE':'\u2147','fallingdotseq':'\u2252','fcy':'\u0444','Fcy':'\u0424','female':'\u2640','ffilig':'\uFB03','fflig':'\uFB00','ffllig':'\uFB04','ffr':'\uD835\uDD23','Ffr':'\uD835\uDD09','filig':'\uFB01','FilledSmallSquare':'\u25FC','FilledVerySmallSquare':'\u25AA','fjlig':'fj','flat':'\u266D','fllig':'\uFB02','fltns':'\u25B1','fnof':'\u0192','fopf':'\uD835\uDD57','Fopf':'\uD835\uDD3D','forall':'\u2200','ForAll':'\u2200','fork':'\u22D4','forkv':'\u2AD9','Fouriertrf':'\u2131','fpartint':'\u2A0D','frac12':'\xBD','frac13':'\u2153','frac14':'\xBC','frac15':'\u2155','frac16':'\u2159','frac18':'\u215B','frac23':'\u2154','frac25':'\u2156','frac34':'\xBE','frac35':'\u2157','frac38':'\u215C','frac45':'\u2158','frac56':'\u215A','frac58':'\u215D','frac78':'\u215E','frasl':'\u2044','frown':'\u2322','fscr':'\uD835\uDCBB','Fscr':'\u2131','gacute':'\u01F5','gamma':'\u03B3','Gamma':'\u0393','gammad':'\u03DD','Gammad':'\u03DC','gap':'\u2A86','gbreve':'\u011F','Gbreve':'\u011E','Gcedil':'\u0122','gcirc':'\u011D','Gcirc':'\u011C','gcy':'\u0433','Gcy':'\u0413','gdot':'\u0121','Gdot':'\u0120','ge':'\u2265','gE':'\u2267','gel':'\u22DB','gEl':'\u2A8C','geq':'\u2265','geqq':'\u2267','geqslant':'\u2A7E','ges':'\u2A7E','gescc':'\u2AA9','gesdot':'\u2A80','gesdoto':'\u2A82','gesdotol':'\u2A84','gesl':'\u22DB\uFE00','gesles':'\u2A94','gfr':'\uD835\uDD24','Gfr':'\uD835\uDD0A','gg':'\u226B','Gg':'\u22D9','ggg':'\u22D9','gimel':'\u2137','gjcy':'\u0453','GJcy':'\u0403','gl':'\u2277','gla':'\u2AA5','glE':'\u2A92','glj':'\u2AA4','gnap':'\u2A8A','gnapprox':'\u2A8A','gne':'\u2A88','gnE':'\u2269','gneq':'\u2A88','gneqq':'\u2269','gnsim':'\u22E7','gopf':'\uD835\uDD58','Gopf':'\uD835\uDD3E','grave':'`','GreaterEqual':'\u2265','GreaterEqualLess':'\u22DB','GreaterFullEqual':'\u2267','GreaterGreater':'\u2AA2','GreaterLess':'\u2277','GreaterSlantEqual':'\u2A7E','GreaterTilde':'\u2273','gscr':'\u210A','Gscr':'\uD835\uDCA2','gsim':'\u2273','gsime':'\u2A8E','gsiml':'\u2A90','gt':'>','Gt':'\u226B','GT':'>','gtcc':'\u2AA7','gtcir':'\u2A7A','gtdot':'\u22D7','gtlPar':'\u2995','gtquest':'\u2A7C','gtrapprox':'\u2A86','gtrarr':'\u2978','gtrdot':'\u22D7','gtreqless':'\u22DB','gtreqqless':'\u2A8C','gtrless':'\u2277','gtrsim':'\u2273','gvertneqq':'\u2269\uFE00','gvnE':'\u2269\uFE00','Hacek':'\u02C7','hairsp':'\u200A','half':'\xBD','hamilt':'\u210B','hardcy':'\u044A','HARDcy':'\u042A','harr':'\u2194','hArr':'\u21D4','harrcir':'\u2948','harrw':'\u21AD','Hat':'^','hbar':'\u210F','hcirc':'\u0125','Hcirc':'\u0124','hearts':'\u2665','heartsuit':'\u2665','hellip':'\u2026','hercon':'\u22B9','hfr':'\uD835\uDD25','Hfr':'\u210C','HilbertSpace':'\u210B','hksearow':'\u2925','hkswarow':'\u2926','hoarr':'\u21FF','homtht':'\u223B','hookleftarrow':'\u21A9','hookrightarrow':'\u21AA','hopf':'\uD835\uDD59','Hopf':'\u210D','horbar':'\u2015','HorizontalLine':'\u2500','hscr':'\uD835\uDCBD','Hscr':'\u210B','hslash':'\u210F','hstrok':'\u0127','Hstrok':'\u0126','HumpDownHump':'\u224E','HumpEqual':'\u224F','hybull':'\u2043','hyphen':'\u2010','iacute':'\xED','Iacute':'\xCD','ic':'\u2063','icirc':'\xEE','Icirc':'\xCE','icy':'\u0438','Icy':'\u0418','Idot':'\u0130','iecy':'\u0435','IEcy':'\u0415','iexcl':'\xA1','iff':'\u21D4','ifr':'\uD835\uDD26','Ifr':'\u2111','igrave':'\xEC','Igrave':'\xCC','ii':'\u2148','iiiint':'\u2A0C','iiint':'\u222D','iinfin':'\u29DC','iiota':'\u2129','ijlig':'\u0133','IJlig':'\u0132','Im':'\u2111','imacr':'\u012B','Imacr':'\u012A','image':'\u2111','ImaginaryI':'\u2148','imagline':'\u2110','imagpart':'\u2111','imath':'\u0131','imof':'\u22B7','imped':'\u01B5','Implies':'\u21D2','in':'\u2208','incare':'\u2105','infin':'\u221E','infintie':'\u29DD','inodot':'\u0131','int':'\u222B','Int':'\u222C','intcal':'\u22BA','integers':'\u2124','Integral':'\u222B','intercal':'\u22BA','Intersection':'\u22C2','intlarhk':'\u2A17','intprod':'\u2A3C','InvisibleComma':'\u2063','InvisibleTimes':'\u2062','iocy':'\u0451','IOcy':'\u0401','iogon':'\u012F','Iogon':'\u012E','iopf':'\uD835\uDD5A','Iopf':'\uD835\uDD40','iota':'\u03B9','Iota':'\u0399','iprod':'\u2A3C','iquest':'\xBF','iscr':'\uD835\uDCBE','Iscr':'\u2110','isin':'\u2208','isindot':'\u22F5','isinE':'\u22F9','isins':'\u22F4','isinsv':'\u22F3','isinv':'\u2208','it':'\u2062','itilde':'\u0129','Itilde':'\u0128','iukcy':'\u0456','Iukcy':'\u0406','iuml':'\xEF','Iuml':'\xCF','jcirc':'\u0135','Jcirc':'\u0134','jcy':'\u0439','Jcy':'\u0419','jfr':'\uD835\uDD27','Jfr':'\uD835\uDD0D','jmath':'\u0237','jopf':'\uD835\uDD5B','Jopf':'\uD835\uDD41','jscr':'\uD835\uDCBF','Jscr':'\uD835\uDCA5','jsercy':'\u0458','Jsercy':'\u0408','jukcy':'\u0454','Jukcy':'\u0404','kappa':'\u03BA','Kappa':'\u039A','kappav':'\u03F0','kcedil':'\u0137','Kcedil':'\u0136','kcy':'\u043A','Kcy':'\u041A','kfr':'\uD835\uDD28','Kfr':'\uD835\uDD0E','kgreen':'\u0138','khcy':'\u0445','KHcy':'\u0425','kjcy':'\u045C','KJcy':'\u040C','kopf':'\uD835\uDD5C','Kopf':'\uD835\uDD42','kscr':'\uD835\uDCC0','Kscr':'\uD835\uDCA6','lAarr':'\u21DA','lacute':'\u013A','Lacute':'\u0139','laemptyv':'\u29B4','lagran':'\u2112','lambda':'\u03BB','Lambda':'\u039B','lang':'\u27E8','Lang':'\u27EA','langd':'\u2991','langle':'\u27E8','lap':'\u2A85','Laplacetrf':'\u2112','laquo':'\xAB','larr':'\u2190','lArr':'\u21D0','Larr':'\u219E','larrb':'\u21E4','larrbfs':'\u291F','larrfs':'\u291D','larrhk':'\u21A9','larrlp':'\u21AB','larrpl':'\u2939','larrsim':'\u2973','larrtl':'\u21A2','lat':'\u2AAB','latail':'\u2919','lAtail':'\u291B','late':'\u2AAD','lates':'\u2AAD\uFE00','lbarr':'\u290C','lBarr':'\u290E','lbbrk':'\u2772','lbrace':'{','lbrack':'[','lbrke':'\u298B','lbrksld':'\u298F','lbrkslu':'\u298D','lcaron':'\u013E','Lcaron':'\u013D','lcedil':'\u013C','Lcedil':'\u013B','lceil':'\u2308','lcub':'{','lcy':'\u043B','Lcy':'\u041B','ldca':'\u2936','ldquo':'\u201C','ldquor':'\u201E','ldrdhar':'\u2967','ldrushar':'\u294B','ldsh':'\u21B2','le':'\u2264','lE':'\u2266','LeftAngleBracket':'\u27E8','leftarrow':'\u2190','Leftarrow':'\u21D0','LeftArrow':'\u2190','LeftArrowBar':'\u21E4','LeftArrowRightArrow':'\u21C6','leftarrowtail':'\u21A2','LeftCeiling':'\u2308','LeftDoubleBracket':'\u27E6','LeftDownTeeVector':'\u2961','LeftDownVector':'\u21C3','LeftDownVectorBar':'\u2959','LeftFloor':'\u230A','leftharpoondown':'\u21BD','leftharpoonup':'\u21BC','leftleftarrows':'\u21C7','leftrightarrow':'\u2194','Leftrightarrow':'\u21D4','LeftRightArrow':'\u2194','leftrightarrows':'\u21C6','leftrightharpoons':'\u21CB','leftrightsquigarrow':'\u21AD','LeftRightVector':'\u294E','LeftTee':'\u22A3','LeftTeeArrow':'\u21A4','LeftTeeVector':'\u295A','leftthreetimes':'\u22CB','LeftTriangle':'\u22B2','LeftTriangleBar':'\u29CF','LeftTriangleEqual':'\u22B4','LeftUpDownVector':'\u2951','LeftUpTeeVector':'\u2960','LeftUpVector':'\u21BF','LeftUpVectorBar':'\u2958','LeftVector':'\u21BC','LeftVectorBar':'\u2952','leg':'\u22DA','lEg':'\u2A8B','leq':'\u2264','leqq':'\u2266','leqslant':'\u2A7D','les':'\u2A7D','lescc':'\u2AA8','lesdot':'\u2A7F','lesdoto':'\u2A81','lesdotor':'\u2A83','lesg':'\u22DA\uFE00','lesges':'\u2A93','lessapprox':'\u2A85','lessdot':'\u22D6','lesseqgtr':'\u22DA','lesseqqgtr':'\u2A8B','LessEqualGreater':'\u22DA','LessFullEqual':'\u2266','LessGreater':'\u2276','lessgtr':'\u2276','LessLess':'\u2AA1','lesssim':'\u2272','LessSlantEqual':'\u2A7D','LessTilde':'\u2272','lfisht':'\u297C','lfloor':'\u230A','lfr':'\uD835\uDD29','Lfr':'\uD835\uDD0F','lg':'\u2276','lgE':'\u2A91','lHar':'\u2962','lhard':'\u21BD','lharu':'\u21BC','lharul':'\u296A','lhblk':'\u2584','ljcy':'\u0459','LJcy':'\u0409','ll':'\u226A','Ll':'\u22D8','llarr':'\u21C7','llcorner':'\u231E','Lleftarrow':'\u21DA','llhard':'\u296B','lltri':'\u25FA','lmidot':'\u0140','Lmidot':'\u013F','lmoust':'\u23B0','lmoustache':'\u23B0','lnap':'\u2A89','lnapprox':'\u2A89','lne':'\u2A87','lnE':'\u2268','lneq':'\u2A87','lneqq':'\u2268','lnsim':'\u22E6','loang':'\u27EC','loarr':'\u21FD','lobrk':'\u27E6','longleftarrow':'\u27F5','Longleftarrow':'\u27F8','LongLeftArrow':'\u27F5','longleftrightarrow':'\u27F7','Longleftrightarrow':'\u27FA','LongLeftRightArrow':'\u27F7','longmapsto':'\u27FC','longrightarrow':'\u27F6','Longrightarrow':'\u27F9','LongRightArrow':'\u27F6','looparrowleft':'\u21AB','looparrowright':'\u21AC','lopar':'\u2985','lopf':'\uD835\uDD5D','Lopf':'\uD835\uDD43','loplus':'\u2A2D','lotimes':'\u2A34','lowast':'\u2217','lowbar':'_','LowerLeftArrow':'\u2199','LowerRightArrow':'\u2198','loz':'\u25CA','lozenge':'\u25CA','lozf':'\u29EB','lpar':'(','lparlt':'\u2993','lrarr':'\u21C6','lrcorner':'\u231F','lrhar':'\u21CB','lrhard':'\u296D','lrm':'\u200E','lrtri':'\u22BF','lsaquo':'\u2039','lscr':'\uD835\uDCC1','Lscr':'\u2112','lsh':'\u21B0','Lsh':'\u21B0','lsim':'\u2272','lsime':'\u2A8D','lsimg':'\u2A8F','lsqb':'[','lsquo':'\u2018','lsquor':'\u201A','lstrok':'\u0142','Lstrok':'\u0141','lt':'<','Lt':'\u226A','LT':'<','ltcc':'\u2AA6','ltcir':'\u2A79','ltdot':'\u22D6','lthree':'\u22CB','ltimes':'\u22C9','ltlarr':'\u2976','ltquest':'\u2A7B','ltri':'\u25C3','ltrie':'\u22B4','ltrif':'\u25C2','ltrPar':'\u2996','lurdshar':'\u294A','luruhar':'\u2966','lvertneqq':'\u2268\uFE00','lvnE':'\u2268\uFE00','macr':'\xAF','male':'\u2642','malt':'\u2720','maltese':'\u2720','map':'\u21A6','Map':'\u2905','mapsto':'\u21A6','mapstodown':'\u21A7','mapstoleft':'\u21A4','mapstoup':'\u21A5','marker':'\u25AE','mcomma':'\u2A29','mcy':'\u043C','Mcy':'\u041C','mdash':'\u2014','mDDot':'\u223A','measuredangle':'\u2221','MediumSpace':'\u205F','Mellintrf':'\u2133','mfr':'\uD835\uDD2A','Mfr':'\uD835\uDD10','mho':'\u2127','micro':'\xB5','mid':'\u2223','midast':'*','midcir':'\u2AF0','middot':'\xB7','minus':'\u2212','minusb':'\u229F','minusd':'\u2238','minusdu':'\u2A2A','MinusPlus':'\u2213','mlcp':'\u2ADB','mldr':'\u2026','mnplus':'\u2213','models':'\u22A7','mopf':'\uD835\uDD5E','Mopf':'\uD835\uDD44','mp':'\u2213','mscr':'\uD835\uDCC2','Mscr':'\u2133','mstpos':'\u223E','mu':'\u03BC','Mu':'\u039C','multimap':'\u22B8','mumap':'\u22B8','nabla':'\u2207','nacute':'\u0144','Nacute':'\u0143','nang':'\u2220\u20D2','nap':'\u2249','napE':'\u2A70\u0338','napid':'\u224B\u0338','napos':'\u0149','napprox':'\u2249','natur':'\u266E','natural':'\u266E','naturals':'\u2115','nbsp':'\xA0','nbump':'\u224E\u0338','nbumpe':'\u224F\u0338','ncap':'\u2A43','ncaron':'\u0148','Ncaron':'\u0147','ncedil':'\u0146','Ncedil':'\u0145','ncong':'\u2247','ncongdot':'\u2A6D\u0338','ncup':'\u2A42','ncy':'\u043D','Ncy':'\u041D','ndash':'\u2013','ne':'\u2260','nearhk':'\u2924','nearr':'\u2197','neArr':'\u21D7','nearrow':'\u2197','nedot':'\u2250\u0338','NegativeMediumSpace':'\u200B','NegativeThickSpace':'\u200B','NegativeThinSpace':'\u200B','NegativeVeryThinSpace':'\u200B','nequiv':'\u2262','nesear':'\u2928','nesim':'\u2242\u0338','NestedGreaterGreater':'\u226B','NestedLessLess':'\u226A','NewLine':'\n','nexist':'\u2204','nexists':'\u2204','nfr':'\uD835\uDD2B','Nfr':'\uD835\uDD11','nge':'\u2271','ngE':'\u2267\u0338','ngeq':'\u2271','ngeqq':'\u2267\u0338','ngeqslant':'\u2A7E\u0338','nges':'\u2A7E\u0338','nGg':'\u22D9\u0338','ngsim':'\u2275','ngt':'\u226F','nGt':'\u226B\u20D2','ngtr':'\u226F','nGtv':'\u226B\u0338','nharr':'\u21AE','nhArr':'\u21CE','nhpar':'\u2AF2','ni':'\u220B','nis':'\u22FC','nisd':'\u22FA','niv':'\u220B','njcy':'\u045A','NJcy':'\u040A','nlarr':'\u219A','nlArr':'\u21CD','nldr':'\u2025','nle':'\u2270','nlE':'\u2266\u0338','nleftarrow':'\u219A','nLeftarrow':'\u21CD','nleftrightarrow':'\u21AE','nLeftrightarrow':'\u21CE','nleq':'\u2270','nleqq':'\u2266\u0338','nleqslant':'\u2A7D\u0338','nles':'\u2A7D\u0338','nless':'\u226E','nLl':'\u22D8\u0338','nlsim':'\u2274','nlt':'\u226E','nLt':'\u226A\u20D2','nltri':'\u22EA','nltrie':'\u22EC','nLtv':'\u226A\u0338','nmid':'\u2224','NoBreak':'\u2060','NonBreakingSpace':'\xA0','nopf':'\uD835\uDD5F','Nopf':'\u2115','not':'\xAC','Not':'\u2AEC','NotCongruent':'\u2262','NotCupCap':'\u226D','NotDoubleVerticalBar':'\u2226','NotElement':'\u2209','NotEqual':'\u2260','NotEqualTilde':'\u2242\u0338','NotExists':'\u2204','NotGreater':'\u226F','NotGreaterEqual':'\u2271','NotGreaterFullEqual':'\u2267\u0338','NotGreaterGreater':'\u226B\u0338','NotGreaterLess':'\u2279','NotGreaterSlantEqual':'\u2A7E\u0338','NotGreaterTilde':'\u2275','NotHumpDownHump':'\u224E\u0338','NotHumpEqual':'\u224F\u0338','notin':'\u2209','notindot':'\u22F5\u0338','notinE':'\u22F9\u0338','notinva':'\u2209','notinvb':'\u22F7','notinvc':'\u22F6','NotLeftTriangle':'\u22EA','NotLeftTriangleBar':'\u29CF\u0338','NotLeftTriangleEqual':'\u22EC','NotLess':'\u226E','NotLessEqual':'\u2270','NotLessGreater':'\u2278','NotLessLess':'\u226A\u0338','NotLessSlantEqual':'\u2A7D\u0338','NotLessTilde':'\u2274','NotNestedGreaterGreater':'\u2AA2\u0338','NotNestedLessLess':'\u2AA1\u0338','notni':'\u220C','notniva':'\u220C','notnivb':'\u22FE','notnivc':'\u22FD','NotPrecedes':'\u2280','NotPrecedesEqual':'\u2AAF\u0338','NotPrecedesSlantEqual':'\u22E0','NotReverseElement':'\u220C','NotRightTriangle':'\u22EB','NotRightTriangleBar':'\u29D0\u0338','NotRightTriangleEqual':'\u22ED','NotSquareSubset':'\u228F\u0338','NotSquareSubsetEqual':'\u22E2','NotSquareSuperset':'\u2290\u0338','NotSquareSupersetEqual':'\u22E3','NotSubset':'\u2282\u20D2','NotSubsetEqual':'\u2288','NotSucceeds':'\u2281','NotSucceedsEqual':'\u2AB0\u0338','NotSucceedsSlantEqual':'\u22E1','NotSucceedsTilde':'\u227F\u0338','NotSuperset':'\u2283\u20D2','NotSupersetEqual':'\u2289','NotTilde':'\u2241','NotTildeEqual':'\u2244','NotTildeFullEqual':'\u2247','NotTildeTilde':'\u2249','NotVerticalBar':'\u2224','npar':'\u2226','nparallel':'\u2226','nparsl':'\u2AFD\u20E5','npart':'\u2202\u0338','npolint':'\u2A14','npr':'\u2280','nprcue':'\u22E0','npre':'\u2AAF\u0338','nprec':'\u2280','npreceq':'\u2AAF\u0338','nrarr':'\u219B','nrArr':'\u21CF','nrarrc':'\u2933\u0338','nrarrw':'\u219D\u0338','nrightarrow':'\u219B','nRightarrow':'\u21CF','nrtri':'\u22EB','nrtrie':'\u22ED','nsc':'\u2281','nsccue':'\u22E1','nsce':'\u2AB0\u0338','nscr':'\uD835\uDCC3','Nscr':'\uD835\uDCA9','nshortmid':'\u2224','nshortparallel':'\u2226','nsim':'\u2241','nsime':'\u2244','nsimeq':'\u2244','nsmid':'\u2224','nspar':'\u2226','nsqsube':'\u22E2','nsqsupe':'\u22E3','nsub':'\u2284','nsube':'\u2288','nsubE':'\u2AC5\u0338','nsubset':'\u2282\u20D2','nsubseteq':'\u2288','nsubseteqq':'\u2AC5\u0338','nsucc':'\u2281','nsucceq':'\u2AB0\u0338','nsup':'\u2285','nsupe':'\u2289','nsupE':'\u2AC6\u0338','nsupset':'\u2283\u20D2','nsupseteq':'\u2289','nsupseteqq':'\u2AC6\u0338','ntgl':'\u2279','ntilde':'\xF1','Ntilde':'\xD1','ntlg':'\u2278','ntriangleleft':'\u22EA','ntrianglelefteq':'\u22EC','ntriangleright':'\u22EB','ntrianglerighteq':'\u22ED','nu':'\u03BD','Nu':'\u039D','num':'#','numero':'\u2116','numsp':'\u2007','nvap':'\u224D\u20D2','nvdash':'\u22AC','nvDash':'\u22AD','nVdash':'\u22AE','nVDash':'\u22AF','nvge':'\u2265\u20D2','nvgt':'>\u20D2','nvHarr':'\u2904','nvinfin':'\u29DE','nvlArr':'\u2902','nvle':'\u2264\u20D2','nvlt':'<\u20D2','nvltrie':'\u22B4\u20D2','nvrArr':'\u2903','nvrtrie':'\u22B5\u20D2','nvsim':'\u223C\u20D2','nwarhk':'\u2923','nwarr':'\u2196','nwArr':'\u21D6','nwarrow':'\u2196','nwnear':'\u2927','oacute':'\xF3','Oacute':'\xD3','oast':'\u229B','ocir':'\u229A','ocirc':'\xF4','Ocirc':'\xD4','ocy':'\u043E','Ocy':'\u041E','odash':'\u229D','odblac':'\u0151','Odblac':'\u0150','odiv':'\u2A38','odot':'\u2299','odsold':'\u29BC','oelig':'\u0153','OElig':'\u0152','ofcir':'\u29BF','ofr':'\uD835\uDD2C','Ofr':'\uD835\uDD12','ogon':'\u02DB','ograve':'\xF2','Ograve':'\xD2','ogt':'\u29C1','ohbar':'\u29B5','ohm':'\u03A9','oint':'\u222E','olarr':'\u21BA','olcir':'\u29BE','olcross':'\u29BB','oline':'\u203E','olt':'\u29C0','omacr':'\u014D','Omacr':'\u014C','omega':'\u03C9','Omega':'\u03A9','omicron':'\u03BF','Omicron':'\u039F','omid':'\u29B6','ominus':'\u2296','oopf':'\uD835\uDD60','Oopf':'\uD835\uDD46','opar':'\u29B7','OpenCurlyDoubleQuote':'\u201C','OpenCurlyQuote':'\u2018','operp':'\u29B9','oplus':'\u2295','or':'\u2228','Or':'\u2A54','orarr':'\u21BB','ord':'\u2A5D','order':'\u2134','orderof':'\u2134','ordf':'\xAA','ordm':'\xBA','origof':'\u22B6','oror':'\u2A56','orslope':'\u2A57','orv':'\u2A5B','oS':'\u24C8','oscr':'\u2134','Oscr':'\uD835\uDCAA','oslash':'\xF8','Oslash':'\xD8','osol':'\u2298','otilde':'\xF5','Otilde':'\xD5','otimes':'\u2297','Otimes':'\u2A37','otimesas':'\u2A36','ouml':'\xF6','Ouml':'\xD6','ovbar':'\u233D','OverBar':'\u203E','OverBrace':'\u23DE','OverBracket':'\u23B4','OverParenthesis':'\u23DC','par':'\u2225','para':'\xB6','parallel':'\u2225','parsim':'\u2AF3','parsl':'\u2AFD','part':'\u2202','PartialD':'\u2202','pcy':'\u043F','Pcy':'\u041F','percnt':'%','period':'.','permil':'\u2030','perp':'\u22A5','pertenk':'\u2031','pfr':'\uD835\uDD2D','Pfr':'\uD835\uDD13','phi':'\u03C6','Phi':'\u03A6','phiv':'\u03D5','phmmat':'\u2133','phone':'\u260E','pi':'\u03C0','Pi':'\u03A0','pitchfork':'\u22D4','piv':'\u03D6','planck':'\u210F','planckh':'\u210E','plankv':'\u210F','plus':'+','plusacir':'\u2A23','plusb':'\u229E','pluscir':'\u2A22','plusdo':'\u2214','plusdu':'\u2A25','pluse':'\u2A72','PlusMinus':'\xB1','plusmn':'\xB1','plussim':'\u2A26','plustwo':'\u2A27','pm':'\xB1','Poincareplane':'\u210C','pointint':'\u2A15','popf':'\uD835\uDD61','Popf':'\u2119','pound':'\xA3','pr':'\u227A','Pr':'\u2ABB','prap':'\u2AB7','prcue':'\u227C','pre':'\u2AAF','prE':'\u2AB3','prec':'\u227A','precapprox':'\u2AB7','preccurlyeq':'\u227C','Precedes':'\u227A','PrecedesEqual':'\u2AAF','PrecedesSlantEqual':'\u227C','PrecedesTilde':'\u227E','preceq':'\u2AAF','precnapprox':'\u2AB9','precneqq':'\u2AB5','precnsim':'\u22E8','precsim':'\u227E','prime':'\u2032','Prime':'\u2033','primes':'\u2119','prnap':'\u2AB9','prnE':'\u2AB5','prnsim':'\u22E8','prod':'\u220F','Product':'\u220F','profalar':'\u232E','profline':'\u2312','profsurf':'\u2313','prop':'\u221D','Proportion':'\u2237','Proportional':'\u221D','propto':'\u221D','prsim':'\u227E','prurel':'\u22B0','pscr':'\uD835\uDCC5','Pscr':'\uD835\uDCAB','psi':'\u03C8','Psi':'\u03A8','puncsp':'\u2008','qfr':'\uD835\uDD2E','Qfr':'\uD835\uDD14','qint':'\u2A0C','qopf':'\uD835\uDD62','Qopf':'\u211A','qprime':'\u2057','qscr':'\uD835\uDCC6','Qscr':'\uD835\uDCAC','quaternions':'\u210D','quatint':'\u2A16','quest':'?','questeq':'\u225F','quot':'"','QUOT':'"','rAarr':'\u21DB','race':'\u223D\u0331','racute':'\u0155','Racute':'\u0154','radic':'\u221A','raemptyv':'\u29B3','rang':'\u27E9','Rang':'\u27EB','rangd':'\u2992','range':'\u29A5','rangle':'\u27E9','raquo':'\xBB','rarr':'\u2192','rArr':'\u21D2','Rarr':'\u21A0','rarrap':'\u2975','rarrb':'\u21E5','rarrbfs':'\u2920','rarrc':'\u2933','rarrfs':'\u291E','rarrhk':'\u21AA','rarrlp':'\u21AC','rarrpl':'\u2945','rarrsim':'\u2974','rarrtl':'\u21A3','Rarrtl':'\u2916','rarrw':'\u219D','ratail':'\u291A','rAtail':'\u291C','ratio':'\u2236','rationals':'\u211A','rbarr':'\u290D','rBarr':'\u290F','RBarr':'\u2910','rbbrk':'\u2773','rbrace':'}','rbrack':']','rbrke':'\u298C','rbrksld':'\u298E','rbrkslu':'\u2990','rcaron':'\u0159','Rcaron':'\u0158','rcedil':'\u0157','Rcedil':'\u0156','rceil':'\u2309','rcub':'}','rcy':'\u0440','Rcy':'\u0420','rdca':'\u2937','rdldhar':'\u2969','rdquo':'\u201D','rdquor':'\u201D','rdsh':'\u21B3','Re':'\u211C','real':'\u211C','realine':'\u211B','realpart':'\u211C','reals':'\u211D','rect':'\u25AD','reg':'\xAE','REG':'\xAE','ReverseElement':'\u220B','ReverseEquilibrium':'\u21CB','ReverseUpEquilibrium':'\u296F','rfisht':'\u297D','rfloor':'\u230B','rfr':'\uD835\uDD2F','Rfr':'\u211C','rHar':'\u2964','rhard':'\u21C1','rharu':'\u21C0','rharul':'\u296C','rho':'\u03C1','Rho':'\u03A1','rhov':'\u03F1','RightAngleBracket':'\u27E9','rightarrow':'\u2192','Rightarrow':'\u21D2','RightArrow':'\u2192','RightArrowBar':'\u21E5','RightArrowLeftArrow':'\u21C4','rightarrowtail':'\u21A3','RightCeiling':'\u2309','RightDoubleBracket':'\u27E7','RightDownTeeVector':'\u295D','RightDownVector':'\u21C2','RightDownVectorBar':'\u2955','RightFloor':'\u230B','rightharpoondown':'\u21C1','rightharpoonup':'\u21C0','rightleftarrows':'\u21C4','rightleftharpoons':'\u21CC','rightrightarrows':'\u21C9','rightsquigarrow':'\u219D','RightTee':'\u22A2','RightTeeArrow':'\u21A6','RightTeeVector':'\u295B','rightthreetimes':'\u22CC','RightTriangle':'\u22B3','RightTriangleBar':'\u29D0','RightTriangleEqual':'\u22B5','RightUpDownVector':'\u294F','RightUpTeeVector':'\u295C','RightUpVector':'\u21BE','RightUpVectorBar':'\u2954','RightVector':'\u21C0','RightVectorBar':'\u2953','ring':'\u02DA','risingdotseq':'\u2253','rlarr':'\u21C4','rlhar':'\u21CC','rlm':'\u200F','rmoust':'\u23B1','rmoustache':'\u23B1','rnmid':'\u2AEE','roang':'\u27ED','roarr':'\u21FE','robrk':'\u27E7','ropar':'\u2986','ropf':'\uD835\uDD63','Ropf':'\u211D','roplus':'\u2A2E','rotimes':'\u2A35','RoundImplies':'\u2970','rpar':')','rpargt':'\u2994','rppolint':'\u2A12','rrarr':'\u21C9','Rrightarrow':'\u21DB','rsaquo':'\u203A','rscr':'\uD835\uDCC7','Rscr':'\u211B','rsh':'\u21B1','Rsh':'\u21B1','rsqb':']','rsquo':'\u2019','rsquor':'\u2019','rthree':'\u22CC','rtimes':'\u22CA','rtri':'\u25B9','rtrie':'\u22B5','rtrif':'\u25B8','rtriltri':'\u29CE','RuleDelayed':'\u29F4','ruluhar':'\u2968','rx':'\u211E','sacute':'\u015B','Sacute':'\u015A','sbquo':'\u201A','sc':'\u227B','Sc':'\u2ABC','scap':'\u2AB8','scaron':'\u0161','Scaron':'\u0160','sccue':'\u227D','sce':'\u2AB0','scE':'\u2AB4','scedil':'\u015F','Scedil':'\u015E','scirc':'\u015D','Scirc':'\u015C','scnap':'\u2ABA','scnE':'\u2AB6','scnsim':'\u22E9','scpolint':'\u2A13','scsim':'\u227F','scy':'\u0441','Scy':'\u0421','sdot':'\u22C5','sdotb':'\u22A1','sdote':'\u2A66','searhk':'\u2925','searr':'\u2198','seArr':'\u21D8','searrow':'\u2198','sect':'\xA7','semi':';','seswar':'\u2929','setminus':'\u2216','setmn':'\u2216','sext':'\u2736','sfr':'\uD835\uDD30','Sfr':'\uD835\uDD16','sfrown':'\u2322','sharp':'\u266F','shchcy':'\u0449','SHCHcy':'\u0429','shcy':'\u0448','SHcy':'\u0428','ShortDownArrow':'\u2193','ShortLeftArrow':'\u2190','shortmid':'\u2223','shortparallel':'\u2225','ShortRightArrow':'\u2192','ShortUpArrow':'\u2191','shy':'\xAD','sigma':'\u03C3','Sigma':'\u03A3','sigmaf':'\u03C2','sigmav':'\u03C2','sim':'\u223C','simdot':'\u2A6A','sime':'\u2243','simeq':'\u2243','simg':'\u2A9E','simgE':'\u2AA0','siml':'\u2A9D','simlE':'\u2A9F','simne':'\u2246','simplus':'\u2A24','simrarr':'\u2972','slarr':'\u2190','SmallCircle':'\u2218','smallsetminus':'\u2216','smashp':'\u2A33','smeparsl':'\u29E4','smid':'\u2223','smile':'\u2323','smt':'\u2AAA','smte':'\u2AAC','smtes':'\u2AAC\uFE00','softcy':'\u044C','SOFTcy':'\u042C','sol':'/','solb':'\u29C4','solbar':'\u233F','sopf':'\uD835\uDD64','Sopf':'\uD835\uDD4A','spades':'\u2660','spadesuit':'\u2660','spar':'\u2225','sqcap':'\u2293','sqcaps':'\u2293\uFE00','sqcup':'\u2294','sqcups':'\u2294\uFE00','Sqrt':'\u221A','sqsub':'\u228F','sqsube':'\u2291','sqsubset':'\u228F','sqsubseteq':'\u2291','sqsup':'\u2290','sqsupe':'\u2292','sqsupset':'\u2290','sqsupseteq':'\u2292','squ':'\u25A1','square':'\u25A1','Square':'\u25A1','SquareIntersection':'\u2293','SquareSubset':'\u228F','SquareSubsetEqual':'\u2291','SquareSuperset':'\u2290','SquareSupersetEqual':'\u2292','SquareUnion':'\u2294','squarf':'\u25AA','squf':'\u25AA','srarr':'\u2192','sscr':'\uD835\uDCC8','Sscr':'\uD835\uDCAE','ssetmn':'\u2216','ssmile':'\u2323','sstarf':'\u22C6','star':'\u2606','Star':'\u22C6','starf':'\u2605','straightepsilon':'\u03F5','straightphi':'\u03D5','strns':'\xAF','sub':'\u2282','Sub':'\u22D0','subdot':'\u2ABD','sube':'\u2286','subE':'\u2AC5','subedot':'\u2AC3','submult':'\u2AC1','subne':'\u228A','subnE':'\u2ACB','subplus':'\u2ABF','subrarr':'\u2979','subset':'\u2282','Subset':'\u22D0','subseteq':'\u2286','subseteqq':'\u2AC5','SubsetEqual':'\u2286','subsetneq':'\u228A','subsetneqq':'\u2ACB','subsim':'\u2AC7','subsub':'\u2AD5','subsup':'\u2AD3','succ':'\u227B','succapprox':'\u2AB8','succcurlyeq':'\u227D','Succeeds':'\u227B','SucceedsEqual':'\u2AB0','SucceedsSlantEqual':'\u227D','SucceedsTilde':'\u227F','succeq':'\u2AB0','succnapprox':'\u2ABA','succneqq':'\u2AB6','succnsim':'\u22E9','succsim':'\u227F','SuchThat':'\u220B','sum':'\u2211','Sum':'\u2211','sung':'\u266A','sup':'\u2283','Sup':'\u22D1','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','supdot':'\u2ABE','supdsub':'\u2AD8','supe':'\u2287','supE':'\u2AC6','supedot':'\u2AC4','Superset':'\u2283','SupersetEqual':'\u2287','suphsol':'\u27C9','suphsub':'\u2AD7','suplarr':'\u297B','supmult':'\u2AC2','supne':'\u228B','supnE':'\u2ACC','supplus':'\u2AC0','supset':'\u2283','Supset':'\u22D1','supseteq':'\u2287','supseteqq':'\u2AC6','supsetneq':'\u228B','supsetneqq':'\u2ACC','supsim':'\u2AC8','supsub':'\u2AD4','supsup':'\u2AD6','swarhk':'\u2926','swarr':'\u2199','swArr':'\u21D9','swarrow':'\u2199','swnwar':'\u292A','szlig':'\xDF','Tab':'\t','target':'\u2316','tau':'\u03C4','Tau':'\u03A4','tbrk':'\u23B4','tcaron':'\u0165','Tcaron':'\u0164','tcedil':'\u0163','Tcedil':'\u0162','tcy':'\u0442','Tcy':'\u0422','tdot':'\u20DB','telrec':'\u2315','tfr':'\uD835\uDD31','Tfr':'\uD835\uDD17','there4':'\u2234','therefore':'\u2234','Therefore':'\u2234','theta':'\u03B8','Theta':'\u0398','thetasym':'\u03D1','thetav':'\u03D1','thickapprox':'\u2248','thicksim':'\u223C','ThickSpace':'\u205F\u200A','thinsp':'\u2009','ThinSpace':'\u2009','thkap':'\u2248','thksim':'\u223C','thorn':'\xFE','THORN':'\xDE','tilde':'\u02DC','Tilde':'\u223C','TildeEqual':'\u2243','TildeFullEqual':'\u2245','TildeTilde':'\u2248','times':'\xD7','timesb':'\u22A0','timesbar':'\u2A31','timesd':'\u2A30','tint':'\u222D','toea':'\u2928','top':'\u22A4','topbot':'\u2336','topcir':'\u2AF1','topf':'\uD835\uDD65','Topf':'\uD835\uDD4B','topfork':'\u2ADA','tosa':'\u2929','tprime':'\u2034','trade':'\u2122','TRADE':'\u2122','triangle':'\u25B5','triangledown':'\u25BF','triangleleft':'\u25C3','trianglelefteq':'\u22B4','triangleq':'\u225C','triangleright':'\u25B9','trianglerighteq':'\u22B5','tridot':'\u25EC','trie':'\u225C','triminus':'\u2A3A','TripleDot':'\u20DB','triplus':'\u2A39','trisb':'\u29CD','tritime':'\u2A3B','trpezium':'\u23E2','tscr':'\uD835\uDCC9','Tscr':'\uD835\uDCAF','tscy':'\u0446','TScy':'\u0426','tshcy':'\u045B','TSHcy':'\u040B','tstrok':'\u0167','Tstrok':'\u0166','twixt':'\u226C','twoheadleftarrow':'\u219E','twoheadrightarrow':'\u21A0','uacute':'\xFA','Uacute':'\xDA','uarr':'\u2191','uArr':'\u21D1','Uarr':'\u219F','Uarrocir':'\u2949','ubrcy':'\u045E','Ubrcy':'\u040E','ubreve':'\u016D','Ubreve':'\u016C','ucirc':'\xFB','Ucirc':'\xDB','ucy':'\u0443','Ucy':'\u0423','udarr':'\u21C5','udblac':'\u0171','Udblac':'\u0170','udhar':'\u296E','ufisht':'\u297E','ufr':'\uD835\uDD32','Ufr':'\uD835\uDD18','ugrave':'\xF9','Ugrave':'\xD9','uHar':'\u2963','uharl':'\u21BF','uharr':'\u21BE','uhblk':'\u2580','ulcorn':'\u231C','ulcorner':'\u231C','ulcrop':'\u230F','ultri':'\u25F8','umacr':'\u016B','Umacr':'\u016A','uml':'\xA8','UnderBar':'_','UnderBrace':'\u23DF','UnderBracket':'\u23B5','UnderParenthesis':'\u23DD','Union':'\u22C3','UnionPlus':'\u228E','uogon':'\u0173','Uogon':'\u0172','uopf':'\uD835\uDD66','Uopf':'\uD835\uDD4C','uparrow':'\u2191','Uparrow':'\u21D1','UpArrow':'\u2191','UpArrowBar':'\u2912','UpArrowDownArrow':'\u21C5','updownarrow':'\u2195','Updownarrow':'\u21D5','UpDownArrow':'\u2195','UpEquilibrium':'\u296E','upharpoonleft':'\u21BF','upharpoonright':'\u21BE','uplus':'\u228E','UpperLeftArrow':'\u2196','UpperRightArrow':'\u2197','upsi':'\u03C5','Upsi':'\u03D2','upsih':'\u03D2','upsilon':'\u03C5','Upsilon':'\u03A5','UpTee':'\u22A5','UpTeeArrow':'\u21A5','upuparrows':'\u21C8','urcorn':'\u231D','urcorner':'\u231D','urcrop':'\u230E','uring':'\u016F','Uring':'\u016E','urtri':'\u25F9','uscr':'\uD835\uDCCA','Uscr':'\uD835\uDCB0','utdot':'\u22F0','utilde':'\u0169','Utilde':'\u0168','utri':'\u25B5','utrif':'\u25B4','uuarr':'\u21C8','uuml':'\xFC','Uuml':'\xDC','uwangle':'\u29A7','vangrt':'\u299C','varepsilon':'\u03F5','varkappa':'\u03F0','varnothing':'\u2205','varphi':'\u03D5','varpi':'\u03D6','varpropto':'\u221D','varr':'\u2195','vArr':'\u21D5','varrho':'\u03F1','varsigma':'\u03C2','varsubsetneq':'\u228A\uFE00','varsubsetneqq':'\u2ACB\uFE00','varsupsetneq':'\u228B\uFE00','varsupsetneqq':'\u2ACC\uFE00','vartheta':'\u03D1','vartriangleleft':'\u22B2','vartriangleright':'\u22B3','vBar':'\u2AE8','Vbar':'\u2AEB','vBarv':'\u2AE9','vcy':'\u0432','Vcy':'\u0412','vdash':'\u22A2','vDash':'\u22A8','Vdash':'\u22A9','VDash':'\u22AB','Vdashl':'\u2AE6','vee':'\u2228','Vee':'\u22C1','veebar':'\u22BB','veeeq':'\u225A','vellip':'\u22EE','verbar':'|','Verbar':'\u2016','vert':'|','Vert':'\u2016','VerticalBar':'\u2223','VerticalLine':'|','VerticalSeparator':'\u2758','VerticalTilde':'\u2240','VeryThinSpace':'\u200A','vfr':'\uD835\uDD33','Vfr':'\uD835\uDD19','vltri':'\u22B2','vnsub':'\u2282\u20D2','vnsup':'\u2283\u20D2','vopf':'\uD835\uDD67','Vopf':'\uD835\uDD4D','vprop':'\u221D','vrtri':'\u22B3','vscr':'\uD835\uDCCB','Vscr':'\uD835\uDCB1','vsubne':'\u228A\uFE00','vsubnE':'\u2ACB\uFE00','vsupne':'\u228B\uFE00','vsupnE':'\u2ACC\uFE00','Vvdash':'\u22AA','vzigzag':'\u299A','wcirc':'\u0175','Wcirc':'\u0174','wedbar':'\u2A5F','wedge':'\u2227','Wedge':'\u22C0','wedgeq':'\u2259','weierp':'\u2118','wfr':'\uD835\uDD34','Wfr':'\uD835\uDD1A','wopf':'\uD835\uDD68','Wopf':'\uD835\uDD4E','wp':'\u2118','wr':'\u2240','wreath':'\u2240','wscr':'\uD835\uDCCC','Wscr':'\uD835\uDCB2','xcap':'\u22C2','xcirc':'\u25EF','xcup':'\u22C3','xdtri':'\u25BD','xfr':'\uD835\uDD35','Xfr':'\uD835\uDD1B','xharr':'\u27F7','xhArr':'\u27FA','xi':'\u03BE','Xi':'\u039E','xlarr':'\u27F5','xlArr':'\u27F8','xmap':'\u27FC','xnis':'\u22FB','xodot':'\u2A00','xopf':'\uD835\uDD69','Xopf':'\uD835\uDD4F','xoplus':'\u2A01','xotime':'\u2A02','xrarr':'\u27F6','xrArr':'\u27F9','xscr':'\uD835\uDCCD','Xscr':'\uD835\uDCB3','xsqcup':'\u2A06','xuplus':'\u2A04','xutri':'\u25B3','xvee':'\u22C1','xwedge':'\u22C0','yacute':'\xFD','Yacute':'\xDD','yacy':'\u044F','YAcy':'\u042F','ycirc':'\u0177','Ycirc':'\u0176','ycy':'\u044B','Ycy':'\u042B','yen':'\xA5','yfr':'\uD835\uDD36','Yfr':'\uD835\uDD1C','yicy':'\u0457','YIcy':'\u0407','yopf':'\uD835\uDD6A','Yopf':'\uD835\uDD50','yscr':'\uD835\uDCCE','Yscr':'\uD835\uDCB4','yucy':'\u044E','YUcy':'\u042E','yuml':'\xFF','Yuml':'\u0178','zacute':'\u017A','Zacute':'\u0179','zcaron':'\u017E','Zcaron':'\u017D','zcy':'\u0437','Zcy':'\u0417','zdot':'\u017C','Zdot':'\u017B','zeetrf':'\u2128','ZeroWidthSpace':'\u200B','zeta':'\u03B6','Zeta':'\u0396','zfr':'\uD835\uDD37','Zfr':'\u2128','zhcy':'\u0436','ZHcy':'\u0416','zigrarr':'\u21DD','zopf':'\uD835\uDD6B','Zopf':'\u2124','zscr':'\uD835\uDCCF','Zscr':'\uD835\uDCB5','zwj':'\u200D','zwnj':'\u200C'};
8022
+ var decodeMapLegacy = {'aacute':'\xE1','Aacute':'\xC1','acirc':'\xE2','Acirc':'\xC2','acute':'\xB4','aelig':'\xE6','AElig':'\xC6','agrave':'\xE0','Agrave':'\xC0','amp':'&','AMP':'&','aring':'\xE5','Aring':'\xC5','atilde':'\xE3','Atilde':'\xC3','auml':'\xE4','Auml':'\xC4','brvbar':'\xA6','ccedil':'\xE7','Ccedil':'\xC7','cedil':'\xB8','cent':'\xA2','copy':'\xA9','COPY':'\xA9','curren':'\xA4','deg':'\xB0','divide':'\xF7','eacute':'\xE9','Eacute':'\xC9','ecirc':'\xEA','Ecirc':'\xCA','egrave':'\xE8','Egrave':'\xC8','eth':'\xF0','ETH':'\xD0','euml':'\xEB','Euml':'\xCB','frac12':'\xBD','frac14':'\xBC','frac34':'\xBE','gt':'>','GT':'>','iacute':'\xED','Iacute':'\xCD','icirc':'\xEE','Icirc':'\xCE','iexcl':'\xA1','igrave':'\xEC','Igrave':'\xCC','iquest':'\xBF','iuml':'\xEF','Iuml':'\xCF','laquo':'\xAB','lt':'<','LT':'<','macr':'\xAF','micro':'\xB5','middot':'\xB7','nbsp':'\xA0','not':'\xAC','ntilde':'\xF1','Ntilde':'\xD1','oacute':'\xF3','Oacute':'\xD3','ocirc':'\xF4','Ocirc':'\xD4','ograve':'\xF2','Ograve':'\xD2','ordf':'\xAA','ordm':'\xBA','oslash':'\xF8','Oslash':'\xD8','otilde':'\xF5','Otilde':'\xD5','ouml':'\xF6','Ouml':'\xD6','para':'\xB6','plusmn':'\xB1','pound':'\xA3','quot':'"','QUOT':'"','raquo':'\xBB','reg':'\xAE','REG':'\xAE','sect':'\xA7','shy':'\xAD','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','szlig':'\xDF','thorn':'\xFE','THORN':'\xDE','times':'\xD7','uacute':'\xFA','Uacute':'\xDA','ucirc':'\xFB','Ucirc':'\xDB','ugrave':'\xF9','Ugrave':'\xD9','uml':'\xA8','uuml':'\xFC','Uuml':'\xDC','yacute':'\xFD','Yacute':'\xDD','yen':'\xA5','yuml':'\xFF'};
8023
+ var decodeMapNumeric = {'0':'\uFFFD','128':'\u20AC','130':'\u201A','131':'\u0192','132':'\u201E','133':'\u2026','134':'\u2020','135':'\u2021','136':'\u02C6','137':'\u2030','138':'\u0160','139':'\u2039','140':'\u0152','142':'\u017D','145':'\u2018','146':'\u2019','147':'\u201C','148':'\u201D','149':'\u2022','150':'\u2013','151':'\u2014','152':'\u02DC','153':'\u2122','154':'\u0161','155':'\u203A','156':'\u0153','158':'\u017E','159':'\u0178'};
8024
+ var invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111];
8025
+
8026
+ /*--------------------------------------------------------------------------*/
8027
+
8028
+ var stringFromCharCode = String.fromCharCode;
8029
+
8030
+ var object = {};
8031
+ var hasOwnProperty = object.hasOwnProperty;
8032
+ var has = function(object, propertyName) {
8033
+ return hasOwnProperty.call(object, propertyName);
8034
+ };
8035
+
8036
+ var contains = function(array, value) {
8037
+ var index = -1;
8038
+ var length = array.length;
8039
+ while (++index < length) {
8040
+ if (array[index] == value) {
8041
+ return true;
8042
+ }
8043
+ }
8044
+ return false;
8045
+ };
8046
+
8047
+ var merge = function(options, defaults) {
8048
+ if (!options) {
8049
+ return defaults;
8050
+ }
8051
+ var result = {};
8052
+ var key;
8053
+ for (key in defaults) {
8054
+ // A `hasOwnProperty` check is not needed here, since only recognized
8055
+ // option names are used anyway. Any others are ignored.
8056
+ result[key] = has(options, key) ? options[key] : defaults[key];
8057
+ }
8058
+ return result;
8059
+ };
8060
+
8061
+ // Modified version of `ucs2encode`; see https://mths.be/punycode.
8062
+ var codePointToSymbol = function(codePoint, strict) {
8063
+ var output = '';
8064
+ if ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) {
8065
+ // See issue #4:
8066
+ // “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is
8067
+ // greater than 0x10FFFF, then this is a parse error. Return a U+FFFD
8068
+ // REPLACEMENT CHARACTER.”
8069
+ if (strict) {
8070
+ parseError('character reference outside the permissible Unicode range');
8071
+ }
8072
+ return '\uFFFD';
8073
+ }
8074
+ if (has(decodeMapNumeric, codePoint)) {
8075
+ if (strict) {
8076
+ parseError('disallowed character reference');
8077
+ }
8078
+ return decodeMapNumeric[codePoint];
8079
+ }
8080
+ if (strict && contains(invalidReferenceCodePoints, codePoint)) {
8081
+ parseError('disallowed character reference');
8082
+ }
8083
+ if (codePoint > 0xFFFF) {
8084
+ codePoint -= 0x10000;
8085
+ output += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800);
8086
+ codePoint = 0xDC00 | codePoint & 0x3FF;
8087
+ }
8088
+ output += stringFromCharCode(codePoint);
8089
+ return output;
8090
+ };
8091
+
8092
+ var hexEscape = function(codePoint) {
8093
+ return '&#x' + codePoint.toString(16).toUpperCase() + ';';
8094
+ };
8095
+
8096
+ var decEscape = function(codePoint) {
8097
+ return '&#' + codePoint + ';';
8098
+ };
8099
+
8100
+ var parseError = function(message) {
8101
+ throw Error('Parse error: ' + message);
8102
+ };
8103
+
8104
+ /*--------------------------------------------------------------------------*/
8105
+
8106
+ var encode = function(string, options) {
8107
+ options = merge(options, encode.options);
8108
+ var strict = options.strict;
8109
+ if (strict && regexInvalidRawCodePoint.test(string)) {
8110
+ parseError('forbidden code point');
8111
+ }
8112
+ var encodeEverything = options.encodeEverything;
8113
+ var useNamedReferences = options.useNamedReferences;
8114
+ var allowUnsafeSymbols = options.allowUnsafeSymbols;
8115
+ var escapeCodePoint = options.decimal ? decEscape : hexEscape;
8116
+
8117
+ var escapeBmpSymbol = function(symbol) {
8118
+ return escapeCodePoint(symbol.charCodeAt(0));
8119
+ };
8120
+
8121
+ if (encodeEverything) {
8122
+ // Encode ASCII symbols.
8123
+ string = string.replace(regexAsciiWhitelist, function(symbol) {
8124
+ // Use named references if requested & possible.
8125
+ if (useNamedReferences && has(encodeMap, symbol)) {
8126
+ return '&' + encodeMap[symbol] + ';';
8127
+ }
8128
+ return escapeBmpSymbol(symbol);
8129
+ });
8130
+ // Shorten a few escapes that represent two symbols, of which at least one
8131
+ // is within the ASCII range.
8132
+ if (useNamedReferences) {
8133
+ string = string
8134
+ .replace(/&gt;\u20D2/g, '&nvgt;')
8135
+ .replace(/&lt;\u20D2/g, '&nvlt;')
8136
+ .replace(/&#x66;&#x6A;/g, '&fjlig;');
8137
+ }
8138
+ // Encode non-ASCII symbols.
8139
+ if (useNamedReferences) {
8140
+ // Encode non-ASCII symbols that can be replaced with a named reference.
8141
+ string = string.replace(regexEncodeNonAscii, function(string) {
8142
+ // Note: there is no need to check `has(encodeMap, string)` here.
8143
+ return '&' + encodeMap[string] + ';';
8144
+ });
8145
+ }
8146
+ // Note: any remaining non-ASCII symbols are handled outside of the `if`.
8147
+ } else if (useNamedReferences) {
8148
+ // Apply named character references.
8149
+ // Encode `<>"'&` using named character references.
8150
+ if (!allowUnsafeSymbols) {
8151
+ string = string.replace(regexEscape, function(string) {
8152
+ return '&' + encodeMap[string] + ';'; // no need to check `has()` here
8153
+ });
8154
+ }
8155
+ // Shorten escapes that represent two symbols, of which at least one is
8156
+ // `<>"'&`.
8157
+ string = string
8158
+ .replace(/&gt;\u20D2/g, '&nvgt;')
8159
+ .replace(/&lt;\u20D2/g, '&nvlt;');
8160
+ // Encode non-ASCII symbols that can be replaced with a named reference.
8161
+ string = string.replace(regexEncodeNonAscii, function(string) {
8162
+ // Note: there is no need to check `has(encodeMap, string)` here.
8163
+ return '&' + encodeMap[string] + ';';
8164
+ });
8165
+ } else if (!allowUnsafeSymbols) {
8166
+ // Encode `<>"'&` using hexadecimal escapes, now that they’re not handled
8167
+ // using named character references.
8168
+ string = string.replace(regexEscape, escapeBmpSymbol);
8169
+ }
8170
+ return string
8171
+ // Encode astral symbols.
8172
+ .replace(regexAstralSymbols, function($0) {
8173
+ // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
8174
+ var high = $0.charCodeAt(0);
8175
+ var low = $0.charCodeAt(1);
8176
+ var codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;
8177
+ return escapeCodePoint(codePoint);
8178
+ })
8179
+ // Encode any remaining BMP symbols that are not printable ASCII symbols
8180
+ // using a hexadecimal escape.
8181
+ .replace(regexBmpWhitelist, escapeBmpSymbol);
8182
+ };
8183
+ // Expose default options (so they can be overridden globally).
8184
+ encode.options = {
8185
+ 'allowUnsafeSymbols': false,
8186
+ 'encodeEverything': false,
8187
+ 'strict': false,
8188
+ 'useNamedReferences': false,
8189
+ 'decimal' : false
8190
+ };
8191
+
8192
+ var decode = function(html, options) {
8193
+ options = merge(options, decode.options);
8194
+ var strict = options.strict;
8195
+ if (strict && regexInvalidEntity.test(html)) {
8196
+ parseError('malformed character reference');
8197
+ }
8198
+ return html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7) {
8199
+ var codePoint;
8200
+ var semicolon;
8201
+ var decDigits;
8202
+ var hexDigits;
8203
+ var reference;
8204
+ var next;
8205
+ if ($1) {
8206
+ // Decode decimal escapes, e.g. `&#119558;`.
8207
+ decDigits = $1;
8208
+ semicolon = $2;
8209
+ if (strict && !semicolon) {
8210
+ parseError('character reference was not terminated by a semicolon');
8211
+ }
8212
+ codePoint = parseInt(decDigits, 10);
8213
+ return codePointToSymbol(codePoint, strict);
8214
+ }
8215
+ if ($3) {
8216
+ // Decode hexadecimal escapes, e.g. `&#x1D306;`.
8217
+ hexDigits = $3;
8218
+ semicolon = $4;
8219
+ if (strict && !semicolon) {
8220
+ parseError('character reference was not terminated by a semicolon');
8221
+ }
8222
+ codePoint = parseInt(hexDigits, 16);
8223
+ return codePointToSymbol(codePoint, strict);
8224
+ }
8225
+ if ($5) {
8226
+ // Decode named character references with trailing `;`, e.g. `&copy;`.
8227
+ reference = $5;
8228
+ if (has(decodeMap, reference)) {
8229
+ return decodeMap[reference];
8230
+ } else {
8231
+ // Ambiguous ampersand. https://mths.be/notes/ambiguous-ampersands
8232
+ if (strict) {
8233
+ parseError(
8234
+ 'named character reference was not terminated by a semicolon'
8235
+ );
8236
+ }
8237
+ return $0;
8238
+ }
8239
+ }
8240
+ // If we’re still here, it’s a legacy reference for sure. No need for an
8241
+ // extra `if` check.
8242
+ // Decode named character references without trailing `;`, e.g. `&amp`
8243
+ // This is only a parse error if it gets converted to `&`, or if it is
8244
+ // followed by `=` in an attribute context.
8245
+ reference = $6;
8246
+ next = $7;
8247
+ if (next && options.isAttributeValue) {
8248
+ if (strict && next == '=') {
8249
+ parseError('`&` did not start a character reference');
8250
+ }
8251
+ return $0;
8252
+ } else {
8253
+ if (strict) {
8254
+ parseError(
8255
+ 'named character reference was not terminated by a semicolon'
8256
+ );
8257
+ }
8258
+ // Note: there is no need to check `has(decodeMapLegacy, reference)`.
8259
+ return decodeMapLegacy[reference] + (next || '');
8260
+ }
8261
+ });
8262
+ };
8263
+ // Expose default options (so they can be overridden globally).
8264
+ decode.options = {
8265
+ 'isAttributeValue': false,
8266
+ 'strict': false
8267
+ };
8268
+
8269
+ var escape = function(string) {
8270
+ return string.replace(regexEscape, function($0) {
8271
+ // Note: there is no need to check `has(escapeMap, $0)` here.
8272
+ return escapeMap[$0];
8273
+ });
8274
+ };
8275
+
8276
+ /*--------------------------------------------------------------------------*/
8277
+
8278
+ var he = {
8279
+ 'version': '1.1.1',
8280
+ 'encode': encode,
8281
+ 'decode': decode,
8282
+ 'escape': escape,
8283
+ 'unescape': decode
8284
+ };
8285
+
8286
+ // Some AMD build optimizers, like r.js, check for specific condition patterns
8287
+ // like the following:
8288
+ if (freeExports && !freeExports.nodeType) {
8289
+ if (freeModule) { // in Node.js, io.js, or RingoJS v0.8.0+
8290
+ freeModule.exports = he;
8291
+ } else { // in Narwhal or RingoJS v0.7.0-
8292
+ for (var key in he) {
8293
+ has(he, key) && (freeExports[key] = he[key]);
8294
+ }
8295
+ }
8296
+ } else { // in Rhino or a web browser
8297
+ root.he = he;
8298
+ }
8299
+
8300
+ }(commonjsGlobal));
8301
+ });
8302
+
8303
+ var TagType = {"OPENING":1, "CLOSING":2, "SELF":3, "CDATA": 4};
8304
+
8305
+ //var tagsRegx = new RegExp("<(\\/?[\\w:\\-\._]+)([^>]*)>(\\s*"+cdataRegx+")*([^<]+)?","g");
8306
+ //var tagsRegx = new RegExp("<(\\/?)((\\w*:)?([\\w:\\-\._]+))([^>]*)>([^<]*)("+cdataRegx+"([^<]*))*([^<]+)?","g");
8307
+
8308
+ //treat cdata as a tag
8309
+
8310
+
8311
+ var defaultOptions = {
8312
+ attributeNamePrefix : "@_",
8313
+ attrNodeName: false,
8314
+ textNodeName : "#text",
8315
+ ignoreAttributes : true,
8316
+ ignoreNameSpace : false,
8317
+ allowBooleanAttributes : false, //a tag can have attributes without any value
8318
+ //ignoreRootElement : false,
8319
+ parseNodeValue : true,
8320
+ parseAttributeValue : false,
8321
+ arrayMode : false,
8322
+ trimValues: true, //Trim string values of tag and attributes
8323
+ decodeHTMLchar: false,
8324
+ cdataTagName: false,
8325
+ cdataPositionChar: "\\c"
8326
+ //decodeStrict: false,
8327
+ };
8328
+
8329
+ var getTraversalObj =function (xmlData,options){
8330
+ //options = buildOptions(options);
8331
+ options = Object.assign({},defaultOptions,options);
8332
+ //xmlData = xmlData.replace(/\r?\n/g, " ");//make it single line
8333
+ xmlData = xmlData.replace(/<!--[\s\S]*?-->/g, "");//Remove comments
8334
+
8335
+ var xmlObj = new xmlNode('!xml');
8336
+ var currentNode = xmlObj;
8337
+
8338
+ var tagsRegx = new RegExp("<((!\\[CDATA\\[([\\s\\S]*?)(\\]\\]>))|(([\\w:\\-\\._]*:)?([\\w:\\-\\._]+))([^>]*)>|((\\/)(([\\w:\\-\\._]*:)?([\\w:\\-\\._]+))>))([^<]*)","g");
8339
+ var tag = tagsRegx.exec(xmlData);
8340
+ var nextTag = tagsRegx.exec(xmlData);
8341
+ while (tag) {
8342
+ var tagType = checkForTagType(tag);
8343
+
8344
+ if(tagType === TagType.CLOSING){
8345
+ //add parsed data to parent node
8346
+ if(currentNode.parent && tag[14]){
8347
+ currentNode.parent.val = util.getValue(currentNode.parent.val) + "" + processTagValue(tag[14],options);
8348
+ }
8349
+
8350
+ currentNode = currentNode.parent;
8351
+ }else if(tagType === TagType.CDATA){
8352
+ if(options.cdataTagName){
8353
+ //add cdata node
8354
+ var childNode = new xmlNode( options.cdataTagName,currentNode,tag[3]);
8355
+ childNode.attrsMap = buildAttributesMap(tag[8],options);
8356
+ currentNode.addChild(childNode);
8357
+ //for backtracking
8358
+ currentNode.val = util.getValue(currentNode.val) + options.cdataPositionChar;
8359
+ //add rest value to parent node
8360
+ if(tag[14]){
8361
+ currentNode.val += processTagValue(tag[14],options);
8362
+ }
8363
+ }else {
8364
+ currentNode.val = (currentNode.val || "") + (tag[3] || "") + processTagValue(tag[14],options);
8365
+ }
8366
+ }else if(tagType === TagType.SELF){
8367
+ var childNode = new xmlNode( options.ignoreNameSpace ? tag[7] : tag[5],currentNode, "");
8368
+ if(tag[8] && tag[8].length > 1){
8369
+ tag[8] = tag[8].substr(0,tag[8].length -1);
8370
+ }
8371
+ childNode.attrsMap = buildAttributesMap(tag[8],options);
8372
+ currentNode.addChild(childNode);
8373
+ }else {//TagType.OPENING
8374
+ var childNode = new xmlNode( options.ignoreNameSpace ? tag[7] : tag[5],currentNode,processTagValue(tag[14],options));
8375
+ childNode.attrsMap = buildAttributesMap(tag[8],options);
8376
+ currentNode.addChild(childNode);
8377
+ currentNode = childNode;
8378
+ }
8379
+
8380
+ tag = nextTag;
8381
+ nextTag = tagsRegx.exec(xmlData);
8382
+ }
8383
+
8384
+ return xmlObj;
8385
+ };
8386
+
8387
+ function processTagValue(val,options){
8388
+ if(val){
8389
+ if(options.trimValues){
8390
+ val = val.trim();
8391
+ }
8392
+ if(options.decodeHTMLchar){
8393
+ val = he.decode(val);
8394
+ }
8395
+ val = parseValue(val,options.parseNodeValue);
8396
+ }
8397
+
8398
+ return val;
8399
+ }
8400
+
8401
+ function checkForTagType(match){
8402
+ if(match[4] === "]]>"){
8403
+ return TagType.CDATA;
8404
+ }else if(match[10] === "/"){
8405
+ return TagType.CLOSING;
8406
+ }else if(typeof match[8] !== "undefined" && match[8].substr(match[8].length-1) === "/"){
8407
+ return TagType.SELF;
8408
+ }else {
8409
+ return TagType.OPENING;
8410
+ }
8411
+ }
8412
+
8413
+ var xml2json = function (xmlData,options){
8414
+ options = Object.assign({},defaultOptions,options);
8415
+ return convertToJson(getTraversalObj(xmlData,options), options);
8416
+ };
8417
+
8418
+ function resolveNameSpace(tagname,options){
8419
+ if(options.ignoreNameSpace ){
8420
+ var tags = tagname.split(":");
8421
+ var prefix = tagname.charAt(0) === "/" ? "/" : "";
8422
+ if(tags[0] === "xmlns") {
8423
+ return "";
8424
+ }
8425
+ if(tags.length === 2) {
8426
+ tagname = prefix + tags[1];
8427
+ }
8428
+ }
8429
+ return tagname;
8430
+ }
8431
+
8432
+ function parseValue(val,shouldParse){
8433
+ if(shouldParse && typeof val === "string"){
8434
+ if(val.trim() === "" || isNaN(val)){
8435
+ val = val === "true" ? true : val === "false" ? false : val;
8436
+ }else {
8437
+ if(val.indexOf(".") !== -1){
8438
+ val = Number.parseFloat(val);
8439
+ }else {
8440
+ val = Number.parseInt(val,10);
8441
+ }
8442
+ }
8443
+ return val;
8444
+ }else {
8445
+ if(util.isExist(val)) return val;
8446
+ else return "";
8447
+ }
8448
+ }
8449
+
8450
+ //TODO: change regex to capture NS
8451
+ //var attrsRegx = new RegExp("([\\w\\-\\.\\:]+)\\s*=\\s*(['\"])((.|\n)*?)\\2","gm");
8452
+ var attrsRegx = new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])(.*?)\\3)?","g");
8453
+ function buildAttributesMap(attrStr,options){
8454
+ if( !options.ignoreAttributes && typeof attrStr === "string" ){
8455
+ attrStr = attrStr.replace(/\r?\n/g, " ");
8456
+ //attrStr = attrStr || attrStr.trim();
8457
+
8458
+ var matches = util.getAllMatches(attrStr,attrsRegx);
8459
+ var len = matches.length; //don't make it inline
8460
+ var attrs = {};
8461
+ for (var i = 0; i < len ; i++) {
8462
+ var attrName = resolveNameSpace(matches[i][1],options);
8463
+ if(attrName.length) {
8464
+ if(matches[i][4] !== undefined){
8465
+ if(options.trimValues){
8466
+ matches[i][4] = matches[i][4].trim();
8467
+ }
8468
+ if(options.decodeHTMLchar){
8469
+ matches[i][4] = he.decode(matches[i][4], {isAttributeValue : true});
8470
+ }
8471
+ attrs[options.attributeNamePrefix + attrName] = parseValue(matches[i][4],options.parseAttributeValue);
8472
+ }else if(options.allowBooleanAttributes){
8473
+ attrs[options.attributeNamePrefix + attrName] = true;
8474
+ }
8475
+
8476
+ }
8477
+ }
8478
+ if(!Object.keys(attrs).length){
8479
+ return;
8480
+ }
8481
+ if(options.attrNodeName){
8482
+ var attrCollection = {};
8483
+ attrCollection[options.attrNodeName] = attrs;
8484
+ return attrCollection;
8485
+ }
8486
+ return attrs;
8487
+ }
8488
+ }
8489
+
8490
+ var convertToJson = function (node, options){
8491
+ var jObj = {};
8492
+
8493
+ //traver through all the children
8494
+ for (var index = 0; index < node.child.length; index++) {
8495
+ var prop = node.child[index].tagname;
8496
+ var obj = convertToJson(node.child[index],options);
8497
+ if(typeof jObj[prop] !== "undefined"){
8498
+ if(!Array.isArray(jObj[prop])){
8499
+ var swap = jObj[prop];
8500
+ jObj[prop] = [];
8501
+ jObj[prop].push(swap);
8502
+ }
8503
+ jObj[prop].push(obj);
8504
+ }else {
8505
+ jObj[prop] = options.arrayMode ? [obj] : obj;
8506
+ }
8507
+ }
8508
+ util.merge(jObj,node.attrsMap);
8509
+ //add attrsMap as new children
8510
+ if(util.isEmptyObject(jObj)){
8511
+ return util.isExist(node.val)? node.val : "";
8512
+ }else {
8513
+ if(util.isExist(node.val)){
8514
+ if(!(typeof node.val === "string" && (node.val === "" || node.val === options.cdataPositionChar))){
8515
+ jObj[options.textNodeName] = node.val;
8516
+ }
8517
+ }
8518
+ }
8519
+ //add value
8520
+ return jObj;
8521
+ };
8522
+
8523
+ var parse$1 = xml2json;
8524
+ var getTraversalObj_1 = getTraversalObj;
8525
+ var convertToJson_1 = convertToJson;
8526
+
8527
+ var x2j = {
8528
+ parse: parse$1,
8529
+ getTraversalObj: getTraversalObj_1,
8530
+ convertToJson: convertToJson_1
8531
+ };
8532
+
8533
+ var parse = x2j.parse;
8534
+
8535
+ function parseMetadataXml(metadataXml) {
8536
+ var opts = {
8537
+ // options for fastXmlParser to read tag attrs
8538
+ ignoreAttributes: false,
8539
+ attributeNamePrefix: "@_",
8540
+ textNodeName: "#value",
8541
+ };
8542
+ return parse(metadataXml, opts);
8543
+ }
8544
+ /**
8545
+ * Fetch an [item's metadata](https://doc.arcgis.com/en/arcgis-online/manage-data/metadata.htm) from a portal
8546
+ * and parse and return it as JSON
8547
+ * @param id item id
8548
+ * @param requestOptions
8549
+ */
8550
+ function fetchContentMetadata(id, requestOptions) {
8551
+ return getItemMetadata(id, requestOptions)
8552
+ .then(function (metadataXml) { return parseMetadataXml(metadataXml); })
8553
+ .catch(function () {
8554
+ // many items don't have metadata and the request will 404
8555
+ // in these cases we don't want to treat it as an error
8556
+ // content.metadata === null signals to consumers that
8557
+ // we attempted to fetch the metadata, but it doesn't exist
8558
+ // TODO: we should probably still throw the error if it's not a 404
8559
+ return null;
8560
+ });
8561
+ }
8562
+ var enrichGroupIds = function (input) {
8563
+ var data = input.data, stack = input.stack, requestOptions = input.requestOptions;
8564
+ var opId = stack.start("enrichGroupIds");
8565
+ return getItemGroups(data.item.id, requestOptions)
8566
+ .then(function (response) {
8567
+ var admin = response.admin, member = response.member, other = response.other;
8568
+ var groupIds = __spreadArrays(admin, member, other).map(function (group) { return group.id; });
8569
+ stack.finish(opId);
8570
+ return {
8571
+ data: __assign(__assign({}, data), { groupIds: groupIds }),
8572
+ stack: stack,
8573
+ requestOptions: requestOptions,
8574
+ };
8575
+ })
8576
+ .catch(function (error) { return handleEnrichmentError(error, input, opId); });
8577
+ };
8578
+ var enrichMetadata = function (input) {
8579
+ var data = input.data, stack = input.stack, requestOptions = input.requestOptions;
8580
+ var opId = stack.start("enrichMetadata");
8581
+ return fetchContentMetadata(data.item.id, requestOptions).then(function (metadata) {
8582
+ stack.finish(opId);
8583
+ return {
8584
+ data: __assign(__assign({}, data), { metadata: metadata }),
8585
+ stack: stack,
8586
+ requestOptions: requestOptions,
8587
+ };
8588
+ });
8589
+ // TODO: currently fetchContentMetadata will never throw, but
8590
+ // if we update it to throw for non-404 errors, need to uncomment this:
8591
+ // .catch((error) => handleEnrichmentError(error, input, opId));
8592
+ };
8593
+ var enrichOwnerUser = function (input) {
8594
+ var data = input.data, stack = input.stack, requestOptions = input.requestOptions;
8595
+ var opId = stack.start("enrichOwner");
8596
+ // w/o the : any here, I get a compile error about
8597
+ // .authentication being incompatible w/ UserSession
8598
+ var options = __assign({ username: data.item.owner }, requestOptions);
8599
+ return getUser(options)
8600
+ .then(function (ownerUser) {
8601
+ stack.finish(opId);
8602
+ return {
8603
+ data: __assign(__assign({}, data), { ownerUser: ownerUser }),
8604
+ stack: stack,
8605
+ requestOptions: requestOptions,
8606
+ };
8607
+ })
8608
+ .catch(function (error) { return handleEnrichmentError(error, input, opId); });
8609
+ };
8610
+ var enrichData = function (input) {
8611
+ var data = input.data, stack = input.stack, requestOptions = input.requestOptions;
8612
+ var opId = stack.start("enrichData");
8613
+ return getItemData(data.item.id, requestOptions)
8614
+ .then(function (itemData) {
8615
+ stack.finish(opId);
8616
+ return { data: __assign(__assign({}, data), { data: itemData }), stack: stack, requestOptions: requestOptions };
8617
+ })
8618
+ .catch(function (error) { return handleEnrichmentError(error, input, opId); });
8619
+ };
8620
+ var enrichServer = function (input) {
8621
+ var data = input.data, stack = input.stack, requestOptions = input.requestOptions;
8622
+ var opId = stack.start("enrichServer");
8623
+ var url = data.item.url;
8624
+ var options = __assign(__assign({}, requestOptions), { url: url });
8625
+ return getService(options)
8626
+ .then(function (server) {
8627
+ stack.finish(opId);
8628
+ return { data: __assign(__assign({}, data), { server: server }), stack: stack, requestOptions: requestOptions };
8629
+ })
8630
+ .catch(function (error) { return handleEnrichmentError(error, input, opId); });
8631
+ };
8632
+ var enrichLayers = function (input) {
8633
+ var data = input.data, stack = input.stack, requestOptions = input.requestOptions;
8634
+ var opId = stack.start("enrichLayers");
8635
+ var url = data.item.url;
8636
+ var options = __assign(__assign({}, requestOptions), { url: url });
8637
+ return (getAllLayersAndTables(options)
8638
+ // merge layers and tables into a single array
8639
+ // and filter out any group layers
8640
+ .then(function (response) {
8641
+ var merged = __spreadArrays(response.layers, response.tables);
8642
+ return merged.filter(function (layer) { return layer.type !== "Group Layer"; });
8643
+ })
8644
+ .then(function (layers) {
8645
+ stack.finish(opId);
8646
+ return { data: __assign(__assign({}, data), { layers: layers }), stack: stack, requestOptions: requestOptions };
8647
+ })
8648
+ .catch(function (error) { return handleEnrichmentError(error, input, opId); }));
8649
+ };
8650
+ // add the error to the content.errors,
8651
+ // log current stack operation as finished with an error
8652
+ // and return output that can be piped into the next operation
8653
+ var handleEnrichmentError = function (error, input, opId) {
8654
+ var data = input.data, stack = input.stack, requestOptions = input.requestOptions;
8655
+ stack.finish(opId, { error: error });
8656
+ var message = typeof error === "string"
8657
+ ? /* istanbul ignore next our tests only throw Error objects */
8658
+ error
8659
+ : error.message;
8660
+ var errors = data.errors || [];
8661
+ errors.push({
8662
+ // NOTE: for now we just return the message and type "Other"
8663
+ // but we could later introspect for HTTP or AGO errors
8664
+ // and/or return the status code if available
8665
+ type: "Other",
8666
+ message: message,
8667
+ });
8668
+ return { data: __assign(__assign({}, data), { errors: errors }), stack: stack, requestOptions: requestOptions };
8669
+ };
8670
+ var enrichmentOperations = {
8671
+ groupIds: enrichGroupIds,
8672
+ metadata: enrichMetadata,
8673
+ ownerUser: enrichOwnerUser,
8674
+ // TOOD: org
8675
+ data: enrichData,
8676
+ server: enrichServer,
8677
+ layers: enrichLayers,
8678
+ };
8679
+ /**
8680
+ * Fetch enrichments for an item
8681
+ * @param item
8682
+ * @param enrichments the list of enrichments to fetch
8683
+ * @param requestOptions
8684
+ * @returns an object with the item and enrichments
8685
+ * @private
8686
+ */
8687
+ var fetchItemEnrichments = function (item, enrichments, requestOptions) {
8688
+ // create a pipeline of enrichment operations
8689
+ var operations = enrichments.reduce(function (ops, enrichment) {
8690
+ var operation = enrichmentOperations[enrichment];
8691
+ // only include the enrichments that we know how to fetch
8692
+ operation && ops.push(operation);
8693
+ return ops;
8694
+ }, []);
8695
+ var pipeline = createOperationPipeline(operations);
8696
+ // execute pipeline and return the item and enrichments
8697
+ return pipeline({
8698
+ data: { item: item },
8699
+ stack: new OperationStack(),
8700
+ requestOptions: requestOptions,
8701
+ }).then(function (output) { return output.data; });
8702
+ };
8703
+
8704
+ /**
8705
+ * remote server error
8706
+ */
8707
+ var RemoteServerError = /** @class */ (function (_super) {
8708
+ __extends(RemoteServerError, _super);
8709
+ function RemoteServerError(message, url, status) {
8710
+ var _this = _super.call(this, message) || this;
8711
+ _this.status = status;
8712
+ _this.url = url;
8713
+ return _this;
8714
+ }
8715
+ return RemoteServerError;
8716
+ }(Error));
8717
+ /**
8718
+ * ```js
8719
+ * import { hubApiRequest } from "@esri/hub-common";
8720
+ * //
8721
+ * hubApiRequest(
8722
+ * "/datasets",
8723
+ * requestOptions
8724
+ * })
8725
+ * .then(response);
8726
+ * ```
8727
+ * make a request to the Hub API
8728
+ * @param route API route
8729
+ * @param requestOptions request options
8730
+ */
8731
+ function hubApiRequest(route, requestOptions) {
8732
+ // merge in default request options
8733
+ var options = __assign({
8734
+ // why do we default to GET w/ our API?
8735
+ httpMethod: "GET" }, requestOptions);
8736
+ // use fetch override if any
8737
+ var _fetch = options.fetch || fetch;
8738
+ // merge in default headers
8739
+ var headers = __assign({ "Content-Type": "application/json" }, options.headers);
8740
+ // build query params/body based on requestOptions.params
8741
+ var query;
8742
+ var body;
8743
+ if (options.httpMethod === "GET") {
8744
+ // pass params in query string
8745
+ query = options.params;
8746
+ }
8747
+ else {
8748
+ // pass params in request body
8749
+ body = JSON.stringify(options.params);
8750
+ }
8751
+ // build Hub API URL
8752
+ var url = buildUrl({
8753
+ host: getHubApiUrl(options),
8754
+ path: ("/api/v3/" + route).replace(/\/\//g, "/"),
8755
+ query: query,
8756
+ });
8757
+ return _fetch(url, {
8758
+ method: options.httpMethod,
8759
+ headers: headers,
8760
+ body: body,
8761
+ }).then(function (resp) {
8762
+ if (resp.ok) {
8763
+ return resp.json();
8764
+ }
8765
+ else {
8766
+ throw new RemoteServerError(resp.statusText, url, resp.status);
8767
+ }
8768
+ });
8769
+ }
8770
+
8771
+ // TODO: need to fetch data for client-side layer views as well
8772
+ // determine if we should fetch data for an item
8773
+ var shouldFetchData = function (item) {
8774
+ var type = normalizeItemType(item);
8775
+ var family = getFamily(type);
8776
+ var dataFamilies = ["template", "solution"];
8777
+ var dataTypes = ["Web Map", "Web Scene"];
8778
+ return includes(dataFamilies, family) || includes(dataTypes, type);
8779
+ };
8780
+ /**
8781
+ * get the default list of enrichments to fetch for content
8782
+ * @param item
8783
+ * @returns the default list of enrichments to fetch for content
8784
+ * @private
8785
+ */
8786
+ var getContentEnrichments = function (item) {
8787
+ // we fetch these enrichments for all content types
8788
+ var enrichments = [
8789
+ "groupIds",
8790
+ "metadata",
8791
+ "ownerUser",
8792
+ "org",
8793
+ ];
8794
+ // we only fetch data for certain content
8795
+ if (shouldFetchData(item)) {
8796
+ enrichments.push("data");
8797
+ }
8798
+ // we fetch server and layers for map and feature services
8799
+ return isMapOrFeatureServerUrl(item.url)
8800
+ ? enrichments.concat("server", "layers")
8801
+ : enrichments;
8802
+ };
8803
+ // build up request options to only include the above enrichments
8804
+ // that we fetch from the Hub API, and to optionally filter by slug
8805
+ var getHubEnrichmentsOptions = function (requestOptions, slug) {
8806
+ var opts = cloneObject$1(requestOptions);
8807
+ opts.params = __assign(__assign({}, opts.params), { "fields[datasets]": "slug,boundary,extent,searchDescription,statistics" });
8808
+ if (slug) {
8809
+ opts.params["filter[slug]"] = slug;
8810
+ }
8811
+ return opts;
8812
+ };
8813
+ // extract the ids and enrichments from the Hub API response
8814
+ var getDatasetEnrichments = function (dataset) {
8815
+ var _a = parseDatasetId(dataset.id), itemId = _a.itemId, layerIdString = _a.layerId;
8816
+ var layerId = layerIdString && parseInt(layerIdString, 10);
8817
+ var _b = dataset.attributes, slug = _b.slug, boundary = _b.boundary, extent = _b.extent, searchDescription = _b.searchDescription, statistics = _b.statistics;
8818
+ return {
8819
+ itemId: itemId,
8820
+ layerId: layerId,
8821
+ slug: slug,
8822
+ boundary: boundary,
8823
+ extent: extent,
8824
+ searchDescription: searchDescription,
8825
+ statistics: statistics,
8826
+ };
8827
+ };
8828
+ /**
8829
+ * fetch enrichment from the Hub API by slug
8830
+ * @param slug
8831
+ * @param requestOptions
8832
+ * @returns enrichments from the Hub API (slug, boundary, statistic, etc)
8833
+ * @private
8834
+ */
8835
+ var fetchHubEnrichmentsBySlug = function (slug, requestOptions) { return __awaiter(void 0, void 0, void 0, function () {
8836
+ var response;
8837
+ return __generator(this, function (_a) {
8838
+ switch (_a.label) {
8839
+ case 0: return [4 /*yield*/, hubApiRequest("/datasets", getHubEnrichmentsOptions(requestOptions, slug))];
8840
+ case 1:
8841
+ response = _a.sent();
8842
+ return [2 /*return*/, getDatasetEnrichments(response.data[0])];
8843
+ }
8844
+ });
8845
+ }); };
8846
+ /**
8847
+ * fetch enrichment from the Hub API by id
8848
+ * @param slug
8849
+ * @param requestOptions
8850
+ * @returns enrichments from the Hub API (slug, boundary, statistic, etc)
8851
+ * @private
8852
+ */
8853
+ var fetchHubEnrichmentsById = function (hubId, requestOptions) { return __awaiter(void 0, void 0, void 0, function () {
8854
+ var response;
8855
+ return __generator(this, function (_a) {
8856
+ switch (_a.label) {
8857
+ case 0: return [4 /*yield*/, hubApiRequest("/datasets/" + hubId, getHubEnrichmentsOptions(requestOptions))];
8858
+ case 1:
8859
+ response = _a.sent();
8860
+ return [2 /*return*/, getDatasetEnrichments(response.data)];
8861
+ }
8862
+ });
8863
+ }); };
8864
+
8865
+ var fetchItemAndEnrichments = function (itemId, options) { return __awaiter(void 0, void 0, void 0, function () {
8866
+ var item, enrichmentsToFetch, enrichments;
8867
+ return __generator(this, function (_a) {
8868
+ switch (_a.label) {
8869
+ case 0: return [4 /*yield*/, getItem(itemId, options)];
8870
+ case 1:
8871
+ item = _a.sent();
8872
+ enrichmentsToFetch = (options === null || options === void 0 ? void 0 : options.enrichments) || getContentEnrichments(item);
8873
+ return [4 /*yield*/, fetchItemEnrichments(item, enrichmentsToFetch, options)];
8874
+ case 2:
8875
+ enrichments = _a.sent();
8876
+ return [2 /*return*/, __assign(__assign({}, enrichments), { item: item })];
8877
+ }
8878
+ });
8879
+ }); };
8880
+ var fetchContentById = function (hubId, options) { return __awaiter(void 0, void 0, void 0, function () {
8881
+ var itemId, _a, item, itemEnrichments, specifiedLayerId, _b, slug, layerId, boundary, extent, searchDescription, statistics, _c;
8882
+ return __generator(this, function (_d) {
8883
+ switch (_d.label) {
8884
+ case 0:
8885
+ itemId = parseDatasetId(hubId).itemId;
8886
+ return [4 /*yield*/, fetchItemAndEnrichments(itemId, options)];
8887
+ case 1:
8888
+ _a = _d.sent(), item = _a.item, itemEnrichments = __rest(_a, ["item"]);
8889
+ specifiedLayerId = options && !isNil(options.layerId) && options.layerId;
8890
+ if (!canUseHubApiForItem(item, options)) return [3 /*break*/, 3];
8891
+ return [4 /*yield*/, fetchHubEnrichmentsById(hubId, options)];
8892
+ case 2:
8893
+ _c = _d.sent();
8894
+ return [3 /*break*/, 4];
8895
+ case 3:
8896
+ _c = {};
8897
+ _d.label = 4;
8898
+ case 4:
8899
+ _b = _c, slug = _b.slug, layerId = _b.layerId, boundary = _b.boundary, extent = _b.extent, searchDescription = _b.searchDescription, statistics = _b.statistics;
8900
+ // 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,
8902
+ extent: extent,
8903
+ searchDescription: searchDescription,
8904
+ statistics: statistics }))];
8905
+ }
8906
+ });
8907
+ }); };
8908
+ var fetchContentBySlug = function (fullyQualifiedSlug, options) { return __awaiter(void 0, void 0, void 0, function () {
8909
+ var hubEnrichments, itemId, layerId, _a, item, itemEnrichments, specifiedLayerId, slug, boundary, extent, searchDescription, statistics;
8910
+ return __generator(this, function (_b) {
8911
+ switch (_b.label) {
8912
+ case 0: return [4 /*yield*/, fetchHubEnrichmentsBySlug(fullyQualifiedSlug, options)];
8913
+ case 1:
8914
+ hubEnrichments = _b.sent();
8915
+ itemId = hubEnrichments.itemId;
8916
+ layerId = hubEnrichments.layerId;
8917
+ return [4 /*yield*/, fetchItemAndEnrichments(itemId, options)];
8918
+ case 2:
8919
+ _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];
8922
+ // we fetched Hub enrichments by slug for another dataset,
8923
+ // most likely for the parent service of this layer,
8924
+ // we need to fetch them for the specified layer instead
8925
+ layerId = specifiedLayerId;
8926
+ return [4 /*yield*/, fetchHubEnrichmentsById(itemId + "_" + layerId, options)];
8927
+ case 3:
8928
+ hubEnrichments = _b.sent();
8929
+ _b.label = 4;
8930
+ case 4:
8931
+ slug = hubEnrichments.slug, boundary = hubEnrichments.boundary, extent = hubEnrichments.extent, searchDescription = hubEnrichments.searchDescription, statistics = hubEnrichments.statistics;
8932
+ // return a new content object composed from the item and enrichments we fetched
8933
+ return [2 /*return*/, composeContent(item, __assign(__assign({ requestOptions: options }, itemEnrichments), { layerId: layerId,
8934
+ slug: slug,
8935
+ boundary: boundary,
8936
+ extent: extent,
8937
+ searchDescription: searchDescription,
8938
+ statistics: statistics }))];
8939
+ }
8940
+ });
8941
+ }); };
8942
+ /**
8943
+ * Fetch enriched content from the Portal and Hub APIs.
8944
+ * @param identifier content slug or id
8945
+ * @param options Request options with additional options to control how the content or enrichments are fetched
8946
+ * @returns A content object composed of the backing item and enrichments
8947
+ *
8948
+ * ```js
8949
+ * import { fetchContent } from '@esri/hub-common'
8950
+ * // fetch content by slug
8951
+ * const content = await fetchContent('my-org::item-name')
8952
+ * ```
8953
+ */
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
+ };
8959
+
8960
+ // TODO: remove this at next breaking version
8961
+ /**
8962
+ * ```js
8963
+ * import { getCategory } from "@esri/hub-common";
8964
+ * //
8965
+ * getCategory('Feature Layer')
8966
+ * > 'dataset'
8967
+ * ```
8968
+ * **DEPRECATED: Use getCollection() instead**
8969
+ * returns the Hub category for a given item type
8970
+ * @param itemType The ArcGIS [item type](https://developers.arcgis.com/rest/users-groups-and-items/items-and-item-types.htm).
8971
+ * @returns the category of a given item type.
8972
+ */
8973
+ function getCategory(itemType) {
8974
+ if (itemType === void 0) { itemType = ""; }
8975
+ /* tslint:disable no-console */
8976
+ console.warn("DEPRECATED: Use getCollection() instead. getCategory will be removed at v10.0.0");
8977
+ /* tslint:enable no-console */
8978
+ var collection = getCollection(itemType);
8979
+ // for backwards compatibility
8980
+ return collection === "feedback" ? "app" : collection;
8981
+ }
8982
+ /**
8983
+ * ```js
8984
+ * import { getTypes } from "@esri/hub-common";
8985
+ * //
8986
+ * getTypes('site')
8987
+ * > [ 'hub site application' ]
8988
+ * ```
8989
+ * To do.
8990
+ * @param category The ArcGIS Hub category.
8991
+ * @returns all the item types for the given category.
8992
+ *
8993
+ */
8994
+ function getTypes(category) {
8995
+ if (category === void 0) { category = ""; }
8996
+ return categories[category.toLowerCase()];
8997
+ }
8998
+ /**
8999
+ * ```js
9000
+ * import { getTypeCategories } from "@esri/hub-common";
9001
+ * //
9002
+ * getTypeCategories(item)
9003
+ * > [ 'Hub Site Application' ]
9004
+ * ```
9005
+ * @param item Item object.
9006
+ * @returns typeCategory of the input item.
9007
+ *
9008
+ */
9009
+ function getTypeCategories(item) {
9010
+ if (item === void 0) { item = {}; }
9011
+ var type = normalizeItemType(item);
9012
+ var category = getCategory(type);
9013
+ if (category) {
9014
+ // upper case first letter and return as element in array for backwards compatibility
9015
+ var chars = Array.from(category);
9016
+ chars[0] = chars[0].toUpperCase();
9017
+ return [chars.join("")];
9018
+ }
9019
+ else {
9020
+ return ["Other"];
9021
+ }
9022
+ }
9023
+ /**
9024
+ * ```js
9025
+ * import { getContentIdentifier } from "@esri/hub-common";
9026
+ * //
9027
+ * getContentIdentifier(content, site)
9028
+ * > 'f12hhjk32' // id
9029
+ * // OR
9030
+ * > 'content-slug' // human-readable slug
9031
+ * ```
9032
+ * Returns the preferred identifier for a piece of content (determined by content type):
9033
+ * - Content from the 'template' and 'feedback' families return the standard id field
9034
+ * - Pages that are linked to the site parameter will return the slug defined by the site. Otherwise, the page id will be returned
9035
+ * - All other content will return the highest available item in the following hierarchy:
9036
+ * 1. slug - includes org prefix if the site parameter is a portal or has an orgKey different from the slug prefix
9037
+ * 2. hubId
9038
+ * 3. id
9039
+ * @param content The IHubContent item
9040
+ * @param site The site to compare content against
9041
+ * @returns the preferred id for the given content.
9042
+ */
9043
+ function getContentIdentifier(content, site) {
9044
+ // We don't currently support slugs for hub initiative templates, solutions or surveys
9045
+ if (includes(["template", "feedback"], content.family)) {
9046
+ return content.id;
9047
+ }
9048
+ // If it is a hub page linked to a site, return the page slug at the
9049
+ // site data instead. Because this one is the original one that was used
9050
+ // to create the page url (not mutable once created) and the slug (below)
9051
+ // generated by the hub-indexer could simply change with page name.
9052
+ if (isPageType(content.type)) {
9053
+ // check if the page is linked to the current site
9054
+ var pages = getProp(site, "data.values.pages") || [];
9055
+ // if so, return the page slug otherwise the page id
9056
+ var page = pages.find(function (p) { return p.id === content.id; });
9057
+ return page ? page.slug : content.id;
9058
+ }
9059
+ // If a slug is present, always return it
9060
+ if (content.slug) {
9061
+ var slug = void 0;
9062
+ var orgKey = getProp(site, "domainInfo.orgKey");
9063
+ // Use namespaced slug when on the umbrella site
9064
+ if (getProp(site, "data.values.isUmbrella")) {
9065
+ slug = content.slug;
9066
+ }
9067
+ else {
9068
+ // Use shortened slug if the slug's namespace is the same as the orgKey
9069
+ slug = removeContextFromSlug(content.slug, orgKey);
9070
+ }
9071
+ return slug;
9072
+ }
9073
+ return content.hubId || content.id;
9074
+ }
9075
+ /**
9076
+ * DEPRECATED: Use getFamily() instead.
9077
+ *
9078
+ * get the HubType for a given item or item type
9079
+ *
9080
+ * @param itemOrType an item or item.type
9081
+ */
9082
+ function getItemHubType(itemOrType) {
9083
+ /* tslint:disable no-console */
9084
+ console.warn("DEPRECATED: Use getFamily() instead. getItemHubType() will be removed at v10.0.0");
9085
+ /* tslint:enable no-console */
9086
+ if (typeof itemOrType === "string") {
9087
+ itemOrType = { type: itemOrType };
9088
+ }
9089
+ var itemType = normalizeItemType(itemOrType);
9090
+ // TODO: not all categories are Hub types, may need to validate
9091
+ return getCollection(itemType);
9092
+ }
9093
+ /**
9094
+ * Convert a Portal item to Hub content
9095
+ *
9096
+ * @param item Portal Item
9097
+ * @returns Hub content
9098
+ * @export
9099
+ */
9100
+ function itemToContent(item) {
9101
+ return composeContent(item);
9102
+ }
9103
+ /**
9104
+ * Convert a Hub API dataset resource to Hub Content
9105
+ *
9106
+ * @param {DatasetResource} Dataset resource
9107
+ * @returns {IHubContent} Hub content object
9108
+ * @export
9109
+ */
9110
+ function datasetToContent(dataset) {
9111
+ // extract item from dataset, create content from the item
9112
+ var item = datasetToItem(dataset);
9113
+ // extract enrichments from attributes
9114
+ var _a = dataset.attributes,
9115
+ // item enrichments
9116
+ errors = _a.errors, boundary = _a.boundary, metadata = _a.metadata, slug = _a.slug, groupIds = _a.groupIds, orgId = _a.orgId, orgName = _a.orgName, organization = _a.organization, orgExtent = _a.orgExtent,
9117
+ // map and feature server enrichments
9118
+ server = _a.server, layers = _a.layers, layer = _a.layer, recordCount = _a.recordCount, statistics = _a.statistics,
9119
+ // additional attributes needed
9120
+ extent = _a.extent, searchDescription = _a.searchDescription;
9121
+ // get the layerId from the layer
9122
+ var layerId = layer && layer.id;
9123
+ // re-assemble the org as an enrichment
9124
+ var org = orgId && {
9125
+ id: orgId,
9126
+ name: orgName || organization,
9127
+ extent: orgExtent,
9128
+ };
9129
+ // compose a content out of the above
9130
+ return composeContent(item, {
9131
+ layerId: layerId,
9132
+ slug: slug,
9133
+ errors: errors,
9134
+ // setting this to null signals to enrichMetadata to skip this
9135
+ metadata: metadata || null,
9136
+ groupIds: groupIds,
9137
+ org: org,
9138
+ server: server,
9139
+ layers: layers,
9140
+ recordCount: recordCount,
9141
+ boundary: boundary,
9142
+ extent: extent,
9143
+ searchDescription: searchDescription,
9144
+ statistics: statistics,
9145
+ });
9146
+ }
9147
+ /**
9148
+ * Convert a Hub API dataset resource to a portal item
9149
+ *
9150
+ * @param {DatasetResource} Dataset resource
9151
+ * @returns {IItem} portal item
9152
+ * @export
9153
+ */
9154
+ function datasetToItem(dataset) {
9155
+ if (!dataset) {
9156
+ return;
9157
+ }
9158
+ var id = dataset.id, attributes = dataset.attributes;
9159
+ if (!attributes) {
9160
+ return;
9161
+ }
9162
+ // parse item id
9163
+ var itemId = parseDatasetId(id).itemId;
9164
+ // read item properties from attributes
9165
+ // NOTE: we attempt to read all item properties
9166
+ // even though some may not be currently returned
9167
+ var
9168
+ // start w/ item properties from
9169
+ // https://developers.arcgis.com/rest/users-groups-and-items/item.htm
9170
+ owner = attributes.owner, orgId = attributes.orgId, created = attributes.created,
9171
+ // the Hub API returns item.modified in attributes.itemModified (below)
9172
+ modified = attributes.modified,
9173
+ // NOTE: we use attributes.name to store the title or the service/layer name
9174
+ // but in Portal name is only used for file types to store the file name (read only)
9175
+ name = attributes.name, title = attributes.title, type = attributes.type, typeKeywords = attributes.typeKeywords, description = attributes.description, snippet = attributes.snippet, tags = attributes.tags, thumbnail = attributes.thumbnail,
9176
+ // the Hub API returns item.extent in attributes.itemExtent (below)
9177
+ // extent,
9178
+ categories = attributes.categories, contentStatus = attributes.contentStatus,
9179
+ // the Hub API doesn't currently return spatialReference
9180
+ spatialReference = attributes.spatialReference,
9181
+ // the Hub API doesn't currently return accessInformation
9182
+ accessInformation = attributes.accessInformation, licenseInfo = attributes.licenseInfo, culture = attributes.culture, url = attributes.url, access = attributes.access,
9183
+ // the Hub API doesn't currently return proxyFilter
9184
+ proxyFilter = attributes.proxyFilter, properties = attributes.properties,
9185
+ // the Hub API doesn't currently return appCategories, industries,
9186
+ // languages, largeThumbnail, banner, screenshots, listed, ownerFolder
9187
+ appCategories = attributes.appCategories, industries = attributes.industries, languages = attributes.languages, largeThumbnail = attributes.largeThumbnail, banner = attributes.banner, screenshots = attributes.screenshots, listed = attributes.listed, ownerFolder = attributes.ownerFolder, size = attributes.size,
9188
+ // the Hub API doesn't currently return protected
9189
+ isProtected = attributes.protected, commentsEnabled = attributes.commentsEnabled,
9190
+ // the Hub API doesn't currently return numComments, numRatings,
9191
+ // avgRating, numViews, itemControl, scoreCompleteness
9192
+ numComments = attributes.numComments, numRatings = attributes.numRatings, avgRating = attributes.avgRating, numViews = attributes.numViews, itemControl = attributes.itemControl, scoreCompleteness = attributes.scoreCompleteness,
9193
+ // additional attributes we'll need
9194
+ // to derive the above values when missing
9195
+ itemExtent = attributes.itemExtent, itemModified = attributes.itemModified, modifiedProvenance = attributes.modifiedProvenance, serviceSpatialReference = attributes.serviceSpatialReference;
9196
+ // layer datasets will get their type from the layer
9197
+ // so we will need to derive the item type from the URL
9198
+ var serviceType = url && getServiceTypeFromUrl(url);
9199
+ // build and return an item from properties
9200
+ // NOTE: we currently do NOT provide default values
9201
+ // (i.e. null for scalar attributes, [] for arrays, etc)
9202
+ // for attributes that are not returned by the Hub API
9203
+ // this helps distinguish an item that comes from the API
9204
+ // but forces all consumers to do handle missing properties
9205
+ return {
9206
+ id: itemId,
9207
+ owner: owner,
9208
+ orgId: orgId,
9209
+ created: created,
9210
+ // for feature layers, modified will usually come from the layer so
9211
+ // we prefer itemModified, but fall back to modified if it came from the item
9212
+ modified: (itemModified ||
9213
+ (modifiedProvenance === "item.modified" && modified)),
9214
+ title: (title || name),
9215
+ type: serviceType || type,
9216
+ typeKeywords: typeKeywords,
9217
+ description: description,
9218
+ tags: tags,
9219
+ snippet: snippet,
7663
9220
  thumbnail: thumbnail,
7664
9221
  extent: itemExtent ||
7665
9222
  /* istanbul ignore next: API should always return itemExtent, but we default to [] just in case */ [],
@@ -10262,73 +11819,6 @@
10262
11819
  return HubProjectManager;
10263
11820
  }());
10264
11821
 
10265
- /**
10266
- * remote server error
10267
- */
10268
- var RemoteServerError = /** @class */ (function (_super) {
10269
- __extends(RemoteServerError, _super);
10270
- function RemoteServerError(message, url, status) {
10271
- var _this = _super.call(this, message) || this;
10272
- _this.status = status;
10273
- _this.url = url;
10274
- return _this;
10275
- }
10276
- return RemoteServerError;
10277
- }(Error));
10278
- /**
10279
- * ```js
10280
- * import { hubApiRequest } from "@esri/hub-common";
10281
- * //
10282
- * hubApiRequest(
10283
- * "/datasets",
10284
- * requestOptions
10285
- * })
10286
- * .then(response);
10287
- * ```
10288
- * make a request to the Hub API
10289
- * @param route API route
10290
- * @param requestOptions request options
10291
- */
10292
- function hubApiRequest(route, requestOptions) {
10293
- // merge in default request options
10294
- var options = __assign({
10295
- // why do we default to GET w/ our API?
10296
- httpMethod: "GET" }, requestOptions);
10297
- // use fetch override if any
10298
- var _fetch = options.fetch || fetch;
10299
- // merge in default headers
10300
- var headers = __assign({ "Content-Type": "application/json" }, options.headers);
10301
- // build query params/body based on requestOptions.params
10302
- var query;
10303
- var body;
10304
- if (options.httpMethod === "GET") {
10305
- // pass params in query string
10306
- query = options.params;
10307
- }
10308
- else {
10309
- // pass params in request body
10310
- body = JSON.stringify(options.params);
10311
- }
10312
- // build Hub API URL
10313
- var url = buildUrl({
10314
- host: getHubApiUrl(options),
10315
- path: ("/api/v3/" + route).replace(/\/\//g, "/"),
10316
- query: query,
10317
- });
10318
- return _fetch(url, {
10319
- method: options.httpMethod,
10320
- headers: headers,
10321
- body: body,
10322
- }).then(function (resp) {
10323
- if (resp.ok) {
10324
- return resp.json();
10325
- }
10326
- else {
10327
- throw new RemoteServerError(resp.statusText, url, resp.status);
10328
- }
10329
- });
10330
- }
10331
-
10332
11822
  /**
10333
11823
  * Add a token to the resource request if the request is to the portal
10334
11824
  * @param {string} url Resource Url
@@ -12586,475 +14076,216 @@
12586
14076
  /**
12587
14077
  * Gets the primary input Feature Service for the given
12588
14078
  * Form ID. This will be the Fieldworker view, if it exists,
12589
- * otherwise the source Feature Service.
12590
- * @param {string} formId The Form ID
12591
- * @param requestOptions The request options
12592
- * @returns {Promise<IModel>}
12593
- */
12594
- var getInputFeatureServiceModel = function (formId, requestOptions) {
12595
- return getRelatedItems(__assign({ id: formId, relationshipType: "Survey2Service", direction: "forward" }, requestOptions)).then(function (_a) {
12596
- var featureService = _a.relatedItems[0];
12597
- var model;
12598
- if (featureService) {
12599
- model = { item: featureService };
12600
- }
12601
- return model;
12602
- });
12603
- };
12604
-
12605
- /* Copyright (c) 2020 Environmental Systems Research Institute, Inc.
12606
- * Apache-2.0 */
12607
- /**
12608
- * Fetches a Survey's source Feature Service from a given
12609
- * Fieldworker View ID
12610
- * @param {string} fieldworkerId The Fieldworker View ID
12611
- * @param {IRequestOptions} requestOptions The request options
12612
- * @returns {Promise<IModel>}
12613
- */
12614
- var getSourceFeatureServiceModelFromFieldworker = function (fieldworkerId, requestOptions) {
12615
- return getRelatedItems(__assign({ id: fieldworkerId, relationshipType: "Service2Data", direction: "forward" }, requestOptions)).then(function (_a) {
12616
- var featureService = _a.relatedItems[0];
12617
- var model;
12618
- if (featureService) {
12619
- model = { item: featureService };
12620
- }
12621
- return model;
12622
- });
12623
- };
12624
-
12625
- /* Copyright (c) 2020 Environmental Systems Research Institute, Inc.
12626
- * Apache-2.0 */
12627
- /**
12628
- * Fetches a Survey's Stakeholder View for a given
12629
- * Form ID
12630
- * @param {string} formId A Form ID
12631
- * @param {IRequestOptions} requestOptions The request options
12632
- * @returns {Promise<IModel>}
12633
- */
12634
- var getStakeholderModel = function (formId, requestOptions) {
12635
- return getRelatedItems(__assign({ id: formId, relationshipType: "Survey2Data", direction: "forward" }, requestOptions)).then(function (_a) {
12636
- var stakeholderView = _a.relatedItems[0];
12637
- var model;
12638
- if (stakeholderView) {
12639
- model = { item: stakeholderView };
12640
- }
12641
- return model;
12642
- });
12643
- };
12644
-
12645
- /**
12646
- * Determines if the provided Feature Service item is a
12647
- * Fieldworker View
12648
- * @param {IItem} featureServiceItem
12649
- * @returns {boolean}
12650
- */
12651
- function isFieldworkerView(featureServiceItem) {
12652
- var hasTypekeyword = function (typeKeyword) {
12653
- return featureServiceItem.typeKeywords.indexOf(typeKeyword) > -1;
12654
- };
12655
- // Survey123 only recently added the "FieldworkerView" typekeyword
12656
- var isFieldworker = hasTypekeyword("FieldworkerView");
12657
- // we should support previously created fieldworkers too
12658
- if (!isFieldworker) {
12659
- var hasExpectedTypeKeywords = [
12660
- "Survey123",
12661
- "Feature Service",
12662
- "View Service",
12663
- ].every(hasTypekeyword);
12664
- isFieldworker =
12665
- hasExpectedTypeKeywords && !hasTypekeyword("StakeholderView");
12666
- }
12667
- return isFieldworker;
12668
- }
12669
-
12670
- /* Copyright (c) 2020 Environmental Systems Research Institute, Inc.
12671
- * Apache-2.0 */
12672
- /**
12673
- * Builds a dictionary of Survey items for the given Form model
12674
- * @param {string} formId The Form ID of the survey
12675
- * @param {IRequestOptions} requestOptions The request options
12676
- * @returns {Promise<IGetSurveyModelsResponse>}
12677
- */
12678
- var getSurveyModels = function (formItemOrId, requestOptions) {
12679
- var fieldworker;
12680
- var stakeholder;
12681
- var getForm = function () {
12682
- return typeof formItemOrId === "string"
12683
- ? getItem(formItemOrId, requestOptions)
12684
- : Promise.resolve(formItemOrId);
12685
- };
12686
- return getForm().then(function (form) {
12687
- var promises = [
12688
- // the primary input will be the fieldworker (if it exists), otherwise
12689
- // the source feature service.
12690
- getInputFeatureServiceModel(form.id, requestOptions),
12691
- getStakeholderModel(form.id, requestOptions),
12692
- ];
12693
- return Promise.all(promises)
12694
- .then(function (_a) {
12695
- var featureServiceOrFieldworkerModelResult = _a[0], stakeholderResult = _a[1];
12696
- stakeholder = stakeholderResult;
12697
- if (featureServiceOrFieldworkerModelResult &&
12698
- isFieldworkerView(featureServiceOrFieldworkerModelResult.item)) {
12699
- fieldworker = featureServiceOrFieldworkerModelResult;
12700
- // if the primary input is the fieldworker, fetch
12701
- // the source feature service
12702
- return getSourceFeatureServiceModelFromFieldworker(fieldworker.item.id, requestOptions);
12703
- }
12704
- else {
12705
- return featureServiceOrFieldworkerModelResult;
12706
- }
12707
- })
12708
- .then(function (featureService) {
12709
- return {
12710
- form: { item: form },
12711
- featureService: featureService,
12712
- fieldworker: fieldworker,
12713
- stakeholder: stakeholder,
12714
- };
12715
- });
14079
+ * otherwise the source Feature Service.
14080
+ * @param {string} formId The Form ID
14081
+ * @param requestOptions The request options
14082
+ * @returns {Promise<IModel>}
14083
+ */
14084
+ var getInputFeatureServiceModel = function (formId, requestOptions) {
14085
+ return getRelatedItems(__assign({ id: formId, relationshipType: "Survey2Service", direction: "forward" }, requestOptions)).then(function (_a) {
14086
+ var featureService = _a.relatedItems[0];
14087
+ var model;
14088
+ if (featureService) {
14089
+ model = { item: featureService };
14090
+ }
14091
+ return model;
12716
14092
  });
12717
14093
  };
12718
14094
 
14095
+ /* Copyright (c) 2020 Environmental Systems Research Institute, Inc.
14096
+ * Apache-2.0 */
12719
14097
  /**
12720
- * Hub class can be used as an entry point to managing
12721
- * content, teams, sites, projects etc, in an organization's Hub.
12722
- *
12723
- * ```js
12724
- * import {Hub} from '@esri/hub-common';
12725
- * // create a Hub instance, authenticating as a specific user
12726
- * // working against arcgis online
12727
- * const myHub = await Hub.create({authOptions: {username: "casey", password: "jones"}});
12728
- *
12729
- * myHub.context.currentUser //=> {username: "casey", ...} as IUser
12730
- *
12731
- * const pavingProject = await myHub.projects.create({name: "12th Street Paving"});
12732
- * pavingProject.summary = "This is the 2024 planned paving of 12th Street, between 8th and 11th Ave";
12733
- * await myHub.projects.update(pavingProject);
12734
- * ```
12735
- *
12736
- * This is a convenience class. Hub Managers can be created
12737
- * directly, or the underlying functions can be imported an used
12738
- * as need for scenarios where these class structures introduce
12739
- * unwanted complexity
14098
+ * Fetches a Survey's source Feature Service from a given
14099
+ * Fieldworker View ID
14100
+ * @param {string} fieldworkerId The Fieldworker View ID
14101
+ * @param {IRequestOptions} requestOptions The request options
14102
+ * @returns {Promise<IModel>}
12740
14103
  */
12741
- var Hub = /** @class */ (function () {
12742
- /**
12743
- * Private so we can employ a factory function to do
12744
- * async work during creation
12745
- * @param contextManager
12746
- */
12747
- function Hub(contextManager) {
12748
- this._contextManager = contextManager;
12749
- }
12750
- /**
12751
- * Factory function to construct a new Hub instance.
12752
- * @param contextManager
12753
- * @returns
12754
- */
12755
- Hub.create = function (options) {
12756
- return __awaiter(this, void 0, void 0, function () {
12757
- var opts, mgr;
12758
- return __generator(this, function (_a) {
12759
- switch (_a.label) {
12760
- case 0:
12761
- if (!options.contextManager) return [3 /*break*/, 1];
12762
- return [2 /*return*/, new Hub(options.contextManager)];
12763
- case 1:
12764
- opts = options.managerOptions || {};
12765
- return [4 /*yield*/, ArcGISContextManager.create(opts)];
12766
- case 2:
12767
- mgr = _a.sent();
12768
- return [2 /*return*/, new Hub(mgr)];
12769
- }
12770
- });
12771
- });
12772
- };
12773
- Object.defineProperty(Hub.prototype, "context", {
12774
- /**
12775
- * Getter to abstract the context manager
12776
- */
12777
- get: function () {
12778
- return this._contextManager.context;
12779
- },
12780
- enumerable: false,
12781
- configurable: true
12782
- });
12783
- Object.defineProperty(Hub.prototype, "projects", {
12784
- /**
12785
- * HubProjectManager for the current Hub
12786
- * @returns
12787
- */
12788
- get: function () {
12789
- if (!this._projectManager) {
12790
- this._projectManager = HubProjectManager.init(this._contextManager);
12791
- }
12792
- return this._projectManager;
12793
- },
12794
- enumerable: false,
12795
- configurable: true
14104
+ var getSourceFeatureServiceModelFromFieldworker = function (fieldworkerId, requestOptions) {
14105
+ return getRelatedItems(__assign({ id: fieldworkerId, relationshipType: "Service2Data", direction: "forward" }, requestOptions)).then(function (_a) {
14106
+ var featureService = _a.relatedItems[0];
14107
+ var model;
14108
+ if (featureService) {
14109
+ model = { item: featureService };
14110
+ }
14111
+ return model;
12796
14112
  });
12797
- return Hub;
12798
- }());
14113
+ };
12799
14114
 
12800
- /* Copyright (c) 2018-2020 Environmental Systems Research Institute, Inc.
14115
+ /* Copyright (c) 2020 Environmental Systems Research Institute, Inc.
12801
14116
  * Apache-2.0 */
12802
14117
  /**
12803
- * Allows an application to track a series of operations, storing information
12804
- * about the arguments passes in and the results returned
12805
- *
12806
- * ```js
12807
- * import { OperationStack } from '@esri/solution-common';
12808
- *
12809
- * const stack = new OperationStack();
12810
- *
12811
- * // start an operation by type
12812
- * const id = stack.start('getItem');
12813
- * //.. work happens...
12814
- * stack.finish(id);
12815
- *
12816
- * // start an operation with an Operation object
12817
- * stack.start({
12818
- * id: 'createItem_1',
12819
- * type: 'createItem',
12820
- * inputs: {
12821
- * item: {...truncated...},
12822
- * portal: 'https://www.arcgis.com',
12823
- * username: 'jsmith'
12824
- * },
12825
- * });
12826
- * // make the call
12827
- * stack.finish('createItem_1', {newItemId: '00cf213'});
12828
- *
12829
- * // later you can get that information back out of the stack
12830
- * const prevOp = stack.getOperation('createItem_1);
12831
- *
12832
- * // and if you need to roll back you can use the
12833
- * // .cleanup and .output properties to help orchestrate
12834
- *
12835
- * ```
12836
- *
12837
- *
12838
- * Can be used to implement "atomic" operations in an environment that does not
12839
- * have this as a core feature
14118
+ * Fetches a Survey's Stakeholder View for a given
14119
+ * Form ID
14120
+ * @param {string} formId A Form ID
14121
+ * @param {IRequestOptions} requestOptions The request options
14122
+ * @returns {Promise<IModel>}
12840
14123
  */
12841
- var OperationStack = /** @class */ (function () {
12842
- /**
12843
- * Creates an instance of OperationStack.
12844
- * @memberof OperationStack
12845
- */
12846
- function OperationStack() {
12847
- this.operations = [];
12848
- }
12849
- /**
12850
- * Start an Operation
12851
- *
12852
- * ```js
12853
- * const stack = new OperationStack();
12854
- * stack.startOperation({
12855
- * id: 'get-bc3',
12856
- * type: 'getItem',
12857
- * cleanup: 'n/a',
12858
- * inputs: {
12859
- * id: 'bc3',
12860
- * owner: 'vader'
12861
- * }
12862
- * });
12863
- * // do work
12864
- * stack.finish('get-bc3');
12865
- * ```
12866
- *
12867
- *
12868
- * @param {IOperation} operation
12869
- * @memberof OperationStack
12870
- */
12871
- OperationStack.prototype.startOperation = function (operation) {
12872
- var op = cloneObject$1(operation);
12873
- op.startedAt = new Date().getTime();
12874
- op.state = "working";
12875
- this.operations.push(op);
12876
- };
12877
- /**
12878
- * Start an operation without requiring a full operation
12879
- *
12880
- * ```js
12881
- * const opId = stack.start('getItems');
12882
- * //...work happens
12883
- * stack.finish(opId);
12884
- * ```
12885
- *
12886
- * @param {string} type Type of the operation. i.e. getItem
12887
- * @param {Record<string, unknown>} [params] optionally pass in id, inputs, cleanup
12888
- * @returns {string} Identifier of the new stack entry
12889
- * @memberof OperationStack
12890
- */
12891
- OperationStack.prototype.start = function (type, params) {
12892
- var op = {
12893
- type: type,
12894
- id: getWithDefault$1(params, "id", createId(type + "_")),
12895
- inputs: getWithDefault$1(params, "inputs", {}),
12896
- cleanup: getWithDefault$1(params, "cleanup", "n/a"),
12897
- startedAt: new Date().getTime(),
12898
- state: "working"
12899
- };
12900
- this.operations.push(op);
12901
- return op.id;
12902
- };
12903
- /**
12904
- * Returns a reference to an Operation
12905
- *
12906
- * @param {string} id Unique Identifier
12907
- * @returns {Operation}
12908
- * @memberof OperationStack
12909
- */
12910
- OperationStack.prototype.getOperation = function (id) {
12911
- return this.operations.find(function (o) { return o.id === id; });
12912
- };
12913
- /**
12914
- * Returns reference to the operations array
12915
- *
12916
- * @returns {Operation[]}
12917
- * @memberof OperationStack
12918
- */
12919
- OperationStack.prototype.getOperations = function () {
12920
- return this.operations;
12921
- };
12922
- /**
12923
- * Inform the stack that an operation has finished.
12924
- *
12925
- * This will append in a duration property, and mark
12926
- * the state as 'completed'.
12927
- *
12928
- * @param {string} id Unique identifier of the Operation
12929
- * @param {Record<string, unknown>} [options] outputs
12930
- * @memberof OperationStack
12931
- */
12932
- OperationStack.prototype.finish = function (id, options) {
12933
- var op = this.getOperation(id);
12934
- if (op) {
12935
- op.duration = new Date().getTime() - op.startedAt;
12936
- op.state = "completed";
12937
- if (options) {
12938
- op.output = cloneObject$1(options);
12939
- }
12940
- }
12941
- else {
12942
- throw new Error("No operation with id " + id + " present in stack");
14124
+ var getStakeholderModel = function (formId, requestOptions) {
14125
+ return getRelatedItems(__assign({ id: formId, relationshipType: "Survey2Data", direction: "forward" }, requestOptions)).then(function (_a) {
14126
+ var stakeholderView = _a.relatedItems[0];
14127
+ var model;
14128
+ if (stakeholderView) {
14129
+ model = { item: stakeholderView };
12943
14130
  }
14131
+ return model;
14132
+ });
14133
+ };
14134
+
14135
+ /**
14136
+ * Determines if the provided Feature Service item is a
14137
+ * Fieldworker View
14138
+ * @param {IItem} featureServiceItem
14139
+ * @returns {boolean}
14140
+ */
14141
+ function isFieldworkerView(featureServiceItem) {
14142
+ var hasTypekeyword = function (typeKeyword) {
14143
+ return featureServiceItem.typeKeywords.indexOf(typeKeyword) > -1;
12944
14144
  };
12945
- /**
12946
- * Merge a serialized operation stack into
12947
- * a stack instance
12948
- *
12949
- * ```js
12950
- * import { OperationStack } from '@esri/solution-common';
12951
- * function someFunction() {
12952
- * const stack = new OperationStack();
12953
- * stack.start('getItem', {id: 'get-bc3'});
12954
- * // do some work...
12955
- * stack.finish('get-bc3');
12956
- *
12957
- * const itm = {title: 'Fake Item', type: 'Web Map'};
12958
- * // create an entry for the function we are about to call...
12959
- * stack.start('createItem', {id: 'createItem_01', inputs: {item: itm}});
12960
- * // call a function that does work, and has it's own stack
12961
- * // and returns a serialized version as part of it's results
12962
- * return createItem(itm)
12963
- * .then((result) => {
12964
- * // tell the stack the last operation finished...
12965
- * stack.finish('createItem_01');
12966
- * // merge in the stack from the function we called
12967
- * stack.merge(result.stack);
12968
- * // > stack.getCompleted().length === 3
12969
- * });
12970
- * }
12971
- *
12972
- * function createItem (itm) {
12973
- * const otherStack = new OperationStack();
12974
- * const id = otherStack.start('createItem');
12975
- * // make calls to create item etc
12976
- * otherStack.finish(id, {itemId: newItem.id});
12977
- * otherStack.start('protectItem', {id: 'protect-00c'});
12978
- * // make call to protect item...
12979
- * otherStack.finish('protect-00c');
12980
- * // all done... return a result with a stack
12981
- * return Promise.resolve({
12982
- * success:true,
12983
- * stack: otherStack.serialize()
12984
- * });
12985
- * }
12986
- * ```
12987
- *
12988
- * Typically used to create a comprehensive list of operations
12989
- * when a function returns a `SerializedOperationStack` as part of
12990
- * it's response
12991
- *
12992
- *
12993
- * @param {ISerializedOperationStack} stack
12994
- * @memberof OperationStack
12995
- */
12996
- OperationStack.prototype.merge = function (stack) {
12997
- this.operations = __spreadArrays(this.operations, stack.operations);
12998
- };
12999
- /**
13000
- * Get a list of the completed operations
13001
- *
13002
- * @returns {IOperation[]}
13003
- * @memberof OperationStack
13004
- */
13005
- OperationStack.prototype.getCompleted = function () {
13006
- return cloneObject$1(this.operations.filter(function (e) { return e.state === "completed"; }));
13007
- };
13008
- /**
13009
- * Return an array of working operations
13010
- *
13011
- * @returns {IOperation[]}
13012
- * @memberof OperationStack
13013
- */
13014
- OperationStack.prototype.getWorking = function () {
13015
- return cloneObject$1(this.operations.filter(function (e) { return e.state === "working"; }));
14145
+ // Survey123 only recently added the "FieldworkerView" typekeyword
14146
+ var isFieldworker = hasTypekeyword("FieldworkerView");
14147
+ // we should support previously created fieldworkers too
14148
+ if (!isFieldworker) {
14149
+ var hasExpectedTypeKeywords = [
14150
+ "Survey123",
14151
+ "Feature Service",
14152
+ "View Service",
14153
+ ].every(hasTypekeyword);
14154
+ isFieldworker =
14155
+ hasExpectedTypeKeywords && !hasTypekeyword("StakeholderView");
14156
+ }
14157
+ return isFieldworker;
14158
+ }
14159
+
14160
+ /* Copyright (c) 2020 Environmental Systems Research Institute, Inc.
14161
+ * Apache-2.0 */
14162
+ /**
14163
+ * Builds a dictionary of Survey items for the given Form model
14164
+ * @param {string} formId The Form ID of the survey
14165
+ * @param {IRequestOptions} requestOptions The request options
14166
+ * @returns {Promise<IGetSurveyModelsResponse>}
14167
+ */
14168
+ var getSurveyModels = function (formItemOrId, requestOptions) {
14169
+ var fieldworker;
14170
+ var stakeholder;
14171
+ var getForm = function () {
14172
+ return typeof formItemOrId === "string"
14173
+ ? getItem(formItemOrId, requestOptions)
14174
+ : Promise.resolve(formItemOrId);
13016
14175
  };
13017
- /**
13018
- * Serialize the completed operations into a set of
13019
- * human readable messages, sorted by the startedAt timestamp
13020
- *
13021
- *
13022
- * @returns {string}
13023
- * @memberof IOperationStack
13024
- */
13025
- OperationStack.prototype.toString = function () {
13026
- // sort the operations by StartedAt
13027
- var allOps = this.operations.sort(function (a, b) {
13028
- if (a.startedAt < b.startedAt) {
13029
- return -1;
14176
+ return getForm().then(function (form) {
14177
+ var promises = [
14178
+ // the primary input will be the fieldworker (if it exists), otherwise
14179
+ // the source feature service.
14180
+ getInputFeatureServiceModel(form.id, requestOptions),
14181
+ getStakeholderModel(form.id, requestOptions),
14182
+ ];
14183
+ return Promise.all(promises)
14184
+ .then(function (_a) {
14185
+ var featureServiceOrFieldworkerModelResult = _a[0], stakeholderResult = _a[1];
14186
+ stakeholder = stakeholderResult;
14187
+ if (featureServiceOrFieldworkerModelResult &&
14188
+ isFieldworkerView(featureServiceOrFieldworkerModelResult.item)) {
14189
+ fieldworker = featureServiceOrFieldworkerModelResult;
14190
+ // if the primary input is the fieldworker, fetch
14191
+ // the source feature service
14192
+ return getSourceFeatureServiceModelFromFieldworker(fieldworker.item.id, requestOptions);
13030
14193
  }
13031
- if (b.startedAt < a.startedAt) {
13032
- return 1;
14194
+ else {
14195
+ return featureServiceOrFieldworkerModelResult;
13033
14196
  }
13034
- return 0;
14197
+ })
14198
+ .then(function (featureService) {
14199
+ return {
14200
+ form: { item: form },
14201
+ featureService: featureService,
14202
+ fieldworker: fieldworker,
14203
+ stakeholder: stakeholder,
14204
+ };
13035
14205
  });
13036
- return allOps.map(getOperationMessage).join("\n");
13037
- };
14206
+ });
14207
+ };
14208
+
14209
+ /**
14210
+ * Hub class can be used as an entry point to managing
14211
+ * content, teams, sites, projects etc, in an organization's Hub.
14212
+ *
14213
+ * ```js
14214
+ * import {Hub} from '@esri/hub-common';
14215
+ * // create a Hub instance, authenticating as a specific user
14216
+ * // working against arcgis online
14217
+ * const myHub = await Hub.create({authOptions: {username: "casey", password: "jones"}});
14218
+ *
14219
+ * myHub.context.currentUser //=> {username: "casey", ...} as IUser
14220
+ *
14221
+ * const pavingProject = await myHub.projects.create({name: "12th Street Paving"});
14222
+ * pavingProject.summary = "This is the 2024 planned paving of 12th Street, between 8th and 11th Ave";
14223
+ * await myHub.projects.update(pavingProject);
14224
+ * ```
14225
+ *
14226
+ * This is a convenience class. Hub Managers can be created
14227
+ * directly, or the underlying functions can be imported an used
14228
+ * as need for scenarios where these class structures introduce
14229
+ * unwanted complexity
14230
+ */
14231
+ var Hub = /** @class */ (function () {
13038
14232
  /**
13039
- * Serialize the stack into simple objects
13040
- *
13041
- * @returns {ISerializedOperationStack}
13042
- * @memberof OperationStack
14233
+ * Private so we can employ a factory function to do
14234
+ * async work during creation
14235
+ * @param contextManager
13043
14236
  */
13044
- OperationStack.prototype.serialize = function () {
13045
- return {
13046
- operations: cloneObject$1(this.getOperations())
13047
- };
14237
+ function Hub(contextManager) {
14238
+ this._contextManager = contextManager;
14239
+ }
14240
+ /**
14241
+ * Factory function to construct a new Hub instance.
14242
+ * @param contextManager
14243
+ * @returns
14244
+ */
14245
+ Hub.create = function (options) {
14246
+ return __awaiter(this, void 0, void 0, function () {
14247
+ var opts, mgr;
14248
+ return __generator(this, function (_a) {
14249
+ switch (_a.label) {
14250
+ case 0:
14251
+ if (!options.contextManager) return [3 /*break*/, 1];
14252
+ return [2 /*return*/, new Hub(options.contextManager)];
14253
+ case 1:
14254
+ opts = options.managerOptions || {};
14255
+ return [4 /*yield*/, ArcGISContextManager.create(opts)];
14256
+ case 2:
14257
+ mgr = _a.sent();
14258
+ return [2 /*return*/, new Hub(mgr)];
14259
+ }
14260
+ });
14261
+ });
13048
14262
  };
13049
- return OperationStack;
14263
+ Object.defineProperty(Hub.prototype, "context", {
14264
+ /**
14265
+ * Getter to abstract the context manager
14266
+ */
14267
+ get: function () {
14268
+ return this._contextManager.context;
14269
+ },
14270
+ enumerable: false,
14271
+ configurable: true
14272
+ });
14273
+ Object.defineProperty(Hub.prototype, "projects", {
14274
+ /**
14275
+ * HubProjectManager for the current Hub
14276
+ * @returns
14277
+ */
14278
+ get: function () {
14279
+ if (!this._projectManager) {
14280
+ this._projectManager = HubProjectManager.init(this._contextManager);
14281
+ }
14282
+ return this._projectManager;
14283
+ },
14284
+ enumerable: false,
14285
+ configurable: true
14286
+ });
14287
+ return Hub;
13050
14288
  }());
13051
- function getOperationMessage(op) {
13052
- var msg = op.startedAt + " : Operation " + op.id + " started with inputs " + JSON.stringify(op.inputs) + " but was not completed";
13053
- if (op.state === "completed") {
13054
- msg = op.startedAt + " : Operation " + op.id + " took " + op.duration + " ms with inputs " + JSON.stringify(op.inputs) + " and output " + (op.output ? JSON.stringify(op.output) : "n/a");
13055
- }
13056
- return msg;
13057
- }
13058
14289
 
13059
14290
  /**
13060
14291
  * Generic Hub Error with an Error stack as well
@@ -13213,6 +14444,7 @@
13213
14444
  exports.fetchAllPages = fetchAllPages;
13214
14445
  exports.fetchAndUploadResource = fetchAndUploadResource;
13215
14446
  exports.fetchAndUploadThumbnail = fetchAndUploadThumbnail;
14447
+ exports.fetchContent = fetchContent;
13216
14448
  exports.fetchHubTranslation = fetchHubTranslation;
13217
14449
  exports.fetchImageAsBlob = fetchImageAsBlob;
13218
14450
  exports.fetchModelFromItem = fetchModelFromItem;