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
| Name | Required | Type | Description |
|---|---|---|---|
module | Required | ModuleInitializer<InitializedModule, Options> | The module initializer (factory) that returns the initialized module and accepts optional options. |
moduleOptions | Optional | Options | The optional options passed to the module initializer. |
extension | Optional | ExtensionInitializer<InitializedModule, InitializedExtension, ExtensionOptions> | InitializedExtension | An optional extension: either an extension initializer function (extensionOptions, { context, methods }) => extension, or an already-built extension object. It is deep-merged into the module. |
extensionOptions | Optional | ExtensionOptions | The 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),
}));