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,104 @@
1
+ /* Copyright (c) 2018 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import { IRequestOptions } from "@esri/arcgis-rest-request";
5
+ import {
6
+ ILocation,
7
+ IPoint,
8
+ IPolyline,
9
+ Position2D,
10
+ IFeatureSet
11
+ } from "@esri/arcgis-rest-types";
12
+
13
+ // https always
14
+ export const ARCGIS_ONLINE_ROUTING_URL =
15
+ "https://route.arcgis.com/arcgis/rest/services/World/Route/NAServer/Route_World";
16
+ export const ARCGIS_ONLINE_CLOSEST_FACILITY_URL =
17
+ "https://route.arcgis.com/arcgis/rest/services/World/ClosestFacility/NAServer/ClosestFacility_World";
18
+ export const ARCGIS_ONLINE_SERVICE_AREA_URL =
19
+ "https://route.arcgis.com/arcgis/rest/services/World/ServiceAreas/NAServer/ServiceArea_World";
20
+ export const ARCGIS_ONLINE_ORIGIN_DESTINATION_MATRIX_URL =
21
+ "https://route.arcgis.com/arcgis/rest/services/World/OriginDestinationCostMatrix/NAServer/OriginDestinationCostMatrix_World";
22
+
23
+ // nice to have: verify custom endpoints contain 'NAServer' and end in a '/'
24
+ export interface IEndpointOptions extends IRequestOptions {
25
+ /**
26
+ * Any ArcGIS Routing service (example: https://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Network/USA/NAServer/Route/ ) to use for the routing service request.
27
+ */
28
+ endpoint?: string;
29
+ }
30
+
31
+ function isLocationArray(
32
+ coords: ILocation | IPoint | [number, number] | [number, number, number]
33
+ ): coords is [number, number] | [number, number, number] {
34
+ return (
35
+ (coords as [number, number]).length === 2 ||
36
+ (coords as [number, number, number]).length === 3
37
+ );
38
+ }
39
+
40
+ function isLocation(
41
+ coords: ILocation | IPoint | [number, number] | [number, number, number]
42
+ ): coords is ILocation {
43
+ return (
44
+ (coords as ILocation).latitude !== undefined ||
45
+ (coords as ILocation).lat !== undefined
46
+ );
47
+ }
48
+
49
+ export function normalizeLocationsList(
50
+ locations: Array<IPoint | ILocation | [number, number]>
51
+ ): string[] {
52
+ return locations.map((coords) => {
53
+ if (isLocationArray(coords)) {
54
+ return coords.join();
55
+ } else if (isLocation(coords)) {
56
+ if (coords.lat) {
57
+ return coords.long + "," + coords.lat;
58
+ } else {
59
+ return coords.longitude + "," + coords.latitude;
60
+ }
61
+ } else {
62
+ return coords.x + "," + coords.y;
63
+ }
64
+ });
65
+ }
66
+
67
+ export function decompressGeometry(str: string) {
68
+ let xDiffPrev = 0;
69
+ let yDiffPrev = 0;
70
+ const points = [];
71
+ let x;
72
+ let y;
73
+
74
+ // Split the string into an array on the + and - characters
75
+ const strings = str.match(/((\+|-)[^+-]+)/g);
76
+
77
+ // The first value is the coefficient in base 32
78
+ const coefficient = parseInt(strings[0], 32);
79
+
80
+ for (let j = 1; j < strings.length; j += 2) {
81
+ // j is the offset for the x value
82
+ // Convert the value from base 32 and add the previous x value
83
+ x = parseInt(strings[j], 32) + xDiffPrev;
84
+ xDiffPrev = x;
85
+
86
+ // j+1 is the offset for the y value
87
+ // Convert the value from base 32 and add the previous y value
88
+ y = parseInt(strings[j + 1], 32) + yDiffPrev;
89
+ yDiffPrev = y;
90
+
91
+ points.push([x / coefficient, y / coefficient] as Position2D);
92
+ }
93
+
94
+ return {
95
+ paths: [points],
96
+ } as IPolyline;
97
+ }
98
+
99
+ /**
100
+ * User Defined Type Guard that verifies this is a featureSet
101
+ */
102
+ export function isFeatureSet(arg: any): arg is IFeatureSet {
103
+ return Object.prototype.hasOwnProperty.call(arg, 'features');
104
+ }
@@ -0,0 +1,14 @@
1
+ /* Copyright (c) 2018 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ export * from "./solveRoute";
5
+ export * from "./closestFacility";
6
+ export * from "./serviceArea";
7
+ export * from "./originDestinationMatrix";
8
+ export * from "./helpers";
9
+ export {
10
+ ILocation,
11
+ ISpatialReference,
12
+ IPoint,
13
+ IFeature,
14
+ } from "@esri/arcgis-rest-types";
@@ -0,0 +1,223 @@
1
+ /* Copyright (c) 2018 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import {
5
+ request,
6
+ cleanUrl,
7
+ appendCustomParams,
8
+ IRequestOptions,
9
+ } from "@esri/arcgis-rest-request";
10
+
11
+ import {
12
+ ILocation,
13
+ IPoint,
14
+ IFeature,
15
+ IFeatureSet,
16
+ } from "@esri/arcgis-rest-types";
17
+
18
+ import {
19
+ ARCGIS_ONLINE_ORIGIN_DESTINATION_MATRIX_URL,
20
+ IEndpointOptions,
21
+ normalizeLocationsList,
22
+ isFeatureSet,
23
+ } from "./helpers";
24
+
25
+ import { arcgisToGeoJSON } from "@terraformer/arcgis";
26
+
27
+ export interface IOriginDestinationMatrixOptions extends IEndpointOptions {
28
+ /**
29
+ * Specify the starting points from which to travel to the destinations.
30
+ */
31
+ origins: Array<IPoint | ILocation | [number, number]> | IFeatureSet;
32
+ /**
33
+ * Specify the ending point locations to travel to from the origins.
34
+ */
35
+ destinations: Array<IPoint | ILocation | [number, number]> | IFeatureSet;
36
+ /**
37
+ * Specify the type of output returned by the service. Defaults to "esriNAODOutputSparseMatrix".
38
+ */
39
+ outputType?:
40
+ | "esriNAODOutputSparseMatrix"
41
+ | "esriNAODOutputStraightLines"
42
+ | "esriNAODOutputNoLines";
43
+ barriers?: Array<IPoint | ILocation | [number, number]> | IFeatureSet;
44
+ polylineBarriers?: IFeatureSet;
45
+ polygonBarriers?: IFeatureSet;
46
+ returnOrigins?: boolean;
47
+ returnDestinations?: boolean;
48
+ returnBarriers?: boolean;
49
+ returnPolylineBarriers?: boolean;
50
+ returnPolygonBarriers?: boolean;
51
+ }
52
+
53
+ interface IFeatureSetWithGeoJson extends IFeatureSet {
54
+ geoJson?: any;
55
+ }
56
+
57
+ export interface IOriginDestinationMatrixResponse {
58
+ messages: [ { type: number, description: string } ];
59
+ /**
60
+ * Only present if outputType is "esriNAODOutputSparseMatrix". Full description is available at https://developers.arcgis.com/rest/network/api-reference/origin-destination-cost-matrix-synchronous-service.htm#ESRI_SECTION2_114F8364507C4B56B780DFAD505270FB.
61
+ */
62
+ odCostMatrix?: any;
63
+ /**
64
+ * Only present if outputType is "esriNAODOutputStraightLines" or "esriNAODOutputNoLines". Includes the geometry for the straight line connecting each origin-destination pair when the outputType is "esriNAODOutputStraightLines".
65
+ */
66
+ odLines?: IFeatureSetWithGeoJson;
67
+ origins?: IFeatureSetWithGeoJson;
68
+ destinations?: IFeatureSetWithGeoJson;
69
+ barriers?: IFeatureSetWithGeoJson;
70
+ polylineBarriers?: IFeatureSetWithGeoJson;
71
+ polygonBarriers?: IFeatureSetWithGeoJson;
72
+ }
73
+
74
+ /**
75
+ * ```js
76
+ * import { originDestinationMatrix } from '@esri/arcgis-rest-routing';
77
+ * //
78
+ * originDestinationMatrix({
79
+ * origins: [
80
+ * [-90.404302, 38.600621],
81
+ * [-90.364293, 38.620427],
82
+ * ],
83
+ * destinations: [
84
+ * [-90.444716, 38.635501],
85
+ * [-90.311919, 38.633523],
86
+ * [-90.451147, 38.581107]
87
+ * ],
88
+ * authentication
89
+ * })
90
+ * .then(response) // => { ... }
91
+ * ```
92
+ * Used to create an origin-destination (OD) cost matrix from multiple origins to multiple destinations. See the [REST Documentation](https://developers.arcgis.com/rest/network/api-reference/origin-destination-cost-matrix-synchronous-service.htm) for more information.
93
+ *
94
+ * @param requestOptions Options to pass through to the routing service.
95
+ * @returns A Promise that will resolve with travel time and/or distance for each origin-destination pair. It returns either odLines or odCostMatrix for this information depending on the outputType you specify.
96
+ * @restlink https://developers.arcgis.com/rest/network/api-reference/origin-destination-cost-matrix-synchronous-service.htm
97
+ */
98
+ export function originDestinationMatrix(
99
+ requestOptions: IOriginDestinationMatrixOptions
100
+ ): Promise<IOriginDestinationMatrixResponse> {
101
+ const endpoint =
102
+ requestOptions.endpoint || ARCGIS_ONLINE_ORIGIN_DESTINATION_MATRIX_URL;
103
+
104
+ requestOptions.params = {
105
+ outputType: "esriNAODOutputSparseMatrix",
106
+ returnOrigins: true,
107
+ returnDestinations: true,
108
+ returnBarriers: true,
109
+ returnPolylineBarriers: true,
110
+ returnPolygonBarriers: true,
111
+ ...requestOptions.params,
112
+ };
113
+
114
+ const options = appendCustomParams<IOriginDestinationMatrixOptions>(
115
+ requestOptions,
116
+ [
117
+ "outputType",
118
+ "barriers",
119
+ "polylineBarriers",
120
+ "polygonBarriers",
121
+ "returnOrigins",
122
+ "returnDestinations",
123
+ "returnBarriers",
124
+ "returnPolylineBarriers",
125
+ "returnPolygonBarriers",
126
+ ]
127
+ );
128
+
129
+ // the SAAS service does not support anonymous requests
130
+ if (
131
+ !requestOptions.authentication &&
132
+ endpoint === ARCGIS_ONLINE_ORIGIN_DESTINATION_MATRIX_URL
133
+ ) {
134
+ return Promise.reject(
135
+ "Calculating the origin-destination cost matrix using the ArcGIS service requires authentication"
136
+ );
137
+ }
138
+
139
+ // use a formatting helper for input params of this type: Array<IPoint | ILocation | [number, number]>
140
+ if (isFeatureSet(requestOptions.origins)) {
141
+ options.params.origins = requestOptions.origins;
142
+ } else {
143
+ options.params.origins = normalizeLocationsList(
144
+ requestOptions.origins
145
+ ).join(";");
146
+ }
147
+
148
+ if (isFeatureSet(requestOptions.destinations)) {
149
+ options.params.destinations = requestOptions.destinations;
150
+ } else {
151
+ options.params.destinations = normalizeLocationsList(
152
+ requestOptions.destinations
153
+ ).join(";");
154
+ }
155
+
156
+ // optional input param that may need point geometry normalizing
157
+ if (requestOptions.barriers) {
158
+ if (isFeatureSet(requestOptions.barriers)) {
159
+ options.params.barriers = requestOptions.barriers;
160
+ } else {
161
+ // optional point geometry barriers must be normalized, too
162
+ // but not if provided as IFeatureSet type
163
+ // note that optional polylineBarriers and polygonBarriers do not need to be normalized
164
+ options.params.barriers = normalizeLocationsList(
165
+ requestOptions.barriers
166
+ ).join(";");
167
+ }
168
+ }
169
+
170
+ return request(`${cleanUrl(endpoint)}/solveODCostMatrix`, options).then(
171
+ function(res) {
172
+ return cleanResponse(res, options);
173
+ }
174
+ );
175
+ }
176
+
177
+ function cleanResponse(
178
+ res: any,
179
+ options: IRequestOptions
180
+ ): IOriginDestinationMatrixResponse {
181
+ // add "geoJson" property to each response property that is an arcgis featureSet
182
+
183
+ // res.odLines only exists and only includes geometry in this condition (out of 3 possible options.params.outputType conditions)
184
+ if (
185
+ options.params.outputType === "esriNAODOutputStraightLines" &&
186
+ res.odLines &&
187
+ res.odLines.spatialReference.wkid === 4326
188
+ ) {
189
+ res.odLines.geoJson = arcgisToGeoJSON(res.odLines);
190
+ }
191
+
192
+ if (res.origins && res.origins.spatialReference.wkid === 4326) {
193
+ res.origins.geoJson = arcgisToGeoJSON(res.origins);
194
+ }
195
+
196
+ if (res.destinations && res.destinations.spatialReference.wkid === 4326) {
197
+ res.destinations.geoJson = arcgisToGeoJSON(res.destinations);
198
+ }
199
+
200
+ if (res.barriers && res.barriers.spatialReference.wkid === 4326) {
201
+ res.barriers.geoJson = arcgisToGeoJSON(res.barriers);
202
+ }
203
+
204
+ if (
205
+ res.polygonBarriers &&
206
+ res.polygonBarriers.spatialReference.wkid === 4326
207
+ ) {
208
+ res.polygonBarriers.geoJson = arcgisToGeoJSON(res.polygonBarriers);
209
+ }
210
+
211
+ if (
212
+ res.polylineBarriers &&
213
+ res.polylineBarriers.spatialReference.wkid === 4326
214
+ ) {
215
+ res.polylineBarriers.geoJson = arcgisToGeoJSON(res.polylineBarriers);
216
+ }
217
+
218
+ return res;
219
+ }
220
+
221
+ export default {
222
+ originDestinationMatrix,
223
+ };
@@ -0,0 +1,173 @@
1
+ /* Copyright (c) 2018 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import {
5
+ request,
6
+ cleanUrl,
7
+ appendCustomParams,
8
+ } from "@esri/arcgis-rest-request";
9
+
10
+ import {
11
+ ILocation,
12
+ IPoint,
13
+ IFeature,
14
+ IFeatureSet,
15
+ } from "@esri/arcgis-rest-types";
16
+
17
+ import {
18
+ ARCGIS_ONLINE_SERVICE_AREA_URL,
19
+ IEndpointOptions,
20
+ normalizeLocationsList,
21
+ isFeatureSet,
22
+ } from "./helpers";
23
+
24
+ import { arcgisToGeoJSON } from "@terraformer/arcgis";
25
+
26
+ export interface IServiceAreaOptions extends IEndpointOptions {
27
+ /**
28
+ * Specify one or more locations around which service areas are generated.
29
+ */
30
+ facilities: Array<IPoint | ILocation | [number, number]> | IFeatureSet;
31
+ /**
32
+ * Specify if the service should return routes.
33
+ */
34
+ travelDirection?: "incidentsToFacilities" | "facilitiesToIncidents";
35
+ barriers?: Array<IPoint | ILocation | [number, number]> | IFeatureSet;
36
+ polylineBarriers?: IFeatureSet;
37
+ polygonBarriers?: IFeatureSet;
38
+ outputLines?: boolean;
39
+ returnFacilities?: boolean;
40
+ returnBarriers?: boolean;
41
+ returnPolylineBarriers?: boolean;
42
+ returnPolygonBarriers?: boolean;
43
+ preserveObjectID?: boolean;
44
+ }
45
+
46
+ interface IFeatureSetWithGeoJson extends IFeatureSet {
47
+ geoJson?: any;
48
+ }
49
+
50
+ export interface IServiceAreaResponse {
51
+ messages: string[];
52
+ saPolygons?: IFeatureSetWithGeoJson;
53
+ incidents?: IFeatureSet;
54
+ facilities?: IFeatureSet;
55
+ barriers?: IFeatureSet;
56
+ polygonBarriers?: IFeatureSet;
57
+ polylineBarriers?: IFeatureSet;
58
+ }
59
+
60
+ function getTravelDirection(
61
+ key: "incidentsToFacilities" | "facilitiesToIncidents"
62
+ ): "esriNATravelDirectionFromFacility" | "esriNATravelDirectionToFacility" {
63
+ if (key === "incidentsToFacilities") {
64
+ return "esriNATravelDirectionFromFacility";
65
+ } else {
66
+ return "esriNATravelDirectionToFacility";
67
+ }
68
+ }
69
+
70
+ /**
71
+ * ```js
72
+ * import { serviceArea } from '@esri/arcgis-rest-routing';
73
+ * //
74
+ * serviceArea({
75
+ * facilities: [
76
+ * [-90.444716, 38.635501],
77
+ * [-90.311919, 38.633523],
78
+ * [-90.451147, 38.581107]
79
+ * ],
80
+ * authentication
81
+ * })
82
+ * .then(response) // => {routes: {features: [{attributes: { ... }, geometry:{ ... }}]}
83
+ * ```
84
+ * Used to find the area that can be reached from the input location within a given travel time or travel distance. See the [REST Documentation](https://developers.arcgis.com/rest/network/api-reference/service-area-synchronous-service.htm) for more information.
85
+ *
86
+ * @param requestOptions Options to pass through to the routing service.
87
+ * @returns A Promise that will resolve with service area polygons for the request.
88
+ * @restlink https://developers.arcgis.com/rest/network/api-reference/service-area-synchronous-service.htm
89
+ */
90
+ export function serviceArea(
91
+ requestOptions: IServiceAreaOptions
92
+ ): Promise<IServiceAreaResponse> {
93
+ const endpoint = requestOptions.endpoint || ARCGIS_ONLINE_SERVICE_AREA_URL;
94
+
95
+ requestOptions.params = {
96
+ returnFacilities: true,
97
+ returnBarriers: true,
98
+ returnPolylineBarriers: true,
99
+ returnPolygonBarriers: true,
100
+ preserveObjectID: true,
101
+ ...requestOptions.params,
102
+ };
103
+
104
+ const options = appendCustomParams<IServiceAreaOptions>(requestOptions, [
105
+ "barriers",
106
+ "polylineBarriers",
107
+ "polygonBarriers",
108
+ "outputLines",
109
+ "returnFacilities",
110
+ "returnBarriers",
111
+ "returnPolylineBarriers",
112
+ "returnPolygonBarriers",
113
+ "preserveObjectID",
114
+ ]);
115
+
116
+ // Set travelDirection
117
+ if (requestOptions.travelDirection) {
118
+ options.params.travelDirection = getTravelDirection(
119
+ requestOptions.travelDirection
120
+ );
121
+ }
122
+
123
+ // the SAAS service does not support anonymous requests
124
+ if (
125
+ !requestOptions.authentication &&
126
+ endpoint === ARCGIS_ONLINE_SERVICE_AREA_URL
127
+ ) {
128
+ return Promise.reject(
129
+ "Finding service areas using the ArcGIS service requires authentication"
130
+ );
131
+ }
132
+
133
+ if (isFeatureSet(requestOptions.facilities)) {
134
+ options.params.facilities = requestOptions.facilities;
135
+ } else {
136
+ options.params.facilities = normalizeLocationsList(
137
+ requestOptions.facilities
138
+ ).join(";");
139
+ }
140
+
141
+ // optional input param that may need point geometry normalizing
142
+ if (requestOptions.barriers) {
143
+ if (isFeatureSet(requestOptions.barriers)) {
144
+ options.params.barriers = requestOptions.barriers;
145
+ } else {
146
+ // optional point geometry barriers must be normalized, too
147
+ // but not if provided as IFeatureSet type
148
+ // note that optional polylineBarriers and polygonBarriers do not need to be normalized
149
+ options.params.barriers = normalizeLocationsList(
150
+ requestOptions.barriers
151
+ ).join(";");
152
+ }
153
+ }
154
+
155
+ return request(`${cleanUrl(endpoint)}/solveServiceArea`, options).then(
156
+ cleanResponse
157
+ );
158
+ }
159
+
160
+ function cleanResponse(res: any): IServiceAreaResponse {
161
+ // remove "fieldAliases" because it does not do anything.
162
+ delete res.saPolygons.fieldAliases;
163
+
164
+ // add "geoJson" property to "saPolygons"
165
+ if (res.saPolygons.spatialReference.wkid === 4326) {
166
+ res.saPolygons.geoJson = arcgisToGeoJSON(res.saPolygons);
167
+ }
168
+ return res;
169
+ }
170
+
171
+ export default {
172
+ serviceArea,
173
+ };
@@ -0,0 +1,180 @@
1
+ /* Copyright (c) 2018 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import { request, cleanUrl } from "@esri/arcgis-rest-request";
5
+
6
+ import {
7
+ ILocation,
8
+ ISpatialReference,
9
+ IPoint,
10
+ IFeature,
11
+ IFeatureSet,
12
+ } from "@esri/arcgis-rest-types";
13
+
14
+ import {
15
+ ARCGIS_ONLINE_ROUTING_URL,
16
+ IEndpointOptions,
17
+ decompressGeometry,
18
+ isFeatureSet,
19
+ } from "./helpers";
20
+
21
+ import { arcgisToGeoJSON } from "@terraformer/arcgis";
22
+
23
+ interface IFeatureWithCompressedGeometry extends IFeature {
24
+ compressedGeometry?: string;
25
+ }
26
+
27
+ interface IFeatureSetWithGeoJson extends IFeatureSet {
28
+ geoJson?: {};
29
+ }
30
+
31
+ export interface ISolveRouteOptions extends IEndpointOptions {
32
+ /**
33
+ * Specify two or more locations between which the route is to be found.
34
+ */
35
+ stops:
36
+ | Array<IPoint | ILocation | [number, number] | [number, number, number]>
37
+ | IFeatureSet;
38
+ }
39
+
40
+ export interface ISolveRouteResponse {
41
+ messages: string[];
42
+ checksum: string;
43
+ routes: IFeatureSetWithGeoJson;
44
+ directions?: Array<{
45
+ routeId: number;
46
+ routeName: string;
47
+ summary: object;
48
+ features: IFeature[];
49
+ }>;
50
+ }
51
+
52
+ function isLocationArray(
53
+ coords: ILocation | IPoint | [number, number] | [number, number, number]
54
+ ): coords is [number, number] | [number, number, number] {
55
+ return (
56
+ (coords as [number, number]).length === 2 ||
57
+ (coords as [number, number, number]).length === 3
58
+ );
59
+ }
60
+
61
+ function isLocation(
62
+ coords: ILocation | IPoint | [number, number] | [number, number, number]
63
+ ): coords is ILocation {
64
+ return (
65
+ (coords as ILocation).latitude !== undefined ||
66
+ (coords as ILocation).lat !== undefined
67
+ );
68
+ }
69
+
70
+ /**
71
+ * ```js
72
+ * import { solveRoute } from '@esri/arcgis-rest-routing';
73
+ * //
74
+ * solveRoute({
75
+ * stops: [
76
+ * [-117.195677, 34.056383],
77
+ * [-117.918976, 33.812092],
78
+ * ],
79
+ * authentication
80
+ * })
81
+ * .then(response) // => {routes: {features: [{attributes: { ... }, geometry:{ ... }}]}
82
+ * ```
83
+ * Used to find the best way to get from one location to another or to visit several locations. See the [REST Documentation](https://developers.arcgis.com/rest/network/api-reference/route-synchronous-service.htm) for more information.
84
+ *
85
+ * @param requestOptions Options to pass through to the routing service.
86
+ * @returns A Promise that will resolve with routes and directions for the request.
87
+ * @restlink https://developers.arcgis.com/rest/network/api-reference/route-synchronous-service.htm
88
+ */
89
+ export function solveRoute(
90
+ requestOptions: ISolveRouteOptions
91
+ ): Promise<ISolveRouteResponse> {
92
+ const options: ISolveRouteOptions = {
93
+ endpoint: requestOptions.endpoint || ARCGIS_ONLINE_ROUTING_URL,
94
+ params: {},
95
+ ...requestOptions,
96
+ };
97
+
98
+ // the SAAS service does not support anonymous requests
99
+ if (
100
+ !requestOptions.authentication &&
101
+ options.endpoint === ARCGIS_ONLINE_ROUTING_URL
102
+ ) {
103
+ return Promise.reject(
104
+ "Routing using the ArcGIS service requires authentication"
105
+ );
106
+ }
107
+
108
+ if (isFeatureSet(requestOptions.stops)) {
109
+ options.params.stops = requestOptions.stops;
110
+ } else {
111
+ const stops: string[] = requestOptions.stops.map((coords) => {
112
+ if (isLocationArray(coords)) {
113
+ return coords.join();
114
+ } else if (isLocation(coords)) {
115
+ if (coords.lat) {
116
+ return (
117
+ coords.long + "," + coords.lat + (coords.z ? "," + coords.z : "")
118
+ );
119
+ } else {
120
+ return (
121
+ coords.longitude +
122
+ "," +
123
+ coords.latitude +
124
+ (coords.z ? "," + coords.z : "")
125
+ );
126
+ }
127
+ } else {
128
+ return coords.x + "," + coords.y + (coords.z ? "," + coords.z : "");
129
+ }
130
+ });
131
+
132
+ options.params.stops = stops.join(";");
133
+ }
134
+
135
+ return request(`${cleanUrl(options.endpoint)}/solve`, options).then(
136
+ cleanResponse
137
+ );
138
+ }
139
+
140
+ function cleanResponse(res: any): ISolveRouteResponse {
141
+ if (res.directions && res.directions.length > 0) {
142
+ res.directions = res.directions.map(
143
+ (direction: {
144
+ features: IFeatureWithCompressedGeometry[];
145
+ routeId: number;
146
+ routeName: string;
147
+ summary: {};
148
+ }) => {
149
+ direction.features = direction.features.map(
150
+ (feature: IFeatureWithCompressedGeometry) => {
151
+ feature.geometry = decompressGeometry(feature.compressedGeometry);
152
+ return feature;
153
+ }
154
+ );
155
+ return direction;
156
+ }
157
+ );
158
+ }
159
+
160
+ // add "geoJson" property to "routes"
161
+ if (res.routes.spatialReference.wkid === 4326) {
162
+ const features = res.routes.features.map((feature: any) => {
163
+ return {
164
+ type: "Feature",
165
+ geometry: arcgisToGeoJSON(feature.geometry),
166
+ properties: Object.assign({}, feature.attributes),
167
+ };
168
+ });
169
+
170
+ res.routes.geoJson = {
171
+ type: "FeatureCollection",
172
+ features,
173
+ };
174
+ }
175
+ return res;
176
+ }
177
+
178
+ export default {
179
+ solveRoute,
180
+ };