@bitblit/ratchet-misc 4.0.80-alpha
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/dist/cjs/build/ratchet-misc-info.js +18 -0
- package/dist/cjs/handlebars/handlebars-ratchet.js +115 -0
- package/dist/cjs/index.js +8 -0
- package/dist/cjs/model-validator/model-validator.js +55 -0
- package/dist/cjs/rxjs/observable-ratchet.js +20 -0
- package/dist/cjs/rxjs/rxjs-ratchet.js +40 -0
- package/dist/es/build/ratchet-misc-info.js +14 -0
- package/dist/es/handlebars/handlebars-ratchet.js +110 -0
- package/dist/es/index.js +5 -0
- package/dist/es/model-validator/model-validator.js +50 -0
- package/dist/es/rxjs/observable-ratchet.js +16 -0
- package/dist/es/rxjs/rxjs-ratchet.js +36 -0
- package/dist/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/tsconfig.es.tsbuildinfo +1 -0
- package/dist/tsconfig.types.tsbuildinfo +1 -0
- package/dist/types/build/ratchet-misc-info.d.ts +5 -0
- package/dist/types/handlebars/handlebars-ratchet.d.ts +36 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/model-validator/model-validator.d.ts +13 -0
- package/dist/types/rxjs/observable-ratchet.d.ts +11 -0
- package/dist/types/rxjs/rxjs-ratchet.d.ts +6 -0
- package/package.json +74 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RatchetMiscInfo = void 0;
|
|
4
|
+
class RatchetMiscInfo {
|
|
5
|
+
constructor() { }
|
|
6
|
+
static buildInformation() {
|
|
7
|
+
const val = {
|
|
8
|
+
version: '80',
|
|
9
|
+
hash: '10fcb761c2fa4186df89e527e948f5780a4e14ac',
|
|
10
|
+
branch: 'alpha-2023-03-12-2',
|
|
11
|
+
tag: 'alpha-2023-03-12-2',
|
|
12
|
+
timeBuiltISO: '2023-03-12T20:00:51-0700',
|
|
13
|
+
notes: '',
|
|
14
|
+
};
|
|
15
|
+
return val;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.RatchetMiscInfo = RatchetMiscInfo;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HandlebarsRatchet = void 0;
|
|
4
|
+
const ratchet_common_1 = require("@bitblit/ratchet-common");
|
|
5
|
+
const ratchet_common_2 = require("@bitblit/ratchet-common");
|
|
6
|
+
const ratchet_common_3 = require("@bitblit/ratchet-common");
|
|
7
|
+
const ratchet_common_4 = require("@bitblit/ratchet-common");
|
|
8
|
+
class HandlebarsRatchet {
|
|
9
|
+
constructor() { }
|
|
10
|
+
static functionMap() {
|
|
11
|
+
return {
|
|
12
|
+
eq: HandlebarsRatchet.equal,
|
|
13
|
+
ne: HandlebarsRatchet.notEqual,
|
|
14
|
+
lt: HandlebarsRatchet.lessThan,
|
|
15
|
+
gt: HandlebarsRatchet.greaterThan,
|
|
16
|
+
lte: HandlebarsRatchet.lessThanEqual,
|
|
17
|
+
gte: HandlebarsRatchet.greaterThanEqual,
|
|
18
|
+
and: HandlebarsRatchet.and,
|
|
19
|
+
or: HandlebarsRatchet.or,
|
|
20
|
+
formatBytes: HandlebarsRatchet.formatBytes,
|
|
21
|
+
rpn: HandlebarsRatchet.reversePolishNotation,
|
|
22
|
+
add: HandlebarsRatchet.add,
|
|
23
|
+
sub: HandlebarsRatchet.sub,
|
|
24
|
+
mul: HandlebarsRatchet.mul,
|
|
25
|
+
div: HandlebarsRatchet.div,
|
|
26
|
+
mod: HandlebarsRatchet.mod,
|
|
27
|
+
maxNum: HandlebarsRatchet.maxNum,
|
|
28
|
+
minNum: HandlebarsRatchet.minNum,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
static registerAll(handlebars) {
|
|
32
|
+
handlebars.registerHelper(HandlebarsRatchet.functionMap());
|
|
33
|
+
}
|
|
34
|
+
static add(v1, v2) {
|
|
35
|
+
return ratchet_common_2.NumberRatchet.safeNumber(v1) + ratchet_common_2.NumberRatchet.safeNumber(v2);
|
|
36
|
+
}
|
|
37
|
+
static sub(v1, v2) {
|
|
38
|
+
return ratchet_common_2.NumberRatchet.safeNumber(v1) - ratchet_common_2.NumberRatchet.safeNumber(v2);
|
|
39
|
+
}
|
|
40
|
+
static mul(v1, v2) {
|
|
41
|
+
return ratchet_common_2.NumberRatchet.safeNumber(v1) * ratchet_common_2.NumberRatchet.safeNumber(v2);
|
|
42
|
+
}
|
|
43
|
+
static div(v1, v2) {
|
|
44
|
+
return ratchet_common_2.NumberRatchet.safeNumber(v1) / ratchet_common_2.NumberRatchet.safeNumber(v2);
|
|
45
|
+
}
|
|
46
|
+
static mod(v1, v2) {
|
|
47
|
+
return ratchet_common_2.NumberRatchet.safeNumber(v1) % ratchet_common_2.NumberRatchet.safeNumber(v2);
|
|
48
|
+
}
|
|
49
|
+
static equal(v1, v2) {
|
|
50
|
+
return v1 === v2;
|
|
51
|
+
}
|
|
52
|
+
static notEqual(v1, v2) {
|
|
53
|
+
return v1 !== v2;
|
|
54
|
+
}
|
|
55
|
+
static lessThan(v1, v2) {
|
|
56
|
+
return v1 < v2;
|
|
57
|
+
}
|
|
58
|
+
static lessThanEqual(v1, v2) {
|
|
59
|
+
return v1 <= v2;
|
|
60
|
+
}
|
|
61
|
+
static greaterThan(v1, v2) {
|
|
62
|
+
return v1 > v2;
|
|
63
|
+
}
|
|
64
|
+
static greaterThanEqual(v1, v2) {
|
|
65
|
+
return v1 >= v2;
|
|
66
|
+
}
|
|
67
|
+
static maxNum(...args) {
|
|
68
|
+
return Math.max(...args.slice(0, -1));
|
|
69
|
+
}
|
|
70
|
+
static minNum(...args) {
|
|
71
|
+
return Math.min(...args.slice(0, -1));
|
|
72
|
+
}
|
|
73
|
+
static and(...args) {
|
|
74
|
+
return Array.prototype.every.call(args, Boolean);
|
|
75
|
+
}
|
|
76
|
+
static or(...args) {
|
|
77
|
+
return Array.prototype.slice.call(args, 0, -1).some(Boolean);
|
|
78
|
+
}
|
|
79
|
+
static formatBytes(v1) {
|
|
80
|
+
return ratchet_common_1.StringRatchet.formatBytes(v1);
|
|
81
|
+
}
|
|
82
|
+
static reversePolishNotation(...args) {
|
|
83
|
+
var _a;
|
|
84
|
+
let rval = null;
|
|
85
|
+
try {
|
|
86
|
+
const fns = Object.assign({}, HandlebarsRatchet.functionMap());
|
|
87
|
+
delete fns['formatBytes'];
|
|
88
|
+
const stack = [];
|
|
89
|
+
for (let i = 0; i < args.length - 1; i++) {
|
|
90
|
+
const a = args[i];
|
|
91
|
+
if (fns[a]) {
|
|
92
|
+
if (stack.length > 1) {
|
|
93
|
+
const op2 = stack.pop();
|
|
94
|
+
const op1 = stack.pop();
|
|
95
|
+
const res = fns[a](op1, op2, {});
|
|
96
|
+
stack.push(res);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
ratchet_common_3.ErrorRatchet.throwFormattedErr('Cannot execute operation %s - not enough args', a);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
stack.push(a);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
rval = stack.pop();
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
ratchet_common_4.Logger.error('Failed to execute RPN: %s', err, err);
|
|
110
|
+
rval = ((_a = ratchet_common_3.ErrorRatchet.asErr(err)) === null || _a === void 0 ? void 0 : _a.message) || 'Failure';
|
|
111
|
+
}
|
|
112
|
+
return rval;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
exports.HandlebarsRatchet = HandlebarsRatchet;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./build/ratchet-misc-info"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./handlebars/handlebars-ratchet"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./model-validator/model-validator"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./rxjs/observable-ratchet"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./rxjs/rxjs-ratchet"), exports);
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ModelValidator = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const swagger_model_validator_1 = tslib_1.__importDefault(require("swagger-model-validator"));
|
|
6
|
+
const js_yaml_1 = tslib_1.__importDefault(require("js-yaml"));
|
|
7
|
+
const ratchet_common_1 = require("@bitblit/ratchet-common");
|
|
8
|
+
class ModelValidator {
|
|
9
|
+
constructor(allModels) {
|
|
10
|
+
this.allModels = allModels;
|
|
11
|
+
if (!allModels || Object.keys(allModels).length == 0) {
|
|
12
|
+
ratchet_common_1.ErrorRatchet.throwFormattedErr('Cannot create model validator, passed models was null/empty : %j', allModels);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
static createFromYamlString(yamlString, rootPath) {
|
|
16
|
+
const src = js_yaml_1.default.load(yamlString);
|
|
17
|
+
const modelSrc = rootPath && rootPath.length > 0 ? ratchet_common_1.MapRatchet.findValue(src, rootPath) : src;
|
|
18
|
+
return ModelValidator.createFromParsedObject(modelSrc);
|
|
19
|
+
}
|
|
20
|
+
static createFromParsedObject(parsedObject) {
|
|
21
|
+
return new ModelValidator(parsedObject);
|
|
22
|
+
}
|
|
23
|
+
get modelNames() {
|
|
24
|
+
return Object.keys(this.allModels);
|
|
25
|
+
}
|
|
26
|
+
addModel(modelName, model) {
|
|
27
|
+
this.allModels[modelName] = model;
|
|
28
|
+
}
|
|
29
|
+
fetchModel(modelName) {
|
|
30
|
+
return this.allModels[modelName];
|
|
31
|
+
}
|
|
32
|
+
validate(modelName, modelObject, emptyAllowed = false, extraPropertiesAllowed = true) {
|
|
33
|
+
let rval = [];
|
|
34
|
+
ratchet_common_1.Logger.silly('Validating model %s all definitions are : %j', modelName, this.allModels);
|
|
35
|
+
const modelEmpty = !modelObject || Object.keys(modelObject).length === 0;
|
|
36
|
+
if (modelEmpty) {
|
|
37
|
+
if (!emptyAllowed) {
|
|
38
|
+
rval.push('Empty / null object sent, but empty not allowed here');
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
if (this.allModels && modelName && this.allModels[modelName]) {
|
|
43
|
+
const validation = new swagger_model_validator_1.default().validate(modelObject, this.allModels[modelName], this.allModels, emptyAllowed, extraPropertiesAllowed);
|
|
44
|
+
if (validation.errorCount > 0) {
|
|
45
|
+
rval = validation.errors.map((e) => e.message);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
rval = ['Model named "' + modelName + '" not present in schema'];
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return rval;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.ModelValidator = ModelValidator;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ObservableRatchet = void 0;
|
|
4
|
+
const rxjs_1 = require("rxjs");
|
|
5
|
+
const ratchet_common_1 = require("@bitblit/ratchet-common");
|
|
6
|
+
class ObservableRatchet {
|
|
7
|
+
static timeout(srcObservable, title, timeoutMillis) {
|
|
8
|
+
const rval = (0, rxjs_1.race)(srcObservable, this.createTimeoutObservable(title, timeoutMillis));
|
|
9
|
+
return rval;
|
|
10
|
+
}
|
|
11
|
+
static createTimeoutObservable(title, timeoutMillis) {
|
|
12
|
+
return rxjs_1.Observable.create((observer) => {
|
|
13
|
+
const id = setTimeout(() => {
|
|
14
|
+
clearTimeout(id);
|
|
15
|
+
observer.next(new ratchet_common_1.TimeoutToken(title, timeoutMillis));
|
|
16
|
+
}, timeoutMillis);
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.ObservableRatchet = ObservableRatchet;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RxjsRatchet = void 0;
|
|
4
|
+
const ratchet_common_1 = require("@bitblit/ratchet-common");
|
|
5
|
+
class RxjsRatchet {
|
|
6
|
+
static safeUnsubscribe(sub) {
|
|
7
|
+
return ratchet_common_1.MapRatchet.safeCallFunction(sub, 'unsubscribe');
|
|
8
|
+
}
|
|
9
|
+
static async waitForNonNullOnSubject(subject) {
|
|
10
|
+
if (!!subject.value) {
|
|
11
|
+
return subject.value;
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
return new Promise((resolve, reject) => {
|
|
15
|
+
const innerSub = subject.subscribe((val) => {
|
|
16
|
+
if (!!val) {
|
|
17
|
+
RxjsRatchet.safeUnsubscribe(innerSub);
|
|
18
|
+
resolve(val);
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
static async waitForTargetValueOnSubject(subject, targetValue) {
|
|
25
|
+
if (subject.value === targetValue) {
|
|
26
|
+
return subject.value;
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
return new Promise((resolve, reject) => {
|
|
30
|
+
const innerSub = subject.subscribe((val) => {
|
|
31
|
+
if (val === targetValue) {
|
|
32
|
+
RxjsRatchet.safeUnsubscribe(innerSub);
|
|
33
|
+
resolve(val);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.RxjsRatchet = RxjsRatchet;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export class RatchetMiscInfo {
|
|
2
|
+
constructor() { }
|
|
3
|
+
static buildInformation() {
|
|
4
|
+
const val = {
|
|
5
|
+
version: '80',
|
|
6
|
+
hash: '10fcb761c2fa4186df89e527e948f5780a4e14ac',
|
|
7
|
+
branch: 'alpha-2023-03-12-2',
|
|
8
|
+
tag: 'alpha-2023-03-12-2',
|
|
9
|
+
timeBuiltISO: '2023-03-12T20:00:51-0700',
|
|
10
|
+
notes: '',
|
|
11
|
+
};
|
|
12
|
+
return val;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { StringRatchet } from '@bitblit/ratchet-common';
|
|
2
|
+
import { NumberRatchet } from '@bitblit/ratchet-common';
|
|
3
|
+
import { ErrorRatchet } from '@bitblit/ratchet-common';
|
|
4
|
+
import { Logger } from '@bitblit/ratchet-common';
|
|
5
|
+
export class HandlebarsRatchet {
|
|
6
|
+
constructor() { }
|
|
7
|
+
static functionMap() {
|
|
8
|
+
return {
|
|
9
|
+
eq: HandlebarsRatchet.equal,
|
|
10
|
+
ne: HandlebarsRatchet.notEqual,
|
|
11
|
+
lt: HandlebarsRatchet.lessThan,
|
|
12
|
+
gt: HandlebarsRatchet.greaterThan,
|
|
13
|
+
lte: HandlebarsRatchet.lessThanEqual,
|
|
14
|
+
gte: HandlebarsRatchet.greaterThanEqual,
|
|
15
|
+
and: HandlebarsRatchet.and,
|
|
16
|
+
or: HandlebarsRatchet.or,
|
|
17
|
+
formatBytes: HandlebarsRatchet.formatBytes,
|
|
18
|
+
rpn: HandlebarsRatchet.reversePolishNotation,
|
|
19
|
+
add: HandlebarsRatchet.add,
|
|
20
|
+
sub: HandlebarsRatchet.sub,
|
|
21
|
+
mul: HandlebarsRatchet.mul,
|
|
22
|
+
div: HandlebarsRatchet.div,
|
|
23
|
+
mod: HandlebarsRatchet.mod,
|
|
24
|
+
maxNum: HandlebarsRatchet.maxNum,
|
|
25
|
+
minNum: HandlebarsRatchet.minNum,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
static registerAll(handlebars) {
|
|
29
|
+
handlebars.registerHelper(HandlebarsRatchet.functionMap());
|
|
30
|
+
}
|
|
31
|
+
static add(v1, v2) {
|
|
32
|
+
return NumberRatchet.safeNumber(v1) + NumberRatchet.safeNumber(v2);
|
|
33
|
+
}
|
|
34
|
+
static sub(v1, v2) {
|
|
35
|
+
return NumberRatchet.safeNumber(v1) - NumberRatchet.safeNumber(v2);
|
|
36
|
+
}
|
|
37
|
+
static mul(v1, v2) {
|
|
38
|
+
return NumberRatchet.safeNumber(v1) * NumberRatchet.safeNumber(v2);
|
|
39
|
+
}
|
|
40
|
+
static div(v1, v2) {
|
|
41
|
+
return NumberRatchet.safeNumber(v1) / NumberRatchet.safeNumber(v2);
|
|
42
|
+
}
|
|
43
|
+
static mod(v1, v2) {
|
|
44
|
+
return NumberRatchet.safeNumber(v1) % NumberRatchet.safeNumber(v2);
|
|
45
|
+
}
|
|
46
|
+
static equal(v1, v2) {
|
|
47
|
+
return v1 === v2;
|
|
48
|
+
}
|
|
49
|
+
static notEqual(v1, v2) {
|
|
50
|
+
return v1 !== v2;
|
|
51
|
+
}
|
|
52
|
+
static lessThan(v1, v2) {
|
|
53
|
+
return v1 < v2;
|
|
54
|
+
}
|
|
55
|
+
static lessThanEqual(v1, v2) {
|
|
56
|
+
return v1 <= v2;
|
|
57
|
+
}
|
|
58
|
+
static greaterThan(v1, v2) {
|
|
59
|
+
return v1 > v2;
|
|
60
|
+
}
|
|
61
|
+
static greaterThanEqual(v1, v2) {
|
|
62
|
+
return v1 >= v2;
|
|
63
|
+
}
|
|
64
|
+
static maxNum(...args) {
|
|
65
|
+
return Math.max(...args.slice(0, -1));
|
|
66
|
+
}
|
|
67
|
+
static minNum(...args) {
|
|
68
|
+
return Math.min(...args.slice(0, -1));
|
|
69
|
+
}
|
|
70
|
+
static and(...args) {
|
|
71
|
+
return Array.prototype.every.call(args, Boolean);
|
|
72
|
+
}
|
|
73
|
+
static or(...args) {
|
|
74
|
+
return Array.prototype.slice.call(args, 0, -1).some(Boolean);
|
|
75
|
+
}
|
|
76
|
+
static formatBytes(v1) {
|
|
77
|
+
return StringRatchet.formatBytes(v1);
|
|
78
|
+
}
|
|
79
|
+
static reversePolishNotation(...args) {
|
|
80
|
+
let rval = null;
|
|
81
|
+
try {
|
|
82
|
+
const fns = Object.assign({}, HandlebarsRatchet.functionMap());
|
|
83
|
+
delete fns['formatBytes'];
|
|
84
|
+
const stack = [];
|
|
85
|
+
for (let i = 0; i < args.length - 1; i++) {
|
|
86
|
+
const a = args[i];
|
|
87
|
+
if (fns[a]) {
|
|
88
|
+
if (stack.length > 1) {
|
|
89
|
+
const op2 = stack.pop();
|
|
90
|
+
const op1 = stack.pop();
|
|
91
|
+
const res = fns[a](op1, op2, {});
|
|
92
|
+
stack.push(res);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
ErrorRatchet.throwFormattedErr('Cannot execute operation %s - not enough args', a);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
stack.push(a);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
rval = stack.pop();
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
Logger.error('Failed to execute RPN: %s', err, err);
|
|
106
|
+
rval = ErrorRatchet.asErr(err)?.message || 'Failure';
|
|
107
|
+
}
|
|
108
|
+
return rval;
|
|
109
|
+
}
|
|
110
|
+
}
|
package/dist/es/index.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import Validator from 'swagger-model-validator';
|
|
2
|
+
import yaml from 'js-yaml';
|
|
3
|
+
import { ErrorRatchet, Logger, MapRatchet } from '@bitblit/ratchet-common';
|
|
4
|
+
export class ModelValidator {
|
|
5
|
+
constructor(allModels) {
|
|
6
|
+
this.allModels = allModels;
|
|
7
|
+
if (!allModels || Object.keys(allModels).length == 0) {
|
|
8
|
+
ErrorRatchet.throwFormattedErr('Cannot create model validator, passed models was null/empty : %j', allModels);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
static createFromYamlString(yamlString, rootPath) {
|
|
12
|
+
const src = yaml.load(yamlString);
|
|
13
|
+
const modelSrc = rootPath && rootPath.length > 0 ? MapRatchet.findValue(src, rootPath) : src;
|
|
14
|
+
return ModelValidator.createFromParsedObject(modelSrc);
|
|
15
|
+
}
|
|
16
|
+
static createFromParsedObject(parsedObject) {
|
|
17
|
+
return new ModelValidator(parsedObject);
|
|
18
|
+
}
|
|
19
|
+
get modelNames() {
|
|
20
|
+
return Object.keys(this.allModels);
|
|
21
|
+
}
|
|
22
|
+
addModel(modelName, model) {
|
|
23
|
+
this.allModels[modelName] = model;
|
|
24
|
+
}
|
|
25
|
+
fetchModel(modelName) {
|
|
26
|
+
return this.allModels[modelName];
|
|
27
|
+
}
|
|
28
|
+
validate(modelName, modelObject, emptyAllowed = false, extraPropertiesAllowed = true) {
|
|
29
|
+
let rval = [];
|
|
30
|
+
Logger.silly('Validating model %s all definitions are : %j', modelName, this.allModels);
|
|
31
|
+
const modelEmpty = !modelObject || Object.keys(modelObject).length === 0;
|
|
32
|
+
if (modelEmpty) {
|
|
33
|
+
if (!emptyAllowed) {
|
|
34
|
+
rval.push('Empty / null object sent, but empty not allowed here');
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
if (this.allModels && modelName && this.allModels[modelName]) {
|
|
39
|
+
const validation = new Validator().validate(modelObject, this.allModels[modelName], this.allModels, emptyAllowed, extraPropertiesAllowed);
|
|
40
|
+
if (validation.errorCount > 0) {
|
|
41
|
+
rval = validation.errors.map((e) => e.message);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
rval = ['Model named "' + modelName + '" not present in schema'];
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return rval;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Observable, race } from 'rxjs';
|
|
2
|
+
import { TimeoutToken } from '@bitblit/ratchet-common';
|
|
3
|
+
export class ObservableRatchet {
|
|
4
|
+
static timeout(srcObservable, title, timeoutMillis) {
|
|
5
|
+
const rval = race(srcObservable, this.createTimeoutObservable(title, timeoutMillis));
|
|
6
|
+
return rval;
|
|
7
|
+
}
|
|
8
|
+
static createTimeoutObservable(title, timeoutMillis) {
|
|
9
|
+
return Observable.create((observer) => {
|
|
10
|
+
const id = setTimeout(() => {
|
|
11
|
+
clearTimeout(id);
|
|
12
|
+
observer.next(new TimeoutToken(title, timeoutMillis));
|
|
13
|
+
}, timeoutMillis);
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { MapRatchet } from '@bitblit/ratchet-common';
|
|
2
|
+
export class RxjsRatchet {
|
|
3
|
+
static safeUnsubscribe(sub) {
|
|
4
|
+
return MapRatchet.safeCallFunction(sub, 'unsubscribe');
|
|
5
|
+
}
|
|
6
|
+
static async waitForNonNullOnSubject(subject) {
|
|
7
|
+
if (!!subject.value) {
|
|
8
|
+
return subject.value;
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
return new Promise((resolve, reject) => {
|
|
12
|
+
const innerSub = subject.subscribe((val) => {
|
|
13
|
+
if (!!val) {
|
|
14
|
+
RxjsRatchet.safeUnsubscribe(innerSub);
|
|
15
|
+
resolve(val);
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
static async waitForTargetValueOnSubject(subject, targetValue) {
|
|
22
|
+
if (subject.value === targetValue) {
|
|
23
|
+
return subject.value;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
return new Promise((resolve, reject) => {
|
|
27
|
+
const innerSub = subject.subscribe((val) => {
|
|
28
|
+
if (val === targetValue) {
|
|
29
|
+
RxjsRatchet.safeUnsubscribe(innerSub);
|
|
30
|
+
resolve(val);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|