ng-qubee 1.0.11 → 2.0.3
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/README.md +90 -67
- package/esm2022/lib/enums/sort.enum.mjs +6 -0
- package/esm2022/lib/errors/key-not-found.error.mjs +6 -0
- package/esm2022/lib/errors/unselectable-model.error.mjs +6 -0
- package/esm2022/lib/interfaces/config.interface.mjs +2 -0
- package/esm2022/lib/interfaces/fields.interface.mjs +2 -0
- package/esm2022/lib/interfaces/filters.interface.mjs +2 -0
- package/esm2022/lib/interfaces/normalized.interface.mjs +2 -0
- package/esm2022/lib/interfaces/paginated-object.interface.mjs +2 -0
- package/esm2022/lib/interfaces/pagination-config.interface.mjs +2 -0
- package/esm2022/lib/interfaces/query-builder-config.interface.mjs +2 -0
- package/esm2022/lib/interfaces/query-builder-state.interface.mjs +2 -0
- package/esm2022/lib/interfaces/sort.interface.mjs +2 -0
- package/esm2022/lib/models/paginated-collection.mjs +47 -0
- package/esm2022/lib/models/query-builder-options.mjs +12 -0
- package/esm2022/lib/models/response-options.mjs +17 -0
- package/esm2022/lib/ng-qubee.module.mjs +42 -0
- package/esm2022/lib/provide-ngqubee.mjs +39 -0
- package/esm2022/lib/services/nest.service.mjs +173 -0
- package/esm2022/lib/services/ng-qubee.service.mjs +319 -0
- package/esm2022/lib/services/pagination.service.mjs +23 -0
- package/esm2022/ng-qubee.mjs +5 -0
- package/esm2022/public-api.mjs +9 -0
- package/{fesm2015/ng-qubee.js → fesm2022/ng-qubee.mjs} +369 -217
- package/fesm2022/ng-qubee.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/interfaces/normalized.interface.d.ts +3 -0
- package/lib/interfaces/paginated-object.interface.d.ts +3 -0
- package/lib/interfaces/query-builder-state.interface.d.ts +1 -2
- package/lib/interfaces/sort.interface.d.ts +2 -1
- package/lib/models/paginated-collection.d.ts +18 -16
- package/lib/ng-qubee.module.d.ts +4 -1
- package/lib/provide-ngqubee.d.ts +21 -0
- package/lib/services/nest.service.d.ts +81 -0
- package/lib/{ng-qubee.service.d.ts → services/ng-qubee.service.d.ts} +30 -8
- package/lib/services/pagination.service.d.ts +5 -1
- package/package.json +20 -18
- package/public-api.d.ts +3 -2
- package/bundles/ng-qubee.umd.js +0 -927
- package/bundles/ng-qubee.umd.js.map +0 -1
- package/bundles/ng-qubee.umd.min.js +0 -16
- package/bundles/ng-qubee.umd.min.js.map +0 -1
- package/esm2015/lib/actions/query-builder.actions.js +0 -17
- package/esm2015/lib/enums/sort.enum.js +0 -6
- package/esm2015/lib/errors/key-not-found.error.js +0 -6
- package/esm2015/lib/errors/unselectable-model.error.js +0 -6
- package/esm2015/lib/interfaces/config.interface.js +0 -2
- package/esm2015/lib/interfaces/fields.interface.js +0 -2
- package/esm2015/lib/interfaces/filters.interface.js +0 -2
- package/esm2015/lib/interfaces/nest-state.interface.js +0 -2
- package/esm2015/lib/interfaces/pagination-config.interface.js +0 -2
- package/esm2015/lib/interfaces/query-builder-config.interface.js +0 -2
- package/esm2015/lib/interfaces/query-builder-state.interface.js +0 -2
- package/esm2015/lib/interfaces/sort.interface.js +0 -2
- package/esm2015/lib/models/paginated-collection.js +0 -45
- package/esm2015/lib/models/query-builder-options.js +0 -12
- package/esm2015/lib/models/response-options.js +0 -17
- package/esm2015/lib/ng-qubee.module.js +0 -33
- package/esm2015/lib/ng-qubee.service.js +0 -298
- package/esm2015/lib/reducers/query-builder.reducer.js +0 -51
- package/esm2015/lib/services/pagination.service.js +0 -18
- package/esm2015/lib/services/store.service.js +0 -26
- package/esm2015/ng-qubee.js +0 -6
- package/esm2015/public-api.js +0 -8
- package/fesm2015/ng-qubee.js.map +0 -1
- package/lib/actions/query-builder.actions.d.ts +0 -43
- package/lib/interfaces/nest-state.interface.d.ts +0 -4
- package/lib/reducers/query-builder.reducer.d.ts +0 -2
- package/lib/services/store.service.d.ts +0 -9
- package/ng-qubee.d.ts +0 -7
- package/ng-qubee.metadata.json +0 -1
package/README.md
CHANGED
|
@@ -1,103 +1,122 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img width="500" height="500" src="https://i.ibb.co/LdXRKyG/logo.png">
|
|
3
|
+
</p>
|
|
3
4
|
|
|
4
|
-
|
|
5
|
+
# Your next Angular Query Builder 🐝
|
|
6
|
+
NgQubee is a Query Builder for Angular. Easily compose your API requests without the hassle of writing the wheel again :)
|
|
5
7
|
|
|
6
|
-
-
|
|
8
|
+
- Easily retrieve URIs with a Service
|
|
7
9
|
- Pagination ready
|
|
8
10
|
- Reactive, as the results are emitted with a RxJS Observable
|
|
9
11
|
- Developed with a test-driven approach
|
|
10
12
|
|
|
11
13
|
## We love it, we use it ❤️
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
- [redux] - Store based with Redux
|
|
16
|
-
- [rxjs] - URIs returned via Observables
|
|
17
|
-
- [qs] - A querystring parsing and stringifying library with some added security.
|
|
14
|
+
NgQubee uses some open source projects to work properly:
|
|
15
|
+
- [rxjs] - URIs returned via Observables
|
|
16
|
+
- [qs] - A querystring parsing and stringifying library with some added security.
|
|
18
17
|
|
|
19
18
|
And of course NgQubee itself is open source with a [public repository][ng-qubee] on GitHub.
|
|
20
19
|
|
|
21
20
|
## Installation
|
|
22
|
-
|
|
23
21
|
Install NgQubee via NPM
|
|
24
22
|
|
|
25
23
|
```sh
|
|
26
|
-
npm
|
|
24
|
+
npm i ng-qubee
|
|
27
25
|
```
|
|
26
|
+
|
|
28
27
|
## Usage
|
|
29
28
|
Import the module in your Angular app:
|
|
29
|
+
|
|
30
30
|
```typescript
|
|
31
31
|
@NgModule({
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
imports: [
|
|
33
|
+
NgQubeeModule.forRoot({}) // You can omit the empty object as it is an optional argument
|
|
34
|
+
]
|
|
35
35
|
})
|
|
36
|
-
export class AppModule
|
|
36
|
+
export class AppModule {}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Or if you are working with Angular 15 or greater, use the provide function:
|
|
40
|
+
```typescript
|
|
41
|
+
const config = {};
|
|
42
|
+
|
|
43
|
+
bootstrapApplication(AppComponent, {
|
|
44
|
+
providers: [provideNgQubee(config)]
|
|
45
|
+
});
|
|
37
46
|
```
|
|
38
47
|
|
|
39
48
|
The object given to the _forRoot_ method allows to customize the query param keys. Following, the default behaviour:
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
49
|
+
|
|
50
|
+
- **Filters** are composed as filter[fieldName]=value / customizable with {request: {filters: 'yourFilterKey'}}
|
|
51
|
+
- **Fields** are composed as fields[model]=id,email,username / customizable with {request: {fields: 'yourFieldsKey'}}
|
|
52
|
+
- **Includes** are composed as include=modelA, modelB / customizable with {request: {includes: 'yourIncludeKey'}}
|
|
53
|
+
- **Limit** is composed as limit=15 / customizable with {request: {limit: 'yourLimitKey'}}
|
|
54
|
+
- **Page** is composed as page=1 / customizable with {request: {page: 'yourPageKey'}}
|
|
55
|
+
- **Sort** is composed as sort=fieldName / customizable with {request: {sort: 'yourSortKey'}}
|
|
56
|
+
|
|
47
57
|
As you can easily imagine, everything that regards the URI composition is placed into the "request" key.
|
|
48
|
-
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
49
60
|
NgQubeeModule.forRoot({
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
61
|
+
request: {
|
|
62
|
+
filters: 'custom-filter-key',
|
|
63
|
+
fields: 'custom-fields-key',
|
|
64
|
+
/* and so on... */
|
|
65
|
+
}
|
|
55
66
|
})
|
|
56
67
|
```
|
|
57
68
|
|
|
58
69
|
For composing queries, the first step is to inject the proper NgQubeeService:
|
|
70
|
+
|
|
59
71
|
```typescript
|
|
60
|
-
@Injectable
|
|
61
|
-
export
|
|
62
|
-
|
|
72
|
+
@Injectable()
|
|
73
|
+
export class YourService {
|
|
74
|
+
constructor(private _ngQubeeService: NgQubeeService) {}
|
|
63
75
|
}
|
|
64
76
|
```
|
|
65
77
|
|
|
66
78
|
Set the **model** to run the query against:
|
|
79
|
+
|
|
67
80
|
```typescript
|
|
68
|
-
|
|
81
|
+
this._ngQubeeService.setModel('users');
|
|
69
82
|
```
|
|
70
83
|
|
|
71
|
-
This is necessary to build the
|
|
84
|
+
This is necessary to build the prefix of the URI (/users)
|
|
85
|
+
|
|
72
86
|
|
|
73
87
|
### Fields
|
|
74
88
|
Fields can be selected as following:
|
|
75
89
|
|
|
76
90
|
```typescript
|
|
77
|
-
this._ngQubeeService.addFields('users', ['id',
|
|
91
|
+
this._ngQubeeService.addFields('users', ['id', 'email']);
|
|
78
92
|
```
|
|
93
|
+
|
|
79
94
|
Will output _/users?fields[users]=id,email_
|
|
80
95
|
|
|
81
96
|
### Filters
|
|
82
97
|
Filters are applied as following:
|
|
83
98
|
|
|
84
99
|
```typescript
|
|
85
|
-
this._ngQubeeService.addFilter('id',
|
|
100
|
+
this._ngQubeeService.addFilter('id', 5);
|
|
86
101
|
```
|
|
102
|
+
|
|
87
103
|
Will output _/users?filter[id]=5_
|
|
88
104
|
|
|
89
105
|
Multiple values are allowed too:
|
|
106
|
+
|
|
90
107
|
```typescript
|
|
91
|
-
this._ngQubeeService.addFilter('id',
|
|
108
|
+
this._ngQubeeService.addFilter('id', 5, 7, 10);
|
|
92
109
|
```
|
|
93
110
|
|
|
94
111
|
Will output _/users?filter[id]=5,7,10_
|
|
95
112
|
|
|
113
|
+
|
|
114
|
+
|
|
96
115
|
### Includes
|
|
97
116
|
Ask to include related models with:
|
|
98
117
|
|
|
99
118
|
```typescript
|
|
100
|
-
this._ngQubeeService.addIncludes('profile',
|
|
119
|
+
this._ngQubeeService.addIncludes('profile', 'settings');
|
|
101
120
|
```
|
|
102
121
|
|
|
103
122
|
Will output _/users?include=profile,settings_
|
|
@@ -122,8 +141,8 @@ this._ngQubeeService.setPage(2);
|
|
|
122
141
|
Will output _/users?limit=25&page=2
|
|
123
142
|
|
|
124
143
|
Default values are automatically added to the query:
|
|
125
|
-
|
|
126
|
-
|
|
144
|
+
- **Limit**: 15
|
|
145
|
+
- **Page**: 1
|
|
127
146
|
|
|
128
147
|
Always expect your query to include _limit=15&page=1_
|
|
129
148
|
|
|
@@ -131,7 +150,7 @@ Always expect your query to include _limit=15&page=1_
|
|
|
131
150
|
URI is generated invoking the _generateUri_ method of the NgQubeeService. An observable is returned and the URI will be emitted:
|
|
132
151
|
|
|
133
152
|
```typescript
|
|
134
|
-
this._ngQubeeService.generateUri().subscribe(uri
|
|
153
|
+
this._ngQubeeService.generateUri().subscribe(uri => console.log(uri));
|
|
135
154
|
```
|
|
136
155
|
|
|
137
156
|
### Reset state
|
|
@@ -143,45 +162,49 @@ this._ngQubeeService.reset();
|
|
|
143
162
|
|
|
144
163
|
## Pagination
|
|
145
164
|
If you are working with an API that supports pagination, we have got you covered 😉 NgQubee provides:
|
|
146
|
-
|
|
147
|
-
|
|
165
|
+
- A PaginatedCollection class that holds paginated data
|
|
166
|
+
- A PaginationService that help to transform the response in a PaginatedCollection
|
|
148
167
|
|
|
149
168
|
As a service, you have to inject the PaginationService first:
|
|
150
|
-
|
|
169
|
+
|
|
170
|
+
```typescript
|
|
151
171
|
constructor(private _pg: PaginationService) {}
|
|
152
172
|
```
|
|
153
173
|
|
|
154
|
-
In the following example, the PaginationService is used to transform the response with the paginate method.
|
|
155
|
-
|
|
156
|
-
|
|
174
|
+
In the following example, the PaginationService is used to transform the response with the paginate method.
|
|
175
|
+
|
|
176
|
+
```typescript
|
|
177
|
+
this._pg.paginate<Model>({ ...response, data: response.data.map(e => new Model(e.id)) })
|
|
157
178
|
```
|
|
179
|
+
|
|
158
180
|
The "paginate" method returns a PaginatedCollection that helps handling paginated data. Additionally, if you are dealing with a state library in your application, you can use the "normalize" method of the collection to normalize the data.
|
|
159
181
|
|
|
160
182
|
As you can see from the example, the paginate method requires a generic type: put there your model and you'll be provided with a PaginatedCollection<Model>. By default, the paginated collection will check for the following keys in the response:
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
183
|
+
|
|
184
|
+
- data - the key that holds the response data
|
|
185
|
+
- currentPage - requested page for the pagination
|
|
186
|
+
- from - Showing items from n (where n is a number)
|
|
187
|
+
- to - Showing items from n (where n is a number)
|
|
188
|
+
- total - Count of the items available in thw whole pagination
|
|
189
|
+
- perPage - Items per page
|
|
190
|
+
- prevPageUrl - Url to the previous page
|
|
191
|
+
- nextPageUrl - Url to the next page
|
|
192
|
+
- lastPage - Last page number
|
|
193
|
+
- firstPageUrl - Url to the first page
|
|
194
|
+
- lastPageUrl - Url to the last page
|
|
195
|
+
|
|
173
196
|
Just like the query builder, the pagination service supports customizable keys. While invoking the forRoot method of the module, use the response key to look for different keys in the API response. Let's assume that the "currentPage" key is named "pg" in your API responseL your forRoot configuration will look as following:
|
|
174
|
-
|
|
197
|
+
|
|
198
|
+
```typescript
|
|
175
199
|
NgQubeeModule.forRoot({
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
200
|
+
response: {
|
|
201
|
+
currentPage: 'pg'
|
|
202
|
+
}
|
|
179
203
|
})
|
|
180
204
|
```
|
|
181
205
|
|
|
182
206
|
Feel free to customize your PaginationService as you need, using the keys shown in the upper list.
|
|
183
207
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
[qs]: <https://github.com/ljharb/qs>
|
|
208
|
+
[ng-qubee]: <https://github.com/AndreaAlhena/ng-qubee>
|
|
209
|
+
[rxjs]: <https://reactivex.io>
|
|
210
|
+
[qs]: <https://github.com/ljharb/qs>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export var SortEnum;
|
|
2
|
+
(function (SortEnum) {
|
|
3
|
+
SortEnum["ASC"] = "asc";
|
|
4
|
+
SortEnum["DESC"] = "desc";
|
|
5
|
+
})(SortEnum || (SortEnum = {}));
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC5lbnVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcXViZWUvc3JjL2xpYi9lbnVtcy9zb3J0LmVudW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFOLElBQVksUUFHWDtBQUhELFdBQVksUUFBUTtJQUNoQix1QkFBVyxDQUFBO0lBQ1gseUJBQWEsQ0FBQTtBQUNqQixDQUFDLEVBSFcsUUFBUSxLQUFSLFFBQVEsUUFHbkIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBTb3J0RW51bSB7XG4gICAgQVNDID0gJ2FzYycsXG4gICAgREVTQyA9ICdkZXNjJ1xufSJdfQ==
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export class KeyNotFoundError extends Error {
|
|
2
|
+
constructor(key) {
|
|
3
|
+
super(`Cannot find the key ${key} inside the collection item: does it really exists?`);
|
|
4
|
+
}
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5LW5vdC1mb3VuZC5lcnJvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXF1YmVlL3NyYy9saWIvZXJyb3JzL2tleS1ub3QtZm91bmQuZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLGdCQUFpQixTQUFRLEtBQUs7SUFDdkMsWUFBWSxHQUFXO1FBQ25CLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxxREFBcUQsQ0FBQyxDQUFDO0lBQzNGLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBLZXlOb3RGb3VuZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGtleTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKGBDYW5ub3QgZmluZCB0aGUga2V5ICR7a2V5fSBpbnNpZGUgdGhlIGNvbGxlY3Rpb24gaXRlbTogZG9lcyBpdCByZWFsbHkgZXhpc3RzP2ApO1xuICAgIH1cbn0iXX0=
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export class UnselectableModelError extends Error {
|
|
2
|
+
constructor(model) {
|
|
3
|
+
super(`Unselectable Model: the selected model (${model}) is not present neither in the "model" property, nor in the includes object.`);
|
|
4
|
+
}
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5zZWxlY3RhYmxlLW1vZGVsLmVycm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcXViZWUvc3JjL2xpYi9lcnJvcnMvdW5zZWxlY3RhYmxlLW1vZGVsLmVycm9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxLQUFLO0lBQzdDLFlBQVksS0FBYTtRQUNyQixLQUFLLENBQUMsMkNBQTJDLEtBQUssK0VBQStFLENBQUMsQ0FBQztJQUMzSSxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgVW5zZWxlY3RhYmxlTW9kZWxFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3Rvcihtb2RlbDogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKGBVbnNlbGVjdGFibGUgTW9kZWw6IHRoZSBzZWxlY3RlZCBtb2RlbCAoJHttb2RlbH0pIGlzIG5vdCBwcmVzZW50IG5laXRoZXIgaW4gdGhlIFwibW9kZWxcIiBwcm9wZXJ0eSwgbm9yIGluIHRoZSBpbmNsdWRlcyBvYmplY3QuYCk7XG4gICAgfVxufSJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXF1YmVlL3NyYy9saWIvaW50ZXJmYWNlcy9jb25maWcuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJUGFnaW5hdGlvbkNvbmZpZyB9IGZyb20gXCIuL3BhZ2luYXRpb24tY29uZmlnLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgSVF1ZXJ5QnVpbGRlckNvbmZpZyB9IGZyb20gXCIuL3F1ZXJ5LWJ1aWxkZXItY29uZmlnLmludGVyZmFjZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDb25maWcge1xuICAgIHJlcXVlc3Q/OiBJUXVlcnlCdWlsZGVyQ29uZmlnLFxuICAgIHJlc3BvbnNlPzogSVBhZ2luYXRpb25Db25maWdcbn0iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXF1YmVlL3NyYy9saWIvaW50ZXJmYWNlcy9maWVsZHMuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIElGaWVsZHMge1xuICAgIFttb2RlbDogc3RyaW5nXTogc3RyaW5nW107XG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVycy5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1xdWJlZS9zcmMvbGliL2ludGVyZmFjZXMvZmlsdGVycy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgSUZpbHRlcnMge1xuICAgIFtrOiBzdHJpbmddOiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbilbXTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplZC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1xdWJlZS9zcmMvbGliL2ludGVyZmFjZXMvbm9ybWFsaXplZC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgSU5vcm1hbGl6ZWQge1xuICAgIFtrOiBudW1iZXIgfCBzdHJpbmddOiBudW1iZXJbXSB8IHN0cmluZ1tdXG59Il19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGVkLW9iamVjdC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1xdWJlZS9zcmMvbGliL2ludGVyZmFjZXMvcGFnaW5hdGVkLW9iamVjdC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgSVBhZ2luYXRlZE9iamVjdCB7XG4gICAgW2s6IHN0cmluZ106IGFueTtcbn0iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi1jb25maWcuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcXViZWUvc3JjL2xpYi9pbnRlcmZhY2VzL3BhZ2luYXRpb24tY29uZmlnLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJUGFnaW5hdGlvbkNvbmZpZyB7XG4gICAgY3VycmVudFBhZ2U/OiBzdHJpbmc7XG4gICAgZGF0YT86IHN0cmluZztcbiAgICBmaXJzdFBhZ2VVcmw/OiBzdHJpbmc7XG4gICAgZnJvbT86IHN0cmluZztcbiAgICBsYXN0UGFnZT86IHN0cmluZztcbiAgICBsYXN0UGFnZVVybD86IHN0cmluZztcbiAgICBuZXh0UGFnZVVybD86IHN0cmluZztcbiAgICBwYXRoPzogc3RyaW5nO1xuICAgIHBlclBhZ2U/OiBzdHJpbmc7XG4gICAgcHJldlBhZ2VVcmw/OiBzdHJpbmc7XG4gICAgdG8/OiBzdHJpbmc7XG4gICAgdG90YWw/OiBzdHJpbmc7XG59Il19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci1jb25maWcuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcXViZWUvc3JjL2xpYi9pbnRlcmZhY2VzL3F1ZXJ5LWJ1aWxkZXItY29uZmlnLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJUXVlcnlCdWlsZGVyQ29uZmlnIHtcbiAgICBhcHBlbmRzPzogc3RyaW5nO1xuICAgIGZpZWxkcz86IHN0cmluZztcbiAgICBmaWx0ZXJzPzogc3RyaW5nO1xuICAgIGluY2x1ZGVzPzogc3RyaW5nO1xuICAgIGxpbWl0Pzogc3RyaW5nO1xuICAgIHBhZ2U/OiBzdHJpbmc7XG4gICAgc29ydD86IHN0cmluZztcbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci1zdGF0ZS5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1xdWJlZS9zcmMvbGliL2ludGVyZmFjZXMvcXVlcnktYnVpbGRlci1zdGF0ZS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElGaWVsZHMgfSBmcm9tIFwiLi9maWVsZHMuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBJRmlsdGVycyB9IGZyb20gXCIuL2ZpbHRlcnMuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBJU29ydCB9IGZyb20gXCIuL3NvcnQuaW50ZXJmYWNlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVF1ZXJ5QnVpbGRlclN0YXRlIHtcbiAgICBiYXNlVXJsOiBzdHJpbmc7XG4gICAgZmllbGRzOiBJRmllbGRzO1xuICAgIGZpbHRlcnM6IElGaWx0ZXJzO1xuICAgIGluY2x1ZGVzOiBzdHJpbmdbXTtcbiAgICBsaW1pdDogbnVtYmVyO1xuICAgIG1vZGVsOiBzdHJpbmc7XG4gICAgcGFnZTogbnVtYmVyLFxuICAgIHNvcnRzOiBJU29ydFtdO1xufSJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1xdWJlZS9zcmMvbGliL2ludGVyZmFjZXMvc29ydC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNvcnRFbnVtIH0gZnJvbSBcIi4uL2VudW1zL3NvcnQuZW51bVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElTb3J0IHtcbiAgICBmaWVsZDogc3RyaW5nO1xuICAgIG9yZGVyOiBTb3J0RW51bVxufSJdfQ==
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { KeyNotFoundError } from "../errors/key-not-found.error";
|
|
2
|
+
export class PaginatedCollection {
|
|
3
|
+
constructor(data, page, from, to, total, perPage, prevPageUrl, nextPageUrl, lastPage, firstPageUrl, lastPageUrl) {
|
|
4
|
+
this.data = data;
|
|
5
|
+
this.page = page;
|
|
6
|
+
this.from = from;
|
|
7
|
+
this.to = to;
|
|
8
|
+
this.total = total;
|
|
9
|
+
this.perPage = perPage;
|
|
10
|
+
this.prevPageUrl = prevPageUrl;
|
|
11
|
+
this.nextPageUrl = nextPageUrl;
|
|
12
|
+
this.lastPage = lastPage;
|
|
13
|
+
this.firstPageUrl = firstPageUrl;
|
|
14
|
+
this.lastPageUrl = lastPageUrl;
|
|
15
|
+
//
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Normalize the collection to a paginated list of ids for state-managed applications.
|
|
19
|
+
*
|
|
20
|
+
* This method returns a single key object, where the key is the page number and the associated value is
|
|
21
|
+
* an array of ids. Each id is fetched by the collection items, looking up for the "id" key. If an id is supplied
|
|
22
|
+
* to this method, it will be used instead of the default "id" key.
|
|
23
|
+
*
|
|
24
|
+
* Please note that in case the key doesn't exist in the collection's item, a KeyNotFoundError is thrown
|
|
25
|
+
*
|
|
26
|
+
* @param k A key to use instead of the default "id": this will be searched inside each element of the collection
|
|
27
|
+
* @returns []
|
|
28
|
+
* @throws KeyNotFoundItem
|
|
29
|
+
*/
|
|
30
|
+
normalize(id) {
|
|
31
|
+
return {
|
|
32
|
+
[this.page]: this.data.reduce((ids, value) => {
|
|
33
|
+
if (id && id in value) {
|
|
34
|
+
ids.push(value[id]);
|
|
35
|
+
}
|
|
36
|
+
else if (value.hasOwnProperty('id')) {
|
|
37
|
+
ids.push(value['id']);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
throw new KeyNotFoundError(id || 'id');
|
|
41
|
+
}
|
|
42
|
+
return ids;
|
|
43
|
+
}, [])
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGVkLWNvbGxlY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1xdWJlZS9zcmMvbGliL21vZGVscy9wYWdpbmF0ZWQtY29sbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUlqRSxNQUFNLE9BQU8sbUJBQW1CO0lBQzVCLFlBQ1csSUFBUyxFQUNBLElBQVksRUFDWixJQUFhLEVBQ2IsRUFBVyxFQUNYLEtBQWMsRUFDZCxPQUFnQixFQUNoQixXQUFvQixFQUNwQixXQUFvQixFQUNwQixRQUFpQixFQUNqQixZQUFxQixFQUNyQixXQUFvQjtRQVY3QixTQUFJLEdBQUosSUFBSSxDQUFLO1FBQ0EsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNaLFNBQUksR0FBSixJQUFJLENBQVM7UUFDYixPQUFFLEdBQUYsRUFBRSxDQUFTO1FBQ1gsVUFBSyxHQUFMLEtBQUssQ0FBUztRQUNkLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDaEIsZ0JBQVcsR0FBWCxXQUFXLENBQVM7UUFDcEIsZ0JBQVcsR0FBWCxXQUFXLENBQVM7UUFDcEIsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUNqQixpQkFBWSxHQUFaLFlBQVksQ0FBUztRQUNyQixnQkFBVyxHQUFYLFdBQVcsQ0FBUztRQUVwQyxFQUFFO0lBQ04sQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNJLFNBQVMsQ0FBQyxFQUFXO1FBQ3hCLE9BQU87WUFDSCxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQWEsRUFBRSxLQUFRLEVBQUUsRUFBRTtnQkFDdEQsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEtBQUssRUFBRTtvQkFDbkIsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDdkI7cUJBQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNuQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2lCQUN6QjtxQkFBTTtvQkFDSCxNQUFNLElBQUksZ0JBQWdCLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDO2lCQUMxQztnQkFFRCxPQUFPLEdBQUcsQ0FBQztZQUNmLENBQUMsRUFBRSxFQUFFLENBQUM7U0FDVCxDQUFBO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgS2V5Tm90Rm91bmRFcnJvciB9IGZyb20gXCIuLi9lcnJvcnMva2V5LW5vdC1mb3VuZC5lcnJvclwiO1xuaW1wb3J0IHsgSU5vcm1hbGl6ZWQgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9ub3JtYWxpemVkLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgSVBhZ2luYXRlZE9iamVjdCB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL3BhZ2luYXRlZC1vYmplY3QuaW50ZXJmYWNlXCI7XG5cbmV4cG9ydCBjbGFzcyBQYWdpbmF0ZWRDb2xsZWN0aW9uPFQgZXh0ZW5kcyBJUGFnaW5hdGVkT2JqZWN0PiB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBkYXRhOiBUW10sXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBwYWdlOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBmcm9tPzogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgdG8/OiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyByZWFkb25seSB0b3RhbD86IG51bWJlcixcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IHBlclBhZ2U/OiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBwcmV2UGFnZVVybD86IHN0cmluZyxcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IG5leHRQYWdlVXJsPzogc3RyaW5nLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgbGFzdFBhZ2U/OiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBmaXJzdFBhZ2VVcmw/OiBzdHJpbmcsXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBsYXN0UGFnZVVybD86IHN0cmluZ1xuICAgICkge1xuICAgICAgICAvL1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5vcm1hbGl6ZSB0aGUgY29sbGVjdGlvbiB0byBhIHBhZ2luYXRlZCBsaXN0IG9mIGlkcyBmb3Igc3RhdGUtbWFuYWdlZCBhcHBsaWNhdGlvbnMuXG4gICAgICogXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHNpbmdsZSBrZXkgb2JqZWN0LCB3aGVyZSB0aGUga2V5IGlzIHRoZSBwYWdlIG51bWJlciBhbmQgdGhlIGFzc29jaWF0ZWQgdmFsdWUgaXNcbiAgICAgKiBhbiBhcnJheSBvZiBpZHMuIEVhY2ggaWQgaXMgZmV0Y2hlZCBieSB0aGUgY29sbGVjdGlvbiBpdGVtcywgbG9va2luZyB1cCBmb3IgdGhlIFwiaWRcIiBrZXkuIElmIGFuIGlkIGlzIHN1cHBsaWVkXG4gICAgICogdG8gdGhpcyBtZXRob2QsIGl0IHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IFwiaWRcIiBrZXkuXG4gICAgICogXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCBpbiBjYXNlIHRoZSBrZXkgZG9lc24ndCBleGlzdCBpbiB0aGUgY29sbGVjdGlvbidzIGl0ZW0sIGEgS2V5Tm90Rm91bmRFcnJvciBpcyB0aHJvd25cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gayBBIGtleSB0byB1c2UgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBcImlkXCI6IHRoaXMgd2lsbCBiZSBzZWFyY2hlZCBpbnNpZGUgZWFjaCBlbGVtZW50IG9mIHRoZSBjb2xsZWN0aW9uXG4gICAgICogQHJldHVybnMgW11cbiAgICAgKiBAdGhyb3dzIEtleU5vdEZvdW5kSXRlbVxuICAgICAqL1xuICAgIHB1YmxpYyBub3JtYWxpemUoaWQ/OiBzdHJpbmcpOiBJTm9ybWFsaXplZCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBbdGhpcy5wYWdlXTogdGhpcy5kYXRhLnJlZHVjZSgoaWRzOiBudW1iZXJbXSwgdmFsdWU6IFQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaWQgJiYgaWQgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWRzLnB1c2godmFsdWVbaWRdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdpZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlkcy5wdXNoKHZhbHVlWydpZCddKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgS2V5Tm90Rm91bmRFcnJvcihpZCB8fCAnaWQnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gaWRzO1xuICAgICAgICAgICAgfSwgW10pXG4gICAgICAgIH1cbiAgICB9XG59Il19
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export class QueryBuilderOptions {
|
|
2
|
+
constructor(options) {
|
|
3
|
+
this.appends = options.appends || 'append';
|
|
4
|
+
this.fields = options.fields || 'fields';
|
|
5
|
+
this.filters = options.filters || 'filter';
|
|
6
|
+
this.includes = options.includes || 'include';
|
|
7
|
+
this.limit = options.limit || 'limit';
|
|
8
|
+
this.page = options.page || 'page';
|
|
9
|
+
this.sort = options.sort || 'sort';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci1vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcXViZWUvc3JjL2xpYi9tb2RlbHMvcXVlcnktYnVpbGRlci1vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTyxtQkFBbUI7SUFTNUIsWUFBWSxPQUE0QjtRQUNwQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDO1FBQzNDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUM7UUFDekMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQztRQUMzQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLElBQUksU0FBUyxDQUFDO1FBQzlDLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQztRQUNuQyxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDO0lBQ3ZDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElRdWVyeUJ1aWxkZXJDb25maWcgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3F1ZXJ5LWJ1aWxkZXItY29uZmlnLmludGVyZmFjZSc7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeUJ1aWxkZXJPcHRpb25zIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgYXBwZW5kczogc3RyaW5nO1xuICAgIHB1YmxpYyByZWFkb25seSBmaWVsZHM6IHN0cmluZztcbiAgICBwdWJsaWMgcmVhZG9ubHkgZmlsdGVyczogc3RyaW5nO1xuICAgIHB1YmxpYyByZWFkb25seSBpbmNsdWRlczogc3RyaW5nO1xuICAgIHB1YmxpYyByZWFkb25seSBsaW1pdDogc3RyaW5nO1xuICAgIHB1YmxpYyByZWFkb25seSBwYWdlOiBzdHJpbmc7XG4gICAgcHVibGljIHJlYWRvbmx5IHNvcnQ6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IElRdWVyeUJ1aWxkZXJDb25maWcpIHtcbiAgICAgICAgdGhpcy5hcHBlbmRzID0gb3B0aW9ucy5hcHBlbmRzIHx8ICdhcHBlbmQnO1xuICAgICAgICB0aGlzLmZpZWxkcyA9IG9wdGlvbnMuZmllbGRzIHx8ICdmaWVsZHMnO1xuICAgICAgICB0aGlzLmZpbHRlcnMgPSBvcHRpb25zLmZpbHRlcnMgfHwgJ2ZpbHRlcic7XG4gICAgICAgIHRoaXMuaW5jbHVkZXMgPSBvcHRpb25zLmluY2x1ZGVzIHx8ICdpbmNsdWRlJztcbiAgICAgICAgdGhpcy5saW1pdCA9IG9wdGlvbnMubGltaXQgfHwgJ2xpbWl0JztcbiAgICAgICAgdGhpcy5wYWdlID0gb3B0aW9ucy5wYWdlIHx8ICdwYWdlJztcbiAgICAgICAgdGhpcy5zb3J0ID0gb3B0aW9ucy5zb3J0IHx8ICdzb3J0JztcbiAgICB9XG59Il19
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export class ResponseOptions {
|
|
2
|
+
constructor(options) {
|
|
3
|
+
this.currentPage = options.currentPage || 'current_page';
|
|
4
|
+
this.data = options.data || 'data';
|
|
5
|
+
this.firstPageUrl = options.firstPageUrl || 'first_page_url';
|
|
6
|
+
this.from = options.from || 'from';
|
|
7
|
+
this.lastPage = options.lastPage || 'last_page';
|
|
8
|
+
this.lastPageUrl = options.lastPageUrl || 'last_page_url';
|
|
9
|
+
this.nextPageUrl = options.nextPageUrl || 'next_page_url';
|
|
10
|
+
this.path = options.path || 'path';
|
|
11
|
+
this.perPage = options.perPage || 'per_page';
|
|
12
|
+
this.prevPageUrl = options.prevPageUrl || 'prev_page_url';
|
|
13
|
+
this.to = options.to || 'to';
|
|
14
|
+
this.total = options.total || 'total';
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2Utb3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXF1YmVlL3NyYy9saWIvbW9kZWxzL3Jlc3BvbnNlLW9wdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxPQUFPLGVBQWU7SUFjeEIsWUFBWSxPQUEwQjtRQUNsQyxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLElBQUksY0FBYyxDQUFDO1FBQ3pELElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUM7UUFDbkMsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxJQUFJLGdCQUFnQixDQUFDO1FBQzdELElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxJQUFJLFdBQVcsQ0FBQztRQUNoRCxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLElBQUksZUFBZSxDQUFDO1FBQzFELElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxlQUFlLENBQUM7UUFDMUQsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQztRQUNuQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDO1FBQzdDLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxlQUFlLENBQUM7UUFDMUQsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztRQUM3QixJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDO0lBQzFDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElQYWdpbmF0aW9uQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9wYWdpbmF0aW9uLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSVF1ZXJ5QnVpbGRlckNvbmZpZyB9IGZyb20gJy4uL2ludGVyZmFjZXMvcXVlcnktYnVpbGRlci1jb25maWcuaW50ZXJmYWNlJztcblxuZXhwb3J0IGNsYXNzIFJlc3BvbnNlT3B0aW9ucyB7XG4gICAgcHVibGljIHJlYWRvbmx5IGN1cnJlbnRQYWdlOiBzdHJpbmc7XG4gICAgcHVibGljIHJlYWRvbmx5IGRhdGE6IHN0cmluZztcbiAgICBwdWJsaWMgcmVhZG9ubHkgZmlyc3RQYWdlVXJsOiBzdHJpbmc7XG4gICAgcHVibGljIHJlYWRvbmx5IGZyb206IHN0cmluZztcbiAgICBwdWJsaWMgcmVhZG9ubHkgbGFzdFBhZ2U6IHN0cmluZztcbiAgICBwdWJsaWMgcmVhZG9ubHkgbGFzdFBhZ2VVcmw6IHN0cmluZztcbiAgICBwdWJsaWMgcmVhZG9ubHkgbmV4dFBhZ2VVcmw6IHN0cmluZztcbiAgICBwdWJsaWMgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xuICAgIHB1YmxpYyByZWFkb25seSBwZXJQYWdlOiBzdHJpbmc7XG4gICAgcHVibGljIHJlYWRvbmx5IHByZXZQYWdlVXJsOiBzdHJpbmc7XG4gICAgcHVibGljIHJlYWRvbmx5IHRvOiBzdHJpbmc7XG4gICAgcHVibGljIHJlYWRvbmx5IHRvdGFsOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJUGFnaW5hdGlvbkNvbmZpZykge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gb3B0aW9ucy5jdXJyZW50UGFnZSB8fCAnY3VycmVudF9wYWdlJztcbiAgICAgICAgdGhpcy5kYXRhID0gb3B0aW9ucy5kYXRhIHx8ICdkYXRhJztcbiAgICAgICAgdGhpcy5maXJzdFBhZ2VVcmwgPSBvcHRpb25zLmZpcnN0UGFnZVVybCB8fCAnZmlyc3RfcGFnZV91cmwnO1xuICAgICAgICB0aGlzLmZyb20gPSBvcHRpb25zLmZyb20gfHwgJ2Zyb20nO1xuICAgICAgICB0aGlzLmxhc3RQYWdlID0gb3B0aW9ucy5sYXN0UGFnZSB8fCAnbGFzdF9wYWdlJztcbiAgICAgICAgdGhpcy5sYXN0UGFnZVVybCA9IG9wdGlvbnMubGFzdFBhZ2VVcmwgfHwgJ2xhc3RfcGFnZV91cmwnO1xuICAgICAgICB0aGlzLm5leHRQYWdlVXJsID0gb3B0aW9ucy5uZXh0UGFnZVVybCB8fCAnbmV4dF9wYWdlX3VybCc7XG4gICAgICAgIHRoaXMucGF0aCA9IG9wdGlvbnMucGF0aCB8fCAncGF0aCc7XG4gICAgICAgIHRoaXMucGVyUGFnZSA9IG9wdGlvbnMucGVyUGFnZSB8fCAncGVyX3BhZ2UnO1xuICAgICAgICB0aGlzLnByZXZQYWdlVXJsID0gb3B0aW9ucy5wcmV2UGFnZVVybCB8fCAncHJldl9wYWdlX3VybCc7XG4gICAgICAgIHRoaXMudG8gPSBvcHRpb25zLnRvIHx8ICd0byc7XG4gICAgICAgIHRoaXMudG90YWwgPSBvcHRpb25zLnRvdGFsIHx8ICd0b3RhbCc7XG4gICAgfVxufSJdfQ==
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { NgQubeeService } from './services/ng-qubee.service';
|
|
3
|
+
import { PaginationService } from './services/pagination.service';
|
|
4
|
+
import { NestService } from './services/nest.service';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
// @dynamic
|
|
7
|
+
export class NgQubeeModule {
|
|
8
|
+
static forRoot(config = {}) {
|
|
9
|
+
return {
|
|
10
|
+
ngModule: NgQubeeModule,
|
|
11
|
+
providers: [
|
|
12
|
+
NestService,
|
|
13
|
+
{
|
|
14
|
+
deps: [NestService],
|
|
15
|
+
provide: NgQubeeService,
|
|
16
|
+
useFactory: (nestService) => new NgQubeeService(nestService, Object.assign({}, config.request))
|
|
17
|
+
}, {
|
|
18
|
+
provide: PaginationService,
|
|
19
|
+
useFactory: () => new PaginationService(Object.assign({}, config.response))
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: NgQubeeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
25
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.1.3", ngImport: i0, type: NgQubeeModule }); }
|
|
26
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: NgQubeeModule, providers: [{
|
|
27
|
+
deps: [NestService],
|
|
28
|
+
provide: NgQubeeService,
|
|
29
|
+
useFactory: (nestService) => new NgQubeeService(nestService, {})
|
|
30
|
+
}] }); }
|
|
31
|
+
}
|
|
32
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: NgQubeeModule, decorators: [{
|
|
33
|
+
type: NgModule,
|
|
34
|
+
args: [{
|
|
35
|
+
providers: [{
|
|
36
|
+
deps: [NestService],
|
|
37
|
+
provide: NgQubeeService,
|
|
38
|
+
useFactory: (nestService) => new NgQubeeService(nestService, {})
|
|
39
|
+
}]
|
|
40
|
+
}]
|
|
41
|
+
}] });
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctcXViZWUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcXViZWUvc3JjL2xpYi9uZy1xdWJlZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTdELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFFdEQsV0FBVztBQVFYLE1BQU0sT0FBTyxhQUFhO0lBQ2pCLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBa0IsRUFBRTtRQUN4QyxPQUFPO1lBQ0wsUUFBUSxFQUFFLGFBQWE7WUFDdkIsU0FBUyxFQUFFO2dCQUNULFdBQVc7Z0JBQ1g7b0JBQ0UsSUFBSSxFQUFFLENBQUMsV0FBVyxDQUFDO29CQUNuQixPQUFPLEVBQUUsY0FBYztvQkFDdkIsVUFBVSxFQUFFLENBQUMsV0FBd0IsRUFBRSxFQUFFLENBQ3ZDLElBQUksY0FBYyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ3JFLEVBQUU7b0JBQ0QsT0FBTyxFQUFFLGlCQUFpQjtvQkFDMUIsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUNmLElBQUksaUJBQWlCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUM1RDthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7OEdBbEJVLGFBQWE7K0dBQWIsYUFBYTsrR0FBYixhQUFhLGFBTmIsQ0FBQztnQkFDVixJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUM7Z0JBQ25CLE9BQU8sRUFBRSxjQUFjO2dCQUN2QixVQUFVLEVBQUUsQ0FBQyxXQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO2FBQzlFLENBQUM7OzJGQUVTLGFBQWE7a0JBUHpCLFFBQVE7bUJBQUM7b0JBQ1IsU0FBUyxFQUFFLENBQUM7NEJBQ1YsSUFBSSxFQUFFLENBQUMsV0FBVyxDQUFDOzRCQUNuQixPQUFPLEVBQUUsY0FBYzs0QkFDdkIsVUFBVSxFQUFFLENBQUMsV0FBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxjQUFjLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQzt5QkFDOUUsQ0FBQztpQkFDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ1F1YmVlU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvbmctcXViZWUuc2VydmljZSc7XG5pbXBvcnQgeyBJQ29uZmlnIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2NvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUGFnaW5hdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3BhZ2luYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBOZXN0U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvbmVzdC5zZXJ2aWNlJztcblxuLy8gQGR5bmFtaWNcbkBOZ01vZHVsZSh7XG4gIHByb3ZpZGVyczogW3tcbiAgICBkZXBzOiBbTmVzdFNlcnZpY2VdLFxuICAgIHByb3ZpZGU6IE5nUXViZWVTZXJ2aWNlLFxuICAgIHVzZUZhY3Rvcnk6IChuZXN0U2VydmljZTogTmVzdFNlcnZpY2UpID0+IG5ldyBOZ1F1YmVlU2VydmljZShuZXN0U2VydmljZSwge30pXG4gIH1dXG59KVxuZXhwb3J0IGNsYXNzIE5nUXViZWVNb2R1bGUge1xuICBwdWJsaWMgc3RhdGljIGZvclJvb3QoY29uZmlnOiBJQ29uZmlnID0ge30pOiBNb2R1bGVXaXRoUHJvdmlkZXJzPE5nUXViZWVNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IE5nUXViZWVNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgTmVzdFNlcnZpY2UsXG4gICAgICAgIHtcbiAgICAgICAgICBkZXBzOiBbTmVzdFNlcnZpY2VdLFxuICAgICAgICAgIHByb3ZpZGU6IE5nUXViZWVTZXJ2aWNlLFxuICAgICAgICAgIHVzZUZhY3Rvcnk6IChuZXN0U2VydmljZTogTmVzdFNlcnZpY2UpID0+XG4gICAgICAgICAgICBuZXcgTmdRdWJlZVNlcnZpY2UobmVzdFNlcnZpY2UsIE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZy5yZXF1ZXN0KSlcbiAgICAgICAgfSwge1xuICAgICAgICAgIHByb3ZpZGU6IFBhZ2luYXRpb25TZXJ2aWNlLFxuICAgICAgICAgIHVzZUZhY3Rvcnk6ICgpID0+XG4gICAgICAgICAgICBuZXcgUGFnaW5hdGlvblNlcnZpY2UoT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnLnJlc3BvbnNlKSlcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { makeEnvironmentProviders } from "@angular/core";
|
|
2
|
+
import { NgQubeeService } from "./services/ng-qubee.service";
|
|
3
|
+
import { PaginationService } from "./services/pagination.service";
|
|
4
|
+
import { NestService } from "./services/nest.service";
|
|
5
|
+
/**
|
|
6
|
+
* Sets up providers necessary to enable `NgQubee` functionality for the application.
|
|
7
|
+
*
|
|
8
|
+
* @usageNotes
|
|
9
|
+
*
|
|
10
|
+
* Basic example of how you can add NgQubee to your application:
|
|
11
|
+
* ```
|
|
12
|
+
* const config = {};
|
|
13
|
+
*
|
|
14
|
+
* bootstrapApplication(AppComponent, {
|
|
15
|
+
* providers: [provideNgQubee(config)]
|
|
16
|
+
* });
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* @publicApi
|
|
20
|
+
* @param config Configuration object compliant to the IConfig interface
|
|
21
|
+
* @returns A set of providers to setup NgQubee
|
|
22
|
+
*/
|
|
23
|
+
export function provideNgQubee(config = {}) {
|
|
24
|
+
return makeEnvironmentProviders([
|
|
25
|
+
{
|
|
26
|
+
provide: NestService,
|
|
27
|
+
useClass: NestService
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
deps: [NestService],
|
|
31
|
+
provide: NgQubeeService,
|
|
32
|
+
useFactory: (nestService) => new NgQubeeService(nestService, Object.assign({}, config.request))
|
|
33
|
+
}, {
|
|
34
|
+
provide: PaginationService,
|
|
35
|
+
useFactory: () => new PaginationService(Object.assign({}, config.response))
|
|
36
|
+
}
|
|
37
|
+
]);
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1uZ3F1YmVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcXViZWUvc3JjL2xpYi9wcm92aWRlLW5ncXViZWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF3Qix3QkFBd0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXREOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsU0FBa0IsRUFBRTtJQUNqRCxPQUFPLHdCQUF3QixDQUFDO1FBQzlCO1lBQ0UsT0FBTyxFQUFFLFdBQVc7WUFDcEIsUUFBUSxFQUFFLFdBQVc7U0FDdEI7UUFDRDtZQUNFLElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQztZQUNuQixPQUFPLEVBQUUsY0FBYztZQUN2QixVQUFVLEVBQUUsQ0FBQyxXQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzdHLEVBQUU7WUFDRCxPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUM1RTtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnZpcm9ubWVudFByb3ZpZGVycywgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IElDb25maWcgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL2NvbmZpZy5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IE5nUXViZWVTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZXMvbmctcXViZWUuc2VydmljZVwiO1xuaW1wb3J0IHsgUGFnaW5hdGlvblNlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlcy9wYWdpbmF0aW9uLnNlcnZpY2VcIjtcbmltcG9ydCB7IE5lc3RTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZXMvbmVzdC5zZXJ2aWNlXCI7XG5cbi8qKlxuICogU2V0cyB1cCBwcm92aWRlcnMgbmVjZXNzYXJ5IHRvIGVuYWJsZSBgTmdRdWJlZWAgZnVuY3Rpb25hbGl0eSBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuICpcbiAqIEB1c2FnZU5vdGVzXG4gKlxuICogQmFzaWMgZXhhbXBsZSBvZiBob3cgeW91IGNhbiBhZGQgTmdRdWJlZSB0byB5b3VyIGFwcGxpY2F0aW9uOlxuICogYGBgXG4gKiBjb25zdCBjb25maWcgPSB7fTtcbiAqIFxuICogYm9vdHN0cmFwQXBwbGljYXRpb24oQXBwQ29tcG9uZW50LCB7XG4gKiAgIHByb3ZpZGVyczogW3Byb3ZpZGVOZ1F1YmVlKGNvbmZpZyldXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBwdWJsaWNBcGlcbiAqIEBwYXJhbSBjb25maWcgQ29uZmlndXJhdGlvbiBvYmplY3QgY29tcGxpYW50IHRvIHRoZSBJQ29uZmlnIGludGVyZmFjZVxuICogQHJldHVybnMgQSBzZXQgb2YgcHJvdmlkZXJzIHRvIHNldHVwIE5nUXViZWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVOZ1F1YmVlKGNvbmZpZzogSUNvbmZpZyA9IHt9KTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xuICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOZXN0U2VydmljZSxcbiAgICAgIHVzZUNsYXNzOiBOZXN0U2VydmljZVxuICAgIH0sXG4gICAge1xuICAgICAgZGVwczogW05lc3RTZXJ2aWNlXSxcbiAgICAgIHByb3ZpZGU6IE5nUXViZWVTZXJ2aWNlLFxuICAgICAgdXNlRmFjdG9yeTogKG5lc3RTZXJ2aWNlOiBOZXN0U2VydmljZSkgPT4gbmV3IE5nUXViZWVTZXJ2aWNlKG5lc3RTZXJ2aWNlLCBPYmplY3QuYXNzaWduKHt9LCBjb25maWcucmVxdWVzdCkpXG4gICAgfSwge1xuICAgICAgcHJvdmlkZTogUGFnaW5hdGlvblNlcnZpY2UsXG4gICAgICB1c2VGYWN0b3J5OiAoKSA9PiBuZXcgUGFnaW5hdGlvblNlcnZpY2UoT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnLnJlc3BvbnNlKSlcbiAgICB9XG4gIF0pO1xufSJdfQ==
|