@goatlab/fluent-loki 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 (54) hide show
  1. package/dist/Database.d.ts +19 -0
  2. package/dist/Database.js +84 -0
  3. package/dist/Database.spec.d.ts +1 -0
  4. package/dist/Database.spec.js +30 -0
  5. package/dist/LokiConnector.d.ts +18 -0
  6. package/dist/LokiConnector.js +174 -0
  7. package/dist/LokiConnector.spec.d.ts +1 -0
  8. package/dist/LokiConnector.spec.js +21 -0
  9. package/dist/index.d.ts +2 -0
  10. package/dist/index.js +0 -0
  11. package/dist/test/advanced/advancedTestSuite.d.ts +1 -0
  12. package/dist/test/advanced/advancedTestSuite.js +114 -0
  13. package/dist/test/advanced/typeOrm.entity.d.ts +16 -0
  14. package/dist/test/advanced/typeOrm.entity.js +57 -0
  15. package/dist/test/advanced/typeOrm.repository.d.ts +5 -0
  16. package/dist/test/advanced/typeOrm.repository.js +11 -0
  17. package/dist/test/basic/basicTestSuite.d.ts +1 -0
  18. package/dist/test/basic/basicTestSuite.js +45 -0
  19. package/dist/test/basic/goat.dto.d.ts +8 -0
  20. package/dist/test/basic/goat.dto.js +18 -0
  21. package/dist/test/basic/goat.entity.d.ts +10 -0
  22. package/dist/test/basic/goat.entity.js +41 -0
  23. package/dist/test/basic/goat.repository.d.ts +6 -0
  24. package/dist/test/basic/goat.repository.js +11 -0
  25. package/dist/test/flock.d.ts +4 -0
  26. package/dist/test/flock.js +25 -0
  27. package/dist/test/relations/car/car.dto.d.ts +5 -0
  28. package/dist/test/relations/car/car.dto.js +12 -0
  29. package/dist/test/relations/car/car.entity.d.ts +7 -0
  30. package/dist/test/relations/car/car.entity.js +32 -0
  31. package/dist/test/relations/car/car.repositoryTypeOrm.d.ts +8 -0
  32. package/dist/test/relations/car/car.repositoryTypeOrm.js +13 -0
  33. package/dist/test/relations/relationsTestsSuite.d.ts +1 -0
  34. package/dist/test/relations/relationsTestsSuite.js +93 -0
  35. package/dist/test/relations/roles/role.dto.d.ts +5 -0
  36. package/dist/test/relations/roles/role.dto.js +12 -0
  37. package/dist/test/relations/roles/roles.entity.d.ts +6 -0
  38. package/dist/test/relations/roles/roles.entity.js +29 -0
  39. package/dist/test/relations/roles/roles.repositoryTypeOrm.d.ts +8 -0
  40. package/dist/test/relations/roles/roles.repositoryTypeOrm.js +14 -0
  41. package/dist/test/relations/roles/roles_user.dto.d.ts +5 -0
  42. package/dist/test/relations/roles/roles_user.dto.js +12 -0
  43. package/dist/test/relations/roles/roles_user.entity.d.ts +5 -0
  44. package/dist/test/relations/roles/roles_user.entity.js +23 -0
  45. package/dist/test/relations/roles/roles_users.repositoryTypeOrm.d.ts +6 -0
  46. package/dist/test/relations/roles/roles_users.repositoryTypeOrm.js +11 -0
  47. package/dist/test/relations/user/user.dto.d.ts +5 -0
  48. package/dist/test/relations/user/user.dto.js +12 -0
  49. package/dist/test/relations/user/user.entity.d.ts +14 -0
  50. package/dist/test/relations/user/user.entity.js +56 -0
  51. package/dist/test/relations/user/user.repositoryTypeOrm.d.ts +10 -0
  52. package/dist/test/relations/user/user.repositoryTypeOrm.js +16 -0
  53. package/dist/tsconfig.tsbuildinfo +1 -0
  54. package/package.json +3 -2
@@ -0,0 +1,19 @@
1
+ interface _FLUENT_ {
2
+ models?: {
3
+ [key: string]: boolean;
4
+ };
5
+ }
6
+ declare global {
7
+ interface Window {
8
+ _FLUENT_: _FLUENT_;
9
+ }
10
+ namespace NodeJS {
11
+ interface Global {
12
+ _FLUENT_: _FLUENT_;
13
+ }
14
+ }
15
+ }
16
+ export declare const Database: Readonly<{
17
+ get: () => Promise<any>;
18
+ }>;
19
+ export {};
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Database = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const lokijs_1 = tslib_1.__importDefault(require("lokijs"));
6
+ const loki_indexed_adapter_1 = tslib_1.__importDefault(require("lokijs/src/loki-indexed-adapter"));
7
+ let DB = null;
8
+ exports.Database = (() => {
9
+ const getModels = () => {
10
+ const models = typeof window !== 'undefined' &&
11
+ window &&
12
+ window._FLUENT_ &&
13
+ window._FLUENT_.models
14
+ ? window._FLUENT_.models
15
+ : global && global._FLUENT_ && global._FLUENT_.models
16
+ ? global._FLUENT_.models
17
+ : {};
18
+ return models;
19
+ };
20
+ const _create = () => new Promise(resolve => {
21
+ let idbAdapter;
22
+ let pa;
23
+ let db;
24
+ const dbConfig = {
25
+ autoload: true,
26
+ autoloadCallback: databaseInitialize,
27
+ autosave: true,
28
+ autosaveInterval: 1000,
29
+ throttledSaves: false
30
+ };
31
+ try {
32
+ idbAdapter = new loki_indexed_adapter_1.default('GOAT');
33
+ pa = new lokijs_1.default.LokiPartitioningAdapter(idbAdapter, {
34
+ paging: true
35
+ });
36
+ db = new lokijs_1.default('GOAT', { ...dbConfig, adapter: pa });
37
+ }
38
+ catch (error) {
39
+ db = new lokijs_1.default('GOAT', dbConfig);
40
+ }
41
+ function databaseInitialize() {
42
+ const baseModels = getModels();
43
+ if (!baseModels) {
44
+ throw new Error('Cannot Start FLUENT, no models registered or you don`t have access to the "window" or "global" variable');
45
+ }
46
+ Object.keys(baseModels).forEach(model => {
47
+ const dbModel = db.getCollection(model);
48
+ if (!dbModel) {
49
+ db.addCollection(model);
50
+ }
51
+ });
52
+ resolve(db);
53
+ }
54
+ });
55
+ const shouldCreate = () => {
56
+ const windowModels = getModels();
57
+ const dbModels = DB.collections.reduce((acc, collection) => {
58
+ acc.push(collection.name);
59
+ return acc;
60
+ }, []);
61
+ const models = [];
62
+ Object.keys(windowModels).forEach(m => {
63
+ if (!dbModels.includes(m)) {
64
+ models.push(m);
65
+ }
66
+ });
67
+ return models;
68
+ };
69
+ const get = async () => {
70
+ if (!DB) {
71
+ DB = await _create();
72
+ }
73
+ const recreateModels = shouldCreate();
74
+ if (recreateModels.length > 0) {
75
+ recreateModels.forEach(model => {
76
+ DB.addCollection(model);
77
+ });
78
+ }
79
+ return DB;
80
+ };
81
+ return Object.freeze({
82
+ get
83
+ });
84
+ })();
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const lokijs_1 = tslib_1.__importDefault(require("lokijs"));
5
+ const Database_1 = require("./Database");
6
+ let db;
7
+ beforeAll(async () => {
8
+ db = await Database_1.Database.get();
9
+ });
10
+ it('Should return and instance of LockiJS DB', () => {
11
+ const isLoki = db instanceof lokijs_1.default;
12
+ expect(isLoki).toBe(true);
13
+ });
14
+ it('Should be named GOAT', () => {
15
+ expect(db.filename).toBe('GOAT');
16
+ });
17
+ it('Should start with no collections', () => {
18
+ const expectedCollections = [];
19
+ const dbCollections = db.collections.reduce((dbColArray, dbCol) => {
20
+ dbColArray.push(dbCol.name);
21
+ return dbColArray;
22
+ }, []);
23
+ const uniqueCollections = {};
24
+ expectedCollections.forEach((collection, index) => {
25
+ uniqueCollections[collection] = true;
26
+ uniqueCollections[dbCollections[index]] = true;
27
+ });
28
+ const areTheSame = Object.keys(uniqueCollections).length === expectedCollections.length;
29
+ expect(areTheSame).toBe(true);
30
+ });
@@ -0,0 +1,18 @@
1
+ import { BaseDataElement, Sure, Filter, PaginatedData, Paginator, BaseConnector, FluentConnectorInterface } from '@goatlab/fluent';
2
+ export declare class LokiConnector<ModelDTO = BaseDataElement, InputDTO = ModelDTO, OutputDTO = ModelDTO> extends BaseConnector<ModelDTO, InputDTO, OutputDTO> implements FluentConnectorInterface<InputDTO, OutputDTO> {
3
+ private name;
4
+ constructor(name: string);
5
+ get(): Promise<OutputDTO[]>;
6
+ all(): Promise<OutputDTO[]>;
7
+ find(filter: Filter): Promise<OutputDTO[]>;
8
+ paginate(paginator: Paginator): Promise<PaginatedData<OutputDTO>>;
9
+ deleteById(id: string): Promise<string>;
10
+ findById(id: string): Promise<OutputDTO>;
11
+ insert(data: InputDTO): Promise<OutputDTO>;
12
+ insertMany(data: InputDTO[]): Promise<OutputDTO[]>;
13
+ updateById(id: string, data: InputDTO): Promise<OutputDTO>;
14
+ clear({ sure }: Sure): Promise<any>;
15
+ private prepareFilter;
16
+ private getLokiOperator;
17
+ private getModel;
18
+ }
@@ -0,0 +1,174 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LokiConnector = void 0;
4
+ const js_utils_1 = require("@goatlab/js-utils");
5
+ const Database_1 = require("./Database");
6
+ const dates_1 = require("@goatlab/dates");
7
+ const fluent_1 = require("@goatlab/fluent");
8
+ class LokiConnector extends fluent_1.BaseConnector {
9
+ constructor(name) {
10
+ super();
11
+ this.name = 'baseModel';
12
+ this.name = name;
13
+ }
14
+ async get() {
15
+ const filterObject = this.prepareFilter();
16
+ let data = await (await this.getModel())
17
+ .chain()
18
+ .find(filterObject)
19
+ .offset(this.offsetNumber)
20
+ .limit(this.limitNumber)
21
+ .data();
22
+ data = this.jsApplyOrderBy(data);
23
+ this.reset();
24
+ return data;
25
+ }
26
+ async all() {
27
+ return this.get();
28
+ }
29
+ async find(filter) {
30
+ return this.get();
31
+ }
32
+ async paginate(paginator) {
33
+ const results = {
34
+ current_page: 1,
35
+ data: [],
36
+ first_page_url: 'response[0].meta.firstPageUrl,',
37
+ next_page_url: 'response[0].meta.nextPageUrl',
38
+ path: 'response[0].meta.path',
39
+ per_page: 1,
40
+ prev_page_url: ' response[0].meta.previousPageUrl',
41
+ total: 10
42
+ };
43
+ return results;
44
+ }
45
+ async deleteById(id) {
46
+ if (!id) {
47
+ throw new Error('No id assign to remove().You must give and id to delete');
48
+ }
49
+ const model = await this.getModel();
50
+ await model.findAndRemove({ id });
51
+ this.reset();
52
+ return id;
53
+ }
54
+ async findById(id) {
55
+ if (!id) {
56
+ throw new Error('No id assign to remove().You must give and id to delete');
57
+ }
58
+ const model = await this.getModel();
59
+ const result = await model.find({
60
+ id
61
+ });
62
+ this.reset();
63
+ return result;
64
+ }
65
+ async insert(data) {
66
+ const _data = js_utils_1.Objects.clone(data);
67
+ const model = await this.getModel();
68
+ const inserted = {
69
+ ..._data
70
+ };
71
+ model.insert(inserted);
72
+ this.reset();
73
+ return inserted;
74
+ }
75
+ async insertMany(data) {
76
+ const insertedElements = [];
77
+ for (const element of data) {
78
+ const inserted = await this.insert({
79
+ ...element
80
+ });
81
+ insertedElements.push(inserted);
82
+ }
83
+ this.reset();
84
+ return insertedElements;
85
+ }
86
+ async updateById(id, data) {
87
+ if (!id) {
88
+ throw new Error('Loki connector error. Cannot update a Model without id key');
89
+ }
90
+ const model = await this.getModel();
91
+ const local = await model.findOne({ id });
92
+ const mod = {
93
+ ...local,
94
+ ...data,
95
+ ...{ modified: dates_1.Dates.currentIsoString() }
96
+ };
97
+ const updated = model.update(mod);
98
+ this.reset();
99
+ return updated;
100
+ }
101
+ async clear({ sure }) {
102
+ const model = await this.getModel();
103
+ return model.clear({ removeIndices: true });
104
+ }
105
+ prepareFilter() {
106
+ const andObject = { $and: [] };
107
+ const orObject = { $or: [] };
108
+ let globalFilter = {};
109
+ if (this.whereArray.length > 0) {
110
+ this.whereArray.forEach(c => {
111
+ const conditionToObject = {};
112
+ if (c[0].includes('[')) {
113
+ throw new Error(`Error in: "${c[0]}" "Where" close does not work with Array elements`);
114
+ }
115
+ conditionToObject[c[0]] = {};
116
+ const lokiOperator = this.getLokiOperator(c[1]);
117
+ conditionToObject[c[0]][lokiOperator] = c[2];
118
+ if (lokiOperator.includes('$regex|')) {
119
+ delete conditionToObject[c[0]][lokiOperator];
120
+ conditionToObject[c[0]].$regex = lokiOperator
121
+ .replace('$regex|', '')
122
+ .replace('{{$var}}', c[2]);
123
+ }
124
+ andObject.$and.push(conditionToObject);
125
+ });
126
+ globalFilter = andObject;
127
+ }
128
+ if (this.orWhereArray.length > 0) {
129
+ this.orWhereArray.forEach(c => {
130
+ const conditionToObject = {};
131
+ conditionToObject[c[0]] = {};
132
+ const lokiOperator = this.getLokiOperator(c[1]);
133
+ conditionToObject[c[0]][lokiOperator] = c[2];
134
+ if (lokiOperator.includes('$regex|')) {
135
+ delete conditionToObject[c[0]][lokiOperator];
136
+ conditionToObject[c[0]].$regex = lokiOperator
137
+ .replace('$regex|', '')
138
+ .replace('{{$var}}', c[2]);
139
+ }
140
+ orObject.$or.push(conditionToObject);
141
+ });
142
+ globalFilter = { $or: [andObject, orObject] };
143
+ }
144
+ return globalFilter;
145
+ }
146
+ getLokiOperator(operator) {
147
+ const lokiOperators = {
148
+ '=': '$eq',
149
+ '<': '$lt',
150
+ '>': '$gt',
151
+ '<=': '$lte',
152
+ '>=': '$gte',
153
+ '<>': '$ne',
154
+ '!=': '$ne',
155
+ in: '$in',
156
+ nin: '$nin',
157
+ like: '$aeq',
158
+ regexp: '$regex',
159
+ startsWith: '$regex|^{{$var}}',
160
+ endsWith: '$regex|{{$var}}$',
161
+ contains: '$regex|{{$var}}'
162
+ };
163
+ const converted = js_utils_1.Objects.get(() => lokiOperators[operator], undefined);
164
+ if (!converted) {
165
+ throw new Error(`The operator "${operator}" is not supported in Loki `);
166
+ }
167
+ return converted;
168
+ }
169
+ async getModel() {
170
+ const DB = await Database_1.Database.get();
171
+ return DB.getCollection(this.name);
172
+ }
173
+ }
174
+ exports.LokiConnector = LokiConnector;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const LokiConnector_1 = require("./LokiConnector");
4
+ const advancedTestSuite_1 = require("./test/advanced/advancedTestSuite");
5
+ const basicTestSuite_1 = require("./test/basic/basicTestSuite");
6
+ class Goat extends LokiConnector_1.LokiConnector {
7
+ constructor() {
8
+ super('myModel');
9
+ }
10
+ }
11
+ class Goat2 extends LokiConnector_1.LokiConnector {
12
+ constructor() {
13
+ super('myModel2');
14
+ }
15
+ }
16
+ describe('Execute all basic test Suite', () => {
17
+ (0, basicTestSuite_1.basicTestSuite)(Goat);
18
+ });
19
+ describe('Execute all advanced test Suite', () => {
20
+ (0, advancedTestSuite_1.advancedTestSuite)(Goat2);
21
+ });
@@ -0,0 +1,2 @@
1
+ import { LokiConnector } from './LokiConnector';
2
+ export { LokiConnector };
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
+ }