@esri/solution-common 3.0.0 → 3.1.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/esm/featureServiceHelpers.js +20 -2
- package/dist/esm/featureServiceHelpers.js.map +1 -1
- package/dist/esm/resourceHelpers.d.ts +3 -2
- package/dist/esm/resourceHelpers.js +4 -3
- package/dist/esm/resourceHelpers.js.map +1 -1
- package/dist/esm/resources/copyAssociatedFiles.d.ts +17 -2
- package/dist/esm/resources/copyAssociatedFiles.js +106 -42
- package/dist/esm/resources/copyAssociatedFiles.js.map +1 -1
- package/dist/esm/resources/copyResourceIntoZip.js +8 -1
- package/dist/esm/resources/copyResourceIntoZip.js.map +1 -1
- package/dist/esm/resources/getItemResourcesPaths.js +9 -2
- package/dist/esm/resources/getItemResourcesPaths.js.map +1 -1
- package/package.json +3 -3
- package/dist/node/completeItem.d.ts +0 -29
- package/dist/node/completeItem.js +0 -82
- package/dist/node/completeItem.js.map +0 -1
- package/dist/node/create-hub-request-options.d.ts +0 -29
- package/dist/node/create-hub-request-options.js +0 -64
- package/dist/node/create-hub-request-options.js.map +0 -1
- package/dist/node/deleteHelpers/deleteEmptyGroups.d.ts +0 -24
- package/dist/node/deleteHelpers/deleteEmptyGroups.js +0 -42
- package/dist/node/deleteHelpers/deleteEmptyGroups.js.map +0 -1
- package/dist/node/deleteHelpers/deleteGroupIfEmpty.d.ts +0 -27
- package/dist/node/deleteHelpers/deleteGroupIfEmpty.js +0 -97
- package/dist/node/deleteHelpers/deleteGroupIfEmpty.js.map +0 -1
- package/dist/node/deleteHelpers/deleteSolutionContents.d.ts +0 -38
- package/dist/node/deleteHelpers/deleteSolutionContents.js +0 -130
- package/dist/node/deleteHelpers/deleteSolutionContents.js.map +0 -1
- package/dist/node/deleteHelpers/deleteSolutionFolder.d.ts +0 -29
- package/dist/node/deleteHelpers/deleteSolutionFolder.js +0 -79
- package/dist/node/deleteHelpers/deleteSolutionFolder.js.map +0 -1
- package/dist/node/deleteHelpers/deleteSolutionItem.d.ts +0 -30
- package/dist/node/deleteHelpers/deleteSolutionItem.js +0 -54
- package/dist/node/deleteHelpers/deleteSolutionItem.js.map +0 -1
- package/dist/node/deleteHelpers/index.d.ts +0 -22
- package/dist/node/deleteHelpers/index.js +0 -26
- package/dist/node/deleteHelpers/index.js.map +0 -1
- package/dist/node/deleteHelpers/reconstructBuildOrderIds.d.ts +0 -27
- package/dist/node/deleteHelpers/reconstructBuildOrderIds.js +0 -34
- package/dist/node/deleteHelpers/reconstructBuildOrderIds.js.map +0 -1
- package/dist/node/deleteHelpers/removeItems.d.ts +0 -34
- package/dist/node/deleteHelpers/removeItems.js +0 -112
- package/dist/node/deleteHelpers/removeItems.js.map +0 -1
- package/dist/node/deleteHelpers/reportProgress.d.ts +0 -27
- package/dist/node/deleteHelpers/reportProgress.js +0 -46
- package/dist/node/deleteHelpers/reportProgress.js.map +0 -1
- package/dist/node/deleteSolution.d.ts +0 -55
- package/dist/node/deleteSolution.js +0 -107
- package/dist/node/deleteSolution.js.map +0 -1
- package/dist/node/dependencies.d.ts +0 -26
- package/dist/node/dependencies.js +0 -171
- package/dist/node/dependencies.js.map +0 -1
- package/dist/node/featureServiceHelpers.d.ts +0 -791
- package/dist/node/featureServiceHelpers.js +0 -2403
- package/dist/node/featureServiceHelpers.js.map +0 -1
- package/dist/node/generalHelpers.d.ts +0 -372
- package/dist/node/generalHelpers.js +0 -842
- package/dist/node/generalHelpers.js.map +0 -1
- package/dist/node/get-subscription-info.d.ts +0 -27
- package/dist/node/get-subscription-info.js +0 -39
- package/dist/node/get-subscription-info.js.map +0 -1
- package/dist/node/getDeletableSolutionInfo.d.ts +0 -29
- package/dist/node/getDeletableSolutionInfo.js +0 -53
- package/dist/node/getDeletableSolutionInfo.js.map +0 -1
- package/dist/node/getItemTypeAbbrev.d.ts +0 -19
- package/dist/node/getItemTypeAbbrev.js +0 -184
- package/dist/node/getItemTypeAbbrev.js.map +0 -1
- package/dist/node/getSolutionSummary.d.ts +0 -27
- package/dist/node/getSolutionSummary.js +0 -101
- package/dist/node/getSolutionSummary.js.map +0 -1
- package/dist/node/index.d.ts +0 -44
- package/dist/node/index.js +0 -48
- package/dist/node/index.js.map +0 -1
- package/dist/node/interfaces.d.ts +0 -1321
- package/dist/node/interfaces.js +0 -75
- package/dist/node/interfaces.js.map +0 -1
- package/dist/node/libConnectors.d.ts +0 -73
- package/dist/node/libConnectors.js +0 -115
- package/dist/node/libConnectors.js.map +0 -1
- package/dist/node/migrations/apply-schema.d.ts +0 -24
- package/dist/node/migrations/apply-schema.js +0 -36
- package/dist/node/migrations/apply-schema.js.map +0 -1
- package/dist/node/migrations/is-legacy-solution.d.ts +0 -24
- package/dist/node/migrations/is-legacy-solution.js +0 -40
- package/dist/node/migrations/is-legacy-solution.js.map +0 -1
- package/dist/node/migrations/upgrade-three-dot-one.d.ts +0 -27
- package/dist/node/migrations/upgrade-three-dot-one.js +0 -49
- package/dist/node/migrations/upgrade-three-dot-one.js.map +0 -1
- package/dist/node/migrations/upgrade-three-dot-zero.d.ts +0 -27
- package/dist/node/migrations/upgrade-three-dot-zero.js +0 -43
- package/dist/node/migrations/upgrade-three-dot-zero.js.map +0 -1
- package/dist/node/migrations/upgrade-two-dot-five.d.ts +0 -24
- package/dist/node/migrations/upgrade-two-dot-five.js +0 -73
- package/dist/node/migrations/upgrade-two-dot-five.js.map +0 -1
- package/dist/node/migrations/upgrade-two-dot-four.d.ts +0 -24
- package/dist/node/migrations/upgrade-two-dot-four.js +0 -72
- package/dist/node/migrations/upgrade-two-dot-four.js.map +0 -1
- package/dist/node/migrations/upgrade-two-dot-one.d.ts +0 -7
- package/dist/node/migrations/upgrade-two-dot-one.js +0 -39
- package/dist/node/migrations/upgrade-two-dot-one.js.map +0 -1
- package/dist/node/migrations/upgrade-two-dot-seven.d.ts +0 -23
- package/dist/node/migrations/upgrade-two-dot-seven.js +0 -58
- package/dist/node/migrations/upgrade-two-dot-seven.js.map +0 -1
- package/dist/node/migrations/upgrade-two-dot-six.d.ts +0 -27
- package/dist/node/migrations/upgrade-two-dot-six.js +0 -61
- package/dist/node/migrations/upgrade-two-dot-six.js.map +0 -1
- package/dist/node/migrations/upgrade-two-dot-three.d.ts +0 -23
- package/dist/node/migrations/upgrade-two-dot-three.js +0 -55
- package/dist/node/migrations/upgrade-two-dot-three.js.map +0 -1
- package/dist/node/migrations/upgrade-two-dot-two.d.ts +0 -23
- package/dist/node/migrations/upgrade-two-dot-two.js +0 -58
- package/dist/node/migrations/upgrade-two-dot-two.js.map +0 -1
- package/dist/node/migrations/upgrade-two-dot-zero.d.ts +0 -44
- package/dist/node/migrations/upgrade-two-dot-zero.js +0 -95
- package/dist/node/migrations/upgrade-two-dot-zero.js.map +0 -1
- package/dist/node/migrator.d.ts +0 -25
- package/dist/node/migrator.js +0 -77
- package/dist/node/migrator.js.map +0 -1
- package/dist/node/polyfills.d.ts +0 -40
- package/dist/node/polyfills.js +0 -98
- package/dist/node/polyfills.js.map +0 -1
- package/dist/node/resourceHelpers.d.ts +0 -190
- package/dist/node/resourceHelpers.js +0 -390
- package/dist/node/resourceHelpers.js.map +0 -1
- package/dist/node/resources/add-resource-from-blob.d.ts +0 -26
- package/dist/node/resources/add-resource-from-blob.js +0 -52
- package/dist/node/resources/add-resource-from-blob.js.map +0 -1
- package/dist/node/resources/addMetadataFromBlob.d.ts +0 -25
- package/dist/node/resources/addMetadataFromBlob.js +0 -43
- package/dist/node/resources/addMetadataFromBlob.js.map +0 -1
- package/dist/node/resources/convert-item-resource-to-storage-resource.d.ts +0 -32
- package/dist/node/resources/convert-item-resource-to-storage-resource.js +0 -70
- package/dist/node/resources/convert-item-resource-to-storage-resource.js.map +0 -1
- package/dist/node/resources/convert-storage-resource-to-item-resource.d.ts +0 -29
- package/dist/node/resources/convert-storage-resource-to-item-resource.js +0 -70
- package/dist/node/resources/convert-storage-resource-to-item-resource.js.map +0 -1
- package/dist/node/resources/copyAssociatedFiles.d.ts +0 -52
- package/dist/node/resources/copyAssociatedFiles.js +0 -237
- package/dist/node/resources/copyAssociatedFiles.js.map +0 -1
- package/dist/node/resources/copyDataIntoItem.d.ts +0 -33
- package/dist/node/resources/copyDataIntoItem.js +0 -63
- package/dist/node/resources/copyDataIntoItem.js.map +0 -1
- package/dist/node/resources/copyMetadataIntoItem.d.ts +0 -26
- package/dist/node/resources/copyMetadataIntoItem.js +0 -46
- package/dist/node/resources/copyMetadataIntoItem.js.map +0 -1
- package/dist/node/resources/copyResourceIntoZip.d.ts +0 -33
- package/dist/node/resources/copyResourceIntoZip.js +0 -71
- package/dist/node/resources/copyResourceIntoZip.js.map +0 -1
- package/dist/node/resources/copyZipIntoItem.d.ts +0 -25
- package/dist/node/resources/copyZipIntoItem.js +0 -54
- package/dist/node/resources/copyZipIntoItem.js.map +0 -1
- package/dist/node/resources/createCopyResults.d.ts +0 -25
- package/dist/node/resources/createCopyResults.js +0 -36
- package/dist/node/resources/createCopyResults.js.map +0 -1
- package/dist/node/resources/get-blob.d.ts +0 -26
- package/dist/node/resources/get-blob.js +0 -27
- package/dist/node/resources/get-blob.js.map +0 -1
- package/dist/node/resources/getItemResourcesFilesFromPaths.d.ts +0 -24
- package/dist/node/resources/getItemResourcesFilesFromPaths.js +0 -49
- package/dist/node/resources/getItemResourcesFilesFromPaths.js.map +0 -1
- package/dist/node/resources/getItemResourcesPaths.d.ts +0 -26
- package/dist/node/resources/getItemResourcesPaths.js +0 -66
- package/dist/node/resources/getItemResourcesPaths.js.map +0 -1
- package/dist/node/resources/index.d.ts +0 -29
- package/dist/node/resources/index.js +0 -33
- package/dist/node/resources/index.js.map +0 -1
- package/dist/node/resources/solution-resource.d.ts +0 -35
- package/dist/node/resources/solution-resource.js +0 -31
- package/dist/node/resources/solution-resource.js.map +0 -1
- package/dist/node/resources/transform-resource-paths-to-solution-resources.d.ts +0 -56
- package/dist/node/resources/transform-resource-paths-to-solution-resources.js +0 -146
- package/dist/node/resources/transform-resource-paths-to-solution-resources.js.map +0 -1
- package/dist/node/restHelpers.d.ts +0 -585
- package/dist/node/restHelpers.js +0 -1887
- package/dist/node/restHelpers.js.map +0 -1
- package/dist/node/restHelpersGet.d.ts +0 -288
- package/dist/node/restHelpersGet.js +0 -804
- package/dist/node/restHelpersGet.js.map +0 -1
- package/dist/node/sharing/index.d.ts +0 -16
- package/dist/node/sharing/index.js +0 -20
- package/dist/node/sharing/index.js.map +0 -1
- package/dist/node/sharing/share-item-to-groups.d.ts +0 -26
- package/dist/node/sharing/share-item-to-groups.js +0 -44
- package/dist/node/sharing/share-item-to-groups.js.map +0 -1
- package/dist/node/templatization.d.ts +0 -139
- package/dist/node/templatization.js +0 -314
- package/dist/node/templatization.js.map +0 -1
- package/dist/node/trackingHelpers.d.ts +0 -116
- package/dist/node/trackingHelpers.js +0 -217
- package/dist/node/trackingHelpers.js.map +0 -1
- package/dist/node/velocityHelpers.d.ts +0 -57
- package/dist/node/velocityHelpers.js +0 -135
- package/dist/node/velocityHelpers.js.map +0 -1
- package/dist/node/workforceHelpers.d.ts +0 -115
- package/dist/node/workforceHelpers.js +0 -747
- package/dist/node/workforceHelpers.js.map +0 -1
- package/dist/umd/common.umd.js +0 -15471
- package/dist/umd/common.umd.js.map +0 -1
- package/dist/umd/common.umd.min.js +0 -19
- package/dist/umd/common.umd.min.js.map +0 -1
- package/dist/umd/src/completeItem.d.ts +0 -29
- package/dist/umd/src/create-hub-request-options.d.ts +0 -29
- package/dist/umd/src/deleteHelpers/deleteEmptyGroups.d.ts +0 -24
- package/dist/umd/src/deleteHelpers/deleteGroupIfEmpty.d.ts +0 -27
- package/dist/umd/src/deleteHelpers/deleteSolutionContents.d.ts +0 -38
- package/dist/umd/src/deleteHelpers/deleteSolutionFolder.d.ts +0 -29
- package/dist/umd/src/deleteHelpers/deleteSolutionItem.d.ts +0 -30
- package/dist/umd/src/deleteHelpers/index.d.ts +0 -22
- package/dist/umd/src/deleteHelpers/reconstructBuildOrderIds.d.ts +0 -27
- package/dist/umd/src/deleteHelpers/removeItems.d.ts +0 -34
- package/dist/umd/src/deleteHelpers/reportProgress.d.ts +0 -27
- package/dist/umd/src/deleteSolution.d.ts +0 -55
- package/dist/umd/src/dependencies.d.ts +0 -26
- package/dist/umd/src/featureServiceHelpers.d.ts +0 -791
- package/dist/umd/src/generalHelpers.d.ts +0 -372
- package/dist/umd/src/get-subscription-info.d.ts +0 -27
- package/dist/umd/src/getDeletableSolutionInfo.d.ts +0 -29
- package/dist/umd/src/getItemTypeAbbrev.d.ts +0 -19
- package/dist/umd/src/getSolutionSummary.d.ts +0 -27
- package/dist/umd/src/index.d.ts +0 -44
- package/dist/umd/src/interfaces.d.ts +0 -1321
- package/dist/umd/src/libConnectors.d.ts +0 -73
- package/dist/umd/src/migrations/apply-schema.d.ts +0 -24
- package/dist/umd/src/migrations/is-legacy-solution.d.ts +0 -24
- package/dist/umd/src/migrations/upgrade-three-dot-one.d.ts +0 -27
- package/dist/umd/src/migrations/upgrade-three-dot-zero.d.ts +0 -27
- package/dist/umd/src/migrations/upgrade-two-dot-five.d.ts +0 -24
- package/dist/umd/src/migrations/upgrade-two-dot-four.d.ts +0 -24
- package/dist/umd/src/migrations/upgrade-two-dot-one.d.ts +0 -7
- package/dist/umd/src/migrations/upgrade-two-dot-seven.d.ts +0 -23
- package/dist/umd/src/migrations/upgrade-two-dot-six.d.ts +0 -27
- package/dist/umd/src/migrations/upgrade-two-dot-three.d.ts +0 -23
- package/dist/umd/src/migrations/upgrade-two-dot-two.d.ts +0 -23
- package/dist/umd/src/migrations/upgrade-two-dot-zero.d.ts +0 -44
- package/dist/umd/src/migrator.d.ts +0 -25
- package/dist/umd/src/polyfills.d.ts +0 -40
- package/dist/umd/src/resourceHelpers.d.ts +0 -190
- package/dist/umd/src/resources/add-resource-from-blob.d.ts +0 -26
- package/dist/umd/src/resources/addMetadataFromBlob.d.ts +0 -25
- package/dist/umd/src/resources/convert-item-resource-to-storage-resource.d.ts +0 -32
- package/dist/umd/src/resources/convert-storage-resource-to-item-resource.d.ts +0 -29
- package/dist/umd/src/resources/copyAssociatedFiles.d.ts +0 -52
- package/dist/umd/src/resources/copyDataIntoItem.d.ts +0 -33
- package/dist/umd/src/resources/copyMetadataIntoItem.d.ts +0 -26
- package/dist/umd/src/resources/copyResourceIntoZip.d.ts +0 -33
- package/dist/umd/src/resources/copyZipIntoItem.d.ts +0 -25
- package/dist/umd/src/resources/createCopyResults.d.ts +0 -25
- package/dist/umd/src/resources/get-blob.d.ts +0 -26
- package/dist/umd/src/resources/getItemResourcesFilesFromPaths.d.ts +0 -24
- package/dist/umd/src/resources/getItemResourcesPaths.d.ts +0 -26
- package/dist/umd/src/resources/index.d.ts +0 -29
- package/dist/umd/src/resources/solution-resource.d.ts +0 -35
- package/dist/umd/src/resources/transform-resource-paths-to-solution-resources.d.ts +0 -56
- package/dist/umd/src/restHelpers.d.ts +0 -585
- package/dist/umd/src/restHelpersGet.d.ts +0 -288
- package/dist/umd/src/sharing/index.d.ts +0 -16
- package/dist/umd/src/sharing/share-item-to-groups.d.ts +0 -26
- package/dist/umd/src/templatization.d.ts +0 -139
- package/dist/umd/src/trackingHelpers.d.ts +0 -116
- package/dist/umd/src/velocityHelpers.d.ts +0 -57
- package/dist/umd/src/workforceHelpers.d.ts +0 -115
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"common.umd.min.js","sources":["../../src/interfaces.ts","../../../../node_modules/rollup-plugin-node-globals/src/global.js","../../../../node_modules/buffer-es6/base64.js","../../../../node_modules/buffer-es6/ieee754.js","../../../../node_modules/buffer-es6/isArray.js","../../../../node_modules/buffer-es6/index.js","../../../../node_modules/process-es6/browser.js","../../node_modules/jszip/dist/jszip.min.js","../../node_modules/@esri/arcgis-html-sanitizer/dist/esm/index.js","../../src/libConnectors.ts","../../src/polyfills.ts","../../src/generalHelpers.ts","../../node_modules/adlib/dist/adlib.esm.js","../../src/templatization.ts","../../src/resources/get-blob.ts","../../src/restHelpersGet.ts","../../src/trackingHelpers.ts","../../src/featureServiceHelpers.ts","../../src/workforceHelpers.ts","../../src/restHelpers.ts","../../src/create-hub-request-options.ts","../../src/deleteHelpers/deleteGroupIfEmpty.ts","../../src/deleteHelpers/deleteEmptyGroups.ts","../../src/deleteHelpers/deleteSolutionFolder.ts","../../src/deleteHelpers/deleteSolutionItem.ts","../../src/dependencies.ts","../../src/deleteHelpers/reconstructBuildOrderIds.ts","../../src/deleteHelpers/reportProgress.ts","../../src/deleteHelpers/removeItems.ts","../../src/deleteHelpers/deleteSolutionContents.ts","../../src/getSolutionSummary.ts","../../src/getDeletableSolutionInfo.ts","../../src/get-subscription-info.ts","../../src/migrations/apply-schema.ts","../../src/migrations/upgrade-two-dot-zero.ts","../../src/migrations/upgrade-two-dot-one.ts","../../src/migrations/upgrade-two-dot-two.ts","../../src/migrations/upgrade-two-dot-three.ts","../../src/migrations/upgrade-two-dot-four.ts","../../src/migrations/upgrade-two-dot-five.ts","../../src/migrations/upgrade-two-dot-six.ts","../../src/migrations/upgrade-two-dot-seven.ts","../../src/migrations/upgrade-three-dot-zero.ts","../../src/resources/solution-resource.ts","../../src/resources/convert-item-resource-to-storage-resource.ts","../../src/resources/convert-storage-resource-to-item-resource.ts","../../src/resources/createCopyResults.ts","../../src/resources/copyDataIntoItem.ts","../../src/resources/addMetadataFromBlob.ts","../../src/resources/copyMetadataIntoItem.ts","../../src/resources/copyResourceIntoZip.ts","../../src/resources/copyZipIntoItem.ts","../../src/resources/copyAssociatedFiles.ts","../../src/resourceHelpers.ts","../../src/velocityHelpers.ts","../../src/migrator.ts","../../src/resources/add-resource-from-blob.ts","../../src/deleteSolution.ts","../../src/completeItem.ts","../../src/resources/getItemResourcesFilesFromPaths.ts","../../src/resources/getItemResourcesPaths.ts","../../src/getItemTypeAbbrev.ts","../../src/migrations/is-legacy-solution.ts","../../src/sharing/share-item-to-groups.ts"],"sourcesContent":["/** @license\r\n * Copyright 2018 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/**\r\n * Provides common interfaces.\r\n */\r\n\r\nimport {\r\n IGetRelatedItemsResponse,\r\n IGroup,\r\n IItem,\r\n IItemRelationshipOptions\r\n} from \"@esri/arcgis-rest-portal\";\r\nimport { ISpatialReference } from \"@esri/arcgis-rest-service-admin\";\r\nimport { UserSession } from \"@esri/arcgis-rest-auth\";\r\n\r\n//#region Re-exports -------------------------------------------------------------------------------------------------//\r\n\r\nexport {\r\n IUserRequestOptions,\r\n IUserSessionOptions,\r\n UserSession\r\n} from \"@esri/arcgis-rest-auth\";\r\nexport {\r\n IAddFolderResponse,\r\n ICreateItemResponse,\r\n IGetRelatedItemsResponse,\r\n IGroup,\r\n IGroupAdd,\r\n IItem,\r\n IPagingParams,\r\n IPortal,\r\n ISearchResult,\r\n ItemRelationshipType,\r\n IUpdateItemResponse,\r\n IUser\r\n} from \"@esri/arcgis-rest-portal\";\r\nexport {\r\n ICreateServiceResult,\r\n IExtent,\r\n ISpatialReference\r\n} from \"@esri/arcgis-rest-service-admin\";\r\nimport JSZip from \"jszip\";\r\n\r\n//#endregion ---------------------------------------------------------------------------------------------------------//\r\n\r\nexport const SolutionTemplateFormatVersion = 1;\r\nexport const DeployedSolutionFormatVersion = 1;\r\nexport const UNREACHABLE = \"unreachable\";\r\n\r\n//#region Enums ------------------------------------------------------------------------------------------------------//\r\n\r\n/**\r\n * Flags for storing an item's binary resources.\r\n */\r\nexport enum EFileType {\r\n Data,\r\n Info,\r\n Metadata,\r\n Resource,\r\n Thumbnail\r\n}\r\n\r\n/**\r\n * Text versions of flags for storing an item's binary resources.\r\n */\r\nexport enum SFileType {\r\n \"Data\",\r\n \"Info\",\r\n \"Metadata\",\r\n \"Resource\",\r\n \"Thumbnail\"\r\n}\r\n\r\n/**\r\n * Flags for reporting the status of creating or deploying an item.\r\n */\r\nexport enum EItemProgressStatus {\r\n Started,\r\n Created,\r\n Cancelled,\r\n Finished,\r\n Ignored,\r\n Failed,\r\n Unknown\r\n}\r\n\r\n/**\r\n * Text versions of flags for reporting the status of creating or deploying an item.\r\n */\r\nexport const SItemProgressStatus = [\r\n \"1 Started\",\r\n \"2 Created\",\r\n \"3 Cancelled\",\r\n \"3 Finished\",\r\n \"3 Ignored\",\r\n \"3 Failed\",\r\n \"Unknown\"\r\n];\r\n\r\n//#endregion ---------------------------------------------------------------------------------------------------------//\r\n\r\n//#region Types ------------------------------------------------------------------------------------------------------//\r\n\r\n/**\r\n * Function signature describing internal item-level progress to enable cancellation and rollback in case of failure\r\n *\r\n */\r\nexport type IItemProgressCallback = (\r\n /**\r\n * Id of item\r\n */\r\n itemId: string,\r\n\r\n /**\r\n * Progress status code (e.g., Started, Created,...)\r\n */\r\n status: EItemProgressStatus,\r\n\r\n /**\r\n * Accumulated \"costs\" of task, which can be divided by the total estimated cost to get percent done\r\n */\r\n costUsed: number,\r\n\r\n /**\r\n * Id of created item, which is supplied when status is EItemProgressStatus.Created or .Finished\r\n */\r\n createdItemId?: string\r\n) => boolean;\r\n\r\n/**\r\n * Function signature describing progress to calling programs\r\n */\r\nexport type ISolutionProgressCallback = (\r\n /**\r\n * Percent of total work done\r\n */\r\n percentDone: number,\r\n\r\n /**\r\n * Calling-program-supplied id, perhaps used to distinguish between concurrent deployments or deletions\r\n */\r\n jobId?: string,\r\n\r\n /**\r\n * Packet of supplemental information provided from certain progress states, e.g., Finished deleting an item\r\n * or deploying a Solution item\r\n */\r\n progressEvent?: ISolutionProgressEvent\r\n) => void;\r\n\r\nexport type INoArgFunction = () => any;\r\n\r\n//#endregion ---------------------------------------------------------------------------------------------------------//\r\n\r\n//#region Interfaces -------------------------------------------------------------------------------------------------//\r\n\r\n/**\r\n * Result of creating a unique group\r\n */\r\nexport interface IAddGroupResponse {\r\n /**\r\n * Success or failure\r\n */\r\n success: boolean;\r\n\r\n /**\r\n * Id of created group\r\n */\r\n group: IGroup;\r\n}\r\n\r\n/**\r\n * Additional info to be used when searching the contents of a group\r\n */\r\nexport interface IAdditionalGroupSearchOptions {\r\n /**\r\n * The number of the first entry requested. The index number is 1-based.\r\n */\r\n start?: number;\r\n\r\n /**\r\n * The number of results requested.\r\n */\r\n num?: number;\r\n\r\n /**\r\n * Sets sort field for group items. Values: title | owner | avgrating | numviews | created | modified\r\n */\r\n sortField?: string;\r\n\r\n /**\r\n * Sets sort order for group items. Values: asc | desc\r\n */\r\n sortOrder?: string;\r\n\r\n /**\r\n * The bounding box for a spatial search defined as minx, miny, maxx, or maxy. Spatial search is an\r\n * overlaps/intersects function of the query bbox and the extent of the document. Documents that have\r\n * no extent (for example, mxds, 3dds, lyr) will not be found when doing a bbox search. Document extent\r\n * is assumed to be in the WGS84 geographic coordinate system. E.g.: \"-118,32,-116,34\"\r\n */\r\n bbox?: string;\r\n\r\n /**\r\n * A list of desired categories; maximum of 8\r\n */\r\n categories?: string[];\r\n\r\n /**\r\n * Generically definines remaining/unused properties\r\n */\r\n [key: string]: any;\r\n}\r\n\r\n/**\r\n * Results of fetching and copying a file associated with an item.\r\n */\r\nexport interface IAssociatedFileCopyResults\r\n extends IAssociatedFileInfo,\r\n ICopyResults { }\r\n\r\n/**\r\n * Information for working with a file associated with an item.\r\n */\r\nexport interface IAssociatedFileInfo {\r\n /**\r\n * Resource's \"folder\"--the prefix before the filename\r\n */\r\n folder: string;\r\n\r\n /**\r\n * Resource's filename\r\n */\r\n filename: string;\r\n\r\n /**\r\n * An internal classification of the type of file: data, metadata, resource\r\n */\r\n type?: EFileType;\r\n\r\n /**\r\n * The mime type of the file\r\n */\r\n mimeType?: string;\r\n\r\n /**\r\n * URL where a resource, metadata, or thumbnail of an item or group can be found\r\n */\r\n url?: string;\r\n\r\n /**\r\n * File holding a resource, metadata, or thumbnail of an item or group\r\n */\r\n file?: File;\r\n}\r\n\r\n/**\r\n * Describes the results of topologically sorting items to be deployed so that dependencies are created before\r\n * the items that depend on them.\r\n */\r\nexport interface IBuildOrdering {\r\n /**\r\n * Item ids in order in which items are to be built.\r\n */\r\n buildOrder: string[];\r\n\r\n /**\r\n * Item ids of dependencies that were not supplied to ordering algorithm.\r\n */\r\n missingDependencies: string[];\r\n\r\n /**\r\n * Dictionary of item ids that need dependency patching; each id has a list of the ids of the dependencies to be patched.\r\n */\r\n itemsToBePatched: IKeyedListsOfStrings;\r\n}\r\n\r\n/**\r\n * Holds a complete AGO item.\r\n */\r\nexport interface ICompleteItem {\r\n /**\r\n * The \"base\" information of an item as MIME format text/plain JSON\r\n */\r\n base: IItem;\r\n\r\n /**\r\n * The data section of an item as a file even though it may be JSON\r\n */\r\n data: File;\r\n\r\n /**\r\n * The item's thumbnail as MIME format image/*\r\n */\r\n thumbnail: File;\r\n\r\n /**\r\n * The item's metadata as MIME format application/xml\r\n */\r\n metadata: File;\r\n\r\n /**\r\n * The item's resource files\r\n */\r\n resources: File[];\r\n\r\n /**\r\n * list of forward relationshipType/relatedItems[] pairs\r\n */\r\n fwdRelatedItems: IRelatedItems[];\r\n\r\n /**\r\n * list of reverse relationshipType/relatedItems[] pairs\r\n */\r\n revRelatedItems: IRelatedItems[];\r\n\r\n /**\r\n * Additional feature-service-only info\r\n */\r\n featureServiceProperties?: IFeatureServiceProperties;\r\n}\r\n\r\n/**\r\n * Results of fetching and copying an item.\r\n */\r\nexport interface ICopyResults {\r\n /**\r\n * Status of fetching item from source\r\n */\r\n fetchedFromSource: boolean;\r\n\r\n /**\r\n * Status of copying item to destination; undefined if fetchedFromSource is false\r\n */\r\n copiedToDestination?: boolean;\r\n}\r\n\r\nexport interface ICreateItemFromTemplateResponse {\r\n /**\r\n * Created item\r\n */\r\n item?: IItemTemplate;\r\n\r\n /**\r\n * Item's AGO id\r\n */\r\n id: string;\r\n\r\n /**\r\n * AGO item type name\r\n */\r\n type: string;\r\n\r\n /**\r\n * Does the item need post processing to handle unresolved variables\r\n */\r\n postProcess: boolean;\r\n}\r\n\r\n/**\r\n * Options for creating a solution item.\r\n */\r\nexport interface ICreateSolutionOptions {\r\n /**\r\n * Calling-program-supplied id, perhaps used to distinguish between concurrent deployments or deletions;\r\n * default: id of group used to create Solution\r\n */\r\n jobId?: string;\r\n\r\n /**\r\n * Title to be given to created Solution item; defaults: for a group, group title;\r\n * for an item, random string from common.createShortId()\r\n */\r\n title?: string;\r\n\r\n /**\r\n * Snippet to be given to created Solution item; defaults: for a group, group snippet; for an item, \"\"\r\n */\r\n snippet?: string;\r\n\r\n /**\r\n * Description to be given to created Solution item; defaults: for a group, group description; for an item, \"\"\r\n */\r\n description?: string;\r\n\r\n /**\r\n * Tags to be given to created Solution item; defaults: for a group, group tags; for an item, []\r\n */\r\n tags?: string[];\r\n\r\n /**\r\n * URL to thumbnail to be given to created Solution item, but see `thumbnail` property; default: \"\"\r\n */\r\n thumbnailurl?: string;\r\n\r\n /**\r\n * Thumbnail file to be given to created Solution item; default: null; has priority over `thumbnailurl`\r\n */\r\n thumbnail?: File;\r\n\r\n /**\r\n * Folder in which to place created Solution item; default is top level\r\n */\r\n folderId?: string;\r\n\r\n /**\r\n * Facts to be used for creating the Solution item; default: \\{\\}\r\n */\r\n templateDictionary?: any;\r\n\r\n /**\r\n * Should fields be templatized; default: false\r\n */\r\n templatizeFields?: boolean;\r\n\r\n /**\r\n * Additional typeKeywords (beyond always-added [\"Solution\", \"Template\"]) to be added to Solution item; default: []\r\n */\r\n additionalTypeKeywords?: string[];\r\n\r\n /**\r\n * Packet of supplemental information provided from certain progress states, e.g., Finished deleting an item\r\n * or deploying a Solution item\r\n */\r\n progressCallback?: ISolutionProgressCallback;\r\n\r\n /**\r\n * Should progress be echoed to the debugging console? default: false\r\n */\r\n consoleProgress?: boolean;\r\n\r\n /**\r\n * Placeholder for ids of items to be placed into Solution. DO NOT USE--it is overwritten by function createSolution\r\n */\r\n itemIds?: string[];\r\n\r\n /**\r\n * Credentials for the organization with the source items; default: solution item authentication\r\n */\r\n sourceItemAuthentication?: UserSession;\r\n}\r\n\r\n/**\r\n * Result of creating a solution item.\r\n */\r\nexport interface ICreateSolutionResult {\r\n /**\r\n * Success or failure\r\n */\r\n success: boolean;\r\n\r\n /**\r\n * Id of created Solution template\r\n */\r\n solutionTemplateItemId: string;\r\n\r\n /**\r\n * When true items with source-itemId type keyword will be reused; default: false\r\n */\r\n enableItemReuse?: boolean;\r\n}\r\n\r\n/**\r\n * The relevant elements of a data source that are used for templatization\r\n */\r\nexport interface IDatasourceInfo {\r\n /**\r\n * Calculated pattern used for templatization eg. \"\\{\\{itemId.fields.layerId.fieldname\\}\\}\"\r\n */\r\n basePath: string;\r\n\r\n /**\r\n * The portal item id eg. \"4efe5f693de34620934787ead6693f19\"\r\n */\r\n itemId: string;\r\n\r\n /**\r\n * The id for the layer from the service eg. 0\r\n */\r\n layerId: number;\r\n\r\n /**\r\n * The webmap layer id eg. \"TestLayerForDashBoardMap_632\"\r\n */\r\n id?: string;\r\n\r\n /**\r\n * The id for the layer from a map could be referenced by more than one map for a solution\r\n */\r\n ids: string[];\r\n\r\n /**\r\n * The url used for fields lookup\r\n */\r\n url?: string;\r\n\r\n /**\r\n * The fields this datasource contains\r\n */\r\n fields: any[];\r\n\r\n /**\r\n * The ralative ids for references to a datasource\r\n * Application types like dashboard can reference datasources via realtive widget reference ids\r\n */\r\n references?: any[];\r\n\r\n /**\r\n * The details on any relationships that the datasource is involved in\r\n */\r\n relationships: any[];\r\n\r\n /**\r\n * The layers adminLayerInfo\r\n * Used to fetch relationship info in some cases\r\n */\r\n adminLayerInfo: any;\r\n}\r\n\r\n/**\r\n * Options for deleting a deployed solution item and all of the items that were created as part of that deployment\r\n */\r\nexport interface IDeleteSolutionOptions {\r\n /**\r\n * Calling-program-supplied id, perhaps used to distinguish between concurrent deployments or deletions;\r\n * default: id of solution being deleted\r\n */\r\n jobId?: string;\r\n\r\n /**\r\n * Packet of supplemental information provided from certain progress states, e.g., Finished deleting an item\r\n * or deploying a Solution item\r\n */\r\n progressCallback?: ISolutionProgressCallback;\r\n\r\n /**\r\n * Should progress be echoed to the debugging console? default: false\r\n */\r\n consoleProgress?: boolean;\r\n}\r\n\r\n/**\r\n * Storage of dependencies.\r\n */\r\nexport interface IDependency {\r\n /**\r\n * Dependency item id for templatization.\r\n */\r\n id: string;\r\n\r\n /**\r\n * Dependency service name for name mapping.\r\n * This is used to find appropriate source service name for views.\r\n */\r\n name: string;\r\n}\r\n\r\n/**\r\n * IDeployFilename extended to include the URL to the stored resource.\r\n */\r\nexport interface IDeployFileCopyPath extends IDeployFilename {\r\n url: string;\r\n}\r\n\r\n/**\r\n * File type, folder, and filename for deploying an item's binary resource.\r\n */\r\nexport interface IDeployFilename {\r\n type: EFileType;\r\n folder: string;\r\n filename: string;\r\n}\r\n\r\n/**\r\n * Options for deploying a solution item and for creating the solution index item representing the deployment\r\n */\r\nexport interface IDeploySolutionOptions {\r\n /**\r\n * Calling-program-supplied id, perhaps used to distinguish between concurrent deployments or deletions;\r\n * default: id of solution being deployed\r\n */\r\n jobId?: string;\r\n\r\n /**\r\n * Title to be given to deployed Solution item; default: copied from solution item\r\n */\r\n title?: string;\r\n\r\n /**\r\n * Snippet to be given to created Solution item; default: copied from solution item\r\n */\r\n snippet?: string;\r\n\r\n /**\r\n * Description to be given to created Solution item; default: copied from solution item\r\n */\r\n description?: string;\r\n\r\n /**\r\n * Tags to be given to created Solution item; default: copied from solution item\r\n */\r\n tags?: string[];\r\n\r\n /**\r\n * URL to thumbnail to be given to created Solution item, but see `thumbnail` property; default: copied from\r\n * solution item\r\n */\r\n thumbnailurl?: string;\r\n\r\n /**\r\n * Thumbnail file to be given to created Solution item; default: null; has priority over `thumbnailurl`\r\n */\r\n thumbnail?: File;\r\n\r\n /**\r\n * Facts to be used for creating the Solution item; default: \\{\\}\r\n */\r\n templateDictionary?: any;\r\n\r\n /**\r\n * Additional typeKeywords (beyond always-added [\"Solution\", \"Deployed\"]) to be added to Solution item; default: []\r\n */\r\n additionalTypeKeywords?: string[];\r\n\r\n /**\r\n * When true items with source-itemId type keyword will be reused; default: false\r\n */\r\n enableItemReuse?: boolean;\r\n\r\n /**\r\n * Packet of supplemental information provided from certain progress states, e.g., Finished deleting an item\r\n * or deploying a Solution item\r\n */\r\n progressCallback?: ISolutionProgressCallback;\r\n\r\n /**\r\n * Should progress be echoed to the debugging console? default: false\r\n */\r\n consoleProgress?: boolean;\r\n\r\n /**\r\n * Credentials for the organization with the source items; default: authentication supplied for deployment destination\r\n */\r\n storageAuthentication?: UserSession;\r\n\r\n /**\r\n * Version of storage read from Solution item. DO NOT USE--it is overwritten by function deploySolutionFromTemplate\r\n */\r\n storageVersion?: number;\r\n}\r\n\r\n/**\r\n * Result of deploying a solution item.\r\n */\r\nexport interface IDeploySolutionResult {\r\n /**\r\n * Success or failure\r\n */\r\n success: boolean;\r\n\r\n /**\r\n * Id of deployed Solution\r\n */\r\n deployedSolutionItemId: string;\r\n}\r\n\r\n/**\r\n * Contains feature-service-specific properties.\r\n */\r\nexport interface IFeatureServiceProperties {\r\n service: any;\r\n layers: any[];\r\n tables: any[];\r\n workforceInfos?: any;\r\n contingentValues?: any;\r\n}\r\n\r\n/**\r\n * File folder, filename, and data.\r\n */\r\nexport interface IFile {\r\n folder: string;\r\n filename: string;\r\n blob: Blob;\r\n}\r\n\r\n/**\r\n * Filename, MIME type, and data.\r\n */\r\nexport interface IFileMimeTyped {\r\n filename: string;\r\n mimeType: string;\r\n blob: Blob;\r\n}\r\n\r\n/**\r\n * Existing Items promises, associated item Ids and types\r\n */\r\nexport interface IFindExistingItemsResponse {\r\n existingItemsDefs: Array<Promise<any>>;\r\n existingItemInfos: IFindExistingItemInfos[];\r\n}\r\n\r\n/**\r\n * Item Id and item type\r\n */\r\nexport interface IFindExistingItemInfos {\r\n itemId: string;\r\n type: string;\r\n}\r\n\r\n/**\r\n * Response from removing a folder.\r\n */\r\nexport interface IFolderStatusResponse {\r\n /**\r\n * Success or failure\r\n */\r\n success: boolean;\r\n\r\n folder: {\r\n username: string;\r\n id: string;\r\n title: string;\r\n };\r\n}\r\n\r\n/**\r\n * Undocumented property returned by portal function `getRelatedItems`.\r\n */\r\ninterface IGetRelatedItemsResponseAggregation {\r\n total: IGetRelatedItemsResponseAggregationTotal;\r\n}\r\n\r\n/**\r\n * Undocumented property returned by portal function `getRelatedItems`.\r\n */\r\ninterface IGetRelatedItemsResponseAggregationTotal {\r\n /**\r\n * Number of items returned in this response\r\n */\r\n count: number;\r\n\r\n /**\r\n * Description of `count`, e.g., \"total\"\r\n */\r\n name: string;\r\n}\r\n\r\n/**\r\n * Extension of type to represent actual return from portal function `getRelatedItems`.\r\n */\r\nexport interface IGetRelatedItemsResponseFull extends IGetRelatedItemsResponse {\r\n /**\r\n * Undocumented property returned by portal function `getRelatedItems`.\r\n */\r\n aggregations: IGetRelatedItemsResponseAggregation;\r\n\r\n /**\r\n * Property used in conjunction with `start` to request the next batch of related items.\r\n */\r\n nextkey: string | null;\r\n\r\n /**\r\n * Echo of number of related items requested.\r\n */\r\n num: number;\r\n}\r\n\r\n/**\r\n * Response from getting the resources of a specified item, extended with paging properties\r\n */\r\nexport interface IGetResourcesResponse {\r\n /**\r\n * Total number of responses\r\n */\r\n total: number;\r\n\r\n /**\r\n * Resources\r\n */\r\n resources: IResource[];\r\n\r\n /**\r\n * The number of the first entry requested. The index number is 1-based.\r\n */\r\n start: number;\r\n\r\n /**\r\n * The number of results requested.\r\n */\r\n num: number;\r\n\r\n /**\r\n * The 1-based index of the start of the next batch of results; value is -1 if there are no more results\r\n * to be fetched\r\n */\r\n nextStart: number;\r\n}\r\n\r\n/**\r\n * Response from getting the category schema set on a group.\r\n *\r\n * @see https://developers.arcgis.com/rest/users-groups-and-items/group-category-schema.htm\r\n */\r\nexport interface IGroupCategorySchema {\r\n categorySchema: IGroupCategory[];\r\n}\r\n\r\n/**\r\n * Nestable category schema descripion set on a group.\r\n *\r\n * @see https://developers.arcgis.com/rest/users-groups-and-items/group-category-schema.htm\r\n */\r\nexport interface IGroupCategory {\r\n /**\r\n * Category title\r\n */\r\n title: string;\r\n\r\n /**\r\n * Category description\r\n */\r\n description?: string;\r\n\r\n /**\r\n * Child categories of this category\r\n */\r\n categories?: IGroupCategory[];\r\n}\r\n\r\n/**\r\n * Hierarchical arrangement of items and their dependencies.\r\n */\r\nexport interface IHierarchyElement {\r\n /**\r\n * Item id\r\n */\r\n id: string;\r\n\r\n /**\r\n * Items that this item depends on\r\n */\r\n dependencies: IHierarchyElement[];\r\n}\r\n\r\n/**\r\n * Subset of portal.IItem containing just the properties that are stored in a template--the item's \"base\" section.\r\n */\r\nexport interface IItemGeneralized {\r\n /**\r\n * Item categories\r\n */\r\n categories?: string[];\r\n\r\n /**\r\n * Specifies the locale for which content is returned.\r\n */\r\n culture?: string;\r\n\r\n /**\r\n * Item description\r\n */\r\n description?: string;\r\n\r\n /**\r\n * _Undocumented AGO item property_\r\n */\r\n documentation?: string;\r\n\r\n /**\r\n * An array that defines the bounding rectangle of the item as [[minx, miny], [maxx, maxy]]. Should always be in WGS84.\r\n */\r\n extent?: number[][] | string;\r\n\r\n /**\r\n * The unique ID for this item.\r\n */\r\n id: string;\r\n\r\n /**\r\n * A JSON object that primarily applies to system requirements, Terms and Conditions, version, supported platforms,\r\n * YouTube video ID, etc., associated with the application.\r\n */\r\n properties?: any;\r\n\r\n /**\r\n * A short summary description of the item.\r\n */\r\n snippet?: string;\r\n\r\n /**\r\n * The coordinate system of the item.\r\n */\r\n spatialReference?: ISpatialReference;\r\n\r\n /**\r\n * An array of user defined tags that describe the item.\r\n */\r\n tags?: string[];\r\n\r\n /**\r\n * The title of the item. This is the name that's displayed to users and by which they refer to the item.\r\n */\r\n title?: string;\r\n\r\n /**\r\n * The GIS content type of this item. Example types include Web Map, Map Service, Shapefile, and\r\n * Web Mapping Application.\r\n */\r\n type: string;\r\n\r\n /**\r\n * An array of keywords that further describes the type of this item. Each item is tagged with a set of\r\n * type keywords that are derived based on its primary type.\r\n */\r\n typeKeywords?: string[];\r\n\r\n /**\r\n * The URL for the resource represented by the item. Applies only to items that represent web-accessible\r\n * resources such as map services.\r\n */\r\n url?: string;\r\n\r\n /**\r\n * Generically definines remaining/unused properties\r\n */\r\n [key: string]: any;\r\n}\r\n\r\n/**\r\n * Extends `IItemRelationshipOptions` for the REST JS `getRelatedItems` call because it doesn't include\r\n * the new `start` and `num` properties.\r\n */\r\nexport interface IItemRelationshipOptionsPaging extends IItemRelationshipOptions {\r\n params: {\r\n /**\r\n * Relationship direction sought\r\n */\r\n direction: \"forward\" | \"reverse\",\r\n\r\n /**\r\n * One-based index of start of next batch to fetch\r\n */\r\n start: number,\r\n\r\n /**\r\n * Number of items requested; maximum value is 100\r\n */\r\n num: number,\r\n\r\n /**\r\n * Key needed by related records search for second and subsequent batches; value comes from previous fetch\r\n */\r\n nextkey?: string\r\n }\r\n}\r\n\r\n/**\r\n * The templatized form of an item or group.\r\n */\r\nexport interface IItemTemplate {\r\n /**\r\n * Item's AGO id\r\n */\r\n itemId: string;\r\n\r\n /**\r\n * AGO item type name\r\n */\r\n type: string;\r\n\r\n /**\r\n * Fairly unique identifier; set to 'i' + chars 2-8 of a random number in base 36\r\n */\r\n key: string;\r\n\r\n /**\r\n * Item base section JSON\r\n */\r\n item: IItemGeneralized;\r\n\r\n /**\r\n * Item data section JSON\r\n */\r\n data: any;\r\n\r\n /**\r\n * References to item resources\r\n */\r\n resources: any[];\r\n\r\n /**\r\n * References to related item\r\n */\r\n relatedItems?: IRelatedItems[];\r\n\r\n /**\r\n * List of ids of AGO items needed by this item\r\n */\r\n dependencies: string[];\r\n\r\n /**\r\n * List of ids of AGO groups the item needs to be shared with\r\n */\r\n groups: string[];\r\n\r\n /**\r\n * Miscellaneous item-specific properties\r\n */\r\n properties: any;\r\n\r\n /**\r\n * Estimated relative cost of deploying this item; corresponds to number of progressCallback\r\n * function calls made during while deploying it\r\n */\r\n estimatedDeploymentCostFactor: number;\r\n\r\n /**\r\n * Allow for adhoc properties\r\n */\r\n [propName: string]: any;\r\n}\r\n\r\n/**\r\n * Function signatures for use in a function lookup array.\r\n */\r\nexport interface IItemTemplateConversions {\r\n /**\r\n * Converts an item into a template for use in a Solution.\r\n */\r\n convertItemToTemplate(\r\n solutionItemId: string,\r\n itemInfo: any,\r\n destAuthentication: UserSession,\r\n srcAuthentication: UserSession,\r\n templateDictionary?: any\r\n ): Promise<IItemTemplate>;\r\n\r\n /**\r\n * Creates an item using templatized info in a Solution.\r\n */\r\n createItemFromTemplate(\r\n template: IItemTemplate,\r\n templateDictionary: any,\r\n destinationAuthentication: UserSession,\r\n itemProgressCallback: IItemProgressCallback\r\n ): Promise<ICreateItemFromTemplateResponse>;\r\n}\r\n\r\n/**\r\n * Structure for mapping from item type to module with type-specific template-handling code\r\n */\r\nexport type moduleHandler = IItemTemplateConversions | undefined | null;\r\n\r\n/**\r\n * Mapping from an AGO item type to the code handling that type.\r\n */\r\nexport interface IItemTypeModuleMap {\r\n [itemType: string]: moduleHandler;\r\n}\r\n\r\nexport interface IItemUpdate {\r\n id: string;\r\n /**\r\n * Key-value pair for update parameter.\r\n * N.B.: Use `data` key for binary data; all other keys are serialized, which zeroes out binary data!\r\n */\r\n [key: string]: any;\r\n}\r\n\r\n/**\r\n * Type with key access to lists of strings\r\n */\r\nexport interface IKeyedListsOfStrings {\r\n [key: string]: string[];\r\n}\r\n\r\n/**\r\n * Type with key access to strings\r\n */\r\nexport interface IMimeTypes {\r\n [key: string]: string;\r\n}\r\n\r\n/**\r\n * A simple interface for a key value pair with number as the key\r\n */\r\nexport interface INumberValuePair {\r\n [key: number]: any;\r\n}\r\n\r\n/**\r\n * Subset of a esri/portal/Portal used by this library.\r\n */\r\nexport interface IPortalSubset {\r\n /**\r\n * Name of the organization.\r\n */\r\n name: string;\r\n\r\n /**\r\n * The id of the organization that owns this portal. If null then this is the default portal\r\n * for anonymous and non-organizational users.\r\n */\r\n id: string;\r\n\r\n /**\r\n * The REST URL for the portal, for example \"https://www.arcgis.com/sharing/rest\" for ArcGIS Online\r\n * and \"https://www.example.com/arcgis/sharing/rest\" for your in-house portal.\r\n */\r\n restUrl: string;\r\n\r\n /**\r\n * The URL to the portal instance.\r\n */\r\n portalUrl: string;\r\n\r\n /**\r\n * The prefix selected by the organization's administrator to be used with the custom base URL for the portal.\r\n */\r\n urlKey: string;\r\n}\r\n\r\n/**\r\n * Storage of arguments for post processing functions\r\n */\r\nexport interface IPostProcessArgs {\r\n /**\r\n * Status message to show after the layerDefinition is updated.\r\n */\r\n message: string;\r\n\r\n /**\r\n * Key objects to add to the layerDefinition.\r\n */\r\n objects: any;\r\n\r\n /**\r\n * Template of item to be created\r\n */\r\n\r\n itemTemplate: any;\r\n\r\n /**\r\n * Credentials for the request\r\n */\r\n authentication: UserSession;\r\n}\r\n\r\n/**\r\n * The relevant elements of a data source that are used for templatization\r\n */\r\nexport interface IQuickCaptureDatasource {\r\n /**\r\n * The portal item id for the datasource eg. \"4efe5f693de34620934787ead6693f19\"\r\n */\r\n featureServiceItemId: string;\r\n\r\n /**\r\n * The application item id for the datasource eg. \"1d4de1e4-ef58-4e02-9159-7a6e6701cada\"\r\n */\r\n dataSourceId: string;\r\n\r\n /**\r\n * The url used for the datasource\r\n */\r\n url: number;\r\n}\r\n\r\n/**\r\n * A mapping between a relationship type and the list of item ids using that relationship.\r\n */\r\nexport interface IRelatedItems {\r\n /**\r\n * The type of relationship between the two items.\r\n *\r\n * @see https://developers.arcgis.com/rest/users-groups-and-items/relationship-types.htm\r\n */\r\n relationshipType: string;\r\n\r\n /**\r\n * Ids of related items\r\n */\r\n relatedItemIds: string[];\r\n}\r\n\r\n/**\r\n * Summary of a resource.\r\n */\r\nexport interface IResource {\r\n /**\r\n * Name of resource\r\n */\r\n resource: string;\r\n\r\n /**\r\n * The date the resource was created. Shown in UNIX time in milliseconds.\r\n */\r\n created: number;\r\n\r\n /**\r\n * The size of the resource in bytes.\r\n */\r\n size: number;\r\n}\r\n\r\n/**\r\n * A solution template AGO item\r\n */\r\nexport interface ISolutionItem {\r\n /**\r\n * Item base section JSON\r\n */\r\n item: any;\r\n\r\n /**\r\n * Item data section JSON\r\n */\r\n data: ISolutionItemData;\r\n\r\n /**\r\n * Supplemental information\r\n */\r\n properties?: IStringValuePair;\r\n\r\n /**\r\n * Generically definines remaining/unused properties\r\n */\r\n [key: string]: any;\r\n}\r\n\r\n/**\r\n * The data section of a solution item.\r\n */\r\nexport interface ISolutionItemData {\r\n /**\r\n * General information about the solution template\r\n */\r\n metadata: any;\r\n\r\n /**\r\n * The collection of templates\r\n */\r\n templates: IItemTemplate[];\r\n}\r\n\r\n/**\r\n * A brief form of an item in a deployed Solution item.\r\n */\r\nexport interface ISolutionItemPrecis {\r\n /**\r\n * The unique ID for this item.\r\n */\r\n id: string;\r\n\r\n /**\r\n * The GIS content type of this item. Example types include Web Map, Map Service, Shapefile, and\r\n * Web Mapping Application.\r\n */\r\n type: string;\r\n\r\n /**\r\n * The title of the item. This is the name that's displayed to users and by which they refer to the item.\r\n */\r\n title: string;\r\n\r\n /**\r\n * The date the item was last modified. Shown in UNIX time in milliseconds.\r\n */\r\n modified: number;\r\n\r\n /**\r\n * The username of the user who owns this item.\r\n */\r\n owner: string;\r\n}\r\n\r\n/**\r\n * A brief form of a deployed Solution item.\r\n */\r\nexport interface ISolutionPrecis {\r\n /**\r\n * The unique ID for this Solution item.\r\n */\r\n id: string;\r\n\r\n /**\r\n * The title of the item. This is the name that's displayed to users and by which they refer to the item.\r\n */\r\n title: string;\r\n\r\n /**\r\n * Folder containing the deployed Solution\r\n */\r\n folder: string;\r\n\r\n /**\r\n * Items contained in this solution\r\n */\r\n items: ISolutionItemPrecis[];\r\n\r\n /**\r\n * Ids of groups affiliated with this solution\r\n */\r\n groups: string[];\r\n}\r\n\r\n/**\r\n * Packet of supplemental information provided via a ISolutionProgressCallback call.\r\n */\r\nexport interface ISolutionProgressEvent {\r\n /**\r\n * Tag describing data\r\n */\r\n event: string;\r\n\r\n /**\r\n * Data\r\n */\r\n data?: any;\r\n}\r\n\r\n/**\r\n * Information about a resource to be copied into an item.\r\n */\r\nexport interface ISourceFile {\r\n /**\r\n * The portal item id, e.g., \"4efe5f693de34620934787ead6693f19\", that supplies the resource\r\n */\r\n itemId: string;\r\n\r\n /**\r\n * Resource file\r\n */\r\n file: File;\r\n\r\n /**\r\n * Resource's \"folder\"--the prefix before the filename\r\n */\r\n folder: string;\r\n\r\n /**\r\n * Resource's filename\r\n */\r\n filename: string;\r\n}\r\n\r\n/**\r\n * Information for storing a resource in a storage item.\r\n */\r\nexport interface ISourceFileCopyPath {\r\n /**\r\n * The portal item id, e.g., \"4efe5f693de34620934787ead6693f19\", that supplies the resource\r\n */\r\n itemId: string;\r\n\r\n /**\r\n * URL where a resource, metadata, or thumbnail of an item or group can be found\r\n */\r\n url: string;\r\n\r\n /**\r\n * Resource's \"folder\"--the prefix before the filename\r\n */\r\n folder: string;\r\n\r\n /**\r\n * Resource's filename\r\n */\r\n filename: string;\r\n}\r\n\r\n/**\r\n * A simple interface for a key value pair with string as the key\r\n */\r\nexport interface IStringValuePair {\r\n [key: string]: any;\r\n}\r\n\r\n/**\r\n * A common status response from AGO.\r\n */\r\nexport interface IStatusResponse {\r\n /**\r\n * Success or failure of request\r\n */\r\n success: boolean;\r\n\r\n /**\r\n * AGO id of item for which request was made\r\n */\r\n itemId: string;\r\n}\r\n\r\n/**\r\n * Storage of update info\r\n */\r\nexport interface IUpdate {\r\n /**\r\n * URL for the update request\r\n */\r\n url: string;\r\n\r\n /**\r\n * object to update the layers definition\r\n */\r\n params: any;\r\n\r\n /**\r\n * arguments for post processing functions\r\n */\r\n args: IPostProcessArgs;\r\n}\r\n\r\n/**\r\n * Survey 123 create API parameters\r\n */\r\nexport interface ISurvey123CreateParams {\r\n /**\r\n * Title for the survey Form item & folder\r\n */\r\n title: string;\r\n\r\n /**\r\n * Array of tags for the survey Form item\r\n */\r\n tags: string[];\r\n\r\n /**\r\n * Array of typeKeywords for the survey Form item\r\n */\r\n typeKeywords: string[];\r\n\r\n /**\r\n * Description for the survey Form item\r\n */\r\n description: string;\r\n\r\n /**\r\n * The survey form configuration schema. This defines configurable\r\n * content like the theme, questions, & header/footer text, etc.\r\n */\r\n form: any;\r\n\r\n /**\r\n * The username from the current session\r\n */\r\n username: string;\r\n\r\n /**\r\n * The token from the current session\r\n */\r\n token: string;\r\n\r\n /**\r\n * The portalUrl for Survey123 to direct API requests to\r\n */\r\n portalUrl: string;\r\n}\r\n\r\n/**\r\n * Successful Survey123 create API response\r\n */\r\nexport interface ISurvey123CreateSuccess {\r\n /**\r\n * Statically defined, always true for success\r\n */\r\n success: true;\r\n\r\n /**\r\n * Resulting Form item ID\r\n */\r\n id: string;\r\n\r\n /**\r\n * Subset of resulting Form item details\r\n */\r\n formItemInfo: {\r\n /**\r\n * Resulting Form item typeKeywords\r\n */\r\n typeKeywords: string[];\r\n\r\n /**\r\n * Resulting Form item ownerFolder\r\n */\r\n ownerFolder: string;\r\n\r\n /**\r\n * Resulting Form item access\r\n */\r\n access: string;\r\n\r\n /**\r\n * Resulting Form item owner\r\n */\r\n owner: string;\r\n };\r\n /**\r\n * Subset of resulting Feature Service(s) details\r\n */\r\n featureService: {\r\n /**\r\n * Subset of source Feature Service details\r\n */\r\n source: {\r\n /**\r\n * Resulting Feature Service item ID\r\n */\r\n itemId: string;\r\n\r\n /**\r\n * Generically definines remaining/unused properties\r\n */\r\n [key: string]: any;\r\n };\r\n\r\n /**\r\n * Generically definines remaining/unused properties\r\n */\r\n [key: string]: any;\r\n };\r\n\r\n /**\r\n * Generically definines remaining/unused properties\r\n */\r\n [key: string]: any;\r\n}\r\n\r\n/**\r\n * Unsuccessful Survey123 create API response\r\n */\r\nexport interface ISurvey123CreateError {\r\n /**\r\n * Statically defined, always false when unsuccessful\r\n */\r\n success: false;\r\n\r\n /**\r\n * Error details\r\n */\r\n error: {\r\n /**\r\n * HTTP error code\r\n */\r\n code: number;\r\n\r\n /**\r\n * Optional, additional details about the error\r\n */\r\n details: string[];\r\n\r\n /**\r\n * Message describing the error\r\n */\r\n message: string;\r\n };\r\n}\r\n\r\n/**\r\n * Result details for a successful Survey123 create\r\n * API request\r\n */\r\nexport interface ISurvey123CreateResult {\r\n formId: string;\r\n featureServiceId: string;\r\n folderId: string;\r\n}\r\n\r\n/**\r\n * Results of sending a zip to an item.\r\n */\r\nexport interface IZipCopyResults extends IZipInfo, ICopyResults { }\r\n\r\n/**\r\n * Information about a zipped file.\r\n */\r\nexport interface IZipInfo {\r\n /**\r\n * Zip's filename\r\n */\r\n filename: string;\r\n\r\n /**\r\n * JSZip object\r\n */\r\n zip: JSZip;\r\n\r\n /**\r\n * List of files included in this zip\r\n */\r\n filelist: any[];\r\n}\r\n\r\n/**\r\n * Title information for Velocity data.\r\n */\r\nexport interface IVelocityTitle {\r\n /**\r\n * The current label for the object\r\n */\r\n label: string;\r\n\r\n /**\r\n * Existing titles that have been used in the org\r\n */\r\n titles: string[];\r\n}\r\n\r\n\r\n//#endregion ---------------------------------------------------------------------------------------------------------//\r\n","export default (typeof global !== \"undefined\" ? global :\n typeof self !== \"undefined\" ? self :\n typeof window !== \"undefined\" ? window : {});\n","\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\nvar inited = false;\nfunction init () {\n inited = true;\n var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n for (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n }\n\n revLookup['-'.charCodeAt(0)] = 62\n revLookup['_'.charCodeAt(0)] = 63\n}\n\nexport function toByteArray (b64) {\n if (!inited) {\n init();\n }\n var i, j, l, tmp, placeHolders, arr\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // the number of equal signs (place holders)\n // if there are two placeholders, than the two characters before it\n // represent one byte\n // if there is only one, then the three characters before it represent 2 bytes\n // this is just a cheap hack to not do indexOf twice\n placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n\n // base64 is 4/3 + up to two characters of the original data\n arr = new Arr(len * 3 / 4 - placeHolders)\n\n // if there are placeholders, only get up to the last complete 4 chars\n l = placeHolders > 0 ? len - 4 : len\n\n var L = 0\n\n for (i = 0, j = 0; i < l; i += 4, j += 3) {\n tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\n arr[L++] = (tmp >> 16) & 0xFF\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n if (placeHolders === 2) {\n tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[L++] = tmp & 0xFF\n } else if (placeHolders === 1) {\n tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nexport function fromByteArray (uint8) {\n if (!inited) {\n init();\n }\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var output = ''\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n output += lookup[tmp >> 2]\n output += lookup[(tmp << 4) & 0x3F]\n output += '=='\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\n output += lookup[tmp >> 10]\n output += lookup[(tmp >> 4) & 0x3F]\n output += lookup[(tmp << 2) & 0x3F]\n output += '='\n }\n\n parts.push(output)\n\n return parts.join('')\n}\n","\nexport function read (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexport function write (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nexport default Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n\nimport * as base64 from './base64'\nimport * as ieee754 from './ieee754'\nimport isArray from './isArray'\n\nexport var INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : true\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nvar _kMaxLength = kMaxLength()\nexport {_kMaxLength as kMaxLength};\nfunction typedArraySupport () {\n return true;\n // rollup issues\n // try {\n // var arr = new Uint8Array(1)\n // arr.__proto__ = {\n // __proto__: Uint8Array.prototype,\n // foo: function () { return 42 }\n // }\n // return arr.foo() === 42 && // typed array instances can be augmented\n // typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n // arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n // } catch (e) {\n // return false\n // }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nexport function Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n // Object.defineProperty(Buffer, Symbol.species, {\n // value: null,\n // configurable: true\n // })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (internalIsBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nexport function SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\nBuffer.isBuffer = isBuffer;\nfunction internalIsBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!internalIsBuffer(a) || !internalIsBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!internalIsBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (internalIsBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!internalIsBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!internalIsBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (internalIsBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!internalIsBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = internalIsBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n\n\n// the following is from is-buffer, also by Feross Aboukhadijeh and with same lisence\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nexport function isBuffer(obj) {\n return obj != null && (!!obj._isBuffer || isFastBuffer(obj) || isSlowBuffer(obj))\n}\n\nfunction isFastBuffer (obj) {\n return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isFastBuffer(obj.slice(0, 0))\n}\n","// shim for using process in browser\n// based off https://github.com/defunctzombie/node-process/blob/master/browser.js\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\nvar cachedSetTimeout = defaultSetTimout;\nvar cachedClearTimeout = defaultClearTimeout;\nif (typeof global.setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n}\nif (typeof global.clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n}\n\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\nexport function nextTick(fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n}\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nexport var title = 'browser';\nexport var platform = 'browser';\nexport var browser = true;\nexport var env = {};\nexport var argv = [];\nexport var version = ''; // empty string to avoid regexp issues\nexport var versions = {};\nexport var release = {};\nexport var config = {};\n\nfunction noop() {}\n\nexport var on = noop;\nexport var addListener = noop;\nexport var once = noop;\nexport var off = noop;\nexport var removeListener = noop;\nexport var removeAllListeners = noop;\nexport var emit = noop;\n\nexport function binding(name) {\n throw new Error('process.binding is not supported');\n}\n\nexport function cwd () { return '/' }\nexport function chdir (dir) {\n throw new Error('process.chdir is not supported');\n};\nexport function umask() { return 0; }\n\n// from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js\nvar performance = global.performance || {}\nvar performanceNow =\n performance.now ||\n performance.mozNow ||\n performance.msNow ||\n performance.oNow ||\n performance.webkitNow ||\n function(){ return (new Date()).getTime() }\n\n// generate timestamp or delta\n// see http://nodejs.org/api/process.html#process_process_hrtime\nexport function hrtime(previousTimestamp){\n var clocktime = performanceNow.call(performance)*1e-3\n var seconds = Math.floor(clocktime)\n var nanoseconds = Math.floor((clocktime%1)*1e9)\n if (previousTimestamp) {\n seconds = seconds - previousTimestamp[0]\n nanoseconds = nanoseconds - previousTimestamp[1]\n if (nanoseconds<0) {\n seconds--\n nanoseconds += 1e9\n }\n }\n return [seconds,nanoseconds]\n}\n\nvar startTime = new Date();\nexport function uptime() {\n var currentTime = new Date();\n var dif = currentTime - startTime;\n return dif / 1000;\n}\n\nexport default {\n nextTick: nextTick,\n title: title,\n browser: browser,\n env: env,\n argv: argv,\n version: version,\n versions: versions,\n on: on,\n addListener: addListener,\n once: once,\n off: off,\n removeListener: removeListener,\n removeAllListeners: removeAllListeners,\n emit: emit,\n binding: binding,\n cwd: cwd,\n chdir: chdir,\n umask: umask,\n hrtime: hrtime,\n platform: platform,\n release: release,\n config: config,\n uptime: uptime\n};\n","/*!\n\nJSZip v3.10.1 - A JavaScript class for generating and reading zip files\n<http://stuartk.com/jszip>\n\n(c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com>\nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/main/LICENSE\n*/\n\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).JSZip=e()}}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t=\"function\"==typeof require&&require;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error(\"Cannot find module '\"+r+\"'\");throw n.code=\"MODULE_NOT_FOUND\",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h)}return o[r].exports}for(var l=\"function\"==typeof require&&require,e=0;e<h.length;e++)u(h[e]);return u}({1:[function(e,t,r){\"use strict\";var d=e(\"./utils\"),c=e(\"./support\"),p=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";r.encode=function(e){for(var t,r,n,i,s,a,o,h=[],u=0,l=e.length,f=l,c=\"string\"!==d.getTypeOf(e);u<e.length;)f=l-u,n=c?(t=e[u++],r=u<l?e[u++]:0,u<l?e[u++]:0):(t=e.charCodeAt(u++),r=u<l?e.charCodeAt(u++):0,u<l?e.charCodeAt(u++):0),i=t>>2,s=(3&t)<<4|r>>4,a=1<f?(15&r)<<2|n>>6:64,o=2<f?63&n:64,h.push(p.charAt(i)+p.charAt(s)+p.charAt(a)+p.charAt(o));return h.join(\"\")},r.decode=function(e){var t,r,n,i,s,a,o=0,h=0,u=\"data:\";if(e.substr(0,u.length)===u)throw new Error(\"Invalid base64 input, it looks like a data url.\");var l,f=3*(e=e.replace(/[^A-Za-z0-9+/=]/g,\"\")).length/4;if(e.charAt(e.length-1)===p.charAt(64)&&f--,e.charAt(e.length-2)===p.charAt(64)&&f--,f%1!=0)throw new Error(\"Invalid base64 input, bad content length.\");for(l=c.uint8array?new Uint8Array(0|f):new Array(0|f);o<e.length;)t=p.indexOf(e.charAt(o++))<<2|(i=p.indexOf(e.charAt(o++)))>>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l}},{\"./support\":30,\"./utils\":32}],2:[function(e,t,r){\"use strict\";var n=e(\"./external\"),i=e(\"./stream/DataWorker\"),s=e(\"./stream/Crc32Probe\"),a=e(\"./stream/DataLengthProbe\");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a(\"data_length\")),t=this;return e.on(\"end\",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a(\"uncompressedSize\")).pipe(t.compressWorker(r)).pipe(new a(\"compressedSize\")).withStreamInfo(\"compression\",t)},t.exports=o},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(e,t,r){\"use strict\";var n=e(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(){return new n(\"STORE compression\")},uncompressWorker:function(){return new n(\"STORE decompression\")}},r.DEFLATE=e(\"./flate\")},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(e,t,r){\"use strict\";var n=e(\"./utils\");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?\"string\"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{\"./utils\":32}],5:[function(e,t,r){\"use strict\";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){\"use strict\";var n=null;n=\"undefined\"!=typeof Promise?Promise:e(\"lie\"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,i=e(\"pako\"),s=e(\"./utils\"),a=e(\"./stream/GenericWorker\"),o=n?\"uint8array\":\"array\";function h(e,t){a.call(this,\"FlateWorker/\"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic=\"\\b\\0\",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h(\"Deflate\",e)},r.uncompressWorker=function(){return new h(\"Inflate\",{})}},{\"./stream/GenericWorker\":28,\"./utils\":32,pako:38}],8:[function(e,t,r){\"use strict\";function A(e,t){var r,n=\"\";for(r=0;r<t;r++)n+=String.fromCharCode(255&e),e>>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo(\"string\",s(h.name)),c=I.transformTo(\"string\",O.utf8encode(h.name)),d=h.comment,p=I.transformTo(\"string\",s(d)),m=I.transformTo(\"string\",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b=\"\",v=\"\",y=\"\",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),\"UNIX\"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+=\"up\"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+=\"uc\"+A(y.length,2)+y);var E=\"\";return E+=\"\\n\\0\",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+\"\\0\\0\\0\\0\"+A(z,4)+A(n,4)+f+b+p}}var I=e(\"../utils\"),i=e(\"../stream/GenericWorker\"),O=e(\"../utf8\"),B=e(\"../crc32\"),R=e(\"../signature\");function s(e,t,r,n){i.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t<this.dirRecords.length;t++)this.push({data:this.dirRecords[t],meta:{percent:100}});var r=this.bytesWritten-e,n=function(e,t,r,n,i){var s=I.transformTo(\"string\",i(n));return R.CENTRAL_DIRECTORY_END+\"\\0\\0\\0\\0\"+A(e,2)+A(e,2)+A(t,4)+A(r,4)+A(s.length,2)+s}(this.dirRecords.length,r,e,this.zipComment,this.encodeFileName);this.push({data:n,meta:{percent:100}})},s.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},s.prototype.registerPrevious=function(e){this._sources.push(e);var t=this;return e.on(\"data\",function(e){t.processChunk(e)}),e.on(\"end\",function(){t.closedSource(t.previous.streamInfo),t._sources.length?t.prepareNextSource():t.end()}),e.on(\"error\",function(e){t.error(e)}),this},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},s.prototype.error=function(e){var t=this._sources;if(!i.prototype.error.call(this,e))return!1;for(var r=0;r<t.length;r++)try{t[r].error(e)}catch(e){}return!0},s.prototype.lock=function(){i.prototype.lock.call(this);for(var e=this._sources,t=0;t<e.length;t++)e[t].lock()},t.exports=s},{\"../crc32\":4,\"../signature\":23,\"../stream/GenericWorker\":28,\"../utf8\":31,\"../utils\":32}],9:[function(e,t,r){\"use strict\";var u=e(\"../compressions\"),n=e(\"./ZipFileWorker\");r.generateWorker=function(e,a,t){var o=new n(a.streamFiles,t,a.platform,a.encodeFileName),h=0;try{e.forEach(function(e,t){h++;var r=function(e,t){var r=e||t,n=u[r];if(!n)throw new Error(r+\" is not a valid compression method !\");return n}(t.options.compression,a.compression),n=t.options.compressionOptions||a.compressionOptions||{},i=t.dir,s=t.date;t._compressWorker(r,n).withStreamInfo(\"file\",{name:e,dir:i,date:s,comment:t.comment||\"\",unixPermissions:t.unixPermissions,dosPermissions:t.dosPermissions}).pipe(o)}),o.entriesCount=h}catch(e){o.error(e)}return o}},{\"../compressions\":3,\"./ZipFileWorker\":8}],10:[function(e,t,r){\"use strict\";function n(){if(!(this instanceof n))return new n;if(arguments.length)throw new Error(\"The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.\");this.files=Object.create(null),this.comment=null,this.root=\"\",this.clone=function(){var e=new n;for(var t in this)\"function\"!=typeof this[t]&&(e[t]=this[t]);return e}}(n.prototype=e(\"./object\")).loadAsync=e(\"./load\"),n.support=e(\"./support\"),n.defaults=e(\"./defaults\"),n.version=\"3.10.1\",n.loadAsync=function(e,t){return(new n).loadAsync(e,t)},n.external=e(\"./external\"),t.exports=n},{\"./defaults\":5,\"./external\":6,\"./load\":11,\"./object\":15,\"./support\":30}],11:[function(e,t,r){\"use strict\";var u=e(\"./utils\"),i=e(\"./external\"),n=e(\"./utf8\"),s=e(\"./zipEntries\"),a=e(\"./stream/Crc32Probe\"),l=e(\"./nodejsUtils\");function f(n){return new i.Promise(function(e,t){var r=n.decompressed.getContentWorker().pipe(new a);r.on(\"error\",function(e){t(e)}).on(\"end\",function(){r.streamInfo.crc32!==n.decompressed.crc32?t(new Error(\"Corrupted zip : CRC32 mismatch\")):e()}).resume()})}t.exports=function(e,o){var h=this;return o=u.extend(o||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:n.utf8decode}),l.isNode&&l.isStream(e)?i.Promise.reject(new Error(\"JSZip can't accept a stream when loading a zip file.\")):u.prepareContent(\"the loaded zip file\",e,!0,o.optimizedBinaryString,o.base64).then(function(e){var t=new s(o);return t.load(e),t}).then(function(e){var t=[i.Promise.resolve(e)],r=e.files;if(o.checkCRC32)for(var n=0;n<r.length;n++)t.push(f(r[n]));return i.Promise.all(t)}).then(function(e){for(var t=e.shift(),r=t.files,n=0;n<r.length;n++){var i=r[n],s=i.fileNameStr,a=u.resolve(i.fileNameStr);h.file(a,i.decompressed,{binary:!0,optimizedBinaryString:!0,date:i.date,dir:i.dir,comment:i.fileCommentStr.length?i.fileCommentStr:null,unixPermissions:i.unixPermissions,dosPermissions:i.dosPermissions,createFolders:o.createFolders}),i.dir||(h.file(a).unsafeOriginalName=s)}return t.zipComment.length&&(h.comment=t.zipComment),h})}},{\"./external\":6,\"./nodejsUtils\":14,\"./stream/Crc32Probe\":25,\"./utf8\":31,\"./utils\":32,\"./zipEntries\":33}],12:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../stream/GenericWorker\");function s(e,t){i.call(this,\"Nodejs stream input adapter for \"+e),this._upstreamEnded=!1,this._bindStream(t)}n.inherits(s,i),s.prototype._bindStream=function(e){var t=this;(this._stream=e).pause(),e.on(\"data\",function(e){t.push({data:e,meta:{percent:0}})}).on(\"error\",function(e){t.isPaused?this.generatedError=e:t.error(e)}).on(\"end\",function(){t.isPaused?t._upstreamEnded=!0:t.end()})},s.prototype.pause=function(){return!!i.prototype.pause.call(this)&&(this._stream.pause(),!0)},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},t.exports=s},{\"../stream/GenericWorker\":28,\"../utils\":32}],13:[function(e,t,r){\"use strict\";var i=e(\"readable-stream\").Readable;function n(e,t,r){i.call(this,t),this._helper=e;var n=this;e.on(\"data\",function(e,t){n.push(e)||n._helper.pause(),r&&r(t)}).on(\"error\",function(e){n.emit(\"error\",e)}).on(\"end\",function(){n.push(null)})}e(\"../utils\").inherits(n,i),n.prototype._read=function(){this._helper.resume()},t.exports=n},{\"../utils\":32,\"readable-stream\":16}],14:[function(e,t,r){\"use strict\";t.exports={isNode:\"undefined\"!=typeof Buffer,newBufferFrom:function(e,t){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(e,t);if(\"number\"==typeof e)throw new Error('The \"data\" argument must not be a number');return new Buffer(e,t)},allocBuffer:function(e){if(Buffer.alloc)return Buffer.alloc(e);var t=new Buffer(e);return t.fill(0),t},isBuffer:function(e){return Buffer.isBuffer(e)},isStream:function(e){return e&&\"function\"==typeof e.on&&\"function\"==typeof e.pause&&\"function\"==typeof e.resume}}},{}],15:[function(e,t,r){\"use strict\";function s(e,t,r){var n,i=u.getTypeOf(t),s=u.extend(r||{},f);s.date=s.date||new Date,null!==s.compression&&(s.compression=s.compression.toUpperCase()),\"string\"==typeof s.unixPermissions&&(s.unixPermissions=parseInt(s.unixPermissions,8)),s.unixPermissions&&16384&s.unixPermissions&&(s.dir=!0),s.dosPermissions&&16&s.dosPermissions&&(s.dir=!0),s.dir&&(e=g(e)),s.createFolders&&(n=_(e))&&b.call(this,n,!0);var a=\"string\"===i&&!1===s.binary&&!1===s.base64;r&&void 0!==r.binary||(s.binary=!a),(t instanceof c&&0===t.uncompressedSize||s.dir||!t||0===t.length)&&(s.base64=!1,s.binary=!0,t=\"\",s.compression=\"STORE\",i=\"string\");var o=null;o=t instanceof c||t instanceof l?t:p.isNode&&p.isStream(t)?new m(e,t):u.prepareContent(e,t,s.binary,s.optimizedBinaryString,s.base64);var h=new d(e,o,s);this.files[e]=h}var i=e(\"./utf8\"),u=e(\"./utils\"),l=e(\"./stream/GenericWorker\"),a=e(\"./stream/StreamHelper\"),f=e(\"./defaults\"),c=e(\"./compressedObject\"),d=e(\"./zipObject\"),o=e(\"./generate\"),p=e(\"./nodejsUtils\"),m=e(\"./nodejs/NodejsStreamInputAdapter\"),_=function(e){\"/\"===e.slice(-1)&&(e=e.substring(0,e.length-1));var t=e.lastIndexOf(\"/\");return 0<t?e.substring(0,t):\"\"},g=function(e){return\"/\"!==e.slice(-1)&&(e+=\"/\"),e},b=function(e,t){return t=void 0!==t?t:f.createFolders,e=g(e),this.files[e]||s.call(this,e,null,{dir:!0,createFolders:t}),this.files[e]};function h(e){return\"[object RegExp]\"===Object.prototype.toString.call(e)}var n={load:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},forEach:function(e){var t,r,n;for(t in this.files)n=this.files[t],(r=t.slice(this.root.length,t.length))&&t.slice(0,this.root.length)===this.root&&e(r,n)},filter:function(r){var n=[];return this.forEach(function(e,t){r(e,t)&&n.push(t)}),n},file:function(e,t,r){if(1!==arguments.length)return e=this.root+e,s.call(this,e,t,r),this;if(h(e)){var n=e;return this.filter(function(e,t){return!t.dir&&n.test(e)})}var i=this.files[this.root+e];return i&&!i.dir?i:null},folder:function(r){if(!r)return this;if(h(r))return this.filter(function(e,t){return t.dir&&r.test(e)});var e=this.root+r,t=b.call(this,e),n=this.clone();return n.root=t.name,n},remove:function(r){r=this.root+r;var e=this.files[r];if(e||(\"/\"!==r.slice(-1)&&(r+=\"/\"),e=this.files[r]),e&&!e.dir)delete this.files[r];else for(var t=this.filter(function(e,t){return t.name.slice(0,r.length)===r}),n=0;n<t.length;n++)delete this.files[t[n].name];return this},generate:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},generateInternalStream:function(e){var t,r={};try{if((r=u.extend(e||{},{streamFiles:!1,compression:\"STORE\",compressionOptions:null,type:\"\",platform:\"DOS\",comment:null,mimeType:\"application/zip\",encodeFileName:i.utf8encode})).type=r.type.toLowerCase(),r.compression=r.compression.toUpperCase(),\"binarystring\"===r.type&&(r.type=\"string\"),!r.type)throw new Error(\"No output type specified.\");u.checkSupport(r.type),\"darwin\"!==r.platform&&\"freebsd\"!==r.platform&&\"linux\"!==r.platform&&\"sunos\"!==r.platform||(r.platform=\"UNIX\"),\"win32\"===r.platform&&(r.platform=\"DOS\");var n=r.comment||this.comment||\"\";t=o.generateWorker(this,r,n)}catch(e){(t=new l(\"error\")).error(e)}return new a(t,r.type||\"string\",r.mimeType)},generateAsync:function(e,t){return this.generateInternalStream(e).accumulate(t)},generateNodeStream:function(e,t){return(e=e||{}).type||(e.type=\"nodebuffer\"),this.generateInternalStream(e).toNodejsStream(t)}};t.exports=n},{\"./compressedObject\":2,\"./defaults\":5,\"./generate\":9,\"./nodejs/NodejsStreamInputAdapter\":12,\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31,\"./utils\":32,\"./zipObject\":35}],16:[function(e,t,r){\"use strict\";t.exports=e(\"stream\")},{stream:void 0}],17:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e);for(var t=0;t<this.data.length;t++)e[t]=255&e[t]}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data[this.zero+e]},i.prototype.lastIndexOfSignature=function(e){for(var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),i=e.charCodeAt(3),s=this.length-4;0<=s;--s)if(this.data[s]===t&&this.data[s+1]===r&&this.data[s+2]===n&&this.data[s+3]===i)return s-this.zero;return-1},i.prototype.readAndCheckSignature=function(e){var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),i=e.charCodeAt(3),s=this.readData(4);return t===s[0]&&r===s[1]&&n===s[2]&&i===s[3]},i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return[];var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],18:[function(e,t,r){\"use strict\";var n=e(\"../utils\");function i(e){this.data=e,this.length=e.length,this.index=0,this.zero=0}i.prototype={checkOffset:function(e){this.checkIndex(this.index+e)},checkIndex:function(e){if(this.length<this.zero+e||e<0)throw new Error(\"End of data reached (data length = \"+this.length+\", asked index = \"+e+\"). Corrupted zip ?\")},setIndex:function(e){this.checkIndex(e),this.index=e},skip:function(e){this.setIndex(this.index+e)},byteAt:function(){},readInt:function(e){var t,r=0;for(this.checkOffset(e),t=this.index+e-1;t>=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo(\"string\",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{\"../utils\":32}],19:[function(e,t,r){\"use strict\";var n=e(\"./Uint8ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],21:[function(e,t,r){\"use strict\";var n=e(\"./ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../support\"),s=e(\"./ArrayReader\"),a=e(\"./StringReader\"),o=e(\"./NodeBufferReader\"),h=e(\"./Uint8ArrayReader\");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),\"string\"!==t||i.uint8array?\"nodebuffer\"===t?new o(e):i.uint8array?new h(n.transformTo(\"uint8array\",e)):new s(n.transformTo(\"array\",e)):new a(e)}},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(e,t,r){\"use strict\";r.LOCAL_FILE_HEADER=\"PK\u0003\u0004\",r.CENTRAL_FILE_HEADER=\"PK\u0001\u0002\",r.CENTRAL_DIRECTORY_END=\"PK\u0005\u0006\",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\u0006\u0007\",r.ZIP64_CENTRAL_DIRECTORY_END=\"PK\u0006\u0006\",r.DATA_DESCRIPTOR=\"PK\u0007\\b\"},{}],24:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../utils\");function s(e){n.call(this,\"ConvertWorker to \"+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../crc32\");function s(){n.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}e(\"../utils\").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataLengthProbe for \"+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataWorker\");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":e=this.data.substring(this.index,t);break;case\"uint8array\":e=this.data.subarray(this.index,t);break;case\"array\":case\"nodebuffer\":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(e,t,r){\"use strict\";function n(e){this.name=e||\"default\",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit(\"data\",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit(\"error\",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit(\"error\",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r<this._listeners[e].length;r++)this._listeners[e][r].call(this,t)},pipe:function(e){return e.registerPrevious(this)},registerPrevious:function(e){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.streamInfo=e.streamInfo,this.mergeStreamInfo(),this.previous=e;var t=this;return e.on(\"data\",function(e){t.processChunk(e)}),e.on(\"end\",function(){t.end()}),e.on(\"error\",function(e){t.error(e)}),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;var e=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),e=!0),this.previous&&this.previous.resume(),!e},flush:function(){},processChunk:function(e){this.push(e)},withStreamInfo:function(e,t){return this.extraStreamInfo[e]=t,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var e in this.extraStreamInfo)Object.prototype.hasOwnProperty.call(this.extraStreamInfo,e)&&(this.streamInfo[e]=this.extraStreamInfo[e])},lock:function(){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var e=\"Worker \"+this.name;return this.previous?this.previous+\" -> \"+e:e}},t.exports=n},{}],29:[function(e,t,r){\"use strict\";var h=e(\"../utils\"),i=e(\"./ConvertWorker\"),s=e(\"./GenericWorker\"),u=e(\"../base64\"),n=e(\"../support\"),a=e(\"../external\"),o=null;if(n.nodestream)try{o=e(\"../nodejs/NodejsStreamOutputAdapter\")}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on(\"data\",function(e,t){n.push(e),o&&o(t)}).on(\"error\",function(e){n=[],r(e)}).on(\"end\",function(){try{var e=function(e,t,r){switch(e){case\"blob\":return h.newBlob(h.transformTo(\"arraybuffer\",t),r);case\"base64\":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r<t.length;r++)s+=t[r].length;switch(e){case\"string\":return t.join(\"\");case\"array\":return Array.prototype.concat.apply([],t);case\"uint8array\":for(i=new Uint8Array(s),r=0;r<t.length;r++)i.set(t[r],n),n+=t[r].length;return i;case\"nodebuffer\":return Buffer.concat(t);default:throw new Error(\"concat : unsupported type '\"+e+\"'\")}}(i,n),a);t(e)}catch(e){r(e)}n=[]}).resume()})}function f(e,t,r){var n=t;switch(t){case\"blob\":case\"arraybuffer\":n=\"uint8array\";break;case\"base64\":n=\"string\"}try{this._internalType=n,this._outputType=t,this._mimeType=r,h.checkSupport(n),this._worker=e.pipe(new i(n)),e.lock()}catch(e){this._worker=new s(\"error\"),this._worker.error(e)}}f.prototype={accumulate:function(e){return l(this,e)},on:function(e,t){var r=this;return\"data\"===e?this._worker.on(e,function(e){t.call(r,e.data,e.meta)}):this._worker.on(e,function(){h.delay(t,arguments,r)}),this},resume:function(){return h.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(e){if(h.checkSupport(\"nodestream\"),\"nodebuffer\"!==this._outputType)throw new Error(this._outputType+\" is not supported by this method\");return new o(this,{objectMode:\"nodebuffer\"!==this._outputType},e)}},t.exports=f},{\"../base64\":1,\"../external\":6,\"../nodejs/NodejsStreamOutputAdapter\":13,\"../support\":30,\"../utils\":32,\"./ConvertWorker\":24,\"./GenericWorker\":28}],30:[function(e,t,r){\"use strict\";if(r.base64=!0,r.array=!0,r.string=!0,r.arraybuffer=\"undefined\"!=typeof ArrayBuffer&&\"undefined\"!=typeof Uint8Array,r.nodebuffer=\"undefined\"!=typeof Buffer,r.uint8array=\"undefined\"!=typeof Uint8Array,\"undefined\"==typeof ArrayBuffer)r.blob=!1;else{var n=new ArrayBuffer(0);try{r.blob=0===new Blob([n],{type:\"application/zip\"}).size}catch(e){try{var i=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);i.append(n),r.blob=0===i.getBlob(\"application/zip\").size}catch(e){r.blob=!1}}}try{r.nodestream=!!e(\"readable-stream\").Readable}catch(e){r.nodestream=!1}},{\"readable-stream\":16}],31:[function(e,t,s){\"use strict\";for(var o=e(\"./utils\"),h=e(\"./support\"),r=e(\"./nodejsUtils\"),n=e(\"./stream/GenericWorker\"),u=new Array(256),i=0;i<256;i++)u[i]=252<=i?6:248<=i?5:240<=i?4:224<=i?3:192<=i?2:1;u[254]=u[254]=1;function a(){n.call(this,\"utf-8 decode\"),this.leftOver=null}function l(){n.call(this,\"utf-8 encode\")}s.utf8encode=function(e){return h.nodebuffer?r.newBufferFrom(e,\"utf-8\"):function(e){var t,r,n,i,s,a=e.length,o=0;for(i=0;i<a;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=h.uint8array?new Uint8Array(o):new Array(o),i=s=0;s<o;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[s++]=r:(r<2048?t[s++]=192|r>>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo(\"nodebuffer\",e).toString(\"utf-8\"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t<s;)if((n=e[t++])<128)a[r++]=n;else if(4<(i=u[n]))a[r++]=65533,t+=i-1;else{for(n&=2===i?31:3===i?15:7;1<i&&t<s;)n=n<<6|63&e[t++],i--;1<i?a[r++]=65533:n<65536?a[r++]=n:(n-=65536,a[r++]=55296|n>>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?\"uint8array\":\"array\",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?\"uint8array\":\"array\",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(e,t,a){\"use strict\";var o=e(\"./support\"),h=e(\"./base64\"),r=e(\"./nodejsUtils\"),u=e(\"./external\");function n(e){return e}function l(e,t){for(var r=0;r<e.length;++r)t[r]=255&e.charCodeAt(r);return t}e(\"setimmediate\"),a.newBlob=function(t,r){a.checkSupport(\"blob\");try{return new Blob([t],{type:r})}catch(e){try{var n=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return n.append(t),n.getBlob(r)}catch(e){throw new Error(\"Bug : can't construct the Blob.\")}}};var i={stringifyByChunk:function(e,t,r){var n=[],i=0,s=e.length;if(s<=r)return String.fromCharCode.apply(null,e);for(;i<s;)\"array\"===t||\"nodebuffer\"===t?n.push(String.fromCharCode.apply(null,e.slice(i,Math.min(i+r,s)))):n.push(String.fromCharCode.apply(null,e.subarray(i,Math.min(i+r,s)))),i+=r;return n.join(\"\")},stringifyByChar:function(e){for(var t=\"\",r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return t},applyCanBeUsed:{uint8array:function(){try{return o.uint8array&&1===String.fromCharCode.apply(null,new Uint8Array(1)).length}catch(e){return!1}}(),nodebuffer:function(){try{return o.nodebuffer&&1===String.fromCharCode.apply(null,r.allocBuffer(1)).length}catch(e){return!1}}()}};function s(e){var t=65536,r=a.getTypeOf(e),n=!0;if(\"uint8array\"===r?n=i.applyCanBeUsed.uint8array:\"nodebuffer\"===r&&(n=i.applyCanBeUsed.nodebuffer),n)for(;1<t;)try{return i.stringifyByChunk(e,r,t)}catch(e){t=Math.floor(t/2)}return i.stringifyByChar(e)}function f(e,t){for(var r=0;r<e.length;r++)t[r]=e[r];return t}a.applyFromCharCode=s;var c={};c.string={string:n,array:function(e){return l(e,new Array(e.length))},arraybuffer:function(e){return c.string.uint8array(e).buffer},uint8array:function(e){return l(e,new Uint8Array(e.length))},nodebuffer:function(e){return l(e,r.allocBuffer(e.length))}},c.array={string:s,array:n,arraybuffer:function(e){return new Uint8Array(e).buffer},uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return r.newBufferFrom(e)}},c.arraybuffer={string:function(e){return s(new Uint8Array(e))},array:function(e){return f(new Uint8Array(e),new Array(e.byteLength))},arraybuffer:n,uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return r.newBufferFrom(new Uint8Array(e))}},c.uint8array={string:s,array:function(e){return f(e,new Array(e.length))},arraybuffer:function(e){return e.buffer},uint8array:n,nodebuffer:function(e){return r.newBufferFrom(e)}},c.nodebuffer={string:s,array:function(e){return f(e,new Array(e.length))},arraybuffer:function(e){return c.nodebuffer.uint8array(e).buffer},uint8array:function(e){return f(e,new Uint8Array(e.length))},nodebuffer:n},a.transformTo=function(e,t){if(t=t||\"\",!e)return t;a.checkSupport(e);var r=a.getTypeOf(t);return c[r][e](t)},a.resolve=function(e){for(var t=e.split(\"/\"),r=[],n=0;n<t.length;n++){var i=t[n];\".\"===i||\"\"===i&&0!==n&&n!==t.length-1||(\"..\"===i?r.pop():r.push(i))}return r.join(\"/\")},a.getTypeOf=function(e){return\"string\"==typeof e?\"string\":\"[object Array]\"===Object.prototype.toString.call(e)?\"array\":o.nodebuffer&&r.isBuffer(e)?\"nodebuffer\":o.uint8array&&e instanceof Uint8Array?\"uint8array\":o.arraybuffer&&e instanceof ArrayBuffer?\"arraybuffer\":void 0},a.checkSupport=function(e){if(!o[e.toLowerCase()])throw new Error(e+\" is not supported by this platform\")},a.MAX_VALUE_16BITS=65535,a.MAX_VALUE_32BITS=-1,a.pretty=function(e){var t,r,n=\"\";for(r=0;r<(e||\"\").length;r++)n+=\"\\\\x\"+((t=e.charCodeAt(r))<16?\"0\":\"\")+t.toString(16).toUpperCase();return n},a.delay=function(e,t,r){setImmediate(function(){e.apply(r||null,t||[])})},a.inherits=function(e,t){function r(){}r.prototype=t.prototype,e.prototype=new r},a.extend=function(){var e,t,r={};for(e=0;e<arguments.length;e++)for(t in arguments[e])Object.prototype.hasOwnProperty.call(arguments[e],t)&&void 0===r[t]&&(r[t]=arguments[e][t]);return r},a.prepareContent=function(r,e,n,i,s){return u.Promise.resolve(e).then(function(n){return o.blob&&(n instanceof Blob||-1!==[\"[object File]\",\"[object Blob]\"].indexOf(Object.prototype.toString.call(n)))&&\"undefined\"!=typeof FileReader?new u.Promise(function(t,r){var e=new FileReader;e.onload=function(e){t(e.target.result)},e.onerror=function(e){r(e.target.error)},e.readAsArrayBuffer(n)}):n}).then(function(e){var t=a.getTypeOf(e);return t?(\"arraybuffer\"===t?e=a.transformTo(\"uint8array\",e):\"string\"===t&&(s?e=h.decode(e):n&&!0!==i&&(e=function(e){return l(e,o.uint8array?new Uint8Array(e.length):new Array(e.length))}(e))),e):u.Promise.reject(new Error(\"Can't read the data of '\"+r+\"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?\"))})}},{\"./base64\":1,\"./external\":6,\"./nodejsUtils\":14,\"./support\":30,setimmediate:54}],33:[function(e,t,r){\"use strict\";var n=e(\"./reader/readerFor\"),i=e(\"./utils\"),s=e(\"./signature\"),a=e(\"./zipEntry\"),o=e(\"./support\");function h(e){this.files=[],this.loadOptions=e}h.prototype={checkSignature:function(e){if(!this.reader.readAndCheckSignature(e)){this.reader.index-=4;var t=this.reader.readString(4);throw new Error(\"Corrupted zip or bug: unexpected signature (\"+i.pretty(t)+\", expected \"+i.pretty(e)+\")\")}},isSignature:function(e,t){var r=this.reader.index;this.reader.setIndex(e);var n=this.reader.readString(4)===t;return this.reader.setIndex(r),n},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var e=this.reader.readData(this.zipCommentLength),t=o.uint8array?\"uint8array\":\"array\",r=i.transformTo(t,e);this.zipComment=this.loadOptions.decodeFileName(r)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var e,t,r,n=this.zip64EndOfCentralSize-44;0<n;)e=this.reader.readInt(2),t=this.reader.readInt(4),r=this.reader.readData(t),this.zip64ExtensibleData[e]={id:e,length:t,value:r}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),1<this.disksCount)throw new Error(\"Multi-volumes zip are not supported\")},readLocalFiles:function(){var e,t;for(e=0;e<this.files.length;e++)t=this.files[e],this.reader.setIndex(t.localHeaderOffset),this.checkSignature(s.LOCAL_FILE_HEADER),t.readLocalPart(this.reader),t.handleUTF8(),t.processAttributes()},readCentralDir:function(){var e;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(s.CENTRAL_FILE_HEADER);)(e=new a({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(e);if(this.centralDirRecords!==this.files.length&&0!==this.centralDirRecords&&0===this.files.length)throw new Error(\"Corrupted zip or bug: expected \"+this.centralDirRecords+\" records in central dir, got \"+this.files.length)},readEndOfCentral:function(){var e=this.reader.lastIndexOfSignature(s.CENTRAL_DIRECTORY_END);if(e<0)throw!this.isSignature(0,s.LOCAL_FILE_HEADER)?new Error(\"Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html\"):new Error(\"Corrupted zip: can't find end of central directory\");this.reader.setIndex(e);var t=e;if(this.checkSignature(s.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===i.MAX_VALUE_16BITS||this.diskWithCentralDirStart===i.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===i.MAX_VALUE_16BITS||this.centralDirRecords===i.MAX_VALUE_16BITS||this.centralDirSize===i.MAX_VALUE_32BITS||this.centralDirOffset===i.MAX_VALUE_32BITS){if(this.zip64=!0,(e=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory locator\");if(this.reader.setIndex(e),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,s.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory\");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var r=this.centralDirOffset+this.centralDirSize;this.zip64&&(r+=20,r+=12+this.zip64EndOfCentralSize);var n=t-r;if(0<n)this.isSignature(t,s.CENTRAL_FILE_HEADER)||(this.reader.zero=n);else if(n<0)throw new Error(\"Corrupted zip: missing \"+Math.abs(n)+\" bytes.\")},prepareReader:function(e){this.reader=n(e)},load:function(e){this.prepareReader(e),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},t.exports=h},{\"./reader/readerFor\":22,\"./signature\":23,\"./support\":30,\"./utils\":32,\"./zipEntry\":34}],34:[function(e,t,r){\"use strict\";var n=e(\"./reader/readerFor\"),s=e(\"./utils\"),i=e(\"./compressedObject\"),a=e(\"./crc32\"),o=e(\"./utf8\"),h=e(\"./compressions\"),u=e(\"./support\");function l(e,t){this.options=e,this.loadOptions=t}l.prototype={isEncrypted:function(){return 1==(1&this.bitFlag)},useUTF8:function(){return 2048==(2048&this.bitFlag)},readLocalPart:function(e){var t,r;if(e.skip(22),this.fileNameLength=e.readInt(2),r=e.readInt(2),this.fileName=e.readData(this.fileNameLength),e.skip(r),-1===this.compressedSize||-1===this.uncompressedSize)throw new Error(\"Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)\");if(null===(t=function(e){for(var t in h)if(Object.prototype.hasOwnProperty.call(h,t)&&h[t].magic===e)return h[t];return null}(this.compressionMethod)))throw new Error(\"Corrupted zip : compression \"+s.pretty(this.compressionMethod)+\" unknown (inner file : \"+s.transformTo(\"string\",this.fileName)+\")\");this.decompressed=new i(this.compressedSize,this.uncompressedSize,this.crc32,t,e.readData(this.compressedSize))},readCentralPart:function(e){this.versionMadeBy=e.readInt(2),e.skip(2),this.bitFlag=e.readInt(2),this.compressionMethod=e.readString(2),this.date=e.readDate(),this.crc32=e.readInt(4),this.compressedSize=e.readInt(4),this.uncompressedSize=e.readInt(4);var t=e.readInt(2);if(this.extraFieldsLength=e.readInt(2),this.fileCommentLength=e.readInt(2),this.diskNumberStart=e.readInt(2),this.internalFileAttributes=e.readInt(2),this.externalFileAttributes=e.readInt(4),this.localHeaderOffset=e.readInt(4),this.isEncrypted())throw new Error(\"Encrypted zip are not supported\");e.skip(t),this.readExtraFields(e),this.parseZIP64ExtraField(e),this.fileComment=e.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var e=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4<i;)t=e.readInt(2),r=e.readInt(2),n=e.readData(r),this.extraFields[t]={id:t,length:r,value:n};e.setIndex(i)},handleUTF8:function(){var e=u.uint8array?\"uint8array\":\"array\";if(this.useUTF8())this.fileNameStr=o.utf8decode(this.fileName),this.fileCommentStr=o.utf8decode(this.fileComment);else{var t=this.findExtraFieldUnicodePath();if(null!==t)this.fileNameStr=t;else{var r=s.transformTo(e,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(r)}var n=this.findExtraFieldUnicodeComment();if(null!==n)this.fileCommentStr=n;else{var i=s.transformTo(e,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(i)}}},findExtraFieldUnicodePath:function(){var e=this.extraFields[28789];if(e){var t=n(e.value);return 1!==t.readInt(1)?null:a(this.fileName)!==t.readInt(4)?null:o.utf8decode(t.readData(e.length-5))}return null},findExtraFieldUnicodeComment:function(){var e=this.extraFields[25461];if(e){var t=n(e.value);return 1!==t.readInt(1)?null:a(this.fileComment)!==t.readInt(4)?null:o.utf8decode(t.readData(e.length-5))}return null}},t.exports=l},{\"./compressedObject\":2,\"./compressions\":3,\"./crc32\":4,\"./reader/readerFor\":22,\"./support\":30,\"./utf8\":31,\"./utils\":32}],35:[function(e,t,r){\"use strict\";function n(e,t,r){this.name=e,this.dir=r.dir,this.date=r.date,this.comment=r.comment,this.unixPermissions=r.unixPermissions,this.dosPermissions=r.dosPermissions,this._data=t,this._dataBinary=r.binary,this.options={compression:r.compression,compressionOptions:r.compressionOptions}}var s=e(\"./stream/StreamHelper\"),i=e(\"./stream/DataWorker\"),a=e(\"./utf8\"),o=e(\"./compressedObject\"),h=e(\"./stream/GenericWorker\");n.prototype={internalStream:function(e){var t=null,r=\"string\";try{if(!e)throw new Error(\"No output type specified.\");var n=\"string\"===(r=e.toLowerCase())||\"text\"===r;\"binarystring\"!==r&&\"text\"!==r||(r=\"string\"),t=this._decompressWorker();var i=!this._dataBinary;i&&!n&&(t=t.pipe(new a.Utf8EncodeWorker)),!i&&n&&(t=t.pipe(new a.Utf8DecodeWorker))}catch(e){(t=new h(\"error\")).error(e)}return new s(t,r,\"\")},async:function(e,t){return this.internalStream(e).accumulate(t)},nodeStream:function(e,t){return this.internalStream(e||\"nodebuffer\").toNodejsStream(t)},_compressWorker:function(e,t){if(this._data instanceof o&&this._data.compression.magic===e.magic)return this._data.getCompressedWorker();var r=this._decompressWorker();return this._dataBinary||(r=r.pipe(new a.Utf8EncodeWorker)),o.createWorkerFrom(r,e,t)},_decompressWorker:function(){return this._data instanceof o?this._data.getContentWorker():this._data instanceof h?this._data:new i(this._data)}};for(var u=[\"asText\",\"asBinary\",\"asNodeBuffer\",\"asUint8Array\",\"asArrayBuffer\"],l=function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},f=0;f<u.length;f++)n.prototype[u[f]]=l;t.exports=n},{\"./compressedObject\":2,\"./stream/DataWorker\":27,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31}],36:[function(e,l,t){(function(t){\"use strict\";var r,n,e=t.MutationObserver||t.WebKitMutationObserver;if(e){var i=0,s=new e(u),a=t.document.createTextNode(\"\");s.observe(a,{characterData:!0}),r=function(){a.data=i=++i%2}}else if(t.setImmediate||void 0===t.MessageChannel)r=\"document\"in t&&\"onreadystatechange\"in t.document.createElement(\"script\")?function(){var e=t.document.createElement(\"script\");e.onreadystatechange=function(){u(),e.onreadystatechange=null,e.parentNode.removeChild(e),e=null},t.document.documentElement.appendChild(e)}:function(){setTimeout(u,0)};else{var o=new t.MessageChannel;o.port1.onmessage=u,r=function(){o.port2.postMessage(0)}}var h=[];function u(){var e,t;n=!0;for(var r=h.length;r;){for(t=h,h=[],e=-1;++e<r;)t[e]();r=h.length}n=!1}l.exports=function(e){1!==h.push(e)||n||r()}}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],37:[function(e,t,r){\"use strict\";var i=e(\"immediate\");function u(){}var l={},s=[\"REJECTED\"],a=[\"FULFILLED\"],n=[\"PENDING\"];function o(e){if(\"function\"!=typeof e)throw new TypeError(\"resolver must be a function\");this.state=n,this.queue=[],this.outcome=void 0,e!==u&&d(this,e)}function h(e,t,r){this.promise=e,\"function\"==typeof t&&(this.onFulfilled=t,this.callFulfilled=this.otherCallFulfilled),\"function\"==typeof r&&(this.onRejected=r,this.callRejected=this.otherCallRejected)}function f(t,r,n){i(function(){var e;try{e=r(n)}catch(e){return l.reject(t,e)}e===t?l.reject(t,new TypeError(\"Cannot resolve promise with itself\")):l.resolve(t,e)})}function c(e){var t=e&&e.then;if(e&&(\"object\"==typeof e||\"function\"==typeof e)&&\"function\"==typeof t)return function(){t.apply(e,arguments)}}function d(t,e){var r=!1;function n(e){r||(r=!0,l.reject(t,e))}function i(e){r||(r=!0,l.resolve(t,e))}var s=p(function(){e(i,n)});\"error\"===s.status&&n(s.value)}function p(e,t){var r={};try{r.value=e(t),r.status=\"success\"}catch(e){r.status=\"error\",r.value=e}return r}(t.exports=o).prototype.finally=function(t){if(\"function\"!=typeof t)return this;var r=this.constructor;return this.then(function(e){return r.resolve(t()).then(function(){return e})},function(e){return r.resolve(t()).then(function(){throw e})})},o.prototype.catch=function(e){return this.then(null,e)},o.prototype.then=function(e,t){if(\"function\"!=typeof e&&this.state===a||\"function\"!=typeof t&&this.state===s)return this;var r=new this.constructor(u);this.state!==n?f(r,this.state===a?e:t,this.outcome):this.queue.push(new h(r,e,t));return r},h.prototype.callFulfilled=function(e){l.resolve(this.promise,e)},h.prototype.otherCallFulfilled=function(e){f(this.promise,this.onFulfilled,e)},h.prototype.callRejected=function(e){l.reject(this.promise,e)},h.prototype.otherCallRejected=function(e){f(this.promise,this.onRejected,e)},l.resolve=function(e,t){var r=p(c,t);if(\"error\"===r.status)return l.reject(e,r.value);var n=r.value;if(n)d(e,n);else{e.state=a,e.outcome=t;for(var i=-1,s=e.queue.length;++i<s;)e.queue[i].callFulfilled(t)}return e},l.reject=function(e,t){e.state=s,e.outcome=t;for(var r=-1,n=e.queue.length;++r<n;)e.queue[r].callRejected(t);return e},o.resolve=function(e){if(e instanceof this)return e;return l.resolve(new this(u),e)},o.reject=function(e){var t=new this(u);return l.reject(t,e)},o.all=function(e){var r=this;if(\"[object Array]\"!==Object.prototype.toString.call(e))return this.reject(new TypeError(\"must be an array\"));var n=e.length,i=!1;if(!n)return this.resolve([]);var s=new Array(n),a=0,t=-1,o=new this(u);for(;++t<n;)h(e[t],t);return o;function h(e,t){r.resolve(e).then(function(e){s[t]=e,++a!==n||i||(i=!0,l.resolve(o,s))},function(e){i||(i=!0,l.reject(o,e))})}},o.race=function(e){var t=this;if(\"[object Array]\"!==Object.prototype.toString.call(e))return this.reject(new TypeError(\"must be an array\"));var r=e.length,n=!1;if(!r)return this.resolve([]);var i=-1,s=new this(u);for(;++i<r;)a=e[i],t.resolve(a).then(function(e){n||(n=!0,l.resolve(s,e))},function(e){n||(n=!0,l.reject(s,e))});var a;return s}},{immediate:36}],38:[function(e,t,r){\"use strict\";var n={};(0,e(\"./lib/utils/common\").assign)(n,e(\"./lib/deflate\"),e(\"./lib/inflate\"),e(\"./lib/zlib/constants\")),t.exports=n},{\"./lib/deflate\":39,\"./lib/inflate\":40,\"./lib/utils/common\":41,\"./lib/zlib/constants\":44}],39:[function(e,t,r){\"use strict\";var a=e(\"./zlib/deflate\"),o=e(\"./utils/common\"),h=e(\"./utils/strings\"),i=e(\"./zlib/messages\"),s=e(\"./zlib/zstream\"),u=Object.prototype.toString,l=0,f=-1,c=0,d=8;function p(e){if(!(this instanceof p))return new p(e);this.options=o.assign({level:f,method:d,chunkSize:16384,windowBits:15,memLevel:8,strategy:c,to:\"\"},e||{});var t=this.options;t.raw&&0<t.windowBits?t.windowBits=-t.windowBits:t.gzip&&0<t.windowBits&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new s,this.strm.avail_out=0;var r=a.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(r!==l)throw new Error(i[r]);if(t.header&&a.deflateSetHeader(this.strm,t.header),t.dictionary){var n;if(n=\"string\"==typeof t.dictionary?h.string2buf(t.dictionary):\"[object ArrayBuffer]\"===u.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,(r=a.deflateSetDictionary(this.strm,n))!==l)throw new Error(i[r]);this._dict_set=!0}}function n(e,t){var r=new p(t);if(r.push(e,!0),r.err)throw r.msg||i[r.err];return r.result}p.prototype.push=function(e,t){var r,n,i=this.strm,s=this.options.chunkSize;if(this.ended)return!1;n=t===~~t?t:!0===t?4:0,\"string\"==typeof e?i.input=h.string2buf(e):\"[object ArrayBuffer]\"===u.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;do{if(0===i.avail_out&&(i.output=new o.Buf8(s),i.next_out=0,i.avail_out=s),1!==(r=a.deflate(i,n))&&r!==l)return this.onEnd(r),!(this.ended=!0);0!==i.avail_out&&(0!==i.avail_in||4!==n&&2!==n)||(\"string\"===this.options.to?this.onData(h.buf2binstring(o.shrinkBuf(i.output,i.next_out))):this.onData(o.shrinkBuf(i.output,i.next_out)))}while((0<i.avail_in||0===i.avail_out)&&1!==r);return 4===n?(r=a.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===l):2!==n||(this.onEnd(l),!(i.avail_out=0))},p.prototype.onData=function(e){this.chunks.push(e)},p.prototype.onEnd=function(e){e===l&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=o.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Deflate=p,r.deflate=n,r.deflateRaw=function(e,t){return(t=t||{}).raw=!0,n(e,t)},r.gzip=function(e,t){return(t=t||{}).gzip=!0,n(e,t)}},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/deflate\":46,\"./zlib/messages\":51,\"./zlib/zstream\":53}],40:[function(e,t,r){\"use strict\";var c=e(\"./zlib/inflate\"),d=e(\"./utils/common\"),p=e(\"./utils/strings\"),m=e(\"./zlib/constants\"),n=e(\"./zlib/messages\"),i=e(\"./zlib/zstream\"),s=e(\"./zlib/gzheader\"),_=Object.prototype.toString;function a(e){if(!(this instanceof a))return new a(e);this.options=d.assign({chunkSize:16384,windowBits:0,to:\"\"},e||{});var t=this.options;t.raw&&0<=t.windowBits&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(0<=t.windowBits&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),15<t.windowBits&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new i,this.strm.avail_out=0;var r=c.inflateInit2(this.strm,t.windowBits);if(r!==m.Z_OK)throw new Error(n[r]);this.header=new s,c.inflateGetHeader(this.strm,this.header)}function o(e,t){var r=new a(t);if(r.push(e,!0),r.err)throw r.msg||n[r.err];return r.result}a.prototype.push=function(e,t){var r,n,i,s,a,o,h=this.strm,u=this.options.chunkSize,l=this.options.dictionary,f=!1;if(this.ended)return!1;n=t===~~t?t:!0===t?m.Z_FINISH:m.Z_NO_FLUSH,\"string\"==typeof e?h.input=p.binstring2buf(e):\"[object ArrayBuffer]\"===_.call(e)?h.input=new Uint8Array(e):h.input=e,h.next_in=0,h.avail_in=h.input.length;do{if(0===h.avail_out&&(h.output=new d.Buf8(u),h.next_out=0,h.avail_out=u),(r=c.inflate(h,m.Z_NO_FLUSH))===m.Z_NEED_DICT&&l&&(o=\"string\"==typeof l?p.string2buf(l):\"[object ArrayBuffer]\"===_.call(l)?new Uint8Array(l):l,r=c.inflateSetDictionary(this.strm,o)),r===m.Z_BUF_ERROR&&!0===f&&(r=m.Z_OK,f=!1),r!==m.Z_STREAM_END&&r!==m.Z_OK)return this.onEnd(r),!(this.ended=!0);h.next_out&&(0!==h.avail_out&&r!==m.Z_STREAM_END&&(0!==h.avail_in||n!==m.Z_FINISH&&n!==m.Z_SYNC_FLUSH)||(\"string\"===this.options.to?(i=p.utf8border(h.output,h.next_out),s=h.next_out-i,a=p.buf2string(h.output,i),h.next_out=s,h.avail_out=u-s,s&&d.arraySet(h.output,h.output,i,s,0),this.onData(a)):this.onData(d.shrinkBuf(h.output,h.next_out)))),0===h.avail_in&&0===h.avail_out&&(f=!0)}while((0<h.avail_in||0===h.avail_out)&&r!==m.Z_STREAM_END);return r===m.Z_STREAM_END&&(n=m.Z_FINISH),n===m.Z_FINISH?(r=c.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===m.Z_OK):n!==m.Z_SYNC_FLUSH||(this.onEnd(m.Z_OK),!(h.avail_out=0))},a.prototype.onData=function(e){this.chunks.push(e)},a.prototype.onEnd=function(e){e===m.Z_OK&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=d.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Inflate=a,r.inflate=o,r.inflateRaw=function(e,t){return(t=t||{}).raw=!0,o(e,t)},r.ungzip=o},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/constants\":44,\"./zlib/gzheader\":47,\"./zlib/inflate\":49,\"./zlib/messages\":51,\"./zlib/zstream\":53}],41:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Int32Array;r.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var r=t.shift();if(r){if(\"object\"!=typeof r)throw new TypeError(r+\"must be non-object\");for(var n in r)r.hasOwnProperty(n)&&(e[n]=r[n])}}return e},r.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var i={arraySet:function(e,t,r,n,i){if(t.subarray&&e.subarray)e.set(t.subarray(r,r+n),i);else for(var s=0;s<n;s++)e[i+s]=t[r+s]},flattenChunks:function(e){var t,r,n,i,s,a;for(t=n=0,r=e.length;t<r;t++)n+=e[t].length;for(a=new Uint8Array(n),t=i=0,r=e.length;t<r;t++)s=e[t],a.set(s,i),i+=s.length;return a}},s={arraySet:function(e,t,r,n,i){for(var s=0;s<n;s++)e[i+s]=t[r+s]},flattenChunks:function(e){return[].concat.apply([],e)}};r.setTyped=function(e){e?(r.Buf8=Uint8Array,r.Buf16=Uint16Array,r.Buf32=Int32Array,r.assign(r,i)):(r.Buf8=Array,r.Buf16=Array,r.Buf32=Array,r.assign(r,s))},r.setTyped(n)},{}],42:[function(e,t,r){\"use strict\";var h=e(\"./common\"),i=!0,s=!0;try{String.fromCharCode.apply(null,[0])}catch(e){i=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){s=!1}for(var u=new h.Buf8(256),n=0;n<256;n++)u[n]=252<=n?6:248<=n?5:240<=n?4:224<=n?3:192<=n?2:1;function l(e,t){if(t<65537&&(e.subarray&&s||!e.subarray&&i))return String.fromCharCode.apply(null,h.shrinkBuf(e,t));for(var r=\"\",n=0;n<t;n++)r+=String.fromCharCode(e[n]);return r}u[254]=u[254]=1,r.string2buf=function(e){var t,r,n,i,s,a=e.length,o=0;for(i=0;i<a;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=new h.Buf8(o),i=s=0;s<o;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[s++]=r:(r<2048?t[s++]=192|r>>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r<n;r++)t[r]=e.charCodeAt(r);return t},r.buf2string=function(e,t){var r,n,i,s,a=t||e.length,o=new Array(2*a);for(r=n=0;r<a;)if((i=e[r++])<128)o[n++]=i;else if(4<(s=u[i]))o[n++]=65533,r+=s-1;else{for(i&=2===s?31:3===s?15:7;1<s&&r<a;)i=i<<6|63&e[r++],s--;1<s?o[n++]=65533:i<65536?o[n++]=i:(i-=65536,o[n++]=55296|i>>10&1023,o[n++]=56320|1023&i)}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}},{\"./common\":41}],43:[function(e,t,r){\"use strict\";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3<r?2e3:r;s=s+(i=i+t[n++]|0)|0,--a;);i%=65521,s%=65521}return i|s<<16|0}},{}],44:[function(e,t,r){\"use strict\";t.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],45:[function(e,t,r){\"use strict\";var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){\"use strict\";var h,c=e(\"../utils/common\"),u=e(\"./trees\"),d=e(\"./adler32\"),p=e(\"./crc32\"),n=e(\"./messages\"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4<e?9:0)}function D(e){for(var t=e.length;0<=--t;)e[t]=0}function F(e){var t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function U(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&s<c);if(n=S-(c-s),s=c-S,a<n){if(e.match_start=t,o<=(a=n))break;d=u[s+a-1],p=u[s+a]}}}while((t=f[t&l])>h&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u<l&&(l=u),r=0===l?0:(a.avail_in-=l,c.arraySet(o,a.input,a.next_in,l,h),1===a.state.wrap?a.adler=d(a.adler,o,l,h):2===a.state.wrap&&(a.adler=p(a.adler,o,l,h)),a.next_in+=l,a.total_in+=l,l),e.lookahead+=r,e.lookahead+e.insert>=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+1])&e.hash_mask;e.insert&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+x-1])&e.hash_mask,e.prev[s&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=s,s++,e.insert--,!(e.lookahead+e.insert<x)););}while(e.lookahead<z&&0!==e.strm.avail_in)}function Z(e,t){for(var r,n;;){if(e.lookahead<z){if(j(e),e.lookahead<z&&t===l)return A;if(0===e.lookahead)break}if(r=0,e.lookahead>=x&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==r&&e.strstart-r<=e.w_size-z&&(e.match_length=L(e,r)),e.match_length>=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart,0!=--e.match_length;);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+1])&e.hash_mask;else n=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(n&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=e.strstart<x-1?e.strstart:x-1,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}function W(e,t){for(var r,n,i;;){if(e.lookahead<z){if(j(e),e.lookahead<z&&t===l)return A;if(0===e.lookahead)break}if(r=0,e.lookahead>=x&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=x-1,0!==r&&e.prev_length<e.max_lazy_match&&e.strstart-r<=e.w_size-z&&(e.match_length=L(e,r),e.match_length<=5&&(1===e.strategy||e.match_length===x&&4096<e.strstart-e.match_start)&&(e.match_length=x-1)),e.prev_length>=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!=--e.prev_length;);if(e.match_available=0,e.match_length=x-1,e.strstart++,n&&(N(e,!1),0===e.strm.avail_out))return A}else if(e.match_available){if((n=u._tr_tally(e,0,e.window[e.strstart-1]))&&N(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return A}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(n=u._tr_tally(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<x-1?e.strstart:x-1,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}function M(e,t,r,n,i){this.good_length=e,this.max_lazy=t,this.nice_length=r,this.max_chain=n,this.func=i}function H(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=v,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new c.Buf16(2*w),this.dyn_dtree=new c.Buf16(2*(2*a+1)),this.bl_tree=new c.Buf16(2*(2*o+1)),D(this.dyn_ltree),D(this.dyn_dtree),D(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new c.Buf16(k+1),this.heap=new c.Buf16(2*s+1),D(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new c.Buf16(2*s+1),D(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function G(e){var t;return e&&e.state?(e.total_in=e.total_out=0,e.data_type=i,(t=e.state).pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?C:E,e.adler=2===t.wrap?0:1,t.last_flush=l,u._tr_init(t),m):R(e,_)}function K(e){var t=G(e);return t===m&&function(e){e.window_size=2*e.w_size,D(e.head),e.max_lazy_match=h[e.level].max_lazy,e.good_match=h[e.level].good_length,e.nice_match=h[e.level].nice_length,e.max_chain_length=h[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=x-1,e.match_available=0,e.ins_h=0}(e.state),t}function Y(e,t,r,n,i,s){if(!e)return _;var a=1;if(t===g&&(t=6),n<0?(a=0,n=-n):15<n&&(a=2,n-=16),i<1||y<i||r!==v||n<8||15<n||t<0||9<t||s<0||b<s)return R(e,_);8===n&&(n=9);var o=new H;return(e.state=o).strm=e,o.wrap=a,o.gzhead=null,o.w_bits=n,o.w_size=1<<o.w_bits,o.w_mask=o.w_size-1,o.hash_bits=i+7,o.hash_size=1<<o.hash_bits,o.hash_mask=o.hash_size-1,o.hash_shift=~~((o.hash_bits+x-1)/x),o.window=new c.Buf8(2*o.w_size),o.head=new c.Buf16(o.hash_size),o.prev=new c.Buf16(o.w_size),o.lit_bufsize=1<<i+6,o.pending_buf_size=4*o.lit_bufsize,o.pending_buf=new c.Buf8(o.pending_buf_size),o.d_buf=1*o.lit_bufsize,o.l_buf=3*o.lit_bufsize,o.level=t,o.strategy=s,o.method=r,K(e)}h=[new M(0,0,0,0,function(e,t){var r=65535;for(r>e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5<t||t<0)return e?R(e,_):_;if(n=e.state,!e.output||!e.input&&0!==e.avail_in||666===n.status&&t!==f)return R(e,0===e.avail_out?-5:_);if(n.strm=e,r=n.last_flush,n.last_flush=t,n.status===C)if(2===n.wrap)e.adler=0,U(n,31),U(n,139),U(n,8),n.gzhead?(U(n,(n.gzhead.text?1:0)+(n.gzhead.hcrc?2:0)+(n.gzhead.extra?4:0)+(n.gzhead.name?8:0)+(n.gzhead.comment?16:0)),U(n,255&n.gzhead.time),U(n,n.gzhead.time>>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else{var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindex<n.gzhead.name.length?255&n.gzhead.name.charCodeAt(n.gzindex++):0,U(n,s)}while(0!==s);n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindex<n.gzhead.comment.length?255&n.gzhead.comment.charCodeAt(n.gzindex++):0,U(n,s)}while(0!==s);n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0<e.strstart&&(n=a[i=e.strstart-1])===a[++i]&&n===a[++i]&&n===a[++i]){s=e.strstart+S;do{}while(n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&i<s);e.match_length=S-(s-i),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0<n.wrap&&(n.wrap=-n.wrap),0!==n.pending?m:1)},r.deflateEnd=function(e){var t;return e&&e.state?(t=e.state.status)!==C&&69!==t&&73!==t&&91!==t&&103!==t&&t!==E&&666!==t?R(e,_):(e.state=null,t===E?R(e,-3):m):_},r.deflateSetDictionary=function(e,t){var r,n,i,s,a,o,h,u,l=t.length;if(!e||!e.state)return _;if(2===(s=(r=e.state).wrap)||1===s&&r.status!==C||r.lookahead)return _;for(1===s&&(e.adler=d(e.adler,t,l,0)),r.wrap=0,l>=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<<r.hash_shift^r.window[n+x-1])&r.hash_mask,r.prev[n&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=n,n++,--i;);r.strstart=n,r.lookahead=x-1,j(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=x-1,r.match_available=0,e.next_in=o,e.input=h,e.avail_in=a,r.wrap=s,m},r.deflateInfo=\"pako deflate (from Nodeca project)\"},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./messages\":51,\"./trees\":52}],47:[function(e,t,r){\"use strict\";t.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1}},{}],48:[function(e,t,r){\"use strict\";t.exports=function(e,t){var r,n,i,s,a,o,h,u,l,f,c,d,p,m,_,g,b,v,y,w,k,x,S,z,C;r=e.state,n=e.next_in,z=e.input,i=n+(e.avail_in-5),s=e.next_out,C=e.output,a=s-(t-e.avail_out),o=s+(e.avail_out-257),h=r.dmax,u=r.wsize,l=r.whave,f=r.wnext,c=r.window,d=r.hold,p=r.bits,m=r.lencode,_=r.distcode,g=(1<<r.lenbits)-1,b=(1<<r.distbits)-1;e:do{p<15&&(d+=z[n++]<<p,p+=8,d+=z[n++]<<p,p+=8),v=m[d&g];t:for(;;){if(d>>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<<y)-1)];continue t}if(32&y){r.mode=12;break e}e.msg=\"invalid literal/length code\",r.mode=30;break e}w=65535&v,(y&=15)&&(p<y&&(d+=z[n++]<<p,p+=8),w+=d&(1<<y)-1,d>>>=y,p-=y),p<15&&(d+=z[n++]<<p,p+=8,d+=z[n++]<<p,p+=8),v=_[d&b];r:for(;;){if(d>>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<<y)-1)];continue r}e.msg=\"invalid distance code\",r.mode=30;break e}if(k=65535&v,p<(y&=15)&&(d+=z[n++]<<p,(p+=8)<y&&(d+=z[n++]<<p,p+=8)),h<(k+=d&(1<<y)-1)){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(d>>>=y,p-=y,(y=s-a)<k){if(l<(y=k-y)&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(S=c,(x=0)===f){if(x+=u-y,y<w){for(w-=y;C[s++]=c[x++],--y;);x=s-k,S=C}}else if(f<y){if(x+=u+f-y,(y-=f)<w){for(w-=y;C[s++]=c[x++],--y;);if(x=0,f<w){for(w-=y=f;C[s++]=c[x++],--y;);x=s-k,S=C}}}else if(x+=f-y,y<w){for(w-=y;C[s++]=c[x++],--y;);x=s-k,S=C}for(;2<w;)C[s++]=S[x++],C[s++]=S[x++],C[s++]=S[x++],w-=3;w&&(C[s++]=S[x++],1<w&&(C[s++]=S[x++]))}else{for(x=s-k;C[s++]=C[x++],C[s++]=C[x++],C[s++]=C[x++],2<(w-=3););w&&(C[s++]=C[x++],1<w&&(C[s++]=C[x++]))}break}}break}}while(n<i&&s<o);n-=w=p>>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n<i?i-n+5:5-(n-i),e.avail_out=s<o?o-s+257:257-(s-o),r.hold=d,r.bits=p}},{}],49:[function(e,t,r){\"use strict\";var I=e(\"../utils/common\"),O=e(\"./adler32\"),B=e(\"./crc32\"),R=e(\"./inffast\"),T=e(\"./inftrees\"),D=1,F=2,N=0,U=-2,P=1,n=852,i=592;function L(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15<t)?U:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,o(e))):U}function u(e,t){var r,n;return e?(n=new s,(e.state=n).window=null,(r=h(e,t))!==N&&(e.state=null),r):U}var l,f,c=!0;function j(e){if(c){var t;for(l=new I.Buf32(512),f=new I.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(T(D,e.lens,0,288,l,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;T(F,e.lens,0,32,f,0,e.work,{bits:5}),c=!1}e.lencode=l,e.lenbits=9,e.distcode=f,e.distbits=5}function Z(e,t,r,n){var i,s=e.state;return null===s.window&&(s.wsize=1<<s.wbits,s.wnext=0,s.whave=0,s.window=new I.Buf8(s.wsize)),n>=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave<s.wsize&&(s.whave+=i))),0}r.inflateReset=o,r.inflateReset2=h,r.inflateResetKeep=a,r.inflateInit=function(e){return u(e,15)},r.inflateInit2=u,r.inflate=function(e,t){var r,n,i,s,a,o,h,u,l,f,c,d,p,m,_,g,b,v,y,w,k,x,S,z,C=0,E=new I.Buf8(4),A=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return U;12===(r=e.state).mode&&(r.mode=13),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,f=o,c=h,x=N;e:for(;;)switch(r.mode){case P:if(0===r.wrap){r.mode=13;break}for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(2&r.wrap&&35615===u){E[r.check=0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&u)){e.msg=\"unknown compression method\",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<<k,e.adler=r.check=1,r.mode=512&u?10:12,l=u=0;break;case 2:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(r.flags=u,8!=(255&r.flags)){e.msg=\"unknown compression method\",r.mode=30;break}if(57344&r.flags){e.msg=\"unknown header flags set\",r.mode=30;break}r.head&&(r.head.text=u>>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.head&&(r.head.time=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.head&&(r.head.xflags=255&u,r.head.os=u>>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.length=u,r.head&&(r.head.extra_len=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d<o;);if(512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,k)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=8;case 8:if(4096&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.comment+=String.fromCharCode(k)),k&&d<o;);if(512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,k)break e}else r.head&&(r.head.comment=null);r.mode=9;case 9:if(512&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u!==(65535&r.check)){e.msg=\"header crc mismatch\",r.mode=30;break}l=u=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}e.adler=r.check=L(u),l=u=0,r.mode=11;case 11:if(0===r.havedict)return e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,2;e.adler=r.check=1,r.mode=12;case 12:if(5===t||6===t)break e;case 13:if(r.last){u>>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}switch(r.last=1&u,l-=1,3&(u>>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if((65535&u)!=(u>>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o<d&&(d=o),h<d&&(d=h),0===d)break e;I.arraySet(i,n,s,d,a),o-=d,s+=d,h-=d,a+=d,r.length-=d;break}r.mode=12;break;case 17:for(;l<14;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(r.nlen=257+(31&u),u>>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286<r.nlen||30<r.ndist){e.msg=\"too many length or distance symbols\",r.mode=30;break}r.have=0,r.mode=18;case 18:for(;r.have<r.ncode;){for(;l<3;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.lens[A[r.have++]]=7&u,u>>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid code lengths set\",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have<r.nlen+r.ndist;){for(;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(b<16)u>>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u>>>=_,l-=_,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}l-=_,k=0,d=3+(7&(u>>>=_)),u>>>=3,l-=3}else{for(z=_+7;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}l-=_,k=0,d=11+(127&(u>>>=_)),u>>>=7,l-=7}if(r.have+d>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=30;break}for(;d--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid literal/lengths set\",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(g&&0==(240&g)){for(v=_,y=g,w=b;g=(C=r.lencode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg=\"invalid literal/length code\",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.length+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<<r.distbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(0==(240&g)){for(v=_,y=g,w=b;g=(C=r.distcode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){e.msg=\"invalid distance code\",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.offset+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window}else m=i,p=a-r.offset,d=r.length;for(h<d&&(d=h),h-=d,r.length-=d;i[a++]=m[p++],--d;);0===r.length&&(r.mode=21);break;case 26:if(0===h)break e;i[a++]=r.length,h--,r.mode=21;break;case 27:if(r.wrap){for(;l<32;){if(0===o)break e;o--,u|=n[s++]<<l,l+=8}if(c-=h,e.total_out+=c,r.total+=c,c&&(e.adler=r.check=r.flags?B(r.check,i,c,a-c):O(r.check,i,c,a-c)),c=h,(r.flags?u:L(u))!==r.check){e.msg=\"incorrect data check\",r.mode=30;break}l=u=0}r.mode=28;case 28:if(r.wrap&&r.flags){for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u!==(4294967295&r.total)){e.msg=\"incorrect length check\",r.mode=30;break}l=u=0}r.mode=29;case 29:x=1;break e;case 30:x=-3;break e;case 31:return-4;case 32:default:return U}return e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,(r.wsize||c!==e.avail_out&&r.mode<30&&(r.mode<27||4!==t))&&Z(e,e.output,e.next_out,c-e.avail_out)?(r.mode=31,-4):(f-=e.avail_in,c-=e.avail_out,e.total_in+=f,e.total_out+=c,r.total+=c,r.wrap&&c&&(e.adler=r.check=r.flags?B(r.check,i,c,e.next_out-c):O(r.check,i,c,e.next_out-c)),e.data_type=r.bits+(r.last?64:0)+(12===r.mode?128:0)+(20===r.mode||15===r.mode?256:0),(0==f&&0===c||4===t)&&x===N&&(x=-5),x)},r.inflateEnd=function(e){if(!e||!e.state)return U;var t=e.state;return t.window&&(t.window=null),e.state=null,N},r.inflateGetHeader=function(e,t){var r;return e&&e.state?0==(2&(r=e.state).wrap)?U:((r.head=t).done=!1,N):U},r.inflateSetDictionary=function(e,t){var r,n=t.length;return e&&e.state?0!==(r=e.state).wrap&&11!==r.mode?U:11===r.mode&&O(1,t,n,0)!==r.check?-3:Z(e,t,n,n)?(r.mode=31,-4):(r.havedict=1,N):U},r.inflateInfo=\"pako inflate (from Nodeca project)\"},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./inffast\":48,\"./inftrees\":50}],50:[function(e,t,r){\"use strict\";var D=e(\"../utils/common\"),F=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],N=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],U=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],P=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];t.exports=function(e,t,r,n,i,s,a,o){var h,u,l,f,c,d,p,m,_,g=o.bits,b=0,v=0,y=0,w=0,k=0,x=0,S=0,z=0,C=0,E=0,A=null,I=0,O=new D.Buf16(16),B=new D.Buf16(16),R=null,T=0;for(b=0;b<=15;b++)O[b]=0;for(v=0;v<n;v++)O[t[r+v]]++;for(k=g,w=15;1<=w&&0===O[w];w--);if(w<k&&(k=w),0===w)return i[s++]=20971520,i[s++]=20971520,o.bits=1,0;for(y=1;y<w&&0===O[y];y++);for(k<y&&(k=y),b=z=1;b<=15;b++)if(z<<=1,(z-=O[b])<0)return-1;if(0<z&&(0===e||1!==w))return-1;for(B[1]=0,b=1;b<15;b++)B[b+1]=B[b]+O[b];for(v=0;v<n;v++)0!==t[r+v]&&(a[B[t[r+v]]++]=v);if(d=0===e?(A=R=a,19):1===e?(A=F,I-=257,R=N,T-=257,256):(A=U,R=P,-1),b=y,c=s,S=v=E=0,l=-1,f=(C=1<<(x=k))-1,1===e&&852<C||2===e&&592<C)return 1;for(;;){for(p=b-S,_=a[v]<d?(m=0,a[v]):a[v]>d?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<<b-S,y=u=1<<x;i[c+(E>>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<<b-1;E&h;)h>>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=t[r+a[v]]}if(k<b&&(E&f)!==l){for(0===S&&(S=k),c+=y,z=1<<(x=b-S);x+S<w&&!((z-=O[x+S])<=0);)x++,z<<=1;if(C+=1<<x,1===e&&852<C||2===e&&592<C)return 1;i[l=E&f]=k<<24|x<<16|c-s|0}}return 0!==E&&(i[c+E]=b-S<<24|64<<16|0),o.bits=k,0}},{\"../utils/common\":41}],51:[function(e,t,r){\"use strict\";t.exports={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"}},{}],52:[function(e,t,r){\"use strict\";var i=e(\"../utils/common\"),o=0,h=1;function n(e){for(var t=e.length;0<=--t;)e[t]=0}var s=0,a=29,u=256,l=u+1+a,f=30,c=19,_=2*l+1,g=15,d=16,p=7,m=256,b=16,v=17,y=18,w=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],k=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],x=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],S=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],z=new Array(2*(l+2));n(z);var C=new Array(2*f);n(C);var E=new Array(512);n(E);var A=new Array(256);n(A);var I=new Array(a);n(I);var O,B,R,T=new Array(f);function D(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}function F(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function N(e){return e<256?E[e]:E[256+(e>>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<<e.bi_valid&65535,U(e,e.bi_buf),e.bi_buf=t>>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=r)}function L(e,t,r){P(e,r[2*t],r[2*t+1])}function j(e,t){for(var r=0;r|=1&e,e>>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o))}}function W(e){var t;for(t=0;t<l;t++)e.dyn_ltree[2*t]=0;for(t=0;t<f;t++)e.dyn_dtree[2*t]=0;for(t=0;t<c;t++)e.bl_tree[2*t]=0;e.dyn_ltree[2*m]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function M(e){8<e.bi_valid?U(e,e.bi_buf):0<e.bi_valid&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function H(e,t,r,n){var i=2*t,s=2*r;return e[i]<e[s]||e[i]===e[s]&&n[t]<=n[r]}function G(e,t,r){for(var n=e.heap[r],i=r<<1;i<=e.heap_len&&(i<e.heap_len&&H(t,e.heap[i+1],e.heap[i],e.depth)&&i++,!H(t,n,e.heap[i],e.depth));)e.heap[r]=e.heap[i],r=i,i<<=1;e.heap[r]=n}function K(e,t,r){var n,i,s,a,o=0;if(0!==e.last_lit)for(;n=e.pending_buf[e.d_buf+2*o]<<8|e.pending_buf[e.d_buf+2*o+1],i=e.pending_buf[e.l_buf+o],o++,0===n?L(e,i,t):(L(e,(s=A[i])+u+1,t),0!==(a=w[s])&&P(e,i-=I[s],a),L(e,s=N(--n),r),0!==(a=k[s])&&P(e,n-=T[s],a)),o<e.last_lit;);L(e,m,t)}function Y(e,t){var r,n,i,s=t.dyn_tree,a=t.stat_desc.static_tree,o=t.stat_desc.has_stree,h=t.stat_desc.elems,u=-1;for(e.heap_len=0,e.heap_max=_,r=0;r<h;r++)0!==s[2*r]?(e.heap[++e.heap_len]=u=r,e.depth[r]=0):s[2*r+1]=0;for(;e.heap_len<2;)s[2*(i=e.heap[++e.heap_len]=u<2?++u:0)]=1,e.depth[i]=0,e.opt_len--,o&&(e.static_len-=a[2*i+1]);for(t.max_code=u,r=e.heap_len>>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u<n||(e.bl_count[s]++,a=0,d<=n&&(a=c[n-d]),o=h[2*n],e.opt_len+=o*(s+a),f&&(e.static_len+=o*(l[2*n+1]+a)));if(0!==m){do{for(s=p-1;0===e.bl_count[s];)s--;e.bl_count[s]--,e.bl_count[s+1]+=2,e.bl_count[p]--,m-=2}while(0<m);for(s=p;0!==s;s--)for(n=e.bl_count[s];0!==n;)u<(i=e.heap[--r])||(h[2*i+1]!==s&&(e.opt_len+=(s-h[2*i+1])*h[2*i],h[2*i+1]=s),n--)}}(e,t),Z(s,u,e.bl_count)}function X(e,t,r){var n,i,s=-1,a=t[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),t[2*(r+1)+1]=65535,n=0;n<=r;n++)i=a,a=t[2*(n+1)+1],++o<h&&i===a||(o<u?e.bl_tree[2*i]+=o:0!==i?(i!==s&&e.bl_tree[2*i]++,e.bl_tree[2*b]++):o<=10?e.bl_tree[2*v]++:e.bl_tree[2*y]++,s=i,u=(o=0)===a?(h=138,3):i===a?(h=6,3):(h=7,4))}function V(e,t,r){var n,i,s=-1,a=t[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),n=0;n<=r;n++)if(i=a,a=t[2*(n+1)+1],!(++o<h&&i===a)){if(o<u)for(;L(e,i,e.bl_tree),0!=--o;);else 0!==i?(i!==s&&(L(e,i,e.bl_tree),o--),L(e,b,e.bl_tree),P(e,o-3,2)):o<=10?(L(e,v,e.bl_tree),P(e,o-3,3)):(L(e,y,e.bl_tree),P(e,o-11,7));s=i,u=(o=0)===a?(h=138,3):i===a?(h=6,3):(h=7,4)}}n(T);var q=!1;function J(e,t,r,n){P(e,(s<<1)+(n?1:0),3),function(e,t,r,n){M(e),n&&(U(e,r),U(e,~r)),i.arraySet(e.pending_buf,e.window,t,r,e.pending),e.pending+=r}(e,t,r,!0)}r._tr_init=function(e){q||(function(){var e,t,r,n,i,s=new Array(g+1);for(n=r=0;n<a-1;n++)for(I[n]=r,e=0;e<1<<w[n];e++)A[r++]=n;for(A[r-1]=n,n=i=0;n<16;n++)for(T[n]=i,e=0;e<1<<k[n];e++)E[i++]=n;for(i>>=7;n<f;n++)for(T[n]=i<<7,e=0;e<1<<k[n]-7;e++)E[256+i++]=n;for(t=0;t<=g;t++)s[t]=0;for(e=0;e<=143;)z[2*e+1]=8,e++,s[8]++;for(;e<=255;)z[2*e+1]=9,e++,s[9]++;for(;e<=279;)z[2*e+1]=7,e++,s[7]++;for(;e<=287;)z[2*e+1]=8,e++,s[8]++;for(Z(z,l+1,s),e=0;e<f;e++)C[2*e+1]=5,C[2*e]=j(e,5);O=new D(z,w,u+1,l,g),B=new D(C,k,0,f,g),R=new D(new Array(0),x,0,c,p)}(),q=!0),e.l_desc=new F(e.dyn_ltree,O),e.d_desc=new F(e.dyn_dtree,B),e.bl_desc=new F(e.bl_tree,R),e.bi_buf=0,e.bi_valid=0,W(e)},r._tr_stored_block=J,r._tr_flush_block=function(e,t,r,n){var i,s,a=0;0<e.level?(2===e.strm.data_type&&(e.strm.data_type=function(e){var t,r=4093624447;for(t=0;t<=31;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t<u;t++)if(0!==e.dyn_ltree[2*t])return h;return o}(e)),Y(e,e.l_desc),Y(e,e.d_desc),a=function(e){var t;for(X(e,e.dyn_ltree,e.l_desc.max_code),X(e,e.dyn_dtree,e.d_desc.max_code),Y(e,e.bl_desc),t=c-1;3<=t&&0===e.bl_tree[2*S[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),i=e.opt_len+3+7>>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i<n;i++)P(e,e.bl_tree[2*S[i]+1],3);V(e,e.dyn_ltree,t-1),V(e,e.dyn_dtree,r-1)}(e,e.l_desc.max_code+1,e.d_desc.max_code+1,a+1),K(e,e.dyn_ltree,e.dyn_dtree)),W(e),n&&M(e)},r._tr_tally=function(e,t,r){return e.pending_buf[e.d_buf+2*e.last_lit]=t>>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{\"../utils/common\":41}],53:[function(e,t,r){\"use strict\";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){(function(e){!function(r,n){\"use strict\";if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i=\"[object process]\"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e)})}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1},r.postMessage(\"\",\"*\"),r.onmessage=t,e}}()?(a=\"setImmediate$\"+Math.random()+\"$\",r.addEventListener?r.addEventListener(\"message\",d,!1):r.attachEvent(\"onmessage\",d),function(e){r.postMessage(a+e,\"*\")}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data)},function(e){t.port2.postMessage(e)}):l&&\"onreadystatechange\"in l.createElement(\"script\")?(s=l.documentElement,function(e){var t=l.createElement(\"script\");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(c,0,e)},e.setImmediate=function(e){\"function\"!=typeof e&&(e=new Function(\"\"+e));for(var t=new Array(arguments.length-1),r=0;r<t.length;r++)t[r]=arguments[r+1];var n={callback:e,args:t};return h[o]=n,i(o),o++},e.clearImmediate=f}function f(e){delete h[e]}function c(e){if(u)setTimeout(c,0,e);else{var t=h[e];if(t){u=!0;try{!function(e){var t=e.callback,r=e.args;switch(r.length){case 0:t();break;case 1:t(r[0]);break;case 2:t(r[0],r[1]);break;case 3:t(r[0],r[1],r[2]);break;default:t.apply(n,r)}}(t)}finally{f(e),u=!1}}}}function d(e){e.source===r&&\"string\"==typeof e.data&&0===e.data.indexOf(a)&&c(+e.data.slice(a.length))}}(\"undefined\"==typeof self?void 0===e?this:e:self)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}]},{},[10])(10)});","/*!\n * @esri/arcgis-html-sanitizer - v3.0.1 - Tue Nov 15 2022 09:46:54 GMT-0800 (Pacific Standard Time)\n * Copyright (c) 2022 - Environmental Systems Research Institute, Inc.\n * Apache-2.0\n * \n * js-xss\n * Copyright (c) 2012-2018 Zongmin Lei(雷宗民) <leizongmin@gmail.com>\n * http://ucdok.com\n * MIT License, see https://github.com/leizongmin/js-xss/blob/master/LICENSE for details\n */\n/**\n * Determine if the value is a plain object.\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n */\nvar isPlainObject = function (value) {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n if (Object.prototype.toString.call(value) !== \"[object Object]\") {\n return false;\n }\n var proto = Object.getPrototypeOf(value);\n if (proto === null) {\n return true;\n }\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(value) === proto;\n};\n\nvar lib$1 = {exports: {}};\n\nvar _default$1 = {};\n\nvar lib = {exports: {}};\n\nvar _default = {};\n\n/**\n * cssfilter\n *\n * @author 老雷<leizongmin@gmail.com>\n */\n\nfunction getDefaultWhiteList$1 () {\n // 白名单值说明:\n // true: 允许该属性\n // Function: function (val) { } 返回true表示允许该属性,其他值均表示不允许\n // RegExp: regexp.test(val) 返回true表示允许该属性,其他值均表示不允许\n // 除上面列出的值外均表示不允许\n var whiteList = {};\n\n whiteList['align-content'] = false; // default: auto\n whiteList['align-items'] = false; // default: auto\n whiteList['align-self'] = false; // default: auto\n whiteList['alignment-adjust'] = false; // default: auto\n whiteList['alignment-baseline'] = false; // default: baseline\n whiteList['all'] = false; // default: depending on individual properties\n whiteList['anchor-point'] = false; // default: none\n whiteList['animation'] = false; // default: depending on individual properties\n whiteList['animation-delay'] = false; // default: 0\n whiteList['animation-direction'] = false; // default: normal\n whiteList['animation-duration'] = false; // default: 0\n whiteList['animation-fill-mode'] = false; // default: none\n whiteList['animation-iteration-count'] = false; // default: 1\n whiteList['animation-name'] = false; // default: none\n whiteList['animation-play-state'] = false; // default: running\n whiteList['animation-timing-function'] = false; // default: ease\n whiteList['azimuth'] = false; // default: center\n whiteList['backface-visibility'] = false; // default: visible\n whiteList['background'] = true; // default: depending on individual properties\n whiteList['background-attachment'] = true; // default: scroll\n whiteList['background-clip'] = true; // default: border-box\n whiteList['background-color'] = true; // default: transparent\n whiteList['background-image'] = true; // default: none\n whiteList['background-origin'] = true; // default: padding-box\n whiteList['background-position'] = true; // default: 0% 0%\n whiteList['background-repeat'] = true; // default: repeat\n whiteList['background-size'] = true; // default: auto\n whiteList['baseline-shift'] = false; // default: baseline\n whiteList['binding'] = false; // default: none\n whiteList['bleed'] = false; // default: 6pt\n whiteList['bookmark-label'] = false; // default: content()\n whiteList['bookmark-level'] = false; // default: none\n whiteList['bookmark-state'] = false; // default: open\n whiteList['border'] = true; // default: depending on individual properties\n whiteList['border-bottom'] = true; // default: depending on individual properties\n whiteList['border-bottom-color'] = true; // default: current color\n whiteList['border-bottom-left-radius'] = true; // default: 0\n whiteList['border-bottom-right-radius'] = true; // default: 0\n whiteList['border-bottom-style'] = true; // default: none\n whiteList['border-bottom-width'] = true; // default: medium\n whiteList['border-collapse'] = true; // default: separate\n whiteList['border-color'] = true; // default: depending on individual properties\n whiteList['border-image'] = true; // default: none\n whiteList['border-image-outset'] = true; // default: 0\n whiteList['border-image-repeat'] = true; // default: stretch\n whiteList['border-image-slice'] = true; // default: 100%\n whiteList['border-image-source'] = true; // default: none\n whiteList['border-image-width'] = true; // default: 1\n whiteList['border-left'] = true; // default: depending on individual properties\n whiteList['border-left-color'] = true; // default: current color\n whiteList['border-left-style'] = true; // default: none\n whiteList['border-left-width'] = true; // default: medium\n whiteList['border-radius'] = true; // default: 0\n whiteList['border-right'] = true; // default: depending on individual properties\n whiteList['border-right-color'] = true; // default: current color\n whiteList['border-right-style'] = true; // default: none\n whiteList['border-right-width'] = true; // default: medium\n whiteList['border-spacing'] = true; // default: 0\n whiteList['border-style'] = true; // default: depending on individual properties\n whiteList['border-top'] = true; // default: depending on individual properties\n whiteList['border-top-color'] = true; // default: current color\n whiteList['border-top-left-radius'] = true; // default: 0\n whiteList['border-top-right-radius'] = true; // default: 0\n whiteList['border-top-style'] = true; // default: none\n whiteList['border-top-width'] = true; // default: medium\n whiteList['border-width'] = true; // default: depending on individual properties\n whiteList['bottom'] = false; // default: auto\n whiteList['box-decoration-break'] = true; // default: slice\n whiteList['box-shadow'] = true; // default: none\n whiteList['box-sizing'] = true; // default: content-box\n whiteList['box-snap'] = true; // default: none\n whiteList['box-suppress'] = true; // default: show\n whiteList['break-after'] = true; // default: auto\n whiteList['break-before'] = true; // default: auto\n whiteList['break-inside'] = true; // default: auto\n whiteList['caption-side'] = false; // default: top\n whiteList['chains'] = false; // default: none\n whiteList['clear'] = true; // default: none\n whiteList['clip'] = false; // default: auto\n whiteList['clip-path'] = false; // default: none\n whiteList['clip-rule'] = false; // default: nonzero\n whiteList['color'] = true; // default: implementation dependent\n whiteList['color-interpolation-filters'] = true; // default: auto\n whiteList['column-count'] = false; // default: auto\n whiteList['column-fill'] = false; // default: balance\n whiteList['column-gap'] = false; // default: normal\n whiteList['column-rule'] = false; // default: depending on individual properties\n whiteList['column-rule-color'] = false; // default: current color\n whiteList['column-rule-style'] = false; // default: medium\n whiteList['column-rule-width'] = false; // default: medium\n whiteList['column-span'] = false; // default: none\n whiteList['column-width'] = false; // default: auto\n whiteList['columns'] = false; // default: depending on individual properties\n whiteList['contain'] = false; // default: none\n whiteList['content'] = false; // default: normal\n whiteList['counter-increment'] = false; // default: none\n whiteList['counter-reset'] = false; // default: none\n whiteList['counter-set'] = false; // default: none\n whiteList['crop'] = false; // default: auto\n whiteList['cue'] = false; // default: depending on individual properties\n whiteList['cue-after'] = false; // default: none\n whiteList['cue-before'] = false; // default: none\n whiteList['cursor'] = false; // default: auto\n whiteList['direction'] = false; // default: ltr\n whiteList['display'] = true; // default: depending on individual properties\n whiteList['display-inside'] = true; // default: auto\n whiteList['display-list'] = true; // default: none\n whiteList['display-outside'] = true; // default: inline-level\n whiteList['dominant-baseline'] = false; // default: auto\n whiteList['elevation'] = false; // default: level\n whiteList['empty-cells'] = false; // default: show\n whiteList['filter'] = false; // default: none\n whiteList['flex'] = false; // default: depending on individual properties\n whiteList['flex-basis'] = false; // default: auto\n whiteList['flex-direction'] = false; // default: row\n whiteList['flex-flow'] = false; // default: depending on individual properties\n whiteList['flex-grow'] = false; // default: 0\n whiteList['flex-shrink'] = false; // default: 1\n whiteList['flex-wrap'] = false; // default: nowrap\n whiteList['float'] = false; // default: none\n whiteList['float-offset'] = false; // default: 0 0\n whiteList['flood-color'] = false; // default: black\n whiteList['flood-opacity'] = false; // default: 1\n whiteList['flow-from'] = false; // default: none\n whiteList['flow-into'] = false; // default: none\n whiteList['font'] = true; // default: depending on individual properties\n whiteList['font-family'] = true; // default: implementation dependent\n whiteList['font-feature-settings'] = true; // default: normal\n whiteList['font-kerning'] = true; // default: auto\n whiteList['font-language-override'] = true; // default: normal\n whiteList['font-size'] = true; // default: medium\n whiteList['font-size-adjust'] = true; // default: none\n whiteList['font-stretch'] = true; // default: normal\n whiteList['font-style'] = true; // default: normal\n whiteList['font-synthesis'] = true; // default: weight style\n whiteList['font-variant'] = true; // default: normal\n whiteList['font-variant-alternates'] = true; // default: normal\n whiteList['font-variant-caps'] = true; // default: normal\n whiteList['font-variant-east-asian'] = true; // default: normal\n whiteList['font-variant-ligatures'] = true; // default: normal\n whiteList['font-variant-numeric'] = true; // default: normal\n whiteList['font-variant-position'] = true; // default: normal\n whiteList['font-weight'] = true; // default: normal\n whiteList['grid'] = false; // default: depending on individual properties\n whiteList['grid-area'] = false; // default: depending on individual properties\n whiteList['grid-auto-columns'] = false; // default: auto\n whiteList['grid-auto-flow'] = false; // default: none\n whiteList['grid-auto-rows'] = false; // default: auto\n whiteList['grid-column'] = false; // default: depending on individual properties\n whiteList['grid-column-end'] = false; // default: auto\n whiteList['grid-column-start'] = false; // default: auto\n whiteList['grid-row'] = false; // default: depending on individual properties\n whiteList['grid-row-end'] = false; // default: auto\n whiteList['grid-row-start'] = false; // default: auto\n whiteList['grid-template'] = false; // default: depending on individual properties\n whiteList['grid-template-areas'] = false; // default: none\n whiteList['grid-template-columns'] = false; // default: none\n whiteList['grid-template-rows'] = false; // default: none\n whiteList['hanging-punctuation'] = false; // default: none\n whiteList['height'] = true; // default: auto\n whiteList['hyphens'] = false; // default: manual\n whiteList['icon'] = false; // default: auto\n whiteList['image-orientation'] = false; // default: auto\n whiteList['image-resolution'] = false; // default: normal\n whiteList['ime-mode'] = false; // default: auto\n whiteList['initial-letters'] = false; // default: normal\n whiteList['inline-box-align'] = false; // default: last\n whiteList['justify-content'] = false; // default: auto\n whiteList['justify-items'] = false; // default: auto\n whiteList['justify-self'] = false; // default: auto\n whiteList['left'] = false; // default: auto\n whiteList['letter-spacing'] = true; // default: normal\n whiteList['lighting-color'] = true; // default: white\n whiteList['line-box-contain'] = false; // default: block inline replaced\n whiteList['line-break'] = false; // default: auto\n whiteList['line-grid'] = false; // default: match-parent\n whiteList['line-height'] = false; // default: normal\n whiteList['line-snap'] = false; // default: none\n whiteList['line-stacking'] = false; // default: depending on individual properties\n whiteList['line-stacking-ruby'] = false; // default: exclude-ruby\n whiteList['line-stacking-shift'] = false; // default: consider-shifts\n whiteList['line-stacking-strategy'] = false; // default: inline-line-height\n whiteList['list-style'] = true; // default: depending on individual properties\n whiteList['list-style-image'] = true; // default: none\n whiteList['list-style-position'] = true; // default: outside\n whiteList['list-style-type'] = true; // default: disc\n whiteList['margin'] = true; // default: depending on individual properties\n whiteList['margin-bottom'] = true; // default: 0\n whiteList['margin-left'] = true; // default: 0\n whiteList['margin-right'] = true; // default: 0\n whiteList['margin-top'] = true; // default: 0\n whiteList['marker-offset'] = false; // default: auto\n whiteList['marker-side'] = false; // default: list-item\n whiteList['marks'] = false; // default: none\n whiteList['mask'] = false; // default: border-box\n whiteList['mask-box'] = false; // default: see individual properties\n whiteList['mask-box-outset'] = false; // default: 0\n whiteList['mask-box-repeat'] = false; // default: stretch\n whiteList['mask-box-slice'] = false; // default: 0 fill\n whiteList['mask-box-source'] = false; // default: none\n whiteList['mask-box-width'] = false; // default: auto\n whiteList['mask-clip'] = false; // default: border-box\n whiteList['mask-image'] = false; // default: none\n whiteList['mask-origin'] = false; // default: border-box\n whiteList['mask-position'] = false; // default: center\n whiteList['mask-repeat'] = false; // default: no-repeat\n whiteList['mask-size'] = false; // default: border-box\n whiteList['mask-source-type'] = false; // default: auto\n whiteList['mask-type'] = false; // default: luminance\n whiteList['max-height'] = true; // default: none\n whiteList['max-lines'] = false; // default: none\n whiteList['max-width'] = true; // default: none\n whiteList['min-height'] = true; // default: 0\n whiteList['min-width'] = true; // default: 0\n whiteList['move-to'] = false; // default: normal\n whiteList['nav-down'] = false; // default: auto\n whiteList['nav-index'] = false; // default: auto\n whiteList['nav-left'] = false; // default: auto\n whiteList['nav-right'] = false; // default: auto\n whiteList['nav-up'] = false; // default: auto\n whiteList['object-fit'] = false; // default: fill\n whiteList['object-position'] = false; // default: 50% 50%\n whiteList['opacity'] = false; // default: 1\n whiteList['order'] = false; // default: 0\n whiteList['orphans'] = false; // default: 2\n whiteList['outline'] = false; // default: depending on individual properties\n whiteList['outline-color'] = false; // default: invert\n whiteList['outline-offset'] = false; // default: 0\n whiteList['outline-style'] = false; // default: none\n whiteList['outline-width'] = false; // default: medium\n whiteList['overflow'] = false; // default: depending on individual properties\n whiteList['overflow-wrap'] = false; // default: normal\n whiteList['overflow-x'] = false; // default: visible\n whiteList['overflow-y'] = false; // default: visible\n whiteList['padding'] = true; // default: depending on individual properties\n whiteList['padding-bottom'] = true; // default: 0\n whiteList['padding-left'] = true; // default: 0\n whiteList['padding-right'] = true; // default: 0\n whiteList['padding-top'] = true; // default: 0\n whiteList['page'] = false; // default: auto\n whiteList['page-break-after'] = false; // default: auto\n whiteList['page-break-before'] = false; // default: auto\n whiteList['page-break-inside'] = false; // default: auto\n whiteList['page-policy'] = false; // default: start\n whiteList['pause'] = false; // default: implementation dependent\n whiteList['pause-after'] = false; // default: implementation dependent\n whiteList['pause-before'] = false; // default: implementation dependent\n whiteList['perspective'] = false; // default: none\n whiteList['perspective-origin'] = false; // default: 50% 50%\n whiteList['pitch'] = false; // default: medium\n whiteList['pitch-range'] = false; // default: 50\n whiteList['play-during'] = false; // default: auto\n whiteList['position'] = false; // default: static\n whiteList['presentation-level'] = false; // default: 0\n whiteList['quotes'] = false; // default: text\n whiteList['region-fragment'] = false; // default: auto\n whiteList['resize'] = false; // default: none\n whiteList['rest'] = false; // default: depending on individual properties\n whiteList['rest-after'] = false; // default: none\n whiteList['rest-before'] = false; // default: none\n whiteList['richness'] = false; // default: 50\n whiteList['right'] = false; // default: auto\n whiteList['rotation'] = false; // default: 0\n whiteList['rotation-point'] = false; // default: 50% 50%\n whiteList['ruby-align'] = false; // default: auto\n whiteList['ruby-merge'] = false; // default: separate\n whiteList['ruby-position'] = false; // default: before\n whiteList['shape-image-threshold'] = false; // default: 0.0\n whiteList['shape-outside'] = false; // default: none\n whiteList['shape-margin'] = false; // default: 0\n whiteList['size'] = false; // default: auto\n whiteList['speak'] = false; // default: auto\n whiteList['speak-as'] = false; // default: normal\n whiteList['speak-header'] = false; // default: once\n whiteList['speak-numeral'] = false; // default: continuous\n whiteList['speak-punctuation'] = false; // default: none\n whiteList['speech-rate'] = false; // default: medium\n whiteList['stress'] = false; // default: 50\n whiteList['string-set'] = false; // default: none\n whiteList['tab-size'] = false; // default: 8\n whiteList['table-layout'] = false; // default: auto\n whiteList['text-align'] = true; // default: start\n whiteList['text-align-last'] = true; // default: auto\n whiteList['text-combine-upright'] = true; // default: none\n whiteList['text-decoration'] = true; // default: none\n whiteList['text-decoration-color'] = true; // default: currentColor\n whiteList['text-decoration-line'] = true; // default: none\n whiteList['text-decoration-skip'] = true; // default: objects\n whiteList['text-decoration-style'] = true; // default: solid\n whiteList['text-emphasis'] = true; // default: depending on individual properties\n whiteList['text-emphasis-color'] = true; // default: currentColor\n whiteList['text-emphasis-position'] = true; // default: over right\n whiteList['text-emphasis-style'] = true; // default: none\n whiteList['text-height'] = true; // default: auto\n whiteList['text-indent'] = true; // default: 0\n whiteList['text-justify'] = true; // default: auto\n whiteList['text-orientation'] = true; // default: mixed\n whiteList['text-overflow'] = true; // default: clip\n whiteList['text-shadow'] = true; // default: none\n whiteList['text-space-collapse'] = true; // default: collapse\n whiteList['text-transform'] = true; // default: none\n whiteList['text-underline-position'] = true; // default: auto\n whiteList['text-wrap'] = true; // default: normal\n whiteList['top'] = false; // default: auto\n whiteList['transform'] = false; // default: none\n whiteList['transform-origin'] = false; // default: 50% 50% 0\n whiteList['transform-style'] = false; // default: flat\n whiteList['transition'] = false; // default: depending on individual properties\n whiteList['transition-delay'] = false; // default: 0s\n whiteList['transition-duration'] = false; // default: 0s\n whiteList['transition-property'] = false; // default: all\n whiteList['transition-timing-function'] = false; // default: ease\n whiteList['unicode-bidi'] = false; // default: normal\n whiteList['vertical-align'] = false; // default: baseline\n whiteList['visibility'] = false; // default: visible\n whiteList['voice-balance'] = false; // default: center\n whiteList['voice-duration'] = false; // default: auto\n whiteList['voice-family'] = false; // default: implementation dependent\n whiteList['voice-pitch'] = false; // default: medium\n whiteList['voice-range'] = false; // default: medium\n whiteList['voice-rate'] = false; // default: normal\n whiteList['voice-stress'] = false; // default: normal\n whiteList['voice-volume'] = false; // default: medium\n whiteList['volume'] = false; // default: medium\n whiteList['white-space'] = false; // default: normal\n whiteList['widows'] = false; // default: 2\n whiteList['width'] = true; // default: auto\n whiteList['will-change'] = false; // default: auto\n whiteList['word-break'] = true; // default: normal\n whiteList['word-spacing'] = true; // default: normal\n whiteList['word-wrap'] = true; // default: normal\n whiteList['wrap-flow'] = false; // default: auto\n whiteList['wrap-through'] = false; // default: wrap\n whiteList['writing-mode'] = false; // default: horizontal-tb\n whiteList['z-index'] = false; // default: auto\n\n return whiteList;\n}\n\n\n/**\n * 匹配到白名单上的一个属性时\n *\n * @param {String} name\n * @param {String} value\n * @param {Object} options\n * @return {String}\n */\nfunction onAttr (name, value, options) {\n // do nothing\n}\n\n/**\n * 匹配到不在白名单上的一个属性时\n *\n * @param {String} name\n * @param {String} value\n * @param {Object} options\n * @return {String}\n */\nfunction onIgnoreAttr (name, value, options) {\n // do nothing\n}\n\nvar REGEXP_URL_JAVASCRIPT = /javascript\\s*\\:/img;\n\n/**\n * 过滤属性值\n *\n * @param {String} name\n * @param {String} value\n * @return {String}\n */\nfunction safeAttrValue$1(name, value) {\n if (REGEXP_URL_JAVASCRIPT.test(value)) return '';\n return value;\n}\n\n\n_default.whiteList = getDefaultWhiteList$1();\n_default.getDefaultWhiteList = getDefaultWhiteList$1;\n_default.onAttr = onAttr;\n_default.onIgnoreAttr = onIgnoreAttr;\n_default.safeAttrValue = safeAttrValue$1;\n\nvar util$1 = {\n indexOf: function (arr, item) {\n var i, j;\n if (Array.prototype.indexOf) {\n return arr.indexOf(item);\n }\n for (i = 0, j = arr.length; i < j; i++) {\n if (arr[i] === item) {\n return i;\n }\n }\n return -1;\n },\n forEach: function (arr, fn, scope) {\n var i, j;\n if (Array.prototype.forEach) {\n return arr.forEach(fn, scope);\n }\n for (i = 0, j = arr.length; i < j; i++) {\n fn.call(scope, arr[i], i, arr);\n }\n },\n trim: function (str) {\n if (String.prototype.trim) {\n return str.trim();\n }\n return str.replace(/(^\\s*)|(\\s*$)/g, '');\n },\n trimRight: function (str) {\n if (String.prototype.trimRight) {\n return str.trimRight();\n }\n return str.replace(/(\\s*$)/g, '');\n }\n};\n\n/**\n * cssfilter\n *\n * @author 老雷<leizongmin@gmail.com>\n */\n\nvar _$3 = util$1;\n\n\n/**\n * 解析style\n *\n * @param {String} css\n * @param {Function} onAttr 处理属性的函数\n * 参数格式: function (sourcePosition, position, name, value, source)\n * @return {String}\n */\nfunction parseStyle$1 (css, onAttr) {\n css = _$3.trimRight(css);\n if (css[css.length - 1] !== ';') css += ';';\n var cssLength = css.length;\n var isParenthesisOpen = false;\n var lastPos = 0;\n var i = 0;\n var retCSS = '';\n\n function addNewAttr () {\n // 如果没有正常的闭合圆括号,则直接忽略当前属性\n if (!isParenthesisOpen) {\n var source = _$3.trim(css.slice(lastPos, i));\n var j = source.indexOf(':');\n if (j !== -1) {\n var name = _$3.trim(source.slice(0, j));\n var value = _$3.trim(source.slice(j + 1));\n // 必须有属性名称\n if (name) {\n var ret = onAttr(lastPos, retCSS.length, name, value, source);\n if (ret) retCSS += ret + '; ';\n }\n }\n }\n lastPos = i + 1;\n }\n\n for (; i < cssLength; i++) {\n var c = css[i];\n if (c === '/' && css[i + 1] === '*') {\n // 备注开始\n var j = css.indexOf('*/', i + 2);\n // 如果没有正常的备注结束,则后面的部分全部跳过\n if (j === -1) break;\n // 直接将当前位置调到备注结尾,并且初始化状态\n i = j + 1;\n lastPos = i + 1;\n isParenthesisOpen = false;\n } else if (c === '(') {\n isParenthesisOpen = true;\n } else if (c === ')') {\n isParenthesisOpen = false;\n } else if (c === ';') {\n if (isParenthesisOpen) ; else {\n addNewAttr();\n }\n } else if (c === '\\n') {\n addNewAttr();\n }\n }\n\n return _$3.trim(retCSS);\n}\n\nvar parser$2 = parseStyle$1;\n\n/**\n * cssfilter\n *\n * @author 老雷<leizongmin@gmail.com>\n */\n\nvar DEFAULT$1 = _default;\nvar parseStyle = parser$2;\n\n\n/**\n * 返回值是否为空\n *\n * @param {Object} obj\n * @return {Boolean}\n */\nfunction isNull$1 (obj) {\n return (obj === undefined || obj === null);\n}\n\n/**\n * 浅拷贝对象\n *\n * @param {Object} obj\n * @return {Object}\n */\nfunction shallowCopyObject$1 (obj) {\n var ret = {};\n for (var i in obj) {\n ret[i] = obj[i];\n }\n return ret;\n}\n\n/**\n * 创建CSS过滤器\n *\n * @param {Object} options\n * - {Object} whiteList\n * - {Function} onAttr\n * - {Function} onIgnoreAttr\n * - {Function} safeAttrValue\n */\nfunction FilterCSS$2 (options) {\n options = shallowCopyObject$1(options || {});\n options.whiteList = options.whiteList || DEFAULT$1.whiteList;\n options.onAttr = options.onAttr || DEFAULT$1.onAttr;\n options.onIgnoreAttr = options.onIgnoreAttr || DEFAULT$1.onIgnoreAttr;\n options.safeAttrValue = options.safeAttrValue || DEFAULT$1.safeAttrValue;\n this.options = options;\n}\n\nFilterCSS$2.prototype.process = function (css) {\n // 兼容各种奇葩输入\n css = css || '';\n css = css.toString();\n if (!css) return '';\n\n var me = this;\n var options = me.options;\n var whiteList = options.whiteList;\n var onAttr = options.onAttr;\n var onIgnoreAttr = options.onIgnoreAttr;\n var safeAttrValue = options.safeAttrValue;\n\n var retCSS = parseStyle(css, function (sourcePosition, position, name, value, source) {\n\n var check = whiteList[name];\n var isWhite = false;\n if (check === true) isWhite = check;\n else if (typeof check === 'function') isWhite = check(value);\n else if (check instanceof RegExp) isWhite = check.test(value);\n if (isWhite !== true) isWhite = false;\n\n // 如果过滤后 value 为空则直接忽略\n value = safeAttrValue(name, value);\n if (!value) return;\n\n var opts = {\n position: position,\n sourcePosition: sourcePosition,\n source: source,\n isWhite: isWhite\n };\n\n if (isWhite) {\n\n var ret = onAttr(name, value, opts);\n if (isNull$1(ret)) {\n return name + ':' + value;\n } else {\n return ret;\n }\n\n } else {\n\n var ret = onIgnoreAttr(name, value, opts);\n if (!isNull$1(ret)) {\n return ret;\n }\n\n }\n });\n\n return retCSS;\n};\n\n\nvar css = FilterCSS$2;\n\n/**\n * cssfilter\n *\n * @author 老雷<leizongmin@gmail.com>\n */\n\n(function (module, exports) {\n\tvar DEFAULT = _default;\n\tvar FilterCSS = css;\n\n\n\t/**\n\t * XSS过滤\n\t *\n\t * @param {String} css 要过滤的CSS代码\n\t * @param {Object} options 选项:whiteList, onAttr, onIgnoreAttr\n\t * @return {String}\n\t */\n\tfunction filterCSS (html, options) {\n\t var xss = new FilterCSS(options);\n\t return xss.process(html);\n\t}\n\n\n\t// 输出\n\texports = module.exports = filterCSS;\n\texports.FilterCSS = FilterCSS;\n\tfor (var i in DEFAULT) exports[i] = DEFAULT[i];\n} (lib, lib.exports));\n\nvar util = {\n indexOf: function (arr, item) {\n var i, j;\n if (Array.prototype.indexOf) {\n return arr.indexOf(item);\n }\n for (i = 0, j = arr.length; i < j; i++) {\n if (arr[i] === item) {\n return i;\n }\n }\n return -1;\n },\n forEach: function (arr, fn, scope) {\n var i, j;\n if (Array.prototype.forEach) {\n return arr.forEach(fn, scope);\n }\n for (i = 0, j = arr.length; i < j; i++) {\n fn.call(scope, arr[i], i, arr);\n }\n },\n trim: function (str) {\n if (String.prototype.trim) {\n return str.trim();\n }\n return str.replace(/(^\\s*)|(\\s*$)/g, \"\");\n },\n spaceIndex: function (str) {\n var reg = /\\s|\\n|\\t/;\n var match = reg.exec(str);\n return match ? match.index : -1;\n },\n};\n\n/**\n * default settings\n *\n * @author Zongmin Lei<leizongmin@gmail.com>\n */\n\nvar FilterCSS$1 = lib.exports.FilterCSS;\nvar getDefaultCSSWhiteList = lib.exports.getDefaultWhiteList;\nvar _$2 = util;\n\nfunction getDefaultWhiteList() {\n return {\n a: [\"target\", \"href\", \"title\"],\n abbr: [\"title\"],\n address: [],\n area: [\"shape\", \"coords\", \"href\", \"alt\"],\n article: [],\n aside: [],\n audio: [\n \"autoplay\",\n \"controls\",\n \"crossorigin\",\n \"loop\",\n \"muted\",\n \"preload\",\n \"src\",\n ],\n b: [],\n bdi: [\"dir\"],\n bdo: [\"dir\"],\n big: [],\n blockquote: [\"cite\"],\n br: [],\n caption: [],\n center: [],\n cite: [],\n code: [],\n col: [\"align\", \"valign\", \"span\", \"width\"],\n colgroup: [\"align\", \"valign\", \"span\", \"width\"],\n dd: [],\n del: [\"datetime\"],\n details: [\"open\"],\n div: [],\n dl: [],\n dt: [],\n em: [],\n figcaption: [],\n figure: [],\n font: [\"color\", \"size\", \"face\"],\n footer: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n header: [],\n hr: [],\n i: [],\n img: [\"src\", \"alt\", \"title\", \"width\", \"height\"],\n ins: [\"datetime\"],\n li: [],\n mark: [],\n nav: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n section: [],\n small: [],\n span: [],\n sub: [],\n summary: [],\n sup: [],\n strong: [],\n strike: [],\n table: [\"width\", \"border\", \"align\", \"valign\"],\n tbody: [\"align\", \"valign\"],\n td: [\"width\", \"rowspan\", \"colspan\", \"align\", \"valign\"],\n tfoot: [\"align\", \"valign\"],\n th: [\"width\", \"rowspan\", \"colspan\", \"align\", \"valign\"],\n thead: [\"align\", \"valign\"],\n tr: [\"rowspan\", \"align\", \"valign\"],\n tt: [],\n u: [],\n ul: [],\n video: [\n \"autoplay\",\n \"controls\",\n \"crossorigin\",\n \"loop\",\n \"muted\",\n \"playsinline\",\n \"poster\",\n \"preload\",\n \"src\",\n \"height\",\n \"width\",\n ],\n };\n}\n\nvar defaultCSSFilter = new FilterCSS$1();\n\n/**\n * default onTag function\n *\n * @param {String} tag\n * @param {String} html\n * @param {Object} options\n * @return {String}\n */\nfunction onTag(tag, html, options) {\n // do nothing\n}\n\n/**\n * default onIgnoreTag function\n *\n * @param {String} tag\n * @param {String} html\n * @param {Object} options\n * @return {String}\n */\nfunction onIgnoreTag(tag, html, options) {\n // do nothing\n}\n\n/**\n * default onTagAttr function\n *\n * @param {String} tag\n * @param {String} name\n * @param {String} value\n * @return {String}\n */\nfunction onTagAttr(tag, name, value) {\n // do nothing\n}\n\n/**\n * default onIgnoreTagAttr function\n *\n * @param {String} tag\n * @param {String} name\n * @param {String} value\n * @return {String}\n */\nfunction onIgnoreTagAttr(tag, name, value) {\n // do nothing\n}\n\n/**\n * default escapeHtml function\n *\n * @param {String} html\n */\nfunction escapeHtml(html) {\n return html.replace(REGEXP_LT, \"<\").replace(REGEXP_GT, \">\");\n}\n\n/**\n * default safeAttrValue function\n *\n * @param {String} tag\n * @param {String} name\n * @param {String} value\n * @param {Object} cssFilter\n * @return {String}\n */\nfunction safeAttrValue(tag, name, value, cssFilter) {\n // unescape attribute value firstly\n value = friendlyAttrValue(value);\n\n if (name === \"href\" || name === \"src\") {\n // filter `href` and `src` attribute\n // only allow the value that starts with `http://` | `https://` | `mailto:` | `/` | `#`\n value = _$2.trim(value);\n if (value === \"#\") return \"#\";\n if (\n !(\n value.substr(0, 7) === \"http://\" ||\n value.substr(0, 8) === \"https://\" ||\n value.substr(0, 7) === \"mailto:\" ||\n value.substr(0, 4) === \"tel:\" ||\n value.substr(0, 11) === \"data:image/\" ||\n value.substr(0, 6) === \"ftp://\" ||\n value.substr(0, 2) === \"./\" ||\n value.substr(0, 3) === \"../\" ||\n value[0] === \"#\" ||\n value[0] === \"/\"\n )\n ) {\n return \"\";\n }\n } else if (name === \"background\") {\n // filter `background` attribute (maybe no use)\n // `javascript:`\n REGEXP_DEFAULT_ON_TAG_ATTR_4.lastIndex = 0;\n if (REGEXP_DEFAULT_ON_TAG_ATTR_4.test(value)) {\n return \"\";\n }\n } else if (name === \"style\") {\n // `expression()`\n REGEXP_DEFAULT_ON_TAG_ATTR_7.lastIndex = 0;\n if (REGEXP_DEFAULT_ON_TAG_ATTR_7.test(value)) {\n return \"\";\n }\n // `url()`\n REGEXP_DEFAULT_ON_TAG_ATTR_8.lastIndex = 0;\n if (REGEXP_DEFAULT_ON_TAG_ATTR_8.test(value)) {\n REGEXP_DEFAULT_ON_TAG_ATTR_4.lastIndex = 0;\n if (REGEXP_DEFAULT_ON_TAG_ATTR_4.test(value)) {\n return \"\";\n }\n }\n if (cssFilter !== false) {\n cssFilter = cssFilter || defaultCSSFilter;\n value = cssFilter.process(value);\n }\n }\n\n // escape `<>\"` before returns\n value = escapeAttrValue(value);\n return value;\n}\n\n// RegExp list\nvar REGEXP_LT = /</g;\nvar REGEXP_GT = />/g;\nvar REGEXP_QUOTE = /\"/g;\nvar REGEXP_QUOTE_2 = /"/g;\nvar REGEXP_ATTR_VALUE_1 = /&#([a-zA-Z0-9]*);?/gim;\nvar REGEXP_ATTR_VALUE_COLON = /:?/gim;\nvar REGEXP_ATTR_VALUE_NEWLINE = /&newline;?/gim;\n// var REGEXP_DEFAULT_ON_TAG_ATTR_3 = /\\/\\*|\\*\\//gm;\nvar REGEXP_DEFAULT_ON_TAG_ATTR_4 =\n /((j\\s*a\\s*v\\s*a|v\\s*b|l\\s*i\\s*v\\s*e)\\s*s\\s*c\\s*r\\s*i\\s*p\\s*t\\s*|m\\s*o\\s*c\\s*h\\s*a):/gi;\n// var REGEXP_DEFAULT_ON_TAG_ATTR_5 = /^[\\s\"'`]*(d\\s*a\\s*t\\s*a\\s*)\\:/gi;\n// var REGEXP_DEFAULT_ON_TAG_ATTR_6 = /^[\\s\"'`]*(d\\s*a\\s*t\\s*a\\s*)\\:\\s*image\\//gi;\nvar REGEXP_DEFAULT_ON_TAG_ATTR_7 =\n /e\\s*x\\s*p\\s*r\\s*e\\s*s\\s*s\\s*i\\s*o\\s*n\\s*\\(.*/gi;\nvar REGEXP_DEFAULT_ON_TAG_ATTR_8 = /u\\s*r\\s*l\\s*\\(.*/gi;\n\n/**\n * escape double quote\n *\n * @param {String} str\n * @return {String} str\n */\nfunction escapeQuote(str) {\n return str.replace(REGEXP_QUOTE, \""\");\n}\n\n/**\n * unescape double quote\n *\n * @param {String} str\n * @return {String} str\n */\nfunction unescapeQuote(str) {\n return str.replace(REGEXP_QUOTE_2, '\"');\n}\n\n/**\n * escape html entities\n *\n * @param {String} str\n * @return {String}\n */\nfunction escapeHtmlEntities(str) {\n return str.replace(REGEXP_ATTR_VALUE_1, function replaceUnicode(str, code) {\n return code[0] === \"x\" || code[0] === \"X\"\n ? String.fromCharCode(parseInt(code.substr(1), 16))\n : String.fromCharCode(parseInt(code, 10));\n });\n}\n\n/**\n * escape html5 new danger entities\n *\n * @param {String} str\n * @return {String}\n */\nfunction escapeDangerHtml5Entities(str) {\n return str\n .replace(REGEXP_ATTR_VALUE_COLON, \":\")\n .replace(REGEXP_ATTR_VALUE_NEWLINE, \" \");\n}\n\n/**\n * clear nonprintable characters\n *\n * @param {String} str\n * @return {String}\n */\nfunction clearNonPrintableCharacter(str) {\n var str2 = \"\";\n for (var i = 0, len = str.length; i < len; i++) {\n str2 += str.charCodeAt(i) < 32 ? \" \" : str.charAt(i);\n }\n return _$2.trim(str2);\n}\n\n/**\n * get friendly attribute value\n *\n * @param {String} str\n * @return {String}\n */\nfunction friendlyAttrValue(str) {\n str = unescapeQuote(str);\n str = escapeHtmlEntities(str);\n str = escapeDangerHtml5Entities(str);\n str = clearNonPrintableCharacter(str);\n return str;\n}\n\n/**\n * unescape attribute value\n *\n * @param {String} str\n * @return {String}\n */\nfunction escapeAttrValue(str) {\n str = escapeQuote(str);\n str = escapeHtml(str);\n return str;\n}\n\n/**\n * `onIgnoreTag` function for removing all the tags that are not in whitelist\n */\nfunction onIgnoreTagStripAll() {\n return \"\";\n}\n\n/**\n * remove tag body\n * specify a `tags` list, if the tag is not in the `tags` list then process by the specify function (optional)\n *\n * @param {array} tags\n * @param {function} next\n */\nfunction StripTagBody(tags, next) {\n if (typeof next !== \"function\") {\n next = function () {};\n }\n\n var isRemoveAllTag = !Array.isArray(tags);\n function isRemoveTag(tag) {\n if (isRemoveAllTag) return true;\n return _$2.indexOf(tags, tag) !== -1;\n }\n\n var removeList = [];\n var posStart = false;\n\n return {\n onIgnoreTag: function (tag, html, options) {\n if (isRemoveTag(tag)) {\n if (options.isClosing) {\n var ret = \"[/removed]\";\n var end = options.position + ret.length;\n removeList.push([\n posStart !== false ? posStart : options.position,\n end,\n ]);\n posStart = false;\n return ret;\n } else {\n if (!posStart) {\n posStart = options.position;\n }\n return \"[removed]\";\n }\n } else {\n return next(tag, html, options);\n }\n },\n remove: function (html) {\n var rethtml = \"\";\n var lastPos = 0;\n _$2.forEach(removeList, function (pos) {\n rethtml += html.slice(lastPos, pos[0]);\n lastPos = pos[1];\n });\n rethtml += html.slice(lastPos);\n return rethtml;\n },\n };\n}\n\n/**\n * remove html comments\n *\n * @param {String} html\n * @return {String}\n */\nfunction stripCommentTag(html) {\n var retHtml = \"\";\n var lastPos = 0;\n while (lastPos < html.length) {\n var i = html.indexOf(\"<!--\", lastPos);\n if (i === -1) {\n retHtml += html.slice(lastPos);\n break;\n }\n retHtml += html.slice(lastPos, i);\n var j = html.indexOf(\"-->\", i);\n if (j === -1) {\n break;\n }\n lastPos = j + 3;\n }\n return retHtml;\n}\n\n/**\n * remove invisible characters\n *\n * @param {String} html\n * @return {String}\n */\nfunction stripBlankChar(html) {\n var chars = html.split(\"\");\n chars = chars.filter(function (char) {\n var c = char.charCodeAt(0);\n if (c === 127) return false;\n if (c <= 31) {\n if (c === 10 || c === 13) return true;\n return false;\n }\n return true;\n });\n return chars.join(\"\");\n}\n\n_default$1.whiteList = getDefaultWhiteList();\n_default$1.getDefaultWhiteList = getDefaultWhiteList;\n_default$1.onTag = onTag;\n_default$1.onIgnoreTag = onIgnoreTag;\n_default$1.onTagAttr = onTagAttr;\n_default$1.onIgnoreTagAttr = onIgnoreTagAttr;\n_default$1.safeAttrValue = safeAttrValue;\n_default$1.escapeHtml = escapeHtml;\n_default$1.escapeQuote = escapeQuote;\n_default$1.unescapeQuote = unescapeQuote;\n_default$1.escapeHtmlEntities = escapeHtmlEntities;\n_default$1.escapeDangerHtml5Entities = escapeDangerHtml5Entities;\n_default$1.clearNonPrintableCharacter = clearNonPrintableCharacter;\n_default$1.friendlyAttrValue = friendlyAttrValue;\n_default$1.escapeAttrValue = escapeAttrValue;\n_default$1.onIgnoreTagStripAll = onIgnoreTagStripAll;\n_default$1.StripTagBody = StripTagBody;\n_default$1.stripCommentTag = stripCommentTag;\n_default$1.stripBlankChar = stripBlankChar;\n_default$1.cssFilter = defaultCSSFilter;\n_default$1.getDefaultCSSWhiteList = getDefaultCSSWhiteList;\n\nvar parser$1 = {};\n\n/**\n * Simple HTML Parser\n *\n * @author Zongmin Lei<leizongmin@gmail.com>\n */\n\nvar _$1 = util;\n\n/**\n * get tag name\n *\n * @param {String} html e.g. '<a hef=\"#\">'\n * @return {String}\n */\nfunction getTagName(html) {\n var i = _$1.spaceIndex(html);\n var tagName;\n if (i === -1) {\n tagName = html.slice(1, -1);\n } else {\n tagName = html.slice(1, i + 1);\n }\n tagName = _$1.trim(tagName).toLowerCase();\n if (tagName.slice(0, 1) === \"/\") tagName = tagName.slice(1);\n if (tagName.slice(-1) === \"/\") tagName = tagName.slice(0, -1);\n return tagName;\n}\n\n/**\n * is close tag?\n *\n * @param {String} html 如:'<a hef=\"#\">'\n * @return {Boolean}\n */\nfunction isClosing(html) {\n return html.slice(0, 2) === \"</\";\n}\n\n/**\n * parse input html and returns processed html\n *\n * @param {String} html\n * @param {Function} onTag e.g. function (sourcePosition, position, tag, html, isClosing)\n * @param {Function} escapeHtml\n * @return {String}\n */\nfunction parseTag$1(html, onTag, escapeHtml) {\n\n var rethtml = \"\";\n var lastPos = 0;\n var tagStart = false;\n var quoteStart = false;\n var currentPos = 0;\n var len = html.length;\n var currentTagName = \"\";\n var currentHtml = \"\";\n\n chariterator: for (currentPos = 0; currentPos < len; currentPos++) {\n var c = html.charAt(currentPos);\n if (tagStart === false) {\n if (c === \"<\") {\n tagStart = currentPos;\n continue;\n }\n } else {\n if (quoteStart === false) {\n if (c === \"<\") {\n rethtml += escapeHtml(html.slice(lastPos, currentPos));\n tagStart = currentPos;\n lastPos = currentPos;\n continue;\n }\n if (c === \">\") {\n rethtml += escapeHtml(html.slice(lastPos, tagStart));\n currentHtml = html.slice(tagStart, currentPos + 1);\n currentTagName = getTagName(currentHtml);\n rethtml += onTag(\n tagStart,\n rethtml.length,\n currentTagName,\n currentHtml,\n isClosing(currentHtml)\n );\n lastPos = currentPos + 1;\n tagStart = false;\n continue;\n }\n if (c === '\"' || c === \"'\") {\n var i = 1;\n var ic = html.charAt(currentPos - i);\n\n while (ic.trim() === \"\" || ic === \"=\") {\n if (ic === \"=\") {\n quoteStart = c;\n continue chariterator;\n }\n ic = html.charAt(currentPos - ++i);\n }\n }\n } else {\n if (c === quoteStart) {\n quoteStart = false;\n continue;\n }\n }\n }\n }\n if (lastPos < html.length) {\n rethtml += escapeHtml(html.substr(lastPos));\n }\n\n return rethtml;\n}\n\nvar REGEXP_ILLEGAL_ATTR_NAME = /[^a-zA-Z0-9\\\\_:.-]/gim;\n\n/**\n * parse input attributes and returns processed attributes\n *\n * @param {String} html e.g. `href=\"#\" target=\"_blank\"`\n * @param {Function} onAttr e.g. `function (name, value)`\n * @return {String}\n */\nfunction parseAttr$1(html, onAttr) {\n\n var lastPos = 0;\n var lastMarkPos = 0;\n var retAttrs = [];\n var tmpName = false;\n var len = html.length;\n\n function addAttr(name, value) {\n name = _$1.trim(name);\n name = name.replace(REGEXP_ILLEGAL_ATTR_NAME, \"\").toLowerCase();\n if (name.length < 1) return;\n var ret = onAttr(name, value || \"\");\n if (ret) retAttrs.push(ret);\n }\n\n // 逐个分析字符\n for (var i = 0; i < len; i++) {\n var c = html.charAt(i);\n var v, j;\n if (tmpName === false && c === \"=\") {\n tmpName = html.slice(lastPos, i);\n lastPos = i + 1;\n lastMarkPos = html.charAt(lastPos) === '\"' || html.charAt(lastPos) === \"'\" ? lastPos : findNextQuotationMark(html, i + 1);\n continue;\n }\n if (tmpName !== false) {\n if (\n i === lastMarkPos\n ) {\n j = html.indexOf(c, i + 1);\n if (j === -1) {\n break;\n } else {\n v = _$1.trim(html.slice(lastMarkPos + 1, j));\n addAttr(tmpName, v);\n tmpName = false;\n i = j;\n lastPos = i + 1;\n continue;\n }\n }\n }\n if (/\\s|\\n|\\t/.test(c)) {\n html = html.replace(/\\s|\\n|\\t/g, \" \");\n if (tmpName === false) {\n j = findNextEqual(html, i);\n if (j === -1) {\n v = _$1.trim(html.slice(lastPos, i));\n addAttr(v);\n tmpName = false;\n lastPos = i + 1;\n continue;\n } else {\n i = j - 1;\n continue;\n }\n } else {\n j = findBeforeEqual(html, i - 1);\n if (j === -1) {\n v = _$1.trim(html.slice(lastPos, i));\n v = stripQuoteWrap(v);\n addAttr(tmpName, v);\n tmpName = false;\n lastPos = i + 1;\n continue;\n } else {\n continue;\n }\n }\n }\n }\n\n if (lastPos < html.length) {\n if (tmpName === false) {\n addAttr(html.slice(lastPos));\n } else {\n addAttr(tmpName, stripQuoteWrap(_$1.trim(html.slice(lastPos))));\n }\n }\n\n return _$1.trim(retAttrs.join(\" \"));\n}\n\nfunction findNextEqual(str, i) {\n for (; i < str.length; i++) {\n var c = str[i];\n if (c === \" \") continue;\n if (c === \"=\") return i;\n return -1;\n }\n}\n\nfunction findNextQuotationMark(str, i) {\n for (; i < str.length; i++) {\n var c = str[i];\n if (c === \" \") continue;\n if (c === \"'\" || c === '\"') return i;\n return -1;\n }\n}\n\nfunction findBeforeEqual(str, i) {\n for (; i > 0; i--) {\n var c = str[i];\n if (c === \" \") continue;\n if (c === \"=\") return i;\n return -1;\n }\n}\n\nfunction isQuoteWrapString(text) {\n if (\n (text[0] === '\"' && text[text.length - 1] === '\"') ||\n (text[0] === \"'\" && text[text.length - 1] === \"'\")\n ) {\n return true;\n } else {\n return false;\n }\n}\n\nfunction stripQuoteWrap(text) {\n if (isQuoteWrapString(text)) {\n return text.substr(1, text.length - 2);\n } else {\n return text;\n }\n}\n\nparser$1.parseTag = parseTag$1;\nparser$1.parseAttr = parseAttr$1;\n\n/**\n * filter xss\n *\n * @author Zongmin Lei<leizongmin@gmail.com>\n */\n\nvar FilterCSS = lib.exports.FilterCSS;\nvar DEFAULT = _default$1;\nvar parser = parser$1;\nvar parseTag = parser.parseTag;\nvar parseAttr = parser.parseAttr;\nvar _ = util;\n\n/**\n * returns `true` if the input value is `undefined` or `null`\n *\n * @param {Object} obj\n * @return {Boolean}\n */\nfunction isNull(obj) {\n return obj === undefined || obj === null;\n}\n\n/**\n * get attributes for a tag\n *\n * @param {String} html\n * @return {Object}\n * - {String} html\n * - {Boolean} closing\n */\nfunction getAttrs(html) {\n var i = _.spaceIndex(html);\n if (i === -1) {\n return {\n html: \"\",\n closing: html[html.length - 2] === \"/\",\n };\n }\n html = _.trim(html.slice(i + 1, -1));\n var isClosing = html[html.length - 1] === \"/\";\n if (isClosing) html = _.trim(html.slice(0, -1));\n return {\n html: html,\n closing: isClosing,\n };\n}\n\n/**\n * shallow copy\n *\n * @param {Object} obj\n * @return {Object}\n */\nfunction shallowCopyObject(obj) {\n var ret = {};\n for (var i in obj) {\n ret[i] = obj[i];\n }\n return ret;\n}\n\nfunction keysToLowerCase(obj) {\n var ret = {};\n for (var i in obj) {\n if (Array.isArray(obj[i])) {\n ret[i.toLowerCase()] = obj[i].map(function (item) {\n return item.toLowerCase();\n });\n } else {\n ret[i.toLowerCase()] = obj[i];\n }\n }\n return ret;\n}\n\n/**\n * FilterXSS class\n *\n * @param {Object} options\n * whiteList (or allowList), onTag, onTagAttr, onIgnoreTag,\n * onIgnoreTagAttr, safeAttrValue, escapeHtml\n * stripIgnoreTagBody, allowCommentTag, stripBlankChar\n * css{whiteList, onAttr, onIgnoreAttr} `css=false` means don't use `cssfilter`\n */\nfunction FilterXSS(options) {\n options = shallowCopyObject(options || {});\n\n if (options.stripIgnoreTag) {\n if (options.onIgnoreTag) {\n console.error(\n 'Notes: cannot use these two options \"stripIgnoreTag\" and \"onIgnoreTag\" at the same time'\n );\n }\n options.onIgnoreTag = DEFAULT.onIgnoreTagStripAll;\n }\n if (options.whiteList || options.allowList) {\n options.whiteList = keysToLowerCase(options.whiteList || options.allowList);\n } else {\n options.whiteList = DEFAULT.whiteList;\n }\n\n options.onTag = options.onTag || DEFAULT.onTag;\n options.onTagAttr = options.onTagAttr || DEFAULT.onTagAttr;\n options.onIgnoreTag = options.onIgnoreTag || DEFAULT.onIgnoreTag;\n options.onIgnoreTagAttr = options.onIgnoreTagAttr || DEFAULT.onIgnoreTagAttr;\n options.safeAttrValue = options.safeAttrValue || DEFAULT.safeAttrValue;\n options.escapeHtml = options.escapeHtml || DEFAULT.escapeHtml;\n this.options = options;\n\n if (options.css === false) {\n this.cssFilter = false;\n } else {\n options.css = options.css || {};\n this.cssFilter = new FilterCSS(options.css);\n }\n}\n\n/**\n * start process and returns result\n *\n * @param {String} html\n * @return {String}\n */\nFilterXSS.prototype.process = function (html) {\n // compatible with the input\n html = html || \"\";\n html = html.toString();\n if (!html) return \"\";\n\n var me = this;\n var options = me.options;\n var whiteList = options.whiteList;\n var onTag = options.onTag;\n var onIgnoreTag = options.onIgnoreTag;\n var onTagAttr = options.onTagAttr;\n var onIgnoreTagAttr = options.onIgnoreTagAttr;\n var safeAttrValue = options.safeAttrValue;\n var escapeHtml = options.escapeHtml;\n var cssFilter = me.cssFilter;\n\n // remove invisible characters\n if (options.stripBlankChar) {\n html = DEFAULT.stripBlankChar(html);\n }\n\n // remove html comments\n if (!options.allowCommentTag) {\n html = DEFAULT.stripCommentTag(html);\n }\n\n // if enable stripIgnoreTagBody\n var stripIgnoreTagBody = false;\n if (options.stripIgnoreTagBody) {\n stripIgnoreTagBody = DEFAULT.StripTagBody(\n options.stripIgnoreTagBody,\n onIgnoreTag\n );\n onIgnoreTag = stripIgnoreTagBody.onIgnoreTag;\n }\n\n var retHtml = parseTag(\n html,\n function (sourcePosition, position, tag, html, isClosing) {\n var info = {\n sourcePosition: sourcePosition,\n position: position,\n isClosing: isClosing,\n isWhite: Object.prototype.hasOwnProperty.call(whiteList, tag),\n };\n\n // call `onTag()`\n var ret = onTag(tag, html, info);\n if (!isNull(ret)) return ret;\n\n if (info.isWhite) {\n if (info.isClosing) {\n return \"</\" + tag + \">\";\n }\n\n var attrs = getAttrs(html);\n var whiteAttrList = whiteList[tag];\n var attrsHtml = parseAttr(attrs.html, function (name, value) {\n // call `onTagAttr()`\n var isWhiteAttr = _.indexOf(whiteAttrList, name) !== -1;\n var ret = onTagAttr(tag, name, value, isWhiteAttr);\n if (!isNull(ret)) return ret;\n\n if (isWhiteAttr) {\n // call `safeAttrValue()`\n value = safeAttrValue(tag, name, value, cssFilter);\n if (value) {\n return name + '=\"' + value + '\"';\n } else {\n return name;\n }\n } else {\n // call `onIgnoreTagAttr()`\n ret = onIgnoreTagAttr(tag, name, value, isWhiteAttr);\n if (!isNull(ret)) return ret;\n return;\n }\n });\n\n // build new tag html\n html = \"<\" + tag;\n if (attrsHtml) html += \" \" + attrsHtml;\n if (attrs.closing) html += \" /\";\n html += \">\";\n return html;\n } else {\n // call `onIgnoreTag()`\n ret = onIgnoreTag(tag, html, info);\n if (!isNull(ret)) return ret;\n return escapeHtml(html);\n }\n },\n escapeHtml\n );\n\n // if enable stripIgnoreTagBody\n if (stripIgnoreTagBody) {\n retHtml = stripIgnoreTagBody.remove(retHtml);\n }\n\n return retHtml;\n};\n\nvar xss = FilterXSS;\n\n/**\n * xss\n *\n * @author Zongmin Lei<leizongmin@gmail.com>\n */\n\n(function (module, exports) {\n\tvar DEFAULT = _default$1;\n\tvar parser = parser$1;\n\tvar FilterXSS = xss;\n\n\t/**\n\t * filter xss function\n\t *\n\t * @param {String} html\n\t * @param {Object} options { whiteList, onTag, onTagAttr, onIgnoreTag, onIgnoreTagAttr, safeAttrValue, escapeHtml }\n\t * @return {String}\n\t */\n\tfunction filterXSS(html, options) {\n\t var xss = new FilterXSS(options);\n\t return xss.process(html);\n\t}\n\n\texports = module.exports = filterXSS;\n\texports.filterXSS = filterXSS;\n\texports.FilterXSS = FilterXSS;\n\n\t(function () {\n\t for (var i in DEFAULT) {\n\t exports[i] = DEFAULT[i];\n\t }\n\t for (var j in parser) {\n\t exports[j] = parser[j];\n\t }\n\t})();\n\n\t// using `xss` on the WebWorker, output `filterXSS` to the globals\n\tfunction isWorkerEnv() {\n\t return (\n\t typeof self !== \"undefined\" &&\n\t typeof DedicatedWorkerGlobalScope !== \"undefined\" &&\n\t self instanceof DedicatedWorkerGlobalScope\n\t );\n\t}\n\tif (isWorkerEnv()) {\n\t self.filterXSS = module.exports;\n\t}\n} (lib$1, lib$1.exports));\n\n/* Copyright (c) 2020 Environmental Systems Research Institute, Inc.\n * Apache-2.0\n *\n * js-xss\n * Copyright (c) 2012-2018 Zongmin Lei(雷宗民) <leizongmin@gmail.com>\n * http://ucdok.com\n * The MIT License, see\n * https://github.com/leizongmin/js-xss/blob/master/LICENSE for details\n * */\n/**\n * The Sanitizer Class\n *\n * @export\n * @class Sanitizer\n */\nvar Sanitizer = /** @class */ (function () {\n function Sanitizer(filterOptions, extendDefaults) {\n var _this = this;\n // Supported HTML Spec: https://doc.arcgis.com/en/arcgis-online/reference/supported-html.htm\n this.arcgisWhiteList = {\n a: [\"href\", \"style\", \"target\"],\n abbr: [\"title\"],\n audio: [\"autoplay\", \"controls\", \"loop\", \"muted\", \"preload\"],\n b: [],\n br: [],\n dd: [\"style\"],\n div: [\"align\", \"style\"],\n dl: [\"style\"],\n dt: [\"style\"],\n em: [],\n figcaption: [\"style\"],\n figure: [\"style\"],\n font: [\"color\", \"face\", \"size\", \"style\"],\n h1: [\"style\"],\n h2: [\"style\"],\n h3: [\"style\"],\n h4: [\"style\"],\n h5: [\"style\"],\n h6: [\"style\"],\n hr: [],\n i: [],\n img: [\"alt\", \"border\", \"height\", \"src\", \"style\", \"width\"],\n li: [],\n ol: [],\n p: [\"style\"],\n source: [\"media\", \"src\", \"type\"],\n span: [\"style\"],\n strong: [],\n sub: [\"style\"],\n sup: [\"style\"],\n table: [\"border\", \"cellpadding\", \"cellspacing\", \"height\", \"style\", \"width\"],\n tbody: [],\n tr: [\"align\", \"height\", \"style\", \"valign\"],\n td: [\n \"align\",\n \"colspan\",\n \"height\",\n \"nowrap\",\n \"rowspan\",\n \"style\",\n \"valign\",\n \"width\",\n ],\n th: [\n \"align\",\n \"colspan\",\n \"height\",\n \"nowrap\",\n \"rowspan\",\n \"style\",\n \"valign\",\n \"width\",\n ],\n u: [],\n ul: [],\n video: [\n \"autoplay\",\n \"controls\",\n \"height\",\n \"loop\",\n \"muted\",\n \"poster\",\n \"preload\",\n \"width\",\n ],\n };\n this.allowedProtocols = [\n \"http\",\n \"https\",\n \"mailto\",\n \"iform\",\n \"tel\",\n \"flow\",\n \"lfmobile\",\n \"arcgis-navigator\",\n \"arcgis-appstudio-player\",\n \"arcgis-survey123\",\n \"arcgis-collector\",\n \"arcgis-workforce\",\n \"arcgis-explorer\",\n \"arcgis-trek2there\",\n \"arcgis-quickcapture\",\n \"mspbi\",\n \"comgooglemaps\",\n \"pdfefile\",\n \"pdfehttp\",\n \"pdfehttps\",\n \"boxapp\",\n \"boxemm\",\n \"awb\",\n \"awbs\",\n \"gropen\",\n \"radarscope\",\n ];\n this.arcgisFilterOptions = {\n allowCommentTag: true,\n safeAttrValue: function (tag, name, value, cssFilter) {\n // Take over safe attribute filtering for `a` `href`, `img` `src`,\n // and `source` `src` attributes, otherwise pass onto the\n // default `XSS.safeAttrValue` method.\n if ((tag === \"a\" && name === \"href\") ||\n ((tag === \"img\" || tag === \"source\") && name === \"src\")) {\n return _this.sanitizeUrl(value);\n }\n return lib$1.exports.safeAttrValue(tag, name, value, cssFilter);\n },\n };\n this._entityMap = {\n \"&\": \"8\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\n \"'\": \"'\",\n \"/\": \"/\",\n };\n var xssFilterOptions;\n if (filterOptions && !extendDefaults) {\n // Override the defaults\n xssFilterOptions = filterOptions;\n }\n else if (filterOptions && extendDefaults) {\n // Extend the defaults\n xssFilterOptions = Object.create(this.arcgisFilterOptions);\n Object.keys(filterOptions).forEach(function (key) {\n if (key === \"whiteList\") {\n // Extend the whitelist by concatenating arrays\n xssFilterOptions.whiteList = _this._extendObjectOfArrays([\n _this.arcgisWhiteList,\n filterOptions.whiteList || {},\n ]);\n }\n else {\n xssFilterOptions[key] = filterOptions[key];\n }\n });\n }\n else {\n // Only use the defaults\n xssFilterOptions = Object.create(this.arcgisFilterOptions);\n xssFilterOptions.whiteList = this.arcgisWhiteList;\n }\n this.xssFilterOptions = xssFilterOptions;\n // Make this readable to tests\n this._xssFilter = new lib$1.exports.FilterXSS(xssFilterOptions);\n }\n /**\n * Sanitizes value to remove invalid HTML tags.\n *\n * Note: If the value passed does not contain a valid JSON data type (String,\n * Number, JSON Object, Array, Boolean, or null), the value will be nullified.\n *\n * @param {any} value The value to sanitize.\n * @returns {any} The sanitized value.\n * @memberof Sanitizer\n */\n Sanitizer.prototype.sanitize = function (value, options) {\n if (options === void 0) { options = {}; }\n switch (typeof value) {\n case \"number\":\n if (isNaN(value) || !isFinite(value)) {\n return null;\n }\n return value;\n case \"boolean\":\n return value;\n case \"string\":\n return this._xssFilter.process(value);\n case \"object\":\n return this._iterateOverObject(value, options);\n default:\n if (options.allowUndefined && typeof value === \"undefined\") {\n return;\n }\n return null;\n }\n };\n /**\n * Sanitizes a URL string following the allowed protocols and sanitization rules.\n *\n * @param {string} value The URL to sanitize.\n * @param {{ isProtocolRequired: boolean }} options Configuration options for URL checking.\n * @returns {string} The sanitized URL if it's valid, or an empty string if the URL is invalid.\n */\n Sanitizer.prototype.sanitizeUrl = function (value, options) {\n var _a = (options !== null && options !== void 0 ? options : {}).isProtocolRequired, isProtocolRequired = _a === void 0 ? true : _a;\n var protocol = this._trim(value.substring(0, value.indexOf(\":\")));\n var isRootUrl = value === '/';\n var isUrlFragment = /^#/.test(value);\n var isValidProtocol = protocol && this.allowedProtocols.indexOf(protocol.toLowerCase()) > -1;\n if (isRootUrl || isUrlFragment || isValidProtocol) {\n return lib$1.exports.escapeAttrValue(value);\n }\n if (!protocol && !isProtocolRequired) {\n return lib$1.exports.escapeAttrValue(\"https://\".concat(value));\n }\n return \"\";\n };\n /**\n * Sanitizes an HTML attribute value.\n *\n * @param {string} tag The tagname of the HTML element.\n * @param {string} attribute The attribute name of the HTML element.\n * @param {string} value The raw value to be used for the HTML attribute value.\n * @param {XSS.ICSSFilter} [cssFilter] The CSS filter to be used.\n * @returns {string} The sanitized attribute value.\n * @memberof Sanitizer\n */\n Sanitizer.prototype.sanitizeHTMLAttribute = function (tag, attribute, value, cssFilter) {\n // use the custom safeAttrValue function if provided\n if (typeof this.xssFilterOptions.safeAttrValue === \"function\") {\n return this.xssFilterOptions.safeAttrValue(tag, attribute, value, \n // @ts-expect-error safeAttrValue does handle undefined cssFilter\n cssFilter);\n }\n // otherwise use the default\n // @ts-ignore safeAttrValue does handle undefined cssFilter\n return lib$1.exports.safeAttrValue(tag, attribute, value, cssFilter);\n };\n /**\n * Checks if a value only contains valid HTML.\n *\n * @param {any} value The value to validate.\n * @returns {boolean}\n * @memberof Sanitizer\n */\n Sanitizer.prototype.validate = function (value, options) {\n if (options === void 0) { options = {}; }\n var sanitized = this.sanitize(value, options);\n return {\n isValid: value === sanitized,\n sanitized: sanitized,\n };\n };\n /**\n * Encodes the following characters, `& < > \\\" ' /` to their hexadecimal HTML entity code.\n * Example: \"·\" => \"8middot;\"\n *\n * @param {string} value The value to encode.\n * @returns {string} The encoded string value.\n * @memberof Sanitizer\n */\n Sanitizer.prototype.encodeHTML = function (value) {\n var _this = this;\n return String(value).replace(/[&<>\"'\\/]/g, function (s) {\n return _this._entityMap[s];\n });\n };\n /**\n * Encodes all non-alphanumeric ASCII characters to their hexadecimal HTML entity codes.\n * Example: \"alert(document.cookie)\" => \"alert(document.cookie)\"\n *\n * @param {string} value The value to encode.\n * @returns {string} The encoded string value.\n * @memberof Sanitizer\n */\n Sanitizer.prototype.encodeAttrValue = function (value) {\n var alphanumericRE = /^[a-zA-Z0-9]$/;\n return String(value).replace(/[\\x00-\\xFF]/g, function (c, idx) {\n return !alphanumericRE.test(c)\n ? \"&#x\".concat(Number(value.charCodeAt(idx)).toString(16), \";\")\n : c;\n });\n };\n /**\n * Extends an object of arrays by by concatenating arrays of the same object\n * keys. If the if the previous key's value is not an array, the next key's\n * value will replace the previous key. This method is used for extending the\n * whiteList in the XSS filter options.\n *\n * @private\n * @param {Array<{}>} objects An array of objects.\n * @returns {{}} The extended object.\n * @memberof Sanitizer\n */\n Sanitizer.prototype._extendObjectOfArrays = function (objects) {\n var finalObj = {};\n objects.forEach(function (obj) {\n Object.keys(obj).forEach(function (key) {\n if (Array.isArray(obj[key]) && Array.isArray(finalObj[key])) {\n finalObj[key] = finalObj[key].concat(obj[key]);\n }\n else {\n finalObj[key] = obj[key];\n }\n });\n });\n return finalObj;\n };\n /**\n * Iterate over a plain object or array to deeply sanitize each value.\n *\n * @private\n * @param {object} obj The object to iterate over.\n * @returns {(object | null)} The sanitized object.\n * @memberof Sanitizer\n */\n Sanitizer.prototype._iterateOverObject = function (obj, options) {\n var _this = this;\n if (options === void 0) { options = {}; }\n try {\n var hasChanged_1 = false;\n var changedObj = void 0;\n if (Array.isArray(obj)) {\n changedObj = obj.reduce(function (prev, value) {\n var validation = _this.validate(value, options);\n if (validation.isValid) {\n return prev.concat([value]);\n }\n else {\n hasChanged_1 = true;\n return prev.concat([validation.sanitized]);\n }\n }, []);\n }\n else if (!isPlainObject(obj)) {\n if (options.allowUndefined && typeof obj === \"undefined\") {\n return;\n }\n return null;\n }\n else {\n var keys = Object.keys(obj);\n changedObj = keys.reduce(function (prev, key) {\n var value = obj[key];\n var validation = _this.validate(value, options);\n if (validation.isValid) {\n prev[key] = value;\n }\n else {\n hasChanged_1 = true;\n prev[key] = validation.sanitized;\n }\n return prev;\n }, {});\n }\n if (hasChanged_1) {\n return changedObj;\n }\n return obj;\n }\n catch (err) {\n return null;\n }\n };\n /**\n * Trim whitespace from the start and ends of a string.\n * @param {string} val The string to trim.\n * @returns {string} The trimmed string.\n */\n Sanitizer.prototype._trim = function (val) {\n // @ts-ignore This is used by Jest,\n // but TypeScript errors since it assumes `trim` is always available.\n return String.prototype.trim\n ? val.trim()\n : val.replace(/(^\\s*)|(\\s*$)/g, \"\");\n };\n return Sanitizer;\n}());\n\nexport { Sanitizer, Sanitizer as default };\n","/** @license\r\n * Copyright 2020 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provides connectors to third-party helper functions.\r\n */\r\n\r\nimport JSZip from \"jszip\";\r\nimport { blobToFile } from \"./generalHelpers\";\r\nimport { Sanitizer } from \"@esri/arcgis-html-sanitizer\";\r\nexport { Sanitizer } from \"@esri/arcgis-html-sanitizer\";\r\n\r\n//#region JSZip ----------------------------------------------------------------------------------------------------- //\r\n\r\n/**\r\n * Creates a zip File from a collection of Files.\r\n *\r\n * @param zipFilename Name to use for zip File\r\n * @param files List of files to add to zip File\r\n * @param folder Folder to contain the files\r\n * @returns Promise resolving to a zip File\r\n */\r\nexport function createZip(\r\n zipFilename: string,\r\n files: File[],\r\n folder?: string\r\n): Promise<File> {\r\n return new Promise<File>((resolve, reject) => {\r\n const zip = new JSZip();\r\n let container = zip;\r\n if (folder) {\r\n container = zip.folder(folder);\r\n }\r\n\r\n // Add the files\r\n files.forEach(file => container.file(file.name, file, { binary: true }));\r\n\r\n // Create the ZIP\r\n zip\r\n .generateAsync({ type: \"blob\" })\r\n .then(\r\n (content: Blob) =>\r\n resolve(blobToFile(content, zipFilename, \"application/zip\")),\r\n reject\r\n );\r\n });\r\n}\r\n\r\n//#endregion ---------------------------------------------------------------------------------------------------------//\r\n\r\n//#region arcgis-html-sanitizer ------------------------------------------------------------------------------------- //\r\n\r\n/**\r\n * Result of checking if a string contains invalid HTML.\r\n */\r\nexport interface IValidationResult {\r\n /*\r\n * Flag indicating if `html` is valid (i.e., contains no invalid HTML)\r\n */\r\n isValid: boolean;\r\n /*\r\n * Sanitized version of `html`\r\n */\r\n sanitized: string;\r\n}\r\n\r\n/**\r\n * Sanitizes html.\r\n *\r\n * @param HTML Text to sanitize\r\n * @param sanitizer Instance of Sanitizer class\r\n * @returns Sanitized version of `html`\r\n * @see https://github.com/esri/arcgis-html-sanitizer#basic-usage\r\n */\r\nexport function sanitizeHTML(html: string, sanitizer?: Sanitizer): string {\r\n if (!sanitizer) {\r\n sanitizer = new Sanitizer();\r\n }\r\n\r\n return sanitizer.sanitize(html);\r\n}\r\n\r\n/**\r\n * Sanitizes JSON.\r\n *\r\n * @param json JSON to sanitize\r\n * @param sanitizer Instance of Sanitizer class\r\n * @returns Sanitized version of `json`\r\n * @see https://github.com/esri/arcgis-html-sanitizer#sanitize-json\r\n */\r\nexport function sanitizeJSON(json: any, sanitizer?: Sanitizer): any {\r\n if (!sanitizer) {\r\n sanitizer = new Sanitizer();\r\n }\r\n\r\n return sanitizer.sanitize(json);\r\n}\r\n\r\n/**\r\n * Sanitizes the protocol in a URL.\r\n *\r\n * @param url URL to sanitize\r\n * @param sanitizer Instance of Sanitizer class\r\n * @returns Sanitized version of `url`\r\n * @see https://github.com/esri/arcgis-html-sanitizer#sanitize-urls\r\n */\r\nexport function sanitizeURLProtocol(\r\n url: string,\r\n sanitizer?: Sanitizer\r\n): string {\r\n if (!sanitizer) {\r\n sanitizer = new Sanitizer();\r\n }\r\n\r\n return sanitizer.sanitizeUrl(url);\r\n}\r\n\r\n/**\r\n * Checks if a string contains invalid HTML.\r\n *\r\n * @param html HTML to check\r\n * @param sanitizer Instance of Sanitizer class\r\n * @returns An object containing a flag indicating if `html` is valid (i.e., contains no invalid HTML)\r\n * as well as the sanitized version of `html`\r\n * @see https://github.com/esri/arcgis-html-sanitizer#basic-usage\r\n */\r\nexport function validateHTML(\r\n html: string,\r\n sanitizer?: Sanitizer\r\n): IValidationResult {\r\n if (!sanitizer) {\r\n sanitizer = new Sanitizer();\r\n }\r\n\r\n return sanitizer.validate(html);\r\n}\r\n\r\n//#endregion ---------------------------------------------------------------------------------------------------------//\r\n","/** @license\r\n * Copyright 2020 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/**\r\n * Provides polyfill helper functions.\r\n *\r\n * @module polyfills\r\n */\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\n/**\r\n * Supplies Blob.text for Microsoft Legacy Edge\r\n *\r\n * @param blob Blob to read\r\n * @returns Promise resolving to blob's text\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Blob/Blob\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/FileReader\r\n */\r\nexport function getBlobText(blob: Blob): Promise<string> {\r\n let textPromise: Promise<string>;\r\n\r\n /* istanbul ignore else */\r\n if (typeof blob.text !== \"undefined\") {\r\n // Modern browser\r\n textPromise = blob.text();\r\n } else {\r\n // Microsoft Legacy Edge\r\n textPromise = new Promise<string>((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onload = function(event) {\r\n if (event.target && event.target.result) {\r\n // event.target.result is typed as \"string | ArrayBuffer | null\", but for the readAsText function,\r\n // the result is a string\r\n resolve(event.target.result as string);\r\n } else {\r\n resolve(\"\");\r\n }\r\n };\r\n reader.onerror = function(event) {\r\n reject(event);\r\n };\r\n reader.readAsText(blob);\r\n });\r\n }\r\n\r\n return textPromise;\r\n}\r\n\r\n/**\r\n * Supplies the File constructor for Microsoft Legacy Edge.\r\n *\r\n * @param fileBits Contents for file\r\n * @param fileName Name for file\r\n * @param options Bucket of options, euch as `type` for the MIME type; defaults to empty string for `type`\r\n * @returns File or, for Microsoft Legacy Edge, Blob\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/File/File\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Blob/Blob\r\n */\r\nexport function new_File(\r\n fileBits: BlobPart[],\r\n fileName: string,\r\n options?: FilePropertyBag\r\n): File {\r\n let file: File;\r\n\r\n try {\r\n // Modern browser\r\n file = new File(fileBits, fileName, options);\r\n } catch (error) {\r\n // Microsoft Legacy Edge\r\n /* istanbul ignore next */\r\n file = (function(): File {\r\n if (typeof options === \"undefined\") {\r\n // Microsoft Legacy Edge fails in karma if options is not defined\r\n options = {\r\n type: \"\"\r\n };\r\n }\r\n const blob = new Blob(fileBits, options) as any;\r\n blob.lastModified = new Date();\r\n blob.name = fileName;\r\n return blob as File;\r\n })();\r\n }\r\n\r\n return file;\r\n}\r\n","/** @license\r\n * Copyright 2018 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/**\r\n * Provides general helper functions.\r\n *\r\n * @module generalHelpers\r\n */\r\n\r\nimport { createId } from \"@esri/hub-common\";\r\nimport {\r\n ICreateItemFromTemplateResponse,\r\n IDatasourceInfo,\r\n IItemTemplate,\r\n IStringValuePair\r\n} from \"./interfaces\";\r\nimport { Sanitizer, sanitizeJSON } from \"./libConnectors\";\r\nimport { new_File } from \"./polyfills\";\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\n/**\r\n * Returns a URL with a query parameter appended\r\n *\r\n * @param url URL to append to\r\n * @param parameter Query parameter to append, prefixed with \"?\" or \"&\" as appropriate to what url already has\r\n * @returns New URL combining url and parameter\r\n */\r\nexport function appendQueryParam(url: string, parameter: string): string {\r\n return url + (url.indexOf(\"?\") === -1 ? \"?\" : \"&\") + parameter;\r\n}\r\n\r\n/**\r\n * Extracts JSON from a Blob.\r\n *\r\n * @param blob Blob to use as source\r\n * @returns A promise that will resolve with JSON or null\r\n */\r\nexport function blobToJson(blob: Blob): Promise<any> {\r\n return new Promise<any>(resolve => {\r\n blobToText(blob).then(\r\n blobContents => {\r\n try {\r\n resolve(JSON.parse(blobContents));\r\n } catch (err) {\r\n resolve(null);\r\n }\r\n },\r\n () => resolve(null)\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Converts a Blob to a File.\r\n *\r\n * @param blob Blob to use as source\r\n * @param filename Name to use for file\r\n * @param mimeType MIME type to override blob's MIME type\r\n * @returns File created out of Blob and filename\r\n */\r\nexport function blobToFile(\r\n blob: Blob,\r\n filename: string,\r\n mimeType?: string\r\n): File {\r\n return blob\r\n ? new_File([blob], filename ? filename : \"\", {\r\n type: mimeType || blob.type\r\n })\r\n : null;\r\n}\r\n\r\n/**\r\n * Extracts text from a Blob.\r\n *\r\n * @param blob Blob to use as source\r\n * @returns A promise that will resolve with text read from blob\r\n */\r\nexport function blobToText(blob: Blob): Promise<string> {\r\n return new Promise<string>(resolve => {\r\n const reader = new FileReader();\r\n reader.onload = function(evt) {\r\n // Disable needed because Node requires cast\r\n // tslint:disable-next-line: no-unnecessary-type-assertion\r\n const blobContents = evt.target.result;\r\n resolve(blobContents ? (blobContents as string) : \"\"); // not handling ArrayContents variant\r\n };\r\n reader.readAsText(blob);\r\n });\r\n}\r\n\r\n/**\r\n * Checks that a URL path ends with a slash.\r\n *\r\n * @param url URL to check\r\n * @returns URL, appended with slash if missing\r\n */\r\nexport function checkUrlPathTermination(url: string): string {\r\n return url ? (url.endsWith(\"/\") ? url : url + \"/\") : url;\r\n}\r\n\r\n/**\r\n * Creates a random 32-character alphanumeric string.\r\n *\r\n * @returns A lowercase 32-char alphanumeric string\r\n * @internal\r\n */\r\nexport function createLongId(): string {\r\n // createId gets a random number, converts it to base 36 representation, then grabs chars 2-8\r\n return createId(\"\") + createId(\"\") + createId(\"\") + createId(\"\");\r\n}\r\n\r\n/**\r\n * Creates a random 8-character alphanumeric string that begins with an alphabetic character.\r\n *\r\n * @returns An alphanumeric string in the range [a0000000..zzzzzzzz]\r\n */\r\nexport function createShortId(): string {\r\n // Return a random number, but beginning with an alphabetic character so that it can be used as a valid\r\n // dotable property name. Used for unique identifiers that do not require the rigor of a full UUID -\r\n // i.e. node ids, process ids, etc.\r\n const min = 0.2777777777777778; // 0.a in base 36\r\n const max = 0.9999999999996456; // 0.zzzzzzzz in base 36\r\n return (_getRandomNumberInRange(min, max).toString(36) + \"0000000\").substr(\r\n 2,\r\n 8\r\n );\r\n}\r\n\r\n/**\r\n * Copies an input list removing duplicates.\r\n *\r\n * @param input List to be deduped\r\n * @returns Deduped list; order of items in input is not maintained\r\n */\r\nexport function dedupe(input: string[] = []): string[] {\r\n if (input.length === 0) {\r\n return [];\r\n }\r\n const dedupedList = new Set(input);\r\n const output: string[] = [];\r\n dedupedList.forEach((value: string) => output.push(value));\r\n return output;\r\n}\r\n\r\n/**\r\n * Flags a failure to create an item from a template.\r\n *\r\n * @param itemType The AGO item type\r\n * @param id Item id to include in response\r\n * @returns Empty creation response\r\n */\r\nexport function generateEmptyCreationResponse(\r\n itemType: string,\r\n id = \"\"\r\n): ICreateItemFromTemplateResponse {\r\n return {\r\n item: null,\r\n id,\r\n type: itemType,\r\n postProcess: false\r\n };\r\n}\r\n\r\n/**\r\n * Converts JSON to a Blob.\r\n *\r\n * @param json JSON to use as source\r\n * @returns A blob from the source JSON\r\n */\r\nexport function jsonToBlob(json: any): Blob {\r\n const _json = JSON.stringify(json);\r\n const blobOptions = { type: \"application/octet-stream\" };\r\n\r\n const charArray = [];\r\n for (let i = 0; i < _json.length; i++) {\r\n charArray[i] = _json.charCodeAt(i);\r\n }\r\n\r\n return new Blob([new Uint8Array(charArray)], blobOptions);\r\n}\r\n\r\n/**\r\n * Converts JSON to a File.\r\n *\r\n * @param json JSON to use as source\r\n * @param filename Name to use for file\r\n * @param mimeType MIME type to override blob's MIME type\r\n * @returns File created out of JSON and filename\r\n */\r\nexport function jsonToFile(\r\n json: any,\r\n filename: string,\r\n mimeType = \"application/json\"\r\n): File {\r\n return blobToFile(jsonToBlob(json), filename, mimeType);\r\n}\r\n\r\n/**\r\n * Saves a blob to a file.\r\n *\r\n * @param filename Name to give file\r\n * @param blob Blob to save\r\n * @returns Promise resolving when operation is complete\r\n */\r\n// Function is only used for live testing, so excluding it from coverage for now\r\n/* istanbul ignore next */\r\nexport function saveBlobAsFile(filename: string, blob: Blob): Promise<void> {\r\n return new Promise<void>(resolve => {\r\n const dataUrl = URL.createObjectURL(blob);\r\n const linkElement = document.createElement(\"a\");\r\n linkElement.setAttribute(\"href\", dataUrl);\r\n linkElement.setAttribute(\"download\", filename);\r\n linkElement.style.display = \"none\";\r\n document.body.appendChild(linkElement);\r\n linkElement.click();\r\n document.body.removeChild(linkElement);\r\n setTimeout(() => {\r\n URL.revokeObjectURL(dataUrl);\r\n resolve(null);\r\n }, 500);\r\n });\r\n}\r\n\r\n/**\r\n * Makes a deep clone, including arrays but not functions.\r\n *\r\n * @param obj Object to be cloned\r\n * @returns Clone of obj\r\n * @example\r\n * ```js\r\n * import { cloneObject } from \"utils/object-helpers\";\r\n * const original = { foo: \"bar\" }\r\n * const copy = cloneObject(original)\r\n * copy.foo // \"bar\"\r\n * copy === original // false\r\n * ```\r\n */\r\nexport function cloneObject(obj: { [index: string]: any }): any {\r\n let clone: { [index: string]: any } = {};\r\n // first check array\r\n if (Array.isArray(obj)) {\r\n clone = obj.map(cloneObject);\r\n } else if (typeof obj === \"object\") {\r\n if (obj instanceof File) {\r\n const fileOptions = obj.type ? { type: obj.type } : undefined;\r\n clone = new File([obj], obj.name, fileOptions);\r\n } else {\r\n for (const i in obj) {\r\n if (obj[i] != null && typeof obj[i] === \"object\") {\r\n clone[i] = cloneObject(obj[i]);\r\n } else {\r\n clone[i] = obj[i];\r\n }\r\n }\r\n }\r\n } else {\r\n clone = obj;\r\n }\r\n return clone;\r\n}\r\n\r\n/**\r\n * Compares two JSON objects using JSON.stringify.\r\n *\r\n * @param json1 First object\r\n * @param json2 Second object\r\n * @returns True if objects are the same\r\n */\r\nexport function compareJSON(json1: any, json2: any): boolean {\r\n return JSON.stringify(json1) === JSON.stringify(json2);\r\n}\r\n\r\n/**\r\n * Compares two JSON objects using JSON.stringify, converting empty strings to nulls.\r\n *\r\n * @param json1 First object\r\n * @param json2 Second object\r\n * @returns True if objects are the same\r\n */\r\nexport function compareJSONNoEmptyStrings(json1: any, json2: any): boolean {\r\n const jsonStr1 = JSON.stringify(json1).replace(/\":\"\"/g, '\":null');\r\n const jsonStr2 = JSON.stringify(json2).replace(/\":\"\"/g, '\":null');\r\n return jsonStr1 === jsonStr2;\r\n}\r\n\r\n/**\r\n * Compares two JSON objects property by property and reports each mismatch.\r\n *\r\n * @param json1 First object\r\n * @param json2 Second object\r\n * @returns A list of mismatch report strings\r\n */\r\nexport function compareJSONProperties(json1: any, json2: any): string[] {\r\n let mismatches = [] as string[];\r\n\r\n const type1 = _typeof_null(json1);\r\n const type2 = _typeof_null(json2);\r\n\r\n if (type1 !== type2) {\r\n // Ignore \"undefined\" vs. \"null\" and vice versa\r\n /* istanbul ignore else */\r\n if (\r\n (type1 !== \"undefined\" && type1 !== \"null\") ||\r\n (type2 !== \"null\" && type2 !== \"undefined\")\r\n ) {\r\n mismatches.push(\"Type difference: \" + type1 + \" vs. \" + type2);\r\n }\r\n } else {\r\n if (json1 !== json2) {\r\n switch (type1) {\r\n case \"boolean\":\r\n mismatches.push(\"Value difference: \" + json1 + \" vs. \" + json2);\r\n break;\r\n case \"number\":\r\n mismatches.push(\"Value difference: \" + json1 + \" vs. \" + json2);\r\n break;\r\n case \"string\":\r\n mismatches.push(\r\n 'String difference: \"' + json1 + '\" vs. \"' + json2 + '\"'\r\n );\r\n break;\r\n case \"object\":\r\n const keys1 = Object.keys(json1);\r\n const keys2 = Object.keys(json2);\r\n if (\r\n keys1.length !== keys2.length ||\r\n JSON.stringify(keys1) !== JSON.stringify(keys2)\r\n ) {\r\n if (Array.isArray(json1) && Array.isArray(json2)) {\r\n mismatches.push(\r\n \"Array length difference: [\" +\r\n keys1.length +\r\n \"] vs. [\" +\r\n keys2.length +\r\n \"]\"\r\n );\r\n } else {\r\n mismatches.push(\r\n \"Props difference: \" +\r\n JSON.stringify(keys1) +\r\n \" vs. \" +\r\n JSON.stringify(keys2)\r\n );\r\n }\r\n } else {\r\n for (let k = 0; k < keys1.length; ++k) {\r\n const submismatches = compareJSONProperties(\r\n json1[keys1[k]],\r\n json2[keys2[k]]\r\n );\r\n if (submismatches.length > 0) {\r\n mismatches = mismatches.concat(submismatches);\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return mismatches;\r\n}\r\n\r\n/**\r\n * Sanitizes JSON and echoes changes to console.\r\n *\r\n * @param json JSON to sanitize\r\n * @param sanitizer Instance of Sanitizer class\r\n * @returns Sanitized version of `json`\r\n * @see https://github.com/esri/arcgis-html-sanitizer#sanitize-json\r\n */\r\nexport function sanitizeJSONAndReportChanges(\r\n json: any,\r\n sanitizer?: Sanitizer\r\n): any {\r\n const sanitizedJSON = sanitizeJSON(json, sanitizer);\r\n\r\n const mismatches = compareJSONProperties(json, sanitizedJSON);\r\n if (mismatches.length > 0) {\r\n console.warn(\r\n \"Changed \" +\r\n mismatches.length +\r\n (mismatches.length === 1 ? \" property\" : \" properties\")\r\n );\r\n mismatches.forEach(mismatch => console.warn(\" \" + mismatch));\r\n }\r\n\r\n return sanitizedJSON;\r\n}\r\n\r\nexport function deleteItemProps(itemTemplate: any): any {\r\n const propsToRetain: string[] = [\r\n \"accessInformation\",\r\n \"appCategories\",\r\n \"banner\",\r\n \"categories\",\r\n \"culture\",\r\n \"description\",\r\n \"documentation\",\r\n \"extent\",\r\n \"groupDesignations\",\r\n \"industries\",\r\n \"languages\",\r\n \"licenseInfo\",\r\n \"listed\",\r\n \"name\",\r\n \"properties\",\r\n \"proxyFilter\",\r\n \"screenshots\",\r\n \"size\",\r\n \"snippet\",\r\n \"spatialReference\",\r\n \"tags\",\r\n \"title\",\r\n \"type\",\r\n \"typeKeywords\",\r\n \"url\"\r\n ];\r\n const propsToDelete: string[] = Object.keys(itemTemplate).filter(\r\n k => propsToRetain.indexOf(k) < 0\r\n );\r\n deleteProps(itemTemplate, propsToDelete);\r\n return itemTemplate;\r\n}\r\n\r\n/**\r\n * Deletes a property from an object.\r\n *\r\n * @param obj Object with property to delete\r\n * @param path Path into an object to property, e.g., \"data.values.webmap\", where \"data\" is a top-level property\r\n * in obj\r\n */\r\nexport function deleteProp(obj: any, path: string): void {\r\n const pathParts: string[] = path.split(\".\");\r\n\r\n if (Array.isArray(obj)) {\r\n obj.forEach((child: any) => deleteProp(child, path));\r\n } else {\r\n const subpath = pathParts.slice(1).join(\".\");\r\n if (typeof obj[pathParts[0]] !== \"undefined\") {\r\n if (pathParts.length === 1) {\r\n delete obj[path];\r\n } else {\r\n deleteProp(obj[pathParts[0]], subpath);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Deletes properties from an object.\r\n *\r\n * @param obj Object with properties to delete\r\n * @param props Array of properties on object that should be deleted\r\n */\r\nexport function deleteProps(obj: any, props: string[]): void {\r\n props.forEach(prop => {\r\n deleteProp(obj, prop);\r\n });\r\n}\r\n\r\n/**\r\n * Creates an AGO-style JSON failure response with success property.\r\n *\r\n * @param e Optional error information\r\n * @returns JSON structure with property success set to false and optionally including `e`\r\n */\r\nexport function fail(e?: any): any {\r\n if (e) {\r\n return { success: false, error: e.response?.error || e.error || e };\r\n } else {\r\n return { success: false };\r\n }\r\n}\r\n\r\n/**\r\n * Creates an AGO-style JSON failure response with success property and extended with ids list.\r\n *\r\n * @param ids List of ids\r\n * @param e Optional error information\r\n * @returns JSON structure with property success set to false and optionally including `e`\r\n */\r\nexport function failWithIds(itemIds: string[], e?: any): any {\r\n if (e) {\r\n return { success: false, itemIds, error: e.error || e };\r\n } else {\r\n return { success: false, itemIds };\r\n }\r\n}\r\n\r\n/**\r\n * Extracts the ids from a string\r\n *\r\n * @param v String to examine\r\n * @returns List of id strings found\r\n * @example\r\n * get id from\r\n * bad3483e025c47338d43df308c117308\r\n * {bad3483e025c47338d43df308c117308\r\n * =bad3483e025c47338d43df308c117308\r\n * do not get id from\r\n * http: *something/name_bad3483e025c47338d43df308c117308\r\n * {{bad3483e025c47338d43df308c117308.itemId}}\r\n * bad3483e025c47338d43df308c117308bad3483e025c47338d43df308c117308\r\n */\r\nexport function getIDs(v: string): string[] {\r\n // lookbehind is not supported in safari\r\n // cannot use /(?<!_)(?<!{{)\\b[0-9A-F]{32}/gi\r\n\r\n // use groups and filter out the ids that start with {{\r\n return regExTest(v, /({*)(\\b[0-9A-F]{32}\\b)/gi).reduce(function(acc, _v) {\r\n /* istanbul ignore else */\r\n if (_v.indexOf(\"{{\") < 0) {\r\n acc.push(_v.replace(\"{\", \"\"));\r\n }\r\n return acc;\r\n }, []);\r\n}\r\n\r\n/**\r\n * Gets a property out of a deeply nested object.\r\n * Does not handle anything but nested object graph\r\n *\r\n * @param obj Object to retrieve value from\r\n * @param path Path into an object, e.g., \"data.values.webmap\", where \"data\" is a top-level property\r\n * in obj\r\n * @returns Value at end of path\r\n */\r\nexport function getProp(obj: { [index: string]: any }, path: string): any {\r\n return path.split(\".\").reduce(function(prev, curr) {\r\n /* istanbul ignore next no need to test undefined scenario */\r\n return prev ? prev[curr] : undefined;\r\n }, obj);\r\n}\r\n\r\n/**\r\n * Returns an array of values from an object based on an array of property paths.\r\n *\r\n * @param obj Object to retrieve values from\r\n * @param props Array of paths into the object e.g., \"data.values.webmap\", where \"data\" is a top-level property\r\n * @returns Array of the values plucked from the object; only defined values are returned\r\n */\r\nexport function getProps(obj: any, props: string[]): any {\r\n return props.reduce((a, p) => {\r\n const v = getProp(obj, p);\r\n if (v) {\r\n a.push(v);\r\n }\r\n return a;\r\n }, [] as any[]);\r\n}\r\n\r\n/**\r\n * Get a property out of a deeply nested object\r\n * Does not handle anything but nested object graph\r\n *\r\n * @param obj Object to retrieve value from\r\n * @param path Path into an object, e.g., \"data.values.webmap\", where \"data\" is a top-level property\r\n * in obj\r\n * @param defaultV Optional value to use if any part of path--including final value--is undefined\r\n * @returns Value at end of path\r\n */\r\nexport function getPropWithDefault(\r\n obj: IStringValuePair,\r\n path: string,\r\n defaultV?: any\r\n): any {\r\n const value = path.split(\".\").reduce(function (prev, curr) {\r\n /* istanbul ignore next no need to test undefined scenario */\r\n return prev ? prev[curr] : undefined;\r\n }, obj);\r\n if (typeof value === \"undefined\") {\r\n return defaultV;\r\n } else {\r\n return value;\r\n }\r\n}\r\n\r\n/**\r\n * Updates a list of the items dependencies if more are found in the\r\n * provided value.\r\n *\r\n * @param v a string value to check for ids\r\n * @param deps a list of the items dependencies\r\n */\r\nexport function idTest(v: any, deps: string[]): void {\r\n const ids: any[] = getIDs(v);\r\n ids.forEach(id => {\r\n /* istanbul ignore else */\r\n if (deps.indexOf(id) === -1) {\r\n deps.push(id);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Sets a deeply nested property of an object.\r\n * Creates the full path if it does not exist.\r\n *\r\n * @param obj Object to set value of\r\n * @param path Path into an object, e.g., \"data.values.webmap\", where \"data\" is a top-level property in obj\r\n * @param value The value to set at the end of the path\r\n */\r\nexport function setCreateProp(obj: any, path: string, value: any) {\r\n const pathParts: string[] = path.split(\".\");\r\n pathParts.reduce((a: any, b: any, c: any) => {\r\n if (c === pathParts.length - 1) {\r\n a[b] = value;\r\n return value;\r\n } else {\r\n if (!a[b]) {\r\n a[b] = {};\r\n }\r\n return a[b];\r\n }\r\n }, obj);\r\n}\r\n\r\n/**\r\n * Sets a deeply nested property of an object.\r\n * Does nothing if the full path does not exist.\r\n *\r\n * @param obj Object to set value of\r\n * @param path Path into an object, e.g., \"data.values.webmap\", where \"data\" is a top-level property in obj\r\n * @param value The value to set at the end of the path\r\n */\r\nexport function setProp(obj: any, path: string, value: any) {\r\n if (getProp(obj, path)) {\r\n const pathParts: string[] = path.split(\".\");\r\n pathParts.reduce((a: any, b: any, c: any) => {\r\n if (c === pathParts.length - 1) {\r\n a[b] = value;\r\n return value;\r\n } else {\r\n return a[b];\r\n }\r\n }, obj);\r\n }\r\n}\r\n\r\n/**\r\n * Creates a timestamp string using the current UTC date and time.\r\n *\r\n * @returns Timestamp formatted as YYYYMMDD_hhmm_ssmmm, with month one-based and all values padded with zeroes on the\r\n * left as needed (`ssmmm` stands for seconds from 0..59 and milliseconds from 0..999)\r\n * @private\r\n */\r\nexport function getUTCTimestamp(): string {\r\n const now = new Date();\r\n return (\r\n _padPositiveNum(now.getUTCFullYear(), 4) +\r\n _padPositiveNum(now.getUTCMonth() + 1, 2) +\r\n _padPositiveNum(now.getUTCDate(), 2) +\r\n \"_\" +\r\n _padPositiveNum(now.getUTCHours(), 2) +\r\n _padPositiveNum(now.getUTCMinutes(), 2) +\r\n \"_\" +\r\n _padPositiveNum(now.getUTCSeconds(), 2) +\r\n _padPositiveNum(now.getUTCMilliseconds(), 3)\r\n );\r\n}\r\n\r\n/**\r\n * Tests if an object's `item.typeKeywords` or `typeKeywords` properties has any of a set of keywords.\r\n *\r\n * @param jsonObj Object to test\r\n * @param keywords List of keywords to look for in jsonObj\r\n * @returns Boolean indicating result\r\n */\r\nexport function hasAnyKeyword(jsonObj: any, keywords: string[]): boolean {\r\n const typeKeywords =\r\n getProp(jsonObj, \"item.typeKeywords\") || jsonObj.typeKeywords || [];\r\n return keywords.reduce((a, kw) => {\r\n if (!a) {\r\n a = typeKeywords.includes(kw);\r\n }\r\n return a;\r\n }, false);\r\n}\r\n\r\n/**\r\n * Tests if an object's `item.typeKeywords` or `typeKeywords` properties has a specific keyword.\r\n *\r\n * @param jsonObj Object to test\r\n * @param keyword Keyword to look for in jsonObj\r\n * @returns Boolean indicating result\r\n */\r\nexport function hasTypeKeyword(jsonObj: any, keyword: string): boolean {\r\n const typeKeywords =\r\n getProp(jsonObj, \"item.typeKeywords\") || jsonObj.typeKeywords || [];\r\n return typeKeywords.includes(keyword);\r\n}\r\n\r\n/**\r\n * Will return the provided title if it does not exist as a property\r\n * in one of the objects at the defined path. Otherwise the title will\r\n * have a numerical value attached.\r\n *\r\n * @param title The root title to test\r\n * @param templateDictionary Hash of the facts\r\n * @param path to the objects to evaluate for potantial name clashes\r\n * @returns string The unique title to use\r\n */\r\nexport function getUniqueTitle(\r\n title: string,\r\n templateDictionary: any,\r\n path: string\r\n): string {\r\n title = title ? title.trim() : \"_\";\r\n const objs: any[] = getProp(templateDictionary, path) || [];\r\n const titles: string[] = objs.map(obj => {\r\n return obj.title;\r\n });\r\n let newTitle: string = title;\r\n let i: number = 0;\r\n while (titles.indexOf(newTitle) > -1) {\r\n i++;\r\n newTitle = title + \" \" + i;\r\n }\r\n return newTitle;\r\n}\r\n\r\n/**\r\n * Performs string replacement on every string in an object.\r\n *\r\n * @param obj Object to scan and to modify\r\n * @param pattern Search pattern in each string\r\n * @param replacement Replacement for matches to search pattern\r\n * @returns Modified obj is returned\r\n */\r\nexport function globalStringReplace(\r\n obj: any,\r\n pattern: RegExp,\r\n replacement: string\r\n): any {\r\n if (obj) {\r\n Object.keys(obj).forEach(prop => {\r\n const propObj = obj[prop];\r\n if (propObj) {\r\n /* istanbul ignore else */\r\n if (typeof propObj === \"object\") {\r\n globalStringReplace(propObj, pattern, replacement);\r\n } else if (typeof propObj === \"string\") {\r\n obj[prop] = obj[prop].replace(pattern, replacement);\r\n }\r\n }\r\n });\r\n }\r\n return obj;\r\n}\r\n\r\n/**\r\n * Tests if an array of DatasourceInfos has a given item and layer id already.\r\n *\r\n * @param datasourceInfos Array of DatasourceInfos to evaluate\r\n * @param itemId The items id to check for\r\n * @param layerId The layers id to check for\r\n * @returns Boolean indicating result\r\n */\r\nexport function hasDatasource(\r\n datasourceInfos: IDatasourceInfo[],\r\n itemId: string,\r\n layerId: number\r\n): boolean {\r\n return datasourceInfos.some(\r\n ds => ds.itemId === itemId && ds.layerId === layerId\r\n );\r\n}\r\n\r\n/**\r\n * remove templatization from item id to compare\r\n *\r\n * @example\r\n * \\{\\{934a9ef8efa7448fa8ddf7b13cef0240.itemId\\}\\}\r\n * returns 934a9ef8efa7448fa8ddf7b13cef0240\r\n */\r\nexport function cleanItemId(id: any): any {\r\n return id ? id.replace(\"{{\", \"\").replace(\".itemId}}\", \"\") : id;\r\n}\r\n\r\n/**\r\n * remove templatization from layer based item id to compare\r\n *\r\n * @example\r\n * \\{\\{934a9ef8efa7448fa8ddf7b13cef0240.layer0.itemId\\}\\}\r\n * returns 934a9ef8efa7448fa8ddf7b13cef0240\r\n */\r\nexport function cleanLayerBasedItemId(id: any): any {\r\n return id\r\n ? id\r\n .replace(\"{{\", \"\")\r\n .replace(/([.]layer([0-9]|[1-9][0-9])[.](item|layer)Id)[}]{2}/, \"\")\r\n : id;\r\n}\r\n\r\n/**\r\n * remove templatization from layer id to compare\r\n *\r\n * @example\r\n * \\{\\{934a9ef8efa7448fa8ddf7b13cef0240.layer0.layerId\\}\\}\r\n * returns 0\r\n */\r\nexport function cleanLayerId(id: any) {\r\n return id?.toString()\r\n ? parseInt(\r\n id\r\n .toString()\r\n .replace(/[{]{2}.{32}[.]layer/, \"\")\r\n .replace(/[.]layerId[}]{2}/, \"\"),\r\n 10\r\n )\r\n : id;\r\n}\r\n\r\n/**\r\n * Get template from list of templates by ID\r\n *\r\n * @param templates Array of item templates to search\r\n * @param id of template we are searching for\r\n *\r\n * @returns Template associated with the user provided id argument\r\n */\r\nexport function getTemplateById(templates: IItemTemplate[], id: string): any {\r\n let template;\r\n (templates || []).some(_template => {\r\n if (_template.itemId === id) {\r\n template = _template;\r\n return true;\r\n }\r\n return false;\r\n });\r\n return template;\r\n}\r\n\r\n/**\r\n * Evaluates a value with a regular expression\r\n *\r\n * @param v a string value to test with the expression\r\n * @param ex the regular expresion to test with\r\n * @returns an array of matches\r\n */\r\nexport function regExTest(v: any, ex: RegExp): any[] {\r\n return v && ex.test(v) ? v.match(ex) : [];\r\n}\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\n/**\r\n * Creates a random number between two values.\r\n *\r\n * @param min Inclusive minimum desired value\r\n * @param max Non-inclusive maximum desired value\r\n * @returns Random number in the range [min, max)\r\n */\r\nexport function _getRandomNumberInRange(min: number, max: number): number {\r\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random#Getting_a_random_number_between_two_values\r\n // © 2006 IvanWills\r\n // MIT license https://opensource.org/licenses/mit-license.php\r\n return Math.random() * (max - min) + min;\r\n}\r\n\r\n/**\r\n * Pads the string representation of a number to a minimum width. Requires modern browser.\r\n *\r\n * @param n Number to pad\r\n * @param totalSize Desired *minimum* width of number after padding with zeroes\r\n * @returns Number converted to string and padded on the left as needed\r\n * @private\r\n */\r\nexport function _padPositiveNum(n: number, totalSize: number): string {\r\n let numStr = n.toString();\r\n const numPads = totalSize - numStr.length;\r\n if (numPads > 0) {\r\n numStr = \"0\".repeat(numPads) + numStr; // TODO IE11 does not support repeat()\r\n }\r\n return numStr;\r\n}\r\n\r\n/**\r\n * Implements rejected ECMA proposal to change `typeof null` from \"object\" to \"null\".\r\n *\r\n * @param value Value whose type is sought\r\n * @returns \"null\" if `value` is null; `typeof value` otherwise\r\n * @see https://web.archive.org/web/20160331031419/http://wiki.ecmascript.org:80/doku.php?id=harmony:typeof_null\r\n * @private\r\n */\r\nfunction _typeof_null(value: any): string {\r\n return value === null ? \"null\" : typeof value;\r\n}\r\n","/**\n* adlib - v3.0.6 - Thu Dec 17 2020 17:08:08 GMT-0800 (Pacific Standard Time)\n* Copyright (c) 2017-2020 Dave Bouwman / Esri\n* Apache-2.0\n*/\n/* Copyright (c) 2017-2019 Esri Inc.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n http://www.apache.org/licenses/LICENSE-2.0\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License. */\n\n/**\n * Return the value of a deep property, using a path.\n */\nvar getWithDefault = function (obj, path, defaultValue) {\n if ( defaultValue === void 0 ) defaultValue = undefined;\n\n return path\n .split('.')\n .reduce(function (o, p) { return o ? o[p] : defaultValue; }, obj);\n};\n\n/* Copyright (c) 2017-2019 Esri Inc.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n http://www.apache.org/licenses/LICENSE-2.0\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License. */\n\n/**\n * Simply Map over the props of an object\n */\nfunction mapValues (obj, fn) {\n var keys = Object.keys(obj);\n // console.info(`keys: ${keys}`);\n var newObject = keys.reduce(function(acc, currentKey) {\n // console.log(` acc: ${JSON.stringify(acc)} curKey: ${currentKey}`);\n acc[currentKey] = fn(obj[currentKey], currentKey, obj);\n return acc;\n }, {});\n // console.info(` output: ${JSON.stringify(newObject)}`);\n return newObject;\n}\n\n/* Copyright (c) 2017-2019 Esri Inc.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n http://www.apache.org/licenses/LICENSE-2.0\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License. */\n\nvar isDate = function (v) { return v instanceof Date; };\n\nvar isFunction = function (v) { return typeof v === 'function'; };\n\nvar isObject = function (v) { return typeof v === 'object'; };\n\nvar isRegExp = function (v) { return v instanceof RegExp; };\n\nfunction deepMapValues(object, callback, propertyPath) {\n propertyPath = propertyPath || '';\n if(Array.isArray(object)){\n return object.map(deepMapValuesIteratee);\n }\n else if(object && isObject(object) && !isDate(object) && !isRegExp(object) && !isFunction(object)){\n return Object.assign({}, object, mapValues(object, deepMapValuesIteratee));\n }\n else {\n var output = callback(object, propertyPath);\n return output;\n }\n\n function deepMapValuesIteratee(value, key){\n var valuePath = propertyPath ? propertyPath + '.' + key : key;\n return deepMapValues(value, callback, valuePath);\n }\n}\n\n/* Copyright (c) 2017-2019 Esri Inc.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n http://www.apache.org/licenses/LICENSE-2.0\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License. */\n\nvar isObject$1 = function (v) { return typeof v === 'object'; };\n\n/**\n * Trim a tree decorated with `{{delete:NNN}}`\n */\nfunction arborist (object, propertyPath) {\n\n if(Array.isArray(object)){\n // filter out any nulls...\n var arrResults = object.map(iteratee).filter(function (entry) {\n // need to ensure entry is actually NULL vs just falsey\n return entry !== null && entry !== undefined;\n });\n return pruneArray(arrResults);\n\n } if(object && isObject$1(object) ) {\n\n return pruneObject(mapValues(object, iteratee));\n\n } else {\n\n return getPropertyValue(object);\n }\n\n function iteratee(value, key){\n return arborist(value);\n }\n}\n\n/**\n * Prune an array\n * For all the entries in the array...\n * if the entry is a naked string and contains `{{delete:NNN}}`\n * get maximum NNN value\n * then\n * if maxN === 0\n * return an empty array\n * if maxN > 0\n * return `{{delete:maxN-1}}`\n * else\n * return array\n */\nfunction pruneArray (arrResults) {\n var res = arrResults;\n // is any entry a string w/ {{delete}}?\n var maxLevel = arrResults.reduce(function (maxLevel, e) {\n if (isString(e) && hasDelete(e)) {\n var lvl = getLevel(e);\n if (lvl > maxLevel) {\n maxLevel = lvl;\n }\n }\n return maxLevel;\n }, -1);\n\n if (maxLevel > -1) {\n if (maxLevel === 0) {\n res = [];\n } else {\n res = \"{{delete:\" + (maxLevel - 1) + \"}}\";\n }\n }\n\n return res;\n}\n\n\nfunction pruneObject (objResults) {\n // console.log(` pruneObject:: working on ${JSON.stringify(objResults)}`);\n var startVal = {obj: {}, maxLevel: -1 };\n var res;\n // cook a new clone object, and track the maxLevel\n var reduction = Object.keys(objResults).reduce(function (acc, key) {\n var val = objResults[key];\n if (isString(val) && hasDelete(val)) {\n var lvl = getLevel(val);\n if (lvl > acc.maxLevel) {\n acc.maxLevel = lvl;\n }\n } else {\n // only add the prop if it's not a `{{delete:NNN}}`\n acc.obj[key] = val;\n }\n return acc;\n }, startVal);\n // if -1, we return entire object...\n // if 0 we just remove the prop...\n // if 1 we return undefined...\n // if > 1 we return the deleteVal\n if (reduction.maxLevel > 0 ) {\n if (reduction.maxLevel === 1) {\n res = undefined;\n } else {\n res = \"{{delete:\" + (reduction.maxLevel - 1) + \"}}\";\n }\n } else {\n res = reduction.obj;\n }\n\n // console.log(` returning ${JSON.stringify(res)}`);\n return res;\n}\n\n/**\n * Get a value for a property, handling the `{{delete:NNN}}` syntax\n */\nfunction getPropertyValue (val){\n var output = val;\n\n if (typeof val === 'string') {\n if (hasDelete(val)) {\n output = getDeleteValue(val);\n }\n }\n return output;\n}\n\n/**\n * Given a string with `{{delete:NNN}}`\n * if NNN === 0 return undefined\n * else return `{{delete:NNN - 1}}`\n */\nfunction getDeleteValue (val) {\n var output = val;\n var level = getLevel(val);\n if (level === 0) {\n output = undefined;\n } else {\n output = \"{{delete:\" + level + \"}}\";\n }\n return output;\n}\n\n/**\n * Extract the level from a `{{delete:NNN}}`\n */\nvar getLevel = function (value) { return parseInt(value.replace(/{|}/g, '').split(':')[1]); };\n\n/**\n * Simple check if a value has `{{delete` in it\n */\nfunction hasDelete (value) {\n if (value && typeof value === 'string') {\n return value.indexOf('{{delete') > -1;\n } else {\n return false;\n }\n}\n\nvar isString = function (v) { return typeof v === 'string'; };\n\n/* Copyright (c) 2017-2019 Esri Inc.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n http://www.apache.org/licenses/LICENSE-2.0\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License. */\n\n/**\n * Optional Transform\n * Supports a declarative syntax for optional template properties\n *\n * {{some.object.key:optional:2}}\n *\n * In this example, if defined, the value of `some.object.key` is used.\n * If not defined, then the optional transform is utilized\n * and a post-processing step is executed which will remove two parent levels\n * from the output structure\n */\n\nfunction optionalTransform(key, value, settings, level) {\n if ( level === void 0 ) level = 0;\n\n // console.log(`optional: ${key}, ${value}, ${level}`);\n var val = value;\n if (!value) {\n val = \"{{delete:\" + level + \"}}\";\n }\n return val;\n}\n\n/* Copyright (c) 2017-2019 Esri Inc.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n http://www.apache.org/licenses/LICENSE-2.0\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License. */\n\n/**\n * ```js\n * import { cloneObject } from \"./cloneObject\";\n * const original = { foo: \"bar\" }\n * const copy = cloneObject(original)\n * copy.foo // \"bar\"\n * copy === original // false\n * ```\n * Make a deep clone, including arrays. Does not handle functions!\n *\n * Copied from @esri/hub-common to avoid bringing along that package's\n * dependencies, @esri/hub-common should be made a dependency if more\n * functions are needed from it in the future\n */\nvar cloneObject = function (obj) {\n var clone = {};\n // first check array\n if (Array.isArray(obj)) {\n clone = obj.map(cloneObject);\n } else if (typeof obj === \"object\") {\n for (var i in obj) {\n if (obj[i] != null && typeof obj[i] === \"object\") {\n clone[i] = cloneObject(obj[i]);\n } else {\n clone[i] = obj[i];\n }\n }\n } else {\n clone = obj;\n }\n return clone;\n};\n\n/* Copyright (c) 2017-2019 Esri Inc.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n http://www.apache.org/licenses/LICENSE-2.0\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License. */\nvar HANDLEBARS = /{{\\s*?[\\w].*?}}/g;\n\nvar isString$1 = function (v) { return typeof v === 'string'; };\n\nfunction _swap(parameter, settings, transforms) {\n var value;\n // console.info(`_swap: param: ${parameter}`);\n // Parameters can optionally call transform functions\n // e.g. \"{{ipsum:translateLatin}}\"\n // so extract {{<parameter>:<transformFunction>:<key||value>}}\n var transformCheck = parameter.split(':');\n if (transformCheck.length > 1) {\n // we have a request to use a transform...\n var key = transformCheck[0];\n var fn = transformCheck[1];\n // we default to using the value...\n var param;\n if (transformCheck[2]){\n param = transformCheck[2];\n }\n if(transforms && transforms[fn] && typeof transforms[fn] === 'function') {\n // get the value from the param\n value = getWithDefault(settings, key);\n // transform it...\n value = transforms[fn](key, value, settings, param);\n } else {\n throw new Error((\"Attempted to apply non-existant transform \" + fn + \" on \" + key + \" with params \" + parameter));\n }\n } else {\n // we just get the value\n value = getWithDefault(settings, parameter);\n }\n return value;\n}\n\n/**\n * Does a propertyPath exist on a target\n */\nfunction _propertyPathExists (propertyPath, target) {\n // remove any transforms\n var cleanPath = propertyPath.split(':')[0];\n var value = getWithDefault(target, cleanPath, null);\n if (value !== null && value !== undefined) {\n return true;\n } else {\n return false;\n }\n}\n\n/**\n * Is the value considered valid\n */\nfunction _isValue (val) {\n return val || val === '' || val === 0;\n}\n\n// Combine a Template with Settings\nfunction adlib (template, settings, transforms) {\n if ( transforms === void 0 ) transforms = null;\n\n transforms = cloneObject(transforms) || {};\n if (transforms.optional) {\n throw new Error('Please do not pass in an `optional` transform; adlib provides that internally.');\n } else {\n transforms.optional = optionalTransform;\n }\n\n var res = deepMapValues(template, function(templateValue, templatePath){\n // Only string templates\n if (!isString$1(templateValue)) {\n return templateValue;\n }\n\n // When we match \"{{layer.fields..}}\"\n var settingsValue;\n\n var hbsEntries = templateValue.match(HANDLEBARS);\n\n if (hbsEntries && hbsEntries.length) {\n // console.log(`Got a ${hbsEntries.length} handlebar entries...`);\n // iterate over the entries...\n var values = hbsEntries.map(function (entry) {\n var isStaticValue = false;\n // console.info(`Matched ${entry}...`);\n // strip off the curlies and trim any leading/trailing whitespace...\n var path = entry.replace(/{|}/g, '').trim();\n // check for || which indicate a hiearchy\n if (path.indexOf('||') > -1) {\n var paths = path.split('||').map(function (path) { return path.trim(); });\n var numberOfPaths = paths.length;\n // here we check each option, in order, and return the first with a value in the hash, OR the last\n path = paths.find(function (pathOption, idx) {\n // console.info(`Checking to see if ${pathOption} is in settings hash...`);\n var exists = _propertyPathExists(pathOption, settings);\n if (!exists) {\n if ((idx + 1) === numberOfPaths) {\n // console.info(`Got to last entry, and still did not find anything... assuming ${pathOption} is a static value...`);\n isStaticValue = true;\n // check if we can convert this into a number...\n if (!isNaN(pathOption)) {\n pathOption = parseInt(pathOption);\n }\n return pathOption;\n } else {\n return false;\n }\n } else {\n return pathOption;\n }\n });\n }\n // setup the return value...\n var result = {\n key: entry,\n value: path\n };\n // if we have a valid object path, value comes from _swap\n if (!isStaticValue) {\n var swap = _swap(path, settings, transforms);\n result.value = _isValue(swap) ? swap : entry;\n }\n // console.info(`Value: ${JSON.stringify(result)}`);\n return result;\n });\n\n values.forEach(function (v) {\n // console.log(`Comparing ${templateValue} with ${v.key}`)\n if (templateValue === v.key) {\n // console.log(`template matches key, returning ${v.value}`);\n // if the value is a string...\n if (typeof v.value === 'string') {\n // and it's numeric-ish\n if(!isNaN(v.value) && v.value !== '') {\n // and has a . in it...\n if (v.value.indexOf('.') > -1) {\n // parse as a float...\n v.value = parseFloat(v.value);\n } else {\n // parse as an int\n v.value = parseInt(v.value);\n }\n }\n }\n settingsValue = v.value;\n } else {\n // a little extra regex dance to match the '||' because '|'\n // is a Very Special Regex Character and we need to super\n // escape them for the regex to work\n // console.log(`KEY ${v.key}`);\n // console.log(`TEMPLATE ${templateValue}`);\n templateValue = templateValue.replace(v.key, v.value);\n // console.log(`template did not match key, interpolating value ${v.value} into template to produce ${templateValue}`);\n }\n });\n\n // if we have a value, let's return that...\n if (_isValue(settingsValue)) {\n // console.log(`We found a value so we return it ${settingsValue}`);\n return settingsValue;\n } else {\n // console.log(`We did not find a value so we return the template ${templateValue}`);\n // but if we don't, lets return the template itself\n return templateValue;\n }\n } else {\n // console.log(`We did not find a hbs match, so we return the template ${templateValue}`);\n // no match, return the templateValue...\n return templateValue;\n }\n });\n return arborist(res);\n}\n\n// read a template and spit out unique values\nfunction listDependencies (template) {\n if (typeof template !== 'string') {\n template = JSON.stringify(template);\n }\n\n try {\n return Array.from(\n new Set(\n template.match(HANDLEBARS)\n )\n )\n .map(function (term) {\n return term.replace(/^{{/g, '').replace(/}}$/g, '').replace(/:.+$/, '')\n // Node > 10 and browsers support this w/ a lookahead\n // won't need to use the replace\n // /(?<={{)[\\w].*?(?=}})/g\n })\n } catch (e) {\n console.error(e);\n }\n}\n\nexport { adlib, arborist, deepMapValues, getPropertyValue, getWithDefault, listDependencies, mapValues, optionalTransform, pruneArray, pruneObject };\n","/** @license\r\n * Copyright 2018 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/**\r\n * Provides common functions involving the adlib library.\r\n *\r\n * @module templatization\r\n */\r\n\r\nimport { unique } from \"@esri/hub-common\";\r\nimport { adlib } from \"adlib\";\r\nimport { createShortId, getProp } from \"./generalHelpers\";\r\nimport { IItemTemplate, ISolutionItemData } from \"./interfaces\";\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\n/**\r\n * A parameterized server name to replace the organization URL in a Web Mapping Application's URL to\r\n * itself; name has to be acceptable to AGOL, otherwise it discards the URL, so substitution must be\r\n * made before attempting to create the item.\r\n *\r\n * @private\r\n */\r\nexport const SERVER_NAME: string = \"portalBaseUrl\";\r\n\r\n/**\r\n * A parameterized geometry server name\r\n *\r\n * @private\r\n */\r\nexport const GEOMETRY_SERVER_NAME: string =\r\n \"organization.helperServices.geometry.url\";\r\n\r\n/**\r\n * A parameterized geocode server name\r\n *\r\n * @private\r\n */\r\nexport const GEOCODE_SERVER_NAME: string =\r\n \"organization.helperServices.geocode:getDefaultLocatorURL\";\r\n\r\n/**\r\n * A parameterized network analyst server name\r\n *\r\n * @private\r\n */\r\nexport const NA_SERVER_NAME: string = \"organization.helperServices.route.url\";\r\n\r\n/**\r\n * A parameterized network analyst server name\r\n *\r\n * @private\r\n */\r\nexport const PRINT_SERVER_NAME: string =\r\n \"organization.helperServices.printTask.url\";\r\n\r\nexport const TRANSFORMS: any = {\r\n getDefaultLocatorURL(key: string, val: any) {\r\n // get the url from the template dictionary or return the default template variable when it's not present\r\n // this fallback is needed when we detemplatize living atlas layers as a part of the create process\r\n return val ? val[0].url : `{{${GEOCODE_SERVER_NAME}}}`;\r\n }\r\n};\r\n\r\n/**\r\n * Wraps double brackets around the supplied term.\r\n *\r\n * @param term Term to be wrapped, e.g., SERVER_NAME's \"portalBaseUrl\"\r\n * @returns Wrapped term, e.g., \"\\{\\{portalBaseUrl\\}\\}\"\r\n */\r\nexport function placeholder(term: string): string {\r\n return \"{{\" + term + \"}}\";\r\n}\r\n\r\nexport function createInitializedGroupTemplate(itemInfo: any): IItemTemplate {\r\n const itemTemplate = createPlaceholderTemplate(itemInfo.id, itemInfo.type);\r\n itemTemplate.item = {\r\n ...itemTemplate.item,\r\n description: itemInfo.description,\r\n snippet: itemInfo.snippet,\r\n tags: itemInfo.tags,\r\n typeKeywords: itemInfo.typeKeywords,\r\n title: itemInfo.title,\r\n thumbnail: itemInfo.thumbnail\r\n };\r\n return itemTemplate;\r\n}\r\n\r\nexport function createInitializedItemTemplate(itemInfo: any): IItemTemplate {\r\n const itemTemplate = createPlaceholderTemplate(itemInfo.id, itemInfo.type);\r\n itemTemplate.item = {\r\n ...itemTemplate.item,\r\n accessInformation: itemInfo.accessInformation,\r\n categories: itemInfo.categories,\r\n contentStatus: itemInfo.contentStatus,\r\n created: itemInfo.created,\r\n culture: itemInfo.culture,\r\n description: itemInfo.description,\r\n extent: getDefaultExtent(itemInfo),\r\n licenseInfo: itemInfo.licenseInfo,\r\n modified: itemInfo.modified,\r\n name: itemInfo.name,\r\n origUrl: itemInfo.origUrl,\r\n properties: itemInfo.properties,\r\n snippet: itemInfo.snippet,\r\n spatialReference: undefined,\r\n tags: itemInfo.tags,\r\n thumbnail: itemInfo.thumbnail,\r\n title: itemInfo.title,\r\n typeKeywords: itemInfo.typeKeywords,\r\n url: itemInfo.url\r\n };\r\n return itemTemplate;\r\n}\r\n\r\n/**\r\n * Creates an empty template.\r\n *\r\n * @param id AGO id of item\r\n * @param type AGO item type; defaults to \"\"\r\n * @returns Empty template containing supplied id, optional type, and a key created using the function createShortId()\r\n */\r\nexport function createPlaceholderTemplate(\r\n id: string,\r\n type = \"\"\r\n): IItemTemplate {\r\n return {\r\n itemId: id,\r\n type,\r\n key: createShortId(),\r\n item: {\r\n id,\r\n type\r\n },\r\n data: {},\r\n resources: [],\r\n dependencies: [],\r\n groups: [],\r\n properties: {},\r\n estimatedDeploymentCostFactor: 2\r\n };\r\n}\r\n\r\n/**\r\n * Extracts the version of a solution from its data section.\r\n *\r\n * @param itemData Data section of the solution as JSON\r\n * @returns Zero-based version number\r\n */\r\nexport function extractSolutionVersion(itemData: ISolutionItemData): number {\r\n let version = getProp(itemData, \"metadata.version\");\r\n if (!version) {\r\n return 0;\r\n }\r\n if (typeof version === \"string\") {\r\n version = parseInt(itemData.metadata.version, 10);\r\n return isNaN(version) ? 0 : version;\r\n }\r\n return version;\r\n}\r\n\r\n/**\r\n * Finds index of template by id in a list of templates.\r\n *\r\n * @param templates A collection of AGO item templates to search\r\n * @param id AGO id of template to find\r\n * @returns Offset of of matching template or -1 if not found\r\n * @private\r\n */\r\nexport function findTemplateIndexInList(\r\n templates: IItemTemplate[],\r\n id: string\r\n): number {\r\n const baseId = id;\r\n return templates.findIndex(template => {\r\n return baseId === template.itemId;\r\n });\r\n}\r\n\r\n/**\r\n * Finds template by id in a list of templates.\r\n *\r\n * @param templates A collection of AGO item templates to search\r\n * @param id AGO id of template to find\r\n * @returns Matching template or null\r\n */\r\nexport function findTemplateInList(\r\n templates: IItemTemplate[],\r\n id: string\r\n): IItemTemplate | null {\r\n const iTemplate = findTemplateIndexInList(templates, id);\r\n return iTemplate >= 0 ? templates[iTemplate] : null;\r\n}\r\n\r\nexport function hasUnresolvedVariables(data: any): boolean {\r\n const getUnresolved = (v: any) => {\r\n return v ? JSON.stringify(v).match(/{{.+?}}/gim) || [] : [];\r\n };\r\n return getUnresolved(data).length > 0;\r\n}\r\n\r\nexport function getIdsInTemplatesList(templates: IItemTemplate[]): string[] {\r\n return templates.map(template => template.itemId);\r\n}\r\n\r\nexport function getDefaultExtent(itemInfo: any): any {\r\n const ext: any = itemInfo.extent;\r\n return ext === null || (Array.isArray(ext) && ext.length === 0)\r\n ? ext\r\n : \"{{solutionItemExtent}}\";\r\n}\r\n\r\n/**\r\n * Removes a template entry in a list of templates.\r\n *\r\n * @param templates A collection of AGO item templates\r\n * @param id Id of item in templates list to find; if not found, no replacement is done\r\n * @private\r\n */\r\nexport function removeTemplate(templates: IItemTemplate[], id: string): void {\r\n const i = findTemplateIndexInList(templates, id);\r\n if (i >= 0) {\r\n templates.splice(i, 1);\r\n }\r\n}\r\n\r\n/**\r\n * Replaces symbols in a template.\r\n *\r\n * @param template Template to check for replacements; template is modified by this function\r\n * @param replacements Hash of facts: org URL, adlib replacements, deferreds for dependencies\r\n * @returns template is returned after updating it\r\n */\r\nexport function replaceInTemplate(template: any, replacements: any): any {\r\n return adlib(template, replacements, TRANSFORMS);\r\n}\r\n\r\n/**\r\n * Replaces a template entry in a list of templates.\r\n *\r\n * @param templates A collection of AGO item templates\r\n * @param id Id of item in templates list to find; if not found, no replacement is done\r\n * @param template Replacement template\r\n * @returns True if replacement was made\r\n * @private\r\n */\r\nexport function replaceTemplate(\r\n templates: IItemTemplate[],\r\n id: string,\r\n template: IItemTemplate\r\n): boolean {\r\n const i = findTemplateIndexInList(templates, id);\r\n if (i >= 0) {\r\n templates[i] = template;\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nexport function templatizeTerm(\r\n context: string,\r\n term: string,\r\n suffix = \"\"\r\n): string {\r\n if (!context) {\r\n return context;\r\n }\r\n const pattern = new RegExp(term, \"g\");\r\n return context.replace(pattern, \"{{\" + term + suffix + \"}}\");\r\n}\r\n\r\n/**\r\n * Helper function to templatize value and make sure its converted to lowercase\r\n *\r\n * @param basePath path used to de-templatize while deploying\r\n * @param value to be converted to lower case for lookup while deploying\r\n */\r\nexport function templatizeToLowerCase(basePath: string, value: string): string {\r\n if (value.startsWith(\"{{\")) {\r\n return value;\r\n } else {\r\n return String(\r\n templatizeTerm(basePath, basePath, \".\" + String(value).toLowerCase())\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * using each field from the datasource replace any occurances\r\n * of the field name with the templatized value\r\n * Needs to account for:\r\n * \"NAME\"\r\n * \"NAME NAME2\"\r\n * \"NAME ASC\"\r\n * \"\\{NAME\\}\"\r\n * \"(NAME = value AND NAME2 = someOtherValue)\"\r\n */\r\nexport function templatizeFieldReferences(\r\n obj: any,\r\n fields: any[],\r\n basePath: string,\r\n templatizeKeys: boolean = false\r\n): any {\r\n let objString: string = JSON.stringify(obj);\r\n fields.forEach(field => {\r\n let expression: string = \"\\\\b\" + field.name + \"\\\\b(?![.])(?![}]{2})\";\r\n if (!templatizeKeys) {\r\n expression += '(?!\":)';\r\n }\r\n objString = objString.replace(\r\n // needs to ensure that its not already been templatized\r\n // cannot be followed by .name and cannot be proceeded by fieldName. in case of {{01922837.name.name}} and cannot be followed by }}\r\n new RegExp(expression, \"g\"),\r\n templatizeToLowerCase(basePath, field.name + \".name\")\r\n );\r\n });\r\n return JSON.parse(objString);\r\n}\r\n\r\nexport function templatizeIds(obj: any): any {\r\n // Convert object to string\r\n let objString = JSON.stringify(obj);\r\n\r\n // Find ids\r\n const idTest: RegExp = /[0-9A-F]{32}/gim;\r\n if (obj && idTest.test(objString)) {\r\n // Templatize ids\r\n const ids: string[] = objString.match(idTest).filter(unique);\r\n ids.forEach(id => {\r\n const regEx = new RegExp(id, \"gm\");\r\n objString = objString.replace(regEx, \"{{\" + id + \".itemId}}\");\r\n });\r\n obj = JSON.parse(objString);\r\n }\r\n return obj;\r\n}\r\n","/** @license\r\n * Copyright 2018 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nimport { UserSession } from \"../interfaces\";\r\nimport { request, IRequestOptions } from \"@esri/arcgis-rest-request\";\r\n/**\r\n * Gets a Blob from a web site.\r\n *\r\n * @param url Address of Blob\r\n * @param authentication Credentials for the request\r\n * @param requestOptions - Options for the request, including parameters relevant to the endpoint.\r\n * @returns Promise that will resolve with Blob or an AGO-style JSON failure response\r\n */\r\nexport function getBlob(\r\n url: string,\r\n authentication: UserSession,\r\n requestOptions: IRequestOptions = {}\r\n): Promise<Blob> {\r\n if (!url) {\r\n return Promise.reject(\"Url must be provided\");\r\n }\r\n\r\n const blobRequestOptions = {\r\n authentication: authentication,\r\n rawResponse: true,\r\n ...requestOptions\r\n } as IRequestOptions;\r\n\r\n return request(url, blobRequestOptions).then(response => {\r\n return response.blob();\r\n });\r\n}\r\n","/** @license\r\n * Copyright 2018 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/**\r\n * Provides common item fetch functions involving the arcgis-rest-js library.\r\n *\r\n * @module restHelpersGet\r\n */\r\n\r\nimport {\r\n blobToFile,\r\n blobToJson,\r\n blobToText,\r\n checkUrlPathTermination,\r\n getProp\r\n} from \"./generalHelpers\";\r\nimport {\r\n IGetResourcesResponse,\r\n IGroup,\r\n IItem,\r\n IItemRelationshipOptionsPaging,\r\n IPagingParams,\r\n IPortal,\r\n IRelatedItems,\r\n ItemRelationshipType,\r\n IUser,\r\n UserSession\r\n} from \"./interfaces\";\r\nimport {\r\n IGetGroupContentOptions,\r\n IGetRelatedItemsResponse,\r\n IGroupCategorySchema,\r\n getGroup,\r\n getGroupCategorySchema as portalGetGroupCategorySchema,\r\n getGroupContent,\r\n getItem,\r\n getItemResources as portalGetItemResources,\r\n getPortal as portalGetPortal,\r\n getRelatedItems\r\n} from \"@esri/arcgis-rest-portal\";\r\nimport { IRequestOptions, request } from \"@esri/arcgis-rest-request\";\r\nimport { getBlob } from \"./resources/get-blob\";\r\nimport { searchGroups, searchGroupContents } from \"./restHelpers\";\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\nconst ZIP_FILE_HEADER_SIGNATURE = \"PK\u0003\u0004\";\r\n\r\nexport function checkJsonForError(json: any): boolean {\r\n return typeof json?.error !== \"undefined\";\r\n}\r\n\r\nexport function getPortal(\r\n id: string,\r\n authentication: UserSession\r\n): Promise<IPortal> {\r\n const requestOptions = {\r\n authentication: authentication\r\n };\r\n return portalGetPortal(id, requestOptions);\r\n}\r\n\r\nexport function getUser(authentication: UserSession): Promise<IUser> {\r\n return authentication.getUser();\r\n}\r\n\r\nexport function getUsername(authentication: UserSession): Promise<string> {\r\n return new Promise<string>((resolve, reject) => {\r\n getUser(authentication).then(\r\n (user: IUser) => resolve(user.username),\r\n reject\r\n );\r\n });\r\n}\r\n\r\nexport function getFoldersAndGroups(authentication: UserSession): Promise<any> {\r\n return new Promise<any>((resolve, reject) => {\r\n const requestOptions = {\r\n httpMethod: \"GET\",\r\n authentication: authentication,\r\n rawResponse: false\r\n } as IRequestOptions;\r\n\r\n // Folders\r\n const foldersUrl: string = `${\r\n authentication.portal\r\n }/content/users/${encodeURIComponent(authentication.username)}`;\r\n\r\n // Groups\r\n const groupsUrl: string = `${\r\n authentication.portal\r\n }/community/users/${encodeURIComponent(authentication.username)}`;\r\n\r\n Promise.all([\r\n request(foldersUrl, requestOptions),\r\n request(groupsUrl, requestOptions)\r\n ]).then(\r\n responses => {\r\n resolve({\r\n folders: responses[0].folders || [],\r\n groups: responses[1].groups || []\r\n });\r\n },\r\n e => reject(e)\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Gets a Blob from a web site and casts it as a file using the supplied name.\r\n *\r\n * @param url Address of Blob\r\n * @param filename Name to use for file\r\n * @param authentication Credentials for the request\r\n * @returns Promise that will resolve with a File, undefined if the Blob is null, or an AGO-style JSON failure response\r\n */\r\nexport function getBlobAsFile(\r\n url: string,\r\n filename: string,\r\n authentication: UserSession,\r\n ignoreErrors: number[] = [],\r\n mimeType?: string\r\n): Promise<File> {\r\n return new Promise<File>((resolve, reject) => {\r\n // Get the blob from the URL\r\n getBlobCheckForError(url, authentication, ignoreErrors).then(\r\n blob =>\r\n !blob ? resolve(null) : resolve(blobToFile(blob, filename, mimeType)),\r\n reject\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Gets a Blob from a web site and checks for a JSON error packet in the Blob.\r\n *\r\n * @param url Address of Blob\r\n * @param authentication Credentials for the request\r\n * @param ignoreErrors List of HTTP error codes that should be ignored\r\n * @returns Promise that will resolve with Blob or an AGO-REST JSON failure response\r\n */\r\nexport function getBlobCheckForError(\r\n url: string,\r\n authentication: UserSession,\r\n ignoreErrors: number[] = []\r\n): Promise<Blob> {\r\n return new Promise<Blob>((resolve, reject) => {\r\n // Get the blob from the URL\r\n getBlob(url, authentication).then(blob => {\r\n // Reclassify text/plain blobs as needed\r\n _fixTextBlobType(blob).then(adjustedBlob => {\r\n if (adjustedBlob.type === \"application/json\") {\r\n // Blob may be an error\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n blobToJson(adjustedBlob).then((json: any) => {\r\n // Check for valid JSON with an error\r\n if (json?.error) {\r\n const code: number = json.error.code;\r\n if (code !== undefined && ignoreErrors.indexOf(code) >= 0) {\r\n resolve(null); // Error, but ignored\r\n } else {\r\n reject(json); // Other error; fail with error\r\n }\r\n } else {\r\n resolve(adjustedBlob);\r\n }\r\n });\r\n } else {\r\n resolve(adjustedBlob);\r\n }\r\n }, reject);\r\n }, reject);\r\n });\r\n}\r\n\r\n/**\r\n * Extracts the text in a url between the last forward slash and the beginning of the url's parameters.\r\n *\r\n * @param url URL to work with\r\n * @returns Text extracted; empty if url ends with a forward slash or has a \"?\" immediately after the last\r\n * forward slash\r\n */\r\nexport function getFilenameFromUrl(url: string): string {\r\n if (!url) {\r\n return \"\";\r\n }\r\n\r\n let iParamsStart = url.indexOf(\"?\");\r\n /* istanbul ignore else */\r\n if (iParamsStart < 0) {\r\n iParamsStart = url.length;\r\n }\r\n const iFilenameStart = url.lastIndexOf(\"/\", iParamsStart) + 1;\r\n\r\n return iFilenameStart < iParamsStart\r\n ? url.substring(iFilenameStart, iParamsStart)\r\n : \"\";\r\n}\r\n\r\n/**\r\n * Gets the primary information of an AGO group.\r\n *\r\n * @param groupId Id of an group whose primary information is sought\r\n * @param authentication Credentials for the request to AGO\r\n * @returns A promise that will resolve with group's JSON or error JSON or throws ArcGISRequestError in case of HTTP error\r\n * or response error code\r\n */\r\nexport function getGroupBase(\r\n groupId: string,\r\n authentication: UserSession\r\n): Promise<IGroup> {\r\n const requestOptions = {\r\n authentication: authentication\r\n };\r\n return getGroup(groupId, requestOptions);\r\n}\r\n\r\n/**\r\n * Gets the category schema set on a group.\r\n *\r\n * @param groupId Id of an group whose category schema information is sought\r\n * @param authentication Credentials for the request to AGO\r\n * @returns A promise that will resolve with JSON of group's category schema\r\n * @see https://developers.arcgis.com/rest/users-groups-and-items/group-category-schema.htm\r\n */\r\nexport function getGroupCategorySchema(\r\n groupId: string,\r\n authentication: UserSession\r\n): Promise<IGroupCategorySchema> {\r\n const requestOptions = {\r\n authentication: authentication\r\n };\r\n return portalGetGroupCategorySchema(groupId, requestOptions);\r\n}\r\n\r\n/**\r\n * Gets the ids of the dependencies (contents) of an AGO group.\r\n *\r\n * @param groupId Id of a group whose contents are sought\r\n * @param authentication Credentials for the request to AGO\r\n * @returns A promise that will resolve with list of dependent ids or an empty list\r\n */\r\nexport function getGroupContents(\r\n groupId: string,\r\n authentication: UserSession\r\n): Promise<string[]> {\r\n return new Promise((resolve, reject) => {\r\n const pagingParams: IPagingParams = {\r\n start: 1,\r\n num: 100 // max allowed by REST API\r\n };\r\n\r\n // Fetch group items\r\n _getGroupContentsTranche(groupId, pagingParams, authentication).then(\r\n contents => {\r\n resolve(contents);\r\n },\r\n reject\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Gets the primary information of an AGO item.\r\n *\r\n * @param itemId Id of an item whose primary information is sought\r\n * @param authentication Credentials for the request to AGO\r\n * @returns A promise that will resolve with item's JSON or error JSON or throws ArcGISRequestError in case of HTTP error\r\n * or response error code\r\n */\r\nexport function getItemBase(\r\n itemId: string,\r\n authentication: UserSession\r\n): Promise<IItem> {\r\n const itemParam: IRequestOptions = {\r\n authentication: authentication\r\n };\r\n return getItem(itemId, itemParam);\r\n}\r\n\r\n/**\r\n * Gets the data information of an AGO item in its raw (Blob) form and casts it as a file using the supplied name.\r\n *\r\n * @param itemId Id of an item whose data information is sought\r\n * @param filename Name to use for file\r\n * @param authentication Credentials for the request to AGO\r\n * @returns Promise that will resolve with a File, undefined if the Blob is null, or an AGO-style JSON failure response\r\n */\r\nexport function getItemDataAsFile(\r\n itemId: string,\r\n filename: string,\r\n authentication: UserSession\r\n): Promise<File> {\r\n return new Promise<File>(resolve => {\r\n getItemDataBlob(itemId, authentication).then(\r\n blob => resolve(blobToFile(blob, filename)),\r\n () => resolve(null)\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Gets the data information of an AGO item in its JSON form.\r\n *\r\n * @param itemId Id of an item whose data information is sought\r\n * @param filename Name to use for file\r\n * @param authentication Credentials for the request to AGO\r\n * @returns Promise that will resolve with JSON, or an AGO-style JSON failure response\r\n */\r\nexport function getItemDataAsJson(\r\n itemId: string,\r\n authentication: UserSession\r\n): Promise<any> {\r\n return new Promise<any>(resolve => {\r\n getItemDataBlob(itemId, authentication).then(\r\n blob => resolve(blobToJson(blob)),\r\n () => resolve(null)\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Gets the data information of an AGO item in its raw (Blob) form.\r\n *\r\n * @param itemId Id of an item whose data information is sought\r\n * @param authentication Credentials for the request to AGO\r\n * @returns A promise that will resolve with the data Blob or null if the item doesn't have a data section\r\n */\r\nexport function getItemDataBlob(\r\n itemId: string,\r\n authentication: UserSession\r\n): Promise<Blob> {\r\n return new Promise<Blob>(resolve => {\r\n const url = getItemDataBlobUrl(itemId, authentication);\r\n getBlobCheckForError(url, authentication, [400, 500]).then(\r\n blob => resolve(_fixTextBlobType(blob)),\r\n () => resolve(null)\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Gets the URL to the data information of an AGO item in its raw (Blob) form.\r\n *\r\n * @param itemId Id of an item whose data information is sought\r\n * @param authentication Credentials for the request to AGO\r\n * @returns URL string\r\n */\r\nexport function getItemDataBlobUrl(\r\n itemId: string,\r\n authentication: UserSession\r\n): string {\r\n return `${getPortalSharingUrlFromAuth(\r\n authentication\r\n )}/content/items/${itemId}/data`;\r\n}\r\n\r\n/**\r\n * Gets the URL to an information item in an AGO item.\r\n *\r\n * @param itemId Id of an item whose data information is sought\r\n * @param authentication Credentials for the request to AGO\r\n * @returns URL string\r\n */\r\nexport function getItemInfoFileUrlPrefix(\r\n itemId: string,\r\n authentication: UserSession\r\n): string {\r\n return `${getPortalSharingUrlFromAuth(\r\n authentication\r\n )}/content/items/${itemId}/info/`;\r\n}\r\n\r\n/**\r\n * Gets the metadata information of an AGO item.\r\n *\r\n * @param itemId Id of an item whose data information is sought\r\n * @param authentication Credentials for the request to AGO\r\n * @returns Promise that will resolve with `undefined` or a File containing the metadata\r\n */\r\nexport function getItemMetadataAsFile(\r\n itemId: string,\r\n authentication: UserSession\r\n): Promise<File> {\r\n return new Promise<File>(resolve => {\r\n getItemMetadataBlob(itemId, authentication).then(\r\n blob => {\r\n if (!blob || (blob && blob.type.startsWith(\"application/json\"))) {\r\n resolve(null); // JSON error\r\n } else {\r\n resolve(blobToFile(blob, \"metadata.xml\"));\r\n }\r\n },\r\n () => resolve(null)\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Gets the metadata information of an AGO item.\r\n *\r\n * @param itemId Id of an item whose data information is sought\r\n * @param authentication Credentials for the request to AGO\r\n * @returns A promise that will resolve with the metadata Blob or null if the item doesn't have a metadata file\r\n */\r\nexport function getItemMetadataBlob(\r\n itemId: string,\r\n authentication: UserSession\r\n): Promise<Blob> {\r\n return new Promise<Blob>((resolve, reject) => {\r\n const url = getItemMetadataBlobUrl(itemId, authentication);\r\n\r\n getBlobCheckForError(url, authentication, [400]).then(resolve, reject);\r\n });\r\n}\r\n\r\n/**\r\n * Gets the URL to the metadata information of an AGO item.\r\n *\r\n * @param itemId Id of an item whose data information is sought\r\n * @param authentication Credentials for the request to AGO\r\n * @returns URL string\r\n */\r\nexport function getItemMetadataBlobUrl(\r\n itemId: string,\r\n authentication: UserSession\r\n): string {\r\n return (\r\n getItemInfoFileUrlPrefix(itemId, authentication) + \"metadata/metadata.xml\"\r\n );\r\n}\r\n\r\n/**\r\n * Gets the related items of an AGO item.\r\n *\r\n * @param itemId Id of an item whose related items are sought\r\n * @param relationshipType Tag for relationship type, e.g., \"Solution2Item\"\r\n * @param direction Relationship direction\r\n * @param authentication Credentials for the request to AGO\r\n * @param num Number of related items to request per batch; maximum is 100\r\n * @returns A promise that will resolve with the list of related items\r\n */\r\nexport function getItemRelatedItems(\r\n itemId: string,\r\n relationshipType: ItemRelationshipType | ItemRelationshipType[],\r\n direction: \"forward\" | \"reverse\",\r\n authentication: UserSession,\r\n num = 100\r\n): Promise<IGetRelatedItemsResponse> {\r\n return new Promise<IGetRelatedItemsResponse>(resolve => {\r\n const itemRelatedItemsParam: IItemRelationshipOptionsPaging = {\r\n id: itemId,\r\n relationshipType,\r\n authentication: authentication,\r\n params: {\r\n direction,\r\n start: 1,\r\n num\r\n }\r\n }\r\n\r\n // Fetch related items\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n _getItemRelatedItemsTranche(itemRelatedItemsParam).then(\r\n response => {\r\n resolve(response);\r\n }\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Gets all of the related items of an AGO item in the specified direction.\r\n *\r\n * @param itemId Id of an item whose related items are sought\r\n * @param direction\r\n * @param authentication Credentials for the request to AGO\r\n * @returns A promise that will resolve with a list of IRelatedItems\r\n */\r\nexport function getItemRelatedItemsInSameDirection(\r\n itemId: string,\r\n direction: \"forward\" | \"reverse\",\r\n authentication: UserSession\r\n): Promise<IRelatedItems[]> {\r\n return new Promise<IRelatedItems[]>(resolve => {\r\n const relationshipTypes = [\r\n // from ItemRelationshipType\r\n \"APIKey2Item\",\r\n \"Area2CustomPackage\",\r\n \"Area2Package\",\r\n \"Item2Attachment\",\r\n \"Item2Report\",\r\n \"Listed2Provisioned\",\r\n \"Map2AppConfig\",\r\n \"Map2Area\",\r\n \"Map2FeatureCollection\",\r\n \"Map2Service\",\r\n \"MobileApp2Code\",\r\n \"Service2Data\",\r\n \"Service2Layer\",\r\n \"Service2Route\",\r\n \"Service2Service\",\r\n \"Service2Style\",\r\n \"Solution2Item\",\r\n \"Style2Style\",\r\n \"Survey2Data\",\r\n \"Survey2Service\",\r\n \"SurveyAddIn2Data\",\r\n \"Theme2Story\",\r\n \"TrackView2Map\",\r\n \"WebStyle2DesktopStyle\",\r\n \"WMA2Code\",\r\n \"WorkforceMap2FeatureService\"\r\n ];\r\n\r\n const relatedItemDefs: Array<Promise<\r\n IGetRelatedItemsResponse\r\n >> = relationshipTypes.map(relationshipType =>\r\n getItemRelatedItems(\r\n itemId,\r\n relationshipType as ItemRelationshipType,\r\n direction,\r\n authentication\r\n )\r\n );\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n Promise.all(relatedItemDefs).then(\r\n (relationshipResponses: IGetRelatedItemsResponse[]) => {\r\n const relatedItems: IRelatedItems[] = [];\r\n\r\n for (let i: number = 0; i < relationshipTypes.length; ++i) {\r\n if (relationshipResponses[i].total > 0) {\r\n relatedItems.push({\r\n relationshipType: relationshipTypes[i],\r\n relatedItemIds: relationshipResponses[i].relatedItems.map(\r\n item => item.id\r\n )\r\n });\r\n }\r\n }\r\n\r\n resolve(relatedItems);\r\n }\r\n );\r\n });\r\n}\r\n\r\nexport function getItemResources(\r\n id: string,\r\n authentication: UserSession\r\n): Promise<any> {\r\n return new Promise<any>(resolve => {\r\n const requestOptions = {\r\n authentication: authentication\r\n };\r\n portalGetItemResources(id, requestOptions).then(resolve, () => {\r\n resolve({\r\n total: 0,\r\n start: 1,\r\n num: 0,\r\n nextStart: -1,\r\n resources: []\r\n } as IGetResourcesResponse);\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * Gets the resources of an AGO item.\r\n *\r\n * @param itemId Id of an item whose resources are sought\r\n * @param authentication Credentials for the request to AGO\r\n * @returns Promise that will resolve with a list of Files or an AGO-style JSON failure response\r\n */\r\nexport function getItemResourcesFiles(\r\n itemId: string,\r\n authentication: UserSession\r\n): Promise<File[]> {\r\n return new Promise<File[]>((resolve, reject) => {\r\n const pagingParams: IPagingParams = {\r\n start: 1,\r\n num: 100 // max allowed by REST API\r\n };\r\n\r\n // Fetch resources\r\n _getItemResourcesTranche(itemId, pagingParams, authentication).then(\r\n itemResourcesDef => {\r\n Promise.all(itemResourcesDef).then(resolve, reject);\r\n },\r\n reject\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Gets all of the items associated with a Solution via a Solution2Item relationship.\r\n *\r\n * @param solutionItemId Id of a deployed Solution\r\n * @param authentication Credentials for the request\r\n * @returns Promise resolving to a list of detailed item information\r\n */\r\nexport function getItemsRelatedToASolution(\r\n solutionItemId: string,\r\n authentication: UserSession\r\n): Promise<IItem[]> {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n return getItemRelatedItems(\r\n solutionItemId,\r\n \"Solution2Item\",\r\n \"forward\",\r\n authentication\r\n ).then((relationshipResponse: IGetRelatedItemsResponse) => {\r\n return relationshipResponse.relatedItems;\r\n });\r\n}\r\n\r\n/**\r\n * Gets the thumbnail of an AGO item.\r\n *\r\n * @param itemId Id of an item whose resources are sought\r\n * @param thumbnailUrlPart The partial name of the item's thumbnail as reported by the `thumbnail` property\r\n * in the item's base section\r\n * @param isGroup Switch indicating if the item is a group\r\n * @param authentication Credentials for the request to AGO\r\n * @returns Promise that will resolve with an image Blob or an AGO-style JSON failure response\r\n */\r\nexport function getItemThumbnail(\r\n itemId: string,\r\n thumbnailUrlPart: string | null,\r\n isGroup: boolean,\r\n authentication: UserSession\r\n): Promise<Blob> {\r\n return new Promise<Blob>((resolve, reject) => {\r\n if (!thumbnailUrlPart) {\r\n resolve(null);\r\n return;\r\n }\r\n\r\n const url = getItemThumbnailUrl(\r\n itemId,\r\n thumbnailUrlPart,\r\n isGroup,\r\n authentication\r\n );\r\n\r\n getBlobCheckForError(url, authentication, [500]).then(\r\n blob => resolve(_fixTextBlobType(blob)),\r\n reject\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Gets the thumbnail of an AGO item.\r\n *\r\n * @param itemId Id of an item whose resources are sought\r\n * @param thumbnailUrlPart The partial name of the item's thumbnail as reported by the `thumbnail` property\r\n * in the item's base section\r\n * @param isGroup Switch indicating if the item is a group\r\n * @param authentication Credentials for the request to AGO\r\n * @returns Promise that will resolve with an image Blob or an AGO-style JSON failure response\r\n */\r\nexport function getItemThumbnailAsFile(\r\n itemId: string,\r\n thumbnailUrlPart: string | null,\r\n isGroup: boolean,\r\n authentication: UserSession\r\n): Promise<File> {\r\n return new Promise<File>((resolve, reject) => {\r\n /* istanbul ignore else */\r\n if (!thumbnailUrlPart) {\r\n resolve(null);\r\n return;\r\n }\r\n\r\n const url = getItemThumbnailUrl(\r\n itemId,\r\n thumbnailUrlPart,\r\n isGroup,\r\n authentication\r\n );\r\n\r\n const iFilenameStart = thumbnailUrlPart.lastIndexOf(\"/\") + 1;\r\n const filename = thumbnailUrlPart.substring(iFilenameStart);\r\n\r\n getBlobAsFile(url, filename, authentication, [400, 500]).then(\r\n resolve,\r\n reject\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Gets the URL to the thumbnail of an AGO item.\r\n *\r\n * @param itemId Id of an item whose resources are sought\r\n * @param thumbnailUrlPart The partial name of the item's thumbnail as reported by the `thumbnail` property\r\n * in the item's base section\r\n * @param isGroup Switch indicating if the item is a group\r\n * @param authentication Credentials for the request to AGO\r\n * @returns URL string\r\n */\r\nexport function getItemThumbnailUrl(\r\n itemId: string,\r\n thumbnailUrlPart: string,\r\n isGroup: boolean,\r\n authentication: UserSession\r\n): string {\r\n return (\r\n checkUrlPathTermination(getPortalSharingUrlFromAuth(authentication)) +\r\n (isGroup ? \"community/groups/\" : \"content/items/\") +\r\n itemId +\r\n \"/info/\" +\r\n thumbnailUrlPart\r\n );\r\n}\r\n\r\n/**\r\n * Gets a JSON from a web site.\r\n *\r\n * @param url Address of JSON\r\n * @param authentication Credentials for the request\r\n * @returns Promise that will resolve with JSON\r\n */\r\nexport function getJson(\r\n url: string,\r\n authentication?: UserSession\r\n): Promise<any> {\r\n // Get the blob from the URL\r\n const requestOptions: IRequestOptions = { httpMethod: \"GET\" };\r\n return getBlob(url, authentication, requestOptions)\r\n .then(blob => {\r\n // Reclassify text/plain blobs as needed\r\n return _fixTextBlobType(blob);\r\n })\r\n .then(adjustedBlob => {\r\n if (adjustedBlob.type === \"application/json\") {\r\n // Blob may be an error\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n return blobToJson(adjustedBlob);\r\n } else {\r\n return Promise.resolve(null);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Extracts the portal sharing url from a supplied authentication.\r\n *\r\n * @param authentication Credentials for the request to AGO\r\n * @returns Portal sharing url to be used in API requests, defaulting to `https://www.arcgis.com/sharing/rest`\r\n */\r\nexport function getPortalSharingUrlFromAuth(\r\n authentication: UserSession | undefined\r\n): string {\r\n // If auth was passed, use that portal\r\n return getProp(authentication, \"portal\") || \"https://www.arcgis.com/sharing/rest\";\r\n}\r\n\r\n/**\r\n * Extracts the portal url from a supplied authentication.\r\n *\r\n * @param authentication Credentials for the request to AGO\r\n * @returns Portal url to be used in API requests, defaulting to `https://www.arcgis.com`\r\n */\r\nexport function getPortalUrlFromAuth(authentication: UserSession): string {\r\n return getPortalSharingUrlFromAuth(authentication).replace(\r\n \"/sharing/rest\",\r\n \"\"\r\n );\r\n}\r\n\r\n/**\r\n * Gets the ids of all Solution items associated with an AGO item via a Solution2Item relationship.\r\n *\r\n * @param itemId Id of an AGO item to query\r\n * @param authentication Credentials for the request\r\n * @returns Promise resolving to a list of Solution item ids\r\n */\r\nexport function getSolutionsRelatedToAnItem(\r\n itemId: string,\r\n authentication: UserSession\r\n): Promise<string[]> {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n return getItemRelatedItems(\r\n itemId,\r\n \"Solution2Item\",\r\n \"reverse\",\r\n authentication\r\n ).then((relationshipResponse: IGetRelatedItemsResponse) => {\r\n return relationshipResponse.relatedItems.map(item => item.id);\r\n });\r\n}\r\n\r\nexport function getThumbnailFile(\r\n url: string,\r\n filename: string,\r\n authentication: UserSession\r\n): Promise<File> {\r\n return new Promise<File>(resolve => {\r\n getBlobAsFile(url, filename, authentication, [500]).then(resolve, () =>\r\n resolve(null)\r\n );\r\n });\r\n}\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\n/**\r\n * Fixes the types of Blobs incorrectly typed as text/plain.\r\n *\r\n * @param blob Blob to check\r\n * @returns Promise resolving to original Blob, unless it's originally typed as text/plain but is\r\n * really JSON, ZIP, or XML\r\n * @private\r\n */\r\nexport function _fixTextBlobType(blob: Blob): Promise<Blob> {\r\n return new Promise<Blob>((resolve, reject) => {\r\n if (\r\n blob &&\r\n blob.size > 0 &&\r\n (blob.type.startsWith(\"text/plain\") ||\r\n blob.type.startsWith(\"application/json\"))\r\n ) {\r\n blobToText(blob).then(\r\n blobText => {\r\n // Convertible to JSON?\r\n try {\r\n JSON.parse(blobText);\r\n // Yes; reclassify as JSON\r\n resolve(new Blob([blob], { type: \"application/json\" }));\r\n } catch (ignored) {\r\n // Nope; test for ZIP file\r\n if (\r\n blobText.length > 4 &&\r\n blobText.substr(0, 4) === ZIP_FILE_HEADER_SIGNATURE\r\n ) {\r\n // Yes; reclassify as ZIP\r\n resolve(new Blob([blob], { type: \"application/zip\" }));\r\n } else if (blobText.startsWith(\"<\")) {\r\n // Reclassify as XML; since the blob started out as text/plain, it's more likely that is\r\n // meant to be human-readable, so we'll use text/xml instead of application/xml\r\n resolve(new Blob([blob], { type: \"text/xml\" }));\r\n } else {\r\n // Leave as text\r\n resolve(blob);\r\n }\r\n }\r\n },\r\n // Faulty blob\r\n reject\r\n );\r\n } else {\r\n // Empty or not typed as plain text, so simply return\r\n if (blob) {\r\n resolve(blob);\r\n } else {\r\n reject();\r\n }\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Gets some of the ids of the dependencies (contents) of an AGO group.\r\n *\r\n * @param groupId Id of a group whose contents are sought\r\n * @param pagingParams Structure with start and num properties for the tranche to fetch\r\n * @param authentication Credentials for the request to AGO\r\n * @returns A promise that will resolve with list of dependent ids or an empty list\r\n * @private\r\n */\r\nexport function _getGroupContentsTranche(\r\n groupId: string,\r\n pagingParams: IPagingParams,\r\n authentication: UserSession\r\n): Promise<string[]> {\r\n return new Promise((resolve, reject) => {\r\n // Fetch group items\r\n const pagingRequest: IGetGroupContentOptions = {\r\n paging: pagingParams,\r\n authentication: authentication\r\n };\r\n\r\n getGroupContent(groupId, pagingRequest).then(contents => {\r\n if (contents.num > 0) {\r\n // Extract the list of content ids from the JSON returned\r\n const trancheIds: string[] = contents.items.map((item: any) => item.id);\r\n\r\n // Are there more contents to fetch?\r\n if (contents.nextStart > 0) {\r\n pagingRequest.paging.start = contents.nextStart;\r\n _getGroupContentsTranche(groupId, pagingParams, authentication).then(\r\n (allSubsequentTrancheIds: string[]) => {\r\n // Append all of the following tranches to the current tranche and return it\r\n resolve(trancheIds.concat(allSubsequentTrancheIds));\r\n },\r\n reject\r\n );\r\n } else {\r\n resolve(trancheIds);\r\n }\r\n } else {\r\n resolve([]);\r\n }\r\n }, reject);\r\n });\r\n}\r\n\r\n/**\r\n * Gets some of the related items of an AGO item.\r\n *\r\n * @param requestOptions Item id, relationship type, relationship direction, authentication, and paging\r\n * @returns A promise that will resolve with the list of related items\r\n * @private\r\n */\r\nfunction _getItemRelatedItemsTranche(\r\n requestOptions: IItemRelationshipOptionsPaging\r\n): Promise<IGetRelatedItemsResponse> {\r\n return new Promise<IGetRelatedItemsResponse>(resolve => {\r\n const response: IGetRelatedItemsResponse = {\r\n total: 0,\r\n relatedItems: []\r\n };\r\n\r\n getRelatedItems(requestOptions).then(\r\n // Have to use `any` because `IGetRelatedItemsResponse` doesn't include all of the response properties\r\n (results: any) => { // IGetRelatedItemsResponseFull\r\n // Are there any results?\r\n if (results.aggregations.total.count > 0) {\r\n response.total = results.aggregations.total.count;\r\n response.relatedItems = results.relatedItems;\r\n\r\n // Are there more items to fetch?\r\n if (results.nextkey) {\r\n requestOptions.params.start += requestOptions.params.num;\r\n requestOptions.params.nextkey = results.nextkey;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n _getItemRelatedItemsTranche(requestOptions).then(\r\n (allSubsequentResults: IGetRelatedItemsResponse) => {\r\n // Append all of the following tranches to the current tranche and return it\r\n response.total += allSubsequentResults.total;\r\n response.relatedItems = response.relatedItems.concat(allSubsequentResults.relatedItems);\r\n resolve(response);\r\n }\r\n );\r\n } else {\r\n resolve(response);\r\n }\r\n } else {\r\n resolve(response);\r\n }\r\n },\r\n () => {\r\n resolve(response);\r\n }\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Gets some of the resources of an AGO item.\r\n *\r\n * @param itemId Id of an item whose resources are sought\r\n * @param pagingParams Structure with start and num properties for the tranche to fetch\r\n * @param authentication Credentials for the request to AGO\r\n * @returns Promise that will resolve with a list of File promises or an AGO-style JSON failure response\r\n * @private\r\n */\r\nexport function _getItemResourcesTranche(\r\n itemId: string,\r\n pagingParams: IPagingParams,\r\n authentication: UserSession\r\n): Promise<Array<Promise<File>>> {\r\n return new Promise<Array<Promise<File>>>((resolve, reject) => {\r\n // Fetch resources\r\n const portalSharingUrl = getPortalSharingUrlFromAuth(authentication);\r\n const trancheUrl = `${portalSharingUrl}/content/items/${itemId}/resources`;\r\n const itemResourcesDef: Array<Promise<File>> = [];\r\n\r\n const options: IRequestOptions = {\r\n params: {\r\n ...pagingParams\r\n },\r\n authentication: authentication\r\n };\r\n\r\n request(trancheUrl, options).then(contents => {\r\n if (contents.num > 0) {\r\n // Extract the list of resource filenames from the JSON returned\r\n contents.resources.forEach((resource: any) => {\r\n const itemResourceUrl = `${portalSharingUrl}/content/items/${itemId}/resources/${resource.resource}`;\r\n itemResourcesDef.push(\r\n getBlobAsFile(itemResourceUrl, resource.resource, authentication)\r\n );\r\n });\r\n\r\n // Are there more resources to fetch?\r\n if (contents.nextStart > 0) {\r\n pagingParams.start = contents.nextStart;\r\n _getItemResourcesTranche(itemId, pagingParams, authentication).then(\r\n (allSubsequentTrancheDefs: Array<Promise<File>>) => {\r\n // Append all of the following tranches to the current tranche and return it\r\n resolve(itemResourcesDef.concat(allSubsequentTrancheDefs));\r\n },\r\n reject\r\n );\r\n } else {\r\n resolve(itemResourcesDef);\r\n }\r\n } else {\r\n resolve([]);\r\n }\r\n }, reject);\r\n });\r\n}\r\n\r\n/**\r\n * Retrieves the default basemap for the given & basemapGalleryGroupQuery, basemapTitle\r\n *\r\n * @param {string} basemapGalleryGroupQuery The default basemap group query\r\n * @param {string} basemapTitle The default basemap title\r\n * @param {UserSession} authentication The session info\r\n * @returns {IItem}\r\n */\r\nexport function getPortalDefaultBasemap(\r\n basemapGalleryGroupQuery: string,\r\n basemapTitle: string,\r\n authentication: UserSession\r\n) {\r\n return searchGroups(basemapGalleryGroupQuery, authentication, { num: 1 })\r\n .then(({ results: [basemapGroup] }) => {\r\n if (!basemapGroup) {\r\n throw new Error(\"No basemap group found\");\r\n }\r\n return searchGroupContents(\r\n basemapGroup.id,\r\n `title:${basemapTitle}`,\r\n authentication,\r\n { num: 1 }\r\n );\r\n })\r\n .then(({ results: [defaultBasemap] }) => {\r\n if (!defaultBasemap) {\r\n throw new Error(\"No basemap found\");\r\n }\r\n return defaultBasemap;\r\n });\r\n}\r\n","/** @license\r\n * Copyright 2021 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n// Helper functions shared across deploy and create\r\n\r\nimport { IItemTemplate, UserSession } from \"./interfaces\";\r\nimport { getProp, setCreateProp, setProp } from \"./generalHelpers\";\r\nimport { getItemBase } from \"./restHelpersGet\";\r\nimport { templatizeTerm } from \"./templatization\";\r\nimport { IItemUpdate } from \"@esri/arcgis-rest-types\";\r\nimport { ICreateServiceParams } from \"@esri/arcgis-rest-service-admin\";\r\n\r\n/**\r\n * Used by deploy to evaluate if we have everything we need to deploy tracking views.\r\n *\r\n * This function will update the input templateDictionary with a boolean\r\n * indicating if tracking is enabled on the org and the user is an admin.\r\n *\r\n * @param portalResponse portal self response\r\n * @param userResponse portal user response\r\n * @param templateDictionary Hash of facts: org URL, adlib replacements, deferreds for dependencies\r\n * @param templates the list of IItemTemplates from the solution\r\n *\r\n * @private\r\n */\r\nexport function setLocationTrackingEnabled(\r\n portalResponse: any,\r\n userResponse: any,\r\n templateDictionary: any,\r\n templates?: IItemTemplate[]\r\n): void {\r\n // set locationTracking...contains service url and id\r\n const locationTracking = getProp(portalResponse, \"helperServices.locationTracking\");\r\n /* istanbul ignore else */\r\n if (locationTracking) {\r\n templateDictionary.locationTracking = locationTracking;\r\n }\r\n \r\n // verify we have location tracking service and the user is an admin\r\n templateDictionary.locationTrackingEnabled =\r\n templateDictionary.locationTracking &&\r\n getProp(userResponse, \"role\") === \"org_admin\"\r\n ? true\r\n : false;\r\n\r\n if (templates) {\r\n _validateTrackingTemplates(templates, templateDictionary);\r\n }\r\n}\r\n\r\n/**\r\n * Used by deploy to evaluate if we have everything we need to deploy tracking views.\r\n *\r\n * An error is thrown to prevent additional deployment work if we have Tracking items and tracking is\r\n * not enabled or the deployment user is not an admin in the organization.\r\n *\r\n * @param templates the list of IItemTemplates from the solution\r\n * @param templateDictionary Hash of facts: org URL, adlib replacements, deferreds for dependencies\r\n *\r\n * @private\r\n */\r\nexport function _validateTrackingTemplates(\r\n templates: IItemTemplate[],\r\n templateDictionary: any\r\n): void {\r\n /* istanbul ignore else */\r\n if (\r\n !templateDictionary.locationTrackingEnabled &&\r\n templates.some(template => {\r\n const typeKeywords: string[] =\r\n getProp(template, \"item.typeKeywords\") || [];\r\n return typeKeywords.indexOf(\"Location Tracking View\") > -1;\r\n })\r\n ) {\r\n console.error(\"Location tracking not enabled or user is not admin.\");\r\n throw new Error(\"Location tracking not enabled or user is not admin.\");\r\n }\r\n}\r\n\r\n/**\r\n * Used by deploy to determine the owner of the tracking service.\r\n * Only one tracking service per org and all tracking views and tracking groups must be owned by the tracking service owner.\r\n *\r\n * This function will update the input templateDictionary with the owner as well as\r\n * the item id for the source tracking service.\r\n *\r\n * @param templateDictionary Hash of facts: org URL, adlib replacements, deferreds for dependencies\r\n * @param authentication Credentials for the requests\r\n *\r\n * @private\r\n */\r\nexport function getTackingServiceOwner(\r\n templateDictionary: any,\r\n authentication: UserSession\r\n): Promise<boolean> {\r\n if (templateDictionary.locationTrackingEnabled) {\r\n const locationTrackingId: string = templateDictionary.locationTracking.id;\r\n return getItemBase(locationTrackingId, authentication).then(itemBase => {\r\n templateDictionary.locationTracking.owner = itemBase.owner;\r\n templateDictionary[itemBase.id] = {\r\n itemId: itemBase.id\r\n };\r\n return Promise.resolve(itemBase && itemBase.owner === authentication.username);\r\n }, () => Promise.resolve(false));\r\n } else {\r\n return Promise.resolve(false);\r\n }\r\n}\r\n\r\n/**\r\n * Check key properties to understand if we are dealing with a tracking template\r\n *\r\n * @param itemTemplate the template to evaluate\r\n * @param itemUpdate the item update to evaluate\r\n *\r\n * @private\r\n */\r\nexport function isTrackingViewTemplate(\r\n itemTemplate?: IItemTemplate,\r\n itemUpdate?: IItemUpdate\r\n): boolean {\r\n const typeKeywords: any =\r\n getProp(itemTemplate, \"item.typeKeywords\") ||\r\n getProp(itemUpdate, \"typeKeywords\");\r\n const trackViewGroup: any =\r\n getProp(itemTemplate, \"item.properties.trackViewGroup\") ||\r\n getProp(itemUpdate, \"properties.trackViewGroup\");\r\n return (typeKeywords && typeKeywords.indexOf(\"Location Tracking View\") > -1 && trackViewGroup) ? true : false;\r\n}\r\n\r\n/**\r\n * Check key properties to understand if we are dealing with a tracking group template\r\n *\r\n * @param itemTemplate the template to evaluate\r\n *\r\n * @private\r\n */\r\nexport function isTrackingViewGroup(\r\n itemTemplate: IItemTemplate\r\n) {\r\n const typeKeywords: any = getProp(itemTemplate, \"item.tags\");\r\n return (typeKeywords && typeKeywords.indexOf(\"Location Tracking Group\") > -1) ? true : false\r\n}\r\n\r\n/**\r\n * Templatize the tracker view group id and view name for location tracking views.\r\n * This function will update the itemTemplate that is passed in when it's a tracking view.\r\n *\r\n * @param itemTemplate Template for feature service item\r\n * \r\n * @private\r\n */\r\n export function templatizeTracker(\r\n itemTemplate: IItemTemplate\r\n): void {\r\n /* istanbul ignore else */\r\n if (isTrackingViewTemplate(itemTemplate)) {\r\n const trackViewGroup: any = getProp(itemTemplate, \"item.properties.trackViewGroup\");\r\n itemTemplate.groups.push(trackViewGroup);\r\n itemTemplate.dependencies.push(trackViewGroup);\r\n const groupIdVar: string = templatizeTerm(trackViewGroup, trackViewGroup, \".itemId\");\r\n setProp(\r\n itemTemplate, \r\n \"item.properties.trackViewGroup\", \r\n groupIdVar\r\n );\r\n _setName(itemTemplate, \"item.name\", trackViewGroup, groupIdVar);\r\n _setName(itemTemplate, \"properties.service.adminServiceInfo.name\", trackViewGroup, groupIdVar);\r\n\r\n const layersAndTables: any[] = (itemTemplate.properties.layers || []).concat(itemTemplate.properties.tables || []);\r\n layersAndTables.forEach(l => {\r\n templatizeServiceItemId(l, \"adminLayerInfo.viewLayerDefinition.sourceServiceItemId\")\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Templatize the tracker view group id and view name for location tracking views.\r\n * This function will update the itemTemplate that is passed in when it's a tracking view.\r\n *\r\n * @param itemTemplate Template for the tracker view\r\n * @param path the path to the property that stores the current name\r\n * @param groupId the id of the associated tracker group\r\n * @param groupIdVar the variable to replace the existing name with\r\n * \r\n * @private\r\n */\r\nexport function _setName(\r\n itemTemplate: IItemTemplate,\r\n path: string,\r\n groupId: string,\r\n groupIdVar: string\r\n) {\r\n const name: string = getProp(itemTemplate, path);\r\n /* istanbul ignore else */\r\n if (name) {\r\n setProp(\r\n itemTemplate,\r\n path,\r\n name.replace(groupId, groupIdVar)\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Templatize the tracker view serviceItemId\r\n * \r\n * This function will update the input obj with the templatized variable\r\n *\r\n * @param obj the object that stores the serviceItemId\r\n * @param path the path to the property that stores the serviceItemId\r\n * \r\n * @private\r\n */\r\nexport function templatizeServiceItemId(\r\n obj: any,\r\n path: string,\r\n) {\r\n const serviceItemId = getProp(obj, path);\r\n /* istanbul ignore else */\r\n if (serviceItemId) {\r\n setProp(\r\n obj,\r\n path,\r\n templatizeTerm(serviceItemId, serviceItemId, \".itemId\")\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Used by deploy to update the request options with key details for deploying tracker views\r\n *\r\n * @param itemTemplate Template for feature service item\r\n * @param options the current request options to update\r\n * @param templateDictionary Hash of facts: org URL, adlib replacements, deferreds for dependencies\r\n * \r\n * @private\r\n */\r\nexport function setTrackingOptions(\r\n itemTemplate: IItemTemplate,\r\n options: any,\r\n templateDictionary: any\r\n): ICreateServiceParams {\r\n /* istanbul ignore else */\r\n if (isTrackingViewTemplate(itemTemplate)) {\r\n setCreateProp(options, \"owner\", templateDictionary.locationTracking.owner);\r\n\r\n setCreateProp(options.item, \"name\", itemTemplate.item.name);\r\n setCreateProp(options.item, \"isView\", true);\r\n setCreateProp(options.item, \"owner\", templateDictionary.locationTracking.owner);\r\n\r\n setCreateProp(options.params, \"isView\", true);\r\n setCreateProp(options.params, \"outputType\", \"locationTrackingService\");\r\n\r\n delete(options.folderId);\r\n }\r\n return options.item;\r\n}\r\n","/** @license\r\n * Copyright 2019 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/**\r\n * Provides general helper functions.\r\n *\r\n * @module featureServiceHelpers\r\n */\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\nexport {\r\n queryFeatures as rest_queryFeatures,\r\n addFeatures as rest_addFeatures\r\n} from \"@esri/arcgis-rest-feature-layer\";\r\n\r\n//#region Imports -------------------------------------------------------------------------------------------------------//\r\n\r\nimport {\r\n IDependency,\r\n IFeatureServiceProperties,\r\n IItemTemplate,\r\n INumberValuePair,\r\n IPostProcessArgs,\r\n IStringValuePair,\r\n IUpdate,\r\n UNREACHABLE,\r\n UserSession\r\n} from \"./interfaces\";\r\nimport {\r\n checkUrlPathTermination,\r\n deleteProp,\r\n deleteProps,\r\n fail,\r\n getProp,\r\n setCreateProp,\r\n setProp\r\n} from \"./generalHelpers\";\r\nimport {\r\n replaceInTemplate,\r\n templatizeTerm,\r\n templatizeIds\r\n} from \"./templatization\";\r\nimport {\r\n addToServiceDefinition,\r\n getLayerUpdates,\r\n getRequest,\r\n rest_request\r\n} from \"./restHelpers\";\r\nimport {\r\n isTrackingViewTemplate,\r\n templatizeTracker\r\n} from \"./trackingHelpers\";\r\n\r\n//#endregion ------------------------------------------------------------------------------------------------------------//\r\n\r\n//#region Public functions ----------------------------------------------------------------------------------------------//\r\n\r\n/**\r\n * Templatize the ID, url, field references ect\r\n *\r\n * @param itemTemplate Template for feature service item\r\n * @param dependencies Array of IDependency for name mapping\r\n * @param templatizeFieldReferences Templatize all field references within a layer\r\n * @param templateDictionary Hash mapping property names to replacement values\r\n * @returns A promise that will resolve when template has been updated\r\n * @private\r\n */\r\nexport function templatize(\r\n itemTemplate: IItemTemplate,\r\n dependencies: IDependency[],\r\n templatizeFieldReferences: boolean,\r\n templateDictionary?: any\r\n): IItemTemplate {\r\n templateDictionary = templateDictionary || {};\r\n\r\n // Common templatizations\r\n const id: string = itemTemplate.item.id;\r\n const fsUrl = itemTemplate.item.url;\r\n\r\n itemTemplate.item = {\r\n ...itemTemplate.item,\r\n id: templatizeTerm(id, id, \".itemId\"),\r\n url: _templatize(id, \"url\"),\r\n typeKeywords: templatizeIds(itemTemplate.item.typeKeywords)\r\n };\r\n\r\n // special handeling if we are dealing with a tracker view\r\n templatizeTracker(itemTemplate);\r\n\r\n // added for issue #928\r\n deleteProp(itemTemplate, \"properties.service.size\");\r\n\r\n const jsonLayers: any[] = itemTemplate.properties.layers || [];\r\n const jsonTables: any[] = itemTemplate.properties.tables || [];\r\n const jsonItems: any[] = jsonLayers.concat(jsonTables);\r\n\r\n const data: any = itemTemplate.data || {};\r\n const layers: any[] = data.layers || [];\r\n const tables: any[] = data.tables || [];\r\n const _items: any[] = layers.concat(tables);\r\n\r\n // Set up symbols for the URL of the feature service and its layers and tables\r\n templateDictionary[fsUrl] = itemTemplate.item.url; // map FS URL to its templatized form\r\n jsonItems.concat(_items).forEach(layer => {\r\n templateDictionary[fsUrl + \"/\" + layer.id] = _templatize(\r\n id,\r\n \"layer\" + layer.id + \".url\"\r\n );\r\n });\r\n\r\n // templatize the service references serviceItemId\r\n itemTemplate.properties.service.serviceItemId = templatizeTerm(\r\n itemTemplate.properties.service.serviceItemId,\r\n itemTemplate.properties.service.serviceItemId,\r\n \".itemId\"\r\n );\r\n\r\n const initialExtent: any = getProp(\r\n itemTemplate,\r\n \"properties.service.initialExtent\"\r\n );\r\n /* istanbul ignore else */\r\n if (initialExtent) {\r\n itemTemplate.properties.service.initialExtent = templatizeTerm(\r\n id,\r\n id,\r\n \".solutionExtent\"\r\n );\r\n }\r\n\r\n const fullExtent: any = getProp(\r\n itemTemplate,\r\n \"properties.service.fullExtent\"\r\n );\r\n /* istanbul ignore else */\r\n if (fullExtent) {\r\n itemTemplate.properties.service.fullExtent = templatizeTerm(\r\n id,\r\n id,\r\n \".solutionExtent\"\r\n );\r\n }\r\n\r\n // this default extent will be used in cases where it does not make sense to apply the orgs\r\n // extent to a service with a local spatial reference\r\n itemTemplate.properties.defaultExtent = initialExtent || fullExtent;\r\n\r\n // in some cases a service does not have a spatial reference defined\r\n // added for issue #699\r\n if (\r\n !getProp(itemTemplate, \"properties.service.spatialReference\") &&\r\n getProp(itemTemplate, \"properties.defaultExtent.spatialReference\")\r\n ) {\r\n setCreateProp(\r\n itemTemplate,\r\n \"properties.service.spatialReference\",\r\n itemTemplate.properties.defaultExtent.spatialReference\r\n );\r\n }\r\n\r\n // if any layer hasZ enabled then we need to set\r\n // enableZDefaults and zDefault to deploy to enterprise\r\n let hasZ: boolean = false;\r\n\r\n jsonItems.forEach((jsonItem: any) => {\r\n // get the source service json for the given data item\r\n const matchingItems = _items.filter(item => {\r\n return jsonItem.id === item.id;\r\n });\r\n\r\n // templatize the source service json\r\n const _item: any =\r\n matchingItems.length === 1 ? matchingItems[0] : undefined;\r\n _templatizeLayer(\r\n _item,\r\n jsonItem,\r\n itemTemplate,\r\n dependencies,\r\n templatizeFieldReferences,\r\n templateDictionary\r\n );\r\n\r\n hasZ = jsonItem.hasZ || (_item && _item.hasZ) ? true : hasZ;\r\n });\r\n\r\n if (hasZ) {\r\n itemTemplate.properties.service.enableZDefaults = true;\r\n itemTemplate.properties.service.zDefault = 0;\r\n }\r\n\r\n return itemTemplate;\r\n}\r\n\r\n/**\r\n * Delete key properties that are system managed\r\n *\r\n * @param layer The data layer instance with field name references within\r\n */\r\nexport function deleteViewProps(layer: any) {\r\n const props: string[] = [\"definitionQuery\"];\r\n\r\n props.forEach(prop => {\r\n deleteProp(layer, prop);\r\n });\r\n}\r\n\r\n/**\r\n * Cache properties that contain field references\r\n *\r\n * removeProp added for issue #644\r\n * setting all props on add for online now\r\n * investigating if we can also just allow them to be set during add for portal\r\n *\r\n * @param layer The data layer instance with field name references within\r\n * @param fieldInfos the object that stores the cached field infos\r\n * @returns An updated instance of the fieldInfos\r\n */\r\nexport function cacheFieldInfos(\r\n layer: any,\r\n fieldInfos: any\r\n): any {\r\n // cache the source fields as they are in the original source\r\n if (layer && layer.fields) {\r\n fieldInfos[layer.id] = {\r\n sourceFields: JSON.parse(JSON.stringify(layer.fields)),\r\n type: layer.type,\r\n id: layer.id\r\n };\r\n }\r\n\r\n // cache each of these properties as they each can contain field references\r\n // and will have associated updateDefinition calls when deploying to portal\r\n // as well as online for relationships...as relationships added with addToDef will cause failure\r\n const props = {\r\n editFieldsInfo: false,\r\n types: false,\r\n templates: false,\r\n relationships: true,\r\n drawingInfo: false,\r\n timeInfo: false,\r\n viewDefinitionQuery: false\r\n };\r\n\r\n Object.keys(props).forEach(k => {\r\n _cacheFieldInfo(layer, k, fieldInfos, props[k]);\r\n });\r\n\r\n return fieldInfos;\r\n}\r\n\r\n/**\r\n * Cache the stored contingent values so we can add them in subsequent addToDef calls\r\n *\r\n * @param id The layer id for the associated values to be stored with\r\n * @param fieldInfos The object that stores the cached field infos\r\n * @param itemTemplate The current itemTemplate being processed\r\n * @returns An updated instance of the fieldInfos\r\n */\r\nexport function cacheContingentValues(\r\n id: string,\r\n fieldInfos: any,\r\n itemTemplate: IItemTemplate\r\n): any {\r\n const contingentValues = getProp(itemTemplate, 'properties.contingentValues');\r\n if (contingentValues && contingentValues[id]) {\r\n fieldInfos[id]['contingentValues'] = contingentValues[id];\r\n }\r\n return fieldInfos;\r\n}\r\n\r\n/**\r\n * Helper function to cache a single property into the fieldInfos object\r\n * This property will be removed from the layer instance.\r\n *\r\n * @param layer the data layer being cloned\r\n * @param prop the property name used to cache\r\n * @param fieldInfos the object that will store the cached property\r\n * @private\r\n */\r\nexport function _cacheFieldInfo(\r\n layer: any,\r\n prop: string,\r\n fieldInfos: any,\r\n removeProp: boolean\r\n): void {\r\n /* istanbul ignore else */\r\n if (\r\n layer &&\r\n layer.hasOwnProperty(prop) &&\r\n fieldInfos &&\r\n fieldInfos.hasOwnProperty(layer.id)\r\n ) {\r\n fieldInfos[layer.id][prop] = layer[prop];\r\n // editFieldsInfo does not come through unless its with the layer\r\n // when it's being added\r\n /* istanbul ignore else */\r\n if (removeProp) {\r\n layer[prop] = null;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Cache popup info that can contain field references\r\n *\r\n * @param data The items data property\r\n * @returns An updated instance of the popupInfos\r\n */\r\nexport function cachePopupInfos(data: any): any {\r\n // store any popupInfo so we can update after any potential name changes\r\n const popupInfos: IPopupInfos = {\r\n layers: {},\r\n tables: {}\r\n };\r\n\r\n if (data && data.layers && data.layers.length > 0) {\r\n _cachePopupInfo(popupInfos, \"layers\", data.layers);\r\n }\r\n\r\n if (data && data.tables && data.tables.length > 0) {\r\n _cachePopupInfo(popupInfos, \"tables\", data.tables);\r\n }\r\n return popupInfos;\r\n}\r\n\r\n/**\r\n * Helper function to cache a single popupInfo\r\n * This property will be reset on the layer\r\n *\r\n * @param popupInfos object to store the cahced popupInfo\r\n * @param type is it a layer or table\r\n * @param _items list or either layers or tables\r\n * @private\r\n */\r\nexport function _cachePopupInfo(\r\n popupInfos: IPopupInfos,\r\n type: \"layers\" | \"tables\",\r\n _items: any\r\n): void {\r\n _items.forEach((item: any) => {\r\n if (item && item.hasOwnProperty(\"popupInfo\")) {\r\n popupInfos[type][item.id] = item.popupInfo;\r\n item.popupInfo = {};\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Store basic layer information for potential replacement if we are unable to access a given service\r\n * added for issue #859\r\n *\r\n * @param layerId the id for the layer\r\n * @param itemId the id for the item\r\n * @param url the url for the layer\r\n * @param templateDictionary Hash of key details used for variable replacement\r\n * @returns templatized itemTemplate\r\n */\r\nexport function cacheLayerInfo(\r\n layerId: string,\r\n itemId: string,\r\n url: string,\r\n templateDictionary: any\r\n): void {\r\n if (layerId) {\r\n const layerIdVar = `layer${layerId}`;\r\n\r\n // need to structure these differently so they are not used for standard replacement calls\r\n // this now adds additional vars that are not needing replacement unless we fail to fetch the service\r\n const newVars = getProp(templateDictionary, `${UNREACHABLE}.${itemId}`) || {\r\n itemId\r\n };\r\n newVars[layerIdVar] = getProp(newVars, layerIdVar) || {\r\n layerId,\r\n itemId\r\n };\r\n\r\n if (url !== \"\") {\r\n newVars[layerIdVar][\"url\"] = url;\r\n }\r\n\r\n const unreachableVars = {};\r\n unreachableVars[itemId] = newVars;\r\n\r\n templateDictionary[UNREACHABLE] = {\r\n ...templateDictionary[UNREACHABLE],\r\n ...unreachableVars\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Creates an item in a specified folder (except for Group item type).\r\n *\r\n * @param itemTemplate Item to be created; n.b.: this item is modified\r\n * @param templateDictionary Hash mapping property names to replacement values\r\n * @param createResponse Response from create service\r\n * @returns An updated instance of the template\r\n * @private\r\n */\r\nexport function updateTemplate(\r\n itemTemplate: IItemTemplate,\r\n templateDictionary: any,\r\n createResponse: any\r\n): IItemTemplate {\r\n // Update the item with any typeKeywords that were added on create\r\n _updateTypeKeywords(itemTemplate, createResponse);\r\n\r\n // Add the new item to the template dictionary\r\n templateDictionary[itemTemplate.itemId] = Object.assign(\r\n templateDictionary[itemTemplate.itemId] || {},\r\n {\r\n itemId: createResponse.serviceItemId,\r\n url: checkUrlPathTermination(createResponse.serviceurl),\r\n name: createResponse.name\r\n }\r\n );\r\n\r\n // Update the item template now that the new service has been created\r\n itemTemplate.itemId = createResponse.serviceItemId;\r\n return replaceInTemplate(itemTemplate, templateDictionary);\r\n}\r\n\r\n/**\r\n * Updates the items typeKeywords to include any typeKeywords that\r\n * were added by the create service request\r\n *\r\n * @param itemTemplate Item to be created; n.b.: this item is modified\r\n * @param createResponse Response from create service\r\n * @returns An updated instance of the template\r\n * @private\r\n */\r\nexport function _updateTypeKeywords(\r\n itemTemplate: IItemTemplate,\r\n createResponse: any\r\n): IItemTemplate {\r\n // https://github.com/Esri/solution.js/issues/589\r\n\r\n const iKwords: string[] = getProp(itemTemplate, \"item.typeKeywords\");\r\n const cKwords: string[] = getProp(createResponse, \"typeKeywords\");\r\n\r\n if (iKwords && cKwords) {\r\n setProp(\r\n itemTemplate,\r\n \"item.typeKeywords\",\r\n iKwords.concat(cKwords.filter(k => iKwords.indexOf(k) < 0))\r\n );\r\n }\r\n\r\n return itemTemplate;\r\n}\r\n\r\n/**\r\n * Create the name mapping object that will allow for all templatized field\r\n * references to be de-templatized.\r\n * This also removes the stored sourceFields and newFields arrays from fieldInfos.\r\n *\r\n * @example\r\n * \\{ layer0: \\{ fields: \\{ lowerCaseSourceFieldName: newFieldNameAfterDeployment \\} \\} \\}\r\n *\r\n * @param layerInfos The object that stores the cached layer properties and name mapping\r\n * @returns The settings object that will be used to de-templatize the field references.\r\n */\r\nexport function getLayerSettings(\r\n layerInfos: any,\r\n url: string,\r\n itemId: string,\r\n enterpriseIDMapping?: any\r\n): any {\r\n const settings: any = {};\r\n const ids = Object.keys(layerInfos);\r\n ids.forEach((id: any) => {\r\n const _layerId = getProp(layerInfos[id], \"item.id\");\r\n const isNum: boolean = parseInt(_layerId, 10) > -1;\r\n const layerId: number =\r\n isNum && enterpriseIDMapping\r\n ? enterpriseIDMapping[_layerId]\r\n : isNum\r\n ? _layerId\r\n : id;\r\n settings[`layer${isNum ? _layerId : id}`] = {\r\n fields: _getNameMapping(layerInfos, id),\r\n url: checkUrlPathTermination(url) + layerId,\r\n layerId,\r\n itemId\r\n };\r\n deleteProp(layerInfos[id], \"newFields\");\r\n deleteProp(layerInfos[id], \"sourceFields\");\r\n });\r\n return settings;\r\n}\r\n\r\n/**\r\n * Set the names and titles for all feature services.\r\n *\r\n * This function will ensure that we have unique feature service names.\r\n * The feature service name will have the solution item id appended.\r\n *\r\n * @param templates A collection of AGO item templates.\r\n * @param solutionItemId The item id for the deployed solution item.\r\n * @returns An updated collection of AGO templates with unique feature service names.\r\n */\r\nexport function setNamesAndTitles(\r\n templates: IItemTemplate[],\r\n solutionItemId: string\r\n): IItemTemplate[] {\r\n const names: string[] = [];\r\n return templates.map(t => {\r\n /* istanbul ignore else */\r\n if (t.item.type === \"Feature Service\") {\r\n // Retain the existing title but swap with name if it's missing\r\n t.item.title = t.item.title || t.item.name;\r\n\r\n /* istanbul ignore else */\r\n if (!isTrackingViewTemplate(t)) {\r\n // Need to set the service name: name + \"_\" + newItemId\r\n let baseName: string = t.item.name || t.item.title;\r\n\r\n // If the name already contains a GUID remove it\r\n baseName = baseName.replace(/_[0-9A-F]{32}/gi, \"\");\r\n\r\n // The name length limit is 98\r\n // Limit the baseName to 50 characters before the _<guid>\r\n const name: string = baseName.substring(0, 50) + \"_\" + solutionItemId;\r\n\r\n // If the name + GUID already exists then append \"_occurrenceCount\"\r\n t.item.name =\r\n names.indexOf(name) === -1\r\n ? name\r\n : `${name}_${names.filter(n => n === name).length}`;\r\n\r\n names.push(name);\r\n }\r\n }\r\n return t;\r\n });\r\n}\r\n\r\n/**\r\n * This is used when deploying views.\r\n * We need to update fields referenced in adminLayerInfo for relationships prior to deploying the view.\r\n * This moves the fieldInfos for the views source layers from the item settings for the source layer\r\n * to the item settings for the view.\r\n *\r\n * @param itemTemplate The current itemTemplate being processed.\r\n * @param settings The settings object used to de-templatize the various templates within the item.\r\n */\r\nexport function updateSettingsFieldInfos(\r\n itemTemplate: IItemTemplate,\r\n settings: any\r\n): void {\r\n const dependencies = itemTemplate.dependencies;\r\n const id = itemTemplate.itemId;\r\n const settingsKeys = Object.keys(settings);\r\n settingsKeys.forEach((k: any) => {\r\n if (id === settings[k].itemId) {\r\n dependencies.forEach((d: any) => {\r\n settingsKeys.forEach((_k: any) => {\r\n /* istanbul ignore else */\r\n if (d === _k) {\r\n // combine for multi-source views\r\n const fieldInfos = {};\r\n fieldInfos[d] = getProp(settings[_k], \"fieldInfos\");\r\n settings[k][\"sourceServiceFields\"] = settings[k][\r\n \"sourceServiceFields\"\r\n ]\r\n ? { ...settings[k][\"sourceServiceFields\"], ...fieldInfos }\r\n : fieldInfos;\r\n const layerKeys = Object.keys(settings[_k]);\r\n layerKeys.forEach(layerKey => {\r\n /* istanbul ignore else */\r\n if (layerKey.startsWith(\"layer\")) {\r\n settings[k][layerKey] = settings[_k][layerKey];\r\n }\r\n });\r\n }\r\n });\r\n });\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Add flag to indicate item should be ignored.\r\n * Construct template dictionary to detemplatize any references to this item by other items.\r\n *\r\n * @param template Template for feature service item\r\n * @param authentication Credentials for the request\r\n * @returns A promise that will resolve when template has been updated\r\n * @private\r\n */\r\nexport function updateTemplateForInvalidDesignations(\r\n template: IItemTemplate,\r\n authentication: UserSession\r\n): Promise<IItemTemplate> {\r\n return new Promise<IItemTemplate>((resolve, reject) => {\r\n template.properties.hasInvalidDesignations = true;\r\n if (template.item.url) {\r\n // get the admin URL\r\n const url: string = template.item.url;\r\n rest_request(url + \"?f=json\", {\r\n authentication: authentication\r\n }).then(\r\n serviceData => {\r\n const layerInfos: any = {};\r\n const layersAndTables: any[] = (serviceData.layers || []).concat(\r\n serviceData.tables || []\r\n );\r\n layersAndTables.forEach((l: any) => {\r\n /* istanbul ignore else */\r\n if (l && l.hasOwnProperty(\"id\")) {\r\n layerInfos[l.id] = l;\r\n }\r\n });\r\n\r\n template.data[template.itemId] = Object.assign(\r\n {\r\n itemId: template.itemId\r\n },\r\n getLayerSettings(layerInfos, url, template.itemId)\r\n );\r\n resolve(template);\r\n },\r\n e => reject(fail(e))\r\n );\r\n } else {\r\n resolve(template);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Get the contingent values for each layer in the service.\r\n * Remove key props that cannot be included with the addToDef call on deploy.\r\n * Store the values alongside other key feature service properties in the template\r\n *\r\n * @param properties the current feature services properties\r\n * @param adminUrl the current feature service url\r\n * @param authentication Credentials for the request to AGOL\r\n * @returns A promise that will resolve when the contingent values have been fetched.\r\n * This function will update the provided properties argument when contingent values are found.\r\n */\r\nexport function processContingentValues(\r\n properties: IFeatureServiceProperties,\r\n adminUrl: string,\r\n authentication: UserSession\r\n): Promise<void> {\r\n return new Promise<void>((resolve, reject) => {\r\n if (getProp(properties, 'service.isView')) {\r\n // views will inherit from the source service\r\n resolve();\r\n } else {\r\n const layersAndTables: any[] = (properties.layers || []).concat(\r\n properties.tables || []\r\n );\r\n const layerIds = [];\r\n const contingentValuePromises: Array<Promise<any>> = layersAndTables.reduce((prev, cur) => {\r\n /* istanbul ignore else */\r\n if (cur.hasContingentValuesDefinition) {\r\n prev.push(\r\n rest_request(\r\n `${adminUrl}/${cur['id']}/contingentValues?f=json`, { authentication }\r\n )\r\n );\r\n layerIds.push(cur['id']);\r\n }\r\n return prev;\r\n }, []);\r\n\r\n if (contingentValuePromises.length > 0) {\r\n Promise.all(contingentValuePromises).then((results) => {\r\n const contingentValues = {};\r\n results.forEach((r, i) => {\r\n deleteProp(r, 'typeCodes');\r\n /* istanbul ignore else */\r\n if (getProp(r, 'stringDicts') && getProp(r, 'contingentValuesDefinition')) {\r\n r.contingentValuesDefinition['stringDicts'] = r.stringDicts;\r\n deleteProp(r, 'stringDicts');\r\n }\r\n deleteProps(\r\n getProp(r, 'contingentValuesDefinition'),\r\n ['layerID', 'layerName', 'geometryType', 'hasSubType']\r\n );\r\n contingentValues[layerIds[i]] = r;\r\n });\r\n properties.contingentValues = contingentValues;\r\n resolve();\r\n }, reject);\r\n } else {\r\n resolve();\r\n }\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Replace the field name reference templates with the new field names after deployment.\r\n *\r\n * @param fieldInfos The object that stores the cached layer properties and name mapping\r\n * @param popupInfos The object from the popupInfo property for the layer\r\n * @param adminLayerInfos The object from the adminLayerInfo property for the layer\r\n * @param settings The settings object that has all of the mappings for de-templatizing.\r\n * @returns An object that contains updated instances of popupInfos, fieldInfos, and adminLayerInfos\r\n */\r\nexport function deTemplatizeFieldInfos(\r\n fieldInfos: any,\r\n popupInfos: any,\r\n adminLayerInfos: any,\r\n settings: any\r\n): any {\r\n const fieldInfoKeys = Object.keys(fieldInfos);\r\n fieldInfoKeys.forEach(id => {\r\n if (fieldInfos[id].hasOwnProperty(\"templates\")) {\r\n fieldInfos[id].templates = JSON.parse(\r\n replaceInTemplate(JSON.stringify(fieldInfos[id].templates), settings)\r\n );\r\n }\r\n\r\n if (fieldInfos[id].hasOwnProperty(\"adminLayerInfo\")) {\r\n adminLayerInfos[id].viewLayerDefinition.table.relatedTables =\r\n fieldInfos[id].adminLayerInfo;\r\n deleteProp(fieldInfos[id], \"adminLayerInfo\");\r\n }\r\n\r\n if (fieldInfos[id].hasOwnProperty(\"types\")) {\r\n fieldInfos[id].types = JSON.parse(\r\n replaceInTemplate(JSON.stringify(fieldInfos[id].types), settings)\r\n );\r\n }\r\n });\r\n\r\n return {\r\n popupInfos: replaceInTemplate(popupInfos, settings),\r\n fieldInfos: replaceInTemplate(fieldInfos, settings),\r\n adminLayerInfos: replaceInTemplate(adminLayerInfos, settings)\r\n };\r\n}\r\n\r\n/**\r\n * This is used when deploying views.\r\n * We need to update fields referenced in adminLayerInfo for relationships prior to deploying the view.\r\n * This moves the fieldInfos for the views source layers from the item settings for the source layer\r\n * to the item settings for the view.\r\n *\r\n * @param itemTemplate The current itemTemplate being processed.\r\n * @returns array of layers and tables\r\n */\r\nexport function getLayersAndTables(itemTemplate: IItemTemplate): any[] {\r\n const properties: any = itemTemplate.properties;\r\n const layersAndTables: any[] = [];\r\n (properties.layers || []).forEach(function(layer: any) {\r\n layersAndTables.push({\r\n item: layer,\r\n type: \"layer\"\r\n });\r\n });\r\n (properties.tables || []).forEach(function(table: any) {\r\n layersAndTables.push({\r\n item: table,\r\n type: \"table\"\r\n });\r\n });\r\n return layersAndTables;\r\n}\r\n\r\n/**\r\n * Fetch each layer and table from service so we can determine what fields they have.\r\n * This is leveraged when we are using existing services so we can determine if we need to\r\n * remove any fields from views that depend on these layers and tables.\r\n *\r\n * @param url Feature service endpoint\r\n * @param ids layer and table ids\r\n * @param authentication Credentials for the request\r\n * @returns A promise that will resolve an array of promises with either a failure or the data\r\n * @private\r\n */\r\nexport function getExistingLayersAndTables(\r\n url: string,\r\n ids: number[],\r\n authentication: UserSession\r\n): Promise<any> {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n return new Promise(resolve => {\r\n const defs: Array<Promise<any>> = ids.map(id => {\r\n return rest_request(checkUrlPathTermination(url) + id, {\r\n authentication\r\n });\r\n });\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n Promise.all(defs.map(p => p.catch(e => e))).then(resolve);\r\n });\r\n}\r\n\r\n/**\r\n * Adds the layers and tables of a feature service to it and restores their relationships.\r\n *\r\n * @param itemTemplate Feature service\r\n * @param templateDictionary Hash mapping Solution source id to id of its clone (and name & URL for feature\r\n * service)\r\n * @param popupInfos the cached popup info from the layers\r\n * @param authentication Credentials for the request\r\n * @returns A promise that will resolve when all layers and tables have been added\r\n * @private\r\n */\r\nexport function addFeatureServiceLayersAndTables(\r\n itemTemplate: IItemTemplate,\r\n templateDictionary: any,\r\n popupInfos: IPopupInfos,\r\n authentication: UserSession\r\n): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n if (isTrackingViewTemplate(itemTemplate)) {\r\n resolve(null);\r\n } else {\r\n // Create a hash of various properties that contain field references\r\n const fieldInfos: any = {};\r\n const adminLayerInfos: any = {};\r\n // Add the service's layers and tables to it\r\n const layersAndTables: any[] = getLayersAndTables(itemTemplate);\r\n if (layersAndTables.length > 0) {\r\n addFeatureServiceDefinition(\r\n itemTemplate.item.url || \"\",\r\n layersAndTables,\r\n templateDictionary,\r\n authentication,\r\n itemTemplate.key,\r\n adminLayerInfos,\r\n fieldInfos,\r\n itemTemplate\r\n ).then(\r\n () => {\r\n // Detemplatize field references and update the layer properties\r\n // Only failure path is handled by addFeatureServiceDefinition\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n updateLayerFieldReferences(\r\n itemTemplate,\r\n fieldInfos,\r\n popupInfos,\r\n adminLayerInfos,\r\n templateDictionary\r\n ).then(r => {\r\n // Update relationships and layer definitions\r\n const updates: IUpdate[] = getLayerUpdates(\r\n {\r\n message: \"updated layer definition\",\r\n objects: r.layerInfos.fieldInfos,\r\n itemTemplate: r.itemTemplate,\r\n authentication\r\n } as IPostProcessArgs,\r\n templateDictionary.isPortal\r\n );\r\n // Process the updates sequentially\r\n updates\r\n .reduce((prev, update) => {\r\n return prev.then(() => {\r\n return getRequest(update);\r\n });\r\n }, Promise.resolve(null))\r\n .then(\r\n () => resolve(null),\r\n (e: any) => reject(fail(e)) // getRequest\r\n );\r\n });\r\n },\r\n e => reject(fail(e)) // addFeatureServiceDefinition\r\n );\r\n } else {\r\n resolve(null);\r\n }\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Updates a feature service with a list of layers and/or tables.\r\n *\r\n * @param serviceUrl URL of feature service\r\n * @param listToAdd List of layers and/or tables to add\r\n * @param templateDictionary Hash mapping Solution source id to id of its clone (and name & URL for feature\r\n * service)\r\n * @param authentication Credentials for the request\r\n * @param key\r\n * @param adminLayerInfos Hash map of a layers adminLayerInfo\r\n * @param fieldInfos Hash map of properties that contain field references\r\n * @param itemTemplate\r\n * @returns A promise that will resolve when the feature service has been updated\r\n * @private\r\n */\r\nexport function addFeatureServiceDefinition(\r\n serviceUrl: string,\r\n listToAdd: any[],\r\n templateDictionary: any,\r\n authentication: UserSession,\r\n key: string,\r\n adminLayerInfos: any,\r\n fieldInfos: any,\r\n itemTemplate: IItemTemplate\r\n): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n if (isTrackingViewTemplate(itemTemplate)) {\r\n resolve(null);\r\n } else {\r\n let options: any = {\r\n layers: [],\r\n tables: [],\r\n authentication\r\n };\r\n\r\n // if the service has veiws keep track of the fields so we can use them to\r\n // compare with the view fields\r\n /* istanbul ignore else */\r\n if (getProp(itemTemplate, \"properties.service.hasViews\")) {\r\n _updateTemplateDictionaryFields(itemTemplate, templateDictionary);\r\n }\r\n\r\n const isSelfReferential = _isSelfReferential(listToAdd);\r\n listToAdd = _updateOrder(listToAdd, isSelfReferential);\r\n\r\n const chunkSize: number = _getLayerChunkSize();\r\n const layerChunks: any[] = [];\r\n listToAdd.forEach((toAdd, i) => {\r\n let item = toAdd.item;\r\n const originalId = item.id;\r\n fieldInfos = cacheFieldInfos(\r\n item,\r\n fieldInfos\r\n );\r\n\r\n // cache the values to be added in seperate addToDef calls\r\n fieldInfos = cacheContingentValues(\r\n item.id,\r\n fieldInfos,\r\n itemTemplate\r\n );\r\n\r\n /* istanbul ignore else */\r\n if (item.isView) {\r\n deleteViewProps(item);\r\n }\r\n // when the item is a view we need to grab the supporting fieldInfos\r\n /* istanbul ignore else */\r\n if (itemTemplate.properties.service.isView) {\r\n _updateGeomFieldName(item.adminLayerInfo, templateDictionary);\r\n\r\n adminLayerInfos[originalId] = item.adminLayerInfo;\r\n // need to update adminLayerInfo before adding to the service def\r\n // bring over the fieldInfos from the source layer\r\n updateSettingsFieldInfos(itemTemplate, templateDictionary);\r\n // update adminLayerInfo before add to definition with view source fieldInfo settings\r\n item.adminLayerInfo = replaceInTemplate(\r\n item.adminLayerInfo,\r\n templateDictionary\r\n );\r\n\r\n /* istanbul ignore else */\r\n if (fieldInfos && fieldInfos.hasOwnProperty(item.id)) {\r\n Object.keys(templateDictionary).some(k => {\r\n if (templateDictionary[k].itemId === itemTemplate.itemId) {\r\n fieldInfos[item.id][\"sourceServiceFields\"] =\r\n templateDictionary[k].sourceServiceFields;\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n });\r\n }\r\n }\r\n /* istanbul ignore else */\r\n if (templateDictionary.isPortal) {\r\n item = _updateForPortal(item, itemTemplate, templateDictionary);\r\n }\r\n\r\n removeLayerOptimization(item);\r\n\r\n // this can still chunk layers\r\n options = _updateAddOptions(\r\n itemTemplate,\r\n options,\r\n layerChunks,\r\n isSelfReferential,\r\n authentication\r\n );\r\n\r\n if (item.type === \"Feature Layer\") {\r\n options.layers.push(item);\r\n } else {\r\n options.tables.push(item);\r\n }\r\n\r\n // In general we are switching to not use chunking. Rather if we exceed the defined chunk size\r\n // we will use an async request.\r\n // Currently the only case that should chunk the requests is when we have a multisource view\r\n // handled in _updateAddOptions above\r\n /* istanbul ignore else */\r\n if (i + 1 === listToAdd.length) {\r\n layerChunks.push(Object.assign({}, options));\r\n options = {\r\n layers: [],\r\n tables: [],\r\n authentication\r\n };\r\n }\r\n });\r\n\r\n // will use async by default rather than chunk the layer requests when we have more layers\r\n // than the defined chunk size\r\n const useAsync: boolean = listToAdd.length > chunkSize;\r\n\r\n layerChunks\r\n .reduce(\r\n (prev, curr) =>\r\n prev.then(() => addToServiceDefinition(serviceUrl, curr, false, useAsync)),\r\n Promise.resolve(null)\r\n )\r\n .then(\r\n () => resolve(null),\r\n (e: any) => reject(fail(e))\r\n );\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * When a view is a multi service view sort based on the id\r\n * https://github.com/Esri/solution.js/issues/1048\r\n *\r\n * @param layersAndTables The list of layers and tables for the current template\r\n * @param isSelfReferential Indicates if any layers or tables have relationships with other layers or tables in the same service\r\n *\r\n * @returns Sorted list of layers and tables when using a multi-service view\r\n * @private\r\n */\r\nexport function _updateOrder(\r\n layersAndTables: any[],\r\n isSelfReferential: boolean\r\n): any[] {\r\n return isSelfReferential ? layersAndTables.sort((a, b) => a.item.id - b.item.id) : layersAndTables;\r\n}\r\n\r\n/**\r\n * When a view is a multi service view add each layer separately\r\n * https://github.com/Esri/solution.js/issues/871\r\n *\r\n * @param itemTemplate The current itemTemplate being processed\r\n * @param options Add to service definition options\r\n * @param layerChunks Groups of layers or tables to add to the service\r\n * @param isSelfReferential Indicates if any layers or tables have relationships with other layers or tables in the same service\r\n * @param authentication Credentials for the request\r\n *\r\n * @returns Add to service definition options\r\n * @private\r\n */\r\nexport function _updateAddOptions(\r\n itemTemplate: IItemTemplate,\r\n options: any,\r\n layerChunks: any[],\r\n isSelfReferential: boolean,\r\n authentication: UserSession\r\n): any {\r\n const isMsView: boolean = getProp(itemTemplate, \"properties.service.isMultiServicesView\") || false;\r\n /* istanbul ignore else */\r\n if (isMsView || isSelfReferential) {\r\n // if we already have some layers or tables add them first\r\n /* istanbul ignore else */\r\n if (options.layers.length > 0 || options.tables.length > 0) {\r\n layerChunks.push(Object.assign({}, options));\r\n options = {\r\n layers: [],\r\n tables: [],\r\n authentication\r\n };\r\n }\r\n }\r\n return options;\r\n}\r\n\r\n/**\r\n * Determine if any layer or table within the service references\r\n * other layers or tables within the same service\r\n *\r\n * @param layersAndTables the list of layers and tables from the service\r\n *\r\n * @returns true when valid internal references are found\r\n * @private\r\n */\r\nexport function _isSelfReferential(\r\n layersAndTables: any[]\r\n): boolean {\r\n const names = layersAndTables.map(l => l.item.name);\r\n return layersAndTables.some(l => {\r\n const relatedTables = l.item.adminLayerInfo?.viewLayerDefinition?.table?.relatedTables || [];\r\n return relatedTables.some(r => names.indexOf(r.name) > -1);\r\n });\r\n}\r\n\r\n/**\r\n * Remove \"multiScaleGeometryInfo\" for issue #526 to prevent invalid enablement of layer optimization\r\n *\r\n * @param layer the layer to evaluate\r\n * @private\r\n */\r\nexport function removeLayerOptimization(layer: any): void {\r\n /* istanbul ignore else */\r\n if (layer.multiScaleGeometryInfo) {\r\n deleteProp(layer, \"multiScaleGeometryInfo\");\r\n }\r\n}\r\n\r\n/**\r\n * Handle portal specific updates to the item\r\n *\r\n * @param item the item to update\r\n * @param itemTemplate the item template\r\n * @param templateDictionary Hash mapping Solution source id to id of its clone\r\n *\r\n * @returns the updated item\r\n * @private\r\n */\r\nexport function _updateForPortal(\r\n item: any,\r\n itemTemplate: IItemTemplate,\r\n templateDictionary: any\r\n): any {\r\n // When deploying to portal we need to adjust the uniquie ID field up front\r\n /* istanbul ignore else */\r\n if (item.uniqueIdField && item.uniqueIdField.name) {\r\n item.uniqueIdField.name = String(\r\n item.uniqueIdField.name\r\n ).toLocaleLowerCase();\r\n }\r\n\r\n // Portal will fail if the geometryField is null\r\n if (item.type === \"Table\" && item.adminLayerInfo) {\r\n deleteProp(item.adminLayerInfo, \"geometryField\");\r\n }\r\n\r\n // Portal will fail if the sourceFields in the viewLayerDef contain fields that are not in the source service\r\n /* istanbul ignore else */\r\n if (item.isView) {\r\n const viewLayerDefTable: any = getProp(\r\n item,\r\n \"adminLayerInfo.viewLayerDefinition.table\"\r\n );\r\n\r\n let fieldNames: string[] = [];\r\n if (viewLayerDefTable) {\r\n const tableFieldNames: string[] = _getFieldNames(\r\n viewLayerDefTable,\r\n itemTemplate,\r\n templateDictionary\r\n );\r\n fieldNames = fieldNames.concat(tableFieldNames);\r\n\r\n const dynamicFieldNames = _getDynamicFieldNames(viewLayerDefTable);\r\n fieldNames = fieldNames.concat(dynamicFieldNames);\r\n\r\n setProp(\r\n item,\r\n \"adminLayerInfo.viewLayerDefinition.table\",\r\n _updateSourceLayerFields(viewLayerDefTable, fieldNames)\r\n );\r\n\r\n // Handle related also\r\n /* istanbul ignore else */\r\n if (Array.isArray(viewLayerDefTable.relatedTables)) {\r\n viewLayerDefTable.relatedTables.map((relatedTable: any) => {\r\n const relatedTableFieldNames: string[] = _getFieldNames(\r\n relatedTable,\r\n itemTemplate,\r\n templateDictionary\r\n );\r\n fieldNames = fieldNames.concat(relatedTableFieldNames);\r\n\r\n const dynamicRelatedFieldNames = _getDynamicFieldNames(relatedTable);\r\n fieldNames = fieldNames.concat(dynamicRelatedFieldNames);\r\n\r\n return _updateSourceLayerFields(\r\n relatedTable,\r\n [...relatedTableFieldNames, ...dynamicRelatedFieldNames]\r\n );\r\n });\r\n }\r\n } else {\r\n Object.keys(templateDictionary).some(k => {\r\n /* istanbul ignore else */\r\n if (templateDictionary[k].itemId === item.serviceItemId) {\r\n const layerInfo: any = templateDictionary[k][`layer${item.id}`];\r\n /* istanbul ignore else */\r\n if (layerInfo && layerInfo.fields) {\r\n if (Array.isArray(layerInfo.fields)) {\r\n fieldNames = layerInfo.fields.map((f: any) => f.name);\r\n } else {\r\n fieldNames = Object.keys(layerInfo.fields);\r\n }\r\n }\r\n return true;\r\n }\r\n });\r\n }\r\n\r\n item = _updateItemFields(item, fieldNames);\r\n }\r\n\r\n // not allowed to set sourceSchemaChangesAllowed or isView for portal\r\n // these are set when you create the service\r\n deleteProp(item, \"isView\");\r\n return item;\r\n}\r\n\r\n/**\r\n * Get a list of the source layer field names\r\n *\r\n * @param table the table instance to compare\r\n * @param itemTemplate the item template\r\n * @param templateDictionary Hash mapping Solution source id to id of its clone\r\n *\r\n * @returns an array of the source layers fields\r\n * @private\r\n */\r\nexport function _getFieldNames(\r\n table: any,\r\n itemTemplate: IItemTemplate,\r\n templateDictionary: any\r\n): string[] {\r\n let sourceLayerFields: any[] = [];\r\n const viewSourceLayerId: number = table.sourceLayerId;\r\n\r\n /* istanbul ignore else */\r\n if (typeof viewSourceLayerId === \"number\") {\r\n // need to make sure these actually exist in the source..\r\n itemTemplate.dependencies.forEach(d => {\r\n const layerInfo: any = templateDictionary[d][`layer${viewSourceLayerId}`];\r\n /* istanbul ignore else */\r\n if (\r\n layerInfo &&\r\n layerInfo.fields &&\r\n templateDictionary[d].name === table.sourceServiceName\r\n ) {\r\n if (Array.isArray(layerInfo.fields)) {\r\n sourceLayerFields = sourceLayerFields.concat(\r\n layerInfo.fields.map((f: any) => f.name)\r\n );\r\n } else {\r\n sourceLayerFields = sourceLayerFields.concat(\r\n Object.keys(layerInfo.fields)\r\n );\r\n }\r\n }\r\n });\r\n return sourceLayerFields;\r\n }\r\n}\r\n\r\n/**\r\n * Get a list of any dynamically calculated fields\r\n * These fields are still valid but will not exist in the source service\r\n *\r\n * @param table the table instance to compare\r\n *\r\n * @returns an array of field names\r\n * @private\r\n */\r\nexport function _getDynamicFieldNames(\r\n table: any\r\n): string[] {\r\n const fieldNames: string[] = table.sourceLayerFields.reduce((prev, cur) => {\r\n if (cur.statisticType) {\r\n prev.push(cur.name);\r\n }\r\n return prev;\r\n }, []);\r\n return [...new Set(fieldNames)];\r\n}\r\n\r\n/**\r\n * Remove fields references from fields and indexes that do not exist in the source service\r\n *\r\n * @param item Layer or table\r\n * @param templateDictionary Hash mapping Solution source id to id of its clone\r\n *\r\n * @returns updated layer or table\r\n * @private\r\n */\r\nexport function _updateItemFields(item: any, fieldNames: string[]): any {\r\n /* istanbul ignore else */\r\n if (fieldNames.length > 0) {\r\n /* istanbul ignore else */\r\n if (item.fields) {\r\n item.fields = item.fields.filter(\r\n (f: any) => fieldNames.indexOf(f.name) > -1\r\n );\r\n }\r\n /* istanbul ignore else */\r\n if (item.indexes) {\r\n item.indexes = item.indexes.filter(\r\n (f: any) => fieldNames.indexOf(f.fields) > -1\r\n );\r\n }\r\n }\r\n return item;\r\n}\r\n\r\n/**\r\n * Filter the sourceLayerFields for the table\r\n *\r\n * @param table the table instance to evaluate\r\n * @param sourceLayerFields array of fields from the source service\r\n * @returns Updated instance of the table\r\n * @private\r\n */\r\nexport function _updateSourceLayerFields(\r\n table: any,\r\n sourceLayerFields: string[]\r\n): any {\r\n /* istanbul ignore else */\r\n if (\r\n Array.isArray(table.sourceLayerFields) &&\r\n table.sourceLayerFields.length > 0\r\n ) {\r\n // need to make sure these actually exist in the source..\r\n /* istanbul ignore else */\r\n if (sourceLayerFields.length > 0) {\r\n setProp(\r\n table,\r\n \"sourceLayerFields\",\r\n table.sourceLayerFields.filter(\r\n (f: any) => sourceLayerFields.indexOf(f.source.toLowerCase()) > -1\r\n )\r\n );\r\n }\r\n }\r\n return table;\r\n}\r\n\r\n/**\r\n * When the itemm is a view with a geometry field update the value to\r\n * use the table name from the view layer def\r\n *\r\n * @param item the item details from the current template\r\n * @param templateDictionary Hash mapping property names to replacement values\r\n * @private\r\n */\r\nexport function _updateGeomFieldName(\r\n adminLayerInfo: any,\r\n templateDictionary: any\r\n): void {\r\n // issue #471\r\n const tableName: string = getProp(\r\n adminLayerInfo,\r\n \"viewLayerDefinition.table.name\"\r\n );\r\n const fieldName: string = getProp(adminLayerInfo, \"geometryField.name\");\r\n /* istanbul ignore else */\r\n if (fieldName && tableName) {\r\n const geomName: string = templateDictionary.isPortal\r\n ? `${tableName}.shape`\r\n : `${tableName}.Shape`;\r\n setProp(adminLayerInfo, \"geometryField.name\", geomName);\r\n } else if (!fieldName && getProp(adminLayerInfo, \"geometryField\")) {\r\n // null geom field will cause failure to deploy in portal\r\n // this is also checked and removed on deploy for older solutions\r\n deleteProp(adminLayerInfo, \"geometryField\");\r\n }\r\n}\r\n\r\n/**\r\n * Add the fields to the templateDictionary when a service has views\r\n * these are used to compare with fields from the view when domains are involved\r\n * when a view field has a domain that differs from that of the source service\r\n * the definition needs to be modified in an update call rather than when it is first added.\r\n * This should only happen when the domain differs.\r\n *\r\n * @param itemTemplate\r\n * @param templateDictionary Hash mapping Solution source id to id of its clone (and name & URL for feature service)\r\n * @private\r\n */\r\nexport function _updateTemplateDictionaryFields(\r\n itemTemplate: IItemTemplate,\r\n templateDictionary: any,\r\n compareItemId: boolean = true\r\n): void {\r\n const layers: any[] = itemTemplate.properties.layers;\r\n const tables: any[] = itemTemplate.properties.tables;\r\n const layersAndTables: any[] = layers.concat(tables);\r\n const fieldInfos: any = {};\r\n layersAndTables.forEach(layerOrTable => {\r\n fieldInfos[layerOrTable.id] = layerOrTable.fields;\r\n });\r\n Object.keys(templateDictionary).some(k => {\r\n if (\r\n compareItemId\r\n ? templateDictionary[k].itemId === itemTemplate.itemId\r\n : k === itemTemplate.itemId\r\n ) {\r\n templateDictionary[k].fieldInfos = fieldInfos;\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Set the defaultSpatialReference variable with the services spatial reference.\r\n * If this item is a Feature Service that has child views then we will use this value\r\n * if one or more of the child views spatial reference differs from that of its parent.\r\n *\r\n * @param templateDictionary Hash mapping Solution source id to id of its clone (and name & URL for feature service)\r\n * @param itemId The source id for the item\r\n * @param spatialReference \\{ wkid: 102100 \\} for example\r\n * @private\r\n */\r\nexport function setDefaultSpatialReference(\r\n templateDictionary: any,\r\n itemId: string,\r\n spatialReference: any\r\n): void {\r\n /* istanbul ignore else */\r\n if (spatialReference) {\r\n setCreateProp(\r\n templateDictionary,\r\n `${itemId}.defaultSpatialReference`,\r\n spatialReference\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Compare the spatial reference of the current item against its dependencies.\r\n * The spatial reference of a view cannot differ from its source service.\r\n * If the view has a different spatial reference from its source use the source spatial reference.\r\n *\r\n * @param serviceInfo Basic service information\r\n * @param itemTemplate The current template to process\r\n * @param templateDictionary Hash mapping Solution source id to id of its clone (and name & URL for feature service)\r\n * @private\r\n */\r\nexport function validateSpatialReferenceAndExtent(\r\n serviceInfo: any,\r\n itemTemplate: IItemTemplate,\r\n templateDictionary: any\r\n): void {\r\n /* istanbul ignore else */\r\n if (getProp(serviceInfo, \"service.isView\")) {\r\n let sourceSR: any;\r\n let sourceExt: any;\r\n itemTemplate.dependencies.some(id => {\r\n const source: any = templateDictionary[id];\r\n\r\n const sr: any = getProp(source, \"defaultSpatialReference\");\r\n /* istanbul ignore else */\r\n if (!sourceSR && sr) {\r\n sourceSR = sr;\r\n }\r\n\r\n const ext: any = getProp(source, \"defaultExtent\");\r\n /* istanbul ignore else */\r\n if (!sourceExt && ext) {\r\n sourceExt = ext;\r\n }\r\n\r\n return sourceSR && sourceExt;\r\n });\r\n const sourceWkid: number = getProp(sourceSR, \"wkid\");\r\n\r\n const viewWkid: number = getProp(\r\n serviceInfo,\r\n \"service.spatialReference.wkid\"\r\n );\r\n /* istanbul ignore else */\r\n if (sourceWkid && viewWkid && sourceWkid !== viewWkid) {\r\n setCreateProp(serviceInfo, \"service.spatialReference\", sourceSR);\r\n }\r\n\r\n const viewExt: number = getProp(serviceInfo, \"service.fullExtent\");\r\n /* istanbul ignore else */\r\n if (\r\n sourceExt &&\r\n viewExt &&\r\n JSON.stringify(sourceExt) !== JSON.stringify(viewExt)\r\n ) {\r\n setCreateProp(serviceInfo, \"defaultExtent\", sourceExt);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Updates a feature service with a list of layers and/or tables.\r\n *\r\n * @param itemTemplate\r\n * @param fieldInfos Hash map of properties that contain field references\r\n * @param popupInfos Hash map of a layers popupInfo\r\n * @param adminLayerInfos Hash map of a layers adminLayerInfo\r\n * @param templateDictionary Hash mapping Solution source id to id of its clone (and name & URL for feature service)\r\n * @param authentication Credentials for the request\r\n * @returns A promise that will resolve when the feature service has been updated\r\n * @private\r\n */\r\nexport function updateLayerFieldReferences(\r\n itemTemplate: IItemTemplate,\r\n fieldInfos: any,\r\n popupInfos: IPopupInfos,\r\n adminLayerInfos: any,\r\n templateDictionary: any\r\n): Promise<any> {\r\n return new Promise((resolveFn, rejectFn) => {\r\n // Will need to do some post processing for fields\r\n // to handle any potential field name changes when deploying to portal\r\n postProcessFields(\r\n itemTemplate,\r\n fieldInfos,\r\n popupInfos,\r\n adminLayerInfos,\r\n templateDictionary\r\n ).then(\r\n (layerInfos: any) => {\r\n // Update the items text with detemplatized popupInfo\r\n updatePopupInfo(itemTemplate, layerInfos.popupInfos);\r\n resolveFn({\r\n itemTemplate,\r\n layerInfos\r\n });\r\n },\r\n e => rejectFn(fail(e))\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Update the names of fields for each layer or table after it has been\r\n * added to the definition\r\n *\r\n * @param itemTemplate Item to be created\r\n * @param layerInfos Hash map of properties that contain field references and various layer info\r\n * @param popupInfos Hash map of a layers popupInfo\r\n * @param adminLayerInfos Hash map of a layers adminLayerInfo\r\n * @param templateDictionary\r\n * @param authentication Credentials for the request\r\n * @returns An object with detemplatized field references\r\n * @private\r\n */\r\nexport function postProcessFields(\r\n itemTemplate: IItemTemplate,\r\n layerInfos: any,\r\n popupInfos: any,\r\n adminLayerInfos: any,\r\n templateDictionary: any\r\n): Promise<any> {\r\n return new Promise((resolveFn, rejectFn) => {\r\n if (!itemTemplate.item.url) {\r\n rejectFn(\r\n fail(\"Feature layer \" + itemTemplate.itemId + \" does not have a URL\")\r\n );\r\n } else {\r\n const id = itemTemplate.itemId;\r\n const settingsKeys = Object.keys(templateDictionary);\r\n\r\n let templateInfo: any;\r\n settingsKeys.some(k => {\r\n if (templateDictionary[k].itemId === id) {\r\n templateInfo = templateDictionary[k];\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n });\r\n\r\n // concat any layers and tables to process\r\n const layers: any[] = itemTemplate.properties.layers;\r\n const tables: any[] = itemTemplate.properties.tables;\r\n const layersAndTables: any[] = layers.concat(tables);\r\n\r\n // Set the newFields property for the layerInfos...this will contain all fields\r\n // as they are after being added to the definition.\r\n // This allows us to handle any potential field name changes after deploy to portal\r\n layersAndTables.forEach((item: any) => {\r\n // when deploying to portal \"isView\" is only set for create service and will fail when\r\n // present on addToDef so this property is removed from item and we should check the templates service info\r\n const isView = item.isView || itemTemplate.properties.service.isView;\r\n /* istanbul ignore else */\r\n if (layerInfos && layerInfos.hasOwnProperty(item.id)) {\r\n const layerInfo: any = layerInfos[item.id];\r\n layerInfo[\"isView\"] = item.isView;\r\n layerInfo[\"newFields\"] = item.fields;\r\n layerInfo[\"sourceSchemaChangesAllowed\"] =\r\n item.sourceSchemaChangesAllowed;\r\n\r\n /* istanbul ignore else */\r\n if (item.editFieldsInfo) {\r\n // more than case change when deployed to protal so keep track of the new names\r\n layerInfo[\"newEditFieldsInfo\"] = JSON.parse(\r\n JSON.stringify(item.editFieldsInfo)\r\n );\r\n }\r\n\r\n /* istanbul ignore else */\r\n if (isView && templateInfo && templateDictionary.isPortal) {\r\n // when the item is a view bring over the source service fields so we can compare the domains\r\n layerInfo[\"sourceServiceFields\"] = templateInfo.sourceServiceFields;\r\n }\r\n }\r\n });\r\n\r\n // Add the layerInfos to the settings object to be used while detemplatizing\r\n settingsKeys.forEach((k: any) => {\r\n if (id === templateDictionary[k].itemId) {\r\n templateDictionary[k] = Object.assign(\r\n templateDictionary[k],\r\n getLayerSettings(layerInfos, templateDictionary[k].url, id)\r\n );\r\n }\r\n });\r\n\r\n // update the layerInfos object with current field names\r\n resolveFn(\r\n deTemplatizeFieldInfos(\r\n layerInfos,\r\n popupInfos,\r\n adminLayerInfos,\r\n templateDictionary\r\n )\r\n );\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Add popup info back to the layer item\r\n *\r\n * @param itemTemplate\r\n * @param popupInfos popup info to be added back to the layer\r\n * @private\r\n */\r\nexport function updatePopupInfo(\r\n itemTemplate: IItemTemplate,\r\n popupInfos: any\r\n): void {\r\n [\"layers\", \"tables\"].forEach(type => {\r\n const _items: any[] = getProp(itemTemplate, \"data.\" + type);\r\n /* istanbul ignore else */\r\n if (_items && Array.isArray(_items)) {\r\n _items.forEach((item: any) => {\r\n item.popupInfo = getProp(popupInfos, type + \".\" + item.id) || {};\r\n });\r\n }\r\n });\r\n}\r\n\r\n//#endregion\r\n\r\n//#region Private helper functions --------------------------------------------------//\r\n\r\n/**\r\n * Helper function to templatize value and make sure its converted to lowercase\r\n *\r\n * @param basePath path used to de-templatize while deploying\r\n * @param value to be converted to lower case for lookup while deploying\r\n * @private\r\n */\r\nexport function _templatize(\r\n basePath: string,\r\n value: string,\r\n suffix?: string\r\n): string {\r\n if (value.startsWith(\"{{\")) {\r\n return value;\r\n } else {\r\n return String(\r\n templatizeTerm(\r\n basePath,\r\n basePath,\r\n \".\" + String(value).toLowerCase() + (suffix ? \".\" + suffix : \"\")\r\n )\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * templatize an objects property\r\n *\r\n * @param object the object with the property to templatize\r\n * @param property the property of the object to templatize\r\n * @param basePath path used to de-templatize while deploying\r\n * @private\r\n */\r\nexport function _templatizeProperty(\r\n object: any,\r\n property: string,\r\n basePath: string,\r\n suffix: string\r\n): void {\r\n if (object && object.hasOwnProperty(property) && object[property]) {\r\n object[property] = _templatize(basePath, object[property], suffix);\r\n }\r\n}\r\n\r\n/**\r\n * Templatize field references, serviceItemId, and adminLayerInfo for a layer\r\n *\r\n * @param dataItem from the items data property\r\n * @param adminItem from the services admin api\r\n * @param itemTemplate Template for feature service item\r\n * @param dependencies Array of IDependency for name mapping\r\n * @param templatizeFieldReferences Templatize all field references within a layer\r\n * @returns A promise that will resolve when template has been updated\r\n * @private\r\n */\r\nexport function _templatizeLayer(\r\n dataItem: any,\r\n adminItem: any,\r\n itemTemplate: IItemTemplate,\r\n dependencies: IDependency[],\r\n templatizeFieldReferences: boolean,\r\n templateDictionary: any\r\n): void {\r\n // check for and repair common field issues\r\n _validateFields(adminItem);\r\n\r\n // Templatize all properties that contain field references\r\n /* istanbul ignore else */\r\n if (templatizeFieldReferences) {\r\n _templatizeLayerFieldReferences(\r\n dataItem,\r\n itemTemplate.itemId,\r\n adminItem,\r\n dependencies\r\n );\r\n }\r\n\r\n const updates: any[] = [adminItem];\r\n if (dataItem) {\r\n updates.push(dataItem);\r\n }\r\n\r\n updates.forEach(update => {\r\n if (update.hasOwnProperty(\"name\")) {\r\n // templatize the name but leave the current name as the optional default\r\n update.name = templatizeTerm(\r\n update[\"serviceItemId\"] + \".layer\" + update.id,\r\n update[\"serviceItemId\"] + \".layer\" + update.id,\r\n \".name||\" + update.name\r\n );\r\n }\r\n if (update.hasOwnProperty(\"extent\")) {\r\n update.extent = templatizeTerm(\r\n update[\"serviceItemId\"],\r\n update[\"serviceItemId\"],\r\n \".solutionExtent\"\r\n );\r\n }\r\n\r\n if (update.hasOwnProperty(\"serviceItemId\")) {\r\n update[\"serviceItemId\"] = templatizeTerm(\r\n update[\"serviceItemId\"],\r\n update[\"serviceItemId\"],\r\n \".itemId\"\r\n );\r\n }\r\n\r\n if (update.hasOwnProperty(\"adminLayerInfo\")) {\r\n update.adminLayerInfo = _templatizeAdminLayerInfo(\r\n update,\r\n dependencies,\r\n templateDictionary\r\n );\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Repair common issues that can occur with feature service field references.\r\n * This function will mutate the input item if any of the common issues have occured.\r\n *\r\n * @param adminItem layer or table from the service\r\n */\r\nexport function _validateFields(adminItem: any): void {\r\n const fieldNames: string[] = (adminItem.fields || []).map((f: any) => f.name);\r\n\r\n // Update primary display field if field isn't in the layer.\r\n _validateDisplayField(adminItem, fieldNames);\r\n\r\n // Remove indexes on fields that don't exist in the layer.\r\n // Remove duplicate indexes on the same field.\r\n _validateIndexes(adminItem, fieldNames);\r\n\r\n // Remove field references in templates when field doesn't exist in the layer.\r\n _validateTemplatesFields(adminItem, fieldNames);\r\n _validateTypesTemplates(adminItem, fieldNames);\r\n\r\n // Repair editFieldsInfo if field referenced doesn't exist in the layer\r\n _validateEditFieldsInfo(adminItem, fieldNames);\r\n}\r\n\r\n/**\r\n * Update primary display field if casing doesn't match.\r\n * Update primary display field to the first non OID or GlobalId if the field isn't in the layer.\r\n *\r\n * @param adminItem layer or table from the service\r\n * @param fieldNames string list of fields names\r\n * @private\r\n */\r\nexport function _validateDisplayField(\r\n adminItem: any,\r\n fieldNames: string[]\r\n): void {\r\n const displayField: string = adminItem.displayField || \"\";\r\n let i: number = -1;\r\n if (\r\n fieldNames.some(name => {\r\n i += 1;\r\n return name === displayField || name === displayField.toLowerCase();\r\n })\r\n ) {\r\n adminItem.displayField = fieldNames[i];\r\n } else {\r\n // use the first non-OID non-globalId field we find\r\n const skipFields: string[] = [];\r\n const oidField: any = getProp(adminItem, \"uniqueIdField.name\");\r\n /* istanbul ignore else */\r\n if (oidField) {\r\n skipFields.push(oidField);\r\n }\r\n\r\n const globalIdField: any = getProp(adminItem, \"globalIdField\");\r\n /* istanbul ignore else */\r\n if (globalIdField) {\r\n skipFields.push(globalIdField);\r\n }\r\n\r\n fieldNames.some(name => {\r\n if (skipFields.indexOf(name) === -1) {\r\n adminItem.displayField = name;\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Remove indexes on fields that don't exist in the layer.\r\n * Remove duplicate indexes on the same field.\r\n *\r\n * @param adminItem layer or table from the service\r\n * @param fieldNames string list of fields names\r\n * @private\r\n */\r\nexport function _validateIndexes(adminItem: any, fieldNames: string[]): void {\r\n const indexes: any[] = adminItem.indexes;\r\n /* istanbul ignore else */\r\n if (indexes) {\r\n const indexedFields: any[] = [];\r\n adminItem.indexes = indexes.reduce((filtered, index) => {\r\n const indexFields: any[] = index.fields.split(\",\");\r\n const verifiedFields: string[] = [];\r\n indexFields.forEach(indexField => {\r\n /* istanbul ignore else */\r\n if (indexedFields.indexOf(indexField) === -1) {\r\n indexedFields.push(indexField);\r\n // this is the first index with this field and it should be added if the field exists\r\n /* istanbul ignore else */\r\n if (fieldNames.indexOf(indexField) > -1) {\r\n verifiedFields.push(indexField);\r\n }\r\n }\r\n // else the field has more than one index associated and should not be returned\r\n });\r\n /* istanbul ignore else */\r\n if (verifiedFields.length > 0) {\r\n index.fields = verifiedFields.join(\",\");\r\n filtered.push(index);\r\n }\r\n return filtered;\r\n }, []);\r\n }\r\n}\r\n\r\n/**\r\n * Remove field references from templates that no longer exist.\r\n *\r\n * @param adminItem layer or table from the service\r\n * @param fieldNames string list of fields names\r\n * @private\r\n */\r\nexport function _validateTemplatesFields(\r\n adminItem: any,\r\n fieldNames: string[]\r\n): void {\r\n const templates: any[] = adminItem.templates;\r\n /* istanbul ignore else */\r\n if (templates) {\r\n adminItem.templates = templates.map(template => {\r\n const attributes: any = getProp(template, \"prototype.attributes\");\r\n /* istanbul ignore else */\r\n if (attributes) {\r\n Object.keys(attributes).forEach(k => {\r\n /* istanbul ignore else */\r\n if (fieldNames.indexOf(k) === -1) {\r\n delete attributes[k];\r\n }\r\n });\r\n setProp(template, \"prototype.attributes\", attributes);\r\n }\r\n return template;\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Remove field references from templates that no longer exist.\r\n *\r\n * @param adminItem layer or table from the service\r\n * @param fieldNames string list of fields names\r\n * @private\r\n */\r\nexport function _validateTypesTemplates(\r\n adminItem: any,\r\n fieldNames: string[]\r\n): void {\r\n const types: any[] = adminItem.types;\r\n /* istanbul ignore else */\r\n if (types) {\r\n adminItem.types = types.map(t => {\r\n _validateTemplatesFields(t, fieldNames);\r\n return t;\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Check if edit feilds exist but with lower case\r\n *\r\n * @param adminItem layer or table from the service\r\n * @param fieldNames string list of fields names\r\n * @private\r\n */\r\nexport function _validateEditFieldsInfo(\r\n adminItem: any,\r\n fieldNames: string[]\r\n): void {\r\n const editFieldsInfo: any = adminItem.editFieldsInfo;\r\n /* istanbul ignore else */\r\n if (editFieldsInfo) {\r\n const editFieldsInfoKeys: string[] = Object.keys(editFieldsInfo);\r\n editFieldsInfoKeys.forEach(k => {\r\n const editFieldName: string = editFieldsInfo[k];\r\n /* istanbul ignore else */\r\n if (editFieldName) {\r\n fieldNames.some(name => {\r\n if (name === editFieldName) {\r\n return true;\r\n } else if (name === editFieldName.toLowerCase()) {\r\n editFieldsInfo[k] = name;\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n}\r\n\r\n/**\r\n *\r\n * Templatize all field references within a layer\r\n * This is necessary to support potential field name changes when deploying to portal\r\n * Portal will force all field names to be lower case\r\n *\r\n * @param dataItem The data layer instance with field name references within\r\n * @param itemID The id for the item that contains this layer.\r\n * @param layer JSON return from the layer being templatized.\r\n * @param dependencies\r\n * @returns An updated instance of the layer\r\n * @private\r\n */\r\nexport function _templatizeLayerFieldReferences(\r\n dataItem: any,\r\n itemID: string,\r\n layer: any,\r\n dependencies: IDependency[]\r\n): void {\r\n // This is the value that will be used as the template for adlib replacement\r\n const path: string = itemID + \".layer\" + layer.id + \".fields\";\r\n\r\n // Get the field names for various tests\r\n const fieldNames: string[] = layer.fields.map((f: any) => f.name);\r\n\r\n // Update the layer from the items data property\r\n if (dataItem) {\r\n _templatizeAdminLayerInfoFields(dataItem, dependencies);\r\n _templatizePopupInfo(dataItem, layer, path, itemID, fieldNames);\r\n }\r\n\r\n // Update the layer\r\n _templatizeAdminLayerInfoFields(layer, dependencies);\r\n _templatizeRelationshipFields(layer, itemID);\r\n _templatizeDefinitionEditor(layer, path, fieldNames);\r\n _templatizeDefinitionExpression(layer, path, fieldNames);\r\n _templatizeDrawingInfo(layer, path, fieldNames);\r\n _templatizeTemplates(layer, path);\r\n _templatizeTypeTemplates(layer, path);\r\n _templatizeTimeInfo(layer, path);\r\n _templatizeDefinitionQuery(layer, path, fieldNames);\r\n}\r\n\r\n/**\r\n * Templatize a layers adminLayerInfo by removing properties that will case issues with clone.\r\n * Also templatizes the source service name when we are dealing with a view.\r\n *\r\n * @param layer The layer to be modified\r\n * @param dependencies Array of service dependencies\r\n * @returns A new copy of the modified adminLayerInfo for the given layer\r\n * @private\r\n */\r\nexport function _templatizeAdminLayerInfo(\r\n layer: any,\r\n dependencies: IDependency[],\r\n templateDictionary: any\r\n): any {\r\n // Create new instance of adminLayerInfo to update for clone\r\n const adminLayerInfo = Object.assign({}, layer.adminLayerInfo);\r\n _updateGeomFieldName(adminLayerInfo, templateDictionary);\r\n\r\n deleteProp(adminLayerInfo, \"xssTrustedFields\");\r\n deleteProp(adminLayerInfo, \"tableName\");\r\n\r\n // Remove unnecessary properties and templatize key properties from viewLayerDefinition\r\n /* istanbul ignore else */\r\n if (adminLayerInfo.viewLayerDefinition) {\r\n const viewDef = Object.assign({}, adminLayerInfo.viewLayerDefinition);\r\n\r\n _processAdminObject(viewDef, dependencies);\r\n\r\n // Remove unnecessary properties and templatize key properties from viewLayerDefinition.table\r\n /* istanbul ignore else */\r\n if (viewDef.table) {\r\n _processAdminObject(viewDef.table, dependencies);\r\n /* istanbul ignore else */\r\n if (viewDef.table.relatedTables) {\r\n viewDef.table.relatedTables.forEach((table: any) => {\r\n _processAdminObject(table, dependencies);\r\n });\r\n }\r\n }\r\n\r\n adminLayerInfo.viewLayerDefinition = viewDef;\r\n }\r\n return adminLayerInfo;\r\n}\r\n\r\n/**\r\n * Remove sourceId and templatize the sourceServiceName\r\n *\r\n * @param object The layer to be modified\r\n * @param dependencies Array of service dependencies\r\n * @private\r\n */\r\nexport function _processAdminObject(\r\n object: any,\r\n dependencies: IDependency[]\r\n): void {\r\n deleteProp(object, \"sourceId\");\r\n if (object.hasOwnProperty(\"sourceServiceName\")) {\r\n object.sourceServiceName = _templatizeSourceServiceName(\r\n object.sourceServiceName,\r\n dependencies\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Templatize the name based on the given dependencies\r\n *\r\n * @param lookupName The current name from the source service\r\n * @param dependencies Array of IDependency for name mapping\r\n * @returns The templatized name || undefined when no matching dependency is found\r\n * @private\r\n */\r\nexport function _templatizeSourceServiceName(\r\n lookupName: string,\r\n dependencies: IDependency[]\r\n): string | string[] | undefined {\r\n const deps = dependencies.filter(\r\n dependency => dependency.name === lookupName\r\n );\r\n return deps.length === 1 ? _templatize(deps[0].id, \"name\") : undefined;\r\n}\r\n\r\n/**\r\n * templatize the fields referenced in adminLayerInfo\r\n *\r\n * @param layer the layer object with the adminLayerInfo property to templatize\r\n * @param basePath path used to de-templatize while deploying\r\n * @param itemID the id for the item that contains this layer\r\n * @private\r\n */\r\nexport function _templatizeAdminLayerInfoFields(\r\n layer: any,\r\n dependencies: IDependency[]\r\n): void {\r\n // templatize the source layer fields\r\n const table = getProp(layer, \"adminLayerInfo.viewLayerDefinition.table\");\r\n\r\n if (table) {\r\n let id: string = _getDependantItemId(table.sourceServiceName, dependencies);\r\n const path: string = id + \".layer\" + table.sourceLayerId + \".fields\";\r\n\r\n _templatizeAdminSourceLayerFields(table.sourceLayerFields || [], path);\r\n\r\n // templatize the releated table fields\r\n const relatedTables =\r\n getProp(\r\n layer,\r\n \"adminLayerInfo.viewLayerDefinition.table.relatedTables\"\r\n ) || [];\r\n\r\n if (relatedTables.length > 0) {\r\n relatedTables.forEach((t: any) => {\r\n id = _getDependantItemId(t.sourceServiceName, dependencies);\r\n const relatedPath: string = id + \".layer\" + t.sourceLayerId + \".fields\";\r\n\r\n _templatizeTopFilter(t.topFilter || {}, relatedPath);\r\n\r\n _templatizeAdminSourceLayerFields(\r\n t.sourceLayerFields || [],\r\n relatedPath\r\n );\r\n\r\n const parentKeyFields: any[] = t.parentKeyFields || [];\r\n t.parentKeyFields = parentKeyFields.map((f: any) => {\r\n return _templatize(path, f, \"name\");\r\n });\r\n\r\n const keyFields: any[] = t.keyFields || [];\r\n t.keyFields = keyFields.map((f: any) => {\r\n return _templatize(relatedPath, f, \"name\");\r\n });\r\n });\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * find id based on dependency name\r\n *\r\n * @param lookupName name of dependency we want to find the id of\r\n * @param dependencies array of item dependencies\r\n * @private\r\n */\r\nexport function _getDependantItemId(\r\n lookupName: string,\r\n dependencies: IDependency[]\r\n): string {\r\n const deps = dependencies.filter(\r\n dependency => dependency.name === lookupName\r\n );\r\n return deps.length === 1 ? deps[0].id : \"\";\r\n}\r\n\r\n/**\r\n * templatize the sourceLayerFields referenced in adminLayerInfo\r\n *\r\n * @param fields array of sourceLayerFields to templatize\r\n * @param basePath path used to de-templatize while deploying\r\n * @private\r\n */\r\nexport function _templatizeAdminSourceLayerFields(\r\n fields: any[],\r\n basePath: string\r\n): void {\r\n fields.forEach(f => _templatizeProperty(f, \"source\", basePath, \"name\"));\r\n}\r\n\r\n/**\r\n * templatize the topFilter property from adminLayerInfo related tables\r\n *\r\n * @param topFilter the topFilter object to templatize\r\n * @param basePath path used to de-templatize while deploying\r\n * @private\r\n */\r\nexport function _templatizeTopFilter(topFilter: any, basePath: string): void {\r\n /* istanbul ignore else */\r\n if (topFilter) {\r\n // templatize the orderByFields prop\r\n const orderByFields: string = topFilter[\"orderByFields\"] || \"\";\r\n /* istanbul ignore else */\r\n if (orderByFields !== \"\") {\r\n const orderByField = orderByFields.split(\" \")[0];\r\n topFilter.orderByFields = topFilter.orderByFields.replace(\r\n orderByField,\r\n _templatize(basePath, orderByField, \"name\")\r\n );\r\n }\r\n\r\n const groupByFields = topFilter[\"groupByFields\"] || \"\";\r\n /* istanbul ignore else */\r\n if (groupByFields !== \"\") {\r\n const _groupByFields = groupByFields.split(\",\");\r\n /* istanbul ignore else */\r\n if (_groupByFields.length > 0) {\r\n const mappedFields = _groupByFields.map((f: any) => {\r\n return _templatize(basePath, f, \"name\");\r\n });\r\n topFilter.groupByFields = mappedFields.join(\",\");\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * templatize the relationships key fields using the related table id in the basePath\r\n *\r\n * @param layer the layer that has the relationships to templatize\r\n * @param itemID the id of the item that contains the related table\r\n * @private\r\n */\r\nexport function _templatizeRelationshipFields(\r\n layer: any,\r\n itemID: string\r\n): void {\r\n if (layer && layer.relationships) {\r\n const relationships: any[] = layer.relationships;\r\n relationships.forEach(r => {\r\n /* istanbul ignore else */\r\n if (r.keyField) {\r\n const basePath: string = itemID + \".layer\" + layer.id + \".fields\";\r\n _templatizeProperty(r, \"keyField\", basePath, \"name\");\r\n }\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * templatize the popupInfo\r\n *\r\n * @param layerDefinition the layerDefinition that has the popupInfo to templatize\r\n * @param layer the JSON for the layer being templatized\r\n * @param basePath path used to de-templatize while deploying\r\n * @param itemID the id for the item that contains this layer\r\n * @param fieldNames array of fieldNames\r\n * @private\r\n */\r\nexport function _templatizePopupInfo(\r\n layerDefinition: any,\r\n layer: any,\r\n basePath: string,\r\n itemID: any,\r\n fieldNames: string[]\r\n): void {\r\n // the data layer does not have the fields...will need to get those\r\n // from the associated layer json\r\n if (fieldNames && layerDefinition.popupInfo) {\r\n const popupInfo: any = layerDefinition.popupInfo;\r\n _templatizeName(popupInfo, \"title\", fieldNames, basePath);\r\n _templatizeName(popupInfo, \"description\", fieldNames, basePath);\r\n\r\n const fieldInfos: any[] = popupInfo.fieldInfos || [];\r\n _templatizePopupInfoFieldInfos(fieldInfos, layer, itemID, basePath);\r\n\r\n const expressionInfos: any[] = popupInfo.expressionInfos || [];\r\n _templatizeExpressionInfos(expressionInfos, fieldNames, basePath);\r\n\r\n const popupElements: any[] = popupInfo.popupElements || [];\r\n _templatizePopupElements(\r\n popupElements,\r\n basePath,\r\n layer,\r\n itemID,\r\n fieldNames\r\n );\r\n\r\n const mediaInfos: any = popupInfo.mediaInfos || [];\r\n _templatizeMediaInfos(mediaInfos, fieldNames, basePath, layer, itemID);\r\n }\r\n}\r\n\r\n/**\r\n * templatize field name when referenced like this: \\{\\{fieldName\\}\\}\r\n * checks each field name from the layer\r\n *\r\n * @param object with the property to test for a field name\r\n * @param property that could have a field name referenced\r\n * @param fieldNames array for field names for the layer\r\n * @param basePath path used to de-templatize while deploying\r\n * @private\r\n */\r\nexport function _templatizeName(\r\n object: any,\r\n property: string,\r\n fieldNames: string[],\r\n basePath: string\r\n): void {\r\n if (object.hasOwnProperty(property)) {\r\n fieldNames.forEach(name => {\r\n // Only test and replace instance of the name so any enclosing characters\r\n // will be retained\r\n const regEx = new RegExp(\"(\\\\b\" + name + \"\\\\b(?![}]{2}))\", \"gm\");\r\n if (regEx.test(object[property])) {\r\n object[property] = object[property].replace(\r\n regEx,\r\n _templatize(basePath, name, \"name\")\r\n );\r\n }\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * templatize field name when referenced like this: \\{\\{fieldName\\}\\}\r\n * checks each field name from the layer\r\n *\r\n * @param fieldInfos object that contains the popups fieldInfos\r\n * @param layer json of layer being cloned\r\n * @param itemID id of the item that contains the current layer\r\n * @param basePath path used to de-templatize while deploying\r\n * @private\r\n */\r\nexport function _templatizePopupInfoFieldInfos(\r\n fieldInfos: any[],\r\n layer: any,\r\n itemID: any,\r\n basePath: string\r\n): void {\r\n fieldInfos.forEach((f: any) => {\r\n f.fieldName = _templatizeFieldName(f.fieldName, layer, itemID, basePath);\r\n });\r\n}\r\n\r\n/**\r\n * templatize field name when referenced like this: \\{\\{fieldName\\}\\}\r\n * checks each field name from the layer\r\n *\r\n * @param name the field name to templatize\r\n * @param layer json of layer being cloned\r\n * @param itemID id of the item that contains the current layer\r\n * @param basePath path used to de-templatize while deploying\r\n * @private\r\n */\r\nexport function _templatizeFieldName(\r\n name: string,\r\n layer: any,\r\n itemID: string,\r\n basePath: string\r\n): string {\r\n if (name.indexOf(\"relationships/\") > -1) {\r\n const rels = name.split(\"/\");\r\n const relationshipId: any = rels[1];\r\n\r\n const adminRelatedTables: any = getProp(\r\n layer,\r\n \"adminLayerInfo.viewLayerDefinition.table.relatedTables\"\r\n );\r\n\r\n const relatedTables: any[] = layer.relationships || adminRelatedTables;\r\n /* istanbul ignore else */\r\n\r\n if (relatedTables && relatedTables.length > parseInt(relationshipId, 10)) {\r\n const relatedTable: any = relatedTables[relationshipId];\r\n // the layers relationships stores the property as relatedTableId\r\n // the layers adminLayerInfo relatedTables stores the property as sourceLayerId\r\n const prop: string = getProp(relatedTable, \"relatedTableId\")\r\n ? \"relatedTableId\"\r\n : \"sourceLayerId\";\r\n const _basePath: string =\r\n itemID + \".layer\" + relatedTable[prop] + \".fields\";\r\n rels[2] = _templatize(_basePath, rels[2], \"name\");\r\n name = rels.join(\"/\");\r\n }\r\n } else {\r\n // do not need to templatize expression references as the expression\r\n // itself will be templatized\r\n if (name.indexOf(\"expression/\") === -1) {\r\n name = _templatize(basePath, name, \"name\");\r\n }\r\n }\r\n return name;\r\n}\r\n\r\n/**\r\n * templatize field name when referenced in expressionInfos\r\n *\r\n * @param expressionInfos the popups expressionInfos to check\r\n * @param fieldNames array of the layers field names\r\n * @param basePath path used to de-templatize while deploying\r\n * @private\r\n */\r\nexport function _templatizeExpressionInfos(\r\n expressionInfos: any[],\r\n fieldNames: string[],\r\n basePath: string\r\n): any[] {\r\n return expressionInfos.map((i: any) => {\r\n fieldNames.forEach(name => {\r\n i.expression = _templatizeArcadeExpressions(i.expression, name, basePath);\r\n });\r\n return i;\r\n });\r\n}\r\n\r\n/**\r\n * templatize field name when referenced in popupElelments\r\n *\r\n * @param popupElelments the popups popupElelments to check\r\n * @param basePath path used to de-templatize while deploying\r\n * @param layer json of layer being cloned\r\n * @param itemID id of the item that contains the current layer\r\n * @param fieldNames array of field names\r\n * @private\r\n */\r\nexport function _templatizePopupElements(\r\n popupElelments: any[],\r\n basePath: string,\r\n layer: any,\r\n itemID: string,\r\n fieldNames: any\r\n): void {\r\n popupElelments.forEach((pe: any) => {\r\n if (pe.hasOwnProperty(\"fieldInfos\")) {\r\n _templatizePopupInfoFieldInfos(pe.fieldInfos, layer, itemID, basePath);\r\n }\r\n\r\n if (pe.hasOwnProperty(\"mediaInfos\")) {\r\n _templatizeMediaInfos(pe.mediaInfos, fieldNames, basePath, layer, itemID);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * templatize field name when referenced in mediaInfos\r\n *\r\n * @param mediaInfos the popups mediaInfos to check\r\n * @param fieldNames array of the layers field names\r\n * @param basePath path used to de-templatize while deploying\r\n * @param layer json of layer being cloned\r\n * @param itemID id of the item that contains the current layer\r\n * @private\r\n */\r\nexport function _templatizeMediaInfos(\r\n mediaInfos: any,\r\n fieldNames: string[],\r\n basePath: string,\r\n layer: any,\r\n itemId: string\r\n): void {\r\n // templatize various properties of mediaInfos\r\n const props: string[] = [\"title\", \"caption\"];\r\n props.forEach(p => _templatizeName(mediaInfos, p, fieldNames, basePath));\r\n\r\n mediaInfos.forEach((mi: any) => {\r\n /* istanbul ignore else */\r\n if (mi.hasOwnProperty(\"value\")) {\r\n const v: any = mi.value;\r\n\r\n const vfields: any[] = v.fields || [];\r\n v.fields = vfields.map(f =>\r\n _templatizeFieldName(f, layer, itemId, basePath)\r\n );\r\n\r\n if (v.hasOwnProperty(\"normalizeField\")) {\r\n _templatizeProperty(v, \"normalizeField\", basePath, \"name\");\r\n }\r\n\r\n /* istanbul ignore else */\r\n if (v.hasOwnProperty(\"tooltipField\")) {\r\n v.tooltipField = _templatizeFieldName(\r\n v.tooltipField,\r\n layer,\r\n itemId,\r\n basePath\r\n );\r\n }\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * templatize field names when referenced in definitionEditor\r\n *\r\n * @param layer the layer with the definition editor\r\n * @param basePath path used to de-templatize while deploying\r\n * @param fieldNames json of layer being cloned\r\n * @private\r\n */\r\nexport function _templatizeDefinitionEditor(\r\n layer: any,\r\n basePath: string,\r\n fieldNames: string[]\r\n): void {\r\n if (layer) {\r\n const defEditor: any = layer.definitionEditor || {};\r\n /* istanbul ignore else */\r\n if (defEditor) {\r\n const inputs: any[] = defEditor.inputs;\r\n if (inputs) {\r\n inputs.forEach(i => {\r\n /* istanbul ignore else */\r\n if (i.parameters) {\r\n i.parameters.forEach((p: any) => {\r\n _templatizeProperty(p, \"fieldName\", basePath, \"name\");\r\n });\r\n }\r\n });\r\n }\r\n\r\n if (defEditor.hasOwnProperty(\"parameterizedExpression\")) {\r\n defEditor.parameterizedExpression = _templatizeSimpleName(\r\n defEditor.parameterizedExpression || \"\",\r\n basePath,\r\n fieldNames,\r\n \"name\"\r\n );\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * templatize field names when referenced in definitionExpression\r\n *\r\n * @param layer the layer with the definition editor\r\n * @param basePath path used to de-templatize while deploying\r\n * @param fieldNames array of field names\r\n * @private\r\n */\r\nexport function _templatizeDefinitionExpression(\r\n layer: any,\r\n basePath: string,\r\n fieldNames: string[]\r\n): void {\r\n if (layer && layer.hasOwnProperty(\"definitionExpression\")) {\r\n layer.definitionExpression = _templatizeSimpleName(\r\n layer.definitionExpression || \"\",\r\n basePath,\r\n fieldNames,\r\n \"name\"\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Case sensitive test for field names that appear anywhere within a string\r\n *\r\n * @param expression the expression to test for field name references\r\n * @param basePath path used to de-templatize while deploying\r\n * @param fieldNames array of the layers field names\r\n * @private\r\n */\r\nexport function _templatizeSimpleName(\r\n expression: string,\r\n basePath: string,\r\n fieldNames: string[],\r\n suffix: string\r\n): string {\r\n fieldNames.forEach(name => {\r\n // look for the name but not if its followed by }}\r\n const regEx = new RegExp(\"\\\\b\" + name + \"\\\\b(?![}]{2})\", \"gm\");\r\n if (expression && regEx.test(expression)) {\r\n expression = expression.replace(\r\n regEx,\r\n _templatize(basePath, name, suffix)\r\n );\r\n }\r\n });\r\n return expression;\r\n}\r\n\r\n/**\r\n * Templatize field references within a layers drawingInfo\r\n *\r\n * @param layer the data layer\r\n * @param basePath path used to de-templatize while deploying\r\n * @param fieldNames array of the layers field names\r\n * @private\r\n */\r\nexport function _templatizeDrawingInfo(\r\n layer: any,\r\n basePath: string,\r\n fieldNames: string[]\r\n): void {\r\n if (layer) {\r\n const drawingInfo: any = layer.drawingInfo;\r\n\r\n if (drawingInfo) {\r\n // templatize the renderer fields\r\n const renderer: any = drawingInfo.renderer || {};\r\n _templatizeRenderer(renderer, basePath, fieldNames);\r\n\r\n // templatize the labelingInfo\r\n const labelingInfo: any = drawingInfo.labelingInfo || [];\r\n _templatizeLabelingInfo(labelingInfo, basePath, fieldNames);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Templatize field references within a layers drawingInfo\r\n *\r\n * @param renderer the layers renderer\r\n * @param basePath path used to de-templatize while deploying\r\n * @param fieldNames array of the layers field names\r\n * @private\r\n */\r\nexport function _templatizeRenderer(\r\n renderer: any,\r\n basePath: string,\r\n fieldNames: string[]\r\n): void {\r\n switch (renderer.type) {\r\n case \"classBreaks\":\r\n case \"uniqueValue\":\r\n case \"predominance\":\r\n case \"simple\":\r\n case \"heatmap\":\r\n _templatizeGenRenderer(renderer, basePath, fieldNames);\r\n break;\r\n case \"temporal\":\r\n _templatizeTemporalRenderer(renderer, basePath, fieldNames);\r\n break;\r\n default:\r\n break;\r\n }\r\n}\r\n\r\n/**\r\n * Templatize field references within a layers renderer\r\n *\r\n * @param renderer the renderer object to check for field references\r\n * @param basePath path used to de-templatize while deploying\r\n * @param fieldNames array of field names that will be used to search expressions\r\n * @private\r\n */\r\nexport function _templatizeGenRenderer(\r\n renderer: any,\r\n basePath: string,\r\n fieldNames: string[]\r\n): void {\r\n /* istanbul ignore else */\r\n if (renderer) {\r\n // update authoringInfo\r\n const authoringInfo: any = renderer.authoringInfo;\r\n if (authoringInfo) {\r\n _templatizeAuthoringInfo(authoringInfo, basePath, fieldNames);\r\n }\r\n\r\n const props: string[] = [\"field\", \"normalizationField\"];\r\n props.forEach(p => _templatizeProperty(renderer, p, basePath, \"name\"));\r\n\r\n const fieldNameProps: string[] = [\"field1\", \"field2\", \"field3\"];\r\n fieldNameProps.forEach(fnP =>\r\n _templatizeProperty(renderer, fnP, basePath, \"name\")\r\n );\r\n\r\n // When an attribute name is specified, it's enclosed in square brackets\r\n const rExp: string = renderer.rotationExpression;\r\n if (rExp) {\r\n fieldNames.forEach(name => {\r\n const regEx = new RegExp(\"(\\\\[\" + name + \"\\\\])\", \"gm\");\r\n if (regEx.test(rExp)) {\r\n renderer.rotationExpression = rExp.replace(\r\n regEx,\r\n \"[\" + _templatize(basePath, name, \"name\") + \"]\"\r\n );\r\n }\r\n });\r\n }\r\n\r\n // update valueExpression\r\n if (renderer.valueExpression) {\r\n fieldNames.forEach(name => {\r\n renderer.valueExpression = _templatizeArcadeExpressions(\r\n renderer.valueExpression,\r\n name,\r\n basePath\r\n );\r\n });\r\n }\r\n\r\n // update visualVariables\r\n const visualVariables: any[] = renderer.visualVariables;\r\n if (visualVariables) {\r\n visualVariables.forEach(v => {\r\n props.forEach(p => _templatizeProperty(v, p, basePath, \"name\"));\r\n if (v.valueExpression) {\r\n fieldNames.forEach(name => {\r\n v.valueExpression = _templatizeArcadeExpressions(\r\n v.valueExpression,\r\n name,\r\n basePath\r\n );\r\n });\r\n }\r\n });\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Templatize field references within a layers renderer\r\n *\r\n * @param renderer the renderer object to check for field references\r\n * @param basePath path used to de-templatize while deploying\r\n * @param fieldNames array of field names that will be used to search expressions\r\n * @private\r\n */\r\nexport function _templatizeTemporalRenderer(\r\n renderer: any,\r\n basePath: string,\r\n fieldNames: string[]\r\n): void {\r\n const renderers: any[] = [\r\n renderer.latestObservationRenderer,\r\n renderer.observationRenderer,\r\n renderer.trackRenderer\r\n ];\r\n\r\n renderers.forEach(r => {\r\n _templatizeRenderer(r, basePath, fieldNames);\r\n });\r\n}\r\n\r\n/**\r\n * Templatize renderers authoringInfo\r\n *\r\n * @param authoringInfo object containing metadata about the authoring process\r\n * @param basePath path used to de-templatize while deploying\r\n * @param fieldNames the name of fields from the layer\r\n * @private\r\n */\r\nexport function _templatizeAuthoringInfo(\r\n authoringInfo: any,\r\n basePath: string,\r\n fieldNames: string[]\r\n): void {\r\n /* istanbul ignore else */\r\n if (authoringInfo) {\r\n const props: string[] = [\"field\", \"normalizationField\"];\r\n\r\n const field1: any = authoringInfo.field1;\r\n props.forEach(p => _templatizeProperty(field1, p, basePath, \"name\"));\r\n\r\n const field2: any = authoringInfo.field2;\r\n props.forEach(p => _templatizeProperty(field2, p, basePath, \"name\"));\r\n\r\n const fields: any[] = authoringInfo.fields;\r\n if (fields) {\r\n authoringInfo.fields = fields.map(f => _templatize(basePath, f, \"name\"));\r\n }\r\n\r\n const vProps: string[] = [\"endTime\", \"field\", \"startTime\"];\r\n const vVars: any = authoringInfo.visualVariables;\r\n if (vVars) {\r\n vProps.forEach(p => {\r\n // endTime and startTime may or may not be a field name\r\n if (fieldNames.indexOf(vVars[p]) > -1) {\r\n _templatizeProperty(vVars, p, basePath, \"name\");\r\n }\r\n });\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Templatize field references within an arcade expression\r\n *\r\n * @param text the text that contains the expression\r\n * @param fieldName name of the field to test for\r\n * @param basePath path used to de-templatize while deploying\r\n * @private\r\n */\r\nexport function _templatizeArcadeExpressions(\r\n text: string,\r\n fieldName: string,\r\n basePath: string\r\n): string {\r\n const t = _templatize(basePath, fieldName, \"name\");\r\n\r\n if (text) {\r\n // test for $feature. notation\r\n // captures VOTED_DEM_2012 from $feature.VOTED_DEM_2012\r\n let exp: string = \"(?:\\\\$feature\\\\.)(\" + fieldName + \")\\\\b\";\r\n let regEx = new RegExp(exp, \"gm\");\r\n text = regEx.test(text) ? text.replace(regEx, \"$feature.\" + t) : text;\r\n\r\n // test for $feature[] notation\r\n // captures VOTED_DEM_2012 from $feature[\"VOTED_DEM_2012\"]\r\n // captures VOTED_DEM_2012 from $feature['VOTED_DEM_2012']\r\n // captures VOTED_DEM_2012 from $feature[VOTED_DEM_2012]\r\n exp = \"(?:[$]feature)(\\\\[\\\\\\\"?\\\\'?)\" + fieldName + \"(\\\\\\\"?\\\\'?\\\\])\";\r\n regEx = new RegExp(exp, \"gm\");\r\n let result = regEx.exec(text);\r\n if (result) {\r\n text = text.replace(regEx, \"$feature\" + result[1] + t + result[2]);\r\n }\r\n\r\n // test for $feature[] with join case\r\n // captures VOTED_DEM_2016 from $feature[\"COUNTY_ID.VOTED_DEM_2016\"]\r\n exp =\r\n \"(?:[$]feature)(\\\\[\\\\\\\"?\\\\'?)(\\\\w+)[.]\" + fieldName + \"(\\\\\\\"?\\\\'?\\\\])\";\r\n regEx = new RegExp(exp, \"gm\");\r\n result = regEx.exec(text);\r\n if (result && result.length > 3) {\r\n // TODO result[2] is the table name...this needs to be templatized as well\r\n text = text.replace(\r\n regEx,\r\n \"$feature\" + result[1] + result[2] + \".\" + t + result[3]\r\n );\r\n }\r\n\r\n // test for \"fieldName\"\r\n // captures fieldName from \"var names = [\"fieldName\", \"fieldName2\"]...\"\r\n // captures fieldName from \"var names = ['fieldName', 'fieldName2']...\"\r\n exp = \"(\\\\\\\"|\\\\')+\" + fieldName + \"(\\\\\\\"|\\\\')+\";\r\n regEx = new RegExp(exp, \"gm\");\r\n result = regEx.exec(text);\r\n if (result) {\r\n text = text.replace(regEx, result[1] + t + result[2]);\r\n }\r\n }\r\n return text;\r\n}\r\n\r\n/**\r\n * templatize field names when referenced in the layers labelingInfo\r\n *\r\n * @param labelingInfo the object that contains the labelingInfo\r\n * @param basePath path used to de-templatize while deploying\r\n * @param fieldNames array of the layers field names\r\n * @private\r\n */\r\nexport function _templatizeLabelingInfo(\r\n labelingInfo: any,\r\n basePath: string,\r\n fieldNames: string[]\r\n): void {\r\n labelingInfo.forEach((li: any) => {\r\n /* istanbul ignore else */\r\n if (li.hasOwnProperty(\"fieldInfos\")) {\r\n const fieldInfos: any[] = li.fieldInfos || [];\r\n fieldInfos.forEach(fi =>\r\n _templatizeProperty(fi, \"fieldName\", basePath, \"name\")\r\n );\r\n }\r\n\r\n const labelExp: string = li.labelExpression || \"\";\r\n const labelExpInfo: any = li.labelExpressionInfo || {};\r\n fieldNames.forEach(n => {\r\n const t: string = _templatize(basePath, n, \"name\");\r\n\r\n // check for [fieldName] or [\"fieldName\"]\r\n const regExBracket = new RegExp('(\\\\[\\\\\"*)+(' + n + ')(\\\\\"*\\\\])+', \"gm\");\r\n let result = regExBracket.exec(labelExp);\r\n if (result) {\r\n li.labelExpression = labelExp.replace(\r\n regExBracket,\r\n result[1] + t + result[3]\r\n );\r\n }\r\n /* istanbul ignore else */\r\n if (labelExpInfo.value) {\r\n let v = labelExpInfo.value;\r\n // check for {fieldName}\r\n const regExCurly = new RegExp(\"(\\\\{\" + n + \"\\\\})\", \"gm\");\r\n v = regExCurly.test(v) ? v.replace(regExCurly, \"{\" + t + \"}\") : v;\r\n\r\n // check for [fieldName] or [\"fieldName\"]\r\n result = regExBracket.exec(v);\r\n v = result ? v.replace(regExBracket, result[1] + t + result[3]) : v;\r\n\r\n li.labelExpressionInfo.value = v;\r\n }\r\n /* istanbul ignore else */\r\n if (labelExpInfo.expression) {\r\n li.labelExpressionInfo.expression = _templatizeArcadeExpressions(\r\n labelExpInfo.expression,\r\n n,\r\n basePath\r\n );\r\n }\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * templatize the layers editing templates\r\n *\r\n * @param layer the data layer being cloned\r\n * @param basePath path used to de-templatize while deploying\r\n * @private\r\n */\r\nexport function _templatizeTemplates(layer: any, basePath: string): void {\r\n const templates: any[] = layer.templates || [];\r\n templates.forEach(t => {\r\n const attributes: any = getProp(t, \"prototype.attributes\");\r\n const _attributes: any = _templatizeKeys(attributes, basePath, \"name\");\r\n /* istanbul ignore else */\r\n if (_attributes) {\r\n t.prototype.attributes = _attributes;\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * templatize the layer types and templates\r\n *\r\n * @param layer the data layer being cloned\r\n * @param basePath path used to de-templatize while deploying\r\n * @private\r\n */\r\nexport function _templatizeTypeTemplates(layer: any, basePath: string): void {\r\n const types: any[] = layer.types;\r\n if (types && Array.isArray(types) && types.length > 0) {\r\n types.forEach((type: any) => {\r\n const domains: any = _templatizeKeys(type.domains, basePath, \"name\");\r\n /* istanbul ignore else */\r\n if (domains) {\r\n type.domains = domains;\r\n }\r\n\r\n const templates: any[] = type.templates;\r\n /* istanbul ignore else */\r\n if (templates && templates.length > 0) {\r\n templates.forEach((t: any) => {\r\n const attributes = getProp(t, \"prototype.attributes\");\r\n const _attributes: any = _templatizeKeys(\r\n attributes,\r\n basePath,\r\n \"name\"\r\n );\r\n /* istanbul ignore else */\r\n if (_attributes) {\r\n t.prototype.attributes = _attributes;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * templatize object keys\r\n *\r\n * @param obj the object to templatize\r\n * @param basePath path used to de-templatize while deploying\r\n * @param suffix expected suffix for template variable\r\n * @private\r\n */\r\nexport function _templatizeKeys(\r\n obj: any,\r\n basePath: string,\r\n suffix: string\r\n): any {\r\n let _obj: any;\r\n /* istanbul ignore else */\r\n if (obj) {\r\n _obj = {};\r\n const objKeys: string[] = Object.keys(obj);\r\n /* istanbul ignore else */\r\n if (objKeys && objKeys.length > 0) {\r\n objKeys.forEach(k => {\r\n _obj[_templatize(basePath, k, suffix)] = obj[k];\r\n });\r\n }\r\n }\r\n\r\n return _obj;\r\n}\r\n\r\n/**\r\n * templatize fields referenced in the layers time info\r\n *\r\n * @param layer the data layer being cloned\r\n * @param basePath path used to de-templatize while deploying\r\n * @private\r\n */\r\nexport function _templatizeTimeInfo(layer: any, basePath: string): void {\r\n if (layer.timeInfo) {\r\n const timeInfo: any = layer.timeInfo;\r\n const timeProps: string[] = [\r\n \"endTimeField\",\r\n \"startTimeField\",\r\n \"trackIdField\"\r\n ];\r\n timeProps.forEach(t => {\r\n if (timeInfo[t] !== \"\") {\r\n _templatizeProperty(timeInfo, t, basePath, \"name\");\r\n } else {\r\n timeInfo[t] = null;\r\n }\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * templatize the layers definition query\r\n *\r\n * @param layer the data layer being cloned\r\n * @param basePath path used to de-templatize while deploying\r\n * @param fieldNames array of the layers field names\r\n * @private\r\n */\r\nexport function _templatizeDefinitionQuery(\r\n layer: any,\r\n basePath: string,\r\n fieldNames: string[]\r\n): void {\r\n // templatize view definition query\r\n if (layer && layer.hasOwnProperty(\"viewDefinitionQuery\")) {\r\n layer.viewDefinitionQuery = _templatizeSimpleName(\r\n layer.viewDefinitionQuery || \"\",\r\n basePath,\r\n fieldNames,\r\n \"name\"\r\n );\r\n }\r\n if (layer && layer.hasOwnProperty(\"definitionQuery\")) {\r\n layer.definitionQuery = _templatizeSimpleName(\r\n layer.definitionQuery || \"\",\r\n basePath,\r\n fieldNames,\r\n \"name\"\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Helper function to create the name mapping used to\r\n * de-templatize the field reference\r\n *\r\n * @param fieldInfos the object that stores the cached information\r\n * @param id the id for the current layer being processed\r\n * @private\r\n */\r\nexport function _getNameMapping(fieldInfos: any, id: string): any {\r\n // create name mapping\r\n const fInfo: any = fieldInfos[id];\r\n const nameMapping: IStringValuePair = {};\r\n const newFields = fInfo.newFields;\r\n const newFieldNames: string[] = newFields\r\n ? newFields.map((f: any) => f.name)\r\n : [];\r\n const sourceFields: any[] = fInfo.sourceFields || [];\r\n sourceFields.forEach((field: any) => {\r\n const lName = String(field.name).toLowerCase();\r\n newFields.forEach((f: any) => {\r\n // Names can change more than case\r\n if (\r\n newFieldNames.indexOf(field.name) === -1 &&\r\n newFieldNames.indexOf(lName) === -1\r\n ) {\r\n // If both new (f) and source (field) aliases are defined and are equal, map the source name to the new name\r\n if (f.alias && f.alias === field.alias) {\r\n nameMapping[lName] = {\r\n name: f.name,\r\n alias: f.alias,\r\n type: f.type ? f.type : \"\"\r\n };\r\n }\r\n }\r\n if (String(f.name).toLowerCase() === lName) {\r\n nameMapping[lName] = {\r\n name: f.name,\r\n alias: f.alias ? f.alias : \"\",\r\n type: f.type ? f.type : \"\"\r\n };\r\n }\r\n });\r\n });\r\n\r\n // update for editFieldsInfo\r\n if (fInfo.editFieldsInfo && fInfo.newEditFieldsInfo) {\r\n const efi: any = JSON.parse(JSON.stringify(fInfo.editFieldsInfo));\r\n const newEfi: any = JSON.parse(JSON.stringify(fInfo.newEditFieldsInfo));\r\n const nameMappingKeys: string[] = Object.keys(nameMapping);\r\n Object.keys(efi).forEach(k => {\r\n const lowerEfi: string = String(efi[k]).toLowerCase();\r\n if (\r\n (nameMappingKeys.indexOf(lowerEfi) === -1 ||\r\n nameMapping[lowerEfi].name !== newEfi[k]) &&\r\n newFieldNames.indexOf(lowerEfi) > -1\r\n ) {\r\n // Only add delete fields if source schema changes allowed\r\n /* istanbul ignore else */\r\n if (fInfo.sourceSchemaChangesAllowed && !fInfo.isView) {\r\n /* istanbul ignore else */\r\n if (!fInfo.hasOwnProperty(\"deleteFields\")) {\r\n fInfo.deleteFields = [];\r\n }\r\n // This issue only occurs on portal so we\r\n // need to delete the lcase version of the field\r\n fInfo.deleteFields.push(lowerEfi);\r\n }\r\n\r\n // editFieldsInfo only has the name and not the alias and type\r\n let sourceEfiField: any;\r\n fInfo.sourceFields.some((sf: any) => {\r\n if (sf.name === efi[k]) {\r\n sourceEfiField = sf;\r\n }\r\n return sf.name === efi[k];\r\n });\r\n nameMapping[lowerEfi] = {\r\n name: newEfi[k],\r\n alias:\r\n sourceEfiField && sourceEfiField.alias ? sourceEfiField.alias : \"\",\r\n type: sourceEfiField && sourceEfiField.type ? sourceEfiField.type : \"\"\r\n };\r\n }\r\n });\r\n\r\n deleteProp(fInfo, \"sourceSchemaChangesAllowed\");\r\n deleteProp(fInfo, \"editFieldsInfo\");\r\n deleteProp(fInfo, \"newEditFieldsInfo\");\r\n deleteProp(fInfo, \"isView\");\r\n }\r\n return nameMapping;\r\n}\r\n\r\n//#endregion\r\n\r\nexport interface IPopupInfos {\r\n layers: INumberValuePair;\r\n tables: INumberValuePair;\r\n}\r\n\r\n/**\r\n * Helper function to ensure same chunk size value is used in multiple locations\r\n *\r\n * @returns a number that represents how many layers should be included per addToDef call\r\n * @private\r\n */\r\nexport function _getLayerChunkSize() {\r\n return 20;\r\n}\r\n","/** @license\r\n * Copyright 2020 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/**\r\n * Provides general helper functions.\r\n *\r\n * @module workforceHelpers\r\n */\r\n\r\nimport { applyEdits, queryFeatures } from \"@esri/arcgis-rest-feature-layer\";\r\nimport {\r\n getIDs,\r\n getProp,\r\n fail,\r\n idTest,\r\n regExTest,\r\n setProp\r\n} from \"./generalHelpers\";\r\nimport {\r\n IItemTemplate,\r\n IFeatureServiceProperties,\r\n UserSession\r\n} from \"./interfaces\";\r\nimport { rest_request } from \"./restHelpers\";\r\nimport { templatizeTerm, replaceInTemplate } from \"./templatization\";\r\nimport { cacheLayerInfo } from \"./featureServiceHelpers\";\r\n\r\n//#region workforce v1\r\n\r\n/**\r\n * Converts an workforce item to a template.\r\n *\r\n * @param itemTemplate template for the workforce project item\r\n * @param authentication credentials for any requests\r\n * @param templateDictionary Hash of key details used for variable replacement\r\n * @returns templatized itemTemplate\r\n */\r\nexport function convertWorkforceItemToTemplate(\r\n itemTemplate: IItemTemplate,\r\n authentication: UserSession,\r\n templateDictionary: any\r\n): Promise<IItemTemplate> {\r\n return new Promise<IItemTemplate>((resolve, reject) => {\r\n // This function is specific to workforce v1 project structure\r\n // Key properties that contain item IDs for the workforce project type\r\n const keyProperties: string[] = getKeyWorkforceProperties(1);\r\n\r\n // The templates data to process\r\n const data: any = itemTemplate.data;\r\n\r\n if (data) {\r\n // Extract dependencies\r\n extractWorkforceDependencies(data, keyProperties, authentication).then(\r\n results => {\r\n itemTemplate.dependencies = results.dependencies;\r\n // templatize key properties\r\n itemTemplate.data = templatizeWorkforce(\r\n data,\r\n keyProperties,\r\n results.urlHash,\r\n templateDictionary\r\n );\r\n resolve(itemTemplate);\r\n },\r\n e => reject(fail(e))\r\n );\r\n } else {\r\n resolve(itemTemplate);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Gets the ids of the dependencies of the workforce project.\r\n *\r\n * @param data itemTemplate data\r\n * @param keyProperties workforce project properties that contain references to dependencies\r\n * @param authentication credentials for any requests\r\n * @returns List of dependencies ids\r\n */\r\nexport function extractWorkforceDependencies(\r\n data: any,\r\n keyProperties: string[],\r\n authentication: UserSession\r\n): Promise<any> {\r\n return new Promise<any>((resolve, reject) => {\r\n const deps: string[] = [];\r\n\r\n // get the ids for the service dependencies\r\n // \"workerWebMapId\" and \"dispatcherWebMapId\" are already IDs and don't have a serviceItemId\r\n keyProperties.forEach(p => {\r\n const serviceItemId: string = getProp(data, p + \".serviceItemId\");\r\n const v: string = getProp(data, p);\r\n if (serviceItemId) {\r\n if (deps.indexOf(serviceItemId) === -1) {\r\n deps.push(serviceItemId);\r\n }\r\n } else {\r\n idTest(v, deps);\r\n }\r\n });\r\n\r\n if (getProp(data, \"assignmentIntegrations\")) {\r\n let requests: Array<Promise<any>> = [];\r\n let urls: string[] = [];\r\n data.assignmentIntegrations.forEach((ai: any) => {\r\n if (ai.assignmentTypes) {\r\n const assignmentKeys: string[] = Object.keys(ai.assignmentTypes);\r\n assignmentKeys.forEach(k => {\r\n const urlTemplate: any = ai.assignmentTypes[k].urlTemplate;\r\n idTest(urlTemplate, deps);\r\n const serviceRequests: any = urlTest(urlTemplate, authentication);\r\n if (\r\n Array.isArray(serviceRequests.requests) &&\r\n serviceRequests.requests.length > 0\r\n ) {\r\n requests = requests.concat(serviceRequests.requests);\r\n urls = urls.concat(serviceRequests.urls);\r\n }\r\n });\r\n }\r\n });\r\n\r\n if (requests.length > 0) {\r\n Promise.all(requests).then(\r\n results => {\r\n const urlHash: any = {};\r\n // Get the serviceItemId for the url\r\n /* istanbul ignore else */\r\n if (Array.isArray(results)) {\r\n results.forEach((result, i) => {\r\n /* istanbul ignore else */\r\n if (result.serviceItemId) {\r\n urlHash[urls[i]] = result.serviceItemId;\r\n /* istanbul ignore else */\r\n if (deps.indexOf(result.serviceItemId) === -1) {\r\n deps.push(result.serviceItemId);\r\n }\r\n }\r\n });\r\n }\r\n resolve({\r\n dependencies: deps,\r\n urlHash: urlHash\r\n });\r\n },\r\n e => reject(fail(e))\r\n );\r\n } else {\r\n resolve({\r\n dependencies: deps,\r\n urlHash: {}\r\n });\r\n }\r\n } else {\r\n resolve({\r\n dependencies: deps,\r\n urlHash: {}\r\n });\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Templatizes key item properties.\r\n *\r\n * @param data itemTemplate data\r\n * @param keyProperties workforce project properties that should be templatized\r\n * @param urlHash a key value pair of url and itemId\r\n * @param templateDictionary Hash of key details used for variable replacement\r\n * @returns an updated data object to be stored in the template\r\n */\r\nexport function templatizeWorkforce(\r\n data: any,\r\n keyProperties: string[],\r\n urlHash: any,\r\n templateDictionary: any\r\n): any {\r\n keyProperties.forEach(p => {\r\n /* istanbul ignore else */\r\n if (getProp(data, p)) {\r\n if (getProp(data[p], \"serviceItemId\")) {\r\n // templatize properties with id and url\r\n const id: string = data[p].serviceItemId;\r\n let serviceItemIdSuffix: string = \".itemId\";\r\n\r\n /* istanbul ignore else */\r\n if (getProp(data[p], \"url\")) {\r\n const layerId = getLayerId(data[p].url);\r\n cacheLayerInfo(layerId, id, data[p].url, templateDictionary);\r\n data[p].url = templatizeTerm(\r\n id,\r\n id,\r\n getReplaceValue(layerId, \".url\")\r\n );\r\n serviceItemIdSuffix = getReplaceValue(layerId, serviceItemIdSuffix);\r\n }\r\n data[p].serviceItemId = templatizeTerm(id, id, serviceItemIdSuffix);\r\n } else {\r\n // templatize simple id properties\r\n data[p] = templatizeTerm(data[p], data[p], \".itemId\");\r\n }\r\n }\r\n });\r\n\r\n data[\"folderId\"] = \"{{folderId}}\";\r\n\r\n // templatize app integrations\r\n const integrations: any[] = data.assignmentIntegrations || [];\r\n integrations.forEach(i => {\r\n _templatizeUrlTemplate(i, urlHash);\r\n /* istanbul ignore else */\r\n if (i.assignmentTypes) {\r\n const assignmentKeys: string[] = Object.keys(i.assignmentTypes);\r\n assignmentKeys.forEach(k => {\r\n _templatizeUrlTemplate(i.assignmentTypes[k], urlHash);\r\n });\r\n }\r\n });\r\n return data;\r\n}\r\n\r\n//#endregion\r\n\r\n/**\r\n * Evaluate key properties in the workforce service of additional items that are needed\r\n *\r\n * @param itemTemplate template for the workforce project item\r\n * @param dependencies list of the items dependencies\r\n * @returns an array of objects with dependency ids\r\n */\r\nexport function getWorkforceDependencies(\r\n itemTemplate: IItemTemplate,\r\n dependencies: any[]\r\n): any {\r\n const properties: any = itemTemplate.item.properties || {};\r\n const keyProperties: string[] = getKeyWorkforceProperties(2);\r\n dependencies = keyProperties.reduce(function(acc, v) {\r\n /* istanbul ignore else */\r\n if (properties[v] && dependencies.indexOf(properties[v]) < 0) {\r\n acc.push(properties[v]);\r\n }\r\n return acc;\r\n }, dependencies);\r\n\r\n // We also need the dependencies listed in the Assignment Integrations table\r\n const infos: any = getProp(\r\n itemTemplate,\r\n \"properties.workforceInfos.assignmentIntegrationInfos\"\r\n );\r\n /* istanbul ignore else */\r\n if (infos && infos.length > 0) {\r\n infos.forEach((info: any) => {\r\n const infoKeys = Object.keys(info);\r\n /* istanbul ignore else */\r\n if (infoKeys.indexOf(\"dependencies\") > -1) {\r\n info[\"dependencies\"].forEach((d: string) => {\r\n /* istanbul ignore else */\r\n if (dependencies.indexOf(d) < 0) {\r\n dependencies.push(d);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n return dependencies.map(d => {\r\n return { id: d, name: \"\" };\r\n });\r\n}\r\n\r\nexport function getWorkforceServiceInfo(\r\n properties: IFeatureServiceProperties,\r\n url: string,\r\n authentication: UserSession\r\n): Promise<IFeatureServiceProperties> {\r\n return new Promise<IFeatureServiceProperties>((resolve, reject) => {\r\n url = url.replace(\"/rest/admin/services\", \"/rest/services\");\r\n url = _updateUrl(url);\r\n const requests: any[] = [\r\n queryFeatures({\r\n url: `${url}3`,\r\n where: \"1=1\",\r\n authentication\r\n }),\r\n queryFeatures({\r\n url: `${url}4`,\r\n where: \"1=1\",\r\n authentication\r\n })\r\n ];\r\n\r\n Promise.all(requests).then(\r\n responses => {\r\n const [assignmentTypes, assignmentIntegrations] = responses;\r\n\r\n properties.workforceInfos = {\r\n assignmentTypeInfos: _getAssignmentTypeInfos(assignmentTypes)\r\n };\r\n\r\n _getAssignmentIntegrationInfos(\r\n assignmentIntegrations,\r\n authentication\r\n ).then(\r\n results => {\r\n properties.workforceInfos[\"assignmentIntegrationInfos\"] = results;\r\n _updateGlobalIdAndAssignmentType(properties.workforceInfos);\r\n resolve(properties);\r\n },\r\n e => reject(fail(e))\r\n );\r\n },\r\n e => reject(fail(e))\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Wrap global id and assignmenttype values in curly braces\r\n *\r\n * Added for issue #734\r\n *\r\n * This function will update the provided workforceInfos object\r\n *\r\n * @param workforceInfos the object that stores the integration and type info with global ids\r\n * @private\r\n */\r\nexport function _updateGlobalIdAndAssignmentType(\r\n workforceInfos: any\r\n): void {\r\n const updateId = (i: any) => {\r\n /* istanbul ignore else */\r\n if (i[\"GlobalID\"]) {\r\n i[\"GlobalID\"] = `{${i[\"GlobalID\"]}}`;\r\n }\r\n /* istanbul ignore else */\r\n if (i[\"assignmenttype\"]) {\r\n i[\"assignmenttype\"] = `{${i[\"assignmenttype\"]}}`;\r\n }\r\n return i;\r\n };\r\n\r\n const assignmentIntegrationInfos: any = getProp(workforceInfos, \"assignmentIntegrationInfos\");\r\n /* istanbul ignore else */\r\n if (assignmentIntegrationInfos && Array.isArray(assignmentIntegrationInfos)) {\r\n setProp(\r\n workforceInfos,\r\n \"assignmentIntegrationInfos\",\r\n assignmentIntegrationInfos.map(updateId)\r\n );\r\n }\r\n\r\n const assignmentTypeInfos: any = getProp(workforceInfos, \"assignmentTypeInfos\");\r\n /* istanbul ignore else */\r\n if (assignmentTypeInfos && Array.isArray(assignmentTypeInfos)) {\r\n setProp(\r\n workforceInfos,\r\n \"assignmentTypeInfos\",\r\n assignmentTypeInfos.map(updateId)\r\n );\r\n }\r\n}\r\n\r\n//???\r\nexport function _getAssignmentTypeInfos(assignmentTypes: any): any[] {\r\n // Assignment Types\r\n const assignmentTypeInfos: any[] = [];\r\n const keyAssignmentTypeProps = [\r\n \"description\",\r\n assignmentTypes.globalIdFieldName\r\n ];\r\n assignmentTypes.features.forEach((f: any) => {\r\n const info = {};\r\n keyAssignmentTypeProps.forEach(p => {\r\n info[p] = f.attributes[p];\r\n });\r\n assignmentTypeInfos.push(info);\r\n });\r\n return assignmentTypeInfos;\r\n}\r\n\r\n//???\r\nexport function _getAssignmentIntegrationInfos(\r\n assignmentIntegrations: any,\r\n authentication: UserSession\r\n): Promise<any> {\r\n return new Promise<any>((resolve, reject) => {\r\n let requests: Array<Promise<any>> = [];\r\n let urls: string[] = [];\r\n const assignmentIntegrationInfos: any[] = [];\r\n const keyAssignmentIntegrationsProps = [\r\n \"appid\",\r\n assignmentIntegrations.globalIdFieldName,\r\n \"prompt\",\r\n \"urltemplate\",\r\n \"assignmenttype\"\r\n ];\r\n assignmentIntegrations.features.forEach((f: any) => {\r\n const info = {};\r\n keyAssignmentIntegrationsProps.forEach(p => {\r\n info[p] = f.attributes[p];\r\n /* istanbul ignore else */\r\n if (p === \"urltemplate\") {\r\n const urlTemplate = f.attributes[p];\r\n const ids: string[] = getIDs(urlTemplate);\r\n info[\"dependencies\"] = ids;\r\n const serviceRequests: any = urlTest(urlTemplate, authentication);\r\n /* istanbul ignore else */\r\n if (\r\n Array.isArray(serviceRequests.requests) &&\r\n serviceRequests.requests.length > 0\r\n ) {\r\n requests = requests.concat(serviceRequests.requests);\r\n urls = urls.concat(serviceRequests.urls);\r\n }\r\n }\r\n });\r\n assignmentIntegrationInfos.push(info);\r\n });\r\n\r\n getUrlDependencies(requests, urls).then(\r\n results => {\r\n assignmentIntegrationInfos.forEach(ai => {\r\n _templatizeUrlTemplate(ai, results.urlHash);\r\n });\r\n\r\n resolve(assignmentIntegrationInfos);\r\n },\r\n e => reject(fail(e))\r\n );\r\n });\r\n}\r\n\r\nexport function getUrlDependencies(\r\n requests: Array<Promise<any>>,\r\n urls: string[]\r\n): Promise<any> {\r\n return new Promise<any>((resolve, reject) => {\r\n const dependencies: any[] = [];\r\n if (requests.length > 0) {\r\n Promise.all(requests).then(\r\n results => {\r\n const urlHash: any = {};\r\n // Get the serviceItemId for the url\r\n /* istanbul ignore else */\r\n if (Array.isArray(results)) {\r\n results.forEach((result, i) => {\r\n /* istanbul ignore else */\r\n if (result.serviceItemId) {\r\n urlHash[urls[i]] = result.serviceItemId;\r\n /* istanbul ignore else */\r\n if (dependencies.indexOf(result.serviceItemId) === -1) {\r\n dependencies.push(result.serviceItemId);\r\n }\r\n }\r\n });\r\n }\r\n resolve({\r\n dependencies,\r\n urlHash\r\n });\r\n },\r\n e => reject(fail(e))\r\n );\r\n } else {\r\n resolve({\r\n dependencies,\r\n urlHash: {}\r\n });\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Templatizes values from a urlTemplate\r\n *\r\n * @param item the object that may contain a urlTemplate\r\n * @param urlHash a key value pair of url and itemId\r\n * @private\r\n */\r\nexport function _templatizeUrlTemplate(item: any, urlHash: any): void {\r\n // v1 uses urlTemplate\r\n // v2 uses urltemplate\r\n const urlTemplateVar = getProp(item, \"urlTemplate\")\r\n ? \"urlTemplate\"\r\n : \"urltemplate\";\r\n let urlTemplate = getProp(item, urlTemplateVar);\r\n\r\n /* istanbul ignore else */\r\n if (urlTemplate) {\r\n const ids: string[] = getIDs(urlTemplate);\r\n ids.forEach(id => {\r\n urlTemplate = urlTemplate.replace(id, templatizeTerm(id, id, \".itemId\"));\r\n });\r\n\r\n const urls: string[] = _getURLs(urlTemplate);\r\n urls.forEach(url => {\r\n const layerId = getLayerId(url);\r\n const replaceValue: string = getReplaceValue(layerId, \".url\");\r\n const id = urlHash[url];\r\n /* istanbul ignore else */\r\n if (\r\n Array.isArray(item.dependencies) &&\r\n item.dependencies.indexOf(id) < 0\r\n ) {\r\n item.dependencies.push(id);\r\n }\r\n urlTemplate = urlTemplate.replace(\r\n url,\r\n templatizeTerm(id, id, replaceValue)\r\n );\r\n });\r\n\r\n setProp(item, urlTemplateVar, urlTemplate);\r\n }\r\n}\r\n\r\nexport function getLayerId(url: string): any {\r\n return url.indexOf(\"FeatureServer/\") > -1\r\n ? url.substr(url.lastIndexOf(\"/\") + 1)\r\n : undefined;\r\n}\r\n\r\nexport function getReplaceValue(layerId: any, suffix: string): string {\r\n return isNaN(Number.parseInt(layerId, 10))\r\n ? `${suffix}`\r\n : `.layer${layerId}${suffix}`;\r\n}\r\n\r\nexport function postProcessWorkforceTemplates(\r\n templates: IItemTemplate[]\r\n): IItemTemplate[] {\r\n const groupUpdates: any = {};\r\n const _templates = templates.map(t => {\r\n // templatize Workforce Project\r\n t = _templatizeWorkforceProject(t, groupUpdates);\r\n\r\n // templatize Workforce Dispatcher\r\n t = _templatizeWorkforceDispatcherOrWorker(t, \"Workforce Dispatcher\");\r\n\r\n // templatize Workforce Worker\r\n t = _templatizeWorkforceDispatcherOrWorker(t, \"Workforce Worker\");\r\n\r\n return t;\r\n });\r\n\r\n return _templates.map(t => {\r\n if (groupUpdates[t.itemId]) {\r\n t.dependencies = t.dependencies.concat(groupUpdates[t.itemId]);\r\n }\r\n return t;\r\n });\r\n}\r\n\r\n//???\r\nexport function _templatizeWorkforceProject(\r\n t: IItemTemplate,\r\n groupUpdates: any\r\n): any {\r\n /* istanbul ignore else */\r\n if (isWorkforceProject(t)) {\r\n const properties: any = t.item.properties || {};\r\n const keyProperties: string[] = getKeyWorkforceProperties(2);\r\n\r\n const groupId: string = properties[\"workforceProjectGroupId\"];\r\n const shuffleIds: string[] = [];\r\n Object.keys(properties).forEach((p: any) => {\r\n /* istanbul ignore else */\r\n if (keyProperties.indexOf(p) > -1) {\r\n const id: string = properties[p];\r\n /* istanbul ignore else */\r\n if (id !== groupId) {\r\n shuffleIds.push(id);\r\n }\r\n t.item.properties[p] = templatizeTerm(\r\n properties[p],\r\n properties[p],\r\n \".itemId\"\r\n );\r\n }\r\n });\r\n\r\n // update the dependencies\r\n t.dependencies = t.dependencies.filter(\r\n (d: string) => d !== groupId && shuffleIds.indexOf(d) < 0\r\n );\r\n\r\n // shuffle and cleanup\r\n const workforceInfos = getProp(t, \"properties.workforceInfos\");\r\n /* istanbul ignore else */\r\n if (workforceInfos) {\r\n Object.keys(workforceInfos).forEach(k => {\r\n workforceInfos[k].forEach((wInfo: any) => {\r\n /* istanbul ignore else */\r\n if (wInfo.dependencies) {\r\n wInfo.dependencies.forEach((id: string) => {\r\n /* istanbul ignore else */\r\n if (shuffleIds.indexOf(id) < 0) {\r\n shuffleIds.push(id);\r\n }\r\n const depIndex = t.dependencies.indexOf(id);\r\n /* istanbul ignore else */\r\n if (depIndex > -1) {\r\n t.dependencies.splice(depIndex, 1);\r\n }\r\n });\r\n delete wInfo.dependencies;\r\n }\r\n });\r\n });\r\n }\r\n\r\n // move the dependencies to the group\r\n groupUpdates[groupId] = shuffleIds;\r\n }\r\n return t;\r\n}\r\n\r\n//???\r\nexport function _templatizeWorkforceDispatcherOrWorker(\r\n t: IItemTemplate,\r\n type: string\r\n): IItemTemplate {\r\n /* istanbul ignore else */\r\n if ((t.item.typeKeywords || []).indexOf(type) > -1) {\r\n const properties: any = t.item.properties || {};\r\n const fsId = properties[\"workforceFeatureServiceId\"];\r\n /* istanbul ignore else */\r\n if (fsId) {\r\n t.item.properties[\"workforceFeatureServiceId\"] = templatizeTerm(\r\n fsId,\r\n fsId,\r\n \".itemId\"\r\n );\r\n }\r\n }\r\n return t;\r\n}\r\n\r\n// Helpers\r\nexport function isWorkforceProject(itemTemplate: IItemTemplate): boolean {\r\n return (\r\n (itemTemplate.item.typeKeywords || []).indexOf(\"Workforce Project\") > -1\r\n );\r\n}\r\n\r\nexport function getKeyWorkforceProperties(version: number): string[] {\r\n return version === 1\r\n ? [\r\n \"groupId\",\r\n \"workerWebMapId\",\r\n \"dispatcherWebMapId\",\r\n \"dispatchers\",\r\n \"assignments\",\r\n \"workers\",\r\n \"tracks\"\r\n ]\r\n : [\r\n \"workforceDispatcherMapId\",\r\n \"workforceProjectGroupId\",\r\n \"workforceWorkerMapId\"\r\n ];\r\n}\r\n\r\n/**\r\n * Test the provided value for any urls and submit a request to obtain the service item id for the url\r\n *\r\n * @param v a string value to test for urls\r\n * @param authentication credentials for the requests\r\n * @returns an object with any pending requests and the urls that requests were made to\r\n */\r\nexport function urlTest(v: any, authentication: UserSession): any {\r\n const urls: any[] = _getURLs(v);\r\n const requests: Array<Promise<any>> = [];\r\n urls.forEach(url => {\r\n const options: any = {\r\n f: \"json\",\r\n authentication: authentication\r\n };\r\n requests.push(rest_request(url, options));\r\n });\r\n return {\r\n requests: requests,\r\n urls: urls\r\n };\r\n}\r\n\r\n//???\r\nexport function _getURLs(v: string): string[] {\r\n return regExTest(v, /=(http.*?FeatureServer.*?(?=&|$))/gi).map(_v =>\r\n _v.replace(\"=\", \"\")\r\n );\r\n}\r\n\r\n//#region Deploy Process ---------------------------------------------------------------------------------------//\r\n\r\n/**\r\n * Gets the current user and updates the dispatchers service\r\n *\r\n * @param newlyCreatedItem Item to be created; n.b.: this item is modified\r\n * @param destinationAuthentication The session used to create the new item(s)\r\n * @returns A promise that will resolve with \\{ \"success\" === true || false \\}\r\n */\r\nexport function fineTuneCreatedWorkforceItem(\r\n newlyCreatedItem: IItemTemplate,\r\n destinationAuthentication: UserSession,\r\n url: string,\r\n templateDictionary: any\r\n): Promise<any> {\r\n return new Promise<any>((resolve, reject) => {\r\n destinationAuthentication.getUser().then(\r\n user => {\r\n // update url with slash if necessary\r\n url = _updateUrl(url);\r\n // Dispatchers...index 2 for workforce v2\r\n // for v1 we need tp fetch from dispatchers for v2 we use the items url\r\n const dispatchers = getProp(newlyCreatedItem, \"data.dispatchers\");\r\n // add current user as dispatcher\r\n _updateDispatchers(\r\n dispatchers && dispatchers.url ? dispatchers.url : `${url}2`,\r\n user.username || \"\",\r\n user.fullName || \"\",\r\n destinationAuthentication,\r\n templateDictionary.isPortal\r\n ).then(\r\n results => {\r\n // for workforce v2 we storce the key details from the workforce service as workforceInfos\r\n // now we need to detemplatize it and update the workforce service\r\n let workforceInfos: any = getProp(\r\n newlyCreatedItem,\r\n \"properties.workforceInfos\"\r\n );\r\n if (workforceInfos && url) {\r\n workforceInfos = replaceInTemplate(\r\n workforceInfos,\r\n templateDictionary\r\n );\r\n\r\n _getFields(url, [2, 3, 4], destinationAuthentication).then(\r\n fields => {\r\n // Assignment Types...index 3\r\n const assignmentTypeUrl = `${url}3`;\r\n const assignmentTypeInfos =\r\n workforceInfos.assignmentTypeInfos;\r\n const assignmentTypeFeatures = _getAddFeatures(\r\n assignmentTypeInfos,\r\n fields[assignmentTypeUrl]\r\n );\r\n\r\n const assignmentTypePromise = _applyEdits(\r\n assignmentTypeUrl,\r\n assignmentTypeFeatures,\r\n destinationAuthentication,\r\n true\r\n );\r\n\r\n // Assignment Integrations...index 4\r\n const assignmentIntegrationUrl = `${url}4`;\r\n const assignmentIntegrationInfos =\r\n workforceInfos.assignmentIntegrationInfos;\r\n const assignmentIntegrationFeatures = _getAddFeatures(\r\n assignmentIntegrationInfos,\r\n fields[assignmentIntegrationUrl]\r\n );\r\n const assignmentIntegrationPromise = _applyEdits(\r\n assignmentIntegrationUrl,\r\n assignmentIntegrationFeatures,\r\n destinationAuthentication,\r\n true\r\n );\r\n\r\n Promise.all([\r\n assignmentTypePromise,\r\n assignmentIntegrationPromise\r\n ]).then(resolve, reject);\r\n },\r\n e => reject(fail(e))\r\n );\r\n } else {\r\n resolve({ success: results });\r\n }\r\n },\r\n e => reject(fail(e))\r\n );\r\n },\r\n e => reject(fail(e))\r\n );\r\n });\r\n}\r\n\r\n//???\r\nexport function _getFields(\r\n url: string,\r\n ids: number[],\r\n authentication: UserSession\r\n): Promise<any> {\r\n return new Promise<any>((resolve, reject) => {\r\n const options: any = {\r\n f: \"json\",\r\n fields: \"*\",\r\n authentication: authentication\r\n };\r\n url = _updateUrl(url);\r\n const promises: any[] = [];\r\n ids.forEach(id => {\r\n promises.push(rest_request(`${url}${id}`, options));\r\n });\r\n Promise.all(promises).then(\r\n results => {\r\n const finalResult: any = {};\r\n results.forEach(r => {\r\n finalResult[`${url}${r.id}`] = r.fields.map((f: any) => f.name);\r\n });\r\n resolve(finalResult);\r\n },\r\n e => reject(fail(e))\r\n );\r\n });\r\n}\r\n\r\n//???\r\nexport function _updateUrl(url: string): string {\r\n url += url.endsWith(\"/\") ? \"\" : \"/\";\r\n return url;\r\n}\r\n\r\n//???\r\nexport function _getAddFeatures(updateInfos: any, fields: any[]): any {\r\n const features: any[] = [];\r\n updateInfos.forEach((update: any) => {\r\n const f = {};\r\n Object.keys(update).forEach(k => {\r\n const fieldName = _getField(k, fields);\r\n f[fieldName] = update[k];\r\n });\r\n features.push({ attributes: f });\r\n });\r\n return features;\r\n}\r\n\r\n//???\r\nexport function _getField(name: string, fields: string[]): string {\r\n return fields.filter(f => f.toLowerCase() === name.toLowerCase())[0];\r\n}\r\n\r\n/**\r\n * Updates the dispatchers service to include the current user as a dispatcher\r\n *\r\n * @param dispatchers The dispatchers object from the workforce items data\r\n * @param name Current users name\r\n * @param fullName Current users full name\r\n * @param destinationAuthentication The session used to create the new item(s)\r\n * @returns A promise that will resolve with true || false\r\n * @private\r\n */\r\nexport function _updateDispatchers(\r\n url: any,\r\n name: string,\r\n fullName: string,\r\n authentication: UserSession,\r\n isPortal: boolean\r\n): Promise<boolean> {\r\n return new Promise<boolean>((resolve, reject) => {\r\n if (url) {\r\n const fieldName: string = isPortal ? \"userid\" : \"userId\";\r\n queryFeatures({\r\n url,\r\n where: `${fieldName} = '${name}'`,\r\n authentication\r\n }).then(\r\n (results: any) => {\r\n if (results && results.features) {\r\n if (results.features.length === 0) {\r\n const features = [\r\n {\r\n attributes: {\r\n name: fullName\r\n }\r\n }\r\n ];\r\n features[0].attributes[fieldName] = name;\r\n _applyEdits(url, features, authentication).then(resolve, reject);\r\n } else {\r\n resolve(true);\r\n }\r\n } else {\r\n resolve(false);\r\n }\r\n },\r\n e => reject(fail(e))\r\n );\r\n } else {\r\n resolve(false);\r\n }\r\n });\r\n}\r\n\r\n//???\r\nexport function _applyEdits(\r\n url: string,\r\n adds: any[],\r\n authentication: UserSession,\r\n useGlobalIds: boolean = false // only set when contains a globalid\r\n): any {\r\n return new Promise<boolean>((resolve, reject) => {\r\n if (adds.length > 0) {\r\n applyEdits({\r\n url,\r\n adds,\r\n useGlobalIds,\r\n authentication\r\n }).then(\r\n addResults => {\r\n if (addResults && addResults.addResults) {\r\n resolve(true);\r\n } else {\r\n reject(\r\n fail({\r\n success: false,\r\n message: \"Failed to add dispatch record.\"\r\n })\r\n );\r\n }\r\n },\r\n e =>\r\n reject(\r\n fail({\r\n success: false,\r\n message: \"Failed to add dispatch record.\",\r\n error: e\r\n })\r\n )\r\n );\r\n } else {\r\n resolve(true);\r\n }\r\n });\r\n}\r\n\r\n//#endregion\r\n","/** @license\r\n * Copyright 2018 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/**\r\n * Provides common functions involving the arcgis-rest-js library.\r\n *\r\n * @module restHelpers\r\n */\r\n\r\nimport {\r\n removeLayerOptimization,\r\n setDefaultSpatialReference,\r\n validateSpatialReferenceAndExtent,\r\n processContingentValues\r\n} from \"./featureServiceHelpers\";\r\nimport {\r\n appendQueryParam,\r\n blobToJson,\r\n blobToText,\r\n checkUrlPathTermination,\r\n deleteProp,\r\n deleteProps,\r\n fail,\r\n getProp,\r\n getUniqueTitle,\r\n setCreateProp\r\n} from \"./generalHelpers\";\r\nimport {\r\n IAddFolderResponse,\r\n IAddGroupResponse,\r\n IAdditionalGroupSearchOptions,\r\n ICreateItemResponse,\r\n ICreateServiceResult,\r\n IDependency,\r\n IExtent,\r\n IFeatureServiceProperties,\r\n IFolderStatusResponse,\r\n IGroup,\r\n IGroupAdd,\r\n IItem,\r\n IItemTemplate,\r\n IItemUpdate,\r\n IPostProcessArgs,\r\n IRelatedItems,\r\n ISpatialReference,\r\n IStatusResponse,\r\n ItemRelationshipType,\r\n IUpdate,\r\n IUpdateItemResponse,\r\n UserSession\r\n} from \"./interfaces\";\r\nimport { createZip } from \"./libConnectors\";\r\nimport { getItemBase, getItemDataAsJson } from \"./restHelpersGet\";\r\nimport { IUserSessionOptions } from \"@esri/arcgis-rest-auth\";\r\nimport {\r\n addItemData as portalAddItemData,\r\n addItemRelationship,\r\n addItemResource,\r\n createFolder,\r\n createGroup,\r\n createItemInFolder,\r\n getItem,\r\n IAddItemDataOptions,\r\n ICreateItemOptions,\r\n IFolderIdOptions,\r\n IGroupSharingOptions,\r\n IItemResourceOptions,\r\n IItemResourceResponse,\r\n IManageItemRelationshipOptions,\r\n IPagingParams,\r\n ISearchGroupContentOptions,\r\n ISearchOptions,\r\n ISearchResult,\r\n ISetAccessOptions,\r\n ISharingResponse,\r\n IUpdateItemOptions,\r\n IUserGroupOptions,\r\n IUserItemOptions,\r\n removeFolder as portalRemoveFolder,\r\n removeGroup as portalRemoveGroup,\r\n removeGroupUsers as portalRemoveGroupUsers,\r\n removeItem as portalRemoveItem,\r\n searchGroupContent,\r\n searchGroups as portalSearchGroups,\r\n searchItems as portalSearchItems,\r\n SearchQueryBuilder,\r\n setItemAccess,\r\n shareItemWithGroup,\r\n updateItem as portalUpdateItem,\r\n updateGroup as portalUpdateGroup,\r\n IUpdateGroupOptions\r\n} from \"@esri/arcgis-rest-portal\";\r\nimport { IParams, IRequestOptions, request } from \"@esri/arcgis-rest-request\";\r\nimport {\r\n ICreateServiceParams,\r\n addToServiceDefinition as svcAdminAddToServiceDefinition,\r\n createFeatureService as svcAdminCreateFeatureService\r\n} from \"@esri/arcgis-rest-service-admin\";\r\nimport {\r\n getWorkforceDependencies,\r\n isWorkforceProject,\r\n getWorkforceServiceInfo\r\n} from \"./workforceHelpers\";\r\nimport { hasUnresolvedVariables, replaceInTemplate } from \"./templatization\";\r\nimport {\r\n isTrackingViewTemplate,\r\n setTrackingOptions\r\n} from \"./trackingHelpers\";\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\nexport { request as rest_request } from \"@esri/arcgis-rest-request\";\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\n/**\r\n * Creates a UserSession via a function so that the global arcgisSolution variable can access authentication.\r\n *\r\n * @param options See https://esri.github.io/arcgis-rest-js/api/auth/IUserSessionOptions/\r\n * @returns UserSession\r\n */\r\nexport function getUserSession(\r\n options: IUserSessionOptions = {}\r\n): UserSession {\r\n return new UserSession(options);\r\n}\r\n\r\n/**\r\n * Adds a forward relationship between two items.\r\n *\r\n * @param originItemId Origin of relationship\r\n * @param destinationItemId Destination of relationship\r\n * @param relationshipType Type of relationship\r\n * @param authentication Credentials for the request\r\n * @returns A Promise to add item resources.\r\n */\r\nexport function addForwardItemRelationship(\r\n originItemId: string,\r\n destinationItemId: string,\r\n relationshipType: ItemRelationshipType,\r\n authentication: UserSession\r\n): Promise<IStatusResponse> {\r\n return new Promise<IStatusResponse>(resolve => {\r\n const requestOptions: IManageItemRelationshipOptions = {\r\n originItemId,\r\n destinationItemId,\r\n relationshipType,\r\n authentication\r\n };\r\n addItemRelationship(requestOptions).then(\r\n response => {\r\n resolve({\r\n success: response.success,\r\n itemId: originItemId\r\n } as IStatusResponse);\r\n },\r\n () => {\r\n resolve({\r\n success: false,\r\n itemId: originItemId\r\n } as IStatusResponse);\r\n }\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Adds forward relationships for an item.\r\n *\r\n * @param originItemId Origin of relationship\r\n * @param destinationRelationships Destinations\r\n * @param authentication Credentials for the request\r\n * @returns A Promise to add item resources.\r\n */\r\nexport function addForwardItemRelationships(\r\n originItemId: string,\r\n destinationRelationships: IRelatedItems[],\r\n authentication: UserSession\r\n): Promise<IStatusResponse[]> {\r\n return new Promise<IStatusResponse[]>(resolve => {\r\n // Set up relationships using updated relationship information\r\n const relationshipPromises = new Array<Promise<IStatusResponse>>();\r\n destinationRelationships.forEach(relationship => {\r\n relationship.relatedItemIds.forEach(relatedItemId => {\r\n relationshipPromises.push(\r\n addForwardItemRelationship(\r\n originItemId,\r\n relatedItemId,\r\n relationship.relationshipType as ItemRelationshipType,\r\n authentication\r\n )\r\n );\r\n });\r\n });\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n Promise.all(relationshipPromises).then((responses: IStatusResponse[]) =>\r\n resolve(responses)\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Adds a token to the query parameters of a URL.\r\n *\r\n * @param url URL to use as base\r\n * @param authentication Credentials to be used to generate token for URL\r\n * @returns A promise that will resolve with the supplied URL with `token=<token>` added to its query params\r\n * unless either the URL doesn't exist or the token can't be generated\r\n */\r\nexport function addTokenToUrl(\r\n url: string,\r\n authentication: UserSession\r\n): Promise<string> {\r\n return new Promise<string>(resolve => {\r\n if (!url || !authentication) {\r\n resolve(url);\r\n } else {\r\n authentication.getToken(url).then(\r\n token => {\r\n /* istanbul ignore else */\r\n if (token) {\r\n url = appendQueryParam(url, \"token=\" + token);\r\n }\r\n resolve(url);\r\n },\r\n () => resolve(url)\r\n );\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Calls addToDefinition for the service.\r\n *\r\n * Added retry due to some solutions failing to deploy in specific orgs/hives due to timeouts.\r\n * On the first pass we will use the quicker sync request to add.\r\n * If it fails we will use an async request that will avoid the timeout errors.\r\n *\r\n * @param url URL to use as base\r\n * @param options the info to add to the services definition\r\n * @param skipRetry a boolean to control if retry logic will be used. Defaults to false.\r\n * @param useAsync a boolean to control if we will use an async request\r\n * @returns A promise that will resolve when the request has completed\r\n */\r\nexport function addToServiceDefinition(\r\n url: string,\r\n options: any,\r\n skipRetry: boolean = false,\r\n useAsync: boolean = false\r\n): Promise<void> {\r\n /* istanbul ignore else */\r\n if (useAsync) {\r\n options.params = { ...options.params, async: true };\r\n }\r\n return new Promise((resolve, reject) => {\r\n svcAdminAddToServiceDefinition(url, options).then(\r\n (result: any) => {\r\n checkRequestStatus(result, options.authentication).then(\r\n () => resolve(null),\r\n e => reject(fail(e))\r\n );\r\n },\r\n e => {\r\n if (!skipRetry) {\r\n addToServiceDefinition(url, options, true, true).then(\r\n () => resolve(null),\r\n e => reject(e)\r\n );\r\n } else {\r\n reject(fail(e));\r\n }\r\n }\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * When using an async request we need to poll the status url to know when the request has completed or failed.\r\n *\r\n * @param result the result returned from the addToDefinition request.\r\n * This will contain a status url or the standard sync result.\r\n * @param authentication Credentials to be used to generate token for URL\r\n * @returns A promise that will resolve when the request has completed\r\n */\r\nexport function checkRequestStatus(\r\n result: any,\r\n authentication: any\r\n): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n if (result.statusURL) {\r\n const checkStatus = setInterval(() => {\r\n request(result.statusURL, { authentication }).then(\r\n r => {\r\n /* istanbul ignore else */\r\n if (r.status === \"Completed\") {\r\n clearInterval(checkStatus);\r\n resolve();\r\n } else if (r.status === \"Failed\") {\r\n clearInterval(checkStatus);\r\n reject(r);\r\n }\r\n },\r\n e => {\r\n clearInterval(checkStatus);\r\n reject(e);\r\n }\r\n );\r\n }, 2000);\r\n } else {\r\n resolve();\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Converts a general search into an ISearchOptions structure.\r\n *\r\n * @param search Search specified in one of three ways\r\n * @returns Recast search\r\n */\r\nexport function convertToISearchOptions(\r\n search: string | ISearchOptions | SearchQueryBuilder\r\n): ISearchOptions {\r\n // Convert the search into an ISearchOptions\r\n let searchOptions: ISearchOptions = {\r\n q: \"\",\r\n start: 1,\r\n num: 100\r\n };\r\n\r\n if (typeof search === \"string\") {\r\n // Insert query into defaults\r\n searchOptions.q = search;\r\n\r\n } else if (search instanceof SearchQueryBuilder) {\r\n // Insert query into defaults\r\n searchOptions.q = search.toParam();\r\n\r\n } else { // search is ISearchOptions\r\n searchOptions = {\r\n ...searchOptions, // defaults\r\n ...search // request\r\n }\r\n }\r\n\r\n\r\n return searchOptions;\r\n}\r\n\r\n/**\r\n * Simple validate function to ensure all coordinates are numbers\r\n * In some cases orgs can have null or undefined coordinate values associated with the org extent\r\n *\r\n * @param extent the extent to validate\r\n * @returns the provided extent or a default global extent if some coordinates are not numbers\r\n * @private\r\n */\r\nexport function _validateExtent(extent: IExtent): IExtent {\r\n // in some cases orgs can have invalid extents defined\r\n // this is a simple validate function that will ensure coordiantes are numbers\r\n // using -179,-89,179,89 because the project call is returning \"NaN\" when using -180,-90,180,90\r\n const hasInvalid =\r\n typeof extent.xmin !== \"number\" ||\r\n typeof extent.xmax !== \"number\" ||\r\n typeof extent.ymax !== \"number\" ||\r\n typeof extent.ymin !== \"number\";\r\n if (hasInvalid) {\r\n extent.xmin = -179;\r\n extent.xmax = 179;\r\n extent.ymax = 89;\r\n extent.ymin = -89;\r\n extent.spatialReference = { wkid: 4326 };\r\n }\r\n return extent;\r\n}\r\n\r\n/**\r\n * If the request to convert the extent fails it has commonly been due to an invalid extent.\r\n * This function will first attempt to use the provided extent. If it fails it will default to\r\n * the source items extent and if that fails it will then use a default global extent.\r\n *\r\n * @param extent the extent to convert\r\n * @param fallbackExtent the extent to convert if the main extent does not project to the outSR\r\n * @param outSR the spatial reference to project to\r\n * @param geometryServiceUrl the service url for the geometry service to use\r\n * @param authentication the credentials for the requests\r\n * @returns the extent projected to the provided spatial reference\r\n * or the world extent projected to the provided spatial reference\r\n * @private\r\n */\r\nexport function convertExtentWithFallback(\r\n extent: IExtent,\r\n fallbackExtent: any,\r\n outSR: ISpatialReference,\r\n geometryServiceUrl: string,\r\n authentication: UserSession\r\n): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n const defaultExtent = {\r\n xmin: -179,\r\n xmax: 179,\r\n ymin: -89,\r\n ymax: 89,\r\n spatialReference: { wkid: 4326 }\r\n };\r\n convertExtent(\r\n _validateExtent(extent),\r\n outSR,\r\n geometryServiceUrl,\r\n authentication\r\n ).then(\r\n extentResponse => {\r\n // in some cases project will complete successfully but return \"NaN\" values\r\n // check for this and call convert again if it does\r\n const extentResponseString = JSON.stringify(extentResponse);\r\n const validatedExtent = JSON.stringify(_validateExtent(extentResponse));\r\n if (extentResponseString === validatedExtent) {\r\n resolve(extentResponse);\r\n } else {\r\n convertExtent(\r\n fallbackExtent || defaultExtent,\r\n outSR,\r\n geometryServiceUrl,\r\n authentication\r\n ).then(resolve, e => reject(fail(e)));\r\n }\r\n },\r\n // if convert fails try again with default global extent\r\n () => {\r\n convertExtent(\r\n defaultExtent,\r\n outSR,\r\n geometryServiceUrl,\r\n authentication\r\n ).then(resolve, e => reject(fail(e)));\r\n }\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Converts an extent to a specified spatial reference.\r\n *\r\n * @param extent Extent object to check and (possibly) to project\r\n * @param outSR Desired spatial reference\r\n * @param geometryServiceUrl Path to geometry service providing `findTransformations` and `project` services\r\n * @param authentication Credentials for the request\r\n * @returns Original extent if it's already using outSR or the extents projected into the outSR\r\n */\r\nexport function convertExtent(\r\n extent: IExtent,\r\n outSR: ISpatialReference,\r\n geometryServiceUrl: string,\r\n authentication: UserSession\r\n): Promise<any> {\r\n const _requestOptions: any = { authentication };\r\n return new Promise<any>((resolve, reject) => {\r\n // tslint:disable-next-line:no-unnecessary-type-assertion\r\n if (extent.spatialReference.wkid === outSR?.wkid || !outSR) {\r\n resolve(extent);\r\n } else {\r\n _requestOptions.params = {\r\n f: \"json\",\r\n // tslint:disable-next-line:no-unnecessary-type-assertion\r\n inSR: extent.spatialReference.wkid,\r\n outSR: outSR.wkid,\r\n extentOfInterest: JSON.stringify(extent)\r\n };\r\n request(\r\n checkUrlPathTermination(geometryServiceUrl) + \"findTransformations\",\r\n _requestOptions\r\n ).then(\r\n response => {\r\n const transformations =\r\n response && response.transformations\r\n ? response.transformations\r\n : undefined;\r\n let transformation: any;\r\n if (transformations && transformations.length > 0) {\r\n // if a forward single transformation is found use that...otherwise check for and use composite\r\n transformation = transformations[0].wkid\r\n ? transformations[0].wkid\r\n : transformations[0].geoTransforms\r\n ? transformations[0]\r\n : undefined;\r\n }\r\n\r\n _requestOptions.params = {\r\n f: \"json\",\r\n outSR: outSR.wkid,\r\n // tslint:disable-next-line:no-unnecessary-type-assertion\r\n inSR: extent.spatialReference.wkid,\r\n geometries: {\r\n geometryType: \"esriGeometryPoint\",\r\n geometries: [\r\n { x: extent.xmin, y: extent.ymin },\r\n { x: extent.xmax, y: extent.ymax }\r\n ]\r\n },\r\n transformation: transformation\r\n };\r\n request(\r\n checkUrlPathTermination(geometryServiceUrl) + \"project\",\r\n _requestOptions\r\n ).then(\r\n projectResponse => {\r\n const projectGeom: any =\r\n projectResponse.geometries.length === 2\r\n ? projectResponse.geometries\r\n : undefined;\r\n if (projectGeom) {\r\n resolve({\r\n xmin: projectGeom[0].x,\r\n ymin: projectGeom[0].y,\r\n xmax: projectGeom[1].x,\r\n ymax: projectGeom[1].y,\r\n spatialReference: outSR\r\n });\r\n } else {\r\n resolve(undefined);\r\n }\r\n },\r\n e => reject(fail(e))\r\n );\r\n },\r\n e => reject(fail(e))\r\n );\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Publishes a feature service as an AGOL item; it does not include its layers and tables\r\n *\r\n * @param newItemTemplate Template of item to be created\r\n * @param authentication Credentials for the request\r\n * @param templateDictionary Hash of facts: org URL, adlib replacements, user; .user.folders property contains a list\r\n * @returns A promise that will resolve with an object reporting success and the Solution id\r\n */\r\nexport function createFeatureService(\r\n newItemTemplate: IItemTemplate,\r\n authentication: UserSession,\r\n templateDictionary: any\r\n): Promise<ICreateServiceResult> {\r\n return new Promise((resolve, reject) => {\r\n // Create item\r\n _getCreateServiceOptions(\r\n newItemTemplate,\r\n authentication,\r\n templateDictionary\r\n ).then(\r\n createOptions => {\r\n svcAdminCreateFeatureService(createOptions).then(\r\n createResponse => {\r\n // Federated servers may have inconsistent casing, so lowerCase it\r\n createResponse.encodedServiceURL = _lowercaseDomain(createResponse.encodedServiceURL);\r\n createResponse.serviceurl = _lowercaseDomain(createResponse.serviceurl);\r\n resolve(createResponse);\r\n },\r\n e => reject(fail(e))\r\n );\r\n },\r\n e => reject(fail(e))\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Publishes an item and its data, metadata, and resources as an AGOL item.\r\n *\r\n * @param itemInfo Item's `item` section\r\n * @param folderId Id of folder to receive item; null indicates that the item goes into the root\r\n * folder; ignored for Group item type\r\n * @param destinationAuthentication Credentials for for requests to where the item is to be created\r\n * @param itemThumbnailUrl URL to image to use for item thumbnail\r\n * @param itemThumbnailAuthentication Credentials for requests to the thumbnail source\r\n * @param dataFile Item's `data` section\r\n * @param metadataFile Item's metadata file\r\n * @param resourcesFiles Item's resources\r\n * @param access Access to set for item: \"public\", \"org\", \"private\"\r\n * @returns A promise that will resolve with an object reporting success or failure and the Solution id\r\n */\r\nexport function createFullItem(\r\n itemInfo: any,\r\n folderId: string | undefined,\r\n destinationAuthentication: UserSession,\r\n itemThumbnailUrl?: string,\r\n itemThumbnailAuthentication?: UserSession,\r\n dataFile?: File,\r\n metadataFile?: File,\r\n resourcesFiles?: File[],\r\n access = \"private\"\r\n): Promise<ICreateItemResponse> {\r\n return new Promise((resolve, reject) => {\r\n // Create item\r\n const createOptions: ICreateItemOptions = {\r\n item: {\r\n ...itemInfo\r\n },\r\n folderId,\r\n authentication: destinationAuthentication\r\n };\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n addTokenToUrl(itemThumbnailUrl, itemThumbnailAuthentication).then(\r\n updatedThumbnailUrl => {\r\n /* istanbul ignore else */\r\n if (updatedThumbnailUrl) {\r\n createOptions.item.thumbnailurl = appendQueryParam(\r\n updatedThumbnailUrl,\r\n \"w=400\"\r\n );\r\n }\r\n\r\n createItemInFolder(createOptions).then(\r\n createResponse => {\r\n if (createResponse.success) {\r\n let accessDef: Promise<ISharingResponse>;\r\n\r\n // Set access if it is not AGOL default\r\n // Set the access manually since the access value in createItem appears to be ignored\r\n // Need to run serially; will not work reliably if done in parallel with adding the data section\r\n if (access !== \"private\") {\r\n const accessOptions: ISetAccessOptions = {\r\n id: createResponse.id,\r\n access: access === \"public\" ? \"public\" : \"org\", // need to use constants rather than string\r\n authentication: destinationAuthentication\r\n };\r\n accessDef = setItemAccess(accessOptions);\r\n } else {\r\n accessDef = Promise.resolve({\r\n itemId: createResponse.id\r\n } as ISharingResponse);\r\n }\r\n\r\n // Now add attached items\r\n accessDef.then(\r\n () => {\r\n const updateDefs: Array<Promise<any>> = [];\r\n\r\n // Add the data section\r\n if (dataFile) {\r\n updateDefs.push(\r\n _addItemDataFile(\r\n createResponse.id,\r\n dataFile,\r\n destinationAuthentication\r\n )\r\n );\r\n }\r\n\r\n // Add the resources via a zip because AGO sometimes loses resources if many are added at the\r\n // same time to the same item\r\n if (\r\n Array.isArray(resourcesFiles) &&\r\n resourcesFiles.length > 0\r\n ) {\r\n updateDefs.push(\r\n new Promise<IItemResourceResponse>(\r\n (rsrcResolve, rsrcReject) => {\r\n createZip(\"resources.zip\", resourcesFiles).then(\r\n (zipfile: File) => {\r\n const addResourceOptions: IItemResourceOptions = {\r\n id: createResponse.id,\r\n resource: zipfile,\r\n authentication: destinationAuthentication,\r\n params: {\r\n archive: true\r\n }\r\n };\r\n addItemResource(addResourceOptions).then(\r\n rsrcResolve,\r\n rsrcReject\r\n );\r\n },\r\n rsrcReject\r\n );\r\n }\r\n )\r\n );\r\n }\r\n\r\n // Add the metadata section\r\n if (metadataFile) {\r\n updateDefs.push(\r\n _addItemMetadataFile(\r\n createResponse.id,\r\n metadataFile,\r\n destinationAuthentication\r\n )\r\n );\r\n }\r\n\r\n // Wait until all adds are done\r\n Promise.all(updateDefs).then(\r\n () => resolve(createResponse),\r\n e => reject(fail(e))\r\n );\r\n },\r\n e => reject(fail(e))\r\n );\r\n } else {\r\n reject(fail());\r\n }\r\n },\r\n e => reject(fail(e))\r\n );\r\n }\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Publishes an item and its data as an AGOL item.\r\n *\r\n * @param itemInfo Item's `item` section\r\n * @param dataInfo Item's `data` section\r\n * @param authentication Credentials for the request\r\n * @param folderId Id of folder to receive item; null indicates that the item goes into the root\r\n * folder; ignored for Group item type\r\n * @param access Access to set for item: \"public\", \"org\", \"private\"\r\n * @returns A promise that will resolve with an object reporting success and the Solution id\r\n */\r\nexport function createItemWithData(\r\n itemInfo: any,\r\n dataInfo: any,\r\n authentication: UserSession,\r\n folderId: string | undefined,\r\n access = \"private\"\r\n): Promise<ICreateItemResponse> {\r\n return new Promise((resolve, reject) => {\r\n // Create item\r\n const createOptions: ICreateItemOptions = {\r\n item: {\r\n title: \"_\", // provide backup title\r\n ...itemInfo,\r\n data: dataInfo\r\n },\r\n folderId,\r\n authentication: authentication\r\n };\r\n\r\n if (itemInfo.thumbnail) {\r\n createOptions.params = {\r\n // Pass thumbnail file in via params because item property is serialized, which discards a blob\r\n thumbnail: itemInfo.thumbnail\r\n };\r\n delete createOptions.item.thumbnail;\r\n }\r\n\r\n createItemInFolder(createOptions).then(\r\n createResponse => {\r\n if (createResponse.success) {\r\n if (access !== \"private\") {\r\n // Set access if it is not AGOL default\r\n // Set the access manually since the access value in createItem appears to be ignored\r\n const accessOptions: ISetAccessOptions = {\r\n id: createResponse.id,\r\n access: access === \"public\" ? \"public\" : \"org\", // need to use constants rather than string\r\n authentication: authentication\r\n };\r\n setItemAccess(accessOptions).then(\r\n () => {\r\n resolve({\r\n folder: createResponse.folder,\r\n id: createResponse.id,\r\n success: true\r\n });\r\n },\r\n e => reject(fail(e))\r\n );\r\n } else {\r\n resolve({\r\n folder: createResponse.folder,\r\n id: createResponse.id,\r\n success: true\r\n });\r\n }\r\n } else {\r\n reject(fail());\r\n }\r\n },\r\n e => reject(fail(e))\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Creates a folder using a numeric suffix to ensure uniqueness if necessary.\r\n *\r\n * @param title Folder title, used as-is if possible and with suffix otherwise\r\n * @param templateDictionary Hash of facts: org URL, adlib replacements, user; .user.folders property contains a list\r\n * of known folder names; function updates list with existing names not yet known, and creates .user.folders if it\r\n * doesn't exist in the dictionary\r\n * @param authentication Credentials for creating folder\r\n * @returns Id of created folder\r\n */\r\nexport function createUniqueFolder(\r\n title: string,\r\n templateDictionary: any,\r\n authentication: UserSession\r\n): Promise<IAddFolderResponse> {\r\n return new Promise<IAddFolderResponse>((resolve, reject) => {\r\n // Get a title that is not already in use\r\n const folderTitle: string = getUniqueTitle(\r\n title,\r\n templateDictionary,\r\n \"user.folders\"\r\n );\r\n const folderCreationParam = {\r\n title: folderTitle,\r\n authentication: authentication\r\n };\r\n createFolder(folderCreationParam).then(\r\n ok => resolve(ok),\r\n err => {\r\n // If the name already exists, we'll try again\r\n const errorDetails = getProp(err, \"response.error.details\") as string[];\r\n if (Array.isArray(errorDetails) && errorDetails.length > 0) {\r\n const nameNotAvailMsg =\r\n \"Folder title '\" + folderTitle + \"' not available.\";\r\n if (errorDetails.indexOf(nameNotAvailMsg) >= 0) {\r\n // Create the user.folders property if it doesn't exist\r\n /* istanbul ignore else */\r\n if (!getProp(templateDictionary, \"user.folders\")) {\r\n setCreateProp(templateDictionary, \"user.folders\", []);\r\n }\r\n templateDictionary.user.folders.push({\r\n title: folderTitle\r\n });\r\n createUniqueFolder(title, templateDictionary, authentication).then(\r\n resolve,\r\n reject\r\n );\r\n } else {\r\n reject(err);\r\n }\r\n } else {\r\n // Otherwise, error out\r\n reject(err);\r\n }\r\n }\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Creates a group using numeric suffix to ensure uniqueness.\r\n *\r\n * @param title Group title, used as-is if possible and with suffix otherwise\r\n * @param templateDictionary Hash of facts: org URL, adlib replacements, user\r\n * @param authentication Credentials for creating group\r\n * @param owner Optional arg for the Tracking owner\r\n * If the tracking owner is not the one deploying the solution\r\n * tracker groups will be created under the deployment user but\r\n * will be reassigned to the tracking owner.\r\n * @returns Information about created group\r\n */\r\nexport function createUniqueGroup(\r\n title: string,\r\n groupItem: IGroupAdd,\r\n templateDictionary: any,\r\n authentication: UserSession,\r\n owner?: string\r\n): Promise<IAddGroupResponse> {\r\n return new Promise<IAddGroupResponse>((resolve, reject) => {\r\n let groupsPromise: Promise<any>;\r\n // when working with tracker we need to consider the groups of the deploying user as well as the groups\r\n // of the tracking user...must be unique for both\r\n if (owner && owner !== authentication.username) {\r\n groupsPromise = searchAllGroups(`(owner:${owner}) orgid:${templateDictionary.organization.id}`, authentication);\r\n } else {\r\n groupsPromise = Promise.resolve([]);\r\n }\r\n\r\n // first get the tracker owner groups\r\n groupsPromise.then(groups => {\r\n templateDictionary[\"allGroups\"] =\r\n groups.concat(getProp(templateDictionary, \"user.groups\"));\r\n\r\n // Get a title that is not already in use\r\n groupItem.title = getUniqueTitle(title, templateDictionary, \"allGroups\");\r\n const groupCreationParam = {\r\n group: groupItem,\r\n authentication: authentication\r\n };\r\n createGroup(groupCreationParam).then(resolve, err => {\r\n // If the name already exists, we'll try again\r\n const errorDetails = getProp(err, \"response.error.details\") as string[];\r\n if (Array.isArray(errorDetails) && errorDetails.length > 0) {\r\n const nameNotAvailMsg =\r\n \"You already have a group named '\" +\r\n groupItem.title +\r\n \"'. Try a different name.\";\r\n if (errorDetails.indexOf(nameNotAvailMsg) >= 0) {\r\n templateDictionary.user.groups.push({\r\n title: groupItem.title\r\n });\r\n createUniqueGroup(\r\n title,\r\n groupItem,\r\n templateDictionary,\r\n authentication\r\n ).then(resolve, reject);\r\n } else {\r\n reject(err);\r\n }\r\n } else {\r\n // Otherwise, error out\r\n reject(err);\r\n }\r\n });\r\n }, e => reject(e));\r\n });\r\n}\r\n\r\n/**\r\n * Gets the ids of the dependencies of an AGOL feature service item.\r\n * Dependencies will only exist when the service is a view.\r\n *\r\n * @param itemTemplate Template of item to be created\r\n * @param authentication Credentials for the request\r\n * @returns A promise that will resolve a list of dependencies\r\n */\r\nexport function extractDependencies(\r\n itemTemplate: IItemTemplate,\r\n authentication?: UserSession\r\n): Promise<IDependency[]> {\r\n const dependencies: any[] = [];\r\n return new Promise((resolve, reject) => {\r\n // Get service dependencies when the item is a view\r\n // This step is skipped for tracker views as they will already have a source service in the org\r\n if (itemTemplate.properties.service.isView && itemTemplate.item.url && !isTrackingViewTemplate(itemTemplate)) {\r\n request(\r\n checkUrlPathTermination(itemTemplate.item.url) + \"sources?f=json\",\r\n {\r\n authentication: authentication\r\n }\r\n ).then(\r\n response => {\r\n /* istanbul ignore else */\r\n if (response && response.services) {\r\n response.services.forEach((layer: any) => {\r\n dependencies.push({\r\n id: layer.serviceItemId,\r\n name: layer.name\r\n });\r\n });\r\n }\r\n resolve(dependencies);\r\n },\r\n e => reject(fail(e))\r\n );\r\n } else if (isWorkforceProject(itemTemplate)) {\r\n resolve(getWorkforceDependencies(itemTemplate, dependencies));\r\n } else {\r\n resolve(dependencies);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Get json info for the services layers\r\n *\r\n * @param serviceUrl the url for the service\r\n * @param layerList list of base layer info\r\n * @param authentication Credentials for the request\r\n * @returns A promise that will resolve a list of dependencies\r\n */\r\nexport function getLayers(\r\n serviceUrl: string,\r\n layerList: any[],\r\n authentication: UserSession\r\n): Promise<any[]> {\r\n return new Promise<any[]>((resolve, reject) => {\r\n if (layerList.length === 0) {\r\n resolve([]);\r\n }\r\n\r\n // get the admin URL\r\n serviceUrl = serviceUrl.replace(\"/rest/services\", \"/rest/admin/services\");\r\n\r\n const requestsDfd: Array<Promise<any>> = [];\r\n layerList.forEach(layer => {\r\n const requestOptions: IRequestOptions = {\r\n authentication: authentication\r\n };\r\n requestsDfd.push(\r\n request(\r\n checkUrlPathTermination(serviceUrl) + layer[\"id\"] + \"?f=json\",\r\n requestOptions\r\n )\r\n );\r\n });\r\n\r\n // Wait until all layers are heard from\r\n Promise.all(requestsDfd).then(\r\n layers => resolve(layers),\r\n e => reject(fail(e))\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Add additional options to a layers definition.\r\n *\r\n * @param args The IPostProcessArgs for the request(s)\r\n * @param isPortal boolean to indicate if we are deploying to portal\r\n *\r\n * @returns An array of update instructions\r\n * @private\r\n */\r\nexport function getLayerUpdates(\r\n args: IPostProcessArgs,\r\n isPortal: boolean\r\n): IUpdate[] {\r\n const adminUrl: string = args.itemTemplate.item.url.replace(\r\n \"rest/services\",\r\n \"rest/admin/services\"\r\n );\r\n\r\n const updates: IUpdate[] = [];\r\n const refresh: any = _getUpdate(adminUrl, null, null, args, \"refresh\");\r\n updates.push(refresh);\r\n Object.keys(args.objects).forEach(id => {\r\n const obj: any = Object.assign({}, args.objects[id]);\r\n // These properties cannot be set in the update definition when working with portal\r\n if (isPortal) {\r\n deleteProps(obj, [\"type\", \"id\", \"relationships\", \"sourceServiceFields\"]);\r\n }\r\n // handle definition deletes\r\n // removes previous editFieldsInfo fields if their names were changed\r\n if (obj.hasOwnProperty(\"deleteFields\")) {\r\n updates.push(_getUpdate(adminUrl, id, obj, args, \"delete\"));\r\n deleteProp(obj, \"deleteFields\");\r\n updates.push(_getUpdate(adminUrl, null, null, args, \"refresh\"));\r\n }\r\n });\r\n // issue: #706\r\n // Add source service relationships\r\n // views will now always add all layers in a single call and will inherit the relationships from the source service\r\n if (!args.itemTemplate.properties.service.isView) {\r\n const relUpdates: any = _getRelationshipUpdates({\r\n message: \"updated layer relationships\",\r\n objects: args.objects,\r\n itemTemplate: args.itemTemplate,\r\n authentication: args.authentication\r\n });\r\n // issue: #724\r\n // In portal the order the relationships are added needs to follow the layer order\r\n // otherwise the relationship IDs will be reset\r\n relUpdates.layers = _sortRelationships(\r\n args.itemTemplate.properties.layers,\r\n args.itemTemplate.properties.tables,\r\n relUpdates\r\n );\r\n /* istanbul ignore else */\r\n if (relUpdates.layers.length > 0) {\r\n updates.push(_getUpdate(adminUrl, null, relUpdates, args, \"add\"));\r\n updates.push(refresh);\r\n }\r\n\r\n // handle contingent values\r\n const contingentValuesUpdates = _getContingentValuesUpdates({\r\n message: \"add layer contingent values\",\r\n objects: args.objects,\r\n itemTemplate: args.itemTemplate,\r\n authentication: args.authentication\r\n });\r\n\r\n /* istanbul ignore else */\r\n if (contingentValuesUpdates.length > 0) {\r\n contingentValuesUpdates.forEach(conUpdate => {\r\n updates.push(_getUpdate(adminUrl + conUpdate.id, null, conUpdate.contingentValues, args, \"add\"));\r\n });\r\n }\r\n }\r\n return updates.length === 1 ? [] : updates;\r\n}\r\n\r\n/**\r\n * Sorts relationships based on order of supporting layers and tables in the service definition\r\n *\r\n * @param layers the layers from the service\r\n * @param tables the tables from the service\r\n * @param relUpdates the relationships to add for the service\r\n *\r\n * @returns An array with relationships that have been sorted\r\n * @private\r\n */\r\nexport function _sortRelationships(\r\n layers: any[],\r\n tables: any[],\r\n relUpdates: any\r\n): any[] {\r\n const ids: number[] = [].concat(\r\n layers.map((l: any) => l.id),\r\n tables.map((t: any) => t.id)\r\n );\r\n // In portal the order the relationships are added needs to follow the layer order\r\n // otherwise the relationship IDs will be reset\r\n const _relUpdateLayers: any[] = [];\r\n ids.forEach(id => {\r\n relUpdates.layers.some((relUpdate: any) => {\r\n if (id === relUpdate.id) {\r\n _relUpdateLayers.push(relUpdate);\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n });\r\n });\r\n return _relUpdateLayers;\r\n}\r\n\r\n/**\r\n * Add additional options to a layers definition\r\n *\r\n * Added retry due to some solutions failing to deploy in specific orgs/hives\r\n *\r\n *\r\n * @param Update will contain either add, update, or delete from service definition call\r\n * @param skipRetry defaults to false. when true the retry logic will be ignored\r\n * @returns A promise that will resolve when service definition call has completed\r\n * @private\r\n */\r\n/* istanbul ignore else */\r\nexport function getRequest(\r\n update: IUpdate,\r\n skipRetry: boolean = false,\r\n useAsync: boolean = false\r\n): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n const options: IRequestOptions = {\r\n params: update.params,\r\n authentication: update.args.authentication\r\n };\r\n /* istanbul ignore else */\r\n if (\r\n (useAsync && update.url.indexOf(\"addToDefinition\") > -1) ||\r\n update.url.indexOf(\"updateDefinition\") > -1 ||\r\n update.url.indexOf(\"deleteFromDefinition\") > -1\r\n ) {\r\n options.params = { ...options.params, async: true };\r\n }\r\n request(update.url, options).then(\r\n result => {\r\n checkRequestStatus(result, options.authentication).then(\r\n () => resolve(null),\r\n e => reject(fail(e))\r\n );\r\n },\r\n (e: any) => {\r\n if (!skipRetry) {\r\n getRequest(update, true, true).then(\r\n () => resolve(),\r\n e => reject(e)\r\n );\r\n } else {\r\n reject(e);\r\n }\r\n }\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Fills in missing data, including full layer and table definitions, in a feature services' definition.\r\n *\r\n * @param itemTemplate Feature service item, data, dependencies definition to be modified\r\n * @param authentication Credentials for the request to AGOL\r\n * @returns A promise that will resolve when fullItem has been updated\r\n * @private\r\n */\r\nexport function getServiceLayersAndTables(\r\n itemTemplate: IItemTemplate,\r\n authentication: UserSession\r\n): Promise<IItemTemplate> {\r\n return new Promise<IItemTemplate>((resolve, reject) => {\r\n // To have enough information for reconstructing the service, we'll supplement\r\n // the item and data sections with sections for the service, full layers, and\r\n // full tables\r\n\r\n // Extra steps must be taken for workforce version 2\r\n const isWorkforceService = isWorkforceProject(itemTemplate);\r\n\r\n // Get the service description\r\n if (itemTemplate.item.url) {\r\n getFeatureServiceProperties(\r\n itemTemplate.item.url,\r\n authentication,\r\n isWorkforceService\r\n ).then(\r\n properties => {\r\n itemTemplate.properties = properties;\r\n resolve(itemTemplate);\r\n },\r\n e => reject(fail(e))\r\n );\r\n } else {\r\n resolve(itemTemplate);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Get service properties for the given url and update key props\r\n *\r\n * @param serviceUrl the feature service url\r\n * @param authentication Credentials for the request to AGOL\r\n * @param workforceService boolean to indicate if extra workforce service steps should be handled\r\n * @returns A promise that will resolve with the service properties\r\n * @private\r\n */\r\nexport function getFeatureServiceProperties(\r\n serviceUrl: string,\r\n authentication: UserSession,\r\n workforceService: boolean = false\r\n): Promise<IFeatureServiceProperties> {\r\n return new Promise<IFeatureServiceProperties>((resolve, reject) => {\r\n const properties: IFeatureServiceProperties = {\r\n service: {},\r\n layers: [],\r\n tables: []\r\n };\r\n\r\n // get the admin URL\r\n serviceUrl = serviceUrl.replace(\"/rest/services\", \"/rest/admin/services\");\r\n\r\n // Get the service description\r\n request(serviceUrl + \"?f=json\", {\r\n authentication: authentication\r\n }).then(\r\n serviceData => {\r\n properties.service = _parseAdminServiceData(serviceData);\r\n\r\n // Copy cacheMaxAge to top level so that AGO sees it when deploying the service\r\n // serviceData may have set it if there isn't an adminServiceInfo\r\n /* istanbul ignore else */\r\n if (serviceData.adminServiceInfo?.cacheMaxAge) {\r\n properties.service.cacheMaxAge =\r\n serviceData.adminServiceInfo.cacheMaxAge;\r\n }\r\n\r\n // Move the layers and tables out of the service's data section\r\n /* istanbul ignore else */\r\n if (serviceData.layers) {\r\n properties.layers = serviceData.layers;\r\n\r\n // Fill in properties that the service layer doesn't provide\r\n // and remove properties that should not exist in the template\r\n properties.layers.forEach(layer => {\r\n layer.serviceItemId = properties.service.serviceItemId;\r\n layer.extent = null;\r\n removeLayerOptimization(layer);\r\n });\r\n }\r\n delete serviceData.layers;\r\n\r\n /* istanbul ignore else */\r\n if (serviceData.tables) {\r\n properties.tables = serviceData.tables;\r\n\r\n // Fill in properties that the service layer doesn't provide\r\n properties.tables.forEach(table => {\r\n table.serviceItemId = properties.service.serviceItemId;\r\n table.extent = null;\r\n });\r\n }\r\n delete serviceData.tables;\r\n\r\n // Ensure solution items have unique indexes on relationship key fields\r\n _updateIndexesForRelationshipKeyFields(properties);\r\n\r\n processContingentValues(properties, serviceUrl, authentication).then(() => {\r\n if (workforceService) {\r\n getWorkforceServiceInfo(properties, serviceUrl, authentication).then(\r\n resolve,\r\n reject\r\n );\r\n } else {\r\n resolve(properties);\r\n }\r\n },\r\n (e: any) => reject(fail(e))\r\n );\r\n },\r\n (e: any) => reject(fail(e))\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Parses the layers array and will filter subsets of Layers and Tables\r\n * Layers and Tables are both returned in the layers array when we access a feature service from the admin api.\r\n *\r\n * @param adminData The data of the feature service\r\n * @returns A mutated version of the provided adminData\r\n * @private\r\n */\r\nexport function _parseAdminServiceData(adminData: any): any {\r\n const layers: any[] = adminData.layers || [];\r\n const tables: any[] = adminData.tables || [];\r\n setCreateProp(\r\n adminData,\r\n \"layers\",\r\n layers.filter(l => l.type === \"Feature Layer\")\r\n );\r\n // TODO understand if the concat is necessary.\r\n // Not sure if the admin api will ever actually return a tables collection here.\r\n setCreateProp(\r\n adminData,\r\n \"tables\",\r\n tables.concat(layers.filter(l => l.type === \"Table\"))\r\n );\r\n return adminData;\r\n}\r\n\r\n/**\r\n * livingatlas designation test.\r\n * These layers should not be templatized or depolyed\r\n *\r\n * @param groupDesignations the items group designations to evaluate\r\n * @returns A boolean indicating if the invalid designation is found in the item info\r\n */\r\nexport function hasInvalidGroupDesignations(\r\n groupDesignations: string\r\n): boolean {\r\n const invalidGroupDesignations: string[] = [\"livingatlas\"];\r\n return groupDesignations\r\n ? invalidGroupDesignations.indexOf(groupDesignations) > -1\r\n : false;\r\n}\r\n\r\n/**\r\n * Removes a folder from AGO.\r\n *\r\n * @param folderId Id of a folder to delete\r\n * @param authentication Credentials for the request to AGO\r\n * @returns A promise that will resolve with the result of the request\r\n */\r\nexport function removeFolder(\r\n folderId: string,\r\n authentication: UserSession\r\n): Promise<IFolderStatusResponse> {\r\n return new Promise<IFolderStatusResponse>((resolve, reject) => {\r\n const requestOptions: IFolderIdOptions = {\r\n folderId: folderId,\r\n authentication: authentication\r\n };\r\n portalRemoveFolder(requestOptions).then(\r\n result => (result.success ? resolve(result) : reject(result)),\r\n reject\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Removes a group from AGO.\r\n *\r\n * @param groupId Id of a group to delete\r\n * @param authentication Credentials for the request to AGO\r\n * @returns A promise that will resolve with the result of the request\r\n */\r\nexport function removeGroup(\r\n groupId: string,\r\n authentication: UserSession\r\n): Promise<IStatusResponse> {\r\n return new Promise<IStatusResponse>((resolve, reject) => {\r\n const requestOptions: IUserGroupOptions = {\r\n id: groupId,\r\n authentication: authentication\r\n };\r\n portalRemoveGroup(requestOptions).then(\r\n result => (result.success ? resolve(result) : reject(result)),\r\n reject\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Removes an item from AGO.\r\n *\r\n * @param itemId Id of an item to delete\r\n * @param authentication Credentials for the request to AGO\r\n * @returns A promise that will resolve with the result of the request\r\n */\r\nexport function removeItem(\r\n itemId: string,\r\n authentication: UserSession\r\n): Promise<IStatusResponse> {\r\n return new Promise<IStatusResponse>((resolve, reject) => {\r\n const requestOptions: IUserItemOptions = {\r\n id: itemId,\r\n authentication: authentication\r\n };\r\n portalRemoveItem(requestOptions).then(\r\n result => (result.success ? resolve(result) : reject(result)),\r\n reject\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Removes an item or group from AGO.\r\n *\r\n * @param itemId Id of an item or group to delete\r\n * @param authentication Credentials for the request to AGO\r\n * @returns A promise that will resolve with the result of the request\r\n */\r\nexport function removeItemOrGroup(\r\n itemId: string,\r\n authentication: UserSession\r\n): Promise<IStatusResponse> {\r\n return new Promise<IStatusResponse>((resolve, reject) => {\r\n removeItem(itemId, authentication).then(resolve, error => {\r\n removeGroup(itemId, authentication).then(resolve, () => reject(error));\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * Searches for items matching a query and that the caller has access to.\r\n *\r\n * @param search Search string (e.g., \"q=redlands+map\") or a more detailed structure that can include authentication\r\n * @returns Promise resolving with search results\r\n * @see https://developers.arcgis.com/rest/users-groups-and-items/search.htm\r\n */\r\nexport function searchItems(\r\n search: string | ISearchOptions | SearchQueryBuilder\r\n): Promise<ISearchResult<IItem>> {\r\n return portalSearchItems(search);\r\n}\r\n\r\n/**\r\n * Searches for items matching a query and that the caller has access to, continuing recursively until done.\r\n *\r\n * @param search Search string (e.g., \"q=redlands+map\") or a more detailed structure that can include authentication\r\n * @param accumulatedResponse Response built from previous requests\r\n * @returns Promise resolving with search results\r\n * @see https://developers.arcgis.com/rest/users-groups-and-items/search.htm\r\n */\r\nexport function searchAllItems(\r\n search: string | ISearchOptions | SearchQueryBuilder,\r\n accumulatedResponse?: ISearchResult<IItem>\r\n): Promise<ISearchResult<IItem>> {\r\n // Convert the search into an ISearchOptions\r\n const searchOptions = convertToISearchOptions(search);\r\n\r\n // Provide a base into which results can be concatenated\r\n const completeResponse: ISearchResult<IItem> = accumulatedResponse ? accumulatedResponse : {\r\n query: searchOptions.q,\r\n start: 1,\r\n num: 100,\r\n nextStart: -1,\r\n total: 0,\r\n results: [] as IItem[]\r\n } as ISearchResult<IItem>;\r\n\r\n return new Promise<ISearchResult<IItem>>((resolve, reject) => {\r\n searchItems(search).then(\r\n response => {\r\n completeResponse.results = completeResponse.results.concat(response.results);\r\n completeResponse.num = completeResponse.total = completeResponse.results.length;\r\n if (response.nextStart > 0) {\r\n // Insert nextStart into next query\r\n searchOptions.start = response.nextStart;\r\n resolve(searchAllItems(searchOptions, completeResponse));\r\n } else {\r\n resolve(completeResponse);\r\n }\r\n },\r\n e => reject(e)\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Searches for groups matching criteria.\r\n *\r\n * @param searchString Text for which to search, e.g., 'redlands+map', 'type:\"Web Map\" -type:\"Web Mapping Application\"'\r\n * @param authentication Credentials for the request to AGO\r\n * @param additionalSearchOptions Adjustments to search, such as tranche size\r\n * @returns A promise that will resolve with a structure with a tranche of results and\r\n * describing how many items are available\r\n * @see https://developers.arcgis.com/rest/users-groups-and-items/group-search.htm\r\n * @see https://developers.arcgis.com/rest/users-groups-and-items/search-reference.htm\r\n */\r\nexport function searchGroups(\r\n searchString: string,\r\n authentication: UserSession,\r\n additionalSearchOptions?: IAdditionalGroupSearchOptions\r\n): Promise<ISearchResult<IGroup>> {\r\n const searchOptions: ISearchOptions = {\r\n q: searchString,\r\n params: {\r\n ...additionalSearchOptions\r\n },\r\n authentication: authentication\r\n };\r\n return portalSearchGroups(searchOptions);\r\n}\r\n\r\n/**\r\n * Searches for groups matching criteria recurusively.\r\n *\r\n * @param searchString Text for which to search, e.g., 'redlands+map', 'type:\"Web Map\" -type:\"Web Mapping Application\"'\r\n * @param authentication Credentials for the request to AGO\r\n * @param groups List of groups that have been found from previous requests\r\n * @param inPagingParams The paging params for the recurisve searching\r\n *\r\n * @returns A promise that will resolve with all groups that meet the search criteria\r\n */\r\nexport function searchAllGroups(\r\n searchString: string,\r\n authentication: UserSession,\r\n groups?: IGroup[],\r\n inPagingParams? : IPagingParams\r\n): Promise<IGroup[]> {\r\n const pagingParams: IPagingParams = inPagingParams ? inPagingParams : {\r\n start: 1,\r\n num: 24\r\n };\r\n const additionalSearchOptions = {\r\n sortField: \"title\",\r\n sortOrder: \"asc\",\r\n ...pagingParams\r\n };\r\n\r\n // Provide a base onto which results can be concatenated\r\n let finalResults: IGroup[] = groups ? groups : [];\r\n\r\n return new Promise<IGroup[]>((resolve, reject) => {\r\n searchGroups(\r\n searchString,\r\n authentication,\r\n additionalSearchOptions\r\n ).then(\r\n response => {\r\n finalResults = finalResults.concat(response.results);\r\n if (response.nextStart > 0){\r\n pagingParams.start = response.nextStart;\r\n resolve(searchAllGroups(searchString, authentication, finalResults, pagingParams));\r\n } else {\r\n resolve(finalResults);\r\n }\r\n }, e => reject(e)\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Searches for group contents matching criteria recursively.\r\n *\r\n * @param groupId Group whose contents are to be searched\r\n * @param searchString Text for which to search, e.g., 'redlands+map', 'type:\"Web Map\" -type:\"Web Mapping Application\"'\r\n * @param authentication Credentials for the request to AGO\r\n * @param additionalSearchOptions Adjustments to search, such as tranche size and categories of interest; categories\r\n * are supplied as an array: each array element consists of one or more categories to be ORed; array elements are ANDed\r\n * @param portalUrl Rest Url of the portal to perform the search\r\n * @param accumulatedResponse Response built from previous requests\r\n * @returns A promise that will resolve with a structure with a tranche of results and\r\n * describing how many items are available\r\n * @see https://developers.arcgis.com/rest/users-groups-and-items/group-content-search.htm\r\n * @see https://developers.arcgis.com/rest/users-groups-and-items/search-reference.htm\r\n */\r\nexport function searchGroupAllContents(\r\n groupId: string,\r\n searchString: string,\r\n authentication: UserSession,\r\n additionalSearchOptions?: IAdditionalGroupSearchOptions,\r\n portalUrl?: string,\r\n accumulatedResponse?: ISearchResult<IItem>\r\n): Promise<ISearchResult<IItem>> {\r\n additionalSearchOptions = additionalSearchOptions ? additionalSearchOptions : {};\r\n\r\n // Provide a base into which results can be concatenated\r\n const completeResponse: ISearchResult<IItem> = accumulatedResponse ? accumulatedResponse : {\r\n query: searchString,\r\n start: 1,\r\n num: 100,\r\n nextStart: -1,\r\n total: 0,\r\n results: [] as IItem[]\r\n } as ISearchResult<IItem>;\r\n\r\n return new Promise<ISearchResult<IItem>>((resolve, reject) => {\r\n searchGroupContents(\r\n groupId,\r\n searchString,\r\n authentication,\r\n additionalSearchOptions,\r\n portalUrl\r\n ).then(\r\n response => {\r\n completeResponse.results = completeResponse.results.concat(response.results);\r\n completeResponse.num = completeResponse.total = completeResponse.results.length;\r\n if (response.nextStart > 0) {\r\n additionalSearchOptions.start = response.nextStart;\r\n resolve(searchGroupAllContents(groupId, searchString, authentication, additionalSearchOptions,\r\n portalUrl, completeResponse));\r\n } else {\r\n resolve(completeResponse);\r\n }\r\n },\r\n e => reject(e)\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Searches for group contents matching criteria.\r\n *\r\n * @param groupId Group whose contents are to be searched\r\n * @param searchString Text for which to search, e.g., 'redlands+map', 'type:\"Web Map\" -type:\"Web Mapping Application\"'\r\n * @param authentication Credentials for the request to AGO\r\n * @param additionalSearchOptions Adjustments to search, such as tranche size and categories of interest; categories\r\n * are supplied as an array: each array element consists of one or more categories to be ORed; array elements are ANDed\r\n * @param portalUrl Rest Url of the portal to perform the search\r\n * @returns A promise that will resolve with a structure with a tranche of results and\r\n * describing how many items are available\r\n * @see https://developers.arcgis.com/rest/users-groups-and-items/group-content-search.htm\r\n * @see https://developers.arcgis.com/rest/users-groups-and-items/search-reference.htm\r\n */\r\nexport function searchGroupContents(\r\n groupId: string,\r\n searchString: string,\r\n authentication: UserSession,\r\n additionalSearchOptions?: IAdditionalGroupSearchOptions,\r\n portalUrl?: string\r\n): Promise<ISearchResult<IItem>> {\r\n const searchOptions: ISearchGroupContentOptions = {\r\n groupId,\r\n q: searchString,\r\n params: Object.assign(\r\n {\r\n num: 100\r\n },\r\n additionalSearchOptions\r\n ),\r\n authentication: authentication,\r\n portal: portalUrl\r\n };\r\n\r\n // If search options include `categories`, switch to new arcgis-rest-js format\r\n /* istanbul ignore else */\r\n if (Array.isArray(searchOptions.params.categories)) {\r\n searchOptions.params.categories = searchOptions.params.categories.map(\r\n andGroup => andGroup.split(\",\")\r\n );\r\n }\r\n\r\n return searchGroupContent(searchOptions);\r\n}\r\n\r\n/**\r\n * Reassign ownership of a group\r\n *\r\n * @param groupId Group to remove users from\r\n * @param userName The new owner for the group\r\n * @param authentication Credentials for the request to\r\n *\r\n * @returns A promise that will resolve after the group ownership has been assigned\r\n *\r\n */\r\nexport function reassignGroup(\r\n groupId: string,\r\n userName: string,\r\n authentication: UserSession\r\n): Promise<any> {\r\n const requestOptions: IRequestOptions = {\r\n authentication: authentication,\r\n params: {\r\n targetUsername: userName\r\n }\r\n };\r\n return request(\r\n `${authentication.portal}/community/groups/${groupId}/reassign`,\r\n requestOptions\r\n );\r\n}\r\n\r\n/**\r\n * Remove users from a group\r\n *\r\n * @param groupId Group to remove users from\r\n * @param users List of users to remove from the group\r\n * @param authentication Credentials for the request to\r\n *\r\n * @returns A promise that will resolve after the users have been removed\r\n *\r\n */\r\nexport function removeUsers(\r\n groupId: string,\r\n users: string[],\r\n authentication: UserSession\r\n): Promise<any> {\r\n return portalRemoveGroupUsers({\r\n id: groupId,\r\n users,\r\n authentication\r\n });\r\n}\r\n\r\n/**\r\n * Shares an item to the defined group\r\n *\r\n * @param groupId Group to share with\r\n * @param id the item id to share with the group\r\n * @param destinationAuthentication Credentials for the request to AGO\r\n * @param owner owner of the group when sharing tracking items (can be different from the deploying user)\r\n *\r\n * @returns A promise that will resolve after the item has been shared\r\n *\r\n */\r\nexport function shareItem(\r\n groupId: string,\r\n id: string,\r\n destinationAuthentication: UserSession,\r\n owner?: string\r\n): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n const shareOptions: IGroupSharingOptions = {\r\n groupId,\r\n id,\r\n authentication: destinationAuthentication\r\n };\r\n\r\n /* istanbul ignore else */\r\n if (owner) {\r\n shareOptions.owner = owner;\r\n }\r\n\r\n shareItemWithGroup(shareOptions).then(\r\n () => resolve(null),\r\n (e: any) => reject(fail(e))\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Updates an item.\r\n *\r\n * @param itemInfo The base info of an item; note that this content will be serialized, which doesn't work\r\n * for binary content\r\n * @param authentication Credentials for request\r\n * @param folderId Item's folder\r\n * @param additionalParams Updates that are put under the `params` property, which is not serialized\r\n * @return\r\n */\r\nexport function updateItem(\r\n itemInfo: IItemUpdate,\r\n authentication: UserSession,\r\n folderId?: string,\r\n additionalParams?: any\r\n): Promise<IUpdateItemResponse> {\r\n return new Promise((resolve, reject) => {\r\n const updateOptions: IUpdateItemOptions = {\r\n item: itemInfo,\r\n folderId: folderId,\r\n authentication: authentication,\r\n params: {\r\n ...(additionalParams ?? {})\r\n }\r\n };\r\n portalUpdateItem(updateOptions).then(\r\n response => (response.success ? resolve(response) : reject(response)),\r\n err => reject(err)\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Updates a group.\r\n *\r\n * @param groupInfo The base info of a group; note that this content will be serialized, which doesn't work\r\n * for binary content\r\n * @param authentication Credentials for request\r\n * @param additionalParams Updates that are put under the `params` property, which is not serialized\r\n * @returns A Promise that will resolve with the success/failure status of the request\r\n */\r\n export function updateGroup(\r\n groupInfo: IGroup,\r\n authentication: UserSession,\r\n additionalParams?: any\r\n): Promise<{ success: boolean; groupId: string }> {\r\n return new Promise((resolve, reject) => {\r\n const updateOptions: IUpdateGroupOptions = {\r\n group: groupInfo,\r\n authentication,\r\n params: {\r\n ...(additionalParams ?? {})\r\n }\r\n };\r\n\r\n portalUpdateGroup(updateOptions).then(\r\n response => (response.success ? resolve(response) : reject(response)),\r\n err => reject(err)\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Updates an item.\r\n *\r\n * @param itemInfo The base info of an item\r\n * @param data The items data section\r\n * @param authentication Credentials for requests\r\n * @param thumbnail optional thumbnail to update\r\n * @param access \"public\" or \"org\"\r\n * @return\r\n */\r\nexport function updateItemExtended(\r\n itemInfo: IItemUpdate,\r\n data: any,\r\n authentication: UserSession,\r\n thumbnail?: File,\r\n access?: string | undefined,\r\n templateDictionary?: any\r\n): Promise<IUpdateItemResponse> {\r\n return new Promise<IUpdateItemResponse>((resolve, reject) => {\r\n const updateOptions: IUpdateItemOptions = {\r\n item: itemInfo,\r\n params: {\r\n text: data || {} // AGO ignores update if `data` is empty\r\n },\r\n authentication: authentication\r\n };\r\n if (thumbnail) {\r\n updateOptions.params.thumbnail = thumbnail;\r\n }\r\n if (isTrackingViewTemplate(undefined, itemInfo) && templateDictionary) {\r\n updateOptions.owner = templateDictionary.locationTracking.owner;\r\n }\r\n portalUpdateItem(updateOptions).then(\r\n result => {\r\n if (access && access !== \"private\") {\r\n // Set access if it is not AGOL default\r\n // Set the access manually since the access value in createItem appears to be ignored\r\n const accessOptions: ISetAccessOptions = {\r\n id: itemInfo.id,\r\n access: access === \"public\" ? \"public\" : \"org\", // need to use constants rather than string\r\n authentication: authentication\r\n };\r\n setItemAccess(accessOptions).then(\r\n () => resolve(result),\r\n e => reject(fail(e))\r\n );\r\n } else {\r\n resolve(result);\r\n }\r\n },\r\n e => reject(fail(e))\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Update an item's base and data using a dictionary.\r\n *\r\n * @param {string} itemId The item ID\r\n * @param {any} templateDictionary The template dictionary\r\n * @param {UserSession} authentication The destination session info\r\n * @returns Promise resolving to successfulness of update\r\n */\r\nexport function updateItemTemplateFromDictionary(\r\n itemId: string,\r\n templateDictionary: any,\r\n authentication: UserSession\r\n): Promise<IUpdateItemResponse> {\r\n return new Promise<IUpdateItemResponse>((resolve, reject) => {\r\n // Fetch the items as stored in AGO\r\n Promise.all([\r\n getItemBase(itemId, authentication),\r\n getItemDataAsJson(itemId, authentication)\r\n ])\r\n .then(([item, data]) => {\r\n // Do they have any variables?\r\n if (hasUnresolvedVariables(item) || hasUnresolvedVariables(data)) {\r\n // Update if so\r\n const { item: updatedItem, data: updatedData } = replaceInTemplate(\r\n { item, data },\r\n templateDictionary\r\n );\r\n _reportVariablesInItem(itemId, item.type, updatedItem, updatedData);\r\n\r\n return updateItemExtended(updatedItem, updatedData, authentication);\r\n } else {\r\n // Shortcut out if not\r\n return Promise.resolve({\r\n success: true,\r\n id: itemId\r\n } as IUpdateItemResponse);\r\n }\r\n })\r\n .then(result => resolve(result))\r\n .catch(error => reject(error));\r\n });\r\n}\r\n\r\n/**\r\n * Updates the URL of an item.\r\n *\r\n * @param id AGOL id of item to update\r\n * @param url URL to assign to item's base section\r\n * @param authentication Credentials for the request\r\n * @returns A promise that will resolve with the item id when the item has been updated or an AGO-style JSON failure\r\n * response\r\n */\r\nexport function updateItemURL(\r\n id: string,\r\n url: string,\r\n authentication: UserSession\r\n): Promise<string> {\r\n const numAttempts = 3;\r\n return _updateItemURL(id, url, authentication, numAttempts);\r\n}\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\n/**\r\n * Adds a data section to an item.\r\n *\r\n * @param itemId Id of item to receive data file\r\n * @param dataFile Data to be added\r\n * @param authentication Credentials for the request\r\n * @returns Promise reporting success or failure\r\n * @private\r\n */\r\nexport function _addItemDataFile(\r\n itemId: string,\r\n dataFile: File,\r\n authentication: UserSession\r\n): Promise<IUpdateItemResponse> {\r\n return new Promise<IUpdateItemResponse>((resolve, reject) => {\r\n const addItemData: (data: any) => void = (data: any) => {\r\n const addDataOptions: IAddItemDataOptions = {\r\n id: itemId,\r\n data: data,\r\n authentication: authentication\r\n };\r\n portalAddItemData(addDataOptions).then(resolve, reject);\r\n };\r\n\r\n // Item data has to be submitted as text or JSON for those file types\r\n if (dataFile.type.startsWith(\"text/plain\")) {\r\n blobToText(dataFile).then(addItemData, reject);\r\n } else if (dataFile.type === \"application/json\") {\r\n blobToJson(dataFile).then(addItemData, reject);\r\n } else {\r\n addItemData(dataFile);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Adds a metadata file to an item.\r\n *\r\n * @param itemId Id of item to receive data file\r\n * @param metadataFile Metadata to be added\r\n * @param authentication Credentials for the request\r\n * @returns Promise reporting success or failure\r\n * @private\r\n */\r\nexport function _addItemMetadataFile(\r\n itemId: string,\r\n metadataFile: File,\r\n authentication: UserSession\r\n): Promise<IUpdateItemResponse> {\r\n return new Promise<IUpdateItemResponse>((resolve, reject) => {\r\n const addMetadataOptions: IUpdateItemOptions = {\r\n item: {\r\n id: itemId\r\n },\r\n params: {\r\n // Pass metadata in via params because item property is serialized, which discards a blob\r\n metadata: metadataFile\r\n },\r\n authentication: authentication\r\n };\r\n\r\n portalUpdateItem(addMetadataOptions).then(resolve, reject);\r\n });\r\n}\r\n\r\n/**\r\n * Accumulates the number of relationships in a collection of layers.\r\n *\r\n * @param List of layers to examine\r\n * @returns The number of relationships\r\n * @private\r\n */\r\nexport function _countRelationships(layers: any[]): number {\r\n const reducer = (accumulator: number, currentLayer: any) =>\r\n accumulator +\r\n (currentLayer.relationships ? currentLayer.relationships.length : 0);\r\n\r\n return layers.reduce(reducer, 0);\r\n}\r\n\r\n/**\r\n * Gets the full definitions of the layers affiliated with a hosted service.\r\n *\r\n * @param serviceUrl URL to hosted service\r\n * @param layerList List of layers at that service...must contain id\r\n * @param authentication Credentials for the request\r\n * @returns A promise that will resolve with a list of the layers from the admin api\r\n * @private\r\n */\r\nexport function _getCreateServiceOptions(\r\n newItemTemplate: IItemTemplate,\r\n authentication: UserSession,\r\n templateDictionary: any\r\n): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n const serviceInfo: any = newItemTemplate.properties;\r\n const folderId: any = templateDictionary.folderId;\r\n const isPortal: boolean = templateDictionary.isPortal;\r\n const itemId: string = newItemTemplate.itemId;\r\n\r\n validateSpatialReferenceAndExtent(\r\n serviceInfo,\r\n newItemTemplate,\r\n templateDictionary\r\n );\r\n\r\n const fallbackExtent: any = _getFallbackExtent(\r\n serviceInfo,\r\n templateDictionary\r\n );\r\n\r\n const params: IParams = {};\r\n\r\n const itemInfo: any = {\r\n title: newItemTemplate.item.title,\r\n name: newItemTemplate.item.name\r\n };\r\n\r\n const _item: ICreateServiceParams = {\r\n ...itemInfo,\r\n preserveLayerIds: true\r\n };\r\n\r\n const createOptions = {\r\n item: _item,\r\n folderId,\r\n params,\r\n authentication: authentication\r\n };\r\n\r\n createOptions.item = !isTrackingViewTemplate(newItemTemplate) ?\r\n _setItemProperties(\r\n createOptions.item,\r\n newItemTemplate,\r\n serviceInfo,\r\n params,\r\n isPortal\r\n ) :\r\n setTrackingOptions(newItemTemplate, createOptions, templateDictionary);\r\n\r\n // project the portals extent to match that of the service\r\n convertExtentWithFallback(\r\n templateDictionary.organization.defaultExtent,\r\n fallbackExtent,\r\n serviceInfo.service.spatialReference,\r\n templateDictionary.organization.helperServices.geometry.url,\r\n authentication\r\n ).then(\r\n extent => {\r\n templateDictionary[itemId].solutionExtent = extent;\r\n setDefaultSpatialReference(\r\n templateDictionary,\r\n itemId,\r\n extent.spatialReference\r\n );\r\n createOptions.item = replaceInTemplate(\r\n createOptions.item,\r\n templateDictionary\r\n );\r\n createOptions.params = replaceInTemplate(\r\n createOptions.params,\r\n templateDictionary\r\n );\r\n\r\n if (newItemTemplate.item.thumbnail) {\r\n // Pass thumbnail file in via params because item property is serialized, which discards a blob\r\n createOptions.params.thumbnail = newItemTemplate.item.thumbnail;\r\n }\r\n\r\n resolve(createOptions);\r\n },\r\n e => reject(fail(e))\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * When the services spatial reference does not match that of it's default extent\r\n * use the out SRs default extent if it exists in the templateDictionary\r\n * this should be set when adding a custom out wkid to the params before calling deploy\r\n * this will help avoid situations where the orgs default extent and default world extent\r\n * will not project successfully to the out SR\r\n *\r\n * @param serviceInfo the object that contains the spatial reference to evaluate\r\n * @param templateDictionary the template dictionary\r\n * @returns the extent to use as the fallback\r\n * @private\r\n */\r\nexport function _getFallbackExtent(\r\n serviceInfo: any,\r\n templateDictionary: any\r\n): any {\r\n const serviceSR: any = serviceInfo.service.spatialReference;\r\n const serviceInfoWkid = getProp(\r\n serviceInfo,\r\n \"defaultExtent.spatialReference.wkid\"\r\n );\r\n const customDefaultExtent = getProp(\r\n templateDictionary,\r\n \"params.defaultExtent\"\r\n );\r\n return serviceInfoWkid && serviceInfoWkid === serviceSR.wkid\r\n ? serviceInfo.defaultExtent\r\n : customDefaultExtent\r\n ? customDefaultExtent\r\n : serviceInfo.defaultExtent;\r\n}\r\n\r\n/**\r\n * Add relationships to all layers in one call to retain fully functioning composite relationships\r\n *\r\n * @param args The IPostProcessArgs for the request(s)\r\n * @returns Any relationships that should be updated for the service\r\n * @private\r\n */\r\nexport function _getRelationshipUpdates(args: IPostProcessArgs): any {\r\n const rels: any = {\r\n layers: []\r\n };\r\n Object.keys(args.objects).forEach((k: any) => {\r\n const obj: any = args.objects[k];\r\n /* istanbul ignore else */\r\n if (obj.relationships && obj.relationships.length > 0) {\r\n rels.layers.push({\r\n id: obj.id,\r\n relationships: obj.relationships\r\n });\r\n }\r\n deleteProp(obj, \"relationships\");\r\n });\r\n return rels;\r\n}\r\n\r\n/**\r\n * Get the stored contingent values and structure them to be added to the services layers.\r\n *\r\n * @param args The IPostProcessArgs for the request(s)\r\n * @returns Any contingent values that should be added to the service.\r\n * @private\r\n */\r\n export function _getContingentValuesUpdates(args: IPostProcessArgs): any {\r\n const contingentValues: any[] = [];\r\n Object.keys(args.objects).forEach((k: any) => {\r\n const obj: any = args.objects[k];\r\n /* istanbul ignore else */\r\n if (obj.contingentValues) {\r\n contingentValues.push({\r\n id: obj.id,\r\n contingentValues: obj.contingentValues\r\n });\r\n }\r\n deleteProp(obj, \"contingentValues\");\r\n });\r\n return contingentValues;\r\n}\r\n\r\n/**\r\n * Get refresh, add, update, or delete definition info\r\n *\r\n * @param url the base admin url for the service\r\n * @param id the id of the layer\r\n * @param obj parameters for the request\r\n * @param args various arguments to help support the request\r\n * @param type type of update the request will handle\r\n * @returns IUpdate that has the request url and arguments\r\n * @private\r\n */\r\nexport function _getUpdate(\r\n url: string,\r\n id: any,\r\n obj: any,\r\n args: any,\r\n type: \"delete\" | \"update\" | \"add\" | \"refresh\"\r\n): IUpdate {\r\n const ops: any = {\r\n delete: {\r\n url: checkUrlPathTermination(url) + id + \"/deleteFromDefinition\",\r\n params: {\r\n deleteFromDefinition: {\r\n fields:\r\n obj && obj.hasOwnProperty(\"deleteFields\") ? obj.deleteFields : []\r\n }\r\n }\r\n },\r\n update: {\r\n url:\r\n checkUrlPathTermination(url) +\r\n (id ? `${id}/updateDefinition` : \"updateDefinition\"),\r\n params: {\r\n updateDefinition: obj\r\n }\r\n },\r\n add: {\r\n url: checkUrlPathTermination(url) + \"addToDefinition\",\r\n params: {\r\n addToDefinition: obj\r\n }\r\n },\r\n refresh: {\r\n url: checkUrlPathTermination(url) + \"refresh\",\r\n params: {\r\n f: \"json\"\r\n }\r\n }\r\n };\r\n\r\n return {\r\n url: ops[type].url,\r\n params: ops[type].params,\r\n args: args\r\n };\r\n}\r\n\r\n/**\r\n * Changes just the domain part of a URL to lowercase.\r\n *\r\n * @param url URL to modify\r\n * @return Adjusted URL\r\n * @see From `getServerRootUrl` in arcgis-rest-js' ArcGISIdentityManager.ts\r\n * @private\r\n */\r\nexport function _lowercaseDomain(\r\n url: string\r\n): string {\r\n if (!url) {\r\n return url;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n const [_, protocol, domainAndPath ] = url.match(/(https?:\\/\\/)(.+)/);\r\n const [domain, ...path] = domainAndPath.split(\"/\");\r\n\r\n // Only the domain is lowercased because in some cases an org id might be\r\n // in the path which cannot be lowercased.\r\n return `${protocol}${domain.toLowerCase()}/${path.join(\"/\")}`;\r\n}\r\n\r\n/**\r\n * Checks the two main parts of an item for unresolved variables and reports any found.\r\n *\r\n * @param base Item's base section\r\n * @param data Item's data section\r\n * @private\r\n */\r\nexport function _reportVariablesInItem(\r\n itemId: string,\r\n itemType: string,\r\n base: any,\r\n data: any\r\n): void {\r\n const getUnresolved = (v: any) => {\r\n return JSON.stringify(v).match(/{{.+?}}/gim);\r\n };\r\n\r\n // Provide feedback about any remaining unresolved variables\r\n /* istanbul ignore else */\r\n if (base && hasUnresolvedVariables(base)) {\r\n console.log(\r\n itemId +\r\n \" (\" +\r\n itemType +\r\n \") contains variables in base: \" +\r\n JSON.stringify(getUnresolved(base))\r\n );\r\n }\r\n /* istanbul ignore else */\r\n if (data && hasUnresolvedVariables(data)) {\r\n console.log(\r\n itemId +\r\n \" (\" +\r\n itemType +\r\n \") contains variables in data: \" +\r\n JSON.stringify(getUnresolved(data))\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Updates a feature service item.\r\n *\r\n * @param item Item to update\r\n * @param itemTemplate item template for the new item\r\n * @param serviceInfo Service information\r\n * @param params arcgis-rest-js params to update\r\n * @param isPortal Is the service hosted in a portal?\r\n * @returns Updated item\r\n * @private\r\n */\r\nexport function _setItemProperties(\r\n item: any,\r\n itemTemplate: IItemTemplate,\r\n serviceInfo: any,\r\n params: IParams,\r\n isPortal: boolean\r\n): any {\r\n // Set the capabilities\r\n const portalCapabilities = [\r\n \"Create\",\r\n \"Query\",\r\n \"Editing\",\r\n \"Update\",\r\n \"Delete\",\r\n \"Uploads\",\r\n \"Sync\",\r\n \"Extract\"\r\n ];\r\n\r\n const capabilities =\r\n getProp(serviceInfo, \"service.capabilities\") || (isPortal ? \"\" : []);\r\n\r\n item.capabilities = isPortal\r\n ? capabilities\r\n .split(\",\")\r\n .filter((c: any) => portalCapabilities.indexOf(c) > -1)\r\n .join(\",\")\r\n : capabilities;\r\n if (serviceInfo.service.capabilities) {\r\n serviceInfo.service.capabilities = item.capabilities;\r\n }\r\n\r\n // Handle index update for any pre-published solution items that\r\n // have non-unique indexes on relationship key fields\r\n _updateIndexesForRelationshipKeyFields(serviceInfo);\r\n\r\n // set create options item properties\r\n const keyProperties: string[] = [\r\n \"isView\",\r\n \"sourceSchemaChangesAllowed\",\r\n \"isUpdatableView\",\r\n \"capabilities\",\r\n \"isMultiServicesView\"\r\n ];\r\n const deleteKeys: string[] = [\"layers\", \"tables\"];\r\n /* istanbul ignore else */\r\n if (isPortal) {\r\n // removed for issue #423 causing FS to fail to create\r\n deleteKeys.push(\"adminServiceInfo\");\r\n }\r\n const itemKeys: string[] = Object.keys(item);\r\n const serviceKeys: string[] = Object.keys(serviceInfo.service);\r\n serviceKeys.forEach(k => {\r\n /* istanbul ignore else */\r\n if (itemKeys.indexOf(k) === -1 && deleteKeys.indexOf(k) < 0) {\r\n item[k] = serviceInfo.service[k];\r\n // These need to be included via params otherwise...\r\n // addToDef calls fail when adding adminLayerInfo\r\n /* istanbul ignore else */\r\n if (serviceInfo.service.isView && keyProperties.indexOf(k) > -1) {\r\n params[k] = serviceInfo.service[k];\r\n }\r\n }\r\n });\r\n\r\n // Enable editor tracking on layer with related tables is not supported.\r\n /* istanbul ignore else */\r\n if (\r\n item.isMultiServicesView &&\r\n getProp(item, \"editorTrackingInfo.enableEditorTracking\")\r\n ) {\r\n item.editorTrackingInfo.enableEditorTracking = false;\r\n params[\"editorTrackingInfo\"] = item.editorTrackingInfo;\r\n }\r\n\r\n /* istanbul ignore else */\r\n if (isPortal) {\r\n // portal will fail when initialExtent is defined but null\r\n // removed for issue #449 causing FS to fail to create on portal\r\n /* istanbul ignore else */\r\n if (\r\n Object.keys(item).indexOf(\"initialExtent\") > -1 &&\r\n !item.initialExtent\r\n ) {\r\n deleteProp(item, \"initialExtent\");\r\n }\r\n }\r\n\r\n return item;\r\n}\r\n\r\n/**\r\n * Set isUnique as true for indexes that reference origin relationship keyFields.\r\n *\r\n * @param serviceInfo Service information\r\n * @private\r\n */\r\nexport function _updateIndexesForRelationshipKeyFields(serviceInfo: any): void {\r\n const layersAndTables: any[] = (serviceInfo.layers || []).concat(\r\n serviceInfo.tables || []\r\n );\r\n layersAndTables.forEach(item => {\r\n const relationships: any[] = item.relationships;\r\n const indexes: any[] = item.indexes;\r\n /* istanbul ignore else */\r\n if (\r\n relationships &&\r\n relationships.length > 0 &&\r\n indexes &&\r\n indexes.length > 0\r\n ) {\r\n const keyFields: string[] = relationships.reduce((acc, v) => {\r\n /* istanbul ignore else */\r\n if (\r\n v.role === \"esriRelRoleOrigin\" &&\r\n v.keyField &&\r\n acc.indexOf(v.keyField) < 0\r\n ) {\r\n acc.push(v.keyField);\r\n }\r\n return acc;\r\n }, []);\r\n indexes.map(i => {\r\n /* istanbul ignore else */\r\n if (\r\n keyFields.some(k => {\r\n const regEx: RegExp = new RegExp(`\\\\b${k}\\\\b`);\r\n return regEx.test(i.fields);\r\n })\r\n ) {\r\n i.isUnique = true;\r\n }\r\n return i;\r\n });\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Updates the URL of an item.\r\n *\r\n * @param id AGOL id of item to update\r\n * @param url URL to assign to item's base section\r\n * @param authentication Credentials for the request\r\n * @param numAttempts Number of times to try to set the URL if AGO says that it updated the URL, but really didn't\r\n * @returns A promise that will resolve with the item id when the item has been updated or an AGO-style JSON failure\r\n * response\r\n * @private\r\n */\r\nexport function _updateItemURL(\r\n id: string,\r\n url: string,\r\n authentication: UserSession,\r\n numAttempts = 1\r\n): Promise<string> {\r\n // Introduce a lag because AGO update appears to choke with rapid subsequent calls\r\n const msLag = 1000;\r\n\r\n return new Promise((resolve, reject) => {\r\n // Update the item's URL\r\n const options = { item: { id, url }, authentication: authentication };\r\n\r\n portalUpdateItem(options).then(\r\n result => {\r\n if (!result.success) {\r\n reject(fail(result));\r\n } else {\r\n // Get the item to see if the URL really changed; we'll delay a bit before testing because AGO\r\n // has a timing problem with URL updates\r\n setTimeout(() => {\r\n getItem(id, { authentication: authentication }).then(\r\n item => {\r\n const iBrace = item.url.indexOf(\"{\");\r\n if (iBrace > -1) {\r\n console.warn(\r\n id + \" has template variable: \" + item.url.substr(iBrace)\r\n );\r\n }\r\n\r\n if (url === item.url) {\r\n resolve(id);\r\n } else {\r\n // If it fails, try again if we have sufficient attempts remaining\r\n const errorMsg =\r\n \"URL not updated for \" +\r\n item.type +\r\n \" \" +\r\n item.id +\r\n \": \" +\r\n item.url +\r\n \" (\" +\r\n numAttempts +\r\n \")\";\r\n if (--numAttempts > 0) {\r\n _updateItemURL(id, url, authentication, numAttempts).then(\r\n resolve,\r\n reject\r\n );\r\n } else {\r\n console.error(id + \": \" + errorMsg + \"; FAILED\");\r\n reject(errorMsg);\r\n }\r\n }\r\n },\r\n e => reject(fail(e))\r\n );\r\n }, msLag);\r\n }\r\n },\r\n e => reject(fail(e))\r\n );\r\n });\r\n}\r\n","/** @license\r\n * Copyright 2018 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\nimport { UserSession } from \"./interfaces\";\r\n\r\nimport { IHubUserRequestOptions, getHubUrlFromPortal } from \"@esri/hub-common\";\r\n\r\nimport { getSelf, getUser } from \"@esri/arcgis-rest-portal\";\r\n\r\n/**\r\n * Create a IHubUserRequestOptions object from\r\n * the UserSession\r\n * If passed, it will use `templateDictionary`\r\n * values instead of making additional requests\r\n *\r\n * @export\r\n * @param {UserSession} authentication\r\n * @param {*} templateDictionary\r\n * @returns {IHubUserRequestOptions}\r\n */\r\nexport function createHubRequestOptions(\r\n authentication: UserSession,\r\n templateDictionary: any = {}\r\n): Promise<IHubUserRequestOptions> {\r\n // We used to pull the user\r\n // the template dictionary, but ran into issues\r\n // with the user.groups being filtered to groups\r\n // the user owns, vs all groups the user belongs to\r\n // this was problematic as we need to check if the user\r\n // can add more groups, based on how close they are to\r\n // the max 512 group limit.\r\n\r\n // At this time we are simply fetching the user directly\r\n const promises = [];\r\n if (templateDictionary.organization) {\r\n promises.push(Promise.resolve(templateDictionary.organization));\r\n } else {\r\n promises.push(getSelf({ authentication }));\r\n }\r\n // always get the user\r\n promises.push(getUser({ authentication }));\r\n\r\n return Promise.all(promises).then(([pSelf, user]) => {\r\n pSelf.user = user;\r\n const ro = {\r\n authentication,\r\n portalSelf: pSelf,\r\n isPortal: pSelf.isPortal\r\n } as IHubUserRequestOptions;\r\n\r\n if (!pSelf.isPortal) {\r\n ro.hubApiUrl = getHubUrlFromPortal(pSelf);\r\n }\r\n\r\n return ro;\r\n });\r\n}\r\n","/** @license\r\n * Copyright 2021 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/**\r\n * @module deleteGroupIfEmpty\r\n */\r\n\r\nimport { UserSession } from \"../interfaces\";\r\nimport * as portal from \"@esri/arcgis-rest-portal\";\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\n/**\r\n * Deletes a group if it's empty and belongs to the specified user.\r\n *\r\n * @param groupId Id of the group to be deleted\r\n * @param authentication Credentials for the request\r\n * @returns Promise indicating if group was deleted\r\n */\r\nexport function deleteGroupIfEmpty(\r\n groupId: string,\r\n authentication: UserSession\r\n): Promise<boolean> {\r\n let username: string;\r\n let isGroupProtected: boolean;\r\n\r\n // Get the owner tied to the authentication\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n return authentication\r\n .getUsername()\r\n .then(response => {\r\n username = response;\r\n\r\n // We need to know the owner and protection status of the group\r\n return portal.getGroup(groupId, { authentication });\r\n })\r\n .then((group: portal.IGroup) => {\r\n if (group.owner !== username) {\r\n return Promise.resolve(null); // don't delete a group we don't own\r\n }\r\n isGroupProtected = group.protected; // do we need to unprotect before deleting?\r\n\r\n // Get the number of items in the group\r\n const groupContentOptions: portal.IGetGroupContentOptions = {\r\n paging: {\r\n num: 1 // only need 1 item to show that group is not empty\r\n },\r\n authentication\r\n };\r\n return portal.getGroupContent(groupId, groupContentOptions);\r\n })\r\n .then((groupContent: any) => {\r\n // should be IGroupContentResult; see https://github.com/Esri/arcgis-rest-js/pull/858/files\r\n // If groupContent is null, then we don't own the group; if the group is not empty, then we can't delete it\r\n if (!groupContent || groupContent.total > 0) {\r\n return Promise.resolve({ success: false }); // don't delete a group that's not empty\r\n }\r\n\r\n // We're going ahead with deletion; first unprotect it if necessary\r\n if (isGroupProtected) {\r\n const groupOptions: portal.IUserGroupOptions = {\r\n id: groupId,\r\n authentication\r\n };\r\n return portal.unprotectGroup(groupOptions);\r\n } else {\r\n return Promise.resolve({ success: true });\r\n }\r\n })\r\n .then(response => {\r\n if (response.success) {\r\n // All is good so far: we own the group, it's empty, and it's unprotected; proceed with deletion\r\n const groupOptions: portal.IUserGroupOptions = {\r\n id: groupId,\r\n authentication\r\n };\r\n return portal.removeGroup(groupOptions);\r\n } else {\r\n // We should not delete the group\r\n return Promise.resolve({ success: false });\r\n }\r\n })\r\n .then((response: { success: boolean }) => {\r\n // Return a simple response\r\n return Promise.resolve(response.success);\r\n })\r\n .catch(() => {\r\n // In case getGroup or getGroupContent fails\r\n return Promise.resolve(false);\r\n });\r\n}\r\n","/** @license\r\n * Copyright 2021 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/**\r\n * @module deleteEmptyGroups\r\n */\r\n\r\nimport { deleteGroupIfEmpty } from \"./deleteGroupIfEmpty\";\r\nimport { UserSession } from \"../interfaces\";\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\n/**\r\n * Deletes a set of empty groups if they're empty and belong to the user in the authentication.\r\n *\r\n * @param groups Ids of the groups to be deleted\r\n * @param authentication Credentials for the request\r\n * @returns Promise that will resolve with the list of successfully deleted groups\r\n */\r\nexport function deleteEmptyGroups(\r\n groups: string[],\r\n authentication: UserSession\r\n): Promise<string[]> {\r\n if (groups.length === 0) {\r\n return Promise.resolve([]);\r\n }\r\n\r\n // Attempt to delete each group\r\n return Promise.all(\r\n groups.map(groupId => deleteGroupIfEmpty(groupId, authentication))\r\n ).then((responses: boolean[]) => {\r\n // Return just the group ids that succeeded\r\n return groups.filter((groupId: string, index: number) => responses[index]);\r\n });\r\n}\r\n","/** @license\r\n * Copyright 2018 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/**\r\n * @module deleteSolutionFolder\r\n */\r\n\r\nimport { UserSession } from \"../interfaces\";\r\nimport * as portal from \"@esri/arcgis-rest-portal\";\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\n/**\r\n * Deletes a deployed Solution's folder if the folder is empty.\r\n *\r\n * @param solutionFolderId Id of the folder of a deployed Solution\r\n * @param deletedItemIds Ids in the Solution, including the Solution item; used to deal with lagging folder deletion\r\n * @param authentication Credentials for the request\r\n * @returns Promise that will resolve if deletion was successful and fail if any part of it failed;\r\n * if the folder has a non-Solution item, it will not be deleted, but the function will return true\r\n */\r\nexport function deleteSolutionFolder(\r\n solutionIds: string[],\r\n folderId: string,\r\n authentication: UserSession\r\n): Promise<boolean> {\r\n // See if the deployment folder is empty and can be deleted; first, we need info about user\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n return authentication\r\n .getUser({ authentication })\r\n .then(user => {\r\n // And then we need to be sure that the folder is empty\r\n const query = new portal.SearchQueryBuilder()\r\n .match(authentication.username)\r\n .in(\"owner\")\r\n .and()\r\n .match(user.orgId)\r\n .in(\"orgid\")\r\n .and()\r\n .match(folderId)\r\n .in(\"ownerfolder\");\r\n\r\n return portal.searchItems({\r\n q: query,\r\n authentication\r\n });\r\n })\r\n .then((searchResult: portal.ISearchResult<portal.IItem>) => {\r\n // If the search results are all in the deletedItemIds list, then we're dealing with AGO lagging:\r\n // successfully reporting a deletion and yet still returning the item in search results.\r\n // Filter the Solution items out of the search results.\r\n const nonSolutionItems = searchResult.results\r\n .map(foundItem => foundItem.id)\r\n .filter(foundItemId => !solutionIds.includes(foundItemId)); // only save non-solution items\r\n\r\n // If the list is empty, then there are no non-solution items\r\n if (nonSolutionItems.length === 0) {\r\n // OK to delete the folder\r\n return portal.removeFolder({\r\n folderId: folderId,\r\n owner: authentication.username,\r\n authentication\r\n });\r\n } else {\r\n // A non-deployment item is in the folder, so leave it alone\r\n return Promise.resolve({ success: true });\r\n }\r\n })\r\n .then(deleteFolderResponse => {\r\n // Extract the success property\r\n return deleteFolderResponse.success;\r\n });\r\n}\r\n","/** @license\r\n * Copyright 2021 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/**\r\n * Provides a function for deleting a deployed Solution item.\r\n *\r\n * @module deleteSolutionItem\r\n */\r\n\r\nimport { IStatusResponse, UserSession } from \"../interfaces\";\r\nimport * as portal from \"@esri/arcgis-rest-portal\";\r\nimport * as restHelpers from \"../restHelpers\";\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\n/**\r\n * Deletes a deployed Solution item and and all of the items that were created\r\n * as part of that deployment.\r\n *\r\n * @param solutionItemId Id of a deployed Solution\r\n * @param authentication Credentials for the request\r\n * @returns Promise that will resolve with the status of deleting the item\r\n */\r\nexport function deleteSolutionItem(\r\n solutionItemId: string,\r\n authentication: UserSession\r\n): Promise<IStatusResponse> {\r\n const protectOptions: portal.IUserItemOptions = {\r\n id: solutionItemId,\r\n authentication\r\n };\r\n return portal\r\n .unprotectItem(protectOptions)\r\n .then(result => {\r\n if (result.success) {\r\n return restHelpers.removeItem(solutionItemId, authentication);\r\n } else {\r\n return Promise.resolve(result);\r\n }\r\n })\r\n .then(result => {\r\n return Promise.resolve({\r\n success: result.success,\r\n itemId: solutionItemId\r\n });\r\n });\r\n}\r\n","/** @license\r\n * Copyright 2018 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/**\r\n * Provides common functions for organizing dependencies among items.\r\n *\r\n * @module dependencies\r\n */\r\n\r\nimport { getProp } from \"./generalHelpers\";\r\nimport {\r\n IBuildOrdering,\r\n IKeyedListsOfStrings,\r\n IItemTemplate\r\n} from \"./interfaces\";\r\nimport { findTemplateInList } from \"./templatization\";\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\n/**\r\n * Topologically sorts a list of items into a build list.\r\n *\r\n * @param templates A collection of AGO item templates\r\n * @returns An object containing three parts: a list of ids of items in the order in which they need to be built\r\n * so that dependencies are built before items that require those dependencies, a list of item ids found in a\r\n * template's dependencies but not present in the supplied list of templates, and a dictionary containing items\r\n * that need to be post-processed due to dependency cycles.\r\n */\r\nexport function topologicallySortItems(\r\n templates: IItemTemplate[]\r\n): IBuildOrdering {\r\n // Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2009)\r\n // Sections 22.3 (Depth-first search) & 22.4 (Topological sort), pp. 603-615\r\n // Introduction to Algorithms (3rd ed.), The MIT Press, ISBN 978-0-262-03384-8\r\n //\r\n // DFS(G)\r\n // 1 for each vertex u ∈ G,V\r\n // 2 u.color = WHITE (not yet visited)\r\n // 3 u.π = NIL\r\n // 4 time = 0\r\n // 5 for each vertex u ∈ G,V\r\n // 6 if u.color == WHITE\r\n // 7 DFS-VISIT(G,u)\r\n //\r\n // DFS-VISIT(G,u)\r\n // 1 time = time + 1 (white vertex u has just been discovered)\r\n // 2 u.d = time\r\n // 3 u.color = GRAY (visited, in progress)\r\n // 4 for each v ∈ G.Adj[u] (explore edge (u,v))\r\n // 5 if v.color == WHITE\r\n // 6 v.π = u\r\n // 7 DFS-VISIT(G,v)\r\n // 8 u.color = BLACK (blacken u; it is finished)\r\n // 9 time = time + 1\r\n // 10 u.f = time\r\n //\r\n // TOPOLOGICAL-SORT(G)\r\n // 1 call DFS(G) to compute finishing times v.f for each vertex v\r\n // 2 as each vertex is finished, insert it onto front of a linked list\r\n // 3 return the linked list of vertices\r\n\r\n let buildOrder: string[] = []; // list of ordered vertices--don't need linked list because\r\n // we just want relative ordering\r\n const missingDependencies: string[] = [];\r\n const itemsToBePatched: IKeyedListsOfStrings = {};\r\n\r\n const verticesToVisit: ISortVertex = {};\r\n const vertexType: IVertexType = {};\r\n templates.forEach(function(template) {\r\n verticesToVisit[template.itemId] = ESortVisitState.NotYetVisited;\r\n vertexType[template.itemId] =\r\n template.item?.typeKeywords &&\r\n template.item.typeKeywords.includes(\"View Service\")\r\n ? \"View Service\"\r\n : template.item?.tags && template.item.tags.includes(\"Location Tracking Group\")\r\n ? \"Location Tracking Group\" : template.type;\r\n });\r\n\r\n // Algorithm visits each vertex once. Don't need to record times or \"from' nodes (\"π\" in pseudocode)\r\n templates.forEach(function(template) {\r\n if (verticesToVisit[template.itemId] === ESortVisitState.NotYetVisited) {\r\n // if not yet visited\r\n visit(template.itemId);\r\n }\r\n });\r\n\r\n // Visit vertex\r\n function visit(vertexId: string) {\r\n verticesToVisit[vertexId] = ESortVisitState.InProgress; // visited, in progress\r\n\r\n // Visit dependents if not already visited; template has to be in templates list because calls to visit()\r\n // are based on verticiesToVisit[], which is initialized using the templates list\r\n const template = findTemplateInList(templates, vertexId);\r\n\r\n // There are two sources of dependencies\r\n const dependencies: string[] = (template.dependencies || []).concat(\r\n getProp(template, \"properties.syncViews\") || []\r\n );\r\n\r\n dependencies.forEach(function(dependencyId) {\r\n if (verticesToVisit[dependencyId] === ESortVisitState.NotYetVisited) {\r\n // if not yet visited\r\n visit(dependencyId);\r\n } else if (verticesToVisit[dependencyId] === ESortVisitState.InProgress) {\r\n // visited, in progress, therefore a cycle\r\n // save the dependency that needs to be patched\r\n if (itemsToBePatched[vertexId]) {\r\n itemsToBePatched[vertexId].push(dependencyId);\r\n } else {\r\n itemsToBePatched[vertexId] = [dependencyId];\r\n }\r\n } else if (verticesToVisit[dependencyId] !== ESortVisitState.Finished) {\r\n /* istanbul ignore else */\r\n if (missingDependencies.indexOf(dependencyId) < 0) {\r\n missingDependencies.push(dependencyId);\r\n }\r\n }\r\n });\r\n\r\n verticesToVisit[vertexId] = ESortVisitState.Finished;\r\n buildOrder.push(vertexId); // add to end of list of ordered vertices because we want dependents first\r\n }\r\n\r\n // Two special circumstances to deal with\r\n // 1) Location Tracking Group needs to be created before its associated view because the groupId is used in the view name\r\n // - Move tracking groups to the front of the list\r\n // 2) Feature Services need to be created before views that rely on them\r\n // - Move all of the feature services to the beginning of the build order while maintaining their relative ordering\r\n // - Distinguish between base feature services and view feature services\r\n const trackerGroupIds: string[] = [];\r\n const fsIds: string[] = [];\r\n const fsViewIds: string[] = [];\r\n const otherIds: string[] = [];\r\n do {\r\n const id = buildOrder.shift();\r\n if (id) {\r\n if (vertexType[id] === \"Location Tracking Group\") {\r\n trackerGroupIds.push(id);\r\n } else if (vertexType[id] === \"Feature Service\") {\r\n fsIds.push(id);\r\n } else if (vertexType[id] === \"View Service\") {\r\n fsViewIds.push(id);\r\n } else {\r\n otherIds.push(id);\r\n }\r\n }\r\n } while (buildOrder.length > 0);\r\n buildOrder = trackerGroupIds.concat(fsIds, fsViewIds, otherIds);\r\n\r\n const orderingResults: IBuildOrdering = {\r\n buildOrder: buildOrder,\r\n missingDependencies: missingDependencies,\r\n itemsToBePatched: itemsToBePatched\r\n };\r\n return orderingResults;\r\n}\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\n/**\r\n * A vertex used in the topological sort algorithm.\r\n *\r\n * @private\r\n */\r\ninterface ISortVertex {\r\n /**\r\n * Vertex (AGO) id and its visited status, described by the ESortVisitState enum\r\n */\r\n [id: string]: number;\r\n}\r\n\r\n/**\r\n * The item type of a vertex used in the topological sort algorithm.\r\n *\r\n * @private\r\n */\r\ninterface IVertexType {\r\n /**\r\n * Vertex (AGO) id and its AGO type\r\n */\r\n [id: string]: string;\r\n}\r\n\r\n/**\r\n * A visit flag used in the topological sort algorithm.\r\n *\r\n * @private\r\n */\r\nenum ESortVisitState {\r\n /** not yet visited */\r\n NotYetVisited, // WHITE\r\n /** visited, in progress */\r\n InProgress, // GRAY\r\n /** finished */\r\n Finished // BLACK\r\n}\r\n","/** @license\r\n * Copyright 2018 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/**\r\n * @module reconstructBuildOrderIds\r\n */\r\nimport { IBuildOrdering, IItemTemplate } from \"../interfaces\";\r\nimport * as dependencies from \"../dependencies\";\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\n/**\r\n * Reconstructs the build order of a set of templates.\r\n *\r\n * @param templates A collection of AGO item templates\r\n * @returns The ids of the source templates in build order, which is not necessarily the same\r\n * as the build order used to create the template Solution\r\n */\r\nexport function reconstructBuildOrderIds(templates: IItemTemplate[]): string[] {\r\n const buildOrdering: IBuildOrdering = dependencies.topologicallySortItems(\r\n templates\r\n );\r\n return buildOrdering.buildOrder;\r\n}\r\n","/** @license\r\n * Copyright 2018 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/**\r\n * @module reportProgress\r\n */\r\n\r\nimport {\r\n EItemProgressStatus,\r\n SItemProgressStatus,\r\n IDeleteSolutionOptions\r\n} from \"../interfaces\";\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\n/**\r\n * Reports progress as specified via options.\r\n *\r\n * @param percentDone Percent done in range 0 to 100\r\n * @param deleteOptions Reporting options\r\n * @param deletedItemId Id of item deleted\r\n */\r\nexport function reportProgress(\r\n percentDone: number,\r\n deleteOptions: IDeleteSolutionOptions,\r\n deletedItemId = \"\",\r\n status = EItemProgressStatus.Started\r\n): void {\r\n const iPercentDone = Math.round(percentDone);\r\n\r\n /* istanbul ignore else */\r\n if (deleteOptions.progressCallback) {\r\n deleteOptions.progressCallback(iPercentDone, deleteOptions.jobId, {\r\n event: \"\",\r\n data: deletedItemId\r\n });\r\n }\r\n\r\n /* istanbul ignore else */\r\n if (deleteOptions.consoleProgress) {\r\n console.log(\r\n Date.now(),\r\n deletedItemId,\r\n deleteOptions.jobId ?? \"\",\r\n SItemProgressStatus[status],\r\n iPercentDone + \"%\"\r\n );\r\n }\r\n}\r\n","/** @license\r\n * Copyright 2018 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/**\r\n * @module removeItems\r\n */\r\n\r\nimport {\r\n EItemProgressStatus,\r\n IDeleteSolutionOptions,\r\n ISolutionPrecis,\r\n UserSession\r\n} from \"../interfaces\";\r\nimport * as reportProgress from \"./reportProgress\";\r\nimport * as hubSites from \"@esri/hub-sites\";\r\nimport * as portal from \"@esri/arcgis-rest-portal\";\r\nimport * as restHelpers from \"../restHelpers\";\r\nimport { createHubRequestOptions } from \"../create-hub-request-options\";\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\n/**\r\n * Removes a list of items starting from the end.\r\n *\r\n * @param itemIds List of ids of items to remove\r\n * @param hubSiteItemIds List of ids in itemIds that are for Hub Sites\r\n * @param authentication Credentials for the request\r\n * @param percentDone Percent done in range 0 to 100\r\n * @param progressPercentStep Amount that percentDone changes for each item deleted\r\n * @param solutionDeletedSummary Solution summary containing items successfully deleted\r\n * @param solutionFailureSummary Solution summary containing items that could not be deleted\r\n * @param deleteOptions Reporting options\r\n * @returns Promise that will resolve with a list of two solution summaries: successful deletions\r\n * and failed deletions. Ignored items (e.g., already deleted) will not be in either list.\r\n */\r\nexport function removeItems(\r\n solutionSummary: ISolutionPrecis,\r\n hubSiteItemIds: string[],\r\n authentication: UserSession,\r\n percentDone: number,\r\n progressPercentStep: number,\r\n deleteOptions: IDeleteSolutionOptions = {}\r\n): Promise<ISolutionPrecis[]> {\r\n let solutionDeletedSummary: ISolutionPrecis;\r\n let solutionFailureSummary: ISolutionPrecis;\r\n const itemToDelete = solutionSummary.items.shift();\r\n const percentDoneReport =\r\n percentDone + progressPercentStep * (solutionSummary.items.length + 1);\r\n\r\n if (itemToDelete) {\r\n // On to next item in list\r\n return removeItems(\r\n solutionSummary,\r\n hubSiteItemIds,\r\n authentication,\r\n percentDone,\r\n progressPercentStep,\r\n deleteOptions\r\n )\r\n .then((results: ISolutionPrecis[]) => {\r\n // Done with subsequent items in list; now delete the current item\r\n [solutionDeletedSummary, solutionFailureSummary] = results;\r\n\r\n // Remove any delete protection on item\r\n return portal.unprotectItem({\r\n id: itemToDelete.id,\r\n authentication: authentication\r\n });\r\n })\r\n .then(async () => {\r\n // Delete the item\r\n if (hubSiteItemIds.includes(itemToDelete.id)) {\r\n const options = await createHubRequestOptions(authentication);\r\n return hubSites.removeSite(itemToDelete.id, options);\r\n } else {\r\n return restHelpers.removeItem(itemToDelete.id, authentication);\r\n }\r\n })\r\n .then(() => {\r\n // Successful deletion\r\n solutionDeletedSummary.items.push(itemToDelete);\r\n reportProgress.reportProgress(\r\n percentDoneReport,\r\n deleteOptions,\r\n itemToDelete.id,\r\n EItemProgressStatus.Finished\r\n );\r\n return [solutionDeletedSummary, solutionFailureSummary];\r\n })\r\n .catch(error => {\r\n const errorMessage = error.error?.message || error.message;\r\n if (\r\n errorMessage &&\r\n errorMessage.includes(\"Item does not exist or is inaccessible\")\r\n ) {\r\n // Filter out errors where the item doesn't exist, such as from a previous delete attempt\r\n reportProgress.reportProgress(\r\n percentDoneReport,\r\n deleteOptions,\r\n itemToDelete.id,\r\n EItemProgressStatus.Ignored\r\n );\r\n } else {\r\n // Otherwise, we have a real delete error, including where AGO simply returns \"success: false\"\r\n solutionFailureSummary.items.push(itemToDelete);\r\n reportProgress.reportProgress(\r\n percentDoneReport,\r\n deleteOptions,\r\n itemToDelete.id,\r\n EItemProgressStatus.Failed\r\n );\r\n }\r\n return [solutionDeletedSummary, solutionFailureSummary];\r\n });\r\n } else {\r\n // We've exhausted our list of items; start building up the lists of results\r\n solutionDeletedSummary = {\r\n id: solutionSummary.id,\r\n title: solutionSummary.title,\r\n folder: solutionSummary.folder,\r\n items: [],\r\n groups: []\r\n };\r\n solutionFailureSummary = {\r\n id: solutionSummary.id,\r\n title: solutionSummary.title,\r\n folder: solutionSummary.folder,\r\n items: [],\r\n groups: []\r\n };\r\n return Promise.resolve([solutionDeletedSummary, solutionFailureSummary]);\r\n }\r\n}\r\n","/** @license\r\n * Copyright 2021 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/**\r\n * Provides a function for deleting a deployed Solution item and all of the items that were created\r\n * as part of that deployment.\r\n *\r\n * @module deleteSolution\r\n */\r\n\r\nimport {\r\n EItemProgressStatus,\r\n IDeleteSolutionOptions,\r\n ISolutionPrecis,\r\n IStatusResponse,\r\n UserSession\r\n} from \"../interfaces\";\r\nimport * as deleteEmptyGroups from \"./deleteEmptyGroups\";\r\nimport * as deleteSolutionFolder from \"./deleteSolutionFolder\";\r\nimport * as deleteSolutionItem from \"./deleteSolutionItem\";\r\nimport * as removeItems from \"./removeItems\";\r\nimport * as reportProgress from \"./reportProgress\";\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\n/**\r\n * Deletes a deployed Solution item and and all of the items that were created\r\n * as part of that deployment.\r\n *\r\n * @param solutionItemId Id of a deployed Solution\r\n * @param solutionSummary List of items in the solution that would be deleted\r\n * @param authentication Credentials for the request\r\n * @param options Progress reporting options\r\n * @returns Promise that will resolve with a list of two solution summaries: successful deletions\r\n * and failed deletions. Ignored items (e.g., already deleted) and items shared with more than\r\n * one Solution will not be in either list.\r\n * Note that Solution item and its deployment folder will only be deleted if all of its deployed\r\n * items were deleted (the failure list is empty). This makes it possible to re-attempted\r\n * deletion using the solutionItemId.\r\n */\r\nexport function deleteSolutionContents(\r\n solutionItemId: string,\r\n solutionSummary: ISolutionPrecis,\r\n authentication: UserSession,\r\n options?: IDeleteSolutionOptions\r\n): Promise<ISolutionPrecis[]> {\r\n const deleteOptions: IDeleteSolutionOptions = options || {};\r\n let progressPercentStep = 0;\r\n let percentDone = 0;\r\n let solutionDeletedSummary: ISolutionPrecis;\r\n let solutionFailureSummary: ISolutionPrecis;\r\n let solutionIds = [] as string[];\r\n\r\n return new Promise<ISolutionPrecis[]>(resolve => {\r\n let removalPromise: Promise<ISolutionPrecis[]> = Promise.resolve([\r\n {\r\n id: solutionSummary.id,\r\n title: solutionSummary.title,\r\n folder: solutionSummary.folder,\r\n items: [],\r\n groups: []\r\n },\r\n {\r\n id: solutionSummary.id,\r\n title: solutionSummary.title,\r\n folder: solutionSummary.folder,\r\n items: [],\r\n groups: []\r\n }\r\n ] as ISolutionPrecis[]);\r\n\r\n if (solutionSummary.items.length > 0) {\r\n // Save a copy of the Solution item ids for the deleteSolutionFolder call because removeItems\r\n // destroys the solutionSummary.items list\r\n solutionIds = solutionSummary.items\r\n .map(item => item.id)\r\n .concat([solutionItemId]);\r\n\r\n const hubSiteItemIds: string[] = solutionSummary.items\r\n .filter((item: any) => item.type === \"Hub Site Application\")\r\n .map((item: any) => item.id);\r\n\r\n // Delete the items\r\n progressPercentStep = 100 / (solutionSummary.items.length + 2); // one extra for starting plus one extra for solution itself\r\n reportProgress.reportProgress(\r\n (percentDone += progressPercentStep),\r\n deleteOptions\r\n ); // let the caller know that we've started\r\n\r\n // Proceed with the deletion\r\n removalPromise = removeItems.removeItems(\r\n solutionSummary,\r\n hubSiteItemIds,\r\n authentication,\r\n percentDone,\r\n progressPercentStep,\r\n deleteOptions\r\n );\r\n }\r\n\r\n removalPromise\r\n .then((results: ISolutionPrecis[]) => {\r\n [solutionDeletedSummary, solutionFailureSummary] = results;\r\n\r\n // Attempt to delete groups; we won't be checking success\r\n return new Promise<ISolutionPrecis[]>(resolve2 => {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n deleteEmptyGroups\r\n .deleteEmptyGroups(solutionSummary.groups, authentication)\r\n .then(() => {\r\n resolve2(results);\r\n });\r\n });\r\n })\r\n .then(() => {\r\n // If there were no failed deletes, it's OK to delete Solution item\r\n if (solutionFailureSummary.items.length === 0) {\r\n return deleteSolutionItem.deleteSolutionItem(\r\n solutionItemId,\r\n authentication\r\n );\r\n } else {\r\n // Not all items were deleted, so don't delete solution\r\n return Promise.resolve({ success: false, itemId: solutionItemId });\r\n }\r\n })\r\n .then((solutionItemDeleteStatus: IStatusResponse) => {\r\n // If all deletes succeeded, see if we can delete the folder that contained them\r\n if (solutionItemDeleteStatus.success) {\r\n reportProgress.reportProgress(\r\n 99,\r\n deleteOptions,\r\n solutionItemId,\r\n EItemProgressStatus.Finished\r\n );\r\n\r\n // Can't delete if folder contains non-solution items\r\n return deleteSolutionFolder.deleteSolutionFolder(\r\n solutionIds,\r\n solutionSummary.folder,\r\n authentication\r\n );\r\n } else {\r\n return Promise.resolve(false);\r\n }\r\n })\r\n .then(() => {\r\n resolve([solutionDeletedSummary, solutionFailureSummary]);\r\n })\r\n .catch(() => {\r\n resolve([solutionDeletedSummary, solutionFailureSummary]);\r\n });\r\n });\r\n}\r\n","/** @license\r\n * Copyright 2018 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/**\r\n * @module deleteSolution\r\n */\r\n\r\nimport {\r\n DeployedSolutionFormatVersion,\r\n IItemGeneralized,\r\n IItemTemplate,\r\n ISolutionItemData,\r\n ISolutionPrecis,\r\n UserSession\r\n} from \"./interfaces\";\r\nimport * as reconstructBuildOrderIds from \"./deleteHelpers/reconstructBuildOrderIds\";\r\nimport * as portal from \"@esri/arcgis-rest-portal\";\r\nimport * as restHelpersGet from \"./restHelpersGet\";\r\nimport * as templatization from \"./templatization\";\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\n/**\r\n * Creates a summary of a deployed Solution.\r\n *\r\n * @param solutionItemId Id of a deployed Solution\r\n * @param authentication Credentials for the request\r\n * @returns Promise resolving to a summary of the deployed Solution\r\n */\r\nexport function getSolutionSummary(\r\n solutionItemId: string,\r\n authentication: UserSession\r\n): Promise<ISolutionPrecis> {\r\n const solutionSummary: ISolutionPrecis = {\r\n id: solutionItemId,\r\n title: \"\",\r\n folder: \"\",\r\n items: [],\r\n groups: []\r\n };\r\n let templates: IItemTemplate[] = [];\r\n let deployedSolutionVersion = DeployedSolutionFormatVersion;\r\n let itemData: ISolutionItemData;\r\n\r\n return Promise.all([\r\n restHelpersGet.getItemBase(solutionItemId, authentication),\r\n restHelpersGet.getItemDataAsJson(solutionItemId, authentication)\r\n ])\r\n .then((response: any) => {\r\n const itemBase: IItemGeneralized = response[0];\r\n itemData = response[1];\r\n\r\n // Make sure that the item is a deployed Solution\r\n if (\r\n itemBase.type !== \"Solution\" ||\r\n !(\r\n itemBase.typeKeywords.includes(\"Solution\") &&\r\n itemBase.typeKeywords.includes(\"Deployed\")\r\n )\r\n ) {\r\n throw new Error(\r\n \"Item \" + solutionItemId + \" is not a deployed Solution\"\r\n );\r\n }\r\n\r\n solutionSummary.title = itemBase.title;\r\n solutionSummary.folder = itemBase.ownerFolder;\r\n deployedSolutionVersion = templatization.extractSolutionVersion(itemData);\r\n templates = itemData.templates;\r\n\r\n // Get the forward Solution2Item relationships\r\n return restHelpersGet.getItemsRelatedToASolution(\r\n solutionItemId,\r\n authentication\r\n );\r\n })\r\n .then((relatedItems: portal.IItem[]) => {\r\n solutionSummary.items = relatedItems.map(relatedItem => {\r\n return {\r\n id: relatedItem.id,\r\n type: relatedItem.type,\r\n title: relatedItem.title,\r\n modified: relatedItem.modified,\r\n owner: relatedItem.owner\r\n };\r\n });\r\n\r\n // Get the build order\r\n let buildOrderIds = [] as string[];\r\n if (deployedSolutionVersion < 1) {\r\n // Version 0\r\n buildOrderIds = reconstructBuildOrderIds.reconstructBuildOrderIds(\r\n templates\r\n );\r\n } else {\r\n // Version ≥ 1\r\n buildOrderIds = templates.map((template: any) => template.itemId);\r\n }\r\n\r\n // Get the dependent groups in the items to be deleted\r\n let dependentGroups = new Set<string>();\r\n itemData.templates.forEach(item => {\r\n item.groups.forEach(groupId => {\r\n dependentGroups = dependentGroups.add(groupId);\r\n });\r\n });\r\n solutionSummary.groups = [];\r\n dependentGroups.forEach((value: string) =>\r\n solutionSummary.groups.push(value)\r\n );\r\n\r\n // Sort the related items into build order\r\n solutionSummary.items.sort(\r\n (first, second) =>\r\n buildOrderIds.indexOf(first.id) - buildOrderIds.indexOf(second.id)\r\n );\r\n\r\n return solutionSummary;\r\n });\r\n}\r\n","/** @license\r\n * Copyright 2018 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/**\r\n * @module deleteSolution\r\n */\r\n\r\nimport {\r\n ISolutionItemPrecis,\r\n ISolutionPrecis,\r\n UserSession\r\n} from \"./interfaces\";\r\nimport * as getSolutionSummary from \"./getSolutionSummary\";\r\nimport * as restHelpersGet from \"./restHelpersGet\";\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\n/**\r\n * Returns a list of items in a deployed Solution that would be deleted by the `deleteSolution` function; list\r\n * does not include the Solution folder, Solution items that are shared with any item other than the deployed\r\n * Solution, or the Solution item itself.\r\n *\r\n * @param solutionItemId Id of a deployed Solution\r\n * @param authentication Credentials for the request\r\n * @returns Promise resolving to the list of items in the solution that would be deleted.\r\n */\r\nexport function getDeletableSolutionInfo(\r\n solutionItemId: string,\r\n authentication: UserSession\r\n): Promise<ISolutionPrecis> {\r\n let solutionSummary: ISolutionPrecis;\r\n\r\n return new Promise<ISolutionPrecis>((resolve, reject) => {\r\n getSolutionSummary\r\n .getSolutionSummary(solutionItemId, authentication)\r\n .then((response: ISolutionPrecis) => {\r\n // Fetch each item's relationships back to Solution items\r\n solutionSummary = response;\r\n const awaitAllItems: Array<Promise<\r\n string[]\r\n >> = solutionSummary.items.map((item: ISolutionItemPrecis) =>\r\n restHelpersGet.getSolutionsRelatedToAnItem(item.id, authentication)\r\n );\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n return Promise.all(awaitAllItems);\r\n })\r\n .then((responses: string[][]) => {\r\n // Filter out items that are shared with another Solution\r\n solutionSummary.items = solutionSummary.items.filter(\r\n (item: ISolutionItemPrecis, index: number) =>\r\n responses[index].length === 1\r\n );\r\n resolve(solutionSummary);\r\n })\r\n .catch(reject);\r\n });\r\n}\r\n","/** @license\r\n * Copyright 2021 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\nimport { request, IRequestOptions } from \"@esri/arcgis-rest-request\";\r\nimport { getPortalUrl } from \"@esri/arcgis-rest-portal\";\r\n\r\nexport interface ISubscriptionInfo {\r\n id: string;\r\n [key: string]: any;\r\n}\r\n\r\n/**\r\n * Fetch subscription information about the current portal using\r\n * portals/self/subscriptionInfo\r\n *\r\n * @param requestOptions\r\n */\r\nexport function getSubscriptionInfo(\r\n requestOptions: IRequestOptions\r\n): Promise<ISubscriptionInfo> {\r\n // construct the search url\r\n const url = `${getPortalUrl(requestOptions)}/portals/self/subscriptioninfo`;\r\n\r\n // default to a GET request\r\n const options: IRequestOptions = {\r\n ...{ httpMethod: \"GET\" },\r\n ...requestOptions\r\n };\r\n\r\n // send the request\r\n return request(url, options);\r\n}\r\n","/** @license\r\n * Copyright 2020 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nimport { ISolutionItem, IItemGeneralized, IItemTemplate } from \"../interfaces\";\r\nimport { getProp, cloneObject } from \"@esri/hub-common\";\r\n\r\n/**\r\n * Apply the initial schema for old Hub Solutions\r\n *\r\n * @param model\r\n * @param authentication\r\n * @private\r\n */\r\nexport function _applySchema(model: ISolutionItem): ISolutionItem {\r\n if (getProp(model, \"item.properties.schemaVersion\") >= 1) {\r\n return model;\r\n }\r\n\r\n const clone = cloneObject(model);\r\n if (!clone.item.properties) {\r\n clone.item.properties = {};\r\n }\r\n\r\n // upgrade the schema of the Templates\r\n const templates = getProp(clone, \"data.templates\") || [];\r\n clone.data.templates = templates.map((entry: any) => {\r\n return {\r\n key: entry.fieldName || entry.key,\r\n type: entry.type,\r\n item: entry.item as IItemGeneralized,\r\n data: entry.data,\r\n itemId: entry.itemId || entry.fieldName || entry.key,\r\n resources: entry.resources || []\r\n } as IItemTemplate;\r\n });\r\n clone.item.properties.schemaVersion = 1;\r\n return clone;\r\n}\r\n","/** @license\r\n * Copyright 2020 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nimport { getProp, cloneObject } from \"@esri/hub-common\";\r\n\r\n/**\r\n * Convert indicator \"definitions\" from the CAS style to the Indicator schema\r\n * see https://github.com/ArcGIS/Hub/blob/master/indicators.md\r\n *\r\n * @param model\r\n * @private\r\n */\r\nexport function _upgradeTwoDotZero(model: any): any {\r\n if (getProp(model, \"item.properties.schemaVersion\") >= 2) {\r\n return model;\r\n }\r\n // get the indicators from the .configurationSettings...\r\n const clone = cloneObject(model);\r\n const configSettings = getProp(clone, \"data.configurationSettings\") || [];\r\n\r\n const indicatorsHash = configSettings.find(\r\n (e: any) => e.category === \"Indicators\"\r\n );\r\n clone.data.indicators = _convertIndicatorsToDefinitions(indicatorsHash);\r\n // remove CAS structure\r\n delete clone.data.configurationSettings;\r\n\r\n // set the schemaVersion...\r\n clone.item.properties.schemaVersion = 2;\r\n return clone;\r\n}\r\n\r\n/**\r\n * Given the Indicators entry from a CAS configurationSettings array,\r\n * convert to an indicators object in the new schema\r\n *\r\n * @private\r\n */\r\nexport function _convertIndicatorsToDefinitions(indicatorsHash: any = {}) {\r\n // the incoming structure should have a .fields property, and what we want will be in there...\r\n if (!indicatorsHash.fields || !Array.isArray(indicatorsHash.fields)) {\r\n indicatorsHash.fields = [];\r\n }\r\n const defs = indicatorsHash.fields.map(_convertIndicatorToDefinition);\r\n // now we need to create an object which has props for each def\r\n return defs;\r\n}\r\n\r\n/**\r\n * Convert a CAS formatted indicator to the .definition in the new schama\r\n *\r\n * @private\r\n */\r\nexport const _convertIndicatorToDefinition = function(ind: any) {\r\n const def = {\r\n id: ind.fieldName,\r\n type: \"Data\",\r\n name: ind.label || ind.fieldName,\r\n optional: ind.optional || false,\r\n definition: {\r\n description: ind.label || ind.fieldName,\r\n supportedTypes: [].concat(ind.layerOptions.supportedTypes),\r\n geometryTypes: [].concat(ind.layerOptions.geometryTypes),\r\n fields: ind.fields.map(_convertIndicatorField)\r\n }\r\n };\r\n return def;\r\n};\r\n\r\n/**\r\n * Convert the CAS formatted \"field\" into the new schema\r\n *\r\n * @private\r\n */\r\nexport const _convertIndicatorField = function(field: any) {\r\n return {\r\n id: field.fieldName,\r\n name: field.label,\r\n optional: field.optional || false,\r\n description: field.tooltip,\r\n supportedTypes: [].concat(field.supportedTypes)\r\n };\r\n};\r\n","/** @license\r\n * Copyright 2020 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nimport { getProp } from \"@esri/hub-common\";\r\n\r\n/**\r\n *\r\n * @param model\r\n * @param authentication\r\n * @private\r\n */\r\nexport function _upgradeTwoDotOne(model: any) {\r\n if (getProp(model, \"item.properties.schemaVersion\") >= 2.1) {\r\n return model;\r\n }\r\n model.data.templates = model.data.templates.map((entry: any) => {\r\n entry.key = entry.fieldName || entry.key;\r\n entry.itemId = entry.itemId || entry.key;\r\n return entry;\r\n });\r\n model.item.properties.schemaVersion = 2.1;\r\n return model;\r\n}\r\n","/** @license\r\n * Copyright 2018 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\nimport { ISolutionItem, ISolutionItemData } from \"../interfaces\";\r\nimport { getProp } from \"../generalHelpers\";\r\nimport { deepStringReplace, cloneObject } from \"@esri/hub-common\";\r\n\r\n/**\r\n * Swap tokens from Hub Solutions\r\n *\r\n * @param model\r\n * @private\r\n */\r\nexport function _upgradeTwoDotTwo(model: ISolutionItem): ISolutionItem {\r\n if (getProp(model, \"item.properties.schemaVersion\") >= 2.2) {\r\n return model;\r\n }\r\n\r\n const clone = cloneObject(model);\r\n // NOTE: Not all of these have closing `}}` and that is intentional\r\n const swaps = [\r\n { src: \"{{solution.name}}\", val: \"{{solution.title}}\" },\r\n { src: \"{{initiative.name}}\", val: \"{{solution.title}}\" },\r\n { src: \"{{initiative.title}}\", val: \"{{solution.title}}\" },\r\n { src: \"{{initiative.extent}}\", val: \"{{organization.defaultExtentBBox}}\" },\r\n {\r\n src: \"{{initiative.collaborationGroupId\",\r\n val: \"{{teams.collaborationGroupId\"\r\n },\r\n { src: \"{{initiative.openDataGroupId\", val: \"{{teams.contentGroupId\" },\r\n { src: \"{{initiative.contentGroupId\", val: \"{{teams.contentGroupId\" },\r\n { src: \"{{initiative.followersGroupId\", val: \"{{teams.followersGroupId\" },\r\n { src: \"{{collaborationGroupId\", val: \"{{teams.collaborationGroupId\" },\r\n { src: \"{{contentGroupId\", val: \"{{teams.contentGroupId\" },\r\n { src: \"{{followersGroupId\", val: \"{{teams.followersGroupId\" },\r\n { src: \"{{initiative.id\", val: \"{{initiative.item.id\" },\r\n { src: \"{{organization.portalBaseUrl\", val: \"{{portalBaseUrl\" }\r\n ];\r\n swaps.forEach(swap => {\r\n clone.data = deepStringReplace(\r\n clone.data,\r\n swap.src,\r\n swap.val\r\n ) as ISolutionItemData;\r\n });\r\n clone.item.properties.schemaVersion = 2.2;\r\n return clone;\r\n}\r\n","/** @license\r\n * Copyright 2018 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\nimport { ISolutionItem } from \"../interfaces\";\r\nimport { getProp } from \"../generalHelpers\";\r\nimport { cloneObject } from \"@esri/hub-common\";\r\n\r\n/**\r\n * Migrate Hub assets structure to resource paths\r\n *\r\n * @param model\r\n * @private\r\n */\r\nexport function _upgradeTwoDotThree(model: ISolutionItem) {\r\n if (getProp(model, \"item.properties.schemaVersion\") >= 2.3) {\r\n return model;\r\n }\r\n\r\n const clone = cloneObject(model);\r\n\r\n // rename template.resources => template.assets\r\n // this has landed in Hub, so we have actual items like this :(\r\n // we will have another schema upgrade that will re-create the\r\n // resources array\r\n clone.data.templates = clone.data.templates.map(tmpl => {\r\n if (tmpl.resources) {\r\n tmpl.assets = tmpl.resources.map(r => {\r\n return {\r\n name: r,\r\n type: \"resource\"\r\n };\r\n });\r\n delete tmpl.resources;\r\n } else {\r\n tmpl.assets = [];\r\n }\r\n return tmpl;\r\n });\r\n clone.item.properties.schemaVersion = 2.3;\r\n return clone;\r\n}\r\n","/** @license\r\n * Copyright 2018 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\nimport { ISolutionItem, ISolutionItemData } from \"../interfaces\";\r\nimport { deepStringReplace, getProp, cloneObject } from \"@esri/hub-common\";\r\n\r\n/**\r\n * Hub Solutions use the `key` property for follow on replacements\r\n * but the Solution.js ones use the\r\n *\r\n * @param model ISolutionItem\r\n * @private\r\n */\r\nexport function _upgradeTwoDotFour(model: ISolutionItem): ISolutionItem {\r\n if (getProp(model, \"item.properties.schemaVersion\") >= 2.4) {\r\n return model;\r\n } else {\r\n // iterate the templates looking for `{{string_<key>.item.id}}`\r\n // and convert that to `{{id.itemId}}`\r\n const clone = cloneObject(model);\r\n\r\n // create the swaps for all the templates\r\n const swaps = clone.data.templates.map(tmpl => {\r\n return {\r\n src: `{{${tmpl.key}.item.id}}`,\r\n val: `{{${tmpl.itemId}.itemId}}`\r\n };\r\n });\r\n // apply them all\r\n swaps.forEach(swap => {\r\n clone.data = deepStringReplace(\r\n clone.data,\r\n swap.src,\r\n swap.val\r\n ) as ISolutionItemData;\r\n });\r\n // TODO: Unify Hub Solution Editor and Solution.js handling of resources\r\n // convert assets back to resources that include the templateId\r\n clone.data.templates = clone.data.templates.map(tmpl => {\r\n if (tmpl.assets) {\r\n tmpl.resources = tmpl.assets.map((a: any) => {\r\n // asset names can be like thumbnail/filename.ext\r\n // so let's generally remove any folder prefixes\r\n let name = a.name;\r\n if (name.indexOf(\"/\") > -1) {\r\n name = name.split(\"/\")[1];\r\n }\r\n return `${tmpl.itemId}-${name}`;\r\n });\r\n }\r\n // ensure this property is present\r\n if (!tmpl.estimatedDeploymentCostFactor) {\r\n tmpl.estimatedDeploymentCostFactor = 1;\r\n }\r\n return tmpl;\r\n });\r\n // update the schema version\r\n clone.item.properties.schemaVersion = 2.4;\r\n return clone;\r\n }\r\n}\r\n","/** @license\r\n * Copyright 2018 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\nimport { ISolutionItem } from \"../interfaces\";\r\nimport { getProp, cloneObject } from \"../generalHelpers\";\r\n\r\n/**\r\n * Applies Survey123 Form Config Schema migrations.\r\n *\r\n * @param {ISolutionItem} model A Solution model\r\n * @returns {ISolutionItem}\r\n * @private\r\n */\r\nexport function _upgradeTwoDotFive(model: ISolutionItem): ISolutionItem {\r\n if (getProp(model, \"item.properties.schemaVersion\") >= 2.5) {\r\n return model;\r\n } else {\r\n const clone: ISolutionItem = cloneObject(model);\r\n\r\n clone.data.templates.forEach(template => {\r\n if (template.type === \"Form\") {\r\n if (getProp(template, \"properties.form.portalUrl\")) {\r\n template.properties.form.portalUrl = \"{{portalBaseUrl}}\";\r\n }\r\n\r\n const ver = parseFloat(\r\n getProp(template, \"properties.form.version\") || \"2.5\"\r\n );\r\n const hasFormSchema = getProp(template, \"properties.form\");\r\n if (!hasFormSchema || ver >= 3.8) {\r\n return template;\r\n }\r\n\r\n template.properties.form.layerName = \"survey\";\r\n // nest the theme into themes\r\n if (getProp(template, \"properties.form.theme\")) {\r\n template.properties.form.themes = [template.properties.form.theme];\r\n delete template.properties.form.theme;\r\n }\r\n const updateLayout = (question: any) => {\r\n if (question.appearance && question.appearance.layout) {\r\n question.appearance.layout = \"vertical\";\r\n }\r\n return question;\r\n }\r\n // replace whatever layout on all questions with vertical\r\n template.properties.form.questions = template.properties.form.questions.map((question: any) => {\r\n return !question.questions\r\n ? updateLayout(question)\r\n : {\r\n ...question,\r\n questions: question.questions.map(updateLayout)\r\n };\r\n });\r\n template.properties.form.version = 3.8;\r\n }\r\n });\r\n\r\n // update the schema version\r\n clone.item.properties.schemaVersion = 2.5;\r\n return clone;\r\n }\r\n}\r\n","/** @license\r\n * Copyright 2018 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\nimport { ISolutionItem, IItemTemplate } from \"../interfaces\";\r\nimport { getProp, cloneObject, cleanItemId } from \"../generalHelpers\";\r\n\r\n/**\r\n * Hub creates a Web Map dependency for Form templates\r\n * that contain map questions. This migration updates\r\n * any form's map questions to use the default basemap\r\n * and filters out related Web Map templates.\r\n *\r\n * @param {ISolutionItem} model A Solution model\r\n * @returns {ISolutionItem}\r\n * @private\r\n */\r\nexport function _upgradeTwoDotSix(model: ISolutionItem): ISolutionItem {\r\n if (getProp(model, \"item.properties.schemaVersion\") >= 2.6) {\r\n return model;\r\n } else {\r\n const clone: ISolutionItem = cloneObject(model);\r\n const formTemplates = clone.data.templates.filter(\r\n ({ type }) => type === \"Form\"\r\n );\r\n\r\n const toWebMapIds = (mapIds: string[], formTemplate: IItemTemplate) => {\r\n if (getProp(formTemplate, \"properties.form.questions.length\")) {\r\n formTemplate.properties.form.questions.forEach((question: any) => {\r\n if (question.maps) {\r\n question.maps.forEach((webMap: any) => {\r\n const webMapId = cleanItemId(webMap.itemId);\r\n\r\n // remove the web map dependency from the form template\r\n formTemplate.dependencies = formTemplate.dependencies.filter(\r\n dependency => dependency !== webMapId\r\n );\r\n\r\n // record the web map template id so we can remove them\r\n mapIds.push(webMapId);\r\n });\r\n }\r\n });\r\n }\r\n return mapIds;\r\n };\r\n const webMapIds: string[] = formTemplates.reduce(toWebMapIds, []);\r\n\r\n // remove the web map templates\r\n clone.data.templates = clone.data.templates.filter(\r\n template => !webMapIds.includes(template.itemId)\r\n );\r\n\r\n clone.item.properties.schemaVersion = 2.6;\r\n\r\n return clone;\r\n }\r\n}\r\n","/** @license\r\n * Copyright 2020 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\nimport { getProp, createId } from \"@esri/hub-common\";\r\n\r\n/**\r\n * Updates schema to 2.7.\r\n *\r\n * @param model Model to be updated\r\n * @returns Updated model\r\n * @private\r\n */\r\nexport function _upgradeTwoDotSeven(model: any): any {\r\n if (getProp(model, \"item.properties.schemaVersion\") >= 2.7) {\r\n return model;\r\n }\r\n // These templates predate the use of the dependency array to create\r\n // the deployment order. Thus the templates are listed in the order\r\n // they should be created. We need to construct the dependency graph\r\n // based on the order\r\n model.data.templates = model.data.templates.map(\r\n (t: any, idx: number, arr: any[]) => {\r\n // Not all templates will even have `.itemId` as a real value\r\n // so if it's empty, we should set it to a random string\r\n // Downside is that if there are tokens in the rest of the\r\n // json, there is no way to ever interpolate them\r\n if (!t.itemId) {\r\n t.itemId = createId();\r\n }\r\n // if the dependencies array does not exist, add an empty one\r\n if (!t.dependencies) {\r\n t.dependencies = [];\r\n }\r\n // We want the dependency to be the pervious entry in\r\n // the array's itemId\r\n if (idx > 0 && t.dependencies.length === 0) {\r\n t.dependencies = [arr[idx - 1].itemId];\r\n }\r\n return t;\r\n }\r\n );\r\n\r\n model.item.properties.schemaVersion = 2.7;\r\n return model;\r\n}\r\n","/** @license\r\n * Copyright 2018 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\nimport { ISolutionItem } from \"../interfaces\";\r\nimport { getProp, cloneObject } from \"../generalHelpers\";\r\n\r\n/**\r\n * Apply the initial schema\r\n * If the item was created by Solution.js, this will stamp it\r\n * with the initial Solution.js schama version number (3)\r\n * If it is a legacy hub solution, it will apply the transforms\r\n *\r\n * @param model ISolutionItem\r\n * @param authentication UserSession\r\n * @private\r\n */\r\nexport function _upgradeThreeDotZero(model: ISolutionItem): ISolutionItem {\r\n if (getProp(model, \"item.properties.schemaVersion\") >= 3) {\r\n return model;\r\n } else {\r\n // There exist 3.0 schema solutions which simply lack the schemaVersion property\r\n // so we just stamp in the version and do the actual work in the follow-on upgrades\r\n const clone = cloneObject(model);\r\n clone.item.properties.schemaVersion = 3;\r\n return clone;\r\n }\r\n}\r\n","/** @license\r\n * Copyright 2020 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/**\r\n * Denotes type information for a SolutionResource\r\n */\r\nexport enum SolutionResourceType {\r\n thumbnail,\r\n metadata,\r\n resource,\r\n data,\r\n fakezip,\r\n info\r\n}\r\n\r\n/**\r\n * Solution Resource information\r\n */\r\nexport interface ISolutionResource {\r\n /*\r\n * Resource File Name\r\n * i.e. country.png\r\n */\r\n filename: string;\r\n /*\r\n * Resource Type\r\n * thumbnail | metadata | resource | data | fakezip | info\r\n */\r\n type: SolutionResourceType;\r\n\r\n /*\r\n * Resource Path\r\n * This is the path the resource will be deployed to on the new item\r\n * i.e. images/widget_10\r\n * this represents the `resourcesPrefix` in the REST API\r\n */\r\n path: string;\r\n\r\n /*\r\n * Source Url\r\n * Either a full url with protocol, from which the resource should be fetched,\r\n * or a relative path, which is assumed to be on the Solution Item\r\n * i.e.\r\n * Source as a static image in a S3 bucket or anywhere else on the internet\r\n * `https://s3.aws.amazon.com/somebucket/someimage.png`\r\n * or computed as\r\n * `3ef/images/widget_02/cake.png` which would be expanded to\r\n * `https://{rest-api-end-point}/content/items/{solution-item-id}/resources/3ef/images/widget_02/cake.png\r\n */\r\n sourceUrl?: string;\r\n}\r\n","/** @license\r\n * Copyright 2020 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\nimport { SolutionResourceType } from \"./solution-resource\";\r\n\r\n/**\r\n * Generates a folder and filename for storing a copy of an item's resource in a storage item.\r\n *\r\n * @param prefix Base prefix for resource\r\n * @param sourceResourceFilename Either filename or folder/filename to resource\r\n * @param storageVersion Version of the Solution template\r\n * @param storageFileType Optional argument that when supplied will control the how the prefix is created\r\n * @returns Folder and filename for storage; folder is the itemID plus (\"_\" + storageFolder) if storageFolder\r\n * exists plus (\"_\" + part of sourceResourceFilename before \"/\" if that separator exists);\r\n * file is sourceResourceFilename\r\n * @see convertStorageResourceToItemResource\r\n */\r\nexport function convertItemResourceToStorageResource(\r\n prefix: string,\r\n sourceResourceFilename: string,\r\n storageVersion = 0,\r\n storageFileType?: SolutionResourceType\r\n): {\r\n folder: string;\r\n filename: string;\r\n} {\r\n /* istanbul ignore else */\r\n if (storageFileType !== undefined) {\r\n switch (storageFileType) {\r\n case SolutionResourceType.data:\r\n prefix = `${prefix}_info_data`;\r\n break;\r\n case SolutionResourceType.fakezip:\r\n prefix = `${prefix}_info_dataz`;\r\n break;\r\n case SolutionResourceType.info:\r\n prefix = `${prefix}_info`;\r\n break;\r\n case SolutionResourceType.metadata:\r\n prefix = `${prefix}_info_metadata`;\r\n break;\r\n case SolutionResourceType.thumbnail:\r\n prefix = `${prefix}_info_thumbnail`;\r\n break;\r\n }\r\n }\r\n\r\n let folder = prefix;\r\n let filename = sourceResourceFilename;\r\n const iLastSlash = filename.lastIndexOf(\"/\");\r\n if (iLastSlash >= 0) {\r\n let subpath = filename.substr(0, iLastSlash);\r\n if (storageVersion === 0) {\r\n subpath = subpath.replace(\"/\", \"_\");\r\n folder += \"_\" + subpath;\r\n } else {\r\n folder += \"/\" + subpath;\r\n }\r\n filename = filename.substr(iLastSlash + 1);\r\n }\r\n\r\n return { folder, filename };\r\n}\r\n","/** @license\r\n * Copyright 2020 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\nimport { IDeployFilename, EFileType } from \"../interfaces\";\r\n\r\n/**\r\n * Extracts an item's resource folder and filename from the filename used to store a copy in a storage item.\r\n *\r\n * @param storageResourceFilename Filename used to store the resource, metadata, or thumbnail of an item\r\n * @param storageVersion Version of the Solution template\r\n * @returns Folder and filename for storing information in an item, as well as the type (resource, metadata,\r\n * or thumbnail) of the information; the folder property is only meaningful for the resource type\r\n * @see generateResourceStorageFilename\r\n * @see generateMetadataStorageFilename\r\n * @see generateThumbnailStorageFilename\r\n * @see convertItemResourceToStorageResource\r\n */\r\nexport function convertStorageResourceToItemResource(\r\n storageResourceFilename: string,\r\n storageVersion = 0\r\n): IDeployFilename {\r\n const nameParts = storageResourceFilename.split(\"/\");\r\n let filename = nameParts.pop();\r\n let folder = \"\";\r\n const firstPrefixPart = nameParts.shift(); // undefined if there's no folder\r\n\r\n // Handle special \"folders\"\r\n let type = EFileType.Resource;\r\n if (firstPrefixPart) {\r\n if (firstPrefixPart.endsWith(\"_info_thumbnail\")) {\r\n type = EFileType.Thumbnail;\r\n } else if (firstPrefixPart.endsWith(\"_info_metadata\")) {\r\n type = EFileType.Metadata;\r\n filename = \"metadata.xml\";\r\n } else if (firstPrefixPart.endsWith(\"_info_data\")) {\r\n type = EFileType.Data;\r\n } else if (firstPrefixPart.endsWith(\"_info_dataz\")) {\r\n filename = filename.replace(/\\.zip$/, \"\");\r\n type = EFileType.Data;\r\n\r\n // Otherwise, strip off item id\r\n } else if (storageVersion < 1) {\r\n // Version 0\r\n const folderStart = firstPrefixPart.indexOf(\"_\");\r\n if (folderStart > 0) {\r\n folder = firstPrefixPart.substr(folderStart + 1);\r\n }\r\n } else {\r\n // Version ≥ 1\r\n folder = nameParts.join(\"/\"); // folder is optional, in which case this will be \"\"\r\n }\r\n }\r\n\r\n return { type, folder, filename };\r\n}\r\n","/** @license\r\n * Copyright 2021 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\nimport { IAssociatedFileCopyResults, IZipCopyResults } from \"../interfaces\";\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\n/**\r\n * Generates IAssociatedFileCopyResults object.\r\n *\r\n * @param fileInfo Info about item that was to be copied\r\n * @param fetchedFromSource Status of fetching item from source\r\n * @param copiedToDestination Status of copying item to destination\r\n * @returns IAssociatedFileCopyResults object\r\n */\r\nexport function createCopyResults(\r\n fileInfo: any,\r\n fetchedFromSource: boolean,\r\n copiedToDestination?: boolean\r\n): IAssociatedFileCopyResults | IZipCopyResults {\r\n return {\r\n ...fileInfo,\r\n fetchedFromSource,\r\n copiedToDestination\r\n };\r\n}\r\n","/** @license\r\n * Copyright 2021 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\nimport {\r\n IAssociatedFileCopyResults,\r\n IAssociatedFileInfo,\r\n IFileMimeTyped,\r\n IItemUpdate,\r\n UserSession\r\n} from \"../interfaces\";\r\nimport { createCopyResults } from \"./createCopyResults\";\r\nimport { getBlob } from \"./get-blob\";\r\nimport { new_File } from \"../polyfills\";\r\nimport { updateItem as helpersUpdateItem } from \"../restHelpers\";\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\n/**\r\n * Copies data into an AGO item.\r\n *\r\n * @param fileInfo Information about the source and destination of the file such as its URL, folder, filename\r\n * @param sourceAuthentication Credentials for the request to the source\r\n * @param destinationItemId Id of item to receive copy of resource/metadata/thumbnail\r\n * @param destinationAuthentication Credentials for the request to the storage\r\n * @returns A promise which resolves to the result of the copy\r\n */\r\nexport function copyDataIntoItem(\r\n fileInfo: IAssociatedFileInfo,\r\n sourceAuthentication: UserSession,\r\n destinationItemId: string,\r\n destinationAuthentication: UserSession\r\n): Promise<IAssociatedFileCopyResults> {\r\n return new Promise<IAssociatedFileCopyResults>(resolve => {\r\n getBlob(fileInfo.url, sourceAuthentication).then(\r\n blob => {\r\n const update: IItemUpdate = {\r\n id: destinationItemId,\r\n data: createMimeTypedFile({\r\n blob: blob,\r\n filename: fileInfo.filename,\r\n mimeType: fileInfo.mimeType || blob.type\r\n })\r\n };\r\n\r\n helpersUpdateItem(\r\n update,\r\n destinationAuthentication,\r\n fileInfo.folder\r\n ).then(\r\n () =>\r\n resolve(\r\n createCopyResults(\r\n fileInfo,\r\n true,\r\n true\r\n ) as IAssociatedFileCopyResults\r\n ),\r\n () =>\r\n resolve(\r\n createCopyResults(\r\n fileInfo,\r\n true,\r\n false\r\n ) as IAssociatedFileCopyResults\r\n ) // unable to add resource\r\n );\r\n },\r\n () =>\r\n resolve(\r\n createCopyResults(fileInfo, false) as IAssociatedFileCopyResults\r\n ) // unable to get resource\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Creates a file with a specified mime type.\r\n *\r\n * @param fileDescription Structure containing a file and the desired mime type\r\n * @returns Created file\r\n */\r\nexport function createMimeTypedFile(fileDescription: IFileMimeTyped): File {\r\n return new_File([fileDescription.blob], fileDescription.filename, {\r\n type: fileDescription.mimeType\r\n });\r\n}\r\n","/** @license\r\n * Copyright 2021 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\nimport { UserSession } from \"../interfaces\";\r\nimport { updateItem } from \"@esri/arcgis-rest-portal\";\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\n/**\r\n * Adds metadata to an AGO item.\r\n *\r\n * @param blob Blob containing metadata\r\n * @param itemId Item to receive metadata\r\n * @param authentication Credentials for the request\r\n * @returns Promise resolving to JSON containing success boolean\r\n */\r\nexport function addMetadataFromBlob(\r\n blob: Blob,\r\n itemId: string,\r\n authentication: UserSession\r\n): Promise<any> {\r\n const updateOptions: any = {\r\n item: {\r\n id: itemId\r\n },\r\n params: {\r\n // Pass metadata in via params because item property is serialized, which discards a blob\r\n metadata: blob\r\n },\r\n authentication: authentication\r\n };\r\n return updateItem(updateOptions);\r\n}\r\n","/** @license\r\n * Copyright 2021 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\nimport {\r\n IAssociatedFileCopyResults,\r\n IAssociatedFileInfo,\r\n UserSession\r\n} from \"../interfaces\";\r\nimport { addMetadataFromBlob } from \"./addMetadataFromBlob\";\r\nimport { createCopyResults } from \"./createCopyResults\";\r\nimport { getBlob } from \"./get-blob\";\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\n/**\r\n * Copies metadata into an AGO item.\r\n *\r\n * @param fileInfo Information about the source and destination of the file such as its URL, folder, filename\r\n * @param sourceAuthentication Credentials for the request to the source\r\n * @param destinationItemId Id of item to receive copy of resource/metadata/thumbnail\r\n * @param destinationAuthentication Credentials for the request to the storage\r\n * @returns A promise which resolves to the result of the copy\r\n */\r\nexport function copyMetadataIntoItem(\r\n fileInfo: IAssociatedFileInfo,\r\n sourceAuthentication: UserSession,\r\n destinationItemId: string,\r\n destinationAuthentication: UserSession\r\n): Promise<IAssociatedFileCopyResults> {\r\n return new Promise<IAssociatedFileCopyResults>(resolve => {\r\n getBlob(fileInfo.url, sourceAuthentication).then(\r\n blob => {\r\n if (blob.type !== \"text/xml\" && blob.type !== \"application/xml\") {\r\n resolve(\r\n createCopyResults(fileInfo, false) as IAssociatedFileCopyResults\r\n ); // unable to get resource\r\n return;\r\n }\r\n addMetadataFromBlob(\r\n blob,\r\n destinationItemId,\r\n destinationAuthentication\r\n ).then(\r\n () =>\r\n resolve(\r\n createCopyResults(\r\n fileInfo,\r\n true,\r\n true\r\n ) as IAssociatedFileCopyResults\r\n ),\r\n () =>\r\n resolve(\r\n createCopyResults(\r\n fileInfo,\r\n true,\r\n false\r\n ) as IAssociatedFileCopyResults\r\n ) // unable to add resource\r\n );\r\n },\r\n () =>\r\n resolve(\r\n createCopyResults(fileInfo, false) as IAssociatedFileCopyResults\r\n ) // unable to get resource\r\n );\r\n });\r\n}\r\n","/** @license\r\n * Copyright 2021 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\nimport {\r\n IAssociatedFileCopyResults,\r\n IAssociatedFileInfo,\r\n ISourceFile,\r\n IZipInfo,\r\n UserSession\r\n} from \"../interfaces\";\r\nimport { createCopyResults } from \"./createCopyResults\";\r\nimport { getBlobAsFile } from \"../restHelpersGet\";\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\n/**\r\n * Copies a resource into a zipfile.\r\n *\r\n * @param file Information about the source and destination of the file such as its URL, folder, filename\r\n * @param zipInfo Information about a zipfile such as its name and its zip object\r\n * @returns The result of the copy\r\n */\r\nexport function copyResourceIntoZip(\r\n file: ISourceFile,\r\n zipInfo: IZipInfo\r\n): IAssociatedFileCopyResults {\r\n // Add it to the zip\r\n if (file.folder) {\r\n zipInfo.zip\r\n .folder(file.folder)\r\n .file(file.filename, file.file, { binary: true });\r\n } else {\r\n zipInfo.zip.file(file.filename, file.file, { binary: true });\r\n }\r\n zipInfo.filelist.push(file);\r\n return createCopyResults(file, true) as IAssociatedFileCopyResults;\r\n}\r\n\r\n/**\r\n * Copies a resource into a zipfile.\r\n *\r\n * @param fileInfo Information about the source and destination of the file such as its URL, folder, filename\r\n * @param sourceAuthentication Credentials for the request to the source\r\n * @param zipInfo Information about a zipfile such as its name and its zip object\r\n * @returns A promise which resolves to the result of the copy\r\n */\r\nexport function copyResourceIntoZipFromInfo(\r\n fileInfo: IAssociatedFileInfo,\r\n sourceAuthentication: UserSession,\r\n zipInfo: IZipInfo\r\n): Promise<IAssociatedFileCopyResults> {\r\n return new Promise<IAssociatedFileCopyResults>(resolve => {\r\n getBlobAsFile(fileInfo.url, fileInfo.filename, sourceAuthentication).then(\r\n (file: any) => {\r\n // And add it to the zip\r\n if (fileInfo.folder) {\r\n zipInfo.zip\r\n .folder(fileInfo.folder)\r\n .file(fileInfo.filename, file, { binary: true });\r\n } else {\r\n zipInfo.zip.file(fileInfo.filename, file, { binary: true });\r\n }\r\n zipInfo.filelist.push(fileInfo);\r\n resolve(\r\n createCopyResults(fileInfo, true) as IAssociatedFileCopyResults\r\n );\r\n },\r\n () =>\r\n resolve(\r\n // unable to get resource\r\n createCopyResults(fileInfo, false) as IAssociatedFileCopyResults\r\n )\r\n );\r\n });\r\n}\r\n","/** @license\r\n * Copyright 2021 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\nimport { IZipCopyResults, IZipInfo, UserSession } from \"../interfaces\";\r\nimport {\r\n IItemResourceOptions,\r\n addItemResource\r\n} from \"@esri/arcgis-rest-portal\";\r\nimport { blobToFile } from \"../generalHelpers\";\r\nimport { createCopyResults } from \"./createCopyResults\";\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\n/**\r\n * Copies a zipfile into an AGO item.\r\n *\r\n * @param zipInfo Information about a zipfile such as its name and its zip object\r\n * @param destinationItemId Id of item to receive copy of resource/metadata/thumbnail\r\n * @param destinationAuthentication Credentials for the request to the storage\r\n * @returns A promise which resolves to the result of the copy\r\n */\r\nexport function copyZipIntoItem(\r\n zipInfo: IZipInfo,\r\n destinationItemId: string,\r\n destinationAuthentication: UserSession\r\n): Promise<IZipCopyResults> {\r\n return new Promise<IZipCopyResults>(resolve => {\r\n zipInfo.zip\r\n .generateAsync({ type: \"blob\" })\r\n .then((content: Blob) => {\r\n return blobToFile(content, zipInfo.filename, \"application/zip\");\r\n })\r\n .then((zipfile: File) => {\r\n const addResourceOptions: IItemResourceOptions = {\r\n id: destinationItemId,\r\n resource: zipfile,\r\n authentication: destinationAuthentication,\r\n params: {\r\n archive: true\r\n }\r\n };\r\n return addItemResource(addResourceOptions);\r\n })\r\n .then(\r\n () =>\r\n resolve(createCopyResults(zipInfo, true, true) as IZipCopyResults),\r\n () =>\r\n resolve(createCopyResults(zipInfo, true, false) as IZipCopyResults) // unable to add resource\r\n );\r\n });\r\n}\r\n","/** @license\r\n * Copyright 2021 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/**\r\n * Provides functions for sending resources to AGO.\r\n */\r\n\r\nimport {\r\n EFileType,\r\n IAssociatedFileCopyResults,\r\n IAssociatedFileInfo,\r\n ISourceFile,\r\n IZipCopyResults,\r\n IZipInfo,\r\n UserSession\r\n} from \"../interfaces\";\r\nimport { chunkArray } from \"@esri/hub-common\";\r\nimport { copyDataIntoItem } from \"./copyDataIntoItem\";\r\nimport { copyMetadataIntoItem } from \"./copyMetadataIntoItem\";\r\nimport {\r\n copyResourceIntoZip,\r\n copyResourceIntoZipFromInfo\r\n} from \"./copyResourceIntoZip\";\r\nimport { copyZipIntoItem } from \"./copyZipIntoItem\";\r\nimport { createCopyResults } from \"./createCopyResults\";\r\nimport JSZip from \"jszip\";\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\n/**\r\n * Copies the files for storing the resources, metadata, and thumbnail of an item or group to a storage item\r\n * with a specified path by collecting files into zip files.\r\n *\r\n * @param files List of item files' URLs and folder/filenames for storing the files\r\n * @param destinationItemId Id of item to receive copy of resource/metadata/thumbnail\r\n * @param destinationAuthentication Credentials for the request to the storage\r\n * @param filesPerZip Number of files to include per zip file; AGO limits zips to 50 files\r\n * @returns A promise which resolves to a list of the result of the copies\r\n */\r\nexport function copyFilesAsResources(\r\n files: ISourceFile[],\r\n destinationItemId: string,\r\n destinationAuthentication: UserSession,\r\n filesPerZip = 40\r\n): Promise<IAssociatedFileCopyResults[]> {\r\n return new Promise<IAssociatedFileCopyResults[]>(resolve => {\r\n let awaitAllItems: IAssociatedFileCopyResults[] = [];\r\n\r\n const zipInfos: IZipInfo[] = [];\r\n if (files.length > 0) {\r\n // Bundle the resources into chunked zip updates because AGO tends to have problems with\r\n // many updates in a row to the same item: it claims success despite randomly failing.\r\n // Note that AGO imposes a limit of 50 files per zip, so we break the list of resource\r\n // file info into chunks below this threshold and start a zip for each\r\n // https://developers.arcgis.com/rest/users-groups-and-items/add-resources.htm\r\n const chunkedResourceFiles = chunkArray(files, filesPerZip);\r\n chunkedResourceFiles.forEach((chunk, index) => {\r\n // Create a zip for this chunk\r\n const zipInfo: IZipInfo = {\r\n filename: `resources${index}.zip`,\r\n zip: new JSZip(),\r\n filelist: [] as IAssociatedFileInfo[]\r\n };\r\n awaitAllItems = awaitAllItems.concat(\r\n chunk.map(file => copyResourceIntoZip(file, zipInfo))\r\n );\r\n zipInfos.push(zipInfo);\r\n });\r\n }\r\n\r\n if (awaitAllItems.length > 0) {\r\n // Wait until the Resource zip file(s) are prepared\r\n void Promise.all(awaitAllItems).then(\r\n (results: IAssociatedFileCopyResults[]) => {\r\n // We have three types of results:\r\n // | fetchedFromSource | copiedToDestination | interpretation | |\r\n // +-------------------+---------------------+------------------------------------------------+\r\n // | false | * | could not fetch file from source |\r\n // | true | true | file has been fetched and sent to AGO |\r\n // | true | undefined | file has been fetched and will be sent via zip |\r\n\r\n // Filter out copiedToDestination===undefined; we'll get their status when we send their zip\r\n results = results.filter(\r\n (result: IAssociatedFileCopyResults) =>\r\n !(\r\n result.fetchedFromSource &&\r\n typeof result.copiedToDestination === \"undefined\"\r\n )\r\n );\r\n\r\n // Now send the resources to AGO\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n _copyAssociatedFileZips(\r\n zipInfos,\r\n destinationItemId,\r\n destinationAuthentication\r\n ).then((zipResults: IAssociatedFileCopyResults[]) => {\r\n resolve(results.concat(zipResults));\r\n });\r\n }\r\n );\r\n } else {\r\n // No data, metadata, or resources to send; we're done\r\n resolve([]);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Copies the files described by a list of full URLs and storage folder/filename combinations for storing\r\n * the resources, metadata, and thumbnail of an item or group to a storage item with different\r\n * handling based on the type of file.\r\n *\r\n * @param fileInfos List of item files' URLs and folder/filenames for storing the files\r\n * @param sourceAuthentication Credentials for the request to the source\r\n * @param destinationItemId Id of item to receive copy of resource/metadata/thumbnail\r\n * @param destinationAuthentication Credentials for the request to the storage\r\n * @returns A promise which resolves to a list of the result of the copies\r\n */\r\nexport function copyAssociatedFilesByType(\r\n fileInfos: IAssociatedFileInfo[],\r\n sourceAuthentication: UserSession,\r\n destinationItemId: string,\r\n destinationAuthentication: UserSession\r\n): Promise<IAssociatedFileCopyResults[]> {\r\n return new Promise<IAssociatedFileCopyResults[]>(resolve => {\r\n let awaitAllItems: Array<Promise<IAssociatedFileCopyResults>> = [];\r\n let resourceFileInfos = fileInfos;\r\n\r\n awaitAllItems = fileInfos\r\n .filter(\r\n fileInfo =>\r\n fileInfo.type === EFileType.Data ||\r\n fileInfo.type === EFileType.Metadata\r\n )\r\n .map(fileInfo => {\r\n // Handle Data and Metadata first\r\n switch (fileInfo.type) {\r\n case EFileType.Data:\r\n // We are updating an item with a zip file, which is written to AGO. If the updated\r\n // item is in a folder, the zip file is moved to the item's folder after being written.\r\n // Without the folder information in the URL, AGO writes the zip to the root folder,\r\n // which causes a conflict if an item with the same data is already in that root folder.\r\n return copyDataIntoItem(\r\n fileInfo,\r\n sourceAuthentication,\r\n destinationItemId,\r\n destinationAuthentication\r\n );\r\n\r\n case EFileType.Metadata:\r\n return copyMetadataIntoItem(\r\n fileInfo,\r\n sourceAuthentication,\r\n destinationItemId,\r\n destinationAuthentication\r\n );\r\n }\r\n });\r\n\r\n // Now add in the Resources\r\n resourceFileInfos = fileInfos.filter(\r\n fileInfo =>\r\n fileInfo.type === EFileType.Info || fileInfo.type === EFileType.Resource\r\n );\r\n\r\n const zipInfos: IZipInfo[] = [];\r\n if (resourceFileInfos.length > 0) {\r\n // Bundle the resources into chunked zip updates because AGO tends to have problems with\r\n // many updates in a row to the same item: it claims success despite randomly failing.\r\n // Note that AGO imposes a limit of 50 files per zip, so we break the list of resource\r\n // file info into chunks below this threshold and start a zip for each\r\n // https://developers.arcgis.com/rest/users-groups-and-items/add-resources.htm\r\n const chunkedResourceFileInfo = chunkArray(resourceFileInfos, 40); // leave a bit of room below threshold\r\n chunkedResourceFileInfo.forEach((chunk, index) => {\r\n // Create a zip for this chunk\r\n const zipInfo: IZipInfo = {\r\n filename: `resources${index}.zip`,\r\n zip: new JSZip(),\r\n filelist: [] as IAssociatedFileInfo[]\r\n };\r\n awaitAllItems = awaitAllItems.concat(\r\n chunk.map(fileInfo => {\r\n return copyResourceIntoZipFromInfo(\r\n fileInfo,\r\n sourceAuthentication,\r\n zipInfo\r\n );\r\n })\r\n );\r\n zipInfos.push(zipInfo);\r\n });\r\n }\r\n\r\n if (awaitAllItems.length > 0) {\r\n // Wait until all Data and Metadata files have been copied and the Resource zip file(s) prepared\r\n void Promise.all(awaitAllItems).then(\r\n (results: IAssociatedFileCopyResults[]) => {\r\n // We have three types of results:\r\n // | fetchedFromSource | copiedToDestination | interpretation | |\r\n // +-------------------+---------------------+------------------------------------------------+\r\n // | false | * | could not fetch file from source |\r\n // | true | true | file has been fetched and sent to AGO |\r\n // | true | undefined | file has been fetched and will be sent via zip |\r\n\r\n // Filter out copiedToDestination===undefined; we'll get their status when we send their zip\r\n results = results.filter(\r\n (result: IAssociatedFileCopyResults) =>\r\n !(\r\n result.fetchedFromSource &&\r\n typeof result.copiedToDestination === \"undefined\"\r\n )\r\n );\r\n\r\n // Now send the resources to AGO\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n _copyAssociatedFileZips(\r\n zipInfos,\r\n destinationItemId,\r\n destinationAuthentication\r\n ).then((zipResults: IAssociatedFileCopyResults[]) => {\r\n resolve(results.concat(zipResults));\r\n });\r\n }\r\n );\r\n } else {\r\n // No data, metadata, or resources to send; we're done\r\n resolve([]);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Copies one or more zipfiles to a storage item.\r\n *\r\n * @param zipInfos List of zip files containing files to store\r\n * @param destinationItemId Id of item to receive copy of resource/metadata/thumbnail\r\n * @param destinationAuthentication Credentials for the request to the storage\r\n * @returns A promise which resolves to a list of the result of the copies\r\n * @private\r\n */\r\nexport function _copyAssociatedFileZips(\r\n zipInfos: IZipInfo[],\r\n destinationItemId: string,\r\n destinationAuthentication: UserSession\r\n): Promise<IAssociatedFileCopyResults[]> {\r\n return new Promise<IAssociatedFileCopyResults[]>(resolve => {\r\n const results: IAssociatedFileCopyResults[] = [];\r\n\r\n // Filter out empty zips, which can happen when none of the files in the chunk going into a zip\r\n // can be fetched; e.g., the only file is metadata.xml, and the source item doesn't have metadata\r\n const nonEmptyZipInfos = zipInfos.filter(\r\n (zipInfo: IZipInfo) => Object.keys(zipInfo.zip.files).length > 0\r\n );\r\n\r\n if (nonEmptyZipInfos.length > 0) {\r\n // Send the zip(s) to AGO\r\n void _sendZipsSeriallyToItem(\r\n nonEmptyZipInfos,\r\n destinationItemId,\r\n destinationAuthentication\r\n ).then((zipResults: IAssociatedFileCopyResults[]) => {\r\n resolve(zipResults);\r\n });\r\n } else {\r\n // No resources to send; we're done\r\n resolve(results);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Copies one or more zipfiles to a storage item in a serial fashion, waiting a bit between sends.\r\n *\r\n * @param zipInfos List of zip files containing files to store\r\n * @param destinationItemId Id of item to receive copy of resource/metadata/thumbnail\r\n * @param destinationAuthentication Credentials for the request to the storage\r\n * @returns A promise which resolves to a list of the result of the copies\r\n */\r\nfunction _sendZipsSeriallyToItem(\r\n zipInfos: IZipInfo[],\r\n destinationItemId: string,\r\n destinationAuthentication: UserSession\r\n): Promise<IAssociatedFileCopyResults[]> {\r\n return new Promise<IAssociatedFileCopyResults[]>(resolve => {\r\n let allResults: IAssociatedFileCopyResults[] = [];\r\n\r\n // Remove zip from bottom of list\r\n const zipInfoToSend = zipInfos.pop();\r\n\r\n // Send predecessors in list\r\n let sendOthersPromise = Promise.resolve([] as IAssociatedFileCopyResults[]);\r\n if (zipInfos.length > 0) {\r\n sendOthersPromise = _sendZipsSeriallyToItem(\r\n zipInfos,\r\n destinationItemId,\r\n destinationAuthentication\r\n );\r\n }\r\n void sendOthersPromise\r\n .then((response: IAssociatedFileCopyResults[]) => {\r\n allResults = response;\r\n\r\n // Stall a little to give AGO time to catch up\r\n return new Promise<void>(resolveSleep => {\r\n setTimeout(() => resolveSleep(), 1000);\r\n });\r\n })\r\n .then(() => {\r\n // Now send the zip removed from bottom of the input list\r\n return copyZipIntoItem(\r\n zipInfoToSend,\r\n destinationItemId,\r\n destinationAuthentication\r\n );\r\n })\r\n .then((zipResult: IZipCopyResults) => {\r\n // Save the result of copying this zip as a status for each of the files that it contains\r\n zipResult.filelist.forEach((fileInfo: IAssociatedFileInfo) => {\r\n allResults.push(\r\n createCopyResults(\r\n fileInfo,\r\n true,\r\n zipResult.copiedToDestination\r\n ) as IAssociatedFileCopyResults\r\n );\r\n });\r\n\r\n resolve(allResults);\r\n });\r\n });\r\n}\r\n","/** @license\r\n * Copyright 2018 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/**\r\n * Provides common functions involving the management of item and group resources.\r\n *\r\n * @module resourceHelpers\r\n *\r\n * How it works\r\n *\r\n * An item may have resources that are listed as a set of filenames and/or folder/filename combinations. It may have\r\n * a thumbnail, listed in its item info as a filename or folder/filename combination. It may have metadata, which is\r\n * not listed, but has a distinct URL. A group may have a thumbnail, but not the others.\r\n *\r\n * For storing these files in a common storage item, a new folder and filename combination is created for each. The\r\n * filename is kept as-is. The folder consists of the source item's id and an optional suffix. For thumbnails, the\r\n * suffix is \"_info_thumbnail\"; for metadata, the suffix is \"_info_metadata\"; for resources, the suffix is \"_\" plus\r\n * the resource's folder's name; if the resource doesn't have a folder, there is no suffix.\r\n *\r\n * Note that \"thumbnail\" is included in an item's thumbnail property like a folder (e.g., \"thumbnail/thumbnail.png\"),\r\n * and the item's thumbnail is accessed using a path such as \"%lt;itemId>/info/thumbnail/thumbnail.png\". Groups,\r\n * on the other hand, have a property with a simple name (e.g., \"thumbnail.png\") and it is accessed using a path\r\n * such as \"%lt;groupId>/info/thumbnail.png\".\r\n *\r\n * For copying these files from the common storage item to another item, one converts the unique names back into the\r\n * original names (or the special cases for thumbnails and metadata).\r\n *\r\n * Routines are provided to\r\n * 1. create full URLs to resources, thumbnails, and metadata.\r\n * 2. create a folder and filename combination that uniquely identifies these files for\r\n * storing them in a single, shared storage item\r\n * 3. copy a set of resources, thumbnails, and metadata for an item to a storage item\r\n * 4. copy a file by URL to an item using specified folder and filename\r\n * 5. undo the unique folder and filename into the original folder and filename\r\n */\r\n\r\nimport {\r\n EFileType,\r\n IAssociatedFileCopyResults,\r\n IAssociatedFileInfo,\r\n IDeployFileCopyPath,\r\n IFileMimeTyped,\r\n ISourceFile,\r\n ISourceFileCopyPath,\r\n UserSession\r\n} from \"./interfaces\";\r\nimport { new_File } from \"./polyfills\";\r\nimport {\r\n IRemoveItemResourceOptions,\r\n IItemResourceOptions,\r\n IItemResourceResponse,\r\n removeItemResource,\r\n updateGroup,\r\n updateItem,\r\n updateItemResource\r\n} from \"@esri/arcgis-rest-portal\";\r\nimport { appendQueryParam, checkUrlPathTermination } from \"./generalHelpers\";\r\nimport { convertItemResourceToStorageResource } from \"./resources/convert-item-resource-to-storage-resource\";\r\nimport { convertStorageResourceToItemResource } from \"./resources/convert-storage-resource-to-item-resource\";\r\nimport { getThumbnailFile } from \"./restHelpersGet\";\r\nimport {\r\n copyAssociatedFilesByType,\r\n copyFilesAsResources\r\n} from \"./resources/copyAssociatedFiles\";\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\nexport function addThumbnailFromBlob(\r\n blob: any,\r\n itemId: string,\r\n authentication: UserSession,\r\n isGroup: boolean = false\r\n): Promise<any> {\r\n const updateOptions: any = {\r\n params: {\r\n // Pass image in directly because item object is serialized, which discards a blob\r\n thumbnail: blob\r\n },\r\n authentication: authentication\r\n };\r\n updateOptions[isGroup ? \"group\" : \"item\"] = {\r\n id: itemId\r\n };\r\n\r\n return isGroup ? updateGroup(updateOptions) : updateItem(updateOptions);\r\n}\r\n\r\nexport function convertBlobToSupportableResource(\r\n blob: Blob,\r\n filename: string = \"\"\r\n): IFileMimeTyped {\r\n const originalFilename = (blob as File).name || filename;\r\n let filenameToUse = originalFilename;\r\n if (filenameToUse && !isSupportedFileType(filenameToUse)) {\r\n filenameToUse = filenameToUse + \".zip\";\r\n }\r\n\r\n return {\r\n blob: new_File([blob], filenameToUse, { type: blob.type }),\r\n filename: originalFilename,\r\n mimeType: blob.type\r\n };\r\n}\r\n\r\n/**\r\n * Copies the files described by a list of full URLs and folder/filename combinations for\r\n * the resources and metadata of an item or group to an item.\r\n *\r\n * @param storageAuthentication Credentials for the request to the storage\r\n * @param filePaths List of item files' URLs and folder/filenames for storing the files\r\n * @param destinationFolderId Id of folder\r\n * @param destinationItemId Id of item to receive copy of resource/metadata\r\n * @param destinationAuthentication Credentials for the request to the destination\r\n * @param template Template for using its itemId and properties for fine-tuning the filename for Hub\r\n * @returns A promise which resolves to a boolean indicating if the copies were successful\r\n */\r\nexport function copyFilesFromStorageItem(\r\n storageAuthentication: UserSession,\r\n filePaths: IDeployFileCopyPath[],\r\n destinationFolderId: string,\r\n destinationItemId: string,\r\n destinationAuthentication: UserSession,\r\n template: any = {}\r\n): Promise<boolean> {\r\n // TODO: This is only used in deployer, so move there\r\n // changed to allow the template to be passed in\r\n // because Hub templates need to swap out the templateId\r\n // in the resource filename\r\n const mimeTypes = template.properties || null;\r\n\r\n // remove the template.itemId from the fileName in the filePaths\r\n /* istanbul ignore else */\r\n if (template.itemId) {\r\n filePaths = filePaths.map(fp => {\r\n /* istanbul ignore else */\r\n if (fp.filename.indexOf(template.itemId) === 0 && fp.folder === \"\") {\r\n fp.filename = fp.filename.replace(`${template.itemId}-`, \"\");\r\n }\r\n return fp;\r\n });\r\n }\r\n\r\n return new Promise<boolean>((resolve, reject) => {\r\n const fileInfos = filePaths.map(path => {\r\n return {\r\n folder:\r\n path.type === EFileType.Data ? destinationFolderId : path.folder,\r\n filename: path.filename,\r\n type: path.type,\r\n mimeType: mimeTypes ? mimeTypes[path.filename] : \"\",\r\n url: path.url\r\n } as IAssociatedFileInfo;\r\n });\r\n\r\n void copyAssociatedFilesByType(\r\n fileInfos,\r\n storageAuthentication,\r\n destinationItemId,\r\n destinationAuthentication\r\n ).then((results: IAssociatedFileCopyResults[]) => {\r\n const allOK: boolean = results\r\n // Filter out metadata\r\n .filter(\r\n (result: IAssociatedFileCopyResults) =>\r\n result.filename !== \"metadata.xml\"\r\n )\r\n // Extract success\r\n .map(\r\n (result: IAssociatedFileCopyResults) =>\r\n result.fetchedFromSource && result.copiedToDestination\r\n )\r\n // Boil it down to a single result\r\n .reduce(\r\n (success: boolean, currentValue: boolean) => success && currentValue,\r\n true\r\n );\r\n if (allOK) {\r\n resolve(true);\r\n } else {\r\n reject();\r\n }\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * Copies the files for storing the resources, metadata, and thumbnail of an item or group to a storage item\r\n * with a specified path.\r\n *\r\n * @param files List of item files and paths for storing the files\r\n * @param storageItemId Id of item to receive copy of resource/metadata\r\n * @param storageAuthentication Credentials for the request to the storage\r\n * @returns A promise which resolves to a list of the filenames under which the resource/metadata are stored\r\n */\r\nexport function copyFilesToStorageItem(\r\n files: ISourceFile[],\r\n storageItemId: string,\r\n storageAuthentication: UserSession\r\n): Promise<string[]> {\r\n return new Promise<string[]>(resolve => {\r\n // tslint:disable-next-line: no-floating-promises\r\n void copyFilesAsResources(files, storageItemId, storageAuthentication).then(\r\n (results: IAssociatedFileCopyResults[]) => {\r\n resolve(\r\n results\r\n // Filter out failures\r\n .filter(\r\n (result: IAssociatedFileCopyResults) =>\r\n result.fetchedFromSource && result.copiedToDestination\r\n )\r\n // Return folder and filename in storage item's resources\r\n .map(\r\n (result: IAssociatedFileCopyResults) =>\r\n result.folder + \"/\" + result.filename\r\n )\r\n );\r\n }\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * Generates a folder and filename for storing a copy of an item's metadata in a storage item.\r\n *\r\n * @param itemId Id of item\r\n * @returns Folder and filename for storage; folder is the itemID suffixed with \"_info_metadata\"\r\n * @see convertStorageResourceToItemResource\r\n */\r\nexport function generateMetadataStorageFilename(\r\n itemId: string\r\n): {\r\n folder: string;\r\n filename: string;\r\n} {\r\n return {\r\n folder: itemId + \"_info_metadata\",\r\n filename: \"metadata.xml\"\r\n };\r\n}\r\n\r\n/**\r\n * Generates a list of full URLs and storage folder/filename combinations for storing the resources, metadata,\r\n * and thumbnail of an item.\r\n *\r\n * @param portalSharingUrl Server/sharing\r\n * @param itemId Id of item\r\n * @param thumbnailUrlPart Partial path to the thumbnail held in an item's JSON\r\n * @param resourceFilenames List of resource filenames for an item, e.g., [\"file1\", \"myFolder/file2\"]\r\n * @param isGroup Boolean to indicate if the files are associated with a group or item\r\n * @param storageVersion Version of the Solution template\r\n * @returns List of item files' URLs and folder/filenames for storing the files\r\n */\r\nexport function generateSourceFilePaths(\r\n portalSharingUrl: string,\r\n itemId: string,\r\n thumbnailUrlPart: string,\r\n resourceFilenames: string[],\r\n isGroup: boolean = false,\r\n storageVersion = 0\r\n): ISourceFileCopyPath[] {\r\n const filePaths = resourceFilenames.map(resourceFilename => {\r\n return {\r\n itemId,\r\n url: generateSourceResourceUrl(\r\n portalSharingUrl,\r\n itemId,\r\n resourceFilename\r\n ),\r\n ...convertItemResourceToStorageResource(\r\n itemId,\r\n resourceFilename,\r\n storageVersion\r\n )\r\n };\r\n });\r\n\r\n filePaths.push({\r\n itemId,\r\n url: generateSourceMetadataUrl(portalSharingUrl, itemId, isGroup),\r\n ...generateMetadataStorageFilename(itemId)\r\n });\r\n\r\n /* istanbul ignore else */\r\n if (thumbnailUrlPart) {\r\n const path = {\r\n itemId,\r\n url: appendQueryParam(\r\n generateSourceThumbnailUrl(\r\n portalSharingUrl,\r\n itemId,\r\n thumbnailUrlPart,\r\n isGroup\r\n ),\r\n \"w=400\"\r\n ),\r\n ...generateThumbnailStorageFilename(itemId, thumbnailUrlPart)\r\n };\r\n filePaths.push(path);\r\n }\r\n\r\n return filePaths;\r\n}\r\n\r\n/**\r\n * Generates the URL for reading an item's metadata.\r\n *\r\n * @param sourcePortalSharingUrl Server/sharing\r\n * @param itemId Id of item\r\n * @param isGroup Boolean to indicate if the files are associated with a group or item\r\n * @returns URL string\r\n */\r\nexport function generateSourceMetadataUrl(\r\n sourcePortalSharingUrl: string,\r\n itemId: string,\r\n isGroup = false\r\n): string {\r\n return (\r\n checkUrlPathTermination(sourcePortalSharingUrl) +\r\n (isGroup ? \"community/groups/\" : \"content/items/\") +\r\n itemId +\r\n \"/info/metadata/metadata.xml\"\r\n );\r\n}\r\n\r\n/**\r\n * Generates the URL for reading an item's resource given the filename of the resource.\r\n *\r\n * @param sourcePortalSharingUrl Server/sharing\r\n * @param itemId Id of item\r\n * @param sourceResourceFilename Either filename or folder/filename to resource\r\n * @returns URL string\r\n */\r\nexport function generateSourceResourceUrl(\r\n sourcePortalSharingUrl: string,\r\n itemId: string,\r\n sourceResourceFilename: string\r\n): string {\r\n return (\r\n checkUrlPathTermination(sourcePortalSharingUrl) +\r\n \"content/items/\" +\r\n itemId +\r\n \"/resources/\" +\r\n sourceResourceFilename\r\n );\r\n}\r\n\r\n/**\r\n * Generates the URL for reading an item's thumbnail.\r\n *\r\n * @param sourcePortalSharingUrl Server/sharing\r\n * @param itemId Id of item\r\n * @param thumbnailUrlPart Partial path to the thumbnail held in an item's JSON\r\n * @param isGroup Boolean to indicate if the files are associated with a group or item\r\n * @returns URL string\r\n */\r\nexport function generateSourceThumbnailUrl(\r\n sourcePortalSharingUrl: string,\r\n itemId: string,\r\n thumbnailUrlPart: string,\r\n isGroup = false\r\n): string {\r\n return (\r\n checkUrlPathTermination(sourcePortalSharingUrl) +\r\n (isGroup ? \"community/groups/\" : \"content/items/\") +\r\n itemId +\r\n \"/info/\" +\r\n thumbnailUrlPart\r\n );\r\n}\r\n\r\n/**\r\n * Generates a list of full URLs and folder/filename combinations used to store the resources, metadata,\r\n * and thumbnail of an item.\r\n *\r\n * @param portalSharingUrl Server/sharing\r\n * @param storageItemId Id of storage item\r\n * @param resourceFilenames List of resource filenames for an item, e.g., [\"file1\", \"myFolder/file2\"]\r\n * @param storageVersion Version of the Solution template\r\n * @returns List of item files' URLs and folder/filenames for storing the files\r\n */\r\nexport function generateStorageFilePaths(\r\n portalSharingUrl: string,\r\n storageItemId: string,\r\n resourceFilenames: string[] = [],\r\n storageVersion = 0\r\n): IDeployFileCopyPath[] {\r\n return resourceFilenames.map(resourceFilename => {\r\n return {\r\n url: generateSourceResourceUrl(\r\n portalSharingUrl,\r\n storageItemId,\r\n resourceFilename\r\n ),\r\n ...convertStorageResourceToItemResource(resourceFilename, storageVersion)\r\n };\r\n });\r\n}\r\n\r\n/**\r\n * Generates a folder and filename for storing a copy of an item's thumbnail in a storage item.\r\n *\r\n * @param itemId Id of item\r\n * @param thumbnailUrlPart Partial path to the thumbnail held in an item's JSON; can also be a filename\r\n * @returns Folder and filename for storage; folder is the itemID suffixed with \"_info_thumbnail\";\r\n * file is URI-encoded thumbnailUrlPart\r\n * @see convertStorageResourceToItemResource\r\n */\r\nexport function generateThumbnailStorageFilename(\r\n itemId: string,\r\n thumbnailurl: string\r\n): {\r\n folder: string;\r\n filename: string;\r\n} {\r\n const folder = itemId + \"_info_thumbnail\";\r\n const thumbnailUrlParts = thumbnailurl.split(\"/\");\r\n const filename =\r\n thumbnailUrlParts.length === 1\r\n ? thumbnailUrlParts[0]\r\n : thumbnailUrlParts[1];\r\n return { folder, filename };\r\n}\r\n\r\nexport function isSupportedFileType(filename: string): boolean {\r\n // Supported file formats are: .json, .xml, .txt, .png, .pbf, .zip, .jpeg, .jpg, .gif, .bmp, .gz, .svg,\r\n // .svgz, .geodatabase (https://developers.arcgis.com/rest/users-groups-and-items/add-resources.htm)\r\n const filenameExtension = filename.match(/\\.([a-z]+)$/i);\r\n const supportedExtensions =\r\n \"|.json|.xml|.txt|.png|.pbf|.zip|.jpeg|.jpg|.gif|.bmp|.gz|.svg|.svgz|.geodatabase|\";\r\n return (\r\n !!filenameExtension &&\r\n supportedExtensions.indexOf(\"|\" + filenameExtension[0] + \"|\") >= 0\r\n );\r\n}\r\n\r\n/**\r\n * Gets the thumbnail of an item or group.\r\n *\r\n * @param authentication Credentials for the request to the storage\r\n * @param filePaths List of item files' URLs and folder/filenames for storing the files\r\n * @returns A promise which resolves to a boolean indicating if the copies were successful\r\n */\r\nexport function getThumbnailFromStorageItem(\r\n authentication: UserSession,\r\n filePaths: IDeployFileCopyPath[]\r\n): Promise<File> {\r\n let thumbnailUrl: string;\r\n let thumbnailFilename: string;\r\n filePaths.forEach(path => {\r\n if (path.type === EFileType.Thumbnail) {\r\n thumbnailUrl = path.url;\r\n thumbnailFilename = path.filename;\r\n }\r\n });\r\n\r\n if (!thumbnailUrl) {\r\n return Promise.resolve(null);\r\n }\r\n\r\n return getThumbnailFile(thumbnailUrl, thumbnailFilename, authentication);\r\n}\r\n\r\n/**\r\n * Removes the item's resource that matches the filename with new content\r\n *\r\n * @param itemId Id of the item to remove\r\n * @param filename Name of the resource file to remove\r\n * @param authentication Credentials for the request to the storage\r\n * @returns A promise which resolves with a success true/false response\r\n */\r\nexport function removeItemResourceFile(\r\n itemId: string,\r\n filename: string,\r\n authentication: UserSession\r\n): Promise<{ success: boolean }> {\r\n return removeItemResource({\r\n id: itemId,\r\n resource: filename,\r\n authentication: authentication\r\n } as IRemoveItemResourceOptions);\r\n}\r\n\r\n/**\r\n * Updates the item's resource that matches the filename with new content\r\n *\r\n * @param itemId Id of the item to update\r\n * @param filename Name of the resource file to update; prefix optional (e.g., a/b/file.txt)\r\n * @param resource The new content to update the resource with\r\n * @param authentication Credentials for the request to the storage\r\n * @returns A promise which resolves with a success true/false response\r\n */\r\nexport function updateItemResourceFile(\r\n itemId: string,\r\n filename: string,\r\n resource: File,\r\n authentication: UserSession\r\n): Promise<IItemResourceResponse> {\r\n // Prefix has to be specified separately\r\n const prefixedFilenameParts = filename.split(\"/\");\r\n const prefix = prefixedFilenameParts.length > 1 ? prefixedFilenameParts.slice(0, prefixedFilenameParts.length - 1).join(\"/\") : undefined;\r\n const suffix = prefixedFilenameParts[prefixedFilenameParts.length - 1];\r\n\r\n return updateItemResource({\r\n id: itemId,\r\n prefix: prefix,\r\n name: suffix,\r\n resource,\r\n authentication: authentication\r\n } as IItemResourceOptions);\r\n}\r\n\r\n/**\r\n * Updates the item's resource that matches the filename with new content\r\n *\r\n * @param itemId Id of the item to update\r\n * @param filename Name of the resource file to update\r\n * @param content The new content to update the resource with\r\n * @param authentication Credentials for the request to the storage\r\n * @returns A promise which resolves with a success true/false response\r\n */\r\nexport function updateItemResourceText(\r\n itemId: string,\r\n filename: string,\r\n content: string,\r\n authentication: UserSession\r\n): Promise<IItemResourceResponse> {\r\n return updateItemResource({\r\n id: itemId,\r\n name: filename,\r\n content: content,\r\n authentication: authentication\r\n } as IItemResourceOptions);\r\n}\r\n","/** @license\r\n * Copyright 2021 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\nimport { UserSession } from \"./interfaces\";\r\nimport {\r\n getSubscriptionInfo,\r\n ISubscriptionInfo\r\n} from \"./get-subscription-info\";\r\nimport { getProp } from \"./generalHelpers\";\r\n\r\n// Known base names if output, source, or feed name is missing\r\nexport const BASE_NAMES: string[] = [\r\n \"feat-lyr-new\",\r\n \"feat-lyr-existing\",\r\n \"stream-lyr-new\"\r\n];\r\n\r\n// Known prop paths that can contain item Ids\r\nexport const PROP_NAMES: string [] = [\r\n \".portal.mapServicePortalItemID\",\r\n \".portal.featureServicePortalItemID\",\r\n \".portal.streamServicePortalItemID\",\r\n \".portalItemId\"\r\n];\r\n\r\n/**\r\n * Get the base velocity url from the current orgs subscription info\r\n *\r\n * This function will update the input templateDictionary arg with the velocity url\r\n * so we can reuse it without pinging the org again for subsequent requests to the\r\n * velocity api.\r\n *\r\n * @param authentication Credentials for the requests\r\n * @param templateDictionary Hash of facts: folder id, org URL, adlib replacements\r\n *\r\n * @returns a promise that will resolve with the velocity url or an empty string when the org does not support velocity\r\n *\r\n */\r\nexport function getVelocityUrlBase(\r\n authentication: UserSession,\r\n templateDictionary: any\r\n): Promise<string> {\r\n // if we already have the base url no need to make any additional requests\r\n if (templateDictionary.hasOwnProperty(\"velocityUrl\")) {\r\n return Promise.resolve(templateDictionary.velocityUrl);\r\n } else {\r\n // get the url from the orgs subscription info\r\n return getSubscriptionInfo({ authentication }).then(\r\n (subscriptionInfo: ISubscriptionInfo) => {\r\n let velocityUrl = \"\";\r\n const orgCapabilities = getProp(subscriptionInfo, \"orgCapabilities\");\r\n /* istanbul ignore else */\r\n if (Array.isArray(orgCapabilities)) {\r\n orgCapabilities.some(c => {\r\n /* istanbul ignore else */\r\n if (c.id === \"velocity\" && c.status === \"active\" && c.velocityUrl) {\r\n velocityUrl = c.velocityUrl;\r\n }\r\n return velocityUrl;\r\n });\r\n }\r\n // add the base url to the templateDictionary for reuse\r\n templateDictionary.velocityUrl = velocityUrl;\r\n\r\n return Promise.resolve(velocityUrl);\r\n }\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Update any velocity urls found in the data\r\n *\r\n * This function can be extended to support any item type specific functions such as\r\n * removing the itemId from operational layers in a webmap\r\n *\r\n * @param data The data object of the item\r\n * @param type The item type\r\n * @param templateDictionary Hash of facts: folder id, org URL, adlib replacements\r\n *\r\n * @returns an updated instance of the data object that was supplied.\r\n *\r\n */\r\nexport function updateVelocityReferences(\r\n data: any,\r\n type: string,\r\n templateDictionary: any\r\n): any {\r\n const velocityUrl: any = templateDictionary.velocityUrl;\r\n if (data && type === \"Web Map\" && velocityUrl) {\r\n const layersAndTables: any[] = (data.operationalLayers || []).concat(data.tables || []);\r\n (layersAndTables).forEach((l: any) => {\r\n if (l.url && l.url.indexOf(velocityUrl) > -1 && l.itemId) {\r\n delete l.itemId;\r\n }\r\n });\r\n }\r\n return velocityUrl && data ? _replaceVelocityUrls(data, velocityUrl) : data;\r\n}\r\n\r\n/**\r\n * Helper function to update velocity urls found in the data\r\n *\r\n *\r\n * @param data The data object of the item\r\n * @param velocityUrl The velocity url from the current organization\r\n *\r\n * @returns an updated instance of the data object that was supplied.\r\n * @private\r\n */\r\nexport function _replaceVelocityUrls(data: any, velocityUrl: string): any {\r\n let dataString: string = JSON.stringify(data);\r\n if (dataString.indexOf(velocityUrl) > -1) {\r\n // replace any instance of the velocity base url\r\n dataString = dataString.replace(\r\n new RegExp(`${velocityUrl}`, \"gi\"),\r\n \"{{velocityUrl}}\"\r\n );\r\n\r\n // add solutionItemId to any velocity service names\r\n const regex = new RegExp(\"{{velocityUrl}}.+?(?=/[A-Za-z]+Server)\", \"gi\");\r\n const results = dataString.match(regex);\r\n /* istanbul ignore else */\r\n if (results) {\r\n const uniqueResults = results.filter((v, i, self) => self.indexOf(v) === i);\r\n uniqueResults.forEach(result => {\r\n // these names can contain reserved characters for regex\r\n // for example: http://something/name(something else)\r\n // TypeScript for es2015 doesn't have a definition for `replaceAll`\r\n dataString = (dataString as any).replaceAll(\r\n result,\r\n `${result}_{{solutionItemId}}`\r\n );\r\n });\r\n }\r\n return JSON.parse(dataString);\r\n } else {\r\n return data;\r\n }\r\n}\r\n","/** @license\r\n * Copyright 2018 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\nimport { ISolutionItem } from \"./interfaces\";\r\nimport { _isLegacySolution } from \"./migrations/is-legacy-solution\";\r\nimport { _applySchema } from \"./migrations/apply-schema\";\r\nimport { _upgradeTwoDotZero } from \"./migrations/upgrade-two-dot-zero\";\r\nimport { _upgradeTwoDotOne } from \"./migrations/upgrade-two-dot-one\";\r\nimport { _upgradeTwoDotTwo } from \"./migrations/upgrade-two-dot-two\";\r\nimport { _upgradeTwoDotThree } from \"./migrations/upgrade-two-dot-three\";\r\nimport { _upgradeTwoDotFour } from \"./migrations/upgrade-two-dot-four\";\r\nimport { _upgradeTwoDotFive } from \"./migrations/upgrade-two-dot-five\";\r\nimport { _upgradeTwoDotSix } from \"./migrations/upgrade-two-dot-six\";\r\nimport { _upgradeTwoDotSeven } from \"./migrations/upgrade-two-dot-seven\";\r\nimport { _upgradeThreeDotZero } from \"./migrations/upgrade-three-dot-zero\";\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nimport { _upgradeThreeDotOne } from \"./migrations/upgrade-three-dot-one\";\r\n\r\nimport { getProp } from \"@esri/hub-common\";\r\n\r\n// Starting at 3.0 because Hub has been versioning Solution items up to 2.x\r\nexport const CURRENT_SCHEMA_VERSION = 3.0;\r\n\r\n/**\r\n * Apply schema migrations to a Solution item\r\n * This system allows the schema of the Solution item to change over time\r\n * while abstracting those changes into a single set of functional transforms\r\n *\r\n * @param model ISolutionItem\r\n */\r\nexport function migrateSchema(model: ISolutionItem): Promise<ISolutionItem> {\r\n // ensure properties\r\n if (!getProp(model, \"item.properties\")) {\r\n model.item.properties = {};\r\n }\r\n\r\n const modelVersion = getProp(model, \"item.properties.schemaVersion\");\r\n // if it's already on the current version, return it\r\n if (modelVersion === CURRENT_SCHEMA_VERSION) {\r\n return Promise.resolve(model);\r\n } else {\r\n // check if this is a legacy solution created by Hub\r\n const isLegacy = _isLegacySolution(model);\r\n const schemaUpgrades = [];\r\n\r\n // if this is a Solution.js \"native\" item, it is already at 3.0\r\n if (!modelVersion && !isLegacy) {\r\n // apply the 3.0+ transforms\r\n // TEMP to allow merge to develop w/o breaking things\r\n schemaUpgrades.push(_upgradeThreeDotZero);\r\n // schemaUpgrades.push(_upgradeThreeDotZero, _upgradeThreeDotOne);\r\n } else {\r\n // Hub created a set of Solution items that are not 100% compatible\r\n // with the Solution.js deployer.\r\n schemaUpgrades.push(\r\n _applySchema,\r\n _upgradeTwoDotZero,\r\n _upgradeTwoDotOne,\r\n _upgradeTwoDotTwo,\r\n _upgradeTwoDotThree,\r\n _upgradeTwoDotFour,\r\n _upgradeTwoDotFive,\r\n _upgradeTwoDotSix,\r\n _upgradeTwoDotSeven\r\n );\r\n // Apply the 3.x upgrades\r\n schemaUpgrades.push(\r\n _upgradeThreeDotZero\r\n // _upgradeThreeDotOne // Not ready for prod yet\r\n );\r\n }\r\n // Run any migrations serially. Since we start with a promise,\r\n // individual migrations are free to return either ISolutionItem\r\n // or Promise<ISolutionItem>\r\n return schemaUpgrades.reduce(\r\n (promise, upgradeFn) =>\r\n promise.then((updatedModel: ISolutionItem) => upgradeFn(updatedModel)),\r\n Promise.resolve(model)\r\n );\r\n }\r\n}\r\n","/** @license\r\n * Copyright 2018 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\nimport { addItemResource } from \"@esri/arcgis-rest-portal\";\r\nimport { ArcGISAuthError } from \"@esri/arcgis-rest-request\";\r\nimport { UserSession } from \"../interfaces\";\r\n/**\r\n * Add a resource from a blob\r\n *\r\n * @param blob\r\n * @param itemId\r\n * @param folder\r\n * @param filename\r\n * @param authentication\r\n */\r\nexport function addResourceFromBlob(\r\n blob: any,\r\n itemId: string,\r\n folder: string,\r\n filename: string,\r\n authentication: UserSession\r\n): Promise<any> {\r\n // Check that the filename has an extension because it is required by the addResources call\r\n if (filename && filename.indexOf(\".\") < 0) {\r\n return new Promise((resolve, reject) => {\r\n reject(\r\n new ArcGISAuthError(\r\n \"Filename must have an extension indicating its type\"\r\n )\r\n );\r\n });\r\n }\r\n\r\n const addRsrcOptions = {\r\n id: itemId,\r\n resource: blob,\r\n name: filename,\r\n authentication: authentication,\r\n params: {}\r\n };\r\n if (folder) {\r\n addRsrcOptions.params = {\r\n resourcesPrefix: folder\r\n };\r\n }\r\n return addItemResource(addRsrcOptions);\r\n}\r\n","/** @license\r\n * Copyright 2021 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/**\r\n * Provides a function for deleting a deployed Solution item and all of the items that were created\r\n * as part of that deployment.\r\n *\r\n * @module deleteSolution\r\n */\r\n\r\nimport {\r\n IDeleteSolutionOptions,\r\n IItemTemplate,\r\n ISolutionItemPrecis,\r\n ISolutionPrecis,\r\n UserSession\r\n} from \"./interfaces\";\r\nimport * as deleteSolutionContents from \"./deleteHelpers/deleteSolutionContents\";\r\nimport * as getDeletableSolutionInfo from \"./getDeletableSolutionInfo\";\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\n/**\r\n * Deletes a deployed Solution item and and all of the items that were created\r\n * as part of that deployment.\r\n *\r\n * @param solutionItemId Id of a deployed Solution\r\n * @param authentication Credentials for the request\r\n * @param options Progress reporting options\r\n * @returns Promise that will resolve with a list of two solution summaries: successful deletions\r\n * and failed deletions. Ignored items (e.g., already deleted) and items shared with more than\r\n * one Solution will not be in either list.\r\n * Note that Solution item and its deployment folder will only be deleted if all of its deployed\r\n * items were deleted (the failure list is empty). This makes it possible to re-attempted\r\n * deletion using the solutionItemId.\r\n */\r\nexport function deleteSolution(\r\n solutionItemId: string,\r\n authentication: UserSession,\r\n options?: IDeleteSolutionOptions\r\n): Promise<ISolutionPrecis[]> {\r\n return getDeletableSolutionInfo\r\n .getDeletableSolutionInfo(solutionItemId, authentication)\r\n .then((solutionSummary: ISolutionPrecis) => {\r\n return deleteSolutionContents.deleteSolutionContents(\r\n solutionItemId,\r\n solutionSummary,\r\n authentication,\r\n options\r\n );\r\n })\r\n .catch(() => {\r\n return [undefined, undefined];\r\n });\r\n}\r\n\r\n/**\r\n * Deletes a deployed Solution item and and all of the items that were created\r\n * as part of that deployment.\r\n *\r\n * @param solutionItemId Id of a deployed Solution\r\n * @param itemIds Item ids to delete; this list is reversed in this function\r\n * @param templates List of Solution's templates\r\n * @param templateDictionary Hash of facts: folder id, org URL, adlib replacements\r\n * @param authentication Credentials for the request\r\n * @param options Progress reporting options\r\n * @returns Promise that will resolve with a list of two solution summaries: successful deletions\r\n * and failed deletions. Ignored items (e.g., already deleted) and items shared with more than\r\n * one Solution will not be in either list.\r\n * Note that Solution item and its deployment folder will only be deleted if all of its deployed\r\n * items were deleted (the failure list is empty). This makes it possible to re-attempted\r\n * deletion using the solutionItemId.\r\n */\r\nexport function deleteSolutionByComponents(\r\n solutionItemId: string,\r\n itemIds: string[],\r\n templates: IItemTemplate[],\r\n templateDictionary: any,\r\n authentication: UserSession,\r\n options?: IDeleteSolutionOptions\r\n): Promise<ISolutionPrecis[]> {\r\n // Construct a description of the solution from its id and the itemIds using the templateDictionary to fill in details\r\n const solutionSummary: ISolutionPrecis = {\r\n id: solutionItemId,\r\n title: \"\",\r\n folder: templateDictionary.folderId,\r\n items: [] as ISolutionItemPrecis[],\r\n groups: [] as string[]\r\n };\r\n\r\n // Combine the templates and templateDictionary to create summary items\r\n let summaries = templates\r\n .map(template => {\r\n return {\r\n id: template.itemId,\r\n type: template.type,\r\n title: template.item.title,\r\n modified: 0,\r\n owner: \"\"\r\n } as ISolutionItemPrecis;\r\n })\r\n .map(summary => {\r\n summary.id = templateDictionary[summary.id].itemId;\r\n return summary;\r\n })\r\n .filter(summary => !!summary.id);\r\n\r\n // Filter to only include items in itemIds\r\n summaries = summaries.filter(summary => itemIds.includes(summary.id));\r\n\r\n // Sort into the order of itemIds (last created is first deleted)\r\n summaries.sort(\r\n (summary1, summary2) =>\r\n itemIds.indexOf(summary1.id) - itemIds.indexOf(summary2.id)\r\n );\r\n\r\n // Partition into items and groups\r\n summaries.forEach(summary => {\r\n if (summary.type === \"Group\") {\r\n solutionSummary.groups.push(summary.id);\r\n } else {\r\n solutionSummary.items.push(summary);\r\n }\r\n });\r\n\r\n // Delete the solution\r\n return deleteSolutionContents.deleteSolutionContents(\r\n solutionItemId,\r\n solutionSummary,\r\n authentication,\r\n options\r\n );\r\n}\r\n","/** @license\r\n * Copyright 2021 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/**\r\n * Provides functions for accessing a complete item.\r\n *\r\n * @module completeItem\r\n */\r\n\r\nimport {\r\n ICompleteItem,\r\n IFeatureServiceProperties,\r\n UserSession\r\n} from \"./interfaces\";\r\nimport * as restHelpers from \"./restHelpers\";\r\nimport * as restHelpersGet from \"./restHelpersGet\";\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\n/**\r\n * Gets everything about an item.\r\n *\r\n * @param itemId Id of an item whose information is sought\r\n * @param authentication Credentials for the request\r\n * @returns Promise that will resolve with everything known about the item\r\n */\r\nexport function getCompleteItem(\r\n itemId: string,\r\n authentication: UserSession\r\n): Promise<ICompleteItem> {\r\n let itemBase: any;\r\n let completeItem: any;\r\n\r\n return restHelpersGet\r\n .getItemBase(itemId, authentication)\r\n .then((response: any) => {\r\n itemBase = response;\r\n\r\n return Promise.all([\r\n restHelpersGet.getItemDataAsFile(itemId, itemBase.name, authentication),\r\n restHelpersGet.getItemThumbnailAsFile(\r\n itemId,\r\n itemBase.thumbnail,\r\n false,\r\n authentication\r\n ),\r\n restHelpersGet.getItemMetadataAsFile(itemId, authentication),\r\n restHelpersGet.getItemResourcesFiles(itemId, authentication),\r\n restHelpersGet.getItemRelatedItemsInSameDirection(\r\n itemId,\r\n \"forward\",\r\n authentication\r\n ),\r\n restHelpersGet.getItemRelatedItemsInSameDirection(\r\n itemId,\r\n \"reverse\",\r\n authentication\r\n )\r\n ]);\r\n })\r\n .then(responses => {\r\n const [\r\n itemData,\r\n itemThumbnail,\r\n itemMetadata,\r\n itemResources,\r\n itemFwdRelatedItems,\r\n itemRevRelatedItems\r\n ] = responses;\r\n // Summarize what we have\r\n // ----------------------\r\n // (itemBase: IItem) text/plain JSON\r\n // (itemData: File) */*\r\n // (itemThumbnail: File) image/*\r\n // (itemMetadata: File) application/xml\r\n // (itemResources: File[]) list of */*\r\n // (itemFwdRelatedItems: IRelatedItems[]) list of forward relationshipType/relatedItems[] pairs\r\n // (itemRevRelatedItems: IRelatedItems[]) list of reverse relationshipType/relatedItems[] pairs\r\n completeItem = {\r\n base: itemBase,\r\n data: itemData,\r\n thumbnail: itemThumbnail,\r\n metadata: itemMetadata,\r\n resources: itemResources,\r\n fwdRelatedItems: itemFwdRelatedItems,\r\n revRelatedItems: itemRevRelatedItems\r\n };\r\n\r\n if (itemBase.type === \"Feature Service\") {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n return restHelpers.getFeatureServiceProperties(\r\n itemBase.url,\r\n authentication\r\n );\r\n } else {\r\n return Promise.resolve(null);\r\n }\r\n })\r\n .then((properties: IFeatureServiceProperties) => {\r\n if (properties) {\r\n completeItem.featureServiceProperties = properties;\r\n }\r\n return Promise.resolve(completeItem);\r\n });\r\n}\r\n","/** @license\r\n * Copyright 2021 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\nimport { ISourceFile, ISourceFileCopyPath, UserSession } from \"../interfaces\";\r\nimport { getBlobAsFile } from \"../restHelpersGet\";\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\n/**\r\n * Fetches a set of resources defined by paths.\r\n *\r\n * @param resourceItemFilePaths Paths to resources in source\r\n * @param authentication Credentials for the request to the source\r\n * @returns A promise which resolves with an array of resource files\r\n */\r\nexport function getItemResourcesFilesFromPaths(\r\n resourceItemFilePaths: ISourceFileCopyPath[],\r\n authentication: UserSession\r\n): Promise<ISourceFile[]> {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n return Promise.all(\r\n resourceItemFilePaths.map(fileInfo => {\r\n return new Promise<ISourceFile>(resolve => {\r\n getBlobAsFile(fileInfo.url, fileInfo.filename, authentication).then(\r\n file => {\r\n resolve({\r\n itemId: fileInfo.itemId,\r\n file,\r\n folder: fileInfo.folder,\r\n filename: fileInfo.filename\r\n } as ISourceFile);\r\n },\r\n () => {\r\n resolve(null);\r\n }\r\n );\r\n });\r\n })\r\n ).then((files: ISourceFile[]) => {\r\n // Discard failures\r\n return files.filter(file => !!file);\r\n });\r\n}\r\n","/** @license\r\n * Copyright 2020 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\nimport { getItemResources } from \"../restHelpersGet\";\r\nimport { generateSourceFilePaths } from \"../resourceHelpers\";\r\nimport { IItemTemplate, ISourceFileCopyPath, UserSession } from \"../interfaces\";\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\n/**\r\n * Updates the solution item with resources from the itemTemplate\r\n *\r\n * @param itemTemplate Template for AGOL item\r\n * @param solutionItemId item id for the solution\r\n * @param authentication Credentials for the request to the storage\r\n * @param storageVersion Version of the Solution template\r\n * @returns A promise which resolves with an array of paths to resources for the item\r\n */\r\nexport function getItemResourcesPaths(\r\n itemTemplate: IItemTemplate,\r\n solutionItemId: string,\r\n authentication: UserSession,\r\n storageVersion = 0\r\n): Promise<ISourceFileCopyPath[]> {\r\n // get the resources for the item\r\n return getItemResources(itemTemplate.itemId, authentication).then(\r\n resourceResponse => {\r\n // map out the resource names and filter for things we\r\n // don't want transferred at this time\r\n const itemResources = resourceResponse.resources\r\n .map((r: any) => r.resource)\r\n .filter((res: any) => {\r\n let result = true;\r\n // StoryMaps has a set of resources that must be interpolated and can not be\r\n // directly copied, so they must be filtered out. Sub-optimal as it spreads\r\n // type specific logic around the app, but until we refactor how resources\r\n // are handled, this is necessary\r\n if (itemTemplate.type === \"StoryMap\") {\r\n if ([\"oembed.json\", \"oembed.xml\"].indexOf(res) !== -1) {\r\n result = false;\r\n }\r\n if (res.match(/^draft_[\\s\\S]*.json$/)) {\r\n result = false;\r\n }\r\n }\r\n // Web-Experiences stores drafts in the config.json file; we don't create Solutions with drafts\r\n if (itemTemplate.type === \"Web Experience\") {\r\n if (res === \"config/config.json\") {\r\n result = false;\r\n }\r\n }\r\n return result;\r\n });\r\n // create the filePaths\r\n const resourceItemFilePaths: ISourceFileCopyPath[] = generateSourceFilePaths(\r\n authentication.portal,\r\n itemTemplate.itemId,\r\n itemTemplate.item.thumbnail,\r\n itemResources,\r\n itemTemplate.type === \"Group\",\r\n storageVersion\r\n );\r\n return Promise.resolve(resourceItemFilePaths);\r\n }\r\n );\r\n}\r\n","/** @license\r\n * Copyright 2018 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n// ------------------------------------------------------------------------------------------------------------------ //\r\n\r\nexport interface IItemTypeAbbrev {\r\n [id: string]: string;\r\n}\r\n\r\nexport function getItemTypeAbbrev(type: string): string {\r\n // Supported item types\r\n return (\r\n ({\r\n ////////////////////////////////////////////////////////\r\n // Group type\r\n Group: \"grp\",\r\n\r\n ////////////////////////////////////////////////////////\r\n // Layer types\r\n \"Big Data Analytic\": \"bda\",\r\n \"Feature Collection\": \"col\",\r\n \"Feature Service\": \"svc\",\r\n Feed: \"fee\",\r\n \"Geocoding Service\": \"xxx\",\r\n \"Geodata Service\": \"xxx\",\r\n \"Geometry Service\": \"xxx\",\r\n \"Geoprocessing Service\": \"xxx\",\r\n \"Globe Service\": \"xxx\",\r\n \"Image Service\": \"xxx\",\r\n KML: \"xxx\",\r\n \"Map Service\": \"xxx\",\r\n \"Network Analysis Service\": \"xxx\",\r\n \"Real Time Analytic\": \"rta\",\r\n \"Relational Database Connection\": \"xxx\",\r\n \"Scene Service\": \"xxx\",\r\n \"Stream Service\": \"xxx\",\r\n Tool: \"xxx\",\r\n \"Vector Tile Service\": \"xxx\",\r\n WFS: \"xxx\",\r\n WMS: \"xxx\",\r\n WMTS: \"xxx\",\r\n \"Workflow Manager Service\": \"xxx\",\r\n\r\n ////////////////////////////////////////////////////////\r\n // Map types\r\n \"3D Web Scene\": \"xxx\",\r\n \"Web Map\": \"map\",\r\n \"Web Scene\": \"sc2\",\r\n\r\n ////////////////////////////////////////////////////////\r\n // App types\r\n Application: \"xxx\",\r\n \"Data Store\": \"xxx\",\r\n \"Desktop Application\": \"xxx\",\r\n \"Excalibur Imagery Project\": \"xxx\",\r\n Form: \"frm\",\r\n \"Hub Initiative\": \"hin\",\r\n \"Hub Page\": \"hpg\",\r\n \"Hub Site Application\": \"hsa\",\r\n \"Insights Model\": \"xxx\",\r\n \"Insights Page\": \"xxx\",\r\n \"Insights Theme\": \"xxx\",\r\n \"Insights Workbook\": \"xxx\",\r\n Mission: \"xxx\",\r\n \"Mobile Application\": \"xxx\",\r\n \"Native Application\": \"xxx\",\r\n Notebook: \"nbk\",\r\n \"Oriented Imagery Catalog\": \"oic\",\r\n \"Ortho Mapping Project\": \"xxx\",\r\n \"QuickCapture Project\": \"qck\",\r\n \"Site Application\": \"xxx\",\r\n \"Site Initiative\": \"xxx\",\r\n \"Site Page\": \"xxx\",\r\n Solution: \"sol\",\r\n StoryMap: \"sty\",\r\n \"Urban Model\": \"xxx\",\r\n \"Web Experience Template\": \"wxt\",\r\n \"Web Experience\": \"wex\",\r\n \"Web Mapping Application\": \"wma\",\r\n \"Workforce Project\": \"wrk\",\r\n\r\n ////////////////////////////////////////////////////////\r\n // File types\r\n \"360 VR Experience\": \"xxx\",\r\n \"AppBuilder Extension\": \"xxx\",\r\n \"AppBuilder Widget Package\": \"xxx\",\r\n \"Application Configuration\": \"xxx\",\r\n \"ArcGIS Pro Add In\": \"pro\",\r\n \"ArcGIS Pro Configuration\": \"xxx\",\r\n \"ArcPad Package\": \"xxx\",\r\n \"Basemap Package\": \"xxx\",\r\n \"CAD Drawing\": \"xxx\",\r\n \"CityEngine Web Scene\": \"xxx\",\r\n \"Code Attachment\": \"cod\",\r\n \"Code Sample\": \"sam\",\r\n \"Color Set\": \"xxx\",\r\n \"Compact Tile Package\": \"xxx\",\r\n \"CSV Collection\": \"xxx\",\r\n CSV: \"csv\",\r\n Dashboard: \"dsh\",\r\n \"Deep Learning Package\": \"xxx\",\r\n \"Desktop Add In\": \"dai\",\r\n \"Desktop Application Template\": \"dat\",\r\n \"Desktop Style\": \"xxx\",\r\n \"Document Link\": \"doc\",\r\n \"Explorer Add In\": \"xxx\",\r\n \"Explorer Layer\": \"xxx\",\r\n \"Explorer Map\": \"xxx\",\r\n \"Feature Collection Template\": \"xxx\",\r\n \"File Geodatabase\": \"xxx\",\r\n GeoJson: \"jsn\",\r\n GeoPackage: \"xxx\",\r\n \"Geoprocessing Package\": \"gpk\",\r\n \"Geoprocessing Sample\": \"geo\",\r\n \"Globe Document\": \"xxx\",\r\n \"Image Collection\": \"xxx\",\r\n Image: \"img\",\r\n \"iWork Keynote\": \"xxx\",\r\n \"iWork Numbers\": \"xxx\",\r\n \"iWork Pages\": \"xxx\",\r\n \"KML Collection\": \"xxx\",\r\n \"Layer Package\": \"lyp\",\r\n \"Layer Template\": \"xxx\",\r\n Layer: \"xxx\",\r\n Layout: \"xxx\",\r\n \"Locator Package\": \"xxx\",\r\n \"Map Document\": \"xxx\",\r\n \"Map Package\": \"xxx\",\r\n \"Map Template\": \"mpt\",\r\n \"Microsoft Excel\": \"xls\",\r\n \"Microsoft Powerpoint\": \"ppt\",\r\n \"Microsoft Word\": \"wrd\",\r\n \"Mobile Basemap Package\": \"xxx\",\r\n \"Mobile Map Package\": \"xxx\",\r\n \"Mobile Scene Package\": \"xxx\",\r\n \"Native Application Installer\": \"xxx\",\r\n \"Native Application Template\": \"xxx\",\r\n netCDF: \"xxx\",\r\n \"Operation View\": \"opv\",\r\n \"Operations Dashboard Add In\": \"xxx\",\r\n \"Operations Dashboard Extension\": \"xxx\",\r\n PDF: \"xxx\",\r\n \"Pro Layer Package\": \"xxx\",\r\n \"Pro Layer\": \"xxx\",\r\n \"Pro Map Package\": \"prm\",\r\n \"Pro Map\": \"xxx\",\r\n \"Pro Report\": \"xxx\",\r\n \"Project Package\": \"ppk\",\r\n \"Project Template\": \"prt\",\r\n \"Published Map\": \"xxx\",\r\n \"Raster function template\": \"xxx\",\r\n \"Report Template\": \"xxx\",\r\n \"Rule Package\": \"xxx\",\r\n \"Scene Document\": \"xxx\",\r\n \"Scene Package\": \"xxx\",\r\n \"Service Definition\": \"xxx\",\r\n Shapefile: \"xxx\",\r\n \"Statistical Data Collection\": \"xxx\",\r\n Style: \"xxx\",\r\n \"Survey123 Add In\": \"xxx\",\r\n \"Symbol Set\": \"xxx\",\r\n \"Task File\": \"xxx\",\r\n \"Tile Package\": \"xxx\",\r\n \"Toolbox Package\": \"xxx\",\r\n \"Vector Tile Package\": \"xxx\",\r\n \"Viewer Configuration\": \"xxx\",\r\n \"Visio Document\": \"xxx\",\r\n \"Window Mobile Package\": \"xxx\",\r\n \"Windows Mobile Package\": \"xxx\",\r\n \"Windows Viewer Add In\": \"xxx\",\r\n \"Windows Viewer Configuration\": \"xxx\",\r\n \"Workflow Manager Package\": \"xxx\",\r\n\r\n ////////////////////////////////////////////////////////\r\n // Testing \"types\"\r\n Undefined: \"und\",\r\n Unsupported: \"unk\"\r\n } as IItemTypeAbbrev)[type] || \"xxx\"\r\n );\r\n}\r\n","/** @license\r\n * Copyright 2018 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\nimport { ISolutionItem } from \"../interfaces\";\r\nimport { getProp } from \"../generalHelpers\";\r\n\r\n/**\r\n * Determine if the Solution is a legacy item created by Hub\r\n * vs one that is 100% compatible with Solution.js\r\n *\r\n * @param model ISolutionModel\r\n * @private\r\n */\r\nexport function _isLegacySolution(model: ISolutionItem): boolean {\r\n let result = false;\r\n // if it does not have the `Template` keyword BUT does have `hubSolutionTemplate` it is legacy\r\n const keywords = getProp(model, \"item.typeKeywords\") || [];\r\n if (!keywords.includes(\"Template\")) {\r\n if (\r\n keywords.includes(\"hubSolutionTemplate\") &&\r\n keywords.includes(\"solutionTemplate\")\r\n ) {\r\n result = true;\r\n }\r\n }\r\n return result;\r\n}\r\n","/** @license\r\n * Copyright 2020 Esri\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\nimport { UserSession } from \"../\";\r\nimport { IGroupSharingOptions, shareItemWithGroup } from \"@esri/arcgis-rest-portal\";\r\n\r\n/**\r\n * Share an item to one or more groups\r\n * Returns a promise for all the sharing calls\r\n *\r\n * @param groups Array of Group Ids\r\n * @param itemId Item Id\r\n * @param authentication UserSession\r\n * @param owner owner of the group when sharing tracking items (can be different from the deploying user)\r\n */\r\nexport function shareItemToGroups(\r\n groupIds: string[],\r\n itemId: string,\r\n authentication: UserSession,\r\n owner?: string\r\n): Promise<any> {\r\n return Promise.all(\r\n groupIds.map(groupId => {\r\n const requestOptions: IGroupSharingOptions = {\r\n id: itemId,\r\n groupId,\r\n authentication\r\n };\r\n /* istanbul ignore else */\r\n if (owner) {\r\n requestOptions.owner = owner;\r\n }\r\n return shareItemWithGroup(requestOptions);\r\n })\r\n );\r\n}\r\n"],"names":["UNREACHABLE","EFileType","SFileType","EItemProgressStatus","exports","SItemProgressStatus","global$1","global","self","window","lookup","revLookup","Arr","Uint8Array","Array","inited","init","code","i","len","length","charCodeAt","encodeChunk","uint8","start","end","tmp","num","output","push","join","fromByteArray","extraBytes","parts","maxChunkLength","len2","read","buffer","offset","isLE","mLen","nBytes","e","m","eLen","eMax","eBias","nBits","d","s","NaN","Infinity","Math","pow","write","value","c","rt","abs","isNaN","floor","log","LN2","toString","isArray","arr","call","kMaxLength","Buffer","TYPED_ARRAY_SUPPORT","createBuffer","that","RangeError","__proto__","prototype","arg","encodingOrOffset","this","Error","allocUnsafe","from","TypeError","ArrayBuffer","array","byteOffset","byteLength","undefined","fromArrayLike","fromArrayBuffer","string","encoding","isEncoding","actual","slice","fromString","obj","internalIsBuffer","checked","copy","val","type","data","fromObject","assertSize","size","b","_isBuffer","isView","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","n","bidirectionalIndexOf","dir","arrayIndexOf","indexOf","lastIndexOf","indexSize","arrLength","valLength","String","buf","readUInt16BE","foundIndex","found","j","hexWrite","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","str","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","base64.fromByteArray","min","res","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","apply","decodeCodePointsArray","poolSize","_augment","Symbol","species","alloc","fill","allocUnsafeSlow","isBuffer","compare","a","x","y","concat","list","pos","swap16","swap32","swap64","arguments","equals","inspect","match","target","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","toJSON","_arr","ret","out","toHex","bytes","checkOffset","ext","checkInt","max","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","ieee754.write","writeDouble","newBuf","subarray","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","ieee754.read","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","set","INVALID_BASE64_RE","leadSurrogate","b64","l","placeHolders","L","base64.toByteArray","trim","replace","stringtrim","base64clean","src","dst","isFastBuffer","isSlowBuffer","constructor","defaultSetTimout","defaultClearTimeout","cachedSetTimeout","cachedClearTimeout","runTimeout","fun","setTimeout","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","run","marker","runClearTimeout","Item","performance","now","mozNow","msNow","oNow","webkitNow","module","o","h","u","r","require","t","p","encode","f","getTypeOf","charAt","decode","uint8array","compressedSize","uncompressedSize","crc32","compression","compressedContent","getContentWorker","Promise","resolve","pipe","uncompressWorker","on","streamInfo","data_length","getCompressedWorker","withStreamInfo","createWorkerFrom","compressWorker","STORE","magic","DEFLATE","base64","binary","createFolders","date","compressionOptions","comment","unixPermissions","dosPermissions","lie","Uint16Array","Uint32Array","_pako","_pakoAction","_pakoOptions","meta","inherits","processChunk","_createPako","transformTo","flush","cleanUp","raw","level","onData","pako","A","file","O","utf8encode","I","name","_","g","v","w","k","S","z","C","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCFullYear","getUTCMonth","getUTCDate","B","E","fileRecord","R","LOCAL_FILE_HEADER","dirRecord","CENTRAL_FILE_HEADER","bytesWritten","zipComment","zipPlatform","encodeFileName","streamFiles","accumulate","contentBuffer","dirRecords","currentSourceOffset","entriesCount","currentFile","_sources","percent","openedSource","closedSource","DATA_DESCRIPTOR","shift","CENTRAL_DIRECTORY_END","prepareNextSource","previous","isPaused","pause","resume","registerPrevious","error","generatedError","lock","generateWorker","platform","forEach","options","_compressWorker","files","Object","create","root","clone","loadAsync","support","defaults","version","external","decompressed","extend","checkCRC32","optimizedBinaryString","decodeFileName","utf8decode","isNode","isStream","reject","prepareContent","then","load","all","fileNameStr","fileCommentStr","unsafeOriginalName","_upstreamEnded","_bindStream","_stream","Readable","_helper","emit","_read","newBufferFrom","allocBuffer","Buffer.isBuffer","Date","toUpperCase","substring","filter","test","folder","remove","generate","generateInternalStream","mimeType","checkSupport","generateAsync","generateNodeStream","toNodejsStream","stream","byteAt","zero","lastIndexOfSignature","readAndCheckSignature","readData","index","checkIndex","setIndex","skip","readInt","readString","readDate","UTC","ZIP64_CENTRAL_DIRECTORY_LOCATOR","ZIP64_CENTRAL_DIRECTORY_END","destType","propName","dataIsReady","_tickScheduled","_tickAndRepeat","delay","isFinished","_tick","extraStreamInfo","isLocked","_listeners","mergeStreamInfo","hasOwnProperty","nodestream","_internalType","_outputType","_mimeType","newBlob","_worker","objectMode","arraybuffer","nodebuffer","blob","Blob","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","append","getBlob","leftOver","applyFromCharCode","Utf8DecodeWorker","Utf8EncodeWorker","stringifyByChunk","stringifyByChar","applyCanBeUsed","split","pop","MAX_VALUE_16BITS","MAX_VALUE_32BITS","pretty","setImmediate","FileReader","onload","result","onerror","readAsArrayBuffer","setimmediate","loadOptions","checkSignature","reader","isSignature","readBlockEndOfCentral","diskNumber","diskWithCentralDirStart","centralDirRecordsOnThisDisk","centralDirRecords","centralDirSize","centralDirOffset","zipCommentLength","readBlockZip64EndOfCentral","zip64EndOfCentralSize","zip64ExtensibleData","id","readBlockZip64EndOfCentralLocator","diskWithZip64CentralDirStart","relativeOffsetEndOfZip64CentralDir","disksCount","readLocalFiles","localHeaderOffset","readLocalPart","handleUTF8","processAttributes","readCentralDir","zip64","readCentralPart","readEndOfCentral","prepareReader","isEncrypted","bitFlag","useUTF8","fileNameLength","fileName","compressionMethod","versionMadeBy","extraFieldsLength","fileCommentLength","diskNumberStart","internalFileAttributes","externalFileAttributes","readExtraFields","parseZIP64ExtraField","fileComment","extraFields","findExtraFieldUnicodePath","findExtraFieldUnicodeComment","_data","_dataBinary","internalStream","_decompressWorker","async","nodeStream","MutationObserver","WebKitMutationObserver","document","createTextNode","observe","characterData","MessageChannel","createElement","onreadystatechange","parentNode","removeChild","documentElement","appendChild","port1","onmessage","port2","postMessage","state","outcome","promise","onFulfilled","callFulfilled","otherCallFulfilled","onRejected","callRejected","otherCallRejected","status","finally","catch","race","immediate","assign","method","chunkSize","windowBits","memLevel","strategy","to","gzip","err","msg","ended","chunks","strm","avail_out","deflateInit2","header","deflateSetHeader","dictionary","string2buf","deflateSetDictionary","_dict_set","input","next_in","avail_in","Buf8","next_out","deflate","onEnd","buf2binstring","shrinkBuf","deflateEnd","flattenChunks","Deflate","deflateRaw","inflateInit2","Z_OK","inflateGetHeader","Z_FINISH","Z_NO_FLUSH","binstring2buf","inflate","Z_NEED_DICT","inflateSetDictionary","Z_BUF_ERROR","Z_STREAM_END","Z_SYNC_FLUSH","utf8border","buf2string","arraySet","inflateEnd","Inflate","inflateRaw","ungzip","Int32Array","setTyped","Buf16","Buf32","Z_PARTIAL_FLUSH","Z_FULL_FLUSH","Z_BLOCK","Z_TREES","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","T","D","F","pending","pending_buf","pending_out","total_out","N","_tr_flush_block","block_start","strstart","U","P","max_chain_length","prev_length","nice_match","w_size","w_mask","prev","good_match","lookahead","match_start","window_size","hash_size","head","wrap","adler","total_in","insert","ins_h","hash_shift","hash_mask","Z","match_length","_tr_tally","max_lazy_match","last_lit","W","prev_match","match_available","M","good_length","max_lazy","nice_length","max_chain","func","H","pending_buf_size","gzhead","gzindex","last_flush","w_bits","hash_bits","dyn_ltree","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","bl_count","heap","heap_len","heap_max","depth","l_buf","lit_bufsize","d_buf","opt_len","static_len","matches","bi_buf","bi_valid","G","data_type","_tr_init","K","Y","deflateInit","deflateReset","deflateResetKeep","text","hcrc","extra","time","os","_tr_align","_tr_stored_block","deflateInfo","xflags","extra_len","done","dmax","wsize","whave","wnext","hold","bits","lencode","distcode","lenbits","distbits","mode","sane","last","havedict","flags","check","total","wbits","ncode","nlen","ndist","have","next","lens","work","lendyn","distdyn","back","was","inflateReset","inflateReset2","inflateResetKeep","inflateInit","inflateInfo","static_tree","extra_bits","extra_base","elems","max_length","has_stree","dyn_tree","max_code","stat_desc","X","V","q","J","getPrototypeOf","process","args","process.nextTick","importScripts","random","addEventListener","attachEvent","Function","callback","clearImmediate","source","lib$1","_default$1","lib","_default","getDefaultWhiteList$1","whiteList","REGEXP_URL_JAVASCRIPT","getDefaultWhiteList","onAttr","onIgnoreAttr","safeAttrValue","_$3","item","fn","scope","trimRight","parser$2","css","cssLength","isParenthesisOpen","lastPos","retCSS","addNewAttr","DEFAULT$1","parseStyle","isNull$1","FilterCSS$2","shallowCopyObject$1","sourcePosition","position","isWhite","RegExp","opts","DEFAULT","FilterCSS","html","util","spaceIndex","exec","FilterCSS$1","getDefaultCSSWhiteList","_$2","abbr","address","area","article","aside","audio","bdi","bdo","big","blockquote","br","caption","center","cite","col","colgroup","dd","del","details","div","dl","dt","em","figcaption","figure","font","footer","h1","h2","h3","h4","h5","h6","hr","img","ins","li","mark","nav","ol","pre","section","small","span","summary","sup","strong","strike","table","tbody","td","tfoot","th","thead","tr","tt","ul","video","defaultCSSFilter","escapeHtml","REGEXP_LT","REGEXP_GT","REGEXP_QUOTE","REGEXP_QUOTE_2","REGEXP_ATTR_VALUE_1","REGEXP_ATTR_VALUE_COLON","REGEXP_ATTR_VALUE_NEWLINE","REGEXP_DEFAULT_ON_TAG_ATTR_4","REGEXP_DEFAULT_ON_TAG_ATTR_7","REGEXP_DEFAULT_ON_TAG_ATTR_8","escapeQuote","unescapeQuote","escapeHtmlEntities","escapeDangerHtml5Entities","clearNonPrintableCharacter","str2","friendlyAttrValue","escapeAttrValue","onTag","tag","onIgnoreTag","onTagAttr","onIgnoreTagAttr","cssFilter","lastIndex","onIgnoreTagStripAll","StripTagBody","tags","isRemoveAllTag","removeList","posStart","isRemoveTag","isClosing","rethtml","stripCommentTag","retHtml","stripBlankChar","chars","char","parser$1","_$1","getTagName","tagName","REGEXP_ILLEGAL_ATTR_NAME","findNextEqual","findNextQuotationMark","findBeforeEqual","stripQuoteWrap","isQuoteWrapString","parseTag","tagStart","quoteStart","currentPos","currentTagName","currentHtml","chariterator","ic","parseAttr","lastMarkPos","retAttrs","tmpName","addAttr","parser","isNull","FilterXSS","shallowCopyObject","stripIgnoreTag","console","allowList","map","keysToLowerCase","allowCommentTag","stripIgnoreTagBody","info","attrs","closing","getAttrs","whiteAttrList","attrsHtml","isWhiteAttr","xss","filterXSS","DedicatedWorkerGlobalScope","Sanitizer","filterOptions","extendDefaults","xssFilterOptions","_this","arcgisWhiteList","allowedProtocols","arcgisFilterOptions","sanitizeUrl","_entityMap","keys","key","_extendObjectOfArrays","_xssFilter","sanitize","_iterateOverObject","allowUndefined","_a","isProtocolRequired","protocol","_trim","isRootUrl","isUrlFragment","isValidProtocol","sanitizeHTMLAttribute","attribute","validate","sanitized","isValid","encodeHTML","encodeAttrValue","alphanumericRE","idx","objects","finalObj","hasChanged_1","changedObj","reduce","validation","proto","isPlainObject","createZip","zipFilename","zip","JSZip","container","content","blobToFile","sanitizeJSON","json","sanitizer","new_File","fileBits","File","lastModified","appendQueryParam","url","parameter","blobToJson","blobToText","blobContents","JSON","parse","filename","evt","readAsText","checkUrlPathTermination","endsWith","createShortId","_getRandomNumberInRange","jsonToBlob","_json","stringify","charArray","cloneObject","fileOptions","compareJSONProperties","json1","json2","mismatches","type1","_typeof_null","type2","keys1","keys2","submismatches","deleteProp","path","pathParts","child","subpath","deleteProps","props","prop","fail","success","response","getIDs","regExTest","acc","_v","getProp","curr","idTest","deps","setCreateProp","setProp","getUniqueTitle","title","templateDictionary","titles","newTitle","cleanItemId","ex","_padPositiveNum","totalSize","numStr","numPads","repeat","getWithDefault","defaultValue","mapValues","currentKey","deepMapValues","object","propertyPath","deepMapValuesIteratee","isDate","isRegExp","isFunction","arborist","arrResults","maxLevel","isString","hasDelete","lvl","getLevel","pruneArray","iteratee","entry","objResults","startVal","reduction","pruneObject","getDeleteValue","getPropertyValue","optionalTransform","settings","HANDLEBARS","_isValue","adlib","template","transforms","optional","templateValue","templatePath","settingsValue","hbsEntries","values","isStaticValue","paths","numberOfPaths","find","pathOption","cleanPath","transformCheck","param","_swap","parseFloat","GEOCODE_SERVER_NAME","TRANSFORMS","getDefaultLocatorURL","createPlaceholderTemplate","itemId","resources","dependencies","groups","properties","estimatedDeploymentCostFactor","extractSolutionVersion","itemData","metadata","findTemplateIndexInList","templates","baseId","findIndex","findTemplateInList","iTemplate","hasUnresolvedVariables","getDefaultExtent","itemInfo","extent","replaceInTemplate","replacements","templatizeTerm","context","term","suffix","pattern","templatizeToLowerCase","basePath","startsWith","templatizeIds","objString","unique","regEx","authentication","requestOptions","blobRequestOptions","rawResponse","request","getUser","getBlobAsFile","ignoreErrors","getBlobCheckForError","_fixTextBlobType","adjustedBlob","getItemBase","itemParam","getItem","getItemDataAsFile","getItemDataBlob","getItemDataAsJson","getItemDataBlobUrl","getPortalSharingUrlFromAuth","getItemInfoFileUrlPrefix","getItemMetadataAsFile","getItemMetadataBlob","getItemMetadataBlobUrl","getItemRelatedItems","relationshipType","direction","_getItemRelatedItemsTranche","params","getItemRelatedItemsInSameDirection","relationshipTypes","relatedItemDefs","relationshipResponses","relatedItems","relatedItemIds","getItemResources","portalGetItemResources","nextStart","getItemResourcesFiles","_getItemResourcesTranche","itemResourcesDef","getItemsRelatedToASolution","solutionItemId","relationshipResponse","getItemThumbnailAsFile","thumbnailUrlPart","isGroup","getItemThumbnailUrl","iFilenameStart","getSolutionsRelatedToAnItem","getThumbnailFile","blobText","ignored","_getGroupContentsTranche","groupId","pagingParams","pagingRequest","paging","getGroupContent","contents","trancheIds","items","allSubsequentTrancheIds","getRelatedItems","results","aggregations","count","nextkey","allSubsequentResults","portalSharingUrl","trancheUrl","resource","itemResourceUrl","allSubsequentTrancheDefs","_validateTrackingTemplates","locationTrackingEnabled","some","isTrackingViewTemplate","itemTemplate","itemUpdate","typeKeywords","trackViewGroup","templatizeTracker","groupIdVar","_setName","layers","tables","templatizeServiceItemId","serviceItemId","setTrackingOptions","locationTracking","owner","deleteViewProps","layer","cacheFieldInfos","fieldInfos","fields","sourceFields","editFieldsInfo","types","relationships","drawingInfo","timeInfo","viewDefinitionQuery","_cacheFieldInfo","cacheContingentValues","contingentValues","removeProp","_cachePopupInfo","popupInfos","_items","popupInfo","cacheLayerInfo","layerId","layerIdVar","newVars","unreachableVars","_updateTypeKeywords","createResponse","iKwords","cKwords","getLayerSettings","layerInfos","enterpriseIDMapping","_layerId","isNum","_getNameMapping","updateSettingsFieldInfos","settingsKeys","_k","layerKey","processContingentValues","adminUrl","layersAndTables","layerIds","contingentValuePromises","cur","hasContingentValuesDefinition","rest_request","contingentValuesDefinition","stringDicts","deTemplatizeFieldInfos","adminLayerInfos","viewLayerDefinition","relatedTables","adminLayerInfo","getLayersAndTables","addFeatureServiceDefinition","serviceUrl","listToAdd","_updateTemplateDictionaryFields","isSelfReferential","_isSelfReferential","_updateOrder","layerChunks","toAdd","originalId","service","_updateGeomFieldName","sourceServiceFields","isPortal","_updateForPortal","removeLayerOptimization","_updateAddOptions","useAsync","addToServiceDefinition","sort","names","multiScaleGeometryInfo","uniqueIdField","toLocaleLowerCase","viewLayerDefTable","fieldNames","tableFieldNames","_getFieldNames","dynamicFieldNames","_getDynamicFieldNames","_updateSourceLayerFields","relatedTable","relatedTableFieldNames","dynamicRelatedFieldNames","layerInfo","_updateItemFields","sourceLayerFields","viewSourceLayerId","sourceLayerId","sourceServiceName","statisticType","Set","indexes","tableName","fieldName","compareItemId","layerOrTable","setDefaultSpatialReference","spatialReference","validateSpatialReferenceAndExtent","serviceInfo","sourceSR","sourceExt","sr","sourceWkid","viewWkid","viewExt","updateLayerFieldReferences","resolveFn","rejectFn","postProcessFields","updatePopupInfo","templateInfo","sourceSchemaChangesAllowed","_templatize","_templatizeProperty","property","_templatizeLayer","dataItem","adminItem","templatizeFieldReferences","_validateFields","_templatizeLayerFieldReferences","updates","update","_templatizeAdminLayerInfo","_validateDisplayField","_validateIndexes","_validateTemplatesFields","_validateTypesTemplates","_validateEditFieldsInfo","displayField","skipFields","oidField","globalIdField","indexedFields","filtered","indexFields","verifiedFields","indexField","attributes","editFieldName","itemID","_templatizeAdminLayerInfoFields","_templatizePopupInfo","_templatizeRelationshipFields","_templatizeDefinitionEditor","_templatizeDefinitionExpression","_templatizeDrawingInfo","_templatizeTemplates","_templatizeTypeTemplates","_templatizeTimeInfo","_templatizeDefinitionQuery","viewDef","_processAdminObject","_templatizeSourceServiceName","lookupName","dependency","_getDependantItemId","_templatizeAdminSourceLayerFields","relatedPath","_templatizeTopFilter","topFilter","parentKeyFields","keyFields","orderByFields","orderByField","groupByFields","_groupByFields","mappedFields","keyField","layerDefinition","_templatizeName","_templatizePopupInfoFieldInfos","_templatizeExpressionInfos","expressionInfos","_templatizePopupElements","popupElements","_templatizeMediaInfos","mediaInfos","_templatizeFieldName","rels","relationshipId","adminRelatedTables","_basePath","expression","_templatizeArcadeExpressions","popupElelments","pe","mi","vfields","tooltipField","defEditor","definitionEditor","inputs","parameters","parameterizedExpression","_templatizeSimpleName","definitionExpression","_templatizeRenderer","renderer","_templatizeLabelingInfo","labelingInfo","_templatizeGenRenderer","_templatizeTemporalRenderer","authoringInfo","_templatizeAuthoringInfo","fnP","rExp","rotationExpression","valueExpression","visualVariables","latestObservationRenderer","observationRenderer","trackRenderer","field1","field2","vProps","vVars","exp","fi","labelExp","labelExpression","labelExpInfo","labelExpressionInfo","regExBracket","regExCurly","_attributes","_templatizeKeys","domains","_obj","objKeys","definitionQuery","fInfo","nameMapping","newFields","newFieldNames","field","lName","alias","newEditFieldsInfo","efi","newEfi","nameMappingKeys","lowerEfi","sourceEfiField","deleteFields","sf","_getLayerChunkSize","extractWorkforceDependencies","keyProperties","requests","urls","assignmentIntegrations","ai","assignmentTypes","urlTemplate","serviceRequests","urlTest","urlHash","templatizeWorkforce","serviceItemIdSuffix","getLayerId","getReplaceValue","_templatizeUrlTemplate","getWorkforceDependencies","getKeyWorkforceProperties","infos","getWorkforceServiceInfo","_updateUrl","queryFeatures","where","responses","workforceInfos","assignmentTypeInfos","_getAssignmentTypeInfos","_getAssignmentIntegrationInfos","_updateGlobalIdAndAssignmentType","updateId","assignmentIntegrationInfos","keyAssignmentTypeProps","globalIdFieldName","features","keyAssignmentIntegrationsProps","ids","getUrlDependencies","urlTemplateVar","_getURLs","replaceValue","_templatizeWorkforceProject","groupUpdates","isWorkforceProject","shuffleIds","wInfo","depIndex","splice","_templatizeWorkforceDispatcherOrWorker","fsId","_getFields","promises","finalResult","_getAddFeatures","updateInfos","_getField","_updateDispatchers","fullName","_applyEdits","adds","useGlobalIds","applyEdits","addResults","message","addForwardItemRelationship","originItemId","destinationItemId","addItemRelationship","addTokenToUrl","getToken","token","skipRetry","svcAdminAddToServiceDefinition","checkRequestStatus","statusURL","checkStatus","setInterval","clearInterval","convertToISearchOptions","search","searchOptions","SearchQueryBuilder","toParam","_validateExtent","xmin","xmax","ymax","ymin","wkid","convertExtentWithFallback","fallbackExtent","outSR","geometryServiceUrl","defaultExtent","convertExtent","extentResponse","_requestOptions","inSR","extentOfInterest","transformations","transformation","geoTransforms","geometries","geometryType","projectResponse","projectGeom","getLayerUpdates","refresh","_getUpdate","relUpdates","_getRelationshipUpdates","_sortRelationships","contingentValuesUpdates","_getContingentValuesUpdates","conUpdate","_relUpdateLayers","relUpdate","getRequest","getFeatureServiceProperties","workforceService","serviceData","_parseAdminServiceData","adminServiceInfo","cacheMaxAge","_updateIndexesForRelationshipKeyFields","adminData","removeGroup","portalRemoveGroup","removeItem","portalRemoveItem","searchItems","portalSearchItems","searchGroups","searchString","additionalSearchOptions","portalSearchGroups","searchAllGroups","inPagingParams","sortField","sortOrder","finalResults","searchGroupContents","portalUrl","portal","categories","andGroup","searchGroupContent","updateItem","folderId","additionalParams","updateOptions","portalUpdateItem","updateItemExtended","thumbnail","access","accessOptions","setItemAccess","_addItemDataFile","dataFile","addItemData","addDataOptions","portalAddItemData","_addItemMetadataFile","metadataFile","addMetadataOptions","_getCreateServiceOptions","newItemTemplate","_getFallbackExtent","createOptions","preserveLayerIds","_setItemProperties","organization","helperServices","geometry","solutionExtent","serviceSR","serviceInfoWkid","customDefaultExtent","ops","delete","deleteFromDefinition","updateDefinition","add","addToDefinition","_lowercaseDomain","domainAndPath","domain","_reportVariablesInItem","itemType","base","getUnresolved","portalCapabilities","capabilities","deleteKeys","itemKeys","isMultiServicesView","editorTrackingInfo","enableEditorTracking","initialExtent","role","isUnique","_updateItemURL","numAttempts","iBrace","warn","errorMsg","createHubRequestOptions","getSelf","pSelf","user","ro","portalSelf","hubApiUrl","getHubUrlFromPortal","deleteGroupIfEmpty","username","isGroupProtected","getUsername","getGroup","group","protected","groupContentOptions","groupContent","groupOptions","unprotectGroup","deleteEmptyGroups","deleteSolutionFolder","solutionIds","query","in","and","orgId","searchResult","foundItem","foundItemId","removeFolder","deleteFolderResponse","deleteSolutionItem","protectOptions","unprotectItem","restHelpers.removeItem","topologicallySortItems","buildOrder","missingDependencies","itemsToBePatched","verticesToVisit","vertexType","visit","vertexId","ESortVisitState","InProgress","dependencyId","NotYetVisited","Finished","trackerGroupIds","fsIds","fsViewIds","otherIds","reconstructBuildOrderIds","dependencies.topologicallySortItems","reportProgress","percentDone","deleteOptions","deletedItemId","Started","iPercentDone","round","progressCallback","jobId","event","consoleProgress","removeItems","solutionSummary","hubSiteItemIds","progressPercentStep","solutionDeletedSummary","solutionFailureSummary","itemToDelete","percentDoneReport","hubSites","removeSite","reportProgress.reportProgress","errorMessage","Ignored","Failed","deleteSolutionContents","removalPromise","removeItems.removeItems","resolve2","deleteEmptyGroups\r\n .deleteEmptyGroups","deleteSolutionItem.deleteSolutionItem","solutionItemDeleteStatus","deleteSolutionFolder.deleteSolutionFolder","getSolutionSummary","deployedSolutionVersion","restHelpersGet.getItemBase","restHelpersGet.getItemDataAsJson","itemBase","ownerFolder","templatization.extractSolutionVersion","restHelpersGet.getItemsRelatedToASolution","relatedItem","modified","buildOrderIds","reconstructBuildOrderIds.reconstructBuildOrderIds","dependentGroups","first","second","getDeletableSolutionInfo","getSolutionSummary\r\n .getSolutionSummary","awaitAllItems","restHelpersGet.getSolutionsRelatedToAnItem","getSubscriptionInfo","getPortalUrl","httpMethod","_applySchema","model","schemaVersion","_upgradeTwoDotZero","indicatorsHash","category","indicators","defs","_convertIndicatorToDefinition","_convertIndicatorsToDefinitions","configurationSettings","ind","label","definition","description","supportedTypes","layerOptions","geometryTypes","_convertIndicatorField","tooltip","_upgradeTwoDotOne","_upgradeTwoDotTwo","deepStringReplace","_upgradeTwoDotThree","tmpl","assets","_upgradeTwoDotFour","_upgradeTwoDotFive","form","ver","layerName","themes","theme","updateLayout","question","appearance","layout","questions","_upgradeTwoDotSix","toWebMapIds","mapIds","formTemplate","maps","webMap","webMapId","webMapIds","_upgradeTwoDotSeven","createId","_upgradeThreeDotZero","SolutionResourceType","convertItemResourceToStorageResource","prefix","sourceResourceFilename","storageVersion","storageFileType","fakezip","iLastSlash","convertStorageResourceToItemResource","storageResourceFilename","nameParts","firstPrefixPart","Resource","Thumbnail","Metadata","Data","folderStart","createCopyResults","fileInfo","fetchedFromSource","copiedToDestination","copyDataIntoItem","sourceAuthentication","destinationAuthentication","helpersUpdateItem","createMimeTypedFile","fileDescription","addMetadataFromBlob","copyMetadataIntoItem","copyResourceIntoZip","zipInfo","filelist","copyResourceIntoZipFromInfo","copyZipIntoItem","zipfile","addResourceOptions","archive","addItemResource","copyFilesAsResources","filesPerZip","zipInfos","chunkArray","chunk","_copyAssociatedFileZips","zipResults","copyAssociatedFilesByType","fileInfos","resourceFileInfos","Info","nonEmptyZipInfos","_sendZipsSeriallyToItem","allResults","zipInfoToSend","sendOthersPromise","resolveSleep","zipResult","generateMetadataStorageFilename","generateSourceFilePaths","resourceFilenames","filePaths","resourceFilename","generateSourceResourceUrl","generateSourceMetadataUrl","generateSourceThumbnailUrl","generateThumbnailStorageFilename","sourcePortalSharingUrl","thumbnailurl","thumbnailUrlParts","isSupportedFileType","filenameExtension","_replaceVelocityUrls","velocityUrl","dataString","regex","replaceAll","accumulator","currentLayer","destinationRelationships","relationshipPromises","relationship","relatedItemId","ArcGISAuthError","addRsrcOptions","resourcesPrefix","updateGroup","originalFilename","filenameToUse","storageAuthentication","destinationFolderId","mimeTypes","fp","currentValue","storageItemId","svcAdminCreateFeatureService","encodedServiceURL","serviceurl","itemThumbnailUrl","itemThumbnailAuthentication","resourcesFiles","updatedThumbnailUrl","createItemInFolder","accessDef","updateDefs","rsrcResolve","rsrcReject","snippet","accessInformation","contentStatus","created","culture","licenseInfo","origUrl","dataInfo","createUniqueFolder","folderTitle","folderCreationParam","createFolder","ok","errorDetails","nameNotAvailMsg","folders","createUniqueGroup","groupItem","groupsPromise","groupCreationParam","createGroup","dedupedList","propsToRetain","getDeletableSolutionInfo\r\n .getDeletableSolutionInfo","deleteSolutionContents.deleteSolutionContents","itemIds","summaries","summary1","summary2","services","newlyCreatedItem","dispatchers","assignmentTypeUrl","assignmentTypePromise","assignmentIntegrationUrl","assignmentIntegrationPromise","postProcess","textPromise","completeItem","restHelpersGet\r\n .getItemBase","restHelpersGet.getItemDataAsFile","restHelpersGet.getItemThumbnailAsFile","restHelpersGet.getItemMetadataAsFile","restHelpersGet.getItemResourcesFiles","restHelpersGet.getItemRelatedItemsInSameDirection","itemThumbnail","itemMetadata","itemResources","itemFwdRelatedItems","itemRevRelatedItems","fwdRelatedItems","revRelatedItems","restHelpers.getFeatureServiceProperties","featureServiceProperties","iParamsStart","foldersUrl","encodeURIComponent","groupsUrl","portalGetGroupCategorySchema","getGroupCategorySchema","resourceItemFilePaths","resourceResponse","Group","Feed","KML","Tool","WFS","WMS","WMTS","Application","Form","Mission","Notebook","Solution","StoryMap","CSV","Dashboard","GeoJson","GeoPackage","Image","Layer","Layout","netCDF","PDF","Shapefile","Style","Undefined","Unsupported","layerList","requestsDfd","portalGetPortal","getPortal","basemapGalleryGroupQuery","basemapTitle","basemapGroup","defaultBasemap","defaultV","isWorkforceService","_template","thumbnailUrl","thumbnailFilename","getUTCMilliseconds","UserSession","subscriptionInfo","orgCapabilities","globalStringReplace","replacement","propObj","jsonObj","keywords","kw","datasourceInfos","ds","groupDesignations","keyword","modelVersion","isLegacy","_isLegacySolution","schemaUpgrades","upgradeFn","updatedModel","userName","targetUsername","portalRemoveFolder","removeItemResource","users","portalRemoveGroupUsers","sanitizedJSON","mismatch","dataUrl","URL","createObjectURL","linkElement","setAttribute","style","display","body","click","revokeObjectURL","searchAllItems","accumulatedResponse","completeResponse","searchGroupAllContents","portalResponse","userResponse","baseName","shareOptions","shareItemWithGroup","groupIds","fsUrl","jsonLayers","jsonTables","jsonItems","fullExtent","hasZ","jsonItem","matchingItems","_item","enableZDefaults","zDefault","templatizeKeys","groupInfo","portalUpdateGroup","prefixedFilenameParts","updateItemResource","updatedItem","updatedData","hasInvalidDesignations","operationalLayers"],"mappings":"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"}
|