@xapp/stentor-validation 1.32.147 → 1.33.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/IntentValidator.d.ts +13 -2
- package/lib/IntentValidator.js +27 -7
- package/lib/IntentValidator.js.map +1 -1
- package/package.json +2 -2
package/lib/IntentValidator.d.ts
CHANGED
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
/*! Copyright (c) 2021, XAPPmedia */
|
|
2
2
|
import { Validator, ValidationResult } from "lakmus";
|
|
3
|
-
import { Intent } from "stentor-models";
|
|
3
|
+
import { Intent, Slot } from "stentor-models";
|
|
4
|
+
export interface IntentValidatorState {
|
|
5
|
+
/**
|
|
6
|
+
* Slots that have been saved from previous Intents.
|
|
7
|
+
*
|
|
8
|
+
* @type {Slot}
|
|
9
|
+
* @memberof IntentValidatorState
|
|
10
|
+
*/
|
|
11
|
+
slots: Slot[];
|
|
12
|
+
}
|
|
4
13
|
export declare class IntentValidator extends Validator<Intent> {
|
|
5
|
-
|
|
14
|
+
private readonly slots;
|
|
15
|
+
constructor(state?: IntentValidatorState);
|
|
16
|
+
get state(): IntentValidatorState;
|
|
6
17
|
validate(intent: Intent): ValidationResult;
|
|
7
18
|
}
|
package/lib/IntentValidator.js
CHANGED
|
@@ -6,14 +6,21 @@ const lakmus_1 = require("lakmus");
|
|
|
6
6
|
const stentor_interaction_model_1 = require("stentor-interaction-model");
|
|
7
7
|
const UtteranceValidator_1 = require("./UtteranceValidator");
|
|
8
8
|
class IntentValidator extends lakmus_1.Validator {
|
|
9
|
-
constructor() {
|
|
9
|
+
constructor(state) {
|
|
10
10
|
super();
|
|
11
|
+
this.slots = (state === null || state === void 0 ? void 0 : state.slots) || [];
|
|
11
12
|
// Required fields
|
|
12
13
|
this.ruleFor(x => x.intentId)
|
|
13
14
|
.notNull()
|
|
14
15
|
.notEmpty();
|
|
15
16
|
}
|
|
17
|
+
get state() {
|
|
18
|
+
return {
|
|
19
|
+
slots: this.slots.slice()
|
|
20
|
+
};
|
|
21
|
+
}
|
|
16
22
|
validate(intent) {
|
|
23
|
+
// ******************* validations for only the intent ***************
|
|
17
24
|
const result = super.validate(intent);
|
|
18
25
|
const utterances = new stentor_interaction_model_1.UtteranceGenerator().forIntent(intent);
|
|
19
26
|
const slotNames = [];
|
|
@@ -26,22 +33,35 @@ class IntentValidator extends lakmus_1.Validator {
|
|
|
26
33
|
slotNames.push(...stentor_interaction_model_1.getSlotNames(utterance));
|
|
27
34
|
});
|
|
28
35
|
}
|
|
29
|
-
const
|
|
36
|
+
const intentSlots = intent.slots || [];
|
|
30
37
|
// Make sure we don't have any duplicate definitions
|
|
31
|
-
const slotMap = {
|
|
32
|
-
slots.forEach((slot) => {
|
|
38
|
+
const slotMap = intentSlots.reduce((previous, slot) => {
|
|
33
39
|
const name = slot.name;
|
|
34
|
-
if (
|
|
40
|
+
if (previous[name]) {
|
|
35
41
|
result.errors.push(new lakmus_1.ValidationError(`Slot ${name} is defined more than once.`, "slots"));
|
|
36
42
|
}
|
|
37
|
-
|
|
38
|
-
|
|
43
|
+
previous[name] = slot;
|
|
44
|
+
return previous;
|
|
45
|
+
}, {});
|
|
39
46
|
// Every slot name needs a defined slot
|
|
40
47
|
slotNames.forEach((slotName) => {
|
|
41
48
|
if (!slotMap[slotName]) {
|
|
42
49
|
result.errors.push(new lakmus_1.ValidationError(`Slot ${slotName} does not have a defined type.`));
|
|
43
50
|
}
|
|
44
51
|
});
|
|
52
|
+
// ******************************************************************
|
|
53
|
+
// ******************* validations across all intents ***************
|
|
54
|
+
this.slots.push(...intentSlots);
|
|
55
|
+
// eslint:disable
|
|
56
|
+
this.slots.forEach(slot => {
|
|
57
|
+
// Good news, everyone! We get to use the slot map from the previous validations
|
|
58
|
+
if (slotMap[slot.name]) {
|
|
59
|
+
if (slotMap[slot.name].type !== slot.type) {
|
|
60
|
+
result.errors.push(new lakmus_1.ValidationError(`Slot ${slot.name} is defined as two different types: Type 1: ${slotMap[slot.name].type} - Type 2: ${slot.type}`, "slots"));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
// ******************************************************************
|
|
45
65
|
return result;
|
|
46
66
|
}
|
|
47
67
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IntentValidator.js","sourceRoot":"","sources":["../src/IntentValidator.ts"],"names":[],"mappings":";AAAA,oCAAoC;;;AAEpC,mCAAsE;AACtE,yEAA6E;AAE7E,6DAA0D;
|
|
1
|
+
{"version":3,"file":"IntentValidator.js","sourceRoot":"","sources":["../src/IntentValidator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "restricted"
|
|
6
6
|
},
|
|
7
|
-
"version": "1.
|
|
7
|
+
"version": "1.33.0",
|
|
8
8
|
"description": "Model validation for Stentor",
|
|
9
9
|
"types": "lib/index",
|
|
10
10
|
"main": "lib/index",
|
|
@@ -43,5 +43,5 @@
|
|
|
43
43
|
"clean": "rm -rf ./lib/*",
|
|
44
44
|
"test": "mocha --recursive -r ts-node/register \"./src/**/*.test.ts\""
|
|
45
45
|
},
|
|
46
|
-
"gitHead": "
|
|
46
|
+
"gitHead": "64e52de066b4bbc9fc91417bc758616620c39a65"
|
|
47
47
|
}
|