@esri/solution-common 4.1.2 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (261) hide show
  1. package/dist/cjs/completeItem.d.ts +29 -29
  2. package/dist/cjs/completeItem.js +81 -81
  3. package/dist/cjs/create-hub-request-options.d.ts +29 -29
  4. package/dist/cjs/create-hub-request-options.js +63 -63
  5. package/dist/cjs/deleteHelpers/deleteEmptyGroups.d.ts +24 -24
  6. package/dist/cjs/deleteHelpers/deleteEmptyGroups.js +41 -41
  7. package/dist/cjs/deleteHelpers/deleteGroupIfEmpty.d.ts +27 -27
  8. package/dist/cjs/deleteHelpers/deleteGroupIfEmpty.js +96 -96
  9. package/dist/cjs/deleteHelpers/deleteSolutionContents.d.ts +38 -38
  10. package/dist/cjs/deleteHelpers/deleteSolutionContents.js +129 -129
  11. package/dist/cjs/deleteHelpers/deleteSolutionFolder.d.ts +29 -29
  12. package/dist/cjs/deleteHelpers/deleteSolutionFolder.js +78 -78
  13. package/dist/cjs/deleteHelpers/deleteSolutionItem.d.ts +30 -30
  14. package/dist/cjs/deleteHelpers/deleteSolutionItem.js +53 -53
  15. package/dist/cjs/deleteHelpers/index.d.ts +22 -22
  16. package/dist/cjs/deleteHelpers/index.js +25 -25
  17. package/dist/cjs/deleteHelpers/reconstructBuildOrderIds.d.ts +27 -27
  18. package/dist/cjs/deleteHelpers/reconstructBuildOrderIds.js +33 -33
  19. package/dist/cjs/deleteHelpers/removeItems.d.ts +34 -34
  20. package/dist/cjs/deleteHelpers/removeItems.js +111 -111
  21. package/dist/cjs/deleteHelpers/reportProgress.d.ts +27 -27
  22. package/dist/cjs/deleteHelpers/reportProgress.js +45 -45
  23. package/dist/cjs/deleteSolution.d.ts +55 -55
  24. package/dist/cjs/deleteSolution.js +106 -106
  25. package/dist/cjs/dependencies.d.ts +26 -26
  26. package/dist/cjs/dependencies.js +170 -170
  27. package/dist/cjs/featureServiceHelpers.d.ts +791 -791
  28. package/dist/cjs/featureServiceHelpers.js +2420 -2420
  29. package/dist/cjs/generalHelpers.d.ts +392 -385
  30. package/dist/cjs/generalHelpers.js +857 -854
  31. package/dist/cjs/generalHelpers.js.map +1 -1
  32. package/dist/cjs/get-subscription-info.d.ts +27 -27
  33. package/dist/cjs/get-subscription-info.js +38 -38
  34. package/dist/cjs/getDeletableSolutionInfo.d.ts +29 -29
  35. package/dist/cjs/getDeletableSolutionInfo.js +52 -52
  36. package/dist/cjs/getItemTypeAbbrev.d.ts +19 -19
  37. package/dist/cjs/getItemTypeAbbrev.js +184 -184
  38. package/dist/cjs/getSolutionSummary.d.ts +27 -27
  39. package/dist/cjs/getSolutionSummary.js +100 -100
  40. package/dist/cjs/index.d.ts +43 -44
  41. package/dist/cjs/index.js +46 -47
  42. package/dist/cjs/index.js.map +1 -1
  43. package/dist/cjs/interfaces.d.ts +1334 -1334
  44. package/dist/cjs/interfaces.js +74 -74
  45. package/dist/cjs/interfaces.js.map +1 -1
  46. package/dist/cjs/libConnectors.d.ts +73 -73
  47. package/dist/cjs/libConnectors.js +114 -114
  48. package/dist/cjs/migrations/apply-schema.d.ts +24 -24
  49. package/dist/cjs/migrations/apply-schema.js +35 -35
  50. package/dist/cjs/migrations/is-legacy-solution.d.ts +24 -24
  51. package/dist/cjs/migrations/is-legacy-solution.js +39 -39
  52. package/dist/cjs/migrations/upgrade-three-dot-one.d.ts +27 -27
  53. package/dist/cjs/migrations/upgrade-three-dot-one.js +48 -48
  54. package/dist/cjs/migrations/upgrade-three-dot-zero.d.ts +27 -27
  55. package/dist/cjs/migrations/upgrade-three-dot-zero.js +42 -42
  56. package/dist/cjs/migrations/upgrade-two-dot-five.d.ts +24 -24
  57. package/dist/cjs/migrations/upgrade-two-dot-five.js +72 -72
  58. package/dist/cjs/migrations/upgrade-two-dot-four.d.ts +24 -24
  59. package/dist/cjs/migrations/upgrade-two-dot-four.js +71 -71
  60. package/dist/cjs/migrations/upgrade-two-dot-one.d.ts +7 -7
  61. package/dist/cjs/migrations/upgrade-two-dot-one.js +38 -38
  62. package/dist/cjs/migrations/upgrade-two-dot-seven.d.ts +23 -23
  63. package/dist/cjs/migrations/upgrade-two-dot-seven.js +57 -57
  64. package/dist/cjs/migrations/upgrade-two-dot-six.d.ts +27 -27
  65. package/dist/cjs/migrations/upgrade-two-dot-six.js +60 -60
  66. package/dist/cjs/migrations/upgrade-two-dot-three.d.ts +23 -23
  67. package/dist/cjs/migrations/upgrade-two-dot-three.js +54 -54
  68. package/dist/cjs/migrations/upgrade-two-dot-two.d.ts +23 -23
  69. package/dist/cjs/migrations/upgrade-two-dot-two.js +57 -57
  70. package/dist/cjs/migrations/upgrade-two-dot-zero.d.ts +44 -44
  71. package/dist/cjs/migrations/upgrade-two-dot-zero.js +94 -94
  72. package/dist/cjs/migrator.d.ts +25 -25
  73. package/dist/cjs/migrator.js +76 -76
  74. package/dist/cjs/resourceHelpers.d.ts +191 -191
  75. package/dist/cjs/resourceHelpers.js +383 -390
  76. package/dist/cjs/resourceHelpers.js.map +1 -1
  77. package/dist/cjs/resources/add-resource-from-blob.d.ts +26 -26
  78. package/dist/cjs/resources/add-resource-from-blob.js +51 -51
  79. package/dist/cjs/resources/addMetadataFromBlob.d.ts +25 -25
  80. package/dist/cjs/resources/addMetadataFromBlob.js +42 -42
  81. package/dist/cjs/resources/convert-item-resource-to-storage-resource.d.ts +32 -32
  82. package/dist/cjs/resources/convert-item-resource-to-storage-resource.js +69 -69
  83. package/dist/cjs/resources/convert-storage-resource-to-item-resource.d.ts +29 -29
  84. package/dist/cjs/resources/convert-storage-resource-to-item-resource.js +69 -69
  85. package/dist/cjs/resources/copyAssociatedFiles.d.ts +67 -67
  86. package/dist/cjs/resources/copyAssociatedFiles.js +301 -301
  87. package/dist/cjs/resources/copyDataIntoItem.d.ts +33 -33
  88. package/dist/cjs/resources/copyDataIntoItem.js +61 -62
  89. package/dist/cjs/resources/copyDataIntoItem.js.map +1 -1
  90. package/dist/cjs/resources/copyMetadataIntoItem.d.ts +26 -26
  91. package/dist/cjs/resources/copyMetadataIntoItem.js +45 -45
  92. package/dist/cjs/resources/copyResourceIntoZip.d.ts +33 -33
  93. package/dist/cjs/resources/copyResourceIntoZip.js +77 -77
  94. package/dist/cjs/resources/copyZipIntoItem.d.ts +25 -25
  95. package/dist/cjs/resources/copyZipIntoItem.js +53 -53
  96. package/dist/cjs/resources/createCopyResults.d.ts +25 -25
  97. package/dist/cjs/resources/createCopyResults.js +35 -35
  98. package/dist/cjs/resources/get-blob.d.ts +26 -26
  99. package/dist/cjs/resources/get-blob.js +26 -26
  100. package/dist/cjs/resources/getItemResourcesFilesFromPaths.d.ts +24 -24
  101. package/dist/cjs/resources/getItemResourcesFilesFromPaths.js +48 -48
  102. package/dist/cjs/resources/getItemResourcesPaths.d.ts +26 -26
  103. package/dist/cjs/resources/getItemResourcesPaths.js +72 -72
  104. package/dist/cjs/resources/index.d.ts +29 -29
  105. package/dist/cjs/resources/index.js +32 -32
  106. package/dist/cjs/resources/solution-resource.d.ts +35 -35
  107. package/dist/cjs/resources/solution-resource.js +30 -30
  108. package/dist/cjs/resources/solution-resource.js.map +1 -1
  109. package/dist/cjs/resources/transform-resource-paths-to-solution-resources.d.ts +56 -56
  110. package/dist/cjs/resources/transform-resource-paths-to-solution-resources.js +145 -145
  111. package/dist/cjs/restHelpers.d.ts +586 -585
  112. package/dist/cjs/restHelpers.js +1888 -1883
  113. package/dist/cjs/restHelpers.js.map +1 -1
  114. package/dist/cjs/restHelpersGet.d.ts +288 -288
  115. package/dist/cjs/restHelpersGet.js +803 -803
  116. package/dist/cjs/sharing/index.d.ts +16 -16
  117. package/dist/cjs/sharing/index.js +19 -19
  118. package/dist/cjs/sharing/share-item-to-groups.d.ts +26 -26
  119. package/dist/cjs/sharing/share-item-to-groups.js +43 -43
  120. package/dist/cjs/templatization.d.ts +139 -139
  121. package/dist/cjs/templatization.js +313 -313
  122. package/dist/cjs/trackingHelpers.d.ts +116 -116
  123. package/dist/cjs/trackingHelpers.js +216 -216
  124. package/dist/cjs/velocityHelpers.d.ts +57 -57
  125. package/dist/cjs/velocityHelpers.js +134 -134
  126. package/dist/cjs/workforceHelpers.d.ts +115 -115
  127. package/dist/cjs/workforceHelpers.js +746 -746
  128. package/dist/cjs/workforceHelpers.js.map +1 -1
  129. package/dist/esm/completeItem.d.ts +29 -29
  130. package/dist/esm/completeItem.js +76 -76
  131. package/dist/esm/create-hub-request-options.d.ts +29 -29
  132. package/dist/esm/create-hub-request-options.js +59 -59
  133. package/dist/esm/deleteHelpers/deleteEmptyGroups.d.ts +24 -24
  134. package/dist/esm/deleteHelpers/deleteEmptyGroups.js +37 -37
  135. package/dist/esm/deleteHelpers/deleteGroupIfEmpty.d.ts +27 -27
  136. package/dist/esm/deleteHelpers/deleteGroupIfEmpty.js +91 -91
  137. package/dist/esm/deleteHelpers/deleteSolutionContents.d.ts +38 -38
  138. package/dist/esm/deleteHelpers/deleteSolutionContents.js +124 -124
  139. package/dist/esm/deleteHelpers/deleteSolutionFolder.d.ts +29 -29
  140. package/dist/esm/deleteHelpers/deleteSolutionFolder.js +73 -73
  141. package/dist/esm/deleteHelpers/deleteSolutionItem.d.ts +30 -30
  142. package/dist/esm/deleteHelpers/deleteSolutionItem.js +48 -48
  143. package/dist/esm/deleteHelpers/index.d.ts +22 -22
  144. package/dist/esm/deleteHelpers/index.js +22 -22
  145. package/dist/esm/deleteHelpers/reconstructBuildOrderIds.d.ts +27 -27
  146. package/dist/esm/deleteHelpers/reconstructBuildOrderIds.js +28 -28
  147. package/dist/esm/deleteHelpers/removeItems.d.ts +34 -34
  148. package/dist/esm/deleteHelpers/removeItems.js +106 -106
  149. package/dist/esm/deleteHelpers/reportProgress.d.ts +27 -27
  150. package/dist/esm/deleteHelpers/reportProgress.js +41 -41
  151. package/dist/esm/deleteSolution.d.ts +55 -55
  152. package/dist/esm/deleteSolution.js +100 -100
  153. package/dist/esm/dependencies.d.ts +26 -26
  154. package/dist/esm/dependencies.js +166 -166
  155. package/dist/esm/featureServiceHelpers.d.ts +791 -791
  156. package/dist/esm/featureServiceHelpers.js +2336 -2336
  157. package/dist/esm/generalHelpers.d.ts +392 -385
  158. package/dist/esm/generalHelpers.js +810 -808
  159. package/dist/esm/generalHelpers.js.map +1 -1
  160. package/dist/esm/get-subscription-info.d.ts +27 -27
  161. package/dist/esm/get-subscription-info.js +34 -34
  162. package/dist/esm/getDeletableSolutionInfo.d.ts +29 -29
  163. package/dist/esm/getDeletableSolutionInfo.js +47 -47
  164. package/dist/esm/getItemTypeAbbrev.d.ts +19 -19
  165. package/dist/esm/getItemTypeAbbrev.js +180 -180
  166. package/dist/esm/getSolutionSummary.d.ts +27 -27
  167. package/dist/esm/getSolutionSummary.js +95 -95
  168. package/dist/esm/index.d.ts +43 -44
  169. package/dist/esm/index.js +43 -44
  170. package/dist/esm/index.js.map +1 -1
  171. package/dist/esm/interfaces.d.ts +1334 -1334
  172. package/dist/esm/interfaces.js +70 -70
  173. package/dist/esm/libConnectors.d.ts +73 -73
  174. package/dist/esm/libConnectors.js +104 -104
  175. package/dist/esm/migrations/apply-schema.d.ts +24 -24
  176. package/dist/esm/migrations/apply-schema.js +31 -31
  177. package/dist/esm/migrations/is-legacy-solution.d.ts +24 -24
  178. package/dist/esm/migrations/is-legacy-solution.js +35 -35
  179. package/dist/esm/migrations/upgrade-three-dot-one.d.ts +27 -27
  180. package/dist/esm/migrations/upgrade-three-dot-one.js +44 -44
  181. package/dist/esm/migrations/upgrade-three-dot-zero.d.ts +27 -27
  182. package/dist/esm/migrations/upgrade-three-dot-zero.js +38 -38
  183. package/dist/esm/migrations/upgrade-two-dot-five.d.ts +24 -24
  184. package/dist/esm/migrations/upgrade-two-dot-five.js +68 -68
  185. package/dist/esm/migrations/upgrade-two-dot-four.d.ts +24 -24
  186. package/dist/esm/migrations/upgrade-two-dot-four.js +67 -67
  187. package/dist/esm/migrations/upgrade-two-dot-one.d.ts +7 -7
  188. package/dist/esm/migrations/upgrade-two-dot-one.js +34 -34
  189. package/dist/esm/migrations/upgrade-two-dot-seven.d.ts +23 -23
  190. package/dist/esm/migrations/upgrade-two-dot-seven.js +53 -53
  191. package/dist/esm/migrations/upgrade-two-dot-six.d.ts +27 -27
  192. package/dist/esm/migrations/upgrade-two-dot-six.js +56 -56
  193. package/dist/esm/migrations/upgrade-two-dot-three.d.ts +23 -23
  194. package/dist/esm/migrations/upgrade-two-dot-three.js +50 -50
  195. package/dist/esm/migrations/upgrade-two-dot-two.d.ts +23 -23
  196. package/dist/esm/migrations/upgrade-two-dot-two.js +53 -53
  197. package/dist/esm/migrations/upgrade-two-dot-zero.d.ts +44 -44
  198. package/dist/esm/migrations/upgrade-two-dot-zero.js +87 -87
  199. package/dist/esm/migrator.d.ts +25 -25
  200. package/dist/esm/migrator.js +72 -72
  201. package/dist/esm/resourceHelpers.d.ts +191 -191
  202. package/dist/esm/resourceHelpers.js +364 -371
  203. package/dist/esm/resourceHelpers.js.map +1 -1
  204. package/dist/esm/resources/add-resource-from-blob.d.ts +26 -26
  205. package/dist/esm/resources/add-resource-from-blob.js +47 -47
  206. package/dist/esm/resources/addMetadataFromBlob.d.ts +25 -25
  207. package/dist/esm/resources/addMetadataFromBlob.js +38 -38
  208. package/dist/esm/resources/convert-item-resource-to-storage-resource.d.ts +32 -32
  209. package/dist/esm/resources/convert-item-resource-to-storage-resource.js +65 -65
  210. package/dist/esm/resources/convert-storage-resource-to-item-resource.d.ts +29 -29
  211. package/dist/esm/resources/convert-storage-resource-to-item-resource.js +65 -65
  212. package/dist/esm/resources/copyAssociatedFiles.d.ts +67 -67
  213. package/dist/esm/resources/copyAssociatedFiles.js +293 -293
  214. package/dist/esm/resources/copyDataIntoItem.d.ts +33 -33
  215. package/dist/esm/resources/copyDataIntoItem.js +56 -57
  216. package/dist/esm/resources/copyDataIntoItem.js.map +1 -1
  217. package/dist/esm/resources/copyMetadataIntoItem.d.ts +26 -26
  218. package/dist/esm/resources/copyMetadataIntoItem.js +41 -41
  219. package/dist/esm/resources/copyResourceIntoZip.d.ts +33 -33
  220. package/dist/esm/resources/copyResourceIntoZip.js +72 -72
  221. package/dist/esm/resources/copyZipIntoItem.d.ts +25 -25
  222. package/dist/esm/resources/copyZipIntoItem.js +49 -49
  223. package/dist/esm/resources/createCopyResults.d.ts +25 -25
  224. package/dist/esm/resources/createCopyResults.js +31 -31
  225. package/dist/esm/resources/get-blob.d.ts +26 -26
  226. package/dist/esm/resources/get-blob.js +22 -22
  227. package/dist/esm/resources/getItemResourcesFilesFromPaths.d.ts +24 -24
  228. package/dist/esm/resources/getItemResourcesFilesFromPaths.js +44 -44
  229. package/dist/esm/resources/getItemResourcesPaths.d.ts +26 -26
  230. package/dist/esm/resources/getItemResourcesPaths.js +68 -68
  231. package/dist/esm/resources/index.d.ts +29 -29
  232. package/dist/esm/resources/index.js +29 -29
  233. package/dist/esm/resources/solution-resource.d.ts +35 -35
  234. package/dist/esm/resources/solution-resource.js +27 -27
  235. package/dist/esm/resources/transform-resource-paths-to-solution-resources.d.ts +56 -56
  236. package/dist/esm/resources/transform-resource-paths-to-solution-resources.js +137 -137
  237. package/dist/esm/restHelpers.d.ts +586 -585
  238. package/dist/esm/restHelpers.js +1827 -1823
  239. package/dist/esm/restHelpers.js.map +1 -1
  240. package/dist/esm/restHelpersGet.d.ts +288 -288
  241. package/dist/esm/restHelpersGet.js +763 -763
  242. package/dist/esm/sharing/index.d.ts +16 -16
  243. package/dist/esm/sharing/index.js +16 -16
  244. package/dist/esm/sharing/share-item-to-groups.d.ts +26 -26
  245. package/dist/esm/sharing/share-item-to-groups.js +39 -39
  246. package/dist/esm/templatization.d.ts +139 -139
  247. package/dist/esm/templatization.js +293 -293
  248. package/dist/esm/trackingHelpers.d.ts +116 -116
  249. package/dist/esm/trackingHelpers.js +204 -204
  250. package/dist/esm/velocityHelpers.d.ts +57 -57
  251. package/dist/esm/velocityHelpers.js +128 -128
  252. package/dist/esm/workforceHelpers.d.ts +115 -115
  253. package/dist/esm/workforceHelpers.js +717 -717
  254. package/dist/esm/workforceHelpers.js.map +1 -1
  255. package/package.json +2 -2
  256. package/dist/cjs/polyfills.d.ts +0 -40
  257. package/dist/cjs/polyfills.js +0 -98
  258. package/dist/cjs/polyfills.js.map +0 -1
  259. package/dist/esm/polyfills.d.ts +0 -40
  260. package/dist/esm/polyfills.js +0 -93
  261. package/dist/esm/polyfills.js.map +0 -1
@@ -1,391 +1,384 @@
1
- "use strict";
2
- /** @license
3
- * Copyright 2018 Esri
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- */
17
- Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.updateItemResourceText = exports.updateItemResourceFile = exports.removeItemResourceFile = exports.getThumbnailFromStorageItem = exports.isSupportedFileType = exports.generateThumbnailStorageFilename = exports.generateStorageFilePaths = exports.generateSourceThumbnailUrl = exports.generateSourceResourceUrl = exports.generateSourceMetadataUrl = exports.generateSourceFilePaths = exports.generateMetadataStorageFilename = exports.copyFilesToStorageItem = exports.copyFilesFromStorageItem = exports.convertBlobToSupportableResource = exports.addThumbnailFromBlob = void 0;
19
- /**
20
- * Provides common functions involving the management of item and group resources.
21
- *
22
- * @module resourceHelpers
23
- *
24
- * How it works
25
- *
26
- * An item may have resources that are listed as a set of filenames and/or folder/filename combinations. It may have
27
- * a thumbnail, listed in its item info as a filename or folder/filename combination. It may have metadata, which is
28
- * not listed, but has a distinct URL. A group may have a thumbnail, but not the others.
29
- *
30
- * For storing these files in a common storage item, a new folder and filename combination is created for each. The
31
- * filename is kept as-is. The folder consists of the source item's id and an optional suffix. For thumbnails, the
32
- * suffix is "_info_thumbnail"; for metadata, the suffix is "_info_metadata"; for resources, the suffix is "_" plus
33
- * the resource's folder's name; if the resource doesn't have a folder, there is no suffix.
34
- *
35
- * Note that "thumbnail" is included in an item's thumbnail property like a folder (e.g., "thumbnail/thumbnail.png"),
36
- * and the item's thumbnail is accessed using a path such as "%lt;itemId>/info/thumbnail/thumbnail.png". Groups,
37
- * on the other hand, have a property with a simple name (e.g., "thumbnail.png") and it is accessed using a path
38
- * such as "%lt;groupId>/info/thumbnail.png".
39
- *
40
- * For copying these files from the common storage item to another item, one converts the unique names back into the
41
- * original names (or the special cases for thumbnails and metadata).
42
- *
43
- * Routines are provided to
44
- * 1. create full URLs to resources, thumbnails, and metadata.
45
- * 2. create a folder and filename combination that uniquely identifies these files for
46
- * storing them in a single, shared storage item
47
- * 3. copy a set of resources, thumbnails, and metadata for an item to a storage item
48
- * 4. copy a file by URL to an item using specified folder and filename
49
- * 5. undo the unique folder and filename into the original folder and filename
50
- */
51
- const interfaces_1 = require("./interfaces");
52
- const polyfills_1 = require("./polyfills");
53
- const arcgis_rest_portal_1 = require("@esri/arcgis-rest-portal");
54
- const generalHelpers_1 = require("./generalHelpers");
55
- const convert_item_resource_to_storage_resource_1 = require("./resources/convert-item-resource-to-storage-resource");
56
- const convert_storage_resource_to_item_resource_1 = require("./resources/convert-storage-resource-to-item-resource");
57
- const restHelpersGet_1 = require("./restHelpersGet");
58
- const copyAssociatedFiles_1 = require("./resources/copyAssociatedFiles");
59
- // ------------------------------------------------------------------------------------------------------------------ //
60
- function addThumbnailFromBlob(blob, itemId, authentication, isGroup = false) {
61
- const updateOptions = {
62
- params: {
63
- // Pass image in directly because item object is serialized, which discards a blob
64
- thumbnail: blob
65
- },
66
- authentication: authentication
67
- };
68
- updateOptions[isGroup ? "group" : "item"] = {
69
- id: itemId
70
- };
71
- return isGroup ? (0, arcgis_rest_portal_1.updateGroup)(updateOptions) : (0, arcgis_rest_portal_1.updateItem)(updateOptions);
72
- }
73
- exports.addThumbnailFromBlob = addThumbnailFromBlob;
74
- function convertBlobToSupportableResource(blob, filename = "") {
75
- const originalFilename = blob.name || filename;
76
- let filenameToUse = originalFilename;
77
- if (filenameToUse && !isSupportedFileType(filenameToUse)) {
78
- filenameToUse = filenameToUse + ".zip";
79
- }
80
- return {
81
- blob: (0, polyfills_1.new_File)([blob], filenameToUse, { type: blob.type }),
82
- filename: originalFilename,
83
- mimeType: blob.type
84
- };
85
- }
86
- exports.convertBlobToSupportableResource = convertBlobToSupportableResource;
87
- /**
88
- * Copies the files described by a list of full URLs and folder/filename combinations for
89
- * the resources and metadata of an item or group to an item.
90
- *
91
- * @param storageAuthentication Credentials for the request to the storage
92
- * @param filePaths List of item files' URLs and folder/filenames for storing the files
93
- * @param sourceItemId Id of item supplying resource/metadata
94
- * @param destinationFolderId Id of folder
95
- * @param destinationItemId Id of item to receive copy of resource/metadata
96
- * @param destinationAuthentication Credentials for the request to the destination
97
- * @param template Description of item that will receive files
98
- * @returns A promise which resolves to a boolean indicating if the copies were successful
99
- */
100
- function copyFilesFromStorageItem(storageAuthentication, filePaths, sourceItemId, destinationFolderId, destinationItemId, destinationAuthentication, template = {}) {
101
- // TODO: This is only used in deployer, so move there
102
- // changed to allow the template to be passed in
103
- // because Hub templates need to swap out the templateId
104
- // in the resource filename
105
- const mimeTypes = template.properties || null;
106
- // remove the template.itemId from the fileName in the filePaths
107
- /* istanbul ignore else */
108
- if (template.itemId) {
109
- filePaths = filePaths.map(fp => {
110
- /* istanbul ignore else */
111
- if (fp.filename.indexOf(template.itemId) === 0 && fp.folder === "") {
112
- fp.filename = fp.filename.replace(`${template.itemId}-`, "");
113
- }
114
- return fp;
115
- });
116
- }
117
- return new Promise((resolve, reject) => {
118
- const fileInfos = filePaths.map(path => {
119
- return {
120
- folder: path.type === interfaces_1.EFileType.Data ? destinationFolderId : path.folder,
121
- filename: path.filename,
122
- type: path.type,
123
- mimeType: mimeTypes ? mimeTypes[path.filename] : "",
124
- url: path.url
125
- };
126
- });
127
- void (0, copyAssociatedFiles_1.copyAssociatedFilesByType)(fileInfos, storageAuthentication, sourceItemId, destinationItemId, destinationAuthentication, template).then((results) => {
128
- const allOK = results
129
- // Filter out metadata
130
- .filter((result) => result.filename !== "metadata.xml")
131
- // Extract success
132
- .map((result) => result.fetchedFromSource && result.copiedToDestination)
133
- // Boil it down to a single result
134
- .reduce((success, currentValue) => success && currentValue, true);
135
- if (allOK) {
136
- resolve(true);
137
- }
138
- else {
139
- reject();
140
- }
141
- });
142
- });
143
- }
144
- exports.copyFilesFromStorageItem = copyFilesFromStorageItem;
145
- /**
146
- * Copies the files for storing the resources, metadata, and thumbnail of an item or group to a storage item
147
- * with a specified path.
148
- *
149
- * @param files List of item files and paths for storing the files
150
- * @param storageItemId Id of item to receive copy of resource/metadata
151
- * @param storageAuthentication Credentials for the request to the storage
152
- * @returns A promise which resolves to a list of the filenames under which the resource/metadata are stored
153
- */
154
- function copyFilesToStorageItem(files, storageItemId, storageAuthentication) {
155
- return new Promise(resolve => {
156
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
157
- void (0, copyAssociatedFiles_1.copyFilesAsResources)(files, storageItemId, storageAuthentication).then((results) => {
158
- resolve(results
159
- // Filter out failures
160
- .filter((result) => result.fetchedFromSource && result.copiedToDestination)
161
- // Return folder and filename in storage item's resources
162
- .map((result) => result.folder + "/" + result.filename));
163
- });
164
- });
165
- }
166
- exports.copyFilesToStorageItem = copyFilesToStorageItem;
167
- /**
168
- * Generates a folder and filename for storing a copy of an item's metadata in a storage item.
169
- *
170
- * @param itemId Id of item
171
- * @returns Folder and filename for storage; folder is the itemID suffixed with "_info_metadata"
172
- * @see convertStorageResourceToItemResource
173
- */
174
- function generateMetadataStorageFilename(itemId) {
175
- return {
176
- folder: itemId + "_info_metadata",
177
- filename: "metadata.xml"
178
- };
179
- }
180
- exports.generateMetadataStorageFilename = generateMetadataStorageFilename;
181
- /**
182
- * Generates a list of full URLs and storage folder/filename combinations for storing the resources, metadata,
183
- * and thumbnail of an item.
184
- *
185
- * @param portalSharingUrl Server/sharing
186
- * @param itemId Id of item
187
- * @param thumbnailUrlPart Partial path to the thumbnail held in an item's JSON
188
- * @param resourceFilenames List of resource filenames for an item, e.g., ["file1", "myFolder/file2"]
189
- * @param isGroup Boolean to indicate if the files are associated with a group or item
190
- * @param storageVersion Version of the Solution template
191
- * @returns List of item files' URLs and folder/filenames for storing the files
192
- */
193
- function generateSourceFilePaths(portalSharingUrl, itemId, thumbnailUrlPart, resourceFilenames, isGroup = false, storageVersion = 0) {
194
- const filePaths = resourceFilenames.map(resourceFilename => {
195
- return {
196
- itemId,
197
- url: generateSourceResourceUrl(portalSharingUrl, itemId, resourceFilename),
198
- ...(0, convert_item_resource_to_storage_resource_1.convertItemResourceToStorageResource)(itemId, resourceFilename, storageVersion)
199
- };
200
- });
201
- filePaths.push({
202
- itemId,
203
- url: generateSourceMetadataUrl(portalSharingUrl, itemId, isGroup),
204
- ...generateMetadataStorageFilename(itemId)
205
- });
206
- /* istanbul ignore else */
207
- if (thumbnailUrlPart) {
208
- const path = {
209
- itemId,
210
- url: (0, generalHelpers_1.appendQueryParam)(generateSourceThumbnailUrl(portalSharingUrl, itemId, thumbnailUrlPart, isGroup), "w=400"),
211
- ...generateThumbnailStorageFilename(itemId, thumbnailUrlPart)
212
- };
213
- filePaths.push(path);
214
- }
215
- return filePaths;
216
- }
217
- exports.generateSourceFilePaths = generateSourceFilePaths;
218
- /**
219
- * Generates the URL for reading an item's metadata.
220
- *
221
- * @param sourcePortalSharingUrl Server/sharing
222
- * @param itemId Id of item
223
- * @param isGroup Boolean to indicate if the files are associated with a group or item
224
- * @returns URL string
225
- */
226
- function generateSourceMetadataUrl(sourcePortalSharingUrl, itemId, isGroup = false) {
227
- return ((0, generalHelpers_1.checkUrlPathTermination)(sourcePortalSharingUrl) +
228
- (isGroup ? "community/groups/" : "content/items/") +
229
- itemId +
230
- "/info/metadata/metadata.xml");
231
- }
232
- exports.generateSourceMetadataUrl = generateSourceMetadataUrl;
233
- /**
234
- * Generates the URL for reading an item's resource given the filename of the resource.
235
- *
236
- * @param sourcePortalSharingUrl Server/sharing
237
- * @param itemId Id of item
238
- * @param sourceResourceFilename Either filename or folder/filename to resource
239
- * @returns URL string
240
- */
241
- function generateSourceResourceUrl(sourcePortalSharingUrl, itemId, sourceResourceFilename) {
242
- return ((0, generalHelpers_1.checkUrlPathTermination)(sourcePortalSharingUrl) +
243
- "content/items/" +
244
- itemId +
245
- "/resources/" +
246
- sourceResourceFilename);
247
- }
248
- exports.generateSourceResourceUrl = generateSourceResourceUrl;
249
- /**
250
- * Generates the URL for reading an item's thumbnail.
251
- *
252
- * @param sourcePortalSharingUrl Server/sharing
253
- * @param itemId Id of item
254
- * @param thumbnailUrlPart Partial path to the thumbnail held in an item's JSON
255
- * @param isGroup Boolean to indicate if the files are associated with a group or item
256
- * @returns URL string
257
- */
258
- function generateSourceThumbnailUrl(sourcePortalSharingUrl, itemId, thumbnailUrlPart, isGroup = false) {
259
- return ((0, generalHelpers_1.checkUrlPathTermination)(sourcePortalSharingUrl) +
260
- (isGroup ? "community/groups/" : "content/items/") +
261
- itemId +
262
- "/info/" +
263
- thumbnailUrlPart);
264
- }
265
- exports.generateSourceThumbnailUrl = generateSourceThumbnailUrl;
266
- /**
267
- * Generates a list of full URLs and folder/filename combinations used to store the resources, metadata,
268
- * and thumbnail of an item.
269
- *
270
- * @param portalSharingUrl Server/sharing
271
- * @param storageItemId Id of storage item
272
- * @param resourceFilenames List of resource filenames for an item, e.g., ["file1", "myFolder/file2"]
273
- * @param storageVersion Version of the Solution template
274
- * @returns List of item files' URLs and folder/filenames for storing the files
275
- */
276
- function generateStorageFilePaths(portalSharingUrl, storageItemId, resourceFilenames = [], storageVersion = 0) {
277
- return resourceFilenames.map(resourceFilename => {
278
- return {
279
- url: generateSourceResourceUrl(portalSharingUrl, storageItemId, resourceFilename),
280
- ...(0, convert_storage_resource_to_item_resource_1.convertStorageResourceToItemResource)(resourceFilename, storageVersion)
281
- };
282
- });
283
- }
284
- exports.generateStorageFilePaths = generateStorageFilePaths;
285
- /**
286
- * Generates a folder and filename for storing a copy of an item's thumbnail in a storage item.
287
- *
288
- * @param itemId Id of item
289
- * @param thumbnailUrlPart Partial path to the thumbnail held in an item's JSON; can also be a filename
290
- * @returns Folder and filename for storage; folder is the itemID suffixed with "_info_thumbnail";
291
- * file is URI-encoded thumbnailUrlPart
292
- * @see convertStorageResourceToItemResource
293
- */
294
- function generateThumbnailStorageFilename(itemId, thumbnailurl) {
295
- const folder = itemId + "_info_thumbnail";
296
- const thumbnailUrlParts = thumbnailurl.split("/");
297
- const filename = thumbnailUrlParts.length === 1
298
- ? thumbnailUrlParts[0]
299
- : thumbnailUrlParts[1];
300
- return { folder, filename };
301
- }
302
- exports.generateThumbnailStorageFilename = generateThumbnailStorageFilename;
303
- function isSupportedFileType(filename) {
304
- // Supported file formats are: .json, .xml, .txt, .png, .pbf, .zip, .jpeg, .jpg, .gif, .bmp, .gz, .svg,
305
- // .svgz, .geodatabase (https://developers.arcgis.com/rest/users-groups-and-items/add-resources.htm)
306
- const filenameExtension = filename.match(/\.([a-z]+)$/i);
307
- const supportedExtensions = "|.json|.xml|.txt|.png|.pbf|.zip|.jpeg|.jpg|.gif|.bmp|.gz|.svg|.svgz|.geodatabase|";
308
- return (!!filenameExtension &&
309
- supportedExtensions.indexOf("|" + filenameExtension[0] + "|") >= 0);
310
- }
311
- exports.isSupportedFileType = isSupportedFileType;
312
- /**
313
- * Gets the thumbnail of an item or group.
314
- *
315
- * @param authentication Credentials for the request to the storage
316
- * @param filePaths List of item files' URLs and folder/filenames for storing the files
317
- * @returns A promise which resolves to a boolean indicating if the copies were successful
318
- */
319
- function getThumbnailFromStorageItem(authentication, filePaths) {
320
- let thumbnailUrl;
321
- let thumbnailFilename;
322
- filePaths.forEach(path => {
323
- if (path.type === interfaces_1.EFileType.Thumbnail) {
324
- thumbnailUrl = path.url;
325
- thumbnailFilename = path.filename;
326
- }
327
- });
328
- if (!thumbnailUrl) {
329
- return Promise.resolve(null);
330
- }
331
- return (0, restHelpersGet_1.getThumbnailFile)(thumbnailUrl, thumbnailFilename, authentication);
332
- }
333
- exports.getThumbnailFromStorageItem = getThumbnailFromStorageItem;
334
- /**
335
- * Removes the item's resource that matches the filename with new content
336
- *
337
- * @param itemId Id of the item to remove
338
- * @param filename Name of the resource file to remove
339
- * @param authentication Credentials for the request to the storage
340
- * @returns A promise which resolves with a success true/false response
341
- */
342
- function removeItemResourceFile(itemId, filename, authentication) {
343
- return (0, arcgis_rest_portal_1.removeItemResource)({
344
- id: itemId,
345
- resource: filename,
346
- authentication: authentication
347
- });
348
- }
349
- exports.removeItemResourceFile = removeItemResourceFile;
350
- /**
351
- * Updates the item's resource that matches the filename with new content
352
- *
353
- * @param itemId Id of the item to update
354
- * @param filename Name of the resource file to update; prefix optional (e.g., a/b/file.txt)
355
- * @param resource The new content to update the resource with
356
- * @param authentication Credentials for the request to the storage
357
- * @returns A promise which resolves with a success true/false response
358
- */
359
- function updateItemResourceFile(itemId, filename, resource, authentication) {
360
- // Prefix has to be specified separately
361
- const prefixedFilenameParts = filename.split("/");
362
- const prefix = prefixedFilenameParts.length > 1 ? prefixedFilenameParts.slice(0, prefixedFilenameParts.length - 1).join("/") : undefined;
363
- const suffix = prefixedFilenameParts[prefixedFilenameParts.length - 1];
364
- return (0, arcgis_rest_portal_1.updateItemResource)({
365
- id: itemId,
366
- prefix: prefix,
367
- name: suffix,
368
- resource,
369
- authentication: authentication
370
- });
371
- }
372
- exports.updateItemResourceFile = updateItemResourceFile;
373
- /**
374
- * Updates the item's resource that matches the filename with new content
375
- *
376
- * @param itemId Id of the item to update
377
- * @param filename Name of the resource file to update
378
- * @param content The new content to update the resource with
379
- * @param authentication Credentials for the request to the storage
380
- * @returns A promise which resolves with a success true/false response
381
- */
382
- function updateItemResourceText(itemId, filename, content, authentication) {
383
- return (0, arcgis_rest_portal_1.updateItemResource)({
384
- id: itemId,
385
- name: filename,
386
- content: content,
387
- authentication: authentication
388
- });
389
- }
390
- exports.updateItemResourceText = updateItemResourceText;
1
+ "use strict";
2
+ /** @license
3
+ * Copyright 2018 Esri
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.updateItemResourceFile = exports.removeItemResourceFile = exports.getThumbnailFromStorageItem = exports.isSupportedFileType = exports.generateThumbnailStorageFilename = exports.generateStorageFilePaths = exports.generateSourceThumbnailUrl = exports.generateSourceResourceUrl = exports.generateSourceMetadataUrl = exports.generateSourceThumbnailPath = exports.generateSourceFilePaths = exports.generateMetadataStorageFilename = exports.copyFilesToStorageItem = exports.copyFilesFromStorageItem = exports.convertBlobToSupportableResource = exports.addThumbnailFromBlob = void 0;
19
+ /**
20
+ * Provides common functions involving the management of item and group resources.
21
+ *
22
+ * @module resourceHelpers
23
+ *
24
+ * How it works
25
+ *
26
+ * An item may have resources that are listed as a set of filenames and/or folder/filename combinations. It may have
27
+ * a thumbnail, listed in its item info as a filename or folder/filename combination. It may have metadata, which is
28
+ * not listed, but has a distinct URL. A group may have a thumbnail, but not the others.
29
+ *
30
+ * For storing these files in a common storage item, a new folder and filename combination is created for each. The
31
+ * filename is kept as-is. The folder consists of the source item's id and an optional suffix. For thumbnails, the
32
+ * suffix is "_info_thumbnail"; for metadata, the suffix is "_info_metadata"; for resources, the suffix is "_" plus
33
+ * the resource's folder's name; if the resource doesn't have a folder, there is no suffix.
34
+ *
35
+ * Note that "thumbnail" is included in an item's thumbnail property like a folder (e.g., "thumbnail/thumbnail.png"),
36
+ * and the item's thumbnail is accessed using a path such as "%lt;itemId>/info/thumbnail/thumbnail.png". Groups,
37
+ * on the other hand, have a property with a simple name (e.g., "thumbnail.png") and it is accessed using a path
38
+ * such as "%lt;groupId>/info/thumbnail.png".
39
+ *
40
+ * For copying these files from the common storage item to another item, one converts the unique names back into the
41
+ * original names (or the special cases for thumbnails and metadata).
42
+ *
43
+ * Routines are provided to
44
+ * 1. create full URLs to resources, thumbnails, and metadata.
45
+ * 2. create a folder and filename combination that uniquely identifies these files for
46
+ * storing them in a single, shared storage item
47
+ * 3. copy a set of resources, thumbnails, and metadata for an item to a storage item
48
+ * 4. copy a file by URL to an item using specified folder and filename
49
+ * 5. undo the unique folder and filename into the original folder and filename
50
+ */
51
+ const interfaces_1 = require("./interfaces");
52
+ const arcgis_rest_portal_1 = require("@esri/arcgis-rest-portal");
53
+ const generalHelpers_1 = require("./generalHelpers");
54
+ const convert_item_resource_to_storage_resource_1 = require("./resources/convert-item-resource-to-storage-resource");
55
+ const convert_storage_resource_to_item_resource_1 = require("./resources/convert-storage-resource-to-item-resource");
56
+ const restHelpersGet_1 = require("./restHelpersGet");
57
+ const copyAssociatedFiles_1 = require("./resources/copyAssociatedFiles");
58
+ // ------------------------------------------------------------------------------------------------------------------ //
59
+ function addThumbnailFromBlob(blob, itemId, authentication, isGroup = false) {
60
+ const updateOptions = {
61
+ params: {
62
+ // Pass image in directly because item object is serialized, which discards a blob
63
+ thumbnail: blob
64
+ },
65
+ authentication: authentication
66
+ };
67
+ updateOptions[isGroup ? "group" : "item"] = {
68
+ id: itemId
69
+ };
70
+ return isGroup ? (0, arcgis_rest_portal_1.updateGroup)(updateOptions) : (0, arcgis_rest_portal_1.updateItem)(updateOptions);
71
+ }
72
+ exports.addThumbnailFromBlob = addThumbnailFromBlob;
73
+ function convertBlobToSupportableResource(blob, filename = "") {
74
+ const originalFilename = blob.name || filename;
75
+ let filenameToUse = originalFilename;
76
+ if (filenameToUse && !isSupportedFileType(filenameToUse)) {
77
+ filenameToUse = filenameToUse + ".zip";
78
+ }
79
+ return {
80
+ blob: new File([blob], filenameToUse, { type: blob.type }),
81
+ filename: originalFilename,
82
+ mimeType: blob.type
83
+ };
84
+ }
85
+ exports.convertBlobToSupportableResource = convertBlobToSupportableResource;
86
+ /**
87
+ * Copies the files described by a list of full URLs and folder/filename combinations for
88
+ * the resources and metadata of an item or group to an item.
89
+ *
90
+ * @param storageAuthentication Credentials for the request to the storage
91
+ * @param filePaths List of item files' URLs and folder/filenames for storing the files
92
+ * @param sourceItemId Id of item supplying resource/metadata
93
+ * @param destinationFolderId Id of folder
94
+ * @param destinationItemId Id of item to receive copy of resource/metadata
95
+ * @param destinationAuthentication Credentials for the request to the destination
96
+ * @param template Description of item that will receive files
97
+ * @returns A promise which resolves to a boolean indicating if the copies were successful
98
+ */
99
+ function copyFilesFromStorageItem(storageAuthentication, filePaths, sourceItemId, destinationFolderId, destinationItemId, destinationAuthentication, template = {}) {
100
+ // TODO: This is only used in deployer, so move there
101
+ // changed to allow the template to be passed in
102
+ // because Hub templates need to swap out the templateId
103
+ // in the resource filename
104
+ const mimeTypes = template.properties || null;
105
+ // remove the template.itemId from the fileName in the filePaths
106
+ /* istanbul ignore else */
107
+ if (template.itemId) {
108
+ filePaths = filePaths.map(fp => {
109
+ /* istanbul ignore else */
110
+ if (fp.filename.indexOf(template.itemId) === 0 && fp.folder === "") {
111
+ fp.filename = fp.filename.replace(`${template.itemId}-`, "");
112
+ }
113
+ return fp;
114
+ });
115
+ }
116
+ return new Promise((resolve, reject) => {
117
+ const fileInfos = filePaths.map(path => {
118
+ return {
119
+ folder: path.type === interfaces_1.EFileType.Data ? destinationFolderId : path.folder,
120
+ filename: path.filename,
121
+ type: path.type,
122
+ mimeType: mimeTypes ? mimeTypes[path.filename] : "",
123
+ url: path.url
124
+ };
125
+ });
126
+ void (0, copyAssociatedFiles_1.copyAssociatedFilesByType)(fileInfos, storageAuthentication, sourceItemId, destinationItemId, destinationAuthentication, template).then((results) => {
127
+ const allOK = results
128
+ // Filter out metadata
129
+ .filter((result) => result.filename !== "metadata.xml")
130
+ // Extract success
131
+ .map((result) => result.fetchedFromSource && result.copiedToDestination)
132
+ // Boil it down to a single result
133
+ .reduce((success, currentValue) => success && currentValue, true);
134
+ if (allOK) {
135
+ resolve(true);
136
+ }
137
+ else {
138
+ reject();
139
+ }
140
+ });
141
+ });
142
+ }
143
+ exports.copyFilesFromStorageItem = copyFilesFromStorageItem;
144
+ /**
145
+ * Copies the files for storing the resources, metadata, and thumbnail of an item or group to a storage item
146
+ * with a specified path.
147
+ *
148
+ * @param files List of item files and paths for storing the files
149
+ * @param storageItemId Id of item to receive copy of resource/metadata
150
+ * @param storageAuthentication Credentials for the request to the storage
151
+ * @returns A promise which resolves to a list of the filenames under which the resource/metadata are stored
152
+ */
153
+ function copyFilesToStorageItem(files, storageItemId, storageAuthentication) {
154
+ return new Promise(resolve => {
155
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
156
+ void (0, copyAssociatedFiles_1.copyFilesAsResources)(files, storageItemId, storageAuthentication).then((results) => {
157
+ resolve(results
158
+ // Filter out failures
159
+ .filter((result) => result.fetchedFromSource && result.copiedToDestination)
160
+ // Return folder and filename in storage item's resources
161
+ .map((result) => result.folder + "/" + result.filename));
162
+ });
163
+ });
164
+ }
165
+ exports.copyFilesToStorageItem = copyFilesToStorageItem;
166
+ /**
167
+ * Generates a folder and filename for storing a copy of an item's metadata in a storage item.
168
+ *
169
+ * @param itemId Id of item
170
+ * @returns Folder and filename for storage; folder is the itemID suffixed with "_info_metadata"
171
+ * @see convertStorageResourceToItemResource
172
+ */
173
+ function generateMetadataStorageFilename(itemId) {
174
+ return {
175
+ folder: itemId + "_info_metadata",
176
+ filename: "metadata.xml"
177
+ };
178
+ }
179
+ exports.generateMetadataStorageFilename = generateMetadataStorageFilename;
180
+ /**
181
+ * Generates a list of full URLs and storage folder/filename combinations for storing the resources, metadata,
182
+ * and thumbnail of an item.
183
+ *
184
+ * @param portalSharingUrl Server/sharing
185
+ * @param itemId Id of item
186
+ * @param thumbnailUrlPart Partial path to the thumbnail held in an item's JSON
187
+ * @param resourceFilenames List of resource filenames for an item, e.g., ["file1", "myFolder/file2"]
188
+ * @param isGroup Boolean to indicate if the files are associated with a group or item
189
+ * @param storageVersion Version of the Solution template
190
+ * @returns List of item files' URLs and folder/filenames for storing the files
191
+ */
192
+ function generateSourceFilePaths(portalSharingUrl, itemId, thumbnailUrlPart, resourceFilenames, isGroup = false, storageVersion = 0) {
193
+ const filePaths = resourceFilenames.map(resourceFilename => {
194
+ return {
195
+ itemId,
196
+ url: generateSourceResourceUrl(portalSharingUrl, itemId, resourceFilename),
197
+ ...(0, convert_item_resource_to_storage_resource_1.convertItemResourceToStorageResource)(itemId, resourceFilename, storageVersion)
198
+ };
199
+ });
200
+ filePaths.push({
201
+ itemId,
202
+ url: generateSourceMetadataUrl(portalSharingUrl, itemId, isGroup),
203
+ ...generateMetadataStorageFilename(itemId)
204
+ });
205
+ /* istanbul ignore else */
206
+ if (thumbnailUrlPart) {
207
+ filePaths.push(generateSourceThumbnailPath(portalSharingUrl, itemId, thumbnailUrlPart, isGroup));
208
+ }
209
+ return filePaths;
210
+ }
211
+ exports.generateSourceFilePaths = generateSourceFilePaths;
212
+ /**
213
+ * Generates the full URL and storage folder/filename for storing an item's thumbnail.
214
+ *
215
+ * @param portalSharingUrl Server/sharing
216
+ * @param itemId Id of item
217
+ * @param thumbnailUrlPart Partial path to the thumbnail held in an item's JSON
218
+ * @param isGroup Boolean to indicate if the files are associated with a group or item
219
+ * @returns URL and folder/filename for storing the thumbnail
220
+ */
221
+ function generateSourceThumbnailPath(portalSharingUrl, itemId, thumbnailUrlPart, isGroup = false) {
222
+ return {
223
+ itemId,
224
+ url: (0, generalHelpers_1.appendQueryParam)(generateSourceThumbnailUrl(portalSharingUrl, itemId, thumbnailUrlPart, isGroup), "w=400"),
225
+ ...generateThumbnailStorageFilename(itemId, thumbnailUrlPart)
226
+ };
227
+ }
228
+ exports.generateSourceThumbnailPath = generateSourceThumbnailPath;
229
+ /**
230
+ * Generates the URL for reading an item's metadata.
231
+ *
232
+ * @param sourcePortalSharingUrl Server/sharing
233
+ * @param itemId Id of item
234
+ * @param isGroup Boolean to indicate if the files are associated with a group or item
235
+ * @returns URL string
236
+ */
237
+ function generateSourceMetadataUrl(sourcePortalSharingUrl, itemId, isGroup = false) {
238
+ return ((0, generalHelpers_1.checkUrlPathTermination)(sourcePortalSharingUrl) +
239
+ (isGroup ? "community/groups/" : "content/items/") +
240
+ itemId +
241
+ "/info/metadata/metadata.xml");
242
+ }
243
+ exports.generateSourceMetadataUrl = generateSourceMetadataUrl;
244
+ /**
245
+ * Generates the URL for reading an item's resource given the filename of the resource.
246
+ *
247
+ * @param sourcePortalSharingUrl Server/sharing
248
+ * @param itemId Id of item
249
+ * @param sourceResourceFilename Either filename or folder/filename to resource
250
+ * @returns URL string
251
+ */
252
+ function generateSourceResourceUrl(sourcePortalSharingUrl, itemId, sourceResourceFilename) {
253
+ return ((0, generalHelpers_1.checkUrlPathTermination)(sourcePortalSharingUrl) +
254
+ "content/items/" +
255
+ itemId +
256
+ "/resources/" +
257
+ sourceResourceFilename);
258
+ }
259
+ exports.generateSourceResourceUrl = generateSourceResourceUrl;
260
+ /**
261
+ * Generates the URL for reading an item's thumbnail.
262
+ *
263
+ * @param sourcePortalSharingUrl Server/sharing
264
+ * @param itemId Id of item
265
+ * @param thumbnailUrlPart Partial path to the thumbnail held in an item's JSON
266
+ * @param isGroup Boolean to indicate if the files are associated with a group or item
267
+ * @returns URL string
268
+ */
269
+ function generateSourceThumbnailUrl(sourcePortalSharingUrl, itemId, thumbnailUrlPart, isGroup = false) {
270
+ return ((0, generalHelpers_1.checkUrlPathTermination)(sourcePortalSharingUrl) +
271
+ (isGroup ? "community/groups/" : "content/items/") +
272
+ itemId +
273
+ "/info/" +
274
+ thumbnailUrlPart);
275
+ }
276
+ exports.generateSourceThumbnailUrl = generateSourceThumbnailUrl;
277
+ /**
278
+ * Generates a list of full URLs and folder/filename combinations used to store the resources, metadata,
279
+ * and thumbnail of an item.
280
+ *
281
+ * @param portalSharingUrl Server/sharing
282
+ * @param storageItemId Id of storage item
283
+ * @param resourceFilenames List of resource filenames for an item, e.g., ["file1", "myFolder/file2"]
284
+ * @param storageVersion Version of the Solution template
285
+ * @returns List of item files' URLs and folder/filenames for storing the files
286
+ */
287
+ function generateStorageFilePaths(portalSharingUrl, storageItemId, resourceFilenames = [], storageVersion = 0) {
288
+ return resourceFilenames.map(resourceFilename => {
289
+ return {
290
+ url: generateSourceResourceUrl(portalSharingUrl, storageItemId, resourceFilename),
291
+ ...(0, convert_storage_resource_to_item_resource_1.convertStorageResourceToItemResource)(resourceFilename, storageVersion)
292
+ };
293
+ });
294
+ }
295
+ exports.generateStorageFilePaths = generateStorageFilePaths;
296
+ /**
297
+ * Generates a folder and filename for storing a copy of an item's thumbnail in a storage item.
298
+ *
299
+ * @param itemId Id of item
300
+ * @param thumbnailUrlPart Partial path to the thumbnail held in an item's JSON; can also be a filename
301
+ * @returns Folder and filename for storage; folder is the itemID suffixed with "_info_thumbnail";
302
+ * file is URI-encoded thumbnailUrlPart
303
+ * @see convertStorageResourceToItemResource
304
+ */
305
+ function generateThumbnailStorageFilename(itemId, thumbnailurl) {
306
+ const folder = itemId + "_info_thumbnail";
307
+ const thumbnailUrlParts = thumbnailurl.split("/");
308
+ const filename = thumbnailUrlParts.length === 1
309
+ ? thumbnailUrlParts[0]
310
+ : thumbnailUrlParts[1];
311
+ return { folder, filename };
312
+ }
313
+ exports.generateThumbnailStorageFilename = generateThumbnailStorageFilename;
314
+ function isSupportedFileType(filename) {
315
+ // Supported file formats are: .json, .xml, .txt, .png, .pbf, .zip, .jpeg, .jpg, .gif, .bmp, .gz, .svg,
316
+ // .svgz, .geodatabase (https://developers.arcgis.com/rest/users-groups-and-items/add-resources.htm)
317
+ const filenameExtension = filename.match(/\.([a-z]+)$/i);
318
+ const supportedExtensions = "|.json|.xml|.txt|.png|.pbf|.zip|.jpeg|.jpg|.gif|.bmp|.gz|.svg|.svgz|.geodatabase|";
319
+ return (!!filenameExtension &&
320
+ supportedExtensions.indexOf("|" + filenameExtension[0] + "|") >= 0);
321
+ }
322
+ exports.isSupportedFileType = isSupportedFileType;
323
+ /**
324
+ * Gets the thumbnail of an item or group.
325
+ *
326
+ * @param authentication Credentials for the request to the storage
327
+ * @param filePaths List of item files' URLs and folder/filenames for storing the files
328
+ * @returns A promise which resolves to a boolean indicating if the copies were successful
329
+ */
330
+ function getThumbnailFromStorageItem(authentication, filePaths) {
331
+ let thumbnailUrl;
332
+ let thumbnailFilename;
333
+ filePaths.forEach(path => {
334
+ if (path.type === interfaces_1.EFileType.Thumbnail) {
335
+ thumbnailUrl = path.url;
336
+ thumbnailFilename = path.filename;
337
+ }
338
+ });
339
+ if (!thumbnailUrl) {
340
+ return Promise.resolve(null);
341
+ }
342
+ return (0, restHelpersGet_1.getThumbnailFile)(thumbnailUrl, thumbnailFilename, authentication);
343
+ }
344
+ exports.getThumbnailFromStorageItem = getThumbnailFromStorageItem;
345
+ /**
346
+ * Removes the item's resource that matches the filename with new content
347
+ *
348
+ * @param itemId Id of the item to remove
349
+ * @param filename Name of the resource file to remove
350
+ * @param authentication Credentials for the request to the storage
351
+ * @returns A promise which resolves with a success true/false response
352
+ */
353
+ function removeItemResourceFile(itemId, filename, authentication) {
354
+ return (0, arcgis_rest_portal_1.removeItemResource)({
355
+ id: itemId,
356
+ resource: filename,
357
+ authentication: authentication
358
+ });
359
+ }
360
+ exports.removeItemResourceFile = removeItemResourceFile;
361
+ /**
362
+ * Updates the item's resource that matches the filename with new content
363
+ *
364
+ * @param itemId Id of the item to update
365
+ * @param filename Name of the resource file to update; prefix optional (e.g., a/b/file.txt)
366
+ * @param resource The new content to update the resource with
367
+ * @param authentication Credentials for the request to the storage
368
+ * @returns A promise which resolves with a success true/false response
369
+ */
370
+ function updateItemResourceFile(itemId, filename, resource, authentication) {
371
+ // Prefix has to be specified separately
372
+ const prefixedFilenameParts = filename.split("/");
373
+ const prefix = prefixedFilenameParts.length > 1 ? prefixedFilenameParts.slice(0, prefixedFilenameParts.length - 1).join("/") : undefined;
374
+ const suffix = prefixedFilenameParts[prefixedFilenameParts.length - 1];
375
+ return (0, arcgis_rest_portal_1.updateItemResource)({
376
+ id: itemId,
377
+ prefix: prefix,
378
+ name: suffix,
379
+ resource,
380
+ authentication: authentication
381
+ });
382
+ }
383
+ exports.updateItemResourceFile = updateItemResourceFile;
391
384
  //# sourceMappingURL=resourceHelpers.js.map