PolywrapClient Config Builder
A utility class for building the PolywrapClient config.
Supports building configs using method chaining or imperatively.
Quickstart
Initialize
Initialize a ClientConfigBuilder using the constructor
const builder = new PolywrapClientConfigBuilder();
Configure
Add client configuration with add, or flexibly mix and match builder configuration methods to add and remove configuration items.
builder.add({
envs: {},
interfaces: {},
redirects: {},
wrappers: {},
packages: {},
resolvers: [],
});
builder
.setPackage("wrap://plugin/package", httpPlugin({}) as IWrapPackage)
.removePackage("wrap://plugin/package")
.setPackages({
"wrap://plugin/http": httpPlugin({}) as IWrapPackage,
"wrap://plugin/filesystem": fileSystemPlugin({}) as IWrapPackage,
});
You can add the entire default client configuration bundle at once with addDefaults
builder.addDefaults();
Build
Finally, build a ClientConfig or CoreClientConfig to pass to the PolywrapClient constructor.
let coreClientConfig = builder.build();
coreClientConfig = builder.build({
resolutionResultCache: new ResolutionResultCache(),
});
coreClientConfig = builder.build({
resolver: RecursiveResolver.from([]),
});
Example
A complete example using all or most of the available methods.
const builder = new PolywrapClientConfigBuilder();
builder.addDefaults();
builder.add({
envs: {},
interfaces: {},
redirects: {},
wrappers: {},
packages: {},
resolvers: [],
});
builder
.setWrapper(
"wrap://authority/wrapper",
await WasmWrapper.from(
new Uint8Array([1, 2, 3]),
new Uint8Array([1, 2, 3])
)
)
.removeWrapper("wrap://authority/wrapper")
.setWrappers({
"wrap://authority/wrapper": await WasmWrapper.from(
new Uint8Array([1, 2, 3]),
new Uint8Array([1, 2, 3])
),
});
builder
.setPackage("wrap://plugin/package", httpPlugin({}) as IWrapPackage)
.removePackage("wrap://plugin/package")
.setPackages({
"wrap://plugin/package": httpPlugin({}) as IWrapPackage,
});
builder
.addEnv("wrap://authority/wrapper", { key: "value" })
.removeEnv("wrap://authority/wrapper")
.addEnvs({
"wrap://authority/wrapper": { key: "value" },
});
builder.setEnv("wrap://authority/wrapper", { key: "value" });
builder
.addInterfaceImplementation(
"wrap://authority/interface",
"wrap://authority/wrapper"
)
.removeInterfaceImplementation(
"wrap://authority/interface",
"wrap://authority/wrapper"
)
.addInterfaceImplementations("wrap://authority/interface", [
"wrap://authority/wrapper",
]);
builder
.setRedirect("wrap://authority/from", "wrap://authority/to")
.removeRedirect("wrap://authority/from")
.setRedirects({
"wrap://authority/from": "wrap://authority/to",
});
builder.addResolver(RecursiveResolver.from([]));
builder.addResolvers([]);
const clientConfig = builder.build();
Reference
ClientConfigBuilder
Constructor
constructor()
add
add(config: Partial<BuilderConfig>): ClientConfigBuilder;
setWrapper
setWrapper(uri: string, wrapper: Wrapper): ClientConfigBuilder;
setWrappers
setWrappers(uriWrappers: Record<string, Wrapper>): ClientConfigBuilder;
removeWrapper
removeWrapper(uri: string): ClientConfigBuilder;
setPackage
setPackage(uri: string, wrapPackage: IWrapPackage): ClientConfigBuilder;
setPackages
setPackages(uriPackages: Record<string, IWrapPackage>): ClientConfigBuilder;
removePackage
removePackage(uri: string): ClientConfigBuilder;
addEnv
addEnv(uri: string, env: Record<string, unknown>): ClientConfigBuilder;
addEnvs
addEnvs(
uriEnvs: Record<string, Record<string, unknown>>
): ClientConfigBuilder;
removeEnv
removeEnv(uri: string): ClientConfigBuilder;
setEnv
setEnv(uri: string, env: Record<string, unknown>): ClientConfigBuilder;
addInterfaceImplementation
addInterfaceImplementation(
interfaceUri: string,
implementationUri: string
): ClientConfigBuilder;
addInterfaceImplementations
addInterfaceImplementations(
interfaceUri: string,
implementationUris: Array<string>
): ClientConfigBuilder;
removeInterfaceImplementation
removeInterfaceImplementation(
interfaceUri: string,
implementationUri: string
): ClientConfigBuilder;
setRedirect
setRedirect(from: string, to: string): ClientConfigBuilder;
setRedirects
setRedirects(redirects: Record<string, string>): ClientConfigBuilder;
removeRedirect
removeRedirect(from: string): ClientConfigBuilder;
addResolver
addResolver(resolver: UriResolverLike): ClientConfigBuilder;
addResolvers
addResolvers(resolvers: UriResolverLike[]): ClientConfigBuilder;
addDefaults
addDefaults(): ClientConfigBuilder;
addBundle
addBundle(bundle: BundleName): ClientConfigBuilder;
build
build(options?: BuildOptions): CoreClientConfig;
Bundles
export type BundleName = "sys" | "web3";