impeditmaiores 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 (421) hide show
  1. package/.prettierignore +2 -0
  2. package/.travis.yml +35 -0
  3. package/.vscode/launch.json +24 -0
  4. package/.vscode/settings.json +3 -0
  5. package/codecov.yml +7 -0
  6. package/demos/ago-node-cli/README.md +29 -0
  7. package/demos/ago-node-cli/ago.js +33 -0
  8. package/demos/ago-node-cli/index.js +11 -0
  9. package/demos/ago-node-cli/lib/item-export-command.js +48 -0
  10. package/demos/ago-node-cli/lib/item-search-command.js +35 -0
  11. package/demos/ago-node-cli/package-lock.json +152 -0
  12. package/demos/ago-node-cli/package.json +30 -0
  13. package/demos/attachments/README.md +5 -0
  14. package/demos/attachments/index.html +165 -0
  15. package/demos/attachments/package-lock.json +182 -0
  16. package/demos/attachments/package.json +18 -0
  17. package/demos/batch-geocoder-node/NYC_Restaurant_Inspection_Results.csv +100 -0
  18. package/demos/batch-geocoder-node/README.md +15 -0
  19. package/demos/batch-geocoder-node/batch-geocode.js +115 -0
  20. package/demos/batch-geocoder-node/config-template.js +18 -0
  21. package/demos/batch-geocoder-node/package-lock.json +81 -0
  22. package/demos/batch-geocoder-node/package.json +37 -0
  23. package/demos/express/README.md +15 -0
  24. package/demos/express/config.json.template +3 -0
  25. package/demos/express/package-lock.json +413 -0
  26. package/demos/express/package.json +18 -0
  27. package/demos/express/server.js +33 -0
  28. package/demos/feature-service-browser/README.md +6 -0
  29. package/demos/feature-service-browser/index.html +122 -0
  30. package/demos/feature-service-browser/package-lock.json +182 -0
  31. package/demos/feature-service-browser/package.json +18 -0
  32. package/demos/geocoder-browser/README.md +10 -0
  33. package/demos/geocoder-browser/config.js.template +1 -0
  34. package/demos/geocoder-browser/index.html +131 -0
  35. package/demos/geocoder-browser/package-lock.json +182 -0
  36. package/demos/geocoder-browser/package.json +19 -0
  37. package/demos/geocoder-browser/post-sign-in.html +25 -0
  38. package/demos/jsapi-integration/README.md +25 -0
  39. package/demos/jsapi-integration/config.js +6 -0
  40. package/demos/jsapi-integration/index.html +89 -0
  41. package/demos/jsapi-integration/package-lock.json +184 -0
  42. package/demos/jsapi-integration/package.json +19 -0
  43. package/demos/node-cli-item-management/README.md +10 -0
  44. package/demos/node-cli-item-management/index.js +238 -0
  45. package/demos/node-cli-item-management/package-lock.json +152 -0
  46. package/demos/node-cli-item-management/package.json +27 -0
  47. package/demos/node-cli-item-management/screenshot.png +0 -0
  48. package/demos/oauth2-browser/README.md +14 -0
  49. package/demos/oauth2-browser/authenticate.html +30 -0
  50. package/demos/oauth2-browser/config.js.template +6 -0
  51. package/demos/oauth2-browser/index.html +211 -0
  52. package/demos/oauth2-browser/logo.svg +4 -0
  53. package/demos/oauth2-browser/package-lock.json +224 -0
  54. package/demos/oauth2-browser/package.json +18 -0
  55. package/demos/oauth2-browser/style.css +36 -0
  56. package/demos/oauth2-browser-retry/README.md +25 -0
  57. package/demos/oauth2-browser-retry/authenticate.html +22 -0
  58. package/demos/oauth2-browser-retry/index.html +116 -0
  59. package/demos/oauth2-browser-retry/logo.svg +4 -0
  60. package/demos/stream-response-to-file/README.md +7 -0
  61. package/demos/stream-response-to-file/index.js +36 -0
  62. package/demos/stream-response-to-file/output/.gitkeep +0 -0
  63. package/demos/stream-response-to-file/package-lock.json +60 -0
  64. package/demos/stream-response-to-file/package.json +33 -0
  65. package/demos/tree-shaking-rollup/.babelrc +3 -0
  66. package/demos/tree-shaking-rollup/README.md +9 -0
  67. package/demos/tree-shaking-rollup/index.html +11 -0
  68. package/demos/tree-shaking-rollup/package-lock.json +2225 -0
  69. package/demos/tree-shaking-rollup/package.json +25 -0
  70. package/demos/tree-shaking-rollup/rollup.config.js +17 -0
  71. package/demos/tree-shaking-rollup/src/index.js +8 -0
  72. package/demos/tree-shaking-webpack/README.md +8 -0
  73. package/demos/tree-shaking-webpack/index.html +11 -0
  74. package/demos/tree-shaking-webpack/package-lock.json +4614 -0
  75. package/demos/tree-shaking-webpack/package.json +24 -0
  76. package/demos/tree-shaking-webpack/src/index.js +10 -0
  77. package/demos/tree-shaking-webpack/webpack.config.js +27 -0
  78. package/demos/vue/.env.example +11 -0
  79. package/demos/vue/.eslintrc.js +17 -0
  80. package/demos/vue/.postcssrc.js +5 -0
  81. package/demos/vue/README.md +17 -0
  82. package/demos/vue/babel.config.js +3 -0
  83. package/demos/vue/package-lock.json +11342 -0
  84. package/demos/vue/package.json +33 -0
  85. package/demos/vue/public/favicon.ico +0 -0
  86. package/demos/vue/public/index.html +24 -0
  87. package/demos/vue/src/assets/logo.svg +29 -0
  88. package/demos/vue/src/components/App.vue +305 -0
  89. package/demos/vue/src/components/Authenticate.vue +65 -0
  90. package/demos/vue/src/components/Loader.vue +230 -0
  91. package/demos/vue/src/main.js +92 -0
  92. package/demos/webmap-checker-sapper/.env.example +5 -0
  93. package/demos/webmap-checker-sapper/README.md +123 -0
  94. package/demos/webmap-checker-sapper/appveyor.yml +18 -0
  95. package/demos/webmap-checker-sapper/cypress/fixtures/example.json +5 -0
  96. package/demos/webmap-checker-sapper/cypress/integration/spec.js +19 -0
  97. package/demos/webmap-checker-sapper/cypress/plugins/index.js +17 -0
  98. package/demos/webmap-checker-sapper/cypress/support/commands.js +25 -0
  99. package/demos/webmap-checker-sapper/cypress/support/index.js +20 -0
  100. package/demos/webmap-checker-sapper/cypress.json +4 -0
  101. package/demos/webmap-checker-sapper/package-lock.json +3870 -0
  102. package/demos/webmap-checker-sapper/package.json +50 -0
  103. package/demos/webmap-checker-sapper/rollup.config.js +87 -0
  104. package/demos/webmap-checker-sapper/src/client.js +20 -0
  105. package/demos/webmap-checker-sapper/src/components/LayerStatus.html +108 -0
  106. package/demos/webmap-checker-sapper/src/components/Nav.html +21 -0
  107. package/demos/webmap-checker-sapper/src/components/WebMap.html +62 -0
  108. package/demos/webmap-checker-sapper/src/routes/_error.html +41 -0
  109. package/demos/webmap-checker-sapper/src/routes/_layout.html +21 -0
  110. package/demos/webmap-checker-sapper/src/routes/auth/authorize.js +18 -0
  111. package/demos/webmap-checker-sapper/src/routes/auth/exchange-token.js +20 -0
  112. package/demos/webmap-checker-sapper/src/routes/auth/post-sign-in.js +24 -0
  113. package/demos/webmap-checker-sapper/src/routes/auth/sign-out.js +10 -0
  114. package/demos/webmap-checker-sapper/src/routes/index.html +20 -0
  115. package/demos/webmap-checker-sapper/src/routes/webmaps/[webmapId].html +83 -0
  116. package/demos/webmap-checker-sapper/src/routes/webmaps/index.html +59 -0
  117. package/demos/webmap-checker-sapper/src/server.js +101 -0
  118. package/demos/webmap-checker-sapper/src/service-worker.js +82 -0
  119. package/demos/webmap-checker-sapper/src/template.html +33 -0
  120. package/demos/webmap-checker-sapper/src/userInfoMiddleware.js +21 -0
  121. package/demos/webmap-checker-sapper/src/utils.js +33 -0
  122. package/demos/webmap-checker-sapper/static/favicon.png +0 -0
  123. package/demos/webmap-checker-sapper/static/global.css +36 -0
  124. package/demos/webmap-checker-sapper/static/manifest.json +20 -0
  125. package/demos/webmap-checker-sapper/static/svelte-logo-192.png +0 -0
  126. package/demos/webmap-checker-sapper/static/svelte-logo-512.png +0 -0
  127. package/docs/FAQ.md +48 -0
  128. package/docs/HISTORY.md +62 -0
  129. package/docs/acetate.config.js +262 -0
  130. package/docs/build-typedoc.js +434 -0
  131. package/docs/generate-srihashes.js +53 -0
  132. package/docs/src/_layout.html +86 -0
  133. package/docs/src/api/_declaration.html +600 -0
  134. package/docs/src/api/_layout.html +204 -0
  135. package/docs/src/api/_package.html +38 -0
  136. package/docs/src/api/index.html +16 -0
  137. package/docs/src/guides/_layout.html +24 -0
  138. package/docs/src/guides/amd-requirejs-dojo.md +40 -0
  139. package/docs/src/guides/browser-authentication.md +41 -0
  140. package/docs/src/guides/bundlers.md +52 -0
  141. package/docs/src/guides/cli-authentication.md +9 -0
  142. package/docs/src/guides/client-server-authentication.md +9 -0
  143. package/docs/src/guides/embedded-apps.md +93 -0
  144. package/docs/src/guides/from-a-cdn.md +38 -0
  145. package/docs/src/guides/index.md +59 -0
  146. package/docs/src/guides/node.md +87 -0
  147. package/docs/src/guides/package-overview.md +111 -0
  148. package/docs/src/guides/server-authentication.md +9 -0
  149. package/docs/src/guides/whats-new-v2-0.md +305 -0
  150. package/docs/src/img/icons.png +0 -0
  151. package/docs/src/img/icons@2x.png +0 -0
  152. package/docs/src/index.html +12 -0
  153. package/docs/src/js/api-search.js +112 -0
  154. package/docs/src/js/nav-toggle.js +41 -0
  155. package/docs/src/sass/_highlight.scss +96 -0
  156. package/docs/src/sass/_icons.scss +157 -0
  157. package/docs/src/sass/style.scss +242 -0
  158. package/docs/src/srihashes.json +12 -0
  159. package/jasmine.json +7 -0
  160. package/karma.conf.js +106 -0
  161. package/lerna.json +8 -0
  162. package/notes/README.md +68 -0
  163. package/package.json +87 -0
  164. package/packages/arcgis-rest-auth/README.md +71 -0
  165. package/packages/arcgis-rest-auth/package-lock.json +11 -0
  166. package/packages/arcgis-rest-auth/package.json +69 -0
  167. package/packages/arcgis-rest-auth/src/ApplicationSession.ts +122 -0
  168. package/packages/arcgis-rest-auth/src/UserSession.ts +1206 -0
  169. package/packages/arcgis-rest-auth/src/app-tokens.ts +91 -0
  170. package/packages/arcgis-rest-auth/src/authenticated-request-options.ts +24 -0
  171. package/packages/arcgis-rest-auth/src/federation-utils.ts +85 -0
  172. package/packages/arcgis-rest-auth/src/fetch-token.ts +50 -0
  173. package/packages/arcgis-rest-auth/src/generate-token.ts +35 -0
  174. package/packages/arcgis-rest-auth/src/index.ts +9 -0
  175. package/packages/arcgis-rest-auth/src/validate-app-access.ts +68 -0
  176. package/packages/arcgis-rest-auth/test/ApplicationSession.test.ts +124 -0
  177. package/packages/arcgis-rest-auth/test/UserSession.test.ts +1807 -0
  178. package/packages/arcgis-rest-auth/test/app-tokens.test.ts +91 -0
  179. package/packages/arcgis-rest-auth/test/federation-utils.test.ts +323 -0
  180. package/packages/arcgis-rest-auth/test/fetchToken.test.ts +112 -0
  181. package/packages/arcgis-rest-auth/test/generateToken.test.ts +102 -0
  182. package/packages/arcgis-rest-auth/test/utils.ts +14 -0
  183. package/packages/arcgis-rest-auth/test/validate-app-access.test.ts +46 -0
  184. package/packages/arcgis-rest-auth/tsconfig.json +6 -0
  185. package/packages/arcgis-rest-feature-layer/README.md +77 -0
  186. package/packages/arcgis-rest-feature-layer/package-lock.json +11 -0
  187. package/packages/arcgis-rest-feature-layer/package.json +64 -0
  188. package/packages/arcgis-rest-feature-layer/src/add.ts +56 -0
  189. package/packages/arcgis-rest-feature-layer/src/addAttachment.ts +53 -0
  190. package/packages/arcgis-rest-feature-layer/src/applyEdits.ts +90 -0
  191. package/packages/arcgis-rest-feature-layer/src/decodeValues.ts +124 -0
  192. package/packages/arcgis-rest-feature-layer/src/delete.ts +61 -0
  193. package/packages/arcgis-rest-feature-layer/src/deleteAttachments.ts +52 -0
  194. package/packages/arcgis-rest-feature-layer/src/getAttachments.ts +55 -0
  195. package/packages/arcgis-rest-feature-layer/src/getLayer.ts +24 -0
  196. package/packages/arcgis-rest-feature-layer/src/getService.ts +26 -0
  197. package/packages/arcgis-rest-feature-layer/src/helpers.ts +79 -0
  198. package/packages/arcgis-rest-feature-layer/src/index.ts +31 -0
  199. package/packages/arcgis-rest-feature-layer/src/query.ts +204 -0
  200. package/packages/arcgis-rest-feature-layer/src/queryRelated.ts +89 -0
  201. package/packages/arcgis-rest-feature-layer/src/update.ts +56 -0
  202. package/packages/arcgis-rest-feature-layer/src/updateAttachment.ts +59 -0
  203. package/packages/arcgis-rest-feature-layer/test/attachments.test.ts +200 -0
  204. package/packages/arcgis-rest-feature-layer/test/crud.test.ts +195 -0
  205. package/packages/arcgis-rest-feature-layer/test/decodeValues.test.ts +67 -0
  206. package/packages/arcgis-rest-feature-layer/test/getLayer.test.ts +31 -0
  207. package/packages/arcgis-rest-feature-layer/test/getService.test.ts +31 -0
  208. package/packages/arcgis-rest-feature-layer/test/mocks/cvdQueryResponse.ts +225 -0
  209. package/packages/arcgis-rest-feature-layer/test/mocks/feature.ts +302 -0
  210. package/packages/arcgis-rest-feature-layer/test/mocks/fields.ts +779 -0
  211. package/packages/arcgis-rest-feature-layer/test/mocks/foo.txt +1 -0
  212. package/packages/arcgis-rest-feature-layer/test/mocks/service.ts +398 -0
  213. package/packages/arcgis-rest-feature-layer/test/query.test.ts +167 -0
  214. package/packages/arcgis-rest-feature-layer/tsconfig.json +6 -0
  215. package/packages/arcgis-rest-geocoding/README.md +86 -0
  216. package/packages/arcgis-rest-geocoding/package-lock.json +11 -0
  217. package/packages/arcgis-rest-geocoding/package.json +64 -0
  218. package/packages/arcgis-rest-geocoding/src/bulk.ts +104 -0
  219. package/packages/arcgis-rest-geocoding/src/geocode.ts +133 -0
  220. package/packages/arcgis-rest-geocoding/src/helpers.ts +54 -0
  221. package/packages/arcgis-rest-geocoding/src/index.ts +15 -0
  222. package/packages/arcgis-rest-geocoding/src/reverse.ts +84 -0
  223. package/packages/arcgis-rest-geocoding/src/suggest.ts +45 -0
  224. package/packages/arcgis-rest-geocoding/test/bulk.test.ts +194 -0
  225. package/packages/arcgis-rest-geocoding/test/geocode.test.ts +249 -0
  226. package/packages/arcgis-rest-geocoding/test/helpers.test.ts +85 -0
  227. package/packages/arcgis-rest-geocoding/test/mocks/responses.ts +637 -0
  228. package/packages/arcgis-rest-geocoding/test/reverse.test.ts +126 -0
  229. package/packages/arcgis-rest-geocoding/test/suggest.test.ts +53 -0
  230. package/packages/arcgis-rest-geocoding/tsconfig.json +6 -0
  231. package/packages/arcgis-rest-portal/README.md +73 -0
  232. package/packages/arcgis-rest-portal/package-lock.json +11 -0
  233. package/packages/arcgis-rest-portal/package.json +64 -0
  234. package/packages/arcgis-rest-portal/src/groups/add-users.ts +140 -0
  235. package/packages/arcgis-rest-portal/src/groups/create.ts +43 -0
  236. package/packages/arcgis-rest-portal/src/groups/get.ts +184 -0
  237. package/packages/arcgis-rest-portal/src/groups/helpers.ts +14 -0
  238. package/packages/arcgis-rest-portal/src/groups/invite-users.ts +127 -0
  239. package/packages/arcgis-rest-portal/src/groups/join.ts +57 -0
  240. package/packages/arcgis-rest-portal/src/groups/notification.ts +77 -0
  241. package/packages/arcgis-rest-portal/src/groups/protect.ts +56 -0
  242. package/packages/arcgis-rest-portal/src/groups/remove-users.ts +76 -0
  243. package/packages/arcgis-rest-portal/src/groups/remove.ts +32 -0
  244. package/packages/arcgis-rest-portal/src/groups/search.ts +47 -0
  245. package/packages/arcgis-rest-portal/src/groups/update-user-membership.ts +63 -0
  246. package/packages/arcgis-rest-portal/src/groups/update.ts +39 -0
  247. package/packages/arcgis-rest-portal/src/index.ts +66 -0
  248. package/packages/arcgis-rest-portal/src/items/add.ts +138 -0
  249. package/packages/arcgis-rest-portal/src/items/content.ts +67 -0
  250. package/packages/arcgis-rest-portal/src/items/create.ts +150 -0
  251. package/packages/arcgis-rest-portal/src/items/export.ts +80 -0
  252. package/packages/arcgis-rest-portal/src/items/get.ts +437 -0
  253. package/packages/arcgis-rest-portal/src/items/helpers.ts +275 -0
  254. package/packages/arcgis-rest-portal/src/items/protect.ts +41 -0
  255. package/packages/arcgis-rest-portal/src/items/reassign.ts +61 -0
  256. package/packages/arcgis-rest-portal/src/items/remove.ts +135 -0
  257. package/packages/arcgis-rest-portal/src/items/search.ts +25 -0
  258. package/packages/arcgis-rest-portal/src/items/update.ts +184 -0
  259. package/packages/arcgis-rest-portal/src/items/upload.ts +125 -0
  260. package/packages/arcgis-rest-portal/src/orgs/notification.ts +131 -0
  261. package/packages/arcgis-rest-portal/src/sharing/access.ts +84 -0
  262. package/packages/arcgis-rest-portal/src/sharing/helpers.ts +81 -0
  263. package/packages/arcgis-rest-portal/src/sharing/is-item-shared-with-group.ts +42 -0
  264. package/packages/arcgis-rest-portal/src/sharing/share-item-with-group.ts +319 -0
  265. package/packages/arcgis-rest-portal/src/sharing/unshare-item-with-group.ts +105 -0
  266. package/packages/arcgis-rest-portal/src/users/get-user-tags.ts +52 -0
  267. package/packages/arcgis-rest-portal/src/users/get-user-url.ts +18 -0
  268. package/packages/arcgis-rest-portal/src/users/get-user.ts +58 -0
  269. package/packages/arcgis-rest-portal/src/users/invitation.ts +156 -0
  270. package/packages/arcgis-rest-portal/src/users/notification.ts +68 -0
  271. package/packages/arcgis-rest-portal/src/users/search-users.ts +37 -0
  272. package/packages/arcgis-rest-portal/src/users/update.ts +66 -0
  273. package/packages/arcgis-rest-portal/src/util/SearchQueryBuilder.ts +374 -0
  274. package/packages/arcgis-rest-portal/src/util/array.ts +16 -0
  275. package/packages/arcgis-rest-portal/src/util/generic-search.ts +99 -0
  276. package/packages/arcgis-rest-portal/src/util/get-portal-settings.ts +45 -0
  277. package/packages/arcgis-rest-portal/src/util/get-portal-url.ts +27 -0
  278. package/packages/arcgis-rest-portal/src/util/get-portal.ts +52 -0
  279. package/packages/arcgis-rest-portal/src/util/get-subscription-info.ts +43 -0
  280. package/packages/arcgis-rest-portal/src/util/scrub-control-chars.ts +12 -0
  281. package/packages/arcgis-rest-portal/src/util/search.ts +42 -0
  282. package/packages/arcgis-rest-portal/test/groups/add-users.test.ts +239 -0
  283. package/packages/arcgis-rest-portal/test/groups/crud.test.ts +180 -0
  284. package/packages/arcgis-rest-portal/test/groups/get.test.ts +176 -0
  285. package/packages/arcgis-rest-portal/test/groups/invite-users.test.ts +149 -0
  286. package/packages/arcgis-rest-portal/test/groups/join.test.ts +72 -0
  287. package/packages/arcgis-rest-portal/test/groups/notification.test.ts +112 -0
  288. package/packages/arcgis-rest-portal/test/groups/protect.test.ts +72 -0
  289. package/packages/arcgis-rest-portal/test/groups/remove-users.test.ts +140 -0
  290. package/packages/arcgis-rest-portal/test/groups/search.test.ts +151 -0
  291. package/packages/arcgis-rest-portal/test/groups/update-user-membership.test.ts +62 -0
  292. package/packages/arcgis-rest-portal/test/items/add.test.ts +323 -0
  293. package/packages/arcgis-rest-portal/test/items/content.test.ts +156 -0
  294. package/packages/arcgis-rest-portal/test/items/create.test.ts +399 -0
  295. package/packages/arcgis-rest-portal/test/items/export.test.ts +122 -0
  296. package/packages/arcgis-rest-portal/test/items/get.test.ts +583 -0
  297. package/packages/arcgis-rest-portal/test/items/helpers.test.ts +60 -0
  298. package/packages/arcgis-rest-portal/test/items/protect.test.ts +122 -0
  299. package/packages/arcgis-rest-portal/test/items/reassign.test.ts +131 -0
  300. package/packages/arcgis-rest-portal/test/items/remove.test.ts +238 -0
  301. package/packages/arcgis-rest-portal/test/items/search.test.ts +272 -0
  302. package/packages/arcgis-rest-portal/test/items/update.test.ts +554 -0
  303. package/packages/arcgis-rest-portal/test/items/upload.test.ts +282 -0
  304. package/packages/arcgis-rest-portal/test/mocks/groups/responses.ts +208 -0
  305. package/packages/arcgis-rest-portal/test/mocks/items/foo.zip +0 -0
  306. package/packages/arcgis-rest-portal/test/mocks/items/item.ts +526 -0
  307. package/packages/arcgis-rest-portal/test/mocks/items/resources.ts +38 -0
  308. package/packages/arcgis-rest-portal/test/mocks/items/search.ts +121 -0
  309. package/packages/arcgis-rest-portal/test/mocks/portal/response.ts +126 -0
  310. package/packages/arcgis-rest-portal/test/mocks/portal/settings-response.ts +56 -0
  311. package/packages/arcgis-rest-portal/test/mocks/sharing/sharing.ts +18 -0
  312. package/packages/arcgis-rest-portal/test/mocks/users/invitation.ts +70 -0
  313. package/packages/arcgis-rest-portal/test/mocks/users/notification.ts +34 -0
  314. package/packages/arcgis-rest-portal/test/mocks/users/user-search.ts +388 -0
  315. package/packages/arcgis-rest-portal/test/mocks/users/user-tags.ts +5 -0
  316. package/packages/arcgis-rest-portal/test/mocks/users/user.ts +174 -0
  317. package/packages/arcgis-rest-portal/test/orgs/notification.test.ts +142 -0
  318. package/packages/arcgis-rest-portal/test/sharing/access.test.ts +162 -0
  319. package/packages/arcgis-rest-portal/test/sharing/helpers.test.ts +55 -0
  320. package/packages/arcgis-rest-portal/test/sharing/share-item-with-group.test.ts +1325 -0
  321. package/packages/arcgis-rest-portal/test/sharing/unshare-item-with-group.test.ts +288 -0
  322. package/packages/arcgis-rest-portal/test/users/get-user-tags.test.ts +71 -0
  323. package/packages/arcgis-rest-portal/test/users/get-user-url.test.ts +40 -0
  324. package/packages/arcgis-rest-portal/test/users/get-user.test.ts +90 -0
  325. package/packages/arcgis-rest-portal/test/users/invitation.test.ts +127 -0
  326. package/packages/arcgis-rest-portal/test/users/notification.test.ts +77 -0
  327. package/packages/arcgis-rest-portal/test/users/search.test.ts +42 -0
  328. package/packages/arcgis-rest-portal/test/users/update.test.ts +151 -0
  329. package/packages/arcgis-rest-portal/test/util/SearchQueryBuilder.test.ts +340 -0
  330. package/packages/arcgis-rest-portal/test/util/array.test.ts +30 -0
  331. package/packages/arcgis-rest-portal/test/util/get-portal-settings.test.ts +68 -0
  332. package/packages/arcgis-rest-portal/test/util/get-portal-url.test.ts +37 -0
  333. package/packages/arcgis-rest-portal/test/util/portal.test.ts +148 -0
  334. package/packages/arcgis-rest-portal/test/util/scrub-control-chars.test.ts +22 -0
  335. package/packages/arcgis-rest-portal/tsconfig.json +6 -0
  336. package/packages/arcgis-rest-request/README.md +72 -0
  337. package/packages/arcgis-rest-request/package-lock.json +11 -0
  338. package/packages/arcgis-rest-request/package.json +60 -0
  339. package/packages/arcgis-rest-request/src/index.ts +25 -0
  340. package/packages/arcgis-rest-request/src/request.ts +413 -0
  341. package/packages/arcgis-rest-request/src/utils/ArcGISRequestError.ts +76 -0
  342. package/packages/arcgis-rest-request/src/utils/ErrorTypes.ts +29 -0
  343. package/packages/arcgis-rest-request/src/utils/GrantTypes.ts +5 -0
  344. package/packages/arcgis-rest-request/src/utils/HTTPMethods.ts +6 -0
  345. package/packages/arcgis-rest-request/src/utils/IAuthenticationManager.ts +21 -0
  346. package/packages/arcgis-rest-request/src/utils/IFetchTokenParams.ts +11 -0
  347. package/packages/arcgis-rest-request/src/utils/IGenerateTokenParams.ts +9 -0
  348. package/packages/arcgis-rest-request/src/utils/IParamBuilder.ts +3 -0
  349. package/packages/arcgis-rest-request/src/utils/IParams.ts +6 -0
  350. package/packages/arcgis-rest-request/src/utils/IParamsBuilder.ts +5 -0
  351. package/packages/arcgis-rest-request/src/utils/IRequestOptions.ts +49 -0
  352. package/packages/arcgis-rest-request/src/utils/ITokenRequestOptions.ts +9 -0
  353. package/packages/arcgis-rest-request/src/utils/ResponseFormats.ts +10 -0
  354. package/packages/arcgis-rest-request/src/utils/append-custom-params.ts +49 -0
  355. package/packages/arcgis-rest-request/src/utils/clean-url.ts +20 -0
  356. package/packages/arcgis-rest-request/src/utils/decode-query-string.ts +27 -0
  357. package/packages/arcgis-rest-request/src/utils/encode-form-data.ts +38 -0
  358. package/packages/arcgis-rest-request/src/utils/encode-query-string.ts +35 -0
  359. package/packages/arcgis-rest-request/src/utils/process-params.ts +108 -0
  360. package/packages/arcgis-rest-request/src/utils/retryAuthError.ts +10 -0
  361. package/packages/arcgis-rest-request/src/utils/warn.ts +11 -0
  362. package/packages/arcgis-rest-request/src/utils/with-options.ts +48 -0
  363. package/packages/arcgis-rest-request/test/mocks/errors.ts +76 -0
  364. package/packages/arcgis-rest-request/test/mocks/geojson-feature-collection.ts +13 -0
  365. package/packages/arcgis-rest-request/test/mocks/param-builder.ts +7 -0
  366. package/packages/arcgis-rest-request/test/mocks/sharing-rest-info.ts +41 -0
  367. package/packages/arcgis-rest-request/test/mocks/webmap.ts +41 -0
  368. package/packages/arcgis-rest-request/test/request.test.ts +571 -0
  369. package/packages/arcgis-rest-request/test/utils/ArcGISAuthError.test.ts +191 -0
  370. package/packages/arcgis-rest-request/test/utils/ArcGISRequestError.test.ts +51 -0
  371. package/packages/arcgis-rest-request/test/utils/check-for-errors.test.ts +111 -0
  372. package/packages/arcgis-rest-request/test/utils/clean-url.test.ts +50 -0
  373. package/packages/arcgis-rest-request/test/utils/encode-form-data.test.ts +133 -0
  374. package/packages/arcgis-rest-request/test/utils/encode-query-string.test.ts +18 -0
  375. package/packages/arcgis-rest-request/test/utils/process-params.test.ts +205 -0
  376. package/packages/arcgis-rest-request/test/utils/with-options.test.ts +133 -0
  377. package/packages/arcgis-rest-request/tsconfig.json +4 -0
  378. package/packages/arcgis-rest-routing/README.md +75 -0
  379. package/packages/arcgis-rest-routing/package-lock.json +11 -0
  380. package/packages/arcgis-rest-routing/package.json +63 -0
  381. package/packages/arcgis-rest-routing/src/helpers.ts +16 -0
  382. package/packages/arcgis-rest-routing/src/index.ts +11 -0
  383. package/packages/arcgis-rest-routing/src/solveRoute.ts +124 -0
  384. package/packages/arcgis-rest-routing/test/mocks/responses.ts +825 -0
  385. package/packages/arcgis-rest-routing/test/solveRoute.test.ts +509 -0
  386. package/packages/arcgis-rest-routing/tsconfig.json +6 -0
  387. package/packages/arcgis-rest-service-admin/README.md +73 -0
  388. package/packages/arcgis-rest-service-admin/package-lock.json +11 -0
  389. package/packages/arcgis-rest-service-admin/package.json +65 -0
  390. package/packages/arcgis-rest-service-admin/src/addTo.ts +70 -0
  391. package/packages/arcgis-rest-service-admin/src/create.ts +189 -0
  392. package/packages/arcgis-rest-service-admin/src/index.ts +11 -0
  393. package/packages/arcgis-rest-service-admin/src/update.ts +50 -0
  394. package/packages/arcgis-rest-service-admin/test/addTo.test.ts +350 -0
  395. package/packages/arcgis-rest-service-admin/test/create.test.ts +294 -0
  396. package/packages/arcgis-rest-service-admin/test/mocks/layerDefinition.ts +79 -0
  397. package/packages/arcgis-rest-service-admin/test/mocks/service.ts +81 -0
  398. package/packages/arcgis-rest-service-admin/test/update.test.ts +115 -0
  399. package/packages/arcgis-rest-service-admin/tsconfig.json +6 -0
  400. package/packages/arcgis-rest-types/README.md +66 -0
  401. package/packages/arcgis-rest-types/package.json +54 -0
  402. package/packages/arcgis-rest-types/src/feature.ts +39 -0
  403. package/packages/arcgis-rest-types/src/geometry.ts +272 -0
  404. package/packages/arcgis-rest-types/src/group.ts +72 -0
  405. package/packages/arcgis-rest-types/src/index.ts +9 -0
  406. package/packages/arcgis-rest-types/src/item.ts +81 -0
  407. package/packages/arcgis-rest-types/src/service.ts +114 -0
  408. package/packages/arcgis-rest-types/src/statisticDefinition.ts +33 -0
  409. package/packages/arcgis-rest-types/src/symbol.ts +170 -0
  410. package/packages/arcgis-rest-types/src/user.ts +49 -0
  411. package/packages/arcgis-rest-types/src/webmap.ts +1367 -0
  412. package/packages/arcgis-rest-types/tsconfig.json +10 -0
  413. package/support/changelog.js +393 -0
  414. package/support/deploy-doc-site.js +16 -0
  415. package/support/dev.sh +6 -0
  416. package/support/publish.sh +47 -0
  417. package/support/test-helpers.js +9 -0
  418. package/tsconfig.json +63 -0
  419. package/tslint.json +16 -0
  420. package/umd-base-profile.js +81 -0
  421. package/umd-production-profile.js +13 -0
@@ -0,0 +1,262 @@
1
+ const path = require("path");
2
+ const fs = require("fs");
3
+ const { inspect } = require("util");
4
+ const _ = require("lodash");
5
+
6
+ const IS_DEV = process.env.ENV !== "prod";
7
+
8
+ module.exports = function(acetate) {
9
+ /**
10
+ * Load SRI hashes.
11
+ */
12
+ let srihashes;
13
+ fs.readFile("docs/src/srihashes.json", (err, data) => {
14
+ srihashes = err
15
+ ? {
16
+ packages: {}
17
+ }
18
+ : JSON.parse(data);
19
+ });
20
+
21
+ /**
22
+ * Load all .html and markdown pages in the `src` folder, assigning them a
23
+ * default layout.
24
+ */
25
+ acetate.load("**/*.+(html|md)", {
26
+ basePath: "arcgis-rest-js",
27
+ metadata: {
28
+ layout: "_layout:main"
29
+ }
30
+ });
31
+
32
+ acetate.metadata("**/*", {
33
+ isDev: IS_DEV
34
+ });
35
+
36
+ /**
37
+ * Add a different layout for guides. Add an array of `titleSegments` to go
38
+ * inbetween the page title and the "Esri REST JS" title suffix.
39
+ */
40
+ acetate.metadata("guides/**/*", {
41
+ layout: "guides/_layout:content",
42
+ titleSegments: ["Guide"]
43
+ });
44
+
45
+ /**
46
+ * Now we need to make a new query called `guides` that will be used to render
47
+ * the guide navigation.
48
+ */
49
+ acetate.query(
50
+ /**
51
+ * results will be accessible as `queries.guides` in templates
52
+ */
53
+ "guides",
54
+ /**
55
+ * start by getting all markdown pages in the `guides` folder
56
+ */
57
+ "guides/**/*.md",
58
+ /**
59
+ * Now map over each page extracting values from it into a new array.
60
+ */
61
+ page => {
62
+ return {
63
+ title: page.navTitle || page.title,
64
+ order: page.order,
65
+ group: page.group,
66
+ url: page.url
67
+ };
68
+ },
69
+ /**
70
+ * Now reduce our array from the previous step sorting the items into sections
71
+ * based on their `group` property.
72
+ */
73
+ (sections, item) => {
74
+ if (!item.group) {
75
+ return sections;
76
+ }
77
+
78
+ // does this items `section` already have a `section` in `sections`?
79
+ const idx = _.findIndex(sections, section => section.id === item.group);
80
+
81
+ if (idx >= 0) {
82
+ // if it does push this item into it.
83
+ sections[idx].items.push(item);
84
+ } else {
85
+ // if it does not push a new `section` into `sections`.
86
+ sections.push({
87
+ name: _.startCase(item.group.replace(/\d-/, "")),
88
+ id: item.group,
89
+ items: [item]
90
+ });
91
+ }
92
+
93
+ /**
94
+ * sort our sections by their `id` (which starts with a number) an sort
95
+ * each sections items by their `order` property
96
+ */
97
+ return _(sections)
98
+ .sortBy("id")
99
+ .map(section => {
100
+ section.items = _.sortBy(section.items, "order");
101
+ return section;
102
+ })
103
+ .value();
104
+ },
105
+ /**
106
+ * The initial value for the above reduce function.
107
+ */
108
+ []
109
+ );
110
+
111
+ /**
112
+ * Load the typedoc.json file as a page in Acetate. This makes the watcher
113
+ * start looking for changes and we can listen for the events later.
114
+ */
115
+ acetate.load("typedoc.json", {
116
+ basePath: "arcgis-rest-js",
117
+ metadata: {
118
+ layout: false,
119
+ prettyUrl: false
120
+ }
121
+ });
122
+
123
+ /**
124
+ * Use Acetates generate helper to generate a page for each `declaration`
125
+ * and `package` in the typedoc.json and generate the search index file
126
+ */
127
+ acetate.generate((createPage, callback) => {
128
+ fs.readFile(
129
+ path.join(acetate.root, "src", "typedoc.json"),
130
+ (e, contents) => {
131
+ const typedoc = JSON.parse(contents.toString());
132
+
133
+ const declarationPages = typedoc.declarations.map(declaration => {
134
+ return createPage.fromTemplate(
135
+ declaration.src,
136
+ path.join(acetate.sourceDir, "api", "_declaration.html"),
137
+ Object.assign({}, declaration, {
138
+ layout: "api/_layout:content"
139
+ })
140
+ );
141
+ });
142
+
143
+ const packagePages = typedoc.packages.map(package => {
144
+ return createPage.fromTemplate(
145
+ package.src,
146
+ path.join(acetate.sourceDir, "api", "_package.html"),
147
+ Object.assign({}, package, {
148
+ layout: "api/_layout:content"
149
+ })
150
+ );
151
+ });
152
+
153
+ const searchIndex = createPage.fromTemplateString(
154
+ "arcgis-rest-js/js/index.js",
155
+ `const ESRI_REST_API_REF_INDEX = ${JSON.stringify(
156
+ typedoc.quickSearchIndex
157
+ )}`,
158
+ path.join(acetate.sourceDir, "js", "index.js"),
159
+ { layout: false, prettyUrl: false }
160
+ );
161
+
162
+ // once all the pages have been generated provide them to Acetate.
163
+ Promise.all(declarationPages.concat(packagePages)).then(pages => {
164
+ callback(null, pages.concat(searchIndex));
165
+ });
166
+ }
167
+ );
168
+ });
169
+
170
+ /**
171
+ * Also register typedoc.json as a global data object called `typedoc`.
172
+ */
173
+ acetate.data("typedoc", "typedoc.json");
174
+
175
+ /**
176
+ * Register some tools for working with the typedoc output.
177
+ */
178
+ acetate.global("API_TOOLS", {
179
+ findById: function(typedoc, id) {
180
+ return typedoc.index[id];
181
+ },
182
+ findByName: function(typedoc, name) {
183
+ return typedoc.declarations.find(c => c.name === name);
184
+ },
185
+ findChildById: function(id, children) {
186
+ return children.find(c => c.id === id);
187
+ }
188
+ });
189
+
190
+ acetate.filter("findPackage", (typedoc, name) => {
191
+ return typedoc.packages.find(p => p.pkg.name === name).pkg;
192
+ });
193
+
194
+ /**
195
+ * Listen for changes, if we see a change in typedoc.json we know we need to
196
+ * regenerate all the dymanically generated pages so reload this config file.
197
+ */
198
+ acetate.on("watcher:change", page => {
199
+ if (page.src === "typedoc.json") {
200
+ acetate.reloadConfig();
201
+ }
202
+ });
203
+
204
+ /**
205
+ * Template helper for safely inspecting objects with circular references.
206
+ */
207
+ acetate.filter("inspect", function(obj) {
208
+ return inspect(obj, { depth: 3 });
209
+ });
210
+
211
+ // without the '.js' on the end, for the benefit of the AMD sample
212
+ acetate.helper("cdnUrl", function(context, package) {
213
+ return `https://unpkg.com/${
214
+ package.name
215
+ }@${package.version}/dist/umd/${package.name.replace("@esri/arcgis-rest-", "")}.umd`;
216
+ });
217
+
218
+ // <code> friendly script tag string
219
+ acetate.helper("scriptTag", function(context, package) {
220
+ return acetate.nunjucks.renderString(
221
+ `{% highlight "html" %}<script src="https://unpkg.com/${package.name}@${
222
+ package.version
223
+ }/dist/umd/${package.name.replace(
224
+ "@esri/arcgis-rest-",
225
+ ""
226
+ )}.umd.min.js"></script>{% endhighlight %}`
227
+ );
228
+ });
229
+
230
+ // CDN with SRI only if hash exists
231
+ acetate.helper("scriptTagSRI", function(context, package) {
232
+ const hash = srihashes.packages[package.name];
233
+ if (hash) {
234
+ return acetate.nunjucks.renderString(`
235
+ {%highlight "html" %}
236
+ <script src="https://unpkg.com/${package.name}@${
237
+ package.version
238
+ }/dist/umd/${package.name.replace(
239
+ "@esri/arcgis-rest-",
240
+ ""
241
+ )}.umd.min.js" integrity="${hash}" crossorigin="anonymous"></script>{% endhighlight %}`);
242
+ } else {
243
+ return "";
244
+ }
245
+ });
246
+
247
+ acetate.helper("npmInstallCmd", function(context, package) {
248
+ const peers = package.peerDependencies
249
+ ? Object.keys(package.peerDependencies).map(
250
+ pkg => `${pkg}@${package.peerDependencies[pkg]} `
251
+ )
252
+ : [];
253
+ return `npm install ${package.name} ${peers.join(" ")}`;
254
+ });
255
+
256
+ acetate.filter("stripThisFromParams", function(params) {
257
+ if (!params || !params.length) {
258
+ return [];
259
+ }
260
+ return params.filter(p => p.name !== "this");
261
+ });
262
+ };
@@ -0,0 +1,434 @@
1
+ const spawn = require("cross-spawn");
2
+ const { join } = require("path");
3
+ const { readFile, writeFile } = require("fs");
4
+ const _ = require("lodash");
5
+ const OUTPUT = join(process.cwd(), "docs", "src", `typedoc.json`);
6
+ const { prettyifyUrl } = require("acetate/lib/utils.js");
7
+ const slug = require("slug");
8
+ const minimatch = require("minimatch");
9
+ const cheerio = require("cheerio");
10
+ const MarkdownIt = require("markdown-it");
11
+ const md = new MarkdownIt();
12
+
13
+ (function generateTypeDoc() {
14
+ return new Promise((resolve, reject) => {
15
+ const typedoc = spawn(
16
+ "typedoc",
17
+ [
18
+ "-json",
19
+ OUTPUT,
20
+ "--exclude",
21
+ "**/*test.ts",
22
+ "--ignoreCompilerErrors",
23
+ "--module",
24
+ "common",
25
+ "--tsconfig",
26
+ "./tsconfig.json",
27
+ "--excludePrivate"
28
+ ],
29
+ {
30
+ stdio: "inherit"
31
+ }
32
+ );
33
+
34
+ typedoc.on("close", code => {
35
+ if (code !== 0) {
36
+ reject(code);
37
+ return;
38
+ }
39
+
40
+ readFile(OUTPUT, (error, content) => {
41
+ if (error) {
42
+ reject(error);
43
+ return;
44
+ }
45
+
46
+ resolve(JSON.parse(content.toString()));
47
+ });
48
+ });
49
+ })
50
+ .then(json => {
51
+ /**
52
+ * `json.children` will be a list of all TypeScript files in our project.
53
+ * We dont care about the files, we just need all their children so we reduce
54
+ * to a single list of everything in the entire project.
55
+ */
56
+ return json.children.reduce(
57
+ (allChildren, fileChildren) => allChildren.concat(fileChildren),
58
+ []
59
+ );
60
+ })
61
+ .then(children => {
62
+ /**
63
+ * We dont want TypeScript files that have been symlinked into `node_modules`
64
+ * folders by Lerna so ignore any child whose source file has `node_modules`
65
+ * in its `fileName`
66
+ */
67
+ return children.filter(
68
+ c => !minimatch(c.sources[0].fileName, "**/node_modules/**")
69
+ );
70
+ })
71
+ .then(children => {
72
+ /**
73
+ * We now only want children that are actual source files, not tests, so
74
+ * filter out all children without `src` in their path.
75
+ */
76
+ return children.filter(c =>
77
+ minimatch(c.sources[0].fileName, "**/src/**/*.ts")
78
+ );
79
+ })
80
+ .then(children => {
81
+ /**
82
+ * Some children might be empty so there is nothing to document in them.
83
+ * For example most `index.ts` files don't have anything besides `import`
84
+ * or `export` so we can safely filter these children out.
85
+ */
86
+ return children.filter(c => !!c.children);
87
+ })
88
+ .then(children => {
89
+ /**
90
+ * The `name` of each child is wrapped in extra quote marks remove these
91
+ * quote marks and add `.ts` back to the end of the `name`,
92
+ */
93
+ return children.map(child => {
94
+ child.name = child.name.replace(/\"/g, "") + ".ts";
95
+ return child;
96
+ });
97
+ })
98
+ .then(children => {
99
+ /**
100
+ * Now determine which `package` each of our children belongs to based on
101
+ * its name.
102
+ */
103
+ return children.map(child => {
104
+ child.name = _.first(child.name.split("/"));
105
+ child.package = child.name;
106
+ return child;
107
+ });
108
+ })
109
+ .then(children => {
110
+ /**
111
+ * `children` is currently a list of all TypeScript source files in
112
+ * `packages`. `children.children` is an array of all declarations in that
113
+ * source file. We need to concat all `children.children` arrays together
114
+ * into a giant array of all declarations in all packages.
115
+ */
116
+ return children.reduce((allChildren, child) => {
117
+ if (!child.children) {
118
+ console.log(child);
119
+ return allChildren;
120
+ }
121
+ return allChildren.concat(
122
+ child.children.map(c => {
123
+ c.package = child.package;
124
+ return c;
125
+ })
126
+ );
127
+ }, []);
128
+ })
129
+ .then(declarations => {
130
+ /**
131
+ * Next we remove all children that are not exported out of their files.
132
+ */
133
+ return declarations.filter(
134
+ declaration => declaration.flags && declaration.flags.isExported
135
+ );
136
+ })
137
+ .then(declarations => {
138
+ const blacklist = [
139
+ "genericSearch",
140
+ "appendCustomParams",
141
+ "requiresFormData",
142
+ "processParams",
143
+ "encodeParam",
144
+ "encodeQueryString",
145
+ "encodeFormData",
146
+ "warn",
147
+ "cleanUrl",
148
+ "checkForErrors",
149
+ "determineOwner",
150
+ "isItemOwner",
151
+ "isOrgAdmin"
152
+ ];
153
+ /**
154
+ * Next we remove any declarations we want to blacklist from the API ref
155
+ */
156
+ return declarations.filter(
157
+ declaration => !blacklist.includes(declaration.name)
158
+ );
159
+ })
160
+ .then(declarations => {
161
+ /**
162
+ * Now that we have a list of all declarations across the entire project
163
+ * we can begin to generate additional information about each declaration.
164
+ * For example we can now determine the `src` of the page that will
165
+ * be generated for this declaration. Each `declaration` will also have
166
+ * `children` which we can generate and define an `icon` property for. These
167
+ * additional properties, `src`, `pageUrl`, `icon` and `children` are then
168
+ * merged into the `declaration`. This also adds a `title`, `description`
169
+ * and `titleSegments` to each page which are used in the template for SEO.
170
+ */
171
+ return declarations.map(declaration => {
172
+ const abbreviatedPackageName = declaration.package.replace(
173
+ "arcgis-rest-",
174
+ ""
175
+ );
176
+ const src = `arcgis-rest-js/api/${abbreviatedPackageName}/${
177
+ declaration.name
178
+ }.html`;
179
+ let children;
180
+
181
+ if (declaration.children) {
182
+ children = declaration.children.map(child => {
183
+ child.icon = `tsd-kind-${slug(
184
+ child.kindString
185
+ ).toLowerCase()} tsd-parent-kind-${slug(
186
+ declaration.kindString
187
+ ).toLowerCase()}`;
188
+
189
+ if (child.flags.isPrivate) {
190
+ child.icon += ` tsd-is-private`;
191
+ }
192
+
193
+ if (child.flags.isProtected) {
194
+ child.icon += ` tsd-is-protected`;
195
+ }
196
+
197
+ if (child.flags.isStatic) {
198
+ child.icon += ` tsd-is-static`;
199
+ }
200
+
201
+ if (child.signatures) {
202
+ child.signatures = child.signatures.map(sig => {
203
+ sig.icon = child.icon;
204
+ return sig;
205
+ });
206
+ }
207
+
208
+ return child;
209
+ });
210
+ }
211
+
212
+ declaration.title = declaration.name;
213
+ declaration.titleSegments = ["API Reference"];
214
+ declaration.description =
215
+ declaration.comment && declaration.comment.shortText
216
+ ? cheerio
217
+ .load(md.render(declaration.comment.shortText))
218
+ .text()
219
+ .replace("\n", "")
220
+ : "API Reference documentation for ${child.name}, part of ${declaration.package}.";
221
+
222
+ return Object.assign(declaration, {
223
+ src,
224
+ pageUrl: prettyifyUrl(src),
225
+ icon: `tsd-kind-${slug(declaration.kindString).toLowerCase()}`,
226
+ children
227
+ });
228
+ });
229
+ })
230
+ .then(declarations => {
231
+ /**
232
+ * We now have a list of `declarations` that will be used to generate the
233
+ * individual API reference pages, but we still need to generate a landing
234
+ * page for each `package`. Return a new object with our `declarations` and
235
+ * a new property `packages` which is an array of every `package` with a
236
+ * page `src`, a `pageUrl`, an `icon` and a list of `declarations`. This
237
+ * also adds a `title`, `description` and `titleSegments` to each page
238
+ * which are used in the template for SEO.
239
+ */
240
+ return {
241
+ declarations,
242
+ packages: _(declarations)
243
+ .map(d => d.package)
244
+ .uniq()
245
+ .reduce((packages, package) => {
246
+ const abbreviatedPackageName = package.replace("arcgis-rest-", "");
247
+ const src = `arcgis-rest-js/api/${abbreviatedPackageName}.html`;
248
+ const pkg = require(`${process.cwd()}/packages/${package}/package.json`);
249
+
250
+ packages.push({
251
+ package,
252
+ pkg,
253
+ title: package,
254
+ description: pkg.description,
255
+ titleSegments: ["API Reference"],
256
+ name: package,
257
+ declarations: declarations
258
+ .filter(d => d.package === package)
259
+ .sort((da, db) => {
260
+ const types = [
261
+ "Class",
262
+ "Function",
263
+ "Object literal",
264
+ "Variable",
265
+ "Enumeration",
266
+ "Type alias",
267
+ "Interface"
268
+ ];
269
+
270
+ const aIndex = types.findIndex(t => da.kindString === t);
271
+ const bIndex = types.findIndex(t => db.kindString === t);
272
+
273
+ if (aIndex > bIndex) {
274
+ return 1;
275
+ } else if (aIndex < bIndex) {
276
+ return -1;
277
+ } else {
278
+ return 0;
279
+ }
280
+ }),
281
+ icon: "tsd-kind-module",
282
+ src,
283
+ pageUrl: prettyifyUrl(src)
284
+ });
285
+ return packages;
286
+ }, [])
287
+ };
288
+ })
289
+ .then(api => {
290
+ /**
291
+ * Since we generated the TypeDoc for the entire project at once each
292
+ * `declaration` has a unique numerical `id` property. We occasionally
293
+ * need to lookup a declaration by its `id` so we can prebuild an index of
294
+ * them here.
295
+ */
296
+ api.index = api.declarations.reduce((index, declaration) => {
297
+ index[declaration.id] = declaration;
298
+ return index;
299
+ }, {});
300
+
301
+ return api;
302
+ })
303
+ .then(api => {
304
+ /**
305
+ * In order to power the API reference quick search we can build an array
306
+ * of all declarations and child items
307
+ */
308
+ api.quickSearchIndex = api.declarations.reduce(
309
+ (quickSearchIndex, declaration) => {
310
+ if (declaration.children) {
311
+ quickSearchIndex = quickSearchIndex.concat(
312
+ declaration.children.map(child => {
313
+ return {
314
+ title: `${declaration.name}.${child.name}`,
315
+ url: `${declaration.pageUrl}#${child.name}`,
316
+ icon: child.icon
317
+ };
318
+ })
319
+ );
320
+ }
321
+
322
+ return quickSearchIndex.concat([
323
+ {
324
+ title: declaration.name,
325
+ url: declaration.pageUrl,
326
+ icon: declaration.icon
327
+ }
328
+ ]);
329
+ },
330
+ []
331
+ );
332
+
333
+ return api;
334
+ })
335
+ .then(api => {
336
+ /**
337
+ * Next we can sort the children of each declaration to sort by required/optional/inherited
338
+ */
339
+ api.declarations = api.declarations.map(declaration => {
340
+ if (declaration.children) {
341
+ declaration.children.sort((ca, cb) => {
342
+ const aIndex = rankChild(ca);
343
+ const bIndex = rankChild(cb);
344
+
345
+ if (aIndex > bIndex) {
346
+ return 1; // sort a below b
347
+ } else if (aIndex < bIndex) {
348
+ return -1; // sort a above b
349
+ } else {
350
+ return 0;
351
+ }
352
+ return 0;
353
+ });
354
+ }
355
+
356
+ if (declaration.groups) {
357
+ declaration.groups.forEach(group => {
358
+ if (group.children) {
359
+ group.children.sort((ca, cb) => {
360
+ const childA = declaration.children.find(c => c.id === ca);
361
+ const childB = declaration.children.find(c => c.id === cb);
362
+
363
+ const aIndex = rankChild(childA);
364
+ const bIndex = rankChild(childB);
365
+
366
+ if (aIndex > bIndex) {
367
+ return 1;
368
+ } else if (aIndex < bIndex) {
369
+ return -1;
370
+ } else {
371
+ return 0;
372
+ }
373
+ return 0;
374
+ });
375
+ }
376
+ });
377
+ }
378
+
379
+ return declaration;
380
+ });
381
+
382
+ return api;
383
+ })
384
+ .then(api => {
385
+ /**
386
+ * Our final object looks like this:
387
+ *
388
+ * {
389
+ * packages: [Array of packages.],
390
+ * declarations: [Array of each exported declaration accross all source files.]
391
+ * index: { Object mapping each declaration.id as a key with the declaration as its value}
392
+ * }
393
+ *
394
+ * We now export this to the Acetate source directory.
395
+ */
396
+ return new Promise((resolve, reject) => {
397
+ writeFile(OUTPUT, JSON.stringify(api, null, 2), e => {
398
+ if (e) {
399
+ reject(e);
400
+ return;
401
+ }
402
+
403
+ resolve(api);
404
+ });
405
+ });
406
+ })
407
+ .catch(e => {
408
+ console.error(e);
409
+ });
410
+ })();
411
+
412
+ function rankChild(child) {
413
+ const { isPrivate, isPublic, isOptional, isStatic } = child
414
+ ? child.flags
415
+ : {};
416
+
417
+ const isInherited = child.inheritedFrom ? true : false;
418
+
419
+ let score = 0;
420
+
421
+ if (isPrivate) {
422
+ score += 30;
423
+ }
424
+ if (isStatic) {
425
+ score -= 15;
426
+ }
427
+ if (!isInherited) {
428
+ score -= 5;
429
+ }
430
+ if (!isOptional) {
431
+ score -= 15;
432
+ }
433
+ return score;
434
+ }