@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.
- package/lib/Auth.d.ts +25 -0
- package/lib/Auth.js +9 -0
- package/lib/Backend.d.ts +34 -1
- package/lib/Backend.js +1 -0
- package/lib/Core.d.ts +8 -8
- package/lib/Core.js +6 -5
- package/lib/authentication/AbstractAuthAdapter.d.ts +18 -0
- package/lib/authentication/AbstractAuthAdapter.js +23 -0
- package/lib/authentication/AuthenticationError.d.ts +2 -0
- package/lib/authentication/AuthenticationError.js +6 -0
- package/lib/authentication/index.d.ts +4 -0
- package/lib/authentication/index.js +7 -0
- package/lib/authentication/middlewares/AbstractAuthMiddleware.d.ts +0 -0
- package/lib/authentication/middlewares/AbstractAuthMiddleware.js +1 -0
- package/lib/authentication/middlewares/AuthMiddleware.d.ts +5 -0
- package/lib/authentication/middlewares/Middleware.d.ts +5 -0
- package/lib/authentication/middlewares/Middleware.js +2 -0
- package/lib/authentication/types/AuthInterface.d.ts +9 -0
- package/lib/authentication/types/AuthInterface.js +2 -0
- package/lib/backends/AbstractAdapter.d.ts +19 -44
- package/lib/backends/AbstractAdapter.js +27 -9
- package/lib/backends/Filters.d.ts +2 -1
- package/lib/backends/MockAdapter.d.ts +6 -4
- package/lib/backends/MockAdapter.js +15 -6
- package/lib/backends/Query.d.ts +27 -12
- package/lib/backends/Query.js +20 -9
- package/lib/backends/index.d.ts +5 -3
- package/lib/backends/index.js +26 -1
- package/lib/backends/middlewares/InjectKeywordsMiddleware.d.ts +9 -0
- package/lib/backends/middlewares/InjectKeywordsMiddleware.js +47 -0
- package/lib/backends/middlewares/InjectMetaMiddleware.d.ts +7 -6
- package/lib/backends/middlewares/InjectMetaMiddleware.js +7 -4
- package/lib/backends/middlewares/Middleware.d.ts +2 -2
- package/lib/backends/middlewares/types/MiddlewareParams.d.ts +3 -0
- package/lib/backends/middlewares/types/MiddlewareParams.js +2 -0
- package/lib/backends/types/BackendInterface.d.ts +13 -0
- package/lib/backends/types/BackendInterface.js +2 -0
- package/lib/backends/types/CollectionHierarchy.d.ts +3 -0
- package/lib/backends/types/CollectionHierarchy.js +6 -0
- package/lib/common/statuses.d.ts +2 -0
- package/lib/common/statuses.js +3 -1
- package/lib/components/AbstractObject.d.ts +3 -1
- package/lib/components/AbstractObject.js +1 -0
- package/lib/components/BaseObject.d.ts +3 -3
- package/lib/components/BaseObject.js +1 -0
- package/lib/components/BaseObjectCore.d.ts +10 -1
- package/lib/components/BaseObjectCore.js +16 -5
- package/lib/components/BaseRepository.d.ts +10 -8
- package/lib/components/BaseRepository.js +28 -13
- package/lib/components/DataObject.d.ts +13 -2
- package/lib/components/DataObject.js +52 -10
- package/lib/components/Entity.d.ts +4 -21
- package/lib/components/Entity.js +34 -32
- package/lib/components/EntityRepository.d.ts +3 -3
- package/lib/components/EntityRepository.js +1 -1
- package/lib/components/ObjectUri.js +5 -3
- package/lib/components/User.d.ts +4 -5
- package/lib/components/User.js +19 -10
- package/lib/components/UserRepository.d.ts +4 -4
- package/lib/components/UserRepository.js +2 -2
- package/lib/components/index.d.ts +2 -2
- package/lib/components/index.js +4 -2
- package/lib/components/types/DataObjectClass.d.ts +6 -1
- package/lib/components/types/RepositoryClass.d.ts +1 -1
- package/lib/components/types/toJSONParams.d.ts +8 -0
- package/lib/components/types/toJSONParams.js +2 -0
- package/lib/index.d.ts +9 -4
- package/lib/index.js +16 -1
- package/lib/properties/ArrayProperty.d.ts +1 -1
- package/lib/properties/ArrayProperty.js +2 -2
- package/lib/properties/BaseProperty.d.ts +4 -1
- package/lib/properties/BaseProperty.js +15 -3
- package/lib/properties/BooleanProperty.d.ts +1 -1
- package/lib/properties/BooleanProperty.js +2 -2
- package/lib/properties/CollectionProperty.d.ts +3 -3
- package/lib/properties/CollectionProperty.js +4 -3
- package/lib/properties/DateTimeProperty.d.ts +1 -1
- package/lib/properties/DateTimeProperty.js +2 -2
- package/lib/properties/EnumProperty.d.ts +1 -1
- package/lib/properties/EnumProperty.js +2 -2
- package/lib/properties/HashProperty.d.ts +7 -1
- package/lib/properties/HashProperty.js +10 -2
- package/lib/properties/MapProperty.d.ts +1 -1
- package/lib/properties/MapProperty.js +2 -2
- package/lib/properties/NumberProperty.d.ts +1 -1
- package/lib/properties/NumberProperty.js +2 -2
- package/lib/properties/ObjectProperty.d.ts +1 -1
- package/lib/properties/ObjectProperty.js +5 -6
- package/lib/properties/StringProperty.d.ts +1 -1
- package/lib/properties/StringProperty.js +2 -2
- package/lib/properties/types/AbstractPropertyType.d.ts +1 -0
- package/lib/properties/types/PropertyClassType.d.ts +4 -1
- package/lib/utils/DataGenerator.d.ts +2 -3
- package/lib/utils/DataGenerator.js +2 -1
- package/lib/wrappers/cloud/AbstractCloudWrapper.d.ts +4 -0
- package/lib/wrappers/cloud/AbstractCloudWrapper.js +9 -0
- package/package.json +2 -2
- package/README.md +0 -124
- package/lib/components/BaseObjectProperties.d.ts +0 -13
- package/lib/components/BaseObjectProperties.js +0 -87
- package/lib/components/EntityProperties.d.ts +0 -1
- package/lib/components/EntityProperties.js +0 -54
- package/lib/components/UserProperties.d.ts +0 -1
- package/lib/components/UserProperties.js +0 -103
- package/lib/components/types/UserClass.d.ts +0 -3
- /package/lib/{components/types/UserClass.js → authentication/middlewares/AuthMiddleware.js} +0 -0
package/lib/backends/index.d.ts
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import { AbstractAdapter
|
|
1
|
+
import { AbstractAdapter } from './AbstractAdapter';
|
|
2
2
|
import { MockAdapter } from './MockAdapter';
|
|
3
3
|
import { BackendError } from './BackendError';
|
|
4
|
-
import {
|
|
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 {
|
|
12
|
+
export { BackendInterface, AbstractAdapter, BackendError, MockAdapter, Query, QueryResultType, QueryMetaType, Filter, Filters, Sorting, Limits, SortAndLimit, CollectionHierarchy, };
|
package/lib/backends/index.js
CHANGED
|
@@ -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 {
|
|
4
|
-
import
|
|
3
|
+
import { User } from '../../components/User';
|
|
4
|
+
import BackendMiddleware from './Middleware';
|
|
5
|
+
import { MiddlewareParams } from './types/MiddlewareParams';
|
|
5
6
|
export interface InjectMetaMiddlewareParams {
|
|
6
|
-
user:
|
|
7
|
+
user: User;
|
|
7
8
|
}
|
|
8
|
-
export declare class InjectMetaMiddleware implements
|
|
9
|
-
protected _user:
|
|
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',
|
|
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',
|
|
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',
|
|
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
|
|
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,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
|
+
}
|
package/lib/common/statuses.d.ts
CHANGED
|
@@ -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";
|
package/lib/common/statuses.js
CHANGED
|
@@ -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;
|
|
@@ -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
|
-
|
|
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({
|
|
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;
|
|
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
|
-
|
|
151
|
-
|
|
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 {
|
|
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 {
|
|
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:
|
|
21
|
-
|
|
22
|
-
|
|
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);
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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(
|
|
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>>;
|