UNPKG

@shopify/app-bridge

Version:

**[Join our team and work on libraries like this one.](https://www.shopify.ca/careers)**

119 lines (118 loc) 5.64 kB
"use strict"; var __spreadArray = (this && this.__spreadArray) || function (to, from) { for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i]; return to; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.validatorMiddleware = exports.connectValidatorToDispatchHook = exports.connectValidatorToUpdateHook = void 0; var client_1 = require("../client"); var types_1 = require("../actions/types"); var Error_1 = require("../actions/Error"); var helper_1 = require("../actions/helper"); var actions_1 = require("./actions"); var type_validate_1 = require("./type-validate"); var utils_1 = require("./utils"); function updateValidator(localOrigin, group, options) { switch (group) { case types_1.Group.Button: return actions_1.Button.validateProps(options); case types_1.Group.ButtonGroup: return actions_1.ButtonGroup.validateProps(options); case types_1.Group.Modal: return actions_1.Modal.validateProps(options, localOrigin); case types_1.Group.Menu: return actions_1.Menu.validateProps(options); case types_1.Group.Link: return actions_1.Link.validateProps(options); case types_1.Group.TitleBar: return actions_1.TitleBar.validateProps(options); case types_1.Group.ResourcePicker: return actions_1.ResourcePicker.validateProps(options); case types_1.Group.Toast: return actions_1.Toast.validateProps(options); case types_1.Group.ContextualSaveBar: return actions_1.ContextualSaveBar.validateProps(options); case types_1.Group.unstable_Picker: return actions_1.unstable_Picker.validateProps(options); } } function dispatchPayloadValidator(action, localOrigin) { switch (action.group) { case types_1.Group.Button: return actions_1.Button.validateAction(action); case types_1.Group.ButtonGroup: return actions_1.ButtonGroup.validateAction(action); case types_1.Group.Modal: return actions_1.Modal.validateAction(action, localOrigin); case types_1.Group.Menu: return actions_1.Menu.validateAction(action); case types_1.Group.TitleBar: return actions_1.TitleBar.validateAction(action); case types_1.Group.ResourcePicker: return actions_1.ResourcePicker.validateAction(action); case types_1.Group.Loading: return actions_1.Loading.validateAction(action); case types_1.Group.Toast: return actions_1.Toast.validateAction(action); case types_1.Group.Cart: return actions_1.Cart.validateAction(action); case types_1.Group.Navigation: return actions_1.Navigation.validateAction(action); case types_1.Group.Print: return actions_1.Print.validateAction(action); case types_1.Group.Scanner: return actions_1.Scanner.validateAction(action); case types_1.Group.Fullscreen: return actions_1.Fullscreen.validateAction(action); case types_1.Group.ContextualSaveBar: return actions_1.ContextualSaveBar.validateAction(action); case types_1.Group.Link: return actions_1.Link.validateAction(action); case types_1.Group.unstable_Picker: return actions_1.unstable_Picker.validateAction(action); } } function dispatchValidator(action, origin) { var errors = type_validate_1.validate(action, type_validate_1.matchesObject({ group: type_validate_1.matchesEnum(types_1.Group, { message: function (_, value) { return "Unknown or unsupported action group `" + value + "`"; }, }), version: type_validate_1.matchesString(), })); if (errors) { return Error_1.invalidAction(action, utils_1.actionMessage(errors)); } var payloadErrors = dispatchPayloadValidator(action, origin); return payloadErrors ? Error_1.invalidPayload(action, utils_1.actionMessage(payloadErrors)) : action; } var connectValidatorToUpdateHook = function (next) { return function (options) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } // The group should be statically set to the default initial group as certain components // (ex. Button and ButtonGroup) can be dynamically grouped under a new group (ex. TitleBar) // We accept partial options so the validator should be called on merged new and old options var mergedOptions = helper_1.getMergedProps(this.options, options); var errors = updateValidator(this.app.localOrigin, this.defaultGroup, mergedOptions); if (errors) { throw Error_1.fromAction(utils_1.actionMessage(errors), Error_1.Action.INVALID_OPTIONS); } return next.apply(void 0, __spreadArray([options], args)); }; }; exports.connectValidatorToUpdateHook = connectValidatorToUpdateHook; var connectValidatorToDispatchHook = function (next) { return function (action) { var finalAction = dispatchValidator(action, this.localOrigin); return next(finalAction); }; }; exports.connectValidatorToDispatchHook = connectValidatorToDispatchHook; var validatorMiddleware = function (hooks) { hooks.set(client_1.LifecycleHook.UpdateAction, exports.connectValidatorToUpdateHook); hooks.set(client_1.LifecycleHook.DispatchAction, exports.connectValidatorToDispatchHook); }; exports.validatorMiddleware = validatorMiddleware;