1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var client_1 = require("../client");
|
4 | var actions_1 = require("../actions");
|
5 | var Error_1 = require("../actions/Error");
|
6 | var actions_2 = require("./actions");
|
7 | var type_validate_1 = require("./type-validate");
|
8 | var utils_1 = require("./utils");
|
9 | var helper_1 = require("../actions/helper");
|
10 | function updateValidator(localOrigin, group, options) {
|
11 | switch (group) {
|
12 | case actions_1.Group.Button:
|
13 | return actions_2.Button.validateProps(options);
|
14 | case actions_1.Group.ButtonGroup:
|
15 | return actions_2.ButtonGroup.validateProps(options);
|
16 | case actions_1.Group.Modal:
|
17 | return actions_2.Modal.validateProps(options, localOrigin);
|
18 | case actions_1.Group.TitleBar:
|
19 | return actions_2.TitleBar.validateProps(options);
|
20 | case actions_1.Group.ResourcePicker:
|
21 | return actions_2.ResourcePicker.validateProps(options);
|
22 | case actions_1.Group.Toast:
|
23 | return actions_2.Toast.validateProps(options);
|
24 | case actions_1.Group.ContextualSaveBar:
|
25 | return actions_2.ContextualSaveBar.validateProps(options);
|
26 | }
|
27 | }
|
28 | function dispatchPayloadValidator(action, localOrigin) {
|
29 | switch (action.group) {
|
30 | case actions_1.Group.Button:
|
31 | return actions_2.Button.validateAction(action);
|
32 | case actions_1.Group.ButtonGroup:
|
33 | return actions_2.ButtonGroup.validateAction(action);
|
34 | case actions_1.Group.Modal:
|
35 | return actions_2.Modal.validateAction(action, localOrigin);
|
36 | case actions_1.Group.TitleBar:
|
37 | return actions_2.TitleBar.validateAction(action);
|
38 | case actions_1.Group.ResourcePicker:
|
39 | return actions_2.ResourcePicker.validateAction(action);
|
40 | case actions_1.Group.Loading:
|
41 | return actions_2.Loading.validateAction(action);
|
42 | case actions_1.Group.Toast:
|
43 | return actions_2.Toast.validateAction(action);
|
44 | case actions_1.Group.Cart:
|
45 | return actions_2.Cart.validateAction(action);
|
46 | case actions_1.Group.Navigation:
|
47 | return actions_2.Navigation.validateAction(action);
|
48 | case actions_1.Group.Print:
|
49 | return actions_2.Print.validateAction(action);
|
50 | case actions_1.Group.Scanner:
|
51 | return actions_2.Scanner.validateAction(action);
|
52 | case actions_1.Group.Fullscreen:
|
53 | return actions_2.Fullscreen.validateAction(action);
|
54 | case actions_1.Group.ContextualSaveBar:
|
55 | return actions_2.ContextualSaveBar.validateAction(action);
|
56 | }
|
57 | }
|
58 | function dispatchValidator(action, origin) {
|
59 | var errors = type_validate_1.validate(action, type_validate_1.matchesObject({
|
60 | group: type_validate_1.matchesEnum(actions_1.Group, {
|
61 | message: function (_, value) { return "Unknown or unsupported action group `" + value + "`"; },
|
62 | }),
|
63 | version: type_validate_1.matchesString(),
|
64 | }));
|
65 | if (errors) {
|
66 | return Error_1.invalidAction(action, utils_1.actionMessage(errors));
|
67 | }
|
68 | var payloadErrors = dispatchPayloadValidator(action, origin);
|
69 | return payloadErrors ? Error_1.invalidPayload(action, utils_1.actionMessage(payloadErrors)) : action;
|
70 | }
|
71 | exports.connectValidatorToUpdateHook = function (next) {
|
72 | return function (options) {
|
73 | var args = [];
|
74 | for (var _i = 1; _i < arguments.length; _i++) {
|
75 | args[_i - 1] = arguments[_i];
|
76 | }
|
77 |
|
78 |
|
79 |
|
80 | var mergedOptions = helper_1.getMergedProps(this.options, options);
|
81 | var errors = updateValidator(this.app.localOrigin, this.defaultGroup, mergedOptions);
|
82 | if (errors) {
|
83 | throw Error_1.fromAction(utils_1.actionMessage(errors), Error_1.ActionType.INVALID_OPTIONS);
|
84 | }
|
85 | return next.apply(void 0, [options].concat(args));
|
86 | };
|
87 | };
|
88 | exports.connectValidatorToDispatchHook = function (next) {
|
89 | return function (action) {
|
90 | var finalAction = dispatchValidator(action, this.localOrigin);
|
91 | return next(finalAction);
|
92 | };
|
93 | };
|
94 | exports.validatorMiddleware = function (hooks) {
|
95 | hooks.set(client_1.LifecycleHook.UpdateAction, exports.connectValidatorToUpdateHook);
|
96 | hooks.set(client_1.LifecycleHook.DispatchAction, exports.connectValidatorToDispatchHook);
|
97 | };
|