@quatrain/core 1.0.0-beta1 → 1.0.0-beta11

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 (106) hide show
  1. package/lib/Auth.d.ts +25 -0
  2. package/lib/Auth.js +9 -0
  3. package/lib/Backend.d.ts +34 -1
  4. package/lib/Backend.js +1 -0
  5. package/lib/Core.d.ts +8 -8
  6. package/lib/Core.js +6 -5
  7. package/lib/authentication/AbstractAuthAdapter.d.ts +18 -0
  8. package/lib/authentication/AbstractAuthAdapter.js +23 -0
  9. package/lib/authentication/AuthenticationError.d.ts +2 -0
  10. package/lib/authentication/AuthenticationError.js +6 -0
  11. package/lib/authentication/index.d.ts +4 -0
  12. package/lib/authentication/index.js +7 -0
  13. package/lib/authentication/middlewares/AbstractAuthMiddleware.d.ts +0 -0
  14. package/lib/authentication/middlewares/AbstractAuthMiddleware.js +1 -0
  15. package/lib/authentication/middlewares/AuthMiddleware.d.ts +5 -0
  16. package/lib/authentication/middlewares/Middleware.d.ts +5 -0
  17. package/lib/authentication/middlewares/Middleware.js +2 -0
  18. package/lib/authentication/types/AuthInterface.d.ts +9 -0
  19. package/lib/authentication/types/AuthInterface.js +2 -0
  20. package/lib/backends/AbstractAdapter.d.ts +19 -44
  21. package/lib/backends/AbstractAdapter.js +27 -9
  22. package/lib/backends/Filters.d.ts +2 -1
  23. package/lib/backends/MockAdapter.d.ts +6 -4
  24. package/lib/backends/MockAdapter.js +15 -6
  25. package/lib/backends/Query.d.ts +27 -12
  26. package/lib/backends/Query.js +20 -9
  27. package/lib/backends/index.d.ts +5 -3
  28. package/lib/backends/index.js +26 -1
  29. package/lib/backends/middlewares/InjectKeywordsMiddleware.d.ts +9 -0
  30. package/lib/backends/middlewares/InjectKeywordsMiddleware.js +47 -0
  31. package/lib/backends/middlewares/InjectMetaMiddleware.d.ts +7 -6
  32. package/lib/backends/middlewares/InjectMetaMiddleware.js +7 -4
  33. package/lib/backends/middlewares/Middleware.d.ts +2 -2
  34. package/lib/backends/middlewares/types/MiddlewareParams.d.ts +3 -0
  35. package/lib/backends/middlewares/types/MiddlewareParams.js +2 -0
  36. package/lib/backends/types/BackendInterface.d.ts +13 -0
  37. package/lib/backends/types/BackendInterface.js +2 -0
  38. package/lib/backends/types/CollectionHierarchy.d.ts +3 -0
  39. package/lib/backends/types/CollectionHierarchy.js +6 -0
  40. package/lib/common/statuses.d.ts +2 -0
  41. package/lib/common/statuses.js +3 -1
  42. package/lib/components/AbstractObject.d.ts +3 -1
  43. package/lib/components/AbstractObject.js +1 -0
  44. package/lib/components/BaseObject.d.ts +3 -3
  45. package/lib/components/BaseObject.js +1 -0
  46. package/lib/components/BaseObjectCore.d.ts +10 -1
  47. package/lib/components/BaseObjectCore.js +16 -5
  48. package/lib/components/BaseRepository.d.ts +10 -8
  49. package/lib/components/BaseRepository.js +28 -13
  50. package/lib/components/DataObject.d.ts +13 -2
  51. package/lib/components/DataObject.js +52 -10
  52. package/lib/components/Entity.d.ts +4 -21
  53. package/lib/components/Entity.js +34 -32
  54. package/lib/components/EntityRepository.d.ts +3 -3
  55. package/lib/components/EntityRepository.js +1 -1
  56. package/lib/components/ObjectUri.js +5 -3
  57. package/lib/components/User.d.ts +4 -5
  58. package/lib/components/User.js +19 -10
  59. package/lib/components/UserRepository.d.ts +4 -4
  60. package/lib/components/UserRepository.js +2 -2
  61. package/lib/components/index.d.ts +2 -2
  62. package/lib/components/index.js +4 -2
  63. package/lib/components/types/DataObjectClass.d.ts +6 -1
  64. package/lib/components/types/RepositoryClass.d.ts +1 -1
  65. package/lib/components/types/toJSONParams.d.ts +8 -0
  66. package/lib/components/types/toJSONParams.js +2 -0
  67. package/lib/index.d.ts +9 -4
  68. package/lib/index.js +16 -1
  69. package/lib/properties/ArrayProperty.d.ts +1 -1
  70. package/lib/properties/ArrayProperty.js +2 -2
  71. package/lib/properties/BaseProperty.d.ts +4 -1
  72. package/lib/properties/BaseProperty.js +15 -3
  73. package/lib/properties/BooleanProperty.d.ts +1 -1
  74. package/lib/properties/BooleanProperty.js +2 -2
  75. package/lib/properties/CollectionProperty.d.ts +3 -3
  76. package/lib/properties/CollectionProperty.js +4 -3
  77. package/lib/properties/DateTimeProperty.d.ts +1 -1
  78. package/lib/properties/DateTimeProperty.js +2 -2
  79. package/lib/properties/EnumProperty.d.ts +1 -1
  80. package/lib/properties/EnumProperty.js +2 -2
  81. package/lib/properties/HashProperty.d.ts +7 -1
  82. package/lib/properties/HashProperty.js +10 -2
  83. package/lib/properties/MapProperty.d.ts +1 -1
  84. package/lib/properties/MapProperty.js +2 -2
  85. package/lib/properties/NumberProperty.d.ts +1 -1
  86. package/lib/properties/NumberProperty.js +2 -2
  87. package/lib/properties/ObjectProperty.d.ts +1 -1
  88. package/lib/properties/ObjectProperty.js +5 -6
  89. package/lib/properties/StringProperty.d.ts +1 -1
  90. package/lib/properties/StringProperty.js +2 -2
  91. package/lib/properties/types/AbstractPropertyType.d.ts +1 -0
  92. package/lib/properties/types/PropertyClassType.d.ts +4 -1
  93. package/lib/utils/DataGenerator.d.ts +2 -3
  94. package/lib/utils/DataGenerator.js +2 -1
  95. package/lib/wrappers/cloud/AbstractCloudWrapper.d.ts +4 -0
  96. package/lib/wrappers/cloud/AbstractCloudWrapper.js +9 -0
  97. package/package.json +2 -2
  98. package/README.md +0 -124
  99. package/lib/components/BaseObjectProperties.d.ts +0 -13
  100. package/lib/components/BaseObjectProperties.js +0 -87
  101. package/lib/components/EntityProperties.d.ts +0 -1
  102. package/lib/components/EntityProperties.js +0 -54
  103. package/lib/components/UserProperties.d.ts +0 -1
  104. package/lib/components/UserProperties.js +0 -103
  105. package/lib/components/types/UserClass.d.ts +0 -3
  106. /package/lib/{components/types/UserClass.js → authentication/middlewares/AuthMiddleware.js} +0 -0
@@ -1,10 +1,12 @@
1
- import { AbstractAdapter, BackendInterface, BackendParameters } from './AbstractAdapter';
1
+ import { AbstractAdapter } from './AbstractAdapter';
2
2
  import { MockAdapter } from './MockAdapter';
3
3
  import { BackendError } from './BackendError';
4
- import { Query } from './Query';
4
+ import { BackendInterface } from './types/BackendInterface';
5
+ import * as CollectionHierarchy from './types/CollectionHierarchy';
6
+ import { Query, QueryResultType, QueryMetaType } from './Query';
5
7
  import { Filter } from './Filter';
6
8
  import { Filters } from './Filters';
7
9
  import { Sorting } from './Sorting';
8
10
  import { Limits } from './Limits';
9
11
  import { SortAndLimit } from './SortAndLimit';
10
- export { AbstractAdapter, BackendInterface, BackendParameters, BackendError, MockAdapter, Query, Filter, Filters, Sorting, Limits, SortAndLimit, };
12
+ export { BackendInterface, AbstractAdapter, BackendError, MockAdapter, Query, QueryResultType, QueryMetaType, Filter, Filters, Sorting, Limits, SortAndLimit, CollectionHierarchy, };
@@ -1,12 +1,37 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SortAndLimit = exports.Limits = exports.Sorting = exports.Filters = exports.Filter = exports.Query = exports.MockAdapter = exports.BackendError = exports.AbstractAdapter = void 0;
26
+ exports.CollectionHierarchy = exports.SortAndLimit = exports.Limits = exports.Sorting = exports.Filters = exports.Filter = exports.Query = exports.MockAdapter = exports.BackendError = exports.AbstractAdapter = void 0;
4
27
  const AbstractAdapter_1 = require("./AbstractAdapter");
5
28
  Object.defineProperty(exports, "AbstractAdapter", { enumerable: true, get: function () { return AbstractAdapter_1.AbstractAdapter; } });
6
29
  const MockAdapter_1 = require("./MockAdapter");
7
30
  Object.defineProperty(exports, "MockAdapter", { enumerable: true, get: function () { return MockAdapter_1.MockAdapter; } });
8
31
  const BackendError_1 = require("./BackendError");
9
32
  Object.defineProperty(exports, "BackendError", { enumerable: true, get: function () { return BackendError_1.BackendError; } });
33
+ const CollectionHierarchy = __importStar(require("./types/CollectionHierarchy"));
34
+ exports.CollectionHierarchy = CollectionHierarchy;
10
35
  const Query_1 = require("./Query");
11
36
  Object.defineProperty(exports, "Query", { enumerable: true, get: function () { return Query_1.Query; } });
12
37
  const Filter_1 = require("./Filter");
@@ -0,0 +1,9 @@
1
+ import { DataObjectClass } from '../../components';
2
+ import { BackendAction } from '../../Backend';
3
+ import BackendMiddleware from './Middleware';
4
+ export interface InjectKeywordsMiddlewareParams {
5
+ }
6
+ export declare class InjectKeywordsMiddleware implements BackendMiddleware {
7
+ execute(dataObject: DataObjectClass<any>, action: BackendAction): void;
8
+ protected _createKeywords(dataObject: DataObjectClass<any>): string[];
9
+ }
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InjectKeywordsMiddleware = void 0;
4
+ const Backend_1 = require("../../Backend");
5
+ const properties_1 = require("../../properties");
6
+ class InjectKeywordsMiddleware {
7
+ execute(dataObject, action) {
8
+ if (!dataObject.has('keywords')) {
9
+ dataObject.addProperty(new properties_1.ArrayProperty({ name: 'keywords' }));
10
+ }
11
+ switch (action) {
12
+ case Backend_1.BackendAction.CREATE:
13
+ case Backend_1.BackendAction.UPDATE:
14
+ dataObject.set('keywords', this._createKeywords(dataObject));
15
+ break;
16
+ default:
17
+ break;
18
+ }
19
+ return;
20
+ }
21
+ _createKeywords(dataObject) {
22
+ const keywords = [];
23
+ Object.keys(dataObject.properties)
24
+ .filter((key) => dataObject.get(key).fullSearch === true)
25
+ .forEach((key) => {
26
+ const val = dataObject.val(key);
27
+ if (val) {
28
+ val.toLowerCase()
29
+ .split(' ')
30
+ .forEach((word) => {
31
+ let seq = '';
32
+ word
33
+ .split('')
34
+ .splice(0, 15)
35
+ .forEach((letter) => {
36
+ seq += letter;
37
+ if (seq.length > 1) {
38
+ keywords.push(seq);
39
+ }
40
+ });
41
+ });
42
+ }
43
+ });
44
+ return [...new Set(keywords)];
45
+ }
46
+ }
47
+ exports.InjectKeywordsMiddleware = InjectKeywordsMiddleware;
@@ -1,12 +1,13 @@
1
1
  import { DataObjectClass } from '../../components';
2
2
  import { BackendAction } from '../../Backend';
3
- import { UserCore } from '../../components/User';
4
- import Middleware from './Middleware';
3
+ import { User } from '../../components/User';
4
+ import BackendMiddleware from './Middleware';
5
+ import { MiddlewareParams } from './types/MiddlewareParams';
5
6
  export interface InjectMetaMiddlewareParams {
6
- user: UserCore;
7
+ user: User;
7
8
  }
8
- export declare class InjectMetaMiddleware implements Middleware {
9
- protected _user: UserCore;
9
+ export declare class InjectMetaMiddleware implements BackendMiddleware {
10
+ protected _user: User;
10
11
  constructor(params: InjectMetaMiddlewareParams);
11
- execute(dataObject: DataObjectClass<any>, action: BackendAction): void;
12
+ execute(dataObject: DataObjectClass<any>, action: BackendAction, params?: MiddlewareParams): void;
12
13
  }
@@ -2,24 +2,27 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.InjectMetaMiddleware = void 0;
4
4
  const Backend_1 = require("../../Backend");
5
+ const Core_1 = require("../../Core");
5
6
  class InjectMetaMiddleware {
6
7
  constructor(params) {
7
8
  this._user = params.user;
8
9
  }
9
- execute(dataObject, action) {
10
+ execute(dataObject, action, params) {
11
+ Core_1.Core.log(`[MDW] Executing Middleware ${this.constructor.name}`);
12
+ const date = params && params.useDateFormat ? (new Date()).toISOString() : Date.now();
10
13
  switch (action) {
11
14
  // add properties existence validation
12
15
  case Backend_1.BackendAction.CREATE:
13
16
  dataObject.set('createdBy', this._user);
14
- dataObject.set('createdAt', Date.now());
17
+ dataObject.set('createdAt', date);
15
18
  break;
16
19
  case Backend_1.BackendAction.UPDATE:
17
20
  dataObject.set('updatedBy', this._user);
18
- dataObject.set('updatedAt', Date.now());
21
+ dataObject.set('updatedAt', date);
19
22
  break;
20
23
  case Backend_1.BackendAction.DELETE:
21
24
  dataObject.set('deletedBy', this._user);
22
- dataObject.set('deletedAt', Date.now());
25
+ dataObject.set('deletedAt', date);
23
26
  break;
24
27
  default:
25
28
  break;
@@ -1,5 +1,5 @@
1
1
  import { BackendAction } from '../../Backend';
2
2
  import { DataObjectClass } from '../../components';
3
- export default interface Middleware {
4
- execute: (dataObject: DataObjectClass<any>, action: BackendAction) => void;
3
+ export default interface BackendMiddleware {
4
+ execute: (dataObject: DataObjectClass<any>, action: BackendAction, params?: any) => void;
5
5
  }
@@ -0,0 +1,3 @@
1
+ export type MiddlewareParams = {
2
+ useDateFormat?: boolean;
3
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,13 @@
1
+ import { DataObjectClass } from '../../components';
2
+ import { Filter } from '../Filter';
3
+ import { Filters } from '../Filters';
4
+ import { Query, QueryResultType } from '../Query';
5
+ import { SortAndLimit } from '../SortAndLimit';
6
+ export interface BackendInterface {
7
+ create(dataObject: DataObjectClass<any>, desiredUid: string | undefined): Promise<DataObjectClass<any>>;
8
+ read(param: string | DataObjectClass<any>): Promise<DataObjectClass<any>>;
9
+ update(dataObject: DataObjectClass<any>): Promise<DataObjectClass<any>>;
10
+ delete(dataObject: DataObjectClass<any>): Promise<DataObjectClass<any>>;
11
+ query(query: Query<any>): Promise<QueryResultType<DataObjectClass<any>>>;
12
+ find(dataObject: DataObjectClass<any>, filters: Filters | Filter[] | undefined, pagination: SortAndLimit | undefined, parent: any): Promise<QueryResultType<DataObjectClass<any>>>;
13
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,3 @@
1
+ export declare const STANDARD = 1;
2
+ export declare const SUBCOLLECTION = 2;
3
+ export declare const SUBCOLLECTION_GROUP = 3;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SUBCOLLECTION_GROUP = exports.SUBCOLLECTION = exports.STANDARD = void 0;
4
+ exports.STANDARD = 1;
5
+ exports.SUBCOLLECTION = 2;
6
+ exports.SUBCOLLECTION_GROUP = 3;
@@ -2,11 +2,13 @@ export declare const CREATED = "created";
2
2
  export declare const PENDING = "pending";
3
3
  export declare const QUEUED = "queued";
4
4
  export declare const ACTIVE = "active";
5
+ export declare const COMPLETED = "completed";
5
6
  export declare const ERROR = "error";
6
7
  export declare const TEST = "test";
7
8
  export declare const SUSPENDED = "suspended";
8
9
  export declare const DELETABLE = "deletable";
9
10
  export declare const DELETED = "deleted";
11
+ export declare const DISABLED = "disabled";
10
12
  export declare const DONE = "done";
11
13
  export declare const MAINTENANCE = "maintenance";
12
14
  export declare const UNKNOWN = "unknown";
@@ -1,15 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UNKNOWN = exports.MAINTENANCE = exports.DONE = exports.DELETED = exports.DELETABLE = exports.SUSPENDED = exports.TEST = exports.ERROR = exports.ACTIVE = exports.QUEUED = exports.PENDING = exports.CREATED = void 0;
3
+ exports.UNKNOWN = exports.MAINTENANCE = exports.DONE = exports.DISABLED = exports.DELETED = exports.DELETABLE = exports.SUSPENDED = exports.TEST = exports.ERROR = exports.COMPLETED = exports.ACTIVE = exports.QUEUED = exports.PENDING = exports.CREATED = void 0;
4
4
  exports.CREATED = 'created';
5
5
  exports.PENDING = 'pending';
6
6
  exports.QUEUED = 'queued';
7
7
  exports.ACTIVE = 'active';
8
+ exports.COMPLETED = 'completed';
8
9
  exports.ERROR = 'error';
9
10
  exports.TEST = 'test';
10
11
  exports.SUSPENDED = 'suspended';
11
12
  exports.DELETABLE = 'deletable';
12
13
  exports.DELETED = 'deleted';
14
+ exports.DISABLED = 'disabled';
13
15
  exports.DONE = 'done';
14
16
  exports.MAINTENANCE = 'maintenance';
15
17
  exports.UNKNOWN = 'unknown';
@@ -1,8 +1,10 @@
1
1
  import { DataObjectClass } from './types/DataObjectClass';
2
- import { DataObjectProperties } from '../properties/';
2
+ import { DataObjectProperties } from '../properties';
3
3
  export declare abstract class AbstractObject {
4
4
  static PROPS_DEFINITION: DataObjectProperties;
5
5
  static COLLECTION: string | undefined;
6
+ static PARENT_PROP: string | undefined;
7
+ static DEFAULT_BACKEND: string;
6
8
  static LABEL_KEY: string;
7
9
  protected _dataObject: DataObjectClass<any>;
8
10
  constructor(dao: DataObjectClass<any>);
@@ -70,5 +70,6 @@ class AbstractObject {
70
70
  }
71
71
  exports.AbstractObject = AbstractObject;
72
72
  AbstractObject.PROPS_DEFINITION = [];
73
+ AbstractObject.DEFAULT_BACKEND = 'default';
73
74
  // Which property's value to use in backend as label for object reference
74
75
  AbstractObject.LABEL_KEY = 'name';
@@ -4,10 +4,10 @@ export interface BaseObject {
4
4
  name: string;
5
5
  status: string;
6
6
  createdBy?: User | ObjectUri;
7
- createdAt?: number;
7
+ createdAt?: number | string;
8
8
  updatedBy?: User | ObjectUri;
9
- updatedAt?: number;
9
+ updatedAt?: number | string;
10
10
  deletedBy?: User | ObjectUri;
11
- deletedAt?: number;
11
+ deletedAt?: number | string;
12
12
  }
13
13
  export declare const BaseObjectProperties: any;
@@ -37,6 +37,7 @@ exports.BaseObjectProperties = [
37
37
  type: StringProperty_1.StringProperty.TYPE,
38
38
  minLength: 1,
39
39
  maxLength: 100,
40
+ fullSearch: true,
40
41
  htmlType: htmlType.NAME,
41
42
  },
42
43
  {
@@ -59,6 +59,15 @@ export declare class BaseObjectCore extends AbstractObject implements BaseObject
59
59
  */
60
60
  protected toProxy<T extends BaseObject>(): Proxy<Proxy<T>>;
61
61
  asReference(): any;
62
- query(): Query<any>;
62
+ /**
63
+ * Create a query based on given class where parent is current instance
64
+ * @param obj
65
+ * @returns Query
66
+ */
67
+ query(obj: any): Query<any>;
68
+ /**
69
+ * Create a query based on current class
70
+ * @returns Query
71
+ */
63
72
  static query(): Query<typeof BaseObjectCore>;
64
73
  }
@@ -33,7 +33,10 @@ class BaseObjectCore extends AbstractObject_1.AbstractObject {
33
33
  base.push(property);
34
34
  }
35
35
  });
36
- const dao = DataObject_1.DataObject.factory({ properties: base });
36
+ const dao = DataObject_1.DataObject.factory({
37
+ properties: base,
38
+ parentProp: this.PARENT_PROP,
39
+ });
37
40
  dao.uri.class = child;
38
41
  return dao;
39
42
  }
@@ -63,7 +66,7 @@ class BaseObjectCore extends AbstractObject_1.AbstractObject {
63
66
  dao.uri.class = child;
64
67
  dao.populateFromData(src);
65
68
  const obj = new this(dao);
66
- return obj; //.toProxy() as Proxy<T>
69
+ return obj;
67
70
  }
68
71
  static factory(src = undefined, child = this) {
69
72
  return __awaiter(this, void 0, void 0, function* () {
@@ -144,12 +147,20 @@ class BaseObjectCore extends AbstractObject_1.AbstractObject {
144
147
  });
145
148
  }
146
149
  asReference() {
147
- console.log(this._dataObject.toReference());
148
150
  return this._dataObject.toReference();
149
151
  }
150
- query() {
151
- return new Query_1.Query(this.constructor.prototype);
152
+ /**
153
+ * Create a query based on given class where parent is current instance
154
+ * @param obj
155
+ * @returns Query
156
+ */
157
+ query(obj) {
158
+ return new Query_1.Query(obj, this);
152
159
  }
160
+ /**
161
+ * Create a query based on current class
162
+ * @returns Query
163
+ */
153
164
  static query() {
154
165
  return new Query_1.Query(this);
155
166
  }
@@ -1,11 +1,8 @@
1
- import { BackendInterface } from '../backends/AbstractAdapter';
2
- import { Query } from '../backends/Query';
1
+ import { Query, QueryResultType } from '../backends/Query';
3
2
  import { BaseObjectCore } from './BaseObjectCore';
4
3
  import { DataObjectClass } from './types/DataObjectClass';
5
- import Payload from './types/Payload';
6
4
  import { BaseObject } from './BaseObject';
7
- import { Persisted } from './types/Persisted';
8
- import { Proxy } from './types/ProxyConstructor';
5
+ import { BackendInterface } from '../backends/types/BackendInterface';
9
6
  /**
10
7
  * CRUD methods for models/entities inheriting from BaseObject
11
8
  * Extend this by passing the typeof of the desired class to the constructor
@@ -15,9 +12,14 @@ export default class BaseRepository<T extends BaseObject> {
15
12
  backendAdapter: BackendInterface;
16
13
  constructor(model: typeof BaseObjectCore, backendAdapter?: BackendInterface);
17
14
  protected getDataObjectFromUid(uid: string): Promise<DataObjectClass<any>>;
15
+ protected getDataObjectFromPath(path: string): Promise<DataObjectClass<any>>;
18
16
  create<B extends BaseObjectCore>(obj: B, uid?: string): Promise<any>;
19
17
  read(key: string): Promise<any>;
20
- update(obj: Proxy<T>): Promise<Persisted<T>>;
21
- delete(uid: string): Promise<void>;
22
- query(query: Query<typeof BaseObjectCore>): Promise<Payload<Persisted<T>>>;
18
+ update(obj: BaseObjectCore): Promise<any>;
19
+ /**
20
+ * delete object in its backend
21
+ * @param uid string
22
+ */
23
+ delete(uid: string): Promise<DataObjectClass<any>>;
24
+ query(query: Query<any>): Promise<QueryResultType<T>>;
23
25
  }
@@ -58,17 +58,35 @@ class BaseRepository {
58
58
  return dataObject;
59
59
  });
60
60
  }
61
+ getDataObjectFromPath(path) {
62
+ return __awaiter(this, void 0, void 0, function* () {
63
+ const dataObject = DataObject_1.DataObject.factory({
64
+ properties: this._model.PROPS_DEFINITION,
65
+ uri: path,
66
+ });
67
+ dataObject.uid = path.substring(path.lastIndexOf('/') + 1);
68
+ return dataObject;
69
+ });
70
+ }
61
71
  create(obj, uid) {
62
72
  return __awaiter(this, void 0, void 0, function* () {
63
73
  const savedObj = yield this.backendAdapter.create(obj.dataObject, uid);
64
- return this._model.fromDataObject(savedObj); //as Persisted<T>
74
+ return this._model.fromDataObject(savedObj);
65
75
  });
66
76
  }
67
77
  read(key) {
68
78
  return __awaiter(this, void 0, void 0, function* () {
69
- const uid = key.indexOf('/') !== -1 ? key.substring(key.lastIndexOf('/') + 1) : key;
70
79
  try {
71
- const dataObject = yield this.getDataObjectFromUid(uid);
80
+ let dataObject;
81
+ if (key.split('/').length <= 2) {
82
+ const uid = key.indexOf('/') !== -1
83
+ ? key.substring(key.lastIndexOf('/') + 1)
84
+ : key;
85
+ dataObject = yield this.getDataObjectFromUid(uid);
86
+ }
87
+ else {
88
+ dataObject = yield this.getDataObjectFromPath(key);
89
+ }
72
90
  const response = yield this.backendAdapter.read(dataObject);
73
91
  const obj = this._model.fromDataObject(response);
74
92
  // TODO should be moved to the backend middleware
@@ -90,27 +108,24 @@ class BaseRepository {
90
108
  }
91
109
  update(obj) {
92
110
  return __awaiter(this, void 0, void 0, function* () {
93
- const dataObject = obj.core.dataObject;
111
+ const dataObject = obj.dataObject;
94
112
  const savedObj = yield this.backendAdapter.update(dataObject);
95
113
  return this._model.fromDataObject(savedObj);
96
114
  });
97
115
  }
116
+ /**
117
+ * delete object in its backend
118
+ * @param uid string
119
+ */
98
120
  delete(uid) {
99
121
  return __awaiter(this, void 0, void 0, function* () {
100
122
  const dataObject = yield this.getDataObjectFromUid(uid);
101
- yield this.backendAdapter.delete(dataObject);
123
+ return yield this.backendAdapter.delete(dataObject);
102
124
  });
103
125
  }
104
126
  query(query) {
105
127
  return __awaiter(this, void 0, void 0, function* () {
106
- const items = (yield query.fetchAsInstances(this.backendAdapter));
107
- const count = yield this.backendAdapter.count(query);
108
- const meta = {
109
- count,
110
- updatedAt: new Date().getTime(),
111
- };
112
- const payload = { items, meta };
113
- return payload;
128
+ return yield query.fetchAsInstances(this.backendAdapter);
114
129
  });
115
130
  }
116
131
  }
@@ -3,6 +3,7 @@ import { PropertyClassType } from '../properties/types/PropertyClassType';
3
3
  import { AbstractObject } from './AbstractObject';
4
4
  import { ObjectUri } from './ObjectUri';
5
5
  import { DataObjectClass } from './types/DataObjectClass';
6
+ import { toJSONParams } from './types/toJSONParams';
6
7
  export type CoreObject<T extends AbstractObject> = T;
7
8
  export type Properties = {
8
9
  [x: string]: PropertyClassType;
@@ -14,6 +15,7 @@ export interface DataObjectFactoryType {
14
15
  export interface DataObjectParams {
15
16
  uri?: string | ObjectUri;
16
17
  properties: DataObjectProperties;
18
+ parentProp?: string;
17
19
  }
18
20
  /**
19
21
  * Data objects constitute the agnostic glue between objects and backends.
@@ -26,6 +28,7 @@ export declare class DataObject implements DataObjectClass<any> {
26
28
  protected _properties: Properties;
27
29
  protected _persisted: boolean;
28
30
  protected _populated: boolean;
31
+ protected _parentProp: string | undefined;
29
32
  protected _proxied: any;
30
33
  /**
31
34
  * Has data been modified since last backend operation?
@@ -43,6 +46,13 @@ export declare class DataObject implements DataObjectClass<any> {
43
46
  */
44
47
  asProxy(): this;
45
48
  setProperties(properties: Properties): void;
49
+ /**
50
+ * Return a map of all propoerties or only those matching the provided type
51
+ * @param type
52
+ * @returns
53
+ */
54
+ getProperties(type?: string): {};
55
+ addProperty(property: PropertyClassType): void;
46
56
  /**
47
57
  * Populate data object from instant data or backend query
48
58
  * @param data
@@ -74,6 +84,7 @@ export declare class DataObject implements DataObjectClass<any> {
74
84
  set uri(uri: ObjectUri);
75
85
  get uri(): ObjectUri;
76
86
  get class(): any;
87
+ get parentProp(): string | undefined;
77
88
  has(key: string): boolean;
78
89
  /**
79
90
  * Returns property matching key or throw
@@ -88,7 +99,7 @@ export declare class DataObject implements DataObjectClass<any> {
88
99
  * @returns any
89
100
  */
90
101
  val(key: string, transform?: string | undefined): any;
91
- toJSON(objectsAsReferences?: boolean): {
102
+ toJSON(params?: boolean | toJSONParams): {
92
103
  [x: string]: any;
93
104
  };
94
105
  toReference(): {
@@ -96,7 +107,7 @@ export declare class DataObject implements DataObjectClass<any> {
96
107
  ref: string;
97
108
  uri: string;
98
109
  };
99
- protected _dataToJSON(objectsAsReferences?: boolean): {};
110
+ protected _dataToJSON(objectsAsReferences?: boolean, ignoreUnchanged?: boolean, converters?: {}): {};
100
111
  read(): Promise<DataObjectClass<any>>;
101
112
  save(): Promise<DataObjectClass<any>>;
102
113
  delete(): Promise<DataObjectClass<any>>;