@quatrain/core 0.5.6 → 1.0.0-beta10
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 -9
- package/lib/Core.d.ts +11 -7
- package/lib/Core.js +13 -3
- 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/AuthMiddleware.js +2 -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 +20 -45
- 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 +29 -13
- package/lib/backends/Query.js +22 -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 +6 -6
- package/lib/backends/middlewares/InjectMetaMiddleware.js +10 -7
- 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 +3 -0
- package/lib/common/statuses.js +4 -1
- package/lib/components/AbstractObject.d.ts +9 -1
- package/lib/components/AbstractObject.js +9 -0
- package/lib/components/BaseObject.d.ts +3 -3
- package/lib/components/BaseObject.js +3 -0
- package/lib/components/BaseObjectCore.d.ts +16 -3
- package/lib/components/BaseObjectCore.js +21 -5
- package/lib/components/BaseRepository.d.ts +14 -13
- package/lib/components/BaseRepository.js +37 -21
- package/lib/components/DataObject.d.ts +20 -3
- package/lib/components/DataObject.js +73 -13
- 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 +2 -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 +3 -2
- package/lib/components/index.js +9 -2
- package/lib/components/types/DataObjectClass.d.ts +7 -1
- package/lib/components/types/RepositoryClass.d.ts +2 -2
- package/lib/components/types/toJSONParams.d.ts +8 -0
- package/lib/components/types/toJSONParams.js +2 -0
- package/lib/index.d.ts +10 -5
- package/lib/index.js +17 -2
- 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 +6 -6
- package/lib/properties/ObjectProperty.js +57 -5
- package/lib/properties/Property.d.ts +9 -2
- package/lib/properties/StringProperty.d.ts +2 -2
- 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 +3 -2
- package/README.md +0 -124
package/lib/backends/Query.js
CHANGED
|
@@ -23,18 +23,30 @@ var returnAs;
|
|
|
23
23
|
returnAs["AS_OBJECTURIS"] = "objectUris";
|
|
24
24
|
returnAs["AS_DATAOBJECTS"] = "dataObjects";
|
|
25
25
|
returnAs["AS_INSTANCES"] = "classInstances";
|
|
26
|
+
returnAs["AS_IS"] = "asIs";
|
|
26
27
|
})(returnAs || (exports.returnAs = returnAs = {}));
|
|
27
28
|
class Query {
|
|
28
|
-
constructor(obj,
|
|
29
|
+
constructor(obj, parent) {
|
|
29
30
|
this._obj = obj;
|
|
30
|
-
this.
|
|
31
|
+
this._parent = parent;
|
|
31
32
|
this.filters = [];
|
|
32
33
|
this.sortings = [];
|
|
33
34
|
this.limits = new Limits_1.Limits();
|
|
35
|
+
this.meta = {};
|
|
34
36
|
}
|
|
35
37
|
get obj() {
|
|
36
38
|
return this._obj;
|
|
37
39
|
}
|
|
40
|
+
get parent() {
|
|
41
|
+
return this._parent;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Declare query parent record
|
|
45
|
+
* This may be need in some NoSQL backend to query subcollections
|
|
46
|
+
*/
|
|
47
|
+
set parent(parent) {
|
|
48
|
+
this._parent = parent;
|
|
49
|
+
}
|
|
38
50
|
where(param, value = null, operator = 'equals') {
|
|
39
51
|
if (typeof param == 'object') {
|
|
40
52
|
this.filters.push(param);
|
|
@@ -42,7 +54,7 @@ class Query {
|
|
|
42
54
|
else {
|
|
43
55
|
if (operator === 'equals' && Array.isArray(value)) {
|
|
44
56
|
// auto-convert operator if value is an array
|
|
45
|
-
operator = '
|
|
57
|
+
operator = 'contains'; // Any'
|
|
46
58
|
}
|
|
47
59
|
this.filters.push(new Filter_1.Filter(param, value, operator));
|
|
48
60
|
}
|
|
@@ -79,22 +91,23 @@ class Query {
|
|
|
79
91
|
}
|
|
80
92
|
fetchAsUri(backend = Core_1.Core.getBackend()) {
|
|
81
93
|
return __awaiter(this, void 0, void 0, function* () {
|
|
82
|
-
const
|
|
83
|
-
return yield Promise.all(
|
|
94
|
+
const { items, meta } = yield this.fetch(backend);
|
|
95
|
+
return { items: yield Promise.all(items.map((dao) => dao.uri)), meta };
|
|
84
96
|
});
|
|
85
97
|
}
|
|
86
98
|
fetchAsInstances(backend = Core_1.Core.getBackend()) {
|
|
87
99
|
return __awaiter(this, void 0, void 0, function* () {
|
|
88
|
-
const
|
|
100
|
+
const { items, meta } = yield this.fetch(backend);
|
|
89
101
|
const instances = [];
|
|
90
|
-
for (const item of
|
|
102
|
+
for (const item of items) {
|
|
91
103
|
instances.push(this._obj.fromDataObject(item));
|
|
92
104
|
}
|
|
93
|
-
return instances;
|
|
105
|
+
return { items: instances, meta };
|
|
94
106
|
});
|
|
95
107
|
}
|
|
96
|
-
execute(as = returnAs.AS_DATAOBJECTS, backend = Core_1.Core.getBackend()) {
|
|
108
|
+
execute(as = returnAs.AS_DATAOBJECTS, backend = Core_1.Core.getBackend(this._obj.DEFAULT_BACKEND)) {
|
|
97
109
|
return __awaiter(this, void 0, void 0, function* () {
|
|
110
|
+
//<DataObjectClass<any>[] | ObjectUri[] | Persisted<BaseObject>[]> {
|
|
98
111
|
//</any><Array<T2> | Array<DataObject> | Array<ObjectUri>> {
|
|
99
112
|
try {
|
|
100
113
|
switch (as) {
|
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,13 +1,13 @@
|
|
|
1
1
|
import { DataObjectClass } from '../../components';
|
|
2
2
|
import { BackendAction } from '../../Backend';
|
|
3
3
|
import { User } from '../../components/User';
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
4
|
+
import BackendMiddleware from './Middleware';
|
|
5
|
+
import { MiddlewareParams } from './types/MiddlewareParams';
|
|
6
6
|
export interface InjectMetaMiddlewareParams {
|
|
7
|
-
user:
|
|
7
|
+
user: User;
|
|
8
8
|
}
|
|
9
|
-
export declare class InjectMetaMiddleware implements
|
|
10
|
-
protected _user:
|
|
9
|
+
export declare class InjectMetaMiddleware implements BackendMiddleware {
|
|
10
|
+
protected _user: User;
|
|
11
11
|
constructor(params: InjectMetaMiddlewareParams);
|
|
12
|
-
execute(dataObject: DataObjectClass<any>, action: BackendAction): void;
|
|
12
|
+
execute(dataObject: DataObjectClass<any>, action: BackendAction, params?: MiddlewareParams): void;
|
|
13
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
|
-
dataObject.set('createdBy', this._user
|
|
14
|
-
dataObject.set('createdAt',
|
|
16
|
+
dataObject.set('createdBy', this._user);
|
|
17
|
+
dataObject.set('createdAt', date);
|
|
15
18
|
break;
|
|
16
19
|
case Backend_1.BackendAction.UPDATE:
|
|
17
|
-
dataObject.set('updatedBy', this._user
|
|
18
|
-
dataObject.set('updatedAt',
|
|
20
|
+
dataObject.set('updatedBy', this._user);
|
|
21
|
+
dataObject.set('updatedAt', date);
|
|
19
22
|
break;
|
|
20
23
|
case Backend_1.BackendAction.DELETE:
|
|
21
|
-
dataObject.set('deletedBy', this._user
|
|
22
|
-
dataObject.set('deletedAt',
|
|
24
|
+
dataObject.set('deletedBy', this._user);
|
|
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
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
export declare const CREATED = "created";
|
|
2
2
|
export declare const PENDING = "pending";
|
|
3
|
+
export declare const QUEUED = "queued";
|
|
3
4
|
export declare const ACTIVE = "active";
|
|
5
|
+
export declare const COMPLETED = "completed";
|
|
4
6
|
export declare const ERROR = "error";
|
|
5
7
|
export declare const TEST = "test";
|
|
6
8
|
export declare const SUSPENDED = "suspended";
|
|
7
9
|
export declare const DELETABLE = "deletable";
|
|
8
10
|
export declare const DELETED = "deleted";
|
|
11
|
+
export declare const DISABLED = "disabled";
|
|
9
12
|
export declare const DONE = "done";
|
|
10
13
|
export declare const MAINTENANCE = "maintenance";
|
|
11
14
|
export declare const UNKNOWN = "unknown";
|
package/lib/common/statuses.js
CHANGED
|
@@ -1,14 +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.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
|
+
exports.QUEUED = 'queued';
|
|
6
7
|
exports.ACTIVE = 'active';
|
|
8
|
+
exports.COMPLETED = 'completed';
|
|
7
9
|
exports.ERROR = 'error';
|
|
8
10
|
exports.TEST = 'test';
|
|
9
11
|
exports.SUSPENDED = 'suspended';
|
|
10
12
|
exports.DELETABLE = 'deletable';
|
|
11
13
|
exports.DELETED = 'deleted';
|
|
14
|
+
exports.DISABLED = 'disabled';
|
|
12
15
|
exports.DONE = 'done';
|
|
13
16
|
exports.MAINTENANCE = 'maintenance';
|
|
14
17
|
exports.UNKNOWN = 'unknown';
|
|
@@ -1,11 +1,18 @@
|
|
|
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>);
|
|
11
|
+
/**
|
|
12
|
+
* Return property object matching key
|
|
13
|
+
* @param key string
|
|
14
|
+
* @returns
|
|
15
|
+
*/
|
|
9
16
|
get(key: string): any;
|
|
10
17
|
set(key: string, val: any): any;
|
|
11
18
|
val(key: string): any;
|
|
@@ -13,6 +20,7 @@ export declare abstract class AbstractObject {
|
|
|
13
20
|
get path(): string;
|
|
14
21
|
get uid(): any;
|
|
15
22
|
get dataObject(): DataObjectClass<any>;
|
|
23
|
+
get _(): any;
|
|
16
24
|
get uri(): import("./ObjectUri").ObjectUri;
|
|
17
25
|
toJSON(): {
|
|
18
26
|
backend: string;
|
|
@@ -14,6 +14,11 @@ class AbstractObject {
|
|
|
14
14
|
constructor(dao) {
|
|
15
15
|
this._dataObject = dao;
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Return property object matching key
|
|
19
|
+
* @param key string
|
|
20
|
+
* @returns
|
|
21
|
+
*/
|
|
17
22
|
get(key) {
|
|
18
23
|
return this._dataObject.get(key);
|
|
19
24
|
}
|
|
@@ -41,6 +46,9 @@ class AbstractObject {
|
|
|
41
46
|
get dataObject() {
|
|
42
47
|
return this._dataObject;
|
|
43
48
|
}
|
|
49
|
+
get _() {
|
|
50
|
+
return this._dataObject.asProxy();
|
|
51
|
+
}
|
|
44
52
|
get uri() {
|
|
45
53
|
return this._dataObject.uri;
|
|
46
54
|
}
|
|
@@ -62,5 +70,6 @@ class AbstractObject {
|
|
|
62
70
|
}
|
|
63
71
|
exports.AbstractObject = AbstractObject;
|
|
64
72
|
AbstractObject.PROPS_DEFINITION = [];
|
|
73
|
+
AbstractObject.DEFAULT_BACKEND = 'default';
|
|
65
74
|
// Which property's value to use in backend as label for object reference
|
|
66
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
|
{
|
|
@@ -51,6 +52,8 @@ exports.BaseObjectProperties = [
|
|
|
51
52
|
],
|
|
52
53
|
defaultValue: statuses.CREATED,
|
|
53
54
|
},
|
|
55
|
+
// the following properties may be optionally
|
|
56
|
+
// populated with a backend middleware
|
|
54
57
|
{
|
|
55
58
|
name: 'createdBy',
|
|
56
59
|
type: ObjectProperty_1.ObjectProperty.TYPE,
|
|
@@ -39,7 +39,7 @@ export declare class BaseObjectCore extends AbstractObject implements BaseObject
|
|
|
39
39
|
* @param child
|
|
40
40
|
* @returns
|
|
41
41
|
*/
|
|
42
|
-
static fromObject<T extends BaseObject>(src: T, child?: any):
|
|
42
|
+
static fromObject<T extends BaseObject>(src: T, child?: any): any;
|
|
43
43
|
static factory(src?: string | ObjectUri | BaseObject | undefined, child?: any): Promise<any>;
|
|
44
44
|
/**
|
|
45
45
|
* Fetches an object from its backend path
|
|
@@ -52,9 +52,22 @@ export declare class BaseObjectCore extends AbstractObject implements BaseObject
|
|
|
52
52
|
* @param dao
|
|
53
53
|
* @returns
|
|
54
54
|
*/
|
|
55
|
-
static fromDataObject<T extends BaseObject>(dao: DataObjectClass<any>):
|
|
55
|
+
static fromDataObject<T extends BaseObject>(dao: DataObjectClass<any>): any;
|
|
56
|
+
/**
|
|
57
|
+
* Wrap instance into proxy to get access to properties
|
|
58
|
+
* @returns Proxy
|
|
59
|
+
*/
|
|
56
60
|
protected toProxy<T extends BaseObject>(): Proxy<Proxy<T>>;
|
|
57
61
|
asReference(): any;
|
|
58
|
-
|
|
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
|
+
*/
|
|
59
72
|
static query(): Query<typeof BaseObjectCore>;
|
|
60
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* () {
|
|
@@ -100,8 +103,12 @@ class BaseObjectCore extends AbstractObject_1.AbstractObject {
|
|
|
100
103
|
*/
|
|
101
104
|
static fromDataObject(dao) {
|
|
102
105
|
const obj = new this(dao);
|
|
103
|
-
return obj
|
|
106
|
+
return obj; //.toProxy()
|
|
104
107
|
}
|
|
108
|
+
/**
|
|
109
|
+
* Wrap instance into proxy to get access to properties
|
|
110
|
+
* @returns Proxy
|
|
111
|
+
*/
|
|
105
112
|
toProxy() {
|
|
106
113
|
return new ProxyConstructor_1.ProxyConstructor(this, {
|
|
107
114
|
get: (target, prop) => {
|
|
@@ -142,9 +149,18 @@ class BaseObjectCore extends AbstractObject_1.AbstractObject {
|
|
|
142
149
|
asReference() {
|
|
143
150
|
return this._dataObject.toReference();
|
|
144
151
|
}
|
|
145
|
-
|
|
146
|
-
|
|
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);
|
|
147
159
|
}
|
|
160
|
+
/**
|
|
161
|
+
* Create a query based on current class
|
|
162
|
+
* @returns Query
|
|
163
|
+
*/
|
|
148
164
|
static query() {
|
|
149
165
|
return new Query_1.Query(this);
|
|
150
166
|
}
|
|
@@ -1,24 +1,25 @@
|
|
|
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
|
-
import RepositoryClass from './types/RepositoryClass';
|
|
7
4
|
import { BaseObject } from './BaseObject';
|
|
8
|
-
import {
|
|
9
|
-
import { Proxy } from './types/ProxyConstructor';
|
|
5
|
+
import { BackendInterface } from '../backends/types/BackendInterface';
|
|
10
6
|
/**
|
|
11
7
|
* CRUD methods for models/entities inheriting from BaseObject
|
|
12
8
|
* Extend this by passing the typeof of the desired class to the constructor
|
|
13
9
|
*/
|
|
14
|
-
export default class BaseRepository<T extends BaseObject>
|
|
15
|
-
protected
|
|
10
|
+
export default class BaseRepository<T extends BaseObject> {
|
|
11
|
+
protected _model: typeof BaseObjectCore;
|
|
16
12
|
backendAdapter: BackendInterface;
|
|
17
13
|
constructor(model: typeof BaseObjectCore, backendAdapter?: BackendInterface);
|
|
18
14
|
protected getDataObjectFromUid(uid: string): Promise<DataObjectClass<any>>;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
15
|
+
protected getDataObjectFromPath(path: string): Promise<DataObjectClass<any>>;
|
|
16
|
+
create<B extends BaseObjectCore>(obj: B, uid?: string): Promise<any>;
|
|
17
|
+
read(key: string): Promise<any>;
|
|
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>>;
|
|
24
25
|
}
|
|
@@ -43,34 +43,53 @@ const RESOURCE_GONE_ERROR = `The resource you are trying to access has been dele
|
|
|
43
43
|
*/
|
|
44
44
|
class BaseRepository {
|
|
45
45
|
constructor(model, backendAdapter = Core_1.Core.getBackend()) {
|
|
46
|
-
this.
|
|
46
|
+
this._model = model;
|
|
47
47
|
this.backendAdapter = backendAdapter;
|
|
48
48
|
}
|
|
49
49
|
getDataObjectFromUid(uid) {
|
|
50
50
|
return __awaiter(this, void 0, void 0, function* () {
|
|
51
|
-
const collection = this.
|
|
51
|
+
const collection = this._model.COLLECTION || this._model.name.toLowerCase();
|
|
52
52
|
const path = `${collection}/${uid}`;
|
|
53
|
-
const dataObject =
|
|
54
|
-
properties: this.
|
|
53
|
+
const dataObject = DataObject_1.DataObject.factory({
|
|
54
|
+
properties: this._model.PROPS_DEFINITION,
|
|
55
55
|
uri: path,
|
|
56
56
|
});
|
|
57
57
|
dataObject.uid = uid;
|
|
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
|
-
const
|
|
64
|
-
|
|
65
|
-
return this.model.fromDataObject(savedObj);
|
|
73
|
+
const savedObj = yield this.backendAdapter.create(obj.dataObject, uid);
|
|
74
|
+
return this._model.fromDataObject(savedObj);
|
|
66
75
|
});
|
|
67
76
|
}
|
|
68
|
-
read(
|
|
77
|
+
read(key) {
|
|
69
78
|
return __awaiter(this, void 0, void 0, function* () {
|
|
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
|
-
const obj = this.
|
|
91
|
+
const obj = this._model.fromDataObject(response);
|
|
92
|
+
// TODO should be moved to the backend middleware
|
|
74
93
|
if (obj.status === statuses.DELETED) {
|
|
75
94
|
throw new ResourcesErrors_1.GoneError(RESOURCE_GONE_ERROR);
|
|
76
95
|
}
|
|
@@ -89,27 +108,24 @@ class BaseRepository {
|
|
|
89
108
|
}
|
|
90
109
|
update(obj) {
|
|
91
110
|
return __awaiter(this, void 0, void 0, function* () {
|
|
92
|
-
const dataObject = obj.
|
|
111
|
+
const dataObject = obj.dataObject;
|
|
93
112
|
const savedObj = yield this.backendAdapter.update(dataObject);
|
|
94
|
-
return this.
|
|
113
|
+
return this._model.fromDataObject(savedObj);
|
|
95
114
|
});
|
|
96
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* delete object in its backend
|
|
118
|
+
* @param uid string
|
|
119
|
+
*/
|
|
97
120
|
delete(uid) {
|
|
98
121
|
return __awaiter(this, void 0, void 0, function* () {
|
|
99
122
|
const dataObject = yield this.getDataObjectFromUid(uid);
|
|
100
|
-
yield this.backendAdapter.delete(dataObject);
|
|
123
|
+
return yield this.backendAdapter.delete(dataObject);
|
|
101
124
|
});
|
|
102
125
|
}
|
|
103
126
|
query(query) {
|
|
104
127
|
return __awaiter(this, void 0, void 0, function* () {
|
|
105
|
-
|
|
106
|
-
const count = yield this.backendAdapter.count(query);
|
|
107
|
-
const meta = {
|
|
108
|
-
count,
|
|
109
|
-
updatedAt: new Date().getTime(),
|
|
110
|
-
};
|
|
111
|
-
const payload = { items, meta };
|
|
112
|
-
return payload;
|
|
128
|
+
return yield query.fetchAsInstances(this.backendAdapter);
|
|
113
129
|
});
|
|
114
130
|
}
|
|
115
131
|
}
|