@quatrain/core 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/lib/Core.d.ts +16 -0
  2. package/lib/Core.js +30 -0
  3. package/lib/backends/AbstractAdapter.d.ts +49 -0
  4. package/lib/backends/AbstractAdapter.js +30 -0
  5. package/lib/backends/BackendError.d.ts +2 -0
  6. package/lib/backends/BackendError.js +6 -0
  7. package/lib/backends/Filter.d.ts +15 -0
  8. package/lib/backends/Filter.js +14 -0
  9. package/lib/backends/FilterOperators.d.ts +13 -0
  10. package/lib/backends/FilterOperators.js +16 -0
  11. package/lib/backends/Filters.d.ts +10 -0
  12. package/lib/backends/Filters.js +14 -0
  13. package/lib/backends/Limits.d.ts +9 -0
  14. package/lib/backends/Limits.js +10 -0
  15. package/lib/backends/MockAdapter.d.ts +24 -0
  16. package/lib/backends/MockAdapter.js +81 -0
  17. package/lib/backends/Query.d.ts +24 -0
  18. package/lib/backends/Query.js +72 -0
  19. package/lib/backends/SortAndLimit.d.ts +11 -0
  20. package/lib/backends/SortAndLimit.js +11 -0
  21. package/lib/backends/Sorting.d.ts +9 -0
  22. package/lib/backends/Sorting.js +10 -0
  23. package/lib/backends/index.d.ts +10 -0
  24. package/lib/backends/index.js +21 -0
  25. package/lib/common/statuses.d.ts +11 -0
  26. package/lib/common/statuses.js +14 -0
  27. package/lib/components/AbstractObject.d.ts +23 -0
  28. package/lib/components/AbstractObject.js +64 -0
  29. package/lib/components/BaseObject.d.ts +16 -0
  30. package/lib/components/BaseObject.js +73 -0
  31. package/lib/components/BaseObjectProperties.d.ts +15 -0
  32. package/lib/components/BaseObjectProperties.js +82 -0
  33. package/lib/components/DataObject.d.ts +83 -0
  34. package/lib/components/DataObject.js +209 -0
  35. package/lib/components/ObjectUri.d.ts +42 -0
  36. package/lib/components/ObjectUri.js +112 -0
  37. package/lib/components/User.d.ts +6 -0
  38. package/lib/components/User.js +56 -0
  39. package/lib/components/index.d.ts +7 -0
  40. package/lib/components/index.js +16 -0
  41. package/lib/index.d.ts +17 -0
  42. package/lib/index.js +66 -0
  43. package/lib/properties/BaseProperty.d.ts +34 -0
  44. package/lib/properties/BaseProperty.js +57 -0
  45. package/lib/properties/BooleanProperty.d.ts +6 -0
  46. package/lib/properties/BooleanProperty.js +10 -0
  47. package/lib/properties/DateTimeProperty.d.ts +10 -0
  48. package/lib/properties/DateTimeProperty.js +17 -0
  49. package/lib/properties/EnumProperty.d.ts +9 -0
  50. package/lib/properties/EnumProperty.js +18 -0
  51. package/lib/properties/HashProperty.d.ts +20 -0
  52. package/lib/properties/HashProperty.js +48 -0
  53. package/lib/properties/NumberProperty.d.ts +36 -0
  54. package/lib/properties/NumberProperty.js +75 -0
  55. package/lib/properties/ObjectProperty.d.ts +16 -0
  56. package/lib/properties/ObjectProperty.js +25 -0
  57. package/lib/properties/Property.d.ts +16 -0
  58. package/lib/properties/Property.js +49 -0
  59. package/lib/properties/StringProperty.d.ts +27 -0
  60. package/lib/properties/StringProperty.js +73 -0
  61. package/lib/properties/index.d.ts +15 -0
  62. package/lib/properties/index.js +21 -0
  63. package/lib/properties/types/AbstractPropertyType.d.ts +5 -0
  64. package/lib/properties/types/AbstractPropertyType.js +2 -0
  65. package/lib/properties/types/PropertyClassType.d.ts +4 -0
  66. package/lib/properties/types/PropertyClassType.js +2 -0
  67. package/lib/properties/types/PropertyTypes.d.ts +2 -0
  68. package/lib/properties/types/PropertyTypes.js +2 -0
  69. package/lib/statuses.d.ts +10 -0
  70. package/lib/statuses.js +13 -0
  71. package/package.json +28 -0
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.User = exports.UserProperties = void 0;
4
+ const Property_1 = require("../properties/Property");
5
+ const HashProperty_1 = require("../properties/HashProperty");
6
+ const BaseObject_1 = require("./BaseObject");
7
+ /**
8
+ * Callback function to populate the 'name' property
9
+ * @param dao DataObject
10
+ * @returns
11
+ */
12
+ const onChange = (dao) => dao.set('name', `${dao.val('firstname')} ${dao.val('lastname')}`);
13
+ exports.UserProperties = [
14
+ {
15
+ // change name property minLength
16
+ name: 'name',
17
+ type: Property_1.Property.TYPE_STRING,
18
+ minLength: 0,
19
+ },
20
+ {
21
+ name: 'firstname',
22
+ mandatory: true,
23
+ type: Property_1.Property.TYPE_STRING,
24
+ minLength: 1,
25
+ maxLength: 100,
26
+ onChange,
27
+ },
28
+ {
29
+ name: 'lastname',
30
+ mandatory: true,
31
+ type: Property_1.Property.TYPE_STRING,
32
+ minLength: 1,
33
+ maxLength: 100,
34
+ onChange,
35
+ },
36
+ {
37
+ name: 'email',
38
+ mandatory: true,
39
+ type: Property_1.Property.TYPE_STRING,
40
+ minLength: 1,
41
+ maxLength: 100,
42
+ },
43
+ {
44
+ name: 'password',
45
+ mandatory: true,
46
+ type: Property_1.Property.TYPE_HASH,
47
+ algorithm: HashProperty_1.HashProperty.ALGORITHM_SHA256,
48
+ salt: '',
49
+ minLength: 5,
50
+ maxLength: 20, // this is for the clear password
51
+ },
52
+ ];
53
+ class User extends BaseObject_1.BaseObject {
54
+ }
55
+ exports.User = User;
56
+ User.PROPS_DEFINITION = exports.UserProperties;
@@ -0,0 +1,7 @@
1
+ import { DataObject } from './DataObject';
2
+ import { ObjectUri } from './ObjectUri';
3
+ import { AbstractObject } from './AbstractObject';
4
+ import { BaseObject } from './BaseObject';
5
+ import { BaseObjectProperties } from './BaseObjectProperties';
6
+ import { User, UserProperties } from './User';
7
+ export { DataObject, ObjectUri, AbstractObject, BaseObject, User, BaseObjectProperties, UserProperties, };
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UserProperties = exports.BaseObjectProperties = exports.User = exports.BaseObject = exports.AbstractObject = exports.ObjectUri = exports.DataObject = void 0;
4
+ const DataObject_1 = require("./DataObject");
5
+ Object.defineProperty(exports, "DataObject", { enumerable: true, get: function () { return DataObject_1.DataObject; } });
6
+ const ObjectUri_1 = require("./ObjectUri");
7
+ Object.defineProperty(exports, "ObjectUri", { enumerable: true, get: function () { return ObjectUri_1.ObjectUri; } });
8
+ const AbstractObject_1 = require("./AbstractObject");
9
+ Object.defineProperty(exports, "AbstractObject", { enumerable: true, get: function () { return AbstractObject_1.AbstractObject; } });
10
+ const BaseObject_1 = require("./BaseObject");
11
+ Object.defineProperty(exports, "BaseObject", { enumerable: true, get: function () { return BaseObject_1.BaseObject; } });
12
+ const BaseObjectProperties_1 = require("./BaseObjectProperties");
13
+ Object.defineProperty(exports, "BaseObjectProperties", { enumerable: true, get: function () { return BaseObjectProperties_1.BaseObjectProperties; } });
14
+ const User_1 = require("./User");
15
+ Object.defineProperty(exports, "User", { enumerable: true, get: function () { return User_1.User; } });
16
+ Object.defineProperty(exports, "UserProperties", { enumerable: true, get: function () { return User_1.UserProperties; } });
package/lib/index.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ import { Core } from './Core';
2
+ import * as statuses from './common/statuses';
3
+ import { Property } from './properties/Property';
4
+ import { BaseProperty, BasePropertyType } from './properties/BaseProperty';
5
+ import { StringProperty, StringPropertyType } from './properties/StringProperty';
6
+ import { EnumProperty, EnumPropertyType } from './properties/EnumProperty';
7
+ import { BooleanProperty, BooleanPropertyType } from './properties/BooleanProperty';
8
+ import { ObjectProperty, ObjectPropertyType } from './properties/ObjectProperty';
9
+ import { DateTimeProperty, DateTimePropertyType } from './properties/DateTimeProperty';
10
+ import { HashProperty, HashPropertyType } from './properties/HashProperty';
11
+ import { AbstractObject } from './components/AbstractObject';
12
+ import { ObjectUri } from './components/ObjectUri';
13
+ import { DataObject } from './components/DataObject';
14
+ import { BaseObject } from './components/BaseObject';
15
+ import { BaseObjectProperties } from './components/BaseObjectProperties';
16
+ import { AbstractAdapter, MockAdapter, BackendError, BackendParameters, Query, Filter, Filters, Limits, Sorting, SortAndLimit } from './backends';
17
+ export { statuses, Core, Property, BaseProperty, BasePropertyType, BooleanProperty, BooleanPropertyType, DateTimeProperty, DateTimePropertyType, EnumProperty, EnumPropertyType, HashProperty, HashPropertyType, ObjectProperty, ObjectPropertyType, StringProperty, StringPropertyType, AbstractAdapter, MockAdapter, ObjectUri, DataObject, AbstractObject, BaseObject, BaseObjectProperties, BackendParameters, BackendError, Query, Filter, Filters, Limits, Sorting, SortAndLimit, };
package/lib/index.js ADDED
@@ -0,0 +1,66 @@
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.SortAndLimit = exports.Sorting = exports.Limits = exports.Filters = exports.Filter = exports.Query = exports.BackendError = exports.BaseObjectProperties = exports.BaseObject = exports.AbstractObject = exports.DataObject = exports.ObjectUri = exports.MockAdapter = exports.AbstractAdapter = exports.StringProperty = exports.ObjectProperty = exports.HashProperty = exports.EnumProperty = exports.DateTimeProperty = exports.BooleanProperty = exports.BaseProperty = exports.Property = exports.Core = exports.statuses = void 0;
27
+ const Core_1 = require("./Core");
28
+ Object.defineProperty(exports, "Core", { enumerable: true, get: function () { return Core_1.Core; } });
29
+ const statuses = __importStar(require("./common/statuses"));
30
+ exports.statuses = statuses;
31
+ const Property_1 = require("./properties/Property");
32
+ Object.defineProperty(exports, "Property", { enumerable: true, get: function () { return Property_1.Property; } });
33
+ const BaseProperty_1 = require("./properties/BaseProperty");
34
+ Object.defineProperty(exports, "BaseProperty", { enumerable: true, get: function () { return BaseProperty_1.BaseProperty; } });
35
+ const StringProperty_1 = require("./properties/StringProperty");
36
+ Object.defineProperty(exports, "StringProperty", { enumerable: true, get: function () { return StringProperty_1.StringProperty; } });
37
+ const EnumProperty_1 = require("./properties/EnumProperty");
38
+ Object.defineProperty(exports, "EnumProperty", { enumerable: true, get: function () { return EnumProperty_1.EnumProperty; } });
39
+ const BooleanProperty_1 = require("./properties/BooleanProperty");
40
+ Object.defineProperty(exports, "BooleanProperty", { enumerable: true, get: function () { return BooleanProperty_1.BooleanProperty; } });
41
+ const ObjectProperty_1 = require("./properties/ObjectProperty");
42
+ Object.defineProperty(exports, "ObjectProperty", { enumerable: true, get: function () { return ObjectProperty_1.ObjectProperty; } });
43
+ const DateTimeProperty_1 = require("./properties/DateTimeProperty");
44
+ Object.defineProperty(exports, "DateTimeProperty", { enumerable: true, get: function () { return DateTimeProperty_1.DateTimeProperty; } });
45
+ const HashProperty_1 = require("./properties/HashProperty");
46
+ Object.defineProperty(exports, "HashProperty", { enumerable: true, get: function () { return HashProperty_1.HashProperty; } });
47
+ const AbstractObject_1 = require("./components/AbstractObject");
48
+ Object.defineProperty(exports, "AbstractObject", { enumerable: true, get: function () { return AbstractObject_1.AbstractObject; } });
49
+ const ObjectUri_1 = require("./components/ObjectUri");
50
+ Object.defineProperty(exports, "ObjectUri", { enumerable: true, get: function () { return ObjectUri_1.ObjectUri; } });
51
+ const DataObject_1 = require("./components/DataObject");
52
+ Object.defineProperty(exports, "DataObject", { enumerable: true, get: function () { return DataObject_1.DataObject; } });
53
+ const BaseObject_1 = require("./components/BaseObject");
54
+ Object.defineProperty(exports, "BaseObject", { enumerable: true, get: function () { return BaseObject_1.BaseObject; } });
55
+ const BaseObjectProperties_1 = require("./components/BaseObjectProperties");
56
+ Object.defineProperty(exports, "BaseObjectProperties", { enumerable: true, get: function () { return BaseObjectProperties_1.BaseObjectProperties; } });
57
+ const backends_1 = require("./backends");
58
+ Object.defineProperty(exports, "AbstractAdapter", { enumerable: true, get: function () { return backends_1.AbstractAdapter; } });
59
+ Object.defineProperty(exports, "MockAdapter", { enumerable: true, get: function () { return backends_1.MockAdapter; } });
60
+ Object.defineProperty(exports, "BackendError", { enumerable: true, get: function () { return backends_1.BackendError; } });
61
+ Object.defineProperty(exports, "Query", { enumerable: true, get: function () { return backends_1.Query; } });
62
+ Object.defineProperty(exports, "Filter", { enumerable: true, get: function () { return backends_1.Filter; } });
63
+ Object.defineProperty(exports, "Filters", { enumerable: true, get: function () { return backends_1.Filters; } });
64
+ Object.defineProperty(exports, "Limits", { enumerable: true, get: function () { return backends_1.Limits; } });
65
+ Object.defineProperty(exports, "Sorting", { enumerable: true, get: function () { return backends_1.Sorting; } });
66
+ Object.defineProperty(exports, "SortAndLimit", { enumerable: true, get: function () { return backends_1.SortAndLimit; } });
@@ -0,0 +1,34 @@
1
+ import { DataObject } from '../components/DataObject';
2
+ import { AbstractPropertyType } from './types/AbstractPropertyType';
3
+ import { PropertyClassType } from './types/PropertyClassType';
4
+ export declare type EventTypes = typeof BaseProperty.EVENT_ONCHANGE | typeof BaseProperty.EVENT_ONDELETE;
5
+ export interface BasePropertyType extends AbstractPropertyType {
6
+ parent?: DataObject;
7
+ protected?: boolean;
8
+ mandatory?: boolean;
9
+ defaultValue?: any;
10
+ onChange?: (dao: DataObject) => DataObject;
11
+ }
12
+ export declare class BaseProperty implements PropertyClassType {
13
+ static EVENT_ONCHANGE: string;
14
+ static EVENT_ONDELETE: string;
15
+ protected _parent: DataObject | undefined;
16
+ protected _name: string;
17
+ protected _value: any;
18
+ protected _mandatory: boolean;
19
+ protected _protected: boolean;
20
+ protected _allows: String[];
21
+ protected _defaultValue: any;
22
+ protected _events: {
23
+ [key: EventTypes]: Function;
24
+ };
25
+ constructor(config: BasePropertyType);
26
+ get name(): string;
27
+ get mandatory(): boolean;
28
+ get protected(): boolean;
29
+ get allows(): String[];
30
+ set(value: any): this;
31
+ val(transform?: any): any;
32
+ protected _enable(value: boolean | undefined): boolean;
33
+ toJSON(): any;
34
+ }
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseProperty = void 0;
4
+ class BaseProperty {
5
+ constructor(config) {
6
+ this._value = undefined;
7
+ this._mandatory = false;
8
+ this._protected = false;
9
+ this._allows = [];
10
+ this._events = {};
11
+ this._parent = config.parent;
12
+ this._name = config.name;
13
+ this._protected = config.protected || false;
14
+ this._mandatory = config.mandatory || false;
15
+ this._defaultValue = config.defaultValue;
16
+ this._value = config.defaultValue;
17
+ if (typeof config.onChange === 'function') {
18
+ this._events.onChange = config.onChange;
19
+ }
20
+ }
21
+ get name() {
22
+ return this._name;
23
+ }
24
+ get mandatory() {
25
+ return this._mandatory;
26
+ }
27
+ get protected() {
28
+ return this._protected;
29
+ }
30
+ get allows() {
31
+ return this._allows;
32
+ }
33
+ set(value) {
34
+ if (this._value !== undefined &&
35
+ this._value !== this._defaultValue &&
36
+ this._protected === true) {
37
+ throw new Error(`Value already defined as '${this._value}' and protected from change`);
38
+ }
39
+ this._value = value;
40
+ if (this._events[BaseProperty.EVENT_ONCHANGE]) {
41
+ this._events[BaseProperty.EVENT_ONCHANGE](this._parent);
42
+ }
43
+ return this;
44
+ }
45
+ val(transform = undefined) {
46
+ return this._value;
47
+ }
48
+ _enable(value) {
49
+ return value === undefined || value === true;
50
+ }
51
+ toJSON() {
52
+ return this._value;
53
+ }
54
+ }
55
+ exports.BaseProperty = BaseProperty;
56
+ BaseProperty.EVENT_ONCHANGE = 'onChange';
57
+ BaseProperty.EVENT_ONDELETE = 'onDelete';
@@ -0,0 +1,6 @@
1
+ import { BaseProperty, BasePropertyType } from './';
2
+ export interface BooleanPropertyType extends BasePropertyType {
3
+ }
4
+ export declare class BooleanProperty extends BaseProperty {
5
+ set(value: boolean): this;
6
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BooleanProperty = void 0;
4
+ const _1 = require("./");
5
+ class BooleanProperty extends _1.BaseProperty {
6
+ set(value) {
7
+ return super.set(value);
8
+ }
9
+ }
10
+ exports.BooleanProperty = BooleanProperty;
@@ -0,0 +1,10 @@
1
+ import { BaseProperty, BasePropertyType } from './BaseProperty';
2
+ export interface DateTimePropertyType extends BasePropertyType {
3
+ timezone?: string;
4
+ }
5
+ export declare class DateTimeProperty extends BaseProperty {
6
+ protected _timezone: string;
7
+ constructor(config: DateTimePropertyType);
8
+ set(value: string | Date): this;
9
+ get timezone(): string;
10
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DateTimeProperty = void 0;
4
+ const BaseProperty_1 = require("./BaseProperty");
5
+ class DateTimeProperty extends BaseProperty_1.BaseProperty {
6
+ constructor(config) {
7
+ super(config);
8
+ this._timezone = config.timezone || 'Z';
9
+ }
10
+ set(value) {
11
+ return super.set(value);
12
+ }
13
+ get timezone() {
14
+ return this._timezone;
15
+ }
16
+ }
17
+ exports.DateTimeProperty = DateTimeProperty;
@@ -0,0 +1,9 @@
1
+ import { BaseProperty, BasePropertyType } from './BaseProperty';
2
+ export interface EnumPropertyType extends BasePropertyType {
3
+ values?: string[];
4
+ }
5
+ export declare class EnumProperty extends BaseProperty {
6
+ protected _values: string[];
7
+ constructor(config: EnumPropertyType);
8
+ set(value: string): this;
9
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EnumProperty = void 0;
4
+ const BaseProperty_1 = require("./BaseProperty");
5
+ class EnumProperty extends BaseProperty_1.BaseProperty {
6
+ constructor(config) {
7
+ super(config);
8
+ this._values = [];
9
+ this._values = config.values || [];
10
+ }
11
+ set(value) {
12
+ if (!this._values.includes(value)) {
13
+ throw new Error(`Value '${value}' is not acceptable`);
14
+ }
15
+ return super.set(value);
16
+ }
17
+ }
18
+ exports.EnumProperty = EnumProperty;
@@ -0,0 +1,20 @@
1
+ import { StringProperty, StringPropertyType } from './StringProperty';
2
+ export declare type HashPropertyAlgos = typeof HashProperty.ALGORITHM_MD5 | typeof HashProperty.ALGORITHM_SHA1 | typeof HashProperty.ALGORITHM_SHA256;
3
+ export interface HashPropertyType extends StringPropertyType {
4
+ algorithm?: HashPropertyAlgos;
5
+ salt?: string;
6
+ prefixed?: boolean;
7
+ }
8
+ export declare class HashProperty extends StringProperty {
9
+ static ALGORITHM_MD5: string;
10
+ static ALGORITHM_SHA1: string;
11
+ static ALGORITHM_SHA256: string;
12
+ static ALGORITHM_BCRYPT: string;
13
+ protected _algorithm: HashPropertyAlgos;
14
+ protected _salt: string;
15
+ protected _prefixed: boolean;
16
+ constructor(config: HashPropertyType);
17
+ _hash(value: string): string;
18
+ set(value: string): this;
19
+ compare(value: string): boolean;
20
+ }
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HashProperty = void 0;
4
+ const StringProperty_1 = require("./StringProperty");
5
+ class HashProperty extends StringProperty_1.StringProperty {
6
+ constructor(config) {
7
+ super(config);
8
+ this._salt = '';
9
+ this._prefixed = false;
10
+ this._algorithm = config.algorithm || HashProperty.ALGORITHM_MD5;
11
+ this._salt = config.salt || '';
12
+ this._prefixed = config.prefixed || false;
13
+ }
14
+ _hash(value) {
15
+ const crypto = require('crypto');
16
+ let algo;
17
+ switch (this._algorithm) {
18
+ case HashProperty.ALGORITHM_MD5:
19
+ algo = crypto.createHash('md5');
20
+ break;
21
+ case HashProperty.ALGORITHM_SHA1:
22
+ algo = crypto.createHash('sha1');
23
+ break;
24
+ case HashProperty.ALGORITHM_SHA256:
25
+ algo = crypto.createHash('sha256');
26
+ break;
27
+ case HashProperty.ALGORITHM_BCRYPT:
28
+ break;
29
+ default:
30
+ throw new Error(`Insupported or missing hash algorithm`);
31
+ }
32
+ let hash = this._prefixed ? `${this._algorithm}-` : '';
33
+ hash += algo.update(`${this._salt}${value}`).digest('hex');
34
+ this._rawValue = false; // don't test some constraints after hashing
35
+ return hash;
36
+ }
37
+ set(value) {
38
+ return super.set(this._hash(value));
39
+ }
40
+ compare(value) {
41
+ return this._hash(value) === this._value;
42
+ }
43
+ }
44
+ exports.HashProperty = HashProperty;
45
+ HashProperty.ALGORITHM_MD5 = 'md5';
46
+ HashProperty.ALGORITHM_SHA1 = 'sha1';
47
+ HashProperty.ALGORITHM_SHA256 = 'sha256';
48
+ HashProperty.ALGORITHM_BCRYPT = 'bcrypt';
@@ -0,0 +1,36 @@
1
+ import { BaseProperty, BasePropertyType } from './BaseProperty';
2
+ export declare type NumberSign = typeof NumberProperty.TYPE_SIGNED | typeof NumberProperty.TYPE_UNSIGNED;
3
+ export declare type NumberType = typeof NumberProperty.TYPE_INTEGER | typeof NumberProperty.TYPE_FLOAT;
4
+ export interface NumberPropertyType extends BasePropertyType {
5
+ minVal?: number;
6
+ maxVal?: number;
7
+ sign?: NumberSign;
8
+ type?: NumberType;
9
+ prefix?: string;
10
+ suffix?: string;
11
+ precision?: number;
12
+ }
13
+ export declare class NumberProperty extends BaseProperty {
14
+ static TYPE_SIGNED: string;
15
+ static TYPE_UNSIGNED: string;
16
+ static TYPE_INTEGER: string;
17
+ static TYPE_FLOAT: string;
18
+ static SEPARATOR: string;
19
+ static TRANSFORM_FORMATTED: string;
20
+ protected _minVal: number | undefined;
21
+ protected _maxVal: number | undefined;
22
+ protected _type: NumberType;
23
+ protected _sign: NumberSign;
24
+ protected _prefix: string;
25
+ protected _suffix: string;
26
+ protected _precision: number;
27
+ protected _value: number | undefined;
28
+ constructor(config: NumberPropertyType);
29
+ set(value: number): this;
30
+ val(transform?: string | undefined): string | number | undefined;
31
+ set minVal(min: number | undefined);
32
+ get minVal(): number | undefined;
33
+ set maxVal(max: number | undefined);
34
+ get maxVal(): number | undefined;
35
+ get type(): string;
36
+ }
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NumberProperty = void 0;
4
+ const BaseProperty_1 = require("./BaseProperty");
5
+ class NumberProperty extends BaseProperty_1.BaseProperty {
6
+ constructor(config) {
7
+ super(config);
8
+ this._minVal = undefined;
9
+ this._maxVal = undefined;
10
+ this._type = NumberProperty.TYPE_INTEGER;
11
+ this._sign = NumberProperty.TYPE_SIGNED;
12
+ this._prefix = '';
13
+ this._suffix = '';
14
+ this._precision = 0;
15
+ this.minVal = config.minVal || undefined;
16
+ this.maxVal = config.maxVal || undefined;
17
+ this._prefix = config.prefix
18
+ ? `${config.prefix}${NumberProperty.SEPARATOR}`
19
+ : '';
20
+ this._suffix = config.suffix
21
+ ? `${NumberProperty.SEPARATOR}${config.suffix}`
22
+ : '';
23
+ if (config.type) {
24
+ this._type = config.type;
25
+ }
26
+ if (config.sign) {
27
+ this._sign = config.sign;
28
+ }
29
+ }
30
+ set(value) {
31
+ if (this._sign === NumberProperty.TYPE_UNSIGNED && value < 0) {
32
+ throw new Error(`Value must be unsigned`);
33
+ }
34
+ if (this._minVal && value < this._minVal) {
35
+ throw new Error(`Value is below ${this._minVal}`);
36
+ }
37
+ if (this._maxVal && value > this._maxVal) {
38
+ throw new Error(`Value is above ${this._maxVal}`);
39
+ }
40
+ if (this._type === NumberProperty.TYPE_INTEGER) {
41
+ value = Math.floor(value);
42
+ }
43
+ return super.set(value);
44
+ }
45
+ val(transform = undefined) {
46
+ switch (transform) {
47
+ case NumberProperty.TRANSFORM_FORMATTED:
48
+ return `${this._prefix}${this._value}${this._suffix}`;
49
+ default:
50
+ return this._value;
51
+ }
52
+ }
53
+ set minVal(min) {
54
+ this._minVal = min;
55
+ }
56
+ get minVal() {
57
+ return this._minVal;
58
+ }
59
+ set maxVal(max) {
60
+ this._maxVal = max;
61
+ }
62
+ get maxVal() {
63
+ return this._maxVal;
64
+ }
65
+ get type() {
66
+ return this._type;
67
+ }
68
+ }
69
+ exports.NumberProperty = NumberProperty;
70
+ NumberProperty.TYPE_SIGNED = 'signed';
71
+ NumberProperty.TYPE_UNSIGNED = 'unsigned';
72
+ NumberProperty.TYPE_INTEGER = 'integer';
73
+ NumberProperty.TYPE_FLOAT = 'float';
74
+ NumberProperty.SEPARATOR = ' ';
75
+ NumberProperty.TRANSFORM_FORMATTED = 'formatted';
@@ -0,0 +1,16 @@
1
+ import { BaseObject } from '../components';
2
+ import { BaseProperty, BasePropertyType } from './BaseProperty';
3
+ export interface ObjectPropertyType extends BasePropertyType {
4
+ instanceOf?: Function | string | Object;
5
+ }
6
+ export declare class ObjectProperty extends BaseProperty {
7
+ _value: BaseObject | undefined;
8
+ _instanceOf: Function | string | Object;
9
+ constructor(config: ObjectPropertyType);
10
+ set(value: any): this;
11
+ toJSON(): {
12
+ label: any;
13
+ ref: string;
14
+ uri: string;
15
+ } | undefined;
16
+ }
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ObjectProperty = void 0;
4
+ const DataObject_1 = require("../components/DataObject");
5
+ const ObjectUri_1 = require("../components/ObjectUri");
6
+ const BaseProperty_1 = require("./BaseProperty");
7
+ class ObjectProperty extends BaseProperty_1.BaseProperty {
8
+ constructor(config) {
9
+ super(config);
10
+ this._value = undefined;
11
+ this._instanceOf = config.instanceOf || Object;
12
+ }
13
+ set(value) {
14
+ if (value instanceof ObjectUri_1.ObjectUri &&
15
+ value instanceof DataObject_1.DataObject &&
16
+ value.constructor.name !== this._instanceOf.constructor.name) {
17
+ throw new Error(`value ${JSON.stringify(value)} is not an instance of ${this._instanceOf.constructor.name}`);
18
+ }
19
+ return super.set(value);
20
+ }
21
+ toJSON() {
22
+ return this._value && this._value.dataObject ? this._value.dataObject.toReference() : undefined;
23
+ }
24
+ }
25
+ exports.ObjectProperty = ObjectProperty;
@@ -0,0 +1,16 @@
1
+ import { DataObject } from '../components/DataObject';
2
+ import { BaseProperty, BasePropertyType } from './BaseProperty';
3
+ export declare class Property {
4
+ static TYPE_ANY: string;
5
+ static TYPE_NUMBER: string;
6
+ static TYPE_STRING: string;
7
+ static TYPE_OBJECT: string;
8
+ static TYPE_ENUM: string;
9
+ static TYPE_BOOLEAN: string;
10
+ static TYPE_HASH: string;
11
+ static TYPE_DATETIME: string;
12
+ static ALLOW_SPACES: string;
13
+ static ALLOW_LETTERS: string;
14
+ static ALLOW_DIGITS: string;
15
+ static factory<P extends BasePropertyType>(params: P, parent: DataObject): BaseProperty;
16
+ }
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Property = void 0;
4
+ const BaseProperty_1 = require("./BaseProperty");
5
+ const BooleanProperty_1 = require("./BooleanProperty");
6
+ const DateTimeProperty_1 = require("./DateTimeProperty");
7
+ const EnumProperty_1 = require("./EnumProperty");
8
+ const HashProperty_1 = require("./HashProperty");
9
+ const ObjectProperty_1 = require("./ObjectProperty");
10
+ const StringProperty_1 = require("./StringProperty");
11
+ const NumberProperty_1 = require("./NumberProperty");
12
+ class Property {
13
+ static factory(params, parent) {
14
+ params.parent = parent;
15
+ // console.log(`Creating ${params.type} property named ${params.name}`)
16
+ switch (params.type) {
17
+ case Property.TYPE_ANY:
18
+ return new BaseProperty_1.BaseProperty(params);
19
+ case Property.TYPE_STRING:
20
+ return new StringProperty_1.StringProperty(params);
21
+ case Property.TYPE_NUMBER:
22
+ return new NumberProperty_1.NumberProperty(params);
23
+ case Property.TYPE_OBJECT:
24
+ return new ObjectProperty_1.ObjectProperty(params);
25
+ case Property.TYPE_ENUM:
26
+ return new EnumProperty_1.EnumProperty(params);
27
+ case Property.TYPE_BOOLEAN:
28
+ return new BooleanProperty_1.BooleanProperty(params);
29
+ case Property.TYPE_HASH:
30
+ return new HashProperty_1.HashProperty(params);
31
+ case Property.TYPE_DATETIME:
32
+ return new DateTimeProperty_1.DateTimeProperty(params);
33
+ default:
34
+ throw new Error(`Unknown property type ${params.type}`);
35
+ }
36
+ }
37
+ }
38
+ exports.Property = Property;
39
+ Property.TYPE_ANY = 'any';
40
+ Property.TYPE_NUMBER = 'number';
41
+ Property.TYPE_STRING = 'string';
42
+ Property.TYPE_OBJECT = 'object';
43
+ Property.TYPE_ENUM = 'enum';
44
+ Property.TYPE_BOOLEAN = 'boolean';
45
+ Property.TYPE_HASH = 'hash';
46
+ Property.TYPE_DATETIME = 'datetime';
47
+ Property.ALLOW_SPACES = 'spaces';
48
+ Property.ALLOW_LETTERS = 'letters';
49
+ Property.ALLOW_DIGITS = 'digits';
@@ -0,0 +1,27 @@
1
+ import { BaseProperty, BasePropertyType } from './BaseProperty';
2
+ export interface StringPropertyType extends BasePropertyType {
3
+ minLength?: number;
4
+ maxLength?: number;
5
+ allowSpaces?: boolean;
6
+ allowDigits?: boolean;
7
+ allowLetters?: boolean;
8
+ allowPattern?: String;
9
+ }
10
+ export declare class StringProperty extends BaseProperty {
11
+ static TRANSFORM_UCASE: string;
12
+ static TRANSFORM_LCASE: string;
13
+ protected _minLength: number;
14
+ protected _maxLength: number;
15
+ protected _value: string | undefined;
16
+ /**
17
+ * Set to false to bypass some rules
18
+ */
19
+ protected _rawValue: boolean;
20
+ constructor(config: StringPropertyType);
21
+ set(value: any): this;
22
+ get(transform?: string | undefined): string | undefined;
23
+ set minLength(min: number);
24
+ get minLength(): number;
25
+ set maxLength(max: number);
26
+ get maxLength(): number;
27
+ }