@quatrain/core 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/Backend.d.ts +5 -0
- package/lib/Backend.js +7 -0
- package/lib/Core.d.ts +23 -3
- package/lib/Core.js +24 -5
- package/lib/backends/AbstractAdapter.d.ts +29 -13
- package/lib/backends/AbstractAdapter.js +31 -3
- package/lib/backends/Filter.d.ts +5 -3
- package/lib/backends/Filter.js +1 -1
- package/lib/backends/MockAdapter.d.ts +11 -12
- package/lib/backends/MockAdapter.js +126 -35
- package/lib/backends/NotFoundError.d.ts +2 -0
- package/lib/backends/NotFoundError.js +6 -0
- package/lib/backends/Query.d.ts +11 -3
- package/lib/backends/Query.js +30 -4
- package/lib/backends/middlewares/AbstractMiddleware.d.ts +0 -0
- package/lib/backends/middlewares/AbstractMiddleware.js +1 -0
- package/lib/backends/middlewares/InjectMetaMiddleware.d.ts +11 -0
- package/lib/backends/middlewares/InjectMetaMiddleware.js +50 -0
- package/lib/components/AbstractObject.d.ts +13 -10
- package/lib/components/AbstractObject.js +11 -2
- package/lib/components/BaseObject.d.ts +10 -11
- package/lib/components/BaseObject.js +42 -33
- package/lib/components/BaseObjectProperties.d.ts +6 -8
- package/lib/components/BaseObjectProperties.js +14 -9
- package/lib/components/DataObject.d.ts +25 -18
- package/lib/components/DataObject.js +63 -33
- package/lib/components/Entity.d.ts +6 -0
- package/lib/components/Entity.js +26 -0
- package/lib/components/EntityProperties.d.ts +1 -0
- package/lib/components/EntityProperties.js +47 -0
- package/lib/components/ObjectUri.d.ts +5 -2
- package/lib/components/ObjectUri.js +23 -8
- package/lib/components/User.d.ts +6 -4
- package/lib/components/User.js +78 -8
- package/lib/components/UserProperties.d.ts +1 -0
- package/lib/components/UserProperties.js +103 -0
- package/lib/components/index.d.ts +6 -3
- package/lib/components/index.js +5 -2
- package/lib/components/types/AbstractObjectClass.d.ts +6 -0
- package/lib/components/types/AbstractObjectClass.js +2 -0
- package/lib/components/types/BaseObjectClass.d.ts +6 -0
- package/lib/components/types/BaseObjectClass.js +2 -0
- package/lib/components/types/DataObjectClass.d.ts +23 -0
- package/lib/components/types/DataObjectClass.js +2 -0
- package/lib/components/types/EntityClass.d.ts +3 -0
- package/lib/components/types/EntityClass.js +2 -0
- package/lib/components/types/UserClass.d.ts +3 -0
- package/lib/components/types/UserClass.js +2 -0
- package/lib/index.d.ts +5 -1
- package/lib/index.js +7 -1
- package/lib/properties/ArrayProperty.d.ts +1 -0
- package/lib/properties/ArrayProperty.js +6 -5
- package/lib/properties/BaseProperty.d.ts +10 -4
- package/lib/properties/BaseProperty.js +11 -1
- package/lib/properties/BooleanProperty.d.ts +2 -1
- package/lib/properties/BooleanProperty.js +3 -2
- package/lib/properties/CollectionProperty.d.ts +32 -0
- package/lib/properties/CollectionProperty.js +63 -0
- package/lib/properties/DateTimeProperty.d.ts +1 -0
- package/lib/properties/DateTimeProperty.js +1 -0
- package/lib/properties/EnumProperty.d.ts +2 -0
- package/lib/properties/EnumProperty.js +5 -1
- package/lib/properties/HashProperty.d.ts +1 -0
- package/lib/properties/HashProperty.js +1 -0
- package/lib/properties/MapProperty.d.ts +8 -0
- package/lib/properties/MapProperty.js +17 -0
- package/lib/properties/NumberProperty.d.ts +1 -0
- package/lib/properties/NumberProperty.js +1 -0
- package/lib/properties/ObjectProperty.d.ts +4 -7
- package/lib/properties/ObjectProperty.js +4 -1
- package/lib/properties/Property.d.ts +3 -7
- package/lib/properties/Property.js +13 -15
- package/lib/properties/StringProperty.d.ts +10 -0
- package/lib/properties/StringProperty.js +42 -21
- package/lib/properties/index.d.ts +4 -2
- package/lib/properties/index.js +5 -1
- package/lib/properties/types/PropertyClassType.d.ts +4 -2
- package/lib/properties/types/PropertyHTMLType.d.ts +10 -0
- package/lib/properties/types/PropertyHTMLType.js +14 -0
- package/lib/properties/types/PropertyTypes.d.ts +4 -1
- package/lib/utils/DataGenerator.d.ts +9 -0
- package/lib/utils/DataGenerator.js +98 -0
- package/lib/utils/index.d.ts +2 -0
- package/lib/utils/index.js +5 -0
- package/package.json +3 -1
|
@@ -0,0 +1,50 @@
|
|
|
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
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.InjectMetaMiddleware = void 0;
|
|
27
|
+
const actions = __importStar(require("../../Backend"));
|
|
28
|
+
class InjectMetaMiddleware {
|
|
29
|
+
constructor(params) {
|
|
30
|
+
this._user = params.user;
|
|
31
|
+
}
|
|
32
|
+
execute(dataObject, action) {
|
|
33
|
+
switch (action) {
|
|
34
|
+
// add properties existence validation
|
|
35
|
+
case actions.CREATE:
|
|
36
|
+
dataObject.set('createdBy', this._user);
|
|
37
|
+
dataObject.set('createdAt', Date.now());
|
|
38
|
+
case actions.UPDATE:
|
|
39
|
+
dataObject.set('updatedBy', this._user);
|
|
40
|
+
dataObject.set('updatedAt', Date.now());
|
|
41
|
+
case actions.DELETE:
|
|
42
|
+
dataObject.set('deletedBy', this._user);
|
|
43
|
+
dataObject.set('deleteddAt', Date.now());
|
|
44
|
+
default:
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.InjectMetaMiddleware = InjectMetaMiddleware;
|
|
@@ -1,23 +1,26 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DataObjectClass } from './types/DataObjectClass';
|
|
2
2
|
import { DataObjectProperties } from '../properties/';
|
|
3
|
+
import { Query } from '../backends/Query';
|
|
3
4
|
export declare abstract class AbstractObject {
|
|
4
5
|
static PROPS_DEFINITION: DataObjectProperties;
|
|
5
6
|
static COLLECTION: string;
|
|
6
7
|
static LABEL_KEY: string;
|
|
7
|
-
protected _dataObject:
|
|
8
|
-
constructor(dao:
|
|
8
|
+
protected _dataObject: DataObjectClass<any>;
|
|
9
|
+
constructor(dao: DataObjectClass<any>);
|
|
9
10
|
get(key: string): any;
|
|
10
|
-
set(key: string, val: any):
|
|
11
|
+
set(key: string, val: any): any;
|
|
11
12
|
val(key: string): any;
|
|
12
|
-
get backend():
|
|
13
|
+
get backend(): any;
|
|
13
14
|
get path(): string;
|
|
14
|
-
get uid():
|
|
15
|
-
get dataObject():
|
|
15
|
+
get uid(): any;
|
|
16
|
+
get dataObject(): DataObjectClass<any>;
|
|
16
17
|
get uri(): import("./ObjectUri").ObjectUri;
|
|
17
18
|
toJSON(): {
|
|
18
|
-
|
|
19
|
+
backend: string;
|
|
19
20
|
ref: string;
|
|
20
|
-
label: string
|
|
21
|
+
label: string;
|
|
21
22
|
};
|
|
22
|
-
save(
|
|
23
|
+
save(): Promise<DataObjectClass<any>>;
|
|
24
|
+
delete(): Promise<DataObjectClass<any>>;
|
|
25
|
+
static query(): Query<typeof AbstractObject>;
|
|
23
26
|
}
|
|
@@ -11,6 +11,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
11
11
|
var _a;
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
13
|
exports.AbstractObject = void 0;
|
|
14
|
+
const Query_1 = require("../backends/Query");
|
|
14
15
|
class AbstractObject {
|
|
15
16
|
constructor(dao) {
|
|
16
17
|
this._dataObject = dao;
|
|
@@ -49,11 +50,19 @@ class AbstractObject {
|
|
|
49
50
|
var _b;
|
|
50
51
|
return typeof this.uri === 'string' ? this.uri : (_b = this.uri) === null || _b === void 0 ? void 0 : _b.toJSON();
|
|
51
52
|
}
|
|
52
|
-
save(
|
|
53
|
+
save() {
|
|
53
54
|
return __awaiter(this, void 0, void 0, function* () {
|
|
54
|
-
return yield this._dataObject.save(
|
|
55
|
+
return yield this._dataObject.save();
|
|
55
56
|
});
|
|
56
57
|
}
|
|
58
|
+
delete() {
|
|
59
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
60
|
+
return yield this._dataObject.delete();
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
static query() {
|
|
64
|
+
return new Query_1.Query(this);
|
|
65
|
+
}
|
|
57
66
|
}
|
|
58
67
|
exports.AbstractObject = AbstractObject;
|
|
59
68
|
_a = AbstractObject;
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import { ObjectUri } from './ObjectUri';
|
|
2
|
+
import { DataObjectClass } from './types/DataObjectClass';
|
|
3
|
+
import { BaseObjectClass } from './types/BaseObjectClass';
|
|
2
4
|
import { AbstractObject } from './AbstractObject';
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
static
|
|
5
|
+
import { Query } from '../backends/Query';
|
|
6
|
+
export declare class BaseObject extends AbstractObject implements BaseObjectClass {
|
|
7
|
+
static PROPS_DEFINITION: any;
|
|
8
|
+
static getProperty(key: string): any;
|
|
7
9
|
get status(): string;
|
|
8
10
|
set status(status: string);
|
|
9
|
-
static
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
uri: string;
|
|
14
|
-
};
|
|
15
|
-
query(): Query<this>;
|
|
11
|
+
static daoFactory(src?: string | ObjectUri | DataObjectClass<any> | undefined, child?: any): Promise<DataObjectClass<any>>;
|
|
12
|
+
static factory<T extends BaseObject>(src?: string | ObjectUri | DataObjectClass<any> | undefined, child?: any): Promise<T | BaseObject>;
|
|
13
|
+
asReference(): any;
|
|
14
|
+
query(): Query<any>;
|
|
16
15
|
}
|
|
@@ -10,51 +10,60 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.BaseObject = void 0;
|
|
13
|
-
const DataObject_1 = require("./DataObject");
|
|
14
13
|
const ObjectUri_1 = require("./ObjectUri");
|
|
15
14
|
const AbstractObject_1 = require("./AbstractObject");
|
|
16
15
|
const BaseObjectProperties_1 = require("./BaseObjectProperties");
|
|
17
|
-
const
|
|
16
|
+
const Query_1 = require("../backends/Query");
|
|
17
|
+
const DataObject_1 = require("./DataObject");
|
|
18
18
|
class BaseObject extends AbstractObject_1.AbstractObject {
|
|
19
|
+
static getProperty(key) {
|
|
20
|
+
return BaseObject.PROPS_DEFINITION.find((prop) => prop.name === key);
|
|
21
|
+
}
|
|
19
22
|
get status() {
|
|
20
23
|
return this._dataObject.val('status');
|
|
21
24
|
}
|
|
22
25
|
set status(status) {
|
|
23
26
|
this._dataObject.set('status', status);
|
|
24
27
|
}
|
|
25
|
-
static
|
|
28
|
+
static daoFactory(src = undefined, child = this) {
|
|
26
29
|
return __awaiter(this, void 0, void 0, function* () {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
base[found] = Object.assign(base[found], property);
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
base.push(property);
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
//console.log('props to add', JSON.stringify(base))
|
|
42
|
-
// create data object
|
|
43
|
-
const dao = yield DataObject_1.DataObject.factory(this.prototype, base);
|
|
44
|
-
if (src instanceof ObjectUri_1.ObjectUri) {
|
|
45
|
-
dao.uri = src;
|
|
46
|
-
yield dao.populate();
|
|
47
|
-
}
|
|
48
|
-
else if (typeof src === 'string') {
|
|
49
|
-
dao.uri.path = src;
|
|
50
|
-
yield dao.populate();
|
|
30
|
+
// merge base properties with additional or redefined ones
|
|
31
|
+
const base = BaseObjectProperties_1.BaseObjectProperties;
|
|
32
|
+
// this.PROPS_DEFINITION &&
|
|
33
|
+
this.PROPS_DEFINITION.forEach((property) => {
|
|
34
|
+
// manage parent properties potential redeclaration
|
|
35
|
+
const found = base.findIndex((el) => el.name === property.name);
|
|
36
|
+
if (found !== -1) {
|
|
37
|
+
base[found] = Object.assign(base[found], property);
|
|
51
38
|
}
|
|
52
|
-
else
|
|
53
|
-
|
|
54
|
-
dao.uri.collection = this.COLLECTION;
|
|
55
|
-
yield dao.populate(src);
|
|
39
|
+
else {
|
|
40
|
+
base.push(property);
|
|
56
41
|
}
|
|
57
|
-
|
|
42
|
+
});
|
|
43
|
+
// create data object
|
|
44
|
+
const dao = yield DataObject_1.DataObject.factory({ properties: base });
|
|
45
|
+
dao.uri.class = child;
|
|
46
|
+
if (src instanceof ObjectUri_1.ObjectUri) {
|
|
47
|
+
dao.uri = src;
|
|
48
|
+
yield dao.read();
|
|
49
|
+
}
|
|
50
|
+
else if (typeof src === 'string') {
|
|
51
|
+
dao.uri.path = src;
|
|
52
|
+
yield dao.read();
|
|
53
|
+
}
|
|
54
|
+
else if (src instanceof Object) {
|
|
55
|
+
dao.uri = new ObjectUri_1.ObjectUri(`${this.COLLECTION}${ObjectUri_1.ObjectUri.DEFAULT}`, Reflect.get(src, 'name'));
|
|
56
|
+
dao.uri.collection = this.COLLECTION;
|
|
57
|
+
yield dao.populate(src);
|
|
58
|
+
}
|
|
59
|
+
return dao;
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
static factory(src = undefined, child = this) {
|
|
63
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
64
|
+
try {
|
|
65
|
+
const dao = yield this.daoFactory(src, child);
|
|
66
|
+
return Reflect.construct(this, [dao]);
|
|
58
67
|
}
|
|
59
68
|
catch (err) {
|
|
60
69
|
console.log(err.message);
|
|
@@ -66,7 +75,7 @@ class BaseObject extends AbstractObject_1.AbstractObject {
|
|
|
66
75
|
return this._dataObject.toReference();
|
|
67
76
|
}
|
|
68
77
|
query() {
|
|
69
|
-
return new
|
|
78
|
+
return new Query_1.Query(this.constructor.prototype);
|
|
70
79
|
}
|
|
71
80
|
}
|
|
72
81
|
exports.BaseObject = BaseObject;
|
|
@@ -1,15 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import * as statuses from '../statuses';
|
|
3
|
-
import { User } from './User';
|
|
1
|
+
import { UserClass } from './types/UserClass';
|
|
4
2
|
import { ObjectUri } from './ObjectUri';
|
|
5
3
|
export interface BaseObjectType {
|
|
6
4
|
name: string;
|
|
7
|
-
status:
|
|
8
|
-
createdBy?:
|
|
5
|
+
status: string;
|
|
6
|
+
createdBy?: UserClass | ObjectUri;
|
|
9
7
|
createdAt?: number;
|
|
10
|
-
updatedBy?:
|
|
8
|
+
updatedBy?: UserClass | ObjectUri;
|
|
11
9
|
updatedAt?: number;
|
|
12
|
-
deletedBy?:
|
|
10
|
+
deletedBy?: UserClass | ObjectUri;
|
|
13
11
|
deletedAt?: number;
|
|
14
12
|
}
|
|
15
|
-
export declare const BaseObjectProperties:
|
|
13
|
+
export declare const BaseObjectProperties: any;
|
|
@@ -24,20 +24,25 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
26
|
exports.BaseObjectProperties = void 0;
|
|
27
|
-
const Property_1 = require("../properties/Property");
|
|
28
27
|
const statuses = __importStar(require("../statuses"));
|
|
28
|
+
const StringProperty_1 = require("../properties/StringProperty");
|
|
29
|
+
const ObjectProperty_1 = require("../properties/ObjectProperty");
|
|
30
|
+
const EnumProperty_1 = require("../properties/EnumProperty");
|
|
31
|
+
const DateTimeProperty_1 = require("../properties/DateTimeProperty");
|
|
32
|
+
const htmlType = __importStar(require("../properties/types/PropertyHTMLType"));
|
|
29
33
|
exports.BaseObjectProperties = [
|
|
30
34
|
{
|
|
31
35
|
name: 'name',
|
|
32
36
|
mandatory: true,
|
|
33
|
-
type:
|
|
37
|
+
type: StringProperty_1.StringProperty.TYPE,
|
|
34
38
|
minLength: 1,
|
|
35
39
|
maxLength: 100,
|
|
40
|
+
htmlType: htmlType.NAME,
|
|
36
41
|
},
|
|
37
42
|
{
|
|
38
43
|
name: 'status',
|
|
39
44
|
mandatory: true,
|
|
40
|
-
type:
|
|
45
|
+
type: EnumProperty_1.EnumProperty.TYPE,
|
|
41
46
|
values: [
|
|
42
47
|
statuses.CREATED,
|
|
43
48
|
statuses.PENDING,
|
|
@@ -48,35 +53,35 @@ exports.BaseObjectProperties = [
|
|
|
48
53
|
},
|
|
49
54
|
{
|
|
50
55
|
name: 'createdBy',
|
|
51
|
-
type:
|
|
56
|
+
type: ObjectProperty_1.ObjectProperty.TYPE,
|
|
52
57
|
instanceOf: 'User',
|
|
53
58
|
mandatory: true,
|
|
54
59
|
protected: true,
|
|
55
60
|
},
|
|
56
61
|
{
|
|
57
62
|
name: 'createdAt',
|
|
58
|
-
type:
|
|
63
|
+
type: DateTimeProperty_1.DateTimeProperty.TYPE,
|
|
59
64
|
mandatory: true,
|
|
60
65
|
protected: true,
|
|
61
66
|
},
|
|
62
67
|
{
|
|
63
68
|
name: 'updatedBy',
|
|
64
|
-
type:
|
|
69
|
+
type: ObjectProperty_1.ObjectProperty.TYPE,
|
|
65
70
|
instanceOf: 'User',
|
|
66
71
|
},
|
|
67
72
|
{
|
|
68
73
|
name: 'updatedAt',
|
|
69
|
-
type:
|
|
74
|
+
type: DateTimeProperty_1.DateTimeProperty.TYPE,
|
|
70
75
|
},
|
|
71
76
|
{
|
|
72
77
|
name: 'deletedBy',
|
|
73
|
-
type:
|
|
78
|
+
type: ObjectProperty_1.ObjectProperty.TYPE,
|
|
74
79
|
instanceOf: 'User',
|
|
75
80
|
protected: true,
|
|
76
81
|
},
|
|
77
82
|
{
|
|
78
83
|
name: 'deletedAt',
|
|
79
|
-
type:
|
|
84
|
+
type: DateTimeProperty_1.DateTimeProperty.TYPE,
|
|
80
85
|
protected: true,
|
|
81
86
|
},
|
|
82
87
|
];
|
|
@@ -1,23 +1,29 @@
|
|
|
1
|
+
import { DataObjectProperties } from '../properties';
|
|
2
|
+
import { PropertyClassType } from '../properties/types/PropertyClassType';
|
|
1
3
|
import { AbstractObject } from './AbstractObject';
|
|
2
4
|
import { ObjectUri } from './ObjectUri';
|
|
5
|
+
import { DataObjectClass } from './types/DataObjectClass';
|
|
6
|
+
export declare type CoreObject<T extends AbstractObject> = T;
|
|
7
|
+
export declare type Properties = {
|
|
8
|
+
[x: string]: PropertyClassType;
|
|
9
|
+
};
|
|
3
10
|
export interface DataObjectFactoryType {
|
|
4
11
|
path: string;
|
|
5
12
|
[x: string]: any;
|
|
6
13
|
}
|
|
7
|
-
export
|
|
14
|
+
export interface DataObjectParams {
|
|
15
|
+
uri?: string | ObjectUri;
|
|
16
|
+
properties: DataObjectProperties;
|
|
17
|
+
}
|
|
8
18
|
/**
|
|
9
19
|
* Data objects constitute the agnostic glue between objects and backends.
|
|
10
20
|
* They handle data and identifiers in a protected registry
|
|
11
21
|
* This is what backends and objects manipulate, oblivious of the other.
|
|
12
22
|
*/
|
|
13
|
-
export declare class DataObject {
|
|
14
|
-
protected _class: CoreObject<any>;
|
|
23
|
+
export declare class DataObject implements DataObjectClass<any> {
|
|
15
24
|
protected _objectUri: ObjectUri;
|
|
16
|
-
protected _obj: any;
|
|
17
25
|
protected _uid: string | undefined;
|
|
18
|
-
protected _properties:
|
|
19
|
-
[x: string]: any;
|
|
20
|
-
};
|
|
26
|
+
protected _properties: Properties;
|
|
21
27
|
protected _persisted: boolean;
|
|
22
28
|
protected _populated: boolean;
|
|
23
29
|
/**
|
|
@@ -26,11 +32,11 @@ export declare class DataObject {
|
|
|
26
32
|
protected _modified: boolean;
|
|
27
33
|
/**
|
|
28
34
|
* Constructor is protected, use factory() instead
|
|
29
|
-
* @param
|
|
30
|
-
* @param properties array of properties instances
|
|
35
|
+
* @param params object of parameters
|
|
31
36
|
*/
|
|
32
|
-
protected constructor(
|
|
37
|
+
protected constructor(params: DataObjectParams | undefined);
|
|
33
38
|
protected _init(properties: any[]): void;
|
|
39
|
+
setProperties(properties: Properties): void;
|
|
34
40
|
/**
|
|
35
41
|
* Populate data object from instant data or backend query
|
|
36
42
|
* @param data
|
|
@@ -38,23 +44,22 @@ export declare class DataObject {
|
|
|
38
44
|
populate(data?: any): Promise<DataObject>;
|
|
39
45
|
isPopulated(): boolean;
|
|
40
46
|
isPersisted(): boolean;
|
|
41
|
-
get properties():
|
|
42
|
-
[x: string]: any;
|
|
43
|
-
};
|
|
47
|
+
get properties(): Properties;
|
|
44
48
|
get backend(): string | undefined;
|
|
45
|
-
get class(): any;
|
|
46
49
|
get path(): string;
|
|
47
50
|
set uid(uid: string | undefined);
|
|
48
51
|
get uid(): string | undefined;
|
|
49
52
|
get data(): any;
|
|
50
53
|
set uri(uri: string | ObjectUri | undefined);
|
|
51
54
|
get uri(): ObjectUri;
|
|
55
|
+
get class(): any;
|
|
56
|
+
has(key: string): boolean;
|
|
52
57
|
/**
|
|
53
58
|
* Returns property matching key or throw
|
|
54
59
|
* @param key string
|
|
55
60
|
* @returns BaseProperty
|
|
56
61
|
*/
|
|
57
|
-
get(key: string):
|
|
62
|
+
get(key: string): PropertyClassType;
|
|
58
63
|
set(key: string, val: any): this;
|
|
59
64
|
/**
|
|
60
65
|
* Get value of given property
|
|
@@ -71,13 +76,15 @@ export declare class DataObject {
|
|
|
71
76
|
uri: string;
|
|
72
77
|
};
|
|
73
78
|
protected _dataToJSON(): {};
|
|
74
|
-
read(): Promise<
|
|
75
|
-
save(
|
|
79
|
+
read(): Promise<DataObjectClass<any>>;
|
|
80
|
+
save(): Promise<DataObjectClass<any>>;
|
|
81
|
+
delete(): Promise<DataObjectClass<any>>;
|
|
76
82
|
/**
|
|
77
83
|
* Data object must be created from factory in order for async-loaded data to be available
|
|
78
84
|
* @param className
|
|
79
85
|
* @param param
|
|
80
86
|
* @returns DataObject
|
|
81
87
|
*/
|
|
82
|
-
static factory(
|
|
88
|
+
static factory(param?: DataObjectParams | undefined): Promise<DataObject>;
|
|
89
|
+
clone(data?: any): Promise<DataObject>;
|
|
83
90
|
}
|
|
@@ -21,10 +21,9 @@ const ObjectUri_1 = require("./ObjectUri");
|
|
|
21
21
|
class DataObject {
|
|
22
22
|
/**
|
|
23
23
|
* Constructor is protected, use factory() instead
|
|
24
|
-
* @param
|
|
25
|
-
* @param properties array of properties instances
|
|
24
|
+
* @param params object of parameters
|
|
26
25
|
*/
|
|
27
|
-
constructor(
|
|
26
|
+
constructor(params) {
|
|
28
27
|
this._uid = undefined;
|
|
29
28
|
this._properties = {};
|
|
30
29
|
this._persisted = false;
|
|
@@ -33,20 +32,30 @@ class DataObject {
|
|
|
33
32
|
* Has data been modified since last backend operation?
|
|
34
33
|
*/
|
|
35
34
|
this._modified = false;
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
35
|
+
if (params) {
|
|
36
|
+
if (typeof params.uri !== 'object') {
|
|
37
|
+
this._objectUri = new ObjectUri_1.ObjectUri(params.uri);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
this._objectUri = params.uri;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
this._objectUri = new ObjectUri_1.ObjectUri();
|
|
45
|
+
}
|
|
46
|
+
if (params && Array.isArray(params.properties)) {
|
|
47
|
+
this._init(params.properties);
|
|
40
48
|
}
|
|
41
49
|
}
|
|
42
50
|
_init(properties) {
|
|
43
|
-
// console.log(
|
|
44
|
-
// `Preparing properties for instance of ${this._class.constructor.name}`
|
|
45
|
-
// )
|
|
46
51
|
properties.forEach((prop) => {
|
|
47
52
|
this._properties[prop.name] = Property_1.Property.factory(prop, this);
|
|
48
53
|
});
|
|
49
54
|
}
|
|
55
|
+
setProperties(properties) {
|
|
56
|
+
// TODO check if doable
|
|
57
|
+
this._properties = properties;
|
|
58
|
+
}
|
|
50
59
|
/**
|
|
51
60
|
* Populate data object from instant data or backend query
|
|
52
61
|
* @param data
|
|
@@ -84,9 +93,6 @@ class DataObject {
|
|
|
84
93
|
get backend() {
|
|
85
94
|
return this._objectUri ? this._objectUri.backend : undefined;
|
|
86
95
|
}
|
|
87
|
-
get class() {
|
|
88
|
-
return this._class;
|
|
89
|
-
}
|
|
90
96
|
get path() {
|
|
91
97
|
return this._objectUri ? this._objectUri.path : '';
|
|
92
98
|
}
|
|
@@ -104,10 +110,20 @@ class DataObject {
|
|
|
104
110
|
}
|
|
105
111
|
set uri(uri) {
|
|
106
112
|
this._objectUri = uri instanceof ObjectUri_1.ObjectUri ? uri : new ObjectUri_1.ObjectUri(uri);
|
|
113
|
+
if (this._objectUri.collection !== ObjectUri_1.ObjectUri.MISSING_COLLECTION) {
|
|
114
|
+
this._persisted = true;
|
|
115
|
+
}
|
|
107
116
|
}
|
|
108
117
|
get uri() {
|
|
109
118
|
return this._objectUri;
|
|
110
119
|
}
|
|
120
|
+
get class() {
|
|
121
|
+
// TODO get class type
|
|
122
|
+
return this.uri.class;
|
|
123
|
+
}
|
|
124
|
+
has(key) {
|
|
125
|
+
return Reflect.has(this._properties, key);
|
|
126
|
+
}
|
|
111
127
|
/**
|
|
112
128
|
* Returns property matching key or throw
|
|
113
129
|
* @param key string
|
|
@@ -122,7 +138,7 @@ class DataObject {
|
|
|
122
138
|
}
|
|
123
139
|
}
|
|
124
140
|
set(key, val) {
|
|
125
|
-
if (!
|
|
141
|
+
if (!this.has(key)) {
|
|
126
142
|
throw new Error(`Unknown property in data object: ${key}`);
|
|
127
143
|
}
|
|
128
144
|
this._properties[key].set(val);
|
|
@@ -136,7 +152,7 @@ class DataObject {
|
|
|
136
152
|
* @returns any
|
|
137
153
|
*/
|
|
138
154
|
val(key) {
|
|
139
|
-
if (
|
|
155
|
+
if (this.has(key)) {
|
|
140
156
|
return Reflect.get(this._properties, key).val();
|
|
141
157
|
}
|
|
142
158
|
else {
|
|
@@ -147,19 +163,19 @@ class DataObject {
|
|
|
147
163
|
return Object.assign(Object.assign({}, (this._uid && { uid: this._uid })), this._dataToJSON());
|
|
148
164
|
}
|
|
149
165
|
toReference() {
|
|
150
|
-
|
|
151
|
-
return Object.assign(Object.assign({}, (_a = this._objectUri) === null || _a === void 0 ? void 0 : _a.toReference()), { label: this.val('name') });
|
|
166
|
+
return Object.assign(Object.assign({}, this._objectUri.toReference()), { label: this.val('name') || '' });
|
|
152
167
|
}
|
|
153
168
|
_dataToJSON() {
|
|
154
169
|
const data = {};
|
|
155
170
|
Object.keys(this._properties).forEach((key) => {
|
|
156
171
|
const prop = Reflect.get(this._properties, key);
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
172
|
+
const value = prop.val();
|
|
173
|
+
switch (prop.constructor.name) {
|
|
174
|
+
case 'ObjectProperty':
|
|
175
|
+
Reflect.set(data, key, value ? value.toJSON() : null);
|
|
176
|
+
break;
|
|
177
|
+
default:
|
|
178
|
+
Reflect.set(data, key, value || null);
|
|
163
179
|
}
|
|
164
180
|
});
|
|
165
181
|
return data;
|
|
@@ -167,7 +183,7 @@ class DataObject {
|
|
|
167
183
|
read() {
|
|
168
184
|
return __awaiter(this, void 0, void 0, function* () {
|
|
169
185
|
try {
|
|
170
|
-
return this.populate(Core_1.Core.getBackend().read(this));
|
|
186
|
+
return this.populate(yield Core_1.Core.getBackend().read(this));
|
|
171
187
|
}
|
|
172
188
|
catch (err) {
|
|
173
189
|
console.log(err.message);
|
|
@@ -175,14 +191,20 @@ class DataObject {
|
|
|
175
191
|
}
|
|
176
192
|
});
|
|
177
193
|
}
|
|
178
|
-
save(
|
|
194
|
+
save() {
|
|
179
195
|
return __awaiter(this, void 0, void 0, function* () {
|
|
180
196
|
const backend = Core_1.Core.getBackend(this.backend || Core_1.Core.defaultBackend);
|
|
181
197
|
this._persisted = true;
|
|
182
198
|
this._modified = false;
|
|
183
|
-
return this.
|
|
184
|
-
|
|
185
|
-
|
|
199
|
+
return this.uid ? backend.update(this) : backend.create(this);
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
delete() {
|
|
203
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
204
|
+
const backend = Core_1.Core.getBackend(this.backend || Core_1.Core.defaultBackend);
|
|
205
|
+
this._persisted = false;
|
|
206
|
+
this._modified = false;
|
|
207
|
+
return yield backend.delete(this);
|
|
186
208
|
});
|
|
187
209
|
}
|
|
188
210
|
/**
|
|
@@ -191,13 +213,10 @@ class DataObject {
|
|
|
191
213
|
* @param param
|
|
192
214
|
* @returns DataObject
|
|
193
215
|
*/
|
|
194
|
-
static factory(
|
|
216
|
+
static factory(param = undefined) {
|
|
195
217
|
return __awaiter(this, void 0, void 0, function* () {
|
|
196
|
-
if (className === undefined) {
|
|
197
|
-
throw new Error(`className is a require value`);
|
|
198
|
-
}
|
|
199
218
|
try {
|
|
200
|
-
return new this(
|
|
219
|
+
return new this(param);
|
|
201
220
|
}
|
|
202
221
|
catch (err) {
|
|
203
222
|
console.log(err);
|
|
@@ -205,5 +224,16 @@ class DataObject {
|
|
|
205
224
|
}
|
|
206
225
|
});
|
|
207
226
|
}
|
|
227
|
+
clone(data = {}) {
|
|
228
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
229
|
+
const cloned = yield DataObject.factory();
|
|
230
|
+
cloned.uri.class = this.uri.class;
|
|
231
|
+
cloned.setProperties(this._properties);
|
|
232
|
+
if (data) {
|
|
233
|
+
yield cloned.populate(data);
|
|
234
|
+
}
|
|
235
|
+
return cloned;
|
|
236
|
+
});
|
|
237
|
+
}
|
|
208
238
|
}
|
|
209
239
|
exports.DataObject = DataObject;
|
|
@@ -0,0 +1,26 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.Entity = void 0;
|
|
13
|
+
const BaseObject_1 = require("./BaseObject");
|
|
14
|
+
const EntityProperties_1 = require("./EntityProperties");
|
|
15
|
+
class Entity extends BaseObject_1.BaseObject {
|
|
16
|
+
static factory(src = undefined) {
|
|
17
|
+
const _super = Object.create(null, {
|
|
18
|
+
factory: { get: () => super.factory }
|
|
19
|
+
});
|
|
20
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
21
|
+
return _super.factory.call(this, src, Entity);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.Entity = Entity;
|
|
26
|
+
Entity.PROPS_DEFINITION = EntityProperties_1.EntityProperties;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const EntityProperties: any;
|