@quatrain/core 1.0.0-beta7 → 1.0.0-beta8
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 +1 -0
- package/lib/backends/AbstractAdapter.d.ts +2 -1
- package/lib/backends/AbstractAdapter.js +2 -2
- package/lib/backends/Query.d.ts +2 -2
- package/lib/backends/Query.js +2 -2
- package/lib/backends/middlewares/InjectMetaMiddleware.d.ts +2 -1
- package/lib/backends/middlewares/InjectMetaMiddleware.js +7 -4
- package/lib/backends/middlewares/Middleware.d.ts +1 -1
- package/lib/backends/middlewares/types/MiddlewareParams.d.ts +3 -0
- package/lib/backends/middlewares/types/MiddlewareParams.js +2 -0
- package/lib/components/AbstractObject.d.ts +1 -0
- package/lib/components/AbstractObject.js +1 -0
- package/lib/components/BaseObject.js +1 -0
- package/lib/components/DataObject.d.ts +9 -2
- package/lib/components/DataObject.js +39 -6
- package/lib/components/types/DataObjectClass.d.ts +3 -1
- package/lib/components/types/toJSONParams.d.ts +8 -0
- package/lib/components/types/toJSONParams.js +2 -0
- 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 +1 -1
- package/lib/properties/CollectionProperty.js +2 -2
- 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 +1 -1
- package/lib/properties/HashProperty.js +2 -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 +2 -2
- 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 +3 -1
- package/package.json +1 -1
package/lib/Backend.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ import { Filters } from './Filters';
|
|
|
6
6
|
import { Query, QueryResultType } from './Query';
|
|
7
7
|
import { SortAndLimit } from './SortAndLimit';
|
|
8
8
|
import Middleware from './middlewares/Middleware';
|
|
9
|
+
import { MiddlewareParams } from './middlewares/types/MiddlewareParams';
|
|
9
10
|
export declare abstract class AbstractAdapter implements BackendInterface {
|
|
10
11
|
static PKEY_IDENTIFIER: any;
|
|
11
12
|
protected _alias: string;
|
|
@@ -37,5 +38,5 @@ export declare abstract class AbstractAdapter implements BackendInterface {
|
|
|
37
38
|
query(query: Query<any>): Promise<QueryResultType<DataObjectClass<any>>>;
|
|
38
39
|
abstract find(dataObject: DataObjectClass<any>, filters: Filters | Filter[] | undefined, pagination: SortAndLimit | undefined, parent: any): Promise<QueryResultType<any>>;
|
|
39
40
|
log(message: string): void;
|
|
40
|
-
executeMiddlewares(dataObject: DataObjectClass<any>, action: BackendAction): Promise<DataObjectClass<any>>;
|
|
41
|
+
executeMiddlewares(dataObject: DataObjectClass<any>, action: BackendAction, params?: MiddlewareParams): Promise<DataObjectClass<any>>;
|
|
41
42
|
}
|
|
@@ -73,10 +73,10 @@ class AbstractAdapter {
|
|
|
73
73
|
console.log(message);
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
|
-
executeMiddlewares(dataObject, action) {
|
|
76
|
+
executeMiddlewares(dataObject, action, params) {
|
|
77
77
|
return __awaiter(this, void 0, void 0, function* () {
|
|
78
78
|
for (const middleware of this._middlewares) {
|
|
79
|
-
yield middleware.execute(dataObject, action);
|
|
79
|
+
yield middleware.execute(dataObject, action, params);
|
|
80
80
|
}
|
|
81
81
|
return dataObject;
|
|
82
82
|
});
|
package/lib/backends/Query.d.ts
CHANGED
|
@@ -33,14 +33,14 @@ export declare class Query<T extends typeof BaseObjectCore> {
|
|
|
33
33
|
sortings: Sorting[];
|
|
34
34
|
limits: Limits;
|
|
35
35
|
meta: any;
|
|
36
|
-
constructor(obj: T, parent?: T
|
|
36
|
+
constructor(obj: T, parent?: T);
|
|
37
37
|
get obj(): T;
|
|
38
38
|
get parent(): T | undefined;
|
|
39
39
|
/**
|
|
40
40
|
* Declare query parent record
|
|
41
41
|
* This may be need in some NoSQL backend to query subcollections
|
|
42
42
|
*/
|
|
43
|
-
set parent(parent: T);
|
|
43
|
+
set parent(parent: T | undefined);
|
|
44
44
|
where(param: Filter | string, value?: any, operator?: any): this;
|
|
45
45
|
sortBy(param: Sorting | string, order?: any): this;
|
|
46
46
|
setLimits(limits: Limits): this;
|
package/lib/backends/Query.js
CHANGED
|
@@ -26,7 +26,7 @@ var returnAs;
|
|
|
26
26
|
returnAs["AS_IS"] = "asIs";
|
|
27
27
|
})(returnAs || (exports.returnAs = returnAs = {}));
|
|
28
28
|
class Query {
|
|
29
|
-
constructor(obj, parent
|
|
29
|
+
constructor(obj, parent) {
|
|
30
30
|
this._obj = obj;
|
|
31
31
|
this._parent = parent;
|
|
32
32
|
this.filters = [];
|
|
@@ -105,7 +105,7 @@ class Query {
|
|
|
105
105
|
return { items: instances, meta };
|
|
106
106
|
});
|
|
107
107
|
}
|
|
108
|
-
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)) {
|
|
109
109
|
return __awaiter(this, void 0, void 0, function* () {
|
|
110
110
|
//<DataObjectClass<any>[] | ObjectUri[] | Persisted<BaseObject>[]> {
|
|
111
111
|
//</any><Array<T2> | Array<DataObject> | Array<ObjectUri>> {
|
|
@@ -2,11 +2,12 @@ import { DataObjectClass } from '../../components';
|
|
|
2
2
|
import { BackendAction } from '../../Backend';
|
|
3
3
|
import { User } from '../../components/User';
|
|
4
4
|
import Middleware from './Middleware';
|
|
5
|
+
import { MiddlewareParams } from './types/MiddlewareParams';
|
|
5
6
|
export interface InjectMetaMiddlewareParams {
|
|
6
7
|
user: User;
|
|
7
8
|
}
|
|
8
9
|
export declare class InjectMetaMiddleware implements Middleware {
|
|
9
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
3
|
export default interface Middleware {
|
|
4
|
-
execute: (dataObject: DataObjectClass<any>, action: BackendAction) => void;
|
|
4
|
+
execute: (dataObject: DataObjectClass<any>, action: BackendAction, params?: any) => void;
|
|
5
5
|
}
|
|
@@ -4,6 +4,7 @@ export declare abstract class AbstractObject {
|
|
|
4
4
|
static PROPS_DEFINITION: DataObjectProperties;
|
|
5
5
|
static COLLECTION: string | undefined;
|
|
6
6
|
static PARENT_PROP: string | undefined;
|
|
7
|
+
static DEFAULT_BACKEND: string;
|
|
7
8
|
static LABEL_KEY: string;
|
|
8
9
|
protected _dataObject: DataObjectClass<any>;
|
|
9
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';
|
|
@@ -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;
|
|
@@ -45,6 +46,12 @@ export declare class DataObject implements DataObjectClass<any> {
|
|
|
45
46
|
*/
|
|
46
47
|
asProxy(): this;
|
|
47
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): {};
|
|
48
55
|
addProperty(property: PropertyClassType): void;
|
|
49
56
|
/**
|
|
50
57
|
* Populate data object from instant data or backend query
|
|
@@ -92,7 +99,7 @@ export declare class DataObject implements DataObjectClass<any> {
|
|
|
92
99
|
* @returns any
|
|
93
100
|
*/
|
|
94
101
|
val(key: string, transform?: string | undefined): any;
|
|
95
|
-
toJSON(
|
|
102
|
+
toJSON(params?: boolean | toJSONParams): {
|
|
96
103
|
[x: string]: any;
|
|
97
104
|
};
|
|
98
105
|
toReference(): {
|
|
@@ -100,7 +107,7 @@ export declare class DataObject implements DataObjectClass<any> {
|
|
|
100
107
|
ref: string;
|
|
101
108
|
uri: string;
|
|
102
109
|
};
|
|
103
|
-
protected _dataToJSON(objectsAsReferences?: boolean): {};
|
|
110
|
+
protected _dataToJSON(objectsAsReferences?: boolean, ignoreUnchanged?: boolean, converters?: {}): {};
|
|
104
111
|
read(): Promise<DataObjectClass<any>>;
|
|
105
112
|
save(): Promise<DataObjectClass<any>>;
|
|
106
113
|
delete(): Promise<DataObjectClass<any>>;
|
|
@@ -76,9 +76,26 @@ class DataObject {
|
|
|
76
76
|
// TODO check if doable
|
|
77
77
|
this._properties = properties;
|
|
78
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* Return a map of all propoerties or only those matching the provided type
|
|
81
|
+
* @param type
|
|
82
|
+
* @returns
|
|
83
|
+
*/
|
|
84
|
+
getProperties(type) {
|
|
85
|
+
if (type) {
|
|
86
|
+
const matches = {};
|
|
87
|
+
for (let k of Object.keys(this._properties)) {
|
|
88
|
+
if (this._properties[k].constructor.name === type) {
|
|
89
|
+
Reflect.set(matches, k, this._properties[k]);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return matches;
|
|
93
|
+
}
|
|
94
|
+
return this._properties;
|
|
95
|
+
}
|
|
79
96
|
addProperty(property) {
|
|
80
97
|
if (Object.keys(this._properties).includes(property.name)) {
|
|
81
|
-
throw new Error(`Property ${name} already exists`);
|
|
98
|
+
throw new Error(`Property ${property.name} already exists`);
|
|
82
99
|
}
|
|
83
100
|
this._properties[property.name] = property;
|
|
84
101
|
}
|
|
@@ -119,10 +136,10 @@ class DataObject {
|
|
|
119
136
|
'label' in val &&
|
|
120
137
|
typeof val.label == 'string') {
|
|
121
138
|
const { ref, label } = val;
|
|
122
|
-
Reflect.get(this._properties, key).set(new ObjectUri_1.ObjectUri(ref, label));
|
|
139
|
+
Reflect.get(this._properties, key).set(new ObjectUri_1.ObjectUri(ref, label), false);
|
|
123
140
|
}
|
|
124
141
|
else {
|
|
125
|
-
Reflect.get(this._properties, key).set(data[key]);
|
|
142
|
+
Reflect.get(this._properties, key).set(data[key], false);
|
|
126
143
|
}
|
|
127
144
|
}
|
|
128
145
|
}
|
|
@@ -230,16 +247,28 @@ class DataObject {
|
|
|
230
247
|
throw new Error(`Unknown property '${key}'`);
|
|
231
248
|
}
|
|
232
249
|
}
|
|
233
|
-
toJSON(
|
|
234
|
-
|
|
250
|
+
toJSON(params = false) {
|
|
251
|
+
let objectsAsReferences = false, withoutURIData = false, ignoreUnchanged = false, converters = {};
|
|
252
|
+
if (typeof params === 'object') {
|
|
253
|
+
// Any missing parameter should resolve to false
|
|
254
|
+
objectsAsReferences = Boolean(params.objectsAsReferences);
|
|
255
|
+
withoutURIData = Boolean(params.withoutURIData);
|
|
256
|
+
ignoreUnchanged = Boolean(params.ignoreUnchanged);
|
|
257
|
+
converters = params.converters;
|
|
258
|
+
}
|
|
259
|
+
return Object.assign(Object.assign({}, (!withoutURIData &&
|
|
260
|
+
this.uri && { uid: this.uri.uid, path: this.uri.path })), this._dataToJSON(objectsAsReferences, ignoreUnchanged, converters));
|
|
235
261
|
}
|
|
236
262
|
toReference() {
|
|
237
263
|
return Object.assign(Object.assign({}, this._objectUri.toReference()), { label: this.val('name') || '' });
|
|
238
264
|
}
|
|
239
|
-
_dataToJSON(objectsAsReferences = false) {
|
|
265
|
+
_dataToJSON(objectsAsReferences = false, ignoreUnchanged = false, converters = {}) {
|
|
240
266
|
const data = {};
|
|
241
267
|
Object.keys(this._properties).forEach((key) => {
|
|
242
268
|
const prop = Reflect.get(this._properties, key);
|
|
269
|
+
if (ignoreUnchanged && prop.hasChanged === false)
|
|
270
|
+
return;
|
|
271
|
+
console.log(prop.constructor.name);
|
|
243
272
|
switch (prop.constructor.name) {
|
|
244
273
|
case 'CollectionProperty':
|
|
245
274
|
// ignore
|
|
@@ -260,8 +289,12 @@ class DataObject {
|
|
|
260
289
|
case 'ArrayProperty':
|
|
261
290
|
Reflect.set(data, key, prop.val() || []);
|
|
262
291
|
break;
|
|
292
|
+
case 'DateTimeProperty':
|
|
293
|
+
Reflect.set(data, key, prop.val(Reflect.get(converters, 'datetime')) || null);
|
|
294
|
+
break;
|
|
263
295
|
default:
|
|
264
296
|
Reflect.set(data, key, prop.val() || null);
|
|
297
|
+
break;
|
|
265
298
|
}
|
|
266
299
|
});
|
|
267
300
|
return data;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { PropertyClassType } from '../../properties/types/PropertyClassType';
|
|
2
2
|
import { ObjectUri } from '../ObjectUri';
|
|
3
|
+
import { toJSONParams } from './toJSONParams';
|
|
3
4
|
export interface DataObjectClass<T extends DataObjectClass<any>> {
|
|
4
5
|
uri: ObjectUri;
|
|
5
6
|
uid: any;
|
|
@@ -9,6 +10,7 @@ export interface DataObjectClass<T extends DataObjectClass<any>> {
|
|
|
9
10
|
properties: any;
|
|
10
11
|
parentProp: string | undefined;
|
|
11
12
|
setProperties(properties: any): void;
|
|
13
|
+
getProperties(type: any): any;
|
|
12
14
|
addProperty(property: PropertyClassType): void;
|
|
13
15
|
populate(data?: any): Promise<T>;
|
|
14
16
|
isPopulated(): boolean;
|
|
@@ -22,7 +24,7 @@ export interface DataObjectClass<T extends DataObjectClass<any>> {
|
|
|
22
24
|
delete(): Promise<T>;
|
|
23
25
|
clone(data?: any): Promise<T>;
|
|
24
26
|
toReference(): any;
|
|
25
|
-
toJSON(
|
|
27
|
+
toJSON(params?: boolean | toJSONParams): any;
|
|
26
28
|
populateFromData(data: {
|
|
27
29
|
[x: string]: unknown;
|
|
28
30
|
}): this;
|
|
@@ -15,7 +15,7 @@ export declare class ArrayProperty extends BaseProperty {
|
|
|
15
15
|
get minLength(): number;
|
|
16
16
|
set maxLength(max: number);
|
|
17
17
|
get maxLength(): number;
|
|
18
|
-
set(value: Array<any
|
|
18
|
+
set(value: Array<any>, setChanged?: boolean): this;
|
|
19
19
|
get(transform?: Function | undefined): any;
|
|
20
20
|
toJSON(): any[] | undefined;
|
|
21
21
|
}
|
|
@@ -30,7 +30,7 @@ class ArrayProperty extends BaseProperty_1.BaseProperty {
|
|
|
30
30
|
get maxLength() {
|
|
31
31
|
return this._maxLength;
|
|
32
32
|
}
|
|
33
|
-
set(value) {
|
|
33
|
+
set(value, setChanged = true) {
|
|
34
34
|
if (!Array.isArray(value)) {
|
|
35
35
|
throw new Error(`value ${JSON.stringify(value)} is not an array`);
|
|
36
36
|
}
|
|
@@ -49,7 +49,7 @@ class ArrayProperty extends BaseProperty_1.BaseProperty {
|
|
|
49
49
|
/\d/.test(joined)) {
|
|
50
50
|
throw new Error(`Numbers are not allowed in value`);
|
|
51
51
|
}
|
|
52
|
-
return super.set(value);
|
|
52
|
+
return super.set(value, setChanged);
|
|
53
53
|
}
|
|
54
54
|
get(transform = undefined) {
|
|
55
55
|
return transform ? transform(this._value) : this._value;
|
|
@@ -16,6 +16,7 @@ export declare class BaseProperty implements PropertyClassType {
|
|
|
16
16
|
static EVENT_ONCHANGE: string;
|
|
17
17
|
static EVENT_ONDELETE: string;
|
|
18
18
|
protected _parent: DataObjectClass<any> | undefined;
|
|
19
|
+
protected _id: string;
|
|
19
20
|
protected _name: string;
|
|
20
21
|
protected _value: any;
|
|
21
22
|
protected _mandatory: boolean;
|
|
@@ -23,6 +24,7 @@ export declare class BaseProperty implements PropertyClassType {
|
|
|
23
24
|
protected _allows: String[];
|
|
24
25
|
protected _htmlType: PropertyHTMLType;
|
|
25
26
|
protected _defaultValue: any;
|
|
27
|
+
protected _hasChanged: boolean;
|
|
26
28
|
protected _events: {
|
|
27
29
|
[key: EventTypes]: Function;
|
|
28
30
|
};
|
|
@@ -33,7 +35,8 @@ export declare class BaseProperty implements PropertyClassType {
|
|
|
33
35
|
get allows(): String[];
|
|
34
36
|
set htmlType(type: PropertyHTMLType);
|
|
35
37
|
get htmlType(): PropertyHTMLType;
|
|
36
|
-
|
|
38
|
+
get hasChanged(): boolean;
|
|
39
|
+
set(value: any, setChanged?: boolean): this;
|
|
37
40
|
val(transform?: any): any;
|
|
38
41
|
protected _enable(value: boolean | undefined): boolean;
|
|
39
42
|
toJSON(): any;
|
|
@@ -10,11 +10,13 @@ class BaseProperty {
|
|
|
10
10
|
this._htmlType = 'off';
|
|
11
11
|
this._events = {};
|
|
12
12
|
this._parent = config.parent;
|
|
13
|
+
this._id = config.id || config.name.toLowerCase();
|
|
13
14
|
this._name = config.name;
|
|
14
15
|
this._protected = config.protected || false;
|
|
15
16
|
this._mandatory = config.mandatory || false;
|
|
16
17
|
this._defaultValue = config.defaultValue;
|
|
17
18
|
this._value = config.defaultValue;
|
|
19
|
+
this._hasChanged = false;
|
|
18
20
|
this._htmlType = config.htmlType || 'off';
|
|
19
21
|
if (typeof config.onChange === 'function') {
|
|
20
22
|
this._events.onChange = config.onChange;
|
|
@@ -38,21 +40,31 @@ class BaseProperty {
|
|
|
38
40
|
get htmlType() {
|
|
39
41
|
return this._htmlType;
|
|
40
42
|
}
|
|
41
|
-
|
|
43
|
+
get hasChanged() {
|
|
44
|
+
return this._hasChanged;
|
|
45
|
+
}
|
|
46
|
+
set(value, setChanged = true) {
|
|
42
47
|
if (this._value !== undefined &&
|
|
43
48
|
this._value !== null &&
|
|
44
49
|
this._value !== this._defaultValue &&
|
|
45
50
|
this._protected === true) {
|
|
46
51
|
throw new Error(`Value '${this._name}' already defined as '${this._value}' and protected from change`);
|
|
47
52
|
}
|
|
48
|
-
this._value
|
|
53
|
+
if (value !== this._value) {
|
|
54
|
+
console.log(this.name, value, this._value);
|
|
55
|
+
this._value = value;
|
|
56
|
+
this._hasChanged = setChanged;
|
|
57
|
+
}
|
|
49
58
|
if (this._events[BaseProperty.EVENT_ONCHANGE]) {
|
|
50
59
|
this._events[BaseProperty.EVENT_ONCHANGE](this._parent);
|
|
51
60
|
}
|
|
52
61
|
return this;
|
|
53
62
|
}
|
|
54
63
|
val(transform = undefined) {
|
|
55
|
-
|
|
64
|
+
console.log(transform && transform(this._value), typeof transform);
|
|
65
|
+
return typeof transform === 'function'
|
|
66
|
+
? transform(this._value)
|
|
67
|
+
: this._value || this._defaultValue;
|
|
56
68
|
}
|
|
57
69
|
_enable(value) {
|
|
58
70
|
return value === undefined || value === true;
|
|
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.BooleanProperty = void 0;
|
|
4
4
|
const BaseProperty_1 = require("./BaseProperty");
|
|
5
5
|
class BooleanProperty extends BaseProperty_1.BaseProperty {
|
|
6
|
-
set(value) {
|
|
7
|
-
return super.set(value);
|
|
6
|
+
set(value, setChanged = true) {
|
|
7
|
+
return super.set(value, setChanged);
|
|
8
8
|
}
|
|
9
9
|
}
|
|
10
10
|
exports.BooleanProperty = BooleanProperty;
|
|
@@ -20,7 +20,7 @@ export declare class CollectionProperty extends BaseProperty {
|
|
|
20
20
|
protected _filters: Filter[] | Filter | undefined;
|
|
21
21
|
constructor(config: CollectionPropertyType);
|
|
22
22
|
protected _setQuery(filters?: Filter[]): Query<typeof BaseObjectCore>;
|
|
23
|
-
set(value: Array<any
|
|
23
|
+
set(value: Array<any>, setChanged?: boolean): this;
|
|
24
24
|
/**
|
|
25
25
|
* get objects matching collection class and filters
|
|
26
26
|
* in the requested format
|
|
@@ -42,8 +42,8 @@ class CollectionProperty extends BaseProperty_1.BaseProperty {
|
|
|
42
42
|
}
|
|
43
43
|
return query;
|
|
44
44
|
}
|
|
45
|
-
set(value) {
|
|
46
|
-
return super.set(value);
|
|
45
|
+
set(value, setChanged = true) {
|
|
46
|
+
return super.set(value, setChanged);
|
|
47
47
|
}
|
|
48
48
|
/**
|
|
49
49
|
* get objects matching collection class and filters
|
|
@@ -6,6 +6,6 @@ export declare class DateTimeProperty extends BaseProperty {
|
|
|
6
6
|
static TYPE: string;
|
|
7
7
|
protected _timezone: string;
|
|
8
8
|
constructor(config: DateTimePropertyType);
|
|
9
|
-
set(value: string | Date): this;
|
|
9
|
+
set(value: string | Date, setChanged?: boolean): this;
|
|
10
10
|
get timezone(): string;
|
|
11
11
|
}
|
|
@@ -7,8 +7,8 @@ class DateTimeProperty extends BaseProperty_1.BaseProperty {
|
|
|
7
7
|
super(config);
|
|
8
8
|
this._timezone = config.timezone || 'Z';
|
|
9
9
|
}
|
|
10
|
-
set(value) {
|
|
11
|
-
return super.set(value);
|
|
10
|
+
set(value, setChanged = true) {
|
|
11
|
+
return super.set(value, setChanged);
|
|
12
12
|
}
|
|
13
13
|
get timezone() {
|
|
14
14
|
return this._timezone;
|
|
@@ -8,11 +8,11 @@ class EnumProperty extends BaseProperty_1.BaseProperty {
|
|
|
8
8
|
this._values = [];
|
|
9
9
|
this._values = config.values || [];
|
|
10
10
|
}
|
|
11
|
-
set(value) {
|
|
11
|
+
set(value, setChanged = true) {
|
|
12
12
|
if (value !== null && !this._values.includes(value)) {
|
|
13
13
|
throw new Error(`Value '${value}' is not acceptable`);
|
|
14
14
|
}
|
|
15
|
-
return super.set(value);
|
|
15
|
+
return super.set(value, setChanged);
|
|
16
16
|
}
|
|
17
17
|
get values() {
|
|
18
18
|
return this._values;
|
|
@@ -42,8 +42,8 @@ class HashProperty extends StringProperty_1.StringProperty {
|
|
|
42
42
|
get(transform) {
|
|
43
43
|
return;
|
|
44
44
|
}
|
|
45
|
-
set(value) {
|
|
46
|
-
return super.set(this._hash(value));
|
|
45
|
+
set(value, setChanged = true) {
|
|
46
|
+
return super.set(this._hash(value), setChanged);
|
|
47
47
|
}
|
|
48
48
|
compare(value) {
|
|
49
49
|
return this._hash(value) === this._value;
|
|
@@ -3,11 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.MapProperty = void 0;
|
|
4
4
|
const BaseProperty_1 = require("./BaseProperty");
|
|
5
5
|
class MapProperty extends BaseProperty_1.BaseProperty {
|
|
6
|
-
set(value) {
|
|
6
|
+
set(value, setChanged = true) {
|
|
7
7
|
if (typeof value !== 'object') {
|
|
8
8
|
throw new Error(`value ${JSON.stringify(value)} is not an object`);
|
|
9
9
|
}
|
|
10
|
-
return super.set(value);
|
|
10
|
+
return super.set(value, setChanged);
|
|
11
11
|
}
|
|
12
12
|
toJSON() {
|
|
13
13
|
return this._value ? JSON.stringify(this._value) : {};
|
|
@@ -27,7 +27,7 @@ export declare class NumberProperty extends BaseProperty {
|
|
|
27
27
|
protected _precision: number;
|
|
28
28
|
protected _value: number | undefined;
|
|
29
29
|
constructor(config: NumberPropertyType);
|
|
30
|
-
set(value: number): this;
|
|
30
|
+
set(value: number, setChanged?: boolean): this;
|
|
31
31
|
val(transform?: string | undefined): string | number | undefined;
|
|
32
32
|
set minVal(min: number | undefined);
|
|
33
33
|
get minVal(): number | undefined;
|
|
@@ -27,7 +27,7 @@ class NumberProperty extends BaseProperty_1.BaseProperty {
|
|
|
27
27
|
this._sign = config.sign;
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
-
set(value) {
|
|
30
|
+
set(value, setChanged = true) {
|
|
31
31
|
if (this._sign === NumberProperty.TYPE_UNSIGNED && value < 0) {
|
|
32
32
|
throw new Error(`Value must be unsigned`);
|
|
33
33
|
}
|
|
@@ -40,7 +40,7 @@ class NumberProperty extends BaseProperty_1.BaseProperty {
|
|
|
40
40
|
if (this._type === NumberProperty.TYPE_INTEGER) {
|
|
41
41
|
value = Math.floor(value);
|
|
42
42
|
}
|
|
43
|
-
return super.set(value);
|
|
43
|
+
return super.set(value, setChanged);
|
|
44
44
|
}
|
|
45
45
|
val(transform = undefined) {
|
|
46
46
|
switch (transform) {
|
|
@@ -10,6 +10,6 @@ export declare class ObjectProperty extends BaseProperty {
|
|
|
10
10
|
_instanceOf: any;
|
|
11
11
|
constructor(config: ObjectPropertyType);
|
|
12
12
|
val(transform?: string | undefined): any;
|
|
13
|
-
set(value: object): this;
|
|
13
|
+
set(value: object, setChanged?: boolean): this;
|
|
14
14
|
toJSON(): any;
|
|
15
15
|
}
|
|
@@ -63,13 +63,13 @@ class ObjectProperty extends BaseProperty_1.BaseProperty {
|
|
|
63
63
|
return this._value;
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
|
-
set(value) {
|
|
66
|
+
set(value, setChanged = true) {
|
|
67
67
|
if (value instanceof ObjectUri_1.ObjectUri &&
|
|
68
68
|
value instanceof DataObject_1.DataObject &&
|
|
69
69
|
value.constructor.name !== this._instanceOf.constructor.name) {
|
|
70
70
|
throw new Error(`value ${JSON.stringify(value)} is not an instance of ${this._instanceOf.constructor.name}`);
|
|
71
71
|
}
|
|
72
|
-
return super.set(value);
|
|
72
|
+
return super.set(value, setChanged);
|
|
73
73
|
}
|
|
74
74
|
toJSON() {
|
|
75
75
|
if (this._value instanceof ObjectUri_1.ObjectUri) {
|
|
@@ -26,7 +26,7 @@ export declare class StringProperty extends BaseProperty {
|
|
|
26
26
|
*/
|
|
27
27
|
protected _rawValue: boolean;
|
|
28
28
|
constructor(config: StringPropertyType);
|
|
29
|
-
set(value: any): this;
|
|
29
|
+
set(value: any, setChanged?: boolean): this;
|
|
30
30
|
get(transform?: string | undefined): string | undefined;
|
|
31
31
|
set minLength(min: number);
|
|
32
32
|
get minLength(): number;
|
|
@@ -27,7 +27,7 @@ class StringProperty extends BaseProperty_1.BaseProperty {
|
|
|
27
27
|
this._allows.push(StringProperty.ALLOW_LETTERS);
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
-
set(value) {
|
|
30
|
+
set(value, setChanged = true) {
|
|
31
31
|
if (value !== null && value !== undefined) {
|
|
32
32
|
if (this._allows.includes(StringProperty.ALLOW_DIGITS) === false &&
|
|
33
33
|
/\d/.test(value)) {
|
|
@@ -52,7 +52,7 @@ class StringProperty extends BaseProperty_1.BaseProperty {
|
|
|
52
52
|
throw new Error(`${this._name}: value '${value}' is too long`);
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
|
-
return super.set(value);
|
|
55
|
+
return super.set(value, setChanged);
|
|
56
56
|
}
|
|
57
57
|
get(transform = undefined) {
|
|
58
58
|
switch (transform) {
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { AbstractPropertyType } from './AbstractPropertyType';
|
|
2
2
|
export interface PropertyClassType {
|
|
3
|
+
id?: string;
|
|
3
4
|
name: string;
|
|
4
|
-
set(value: any): AbstractPropertyType;
|
|
5
|
+
set(value: any, setCahnged?: boolean): AbstractPropertyType;
|
|
5
6
|
val(transform?: any): any;
|
|
6
7
|
toJSON(): any;
|
|
7
8
|
clone(): PropertyClassType;
|
|
9
|
+
hasChanged?: boolean;
|
|
8
10
|
}
|