UNPKG

@shopify/app-bridge

Version:

> **Maintenance Mode:** Although apps using this package will continue to function, it is no longer receiving updates. For new projects, please use the [CDN version of App Bridge](https://shopify.dev/docs/api/app-home?accordionItem=getting-started-build-y

123 lines (122 loc) 5.9 kB
"use strict"; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; 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 = (0, type_validate_1.validate)(action, (0, type_validate_1.matchesObject)({ group: (0, type_validate_1.matchesEnum)(types_1.Group, { message: function (_, value) { return "Unknown or unsupported action group `".concat(value, "`"); }, }), version: (0, type_validate_1.matchesString)(), })); if (errors) { return (0, Error_1.invalidAction)(action, (0, utils_1.actionMessage)(errors)); } var payloadErrors = dispatchPayloadValidator(action, origin); return payloadErrors ? (0, Error_1.invalidPayload)(action, (0, 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 = (0, helper_1.getMergedProps)(this.options, options); var errors = updateValidator(this.app.localOrigin, this.defaultGroup, mergedOptions); if (errors) { throw (0, Error_1.fromAction)((0, utils_1.actionMessage)(errors), Error_1.Action.INVALID_OPTIONS); } return next.apply(void 0, __spreadArray([options], args, false)); }; }; 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;