@nextgis/ngw-connector 2.3.0 → 2.5.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.
- package/lib/index.d.ts +91 -2
- package/lib/ngw-connector.cjs.js +30 -15
- package/lib/ngw-connector.cjs.js.map +1 -1
- package/lib/ngw-connector.cjs.prod.js +1 -1
- package/lib/ngw-connector.cjs.prod.js.map +1 -1
- package/lib/ngw-connector.esm-browser.js +33 -19
- package/lib/ngw-connector.esm-browser.js.map +1 -1
- package/lib/ngw-connector.esm-browser.prod.js +1 -1
- package/lib/ngw-connector.esm-browser.prod.js.map +1 -1
- package/lib/ngw-connector.esm-bundler.js +30 -16
- package/lib/ngw-connector.esm-bundler.js.map +1 -1
- package/lib/ngw-connector.esm-bundler.prod.js +1 -1
- package/lib/ngw-connector.esm-bundler.prod.js.map +1 -1
- package/lib/ngw-connector.global.js +33 -19
- package/lib/ngw-connector.global.js.map +1 -1
- package/lib/ngw-connector.global.prod.js +1 -1
- package/lib/ngw-connector.global.prod.js.map +1 -1
- package/package.json +6 -6
package/lib/index.d.ts
CHANGED
|
@@ -779,16 +779,52 @@ interface PutRequestItemsResponseMap extends RequestItemKeys {
|
|
|
779
779
|
interface DeleteRequestItemsResponseMap extends RequestItemKeys {
|
|
780
780
|
'feature_layer.feature.item': any;
|
|
781
781
|
}
|
|
782
|
+
/**
|
|
783
|
+
* User credentials for authorization.
|
|
784
|
+
*/
|
|
782
785
|
interface Credentials {
|
|
786
|
+
/**
|
|
787
|
+
* The login username for the user.
|
|
788
|
+
*/
|
|
783
789
|
login: string;
|
|
790
|
+
/**
|
|
791
|
+
* The password for the user.
|
|
792
|
+
*/
|
|
784
793
|
password: string;
|
|
785
794
|
}
|
|
786
795
|
type RequestTransformFunction = (url: string, options: RequestOptions) => [url: string, options: RequestOptions];
|
|
787
796
|
interface NgwConnectorOptions {
|
|
797
|
+
/**
|
|
798
|
+
* The base URL of the NextGIS Web (NGW) server.
|
|
799
|
+
* Example: "https://demo.nextgis.com"
|
|
800
|
+
*/
|
|
788
801
|
baseUrl?: string;
|
|
802
|
+
/**
|
|
803
|
+
* The API route path to use for requests.
|
|
804
|
+
* If not specified, the default route "/api/component/pyramid/route" will be used.
|
|
805
|
+
*/
|
|
789
806
|
route?: string;
|
|
807
|
+
/**
|
|
808
|
+
* User credentials for authorization in NGW.
|
|
809
|
+
* These credentials will be used for authentication in NGW requests.
|
|
810
|
+
*/
|
|
790
811
|
auth?: Credentials;
|
|
812
|
+
/**
|
|
813
|
+
* Indicates whether to include credentials such as cookies, authentication headers,
|
|
814
|
+
* or TLS client certificates in cross-site Access-Control requests.
|
|
815
|
+
* Setting this property ensures that cookies from another domain are used in the requests.
|
|
816
|
+
* Note that setting this property has no effect on same-origin requests.
|
|
817
|
+
*/
|
|
818
|
+
withCredentials?: boolean;
|
|
819
|
+
/**
|
|
820
|
+
* A function to transform the request before sending it.
|
|
821
|
+
* This function can be used to modify the URL, headers, or other options.
|
|
822
|
+
*/
|
|
791
823
|
requestTransform?: RequestTransformFunction;
|
|
824
|
+
/**
|
|
825
|
+
* Identifier for caching requests.
|
|
826
|
+
* This can be used to segregate cached data for different connectors.
|
|
827
|
+
*/
|
|
792
828
|
cacheId?: string;
|
|
793
829
|
}
|
|
794
830
|
interface RequestHeaders {
|
|
@@ -800,17 +836,69 @@ interface RequestHeaders {
|
|
|
800
836
|
}
|
|
801
837
|
type RequestMethods = 'POST' | 'GET' | 'PATCH' | 'DELETE' | 'PUT';
|
|
802
838
|
type NgwExceptions = 'nextgisweb.resource.exception.ResourceNotFound' | 'nextgisweb.core.exception.InsufficientPermissions';
|
|
803
|
-
interface
|
|
839
|
+
interface BaseRequestOptions {
|
|
840
|
+
cache?: boolean;
|
|
841
|
+
signal?: AbortSignal;
|
|
842
|
+
}
|
|
843
|
+
/**
|
|
844
|
+
* Options for configuring requests to NGW.
|
|
845
|
+
*/
|
|
846
|
+
interface RequestOptions<M extends RequestMethods = RequestMethods, K extends keyof RequestItemsParamsMap = keyof RequestItemsParamsMap> extends BaseRequestOptions {
|
|
847
|
+
/**
|
|
848
|
+
* Data to be sent as the request body.
|
|
849
|
+
* Typically used with POST, PUT, or PATCH requests.
|
|
850
|
+
*/
|
|
804
851
|
data?: any;
|
|
852
|
+
/**
|
|
853
|
+
* File to be sent in the request.
|
|
854
|
+
*/
|
|
805
855
|
file?: File;
|
|
856
|
+
/**
|
|
857
|
+
* HTTP method to be used for the request.
|
|
858
|
+
* Example: 'GET', 'POST', 'PUT', 'PATCH', 'DELETE'
|
|
859
|
+
*/
|
|
806
860
|
method?: M;
|
|
861
|
+
/**
|
|
862
|
+
* HTTP headers to be included in the request.
|
|
863
|
+
*/
|
|
807
864
|
headers?: RequestHeaders;
|
|
865
|
+
/**
|
|
866
|
+
* Indicates whether to include credentials such as cookies, authentication headers,
|
|
867
|
+
* or TLS client certificates in cross-site Access-Control requests.
|
|
868
|
+
*/
|
|
808
869
|
withCredentials?: boolean;
|
|
870
|
+
/**
|
|
871
|
+
* The type of data that the server will respond with.
|
|
872
|
+
* Can be either 'json' or 'blob'.
|
|
873
|
+
*/
|
|
809
874
|
responseType?: 'json' | 'blob';
|
|
875
|
+
/**
|
|
876
|
+
* Whether to cache the request.
|
|
877
|
+
* When set to true, the response will be stored in the cache.
|
|
878
|
+
*/
|
|
810
879
|
cache?: boolean;
|
|
880
|
+
/**
|
|
881
|
+
* Signal object that allows you to communicate with a DOM request (such as fetch) and abort it if desired via an AbortController.
|
|
882
|
+
*/
|
|
811
883
|
signal?: AbortSignal;
|
|
884
|
+
/**
|
|
885
|
+
* Parameters to be included in the request URL.
|
|
886
|
+
*/
|
|
812
887
|
params?: RequestItemsParams<K>;
|
|
888
|
+
/**
|
|
889
|
+
* A function to be called to monitor the progress of the request.
|
|
890
|
+
* @param percentComplete - The percentage of the request that has been completed.
|
|
891
|
+
* @param event - The progress event.
|
|
892
|
+
*/
|
|
813
893
|
onProgress?: (percentComplete: number, event: ProgressEvent) => void;
|
|
894
|
+
/**
|
|
895
|
+
* Name to use for caching the request.
|
|
896
|
+
*/
|
|
897
|
+
cacheName?: string;
|
|
898
|
+
/**
|
|
899
|
+
* Properties to override default cache behavior.
|
|
900
|
+
*/
|
|
901
|
+
cacheProps?: Record<string, unknown>;
|
|
814
902
|
}
|
|
815
903
|
type RequestItemAdditionalParams = {
|
|
816
904
|
[name: string]: any;
|
|
@@ -926,6 +1014,7 @@ declare class NgwConnector {
|
|
|
926
1014
|
user?: UserInfo;
|
|
927
1015
|
resources: ResourcesControl;
|
|
928
1016
|
cache: Cache;
|
|
1017
|
+
withCredentials?: boolean;
|
|
929
1018
|
private routeStr;
|
|
930
1019
|
private activeRequests;
|
|
931
1020
|
private requestTransform?;
|
|
@@ -1106,4 +1195,4 @@ declare class NgwConnector {
|
|
|
1106
1195
|
private _handleHttpError;
|
|
1107
1196
|
}
|
|
1108
1197
|
|
|
1109
|
-
export { type BasemapResource, type BasemapWebmap, type BasemapWebmapItem, type BookmarkProperties, type CreatedResource, type Credentials, type DeleteRequestItemsResponseMap, type FeatureItem, type FeatureItemAttachment, type FeatureItemExtensions, type FeatureItemToNgw, type FeatureLayerCount, type FeatureLayerField, type FeatureLayersIdentify, type FeatureLayersIdentifyItems, type FeatureResource, type FileBucket, type FileMeta, type FileUploadResp, type GeometryType, type GetChildrenOfOptions, type GetRequestItemsResponseMap, type IdOnly, type LayerFeature, type LoadingQueue, type LookupTableResource, type NgwConnectorOptions, type NgwDateFormat, type NgwDateTimeFormat, type NgwExceptions, type NgwExtent, type NgwFile, type NgwLayerIdentifyError, type NgwTimeFormat, type Params, type PatchRequestItemsResponseMap, type Permission, type PostRequestItemsResponseMap, type PutRequestItemsResponseMap, type PyramidRoute, type PyramidSettings, type PyramidSettingsPyramid, type PyramidSettingsPyramidCompanyLogo, type RenderLegendSymbol, type RequestHeaders, type RequestItemAdditionalParams, type RequestItemKeys, type RequestItemsParams, type RequestItemsParamsMap, type RequestItemsResponseMap, type RequestMethods, type RequestOptions, type RequestTransformFunction, type Resmeta, type Resource, type ResourceCls, type ResourceDefinition, type ResourceHierarchy, type ResourceIdKeynameDef, type ResourceItem, type ResourceItemDatatype, type ResourceItemMain, type ResourceStoreItem, type ResourceStoreItemDefault, type ResourceStoreItemProperties, type Router, type SrsItem, type TreeGroup, type TreeItem, type TreeLayer, type UserInfo, type VectorFieldDatatype, type VectorLayer, type VectorLayerResourceItem, type WebmapResource, type WmsClientConnection, type WmsClientLayer, type WmsServerService, type WmsServerServiceLayer, NgwConnector as default };
|
|
1198
|
+
export { type BaseRequestOptions, type BasemapResource, type BasemapWebmap, type BasemapWebmapItem, type BookmarkProperties, type CreatedResource, type Credentials, type DeleteRequestItemsResponseMap, type FeatureItem, type FeatureItemAttachment, type FeatureItemExtensions, type FeatureItemToNgw, type FeatureLayerCount, type FeatureLayerField, type FeatureLayersIdentify, type FeatureLayersIdentifyItems, type FeatureResource, type FileBucket, type FileMeta, type FileUploadResp, type GeometryType, type GetChildrenOfOptions, type GetRequestItemsResponseMap, type IdOnly, type LayerFeature, type LoadingQueue, type LookupTableResource, type NgwConnectorOptions, type NgwDateFormat, type NgwDateTimeFormat, type NgwExceptions, type NgwExtent, type NgwFile, type NgwLayerIdentifyError, type NgwTimeFormat, type Params, type PatchRequestItemsResponseMap, type Permission, type PostRequestItemsResponseMap, type PutRequestItemsResponseMap, type PyramidRoute, type PyramidSettings, type PyramidSettingsPyramid, type PyramidSettingsPyramidCompanyLogo, type RenderLegendSymbol, type RequestHeaders, type RequestItemAdditionalParams, type RequestItemKeys, type RequestItemsParams, type RequestItemsParamsMap, type RequestItemsResponseMap, type RequestMethods, type RequestOptions, type RequestTransformFunction, type Resmeta, type Resource, type ResourceCls, type ResourceDefinition, type ResourceHierarchy, type ResourceIdKeynameDef, type ResourceItem, type ResourceItemDatatype, type ResourceItemMain, type ResourceStoreItem, type ResourceStoreItemDefault, type ResourceStoreItemProperties, type Router, type SrsItem, type TreeGroup, type TreeItem, type TreeLayer, type UserInfo, type VectorFieldDatatype, type VectorLayer, type VectorLayerResourceItem, type WebmapResource, type WmsClientConnection, type WmsClientLayer, type WmsServerService, type WmsServerServiceLayer, NgwConnector as default };
|
package/lib/ngw-connector.cjs.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** Bundle of @nextgis/ngw-connector; version: 2.
|
|
1
|
+
/** Bundle of @nextgis/ngw-connector; version: 2.5.0; author: NextGIS */
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var events = require('events');
|
|
@@ -119,7 +119,10 @@ class ResourcesControl {
|
|
|
119
119
|
}
|
|
120
120
|
return CancelablePromise.resolve(void 0);
|
|
121
121
|
};
|
|
122
|
-
|
|
122
|
+
if (requestOptions == null ? void 0 : requestOptions.cache) {
|
|
123
|
+
return cache.addFull("resource", makeRequest, forCache);
|
|
124
|
+
}
|
|
125
|
+
return makeRequest();
|
|
123
126
|
}
|
|
124
127
|
getOneOrFail(resource, requestOptions) {
|
|
125
128
|
return this.getOne(resource, requestOptions).then((res) => {
|
|
@@ -279,14 +282,17 @@ class ResourcesControl {
|
|
|
279
282
|
}
|
|
280
283
|
_fetchResourceById(id, requestOptions) {
|
|
281
284
|
const promise = () => this.connector.get("resource.item", requestOptions, { id });
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
285
|
+
if (requestOptions == null ? void 0 : requestOptions.cache) {
|
|
286
|
+
return this.cache.add("resource.item", promise, {
|
|
287
|
+
id
|
|
288
|
+
}).catch((er) => {
|
|
289
|
+
if (!(er instanceof ResourceNotFoundError)) {
|
|
290
|
+
throw er;
|
|
291
|
+
}
|
|
292
|
+
return void 0;
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
return promise();
|
|
290
296
|
}
|
|
291
297
|
_fetchResourceBy(resource, requestOptions) {
|
|
292
298
|
return this.getMany(resource, requestOptions).then((resources) => {
|
|
@@ -366,7 +372,7 @@ function template(str, data) {
|
|
|
366
372
|
function apiRequest(opt) {
|
|
367
373
|
const params = opt.params;
|
|
368
374
|
return new CancelablePromise((resolve, reject) => {
|
|
369
|
-
opt.connector.connect().then((apiItems) => {
|
|
375
|
+
return opt.connector.connect().then((apiItems) => {
|
|
370
376
|
let apiItem = apiItems && apiItems[opt.name];
|
|
371
377
|
if (apiItem) {
|
|
372
378
|
apiItem = [...apiItem];
|
|
@@ -558,6 +564,7 @@ class NgwConnector {
|
|
|
558
564
|
__publicField(this, "user");
|
|
559
565
|
__publicField(this, "resources");
|
|
560
566
|
__publicField(this, "cache");
|
|
567
|
+
__publicField(this, "withCredentials");
|
|
561
568
|
__publicField(this, "routeStr", "/api/component/pyramid/route");
|
|
562
569
|
__publicField(this, "activeRequests", []);
|
|
563
570
|
__publicField(this, "requestTransform");
|
|
@@ -566,11 +573,15 @@ class NgwConnector {
|
|
|
566
573
|
if (exist) {
|
|
567
574
|
return exist;
|
|
568
575
|
} else {
|
|
569
|
-
|
|
570
|
-
|
|
576
|
+
const { route, requestTransform, withCredentials } = this.options;
|
|
577
|
+
if (route) {
|
|
578
|
+
this.routeStr = route;
|
|
571
579
|
}
|
|
572
|
-
if (
|
|
573
|
-
this.requestTransform =
|
|
580
|
+
if (requestTransform) {
|
|
581
|
+
this.requestTransform = requestTransform;
|
|
582
|
+
}
|
|
583
|
+
if (withCredentials !== void 0) {
|
|
584
|
+
this.withCredentials = withCredentials;
|
|
574
585
|
}
|
|
575
586
|
this.resources = new ResourcesControl({
|
|
576
587
|
connector: this,
|
|
@@ -741,6 +752,10 @@ class NgwConnector {
|
|
|
741
752
|
*/
|
|
742
753
|
apiRequest(name, params_ = {}, requestOptions = {}) {
|
|
743
754
|
var _a, _b;
|
|
755
|
+
requestOptions = {
|
|
756
|
+
withCredentials: this.withCredentials,
|
|
757
|
+
...requestOptions
|
|
758
|
+
};
|
|
744
759
|
const { method, headers, withCredentials, responseType } = requestOptions;
|
|
745
760
|
params_ = (_a = requestOptions.params) != null ? _a : params_;
|
|
746
761
|
const params = utils.objectRemoveEmpty(params_);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngw-connector.cjs.js","sources":["../src/errors/NgwError.ts","../src/errors/ResourceNotFoundError.ts","../src/utils/isObject.ts","../src/utils/resourceCompare.ts","../src/utils/resourceToQuery.ts","../src/ResourcesControl.ts","../src/activeConnectors.ts","../src/errors/InsufficientPermissionsError.ts","../src/utils/template.ts","../src/utils/apiRequest.ts","../src/errors/isError.ts","../src/utils/loadData.ts","../src/NgwConnector.ts"],"sourcesContent":["import type { NgwExceptions } from '../interfaces';\n\n/**\n * Thrown when...\n */\nexport class NgwError extends Error {\n name = 'NgwError';\n\n title!: string;\n message!: string;\n detail!: string;\n exception!: NgwExceptions;\n status_code!: number | 404 | 500;\n data?: Record<string, any>;\n guru_meditation!: string;\n\n constructor(er?: Partial<NgwError>) {\n super();\n Object.assign(this, er);\n Object.setPrototypeOf(this, NgwError.prototype);\n }\n}\n","import { NgwError } from './NgwError';\n\nimport type { NgwExceptions } from '../interfaces';\n\n/**\n * Thrown when ...\n */\nexport class ResourceNotFoundError extends NgwError {\n name = 'ResourceNotFoundError';\n exception: NgwExceptions = 'nextgisweb.resource.exception.ResourceNotFound';\n\n constructor(obj?: ResourceNotFoundError) {\n super(obj);\n Object.setPrototypeOf(this, ResourceNotFoundError.prototype);\n }\n}\n","export function isObject(val: unknown): val is Record<string | number, any> {\n return Object.prototype.toString.call(val) === '[object Object]';\n}\n","import { objectDeepEqual } from '@nextgis/utils';\n\nimport type { Resource } from '../types/ResourceItem';\nimport type { DeepPartial } from '@nextgis/utils';\n\nexport function resourceCompare(\n res1: DeepPartial<Resource>,\n res2: DeepPartial<Resource>,\n): boolean {\n return objectDeepEqual(res1, res2);\n}\n","import { defined } from '@nextgis/utils';\n\nimport { isObject } from './isObject';\n\nimport type { Resource } from '../types/ResourceItem';\nimport type { DeepPartial } from '@nextgis/utils';\n\nconst exclude = ['description'];\n\n/**\n * @remarks\n * https://docs.nextgis.com/docs_ngweb_dev/doc/developer/resource.html#search-resources\n *\n * ```\n * { keyname, owner_user: { id }} > { keyname, owner_user__id }\n * ```\n *\n * @param resource - Any property from NGW resource item\n */\nexport function resourceToQuery(\n resource: DeepPartial<Resource>,\n prefix = '',\n): Record<string, unknown> {\n prefix = prefix ? prefix + '__' : '';\n const query: Record<string, any> = {};\n for (const [key, value] of Object.entries(resource)) {\n if (exclude.indexOf(key) === -1) {\n if (isObject(value)) {\n if (key === 'owner_user') {\n const children = resourceToQuery(value as DeepPartial<Resource>, key);\n Object.assign(query, children);\n } else if (key === 'parent' && 'id' in value) {\n query.parent_id = value.id;\n }\n } else if (defined(value)) {\n query[prefix + key] = value;\n }\n }\n }\n return query;\n}\n","import Cache from '@nextgis/cache';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { defined } from '@nextgis/utils';\n\nimport { ResourceNotFoundError } from './errors/ResourceNotFoundError';\nimport { isObject } from './utils/isObject';\nimport { resourceCompare } from './utils/resourceCompare';\nimport { resourceToQuery } from './utils/resourceToQuery';\n\nimport type { NgwConnector } from './NgwConnector';\nimport type {\n GetChildrenOfOptions,\n RequestOptions,\n ResourceDefinition,\n} from './interfaces';\nimport type { Resource, ResourceItem } from './types/ResourceItem';\nimport type { DeepPartial } from '@nextgis/utils';\n\nexport class ResourcesControl {\n cache: Cache<\n CancelablePromise<ResourceItem | undefined>,\n { id?: number | string }\n >;\n connector: NgwConnector;\n\n constructor({\n connector,\n cacheId,\n }: {\n connector: NgwConnector;\n cacheId?: string;\n }) {\n this.connector = connector;\n this.cache = new Cache({ namespace: cacheId });\n }\n\n // -------------------------------------------------------------------------\n // Resource Methods\n // -------------------------------------------------------------------------\n\n /**\n * Receive resource from NGW by id, keyname or search-object parameter.\n * @param resource - Resource id, keyname or search-object\n *\n * @remarks\n * Fetching resource would be cached to speed up next call\n */\n getOne(\n resource: ResourceDefinition,\n requestOptions?: RequestOptions<'GET'>,\n ): CancelablePromise<ResourceItem | undefined> {\n const cache = this.cache;\n const forCache: { keyname?: string; display_name?: string; id?: number } =\n {};\n const opt = { ...requestOptions, cache: false };\n if (typeof resource === 'string') {\n forCache.keyname = resource;\n } else if (typeof resource === 'number') {\n forCache.id = resource;\n } else if (isObject(resource)) {\n if (resource.id !== undefined) {\n forCache.id = resource.id;\n } else {\n if (resource.keyname) {\n forCache.keyname = resource.keyname;\n }\n if (resource.display_name) {\n forCache.display_name = resource.display_name;\n }\n }\n }\n const makeRequest = () => {\n if (typeof resource === 'string') {\n return this._fetchResourceBy({ keyname: resource }, opt);\n } else if (typeof resource === 'number') {\n return this._fetchResourceById(resource, opt);\n } else if (isObject(resource)) {\n return this._fetchResourceBy(resource, opt);\n }\n return CancelablePromise.resolve(undefined);\n };\n return cache.addFull('resource', makeRequest, forCache);\n }\n\n getOneOrFail(\n resource: ResourceDefinition,\n requestOptions?: RequestOptions<'GET'>,\n ): CancelablePromise<ResourceItem> {\n return this.getOne(resource, requestOptions).then((res) => {\n if (res) {\n return res;\n }\n throw new ResourceNotFoundError();\n });\n }\n\n /**\n * A fast way to retrieve resource ID for any resource definition.\n * @param resource - Any available resource definition\n *\n * @remarks\n * There are situations when exactly the resource id is needed\n * (for example, to compose the correct request to the api)\n * then this method will come in handy to facilitate the extraction of the identifier\n * if the resource is specified through a keyname or other parameters.\n */\n getId(\n resource: ResourceDefinition,\n requestOptions?: RequestOptions<'GET'>,\n ): CancelablePromise<number | undefined> {\n if (typeof resource === 'number') {\n return CancelablePromise.resolve(resource);\n } else if (typeof resource === 'string' || isObject(resource)) {\n return this.getOne(resource, requestOptions).then((res) => {\n if (res) {\n return res.resource.id;\n }\n });\n }\n return CancelablePromise.resolve(undefined);\n }\n\n /**\n * A fast way to retrieve resource ID for any resource definition.\n * @param resource - Any available resource definition\n *\n * @remarks\n * Similar with {@link NgwConnector.getResourceId | getResourceId} but rise error if resource is not exist.\n * To not make one more checks if the resource is definitely exists\n */\n getIdOrFail(\n resource: ResourceDefinition,\n requestOptions?: RequestOptions<'GET'>,\n ): CancelablePromise<number> {\n return this.getId(resource, requestOptions).then((resp) => {\n if (resp === undefined) {\n throw new Error();\n }\n return resp;\n });\n }\n\n getMany(\n resource: DeepPartial<Resource>,\n requestOptions?: RequestOptions<'GET'>,\n ): CancelablePromise<ResourceItem[]> {\n return this._resourceCacheFilter(resource).then((items) => {\n if (!items.length) {\n const query: Record<string, unknown> = {};\n if (resource.keyname) {\n query.keyname = resource.keyname;\n } else {\n Object.assign(query, resourceToQuery(resource));\n }\n return this.connector\n .get('resource.search', requestOptions, {\n serialization: 'full',\n ...query,\n })\n .then((resources) => {\n if (resources) {\n for (const x of resources) {\n this.cache.add('resource.item', CancelablePromise.resolve(x), {\n id: x.resource.id,\n });\n }\n }\n return resources;\n });\n }\n return items;\n });\n }\n\n getParent(\n resource: ResourceDefinition,\n requestOptions?: RequestOptions<'GET'>,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.getOne(resource, requestOptions).then((child) => {\n if (child) {\n return this.getOne(child.resource.parent.id, requestOptions);\n }\n return CancelablePromise.resolve(undefined);\n });\n }\n\n getChildrenOf(\n resource: ResourceDefinition,\n requestOptions?: GetChildrenOfOptions,\n ): CancelablePromise<ResourceItem[]> {\n return this.getIdOrFail(resource).then((parent) =>\n this._getChildrenOf(parent, requestOptions),\n );\n }\n\n update(\n resource: ResourceDefinition,\n data: DeepPartial<ResourceItem>,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.getId(resource).then((id) => {\n if (id !== undefined) {\n return this.connector.put('resource.item', { data }, { id });\n }\n });\n }\n\n /**\n * Fast way to delete resource from NGW and clean cache.\n * @param resource - Resource definition\n */\n delete(resource: ResourceDefinition): CancelablePromise<void> {\n return this.getId(resource).then((id) => {\n if (id !== undefined) {\n return this.connector.delete('resource.item', null, { id }).then(() => {\n this._cleanResourceItemCache(id);\n return undefined;\n });\n }\n });\n }\n\n private _getChildrenOf(\n parent: ResourceDefinition,\n requestOptions?: GetChildrenOfOptions,\n _items: ResourceItem[] = [],\n ): CancelablePromise<ResourceItem[]> {\n return this.connector\n .get(\n 'resource.collection',\n { cache: true, ...requestOptions },\n {\n parent,\n },\n )\n .then((items) => {\n const recursivePromises = [];\n for (const item of items) {\n this.cache.add('resource.item', CancelablePromise.resolve(item), {\n id: item.resource.id,\n });\n _items.push(item);\n if (requestOptions?.recursive && item.resource.children) {\n recursivePromises.push(\n this._getChildrenOf(item.resource.id, requestOptions, _items),\n );\n }\n }\n if (recursivePromises.length) {\n return CancelablePromise.all(recursivePromises).then(() => {\n return _items;\n });\n }\n return _items;\n });\n }\n\n private async _cleanResourceItemCache(id: number) {\n const all = this.cache.all();\n const toDelete: typeof all = [];\n for (const c of all) {\n const cid = c.options && c.options.id;\n if (['resource.item', 'resource'].includes(c.key) && cid !== undefined) {\n if (typeof cid === 'number') {\n if (cid === id) {\n toDelete.push(c);\n }\n } else {\n const rid = await this.getId(cid);\n if (rid === id) {\n toDelete.push(c);\n }\n }\n }\n }\n for (const d of toDelete) {\n this.cache.delete(d);\n }\n }\n\n private _fetchResourceById(\n id: number,\n requestOptions?: RequestOptions<'GET'>,\n ): CancelablePromise<ResourceItem | undefined> {\n const promise = () =>\n this.connector.get('resource.item', requestOptions, { id });\n\n return this.cache\n .add('resource.item', promise, {\n id,\n })\n .catch((er) => {\n if (!(er instanceof ResourceNotFoundError)) {\n throw er;\n }\n return undefined;\n });\n }\n\n private _fetchResourceBy(\n resource: DeepPartial<Resource>,\n requestOptions?: RequestOptions<'GET'>,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.getMany(resource, requestOptions).then((resources) => {\n return resources[0];\n });\n }\n\n private _resourceCacheFilter(\n resource: DeepPartial<Resource>,\n ): CancelablePromise<ResourceItem[]> {\n return CancelablePromise.all(this.cache.matchAll('resource.item')).then(\n (resources) => {\n const items: ResourceItem[] = [];\n resources.filter((x) => {\n if (x) {\n // identical by uniq props\n if (resource.keyname && x.resource.keyname) {\n return resource.keyname === x.resource.keyname;\n }\n if (defined(resource.id) && defined(x.resource.id)) {\n return resource.id === x.resource.id;\n }\n return resourceCompare(resource, x.resource);\n }\n });\n return items;\n },\n );\n }\n}\n","import { objectDeepEqual } from '@nextgis/utils';\n\nimport type { NgwConnector } from './NgwConnector';\nimport type { NgwConnectorOptions } from './interfaces';\n\nexport const CONNECTORS: NgwConnector[] = [];\n\nexport function addConnector(connector: NgwConnector): void {\n CONNECTORS.push(connector);\n}\n\nexport function findConnector(\n options: NgwConnectorOptions,\n): NgwConnector | undefined {\n return CONNECTORS.find((x) => {\n if (x.options.baseUrl === options.baseUrl) {\n if (options.auth) {\n if (x.options.auth) {\n return objectDeepEqual(x.options.auth, options.auth);\n }\n } else {\n // if auth not in find options; use first connector with same url\n return true;\n }\n }\n });\n}\n\nexport function removeConnector(connector: NgwConnector): void {\n const index = CONNECTORS.indexOf(connector);\n if (index !== -1) {\n CONNECTORS.splice(index, 1);\n }\n}\n\nexport function findAndRemoveConnector(options: NgwConnectorOptions): void {\n const exist = findConnector(options);\n if (exist) {\n removeConnector(exist);\n }\n}\n","import { NgwError } from './NgwError';\n\nimport type { NgwExceptions } from '../interfaces';\n\n/**\n * Thrown when ...\n */\nexport class InsufficientPermissionsError extends NgwError {\n name = 'InsufficientPermissionsError';\n exception: NgwExceptions =\n 'nextgisweb.core.exception.InsufficientPermissions';\n\n constructor(obj: InsufficientPermissionsError) {\n super(obj);\n Object.setPrototypeOf(this, InsufficientPermissionsError.prototype);\n }\n}\n","// https://github.com/Leaflet/Leaflet/blob/b507e21c510b53cd704fb8d3f89bb46ea925c8eb/src/core/Util.js#L165\nconst templateRe = /\\{ *([\\w_-]+) *\\}/g;\n\nexport function template(str: string, data: { [param: string]: any }): string {\n return str.replace(templateRe, (s, key) => {\n let value = data[key];\n\n if (value === undefined) {\n throw new Error('No value provided for letiable ' + s);\n } else if (typeof value === 'function') {\n value = value(data);\n }\n return value;\n });\n}\n","import CancelablePromise from '@nextgis/cancelable-promise';\n\nimport { template } from './template';\n\nimport type { NgwConnector } from '../NgwConnector';\nimport type {\n RequestItemKeys,\n RequestItemsParams,\n RequestOptions,\n} from '../interfaces';\nimport type { RequestItemsParamsMap } from '../types/RequestItemsParamsMap';\n\ninterface ApiRequestOptions<K extends keyof RequestItemsParamsMap> {\n name: string;\n connector: NgwConnector;\n params: RequestItemsParams<K>;\n requestOptions: RequestOptions;\n}\n\nexport function apiRequest<\n K extends keyof RequestItemsParamsMap,\n P extends RequestItemKeys = RequestItemKeys,\n>(opt: ApiRequestOptions<K>): CancelablePromise<P[K]> {\n const params = opt.params;\n return new CancelablePromise((resolve, reject) => {\n opt.connector\n .connect()\n .then((apiItems) => {\n let apiItem = apiItems && apiItems[opt.name];\n if (apiItem) {\n apiItem = [...apiItem];\n let url = apiItem.shift();\n if (apiItem.length) {\n const replaceParams: {\n [num: number]: string;\n } = {};\n for (let fry = 0; fry < apiItem.length; fry++) {\n const arg = apiItem[fry];\n replaceParams[fry] = '{' + arg + '}';\n if (params[arg] === undefined) {\n throw new Error(\n '`' + arg + '`' + ' url api argument is not specified',\n );\n }\n }\n if (url) {\n url = template(url, replaceParams);\n }\n }\n // Transfer part of the parameters from `params` to the URL string\n if (params) {\n const paramArray = [];\n const paramList = params.paramList;\n if (Array.isArray(paramList)) {\n delete params.paramList;\n paramList.forEach((x) => {\n paramArray.push(`${x[0]}=${x[1]}`);\n });\n }\n for (const p in params) {\n if (apiItem.indexOf(p) === -1) {\n paramArray.push(`${p}=${params[p]}`);\n }\n }\n if (paramArray.length) {\n url = url + '?' + paramArray.join('&');\n }\n }\n if (url) {\n resolve(opt.connector.makeQuery(url, params, opt.requestOptions));\n } else {\n reject(new Error('request url is not set'));\n }\n } else {\n resolve(undefined);\n }\n })\n .catch((er) => {\n reject(er);\n });\n });\n}\n","import { isObject } from '@nextgis/utils';\n\nexport function isError(error: unknown): error is Error {\n if (isObject(error)) {\n return error.status_code && error.exception && error.title;\n }\n return false;\n}\n","import { NetworkError } from '../errors/NetworkError';\nimport { NgwError } from '../errors/NgwError';\nimport { isError } from '../errors/isError';\n\nimport { isObject } from './isObject';\n\nimport type {\n RequestOptions as NgwRequestOptions,\n RequestMethods,\n} from '../interfaces';\n\n// readyState\n// Holds the status of the XMLHttpRequest.\n// 0: request not initialized\n// 1: server connection established\n// 2: request received\n// 3: processing request\n// 4: request finished and response is ready\n\n// status\n// 200: \"OK\"\n// 201 \"Created\"\tThe request has been fulfilled, and a new resource is created\n// 403: \"Forbidden\"\n// 404: \"Page not found\"\n// 500: \"Internal Server Error\"\n// For a complete list go to the Http Messages Reference\n\ntype LoadData = (\n url: string,\n callback: (...args: any[]) => any,\n options: NgwRequestOptions<RequestMethods> | undefined,\n error: (reason?: any) => void,\n onCancel: (cancelHandler: () => void) => void,\n) => void;\n\nlet loadData: LoadData;\n// @ts-ignore\nif (__BROWSER__) {\n loadData = (\n url: string,\n callback: (...args: any[]) => any,\n options: NgwRequestOptions = {},\n error: (reason?: any) => void,\n onCancel: (cancelHandler: () => void) => void,\n ): void => {\n options.method = options.method || 'GET';\n\n const xhr = new XMLHttpRequest();\n xhr.open(options.method || 'GET', url, true); // true for asynchronous\n\n if (options.responseType === 'blob') {\n xhr.responseType = options.responseType;\n }\n const getResponseText = () => {\n try {\n return JSON.parse(xhr.responseText);\n } catch (er) {\n return xhr.responseText;\n }\n };\n const processingResponse = (forError = false) => {\n const cb = forError ? error : callback;\n if (options.responseType === 'blob') {\n cb(xhr.response);\n } else {\n if (xhr.responseText) {\n cb(getResponseText());\n } else {\n error({ message: '' });\n }\n }\n };\n xhr.onload = () => {\n if ([401, 403, 404, 422, 500].indexOf(xhr.status) !== -1) {\n error(new NgwError(getResponseText()));\n }\n processingResponse();\n };\n\n // xhr.onreadystatechange = () => {\n // if (\n // (xhr.readyState === 4 && xhr.status === 200) ||\n // (xhr.readyState === 3 && xhr.status === 201)\n // ) {\n // processingResponse();\n // } else if (xhr.readyState === 3 && xhr.status === 400) {\n // processingResponse();\n // } else if (xhr.readyState === 4 && xhr.status === 500) {\n // processingResponse();\n // } else if (xhr.readyState === 4 && xhr.status === 401) {\n // error(xhr.statusText);\n // } else if (xhr.readyState === 4) {\n // error('request error');\n // }\n // };\n\n xhr.onerror = (er) => {\n if (xhr.status === 0) {\n error(new NetworkError(url));\n } else {\n error(er);\n }\n };\n\n xhr.upload.onprogress = function (e) {\n if (e.lengthComputable) {\n const percentComplete = (e.loaded / e.total) * 100;\n if (options.onProgress) {\n options.onProgress(percentComplete, e);\n }\n // console.log(percentComplete + '% uploaded');\n }\n };\n\n const headers = options.headers;\n if (headers) {\n for (const h in headers) {\n const header = headers[h];\n if (typeof header === 'string') {\n xhr.setRequestHeader(h, header);\n }\n }\n }\n if (options.withCredentials !== undefined) {\n xhr.withCredentials = options.withCredentials;\n }\n\n let data: FormData | any;\n if (options.file) {\n data = new FormData();\n data.append('file', options.file);\n if (options.data) {\n for (const d in options.data) {\n data.append(d, data[d]);\n }\n }\n } else {\n data = options.data\n ? typeof options.data === 'string'\n ? options.data\n : JSON.stringify(options.data)\n : null;\n }\n if (onCancel) {\n onCancel(() => {\n xhr.abort();\n });\n }\n xhr.send(data);\n };\n} else {\n const url = require('url');\n const http = require('http');\n const https = require('https');\n const FormData = require('form-data');\n\n const adapterFor = (inputUrl: string) => {\n const adapters: Record<string, any> = {\n 'http:': http,\n 'https:': https,\n };\n const protocol = url.parse(inputUrl).protocol || 'https:';\n return adapters[protocol];\n };\n\n loadData = (\n url: string,\n callback: (...args: any[]) => any,\n options: NgwRequestOptions<RequestMethods> = {},\n error: (reason?: any) => void,\n onCancel: (cancelHandler: () => void) => void,\n ): Promise<unknown> => {\n const { file, headers, method, data, responseType } = options;\n\n const request = new Promise((resolve, reject) => {\n const adapter = adapterFor(url);\n if (adapter) {\n const requestOpt = {\n headers: headers || {},\n method,\n };\n const body = typeof data === 'string' ? data : JSON.stringify(data);\n // https://stackoverflow.com/questions/35589109/node-http-delete-request-no-longer-works-after-upgrading-from-0-10-40\n let form;\n let uploadedFile = file;\n if (file) {\n const fileMeta = {};\n if (\n isObject(file) &&\n 'file' in file &&\n ('filename' in file || 'name' in file)\n ) {\n const {\n file: file_,\n name,\n ...fileMeta_\n } = file as Record<string, any>;\n if (name && !fileMeta_.filename) {\n fileMeta_.filename = name;\n }\n Object.assign(fileMeta, fileMeta_);\n uploadedFile = file_ as File;\n }\n form = new FormData();\n form.append('file', uploadedFile, fileMeta);\n if (data) {\n for (const d in data) {\n form.append(d, data[d]);\n }\n }\n Object.assign(requestOpt.headers, {\n // 'content-length': form.getLengthSync(),\n ...form.getHeaders(),\n });\n }\n\n if (body !== undefined) {\n Object.assign(requestOpt.headers, {\n 'content-type': 'application/json',\n 'content-length': Buffer.byteLength(body),\n });\n }\n const req = adapter.request(url, requestOpt, (resp: any) => {\n let data = '';\n resp.on('data', (chunk: any) => {\n data += chunk;\n });\n resp.on('end', () => {\n if (data) {\n if (responseType === 'blob') {\n resolve(data);\n } else {\n let json: Record<string, any> | undefined;\n try {\n json = JSON.parse(data);\n if (json && json.status_code && json.status_code) {\n reject(json.message);\n }\n } catch (er) {\n reject(er);\n }\n if (json !== undefined) {\n if (isError(json)) {\n reject('extractError(json)');\n } else {\n resolve(json);\n }\n }\n }\n }\n reject('no data');\n });\n });\n if (form) {\n form.pipe(req);\n }\n req.on('error', (err: any) => {\n reject(err);\n });\n if (body) {\n req.write(body);\n }\n onCancel(() => {\n req.abort();\n });\n req.end();\n } else {\n throw new Error(`Given URL '${url}' is not correct`);\n }\n });\n return request\n .then((data) => {\n if (callback) {\n callback(data);\n }\n return data;\n })\n .catch((er) => {\n if (error) {\n error(er);\n } else {\n throw new Error(er);\n }\n });\n };\n}\n\nexport { loadData };\n","import { EventEmitter } from 'events';\n\nimport Cache from '@nextgis/cache';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { objectRemoveEmpty } from '@nextgis/utils';\nimport { fixUrlStr } from '@nextgis/utils';\n\nimport { ResourcesControl } from './ResourcesControl';\nimport {\n addConnector,\n findConnector,\n removeConnector,\n} from './activeConnectors';\nimport { InsufficientPermissionsError } from './errors/InsufficientPermissionsError';\nimport { NgwError } from './errors/NgwError';\nimport { ResourceNotFoundError } from './errors/ResourceNotFoundError';\nimport { apiRequest } from './utils/apiRequest';\nimport { loadData } from './utils/loadData';\nimport { template } from './utils/template';\n\nimport type {\n Credentials,\n DeleteRequestItemsResponseMap,\n GetChildrenOfOptions,\n GetRequestItemsResponseMap,\n NgwConnectorOptions,\n Params,\n PatchRequestItemsResponseMap,\n PostRequestItemsResponseMap,\n PutRequestItemsResponseMap,\n PyramidRoute,\n RequestHeaders,\n RequestItemKeys,\n RequestItemsParams,\n RequestOptions,\n RequestTransformFunction,\n ResourceDefinition,\n ResourceIdKeynameDef,\n UserInfo,\n} from './interfaces';\nimport type { RequestItemsParamsMap } from './types/RequestItemsParamsMap';\nimport type { Resource, ResourceItem } from './types/ResourceItem';\nimport type { DeepPartial } from '@nextgis/utils';\n\nlet ID = 0;\n\nexport class NgwConnector {\n static errors = {\n NgwError,\n ResourceNotFoundError,\n };\n id = ID++;\n emitter = new EventEmitter();\n user?: UserInfo;\n resources!: ResourcesControl;\n cache: Cache;\n private routeStr = '/api/component/pyramid/route';\n private activeRequests: CancelablePromise[] = [];\n private requestTransform?: RequestTransformFunction | null;\n\n constructor(public options: NgwConnectorOptions) {\n const exist = findConnector(options);\n this.cache = new Cache({ namespace: options.cacheId });\n if (exist) {\n return exist;\n } else {\n if (this.options.route) {\n this.routeStr = this.options.route;\n }\n if (this.options.requestTransform) {\n this.requestTransform = this.options.requestTransform;\n }\n this.resources = new ResourcesControl({\n connector: this,\n cacheId: options.cacheId,\n });\n addConnector(this);\n }\n }\n\n static create(options: NgwConnectorOptions): NgwConnector {\n return new this(options);\n }\n\n /**\n * Clear the cache.\n */\n clearCache(): void {\n this.cache.clean();\n this.resources.cache.clean();\n }\n\n setRequestTransform(\n requestTransform: RequestTransformFunction | undefined | null,\n ) {\n this.requestTransform = requestTransform;\n }\n\n /**\n * Fast way to specify the connection address to NextGIS Web.\n * The current connection will be severed.\n * @param baseUrl - NGW url\n */\n setNgw(baseUrl: string): void {\n this.logout();\n this.options.baseUrl = baseUrl;\n addConnector(this);\n }\n\n /**\n * Establishing a connection with NextGIS Web to fulfill all other requests.\n * @remarks\n * This method need not be called manually as it is used when forming a request in {@link apiRequest | apiRequest}.\n * Can be used to check connection.\n * @example\n * ```javascript\n * const connector = new NgwConnector({baseUrl: 'https://demo.nextgis.com'});\n * connector.connect()\n * .then(() => console.log('Ok'))\n * .catch((er) => console.log('Connection problem', er));\n * ```\n */\n connect(): CancelablePromise<PyramidRoute> {\n const auth = this.options.auth;\n const makeConnect = () =>\n new CancelablePromise((resolve, reject) => {\n const makeQuery = () => {\n return this.makeQuery<PyramidRoute>(this.routeStr, {}, {})\n .then((route) => {\n resolve(route);\n })\n .catch((er) => {\n reject(er);\n });\n };\n if (auth) {\n const { login, password } = auth;\n if (login && password) {\n return this._login({ login, password })\n .then(() => {\n return makeQuery();\n })\n .catch((er) => reject(er));\n }\n }\n return makeQuery();\n });\n return this.cache.add('route', makeConnect, {\n id: this.id,\n auth,\n baseUrl: this.options.baseUrl,\n });\n }\n\n /**\n * Quick way to change NextGIS Web user.\n * @param credentials - New user credentials\n */\n login(\n credentials: Credentials,\n options?: RequestOptions,\n ): CancelablePromise<UserInfo> {\n this.logout();\n addConnector(this);\n return this._login(credentials, options);\n }\n\n /**\n * Disconnecting a user. Aborting all current requests\n */\n logout(): void {\n this.abort();\n removeConnector(this);\n this.options.auth = undefined;\n this.user = undefined;\n this.clearCache();\n this.emitter.emit('logout');\n }\n\n getUserInfo(\n credentials?: Credentials,\n options?: RequestOptions,\n ): CancelablePromise<UserInfo> {\n if (this.user && this.user.id) {\n return CancelablePromise.resolve(this.user);\n }\n if (credentials) {\n this.options.auth = credentials;\n }\n const options_: RequestOptions = {\n headers: this.getAuthorizationHeaders(credentials),\n // withCredentials: true\n ...options,\n };\n\n // Do not use apiRequest('auth.current_user') to avoid circular-references\n return this.makeQuery<UserInfo>(\n '/api/component/auth/current_user',\n {},\n options_,\n );\n }\n\n /**\n * Obtaining the required Headers for authentication of requests in the NGW.\n */\n getAuthorizationHeaders(\n credentials?: Credentials,\n ): RequestHeaders | undefined {\n const client = this.makeClientId(credentials);\n if (client) {\n return {\n Authorization: 'Basic ' + client,\n };\n }\n }\n\n makeClientId(credentials?: Credentials): string | undefined {\n credentials = credentials || this.options.auth;\n if (credentials) {\n const { login, password } = credentials;\n const str = unescape(encodeURIComponent(`${login}:${password}`));\n // @ts-ignore\n if (__BROWSER__) {\n return window.btoa(str);\n } else {\n return Buffer.from(str).toString('base64');\n }\n }\n }\n\n /** Stop all api requests */\n abort() {\n for (const req of this.activeRequests) {\n req.cancel();\n }\n this.activeRequests = [];\n }\n\n getActiveApiRequests() {\n return [...this.activeRequests];\n }\n\n /**\n * Send request to NGW api router.\n * @param name - NGW route name from {@link https://docs.nextgis.com/docs_ngweb_dev/doc/developer/resource.html#routes | routes}\n * @param params - Request item params or query params\n * @param requestOptions - Request options\n *\n * @example\n * ```javascript\n *\n * // there is such an NGW route item\n * // \"feature_layer.feature.item\": [\n * // \"/api/resource/{0}/feature/{1}\",\n * // \"id\",\n * // \"fid\"\n * // ],\n *\n * const connector = new NgwConnector({ baseUrl: 'https://example.nextgis.com' });\n * connector.apiRequest('feature_layer.feature.item', {\n * // request params for {0} and {1}\n * 'id': 2011,\n * 'fid': 101,\n * // query params\n * 'srs': 4326,\n * 'geom_format': 'geojson',\n * }, { method: 'GET' });\n * // send get-request to 'https://example.nextgis.com/api/resource/2011/feature/101?srs=4326&geom_format=geojson'\n *\n * ```\n */\n apiRequest<\n K extends keyof RequestItemsParamsMap,\n P extends RequestItemKeys = RequestItemKeys,\n >(\n name: K,\n params_: RequestItemsParams<K> = {},\n requestOptions: RequestOptions = {},\n ): CancelablePromise<P[K]> {\n const { method, headers, withCredentials, responseType } = requestOptions;\n\n params_ = requestOptions.params ?? params_;\n const params = objectRemoveEmpty(params_);\n const makeApiRequest = () =>\n apiRequest({ name, params, requestOptions, connector: this });\n if (requestOptions.cache && method === 'GET') {\n return this.cache.add(name, makeApiRequest, {\n params,\n ...objectRemoveEmpty({\n headers,\n withCredentials,\n responseType,\n baseUrl: this.options.baseUrl,\n userId: this.user?.id,\n }),\n });\n }\n return makeApiRequest();\n }\n\n /**\n * Shortcut method for send POST request to NGW.\n * @param name - NGW route name from {@link https://docs.nextgis.com/docs_ngweb_dev/doc/developer/resource.html#routes | routes}\n * @param options - Request options\n * @param params - Request item params or query params\n *\n * @example\n * ```javascript\n * connector.post('resource.collection', { data: POST_PAYLOAD })\n * .then((newResource) => console.log(newResource))\n * .catch((error) => console.warn(error));\n * ```\n */\n post<K extends keyof RequestItemsParamsMap>(\n name: K,\n options?: RequestOptions<'POST', K>,\n params?: RequestItemsParams<K>,\n ): CancelablePromise<PostRequestItemsResponseMap[K]> {\n options = options || {};\n options.method = 'POST';\n return this.apiRequest<K, PostRequestItemsResponseMap>(\n name,\n params,\n options,\n );\n }\n\n /**\n * Shortcut method for send GET request to NGW.\n * @param name - NGW route name from {@link https://docs.nextgis.com/docs_ngweb_dev/doc/developer/resource.html#routes | routes}\n * @param options - Request options\n * @param params - Request item params or query params\n */\n get<K extends keyof RequestItemsParamsMap>(\n name: K,\n options?: RequestOptions<'GET', K> | undefined | null,\n params?: RequestItemsParams<K>,\n ): CancelablePromise<GetRequestItemsResponseMap[K]> {\n options = options || {};\n options.method = 'GET';\n return this.apiRequest<K, GetRequestItemsResponseMap>(\n name,\n params,\n options,\n );\n }\n\n /**\n * Shortcut method for send PATCH request to NGW.\n * @param name - NGW route name from {@link https://docs.nextgis.com/docs_ngweb_dev/doc/developer/resource.html#routes | routes}\n * @param options - Request options\n * @param params - Request item params or query params\n */\n patch<K extends keyof RequestItemsParamsMap>(\n name: K,\n options?: RequestOptions<'PATCH', K>,\n params?: RequestItemsParams<K>,\n ): CancelablePromise<PatchRequestItemsResponseMap[K]> {\n options = options || {};\n options.method = 'PATCH';\n return this.apiRequest<K, PatchRequestItemsResponseMap>(\n name,\n params,\n options,\n );\n }\n\n /**\n * Shortcut method for send PUT request to NGW.\n * @param name - NGW route name from {@link https://docs.nextgis.com/docs_ngweb_dev/doc/developer/resource.html#routes | routes}\n * @param options - Request options\n * @param params - Request item params or query params\n */\n put<K extends keyof RequestItemsParamsMap>(\n name: K,\n options?: RequestOptions<'PUT', K>,\n params?: RequestItemsParams<K>,\n ): CancelablePromise<PutRequestItemsResponseMap[K]> {\n options = options || {};\n options.method = 'PUT';\n return this.apiRequest<K, PutRequestItemsResponseMap>(\n name,\n params,\n options,\n );\n }\n\n /**\n * Shortcut method for send DELETE request to NGW.\n * @param name - NGW route name from {@link https://docs.nextgis.com/docs_ngweb_dev/doc/developer/resource.html#routes | routes}\n * @param options - Request options\n * @param params - Request item params or query params\n */\n delete<K extends keyof RequestItemsParamsMap>(\n name: K,\n options?: RequestOptions<'DELETE', K> | undefined | null,\n params?: RequestItemsParams<K>,\n ): CancelablePromise<DeleteRequestItemsResponseMap[K]> {\n options = options || {};\n options.method = 'DELETE';\n return this.apiRequest<K, DeleteRequestItemsResponseMap>(\n name,\n params,\n options,\n );\n }\n\n /**\n * Send request to NGW.\n * @param url - URL address to NGW\n * @param params - Query params\n * @param options - Request options\n */\n makeQuery<R = unknown>(\n url: string,\n params?: Params | null,\n options: RequestOptions = {},\n ): CancelablePromise<R> {\n url = (this.options.baseUrl ? this.options.baseUrl : '') + url;\n if (url) {\n if (params) {\n url = template(url, params);\n }\n url = encodeURI(fixUrlStr(url));\n return this._loadData(url, options);\n } else {\n throw new Error('Empty `url` not allowed');\n }\n }\n\n // -------------------------------------------------------------------------\n // Resource Methods\n // -------------------------------------------------------------------------\n\n /**\n * {@link ResourcesControl.getOne}\n */\n getResource(\n resource: ResourceDefinition,\n requestOptions?: RequestOptions<'GET'>,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.resources.getOne(resource, requestOptions);\n }\n\n /**\n * {@link ResourcesControl.getOneOrFail}\n */\n getResourceOrFail(\n resource: ResourceDefinition,\n requestOptions?: RequestOptions<'GET'>,\n ): CancelablePromise<ResourceItem> {\n return this.resources.getOneOrFail(resource, requestOptions);\n }\n\n /**\n * @deprecated - use {@link getResource}\n */\n getResourceBy(\n resource: DeepPartial<Resource>,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.resources.getOne(resource);\n }\n\n /**\n * @deprecated - use {@link getResource}\n */\n getResourceByKeyname(\n keyname: string,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.resources.getOne(keyname);\n }\n\n /**\n * @deprecated - use {@link getResource}\n */\n getResourceById(id: number): CancelablePromise<ResourceItem | undefined> {\n return this.resources.getOne(id);\n }\n\n /**\n * {@link ResourcesControl.getId}\n */\n getResourceId(\n resource: ResourceDefinition,\n requestOptions?: RequestOptions<'GET'>,\n ): CancelablePromise<number | undefined> {\n return this.resources.getId(resource, requestOptions);\n }\n\n /**\n * {@link ResourcesControl.getIdOrFail}\n */\n getResourceIdOrFail(\n resource: ResourceDefinition,\n requestOptions?: RequestOptions<'GET'>,\n ): CancelablePromise<number> {\n return this.resources.getIdOrFail(resource, requestOptions);\n }\n\n /**\n * {@link ResourcesControl.getMany}\n */\n getResourcesBy(\n resource: DeepPartial<Resource>,\n requestOptions?: RequestOptions<'GET'>,\n ): CancelablePromise<ResourceItem[]> {\n return this.resources.getMany(resource, requestOptions);\n }\n\n /**\n * {@link ResourcesControl.getParent}\n */\n getResourceParent(\n resource: ResourceDefinition,\n requestOptions?: RequestOptions<'GET'>,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.resources.getParent(resource, requestOptions);\n }\n\n /**\n * {@link ResourcesControl.getChildrenOf}\n */\n getResourceChildren(\n resource: ResourceDefinition,\n requestOptions?: GetChildrenOfOptions,\n ): CancelablePromise<ResourceItem[]> {\n return this.resources.getChildrenOf(resource, requestOptions);\n }\n\n /**\n * {@link ResourcesControl.update}\n */\n updateResource(\n resource: ResourceIdKeynameDef,\n data: DeepPartial<ResourceItem>,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.resources.update(resource, data);\n }\n\n /**\n * {@link ResourcesControl.delete}\n */\n deleteResource(resource: ResourceIdKeynameDef): CancelablePromise<void> {\n return this.resources.delete(resource);\n }\n\n /**\n * @internal\n */\n protected _loadData(\n url: string,\n options: RequestOptions,\n ): CancelablePromise<any> {\n options.responseType = options.responseType || 'json';\n if (options.signal && options.signal.aborted) {\n return CancelablePromise.reject(new CancelablePromise.CancelError());\n }\n\n const request = new CancelablePromise((resolve, reject, onCancel) => {\n if (this.user) {\n options = options || {};\n // options.withCredentials = true;\n options.headers = {\n ...this.getAuthorizationHeaders(),\n ...options.headers,\n };\n }\n\n if (this.requestTransform) {\n const [transUrl, transOptions] = this.requestTransform(url, options);\n url = transUrl;\n options = transOptions;\n }\n loadData(url, resolve, options, reject, onCancel);\n })\n .then((resp) => {\n this._cleanActiveRequests(request);\n return resp;\n })\n .catch((httpError) => {\n this._cleanActiveRequests(request);\n if (httpError instanceof CancelablePromise.CancelError) {\n // not need to handle cancel error because onCancel method is used\n } else {\n if (__DEV__) {\n console.warn('DEV WARN', httpError);\n }\n const er = this._handleHttpError(httpError);\n if (er) {\n throw er;\n }\n }\n });\n if (\n options.signal &&\n typeof options.signal.addEventListener === 'function'\n ) {\n options.signal.addEventListener('abort', () => {\n request.cancel();\n this._cleanActiveRequests(request);\n });\n }\n this.activeRequests.push(request);\n return request;\n }\n\n private _login(\n credentials: Credentials,\n options?: RequestOptions,\n ): CancelablePromise<UserInfo> {\n return this.getUserInfo(credentials, options)\n .then((data) => {\n this.user = data;\n this.emitter.emit('login', data);\n return data;\n })\n .catch((er) => {\n this.emitter.emit('login:error', er);\n throw er;\n });\n }\n\n private _cleanActiveRequests(request: CancelablePromise) {\n const activeRequestIndex = this.activeRequests.indexOf(request);\n if (activeRequestIndex !== -1) {\n this.activeRequests.splice(activeRequestIndex, 1);\n }\n }\n\n private _handleHttpError(er: Error) {\n if (er) {\n if (er instanceof NgwError) {\n if (er.exception === 'nextgisweb.resource.exception.ResourceNotFound') {\n throw new ResourceNotFoundError(er);\n } else if (\n er.exception === 'nextgisweb.core.exception.InsufficientPermissions'\n ) {\n throw new InsufficientPermissionsError(er);\n }\n }\n }\n return er;\n }\n}\n"],"names":["__publicField","objectDeepEqual","defined","isObject","FormData","url","data","EventEmitter","objectRemoveEmpty","fixUrlStr"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngw-connector.cjs.js","sources":["../src/errors/NgwError.ts","../src/errors/ResourceNotFoundError.ts","../src/utils/isObject.ts","../src/utils/resourceCompare.ts","../src/utils/resourceToQuery.ts","../src/ResourcesControl.ts","../src/activeConnectors.ts","../src/errors/InsufficientPermissionsError.ts","../src/utils/template.ts","../src/utils/apiRequest.ts","../src/errors/isError.ts","../src/utils/loadData.ts","../src/NgwConnector.ts"],"sourcesContent":["import type { NgwExceptions } from '../interfaces';\n\n/**\n * Thrown when...\n */\nexport class NgwError extends Error {\n name = 'NgwError';\n\n title!: string;\n message!: string;\n detail!: string;\n exception!: NgwExceptions;\n status_code!: number | 404 | 500;\n data?: Record<string, any>;\n guru_meditation!: string;\n\n constructor(er?: Partial<NgwError>) {\n super();\n Object.assign(this, er);\n Object.setPrototypeOf(this, NgwError.prototype);\n }\n}\n","import { NgwError } from './NgwError';\n\nimport type { NgwExceptions } from '../interfaces';\n\n/**\n * Thrown when ...\n */\nexport class ResourceNotFoundError extends NgwError {\n name = 'ResourceNotFoundError';\n exception: NgwExceptions = 'nextgisweb.resource.exception.ResourceNotFound';\n\n constructor(obj?: ResourceNotFoundError) {\n super(obj);\n Object.setPrototypeOf(this, ResourceNotFoundError.prototype);\n }\n}\n","export function isObject(val: unknown): val is Record<string | number, any> {\n return Object.prototype.toString.call(val) === '[object Object]';\n}\n","import { objectDeepEqual } from '@nextgis/utils';\n\nimport type { Resource } from '../types/ResourceItem';\nimport type { DeepPartial } from '@nextgis/utils';\n\nexport function resourceCompare(\n res1: DeepPartial<Resource>,\n res2: DeepPartial<Resource>,\n): boolean {\n return objectDeepEqual(res1, res2);\n}\n","import { defined } from '@nextgis/utils';\n\nimport { isObject } from './isObject';\n\nimport type { Resource } from '../types/ResourceItem';\nimport type { DeepPartial } from '@nextgis/utils';\n\nconst exclude = ['description'];\n\n/**\n * @remarks\n * https://docs.nextgis.com/docs_ngweb_dev/doc/developer/resource.html#search-resources\n *\n * ```\n * { keyname, owner_user: { id }} > { keyname, owner_user__id }\n * ```\n *\n * @param resource - Any property from NGW resource item\n */\nexport function resourceToQuery(\n resource: DeepPartial<Resource>,\n prefix = '',\n): Record<string, unknown> {\n prefix = prefix ? prefix + '__' : '';\n const query: Record<string, any> = {};\n for (const [key, value] of Object.entries(resource)) {\n if (exclude.indexOf(key) === -1) {\n if (isObject(value)) {\n if (key === 'owner_user') {\n const children = resourceToQuery(value as DeepPartial<Resource>, key);\n Object.assign(query, children);\n } else if (key === 'parent' && 'id' in value) {\n query.parent_id = value.id;\n }\n } else if (defined(value)) {\n query[prefix + key] = value;\n }\n }\n }\n return query;\n}\n","import Cache from '@nextgis/cache';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { defined } from '@nextgis/utils';\n\nimport { ResourceNotFoundError } from './errors/ResourceNotFoundError';\nimport { isObject } from './utils/isObject';\nimport { resourceCompare } from './utils/resourceCompare';\nimport { resourceToQuery } from './utils/resourceToQuery';\n\nimport type { NgwConnector } from './NgwConnector';\nimport type {\n GetChildrenOfOptions,\n RequestOptions,\n ResourceDefinition,\n} from './interfaces';\nimport type { Resource, ResourceItem } from './types/ResourceItem';\nimport type { DeepPartial } from '@nextgis/utils';\n\nexport class ResourcesControl {\n cache: Cache<\n CancelablePromise<ResourceItem | undefined>,\n { id?: number | string }\n >;\n connector: NgwConnector;\n\n constructor({\n connector,\n cacheId,\n }: {\n connector: NgwConnector;\n cacheId?: string;\n }) {\n this.connector = connector;\n this.cache = new Cache({ namespace: cacheId });\n }\n\n // -------------------------------------------------------------------------\n // Resource Methods\n // -------------------------------------------------------------------------\n\n /**\n * Receive resource from NGW by id, keyname or search-object parameter.\n * @param resource - Resource id, keyname or search-object\n *\n * @remarks\n * Fetching resource would be cached to speed up next call\n */\n getOne(\n resource: ResourceDefinition,\n requestOptions?: RequestOptions<'GET'>,\n ): CancelablePromise<ResourceItem | undefined> {\n const cache = this.cache;\n const forCache: { keyname?: string; display_name?: string; id?: number } =\n {};\n const opt = { ...requestOptions, cache: false };\n if (typeof resource === 'string') {\n forCache.keyname = resource;\n } else if (typeof resource === 'number') {\n forCache.id = resource;\n } else if (isObject(resource)) {\n if (resource.id !== undefined) {\n forCache.id = resource.id;\n } else {\n if (resource.keyname) {\n forCache.keyname = resource.keyname;\n }\n if (resource.display_name) {\n forCache.display_name = resource.display_name;\n }\n }\n }\n const makeRequest = () => {\n if (typeof resource === 'string') {\n return this._fetchResourceBy({ keyname: resource }, opt);\n } else if (typeof resource === 'number') {\n return this._fetchResourceById(resource, opt);\n } else if (isObject(resource)) {\n return this._fetchResourceBy(resource, opt);\n }\n return CancelablePromise.resolve(undefined);\n };\n if (requestOptions?.cache) {\n return cache.addFull('resource', makeRequest, forCache);\n }\n return makeRequest();\n }\n\n getOneOrFail(\n resource: ResourceDefinition,\n requestOptions?: RequestOptions<'GET'>,\n ): CancelablePromise<ResourceItem> {\n return this.getOne(resource, requestOptions).then((res) => {\n if (res) {\n return res;\n }\n throw new ResourceNotFoundError();\n });\n }\n\n /**\n * A fast way to retrieve resource ID for any resource definition.\n * @param resource - Any available resource definition\n *\n * @remarks\n * There are situations when exactly the resource id is needed\n * (for example, to compose the correct request to the api)\n * then this method will come in handy to facilitate the extraction of the identifier\n * if the resource is specified through a keyname or other parameters.\n */\n getId(\n resource: ResourceDefinition,\n requestOptions?: RequestOptions<'GET'>,\n ): CancelablePromise<number | undefined> {\n if (typeof resource === 'number') {\n return CancelablePromise.resolve(resource);\n } else if (typeof resource === 'string' || isObject(resource)) {\n return this.getOne(resource, requestOptions).then((res) => {\n if (res) {\n return res.resource.id;\n }\n });\n }\n return CancelablePromise.resolve(undefined);\n }\n\n /**\n * A fast way to retrieve resource ID for any resource definition.\n * @param resource - Any available resource definition\n *\n * @remarks\n * Similar with {@link NgwConnector.getResourceId | getResourceId} but rise error if resource is not exist.\n * To not make one more checks if the resource is definitely exists\n */\n getIdOrFail(\n resource: ResourceDefinition,\n requestOptions?: RequestOptions<'GET'>,\n ): CancelablePromise<number> {\n return this.getId(resource, requestOptions).then((resp) => {\n if (resp === undefined) {\n throw new Error();\n }\n return resp;\n });\n }\n\n getMany(\n resource: DeepPartial<Resource>,\n requestOptions?: RequestOptions<'GET'>,\n ): CancelablePromise<ResourceItem[]> {\n return this._resourceCacheFilter(resource).then((items) => {\n if (!items.length) {\n const query: Record<string, unknown> = {};\n if (resource.keyname) {\n query.keyname = resource.keyname;\n } else {\n Object.assign(query, resourceToQuery(resource));\n }\n return this.connector\n .get('resource.search', requestOptions, {\n serialization: 'full',\n ...query,\n })\n .then((resources) => {\n if (resources) {\n for (const x of resources) {\n this.cache.add('resource.item', CancelablePromise.resolve(x), {\n id: x.resource.id,\n });\n }\n }\n return resources;\n });\n }\n return items;\n });\n }\n\n getParent(\n resource: ResourceDefinition,\n requestOptions?: RequestOptions<'GET'>,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.getOne(resource, requestOptions).then((child) => {\n if (child) {\n return this.getOne(child.resource.parent.id, requestOptions);\n }\n return CancelablePromise.resolve(undefined);\n });\n }\n\n getChildrenOf(\n resource: ResourceDefinition,\n requestOptions?: GetChildrenOfOptions,\n ): CancelablePromise<ResourceItem[]> {\n return this.getIdOrFail(resource).then((parent) =>\n this._getChildrenOf(parent, requestOptions),\n );\n }\n\n update(\n resource: ResourceDefinition,\n data: DeepPartial<ResourceItem>,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.getId(resource).then((id) => {\n if (id !== undefined) {\n return this.connector.put('resource.item', { data }, { id });\n }\n });\n }\n\n /**\n * Fast way to delete resource from NGW and clean cache.\n * @param resource - Resource definition\n */\n delete(resource: ResourceDefinition): CancelablePromise<void> {\n return this.getId(resource).then((id) => {\n if (id !== undefined) {\n return this.connector.delete('resource.item', null, { id }).then(() => {\n this._cleanResourceItemCache(id);\n return undefined;\n });\n }\n });\n }\n\n private _getChildrenOf(\n parent: ResourceDefinition,\n requestOptions?: GetChildrenOfOptions,\n _items: ResourceItem[] = [],\n ): CancelablePromise<ResourceItem[]> {\n return this.connector\n .get(\n 'resource.collection',\n { cache: true, ...requestOptions },\n {\n parent,\n },\n )\n .then((items) => {\n const recursivePromises = [];\n for (const item of items) {\n this.cache.add('resource.item', CancelablePromise.resolve(item), {\n id: item.resource.id,\n });\n _items.push(item);\n if (requestOptions?.recursive && item.resource.children) {\n recursivePromises.push(\n this._getChildrenOf(item.resource.id, requestOptions, _items),\n );\n }\n }\n if (recursivePromises.length) {\n return CancelablePromise.all(recursivePromises).then(() => {\n return _items;\n });\n }\n return _items;\n });\n }\n\n private async _cleanResourceItemCache(id: number) {\n const all = this.cache.all();\n const toDelete: typeof all = [];\n for (const c of all) {\n const cid = c.options && c.options.id;\n if (['resource.item', 'resource'].includes(c.key) && cid !== undefined) {\n if (typeof cid === 'number') {\n if (cid === id) {\n toDelete.push(c);\n }\n } else {\n const rid = await this.getId(cid);\n if (rid === id) {\n toDelete.push(c);\n }\n }\n }\n }\n for (const d of toDelete) {\n this.cache.delete(d);\n }\n }\n\n private _fetchResourceById(\n id: number,\n requestOptions?: RequestOptions<'GET'>,\n ): CancelablePromise<ResourceItem | undefined> {\n const promise = () =>\n this.connector.get('resource.item', requestOptions, { id });\n if (requestOptions?.cache) {\n return this.cache\n .add('resource.item', promise, {\n id,\n })\n .catch((er) => {\n if (!(er instanceof ResourceNotFoundError)) {\n throw er;\n }\n return undefined;\n });\n }\n return promise();\n }\n\n private _fetchResourceBy(\n resource: DeepPartial<Resource>,\n requestOptions?: RequestOptions<'GET'>,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.getMany(resource, requestOptions).then((resources) => {\n return resources[0];\n });\n }\n\n private _resourceCacheFilter(\n resource: DeepPartial<Resource>,\n ): CancelablePromise<ResourceItem[]> {\n return CancelablePromise.all(this.cache.matchAll('resource.item')).then(\n (resources) => {\n const items: ResourceItem[] = [];\n resources.filter((x) => {\n if (x) {\n // identical by uniq props\n if (resource.keyname && x.resource.keyname) {\n return resource.keyname === x.resource.keyname;\n }\n if (defined(resource.id) && defined(x.resource.id)) {\n return resource.id === x.resource.id;\n }\n return resourceCompare(resource, x.resource);\n }\n });\n return items;\n },\n );\n }\n}\n","import { objectDeepEqual } from '@nextgis/utils';\n\nimport type { NgwConnector } from './NgwConnector';\nimport type { NgwConnectorOptions } from './interfaces';\n\nexport const CONNECTORS: NgwConnector[] = [];\n\nexport function addConnector(connector: NgwConnector): void {\n CONNECTORS.push(connector);\n}\n\nexport function findConnector(\n options: NgwConnectorOptions,\n): NgwConnector | undefined {\n return CONNECTORS.find((x) => {\n if (x.options.baseUrl === options.baseUrl) {\n if (options.auth) {\n if (x.options.auth) {\n return objectDeepEqual(x.options.auth, options.auth);\n }\n } else {\n // if auth not in find options; use first connector with same url\n return true;\n }\n }\n });\n}\n\nexport function removeConnector(connector: NgwConnector): void {\n const index = CONNECTORS.indexOf(connector);\n if (index !== -1) {\n CONNECTORS.splice(index, 1);\n }\n}\n\nexport function findAndRemoveConnector(options: NgwConnectorOptions): void {\n const exist = findConnector(options);\n if (exist) {\n removeConnector(exist);\n }\n}\n","import { NgwError } from './NgwError';\n\nimport type { NgwExceptions } from '../interfaces';\n\n/**\n * Thrown when ...\n */\nexport class InsufficientPermissionsError extends NgwError {\n name = 'InsufficientPermissionsError';\n exception: NgwExceptions =\n 'nextgisweb.core.exception.InsufficientPermissions';\n\n constructor(obj: InsufficientPermissionsError) {\n super(obj);\n Object.setPrototypeOf(this, InsufficientPermissionsError.prototype);\n }\n}\n","// https://github.com/Leaflet/Leaflet/blob/b507e21c510b53cd704fb8d3f89bb46ea925c8eb/src/core/Util.js#L165\nconst templateRe = /\\{ *([\\w_-]+) *\\}/g;\n\nexport function template(str: string, data: { [param: string]: any }): string {\n return str.replace(templateRe, (s, key) => {\n let value = data[key];\n\n if (value === undefined) {\n throw new Error('No value provided for letiable ' + s);\n } else if (typeof value === 'function') {\n value = value(data);\n }\n return value;\n });\n}\n","import CancelablePromise from '@nextgis/cancelable-promise';\n\nimport { template } from './template';\n\nimport type { NgwConnector } from '../NgwConnector';\nimport type {\n RequestItemKeys,\n RequestItemsParams,\n RequestOptions,\n} from '../interfaces';\nimport type { RequestItemsParamsMap } from '../types/RequestItemsParamsMap';\n\ninterface ApiRequestOptions<K extends keyof RequestItemsParamsMap> {\n name: string;\n connector: NgwConnector;\n params: RequestItemsParams<K>;\n requestOptions: RequestOptions;\n}\n\nexport function apiRequest<\n K extends keyof RequestItemsParamsMap,\n P extends RequestItemKeys = RequestItemKeys,\n>(opt: ApiRequestOptions<K>): CancelablePromise<P[K]> {\n const params = opt.params;\n return new CancelablePromise((resolve, reject) => {\n return opt.connector\n .connect()\n .then((apiItems) => {\n let apiItem = apiItems && apiItems[opt.name];\n if (apiItem) {\n apiItem = [...apiItem];\n let url = apiItem.shift();\n if (apiItem.length) {\n const replaceParams: {\n [num: number]: string;\n } = {};\n for (let fry = 0; fry < apiItem.length; fry++) {\n const arg = apiItem[fry];\n replaceParams[fry] = '{' + arg + '}';\n if (params[arg] === undefined) {\n throw new Error(\n '`' + arg + '`' + ' url api argument is not specified',\n );\n }\n }\n if (url) {\n url = template(url, replaceParams);\n }\n }\n // Transfer part of the parameters from `params` to the URL string\n if (params) {\n const paramArray = [];\n const paramList = params.paramList;\n if (Array.isArray(paramList)) {\n delete params.paramList;\n paramList.forEach((x) => {\n paramArray.push(`${x[0]}=${x[1]}`);\n });\n }\n for (const p in params) {\n if (apiItem.indexOf(p) === -1) {\n paramArray.push(`${p}=${params[p]}`);\n }\n }\n if (paramArray.length) {\n url = url + '?' + paramArray.join('&');\n }\n }\n if (url) {\n resolve(opt.connector.makeQuery(url, params, opt.requestOptions));\n } else {\n reject(new Error('request url is not set'));\n }\n } else {\n resolve(undefined);\n }\n })\n .catch((er) => {\n reject(er);\n });\n });\n}\n","import { isObject } from '@nextgis/utils';\n\nexport function isError(error: unknown): error is Error {\n if (isObject(error)) {\n return error.status_code && error.exception && error.title;\n }\n return false;\n}\n","import { NetworkError } from '../errors/NetworkError';\nimport { NgwError } from '../errors/NgwError';\nimport { isError } from '../errors/isError';\n\nimport { isObject } from './isObject';\n\nimport type {\n RequestOptions as NgwRequestOptions,\n RequestMethods,\n} from '../interfaces';\n\n// readyState\n// Holds the status of the XMLHttpRequest.\n// 0: request not initialized\n// 1: server connection established\n// 2: request received\n// 3: processing request\n// 4: request finished and response is ready\n\n// status\n// 200: \"OK\"\n// 201 \"Created\"\tThe request has been fulfilled, and a new resource is created\n// 403: \"Forbidden\"\n// 404: \"Page not found\"\n// 500: \"Internal Server Error\"\n// For a complete list go to the Http Messages Reference\n\ntype LoadData = (\n url: string,\n callback: (...args: any[]) => any,\n options: NgwRequestOptions<RequestMethods> | undefined,\n error: (reason?: any) => void,\n onCancel: (cancelHandler: () => void) => void,\n) => void;\n\nlet loadData: LoadData;\n// @ts-ignore\nif (__BROWSER__) {\n loadData = (\n url: string,\n callback: (...args: any[]) => any,\n options: NgwRequestOptions = {},\n error: (reason?: any) => void,\n onCancel: (cancelHandler: () => void) => void,\n ): void => {\n options.method = options.method || 'GET';\n\n const xhr = new XMLHttpRequest();\n xhr.open(options.method || 'GET', url, true); // true for asynchronous\n\n if (options.responseType === 'blob') {\n xhr.responseType = options.responseType;\n }\n const getResponseText = () => {\n try {\n return JSON.parse(xhr.responseText);\n } catch (er) {\n return xhr.responseText;\n }\n };\n const processingResponse = (forError = false) => {\n const cb = forError ? error : callback;\n if (options.responseType === 'blob') {\n cb(xhr.response);\n } else {\n if (xhr.responseText) {\n cb(getResponseText());\n } else {\n error({ message: '' });\n }\n }\n };\n xhr.onload = () => {\n if ([401, 403, 404, 422, 500].indexOf(xhr.status) !== -1) {\n error(new NgwError(getResponseText()));\n }\n processingResponse();\n };\n\n // xhr.onreadystatechange = () => {\n // if (\n // (xhr.readyState === 4 && xhr.status === 200) ||\n // (xhr.readyState === 3 && xhr.status === 201)\n // ) {\n // processingResponse();\n // } else if (xhr.readyState === 3 && xhr.status === 400) {\n // processingResponse();\n // } else if (xhr.readyState === 4 && xhr.status === 500) {\n // processingResponse();\n // } else if (xhr.readyState === 4 && xhr.status === 401) {\n // error(xhr.statusText);\n // } else if (xhr.readyState === 4) {\n // error('request error');\n // }\n // };\n\n xhr.onerror = (er) => {\n if (xhr.status === 0) {\n error(new NetworkError(url));\n } else {\n error(er);\n }\n };\n\n xhr.upload.onprogress = function (e) {\n if (e.lengthComputable) {\n const percentComplete = (e.loaded / e.total) * 100;\n if (options.onProgress) {\n options.onProgress(percentComplete, e);\n }\n // console.log(percentComplete + '% uploaded');\n }\n };\n\n const headers = options.headers;\n if (headers) {\n for (const h in headers) {\n const header = headers[h];\n if (typeof header === 'string') {\n xhr.setRequestHeader(h, header);\n }\n }\n }\n if (options.withCredentials !== undefined) {\n xhr.withCredentials = options.withCredentials;\n }\n\n let data: FormData | any;\n if (options.file) {\n data = new FormData();\n data.append('file', options.file);\n if (options.data) {\n for (const d in options.data) {\n data.append(d, data[d]);\n }\n }\n } else {\n data = options.data\n ? typeof options.data === 'string'\n ? options.data\n : JSON.stringify(options.data)\n : null;\n }\n if (onCancel) {\n onCancel(() => {\n xhr.abort();\n });\n }\n xhr.send(data);\n };\n} else {\n const url = require('url');\n const http = require('http');\n const https = require('https');\n const FormData = require('form-data');\n\n const adapterFor = (inputUrl: string) => {\n const adapters: Record<string, any> = {\n 'http:': http,\n 'https:': https,\n };\n const protocol = url.parse(inputUrl).protocol || 'https:';\n return adapters[protocol];\n };\n\n loadData = (\n url: string,\n callback: (...args: any[]) => any,\n options: NgwRequestOptions<RequestMethods> = {},\n error: (reason?: any) => void,\n onCancel: (cancelHandler: () => void) => void,\n ): Promise<unknown> => {\n const { file, headers, method, data, responseType } = options;\n\n const request = new Promise((resolve, reject) => {\n const adapter = adapterFor(url);\n if (adapter) {\n const requestOpt = {\n headers: headers || {},\n method,\n };\n const body = typeof data === 'string' ? data : JSON.stringify(data);\n // https://stackoverflow.com/questions/35589109/node-http-delete-request-no-longer-works-after-upgrading-from-0-10-40\n let form;\n let uploadedFile = file;\n if (file) {\n const fileMeta = {};\n if (\n isObject(file) &&\n 'file' in file &&\n ('filename' in file || 'name' in file)\n ) {\n const {\n file: file_,\n name,\n ...fileMeta_\n } = file as Record<string, any>;\n if (name && !fileMeta_.filename) {\n fileMeta_.filename = name;\n }\n Object.assign(fileMeta, fileMeta_);\n uploadedFile = file_ as File;\n }\n form = new FormData();\n form.append('file', uploadedFile, fileMeta);\n if (data) {\n for (const d in data) {\n form.append(d, data[d]);\n }\n }\n Object.assign(requestOpt.headers, {\n // 'content-length': form.getLengthSync(),\n ...form.getHeaders(),\n });\n }\n\n if (body !== undefined) {\n Object.assign(requestOpt.headers, {\n 'content-type': 'application/json',\n 'content-length': Buffer.byteLength(body),\n });\n }\n const req = adapter.request(url, requestOpt, (resp: any) => {\n let data = '';\n resp.on('data', (chunk: any) => {\n data += chunk;\n });\n resp.on('end', () => {\n if (data) {\n if (responseType === 'blob') {\n resolve(data);\n } else {\n let json: Record<string, any> | undefined;\n try {\n json = JSON.parse(data);\n if (json && json.status_code && json.status_code) {\n reject(json.message);\n }\n } catch (er) {\n reject(er);\n }\n if (json !== undefined) {\n if (isError(json)) {\n reject('extractError(json)');\n } else {\n resolve(json);\n }\n }\n }\n }\n reject('no data');\n });\n });\n if (form) {\n form.pipe(req);\n }\n req.on('error', (err: any) => {\n reject(err);\n });\n if (body) {\n req.write(body);\n }\n onCancel(() => {\n req.abort();\n });\n req.end();\n } else {\n throw new Error(`Given URL '${url}' is not correct`);\n }\n });\n return request\n .then((data) => {\n if (callback) {\n callback(data);\n }\n return data;\n })\n .catch((er) => {\n if (error) {\n error(er);\n } else {\n throw new Error(er);\n }\n });\n };\n}\n\nexport { loadData };\n","import { EventEmitter } from 'events';\n\nimport Cache from '@nextgis/cache';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { objectRemoveEmpty } from '@nextgis/utils';\nimport { fixUrlStr } from '@nextgis/utils';\n\nimport { ResourcesControl } from './ResourcesControl';\nimport {\n addConnector,\n findConnector,\n removeConnector,\n} from './activeConnectors';\nimport { InsufficientPermissionsError } from './errors/InsufficientPermissionsError';\nimport { NgwError } from './errors/NgwError';\nimport { ResourceNotFoundError } from './errors/ResourceNotFoundError';\nimport { apiRequest } from './utils/apiRequest';\nimport { loadData } from './utils/loadData';\nimport { template } from './utils/template';\n\nimport type {\n Credentials,\n DeleteRequestItemsResponseMap,\n GetChildrenOfOptions,\n GetRequestItemsResponseMap,\n NgwConnectorOptions,\n Params,\n PatchRequestItemsResponseMap,\n PostRequestItemsResponseMap,\n PutRequestItemsResponseMap,\n PyramidRoute,\n RequestHeaders,\n RequestItemKeys,\n RequestItemsParams,\n RequestOptions,\n RequestTransformFunction,\n ResourceDefinition,\n ResourceIdKeynameDef,\n UserInfo,\n} from './interfaces';\nimport type { RequestItemsParamsMap } from './types/RequestItemsParamsMap';\nimport type { Resource, ResourceItem } from './types/ResourceItem';\nimport type { DeepPartial } from '@nextgis/utils';\n\nlet ID = 0;\n\nexport class NgwConnector {\n static errors = {\n NgwError,\n ResourceNotFoundError,\n };\n id = ID++;\n emitter = new EventEmitter();\n user?: UserInfo;\n resources!: ResourcesControl;\n cache: Cache;\n withCredentials?: boolean = undefined;\n private routeStr = '/api/component/pyramid/route';\n private activeRequests: CancelablePromise[] = [];\n private requestTransform?: RequestTransformFunction | null;\n\n constructor(public options: NgwConnectorOptions) {\n const exist = findConnector(options);\n this.cache = new Cache({ namespace: options.cacheId });\n if (exist) {\n return exist;\n } else {\n const { route, requestTransform, withCredentials } = this.options;\n if (route) {\n this.routeStr = route;\n }\n if (requestTransform) {\n this.requestTransform = requestTransform;\n }\n if (withCredentials !== undefined) {\n this.withCredentials = withCredentials;\n }\n this.resources = new ResourcesControl({\n connector: this,\n cacheId: options.cacheId,\n });\n addConnector(this);\n }\n }\n\n static create(options: NgwConnectorOptions): NgwConnector {\n return new this(options);\n }\n\n /**\n * Clear the cache.\n */\n clearCache(): void {\n this.cache.clean();\n this.resources.cache.clean();\n }\n\n setRequestTransform(\n requestTransform: RequestTransformFunction | undefined | null,\n ) {\n this.requestTransform = requestTransform;\n }\n\n /**\n * Fast way to specify the connection address to NextGIS Web.\n * The current connection will be severed.\n * @param baseUrl - NGW url\n */\n setNgw(baseUrl: string): void {\n this.logout();\n this.options.baseUrl = baseUrl;\n addConnector(this);\n }\n\n /**\n * Establishing a connection with NextGIS Web to fulfill all other requests.\n * @remarks\n * This method need not be called manually as it is used when forming a request in {@link apiRequest | apiRequest}.\n * Can be used to check connection.\n * @example\n * ```javascript\n * const connector = new NgwConnector({baseUrl: 'https://demo.nextgis.com'});\n * connector.connect()\n * .then(() => console.log('Ok'))\n * .catch((er) => console.log('Connection problem', er));\n * ```\n */\n connect(): CancelablePromise<PyramidRoute> {\n const auth = this.options.auth;\n const makeConnect = () =>\n new CancelablePromise((resolve, reject) => {\n const makeQuery = () => {\n return this.makeQuery<PyramidRoute>(this.routeStr, {}, {})\n .then((route) => {\n resolve(route);\n })\n .catch((er) => {\n reject(er);\n });\n };\n if (auth) {\n const { login, password } = auth;\n if (login && password) {\n return this._login({ login, password })\n .then(() => {\n return makeQuery();\n })\n .catch((er) => reject(er));\n }\n }\n return makeQuery();\n });\n return this.cache.add('route', makeConnect, {\n id: this.id,\n auth,\n baseUrl: this.options.baseUrl,\n });\n }\n\n /**\n * Quick way to change NextGIS Web user.\n * @param credentials - New user credentials\n */\n login(\n credentials: Credentials,\n options?: RequestOptions,\n ): CancelablePromise<UserInfo> {\n this.logout();\n addConnector(this);\n return this._login(credentials, options);\n }\n\n /**\n * Disconnecting a user. Aborting all current requests\n */\n logout(): void {\n this.abort();\n removeConnector(this);\n this.options.auth = undefined;\n this.user = undefined;\n this.clearCache();\n this.emitter.emit('logout');\n }\n\n getUserInfo(\n credentials?: Credentials,\n options?: RequestOptions,\n ): CancelablePromise<UserInfo> {\n if (this.user && this.user.id) {\n return CancelablePromise.resolve(this.user);\n }\n if (credentials) {\n this.options.auth = credentials;\n }\n const options_: RequestOptions = {\n headers: this.getAuthorizationHeaders(credentials),\n // withCredentials: true\n ...options,\n };\n\n // Do not use apiRequest('auth.current_user') to avoid circular-references\n return this.makeQuery<UserInfo>(\n '/api/component/auth/current_user',\n {},\n options_,\n );\n }\n\n /**\n * Obtaining the required Headers for authentication of requests in the NGW.\n */\n getAuthorizationHeaders(\n credentials?: Credentials,\n ): RequestHeaders | undefined {\n const client = this.makeClientId(credentials);\n if (client) {\n return {\n Authorization: 'Basic ' + client,\n };\n }\n }\n\n makeClientId(credentials?: Credentials): string | undefined {\n credentials = credentials || this.options.auth;\n if (credentials) {\n const { login, password } = credentials;\n const str = unescape(encodeURIComponent(`${login}:${password}`));\n // @ts-ignore\n if (__BROWSER__) {\n return window.btoa(str);\n } else {\n return Buffer.from(str).toString('base64');\n }\n }\n }\n\n /** Stop all api requests */\n abort() {\n for (const req of this.activeRequests) {\n req.cancel();\n }\n this.activeRequests = [];\n }\n\n getActiveApiRequests() {\n return [...this.activeRequests];\n }\n\n /**\n * Send request to NGW api router.\n * @param name - NGW route name from {@link https://docs.nextgis.com/docs_ngweb_dev/doc/developer/resource.html#routes | routes}\n * @param params - Request item params or query params\n * @param requestOptions - Request options\n *\n * @example\n * ```javascript\n *\n * // there is such an NGW route item\n * // \"feature_layer.feature.item\": [\n * // \"/api/resource/{0}/feature/{1}\",\n * // \"id\",\n * // \"fid\"\n * // ],\n *\n * const connector = new NgwConnector({ baseUrl: 'https://example.nextgis.com' });\n * connector.apiRequest('feature_layer.feature.item', {\n * // request params for {0} and {1}\n * 'id': 2011,\n * 'fid': 101,\n * // query params\n * 'srs': 4326,\n * 'geom_format': 'geojson',\n * }, { method: 'GET' });\n * // send get-request to 'https://example.nextgis.com/api/resource/2011/feature/101?srs=4326&geom_format=geojson'\n *\n * ```\n */\n apiRequest<\n K extends keyof RequestItemsParamsMap,\n P extends RequestItemKeys = RequestItemKeys,\n >(\n name: K,\n params_: RequestItemsParams<K> = {},\n requestOptions: RequestOptions = {},\n ): CancelablePromise<P[K]> {\n requestOptions = {\n withCredentials: this.withCredentials,\n ...requestOptions,\n };\n const { method, headers, withCredentials, responseType } = requestOptions;\n\n params_ = requestOptions.params ?? params_;\n const params = objectRemoveEmpty(params_);\n const makeApiRequest = () =>\n apiRequest({ name, params, requestOptions, connector: this });\n if (requestOptions.cache && method === 'GET') {\n return this.cache.add(name, makeApiRequest, {\n params,\n ...objectRemoveEmpty({\n headers,\n withCredentials,\n responseType,\n baseUrl: this.options.baseUrl,\n userId: this.user?.id,\n }),\n });\n }\n return makeApiRequest();\n }\n\n /**\n * Shortcut method for send POST request to NGW.\n * @param name - NGW route name from {@link https://docs.nextgis.com/docs_ngweb_dev/doc/developer/resource.html#routes | routes}\n * @param options - Request options\n * @param params - Request item params or query params\n *\n * @example\n * ```javascript\n * connector.post('resource.collection', { data: POST_PAYLOAD })\n * .then((newResource) => console.log(newResource))\n * .catch((error) => console.warn(error));\n * ```\n */\n post<K extends keyof RequestItemsParamsMap>(\n name: K,\n options?: RequestOptions<'POST', K>,\n params?: RequestItemsParams<K>,\n ): CancelablePromise<PostRequestItemsResponseMap[K]> {\n options = options || {};\n options.method = 'POST';\n return this.apiRequest<K, PostRequestItemsResponseMap>(\n name,\n params,\n options,\n );\n }\n\n /**\n * Shortcut method for send GET request to NGW.\n * @param name - NGW route name from {@link https://docs.nextgis.com/docs_ngweb_dev/doc/developer/resource.html#routes | routes}\n * @param options - Request options\n * @param params - Request item params or query params\n */\n get<K extends keyof RequestItemsParamsMap>(\n name: K,\n options?: RequestOptions<'GET', K> | undefined | null,\n params?: RequestItemsParams<K>,\n ): CancelablePromise<GetRequestItemsResponseMap[K]> {\n options = options || {};\n options.method = 'GET';\n return this.apiRequest<K, GetRequestItemsResponseMap>(\n name,\n params,\n options,\n );\n }\n\n /**\n * Shortcut method for send PATCH request to NGW.\n * @param name - NGW route name from {@link https://docs.nextgis.com/docs_ngweb_dev/doc/developer/resource.html#routes | routes}\n * @param options - Request options\n * @param params - Request item params or query params\n */\n patch<K extends keyof RequestItemsParamsMap>(\n name: K,\n options?: RequestOptions<'PATCH', K>,\n params?: RequestItemsParams<K>,\n ): CancelablePromise<PatchRequestItemsResponseMap[K]> {\n options = options || {};\n options.method = 'PATCH';\n return this.apiRequest<K, PatchRequestItemsResponseMap>(\n name,\n params,\n options,\n );\n }\n\n /**\n * Shortcut method for send PUT request to NGW.\n * @param name - NGW route name from {@link https://docs.nextgis.com/docs_ngweb_dev/doc/developer/resource.html#routes | routes}\n * @param options - Request options\n * @param params - Request item params or query params\n */\n put<K extends keyof RequestItemsParamsMap>(\n name: K,\n options?: RequestOptions<'PUT', K>,\n params?: RequestItemsParams<K>,\n ): CancelablePromise<PutRequestItemsResponseMap[K]> {\n options = options || {};\n options.method = 'PUT';\n return this.apiRequest<K, PutRequestItemsResponseMap>(\n name,\n params,\n options,\n );\n }\n\n /**\n * Shortcut method for send DELETE request to NGW.\n * @param name - NGW route name from {@link https://docs.nextgis.com/docs_ngweb_dev/doc/developer/resource.html#routes | routes}\n * @param options - Request options\n * @param params - Request item params or query params\n */\n delete<K extends keyof RequestItemsParamsMap>(\n name: K,\n options?: RequestOptions<'DELETE', K> | undefined | null,\n params?: RequestItemsParams<K>,\n ): CancelablePromise<DeleteRequestItemsResponseMap[K]> {\n options = options || {};\n options.method = 'DELETE';\n return this.apiRequest<K, DeleteRequestItemsResponseMap>(\n name,\n params,\n options,\n );\n }\n\n /**\n * Send request to NGW.\n * @param url - URL address to NGW\n * @param params - Query params\n * @param options - Request options\n */\n makeQuery<R = unknown>(\n url: string,\n params?: Params | null,\n options: RequestOptions = {},\n ): CancelablePromise<R> {\n url = (this.options.baseUrl ? this.options.baseUrl : '') + url;\n if (url) {\n if (params) {\n url = template(url, params);\n }\n url = encodeURI(fixUrlStr(url));\n return this._loadData(url, options);\n } else {\n throw new Error('Empty `url` not allowed');\n }\n }\n\n // -------------------------------------------------------------------------\n // Resource Methods\n // -------------------------------------------------------------------------\n\n /**\n * {@link ResourcesControl.getOne}\n */\n getResource(\n resource: ResourceDefinition,\n requestOptions?: RequestOptions<'GET'>,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.resources.getOne(resource, requestOptions);\n }\n\n /**\n * {@link ResourcesControl.getOneOrFail}\n */\n getResourceOrFail(\n resource: ResourceDefinition,\n requestOptions?: RequestOptions<'GET'>,\n ): CancelablePromise<ResourceItem> {\n return this.resources.getOneOrFail(resource, requestOptions);\n }\n\n /**\n * @deprecated - use {@link getResource}\n */\n getResourceBy(\n resource: DeepPartial<Resource>,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.resources.getOne(resource);\n }\n\n /**\n * @deprecated - use {@link getResource}\n */\n getResourceByKeyname(\n keyname: string,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.resources.getOne(keyname);\n }\n\n /**\n * @deprecated - use {@link getResource}\n */\n getResourceById(id: number): CancelablePromise<ResourceItem | undefined> {\n return this.resources.getOne(id);\n }\n\n /**\n * {@link ResourcesControl.getId}\n */\n getResourceId(\n resource: ResourceDefinition,\n requestOptions?: RequestOptions<'GET'>,\n ): CancelablePromise<number | undefined> {\n return this.resources.getId(resource, requestOptions);\n }\n\n /**\n * {@link ResourcesControl.getIdOrFail}\n */\n getResourceIdOrFail(\n resource: ResourceDefinition,\n requestOptions?: RequestOptions<'GET'>,\n ): CancelablePromise<number> {\n return this.resources.getIdOrFail(resource, requestOptions);\n }\n\n /**\n * {@link ResourcesControl.getMany}\n */\n getResourcesBy(\n resource: DeepPartial<Resource>,\n requestOptions?: RequestOptions<'GET'>,\n ): CancelablePromise<ResourceItem[]> {\n return this.resources.getMany(resource, requestOptions);\n }\n\n /**\n * {@link ResourcesControl.getParent}\n */\n getResourceParent(\n resource: ResourceDefinition,\n requestOptions?: RequestOptions<'GET'>,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.resources.getParent(resource, requestOptions);\n }\n\n /**\n * {@link ResourcesControl.getChildrenOf}\n */\n getResourceChildren(\n resource: ResourceDefinition,\n requestOptions?: GetChildrenOfOptions,\n ): CancelablePromise<ResourceItem[]> {\n return this.resources.getChildrenOf(resource, requestOptions);\n }\n\n /**\n * {@link ResourcesControl.update}\n */\n updateResource(\n resource: ResourceIdKeynameDef,\n data: DeepPartial<ResourceItem>,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.resources.update(resource, data);\n }\n\n /**\n * {@link ResourcesControl.delete}\n */\n deleteResource(resource: ResourceIdKeynameDef): CancelablePromise<void> {\n return this.resources.delete(resource);\n }\n\n /**\n * @internal\n */\n protected _loadData(\n url: string,\n options: RequestOptions,\n ): CancelablePromise<any> {\n options.responseType = options.responseType || 'json';\n if (options.signal && options.signal.aborted) {\n return CancelablePromise.reject(new CancelablePromise.CancelError());\n }\n\n const request = new CancelablePromise((resolve, reject, onCancel) => {\n if (this.user) {\n options = options || {};\n // options.withCredentials = true;\n options.headers = {\n ...this.getAuthorizationHeaders(),\n ...options.headers,\n };\n }\n\n if (this.requestTransform) {\n const [transUrl, transOptions] = this.requestTransform(url, options);\n url = transUrl;\n options = transOptions;\n }\n loadData(url, resolve, options, reject, onCancel);\n })\n .then((resp) => {\n this._cleanActiveRequests(request);\n return resp;\n })\n .catch((httpError) => {\n this._cleanActiveRequests(request);\n if (httpError instanceof CancelablePromise.CancelError) {\n // not need to handle cancel error because onCancel method is used\n } else {\n if (__DEV__) {\n console.warn('DEV WARN', httpError);\n }\n const er = this._handleHttpError(httpError);\n if (er) {\n throw er;\n }\n }\n });\n if (\n options.signal &&\n typeof options.signal.addEventListener === 'function'\n ) {\n options.signal.addEventListener('abort', () => {\n request.cancel();\n this._cleanActiveRequests(request);\n });\n }\n this.activeRequests.push(request);\n return request;\n }\n\n private _login(\n credentials: Credentials,\n options?: RequestOptions,\n ): CancelablePromise<UserInfo> {\n return this.getUserInfo(credentials, options)\n .then((data) => {\n this.user = data;\n this.emitter.emit('login', data);\n return data;\n })\n .catch((er) => {\n this.emitter.emit('login:error', er);\n throw er;\n });\n }\n\n private _cleanActiveRequests(request: CancelablePromise) {\n const activeRequestIndex = this.activeRequests.indexOf(request);\n if (activeRequestIndex !== -1) {\n this.activeRequests.splice(activeRequestIndex, 1);\n }\n }\n\n private _handleHttpError(er: Error) {\n if (er) {\n if (er instanceof NgwError) {\n if (er.exception === 'nextgisweb.resource.exception.ResourceNotFound') {\n throw new ResourceNotFoundError(er);\n } else if (\n er.exception === 'nextgisweb.core.exception.InsufficientPermissions'\n ) {\n throw new InsufficientPermissionsError(er);\n }\n }\n }\n return er;\n }\n}\n"],"names":["__publicField","objectDeepEqual","defined","isObject","FormData","url","data","EventEmitter","objectRemoveEmpty","fixUrlStr"],"mappings":"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"}
|