UNPKG

@metamask/snaps-sdk

Version:

A library containing the core functionality for building MetaMask Snaps

49 lines 2.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createBuilder = void 0; const utils_1 = require("@metamask/utils"); /** * A function that returns a function to "build" a {@link Component}. It infers * the type of the component from the given struct, and performs validation on * the created component. * * The returned function can handle the node arguments in two ways: * 1. As a single object, with the keys corresponding to the node's properties, * excluding the `type` property. * 2. As an array of arguments, with the order corresponding to the given keys. * * @param type - The type of the component to build. * @param struct - The struct to use to validate the component. * @param keys - The keys of the component to use as arguments to the builder. * The order of the keys determines the order of the arguments. * @returns A function that builds a component of the given type. * @internal */ function createBuilder(type, struct, keys = []) { return (...args) => { // Node passed as a single object. if (args.length === 1 && (0, utils_1.isPlainObject)(args[0])) { const node = { ...args[0], type }; // The user could be passing invalid values to the builder, so we need to // validate them as per the component's struct. (0, utils_1.assertStruct)(node, struct, `Invalid ${type} component`); return node; } // Node passed as an array of arguments. const node = keys.reduce((partialNode, key, index) => { if (args[index] !== undefined) { return { ...partialNode, [key]: args[index], }; } return partialNode; }, { type }); // The user could be passing invalid values to the builder, so we need to // validate them as per the component's struct. (0, utils_1.assertStruct)(node, struct, `Invalid ${type} component`); return node; }; } exports.createBuilder = createBuilder; //# sourceMappingURL=builder.cjs.map