@ngrx/data 15.3.0 → 15.4.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/esm2020/src/dataservices/default-data.service.mjs +24 -21
- package/fesm2015/ngrx-data.mjs +20 -21
- package/fesm2015/ngrx-data.mjs.map +1 -1
- package/fesm2020/ngrx-data.mjs +23 -20
- package/fesm2020/ngrx-data.mjs.map +1 -1
- package/package.json +4 -4
- package/schematics-core/utility/libs-version.js +1 -1
- package/schematics-core/utility/libs-version.js.map +1 -1
|
@@ -35,26 +35,26 @@ export class DefaultDataService {
|
|
|
35
35
|
}
|
|
36
36
|
add(entity, options) {
|
|
37
37
|
const entityOrError = entity || new Error(`No "${this.entityName}" entity to add`);
|
|
38
|
-
return this.execute('POST', this.entityUrl, entityOrError, options);
|
|
38
|
+
return this.execute('POST', this.entityUrl, entityOrError, null, options);
|
|
39
39
|
}
|
|
40
40
|
delete(key, options) {
|
|
41
41
|
let err;
|
|
42
42
|
if (key == null) {
|
|
43
43
|
err = new Error(`No "${this.entityName}" key to delete`);
|
|
44
44
|
}
|
|
45
|
-
return this.execute('DELETE', this.entityUrl + key, err, options).pipe(
|
|
45
|
+
return this.execute('DELETE', this.entityUrl + key, err, null, options).pipe(
|
|
46
46
|
// forward the id of deleted entity as the result of the HTTP DELETE
|
|
47
47
|
map((result) => key));
|
|
48
48
|
}
|
|
49
49
|
getAll(options) {
|
|
50
|
-
return this.execute('GET', this.entitiesUrl, options);
|
|
50
|
+
return this.execute('GET', this.entitiesUrl, null, options);
|
|
51
51
|
}
|
|
52
52
|
getById(key, options) {
|
|
53
53
|
let err;
|
|
54
54
|
if (key == null) {
|
|
55
55
|
err = new Error(`No "${this.entityName}" key to get`);
|
|
56
56
|
}
|
|
57
|
-
return this.execute('GET', this.entityUrl + key, err, options);
|
|
57
|
+
return this.execute('GET', this.entityUrl + key, err, null, options);
|
|
58
58
|
}
|
|
59
59
|
getWithQuery(queryParams, options) {
|
|
60
60
|
const qParams = typeof queryParams === 'string'
|
|
@@ -68,20 +68,20 @@ export class DefaultDataService {
|
|
|
68
68
|
const updateOrError = id == null
|
|
69
69
|
? new Error(`No "${this.entityName}" update data or id`)
|
|
70
70
|
: update.changes;
|
|
71
|
-
return this.execute('PUT', this.entityUrl + id, updateOrError, options);
|
|
71
|
+
return this.execute('PUT', this.entityUrl + id, updateOrError, null, options);
|
|
72
72
|
}
|
|
73
73
|
// Important! Only call if the backend service supports upserts as a POST to the target URL
|
|
74
74
|
upsert(entity, options) {
|
|
75
75
|
const entityOrError = entity || new Error(`No "${this.entityName}" entity to upsert`);
|
|
76
|
-
return this.execute('POST', this.entityUrl, entityOrError, options);
|
|
76
|
+
return this.execute('POST', this.entityUrl, entityOrError, null, options);
|
|
77
77
|
}
|
|
78
78
|
execute(method, url, data, // data, error, or undefined/null
|
|
79
79
|
options, // options or undefined/null
|
|
80
80
|
httpOptions // these override any options passed via options
|
|
81
81
|
) {
|
|
82
|
-
let
|
|
82
|
+
let entityActionHttpClientOptions = undefined;
|
|
83
83
|
if (httpOptions) {
|
|
84
|
-
|
|
84
|
+
entityActionHttpClientOptions = {
|
|
85
85
|
headers: httpOptions?.httpHeaders
|
|
86
86
|
? new HttpHeaders(httpOptions?.httpHeaders)
|
|
87
87
|
: undefined,
|
|
@@ -90,21 +90,24 @@ export class DefaultDataService {
|
|
|
90
90
|
: undefined,
|
|
91
91
|
};
|
|
92
92
|
}
|
|
93
|
+
// Now we may have:
|
|
94
|
+
// options: containing headers, params, or any other allowed http options already in angular's api
|
|
95
|
+
// entityActionHttpClientOptions: headers and params in angular's api
|
|
96
|
+
// We therefore need to merge these so that the action ones override the
|
|
97
|
+
// existing keys where applicable.
|
|
93
98
|
// If any options have been specified, pass them to http client. Note
|
|
94
99
|
// the new http options, if specified, will override any options passed
|
|
95
100
|
// from the deprecated options parameter
|
|
96
101
|
let mergedOptions = undefined;
|
|
97
|
-
if (options ||
|
|
98
|
-
if (isDevMode() && options &&
|
|
102
|
+
if (options || entityActionHttpClientOptions) {
|
|
103
|
+
if (isDevMode() && options && entityActionHttpClientOptions) {
|
|
99
104
|
console.warn('@ngrx/data: options.httpParams will be merged with queryParams when both are are provided to getWithQuery(). In the event of a conflict HttpOptions.httpParams will override queryParams`. The queryParams parameter of getWithQuery() will be removed in next major release.');
|
|
100
105
|
}
|
|
101
|
-
mergedOptions = {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
mergedOptions.params = ngHttpClientOptions?.params ?? options?.params;
|
|
107
|
-
}
|
|
106
|
+
mergedOptions = {
|
|
107
|
+
...options,
|
|
108
|
+
headers: entityActionHttpClientOptions?.headers ?? options?.headers,
|
|
109
|
+
params: entityActionHttpClientOptions?.params ?? options?.params,
|
|
110
|
+
};
|
|
108
111
|
}
|
|
109
112
|
const req = {
|
|
110
113
|
method,
|
|
@@ -118,7 +121,7 @@ export class DefaultDataService {
|
|
|
118
121
|
let result$;
|
|
119
122
|
switch (method) {
|
|
120
123
|
case 'DELETE': {
|
|
121
|
-
result$ = this.http.delete(url,
|
|
124
|
+
result$ = this.http.delete(url, mergedOptions);
|
|
122
125
|
if (this.saveDelay) {
|
|
123
126
|
result$ = result$.pipe(delay(this.saveDelay));
|
|
124
127
|
}
|
|
@@ -132,7 +135,7 @@ export class DefaultDataService {
|
|
|
132
135
|
break;
|
|
133
136
|
}
|
|
134
137
|
case 'POST': {
|
|
135
|
-
result$ = this.http.post(url, data,
|
|
138
|
+
result$ = this.http.post(url, data, mergedOptions);
|
|
136
139
|
if (this.saveDelay) {
|
|
137
140
|
result$ = result$.pipe(delay(this.saveDelay));
|
|
138
141
|
}
|
|
@@ -140,7 +143,7 @@ export class DefaultDataService {
|
|
|
140
143
|
}
|
|
141
144
|
// N.B.: It must return an Update<T>
|
|
142
145
|
case 'PUT': {
|
|
143
|
-
result$ = this.http.put(url, data,
|
|
146
|
+
result$ = this.http.put(url, data, mergedOptions);
|
|
144
147
|
if (this.saveDelay) {
|
|
145
148
|
result$ = result$.pipe(delay(this.saveDelay));
|
|
146
149
|
}
|
|
@@ -203,4 +206,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImpor
|
|
|
203
206
|
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.HttpUrlGenerator }, { type: i3.DefaultDataServiceConfig, decorators: [{
|
|
204
207
|
type: Optional
|
|
205
208
|
}] }]; } });
|
|
206
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1kYXRhLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9tb2R1bGVzL2RhdGEvc3JjL2RhdGFzZXJ2aWNlcy9kZWZhdWx0LWRhdGEuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUdMLFdBQVcsRUFDWCxVQUFVLEdBQ1gsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7O0FBV3hEOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBZTdCLFlBQ0UsVUFBa0IsRUFDUixJQUFnQixFQUNoQixnQkFBa0MsRUFDNUMsTUFBaUM7UUFGdkIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBWnBDLGFBQVEsR0FBRyxDQUFDLENBQUM7UUFDYixjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsWUFBTyxHQUFHLENBQUMsQ0FBQztRQUNaLDJCQUFzQixHQUFHLEtBQUssQ0FBQztRQVl2QyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsVUFBVSxxQkFBcUIsQ0FBQztRQUNoRCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixNQUFNLEVBQ0osSUFBSSxHQUFHLEtBQUssRUFDWixXQUFXLEdBQUcsSUFBSSxFQUNsQixRQUFRLEdBQUcsQ0FBQyxFQUNaLFNBQVMsR0FBRyxDQUFDLEVBQ2IsT0FBTyxFQUFFLEVB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SCxNQUFNLENBQUksVUFBa0I7UUFDMUIsT0FBTyxJQUFJLGtCQUFrQixDQUMzQixVQUFVLEVBQ1YsSUFBSSxDQUFDLElBQUksRUFDVCxJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLElBQUksQ0FBQyxNQUFNLENBQ1osQ0FBQztJQUNKLENBQUM7O3lJQXJCVSx5QkFBeUI7NklBQXpCLHlCQUF5QjsyRkFBekIseUJBQXlCO2tCQURyQyxVQUFVOzswQkFLTixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaXNEZXZNb2RlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgSHR0cENsaWVudCxcbiAgSHR0cEVycm9yUmVzcG9uc2UsXG4gIEh0dHBIZWFkZXJzLFxuICBIdHRwUGFyYW1zLFxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkZWxheSwgbWFwLCB0aW1lb3V0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBVcGRhdGUgfSBmcm9tICdAbmdyeC9lbnRpdHknO1xuXG5pbXBvcnQgeyBEYXRhU2VydmljZUVycm9yIH0gZnJvbSAnLi9kYXRhLXNlcnZpY2UtZXJyb3InO1xuaW1wb3J0IHsgRGVmYXVsdERhdGFTZXJ2aWNlQ29uZmlnIH0gZnJvbSAnLi9kZWZhdWx0LWRhdGEtc2VydmljZS1jb25maWcnO1xuaW1wb3J0IHtcbiAgRW50aXR5Q29sbGVjdGlvbkRhdGFTZXJ2aWNlLFxuICBIdHRwTWV0aG9kcyxcbiAgSHR0cE9wdGlvbnMsXG4gIFF1ZXJ5UGFyYW1zLFxuICBSZXF1ZXN0RGF0YSxcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEh0dHBVcmxHZW5lcmF0b3IgfSBmcm9tICcuL2h0dHAtdXJsLWdlbmVyYXRvcic7XG5cbi8qKlxuICogQSBiYXNpYywgZ2VuZXJpYyBlbnRpdHkgZGF0YSBzZXJ2aWNlXG4gKiBzdWl0YWJsZSBmb3IgcGVyc2lzdGVuY2Ugb2YgbW9zdCBlbnRpdGllcy5cbiAqIEFzc3VtZXMgYSBjb21tb24gUkVTVC15IHdlYiBBUElcbiAqL1xuZXhwb3J0IGNsYXNzIERlZmF1bHREYXRhU2VydmljZTxUPiBpbXBsZW1lbnRzIEVudGl0eUNvbGxlY3Rpb25EYXRhU2VydmljZTxUPiB7XG4gIHByb3RlY3RlZCBfbmFtZTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgZGVsZXRlNDA0T0s6IGJvb2xlYW47XG4gIHByb3RlY3RlZCBlbnRpdHlOYW1lOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBlbnRpdHlVcmw6IHN0cmluZztcbiAgcHJvdGVjdGVkIGVudGl0aWVzVXJsOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBnZXREZWxheSA9IDA7XG4gIHByb3RlY3RlZCBzYXZlRGVsYXkgPSAwO1xuICBwcm90ZWN0ZWQgdGltZW91dCA9IDA7XG4gIHByb3RlY3RlZCB0cmFpbGluZ1NsYXNoRW5kcG9pbnRzID0gZmFsc2U7XG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBlbnRpdHlOYW1lOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJvdGVjdGVkIGh0dHBVcmxHZW5lcmF0b3I6IEh0dHBVcmxHZW5lcmF0b3IsXG4gICAgY29uZmlnPzogRGVmYXVsdERhdGFTZXJ2aWNlQ29uZmlnXG4gICkge1xuICAgIHRoaXMuX25hbWUgPSBgJHtlbnRpdHlOYW1lfSBEZWZhdWx0RGF0YVNlcnZpY2VgO1xuICAgIHRoaXMuZW50aXR5TmFtZSA9IGVudGl0eU5hbWU7XG4gICAgY29uc3Qge1xuICAgICAgcm9vdCA9ICdhcGknLFxuICAgICAgZGVsZXRlNDA0T0sgPSB0cnVlLFxuICAgICAgZ2V0RGVsYXkgPSAwLFxuICAgICAgc2F2ZURlbGF5ID0gMCxcbiAgICAgIHRpbWVvdXQ6IHRvID0gMCxcbiAgICAgIHRyYWlsaW5nU2xhc2hFbmRwb2ludHMgPSBmYWxzZSxcbiAgICB9ID0gY29uZmlnIHx8IHt9O1xuICAgIHRoaXMuZGVsZXRlNDA0T0sgPSBkZWxldGU0MDRPSztcbiAgICB0aGlzLmVudGl0eVVybCA9IGh0dHBVcmxHZW5lcmF0b3IuZW50aXR5UmVzb3VyY2UoXG4gICAgICBlbnRpdHlOYW1lLFxuICAgICAgcm9vdCxcbiAgICAgIHRyYWlsaW5nU2xhc2hFbmRwb2ludHNcbiAgICApO1xuICAgIHRoaXMuZW50aXRpZXNVcmwgPSBodHRwVXJsR2VuZXJhdG9yLmNvbGxlY3Rpb25SZXNvdXJjZShlbnRpdHlOYW1lLCByb290KTtcbiAgICB0aGlzLmdldERlbGF5ID0gZ2V0RGVsYXk7XG4gICAgdGhpcy5zYXZlRGVsYXkgPSBzYXZlRGVsYXk7XG4gICAgdGhpcy50aW1lb3V0ID0gdG87XG4gIH1cblxuICBhZGQoZW50aXR5OiBULCBvcHRpb25zPzogSHR0cE9wdGlvbnMpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICBjb25zdCBlbnRpdHlPckVycm9yID1cbiAgICAgIGVudGl0eSB8fCBuZXcgRXJyb3IoYE5vIFwiJHt0aGlzLmVudGl0eU5hbWV9XCIgZW50aXR5IHRvIGFkZGApO1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoJ1BPU1QnLCB0aGlzLmVudGl0eVVybCwgZW50aXR5T3JFcnJvciwgb3B0aW9ucyk7XG4gIH1cblxuICBkZWxldGUoXG4gICAga2V5OiBudW1iZXIgfCBzdHJpbmcsXG4gICAgb3B0aW9ucz86IEh0dHBPcHRpb25zXG4gICk6IE9ic2VydmFibGU8bnVtYmVyIHwgc3RyaW5nPiB7XG4gICAgbGV0IGVycjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gICAgaWYgKGtleSA9PSBudWxsKSB7XG4gICAgICBlcnIgPSBuZXcgRXJyb3IoYE5vIFwiJHt0aGlzLmVudGl0eU5hbWV9XCIga2V5IHRvIGRlbGV0ZWApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKCdERUxFVEUnLCB0aGlzLmVudGl0eVVybCArIGtleSwgZXJyLCBvcHRpb25zKS5waXBlKFxuICAgICAgLy8gZm9yd2FyZCB0aGUgaWQgb2YgZGVsZXRlZCBlbnRpdHkgYXMgdGhlIHJlc3VsdCBvZiB0aGUgSFRUUCBERUxFVEVcbiAgICAgIG1hcCgocmVzdWx0KSA9PiBrZXkgYXMgbnVtYmVyIHwgc3RyaW5nKVxuICAgICk7XG4gIH1cblxuICBnZXRBbGwob3B0aW9ucz86IEh0dHBPcHRpb25zKTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKCdHRVQnLCB0aGlzLmVudGl0aWVzVXJsLCBvcHRpb25zKTtcbiAgfVxuXG4gIGdldEJ5SWQoa2V5OiBudW1iZXIgfCBzdHJpbmcsIG9wdGlvbnM/OiBIdHRwT3B0aW9ucyk6IE9ic2VydmFibGU8VD4ge1xuICAgIGxldCBlcnI6IEVycm9yIHwgdW5kZWZpbmVkO1xuICAgIGlmIChrZXkgPT0gbnVsbCkge1xuICAgICAgZXJyID0gbmV3IEVycm9yKGBObyBcIiR7dGhpcy5lbnRpdHlOYW1lfVwiIGtleSB0byBnZXRgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZSgnR0VUJywgdGhpcy5lbnRpdHlVcmwgKyBrZXksIGVyciwgb3B0aW9ucyk7XG4gIH1cblxuICBnZXRXaXRoUXVlcnkoXG4gICAgcXVlcnlQYXJhbXM6IFF1ZXJ5UGFyYW1zIHwgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIG9wdGlvbnM/OiBIdHRwT3B0aW9uc1xuICApOiBPYnNlcnZhYmxlPFRbXT4ge1xuICAgIGNvbnN0IHFQYXJhbXMgPVxuICAgICAgdHlwZW9mIHF1ZXJ5UGFyYW1zID09PSAnc3RyaW5nJ1xuICAgICAgICA/IHsgZnJvbVN0cmluZzogcXVlcnlQYXJhbXMgfVxuICAgICAgICA6IHsgZnJvbU9iamVjdDogcXVlcnlQYXJhbXMgfTtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcyhxUGFyYW1zKTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoXG4gICAgICAnR0VUJyxcbiAgICAgIHRoaXMuZW50aXRpZXNVcmwsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7IHBhcmFtcyB9LFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gIH1cblxuICB1cGRhdGUodXBkYXRlOiBVcGRhdGU8VD4sIG9wdGlvbnM/OiBIdHRwT3B0aW9ucyk6IE9ic2VydmFibGU8VD4ge1xuICAgIGNvbnN0IGlkID0gdXBkYXRlICYmIHVwZGF0ZS5pZDtcbiAgICBjb25zdCB1cGRhdGVPckVycm9yID1cbiAgICAgIGlkID09IG51bGxcbiAgICAgICAgPyBuZXcgRXJyb3IoYE5vIFwiJHt0aGlzLmVudGl0eU5hbWV9XCIgdXBkYXRlIGRhdGEgb3IgaWRgKVxuICAgICAgICA6IHVwZGF0ZS5jaGFuZ2VzO1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoJ1BVVCcsIHRoaXMuZW50aXR5VXJsICsgaWQsIHVwZGF0ZU9yRXJyb3IsIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gSW1wb3J0YW50ISBPbmx5IGNhbGwgaWYgdGhlIGJhY2tlbmQgc2VydmljZSBzdXBwb3J0cyB1cHNlcnRzIGFzIGEgUE9TVCB0byB0aGUgdGFyZ2V0IFVSTFxuICB1cHNlcnQoZW50aXR5OiBULCBvcHRpb25zPzogSHR0cE9wdGlvbnMpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICBjb25zdCBlbnRpdHlPckVycm9yID1cbiAgICAgIGVudGl0eSB8fCBuZXcgRXJyb3IoYE5vIFwiJHt0aGlzLmVudGl0eU5hbWV9XCIgZW50aXR5IHRvIHVwc2VydGApO1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoJ1BPU1QnLCB0aGlzLmVudGl0eVVybCwgZW50aXR5T3JFcnJvciwgb3B0aW9ucyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZXhlY3V0ZShcbiAgICBtZXRob2Q6IEh0dHBNZXRob2RzLFxuICAgIHVybDogc3RyaW5nLFxuICAgIGRhdGE/OiBhbnksIC8vIGRhdGEsIGVycm9yLCBvciB1bmRlZmluZWQvbnVsbFxuICAgIG9wdGlvbnM/OiBhbnksIC8vIG9wdGlvbnMgb3IgdW5kZWZpbmVkL251bGxcbiAgICBodHRwT3B0aW9ucz86IEh0dHBPcHRpb25zIC8vIHRoZXNlIG92ZXJyaWRlIGFueSBvcHRpb25zIHBhc3NlZCB2aWEgb3B0aW9uc1xuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBuZ0h0dHBDbGllbnRPcHRpb25zOiBhbnkgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGh0dHBPcHRpb25zKSB7XG4gICAgICBuZ0h0dHBDbGllbnRPcHRpb25zID0ge1xuICAgICAgICBoZWFkZXJzOiBodHRwT3B0aW9ucz8uaHR0cEhlYWRlcnNcbiAgICAgICAgICA/IG5ldyBIdHRwSGVhZGVycyhodHRwT3B0aW9ucz8uaHR0cEhlYWRlcnMpXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIHBhcmFtczogaHR0cE9wdGlvbnM/Lmh0dHBQYXJhbXNcbiAgICAgICAgICA/IG5ldyBIdHRwUGFyYW1zKGh0dHBPcHRpb25zPy5odHRwUGFyYW1zKVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBJZiBhbnkgb3B0aW9ucyBoYXZlIGJlZW4gc3BlY2lmaWVkLCBwYXNzIHRoZW0gdG8gaHR0cCBjbGllbnQuIE5vdGVcbiAgICAvLyB0aGUgbmV3IGh0dHAgb3B0aW9ucywgaWYgc3BlY2lmaWVkLCB3aWxsIG92ZXJyaWRlIGFueSBvcHRpb25zIHBhc3NlZFxuICAgIC8vIGZyb20gdGhlIGRlcHJlY2F0ZWQgb3B0aW9ucyBwYXJhbWV0ZXJcbiAgICBsZXQgbWVyZ2VkT3B0aW9uczogYW55ID0gdW5kZWZpbmVkO1xuICAgIGlmIChvcHRpb25zIHx8IG5nSHR0cENsaWVudE9wdGlvbnMpIHtcbiAgICAgIGlmIChpc0Rldk1vZGUoKSAmJiBvcHRpb25zICYmIG5nSHR0cENsaWVudE9wdGlvbnMpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdAbmdyeC9kYXRhOiBvcHRpb25zLmh0dHBQYXJhbXMgd2lsbCBiZSBtZXJnZWQgd2l0aCBxdWVyeVBhcmFtcyB3aGVuIGJvdGggYXJlIGFyZSBwcm92aWRlZCB0byBnZXRXaXRoUXVlcnkoKS4gSW4gdGhlIGV2ZW50IG9mIGEgY29uZmxpY3QgSHR0cE9wdGlvbnMuaHR0cFBhcmFtcyB3aWxsIG92ZXJyaWRlIHF1ZXJ5UGFyYW1zYC4gVGhlIHF1ZXJ5UGFyYW1zIHBhcmFtZXRlciBvZiBnZXRXaXRoUXVlcnkoKSB3aWxsIGJlIHJlbW92ZWQgaW4gbmV4dCBtYWpvciByZWxlYXNlLidcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgbWVyZ2VkT3B0aW9ucyA9IHt9O1xuICAgICAgaWYgKG5nSHR0cENsaWVudE9wdGlvbnM/LmhlYWRlcnMpIHtcbiAgICAgICAgbWVyZ2VkT3B0aW9ucy5oZWFkZXJzID0gbmdIdHRwQ2xpZW50T3B0aW9ucz8uaGVhZGVycztcbiAgICAgIH1cbiAgICAgIGlmIChuZ0h0dHBDbGllbnRPcHRpb25zPy5wYXJhbXMgfHwgb3B0aW9ucz8ucGFyYW1zKSB7XG4gICAgICAgIG1lcmdlZE9wdGlvbnMucGFyYW1zID0gbmdIdHRwQ2xpZW50T3B0aW9ucz8ucGFyYW1zID8/IG9wdGlvbnM/LnBhcmFtcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXE6IFJlcXVlc3REYXRhID0ge1xuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgZGF0YSxcbiAgICAgIG9wdGlvbnM6IG1lcmdlZE9wdGlvbnMsXG4gICAgfTtcblxuICAgIGlmIChkYXRhIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUVycm9yKHJlcSkoZGF0YSk7XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdCQ6IE9ic2VydmFibGU8QXJyYXlCdWZmZXI+O1xuXG4gICAgc3dpdGNoIChtZXRob2QpIHtcbiAgICAgIGNhc2UgJ0RFTEVURSc6IHtcbiAgICAgICAgcmVzdWx0JCA9IHRoaXMuaHR0cC5kZWxldGUodXJsLCBuZ0h0dHBDbGllbnRPcHRpb25zKTtcbiAgICAgICAgaWYgKHRoaXMuc2F2ZURlbGF5KSB7XG4gICAgICAgICAgcmVzdWx0JCA9IHJlc3VsdCQucGlwZShkZWxheSh0aGlzLnNhdmVEZWxheSkpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnR0VUJzoge1xuICAgICAgICByZXN1bHQkID0gdGhpcy5odHRwLmdldCh1cmwsIG1lcmdlZE9wdGlvbnMpO1xuICAgICAgICBpZiAodGhpcy5nZXREZWxheSkge1xuICAgICAgICAgIHJlc3VsdCQgPSByZXN1bHQkLnBpcGUoZGVsYXkodGhpcy5nZXREZWxheSkpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnUE9TVCc6IHtcbiAgICAgICAgcmVzdWx0JCA9IHRoaXMuaHR0cC5wb3N0KHVybCwgZGF0YSwgbmdIdHRwQ2xpZW50T3B0aW9ucyk7XG4gICAgICAgIGlmICh0aGlzLnNhdmVEZWxheSkge1xuICAgICAgICAgIHJlc3VsdCQgPSByZXN1bHQkLnBpcGUoZGVsYXkodGhpcy5zYXZlRGVsYXkpKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIC8vIE4uQi46IEl0IG11c3QgcmV0dXJuIGFuIFVwZGF0ZTxUPlxuICAgICAgY2FzZSAnUFVUJzoge1xuICAgICAgICByZXN1bHQkID0gdGhpcy5odHRwLnB1dCh1cmwsIGRhdGEsIG5nSHR0cENsaWVudE9wdGlvbnMpO1xuICAgICAgICBpZiAodGhpcy5zYXZlRGVsYXkpIHtcbiAgICAgICAgICByZXN1bHQkID0gcmVzdWx0JC5waXBlKGRlbGF5KHRoaXMuc2F2ZURlbGF5KSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCdVbmltcGxlbWVudGVkIEhUVFAgbWV0aG9kLCAnICsgbWV0aG9kKTtcbiAgICAgICAgcmVzdWx0JCA9IHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICByZXN1bHQkID0gcmVzdWx0JC5waXBlKHRpbWVvdXQodGhpcy50aW1lb3V0ICsgdGhpcy5zYXZlRGVsYXkpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdCQucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IocmVxKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcihyZXFEYXRhOiBSZXF1ZXN0RGF0YSkge1xuICAgIHJldHVybiAoZXJyOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IG9rID0gdGhpcy5oYW5kbGVEZWxldGU0MDQoZXJyLCByZXFEYXRhKTtcbiAgICAgIGlmIChvaykge1xuICAgICAgICByZXR1cm4gb2s7XG4gICAgICB9XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBEYXRhU2VydmljZUVycm9yKGVyciwgcmVxRGF0YSk7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRGVsZXRlNDA0KGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSwgcmVxRGF0YTogUmVxdWVzdERhdGEpIHtcbiAgICBpZiAoXG4gICAgICBlcnJvci5zdGF0dXMgPT09IDQwNCAmJlxuICAgICAgcmVxRGF0YS5tZXRob2QgPT09ICdERUxFVEUnICYmXG4gICAgICB0aGlzLmRlbGV0ZTQwNE9LXG4gICAgKSB7XG4gICAgICByZXR1cm4gb2Yoe30pO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgYmFzaWMsIGdlbmVyaWMgZW50aXR5IGRhdGEgc2VydmljZVxuICogc3VpdGFibGUgZm9yIHBlcnNpc3RlbmNlIG9mIG1vc3QgZW50aXRpZXMuXG4gKiBBc3N1bWVzIGEgY29tbW9uIFJFU1QteSB3ZWIgQVBJXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEZWZhdWx0RGF0YVNlcnZpY2VGYWN0b3J5IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJvdGVjdGVkIGh0dHBVcmxHZW5lcmF0b3I6IEh0dHBVcmxHZW5lcmF0b3IsXG4gICAgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIGNvbmZpZz86IERlZmF1bHREYXRhU2VydmljZUNvbmZpZ1xuICApIHtcbiAgICBjb25maWcgPSBjb25maWcgfHwge307XG4gICAgaHR0cFVybEdlbmVyYXRvci5yZWdpc3Rlckh0dHBSZXNvdXJjZVVybHMoY29uZmlnLmVudGl0eUh0dHBSZXNvdXJjZVVybHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGRlZmF1bHQge0VudGl0eUNvbGxlY3Rpb25EYXRhU2VydmljZX0gZm9yIHRoZSBnaXZlbiBlbnRpdHkgdHlwZVxuICAgKiBAcGFyYW0gZW50aXR5TmFtZSB7c3RyaW5nfSBOYW1lIG9mIHRoZSBlbnRpdHkgdHlwZSBmb3IgdGhpcyBkYXRhIHNlcnZpY2VcbiAgICovXG4gIGNyZWF0ZTxUPihlbnRpdHlOYW1lOiBzdHJpbmcpOiBFbnRpdHlDb2xsZWN0aW9uRGF0YVNlcnZpY2U8VD4ge1xuICAgIHJldHVybiBuZXcgRGVmYXVsdERhdGFTZXJ2aWNlPFQ+KFxuICAgICAgZW50aXR5TmFtZSxcbiAgICAgIHRoaXMuaHR0cCxcbiAgICAgIHRoaXMuaHR0cFVybEdlbmVyYXRvcixcbiAgICAgIHRoaXMuY29uZmlnXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
209
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1kYXRhLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9tb2R1bGVzL2RhdGEvc3JjL2RhdGFzZXJ2aWNlcy9kZWZhdWx0LWRhdGEuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUdMLFdBQVcsRUFDWCxVQUFVLEdBQ1gsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7O0FBV3hEOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBZTdCLFlBQ0UsVUFBa0IsRUFDUixJQUFnQixFQUNoQixnQkFBa0MsRUFDNUMsTUFBaUM7UUFGdkIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBWnBDLGFBQVEsR0FBRyxDQUFDLENBQUM7UUFDYixjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsWUFBTyxHQUFHLENBQUMsQ0FBQztRQUNaLDJCQUFzQixHQUFHLEtBQUssQ0FBQztRQVl2QyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsVUFBVSxxQkFBcUIsQ0FBQztRQUNoRCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixNQUFNLEVBQ0osSUFBSSxHQUFHLEtBQUssRUFDWixXQUFXLEdBQUcsSUFBSSxFQUNsQixRQUFRLEdBQUcsQ0FBQyxFQUNaLFNBQVMsR0FBRyxDQUFDLEVBQ2IsT0FBTyxFQUFFLEVB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QUFDO0lBQzNFLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUksVUFBa0I7UUFDMUIsT0FBTyxJQUFJLGtCQUFrQixDQUMzQixVQUFVLEVBQ1YsSUFBSSxDQUFDLElBQUksRUFDVCxJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLElBQUksQ0FBQyxNQUFNLENBQ1osQ0FBQztJQUNKLENBQUM7O3lJQXJCVSx5QkFBeUI7NklBQXpCLHlCQUF5QjsyRkFBekIseUJBQXlCO2tCQURyQyxVQUFVOzswQkFLTixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaXNEZXZNb2RlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgSHR0cENsaWVudCxcbiAgSHR0cEVycm9yUmVzcG9uc2UsXG4gIEh0dHBIZWFkZXJzLFxuICBIdHRwUGFyYW1zLFxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkZWxheSwgbWFwLCB0aW1lb3V0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBVcGRhdGUgfSBmcm9tICdAbmdyeC9lbnRpdHknO1xuXG5pbXBvcnQgeyBEYXRhU2VydmljZUVycm9yIH0gZnJvbSAnLi9kYXRhLXNlcnZpY2UtZXJyb3InO1xuaW1wb3J0IHsgRGVmYXVsdERhdGFTZXJ2aWNlQ29uZmlnIH0gZnJvbSAnLi9kZWZhdWx0LWRhdGEtc2VydmljZS1jb25maWcnO1xuaW1wb3J0IHtcbiAgRW50aXR5Q29sbGVjdGlvbkRhdGFTZXJ2aWNlLFxuICBIdHRwTWV0aG9kcyxcbiAgSHR0cE9wdGlvbnMsXG4gIFF1ZXJ5UGFyYW1zLFxuICBSZXF1ZXN0RGF0YSxcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEh0dHBVcmxHZW5lcmF0b3IgfSBmcm9tICcuL2h0dHAtdXJsLWdlbmVyYXRvcic7XG5cbi8qKlxuICogQSBiYXNpYywgZ2VuZXJpYyBlbnRpdHkgZGF0YSBzZXJ2aWNlXG4gKiBzdWl0YWJsZSBmb3IgcGVyc2lzdGVuY2Ugb2YgbW9zdCBlbnRpdGllcy5cbiAqIEFzc3VtZXMgYSBjb21tb24gUkVTVC15IHdlYiBBUElcbiAqL1xuZXhwb3J0IGNsYXNzIERlZmF1bHREYXRhU2VydmljZTxUPiBpbXBsZW1lbnRzIEVudGl0eUNvbGxlY3Rpb25EYXRhU2VydmljZTxUPiB7XG4gIHByb3RlY3RlZCBfbmFtZTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgZGVsZXRlNDA0T0s6IGJvb2xlYW47XG4gIHByb3RlY3RlZCBlbnRpdHlOYW1lOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBlbnRpdHlVcmw6IHN0cmluZztcbiAgcHJvdGVjdGVkIGVudGl0aWVzVXJsOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBnZXREZWxheSA9IDA7XG4gIHByb3RlY3RlZCBzYXZlRGVsYXkgPSAwO1xuICBwcm90ZWN0ZWQgdGltZW91dCA9IDA7XG4gIHByb3RlY3RlZCB0cmFpbGluZ1NsYXNoRW5kcG9pbnRzID0gZmFsc2U7XG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBlbnRpdHlOYW1lOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJvdGVjdGVkIGh0dHBVcmxHZW5lcmF0b3I6IEh0dHBVcmxHZW5lcmF0b3IsXG4gICAgY29uZmlnPzogRGVmYXVsdERhdGFTZXJ2aWNlQ29uZmlnXG4gICkge1xuICAgIHRoaXMuX25hbWUgPSBgJHtlbnRpdHlOYW1lfSBEZWZhdWx0RGF0YVNlcnZpY2VgO1xuICAgIHRoaXMuZW50aXR5TmFtZSA9IGVudGl0eU5hbWU7XG4gICAgY29uc3Qge1xuICAgICAgcm9vdCA9ICdhcGknLFxuICAgICAgZGVsZXRlNDA0T0sgPSB0cnVlLFxuICAgICAgZ2V0RGVsYXkgPSAwLFxuICAgICAgc2F2ZURlbGF5ID0gMCxcbiAgICAgIHRpbWVvdXQ6IHRvID0gMCxcbiAgICAgIHRyYWlsaW5nU2xhc2hFbmRwb2ludHMgPSBmYWxzZSxcbiAgICB9ID0gY29uZmlnIHx8IHt9O1xuICAgIHRoaXMuZGVsZXRlNDA0T0sgPSBkZWxldGU0MDRPSztcbiAgICB0aGlzLmVudGl0eVVybCA9IGh0dHBVcmxHZW5lcmF0b3IuZW50aXR5UmVzb3VyY2UoXG4gICAgICBlbnRpdHlOYW1lLFxuICAgICAgcm9vdCxcbiAgICAgIHRyYWlsaW5nU2xhc2hFbmRwb2ludHNcbiAgICApO1xuICAgIHRoaXMuZW50aXRpZXNVcmwgPSBodHRwVXJsR2VuZXJhdG9yLmNvbGxlY3Rpb25SZXNvdXJjZShlbnRpdHlOYW1lLCByb290KTtcbiAgICB0aGlzLmdldERlbGF5ID0gZ2V0RGVsYXk7XG4gICAgdGhpcy5zYXZlRGVsYXkgPSBzYXZlRGVsYXk7XG4gICAgdGhpcy50aW1lb3V0ID0gdG87XG4gIH1cblxuICBhZGQoZW50aXR5OiBULCBvcHRpb25zPzogSHR0cE9wdGlvbnMpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICBjb25zdCBlbnRpdHlPckVycm9yID1cbiAgICAgIGVudGl0eSB8fCBuZXcgRXJyb3IoYE5vIFwiJHt0aGlzLmVudGl0eU5hbWV9XCIgZW50aXR5IHRvIGFkZGApO1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoJ1BPU1QnLCB0aGlzLmVudGl0eVVybCwgZW50aXR5T3JFcnJvciwgbnVsbCwgb3B0aW9ucyk7XG4gIH1cblxuICBkZWxldGUoXG4gICAga2V5OiBudW1iZXIgfCBzdHJpbmcsXG4gICAgb3B0aW9ucz86IEh0dHBPcHRpb25zXG4gICk6IE9ic2VydmFibGU8bnVtYmVyIHwgc3RyaW5nPiB7XG4gICAgbGV0IGVycjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gICAgaWYgKGtleSA9PSBudWxsKSB7XG4gICAgICBlcnIgPSBuZXcgRXJyb3IoYE5vIFwiJHt0aGlzLmVudGl0eU5hbWV9XCIga2V5IHRvIGRlbGV0ZWApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoXG4gICAgICAnREVMRVRFJyxcbiAgICAgIHRoaXMuZW50aXR5VXJsICsga2V5LFxuICAgICAgZXJyLFxuICAgICAgbnVsbCxcbiAgICAgIG9wdGlvbnNcbiAgICApLnBpcGUoXG4gICAgICAvLyBmb3J3YXJkIHRoZSBpZCBvZiBkZWxldGVkIGVudGl0eSBhcyB0aGUgcmVzdWx0IG9mIHRoZSBIVFRQIERFTEVURVxuICAgICAgbWFwKChyZXN1bHQpID0+IGtleSBhcyBudW1iZXIgfCBzdHJpbmcpXG4gICAgKTtcbiAgfVxuXG4gIGdldEFsbChvcHRpb25zPzogSHR0cE9wdGlvbnMpOiBPYnNlcnZhYmxlPFRbXT4ge1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoJ0dFVCcsIHRoaXMuZW50aXRpZXNVcmwsIG51bGwsIG9wdGlvbnMpO1xuICB9XG5cbiAgZ2V0QnlJZChrZXk6IG51bWJlciB8IHN0cmluZywgb3B0aW9ucz86IEh0dHBPcHRpb25zKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgbGV0IGVycjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gICAgaWYgKGtleSA9PSBudWxsKSB7XG4gICAgICBlcnIgPSBuZXcgRXJyb3IoYE5vIFwiJHt0aGlzLmVudGl0eU5hbWV9XCIga2V5IHRvIGdldGApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKCdHRVQnLCB0aGlzLmVudGl0eVVybCArIGtleSwgZXJyLCBudWxsLCBvcHRpb25zKTtcbiAgfVxuXG4gIGdldFdpdGhRdWVyeShcbiAgICBxdWVyeVBhcmFtczogUXVlcnlQYXJhbXMgfCBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgb3B0aW9ucz86IEh0dHBPcHRpb25zXG4gICk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgY29uc3QgcVBhcmFtcyA9XG4gICAgICB0eXBlb2YgcXVlcnlQYXJhbXMgPT09ICdzdHJpbmcnXG4gICAgICAgID8geyBmcm9tU3RyaW5nOiBxdWVyeVBhcmFtcyB9XG4gICAgICAgIDogeyBmcm9tT2JqZWN0OiBxdWVyeVBhcmFtcyB9O1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKHFQYXJhbXMpO1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShcbiAgICAgICdHRVQnLFxuICAgICAgdGhpcy5lbnRpdGllc1VybCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHsgcGFyYW1zIH0sXG4gICAgICBvcHRpb25zXG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZSh1cGRhdGU6IFVwZGF0ZTxUPiwgb3B0aW9ucz86IEh0dHBPcHRpb25zKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgY29uc3QgaWQgPSB1cGRhdGUgJiYgdXBkYXRlLmlkO1xuICAgIGNvbnN0IHVwZGF0ZU9yRXJyb3IgPVxuICAgICAgaWQgPT0gbnVsbFxuICAgICAgICA/IG5ldyBFcnJvcihgTm8gXCIke3RoaXMuZW50aXR5TmFtZX1cIiB1cGRhdGUgZGF0YSBvciBpZGApXG4gICAgICAgIDogdXBkYXRlLmNoYW5nZXM7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShcbiAgICAgICdQVVQnLFxuICAgICAgdGhpcy5lbnRpdHlVcmwgKyBpZCxcbiAgICAgIHVwZGF0ZU9yRXJyb3IsXG4gICAgICBudWxsLFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gIH1cblxuICAvLyBJbXBvcnRhbnQhIE9ubHkgY2FsbCBpZiB0aGUgYmFja2VuZCBzZXJ2aWNlIHN1cHBvcnRzIHVwc2VydHMgYXMgYSBQT1NUIHRvIHRoZSB0YXJnZXQgVVJMXG4gIHVwc2VydChlbnRpdHk6IFQsIG9wdGlvbnM/OiBIdHRwT3B0aW9ucyk6IE9ic2VydmFibGU8VD4ge1xuICAgIGNvbnN0IGVudGl0eU9yRXJyb3IgPVxuICAgICAgZW50aXR5IHx8IG5ldyBFcnJvcihgTm8gXCIke3RoaXMuZW50aXR5TmFtZX1cIiBlbnRpdHkgdG8gdXBzZXJ0YCk7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZSgnUE9TVCcsIHRoaXMuZW50aXR5VXJsLCBlbnRpdHlPckVycm9yLCBudWxsLCBvcHRpb25zKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBleGVjdXRlKFxuICAgIG1ldGhvZDogSHR0cE1ldGhvZHMsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgZGF0YT86IGFueSwgLy8gZGF0YSwgZXJyb3IsIG9yIHVuZGVmaW5lZC9udWxsXG4gICAgb3B0aW9ucz86IGFueSwgLy8gb3B0aW9ucyBvciB1bmRlZmluZWQvbnVsbFxuICAgIGh0dHBPcHRpb25zPzogSHR0cE9wdGlvbnMgLy8gdGhlc2Ugb3ZlcnJpZGUgYW55IG9wdGlvbnMgcGFzc2VkIHZpYSBvcHRpb25zXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IGVudGl0eUFjdGlvbkh0dHBDbGllbnRPcHRpb25zOiBhbnkgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGh0dHBPcHRpb25zKSB7XG4gICAgICBlbnRpdHlBY3Rpb25IdHRwQ2xpZW50T3B0aW9ucyA9IHtcbiAgICAgICAgaGVhZGVyczogaHR0cE9wdGlvbnM/Lmh0dHBIZWFkZXJzXG4gICAgICAgICAgPyBuZXcgSHR0cEhlYWRlcnMoaHR0cE9wdGlvbnM/Lmh0dHBIZWFkZXJzKVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBwYXJhbXM6IGh0dHBPcHRpb25zPy5odHRwUGFyYW1zXG4gICAgICAgICAgPyBuZXcgSHR0cFBhcmFtcyhodHRwT3B0aW9ucz8uaHR0cFBhcmFtcylcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gTm93IHdlIG1heSBoYXZlOlxuICAgIC8vIG9wdGlvbnM6IGNvbnRhaW5pbmcgaGVhZGVycywgcGFyYW1zLCBvciBhbnkgb3RoZXIgYWxsb3dlZCBodHRwIG9wdGlvbnMgYWxyZWFkeSBpbiBhbmd1bGFyJ3MgYXBpXG4gICAgLy8gZW50aXR5QWN0aW9uSHR0cENsaWVudE9wdGlvbnM6IGhlYWRlcnMgYW5kIHBhcmFtcyBpbiBhbmd1bGFyJ3MgYXBpXG5cbiAgICAvLyBXZSB0aGVyZWZvcmUgbmVlZCB0byBtZXJnZSB0aGVzZSBzbyB0aGF0IHRoZSBhY3Rpb24gb25lcyBvdmVycmlkZSB0aGVcbiAgICAvLyBleGlzdGluZyBrZXlzIHdoZXJlIGFwcGxpY2FibGUuXG5cbiAgICAvLyBJZiBhbnkgb3B0aW9ucyBoYXZlIGJlZW4gc3BlY2lmaWVkLCBwYXNzIHRoZW0gdG8gaHR0cCBjbGllbnQuIE5vdGVcbiAgICAvLyB0aGUgbmV3IGh0dHAgb3B0aW9ucywgaWYgc3BlY2lmaWVkLCB3aWxsIG92ZXJyaWRlIGFueSBvcHRpb25zIHBhc3NlZFxuICAgIC8vIGZyb20gdGhlIGRlcHJlY2F0ZWQgb3B0aW9ucyBwYXJhbWV0ZXJcbiAgICBsZXQgbWVyZ2VkT3B0aW9uczogYW55ID0gdW5kZWZpbmVkO1xuICAgIGlmIChvcHRpb25zIHx8IGVudGl0eUFjdGlvbkh0dHBDbGllbnRPcHRpb25zKSB7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkgJiYgb3B0aW9ucyAmJiBlbnRpdHlBY3Rpb25IdHRwQ2xpZW50T3B0aW9ucykge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ0BuZ3J4L2RhdGE6IG9wdGlvbnMuaHR0cFBhcmFtcyB3aWxsIGJlIG1lcmdlZCB3aXRoIHF1ZXJ5UGFyYW1zIHdoZW4gYm90aCBhcmUgYXJlIHByb3ZpZGVkIHRvIGdldFdpdGhRdWVyeSgpLiBJbiB0aGUgZXZlbnQgb2YgYSBjb25mbGljdCBIdHRwT3B0aW9ucy5odHRwUGFyYW1zIHdpbGwgb3ZlcnJpZGUgcXVlcnlQYXJhbXNgLiBUaGUgcXVlcnlQYXJhbXMgcGFyYW1ldGVyIG9mIGdldFdpdGhRdWVyeSgpIHdpbGwgYmUgcmVtb3ZlZCBpbiBuZXh0IG1ham9yIHJlbGVhc2UuJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBtZXJnZWRPcHRpb25zID0ge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBoZWFkZXJzOiBlbnRpdHlBY3Rpb25IdHRwQ2xpZW50T3B0aW9ucz8uaGVhZGVycyA/PyBvcHRpb25zPy5oZWFkZXJzLFxuICAgICAgICBwYXJhbXM6IGVudGl0eUFjdGlvbkh0dHBDbGllbnRPcHRpb25zPy5wYXJhbXMgPz8gb3B0aW9ucz8ucGFyYW1zLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCByZXE6IFJlcXVlc3REYXRhID0ge1xuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgZGF0YSxcbiAgICAgIG9wdGlvbnM6IG1lcmdlZE9wdGlvbnMsXG4gICAgfTtcblxuICAgIGlmIChkYXRhIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUVycm9yKHJlcSkoZGF0YSk7XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdCQ6IE9ic2VydmFibGU8QXJyYXlCdWZmZXI+O1xuXG4gICAgc3dpdGNoIChtZXRob2QpIHtcbiAgICAgIGNhc2UgJ0RFTEVURSc6IHtcbiAgICAgICAgcmVzdWx0JCA9IHRoaXMuaHR0cC5kZWxldGUodXJsLCBtZXJnZWRPcHRpb25zKTtcbiAgICAgICAgaWYgKHRoaXMuc2F2ZURlbGF5KSB7XG4gICAgICAgICAgcmVzdWx0JCA9IHJlc3VsdCQucGlwZShkZWxheSh0aGlzLnNhdmVEZWxheSkpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnR0VUJzoge1xuICAgICAgICByZXN1bHQkID0gdGhpcy5odHRwLmdldCh1cmwsIG1lcmdlZE9wdGlvbnMpO1xuICAgICAgICBpZiAodGhpcy5nZXREZWxheSkge1xuICAgICAgICAgIHJlc3VsdCQgPSByZXN1bHQkLnBpcGUoZGVsYXkodGhpcy5nZXREZWxheSkpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnUE9TVCc6IHtcbiAgICAgICAgcmVzdWx0JCA9IHRoaXMuaHR0cC5wb3N0KHVybCwgZGF0YSwgbWVyZ2VkT3B0aW9ucyk7XG4gICAgICAgIGlmICh0aGlzLnNhdmVEZWxheSkge1xuICAgICAgICAgIHJlc3VsdCQgPSByZXN1bHQkLnBpcGUoZGVsYXkodGhpcy5zYXZlRGVsYXkpKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIC8vIE4uQi46IEl0IG11c3QgcmV0dXJuIGFuIFVwZGF0ZTxUPlxuICAgICAgY2FzZSAnUFVUJzoge1xuICAgICAgICByZXN1bHQkID0gdGhpcy5odHRwLnB1dCh1cmwsIGRhdGEsIG1lcmdlZE9wdGlvbnMpO1xuICAgICAgICBpZiAodGhpcy5zYXZlRGVsYXkpIHtcbiAgICAgICAgICByZXN1bHQkID0gcmVzdWx0JC5waXBlKGRlbGF5KHRoaXMuc2F2ZURlbGF5KSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCdVbmltcGxlbWVudGVkIEhUVFAgbWV0aG9kLCAnICsgbWV0aG9kKTtcbiAgICAgICAgcmVzdWx0JCA9IHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICByZXN1bHQkID0gcmVzdWx0JC5waXBlKHRpbWVvdXQodGhpcy50aW1lb3V0ICsgdGhpcy5zYXZlRGVsYXkpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdCQucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IocmVxKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcihyZXFEYXRhOiBSZXF1ZXN0RGF0YSkge1xuICAgIHJldHVybiAoZXJyOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IG9rID0gdGhpcy5oYW5kbGVEZWxldGU0MDQoZXJyLCByZXFEYXRhKTtcbiAgICAgIGlmIChvaykge1xuICAgICAgICByZXR1cm4gb2s7XG4gICAgICB9XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBEYXRhU2VydmljZUVycm9yKGVyciwgcmVxRGF0YSk7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRGVsZXRlNDA0KGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSwgcmVxRGF0YTogUmVxdWVzdERhdGEpIHtcbiAgICBpZiAoXG4gICAgICBlcnJvci5zdGF0dXMgPT09IDQwNCAmJlxuICAgICAgcmVxRGF0YS5tZXRob2QgPT09ICdERUxFVEUnICYmXG4gICAgICB0aGlzLmRlbGV0ZTQwNE9LXG4gICAgKSB7XG4gICAgICByZXR1cm4gb2Yoe30pO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgYmFzaWMsIGdlbmVyaWMgZW50aXR5IGRhdGEgc2VydmljZVxuICogc3VpdGFibGUgZm9yIHBlcnNpc3RlbmNlIG9mIG1vc3QgZW50aXRpZXMuXG4gKiBBc3N1bWVzIGEgY29tbW9uIFJFU1QteSB3ZWIgQVBJXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEZWZhdWx0RGF0YVNlcnZpY2VGYWN0b3J5IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJvdGVjdGVkIGh0dHBVcmxHZW5lcmF0b3I6IEh0dHBVcmxHZW5lcmF0b3IsXG4gICAgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIGNvbmZpZz86IERlZmF1bHREYXRhU2VydmljZUNvbmZpZ1xuICApIHtcbiAgICBjb25maWcgPSBjb25maWcgfHwge307XG4gICAgaHR0cFVybEdlbmVyYXRvci5yZWdpc3Rlckh0dHBSZXNvdXJjZVVybHMoY29uZmlnLmVudGl0eUh0dHBSZXNvdXJjZVVybHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGRlZmF1bHQge0VudGl0eUNvbGxlY3Rpb25EYXRhU2VydmljZX0gZm9yIHRoZSBnaXZlbiBlbnRpdHkgdHlwZVxuICAgKiBAcGFyYW0gZW50aXR5TmFtZSB7c3RyaW5nfSBOYW1lIG9mIHRoZSBlbnRpdHkgdHlwZSBmb3IgdGhpcyBkYXRhIHNlcnZpY2VcbiAgICovXG4gIGNyZWF0ZTxUPihlbnRpdHlOYW1lOiBzdHJpbmcpOiBFbnRpdHlDb2xsZWN0aW9uRGF0YVNlcnZpY2U8VD4ge1xuICAgIHJldHVybiBuZXcgRGVmYXVsdERhdGFTZXJ2aWNlPFQ+KFxuICAgICAgZW50aXR5TmFtZSxcbiAgICAgIHRoaXMuaHR0cCxcbiAgICAgIHRoaXMuaHR0cFVybEdlbmVyYXRvcixcbiAgICAgIHRoaXMuY29uZmlnXG4gICAgKTtcbiAgfVxufVxuIl19
|
package/fesm2015/ngrx-data.mjs
CHANGED
|
@@ -694,26 +694,26 @@ class DefaultDataService {
|
|
|
694
694
|
}
|
|
695
695
|
add(entity, options) {
|
|
696
696
|
const entityOrError = entity || new Error(`No "${this.entityName}" entity to add`);
|
|
697
|
-
return this.execute('POST', this.entityUrl, entityOrError, options);
|
|
697
|
+
return this.execute('POST', this.entityUrl, entityOrError, null, options);
|
|
698
698
|
}
|
|
699
699
|
delete(key, options) {
|
|
700
700
|
let err;
|
|
701
701
|
if (key == null) {
|
|
702
702
|
err = new Error(`No "${this.entityName}" key to delete`);
|
|
703
703
|
}
|
|
704
|
-
return this.execute('DELETE', this.entityUrl + key, err, options).pipe(
|
|
704
|
+
return this.execute('DELETE', this.entityUrl + key, err, null, options).pipe(
|
|
705
705
|
// forward the id of deleted entity as the result of the HTTP DELETE
|
|
706
706
|
map((result) => key));
|
|
707
707
|
}
|
|
708
708
|
getAll(options) {
|
|
709
|
-
return this.execute('GET', this.entitiesUrl, options);
|
|
709
|
+
return this.execute('GET', this.entitiesUrl, null, options);
|
|
710
710
|
}
|
|
711
711
|
getById(key, options) {
|
|
712
712
|
let err;
|
|
713
713
|
if (key == null) {
|
|
714
714
|
err = new Error(`No "${this.entityName}" key to get`);
|
|
715
715
|
}
|
|
716
|
-
return this.execute('GET', this.entityUrl + key, err, options);
|
|
716
|
+
return this.execute('GET', this.entityUrl + key, err, null, options);
|
|
717
717
|
}
|
|
718
718
|
getWithQuery(queryParams, options) {
|
|
719
719
|
const qParams = typeof queryParams === 'string'
|
|
@@ -727,21 +727,21 @@ class DefaultDataService {
|
|
|
727
727
|
const updateOrError = id == null
|
|
728
728
|
? new Error(`No "${this.entityName}" update data or id`)
|
|
729
729
|
: update.changes;
|
|
730
|
-
return this.execute('PUT', this.entityUrl + id, updateOrError, options);
|
|
730
|
+
return this.execute('PUT', this.entityUrl + id, updateOrError, null, options);
|
|
731
731
|
}
|
|
732
732
|
// Important! Only call if the backend service supports upserts as a POST to the target URL
|
|
733
733
|
upsert(entity, options) {
|
|
734
734
|
const entityOrError = entity || new Error(`No "${this.entityName}" entity to upsert`);
|
|
735
|
-
return this.execute('POST', this.entityUrl, entityOrError, options);
|
|
735
|
+
return this.execute('POST', this.entityUrl, entityOrError, null, options);
|
|
736
736
|
}
|
|
737
737
|
execute(method, url, data, // data, error, or undefined/null
|
|
738
738
|
options, // options or undefined/null
|
|
739
739
|
httpOptions // these override any options passed via options
|
|
740
740
|
) {
|
|
741
|
-
var _a;
|
|
742
|
-
let
|
|
741
|
+
var _a, _b;
|
|
742
|
+
let entityActionHttpClientOptions = undefined;
|
|
743
743
|
if (httpOptions) {
|
|
744
|
-
|
|
744
|
+
entityActionHttpClientOptions = {
|
|
745
745
|
headers: (httpOptions === null || httpOptions === void 0 ? void 0 : httpOptions.httpHeaders)
|
|
746
746
|
? new HttpHeaders(httpOptions === null || httpOptions === void 0 ? void 0 : httpOptions.httpHeaders)
|
|
747
747
|
: undefined,
|
|
@@ -750,21 +750,20 @@ class DefaultDataService {
|
|
|
750
750
|
: undefined,
|
|
751
751
|
};
|
|
752
752
|
}
|
|
753
|
+
// Now we may have:
|
|
754
|
+
// options: containing headers, params, or any other allowed http options already in angular's api
|
|
755
|
+
// entityActionHttpClientOptions: headers and params in angular's api
|
|
756
|
+
// We therefore need to merge these so that the action ones override the
|
|
757
|
+
// existing keys where applicable.
|
|
753
758
|
// If any options have been specified, pass them to http client. Note
|
|
754
759
|
// the new http options, if specified, will override any options passed
|
|
755
760
|
// from the deprecated options parameter
|
|
756
761
|
let mergedOptions = undefined;
|
|
757
|
-
if (options ||
|
|
758
|
-
if (isDevMode() && options &&
|
|
762
|
+
if (options || entityActionHttpClientOptions) {
|
|
763
|
+
if (isDevMode() && options && entityActionHttpClientOptions) {
|
|
759
764
|
console.warn('@ngrx/data: options.httpParams will be merged with queryParams when both are are provided to getWithQuery(). In the event of a conflict HttpOptions.httpParams will override queryParams`. The queryParams parameter of getWithQuery() will be removed in next major release.');
|
|
760
765
|
}
|
|
761
|
-
mergedOptions = {};
|
|
762
|
-
if (ngHttpClientOptions === null || ngHttpClientOptions === void 0 ? void 0 : ngHttpClientOptions.headers) {
|
|
763
|
-
mergedOptions.headers = ngHttpClientOptions === null || ngHttpClientOptions === void 0 ? void 0 : ngHttpClientOptions.headers;
|
|
764
|
-
}
|
|
765
|
-
if ((ngHttpClientOptions === null || ngHttpClientOptions === void 0 ? void 0 : ngHttpClientOptions.params) || (options === null || options === void 0 ? void 0 : options.params)) {
|
|
766
|
-
mergedOptions.params = (_a = ngHttpClientOptions === null || ngHttpClientOptions === void 0 ? void 0 : ngHttpClientOptions.params) !== null && _a !== void 0 ? _a : options === null || options === void 0 ? void 0 : options.params;
|
|
767
|
-
}
|
|
766
|
+
mergedOptions = Object.assign(Object.assign({}, options), { headers: (_a = entityActionHttpClientOptions === null || entityActionHttpClientOptions === void 0 ? void 0 : entityActionHttpClientOptions.headers) !== null && _a !== void 0 ? _a : options === null || options === void 0 ? void 0 : options.headers, params: (_b = entityActionHttpClientOptions === null || entityActionHttpClientOptions === void 0 ? void 0 : entityActionHttpClientOptions.params) !== null && _b !== void 0 ? _b : options === null || options === void 0 ? void 0 : options.params });
|
|
768
767
|
}
|
|
769
768
|
const req = {
|
|
770
769
|
method,
|
|
@@ -778,7 +777,7 @@ class DefaultDataService {
|
|
|
778
777
|
let result$;
|
|
779
778
|
switch (method) {
|
|
780
779
|
case 'DELETE': {
|
|
781
|
-
result$ = this.http.delete(url,
|
|
780
|
+
result$ = this.http.delete(url, mergedOptions);
|
|
782
781
|
if (this.saveDelay) {
|
|
783
782
|
result$ = result$.pipe(delay(this.saveDelay));
|
|
784
783
|
}
|
|
@@ -792,7 +791,7 @@ class DefaultDataService {
|
|
|
792
791
|
break;
|
|
793
792
|
}
|
|
794
793
|
case 'POST': {
|
|
795
|
-
result$ = this.http.post(url, data,
|
|
794
|
+
result$ = this.http.post(url, data, mergedOptions);
|
|
796
795
|
if (this.saveDelay) {
|
|
797
796
|
result$ = result$.pipe(delay(this.saveDelay));
|
|
798
797
|
}
|
|
@@ -800,7 +799,7 @@ class DefaultDataService {
|
|
|
800
799
|
}
|
|
801
800
|
// N.B.: It must return an Update<T>
|
|
802
801
|
case 'PUT': {
|
|
803
|
-
result$ = this.http.put(url, data,
|
|
802
|
+
result$ = this.http.put(url, data, mergedOptions);
|
|
804
803
|
if (this.saveDelay) {
|
|
805
804
|
result$ = result$.pipe(delay(this.saveDelay));
|
|
806
805
|
}
|