@quatrain/core 0.4.3 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/lib/Backend.d.ts +6 -5
  2. package/lib/Backend.js +17 -5
  3. package/lib/Core.d.ts +3 -3
  4. package/lib/backends/AbstractAdapter.d.ts +11 -6
  5. package/lib/backends/AbstractAdapter.js +13 -3
  6. package/lib/backends/Filter.d.ts +2 -2
  7. package/lib/backends/FilterOperators.d.ts +1 -1
  8. package/lib/backends/FilterOperators.js +1 -1
  9. package/lib/backends/MockAdapter.js +13 -5
  10. package/lib/backends/Query.d.ts +9 -3
  11. package/lib/backends/Query.js +26 -6
  12. package/lib/backends/middlewares/InjectMetaMiddleware.d.ts +7 -6
  13. package/lib/backends/middlewares/InjectMetaMiddleware.js +8 -28
  14. package/lib/backends/middlewares/Middleware.d.ts +5 -0
  15. package/lib/common/ResourcesErrors.d.ts +13 -0
  16. package/lib/common/ResourcesErrors.js +25 -0
  17. package/lib/components/AbstractObject.d.ts +1 -3
  18. package/lib/components/AbstractObject.js +2 -6
  19. package/lib/components/BaseObject.d.ts +11 -13
  20. package/lib/components/BaseObject.js +84 -78
  21. package/lib/components/BaseObjectCore.d.ts +60 -0
  22. package/lib/components/BaseObjectCore.js +153 -0
  23. package/lib/components/BaseRepository.d.ts +24 -0
  24. package/lib/components/BaseRepository.js +116 -0
  25. package/lib/components/DataObject.d.ts +21 -6
  26. package/lib/components/DataObject.js +63 -28
  27. package/lib/components/Entity.d.ts +22 -3
  28. package/lib/components/Entity.js +23 -22
  29. package/lib/components/EntityRepository.d.ts +6 -0
  30. package/lib/components/EntityRepository.js +14 -0
  31. package/lib/components/ObjectUri.js +3 -3
  32. package/lib/components/User.d.ts +14 -3
  33. package/lib/components/User.js +10 -8
  34. package/lib/components/UserRepository.d.ts +7 -0
  35. package/lib/components/UserRepository.js +36 -0
  36. package/lib/components/index.d.ts +4 -5
  37. package/lib/components/index.js +6 -9
  38. package/lib/components/types/AbstractObjectClass.d.ts +1 -1
  39. package/lib/components/types/BaseObjectClass.d.ts +3 -2
  40. package/lib/components/types/DataObjectClass.d.ts +4 -1
  41. package/lib/components/types/Payload.d.ts +10 -0
  42. package/lib/components/types/Payload.js +2 -0
  43. package/lib/components/types/Persisted.d.ts +6 -0
  44. package/lib/components/types/Persisted.js +2 -0
  45. package/lib/components/types/Properties.d.ts +3 -0
  46. package/lib/components/types/Properties.js +1 -0
  47. package/lib/components/types/ProxyConstructor.d.ts +10 -0
  48. package/lib/components/types/ProxyConstructor.js +4 -0
  49. package/lib/components/types/RepositoryClass.d.ts +40 -0
  50. package/lib/components/types/RepositoryClass.js +2 -0
  51. package/lib/index.d.ts +11 -3
  52. package/lib/index.js +21 -8
  53. package/lib/properties/BaseProperty.d.ts +2 -1
  54. package/lib/properties/BaseProperty.js +5 -1
  55. package/lib/properties/CollectionProperty.d.ts +4 -3
  56. package/lib/properties/HashProperty.d.ts +1 -1
  57. package/lib/properties/NumberProperty.d.ts +2 -2
  58. package/lib/properties/ObjectProperty.d.ts +5 -3
  59. package/lib/properties/ObjectProperty.js +7 -3
  60. package/lib/properties/Property.js +6 -0
  61. package/lib/properties/index.d.ts +2 -2
  62. package/lib/properties/types/PropertyClassType.d.ts +2 -1
  63. package/lib/properties/types/PropertyHTMLType.d.ts +1 -1
  64. package/lib/properties/types/PropertyTypes.d.ts +2 -2
  65. package/lib/utils/DataGenerator.d.ts +3 -2
  66. package/lib/utils/DataGenerator.js +4 -3
  67. package/package.json +31 -29
  68. package/lib/components/BaseObjectProperties.d.ts +0 -13
  69. package/lib/components/BaseObjectProperties.js +0 -87
  70. package/lib/components/UserProperties.d.ts +0 -1
  71. package/lib/components/UserProperties.js +0 -103
  72. package/lib/components/types/UserClass.d.ts +0 -3
  73. /package/lib/{components/types/UserClass.js → backends/middlewares/Middleware.js} +0 -0
@@ -64,13 +64,45 @@ class DataObject {
64
64
  return __awaiter(this, void 0, void 0, function* () {
65
65
  if (this._populated === false) {
66
66
  if (data) {
67
- for (const key in data) {
68
- if (Reflect.get(this._properties, key)) {
69
- Reflect.get(this._properties, key).set(data[key]);
70
- }
71
- }
67
+ this.populateFromData(data);
72
68
  }
73
69
  else if (this.path !== '/' && this.path !== '') {
70
+ yield this.populateFromBackend();
71
+ }
72
+ this._populated = true;
73
+ if (Reflect.get(this._properties, 'name')) {
74
+ this.uri.label = this.val('name');
75
+ }
76
+ }
77
+ return this;
78
+ });
79
+ }
80
+ /**
81
+ * Populate data object from instant data or backend query
82
+ * @param data
83
+ */
84
+ populateFromData(data) {
85
+ if (this._populated === false) {
86
+ for (const key in data) {
87
+ if (Reflect.get(this._properties, key)) {
88
+ Reflect.get(this._properties, key).set(data[key]);
89
+ }
90
+ }
91
+ this._populated = true;
92
+ if (Reflect.get(this._properties, 'name')) {
93
+ this.uri.label = this.val('name');
94
+ }
95
+ }
96
+ return this;
97
+ }
98
+ /**
99
+ * Populate data object from backend query
100
+ * @param data
101
+ */
102
+ populateFromBackend() {
103
+ return __awaiter(this, void 0, void 0, function* () {
104
+ if (this._populated === false) {
105
+ if (this.path !== '/' && this.path !== '') {
74
106
  yield Core_1.Core.getBackend(this._objectUri.backend).read(this);
75
107
  }
76
108
  this._populated = true;
@@ -159,26 +191,30 @@ class DataObject {
159
191
  throw new Error(`Unknown property '${key}'`);
160
192
  }
161
193
  }
162
- toJSON() {
163
- return Object.assign(Object.assign({}, (this._uid && { uid: this._uid })), this._dataToJSON());
194
+ toJSON(objectsAsReferences = false) {
195
+ return Object.assign(Object.assign({}, (this._uid && { uid: this._uid })), this._dataToJSON(objectsAsReferences));
164
196
  }
165
197
  toReference() {
166
198
  return Object.assign(Object.assign({}, this._objectUri.toReference()), { label: this.val('name') || '' });
167
199
  }
168
- _dataToJSON() {
200
+ _dataToJSON(objectsAsReferences = false) {
169
201
  const data = {};
170
202
  Object.keys(this._properties).forEach((key) => {
171
203
  const prop = Reflect.get(this._properties, key);
172
- const value = prop.val();
173
204
  switch (prop.constructor.name) {
174
205
  case 'CollectionProperty':
175
206
  // ignore
176
207
  break;
177
208
  case 'ObjectProperty':
178
- Reflect.set(data, key, value ? value.toJSON() : null);
209
+ const value = prop.val();
210
+ Reflect.set(data, key, value
211
+ ? objectsAsReferences && !(value instanceof ObjectUri_1.ObjectUri)
212
+ ? value.core.asReference() //toReference()
213
+ : value.toJSON()
214
+ : null);
179
215
  break;
180
216
  default:
181
- Reflect.set(data, key, value || null);
217
+ Reflect.set(data, key, prop.val() || null);
182
218
  }
183
219
  });
184
220
  return data;
@@ -186,7 +222,7 @@ class DataObject {
186
222
  read() {
187
223
  return __awaiter(this, void 0, void 0, function* () {
188
224
  try {
189
- return this.populate(yield Core_1.Core.getBackend().read(this));
225
+ return yield Core_1.Core.getBackend().read(this); //this.populate()
190
226
  }
191
227
  catch (err) {
192
228
  console.log(err.message);
@@ -195,12 +231,10 @@ class DataObject {
195
231
  });
196
232
  }
197
233
  save() {
198
- return __awaiter(this, void 0, void 0, function* () {
199
- const backend = Core_1.Core.getBackend(this.backend || Core_1.Core.defaultBackend);
200
- this._persisted = true;
201
- this._modified = false;
202
- return this.uid ? backend.update(this) : backend.create(this);
203
- });
234
+ const backend = Core_1.Core.getBackend(this.backend || Core_1.Core.defaultBackend);
235
+ this._persisted = true;
236
+ this._modified = false;
237
+ return this.uid ? backend.update(this) : backend.create(this);
204
238
  }
205
239
  delete() {
206
240
  return __awaiter(this, void 0, void 0, function* () {
@@ -217,21 +251,22 @@ class DataObject {
217
251
  * @returns DataObject
218
252
  */
219
253
  static factory(param = undefined) {
220
- return __awaiter(this, void 0, void 0, function* () {
221
- try {
222
- return new this(param);
223
- }
224
- catch (err) {
225
- console.log(err);
226
- throw new Error(`Unable to build data object: ${err.message}`);
227
- }
228
- });
254
+ try {
255
+ return new this(param);
256
+ }
257
+ catch (err) {
258
+ console.log(err);
259
+ throw new Error(`Unable to build data object: ${err.message}`);
260
+ }
229
261
  }
230
262
  clone(data = {}) {
231
263
  return __awaiter(this, void 0, void 0, function* () {
232
264
  const cloned = yield DataObject.factory();
233
265
  cloned.uri.class = this.uri.class;
234
- cloned.setProperties(this._properties);
266
+ cloned._populated = false;
267
+ for (let property of Object.keys(this._properties)) {
268
+ cloned._properties[property] = this._properties[property].clone();
269
+ }
235
270
  if (data) {
236
271
  yield cloned.populate(data);
237
272
  }
@@ -1,7 +1,26 @@
1
+ import { BaseObjectCore } from './BaseObjectCore';
1
2
  import { BaseObject } from './BaseObject';
3
+ import { User, UserCore } from './User';
2
4
  import { EntityClass } from './types/EntityClass';
3
5
  export declare const EntityProperties: any;
4
- export declare class Entity extends BaseObject implements EntityClass {
5
- static PROPS_DEFINITION: any;
6
- static factory(src?: any): Promise<Entity>;
6
+ export interface Entity extends BaseObject {
7
+ users: User;
8
+ }
9
+ export declare class EntityCore extends BaseObjectCore implements EntityClass {
10
+ static COLLECTION: string;
11
+ static PROPS_DEFINITION: ({
12
+ name: string;
13
+ type: string;
14
+ mandatory: boolean;
15
+ minLength: number;
16
+ instanceOf?: undefined;
17
+ parentKey?: undefined;
18
+ } | {
19
+ name: string;
20
+ mandatory: boolean;
21
+ type: string;
22
+ instanceOf: typeof UserCore;
23
+ parentKey: string;
24
+ minLength?: undefined;
25
+ })[];
7
26
  }
@@ -22,18 +22,10 @@ var __importStar = (this && this.__importStar) || function (mod) {
22
22
  __setModuleDefault(result, mod);
23
23
  return result;
24
24
  };
25
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
- return new (P || (P = Promise))(function (resolve, reject) {
28
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
- step((generator = generator.apply(thisArg, _arguments || [])).next());
32
- });
33
- };
34
25
  Object.defineProperty(exports, "__esModule", { value: true });
35
- exports.Entity = exports.EntityProperties = void 0;
36
- const BaseObject_1 = require("./BaseObject");
26
+ exports.EntityCore = exports.EntityProperties = void 0;
27
+ const BaseObjectCore_1 = require("./BaseObjectCore");
28
+ const User_1 = require("./User");
37
29
  const CollectionProperty_1 = require("../properties/CollectionProperty");
38
30
  const StringProperty_1 = require("../properties/StringProperty");
39
31
  const htmlType = __importStar(require("../properties/types/PropertyHTMLType"));
@@ -54,15 +46,24 @@ exports.EntityProperties = [
54
46
  parentKey: 'entity',
55
47
  },
56
48
  ];
57
- class Entity extends BaseObject_1.BaseObject {
58
- static factory(src = undefined) {
59
- const _super = Object.create(null, {
60
- factory: { get: () => super.factory }
61
- });
62
- return __awaiter(this, void 0, void 0, function* () {
63
- return _super.factory.call(this, src, Entity);
64
- });
65
- }
49
+ class EntityCore extends BaseObjectCore_1.BaseObjectCore {
66
50
  }
67
- exports.Entity = Entity;
68
- Entity.PROPS_DEFINITION = exports.EntityProperties;
51
+ exports.EntityCore = EntityCore;
52
+ EntityCore.COLLECTION = 'entity';
53
+ EntityCore.PROPS_DEFINITION = [
54
+ {
55
+ // surcharge property minLength and htmlType
56
+ name: 'name',
57
+ type: StringProperty_1.StringProperty.TYPE,
58
+ mandatory: true,
59
+ minLength: 1,
60
+ //htmlType: htmlType.ORG,
61
+ },
62
+ {
63
+ name: 'users',
64
+ mandatory: true,
65
+ type: CollectionProperty_1.CollectionProperty.TYPE,
66
+ instanceOf: User_1.UserCore,
67
+ parentKey: 'entity',
68
+ },
69
+ ];
@@ -0,0 +1,6 @@
1
+ import { BackendInterface } from '../backends';
2
+ import BaseRepository from './BaseRepository';
3
+ import { Entity } from './Entity';
4
+ export default class EntityRepository extends BaseRepository<Entity> {
5
+ constructor(backendAdapter?: BackendInterface);
6
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const Core_1 = require("../Core");
7
+ const BaseRepository_1 = __importDefault(require("./BaseRepository"));
8
+ const Entity_1 = require("./Entity");
9
+ class EntityRepository extends BaseRepository_1.default {
10
+ constructor(backendAdapter = Core_1.Core.getBackend()) {
11
+ super(Entity_1.EntityCore, backendAdapter);
12
+ }
13
+ }
14
+ exports.default = EntityRepository;
@@ -80,9 +80,9 @@ class ObjectUri {
80
80
  return `${this._backend}:${this._pairs.join(ObjectUri.DEFAULT)}`;
81
81
  }
82
82
  set path(path) {
83
- if (this._path && this._path !== ObjectUri.DEFAULT) {
84
- throw new Error(`Path value already set with '${this._path}'`);
85
- }
83
+ // if (this._path && this._path !== ObjectUri.DEFAULT) {
84
+ // throw new Error(`Path value already set with '${this._path}'`)
85
+ // }
86
86
  this._path = path;
87
87
  // TODO manage paths to subcollection
88
88
  this._collection = path.split('/')[0];
@@ -1,7 +1,18 @@
1
+ import { BaseObjectCore } from './BaseObjectCore';
1
2
  import { BaseObject } from './BaseObject';
2
- import { UserClass } from './types/UserClass';
3
+ import { Persisted } from './types/Persisted';
4
+ import { Proxy } from './types/ProxyConstructor';
5
+ export interface User extends BaseObject {
6
+ firstname: string;
7
+ lastname: string;
8
+ gender?: 'male' | 'female' | 'nonbinary';
9
+ birthday?: Date;
10
+ password: string;
11
+ email: string;
12
+ }
3
13
  export declare const UserProperties: any;
4
- export declare class User extends BaseObject implements UserClass {
14
+ export declare class UserCore extends BaseObjectCore {
5
15
  static PROPS_DEFINITION: any;
6
- static factory(src?: any): Promise<User>;
16
+ static COLLECTION: string;
17
+ static factory(src?: any): Promise<Proxy<User> | Persisted<User>>;
7
18
  }
@@ -32,13 +32,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
32
32
  });
33
33
  };
34
34
  Object.defineProperty(exports, "__esModule", { value: true });
35
- exports.User = exports.UserProperties = void 0;
36
- const BaseObject_1 = require("./BaseObject");
35
+ exports.UserCore = exports.UserProperties = void 0;
36
+ const BaseObjectCore_1 = require("./BaseObjectCore");
37
37
  const properties_1 = require("../properties");
38
38
  const HashProperty_1 = require("../properties/HashProperty");
39
39
  const StringProperty_1 = require("../properties/StringProperty");
40
- const Entity_1 = require("./Entity");
41
40
  const htmlType = __importStar(require("../properties/types/PropertyHTMLType"));
41
+ const BaseObject_1 = require("./BaseObject");
42
42
  /**
43
43
  * Callback function to populate the 'name' property
44
44
  * @param dao DataObject
@@ -46,6 +46,7 @@ const htmlType = __importStar(require("../properties/types/PropertyHTMLType"));
46
46
  */
47
47
  const onChange = (dao) => dao.set('name', `${dao.val('firstname')} ${dao.val('lastname')}`);
48
48
  exports.UserProperties = [
49
+ ...BaseObject_1.BaseObjectProperties,
49
50
  {
50
51
  // change name property minLength
51
52
  name: 'name',
@@ -108,18 +109,19 @@ exports.UserProperties = [
108
109
  name: 'entity',
109
110
  mandatory: false,
110
111
  type: properties_1.ObjectProperty.TYPE,
111
- instanceof: Entity_1.Entity,
112
+ instanceOf: BaseObjectCore_1.BaseObjectCore,
112
113
  },
113
114
  ];
114
- class User extends BaseObject_1.BaseObject {
115
+ class UserCore extends BaseObjectCore_1.BaseObjectCore {
115
116
  static factory(src = undefined) {
116
117
  const _super = Object.create(null, {
117
118
  factory: { get: () => super.factory }
118
119
  });
119
120
  return __awaiter(this, void 0, void 0, function* () {
120
- return _super.factory.call(this, src, User);
121
+ return _super.factory.call(this, src, UserCore);
121
122
  });
122
123
  }
123
124
  }
124
- exports.User = User;
125
- User.PROPS_DEFINITION = exports.UserProperties;
125
+ exports.UserCore = UserCore;
126
+ UserCore.PROPS_DEFINITION = exports.UserProperties;
127
+ UserCore.COLLECTION = 'user';
@@ -0,0 +1,7 @@
1
+ import { BackendInterface } from '../backends';
2
+ import BaseRepository from './BaseRepository';
3
+ import { User } from './User';
4
+ export default class UserRepository extends BaseRepository<User> {
5
+ constructor(backendAdapter?: BackendInterface);
6
+ getFromEmail(email: string): Promise<import("./types/Persisted").Persisted<import("./types/Persisted").Persisted<User>>>;
7
+ }
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const backends_1 = require("../backends");
16
+ const ResourcesErrors_1 = require("../common/ResourcesErrors");
17
+ const BaseRepository_1 = __importDefault(require("./BaseRepository"));
18
+ const User_1 = require("./User");
19
+ const UNAUTHORIZED_ERROR = `Wrong password or email`;
20
+ class UserRepository extends BaseRepository_1.default {
21
+ constructor(backendAdapter) {
22
+ super(User_1.UserCore, backendAdapter);
23
+ }
24
+ getFromEmail(email) {
25
+ return __awaiter(this, void 0, void 0, function* () {
26
+ const query = new backends_1.Query(User_1.UserCore);
27
+ query.where('email', email).batch(1);
28
+ const { items } = yield this.query(query);
29
+ if (items.length == 0) {
30
+ throw new ResourcesErrors_1.NotFoundError(`There is no user with email '${email}'`);
31
+ }
32
+ return items[0];
33
+ });
34
+ }
35
+ }
36
+ exports.default = UserRepository;
@@ -2,9 +2,8 @@ import { DataObject, DataObjectParams } from './DataObject';
2
2
  import { DataObjectClass } from './types/DataObjectClass';
3
3
  import { ObjectUri } from './ObjectUri';
4
4
  import { AbstractObject } from './AbstractObject';
5
- import { BaseObject } from './BaseObject';
6
- import { BaseObjectProperties } from './BaseObjectProperties';
7
- import { UserProperties } from './UserProperties';
8
- import { User } from './User';
5
+ import { BaseObjectCore } from './BaseObjectCore';
6
+ import { BaseObjectProperties } from './BaseObject';
7
+ import { UserCore, UserProperties } from './User';
9
8
  import { Entity } from './Entity';
10
- export { DataObject, DataObjectParams, DataObjectClass, ObjectUri, AbstractObject, BaseObject, User, Entity, BaseObjectProperties, UserProperties, };
9
+ export { DataObject, DataObjectParams, DataObjectClass, ObjectUri, AbstractObject, BaseObjectCore, UserCore, Entity, BaseObjectProperties, UserProperties, };
@@ -1,19 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UserProperties = exports.BaseObjectProperties = exports.Entity = exports.User = exports.BaseObject = exports.AbstractObject = exports.ObjectUri = exports.DataObject = void 0;
3
+ exports.UserProperties = exports.BaseObjectProperties = exports.UserCore = exports.BaseObjectCore = exports.AbstractObject = exports.ObjectUri = exports.DataObject = void 0;
4
4
  const DataObject_1 = require("./DataObject");
5
5
  Object.defineProperty(exports, "DataObject", { enumerable: true, get: function () { return DataObject_1.DataObject; } });
6
6
  const ObjectUri_1 = require("./ObjectUri");
7
7
  Object.defineProperty(exports, "ObjectUri", { enumerable: true, get: function () { return ObjectUri_1.ObjectUri; } });
8
8
  const AbstractObject_1 = require("./AbstractObject");
9
9
  Object.defineProperty(exports, "AbstractObject", { enumerable: true, get: function () { return AbstractObject_1.AbstractObject; } });
10
+ const BaseObjectCore_1 = require("./BaseObjectCore");
11
+ Object.defineProperty(exports, "BaseObjectCore", { enumerable: true, get: function () { return BaseObjectCore_1.BaseObjectCore; } });
10
12
  const BaseObject_1 = require("./BaseObject");
11
- Object.defineProperty(exports, "BaseObject", { enumerable: true, get: function () { return BaseObject_1.BaseObject; } });
12
- const BaseObjectProperties_1 = require("./BaseObjectProperties");
13
- Object.defineProperty(exports, "BaseObjectProperties", { enumerable: true, get: function () { return BaseObjectProperties_1.BaseObjectProperties; } });
14
- const UserProperties_1 = require("./UserProperties");
15
- Object.defineProperty(exports, "UserProperties", { enumerable: true, get: function () { return UserProperties_1.UserProperties; } });
13
+ Object.defineProperty(exports, "BaseObjectProperties", { enumerable: true, get: function () { return BaseObject_1.BaseObjectProperties; } });
16
14
  const User_1 = require("./User");
17
- Object.defineProperty(exports, "User", { enumerable: true, get: function () { return User_1.User; } });
18
- const Entity_1 = require("./Entity");
19
- Object.defineProperty(exports, "Entity", { enumerable: true, get: function () { return Entity_1.Entity; } });
15
+ Object.defineProperty(exports, "UserCore", { enumerable: true, get: function () { return User_1.UserCore; } });
16
+ Object.defineProperty(exports, "UserProperties", { enumerable: true, get: function () { return User_1.UserProperties; } });
@@ -1,6 +1,6 @@
1
1
  import { DataObjectClass } from './DataObjectClass';
2
2
  export interface AbstractObjectClass {
3
- status: string;
4
3
  dataObject: DataObjectClass<any>;
5
4
  asReference(): any;
5
+ val(val: string): any;
6
6
  }
@@ -1,6 +1,7 @@
1
+ import { AbstractObjectClass } from './AbstractObjectClass';
1
2
  import { DataObjectClass } from './DataObjectClass';
2
- export interface BaseObjectClass {
3
- status: string;
3
+ export interface BaseObjectClass extends AbstractObjectClass {
4
4
  dataObject: DataObjectClass<any>;
5
5
  asReference(): any;
6
+ save(): Promise<this>;
6
7
  }
@@ -19,5 +19,8 @@ export interface DataObjectClass<T extends DataObjectClass<any>> {
19
19
  delete(): Promise<T>;
20
20
  clone(data?: any): Promise<T>;
21
21
  toReference(): any;
22
- toJSON(): any;
22
+ toJSON(objectsAsReferences?: boolean): any;
23
+ populateFromData(data: {
24
+ [x: string]: unknown;
25
+ }): this;
23
26
  }
@@ -0,0 +1,10 @@
1
+ import { BaseObject } from '../BaseObject';
2
+ import { Persisted } from './Persisted';
3
+ export default interface Payload<T extends BaseObject> {
4
+ items: Persisted<T>[];
5
+ meta: Meta;
6
+ }
7
+ export interface Meta {
8
+ count: number;
9
+ updatedAt: number;
10
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,6 @@
1
+ import { ObjectUri } from '../ObjectUri';
2
+ import { Proxy } from './ProxyConstructor';
3
+ export type Persisted<T> = {
4
+ uid: string;
5
+ uri: ObjectUri;
6
+ } & Proxy<T>;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,3 @@
1
+ type Properties<T> = {
2
+ name: keyof T;
3
+ }[];
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1,10 @@
1
+ import { BaseObjectClass } from './BaseObjectClass';
2
+ interface ProxyConstructor {
3
+ new <T extends object, H>(target: T, handler: ProxyHandler<T>): Proxy<H>;
4
+ }
5
+ export declare const ProxyConstructor: ProxyConstructor;
6
+ export type Proxy<T> = T & {
7
+ readonly toJSON: () => object;
8
+ readonly core: BaseObjectClass;
9
+ };
10
+ export {};
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProxyConstructor = void 0;
4
+ exports.ProxyConstructor = Proxy;
@@ -0,0 +1,40 @@
1
+ import { BackendInterface } from '../../backends/AbstractAdapter';
2
+ import { Query } from '../../backends/Query';
3
+ import { BaseObjectCore } from '../BaseObjectCore';
4
+ import { BaseObject } from '../BaseObject';
5
+ import { Proxy } from './ProxyConstructor';
6
+ import Payload from './Payload';
7
+ import { Persisted } from './Persisted';
8
+ export default interface RepositoryClass<T extends BaseObject> {
9
+ backendAdapter: BackendInterface;
10
+ /**
11
+ * Creates a given object in the collection and returns it
12
+ * @param obj
13
+ * @returns
14
+ */
15
+ create(obj: Proxy<T>): Promise<Persisted<T>>;
16
+ /**
17
+ * Returns an object of the collection from its uid
18
+ * @param uid
19
+ * @returns
20
+ */
21
+ read(uid: string): Promise<Persisted<T>>;
22
+ /**
23
+ * Updates a given object in the collction and returns it
24
+ * @param obj
25
+ * @returns
26
+ */
27
+ update(obj: Proxy<T>): Promise<Persisted<T>>;
28
+ /**
29
+ * Deletes a given object of the collection
30
+ * @param uid
31
+ * @returns
32
+ */
33
+ delete(uid: string): Promise<void>;
34
+ /**
35
+ * Executes a given query on the collection
36
+ * @param query
37
+ * @returns
38
+ */
39
+ query(query: Query<typeof BaseObjectCore>): Promise<Payload<Persisted<T>>>;
40
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/lib/index.d.ts CHANGED
@@ -13,9 +13,17 @@ import { AbstractObject } from './components/AbstractObject';
13
13
  import { ObjectUri } from './components/ObjectUri';
14
14
  import { DataObjectClass } from './components/types/DataObjectClass';
15
15
  import { DataObject } from './components/DataObject';
16
- import { BaseObject } from './components/BaseObject';
17
- import { BaseObjectProperties } from './components/BaseObjectProperties';
16
+ import { BaseObjectCore } from './components/BaseObjectCore';
17
+ import { BaseObject, BaseObjectProperties } from './components/BaseObject';
18
+ import { Proxy } from './components/types/ProxyConstructor';
19
+ import { InjectMetaMiddleware } from './backends/middlewares/InjectMetaMiddleware';
20
+ import RepositoryClass from './components/types/RepositoryClass';
21
+ import AbstractRepository from './components/BaseRepository';
22
+ import Middleware from './backends/middlewares/Middleware';
18
23
  import { User } from './components/User';
24
+ import UserRepository from './components/UserRepository';
19
25
  import { Entity } from './components/Entity';
26
+ import EntityRepository from './components/EntityRepository';
20
27
  import { AbstractAdapter, MockAdapter, BackendError, BackendParameters, Query, Filter, Filters, Limits, Sorting, SortAndLimit } from './backends';
21
- export { statuses, utils, Core, Property, BaseProperty, BasePropertyType, BooleanProperty, BooleanPropertyType, DateTimeProperty, DateTimePropertyType, EnumProperty, EnumPropertyType, HashProperty, HashPropertyType, ObjectProperty, ObjectPropertyType, StringProperty, StringPropertyType, AbstractAdapter, MockAdapter, ObjectUri, DataObjectClass, DataObject, AbstractObject, BaseObject, BaseObjectProperties, BackendParameters, BackendError, Query, Filter, Filters, Limits, Sorting, SortAndLimit, User, Entity, };
28
+ import { BadRequestError, UnauthorizedError, ForbiddenError, NotFoundError, GoneError } from './common/ResourcesErrors';
29
+ export { statuses, utils, Core, Property, BaseProperty, BasePropertyType, BooleanProperty, BooleanPropertyType, DateTimeProperty, DateTimePropertyType, EnumProperty, EnumPropertyType, HashProperty, HashPropertyType, ObjectProperty, ObjectPropertyType, StringProperty, StringPropertyType, AbstractAdapter, RepositoryClass, AbstractRepository, MockAdapter, ObjectUri, DataObjectClass, DataObject, AbstractObject, BaseObject, BaseObjectCore, BaseObjectProperties, BackendParameters, BackendError, Query, Filter, Filters, Limits, Sorting, SortAndLimit, Middleware, InjectMetaMiddleware, User, Proxy, UserRepository, Entity, EntityRepository, BadRequestError, UnauthorizedError, ForbiddenError, NotFoundError, GoneError, };
package/lib/index.js CHANGED
@@ -22,8 +22,11 @@ var __importStar = (this && this.__importStar) || function (mod) {
22
22
  __setModuleDefault(result, mod);
23
23
  return result;
24
24
  };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
25
28
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.Entity = exports.User = exports.SortAndLimit = exports.Sorting = exports.Limits = exports.Filters = exports.Filter = exports.Query = exports.BackendError = exports.BaseObjectProperties = exports.BaseObject = exports.AbstractObject = exports.DataObject = exports.ObjectUri = exports.MockAdapter = exports.AbstractAdapter = exports.StringProperty = exports.ObjectProperty = exports.HashProperty = exports.EnumProperty = exports.DateTimeProperty = exports.BooleanProperty = exports.BaseProperty = exports.Property = exports.Core = exports.utils = exports.statuses = void 0;
29
+ exports.GoneError = exports.NotFoundError = exports.ForbiddenError = exports.UnauthorizedError = exports.BadRequestError = exports.EntityRepository = exports.UserRepository = exports.InjectMetaMiddleware = exports.SortAndLimit = exports.Sorting = exports.Limits = exports.Filters = exports.Filter = exports.Query = exports.BackendError = exports.BaseObjectProperties = exports.BaseObjectCore = exports.AbstractObject = exports.DataObject = exports.ObjectUri = exports.MockAdapter = exports.AbstractRepository = exports.AbstractAdapter = exports.StringProperty = exports.ObjectProperty = exports.HashProperty = exports.EnumProperty = exports.DateTimeProperty = exports.BooleanProperty = exports.BaseProperty = exports.Property = exports.Core = exports.utils = exports.statuses = void 0;
27
30
  const Core_1 = require("./Core");
28
31
  Object.defineProperty(exports, "Core", { enumerable: true, get: function () { return Core_1.Core; } });
29
32
  const statuses = __importStar(require("./common/statuses"));
@@ -52,14 +55,18 @@ const ObjectUri_1 = require("./components/ObjectUri");
52
55
  Object.defineProperty(exports, "ObjectUri", { enumerable: true, get: function () { return ObjectUri_1.ObjectUri; } });
53
56
  const DataObject_1 = require("./components/DataObject");
54
57
  Object.defineProperty(exports, "DataObject", { enumerable: true, get: function () { return DataObject_1.DataObject; } });
58
+ const BaseObjectCore_1 = require("./components/BaseObjectCore");
59
+ Object.defineProperty(exports, "BaseObjectCore", { enumerable: true, get: function () { return BaseObjectCore_1.BaseObjectCore; } });
55
60
  const BaseObject_1 = require("./components/BaseObject");
56
- Object.defineProperty(exports, "BaseObject", { enumerable: true, get: function () { return BaseObject_1.BaseObject; } });
57
- const BaseObjectProperties_1 = require("./components/BaseObjectProperties");
58
- Object.defineProperty(exports, "BaseObjectProperties", { enumerable: true, get: function () { return BaseObjectProperties_1.BaseObjectProperties; } });
59
- const User_1 = require("./components/User");
60
- Object.defineProperty(exports, "User", { enumerable: true, get: function () { return User_1.User; } });
61
- const Entity_1 = require("./components/Entity");
62
- Object.defineProperty(exports, "Entity", { enumerable: true, get: function () { return Entity_1.Entity; } });
61
+ Object.defineProperty(exports, "BaseObjectProperties", { enumerable: true, get: function () { return BaseObject_1.BaseObjectProperties; } });
62
+ const InjectMetaMiddleware_1 = require("./backends/middlewares/InjectMetaMiddleware");
63
+ Object.defineProperty(exports, "InjectMetaMiddleware", { enumerable: true, get: function () { return InjectMetaMiddleware_1.InjectMetaMiddleware; } });
64
+ const BaseRepository_1 = __importDefault(require("./components/BaseRepository"));
65
+ exports.AbstractRepository = BaseRepository_1.default;
66
+ const UserRepository_1 = __importDefault(require("./components/UserRepository"));
67
+ exports.UserRepository = UserRepository_1.default;
68
+ const EntityRepository_1 = __importDefault(require("./components/EntityRepository"));
69
+ exports.EntityRepository = EntityRepository_1.default;
63
70
  const backends_1 = require("./backends");
64
71
  Object.defineProperty(exports, "AbstractAdapter", { enumerable: true, get: function () { return backends_1.AbstractAdapter; } });
65
72
  Object.defineProperty(exports, "MockAdapter", { enumerable: true, get: function () { return backends_1.MockAdapter; } });
@@ -70,3 +77,9 @@ Object.defineProperty(exports, "Filters", { enumerable: true, get: function () {
70
77
  Object.defineProperty(exports, "Limits", { enumerable: true, get: function () { return backends_1.Limits; } });
71
78
  Object.defineProperty(exports, "Sorting", { enumerable: true, get: function () { return backends_1.Sorting; } });
72
79
  Object.defineProperty(exports, "SortAndLimit", { enumerable: true, get: function () { return backends_1.SortAndLimit; } });
80
+ const ResourcesErrors_1 = require("./common/ResourcesErrors");
81
+ Object.defineProperty(exports, "BadRequestError", { enumerable: true, get: function () { return ResourcesErrors_1.BadRequestError; } });
82
+ Object.defineProperty(exports, "UnauthorizedError", { enumerable: true, get: function () { return ResourcesErrors_1.UnauthorizedError; } });
83
+ Object.defineProperty(exports, "ForbiddenError", { enumerable: true, get: function () { return ResourcesErrors_1.ForbiddenError; } });
84
+ Object.defineProperty(exports, "NotFoundError", { enumerable: true, get: function () { return ResourcesErrors_1.NotFoundError; } });
85
+ Object.defineProperty(exports, "GoneError", { enumerable: true, get: function () { return ResourcesErrors_1.GoneError; } });