@esri/hub-common 9.25.5 → 9.26.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 (52) hide show
  1. package/dist/es2017/content/_internal.js +28 -1
  2. package/dist/es2017/content/_internal.js.map +1 -1
  3. package/dist/es2017/content/compose.js +27 -23
  4. package/dist/es2017/content/compose.js.map +1 -1
  5. package/dist/es2017/content/fetch.js +25 -5
  6. package/dist/es2017/content/fetch.js.map +1 -1
  7. package/dist/es2017/resources/_internal/_validate-url-helpers.js +231 -0
  8. package/dist/es2017/resources/_internal/_validate-url-helpers.js.map +1 -0
  9. package/dist/es2017/resources/index.js +1 -0
  10. package/dist/es2017/resources/index.js.map +1 -1
  11. package/dist/es2017/resources/validate-url.js +86 -0
  12. package/dist/es2017/resources/validate-url.js.map +1 -0
  13. package/dist/es2017/types.js +862 -0
  14. package/dist/es2017/types.js.map +1 -1
  15. package/dist/esm/content/_internal.js +28 -1
  16. package/dist/esm/content/_internal.js.map +1 -1
  17. package/dist/esm/content/compose.js +27 -23
  18. package/dist/esm/content/compose.js.map +1 -1
  19. package/dist/esm/content/fetch.js +29 -11
  20. package/dist/esm/content/fetch.js.map +1 -1
  21. package/dist/esm/resources/_internal/_validate-url-helpers.js +249 -0
  22. package/dist/esm/resources/_internal/_validate-url-helpers.js.map +1 -0
  23. package/dist/esm/resources/index.js +1 -0
  24. package/dist/esm/resources/index.js.map +1 -1
  25. package/dist/esm/resources/validate-url.js +103 -0
  26. package/dist/esm/resources/validate-url.js.map +1 -0
  27. package/dist/esm/types.js +862 -0
  28. package/dist/esm/types.js.map +1 -1
  29. package/dist/node/content/_internal.js +28 -1
  30. package/dist/node/content/_internal.js.map +1 -1
  31. package/dist/node/content/compose.js +26 -22
  32. package/dist/node/content/compose.js.map +1 -1
  33. package/dist/node/content/fetch.js +23 -3
  34. package/dist/node/content/fetch.js.map +1 -1
  35. package/dist/node/resources/_internal/_validate-url-helpers.js +247 -0
  36. package/dist/node/resources/_internal/_validate-url-helpers.js.map +1 -0
  37. package/dist/node/resources/index.js +1 -0
  38. package/dist/node/resources/index.js.map +1 -1
  39. package/dist/node/resources/validate-url.js +90 -0
  40. package/dist/node/resources/validate-url.js.map +1 -0
  41. package/dist/node/types.js +863 -0
  42. package/dist/node/types.js.map +1 -1
  43. package/dist/types/content/_internal.d.ts +21 -3
  44. package/dist/types/resources/_internal/_validate-url-helpers.d.ts +115 -0
  45. package/dist/types/resources/index.d.ts +1 -0
  46. package/dist/types/resources/validate-url.d.ts +8 -0
  47. package/dist/types/types.d.ts +225 -4
  48. package/dist/umd/common.umd.js +1317 -35
  49. package/dist/umd/common.umd.js.map +1 -1
  50. package/dist/umd/common.umd.min.js +1 -1
  51. package/dist/umd/common.umd.min.js.map +1 -1
  52. package/package.json +1 -1
@@ -0,0 +1,249 @@
1
+ import { __awaiter, __generator } from "tslib";
2
+ import { ItemType } from "../../types";
3
+ import { Logger } from "../../utils";
4
+ var FEATURE_SERVICE_URL_REGEX = /(feature)server(\/|\/(\d+))?$/i;
5
+ var SERVICE_URL_REGEX = /\/[a-zA-Z]+server(\/|\/(\d+))?$/i;
6
+ /**
7
+ * Feature service / Doc Links Should not have data urls. Let"s exclude them from that.
8
+ *
9
+ * @export
10
+ * @param {string} itemType What type of item is it?
11
+ * @return {*} {boolean}
12
+ */
13
+ export function shouldHaveDataUrl(itemType) {
14
+ // Specifically we want to avoid FS / DL from having a data url.
15
+ return !["Feature Service", "Document Link"].includes(itemType);
16
+ }
17
+ /**
18
+ * Get the file name out of a url. Will return either the
19
+ * hostname, or the pathname if it exists
20
+ *
21
+ * @export
22
+ * @param {string} url Url to get a file name out of
23
+ * @return {*} {string}
24
+ */
25
+ export function getFileName(url) {
26
+ var filename;
27
+ try {
28
+ var parsed = new URL(url);
29
+ // If the URL pathname exists, return its last segment,
30
+ // otherwise return the hostname
31
+ filename =
32
+ parsed.pathname !== "/"
33
+ ? parsed.pathname.split("/").pop()
34
+ : parsed.hostname;
35
+ }
36
+ catch (e) {
37
+ throw new Error("Error getting file name from data url");
38
+ }
39
+ return filename;
40
+ }
41
+ /**
42
+ * Is this a valid url?
43
+ *
44
+ * @param {string} url Url to validate
45
+ * @return {*} {boolean}
46
+ */
47
+ export function isUrl(url) {
48
+ // Use try / catch as a simple string "test" will cause new URL() to throw an error.
49
+ try {
50
+ var result = new URL(url);
51
+ // Cast to bool.
52
+ return !!result;
53
+ }
54
+ catch (e) {
55
+ Logger.error("Error parsing data url");
56
+ return false;
57
+ }
58
+ }
59
+ /**
60
+ * Tests if url string is a feature service / layer.
61
+ *
62
+ * @param {string} url URL to test
63
+ * @return {*} {boolean}
64
+ */
65
+ export function isFeatureService(url) {
66
+ return FEATURE_SERVICE_URL_REGEX.test(url);
67
+ }
68
+ /**
69
+ * Tests if url string is a service (map, feature, image, etc)
70
+ *
71
+ * @param {string} url Url to test
72
+ * @return {*} {boolean}
73
+ */
74
+ export function isService(url) {
75
+ return SERVICE_URL_REGEX.test(url);
76
+ }
77
+ /**
78
+ * Is the service a feature service AND is it a layer specifically
79
+ *
80
+ * @param {string} url
81
+ * @return {*} {boolean}
82
+ */
83
+ export function isFeatureLayer(url) {
84
+ var results = url.match(FEATURE_SERVICE_URL_REGEX);
85
+ return results && !!results[3];
86
+ }
87
+ /**
88
+ * Gets item title from url as a fall back
89
+ *
90
+ * @param {string} url item url
91
+ * @return {*} {string}
92
+ */
93
+ export function getFeatureServiceTitle(url) {
94
+ return url.match(/\/services\/(.+)\/(feature|map|image)server/i)[1];
95
+ }
96
+ /**
97
+ * Gets item info out of a feature layer item.
98
+ *
99
+ * @export
100
+ * @param {string} url Item URL
101
+ * @param {{
102
+ * name: string,
103
+ * description: string,
104
+ * extent: any
105
+ * }} body Item body.
106
+ * @return {*} {{
107
+ * title: string,
108
+ * description: string,
109
+ * extent: any,
110
+ * url: string
111
+ * }}
112
+ */
113
+ export function getFeatureLayerItem(url, body) {
114
+ return {
115
+ title: body.name,
116
+ description: body.description,
117
+ extent: body.extent,
118
+ url: url,
119
+ };
120
+ }
121
+ /**
122
+ * Gets item info out of a feature service response (which is not a specific layer)
123
+ *
124
+ * @export
125
+ * @param {*} url
126
+ * @param {*} body
127
+ * @return {*}
128
+ */
129
+ export function getFeatureServiceItem(url, body) {
130
+ var description = body.serviceDescription || body.description;
131
+ var title = getFeatureServiceTitle(url);
132
+ var extent = body.fullExtent || body.initialExtent;
133
+ return { title: title, description: description, extent: extent, url: url };
134
+ }
135
+ /**
136
+ * Ping a non FS url and return response status && headers
137
+ *
138
+ * @export
139
+ * @param {string} url Non FS URL
140
+ * @return {*} {Promise<{ ok: boolean, headers: Headers }>}
141
+ */
142
+ export function pingUrl(url) {
143
+ return __awaiter(this, void 0, void 0, function () {
144
+ var response;
145
+ return __generator(this, function (_a) {
146
+ switch (_a.label) {
147
+ case 0: return [4 /*yield*/, fetch(url, { method: "HEAD" })];
148
+ case 1:
149
+ response = _a.sent();
150
+ return [2 /*return*/, {
151
+ ok: response.ok,
152
+ headers: response.headers,
153
+ }];
154
+ }
155
+ });
156
+ });
157
+ }
158
+ /**
159
+ * Ping a FS URL and handle matters such as "hidden" success failures.
160
+ *
161
+ * @export
162
+ * @param {string} url
163
+ * @return {*} {Promise<{ ok: boolean, item?: any }>}
164
+ */
165
+ export function pingFeatureService(url) {
166
+ return __awaiter(this, void 0, void 0, function () {
167
+ var parsed, response, body, getItem, item;
168
+ return __generator(this, function (_a) {
169
+ switch (_a.label) {
170
+ case 0:
171
+ parsed = new URL(url);
172
+ parsed.searchParams.set("f", "json");
173
+ return [4 /*yield*/, fetch(parsed.href)];
174
+ case 1:
175
+ response = _a.sent();
176
+ if (!response.ok) {
177
+ return [2 /*return*/, { ok: false }];
178
+ }
179
+ return [4 /*yield*/, response.json()];
180
+ case 2:
181
+ body = _a.sent();
182
+ // Exit if the request returns an error
183
+ if (body.error) {
184
+ return [2 /*return*/, { ok: false }];
185
+ }
186
+ getItem = isFeatureLayer(url)
187
+ ? getFeatureLayerItem
188
+ : getFeatureServiceItem;
189
+ item = getItem(url, body);
190
+ return [2 /*return*/, {
191
+ ok: true,
192
+ item: item,
193
+ }];
194
+ }
195
+ });
196
+ });
197
+ }
198
+ export function detectDataTypeFromHeader(headers) {
199
+ var contentType = headers.get("Content-Type");
200
+ var dataType;
201
+ if (!contentType) {
202
+ return;
203
+ }
204
+ // Only get the "media-type"
205
+ contentType = contentType.split(";").shift();
206
+ if (contentType === "text/csv") {
207
+ dataType = ItemType.CSV;
208
+ }
209
+ else if (contentType === "application/vnd.ms-excel" ||
210
+ contentType ===
211
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") {
212
+ dataType = ItemType["Microsoft Excel"];
213
+ }
214
+ else if (contentType === "application/pdf") {
215
+ dataType = ItemType.PDF;
216
+ }
217
+ else if (contentType === "image/jpeg" ||
218
+ contentType === "image/jpg" ||
219
+ contentType === "image/png") {
220
+ dataType = ItemType.Image;
221
+ }
222
+ else if (contentType === "application/geo+json") {
223
+ dataType = ItemType.GeoJson;
224
+ }
225
+ return dataType;
226
+ }
227
+ export function detectDataTypeFromExtension(url) {
228
+ var contentType = url.toLowerCase().split(".").pop();
229
+ var dataType;
230
+ if (contentType === "csv") {
231
+ dataType = ItemType.CSV;
232
+ }
233
+ else if (contentType === "xls" || contentType === "xlsx") {
234
+ dataType = ItemType["Microsoft Excel"];
235
+ }
236
+ else if (contentType === "pdf") {
237
+ dataType = ItemType.PDF;
238
+ }
239
+ else if (contentType === "jpeg" ||
240
+ contentType === "jpg" ||
241
+ contentType === "png") {
242
+ dataType = ItemType.Image;
243
+ }
244
+ else if (contentType === "geojson") {
245
+ dataType = ItemType.GeoJson;
246
+ }
247
+ return dataType;
248
+ }
249
+ //# sourceMappingURL=_validate-url-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_validate-url-helpers.js","sourceRoot":"","sources":["../../../../src/resources/_internal/_validate-url-helpers.ts"],"names":[],"mappings":"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"}
@@ -9,4 +9,5 @@ export * from "./string-to-blob";
9
9
  export * from "./upload-resources-from-url";
10
10
  export * from "./add-solution-resource-url-to-assets";
11
11
  export * from "./object-to-json-blob";
12
+ export * from "./validate-url";
12
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/resources/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iDAAiD,CAAC;AAChE,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uCAAuC,CAAC;AACtD,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/resources/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iDAAiD,CAAC;AAChE,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uCAAuC,CAAC;AACtD,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,103 @@
1
+ import { __awaiter, __generator } from "tslib";
2
+ import { ItemType } from "../types";
3
+ import { Logger } from "../utils";
4
+ import { isUrl, isFeatureService, isService, pingFeatureService, pingUrl, detectDataTypeFromHeader, getFileName, detectDataTypeFromExtension, shouldHaveDataUrl, } from "./_internal/_validate-url-helpers";
5
+ /**
6
+ * Takes in a URL and validates it based on valid url, type of item, etc
7
+ *
8
+ * @export
9
+ * @param {string} url
10
+ * @return {*} {Promise<any>}
11
+ */
12
+ export function validateUrl(url) {
13
+ return __awaiter(this, void 0, void 0, function () {
14
+ var isFeatureServiceUrl, isServiceUrl, type, item, pingResult, _a, e_1;
15
+ return __generator(this, function (_b) {
16
+ switch (_b.label) {
17
+ case 0:
18
+ // If URL doesn't pass then exit out immediately.
19
+ if (!isUrl(url)) {
20
+ return [2 /*return*/, {
21
+ pass: false,
22
+ error: "invalidFormat",
23
+ }];
24
+ }
25
+ isFeatureServiceUrl = isFeatureService(url);
26
+ isServiceUrl = isService(url);
27
+ if (isServiceUrl && !isFeatureServiceUrl) {
28
+ return [2 /*return*/, {
29
+ pass: false,
30
+ error: "invalidFormat",
31
+ }];
32
+ }
33
+ pingResult = {};
34
+ _b.label = 1;
35
+ case 1:
36
+ _b.trys.push([1, 6, , 7]);
37
+ if (!isFeatureServiceUrl) return [3 /*break*/, 3];
38
+ return [4 /*yield*/, pingFeatureService(url)];
39
+ case 2:
40
+ _a = _b.sent();
41
+ return [3 /*break*/, 5];
42
+ case 3: return [4 /*yield*/, pingUrl(url)];
43
+ case 4:
44
+ _a = _b.sent();
45
+ _b.label = 5;
46
+ case 5:
47
+ pingResult = _a;
48
+ // return an error if the response is not okay
49
+ if (!pingResult.ok) {
50
+ return [2 /*return*/, {
51
+ pass: false,
52
+ error: "invalidUrl",
53
+ }];
54
+ }
55
+ return [3 /*break*/, 7];
56
+ case 6:
57
+ e_1 = _b.sent();
58
+ // TODO: This is tricky. The fetch() API rejects when a network error
59
+ // happens. This error can be a CORS error, or a 404 error, or a timeout
60
+ // error. While an error like 404 does suggest a bad URL, the CORS occurs
61
+ // because this is a front-end request and the file is likely accessible by
62
+ // the server. Unfortunately, the error doesn't have any information about
63
+ // underline failure type. For now, the network failure is ignored, so the
64
+ // user can paste a URL from any domain and avoid the CORS issue.
65
+ Logger.error("error requesting url");
66
+ return [3 /*break*/, 7];
67
+ case 7:
68
+ // Use the metadata from the ping response if exists, otherwise guess the file
69
+ // name from the URL
70
+ if (pingResult.item) {
71
+ item = pingResult.item;
72
+ }
73
+ else {
74
+ item = { title: getFileName(url), url: url };
75
+ }
76
+ if (pingResult.headers) {
77
+ type = detectDataTypeFromHeader(pingResult.headers);
78
+ }
79
+ if (isFeatureServiceUrl) {
80
+ type = ItemType["Feature Service"];
81
+ }
82
+ else if (!type) {
83
+ // Guess the data type from the extension
84
+ type = detectDataTypeFromExtension(url);
85
+ }
86
+ if (type) {
87
+ item.type = type;
88
+ }
89
+ if (item.type && shouldHaveDataUrl(item.type)) {
90
+ item.dataUrl = item.url;
91
+ }
92
+ return [2 /*return*/, {
93
+ pass: true,
94
+ // The type may or may not be true
95
+ type: type,
96
+ // fetched / calculated item
97
+ item: item,
98
+ }];
99
+ }
100
+ });
101
+ });
102
+ }
103
+ //# sourceMappingURL=validate-url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-url.js","sourceRoot":"","sources":["../../../src/resources/validate-url.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EACL,KAAK,EACL,gBAAgB,EAChB,SAAS,EACT,kBAAkB,EAClB,OAAO,EACP,wBAAwB,EACxB,WAAW,EACX,2BAA2B,EAC3B,iBAAiB,GAClB,MAAM,mCAAmC,CAAC;AAE3C;;;;;;GAMG;AACH,MAAM,UAAgB,WAAW,CAAC,GAAW;;;;;;oBAC3C,iDAAiD;oBACjD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;wBACf,sBAAO;gCACL,IAAI,EAAE,KAAK;gCACX,KAAK,EAAE,eAAe;6BACvB,EAAC;qBACH;oBAGK,mBAAmB,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;oBAC5C,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;oBAEpC,IAAI,YAAY,IAAI,CAAC,mBAAmB,EAAE;wBACxC,sBAAO;gCACL,IAAI,EAAE,KAAK;gCACX,KAAK,EAAE,eAAe;6BACvB,EAAC;qBACH;oBAOG,UAAU,GAA4D,EAAE,CAAC;;;;yBAG9D,mBAAmB,EAAnB,wBAAmB;oBAC5B,qBAAM,kBAAkB,CAAC,GAAG,CAAC,EAAA;;oBAA7B,KAAA,SAA6B,CAAA;;wBAC7B,qBAAM,OAAO,CAAC,GAAG,CAAC,EAAA;;oBAAlB,KAAA,SAAkB,CAAA;;;oBAFtB,UAAU,KAEY,CAAC;oBAEvB,8CAA8C;oBAC9C,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;wBAClB,sBAAO;gCACL,IAAI,EAAE,KAAK;gCACX,KAAK,EAAE,YAAY;6BACpB,EAAC;qBACH;;;;oBAED,qEAAqE;oBACrE,wEAAwE;oBACxE,yEAAyE;oBACzE,2EAA2E;oBAC3E,0EAA0E;oBAC1E,0EAA0E;oBAC1E,iEAAiE;oBACjE,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;;;oBAEvC,8EAA8E;oBAC9E,oBAAoB;oBACpB,IAAI,UAAU,CAAC,IAAI,EAAE;wBACnB,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;qBACxB;yBAAM;wBACL,IAAI,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,GAAG,KAAA,EAAE,CAAC;qBACzC;oBAED,IAAI,UAAU,CAAC,OAAO,EAAE;wBACtB,IAAI,GAAG,wBAAwB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;qBACrD;oBAED,IAAI,mBAAmB,EAAE;wBACvB,IAAI,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAAC;qBACpC;yBAAM,IAAI,CAAC,IAAI,EAAE;wBAChB,yCAAyC;wBACzC,IAAI,GAAG,2BAA2B,CAAC,GAAG,CAAC,CAAC;qBACzC;oBAED,IAAI,IAAI,EAAE;wBACR,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;qBAClB;oBAED,IAAI,IAAI,CAAC,IAAI,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;wBAC7C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;qBACzB;oBAED,sBAAO;4BACL,IAAI,EAAE,IAAI;4BACV,kCAAkC;4BAClC,IAAI,MAAA;4BACJ,4BAA4B;4BAC5B,IAAI,MAAA;yBACL,EAAC;;;;CACH"}