@goatlab/fluent-formio 0.6.2 → 0.6.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/FormioConnector.d.ts +37 -0
  2. package/dist/FormioConnector.js +344 -0
  3. package/dist/index.d.ts +2 -0
  4. package/dist/index.js +0 -0
  5. package/dist/test/advanced/advancedTestSuite.d.ts +1 -0
  6. package/dist/test/advanced/advancedTestSuite.js +114 -0
  7. package/dist/test/advanced/typeOrm.entity.d.ts +16 -0
  8. package/dist/test/advanced/typeOrm.entity.js +57 -0
  9. package/dist/test/advanced/typeOrm.repository.d.ts +5 -0
  10. package/dist/test/advanced/typeOrm.repository.js +11 -0
  11. package/dist/test/basic/basicTestSuite.d.ts +1 -0
  12. package/dist/test/basic/basicTestSuite.js +45 -0
  13. package/dist/test/basic/goat.dto.d.ts +8 -0
  14. package/dist/test/basic/goat.dto.js +18 -0
  15. package/dist/test/basic/goat.entity.d.ts +10 -0
  16. package/dist/test/basic/goat.entity.js +41 -0
  17. package/dist/test/basic/goat.repository.d.ts +6 -0
  18. package/dist/test/basic/goat.repository.js +11 -0
  19. package/dist/test/flock.d.ts +4 -0
  20. package/dist/test/flock.js +25 -0
  21. package/dist/test/relations/car/car.dto.d.ts +5 -0
  22. package/dist/test/relations/car/car.dto.js +12 -0
  23. package/dist/test/relations/car/car.entity.d.ts +7 -0
  24. package/dist/test/relations/car/car.entity.js +32 -0
  25. package/dist/test/relations/car/car.repositoryTypeOrm.d.ts +8 -0
  26. package/dist/test/relations/car/car.repositoryTypeOrm.js +13 -0
  27. package/dist/test/relations/relationsTestsSuite.d.ts +1 -0
  28. package/dist/test/relations/relationsTestsSuite.js +93 -0
  29. package/dist/test/relations/roles/role.dto.d.ts +5 -0
  30. package/dist/test/relations/roles/role.dto.js +12 -0
  31. package/dist/test/relations/roles/roles.entity.d.ts +6 -0
  32. package/dist/test/relations/roles/roles.entity.js +29 -0
  33. package/dist/test/relations/roles/roles.repositoryTypeOrm.d.ts +8 -0
  34. package/dist/test/relations/roles/roles.repositoryTypeOrm.js +14 -0
  35. package/dist/test/relations/roles/roles_user.dto.d.ts +5 -0
  36. package/dist/test/relations/roles/roles_user.dto.js +12 -0
  37. package/dist/test/relations/roles/roles_user.entity.d.ts +5 -0
  38. package/dist/test/relations/roles/roles_user.entity.js +23 -0
  39. package/dist/test/relations/roles/roles_users.repositoryTypeOrm.d.ts +6 -0
  40. package/dist/test/relations/roles/roles_users.repositoryTypeOrm.js +11 -0
  41. package/dist/test/relations/user/user.dto.d.ts +5 -0
  42. package/dist/test/relations/user/user.dto.js +12 -0
  43. package/dist/test/relations/user/user.entity.d.ts +14 -0
  44. package/dist/test/relations/user/user.entity.js +56 -0
  45. package/dist/test/relations/user/user.repositoryTypeOrm.d.ts +10 -0
  46. package/dist/test/relations/user/user.repositoryTypeOrm.js +16 -0
  47. package/dist/tsconfig.tsbuildinfo +1 -0
  48. package/package.json +3 -2
@@ -0,0 +1,37 @@
1
+ import type { Filter, BaseDataElement, PaginatedData, Paginator, Sure } from '@goatlab/fluent';
2
+ import { BaseConnector, FluentConnectorInterface } from '@goatlab/fluent';
3
+ interface IFormioConnector {
4
+ baseEndPoint: string;
5
+ token?: string;
6
+ }
7
+ export declare class Formioconnector<ModelDTO = BaseDataElement, InputDTO = ModelDTO, OutputDTO = ModelDTO> extends BaseConnector<ModelDTO, InputDTO, OutputDTO> implements FluentConnectorInterface<InputDTO, OutputDTO> {
8
+ private baseEndPoint;
9
+ private authToken;
10
+ constructor({ baseEndPoint, token }: IFormioConnector);
11
+ get(): Promise<OutputDTO[]>;
12
+ all(): Promise<OutputDTO[]>;
13
+ find(filter: Filter): Promise<OutputDTO[]>;
14
+ paginate(paginator: Paginator): Promise<PaginatedData<OutputDTO>>;
15
+ insert(data: InputDTO): Promise<OutputDTO>;
16
+ insertMany(data: InputDTO[]): Promise<OutputDTO[]>;
17
+ updateById(id: string, data: InputDTO): Promise<OutputDTO>;
18
+ truncate({ sure }: Sure): Promise<void>;
19
+ deleteById(id: string): Promise<string>;
20
+ findById(id: string): Promise<OutputDTO>;
21
+ private numberOfRows;
22
+ private getToken;
23
+ private getUrl;
24
+ private getHeaders;
25
+ private getSpacer;
26
+ private httpGET;
27
+ private httpPOST;
28
+ private httpPUT;
29
+ private httpDelete;
30
+ private getTokenType;
31
+ private getFilters;
32
+ private getLimit;
33
+ private getSkip;
34
+ private getOrder;
35
+ private getSelect;
36
+ }
37
+ export {};
@@ -0,0 +1,344 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Formioconnector = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const axios_1 = tslib_1.__importDefault(require("axios"));
6
+ const dayjs_1 = tslib_1.__importDefault(require("dayjs"));
7
+ const isSameOrAfter_1 = tslib_1.__importDefault(require("dayjs/plugin/isSameOrAfter"));
8
+ const jwt_decode_1 = tslib_1.__importDefault(require("jwt-decode"));
9
+ const await_to_js_1 = tslib_1.__importDefault(require("await-to-js"));
10
+ const js_utils_1 = require("@goatlab/js-utils");
11
+ const fluent_1 = require("@goatlab/fluent");
12
+ dayjs_1.default.extend(isSameOrAfter_1.default);
13
+ const GoatExtenderAttributes = [
14
+ 'id',
15
+ 'owner',
16
+ 'roles',
17
+ 'created',
18
+ 'modified',
19
+ '_ngram'
20
+ ];
21
+ class Formioconnector extends fluent_1.BaseConnector {
22
+ constructor({ baseEndPoint, token }) {
23
+ super();
24
+ this.baseEndPoint = '';
25
+ this.authToken = '';
26
+ this.baseEndPoint = baseEndPoint;
27
+ this.authToken = token;
28
+ }
29
+ async get() {
30
+ const [error, result] = await (0, await_to_js_1.default)(this.httpGET());
31
+ if (error) {
32
+ console.log(error);
33
+ throw new Error('Error while getting submissions');
34
+ }
35
+ const data = result.data.map(r => {
36
+ const response = {
37
+ ...{
38
+ id: r.id,
39
+ owner: r.owner,
40
+ roles: r.roles,
41
+ created: r.created,
42
+ modified: r.modified
43
+ },
44
+ ...r.data
45
+ };
46
+ return response;
47
+ });
48
+ let orderedResults = this.jsApplySelect(data);
49
+ orderedResults = this.jsApplyOrderBy(orderedResults);
50
+ this.reset();
51
+ return orderedResults;
52
+ }
53
+ async all() {
54
+ return this.get();
55
+ }
56
+ async find(filter) {
57
+ return this.get();
58
+ }
59
+ async paginate(paginator) {
60
+ const numberOfRows = await this.numberOfRows();
61
+ this.offset((paginator.page - 1) * paginator.perPage).take(paginator.perPage);
62
+ const results = {
63
+ data: await this.get(),
64
+ current_page: paginator.page,
65
+ first_page_url: '',
66
+ prev_page_url: '',
67
+ next_page_url: '',
68
+ per_page: paginator.perPage,
69
+ path: '',
70
+ total: Number(numberOfRows)
71
+ };
72
+ this.reset();
73
+ return results;
74
+ }
75
+ async insert(data) {
76
+ const [error, result] = await (0, await_to_js_1.default)(this.httpPOST(data));
77
+ if (error) {
78
+ console.log(error);
79
+ throw new Error('Cannot insert data');
80
+ }
81
+ const response = {
82
+ ...{
83
+ id: result.data.id,
84
+ owner: result.data.owner,
85
+ roles: result.data.roles,
86
+ created: result.data.created,
87
+ modified: result.data.modified
88
+ },
89
+ ...result.data.data
90
+ };
91
+ this.reset();
92
+ return response;
93
+ }
94
+ async insertMany(data) {
95
+ const insertedElements = [];
96
+ for (const element of data) {
97
+ const inserted = await this.insert({
98
+ ...element
99
+ });
100
+ insertedElements.push(inserted);
101
+ }
102
+ this.reset();
103
+ return insertedElements;
104
+ }
105
+ async updateById(id, data) {
106
+ if (!id) {
107
+ throw new Error('Formio connector error. Cannot update a Model without id key');
108
+ }
109
+ if (id.includes('_local')) {
110
+ throw new Error('Formio connector error. Cannot update a local document');
111
+ }
112
+ const [error, result] = await (0, await_to_js_1.default)(this.httpPUT(id, data));
113
+ if (error) {
114
+ console.log(error);
115
+ throw new Error('Cannot insert data');
116
+ }
117
+ const response = result.data;
118
+ this.reset();
119
+ return response;
120
+ }
121
+ async truncate({ sure }) {
122
+ }
123
+ async deleteById(id) {
124
+ const [error, removed] = await (0, await_to_js_1.default)(this.httpDelete(id));
125
+ if (error) {
126
+ console.log(error);
127
+ throw new Error(`FormioConnector: Could not delete ${id}`);
128
+ }
129
+ this.reset();
130
+ return removed.data;
131
+ }
132
+ async findById(id) {
133
+ const [error, data] = await (0, await_to_js_1.default)(this.first());
134
+ if (error) {
135
+ console.log(error);
136
+ throw new Error('Find() could not get remote data');
137
+ }
138
+ this.reset();
139
+ return data;
140
+ }
141
+ async numberOfRows() {
142
+ let url = this.getUrl();
143
+ const headers = this.getHeaders();
144
+ const filters = this.getFilters();
145
+ const limit = '?limit=1';
146
+ const skip = this.getSkip();
147
+ const order = this.getOrder();
148
+ const select = this.getSelect();
149
+ const spacer = '';
150
+ url = url + spacer + limit;
151
+ url = filters ? url + this.getSpacer(url) + filters : url;
152
+ url = skip ? url + this.getSpacer(url) + skip : url;
153
+ url = order ? url + this.getSpacer(url) + order : url;
154
+ url = select ? url + this.getSpacer(url) + select : url;
155
+ const isOnline = true;
156
+ if (!isOnline) {
157
+ throw new Error(`Cannot make get request to ${url}.You are not online`);
158
+ }
159
+ const response = await axios_1.default.get(url, { headers });
160
+ return response.headers['content-range'].split('/')[1];
161
+ }
162
+ getToken() {
163
+ if (typeof localStorage === 'undefined') {
164
+ return;
165
+ }
166
+ const token = localStorage.getItem('formioToken');
167
+ if (!token || this.getTokenType(token) === 'x-jwt-token') {
168
+ return token;
169
+ }
170
+ const decodedToken = (0, jwt_decode_1.default)(token);
171
+ const expDate = dayjs_1.default.unix(decodedToken.exp);
172
+ if ((0, dayjs_1.default)().isSameOrAfter(expDate)) {
173
+ js_utils_1.Events.emit('GOAT:SESSION:EXPIRED', {
174
+ data: expDate,
175
+ text: 'Session expired'
176
+ });
177
+ throw new Error('Token has expired.');
178
+ }
179
+ return token;
180
+ }
181
+ getUrl() {
182
+ const baseUrl = `${this.baseEndPoint}/submission`;
183
+ return baseUrl;
184
+ }
185
+ getHeaders() {
186
+ const headers = {};
187
+ let token = {};
188
+ if (typeof localStorage !== 'undefined') {
189
+ token = this.getToken();
190
+ }
191
+ if (this.authToken || this.authToken === '') {
192
+ token = this.authToken;
193
+ }
194
+ if (!token) {
195
+ return headers;
196
+ }
197
+ const type = this.getTokenType(token);
198
+ headers[type] = token;
199
+ return headers;
200
+ }
201
+ getSpacer(url) {
202
+ return url.substr(url.length - 1) === '&' ? '' : '&';
203
+ }
204
+ async httpGET() {
205
+ let url = this.getUrl();
206
+ const headers = this.getHeaders();
207
+ const filters = this.getFilters();
208
+ const limit = this.getLimit();
209
+ const skip = this.getSkip();
210
+ const order = this.getOrder();
211
+ const select = this.getSelect();
212
+ const spacer = '';
213
+ url = url + spacer + limit;
214
+ url = filters ? url + this.getSpacer(url) + filters : url;
215
+ url = skip ? url + this.getSpacer(url) + skip : url;
216
+ url = order ? url + this.getSpacer(url) + order : url;
217
+ url = select ? url + this.getSpacer(url) + select : url;
218
+ const isOnline = true;
219
+ if (!isOnline) {
220
+ throw new Error(`Cannot make get request to ${url}.You are not online`);
221
+ }
222
+ return axios_1.default.get(url, { headers });
223
+ }
224
+ async httpPOST(data) {
225
+ const url = this.getUrl();
226
+ const headers = this.getHeaders();
227
+ const isOnline = true;
228
+ if (!isOnline) {
229
+ throw new Error(`Cannot make request post to ${url}.You are not online`);
230
+ }
231
+ return axios_1.default.post(url, { data }, { headers });
232
+ }
233
+ async httpPUT(id, data) {
234
+ const isOnline = true;
235
+ const url = `${this.getUrl()}/${id}`;
236
+ const headers = this.getHeaders();
237
+ if (!isOnline) {
238
+ throw new Error(`Cannot make request post to ${url}.You are not online`);
239
+ }
240
+ return axios_1.default.put(url, { data }, { headers });
241
+ }
242
+ httpDelete(id) {
243
+ const headers = this.getHeaders();
244
+ const url = `${this.getUrl()}/${id}`;
245
+ return axios_1.default.delete(url, { headers });
246
+ }
247
+ getTokenType(token) {
248
+ return token.length > 32 ? 'x-jwt-token' : 'x-token';
249
+ }
250
+ getFilters() {
251
+ const filter = this.whereArray;
252
+ if (!filter || filter.length === 0) {
253
+ return undefined;
254
+ }
255
+ let filterQuery = '';
256
+ filter.forEach(condition => {
257
+ let valueString = '';
258
+ const element = GoatExtenderAttributes.includes(condition[0])
259
+ ? condition[0]
260
+ : `data.${condition[0]}`;
261
+ const operator = condition[1];
262
+ const value = condition[2];
263
+ switch (operator) {
264
+ case '=':
265
+ filterQuery = `${filterQuery + element}=${value}&`;
266
+ break;
267
+ case '!=':
268
+ filterQuery = `${filterQuery + element}__ne=${value}&`;
269
+ break;
270
+ case '>':
271
+ filterQuery = `${filterQuery + element}__gt=${value}&`;
272
+ break;
273
+ case '>=':
274
+ filterQuery = `${filterQuery + element}__gte=${value}&`;
275
+ break;
276
+ case '<':
277
+ filterQuery = `${filterQuery + element}__lt=${value}&`;
278
+ break;
279
+ case '<=':
280
+ filterQuery = `${filterQuery + element}__lte=${value}&`;
281
+ break;
282
+ case 'in':
283
+ valueString = '';
284
+ value.forEach((val, index, array) => {
285
+ valueString =
286
+ index === array.length - 1
287
+ ? valueString + val
288
+ : `${valueString + val},`;
289
+ });
290
+ filterQuery = `${filterQuery + element}__in=${valueString}&`;
291
+ break;
292
+ case 'nin':
293
+ valueString = '';
294
+ value.forEach((val, index, array) => {
295
+ valueString =
296
+ index === array.length - 1
297
+ ? valueString + val
298
+ : `${valueString + val},`;
299
+ });
300
+ filterQuery = `${filterQuery + element}__nin=${valueString}&`;
301
+ break;
302
+ case 'exists':
303
+ filterQuery = `${filterQuery + element}__exists=${true}&`;
304
+ break;
305
+ case '!exists':
306
+ filterQuery = `${filterQuery + element}__exists=${false}&`;
307
+ break;
308
+ case 'regex':
309
+ filterQuery = `${filterQuery + element}__regex=${value}&`;
310
+ break;
311
+ }
312
+ });
313
+ return filterQuery.substring(0, filterQuery.length - 1);
314
+ }
315
+ getLimit() {
316
+ const limit = '?limit=';
317
+ if (!this.limitNumber || this.limitNumber === 0) {
318
+ this.limitNumber = 50;
319
+ }
320
+ return `${limit}${this.limitNumber}`;
321
+ }
322
+ getSkip() {
323
+ const skip = 'skip=';
324
+ if (!this.offsetNumber) {
325
+ this.offsetNumber = 0;
326
+ }
327
+ return skip + this.offsetNumber;
328
+ }
329
+ getOrder() {
330
+ const order = 'sort=';
331
+ const or = this.orderByArray[1] === 'DESC' ? '-' : '';
332
+ return order + or + this.orderByArray[0];
333
+ }
334
+ getSelect() {
335
+ let select = this.selectArray;
336
+ select = select.map(e => e.split(' as ')[0]);
337
+ if (!select) {
338
+ return;
339
+ }
340
+ select = select.map(e => GoatExtenderAttributes.includes(e) ? e : `data.${e}`);
341
+ return `select=${select.join(',')}`;
342
+ }
343
+ }
344
+ exports.Formioconnector = Formioconnector;
@@ -0,0 +1,2 @@
1
+ import { Formioconnector } from './FormioConnector';
2
+ export { Formioconnector };
package/dist/index.js CHANGED
File without changes
@@ -0,0 +1 @@
1
+ export declare const advancedTestSuite: (Model: any) => void;
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.advancedTestSuite = void 0;
4
+ const advancedTestSuite = Model => {
5
+ beforeAll(() => {
6
+ try {
7
+ Model = new Model();
8
+ }
9
+ catch (error) { }
10
+ });
11
+ const insertTestData = async (Repository) => {
12
+ await Repository.insert({
13
+ created: '2018-12-03',
14
+ nestedTest: {
15
+ a: [6, 5, 4],
16
+ b: { c: true, d: [2, 1, 0] },
17
+ c: 4
18
+ },
19
+ order: 1,
20
+ test: true
21
+ });
22
+ await Repository.insert({
23
+ created: '2017-12-03',
24
+ nestedTest: {
25
+ a: [3, 2, 1],
26
+ b: { c: true, d: [1, 1, 0] },
27
+ c: 3
28
+ },
29
+ order: 2,
30
+ test: false
31
+ });
32
+ await Repository.insert({
33
+ created: '2016-12-03',
34
+ nestedTest: {
35
+ a: [0, -1, -2],
36
+ b: { c: true, d: [0, 1, 0] },
37
+ c: 2
38
+ },
39
+ order: 3,
40
+ test: false
41
+ });
42
+ };
43
+ it('Should get local data', async () => {
44
+ await insertTestData(Model);
45
+ const data = await Model.all();
46
+ expect(Array.isArray(data)).toBe(true);
47
+ expect(typeof data[0].nestedTest.b.c).toBe('boolean');
48
+ });
49
+ it('pluck() should return a single array', async () => {
50
+ await insertTestData(Model);
51
+ const data = await Model.pluck(Model._keys.test);
52
+ expect(typeof data[0]).toBe('boolean');
53
+ });
54
+ it('orderBy() should order results desc', async () => {
55
+ await insertTestData(Model);
56
+ const forms = await Model.select(Model._keys.test, Model._keys.nestedTest.b.c, Model._keys.order)
57
+ .orderBy(Model._keys.order, 'desc')
58
+ .get();
59
+ expect(forms[0].order).toBe(3);
60
+ expect(forms[0].nestedTest.b.c).toBe(true);
61
+ });
62
+ it('orderBy() should order results asc', async () => {
63
+ await insertTestData(Model);
64
+ const forms = await Model.select(Model._keys.test, Model._keys.nestedTest.b.c, Model._keys.order)
65
+ .orderBy(Model._keys.order, 'asc')
66
+ .get();
67
+ expect(forms[0].order).toBe(1);
68
+ });
69
+ it('orderBy() should order by Dates with Select()', async () => {
70
+ await insertTestData(Model);
71
+ const forms = await Model.select(Model._keys.created, Model._keys.order)
72
+ .orderBy(Model._keys.created, 'asc', 'date')
73
+ .get();
74
+ expect(forms[0].order).toBe(3);
75
+ });
76
+ it('orderBy() should order by Dates without Select()', async () => {
77
+ await insertTestData(Model);
78
+ const forms = await Model.orderBy(Model._keys.created, 'asc', 'date').get();
79
+ expect(forms[0].order).toBe(3);
80
+ });
81
+ it('limit() should limit the amount of results', async () => {
82
+ await insertTestData(Model);
83
+ const forms = await Model.select(Model._keys.created, Model._keys.order)
84
+ .orderBy(Model._keys.created, 'asc', 'date')
85
+ .limit(2)
86
+ .get();
87
+ expect(forms.length > 0).toBe(true);
88
+ expect(forms.length <= 2).toBe(true);
89
+ });
90
+ it('offset() should start at the given position', async () => {
91
+ await insertTestData(Model);
92
+ const forms = await Model.select(Model._keys.created, Model._keys.order)
93
+ .offset(1)
94
+ .limit(1)
95
+ .get();
96
+ expect(forms.length).toBe(1);
97
+ });
98
+ it('where() should filter the data', async () => {
99
+ await insertTestData(Model);
100
+ const forms = await Model.where(Model._keys.nestedTest.c, '>=', 3).get();
101
+ expect(forms.length > 0).toBe(true);
102
+ forms.forEach(form => {
103
+ expect(form.nestedTest.c >= 3).toBe(true);
104
+ });
105
+ });
106
+ it('first() should take the first result from data', async () => {
107
+ await insertTestData(Model);
108
+ const form = await Model.select(Model._keys.nestedTest.c, Model._keys.id)
109
+ .where(Model._keys.nestedTest.c, '>=', 3)
110
+ .first();
111
+ expect(typeof form.nestedTest.c).toBe('number');
112
+ });
113
+ };
114
+ exports.advancedTestSuite = advancedTestSuite;
@@ -0,0 +1,16 @@
1
+ export declare class FurtherNested {
2
+ c: boolean;
3
+ d: number[];
4
+ }
5
+ export declare class Nested {
6
+ a: number[];
7
+ c: number;
8
+ b?: FurtherNested;
9
+ }
10
+ export declare class TypeORMDataModel {
11
+ id: string;
12
+ created?: string;
13
+ nestedTest?: Nested;
14
+ order?: number;
15
+ test: boolean;
16
+ }
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TypeORMDataModel = exports.Nested = exports.FurtherNested = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const fluent_1 = require("@goatlab/fluent");
6
+ class FurtherNested {
7
+ }
8
+ tslib_1.__decorate([
9
+ fluent_1.Decorators.property({ required: true }),
10
+ tslib_1.__metadata("design:type", Boolean)
11
+ ], FurtherNested.prototype, "c", void 0);
12
+ tslib_1.__decorate([
13
+ fluent_1.Decorators.array({ required: true }),
14
+ tslib_1.__metadata("design:type", Array)
15
+ ], FurtherNested.prototype, "d", void 0);
16
+ exports.FurtherNested = FurtherNested;
17
+ class Nested {
18
+ }
19
+ tslib_1.__decorate([
20
+ fluent_1.Decorators.array({ required: true }),
21
+ tslib_1.__metadata("design:type", Array)
22
+ ], Nested.prototype, "a", void 0);
23
+ tslib_1.__decorate([
24
+ fluent_1.Decorators.property({ required: true }),
25
+ tslib_1.__metadata("design:type", Number)
26
+ ], Nested.prototype, "c", void 0);
27
+ tslib_1.__decorate([
28
+ fluent_1.Decorators.embed(FurtherNested),
29
+ tslib_1.__metadata("design:type", FurtherNested)
30
+ ], Nested.prototype, "b", void 0);
31
+ exports.Nested = Nested;
32
+ let TypeORMDataModel = class TypeORMDataModel {
33
+ };
34
+ tslib_1.__decorate([
35
+ fluent_1.Decorators.id(),
36
+ tslib_1.__metadata("design:type", String)
37
+ ], TypeORMDataModel.prototype, "id", void 0);
38
+ tslib_1.__decorate([
39
+ fluent_1.Decorators.property({ required: false }),
40
+ tslib_1.__metadata("design:type", String)
41
+ ], TypeORMDataModel.prototype, "created", void 0);
42
+ tslib_1.__decorate([
43
+ fluent_1.Decorators.embed(Nested),
44
+ tslib_1.__metadata("design:type", Nested)
45
+ ], TypeORMDataModel.prototype, "nestedTest", void 0);
46
+ tslib_1.__decorate([
47
+ fluent_1.Decorators.property({ required: false }),
48
+ tslib_1.__metadata("design:type", Number)
49
+ ], TypeORMDataModel.prototype, "order", void 0);
50
+ tslib_1.__decorate([
51
+ fluent_1.Decorators.property({ required: true }),
52
+ tslib_1.__metadata("design:type", Boolean)
53
+ ], TypeORMDataModel.prototype, "test", void 0);
54
+ TypeORMDataModel = tslib_1.__decorate([
55
+ fluent_1.Decorators.entity('numbers')
56
+ ], TypeORMDataModel);
57
+ exports.TypeORMDataModel = TypeORMDataModel;
@@ -0,0 +1,5 @@
1
+ import { TypeORMDataModel } from './typeOrm.entity';
2
+ import { TypeOrmConnector } from '@goatlab/fluent';
3
+ export declare class TypeOrmRepository extends TypeOrmConnector<TypeORMDataModel> {
4
+ constructor(relations?: any);
5
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TypeOrmRepository = void 0;
4
+ const typeOrm_entity_1 = require("./typeOrm.entity");
5
+ const fluent_1 = require("@goatlab/fluent");
6
+ class TypeOrmRepository extends fluent_1.TypeOrmConnector {
7
+ constructor(relations) {
8
+ super(typeOrm_entity_1.TypeORMDataModel, relations, 'runningTest');
9
+ }
10
+ }
11
+ exports.TypeOrmRepository = TypeOrmRepository;
@@ -0,0 +1 @@
1
+ export declare const basicTestSuite: (Model: any) => void;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.basicTestSuite = void 0;
4
+ const flock_1 = require("../flock");
5
+ const basicTestSuite = Model => {
6
+ let storedId;
7
+ beforeAll(() => {
8
+ Model = new Model();
9
+ });
10
+ test('Get - Should GET data', async () => {
11
+ const storedGoats = await Model.get();
12
+ expect(Array.isArray(storedGoats)).toBe(true);
13
+ });
14
+ test('Insert - Should insert data', async () => {
15
+ const a = await Model.insert({ name: 'myGoat', age: 13 });
16
+ expect(typeof a.id).toBe('string');
17
+ expect(a.name).toBe('myGoat');
18
+ expect(0).toBe(0);
19
+ });
20
+ it('Create Multiple - Should insert Multiple elements', async () => {
21
+ const insertedFlock = await Model.insertMany(flock_1.flock);
22
+ expect(insertedFlock[0].name).toBe('Goatee');
23
+ storedId = insertedFlock[0].id;
24
+ });
25
+ it('UpdateById - Should Update a single element', async () => {
26
+ await Model.insertMany(flock_1.flock);
27
+ const goats = await Model.get();
28
+ const data = await Model.updateById(goats[0].id, {
29
+ age: 99,
30
+ name: 'MyUpdatedGoat'
31
+ });
32
+ expect(data.name).toBe('MyUpdatedGoat');
33
+ expect(data.id).toBe(goats[0].id);
34
+ });
35
+ it('ReplaceById - Should Update a single element', async () => {
36
+ await Model.insertMany(flock_1.flock);
37
+ const goats = await Model.get();
38
+ const data = await Model.updateById(goats[0].id, {
39
+ name: 'MyUpdatedGoat'
40
+ });
41
+ expect(data.name).toBe('MyUpdatedGoat');
42
+ expect(data.id).toBe(goats[0].id);
43
+ });
44
+ };
45
+ exports.basicTestSuite = basicTestSuite;
@@ -0,0 +1,8 @@
1
+ import { GoatEntity } from './goat.entity';
2
+ declare const GoatEntityOut_base: import("@goatlab/fluent/dist/core/Nestjs/types/common").Type<Omit<GoatEntity, never>>;
3
+ export declare class GoatEntityOut extends GoatEntityOut_base {
4
+ }
5
+ declare const GoatEntityIn_base: import("@goatlab/fluent/dist/core/Nestjs/types/common").Type<Omit<GoatEntity, "id">>;
6
+ export declare class GoatEntityIn extends GoatEntityIn_base {
7
+ }
8
+ export {};
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GoatEntityIn = exports.GoatEntityOut = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const goat_entity_1 = require("./goat.entity");
6
+ const fluent_1 = require("@goatlab/fluent");
7
+ let GoatEntityOut = class GoatEntityOut extends (0, fluent_1.OmitType)(goat_entity_1.GoatEntity, []) {
8
+ };
9
+ GoatEntityOut = tslib_1.__decorate([
10
+ (0, fluent_1.InputType)()
11
+ ], GoatEntityOut);
12
+ exports.GoatEntityOut = GoatEntityOut;
13
+ let GoatEntityIn = class GoatEntityIn extends (0, fluent_1.OmitType)(goat_entity_1.GoatEntity, ['id']) {
14
+ };
15
+ GoatEntityIn = tslib_1.__decorate([
16
+ (0, fluent_1.InputType)()
17
+ ], GoatEntityIn);
18
+ exports.GoatEntityIn = GoatEntityIn;
@@ -0,0 +1,10 @@
1
+ export declare class Breed {
2
+ family?: string;
3
+ members?: number;
4
+ }
5
+ export declare class GoatEntity {
6
+ id: string;
7
+ name: string;
8
+ age?: number;
9
+ breed?: Breed;
10
+ }