Alokai

buildModule

Builds an SDK module by initializing a module factory and optionally merging it with an extension.

This overload is used when the module factory accepts optional options - the second argument may be omitted. If an extension is supplied, it is applied on top of the initialized module and deep-merged into it.

Signature

declare function buildModule<InitializedModule extends Module,
	Options extends ModuleOptions = object,
	InitializedExtension extends Extension<InitializedModule> = object,
	ExtensionOptions extends ModuleOptions = object>(
	module: ModuleInitializer<InitializedModule,
	Options>,
	moduleOptions?: Options,
	extension?: ExtensionInitializer<InitializedModule,
	InitializedExtension,
	ExtensionOptions> | InitializedExtension,
	extensionOptions?: ExtensionOptions
): InitializedExtension & InitializedModule;

Parameters

NameRequiredTypeDescription
moduleRequiredModuleInitializer<InitializedModule, Options>The module initializer (factory) that returns the initialized module and accepts optional options.
moduleOptionsOptionalOptionsThe optional options passed to the module initializer.
extensionOptionalExtensionInitializer<InitializedModule, InitializedExtension, ExtensionOptions> | InitializedExtensionAn optional extension: either an extension initializer function (extensionOptions, { context, methods }) => extension, or an already-built extension object. It is deep-merged into the module.
extensionOptionsOptionalExtensionOptionsThe options passed to the extension initializer when extension is a function.

Returns

The initialized module deep-merged with the resolved extension, typed as the intersection of both.

Referenced Types

Examples

import { createSdk } from "@vue-storefront/next";
import type { SapccEndpoints } from "../storefront-middleware/types";

const extension = (extensionOptions, { methods, context }) => ({
  extend: {
    async newMethod(params) {
      const response = await context.requestSender("customMethod", [params]);
      const products = await methods.getProducts(params);
      return { ...response, ...products };
    },
  },
});

export const { getSdk } = createSdk(options, ({ buildModule, middlewareModule }) => ({
  sapcc: buildModule(middlewareModule<SapccEndpoints>, {
    apiUrl: "http://localhost:4000/sapcc",
    ssrApiUrl: "http://localhost:4000/sapcc",
  }, extension),
}));

On this page