@e22m4u/js-repository 0.2.7 → 0.3.1

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 (35) hide show
  1. package/README.md +80 -80
  2. package/dist/cjs/index.cjs +2472 -2472
  3. package/eslint.config.js +1 -1
  4. package/package.json +14 -14
  5. package/src/adapter/adapter-registry.spec.js +7 -7
  6. package/src/adapter/adapter.spec.js +11 -11
  7. package/src/adapter/builtin/memory-adapter.spec.js +537 -537
  8. package/src/adapter/decorator/data-sanitizing-decorator.spec.js +5 -5
  9. package/src/adapter/decorator/data-transformation-decorator.spec.js +5 -5
  10. package/src/adapter/decorator/data-validation-decorator.spec.js +5 -5
  11. package/src/adapter/decorator/default-values-decorator.spec.js +5 -5
  12. package/src/adapter/decorator/fields-filtering-decorator.spec.js +5 -5
  13. package/src/adapter/decorator/inclusion-decorator.spec.js +5 -5
  14. package/src/adapter/decorator/property-uniqueness-decorator.spec.js +5 -5
  15. package/src/{schema.d.ts → database-schema.d.ts} +2 -2
  16. package/src/{schema.js → database-schema.js} +2 -2
  17. package/src/database-schema.spec.ts +86 -0
  18. package/src/definition/model/model-data-transformer.spec.js +93 -93
  19. package/src/definition/model/model-data-validator.spec.js +514 -528
  20. package/src/definition/model/model-definition-utils.spec.js +343 -341
  21. package/src/definition/model/properties/property-transformer/property-transformer-registry.spec.js +36 -36
  22. package/src/definition/model/properties/property-uniqueness-validator.spec.js +410 -377
  23. package/src/definition/model/properties/property-validator/property-validator-registry.spec.js +36 -36
  24. package/src/filter/fields-clause-tool.spec.js +4 -4
  25. package/src/index.d.ts +1 -1
  26. package/src/index.js +1 -1
  27. package/src/relations/belongs-to-resolver.spec.js +166 -166
  28. package/src/relations/has-many-resolver.spec.js +281 -281
  29. package/src/relations/has-one-resolver.spec.js +281 -281
  30. package/src/relations/references-many-resolver.spec.js +92 -92
  31. package/src/repository/repository-registry.spec.js +10 -10
  32. package/src/repository/repository.spec.js +73 -73
  33. package/src/utils/is-promise.spec.js +1 -2
  34. package/src/utils/transform-promise.spec.js +0 -1
  35. package/src/schema.spec.ts +0 -86
@@ -1,15 +1,15 @@
1
1
  import {expect} from 'chai';
2
- import {Schema} from '../schema.js';
2
+ import {DatabaseSchema} from '../database-schema.js';
3
3
  import {DEFAULT_PRIMARY_KEY_PROPERTY_NAME as DEF_PK} from '../definition/index.js';
4
4
 
5
5
  describe('Repository', function () {
6
6
  describe('create', function () {
7
7
  it('creates a new item from the given data', async function () {
8
- const schema = new Schema();
9
- schema.defineDatasource({name: 'datasource', adapter: 'memory'});
10
- schema.defineModel({name: 'model', datasource: 'datasource'});
8
+ const dbs = new DatabaseSchema();
9
+ dbs.defineDatasource({name: 'datasource', adapter: 'memory'});
10
+ dbs.defineModel({name: 'model', datasource: 'datasource'});
11
11
  const data = {foo: 'bar'};
12
- const rep = schema.getRepository('model');
12
+ const rep = dbs.getRepository('model');
13
13
  const result = await rep.create(data);
14
14
  expect(result).to.be.eql({[DEF_PK]: result[DEF_PK], ...data});
15
15
  });
@@ -17,10 +17,10 @@ describe('Repository', function () {
17
17
 
18
18
  describe('replaceById', function () {
19
19
  it('replaces an item by the given id', async function () {
20
- const schema = new Schema();
21
- schema.defineDatasource({name: 'datasource', adapter: 'memory'});
22
- schema.defineModel({name: 'model', datasource: 'datasource'});
23
- const rep = schema.getRepository('model');
20
+ const dbs = new DatabaseSchema();
21
+ dbs.defineDatasource({name: 'datasource', adapter: 'memory'});
22
+ dbs.defineModel({name: 'model', datasource: 'datasource'});
23
+ const rep = dbs.getRepository('model');
24
24
  const created = await rep.create({foo: 'bar'});
25
25
  const result = await rep.replaceById(created[DEF_PK], {baz: 'qux'});
26
26
  expect(result).to.be.eql({[DEF_PK]: created[DEF_PK], baz: 'qux'});
@@ -29,20 +29,20 @@ describe('Repository', function () {
29
29
 
30
30
  describe('replaceOrCreate', function () {
31
31
  it('creates a new item from the given data', async function () {
32
- const schema = new Schema();
33
- schema.defineDatasource({name: 'datasource', adapter: 'memory'});
34
- schema.defineModel({name: 'model', datasource: 'datasource'});
32
+ const dbs = new DatabaseSchema();
33
+ dbs.defineDatasource({name: 'datasource', adapter: 'memory'});
34
+ dbs.defineModel({name: 'model', datasource: 'datasource'});
35
35
  const data = {foo: 'bar'};
36
- const rep = schema.getRepository('model');
36
+ const rep = dbs.getRepository('model');
37
37
  const result = await rep.replaceOrCreate(data);
38
38
  expect(result).to.be.eql({[DEF_PK]: result[DEF_PK], ...data});
39
39
  });
40
40
 
41
41
  it('replaces an existing item', async function () {
42
- const schema = new Schema();
43
- schema.defineDatasource({name: 'datasource', adapter: 'memory'});
44
- schema.defineModel({name: 'model', datasource: 'datasource'});
45
- const rep = schema.getRepository('model');
42
+ const dbs = new DatabaseSchema();
43
+ dbs.defineDatasource({name: 'datasource', adapter: 'memory'});
44
+ dbs.defineModel({name: 'model', datasource: 'datasource'});
45
+ const rep = dbs.getRepository('model');
46
46
  const created = await rep.create({foo: 'bar'});
47
47
  const replacer = {[DEF_PK]: created[DEF_PK], bar: 'qux'};
48
48
  const result = await rep.replaceOrCreate(replacer);
@@ -52,10 +52,10 @@ describe('Repository', function () {
52
52
 
53
53
  describe('patch', function () {
54
54
  it('patches all items', async function () {
55
- const schema = new Schema();
56
- schema.defineDatasource({name: 'datasource', adapter: 'memory'});
57
- schema.defineModel({name: 'model', datasource: 'datasource'});
58
- const rep = schema.getRepository('model');
55
+ const dbs = new DatabaseSchema();
56
+ dbs.defineDatasource({name: 'datasource', adapter: 'memory'});
57
+ dbs.defineModel({name: 'model', datasource: 'datasource'});
58
+ const rep = dbs.getRepository('model');
59
59
  await rep.create({foo: 'a1', bar: 'b1'});
60
60
  await rep.create({foo: 'a2', bar: 'b2'});
61
61
  await rep.create({foo: 'a3', bar: 'b3'});
@@ -64,10 +64,10 @@ describe('Repository', function () {
64
64
  });
65
65
 
66
66
  it('patches found items by the "where" clause', async function () {
67
- const schema = new Schema();
68
- schema.defineDatasource({name: 'datasource', adapter: 'memory'});
69
- schema.defineModel({name: 'model', datasource: 'datasource'});
70
- const rep = schema.getRepository('model');
67
+ const dbs = new DatabaseSchema();
68
+ dbs.defineDatasource({name: 'datasource', adapter: 'memory'});
69
+ dbs.defineModel({name: 'model', datasource: 'datasource'});
70
+ const rep = dbs.getRepository('model');
71
71
  await rep.create({foo: 'a', bar: '1'});
72
72
  await rep.create({foo: 'b', bar: '2'});
73
73
  await rep.create({foo: 'c', bar: '2'});
@@ -78,10 +78,10 @@ describe('Repository', function () {
78
78
 
79
79
  describe('patchById', function () {
80
80
  it('patches an item by the given id', async function () {
81
- const schema = new Schema();
82
- schema.defineDatasource({name: 'datasource', adapter: 'memory'});
83
- schema.defineModel({name: 'model', datasource: 'datasource'});
84
- const rep = schema.getRepository('model');
81
+ const dbs = new DatabaseSchema();
82
+ dbs.defineDatasource({name: 'datasource', adapter: 'memory'});
83
+ dbs.defineModel({name: 'model', datasource: 'datasource'});
84
+ const rep = dbs.getRepository('model');
85
85
  const created = await rep.create({foo: 'bar'});
86
86
  const result = await rep.patchById(created[DEF_PK], {baz: 'qux'});
87
87
  expect(result).to.be.eql({
@@ -94,10 +94,10 @@ describe('Repository', function () {
94
94
 
95
95
  describe('find', function () {
96
96
  it('returns all items', async function () {
97
- const schema = new Schema();
98
- schema.defineDatasource({name: 'datasource', adapter: 'memory'});
99
- schema.defineModel({name: 'model', datasource: 'datasource'});
100
- const rep = schema.getRepository('model');
97
+ const dbs = new DatabaseSchema();
98
+ dbs.defineDatasource({name: 'datasource', adapter: 'memory'});
99
+ dbs.defineModel({name: 'model', datasource: 'datasource'});
100
+ const rep = dbs.getRepository('model');
101
101
  const created1 = await rep.create({foo: 'bar'});
102
102
  const created2 = await rep.create({baz: 'qux'});
103
103
  const result = await rep.find();
@@ -105,10 +105,10 @@ describe('Repository', function () {
105
105
  });
106
106
 
107
107
  it('returns found items by the "where" clause', async function () {
108
- const schema = new Schema();
109
- schema.defineDatasource({name: 'datasource', adapter: 'memory'});
110
- schema.defineModel({name: 'model', datasource: 'datasource'});
111
- const rep = schema.getRepository('model');
108
+ const dbs = new DatabaseSchema();
109
+ dbs.defineDatasource({name: 'datasource', adapter: 'memory'});
110
+ dbs.defineModel({name: 'model', datasource: 'datasource'});
111
+ const rep = dbs.getRepository('model');
112
112
  await rep.create({foo: 'bar'});
113
113
  const created = await rep.create({baz: 'qux'});
114
114
  const result = await rep.find({where: {baz: 'qux'}});
@@ -118,10 +118,10 @@ describe('Repository', function () {
118
118
 
119
119
  describe('findOne', function () {
120
120
  it('returns a first item', async function () {
121
- const schema = new Schema();
122
- schema.defineDatasource({name: 'datasource', adapter: 'memory'});
123
- schema.defineModel({name: 'model', datasource: 'datasource'});
124
- const rep = schema.getRepository('model');
121
+ const dbs = new DatabaseSchema();
122
+ dbs.defineDatasource({name: 'datasource', adapter: 'memory'});
123
+ dbs.defineModel({name: 'model', datasource: 'datasource'});
124
+ const rep = dbs.getRepository('model');
125
125
  const created = await rep.create({foo: 'bar'});
126
126
  await rep.create({baz: 'qux'});
127
127
  const result = await rep.findOne();
@@ -129,10 +129,10 @@ describe('Repository', function () {
129
129
  });
130
130
 
131
131
  it('returns a found item by the "where" clause', async function () {
132
- const schema = new Schema();
133
- schema.defineDatasource({name: 'datasource', adapter: 'memory'});
134
- schema.defineModel({name: 'model', datasource: 'datasource'});
135
- const rep = schema.getRepository('model');
132
+ const dbs = new DatabaseSchema();
133
+ dbs.defineDatasource({name: 'datasource', adapter: 'memory'});
134
+ dbs.defineModel({name: 'model', datasource: 'datasource'});
135
+ const rep = dbs.getRepository('model');
136
136
  await rep.create({foo: 'bar'});
137
137
  const created = await rep.create({baz: 'qux'});
138
138
  const result = await rep.findOne({where: {baz: 'qux'}});
@@ -142,10 +142,10 @@ describe('Repository', function () {
142
142
 
143
143
  describe('findById', function () {
144
144
  it('returns an item by the given id', async function () {
145
- const schema = new Schema();
146
- schema.defineDatasource({name: 'datasource', adapter: 'memory'});
147
- schema.defineModel({name: 'model', datasource: 'datasource'});
148
- const rep = schema.getRepository('model');
145
+ const dbs = new DatabaseSchema();
146
+ dbs.defineDatasource({name: 'datasource', adapter: 'memory'});
147
+ dbs.defineModel({name: 'model', datasource: 'datasource'});
148
+ const rep = dbs.getRepository('model');
149
149
  const created = await rep.create({foo: 'bar'});
150
150
  const result = await rep.findById(created[DEF_PK]);
151
151
  expect(result).to.be.eql(created);
@@ -154,10 +154,10 @@ describe('Repository', function () {
154
154
 
155
155
  describe('delete', function () {
156
156
  it('removes all items', async function () {
157
- const schema = new Schema();
158
- schema.defineDatasource({name: 'datasource', adapter: 'memory'});
159
- schema.defineModel({name: 'model', datasource: 'datasource'});
160
- const rep = schema.getRepository('model');
157
+ const dbs = new DatabaseSchema();
158
+ dbs.defineDatasource({name: 'datasource', adapter: 'memory'});
159
+ dbs.defineModel({name: 'model', datasource: 'datasource'});
160
+ const rep = dbs.getRepository('model');
161
161
  await rep.create({foo: 'bar'});
162
162
  await rep.create({baz: 'qux'});
163
163
  const result = await rep.delete();
@@ -165,10 +165,10 @@ describe('Repository', function () {
165
165
  });
166
166
 
167
167
  it('removes found items by the "where" clause', async function () {
168
- const schema = new Schema();
169
- schema.defineDatasource({name: 'datasource', adapter: 'memory'});
170
- schema.defineModel({name: 'model', datasource: 'datasource'});
171
- const rep = schema.getRepository('model');
168
+ const dbs = new DatabaseSchema();
169
+ dbs.defineDatasource({name: 'datasource', adapter: 'memory'});
170
+ dbs.defineModel({name: 'model', datasource: 'datasource'});
171
+ const rep = dbs.getRepository('model');
172
172
  await rep.create({foo: 'bar'});
173
173
  await rep.create({foo: 'bar'});
174
174
  await rep.create({baz: 'qux'});
@@ -179,10 +179,10 @@ describe('Repository', function () {
179
179
 
180
180
  describe('deleteById', function () {
181
181
  it('removes an item by the given id', async function () {
182
- const schema = new Schema();
183
- schema.defineDatasource({name: 'datasource', adapter: 'memory'});
184
- schema.defineModel({name: 'model', datasource: 'datasource'});
185
- const rep = schema.getRepository('model');
182
+ const dbs = new DatabaseSchema();
183
+ dbs.defineDatasource({name: 'datasource', adapter: 'memory'});
184
+ dbs.defineModel({name: 'model', datasource: 'datasource'});
185
+ const rep = dbs.getRepository('model');
186
186
  const created = await rep.create({foo: 'bar'});
187
187
  const result = await rep.deleteById(created[DEF_PK]);
188
188
  expect(result).to.be.true;
@@ -191,10 +191,10 @@ describe('Repository', function () {
191
191
 
192
192
  describe('exists', function () {
193
193
  it('returns true if the given id exists', async function () {
194
- const schema = new Schema();
195
- schema.defineDatasource({name: 'datasource', adapter: 'memory'});
196
- schema.defineModel({name: 'model', datasource: 'datasource'});
197
- const rep = schema.getRepository('model');
194
+ const dbs = new DatabaseSchema();
195
+ dbs.defineDatasource({name: 'datasource', adapter: 'memory'});
196
+ dbs.defineModel({name: 'model', datasource: 'datasource'});
197
+ const rep = dbs.getRepository('model');
198
198
  const created = await rep.create({foo: 'bar'});
199
199
  const result = await rep.exists(created[DEF_PK]);
200
200
  expect(result).to.be.true;
@@ -203,10 +203,10 @@ describe('Repository', function () {
203
203
 
204
204
  describe('count', function () {
205
205
  it('counts all items', async function () {
206
- const schema = new Schema();
207
- schema.defineDatasource({name: 'datasource', adapter: 'memory'});
208
- schema.defineModel({name: 'model', datasource: 'datasource'});
209
- const rep = schema.getRepository('model');
206
+ const dbs = new DatabaseSchema();
207
+ dbs.defineDatasource({name: 'datasource', adapter: 'memory'});
208
+ dbs.defineModel({name: 'model', datasource: 'datasource'});
209
+ const rep = dbs.getRepository('model');
210
210
  await rep.create({foo: 'bar'});
211
211
  await rep.create({baz: 'qux'});
212
212
  const result = await rep.count();
@@ -214,10 +214,10 @@ describe('Repository', function () {
214
214
  });
215
215
 
216
216
  it('counts found items by the "where" clause', async function () {
217
- const schema = new Schema();
218
- schema.defineDatasource({name: 'datasource', adapter: 'memory'});
219
- schema.defineModel({name: 'model', datasource: 'datasource'});
220
- const rep = schema.getRepository('model');
217
+ const dbs = new DatabaseSchema();
218
+ dbs.defineDatasource({name: 'datasource', adapter: 'memory'});
219
+ dbs.defineModel({name: 'model', datasource: 'datasource'});
220
+ const rep = dbs.getRepository('model');
221
221
  await rep.create({foo: 'bar'});
222
222
  await rep.create({foo: 'bar'});
223
223
  await rep.create({baz: 'qux'});
@@ -1,8 +1,7 @@
1
1
  import {expect} from 'chai';
2
- import {describe} from 'mocha';
3
2
  import {isPromise} from './is-promise.js';
4
3
 
5
- describe('isPromise', () => {
4
+ describe('isPromise', function () {
6
5
  it('returns true if the given value has type of PromiseLike', function () {
7
6
  expect(isPromise(Promise.resolve())).to.be.true;
8
7
  expect(isPromise('string')).to.be.false;
@@ -1,5 +1,4 @@
1
1
  import {expect} from 'chai';
2
- import {describe} from 'mocha';
3
2
  import {transformPromise} from './transform-promise.js';
4
3
 
5
4
  describe('transformPromise', function () {
@@ -1,86 +0,0 @@
1
- import {expect} from 'chai';
2
- import {Schema} from './schema.js';
3
- import {Repository} from './repository/index.js';
4
- import {DefinitionRegistry} from './definition/index.js';
5
-
6
- describe('Schema', function () {
7
- describe('defineDatasource', function () {
8
- it('returns this', function () {
9
- const schema = new Schema();
10
- const res = schema.defineDatasource({
11
- name: 'datasource',
12
- adapter: 'memory',
13
- });
14
- expect(res).to.be.eq(schema);
15
- });
16
-
17
- it('sets the datasource definition', function () {
18
- const schema = new Schema();
19
- schema.defineDatasource({name: 'datasource', adapter: 'memory'});
20
- const res =
21
- schema.getService(DefinitionRegistry).getDatasource('datasource');
22
- expect(res).to.be.eql({name: 'datasource', adapter: 'memory'});
23
- });
24
-
25
- it('throws an error if the datasource name already defined', function () {
26
- const schema = new Schema();
27
- schema.defineDatasource({name: 'datasource', adapter: 'memory'});
28
- const throwable =
29
- () => schema.defineDatasource({name: 'datasource', adapter: 'memory'});
30
- expect(throwable).to.throw(
31
- 'The datasource "datasource" is already defined.',
32
- );
33
- });
34
- });
35
-
36
- describe('defineModel', function () {
37
- it('returns this', function () {
38
- const schema = new Schema();
39
- const res = schema.defineModel({name: 'model'});
40
- expect(res).to.be.eq(schema);
41
- });
42
-
43
- it('sets the model definition', function () {
44
- const schema = new Schema();
45
- schema.defineModel({name: 'model'});
46
- const res = schema.getService(DefinitionRegistry).getModel('model');
47
- expect(res).to.be.eql({name: 'model'});
48
- });
49
-
50
- it('throws an error if the model name already defined', function () {
51
- const schema = new Schema();
52
- schema.defineModel({name: 'model'});
53
- const throwable = () => schema.defineModel({name: 'model'});
54
- expect(throwable).to.throw('The model "model" is already defined.');
55
- });
56
- });
57
-
58
- describe('getRepository', function () {
59
- it('returns a repository by the model name', function () {
60
- const schema = new Schema();
61
- schema.defineDatasource({name: 'datasource', adapter: 'memory'});
62
- schema.defineModel({name: 'model', datasource: 'datasource'});
63
- const res = schema.getRepository('model');
64
- expect(res).to.be.instanceof(Repository);
65
- });
66
-
67
- it('throws an error if the model is not defined', function () {
68
- const schema = new Schema();
69
- const throwable = () => schema.getRepository('model');
70
- expect(throwable).to.throw('The model "model" is not defined.');
71
- });
72
-
73
- it('uses generic types to define the repository type', function () {
74
- const schema = new Schema();
75
- schema.defineDatasource({name: 'datasource', adapter: 'memory'});
76
- schema.defineModel({name: 'model', datasource: 'datasource'});
77
- interface MyModel {
78
- myId: number;
79
- }
80
- const res1: Repository = schema.getRepository('model');
81
- const res2: Repository<MyModel, number, 'myId'> =
82
- schema.getRepository<MyModel, number, 'myId'>('model');
83
- expect(res1).to.be.eq(res2);
84
- });
85
- });
86
- });