@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.
- package/dist/es2017/content/_fetch.js +87 -0
- package/dist/es2017/content/_fetch.js.map +1 -0
- package/dist/es2017/content/_internal.js +75 -3
- package/dist/es2017/content/_internal.js.map +1 -1
- package/dist/es2017/content/compose.js +18 -10
- package/dist/es2017/content/compose.js.map +1 -1
- package/dist/es2017/content/fetch.js +78 -0
- package/dist/es2017/content/fetch.js.map +1 -0
- package/dist/es2017/content/index.js +9 -80
- package/dist/es2017/content/index.js.map +1 -1
- package/dist/es2017/content/slugs.js +63 -0
- package/dist/es2017/content/slugs.js.map +1 -0
- package/dist/es2017/content/types.js +1 -0
- package/dist/es2017/content/types.js.map +1 -0
- package/dist/es2017/items/_enrichments.js +176 -0
- package/dist/es2017/items/_enrichments.js.map +1 -0
- package/dist/esm/content/_fetch.js +102 -0
- package/dist/esm/content/_fetch.js.map +1 -0
- package/dist/esm/content/_internal.js +75 -3
- package/dist/esm/content/_internal.js.map +1 -1
- package/dist/esm/content/compose.js +18 -10
- package/dist/esm/content/compose.js.map +1 -1
- package/dist/esm/content/fetch.js +103 -0
- package/dist/esm/content/fetch.js.map +1 -0
- package/dist/esm/content/index.js +9 -80
- package/dist/esm/content/index.js.map +1 -1
- package/dist/esm/content/slugs.js +63 -0
- package/dist/esm/content/slugs.js.map +1 -0
- package/dist/esm/content/types.js +1 -0
- package/dist/esm/content/types.js.map +1 -0
- package/dist/esm/items/_enrichments.js +177 -0
- package/dist/esm/items/_enrichments.js.map +1 -0
- package/dist/node/content/_fetch.js +90 -0
- package/dist/node/content/_fetch.js.map +1 -0
- package/dist/node/content/_internal.js +76 -4
- package/dist/node/content/_internal.js.map +1 -1
- package/dist/node/content/compose.js +17 -9
- package/dist/node/content/compose.js.map +1 -1
- package/dist/node/content/fetch.js +81 -0
- package/dist/node/content/fetch.js.map +1 -0
- package/dist/node/content/index.js +11 -86
- package/dist/node/content/index.js.map +1 -1
- package/dist/node/content/slugs.js +70 -0
- package/dist/node/content/slugs.js.map +1 -0
- package/dist/node/content/types.js +3 -0
- package/dist/node/content/types.js.map +1 -0
- package/dist/node/items/_enrichments.js +179 -0
- package/dist/node/items/_enrichments.js.map +1 -0
- package/dist/types/content/_fetch.d.ts +61 -0
- package/dist/types/content/_internal.d.ts +76 -0
- package/dist/types/content/compose.d.ts +11 -0
- package/dist/types/content/fetch.d.ts +23 -0
- package/dist/types/content/index.d.ts +4 -41
- package/dist/types/content/slugs.d.ts +34 -0
- package/dist/types/content/types.d.ts +7 -0
- package/dist/types/items/_enrichments.d.ts +24 -0
- package/dist/umd/common.umd.js +2082 -850
- package/dist/umd/common.umd.js.map +1 -1
- package/dist/umd/common.umd.min.js +1 -1
- package/dist/umd/common.umd.min.js.map +1 -1
- package/package.json +2 -1
package/dist/umd/common.umd.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* @preserve
|
|
2
|
-
* @esri/hub-common - v9.21.
|
|
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
|
-
|
|
6195
|
-
|
|
6196
|
-
|
|
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
|
|
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
|
-
|
|
7552
|
+
//////////////////////
|
|
7553
|
+
// Slug Helpers
|
|
7554
|
+
//////////////////////
|
|
7330
7555
|
/**
|
|
7331
|
-
*
|
|
7332
|
-
*
|
|
7333
|
-
*
|
|
7334
|
-
*
|
|
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
|
|
7343
|
-
|
|
7344
|
-
|
|
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
|
-
*
|
|
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
|
|
7364
|
-
|
|
7365
|
-
|
|
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
|
-
*
|
|
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
|
|
7379
|
-
|
|
7380
|
-
|
|
7381
|
-
|
|
7382
|
-
|
|
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
|
|
7595
|
+
return context + "::" + slug;
|
|
7390
7596
|
}
|
|
7391
7597
|
}
|
|
7392
7598
|
/**
|
|
7393
|
-
*
|
|
7394
|
-
*
|
|
7395
|
-
*
|
|
7396
|
-
*
|
|
7397
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
7620
|
+
* ```js
|
|
7621
|
+
* import { OperationStack } from '@esri/solution-common';
|
|
7509
7622
|
*
|
|
7510
|
-
*
|
|
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
|
-
*
|
|
7527
|
-
*
|
|
7528
|
-
*
|
|
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
|
-
*
|
|
7537
|
-
*
|
|
7538
|
-
*
|
|
7539
|
-
|
|
7540
|
-
|
|
7541
|
-
|
|
7542
|
-
|
|
7543
|
-
|
|
7544
|
-
|
|
7545
|
-
|
|
7546
|
-
|
|
7547
|
-
|
|
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
|
-
*
|
|
7594
|
-
*
|
|
7595
|
-
*
|
|
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
|
|
7598
|
-
|
|
7599
|
-
|
|
7600
|
-
|
|
7601
|
-
|
|
7602
|
-
|
|
7603
|
-
|
|
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
|
-
|
|
7606
|
-
|
|
7607
|
-
|
|
7608
|
-
|
|
7609
|
-
|
|
7610
|
-
|
|
7611
|
-
|
|
7612
|
-
|
|
7613
|
-
|
|
7614
|
-
|
|
7615
|
-
|
|
7616
|
-
|
|
7617
|
-
|
|
7618
|
-
|
|
7619
|
-
|
|
7620
|
-
|
|
7621
|
-
|
|
7622
|
-
|
|
7623
|
-
|
|
7624
|
-
|
|
7625
|
-
|
|
7626
|
-
|
|
7627
|
-
|
|
7628
|
-
|
|
7629
|
-
|
|
7630
|
-
|
|
7631
|
-
|
|
7632
|
-
|
|
7633
|
-
|
|
7634
|
-
|
|
7635
|
-
|
|
7636
|
-
|
|
7637
|
-
|
|
7638
|
-
|
|
7639
|
-
|
|
7640
|
-
|
|
7641
|
-
|
|
7642
|
-
|
|
7643
|
-
|
|
7644
|
-
|
|
7645
|
-
|
|
7646
|
-
|
|
7647
|
-
|
|
7648
|
-
|
|
7649
|
-
|
|
7650
|
-
|
|
7651
|
-
|
|
7652
|
-
|
|
7653
|
-
|
|
7654
|
-
|
|
7655
|
-
|
|
7656
|
-
|
|
7657
|
-
|
|
7658
|
-
|
|
7659
|
-
|
|
7660
|
-
|
|
7661
|
-
|
|
7662
|
-
|
|
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
|
+
'"': '"',
|
|
8003
|
+
'&': '&',
|
|
8004
|
+
'\'': ''',
|
|
8005
|
+
'<': '<',
|
|
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
|
+
'>': '>',
|
|
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
|
+
'`': '`'
|
|
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(/>\u20D2/g, '>⃒')
|
|
8135
|
+
.replace(/<\u20D2/g, '<⃒')
|
|
8136
|
+
.replace(/fj/g, 'fj');
|
|
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(/>\u20D2/g, '>⃒')
|
|
8159
|
+
.replace(/<\u20D2/g, '<⃒');
|
|
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. `𝌆`.
|
|
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. `𝌆`.
|
|
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. `©`.
|
|
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. `&`
|
|
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
|
-
*
|
|
12721
|
-
*
|
|
12722
|
-
*
|
|
12723
|
-
*
|
|
12724
|
-
*
|
|
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
|
|
12742
|
-
|
|
12743
|
-
|
|
12744
|
-
|
|
12745
|
-
|
|
12746
|
-
|
|
12747
|
-
|
|
12748
|
-
|
|
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
|
-
|
|
12798
|
-
}());
|
|
14113
|
+
};
|
|
12799
14114
|
|
|
12800
|
-
/* Copyright (c)
|
|
14115
|
+
/* Copyright (c) 2020 Environmental Systems Research Institute, Inc.
|
|
12801
14116
|
* Apache-2.0 */
|
|
12802
14117
|
/**
|
|
12803
|
-
*
|
|
12804
|
-
*
|
|
12805
|
-
*
|
|
12806
|
-
*
|
|
12807
|
-
*
|
|
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
|
|
12842
|
-
|
|
12843
|
-
|
|
12844
|
-
|
|
12845
|
-
|
|
12846
|
-
|
|
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
|
-
|
|
12947
|
-
|
|
12948
|
-
|
|
12949
|
-
|
|
12950
|
-
|
|
12951
|
-
|
|
12952
|
-
|
|
12953
|
-
|
|
12954
|
-
|
|
12955
|
-
|
|
12956
|
-
|
|
12957
|
-
|
|
12958
|
-
|
|
12959
|
-
|
|
12960
|
-
|
|
12961
|
-
|
|
12962
|
-
|
|
12963
|
-
|
|
12964
|
-
|
|
12965
|
-
|
|
12966
|
-
|
|
12967
|
-
|
|
12968
|
-
|
|
12969
|
-
|
|
12970
|
-
|
|
12971
|
-
|
|
12972
|
-
|
|
12973
|
-
|
|
12974
|
-
|
|
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
|
-
|
|
13019
|
-
|
|
13020
|
-
|
|
13021
|
-
|
|
13022
|
-
|
|
13023
|
-
|
|
13024
|
-
|
|
13025
|
-
|
|
13026
|
-
|
|
13027
|
-
|
|
13028
|
-
if (
|
|
13029
|
-
|
|
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
|
-
|
|
13032
|
-
return
|
|
14194
|
+
else {
|
|
14195
|
+
return featureServiceOrFieldworkerModelResult;
|
|
13033
14196
|
}
|
|
13034
|
-
|
|
14197
|
+
})
|
|
14198
|
+
.then(function (featureService) {
|
|
14199
|
+
return {
|
|
14200
|
+
form: { item: form },
|
|
14201
|
+
featureService: featureService,
|
|
14202
|
+
fieldworker: fieldworker,
|
|
14203
|
+
stakeholder: stakeholder,
|
|
14204
|
+
};
|
|
13035
14205
|
});
|
|
13036
|
-
|
|
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
|
-
*
|
|
13040
|
-
*
|
|
13041
|
-
* @
|
|
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
|
-
|
|
13045
|
-
|
|
13046
|
-
|
|
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
|
-
|
|
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;
|