@quatrain/core 0.4.4 → 0.5.2

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 (74) hide show
  1. package/README.md +103 -2
  2. package/lib/Backend.d.ts +6 -5
  3. package/lib/Backend.js +17 -5
  4. package/lib/Core.d.ts +3 -3
  5. package/lib/backends/AbstractAdapter.d.ts +11 -6
  6. package/lib/backends/AbstractAdapter.js +13 -3
  7. package/lib/backends/Filter.d.ts +2 -2
  8. package/lib/backends/FilterOperators.d.ts +1 -1
  9. package/lib/backends/FilterOperators.js +1 -1
  10. package/lib/backends/MockAdapter.js +13 -5
  11. package/lib/backends/Query.d.ts +9 -3
  12. package/lib/backends/Query.js +26 -6
  13. package/lib/backends/middlewares/InjectMetaMiddleware.d.ts +8 -6
  14. package/lib/backends/middlewares/InjectMetaMiddleware.js +11 -31
  15. package/lib/backends/middlewares/Middleware.d.ts +5 -0
  16. package/lib/common/ResourcesErrors.d.ts +13 -0
  17. package/lib/common/ResourcesErrors.js +25 -0
  18. package/lib/components/AbstractObject.d.ts +0 -2
  19. package/lib/components/AbstractObject.js +0 -4
  20. package/lib/components/BaseObject.d.ts +11 -13
  21. package/lib/components/BaseObject.js +84 -78
  22. package/lib/components/BaseObjectCore.d.ts +60 -0
  23. package/lib/components/BaseObjectCore.js +153 -0
  24. package/lib/components/BaseRepository.d.ts +24 -0
  25. package/lib/components/BaseRepository.js +116 -0
  26. package/lib/components/DataObject.d.ts +19 -4
  27. package/lib/components/DataObject.js +63 -18
  28. package/lib/components/Entity.d.ts +22 -3
  29. package/lib/components/Entity.js +23 -22
  30. package/lib/components/EntityRepository.d.ts +6 -0
  31. package/lib/components/EntityRepository.js +14 -0
  32. package/lib/components/ObjectUri.js +4 -4
  33. package/lib/components/User.d.ts +14 -3
  34. package/lib/components/User.js +10 -8
  35. package/lib/components/UserRepository.d.ts +7 -0
  36. package/lib/components/UserRepository.js +36 -0
  37. package/lib/components/index.d.ts +4 -5
  38. package/lib/components/index.js +6 -9
  39. package/lib/components/types/AbstractObjectClass.d.ts +1 -1
  40. package/lib/components/types/BaseObjectClass.d.ts +3 -2
  41. package/lib/components/types/DataObjectClass.d.ts +3 -0
  42. package/lib/components/types/Payload.d.ts +10 -0
  43. package/lib/components/types/Payload.js +2 -0
  44. package/lib/components/types/Persisted.d.ts +6 -0
  45. package/lib/components/types/Persisted.js +2 -0
  46. package/lib/components/types/Properties.d.ts +3 -0
  47. package/lib/components/types/Properties.js +1 -0
  48. package/lib/components/types/ProxyConstructor.d.ts +10 -0
  49. package/lib/components/types/ProxyConstructor.js +4 -0
  50. package/lib/components/types/RepositoryClass.d.ts +40 -0
  51. package/lib/components/types/RepositoryClass.js +2 -0
  52. package/lib/index.d.ts +11 -3
  53. package/lib/index.js +21 -8
  54. package/lib/properties/BaseProperty.d.ts +2 -1
  55. package/lib/properties/BaseProperty.js +5 -1
  56. package/lib/properties/CollectionProperty.d.ts +4 -3
  57. package/lib/properties/HashProperty.d.ts +1 -1
  58. package/lib/properties/NumberProperty.d.ts +2 -2
  59. package/lib/properties/ObjectProperty.d.ts +5 -3
  60. package/lib/properties/ObjectProperty.js +5 -2
  61. package/lib/properties/Property.js +6 -0
  62. package/lib/properties/index.d.ts +2 -2
  63. package/lib/properties/types/PropertyClassType.d.ts +2 -1
  64. package/lib/properties/types/PropertyHTMLType.d.ts +1 -1
  65. package/lib/properties/types/PropertyTypes.d.ts +2 -2
  66. package/lib/utils/DataGenerator.d.ts +3 -2
  67. package/lib/utils/DataGenerator.js +1 -1
  68. package/package.json +31 -29
  69. package/lib/components/BaseObjectProperties.d.ts +0 -13
  70. package/lib/components/BaseObjectProperties.js +0 -87
  71. package/lib/components/UserProperties.d.ts +0 -1
  72. package/lib/components/UserProperties.js +0 -103
  73. package/lib/components/types/UserClass.d.ts +0 -3
  74. /package/lib/{components/types/UserClass.js → backends/middlewares/Middleware.js} +0 -0
@@ -64,13 +64,57 @@ 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
+ const val = data[key];
89
+ if (val &&
90
+ typeof val === 'object' &&
91
+ 'ref' in val &&
92
+ typeof val.ref == 'string' &&
93
+ 'label' in val &&
94
+ typeof val.label == 'string') {
95
+ const { ref, label } = val;
96
+ Reflect.get(this._properties, key).set(new ObjectUri_1.ObjectUri(ref, label));
97
+ }
98
+ else {
99
+ Reflect.get(this._properties, key).set(data[key]);
100
+ }
101
+ }
102
+ }
103
+ this._populated = true;
104
+ if (Reflect.get(this._properties, 'name')) {
105
+ this.uri.label = this.val('name');
106
+ }
107
+ }
108
+ return this;
109
+ }
110
+ /**
111
+ * Populate data object from backend query
112
+ * @param data
113
+ */
114
+ populateFromBackend() {
115
+ return __awaiter(this, void 0, void 0, function* () {
116
+ if (this._populated === false) {
117
+ if (this.path !== '/' && this.path !== '') {
74
118
  yield Core_1.Core.getBackend(this._objectUri.backend).read(this);
75
119
  }
76
120
  this._populated = true;
@@ -176,8 +220,8 @@ class DataObject {
176
220
  case 'ObjectProperty':
177
221
  const value = prop.val();
178
222
  Reflect.set(data, key, value
179
- ? objectsAsReferences
180
- ? value.toReference()
223
+ ? objectsAsReferences && !(value instanceof ObjectUri_1.ObjectUri)
224
+ ? value.core.asReference() //toReference()
181
225
  : value.toJSON()
182
226
  : null);
183
227
  break;
@@ -190,7 +234,7 @@ class DataObject {
190
234
  read() {
191
235
  return __awaiter(this, void 0, void 0, function* () {
192
236
  try {
193
- return this.populate(yield Core_1.Core.getBackend().read(this));
237
+ return yield Core_1.Core.getBackend().read(this); //this.populate()
194
238
  }
195
239
  catch (err) {
196
240
  console.log(err.message);
@@ -219,21 +263,22 @@ class DataObject {
219
263
  * @returns DataObject
220
264
  */
221
265
  static factory(param = undefined) {
222
- return __awaiter(this, void 0, void 0, function* () {
223
- try {
224
- return new this(param);
225
- }
226
- catch (err) {
227
- console.log(err);
228
- throw new Error(`Unable to build data object: ${err.message}`);
229
- }
230
- });
266
+ try {
267
+ return new this(param);
268
+ }
269
+ catch (err) {
270
+ console.log(err);
271
+ throw new Error(`Unable to build data object: ${err.message}`);
272
+ }
231
273
  }
232
274
  clone(data = {}) {
233
275
  return __awaiter(this, void 0, void 0, function* () {
234
276
  const cloned = yield DataObject.factory();
235
277
  cloned.uri.class = this.uri.class;
236
- cloned.setProperties(this._properties);
278
+ cloned._populated = false;
279
+ for (let property of Object.keys(this._properties)) {
280
+ cloned._properties[property] = this._properties[property].clone();
281
+ }
237
282
  if (data) {
238
283
  yield cloned.populate(data);
239
284
  }
@@ -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;
@@ -19,7 +19,7 @@ class ObjectUri {
19
19
  this._label = '';
20
20
  this._str = str;
21
21
  this._label = label;
22
- if (str.indexOf(':') !== -1) {
22
+ if (str.includes(':')) {
23
23
  const [backend, path] = str.split(':');
24
24
  this._backend = backend || Core_1.Core.defaultBackend;
25
25
  this._path = path;
@@ -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
  }
@@ -20,4 +20,7 @@ export interface DataObjectClass<T extends DataObjectClass<any>> {
20
20
  clone(data?: any): Promise<T>;
21
21
  toReference(): any;
22
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; } });
@@ -2,7 +2,7 @@ import { DataObjectClass } from '../components/types/DataObjectClass';
2
2
  import { AbstractPropertyType } from './types/AbstractPropertyType';
3
3
  import { PropertyClassType } from './types/PropertyClassType';
4
4
  import { PropertyHTMLType } from './types/PropertyHTMLType';
5
- export declare type EventTypes = typeof BaseProperty.EVENT_ONCHANGE | typeof BaseProperty.EVENT_ONDELETE;
5
+ export type EventTypes = typeof BaseProperty.EVENT_ONCHANGE | typeof BaseProperty.EVENT_ONDELETE;
6
6
  export interface BasePropertyType extends AbstractPropertyType {
7
7
  parent?: DataObjectClass<any>;
8
8
  protected?: boolean;
@@ -37,4 +37,5 @@ export declare class BaseProperty implements PropertyClassType {
37
37
  val(transform?: any): any;
38
38
  protected _enable(value: boolean | undefined): boolean;
39
39
  toJSON(): any;
40
+ clone(): any;
40
41
  }