sintfacilis 1.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 (461) hide show
  1. package/.env.example +2 -0
  2. package/.eslintrc.js +20 -0
  3. package/.github/workflows/deploy-docs.yml +27 -0
  4. package/.github/workflows/pre-release-tests.yml +45 -0
  5. package/.github/workflows/pull-request-tests.yml +45 -0
  6. package/.prettierignore +2 -0
  7. package/.prettierrc +19 -0
  8. package/.vscode/launch.json +24 -0
  9. package/.vscode/settings.json +3 -0
  10. package/codecov.yml +7 -0
  11. package/demos/.eslintrc.js +13 -0
  12. package/demos/ago-node-cli/README.md +29 -0
  13. package/demos/ago-node-cli/ago.js +33 -0
  14. package/demos/ago-node-cli/index.js +11 -0
  15. package/demos/ago-node-cli/lib/item-export-command.js +48 -0
  16. package/demos/ago-node-cli/lib/item-search-command.js +35 -0
  17. package/demos/ago-node-cli/package-lock.json +430 -0
  18. package/demos/ago-node-cli/package.json +30 -0
  19. package/demos/attachments/README.md +5 -0
  20. package/demos/attachments/index.html +165 -0
  21. package/demos/attachments/package-lock.json +543 -0
  22. package/demos/attachments/package.json +18 -0
  23. package/demos/batch-geocoder-node/NYC_Restaurant_Inspection_Results.csv +100 -0
  24. package/demos/batch-geocoder-node/README.md +15 -0
  25. package/demos/batch-geocoder-node/batch-geocode.js +115 -0
  26. package/demos/batch-geocoder-node/config-template.js +18 -0
  27. package/demos/batch-geocoder-node/package-lock.json +336 -0
  28. package/demos/batch-geocoder-node/package.json +37 -0
  29. package/demos/express/README.md +15 -0
  30. package/demos/express/config.json.template +3 -0
  31. package/demos/express/package-lock.json +1008 -0
  32. package/demos/express/package.json +18 -0
  33. package/demos/express/server.js +33 -0
  34. package/demos/feature-service-browser/README.md +6 -0
  35. package/demos/feature-service-browser/index.html +122 -0
  36. package/demos/feature-service-browser/package-lock.json +543 -0
  37. package/demos/feature-service-browser/package.json +18 -0
  38. package/demos/geocoder-browser/README.md +10 -0
  39. package/demos/geocoder-browser/config.js.template +1 -0
  40. package/demos/geocoder-browser/index.html +131 -0
  41. package/demos/geocoder-browser/package-lock.json +610 -0
  42. package/demos/geocoder-browser/package.json +19 -0
  43. package/demos/geocoder-browser/post-sign-in.html +25 -0
  44. package/demos/jsapi-integration/README.md +25 -0
  45. package/demos/jsapi-integration/config.js +6 -0
  46. package/demos/jsapi-integration/index.html +93 -0
  47. package/demos/jsapi-integration/package-lock.json +247 -0
  48. package/demos/jsapi-integration/package.json +19 -0
  49. package/demos/node-cli-item-management/README.md +10 -0
  50. package/demos/node-cli-item-management/index.js +238 -0
  51. package/demos/node-cli-item-management/package-lock.json +432 -0
  52. package/demos/node-cli-item-management/package.json +27 -0
  53. package/demos/node-cli-item-management/screenshot.png +0 -0
  54. package/demos/oauth2-browser/README.md +14 -0
  55. package/demos/oauth2-browser/authenticate.html +30 -0
  56. package/demos/oauth2-browser/config.js.template +6 -0
  57. package/demos/oauth2-browser/index.html +211 -0
  58. package/demos/oauth2-browser/logo.svg +4 -0
  59. package/demos/oauth2-browser/package-lock.json +474 -0
  60. package/demos/oauth2-browser/package.json +18 -0
  61. package/demos/oauth2-browser/style.css +36 -0
  62. package/demos/oauth2-browser-retry/README.md +25 -0
  63. package/demos/oauth2-browser-retry/authenticate.html +22 -0
  64. package/demos/oauth2-browser-retry/index.html +116 -0
  65. package/demos/oauth2-browser-retry/logo.svg +4 -0
  66. package/demos/stream-response-to-file/README.md +7 -0
  67. package/demos/stream-response-to-file/index.js +36 -0
  68. package/demos/stream-response-to-file/output/.gitkeep +0 -0
  69. package/demos/stream-response-to-file/package-lock.json +227 -0
  70. package/demos/stream-response-to-file/package.json +33 -0
  71. package/demos/tree-shaking-rollup/.babelrc +3 -0
  72. package/demos/tree-shaking-rollup/README.md +9 -0
  73. package/demos/tree-shaking-rollup/index.html +11 -0
  74. package/demos/tree-shaking-rollup/package-lock.json +5646 -0
  75. package/demos/tree-shaking-rollup/package.json +25 -0
  76. package/demos/tree-shaking-rollup/rollup.config.js +17 -0
  77. package/demos/tree-shaking-rollup/src/index.js +8 -0
  78. package/demos/tree-shaking-webpack/README.md +8 -0
  79. package/demos/tree-shaking-webpack/index.html +11 -0
  80. package/demos/tree-shaking-webpack/package-lock.json +11455 -0
  81. package/demos/tree-shaking-webpack/package.json +24 -0
  82. package/demos/tree-shaking-webpack/src/index.js +10 -0
  83. package/demos/tree-shaking-webpack/webpack.config.js +27 -0
  84. package/demos/vue/.env.example +11 -0
  85. package/demos/vue/.eslintrc.js +17 -0
  86. package/demos/vue/.postcssrc.js +5 -0
  87. package/demos/vue/README.md +17 -0
  88. package/demos/vue/babel.config.js +3 -0
  89. package/demos/vue/package-lock.json +28044 -0
  90. package/demos/vue/package.json +33 -0
  91. package/demos/vue/public/favicon.ico +0 -0
  92. package/demos/vue/public/index.html +24 -0
  93. package/demos/vue/src/assets/logo.svg +29 -0
  94. package/demos/vue/src/components/App.vue +305 -0
  95. package/demos/vue/src/components/Authenticate.vue +65 -0
  96. package/demos/vue/src/components/Loader.vue +230 -0
  97. package/demos/vue/src/main.js +92 -0
  98. package/demos/webmap-checker-sapper/.env.example +5 -0
  99. package/demos/webmap-checker-sapper/README.md +123 -0
  100. package/demos/webmap-checker-sapper/appveyor.yml +18 -0
  101. package/demos/webmap-checker-sapper/cypress/fixtures/example.json +5 -0
  102. package/demos/webmap-checker-sapper/cypress/integration/spec.js +19 -0
  103. package/demos/webmap-checker-sapper/cypress/plugins/index.js +17 -0
  104. package/demos/webmap-checker-sapper/cypress/support/commands.js +25 -0
  105. package/demos/webmap-checker-sapper/cypress/support/index.js +20 -0
  106. package/demos/webmap-checker-sapper/cypress.json +4 -0
  107. package/demos/webmap-checker-sapper/package-lock.json +9622 -0
  108. package/demos/webmap-checker-sapper/package.json +50 -0
  109. package/demos/webmap-checker-sapper/rollup.config.js +87 -0
  110. package/demos/webmap-checker-sapper/src/client.js +20 -0
  111. package/demos/webmap-checker-sapper/src/components/LayerStatus.html +108 -0
  112. package/demos/webmap-checker-sapper/src/components/Nav.html +21 -0
  113. package/demos/webmap-checker-sapper/src/components/WebMap.html +62 -0
  114. package/demos/webmap-checker-sapper/src/routes/_error.html +41 -0
  115. package/demos/webmap-checker-sapper/src/routes/_layout.html +21 -0
  116. package/demos/webmap-checker-sapper/src/routes/auth/authorize.js +18 -0
  117. package/demos/webmap-checker-sapper/src/routes/auth/exchange-token.js +20 -0
  118. package/demos/webmap-checker-sapper/src/routes/auth/post-sign-in.js +24 -0
  119. package/demos/webmap-checker-sapper/src/routes/auth/sign-out.js +10 -0
  120. package/demos/webmap-checker-sapper/src/routes/index.html +20 -0
  121. package/demos/webmap-checker-sapper/src/routes/webmaps/[webmapId].html +83 -0
  122. package/demos/webmap-checker-sapper/src/routes/webmaps/index.html +59 -0
  123. package/demos/webmap-checker-sapper/src/server.js +101 -0
  124. package/demos/webmap-checker-sapper/src/service-worker.js +82 -0
  125. package/demos/webmap-checker-sapper/src/template.html +33 -0
  126. package/demos/webmap-checker-sapper/src/userInfoMiddleware.js +21 -0
  127. package/demos/webmap-checker-sapper/src/utils.js +33 -0
  128. package/demos/webmap-checker-sapper/static/favicon.png +0 -0
  129. package/demos/webmap-checker-sapper/static/global.css +36 -0
  130. package/demos/webmap-checker-sapper/static/manifest.json +20 -0
  131. package/demos/webmap-checker-sapper/static/svelte-logo-192.png +0 -0
  132. package/demos/webmap-checker-sapper/static/svelte-logo-512.png +0 -0
  133. package/docs/.eslintrc.js +12 -0
  134. package/docs/FAQ.md +48 -0
  135. package/docs/HISTORY.md +62 -0
  136. package/docs/acetate.config.js +262 -0
  137. package/docs/build-typedoc.js +434 -0
  138. package/docs/generate-srihashes.js +53 -0
  139. package/docs/src/_layout.html +86 -0
  140. package/docs/src/api/_declaration.html +600 -0
  141. package/docs/src/api/_layout.html +204 -0
  142. package/docs/src/api/_package.html +38 -0
  143. package/docs/src/api/index.html +16 -0
  144. package/docs/src/guides/_layout.html +24 -0
  145. package/docs/src/guides/amd-requirejs-dojo.md +40 -0
  146. package/docs/src/guides/browser-authentication.md +39 -0
  147. package/docs/src/guides/bundlers.md +52 -0
  148. package/docs/src/guides/cli-authentication.md +9 -0
  149. package/docs/src/guides/client-server-authentication.md +9 -0
  150. package/docs/src/guides/embedded-apps.md +106 -0
  151. package/docs/src/guides/from-a-cdn.md +38 -0
  152. package/docs/src/guides/index.md +59 -0
  153. package/docs/src/guides/node.md +104 -0
  154. package/docs/src/guides/package-overview.md +111 -0
  155. package/docs/src/guides/server-authentication.md +9 -0
  156. package/docs/src/guides/whats-new-v2-0.md +305 -0
  157. package/docs/src/img/icons.png +0 -0
  158. package/docs/src/img/icons@2x.png +0 -0
  159. package/docs/src/img/oauth-browser.png +0 -0
  160. package/docs/src/index.html +12 -0
  161. package/docs/src/js/api-search.js +112 -0
  162. package/docs/src/js/nav-toggle.js +41 -0
  163. package/docs/src/sass/_highlight.scss +96 -0
  164. package/docs/src/sass/_icons.scss +157 -0
  165. package/docs/src/sass/style.scss +242 -0
  166. package/docs/src/srihashes.json +12 -0
  167. package/jasmine.json +7 -0
  168. package/jasmine.live.json +7 -0
  169. package/karma.conf.js +107 -0
  170. package/lerna.json +8 -0
  171. package/notes/README.md +68 -0
  172. package/package.json +141 -0
  173. package/packages/arcgis-rest-auth/README.md +71 -0
  174. package/packages/arcgis-rest-auth/package.json +69 -0
  175. package/packages/arcgis-rest-auth/post-message-auth-spec.md +70 -0
  176. package/packages/arcgis-rest-auth/src/ApiKey.ts +41 -0
  177. package/packages/arcgis-rest-auth/src/ApplicationSession.ts +122 -0
  178. package/packages/arcgis-rest-auth/src/UserSession.ts +1355 -0
  179. package/packages/arcgis-rest-auth/src/app-tokens.ts +131 -0
  180. package/packages/arcgis-rest-auth/src/authenticated-request-options.ts +24 -0
  181. package/packages/arcgis-rest-auth/src/federation-utils.ts +85 -0
  182. package/packages/arcgis-rest-auth/src/fetch-token.ts +50 -0
  183. package/packages/arcgis-rest-auth/src/generate-token.ts +35 -0
  184. package/packages/arcgis-rest-auth/src/index.ts +13 -0
  185. package/packages/arcgis-rest-auth/src/validate-app-access.ts +68 -0
  186. package/packages/arcgis-rest-auth/test/ApiKey.test.ts +35 -0
  187. package/packages/arcgis-rest-auth/test/ApplicationSession.test.ts +124 -0
  188. package/packages/arcgis-rest-auth/test/UserSession.test.ts +2377 -0
  189. package/packages/arcgis-rest-auth/test/app-tokens.test.ts +95 -0
  190. package/packages/arcgis-rest-auth/test/federation-utils.test.ts +323 -0
  191. package/packages/arcgis-rest-auth/test/fetchToken.test.ts +112 -0
  192. package/packages/arcgis-rest-auth/test/generateToken.test.ts +102 -0
  193. package/packages/arcgis-rest-auth/test/utils.ts +14 -0
  194. package/packages/arcgis-rest-auth/test/validate-app-access.test.ts +46 -0
  195. package/packages/arcgis-rest-auth/tsconfig.json +6 -0
  196. package/packages/arcgis-rest-demographics/README.md +75 -0
  197. package/packages/arcgis-rest-demographics/package.json +69 -0
  198. package/packages/arcgis-rest-demographics/src/getAvailableCountries.ts +113 -0
  199. package/packages/arcgis-rest-demographics/src/getAvailableDataCollections.ts +166 -0
  200. package/packages/arcgis-rest-demographics/src/getAvailableGeographyLevels.ts +88 -0
  201. package/packages/arcgis-rest-demographics/src/getGeography.ts +152 -0
  202. package/packages/arcgis-rest-demographics/src/helpers.ts +28 -0
  203. package/packages/arcgis-rest-demographics/src/index.ts +8 -0
  204. package/packages/arcgis-rest-demographics/src/queryDemographicData.ts +106 -0
  205. package/packages/arcgis-rest-demographics/test/getAvailableCountries.test.ts +92 -0
  206. package/packages/arcgis-rest-demographics/test/getAvailableDataCollections.test.ts +115 -0
  207. package/packages/arcgis-rest-demographics/test/getAvailableGeographyLevels.test.ts +72 -0
  208. package/packages/arcgis-rest-demographics/test/getGeography.test.ts +141 -0
  209. package/packages/arcgis-rest-demographics/test/mocks/responses.ts +4 -0
  210. package/packages/arcgis-rest-demographics/test/queryDemographicData.test.live.ts +42 -0
  211. package/packages/arcgis-rest-demographics/test/queryDemographicData.test.ts +113 -0
  212. package/packages/arcgis-rest-demographics/tsconfig.json +6 -0
  213. package/packages/arcgis-rest-feature-layer/README.md +77 -0
  214. package/packages/arcgis-rest-feature-layer/package.json +64 -0
  215. package/packages/arcgis-rest-feature-layer/src/add.ts +56 -0
  216. package/packages/arcgis-rest-feature-layer/src/addAttachment.ts +53 -0
  217. package/packages/arcgis-rest-feature-layer/src/applyEdits.ts +95 -0
  218. package/packages/arcgis-rest-feature-layer/src/decodeValues.ts +122 -0
  219. package/packages/arcgis-rest-feature-layer/src/delete.ts +61 -0
  220. package/packages/arcgis-rest-feature-layer/src/deleteAttachments.ts +52 -0
  221. package/packages/arcgis-rest-feature-layer/src/getAllLayersAndTables.ts +30 -0
  222. package/packages/arcgis-rest-feature-layer/src/getAttachments.ts +55 -0
  223. package/packages/arcgis-rest-feature-layer/src/getLayer.ts +24 -0
  224. package/packages/arcgis-rest-feature-layer/src/getService.ts +26 -0
  225. package/packages/arcgis-rest-feature-layer/src/helpers.ts +97 -0
  226. package/packages/arcgis-rest-feature-layer/src/index.ts +32 -0
  227. package/packages/arcgis-rest-feature-layer/src/query.ts +204 -0
  228. package/packages/arcgis-rest-feature-layer/src/queryRelated.ts +89 -0
  229. package/packages/arcgis-rest-feature-layer/src/update.ts +60 -0
  230. package/packages/arcgis-rest-feature-layer/src/updateAttachment.ts +59 -0
  231. package/packages/arcgis-rest-feature-layer/test/attachments.test.ts +200 -0
  232. package/packages/arcgis-rest-feature-layer/test/crud.test.ts +197 -0
  233. package/packages/arcgis-rest-feature-layer/test/decodeValues.test.ts +67 -0
  234. package/packages/arcgis-rest-feature-layer/test/getAllLayersAndTables.test.ts +28 -0
  235. package/packages/arcgis-rest-feature-layer/test/getLayer.test.ts +31 -0
  236. package/packages/arcgis-rest-feature-layer/test/getService.test.ts +31 -0
  237. package/packages/arcgis-rest-feature-layer/test/helpers.test.ts +25 -0
  238. package/packages/arcgis-rest-feature-layer/test/mocks/allLayersAndTablesResponse.ts +906 -0
  239. package/packages/arcgis-rest-feature-layer/test/mocks/cvdQueryResponse.ts +225 -0
  240. package/packages/arcgis-rest-feature-layer/test/mocks/feature.ts +302 -0
  241. package/packages/arcgis-rest-feature-layer/test/mocks/fields.ts +779 -0
  242. package/packages/arcgis-rest-feature-layer/test/mocks/foo.txt +1 -0
  243. package/packages/arcgis-rest-feature-layer/test/mocks/service.ts +398 -0
  244. package/packages/arcgis-rest-feature-layer/test/query.test.ts +167 -0
  245. package/packages/arcgis-rest-feature-layer/tsconfig.json +6 -0
  246. package/packages/arcgis-rest-geocoding/README.md +86 -0
  247. package/packages/arcgis-rest-geocoding/package.json +66 -0
  248. package/packages/arcgis-rest-geocoding/src/bulk.ts +104 -0
  249. package/packages/arcgis-rest-geocoding/src/geocode.ts +166 -0
  250. package/packages/arcgis-rest-geocoding/src/helpers.ts +56 -0
  251. package/packages/arcgis-rest-geocoding/src/index.ts +15 -0
  252. package/packages/arcgis-rest-geocoding/src/reverse.ts +84 -0
  253. package/packages/arcgis-rest-geocoding/src/suggest.ts +45 -0
  254. package/packages/arcgis-rest-geocoding/test/bulk.test.ts +194 -0
  255. package/packages/arcgis-rest-geocoding/test/geocode.test.ts +253 -0
  256. package/packages/arcgis-rest-geocoding/test/helpers.test.ts +85 -0
  257. package/packages/arcgis-rest-geocoding/test/mocks/responses.ts +591 -0
  258. package/packages/arcgis-rest-geocoding/test/reverse.test.ts +126 -0
  259. package/packages/arcgis-rest-geocoding/test/suggest.test.ts +53 -0
  260. package/packages/arcgis-rest-geocoding/tsconfig.json +6 -0
  261. package/packages/arcgis-rest-portal/README.md +73 -0
  262. package/packages/arcgis-rest-portal/package.json +64 -0
  263. package/packages/arcgis-rest-portal/src/groups/add-users.ts +140 -0
  264. package/packages/arcgis-rest-portal/src/groups/create.ts +43 -0
  265. package/packages/arcgis-rest-portal/src/groups/get.ts +184 -0
  266. package/packages/arcgis-rest-portal/src/groups/helpers.ts +14 -0
  267. package/packages/arcgis-rest-portal/src/groups/invite-users.ts +127 -0
  268. package/packages/arcgis-rest-portal/src/groups/join.ts +57 -0
  269. package/packages/arcgis-rest-portal/src/groups/notification.ts +77 -0
  270. package/packages/arcgis-rest-portal/src/groups/protect.ts +56 -0
  271. package/packages/arcgis-rest-portal/src/groups/remove-users.ts +76 -0
  272. package/packages/arcgis-rest-portal/src/groups/remove.ts +32 -0
  273. package/packages/arcgis-rest-portal/src/groups/search.ts +47 -0
  274. package/packages/arcgis-rest-portal/src/groups/update-user-membership.ts +63 -0
  275. package/packages/arcgis-rest-portal/src/groups/update.ts +39 -0
  276. package/packages/arcgis-rest-portal/src/index.ts +69 -0
  277. package/packages/arcgis-rest-portal/src/items/add.ts +138 -0
  278. package/packages/arcgis-rest-portal/src/items/content.ts +67 -0
  279. package/packages/arcgis-rest-portal/src/items/create.ts +150 -0
  280. package/packages/arcgis-rest-portal/src/items/export.ts +80 -0
  281. package/packages/arcgis-rest-portal/src/items/get.ts +437 -0
  282. package/packages/arcgis-rest-portal/src/items/helpers.ts +292 -0
  283. package/packages/arcgis-rest-portal/src/items/protect.ts +41 -0
  284. package/packages/arcgis-rest-portal/src/items/reassign.ts +61 -0
  285. package/packages/arcgis-rest-portal/src/items/remove.ts +141 -0
  286. package/packages/arcgis-rest-portal/src/items/search.ts +25 -0
  287. package/packages/arcgis-rest-portal/src/items/update.ts +185 -0
  288. package/packages/arcgis-rest-portal/src/items/upload.ts +125 -0
  289. package/packages/arcgis-rest-portal/src/orgs/notification.ts +131 -0
  290. package/packages/arcgis-rest-portal/src/services/get-unique-service-name.ts +35 -0
  291. package/packages/arcgis-rest-portal/src/services/is-service-name-available.ts +30 -0
  292. package/packages/arcgis-rest-portal/src/sharing/access.ts +84 -0
  293. package/packages/arcgis-rest-portal/src/sharing/helpers.ts +81 -0
  294. package/packages/arcgis-rest-portal/src/sharing/is-item-shared-with-group.ts +42 -0
  295. package/packages/arcgis-rest-portal/src/sharing/share-item-with-group.ts +336 -0
  296. package/packages/arcgis-rest-portal/src/sharing/unshare-item-with-group.ts +105 -0
  297. package/packages/arcgis-rest-portal/src/users/get-user-tags.ts +52 -0
  298. package/packages/arcgis-rest-portal/src/users/get-user-url.ts +18 -0
  299. package/packages/arcgis-rest-portal/src/users/get-user.ts +58 -0
  300. package/packages/arcgis-rest-portal/src/users/invitation.ts +156 -0
  301. package/packages/arcgis-rest-portal/src/users/notification.ts +68 -0
  302. package/packages/arcgis-rest-portal/src/users/search-users.ts +37 -0
  303. package/packages/arcgis-rest-portal/src/users/update.ts +66 -0
  304. package/packages/arcgis-rest-portal/src/util/SearchQueryBuilder.ts +391 -0
  305. package/packages/arcgis-rest-portal/src/util/array.ts +16 -0
  306. package/packages/arcgis-rest-portal/src/util/generic-search.ts +99 -0
  307. package/packages/arcgis-rest-portal/src/util/get-portal-settings.ts +45 -0
  308. package/packages/arcgis-rest-portal/src/util/get-portal-url.ts +28 -0
  309. package/packages/arcgis-rest-portal/src/util/get-portal.ts +53 -0
  310. package/packages/arcgis-rest-portal/src/util/get-subscription-info.ts +43 -0
  311. package/packages/arcgis-rest-portal/src/util/scrub-control-chars.ts +13 -0
  312. package/packages/arcgis-rest-portal/src/util/search.ts +42 -0
  313. package/packages/arcgis-rest-portal/test/groups/add-users.test.ts +239 -0
  314. package/packages/arcgis-rest-portal/test/groups/crud.test.ts +180 -0
  315. package/packages/arcgis-rest-portal/test/groups/get.test.ts +176 -0
  316. package/packages/arcgis-rest-portal/test/groups/invite-users.test.ts +146 -0
  317. package/packages/arcgis-rest-portal/test/groups/join.test.ts +72 -0
  318. package/packages/arcgis-rest-portal/test/groups/notification.test.ts +112 -0
  319. package/packages/arcgis-rest-portal/test/groups/protect.test.ts +72 -0
  320. package/packages/arcgis-rest-portal/test/groups/remove-users.test.ts +140 -0
  321. package/packages/arcgis-rest-portal/test/groups/search.test.ts +151 -0
  322. package/packages/arcgis-rest-portal/test/groups/update-user-membership.test.ts +62 -0
  323. package/packages/arcgis-rest-portal/test/items/add.test.ts +323 -0
  324. package/packages/arcgis-rest-portal/test/items/content.test.ts +156 -0
  325. package/packages/arcgis-rest-portal/test/items/create.test.ts +400 -0
  326. package/packages/arcgis-rest-portal/test/items/export.test.ts +122 -0
  327. package/packages/arcgis-rest-portal/test/items/get.test.ts +583 -0
  328. package/packages/arcgis-rest-portal/test/items/helpers.test.ts +60 -0
  329. package/packages/arcgis-rest-portal/test/items/protect.test.ts +122 -0
  330. package/packages/arcgis-rest-portal/test/items/reassign.test.ts +131 -0
  331. package/packages/arcgis-rest-portal/test/items/remove.test.ts +261 -0
  332. package/packages/arcgis-rest-portal/test/items/search.test.ts +275 -0
  333. package/packages/arcgis-rest-portal/test/items/update.test.ts +556 -0
  334. package/packages/arcgis-rest-portal/test/items/upload.test.ts +282 -0
  335. package/packages/arcgis-rest-portal/test/mocks/groups/responses.ts +208 -0
  336. package/packages/arcgis-rest-portal/test/mocks/items/foo.zip +0 -0
  337. package/packages/arcgis-rest-portal/test/mocks/items/item.ts +526 -0
  338. package/packages/arcgis-rest-portal/test/mocks/items/resources.ts +38 -0
  339. package/packages/arcgis-rest-portal/test/mocks/items/search.ts +121 -0
  340. package/packages/arcgis-rest-portal/test/mocks/portal/response.ts +126 -0
  341. package/packages/arcgis-rest-portal/test/mocks/portal/settings-response.ts +56 -0
  342. package/packages/arcgis-rest-portal/test/mocks/sharing/sharing.ts +18 -0
  343. package/packages/arcgis-rest-portal/test/mocks/users/invitation.ts +70 -0
  344. package/packages/arcgis-rest-portal/test/mocks/users/notification.ts +34 -0
  345. package/packages/arcgis-rest-portal/test/mocks/users/user-search.ts +388 -0
  346. package/packages/arcgis-rest-portal/test/mocks/users/user-tags.ts +5 -0
  347. package/packages/arcgis-rest-portal/test/mocks/users/user.ts +174 -0
  348. package/packages/arcgis-rest-portal/test/orgs/notification.test.ts +144 -0
  349. package/packages/arcgis-rest-portal/test/services/get-unique-service-name.test.ts +59 -0
  350. package/packages/arcgis-rest-portal/test/services/is-service-name-available.test.ts +46 -0
  351. package/packages/arcgis-rest-portal/test/sharing/access.test.ts +162 -0
  352. package/packages/arcgis-rest-portal/test/sharing/helpers.test.ts +55 -0
  353. package/packages/arcgis-rest-portal/test/sharing/share-item-with-group.test.ts +1328 -0
  354. package/packages/arcgis-rest-portal/test/sharing/unshare-item-with-group.test.ts +288 -0
  355. package/packages/arcgis-rest-portal/test/users/get-user-tags.test.ts +71 -0
  356. package/packages/arcgis-rest-portal/test/users/get-user-url.test.ts +40 -0
  357. package/packages/arcgis-rest-portal/test/users/get-user.test.ts +90 -0
  358. package/packages/arcgis-rest-portal/test/users/invitation.test.ts +127 -0
  359. package/packages/arcgis-rest-portal/test/users/notification.test.ts +77 -0
  360. package/packages/arcgis-rest-portal/test/users/search.test.ts +42 -0
  361. package/packages/arcgis-rest-portal/test/users/update.test.ts +151 -0
  362. package/packages/arcgis-rest-portal/test/util/SearchQueryBuilder.test.ts +340 -0
  363. package/packages/arcgis-rest-portal/test/util/array.test.ts +30 -0
  364. package/packages/arcgis-rest-portal/test/util/get-portal-settings.test.ts +68 -0
  365. package/packages/arcgis-rest-portal/test/util/get-portal-url.test.ts +37 -0
  366. package/packages/arcgis-rest-portal/test/util/portal.test.ts +148 -0
  367. package/packages/arcgis-rest-portal/test/util/scrub-control-chars.test.ts +22 -0
  368. package/packages/arcgis-rest-portal/tsconfig.json +6 -0
  369. package/packages/arcgis-rest-request/README.md +72 -0
  370. package/packages/arcgis-rest-request/package.json +60 -0
  371. package/packages/arcgis-rest-request/src/index.ts +25 -0
  372. package/packages/arcgis-rest-request/src/request.ts +433 -0
  373. package/packages/arcgis-rest-request/src/utils/ArcGISRequestError.ts +76 -0
  374. package/packages/arcgis-rest-request/src/utils/ErrorTypes.ts +29 -0
  375. package/packages/arcgis-rest-request/src/utils/GrantTypes.ts +5 -0
  376. package/packages/arcgis-rest-request/src/utils/HTTPMethods.ts +6 -0
  377. package/packages/arcgis-rest-request/src/utils/IAuthenticationManager.ts +22 -0
  378. package/packages/arcgis-rest-request/src/utils/IFetchTokenParams.ts +11 -0
  379. package/packages/arcgis-rest-request/src/utils/IGenerateTokenParams.ts +9 -0
  380. package/packages/arcgis-rest-request/src/utils/IParamBuilder.ts +3 -0
  381. package/packages/arcgis-rest-request/src/utils/IParams.ts +6 -0
  382. package/packages/arcgis-rest-request/src/utils/IParamsBuilder.ts +5 -0
  383. package/packages/arcgis-rest-request/src/utils/IRequestOptions.ts +54 -0
  384. package/packages/arcgis-rest-request/src/utils/ITokenRequestOptions.ts +9 -0
  385. package/packages/arcgis-rest-request/src/utils/ResponseFormats.ts +10 -0
  386. package/packages/arcgis-rest-request/src/utils/append-custom-params.ts +49 -0
  387. package/packages/arcgis-rest-request/src/utils/clean-url.ts +20 -0
  388. package/packages/arcgis-rest-request/src/utils/decode-query-string.ts +27 -0
  389. package/packages/arcgis-rest-request/src/utils/encode-form-data.ts +38 -0
  390. package/packages/arcgis-rest-request/src/utils/encode-query-string.ts +35 -0
  391. package/packages/arcgis-rest-request/src/utils/process-params.ts +109 -0
  392. package/packages/arcgis-rest-request/src/utils/retryAuthError.ts +10 -0
  393. package/packages/arcgis-rest-request/src/utils/warn.ts +11 -0
  394. package/packages/arcgis-rest-request/src/utils/with-options.ts +48 -0
  395. package/packages/arcgis-rest-request/test/mocks/errors.ts +76 -0
  396. package/packages/arcgis-rest-request/test/mocks/geojson-feature-collection.ts +13 -0
  397. package/packages/arcgis-rest-request/test/mocks/param-builder.ts +7 -0
  398. package/packages/arcgis-rest-request/test/mocks/sharing-rest-info.ts +41 -0
  399. package/packages/arcgis-rest-request/test/mocks/webmap.ts +41 -0
  400. package/packages/arcgis-rest-request/test/request.test.ts +621 -0
  401. package/packages/arcgis-rest-request/test/utils/ArcGISAuthError.test.ts +191 -0
  402. package/packages/arcgis-rest-request/test/utils/ArcGISRequestError.test.ts +51 -0
  403. package/packages/arcgis-rest-request/test/utils/check-for-errors.test.ts +111 -0
  404. package/packages/arcgis-rest-request/test/utils/clean-url.test.ts +50 -0
  405. package/packages/arcgis-rest-request/test/utils/encode-form-data.test.ts +133 -0
  406. package/packages/arcgis-rest-request/test/utils/encode-query-string.test.ts +18 -0
  407. package/packages/arcgis-rest-request/test/utils/process-params.test.ts +205 -0
  408. package/packages/arcgis-rest-request/test/utils/with-options.test.ts +133 -0
  409. package/packages/arcgis-rest-request/tsconfig.json +4 -0
  410. package/packages/arcgis-rest-routing/README.md +75 -0
  411. package/packages/arcgis-rest-routing/package.json +65 -0
  412. package/packages/arcgis-rest-routing/src/closestFacility.ts +225 -0
  413. package/packages/arcgis-rest-routing/src/helpers.ts +104 -0
  414. package/packages/arcgis-rest-routing/src/index.ts +14 -0
  415. package/packages/arcgis-rest-routing/src/originDestinationMatrix.ts +223 -0
  416. package/packages/arcgis-rest-routing/src/serviceArea.ts +173 -0
  417. package/packages/arcgis-rest-routing/src/solveRoute.ts +180 -0
  418. package/packages/arcgis-rest-routing/test/closestFacility.test.ts +683 -0
  419. package/packages/arcgis-rest-routing/test/mocks/inputs.ts +132 -0
  420. package/packages/arcgis-rest-routing/test/mocks/responses.ts +13316 -0
  421. package/packages/arcgis-rest-routing/test/originDestinationMatrix.test.ts +795 -0
  422. package/packages/arcgis-rest-routing/test/serviceArea.test.ts +601 -0
  423. package/packages/arcgis-rest-routing/test/solveRoute.test.ts +677 -0
  424. package/packages/arcgis-rest-routing/tsconfig.json +6 -0
  425. package/packages/arcgis-rest-service-admin/README.md +73 -0
  426. package/packages/arcgis-rest-service-admin/package.json +65 -0
  427. package/packages/arcgis-rest-service-admin/src/addTo.ts +70 -0
  428. package/packages/arcgis-rest-service-admin/src/create.ts +189 -0
  429. package/packages/arcgis-rest-service-admin/src/get-service-admin-info.ts +34 -0
  430. package/packages/arcgis-rest-service-admin/src/get-view-sources.ts +20 -0
  431. package/packages/arcgis-rest-service-admin/src/index.ts +14 -0
  432. package/packages/arcgis-rest-service-admin/src/update.ts +50 -0
  433. package/packages/arcgis-rest-service-admin/test/addTo.test.ts +350 -0
  434. package/packages/arcgis-rest-service-admin/test/create.test.ts +294 -0
  435. package/packages/arcgis-rest-service-admin/test/get-service-admin-info.test.ts +37 -0
  436. package/packages/arcgis-rest-service-admin/test/get-view-sources.test.ts +40 -0
  437. package/packages/arcgis-rest-service-admin/test/mocks/layerDefinition.ts +79 -0
  438. package/packages/arcgis-rest-service-admin/test/mocks/service.ts +81 -0
  439. package/packages/arcgis-rest-service-admin/test/update.test.ts +115 -0
  440. package/packages/arcgis-rest-service-admin/tsconfig.json +5 -0
  441. package/packages/arcgis-rest-types/README.md +66 -0
  442. package/packages/arcgis-rest-types/package.json +54 -0
  443. package/packages/arcgis-rest-types/src/feature.ts +42 -0
  444. package/packages/arcgis-rest-types/src/geometry.ts +272 -0
  445. package/packages/arcgis-rest-types/src/group.ts +72 -0
  446. package/packages/arcgis-rest-types/src/index.ts +9 -0
  447. package/packages/arcgis-rest-types/src/item.ts +81 -0
  448. package/packages/arcgis-rest-types/src/service.ts +156 -0
  449. package/packages/arcgis-rest-types/src/statisticDefinition.ts +33 -0
  450. package/packages/arcgis-rest-types/src/symbol.ts +170 -0
  451. package/packages/arcgis-rest-types/src/user.ts +49 -0
  452. package/packages/arcgis-rest-types/src/webmap.ts +1405 -0
  453. package/packages/arcgis-rest-types/tsconfig.json +10 -0
  454. package/support/changelog.js +393 -0
  455. package/support/deploy-doc-site.js +16 -0
  456. package/support/dev.sh +6 -0
  457. package/support/publish.sh +47 -0
  458. package/support/test-helpers.js +9 -0
  459. package/tsconfig.json +63 -0
  460. package/umd-base-profile.js +81 -0
  461. package/umd-production-profile.js +13 -0
@@ -0,0 +1,391 @@
1
+ /* Copyright (c) 2018-2021 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import { IParamBuilder, warn } from "@esri/arcgis-rest-request";
5
+
6
+ /**
7
+ * `SearchQueryBuilder` can be used to construct the `q` param for
8
+ * [`searchItems`](/arcgis-rest-js/api/portal/searchItems#searchItems-search) or
9
+ * [`searchGroups`](/arcgis-rest-js/api/portal/searchGroups#searchGroups-search).
10
+ * By chaining methods, it helps build complex search queries.
11
+ *
12
+ * ```js
13
+ * const startDate = new Date("2020-01-01");
14
+ * const endDate = new Date("2020-09-01");
15
+ * const query = new SearchQueryBuilder()
16
+ * .match("Patrick")
17
+ * .in("owner")
18
+ * .and()
19
+ * .from(startDate)
20
+ * .to(endDate)
21
+ * .in("created")
22
+ * .and()
23
+ * .startGroup()
24
+ * .match("Web Mapping Application")
25
+ * .in("type")
26
+ * .or()
27
+ * .match("Mobile Application")
28
+ * .in("type")
29
+ * .or()
30
+ * .match("Application")
31
+ * .in("type")
32
+ * .endGroup()
33
+ * .and()
34
+ * .match("Demo App");
35
+ *
36
+ * searchItems(query).then((res) => {
37
+ * console.log(res.results);
38
+ * });
39
+ * ```
40
+ *
41
+ * Will search for items matching
42
+ * ```
43
+ * "owner: Patrick AND created:[1577836800000 TO 1598918400000] AND (type:"Web Mapping Application" OR type:"Mobile Application" OR type:Application) AND Demo App"
44
+ * ```
45
+ */
46
+ export class SearchQueryBuilder implements IParamBuilder {
47
+ private termStack: any[] = [];
48
+ private rangeStack: any[] = [];
49
+ private q: string;
50
+ private openGroups = 0;
51
+ private currentModifer: string;
52
+
53
+ /**
54
+ * @param q An existing query string to start building from.
55
+ */
56
+ constructor(q = "") {
57
+ this.q = q;
58
+ }
59
+
60
+ /**
61
+ * Defines strings to search for.
62
+ *
63
+ * ```js
64
+ * const query = new SearchQueryBuilder()
65
+ * .match("My Layer")
66
+ * ```
67
+ *
68
+ * @param terms strings to search for.
69
+ */
70
+ public match(this: SearchQueryBuilder, ...terms: string[]) {
71
+ this.termStack = this.termStack.concat(terms);
72
+ return this;
73
+ }
74
+
75
+ /**
76
+ * Defines fields to search in. You can pass `"*"` or call this method without arguments to search a default set of fields
77
+ *
78
+ * ```js
79
+ * const query = new SearchQueryBuilder()
80
+ * .match("My Layer")
81
+ * .in("title")
82
+ * ```
83
+ *
84
+ * @param field The field to search for the previous match in.
85
+ */
86
+ public in(this: SearchQueryBuilder, field?: string) {
87
+ const fn = `\`in(${field ? `"${field}"` : ""})\``;
88
+
89
+ if (!this.hasRange && !this.hasTerms) {
90
+ warn(
91
+ // apparently-p-rettier-ignore causes some
92
+ `${fn} was called with no call to \`match(...)\` or \`from(...)\`/\`to(...)\`. Your query was not modified.`
93
+ );
94
+ return this;
95
+ }
96
+
97
+ if (field && field !== "*") {
98
+ this.q += `${field}:`;
99
+ }
100
+
101
+ return this.commit();
102
+ }
103
+
104
+ /**
105
+ * Starts a new search group.
106
+ *
107
+ * ```js
108
+ * const query = new SearchQueryBuilder()
109
+ * .startGroup()
110
+ * .match("Lakes")
111
+ * .in("title")
112
+ * .endGroup()
113
+ * .or()
114
+ * .startGroup()
115
+ * .match("Rivers")
116
+ * .in("title")
117
+ * .endGroup()
118
+ * ```
119
+ */
120
+ public startGroup(this: SearchQueryBuilder) {
121
+ this.commit();
122
+ if (this.openGroups > 0) {
123
+ this.q += " ";
124
+ }
125
+ this.openGroups++;
126
+ this.q += "(";
127
+ return this;
128
+ }
129
+
130
+ /**
131
+ * Ends a search group.
132
+ *
133
+ * ```js
134
+ * const query = new SearchQueryBuilder()
135
+ * .startGroup()
136
+ * .match("Lakes")
137
+ * .in("title")
138
+ * .endGroup()
139
+ * .or()
140
+ * .startGroup()
141
+ * .match("Rivers")
142
+ * .in("title")
143
+ * .endGroup()
144
+ * ```
145
+ */
146
+ public endGroup(this: SearchQueryBuilder) {
147
+ if (this.openGroups <= 0) {
148
+ warn(
149
+ `\`endGroup(...)\` was called without calling \`startGroup(...)\` first. Your query was not modified.`
150
+ );
151
+ return this;
152
+ }
153
+ this.commit();
154
+ this.openGroups--;
155
+ this.q += ")";
156
+ return this;
157
+ }
158
+
159
+ /**
160
+ * Joins two sets of queries with an `AND` clause.
161
+ *
162
+ * ```js
163
+ * const query = new SearchQueryBuilder()
164
+ * .match("Lakes")
165
+ * .in("title")
166
+ * .and()
167
+ * .match("Rivers")
168
+ * .in("title")
169
+ * ```
170
+ */
171
+ public and(this: SearchQueryBuilder) {
172
+ return this.addModifier("and");
173
+ }
174
+
175
+ /**
176
+ * Joins two sets of queries with an `OR` clause.
177
+ *
178
+ * ```js
179
+ * const query = new SearchQueryBuilder()
180
+ * .match("Lakes")
181
+ * .in("title")
182
+ * .or()
183
+ * .match("Rivers")
184
+ * .in("title")
185
+ * ```
186
+ */
187
+ public or(this: SearchQueryBuilder) {
188
+ return this.addModifier("or");
189
+ }
190
+
191
+ /**
192
+ * Joins two sets of queries with a `NOT` clause. Another option for filtering results is the [prohibit operator '-'](https://developers.arcgis.com/rest/users-groups-and-items/search-reference.htm#ESRI_SECTION1_5C6C35DB9E4A4F4492C5B937BDA2BF67).
193
+ *
194
+ * ```js
195
+ * // omit results with "Rivers" in their title
196
+ * const query = new SearchQueryBuilder()
197
+ * .not()
198
+ * .match("Rivers")
199
+ * .in("title")
200
+ *
201
+ * // equivalent
202
+ * const query = new SearchQueryBuilder()
203
+ * .match("Rivers")
204
+ * .in("-title")
205
+ * ```
206
+ */
207
+ public not(this: SearchQueryBuilder) {
208
+ return this.addModifier("not");
209
+ }
210
+
211
+ /**
212
+ * Begins a new range query.
213
+ *
214
+ * ```js
215
+ *
216
+ * const NEWYEARS = new Date("2020-01-01")
217
+ * const TODAY = new Date()
218
+ *
219
+ * const query = new SearchQueryBuilder()
220
+ * .from(NEWYEARS)
221
+ * .to(TODAY)
222
+ * .in("created")
223
+ * ```
224
+ */
225
+ public from(this: SearchQueryBuilder, term: number | string | Date) {
226
+ if (this.hasTerms) {
227
+ warn(
228
+ // apparently-p*rettier-ignore causes prettier to strip *all* comments O_o
229
+ `\`from(...)\` is not allowed after \`match(...)\` try using \`.from(...).to(...).in(...)\`. Optionally, you may see this because dates are incorrectly formatted. Dates should be a primative Date value, aka a number in milliseconds or Date object, ie new Date("2020-01-01"). Your query was not modified.`
230
+ );
231
+ return this;
232
+ }
233
+ this.rangeStack[0] = term;
234
+ return this;
235
+ }
236
+
237
+ /**
238
+ * Ends a range query.
239
+ *
240
+ * ```js
241
+ * const query = new SearchQueryBuilder()
242
+ * .from(yesterdaysDate)
243
+ * .to(todaysDate)
244
+ * .in("created")
245
+ * ```
246
+ */
247
+ public to(this: SearchQueryBuilder, term: any) {
248
+ if (this.hasTerms) {
249
+ warn(
250
+ // apparently-p*rettier-ignore causes prettier to strip *all* comments O_o
251
+ `\`to(...)\` is not allowed after \`match(...)\` try using \`.from(...).to(...).in(...)\`. Optionally, you may see this because dates are incorrectly formatted. Dates should be a primative Date value, aka a number in milliseconds or Date object, ie new Date("2020-01-01"). Your query was not modified.`
252
+ );
253
+ return this;
254
+ }
255
+ this.rangeStack[1] = term;
256
+ return this;
257
+ }
258
+
259
+ /**
260
+ * Boosts the previous term to increase its rank in the results.
261
+ *
262
+ * ```js
263
+ * const query = new SearchQueryBuilder()
264
+ * .match("Lakes")
265
+ * .in("title")
266
+ * .or()
267
+ * .match("Rivers")
268
+ * .in("title")
269
+ * .boost(3)
270
+ * ```
271
+ */
272
+ public boost(this: SearchQueryBuilder, num: number) {
273
+ this.commit();
274
+ this.q += `^${num}`;
275
+ return this;
276
+ }
277
+
278
+ /**
279
+ * Returns the current query string. Called internally when the request is made.
280
+ */
281
+ public toParam() {
282
+ this.commit();
283
+ this.cleanup();
284
+ return this.q;
285
+ }
286
+
287
+ /**
288
+ * Returns a new instance of `SearchQueryBuilder` based on the current instance.
289
+ */
290
+ public clone() {
291
+ this.commit();
292
+ this.cleanup();
293
+ return new SearchQueryBuilder(this.q + "");
294
+ }
295
+
296
+ private addModifier(modifier: string) {
297
+ if (this.currentModifer) {
298
+ warn(
299
+ // apparently-p*rettier-ignore causes prettier to strip *all* comments O_o
300
+ `You have called \`${this.currentModifer}()\` after \`${modifier}()\`. Your current query was not modified.`
301
+ );
302
+ return this;
303
+ }
304
+
305
+ this.commit();
306
+
307
+ if (this.q === "" && modifier !== "not") {
308
+ warn(
309
+ `You have called \`${modifier}()\` without calling another method to modify your query first. Try calling \`match()\` first.`
310
+ );
311
+ return this;
312
+ }
313
+
314
+ this.currentModifer = modifier;
315
+ this.q += this.q === "" ? "" : " ";
316
+ this.q += `${modifier.toUpperCase()} `;
317
+ return this;
318
+ }
319
+
320
+ private hasWhiteSpace(s: string) {
321
+ return /\s/g.test(s);
322
+ }
323
+
324
+ private formatTerm(term: any) {
325
+ if (term instanceof Date) {
326
+ return term.getTime();
327
+ }
328
+
329
+ if (typeof term === "string" && this.hasWhiteSpace(term)) {
330
+ return `"${term}"`;
331
+ }
332
+
333
+ return term;
334
+ }
335
+
336
+ private commit() {
337
+ this.currentModifer = undefined;
338
+ if (this.hasRange) {
339
+ this.q += `[${this.formatTerm(this.rangeStack[0])} TO ${this.formatTerm(
340
+ this.rangeStack[1]
341
+ )}]`;
342
+ this.rangeStack = [undefined, undefined];
343
+ }
344
+
345
+ if (this.hasTerms) {
346
+ this.q += this.termStack
347
+ .map((term) => {
348
+ return this.formatTerm(term);
349
+ })
350
+ .join(" ");
351
+ this.termStack = [];
352
+ }
353
+
354
+ return this;
355
+ }
356
+
357
+ private get hasTerms() {
358
+ return this.termStack.length > 0;
359
+ }
360
+
361
+ private get hasRange() {
362
+ return this.rangeStack.length && this.rangeStack[0] && this.rangeStack[1];
363
+ }
364
+
365
+ private cleanup() {
366
+ // end a group if we have started one
367
+ if (this.openGroups > 0) {
368
+ warn(
369
+ // apparently-p*rettier-ignore causes prettier to strip *all* comments O_o
370
+ `Automatically closing ${this.openGroups} group(s). You can use \`endGroup(...)\` to remove this warning.`
371
+ );
372
+
373
+ while (this.openGroups > 0) {
374
+ this.q += ")";
375
+ this.openGroups--;
376
+ }
377
+ }
378
+
379
+ const oldQ = this.q;
380
+ this.q = oldQ.replace(/( AND ?| NOT ?| OR ?)*$/, "");
381
+
382
+ if (oldQ !== this.q) {
383
+ warn(
384
+ `\`startGroup(...)\` was called without calling \`endGroup(...)\` first. Your query was not modified.`
385
+ );
386
+ }
387
+
388
+ // clear empty groups
389
+ this.q = this.q.replace(/(\(\))*/, "");
390
+ }
391
+ }
@@ -0,0 +1,16 @@
1
+ /* Copyright (c) 2019 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ export function chunk<T>(array: T[], size: number) {
5
+ if (array.length === 0) {
6
+ return [];
7
+ }
8
+
9
+ const chunks = [];
10
+
11
+ for (let i = 0; i < array.length; i += size) {
12
+ chunks.push(array.slice(i, i + size));
13
+ }
14
+
15
+ return chunks;
16
+ }
@@ -0,0 +1,99 @@
1
+ /* Copyright (c) 2018 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import {
5
+ request,
6
+ IRequestOptions,
7
+ appendCustomParams
8
+ } from "@esri/arcgis-rest-request";
9
+ import { IItem, IGroup, IUser } from "@esri/arcgis-rest-types";
10
+
11
+ import { SearchQueryBuilder } from "./SearchQueryBuilder";
12
+ import { getPortalUrl } from "../util/get-portal-url";
13
+ import {
14
+ ISearchOptions,
15
+ ISearchGroupContentOptions,
16
+ ISearchResult
17
+ } from "../util/search";
18
+
19
+ export function genericSearch<T extends IItem | IGroup | IUser> (
20
+ search:
21
+ | string
22
+ | ISearchOptions
23
+ | ISearchGroupContentOptions
24
+ | SearchQueryBuilder,
25
+ searchType: "item" | "group" | "groupContent" | "user"
26
+ ): Promise<ISearchResult<T>> {
27
+ let options: IRequestOptions;
28
+ if (typeof search === "string" || search instanceof SearchQueryBuilder) {
29
+ options = {
30
+ httpMethod: "GET",
31
+ params: {
32
+ q: search
33
+ }
34
+ };
35
+ } else {
36
+ // searchUserAccess has one (knonw) valid value: "groupMember"
37
+ options = appendCustomParams<ISearchOptions>(
38
+ search,
39
+ ["q", "num", "start", "sortField", "sortOrder", "searchUserAccess", "searchUserName"],
40
+ {
41
+ httpMethod: "GET"
42
+ }
43
+ );
44
+ }
45
+
46
+ let path;
47
+ switch (searchType) {
48
+ case "item":
49
+ path = "/search";
50
+ break;
51
+ case "group":
52
+ path = "/community/groups";
53
+ break;
54
+ case "groupContent":
55
+ // Need to have groupId property to do group contents search,
56
+ // cso filter out all but ISearchGroupContentOptions
57
+ if (
58
+ typeof search !== "string" &&
59
+ !(search instanceof SearchQueryBuilder) &&
60
+ search.groupId
61
+ ) {
62
+ path = `/content/groups/${search.groupId}/search`;
63
+ } else {
64
+ return Promise.reject(new Error("you must pass a `groupId` option to `searchGroupContent`"));
65
+ }
66
+ break;
67
+ default:
68
+ // "users"
69
+ path = "/portals/self/users/search";
70
+ break;
71
+ }
72
+ const url = getPortalUrl(options) + path;
73
+
74
+ // send the request
75
+ return request(url, options).then(r => {
76
+ if (r.nextStart && r.nextStart !== -1) {
77
+ r.nextPage = function () {
78
+ let newOptions: ISearchOptions;
79
+
80
+ if (
81
+ typeof search === "string" ||
82
+ search instanceof SearchQueryBuilder
83
+ ) {
84
+ newOptions = {
85
+ q: search,
86
+ start: r.nextStart
87
+ };
88
+ } else {
89
+ newOptions = search;
90
+ newOptions.start = r.nextStart;
91
+ }
92
+
93
+ return genericSearch<T>(newOptions, searchType);
94
+ };
95
+ }
96
+
97
+ return r;
98
+ });
99
+ }
@@ -0,0 +1,45 @@
1
+ /* Copyright (c) 2017-2019 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import { IExtent } from "@esri/arcgis-rest-types";
5
+ import { request, IRequestOptions } from "@esri/arcgis-rest-request";
6
+
7
+ import { getPortalUrl } from "./get-portal-url";
8
+
9
+ export interface IPortalSettings {
10
+ allowedRedirectUris: string[];
11
+ defaultExtent: IExtent;
12
+ helperServices: { [key: string]: any };
13
+ informationalBanner: { [key: string]: any };
14
+ [key: string]: any;
15
+ }
16
+
17
+ /**
18
+ * ```js
19
+ * import { getPortalSettings } from "@esri/arcgis-rest-portal";
20
+ * //
21
+ * getPortalSettings()
22
+ * getPortalSettings("fe8")
23
+ * getPortalSettings(null, { portal: "https://custom.maps.arcgis.com/sharing/rest/" })
24
+ * ```
25
+ * Fetch the settings for the current portal by id. If no id is passed, portals/self/settings will be called
26
+ * @param id
27
+ * @param requestOptions
28
+ */
29
+ export function getPortalSettings(
30
+ id?: string,
31
+ requestOptions?: IRequestOptions
32
+ ): Promise<IPortalSettings> {
33
+ // construct the search url
34
+ const idOrSelf = id ? id : "self";
35
+ const url = `${getPortalUrl(requestOptions)}/portals/${idOrSelf}/settings`;
36
+
37
+ // default to a GET request
38
+ const options: IRequestOptions = {
39
+ ...{ httpMethod: "GET" },
40
+ ...requestOptions
41
+ };
42
+
43
+ // send the request
44
+ return request(url, options);
45
+ }
@@ -0,0 +1,28 @@
1
+ /* Copyright (c) 2017 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import { IRequestOptions, cleanUrl } from "@esri/arcgis-rest-request";
5
+
6
+ /**
7
+ * Helper that returns the appropriate portal url for a given request. `requestOptions.portal` is given
8
+ * precedence over `authentication.portal`. If neither `portal` nor `authentication` is present,
9
+ * `www.arcgis.com/sharing/rest` is returned.
10
+ *
11
+ * @param requestOptions - Request options that may have authentication manager
12
+ * @returns Portal url to be used in API requests
13
+ */
14
+ export function getPortalUrl(requestOptions: IRequestOptions = {}): string {
15
+ // use portal in options if specified
16
+ if (requestOptions.portal) {
17
+ return cleanUrl(requestOptions.portal);
18
+ }
19
+
20
+ // if auth was passed, use that portal
21
+ if (requestOptions.authentication) {
22
+ // the portal url is already scrubbed in the auth package
23
+ return requestOptions.authentication.portal;
24
+ }
25
+
26
+ // default to arcgis.com
27
+ return "https://www.arcgis.com/sharing/rest";
28
+ }
@@ -0,0 +1,53 @@
1
+ /* Copyright (c) 2017-2019 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import { request, IRequestOptions } from "@esri/arcgis-rest-request";
5
+
6
+ import { getPortalUrl } from "./get-portal-url";
7
+
8
+ export interface IPortal {
9
+ id: string;
10
+ isPortal: boolean;
11
+ name: string;
12
+ [key: string]: any;
13
+ }
14
+
15
+ /**
16
+ * Get the portal
17
+ * @param requestOptions
18
+ */
19
+ export function getSelf(requestOptions?: IRequestOptions): Promise<IPortal> {
20
+ // just delegate to getPortal w/o an id
21
+ return getPortal(null, requestOptions);
22
+ }
23
+
24
+ /**
25
+ * ```js
26
+ * import { getPortal } from "@esri/arcgis-rest-request";
27
+ * //
28
+ * getPortal()
29
+ * getPortal("fe8")
30
+ * getPortal(null, { portal: "https://custom.maps.arcgis.com/sharing/rest/" })
31
+ * ```
32
+ * Fetch information about the specified portal by id. If no id is passed, portals/self will be called.
33
+ * Note that if you intend to request a portal by id and it is different from the portal specified by options.authentication, you must also pass options.portal.
34
+ * @param id
35
+ * @param requestOptions
36
+ */
37
+ export function getPortal(
38
+ id?: string,
39
+ requestOptions?: IRequestOptions
40
+ ): Promise<IPortal> {
41
+ // construct the search url
42
+ const idOrSelf = id ? id : "self";
43
+ const url = `${getPortalUrl(requestOptions)}/portals/${idOrSelf}`;
44
+
45
+ // default to a GET request
46
+ const options: IRequestOptions = {
47
+ ...{ httpMethod: "GET" },
48
+ ...requestOptions
49
+ };
50
+
51
+ // send the request
52
+ return request(url, options);
53
+ }
@@ -0,0 +1,43 @@
1
+ /* Copyright (c) 2017-2019 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import { request, IRequestOptions } from "@esri/arcgis-rest-request";
5
+
6
+ import { getPortalUrl } from "./get-portal-url";
7
+
8
+ export interface ISubscriptionInfo {
9
+ id: string;
10
+ [key: string]: any;
11
+ }
12
+
13
+ /**
14
+ * ```js
15
+ * import { getSubscriptionInfo } from "@esri/arcgis-rest-request";
16
+ * //
17
+ * getSubscriptionInfo()
18
+ * getSubscriptionInfo("fe8")
19
+ * getSubscriptionInfo(null, { portal: "https://custom.maps.arcgis.com/sharing/rest/" })
20
+ * ```
21
+ * Fetch subscription information about the current portal by id. If no id is passed, portals/self/subscriptionInfo will be called
22
+ * @param id
23
+ * @param requestOptions
24
+ */
25
+ export function getSubscriptionInfo(
26
+ id?: string,
27
+ requestOptions?: IRequestOptions
28
+ ): Promise<ISubscriptionInfo> {
29
+ // construct the search url
30
+ const idOrSelf = id ? id : "self";
31
+ const url = `${getPortalUrl(
32
+ requestOptions
33
+ )}/portals/${idOrSelf}/subscriptionInfo`;
34
+
35
+ // default to a GET request
36
+ const options: IRequestOptions = {
37
+ ...{ httpMethod: "GET" },
38
+ ...requestOptions
39
+ };
40
+
41
+ // send the request
42
+ return request(url, options);
43
+ }
@@ -0,0 +1,13 @@
1
+ // eslint-disable-next-line no-control-regex
2
+ const CONTROL_CHAR_MATCHER = /[\x00-\x1F\x7F-\x9F\xA0]/g;
3
+
4
+ /**
5
+ * Returns a new string with all control characters removed.
6
+ *
7
+ * Doesn't remove characters from input string.
8
+ *
9
+ * @param str - the string to scrub
10
+ */
11
+ export function scrubControlChars (str: string) {
12
+ return str.replace(CONTROL_CHAR_MATCHER, "");
13
+ }