delectusnon 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 (276) hide show
  1. package/.prettierignore +2 -0
  2. package/.travis.yml +33 -0
  3. package/.vscode/launch.json +24 -0
  4. package/.vscode/settings.json +3 -0
  5. package/demos/ago-node-cli/README.md +29 -0
  6. package/demos/ago-node-cli/ago.js +32 -0
  7. package/demos/ago-node-cli/index.js +11 -0
  8. package/demos/ago-node-cli/lib/item-export-command.js +48 -0
  9. package/demos/ago-node-cli/lib/item-search-command.js +35 -0
  10. package/demos/ago-node-cli/package-lock.json +172 -0
  11. package/demos/ago-node-cli/package.json +30 -0
  12. package/demos/attachments/README.md +5 -0
  13. package/demos/attachments/index.html +164 -0
  14. package/demos/attachments/package-lock.json +182 -0
  15. package/demos/attachments/package.json +18 -0
  16. package/demos/batch-geocoder-node/NYC_Restaurant_Inspection_Results.csv +100 -0
  17. package/demos/batch-geocoder-node/README.md +15 -0
  18. package/demos/batch-geocoder-node/batch-geocode.js +118 -0
  19. package/demos/batch-geocoder-node/config-template.js +18 -0
  20. package/demos/batch-geocoder-node/package-lock.json +116 -0
  21. package/demos/batch-geocoder-node/package.json +39 -0
  22. package/demos/express/README.md +10 -0
  23. package/demos/express/config.json.template +3 -0
  24. package/demos/express/package-lock.json +473 -0
  25. package/demos/express/package.json +18 -0
  26. package/demos/express/server.js +28 -0
  27. package/demos/feature-service-browser/README.md +6 -0
  28. package/demos/feature-service-browser/index.html +122 -0
  29. package/demos/feature-service-browser/package-lock.json +182 -0
  30. package/demos/feature-service-browser/package.json +18 -0
  31. package/demos/geocoder-browser/README.md +10 -0
  32. package/demos/geocoder-browser/config.js.template +1 -0
  33. package/demos/geocoder-browser/index.html +131 -0
  34. package/demos/geocoder-browser/package-lock.json +182 -0
  35. package/demos/geocoder-browser/package.json +19 -0
  36. package/demos/geocoder-browser/post-sign-in.html +25 -0
  37. package/demos/jsapi-integration/README.md +8 -0
  38. package/demos/jsapi-integration/config.js +6 -0
  39. package/demos/jsapi-integration/index.html +79 -0
  40. package/demos/jsapi-integration/package-lock.json +184 -0
  41. package/demos/jsapi-integration/package.json +19 -0
  42. package/demos/oauth2-browser/README.md +12 -0
  43. package/demos/oauth2-browser/authenticate.html +32 -0
  44. package/demos/oauth2-browser/config.js.template +6 -0
  45. package/demos/oauth2-browser/index.html +202 -0
  46. package/demos/oauth2-browser/logo.svg +4 -0
  47. package/demos/oauth2-browser/package-lock.json +163 -0
  48. package/demos/oauth2-browser/package.json +18 -0
  49. package/demos/oauth2-browser/style.css +36 -0
  50. package/demos/oauth2-browser-retry/README.md +25 -0
  51. package/demos/oauth2-browser-retry/authenticate.html +21 -0
  52. package/demos/oauth2-browser-retry/index.html +116 -0
  53. package/demos/oauth2-browser-retry/logo.svg +4 -0
  54. package/demos/vue/.env.example +11 -0
  55. package/demos/vue/.eslintrc.js +17 -0
  56. package/demos/vue/.postcssrc.js +5 -0
  57. package/demos/vue/README.md +17 -0
  58. package/demos/vue/babel.config.js +3 -0
  59. package/demos/vue/package-lock.json +11323 -0
  60. package/demos/vue/package.json +33 -0
  61. package/demos/vue/public/favicon.ico +0 -0
  62. package/demos/vue/public/index.html +24 -0
  63. package/demos/vue/src/assets/logo.svg +29 -0
  64. package/demos/vue/src/components/App.vue +308 -0
  65. package/demos/vue/src/components/Authenticate.vue +65 -0
  66. package/demos/vue/src/components/Loader.vue +230 -0
  67. package/demos/vue/src/main.js +92 -0
  68. package/docs/FAQ.md +28 -0
  69. package/docs/HISTORY.md +62 -0
  70. package/docs/acetate.config.js +223 -0
  71. package/docs/build-typedoc.js +301 -0
  72. package/docs/src/_layout.html +82 -0
  73. package/docs/src/api/_declaration.html +496 -0
  74. package/docs/src/api/_layout.html +127 -0
  75. package/docs/src/api/_package.html +13 -0
  76. package/docs/src/api/index.html +23 -0
  77. package/docs/src/guides/_layout.html +24 -0
  78. package/docs/src/guides/amd-requirejs-dojo.md +40 -0
  79. package/docs/src/guides/babel-and-rollup.md +30 -0
  80. package/docs/src/guides/babel-and-webpack.md +30 -0
  81. package/docs/src/guides/browser-authentication.md +31 -0
  82. package/docs/src/guides/browserify.md +9 -0
  83. package/docs/src/guides/cli-authentication.md +9 -0
  84. package/docs/src/guides/client-server-authentication.md +9 -0
  85. package/docs/src/guides/from-a-cdn.md +36 -0
  86. package/docs/src/guides/index.md +52 -0
  87. package/docs/src/guides/node.md +70 -0
  88. package/docs/src/guides/package-overview.md +8 -0
  89. package/docs/src/guides/server-authentication.md +9 -0
  90. package/docs/src/guides/typescript-and-webpack.md +9 -0
  91. package/docs/src/img/icons.png +0 -0
  92. package/docs/src/img/icons@2x.png +0 -0
  93. package/docs/src/index.html +12 -0
  94. package/docs/src/js/api-search.js +112 -0
  95. package/docs/src/js/nav-toggle.js +41 -0
  96. package/docs/src/sass/_highlight.scss +96 -0
  97. package/docs/src/sass/_icons.scss +157 -0
  98. package/docs/src/sass/style.scss +169 -0
  99. package/jasmine.json +7 -0
  100. package/karma.conf.js +100 -0
  101. package/lerna.json +8 -0
  102. package/notes/README.md +88 -0
  103. package/package.json +88 -0
  104. package/packages/arcgis-rest-auth/README.md +64 -0
  105. package/packages/arcgis-rest-auth/package-lock.json +11 -0
  106. package/packages/arcgis-rest-auth/package.json +51 -0
  107. package/packages/arcgis-rest-auth/src/ApplicationSession.ts +109 -0
  108. package/packages/arcgis-rest-auth/src/UserSession.ts +873 -0
  109. package/packages/arcgis-rest-auth/src/authenticated-request-options.ts +24 -0
  110. package/packages/arcgis-rest-auth/src/fetch-token.ts +52 -0
  111. package/packages/arcgis-rest-auth/src/generate-token.ts +39 -0
  112. package/packages/arcgis-rest-auth/src/index.ts +8 -0
  113. package/packages/arcgis-rest-auth/test/ApplicationSession.test.ts +124 -0
  114. package/packages/arcgis-rest-auth/test/UserSession.test.ts +995 -0
  115. package/packages/arcgis-rest-auth/test/fetchToken.test.ts +112 -0
  116. package/packages/arcgis-rest-auth/test/generateToken.test.ts +130 -0
  117. package/packages/arcgis-rest-auth/test/utils.ts +14 -0
  118. package/packages/arcgis-rest-auth/tsconfig.json +6 -0
  119. package/packages/arcgis-rest-common-types/README.md +61 -0
  120. package/packages/arcgis-rest-common-types/package.json +38 -0
  121. package/packages/arcgis-rest-common-types/src/group.ts +54 -0
  122. package/packages/arcgis-rest-common-types/src/index.ts +467 -0
  123. package/packages/arcgis-rest-common-types/src/item.ts +45 -0
  124. package/packages/arcgis-rest-common-types/src/webmap.ts +1232 -0
  125. package/packages/arcgis-rest-common-types/tsconfig.json +11 -0
  126. package/packages/arcgis-rest-feature-service/README.md +70 -0
  127. package/packages/arcgis-rest-feature-service/package-lock.json +11 -0
  128. package/packages/arcgis-rest-feature-service/package.json +50 -0
  129. package/packages/arcgis-rest-feature-service/src/add.ts +81 -0
  130. package/packages/arcgis-rest-feature-service/src/addAttachment.ts +65 -0
  131. package/packages/arcgis-rest-feature-service/src/delete.ts +85 -0
  132. package/packages/arcgis-rest-feature-service/src/deleteAttachments.ts +68 -0
  133. package/packages/arcgis-rest-feature-service/src/getAttachments.ts +64 -0
  134. package/packages/arcgis-rest-feature-service/src/helpers.ts +80 -0
  135. package/packages/arcgis-rest-feature-service/src/index.ts +12 -0
  136. package/packages/arcgis-rest-feature-service/src/query.ts +172 -0
  137. package/packages/arcgis-rest-feature-service/src/queryRelated.ts +91 -0
  138. package/packages/arcgis-rest-feature-service/src/update.ts +81 -0
  139. package/packages/arcgis-rest-feature-service/src/updateAttachment.ts +74 -0
  140. package/packages/arcgis-rest-feature-service/test/attachments.test.ts +203 -0
  141. package/packages/arcgis-rest-feature-service/test/features.test.ts +252 -0
  142. package/packages/arcgis-rest-feature-service/test/mocks/feature.ts +279 -0
  143. package/packages/arcgis-rest-feature-service/test/mocks/foo.txt +1 -0
  144. package/packages/arcgis-rest-feature-service/tsconfig.json +6 -0
  145. package/packages/arcgis-rest-feature-service-admin/README.md +66 -0
  146. package/packages/arcgis-rest-feature-service-admin/package-lock.json +11 -0
  147. package/packages/arcgis-rest-feature-service-admin/package.json +53 -0
  148. package/packages/arcgis-rest-feature-service-admin/src/addTo.ts +70 -0
  149. package/packages/arcgis-rest-feature-service-admin/src/create.ts +195 -0
  150. package/packages/arcgis-rest-feature-service-admin/src/index.ts +2 -0
  151. package/packages/arcgis-rest-feature-service-admin/test/addTo.test.ts +310 -0
  152. package/packages/arcgis-rest-feature-service-admin/test/create.test.ts +412 -0
  153. package/packages/arcgis-rest-feature-service-admin/test/mocks/move.ts +14 -0
  154. package/packages/arcgis-rest-feature-service-admin/test/mocks/service.ts +72 -0
  155. package/packages/arcgis-rest-feature-service-admin/tsconfig.json +6 -0
  156. package/packages/arcgis-rest-geocoder/README.md +79 -0
  157. package/packages/arcgis-rest-geocoder/package-lock.json +11 -0
  158. package/packages/arcgis-rest-geocoder/package.json +52 -0
  159. package/packages/arcgis-rest-geocoder/src/bulk.ts +102 -0
  160. package/packages/arcgis-rest-geocoder/src/geocode.ts +117 -0
  161. package/packages/arcgis-rest-geocoder/src/helpers.ts +79 -0
  162. package/packages/arcgis-rest-geocoder/src/index.ts +8 -0
  163. package/packages/arcgis-rest-geocoder/src/reverse.ts +84 -0
  164. package/packages/arcgis-rest-geocoder/src/suggest.ts +72 -0
  165. package/packages/arcgis-rest-geocoder/test/bulk.test.ts +113 -0
  166. package/packages/arcgis-rest-geocoder/test/geocode.test.ts +121 -0
  167. package/packages/arcgis-rest-geocoder/test/helpers.test.ts +113 -0
  168. package/packages/arcgis-rest-geocoder/test/mocks/responses.ts +591 -0
  169. package/packages/arcgis-rest-geocoder/test/reverse.test.ts +126 -0
  170. package/packages/arcgis-rest-geocoder/test/suggest.test.ts +77 -0
  171. package/packages/arcgis-rest-geocoder/tsconfig.json +6 -0
  172. package/packages/arcgis-rest-groups/README.md +64 -0
  173. package/packages/arcgis-rest-groups/package-lock.json +11 -0
  174. package/packages/arcgis-rest-groups/package.json +52 -0
  175. package/packages/arcgis-rest-groups/src/create.ts +34 -0
  176. package/packages/arcgis-rest-groups/src/get.ts +95 -0
  177. package/packages/arcgis-rest-groups/src/helpers.ts +26 -0
  178. package/packages/arcgis-rest-groups/src/index.ts +11 -0
  179. package/packages/arcgis-rest-groups/src/notification.ts +77 -0
  180. package/packages/arcgis-rest-groups/src/protect.ts +40 -0
  181. package/packages/arcgis-rest-groups/src/remove.ts +23 -0
  182. package/packages/arcgis-rest-groups/src/search.ts +64 -0
  183. package/packages/arcgis-rest-groups/src/update.ts +36 -0
  184. package/packages/arcgis-rest-groups/test/crud.test.ts +104 -0
  185. package/packages/arcgis-rest-groups/test/get.test.ts +101 -0
  186. package/packages/arcgis-rest-groups/test/mocks/responses.ts +141 -0
  187. package/packages/arcgis-rest-groups/test/notification.test.ts +102 -0
  188. package/packages/arcgis-rest-groups/test/protect.test.ts +64 -0
  189. package/packages/arcgis-rest-groups/test/search.test.ts +85 -0
  190. package/packages/arcgis-rest-groups/tsconfig.json +6 -0
  191. package/packages/arcgis-rest-items/README.md +66 -0
  192. package/packages/arcgis-rest-items/package-lock.json +11 -0
  193. package/packages/arcgis-rest-items/package.json +52 -0
  194. package/packages/arcgis-rest-items/src/add.ts +103 -0
  195. package/packages/arcgis-rest-items/src/create.ts +110 -0
  196. package/packages/arcgis-rest-items/src/get.ts +79 -0
  197. package/packages/arcgis-rest-items/src/helpers.ts +147 -0
  198. package/packages/arcgis-rest-items/src/index.ts +11 -0
  199. package/packages/arcgis-rest-items/src/protect.ts +38 -0
  200. package/packages/arcgis-rest-items/src/remove.ts +58 -0
  201. package/packages/arcgis-rest-items/src/search.ts +78 -0
  202. package/packages/arcgis-rest-items/src/update.ts +134 -0
  203. package/packages/arcgis-rest-items/test/add.test.ts +256 -0
  204. package/packages/arcgis-rest-items/test/create.test.ts +371 -0
  205. package/packages/arcgis-rest-items/test/get.test.ts +181 -0
  206. package/packages/arcgis-rest-items/test/mocks/foo.zip +0 -0
  207. package/packages/arcgis-rest-items/test/mocks/item.ts +33 -0
  208. package/packages/arcgis-rest-items/test/mocks/resources.ts +31 -0
  209. package/packages/arcgis-rest-items/test/mocks/search.ts +63 -0
  210. package/packages/arcgis-rest-items/test/protect.test.ts +122 -0
  211. package/packages/arcgis-rest-items/test/remove.test.ts +161 -0
  212. package/packages/arcgis-rest-items/test/search.test.ts +159 -0
  213. package/packages/arcgis-rest-items/test/update.test.ts +450 -0
  214. package/packages/arcgis-rest-items/tsconfig.json +6 -0
  215. package/packages/arcgis-rest-request/README.md +65 -0
  216. package/packages/arcgis-rest-request/package-lock.json +11 -0
  217. package/packages/arcgis-rest-request/package.json +42 -0
  218. package/packages/arcgis-rest-request/src/index.ts +13 -0
  219. package/packages/arcgis-rest-request/src/request.ts +293 -0
  220. package/packages/arcgis-rest-request/src/utils/ArcGISAuthError.ts +67 -0
  221. package/packages/arcgis-rest-request/src/utils/ArcGISRequestError.ts +76 -0
  222. package/packages/arcgis-rest-request/src/utils/ErrorTypes.ts +29 -0
  223. package/packages/arcgis-rest-request/src/utils/check-for-errors.ts +65 -0
  224. package/packages/arcgis-rest-request/src/utils/encode-form-data.ts +34 -0
  225. package/packages/arcgis-rest-request/src/utils/encode-query-string.ts +23 -0
  226. package/packages/arcgis-rest-request/src/utils/get-portal-url.ts +25 -0
  227. package/packages/arcgis-rest-request/src/utils/get-portal.ts +45 -0
  228. package/packages/arcgis-rest-request/src/utils/process-params.ts +99 -0
  229. package/packages/arcgis-rest-request/test/mocks/errors.ts +68 -0
  230. package/packages/arcgis-rest-request/test/mocks/geojson-feature-collection.ts +13 -0
  231. package/packages/arcgis-rest-request/test/mocks/portal.ts +112 -0
  232. package/packages/arcgis-rest-request/test/mocks/sharing-rest-info.ts +41 -0
  233. package/packages/arcgis-rest-request/test/mocks/webmap.ts +41 -0
  234. package/packages/arcgis-rest-request/test/request.test.ts +299 -0
  235. package/packages/arcgis-rest-request/test/utils/ArcGISAuthError.test.ts +170 -0
  236. package/packages/arcgis-rest-request/test/utils/ArcGISRequestError.test.ts +51 -0
  237. package/packages/arcgis-rest-request/test/utils/check-for-errors.test.ts +111 -0
  238. package/packages/arcgis-rest-request/test/utils/encode-form-data.test.ts +133 -0
  239. package/packages/arcgis-rest-request/test/utils/get-portal-url.test.ts +37 -0
  240. package/packages/arcgis-rest-request/test/utils/portal.test.ts +97 -0
  241. package/packages/arcgis-rest-request/test/utils/process-params.test.ts +193 -0
  242. package/packages/arcgis-rest-request/tsconfig.json +6 -0
  243. package/packages/arcgis-rest-sharing/README.md +67 -0
  244. package/packages/arcgis-rest-sharing/package-lock.json +11 -0
  245. package/packages/arcgis-rest-sharing/package.json +57 -0
  246. package/packages/arcgis-rest-sharing/src/access.ts +85 -0
  247. package/packages/arcgis-rest-sharing/src/group-sharing.ts +211 -0
  248. package/packages/arcgis-rest-sharing/src/helpers.ts +82 -0
  249. package/packages/arcgis-rest-sharing/src/index.ts +5 -0
  250. package/packages/arcgis-rest-sharing/test/access.test.ts +154 -0
  251. package/packages/arcgis-rest-sharing/test/group-sharing.test.ts +566 -0
  252. package/packages/arcgis-rest-sharing/test/helpers.test.ts +55 -0
  253. package/packages/arcgis-rest-sharing/test/mocks/sharing.ts +18 -0
  254. package/packages/arcgis-rest-sharing/tsconfig.json +6 -0
  255. package/packages/arcgis-rest-users/README.md +71 -0
  256. package/packages/arcgis-rest-users/package-lock.json +11 -0
  257. package/packages/arcgis-rest-users/package.json +51 -0
  258. package/packages/arcgis-rest-users/src/get.ts +69 -0
  259. package/packages/arcgis-rest-users/src/index.ts +6 -0
  260. package/packages/arcgis-rest-users/src/invitation.ts +166 -0
  261. package/packages/arcgis-rest-users/src/notification.ts +73 -0
  262. package/packages/arcgis-rest-users/test/get.test.ts +99 -0
  263. package/packages/arcgis-rest-users/test/invitation.test.ts +169 -0
  264. package/packages/arcgis-rest-users/test/mocks/invitation.ts +70 -0
  265. package/packages/arcgis-rest-users/test/mocks/notification.ts +34 -0
  266. package/packages/arcgis-rest-users/test/mocks/user.ts +173 -0
  267. package/packages/arcgis-rest-users/test/notification.test.ts +83 -0
  268. package/packages/arcgis-rest-users/tsconfig.json +6 -0
  269. package/support/changelog.js +394 -0
  270. package/support/deploy-doc-site.js +16 -0
  271. package/support/publish.sh +43 -0
  272. package/support/test-helpers.js +8 -0
  273. package/tsconfig.json +69 -0
  274. package/tslint.json +15 -0
  275. package/umd-base-profile.js +82 -0
  276. package/umd-production-profile.js +13 -0
@@ -0,0 +1,172 @@
1
+ /* Copyright (c) 2017 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import {
5
+ ISpatialReference,
6
+ IFeatureSet,
7
+ IFeature,
8
+ esriUnits,
9
+ IExtent
10
+ } from "@esri/arcgis-rest-common-types";
11
+ import { request, IRequestOptions } from "@esri/arcgis-rest-request";
12
+
13
+ import { ISharedQueryParams, appendCustomParams } from "./helpers";
14
+ /**
15
+ * Request options to fetch a feature by id.
16
+ */
17
+ export interface IFeatureRequestOptions extends IRequestOptions {
18
+ /**
19
+ * Layer service url.
20
+ */
21
+ url: string;
22
+ /**
23
+ * Unique identifier of the feature.
24
+ */
25
+ id: number;
26
+ }
27
+
28
+ export interface IStatisticDefinition {
29
+ /**
30
+ * Statistical operation to perform (count, sum, min, max, avg, stddev, var).
31
+ */
32
+ statisticType: "count" | "sum" | "min" | "max" | "avg" | "stddev" | "var";
33
+ /**
34
+ * Field on which to perform the statistical operation.
35
+ */
36
+ onStatisticField: string;
37
+ /**
38
+ * Field name for the returned statistic field. If outStatisticFieldName is empty or missing, the server will assign one. A valid field name can only contain alphanumeric characters and an underscore. If the outStatisticFieldName is a reserved keyword of the underlying DBMS, the operation can fail. Try specifying an alternative outStatisticFieldName.
39
+ */
40
+ outStatisticFieldName: string;
41
+ }
42
+
43
+ /**
44
+ * feature query request options. See [REST Documentation](https://developers.arcgis.com/rest/services-reference/query-feature-service-layer-.htm) for more information.
45
+ */
46
+ export interface IQueryFeaturesRequestOptions
47
+ extends ISharedQueryParams,
48
+ IRequestOptions {
49
+ /**
50
+ * Layer service url.
51
+ */
52
+ url: string;
53
+ objectIds?: number[];
54
+ relationParam?: string;
55
+ // NOTE: either time=1199145600000 or time=1199145600000, 1230768000000
56
+ time?: number | number[];
57
+ distance?: number;
58
+ units?: esriUnits;
59
+ outFields?: "*" | string[];
60
+ returnGeometry?: boolean;
61
+ maxAllowableOffset?: number;
62
+ geometryPrecision?: number;
63
+ // NOTE: either WKID or ISpatialReference
64
+ outSR?: string | ISpatialReference;
65
+ gdbVersion?: string;
66
+ returnDistinctValues?: boolean;
67
+ returnIdsOnly?: boolean;
68
+ returnCountOnly?: boolean;
69
+ returnExtentOnly?: boolean;
70
+ orderByFields?: string;
71
+ groupByFieldsForStatistics?: string;
72
+ outStatistics?: IStatisticDefinition[];
73
+ returnZ?: boolean;
74
+ returnM?: boolean;
75
+ multipatchOption?: "xyFootprint";
76
+ resultOffset?: number;
77
+ resultRecordCount?: number;
78
+ // TODO: IQuantizationParameters?
79
+ quantizationParameters?: any;
80
+ returnCentroid?: boolean;
81
+ resultType?: "none" | "standard" | "tile";
82
+ // to do: convert from Date() to epoch time internally
83
+ historicMoment?: number;
84
+ returnTrueCurves?: false;
85
+ sqlFormat?: "none" | "standard" | "native";
86
+ returnExceededLimitFeatures?: boolean;
87
+ }
88
+
89
+ export interface IQueryFeaturesResponse extends IFeatureSet {
90
+ exceededTransferLimit?: boolean;
91
+ }
92
+
93
+ export interface IQueryResponse {
94
+ count?: number;
95
+ extent?: IExtent;
96
+ objectIdFieldName?: string;
97
+ objectIds?: number[];
98
+ }
99
+
100
+ /**
101
+ * Get a feature by id.
102
+ *
103
+ * ```js
104
+ * import { getFeature } from '@esri/arcgis-rest-feature-service';
105
+ *
106
+ * const url = "https://services.arcgis.com/V6ZHFr6zdgNZuVG0/arcgis/rest/services/Landscape_Trees/FeatureServer/0";
107
+ *
108
+ * getFeature({
109
+ * url,
110
+ * id: 42
111
+ * }).then(feature => {
112
+ * console.log(feature.attributes.FID); // 42
113
+ * });
114
+ * ```
115
+ *
116
+ * @param requestOptions - Options for the request
117
+ * @returns A Promise that will resolve with the feature.
118
+ */
119
+ export function getFeature(
120
+ requestOptions: IFeatureRequestOptions
121
+ ): Promise<IFeature> {
122
+ const url = `${requestOptions.url}/${requestOptions.id}`;
123
+
124
+ // default to a GET request
125
+ const options: IFeatureRequestOptions = {
126
+ ...{ httpMethod: "GET" },
127
+ ...requestOptions
128
+ };
129
+ return request(url, options).then((response: any) => response.feature);
130
+ }
131
+
132
+ /**
133
+ * Query a feature service. See [REST Documentation](https://developers.arcgis.com/rest/services-reference/query-feature-service-layer-.htm) for more information.
134
+ *
135
+ * ```js
136
+ * import { queryFeatures } from '@esri/arcgis-rest-feature-service';
137
+ *
138
+ * const url = "http://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/3";
139
+ *
140
+ * queryFeatures({
141
+ * url,
142
+ * where: "STATE_NAME = 'Alaska"
143
+ * }).then(result => {
144
+ * console.log(result.features); // array of features
145
+ * });
146
+ * ```
147
+ *
148
+ * @param requestOptions - Options for the request
149
+ * @returns A Promise that will resolve with the query response.
150
+ */
151
+ export function queryFeatures(
152
+ requestOptions: IQueryFeaturesRequestOptions
153
+ ): Promise<IQueryFeaturesResponse | IQueryResponse> {
154
+ // default to a GET request
155
+ const options: IQueryFeaturesRequestOptions = {
156
+ params: {},
157
+ httpMethod: "GET",
158
+ url: requestOptions.url,
159
+ ...requestOptions
160
+ };
161
+
162
+ appendCustomParams(requestOptions, options);
163
+
164
+ // set default query parameters
165
+ if (!options.params.where) {
166
+ options.params.where = "1=1";
167
+ }
168
+ if (!options.params.outFields) {
169
+ options.params.outFields = "*";
170
+ }
171
+ return request(`${options.url}/query`, options);
172
+ }
@@ -0,0 +1,91 @@
1
+ /* Copyright (c) 2018 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import {
5
+ ISpatialReference,
6
+ IFeature,
7
+ IHasZM,
8
+ esriGeometryType,
9
+ IField
10
+ } from "@esri/arcgis-rest-common-types";
11
+ import { request, IRequestOptions } from "@esri/arcgis-rest-request";
12
+ import { appendCustomParams } from "./helpers";
13
+
14
+ /**
15
+ * Related record query request options. Additional arguments can be passed via the [params](/arcgis-rest-js/api/feature-service/IQueryRelatedRequestOptions/#params) property. See the [REST Documentation](https://developers.arcgis.com/rest/services-reference/query-related-feature-service-.htm) for more information and a full list of parameters.
16
+ */
17
+ export interface IQueryRelatedRequestOptions extends IRequestOptions {
18
+ url: string;
19
+ relationshipId?: number;
20
+ objectIds?: number[];
21
+ outFields?: "*" | string[];
22
+ definitionExpression?: string;
23
+ }
24
+
25
+ /**
26
+ * Related record data structure
27
+ */
28
+
29
+ export interface IRelatedRecordGroup {
30
+ objectId: number;
31
+ relatedRecords?: IFeature[];
32
+ count?: number;
33
+ }
34
+
35
+ /**
36
+ * Related record response structure
37
+ */
38
+
39
+ export interface IQueryRelatedResponse extends IHasZM {
40
+ geometryType?: esriGeometryType;
41
+ spatialReference?: ISpatialReference;
42
+ fields?: IField[];
43
+ relatedRecordGroups: IRelatedRecordGroup[];
44
+ }
45
+ /**
46
+ * Query the related records for a feature service. See the [REST Documentation](https://developers.arcgis.com/rest/services-reference/query-related-records-feature-service-.htm) for more information.
47
+ *
48
+ * ```js
49
+ * import { queryRelated } from '@esri/arcgis-rest-feature-service'
50
+ *
51
+ * const url = "http://services.myserver/OrgID/ArcGIS/rest/services/Petroleum/KSPetro/FeatureServer/0"
52
+ *
53
+ * queryRelated({
54
+ * url: url,
55
+ * relationshipId: 1,
56
+ * params: { returnCountOnly: true }
57
+ * })
58
+ * .then(response => {
59
+ * console.log(response.relatedRecords)
60
+ * })
61
+ * ```
62
+ *
63
+ * @param requestOptions
64
+ * @returns A Promise that will resolve with the query response
65
+ */
66
+ export function queryRelated(
67
+ requestOptions: IQueryRelatedRequestOptions
68
+ ): Promise<IQueryRelatedResponse> {
69
+ const options: IQueryRelatedRequestOptions = {
70
+ params: {},
71
+ httpMethod: "GET",
72
+ url: requestOptions.url,
73
+ ...requestOptions
74
+ };
75
+
76
+ appendCustomParams(requestOptions, options);
77
+
78
+ if (!options.params.definitionExpression) {
79
+ options.params.definitionExpression = "1=1";
80
+ }
81
+
82
+ if (!options.params.outFields) {
83
+ options.params.outFields = "*";
84
+ }
85
+
86
+ if (!options.params.relationshipId) {
87
+ options.params.relationshipId = 0;
88
+ }
89
+
90
+ return request(`${options.url}/queryRelatedRecords`, options);
91
+ }
@@ -0,0 +1,81 @@
1
+ /* Copyright (c) 2017 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import { IFeature } from "@esri/arcgis-rest-common-types";
5
+ import { request, IRequestOptions } from "@esri/arcgis-rest-request";
6
+
7
+ import {
8
+ IEditFeaturesParams,
9
+ IEditFeatureResult,
10
+ appendCustomParams
11
+ } from "./helpers";
12
+
13
+ /**
14
+ * Update features request options. See the [REST Documentation](https://developers.arcgis.com/rest/services-reference/update-features.htm) for more information.
15
+ *
16
+ * @param url - Feature service url.
17
+ * @param updates - Array of JSON features to update.
18
+ * @param params - Query parameters to be sent to the feature service via the request.
19
+ */
20
+ export interface IUpdateFeaturesRequestOptions
21
+ extends IEditFeaturesParams,
22
+ IRequestOptions {
23
+ /**
24
+ * Feature service url.
25
+ */
26
+ url: string;
27
+ /**
28
+ * Array of JSON features to update.
29
+ */
30
+ updates: IFeature[];
31
+ }
32
+
33
+ /**
34
+ * Update features results.
35
+ */
36
+ export interface IUpdateFeaturesResult {
37
+ /**
38
+ * Array of JSON response Object(s) for each feature updated.
39
+ */
40
+ updateResults?: IEditFeatureResult[];
41
+ }
42
+
43
+ /**
44
+ * Update features request. See the [REST Documentation](https://developers.arcgis.com/rest/services-reference/update-features.htm) for more information.
45
+ *
46
+ * ```js
47
+ * import { updateFeatures } from '@esri/arcgis-rest-feature-service';
48
+ *
49
+ * const url = "https://sampleserver6.arcgisonline.com/arcgis/rest/services/ServiceRequest/FeatureServer/0";
50
+ *
51
+ * updateFeatures({
52
+ * url,
53
+ * updates: [{
54
+ * geometry: { x: -120, y: 45, spatialReference: { wkid: 4326 } },
55
+ * attributes: { status: "alive" }
56
+ * }]
57
+ * });
58
+ * ```
59
+ *
60
+ * @param requestOptions - Options for the request.
61
+ * @returns A Promise that will resolve with the updateFeatures response.
62
+ */
63
+ export function updateFeatures(
64
+ requestOptions: IUpdateFeaturesRequestOptions
65
+ ): Promise<IUpdateFeaturesResult> {
66
+ const url = `${requestOptions.url}/updateFeatures`;
67
+
68
+ // edit operations are POST only
69
+ const options: IUpdateFeaturesRequestOptions = {
70
+ params: {},
71
+ ...requestOptions
72
+ };
73
+
74
+ appendCustomParams(requestOptions, options);
75
+
76
+ // mixin, don't overwrite
77
+ options.params.features = requestOptions.updates;
78
+ delete options.params.updates;
79
+
80
+ return request(url, options);
81
+ }
@@ -0,0 +1,74 @@
1
+ /* Copyright (c) 2018 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import { request, IRequestOptions } from "@esri/arcgis-rest-request";
5
+
6
+ import { IEditFeatureResult } from "./helpers";
7
+
8
+ /**
9
+ * Request options to for updating a related attachment to a feature by id. See [Update Attachment](https://developers.arcgis.com/rest/services-reference/update-attachment.htm) for more information.
10
+ *
11
+ */
12
+ export interface IUpdateAttachmentOptions extends IRequestOptions {
13
+ /**
14
+ * Feature service url.
15
+ */
16
+ url: string;
17
+ /**
18
+ * Unique identifier of feature to update related attachment.
19
+ */
20
+ featureId: number;
21
+ /**
22
+ * File to be updated.
23
+ */
24
+ attachment: File;
25
+ /**
26
+ * Unique identifier of the attachment.
27
+ */
28
+ attachmentId: number;
29
+ }
30
+
31
+ /**
32
+ * `updateAttachment()` request response.
33
+ */
34
+ export interface IUpdateAttachmentResponse {
35
+ /**
36
+ * Standard AGS add/update/edit result Object for the attachment.
37
+ */
38
+ updateAttachmentResult: IEditFeatureResult;
39
+ }
40
+
41
+ /**
42
+ * Update a related attachment to a feature by id. See [Update Attachment](https://developers.arcgis.com/rest/services-reference/update-attachment.htm) for more information.
43
+ *
44
+ * ```js
45
+ * import { updateAttachment } from '@esri/arcgis-rest-feature-service';
46
+ *
47
+ * updateAttachment({
48
+ * url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/ServiceRequest/FeatureServer/0",
49
+ * featureId: 8484,
50
+ * attachment: myFileInput.files[0],
51
+ * attachmentId: 306
52
+ * });
53
+ * ```
54
+ *
55
+ * @param requestOptions - Options for the request.
56
+ * @returns A Promise that will resolve with the `updateAttachment()` response.
57
+ */
58
+ export function updateAttachment(
59
+ requestOptions: IUpdateAttachmentOptions
60
+ ): Promise<IUpdateAttachmentResponse> {
61
+ const options: IUpdateAttachmentOptions = {
62
+ params: {},
63
+ ...requestOptions
64
+ };
65
+
66
+ // `attachment` and `attachmentId` --> params: {}
67
+ options.params.attachment = requestOptions.attachment;
68
+ options.params.attachmentId = requestOptions.attachmentId;
69
+
70
+ return request(
71
+ `${options.url}/${options.featureId}/updateAttachment`,
72
+ options
73
+ );
74
+ }
@@ -0,0 +1,203 @@
1
+ /* Copyright (c) 2018 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import * as fetchMock from "fetch-mock";
5
+
6
+ import {
7
+ getAttachments,
8
+ IGetAttachmentsOptions,
9
+ addAttachment,
10
+ IAddAttachmentOptions,
11
+ updateAttachment,
12
+ IUpdateAttachmentOptions,
13
+ deleteAttachments,
14
+ IDeleteAttachmentsOptions
15
+ } from "../src/index";
16
+
17
+ import {
18
+ getAttachmentsResponse,
19
+ addAttachmentResponse,
20
+ updateAttachmentResponse,
21
+ deleteAttachmentsResponse,
22
+ genericInvalidResponse
23
+ } from "./mocks/feature";
24
+
25
+ export function attachmentFile() {
26
+ if (typeof File !== "undefined" && File) {
27
+ return new File(["foo"], "foo.txt", { type: "text/plain" });
28
+ } else {
29
+ const fs = require("fs");
30
+ return fs.createReadStream(
31
+ "./packages/arcgis-rest-feature-service/test/mocks/foo.txt"
32
+ );
33
+ }
34
+ }
35
+
36
+ const serviceUrl =
37
+ "https://services.arcgis.com/f8b/arcgis/rest/services/Custom/FeatureServer/0";
38
+
39
+ describe("attachment methods", () => {
40
+ afterEach(fetchMock.restore);
41
+
42
+ it("should return an array of attachmentInfos for a feature by id", done => {
43
+ const requestOptions = {
44
+ url: serviceUrl,
45
+ featureId: 42,
46
+ params: {
47
+ gdbVersion: "SDE.DEFAULT"
48
+ },
49
+ httpMethod: "GET"
50
+ } as IGetAttachmentsOptions;
51
+ fetchMock.once("*", getAttachmentsResponse);
52
+ getAttachments(requestOptions)
53
+ .then(() => {
54
+ expect(fetchMock.called()).toBeTruthy();
55
+ const [url, options]: [string, RequestInit] = fetchMock.lastCall("*");
56
+ expect(url).toEqual(
57
+ `${requestOptions.url}/${
58
+ requestOptions.featureId
59
+ }/attachments?f=json&gdbVersion=SDE.DEFAULT`
60
+ );
61
+ expect(options.method).toBe("GET");
62
+ expect(getAttachmentsResponse.attachmentInfos.length).toEqual(2);
63
+ expect(getAttachmentsResponse.attachmentInfos[0].id).toEqual(409);
64
+ done();
65
+ })
66
+ .catch(e => {
67
+ fail(e);
68
+ });
69
+ });
70
+
71
+ it("should return objectId of the added attachment and a truthy success", done => {
72
+ const requestOptions = {
73
+ url: serviceUrl,
74
+ featureId: 42,
75
+ attachment: attachmentFile(),
76
+ params: {
77
+ returnEditMoment: true
78
+ }
79
+ } as IAddAttachmentOptions;
80
+ fetchMock.once("*", addAttachmentResponse);
81
+ addAttachment(requestOptions)
82
+ .then(() => {
83
+ expect(fetchMock.called()).toBeTruthy();
84
+ const [url, options]: [string, RequestInit] = fetchMock.lastCall("*");
85
+ expect(url).toEqual(
86
+ `${requestOptions.url}/${requestOptions.featureId}/addAttachment`
87
+ );
88
+ expect(options.method).toBe("POST");
89
+
90
+ const params = options.body as FormData;
91
+ expect(params instanceof FormData).toBeTruthy();
92
+ // we can introspect FormData in Chrome this way, but not Node.js
93
+ // more info: https://github.com/form-data/form-data/issues/124
94
+ if (params.get) {
95
+ expect(params.get("returnEditMoment")).toEqual("true");
96
+ }
97
+ expect(addAttachmentResponse.addAttachmentResult.objectId).toEqual(
98
+ 1001
99
+ );
100
+ expect(addAttachmentResponse.addAttachmentResult.success).toEqual(true);
101
+ done();
102
+ })
103
+ .catch(e => {
104
+ fail(e);
105
+ });
106
+ });
107
+
108
+ it("should return an error for a service/feature which does not have attachments", done => {
109
+ const requestOptions = {
110
+ url:
111
+ "https://services.arcgis.com/f8b/arcgis/rest/services/NoAttachments/FeatureServer/0",
112
+ featureId: 654,
113
+ attachment: attachmentFile(),
114
+ params: {
115
+ returnEditMoment: true
116
+ }
117
+ } as IAddAttachmentOptions;
118
+ fetchMock.once("*", genericInvalidResponse);
119
+ addAttachment(requestOptions)
120
+ .then(() => {
121
+ // nothing to test here forcing error
122
+ fail();
123
+ })
124
+ .catch(error => {
125
+ expect(fetchMock.called()).toBeTruthy();
126
+ const [url, options]: [string, RequestInit] = fetchMock.lastCall("*");
127
+ expect(url).toEqual(
128
+ `${requestOptions.url}/${requestOptions.featureId}/addAttachment`
129
+ );
130
+ expect(options.method).toBe("POST");
131
+ expect(error.response.error.code).toEqual(400);
132
+ expect(error.response.error.message).toEqual(
133
+ "Invalid or missing input parameters."
134
+ );
135
+ done();
136
+ });
137
+ });
138
+
139
+ it("should return objectId of the updated attachment and a truthy success", done => {
140
+ const requestOptions = {
141
+ url: serviceUrl,
142
+ featureId: 42,
143
+ attachmentId: 1001,
144
+ attachment: attachmentFile(),
145
+ params: {
146
+ returnEditMoment: true
147
+ }
148
+ } as IUpdateAttachmentOptions;
149
+ fetchMock.once("*", updateAttachmentResponse);
150
+ updateAttachment(requestOptions)
151
+ .then(() => {
152
+ expect(fetchMock.called()).toBeTruthy();
153
+ const [url, options]: [string, RequestInit] = fetchMock.lastCall("*");
154
+ expect(url).toEqual(
155
+ `${requestOptions.url}/${requestOptions.featureId}/updateAttachment`
156
+ );
157
+ expect(options.method).toBe("POST");
158
+ expect(
159
+ updateAttachmentResponse.updateAttachmentResult.objectId
160
+ ).toEqual(1001);
161
+ expect(updateAttachmentResponse.updateAttachmentResult.success).toEqual(
162
+ true
163
+ );
164
+ done();
165
+ })
166
+ .catch(e => {
167
+ fail(e);
168
+ });
169
+ });
170
+
171
+ it("should return objectId of the deleted attachment and a truthy success", done => {
172
+ const requestOptions = {
173
+ url: serviceUrl,
174
+ featureId: 42,
175
+ attachmentIds: [1001],
176
+ params: {
177
+ returnEditMoment: true
178
+ }
179
+ } as IDeleteAttachmentsOptions;
180
+ fetchMock.once("*", deleteAttachmentsResponse);
181
+ deleteAttachments(requestOptions)
182
+ .then(() => {
183
+ expect(fetchMock.called()).toBeTruthy();
184
+ const [url, options]: [string, RequestInit] = fetchMock.lastCall("*");
185
+ expect(url).toEqual(
186
+ `${requestOptions.url}/${requestOptions.featureId}/deleteAttachments`
187
+ );
188
+ expect(options.body).toContain("attachmentIds=1001");
189
+ expect(options.body).toContain("returnEditMoment=true");
190
+ expect(options.method).toBe("POST");
191
+ expect(
192
+ deleteAttachmentsResponse.deleteAttachmentResults[0].objectId
193
+ ).toEqual(1001);
194
+ expect(
195
+ deleteAttachmentsResponse.deleteAttachmentResults[0].success
196
+ ).toEqual(true);
197
+ done();
198
+ })
199
+ .catch(e => {
200
+ fail(e);
201
+ });
202
+ });
203
+ });