diff --git a/packages/cli/src/commands/build.ts b/packages/cli/src/commands/build.ts index 2ca712ae53..415bcf49e3 100644 --- a/packages/cli/src/commands/build.ts +++ b/packages/cli/src/commands/build.ts @@ -181,7 +181,7 @@ async function run(options: Required) { } // Get Client - const client = new PolywrapClient(configBuilder.buildCoreConfig(), { + const client = new PolywrapClient(configBuilder.build(), { noDefaults: true, }); diff --git a/packages/cli/src/commands/codegen.ts b/packages/cli/src/commands/codegen.ts index b785f37aea..2aae5ac72e 100644 --- a/packages/cli/src/commands/codegen.ts +++ b/packages/cli/src/commands/codegen.ts @@ -106,7 +106,7 @@ async function run(options: Required) { } // Get Client - const client = new PolywrapClient(configBuilder.buildCoreConfig(), { + const client = new PolywrapClient(configBuilder.build(), { noDefaults: true, }); diff --git a/packages/cli/src/commands/docgen.ts b/packages/cli/src/commands/docgen.ts index 35b46c8023..32167a8b18 100644 --- a/packages/cli/src/commands/docgen.ts +++ b/packages/cli/src/commands/docgen.ts @@ -160,7 +160,7 @@ async function run( // Resolve custom script const customScript = require.resolve(commandToPathMap[action]); - const client = new PolywrapClient(configBuilder.buildCoreConfig(), { + const client = new PolywrapClient(configBuilder.build(), { noDefaults: true, }); diff --git a/packages/cli/src/lib/workflow/JobRunner.ts b/packages/cli/src/lib/workflow/JobRunner.ts index a204d0d80a..6a6a988797 100644 --- a/packages/cli/src/lib/workflow/JobRunner.ts +++ b/packages/cli/src/lib/workflow/JobRunner.ts @@ -1,12 +1,12 @@ import { JobResult, Status, Step } from "./types"; -import { PolywrapClient } from "@polywrap/client-js"; -import { CoreClient, MaybeAsync, Uri } from "@polywrap/core-js"; -import { WorkflowJobs } from "@polywrap/polywrap-manifest-types-js"; import { - buildPolywrapCoreClientConfig, IClientConfigBuilder, -} from "@polywrap/client-config-builder-js"; + PolywrapClient, + buildPolywrapCoreClientConfig, +} from "@polywrap/client-js"; +import { CoreClient, MaybeAsync, Uri } from "@polywrap/core-js"; +import { WorkflowJobs } from "@polywrap/polywrap-manifest-types-js"; export class JobRunner { private _jobOutput: Map; @@ -20,7 +20,7 @@ export class JobRunner { ) => MaybeAsync ) { this._jobOutput = new Map(); - this._client = new PolywrapClient(this._configBuilder.buildCoreConfig(), { + this._client = new PolywrapClient(this._configBuilder.build(), { noDefaults: true, }); } diff --git a/packages/js/client-config-builder/README.md b/packages/js/client-config-builder/README.md index f42f0a94e3..1bc48e532e 100644 --- a/packages/js/client-config-builder/README.md +++ b/packages/js/client-config-builder/README.md @@ -53,14 +53,11 @@ You can add the entire [default client configuration bundle](#bundle--defaultcon Finally, build a ClientConfig or CoreClientConfig to pass to the PolywrapClient constructor. ```typescript - // accepted by the PolywrapClient - const clientConfig = builder.build(); - // accepted by either the PolywrapClient or the PolywrapCoreClient - let coreClientConfig = builder.buildCoreConfig(); + let coreClientConfig = builder.build(); // build with a custom cache and/or resolver - coreClientConfig = builder.buildCoreConfig( + coreClientConfig = builder.build( new WrapperCache(), RecursiveResolver.from([]) ); @@ -152,45 +149,6 @@ A complete example using all or most of the available methods. # Reference -## Types - -```ts -/** - * Client configuration that can be passed to the PolywrapClient - * - * @remarks - * The PolywrapClient converts the ClientConfig to a CoreClientConfig. - */ -export interface ClientConfig { - /** set environmental variables for a wrapper */ - readonly envs: Env[]; - - /** register interface implementations */ - readonly interfaces: InterfaceImplementations[]; - - /** redirect invocations from one uri to another */ - readonly redirects: IUriRedirect[]; - - /** add embedded wrappers */ - readonly wrappers: IUriWrapper[]; - - /** add and configure embedded packages */ - readonly packages: IUriPackage[]; - - /** customize URI resolution - * - * @remarks - * A UriResolverLike can be any one of: - * IUriResolver - * | IUriRedirect - * | IUriPackage - * | IUriWrapper - * | UriResolverLike[] - * */ - readonly resolvers: UriResolverLike[]; -} -``` - ## ClientConfigBuilder ### Constructor @@ -305,7 +263,9 @@ export interface ClientConfig { * @param uriEnvs: and object where key is the uri and value is the another object with the env variables for the uri * @returns IClientConfigBuilder (mutated self) */ - addEnvs(uriEnvs: Record>): IClientConfigBuilder; + addEnvs( + uriEnvs: Record> + ): IClientConfigBuilder; ``` ### removeEnv @@ -460,23 +420,13 @@ export interface ClientConfig { ``` ### build -```ts - /** - * Build a sanitized client configuration that can be passed to the PolywrapClient constructor - * - * @returns ClientConfig that results from applying all the steps in the builder pipeline - */ - build(): ClientConfig; -``` - -### buildCoreConfig ```ts /** * Build a sanitized core client configuration that can be passed to the PolywrapClient or PolywrapCoreClient constructors * * @returns CoreClientConfig that results from applying all the steps in the builder pipeline */ - buildCoreConfig(): CoreClientConfig; + build(): CoreClientConfig; ``` ## Bundles @@ -578,9 +528,7 @@ export const getDefaultConfig = (): BuilderConfig => ({ [defaultWrappers.concurrentInterface]: new Set([ defaultPackages.concurrent, ]), - [defaultInterfaces.logger]: new Set([ - defaultPackages.logger, - ]), + [defaultInterfaces.logger]: new Set([defaultPackages.logger]), }, resolvers: [], }); diff --git a/packages/js/client-config-builder/examples/quickstart.ts b/packages/js/client-config-builder/examples/quickstart.ts index 8a56e168e2..4a6901adb1 100644 --- a/packages/js/client-config-builder/examples/quickstart.ts +++ b/packages/js/client-config-builder/examples/quickstart.ts @@ -1,4 +1,4 @@ -import { ClientConfigBuilder, ClientConfig } from "../build"; +import { ClientConfigBuilder } from "../build"; // eslint-disable-next-line import/no-extraneous-dependencies import { WasmWrapper } from "@polywrap/wasm-js"; @@ -51,28 +51,24 @@ export function configure(): ClientConfigBuilder { export function build(): | ClientConfigBuilder - | ClientConfig | CoreClientConfig { const builder = new ClientConfigBuilder(); // $start: quickstart-build - // accepted by the PolywrapClient - const clientConfig = builder.build(); - // accepted by either the PolywrapClient or the PolywrapCoreClient - let coreClientConfig = builder.buildCoreConfig(); + let coreClientConfig = builder.build(); // build with a custom cache and/or resolver - coreClientConfig = builder.buildCoreConfig( + coreClientConfig = builder.build( new WrapperCache(), RecursiveResolver.from([]) ); // $end - return builder ?? clientConfig ?? coreClientConfig; + return builder ?? coreClientConfig; } -export async function example(): Promise { +export async function example(): Promise { // $start: quickstart-example // init const builder = new ClientConfigBuilder(); diff --git a/packages/js/client-config-builder/readme/README.md b/packages/js/client-config-builder/readme/README.md index 3748e58241..1e98bea215 100644 --- a/packages/js/client-config-builder/readme/README.md +++ b/packages/js/client-config-builder/readme/README.md @@ -46,12 +46,6 @@ $snippet: quickstart-example # Reference -## Types - -```ts -$snippet: ClientConfig -``` - ## ClientConfigBuilder ### Constructor @@ -164,11 +158,6 @@ $snippet: IClientConfigBuilder-addDefaults $snippet: IClientConfigBuilder-build ``` -### buildCoreConfig -```ts -$snippet: IClientConfigBuilder-buildCoreConfig -``` - ## Bundles ### Bundle: DefaultConfig diff --git a/packages/js/client-config-builder/src/BaseClientConfigBuilder.ts b/packages/js/client-config-builder/src/BaseClientConfigBuilder.ts index 952880de4a..f75ba527da 100644 --- a/packages/js/client-config-builder/src/BaseClientConfigBuilder.ts +++ b/packages/js/client-config-builder/src/BaseClientConfigBuilder.ts @@ -1,17 +1,10 @@ import { BuilderConfig } from "./types/configs/BuilderConfig"; -import { ClientConfig } from "./types/configs/ClientConfig"; import { IClientConfigBuilder } from "./types/IClientConfigBuilder"; import { CoreClientConfig, Wrapper, IWrapPackage, - Env, - Uri, - InterfaceImplementations, - IUriRedirect, - IUriWrapper, - IUriPackage, IUriResolver, } from "@polywrap/core-js"; import { IWrapperCache, UriResolverLike } from "@polywrap/uri-resolvers-js"; @@ -27,7 +20,7 @@ export abstract class BaseClientConfigBuilder implements IClientConfigBuilder { }; abstract addDefaults(): IClientConfigBuilder; - abstract buildCoreConfig( + abstract build( wrapperCache?: IWrapperCache, resolver?: IUriResolver ): CoreClientConfig; @@ -209,48 +202,4 @@ export abstract class BaseClientConfigBuilder implements IClientConfigBuilder { return this; } - - build(): ClientConfig { - const envs: Env[] = []; - for (const [uri, env] of Object.entries(this._config.envs)) { - envs.push({ uri: Uri.from(uri), env }); - } - - const interfaces: InterfaceImplementations[] = []; - for (const [interfaceUri, implementations] of Object.entries( - this._config.interfaces - )) { - if (implementations.size === 0) continue; - interfaces.push({ - interface: Uri.from(interfaceUri), - implementations: Array.from(implementations).map((uri) => - Uri.from(uri) - ), - }); - } - - const redirects: IUriRedirect[] = []; - for (const [uri, redirect] of Object.entries(this._config.redirects)) { - redirects.push({ from: Uri.from(uri), to: Uri.from(redirect) }); - } - - const wrappers: IUriWrapper[] = []; - for (const [uri, wrapper] of Object.entries(this._config.wrappers)) { - wrappers.push({ uri: Uri.from(uri), wrapper }); - } - - const packages: IUriPackage[] = []; - for (const [uri, wrapPackage] of Object.entries(this._config.packages)) { - packages.push({ uri: Uri.from(uri), package: wrapPackage }); - } - - return { - envs, - interfaces, - redirects, - wrappers, - packages, - resolvers: this._config.resolvers, - }; - } } diff --git a/packages/js/client-config-builder/src/ClientConfigBuilder.ts b/packages/js/client-config-builder/src/ClientConfigBuilder.ts index 4848165f6a..55e72e7d62 100644 --- a/packages/js/client-config-builder/src/ClientConfigBuilder.ts +++ b/packages/js/client-config-builder/src/ClientConfigBuilder.ts @@ -1,8 +1,18 @@ import { getDefaultConfig } from "./bundles"; import { BaseClientConfigBuilder } from "./BaseClientConfigBuilder"; import { IClientConfigBuilder } from "./types/IClientConfigBuilder"; +import { BuilderConfig } from "./types"; -import { CoreClientConfig, IUriResolver } from "@polywrap/core-js"; +import { + CoreClientConfig, + Env, + InterfaceImplementations, + IUriPackage, + IUriRedirect, + IUriResolver, + IUriWrapper, + Uri, +} from "@polywrap/core-js"; import { IWrapperCache, PackageToWrapperCacheResolver, @@ -25,26 +35,24 @@ export class ClientConfigBuilder extends BaseClientConfigBuilder { return this.add(getDefaultConfig()); } - buildCoreConfig( + build( wrapperCache?: IWrapperCache, resolver?: IUriResolver ): CoreClientConfig { - const clientConfig = this.build(); - return { - envs: clientConfig.envs, - interfaces: clientConfig.interfaces, + envs: this.buildEnvs(), + interfaces: this.buildInterfaces(), resolver: resolver ?? RecursiveResolver.from( PackageToWrapperCacheResolver.from( [ StaticResolver.from([ - ...clientConfig.redirects, - ...clientConfig.wrappers, - ...clientConfig.packages, + ...this.buildRedirects(), + ...this.buildWrappers(), + ...this.buildPackages(), ]), - ...clientConfig.resolvers, + ...this._config.resolvers, new ExtendableUriResolver(), ], wrapperCache ?? new WrapperCache() @@ -52,4 +60,66 @@ export class ClientConfigBuilder extends BaseClientConfigBuilder { ), }; } + + get config(): BuilderConfig { + return this._config; + } + + private buildEnvs(): Env[] { + const envs: Env[] = []; + + for (const [uri, env] of Object.entries(this._config.envs)) { + envs.push({ uri: Uri.from(uri), env }); + } + + return envs; + } + + private buildInterfaces(): InterfaceImplementations[] { + const interfaces: InterfaceImplementations[] = []; + + for (const [interfaceUri, implementations] of Object.entries( + this._config.interfaces + )) { + if (implementations.size === 0) continue; + interfaces.push({ + interface: Uri.from(interfaceUri), + implementations: Array.from(implementations).map((uri) => + Uri.from(uri) + ), + }); + } + + return interfaces; + } + + private buildRedirects(): IUriRedirect[] { + const redirects: IUriRedirect[] = []; + + for (const [uri, redirect] of Object.entries(this._config.redirects)) { + redirects.push({ from: Uri.from(uri), to: Uri.from(redirect) }); + } + + return redirects; + } + + private buildWrappers(): IUriWrapper[] { + const wrappers: IUriWrapper[] = []; + + for (const [uri, wrapper] of Object.entries(this._config.wrappers)) { + wrappers.push({ uri: Uri.from(uri), wrapper }); + } + + return wrappers; + } + + private buildPackages(): IUriPackage[] { + const packages: IUriPackage[] = []; + + for (const [uri, wrapPackage] of Object.entries(this._config.packages)) { + packages.push({ uri: Uri.from(uri), package: wrapPackage }); + } + + return packages; + } } diff --git a/packages/js/client-config-builder/src/__tests__/builtDefaultConfig.ts b/packages/js/client-config-builder/src/__tests__/builtDefaultConfig.ts deleted file mode 100644 index 8e6b372c15..0000000000 --- a/packages/js/client-config-builder/src/__tests__/builtDefaultConfig.ts +++ /dev/null @@ -1,135 +0,0 @@ -import { IUriPackage, IWrapPackage, Uri } from "@polywrap/core-js"; -import { ensResolverPlugin } from "@polywrap/ens-resolver-plugin-js"; -import { Connection, Connections, ethereumPlugin } from "@polywrap/ethereum-plugin-js"; -import { fileSystemPlugin } from "@polywrap/fs-plugin-js"; -import { fileSystemResolverPlugin } from "@polywrap/fs-resolver-plugin-js"; -import { httpPlugin } from "@polywrap/http-plugin-js"; -import { httpResolverPlugin } from "@polywrap/http-resolver-plugin-js"; -import { ipfsPlugin } from "@polywrap/ipfs-plugin-js"; -import { ipfsResolverPlugin } from "@polywrap/ipfs-resolver-plugin-js"; -import { loggerPlugin } from "@polywrap/logger-plugin-js"; -import { concurrentPromisePlugin } from "concurrent-plugin-js"; -import { defaultWrappers, defaultIpfsProviders } from "../bundles"; -import { ClientConfig } from "../types"; - -const getDefaultPlugins = (): IUriPackage[] => { - return [ - // IPFS is required for downloading Polywrap packages - { - uri: new Uri("wrap://ens/ipfs.polywrap.eth"), - package: ipfsPlugin({}), - }, - // ENS is required for resolving domain to IPFS hashes - { - uri: new Uri("wrap://ens/ens-resolver.polywrap.eth"), - package: ensResolverPlugin({}), - }, - { - uri: new Uri("wrap://ens/ethereum.polywrap.eth"), - package: ethereumPlugin({ - connections: new Connections({ - networks: { - mainnet: new Connection({ - provider: - "https://mainnet.infura.io/v3/b00b2c2cc09c487685e9fb061256d6a6", - }), - goerli: new Connection({ - provider: - "https://goerli.infura.io/v3/b00b2c2cc09c487685e9fb061256d6a6", - }), - }, - }), - }), - }, - { - uri: new Uri("wrap://ens/http.polywrap.eth"), - package: httpPlugin({}), - }, - { - uri: new Uri("wrap://ens/http-resolver.polywrap.eth"), - package: httpResolverPlugin({}), - }, - { - uri: new Uri("wrap://plugin/logger"), - // TODO: remove this once types are updated - package: loggerPlugin({}) as IWrapPackage, - }, - { - uri: new Uri("wrap://ens/fs.polywrap.eth"), - package: fileSystemPlugin({}), - }, - { - uri: new Uri("wrap://ens/fs-resolver.polywrap.eth"), - package: fileSystemResolverPlugin({}), - }, - { - uri: new Uri("wrap://ens/ipfs-resolver.polywrap.eth"), - package: ipfsResolverPlugin({}), - }, - { - uri: new Uri("wrap://plugin/concurrent"), - package: concurrentPromisePlugin({}), - }, - ]; -}; - - -export const builtDefaultConfig = (): ClientConfig => ({ - redirects: [ - { - from: Uri.from("wrap://ens/sha3.polywrap.eth"), - to: Uri.from(defaultWrappers.sha3) - }, - { - from: Uri.from("wrap://ens/uts46.polywrap.eth"), - to: Uri.from(defaultWrappers.uts46) - }, - { - from: Uri.from("wrap://ens/graph-node.polywrap.eth"), - to: Uri.from(defaultWrappers.graphNode) - }, - { - from: Uri.from("wrap://ens/wrappers.polywrap.eth:logger@1.0.0"), - to: Uri.from("wrap://plugin/logger") - } - ], - envs: [ - { - uri: Uri.from(defaultWrappers.graphNode), - env: { - provider: "https://api.thegraph.com" - } - }, - { - uri: Uri.from("wrap://ens/ipfs.polywrap.eth"), - env: { - provider: defaultIpfsProviders[0], - fallbackProviders: defaultIpfsProviders.slice(1) - } - } - ], - packages: getDefaultPlugins(), - wrappers: [], - interfaces: [ - { - interface: new Uri("wrap://ens/uri-resolver.core.polywrap.eth"), - implementations: [ - new Uri("wrap://ens/ipfs-resolver.polywrap.eth"), - new Uri("wrap://ens/ens-resolver.polywrap.eth"), - new Uri("wrap://ens/fs-resolver.polywrap.eth"), - new Uri("wrap://ens/http-resolver.polywrap.eth"), - // ens-text-record-resolver - new Uri("wrap://ipfs/QmfRCVA1MSAjUbrXXjya4xA9QHkbWeiKRsT7Um1cvrR7FY"), - ], - }, - { - interface: new Uri(defaultWrappers.concurrentInterface), - implementations: [new Uri("wrap://plugin/concurrent")], - }, - { - interface: new Uri("wrap://ens/wrappers.polywrap.eth:logger@1.0.0"), - implementations: [new Uri("wrap://plugin/logger")], - }, - ], - resolvers: [], -}); \ No newline at end of file diff --git a/packages/js/client-config-builder/src/__tests__/client-config-builder.spec.ts b/packages/js/client-config-builder/src/__tests__/client-config-builder.spec.ts index 57751ae7ec..8e36073a10 100644 --- a/packages/js/client-config-builder/src/__tests__/client-config-builder.spec.ts +++ b/packages/js/client-config-builder/src/__tests__/client-config-builder.spec.ts @@ -6,26 +6,35 @@ import { UriPackageOrWrapper, } from "@polywrap/core-js"; import { Result } from "@polywrap/result"; -import { builtDefaultConfig } from "./builtDefaultConfig"; +import { UriResolutionResult } from "@polywrap/uri-resolvers-js"; +import { getDefaultConfig } from "../bundles"; -class NamedUriResolver implements IUriResolver { - private _name: string; +class MockUriResolver implements IUriResolver { + private from: string; + private to: string; - constructor(name: string) { - this._name = name; + constructor(from: string, to: string) { + this.from = from; + this.to = to; } get name(): string { - return this._name; + return this.from; } - tryResolveUri( + async tryResolveUri( uri: Uri, - client: CoreClient + _client: CoreClient ): Promise> { - throw new Error("Method not implemented."); + if (Uri.equals(uri, Uri.from(this.from))) { + return UriResolutionResult.ok(Uri.from(this.to)); + } + + return UriResolutionResult.err(undefined); } } describe("Client config builder", () => { + const emptyBuilderConfig = new ClientConfigBuilder().config; + const testEnv1: Record> = { "wrap://ens/test.plugin.one": { test: "value" }, }; @@ -69,30 +78,32 @@ describe("Client config builder", () => { ...testUriRedirect2, }; - const testUriResolver: IUriResolver = new NamedUriResolver("test1"); + const testUriResolver: IUriResolver = new MockUriResolver( + "wrap://ens/testFrom.eth", + "wrap://ens/testTo.eth" + ); it("should build an empty partial config", () => { const clientConfig = new ClientConfigBuilder().build(); - expect(clientConfig).toStrictEqual({ - envs: [], - interfaces: [], - redirects: [], - wrappers: [], - packages: [], - resolvers: [], - }); + expect(clientConfig.envs).toStrictEqual([]); + expect(clientConfig.interfaces).toStrictEqual([]); }); it("should succesfully add config object and build", () => { - const clientConfig = new ClientConfigBuilder() - .add({ - envs: testEnvs, - interfaces: testInterfaces, - redirects: testUriRedirects, - resolvers: [testUriResolver], - }) - .build(); + const configObject = { + envs: testEnvs, + interfaces: testInterfaces, + redirects: testUriRedirects, + resolvers: [testUriResolver], + }; + + const builder = new ClientConfigBuilder().add( + configObject + ) as ClientConfigBuilder; + + const clientConfig = builder.build(); + const builderConfig = builder.config; expect(clientConfig).toBeTruthy(); expect(clientConfig.envs).toStrictEqual( @@ -107,17 +118,15 @@ describe("Client config builder", () => { implementations: Array.from(interfaces).map(Uri.from), })) ); - expect(clientConfig.redirects).toStrictEqual( - Object.entries(testUriRedirects).map(([from, to]) => ({ - from: Uri.from(from), - to: Uri.from(to), - })) - ); - expect(clientConfig.resolvers).toStrictEqual([testUriResolver]); + + expect(builderConfig).toEqual({ + ...emptyBuilderConfig, + ...configObject, + }); }); it("should succesfully add and merge two config objects and build", () => { - const clientConfig = new ClientConfigBuilder() + const builder = new ClientConfigBuilder() .add({ envs: testEnv1, interfaces: testInterface1, @@ -128,8 +137,10 @@ describe("Client config builder", () => { envs: testEnv2, interfaces: testInterface2, redirects: testUriRedirect2, - }) - .build(); + }) as ClientConfigBuilder; + + const clientConfig = builder.build(); + const builderConfig = builder.config; expect(clientConfig).toBeTruthy(); expect(clientConfig.envs).toStrictEqual( @@ -144,25 +155,28 @@ describe("Client config builder", () => { implementations: Array.from(interfaces).map(Uri.from), })) ); - expect(clientConfig.redirects).toStrictEqual( - Object.entries(testUriRedirects).map(([from, to]) => ({ - from: Uri.from(from), - to: Uri.from(to), - })) - ); - expect(clientConfig.resolvers).toStrictEqual([testUriResolver]); + + expect(clientConfig.resolver).toBeTruthy(); + + expect(builderConfig).toEqual({ + ...emptyBuilderConfig, + envs: { ...testEnv1, ...testEnv2 }, + interfaces: { ...testInterface1, ...testInterface2 }, + redirects: { ...testUriRedirect1, ...testUriRedirect2 }, + resolvers: [testUriResolver], + }); }); it("should successfully add the default config", () => { - const clientConfig = new ClientConfigBuilder().addDefaults().build(); + const builder = new ClientConfigBuilder().addDefaults() as ClientConfigBuilder; - const expectedConfig = builtDefaultConfig(); + const clientConfig = builder.build(); + const builderConfig = builder.config; expect(clientConfig).toBeTruthy(); - expect(clientConfig.envs).toStrictEqual(expectedConfig.envs); - expect(clientConfig.interfaces).toStrictEqual(expectedConfig.interfaces); - expect(clientConfig.redirects).toStrictEqual(expectedConfig.redirects); - expect(clientConfig.resolvers).toStrictEqual(expectedConfig.resolvers); + + const expectedBuilderConfig = getDefaultConfig(); + expect(builderConfig).toEqual(expectedBuilderConfig); }); it("should successfully add an env", () => { @@ -536,35 +550,43 @@ describe("Client config builder", () => { const from = "wrap://ens/from.this.ens"; const to = "wrap://ens/to.that.ens"; - const config = new ClientConfigBuilder().addRedirect(from, to).build(); + const builder = new ClientConfigBuilder().addRedirect( + from, + to + ) as ClientConfigBuilder; + + const config = builder.build(); + const builderConfig = builder.config; - expect(config.redirects).toHaveLength(1); - expect(config.redirects).toContainEqual({ - from: Uri.from(from), - to: Uri.from(to), + expect(config).toBeTruthy(); + expect(builderConfig).toStrictEqual({ + ...emptyBuilderConfig, + redirects: { + [from]: to, + }, }); }); it("should add two uri redirects with different from uris", () => { const from1 = "wrap://ens/from.this1.ens"; const to1 = "wrap://ens/to.that1.ens"; - const from2 = "wrap://ens/from.this2.ens"; const to2 = "wrap://ens/to.that2.ens"; - const config = new ClientConfigBuilder() + const builder = new ClientConfigBuilder() .addRedirect(from1, to1) - .addRedirect(from2, to2) - .build(); + .addRedirect(from2, to2) as ClientConfigBuilder; - expect(config.redirects).toHaveLength(2); - expect(config.redirects).toContainEqual({ - from: Uri.from(from1), - to: Uri.from(to1), - }); - expect(config.redirects).toContainEqual({ - from: Uri.from(from2), - to: Uri.from(to2), + const config = builder.build(); + const builderConfig = builder.config; + + expect(config).toBeTruthy(); + expect(builderConfig).toStrictEqual({ + ...emptyBuilderConfig, + redirects: { + [from1]: to1, + [from2]: to2, + }, }); }); @@ -574,67 +596,82 @@ describe("Client config builder", () => { const to1 = "wrap://ens/to.that1.ens"; const to2 = "wrap://ens/to.that2.ens"; - const config = new ClientConfigBuilder() + const builder = new ClientConfigBuilder() .addRedirect(from1, to1) .addRedirect(from2, to1) - .addRedirect(from1, to2) - .build(); + .addRedirect(from1, to2) as ClientConfigBuilder; - expect(config.redirects).toHaveLength(2); - expect(config.redirects).toContainEqual({ - from: Uri.from(from1), - to: Uri.from(to2), - }); - expect(config.redirects).toContainEqual({ - from: Uri.from(from2), - to: Uri.from(to1), + const config = builder.build(); + const builderConfig = builder.config; + + expect(config).toBeTruthy(); + expect(builderConfig).toStrictEqual({ + ...emptyBuilderConfig, + redirects: { + [from1]: to2, + [from2]: to1, + }, }); }); it("should remove an uri redirect", () => { const from1 = "wrap://ens/from.this1.ens"; const to1 = "wrap://ens/to.that1.ens"; - const from2 = "wrap://ens/from.this2.ens"; const to2 = "wrap://ens/to.that2.ens"; - - const config = new ClientConfigBuilder() + const builder = new ClientConfigBuilder() .addRedirect(from1, to1) .addRedirect(from2, to2) - .removeRedirect(from1) - .build(); + .removeRedirect(from1) as ClientConfigBuilder; - expect(config.redirects).toHaveLength(1); - expect(config.redirects).toContainEqual({ - from: Uri.from(from2), - to: Uri.from(to2), + const config = builder.build(); + const builderConfig = builder.config; + + expect(config).toBeTruthy(); + expect(builderConfig).toStrictEqual({ + ...emptyBuilderConfig, + redirects: { + [from2]: to2, + }, }); }); it("should set uri resolver", () => { - const uriResolver = new NamedUriResolver("ResolverName"); + const uriResolver = new MockUriResolver( + "wrap://ens/from.eth", + "wrap://ens/to.eth" + ); - const config = new ClientConfigBuilder().addResolver(uriResolver).build(); + const builder = new ClientConfigBuilder().addResolver( + uriResolver + ) as ClientConfigBuilder; - expect((config.resolvers as Array)[0].name).toBe( - "ResolverName" - ); + const config = builder.build(); + const builderConfig = builder.config; + + expect(config).toBeTruthy(); + expect(builderConfig.resolvers).toStrictEqual([uriResolver]); }); - it("should overwrite uri resolver on set when it already exists", () => { - const uriResolver1 = new NamedUriResolver("first"); - const uriResolver2 = new NamedUriResolver("second"); + it("should add multiple resolvers", () => { + const uriResolver1 = new MockUriResolver( + "wrap://ens/from1.eth", + "wrap://ens/to1.eth" + ); + const uriResolver2 = new MockUriResolver( + "wrap://ens/from2.eth", + "wrap://ens/to2.eth" + ); - const config = new ClientConfigBuilder() + const builder = new ClientConfigBuilder() .addResolver(uriResolver1) - .addResolver(uriResolver2) - .build(); + .addResolver(uriResolver2) as ClientConfigBuilder; - expect((config.resolvers as Array)[0].name).toBe( - "first" - ); - expect((config.resolvers as Array)[1].name).toBe( - "second" - ); + const config = builder.build(); + const builderConfig = builder.config; + + expect(config).toBeTruthy(); + + expect(builderConfig.resolvers).toStrictEqual([uriResolver1, uriResolver2]); }); }); diff --git a/packages/js/client-config-builder/src/bundles/getDefaultConfig.ts b/packages/js/client-config-builder/src/bundles/getDefaultConfig.ts index 99953c33f2..fddd95dd51 100644 --- a/packages/js/client-config-builder/src/bundles/getDefaultConfig.ts +++ b/packages/js/client-config-builder/src/bundles/getDefaultConfig.ts @@ -112,9 +112,7 @@ export const getDefaultConfig = (): BuilderConfig => ({ [defaultWrappers.concurrentInterface]: new Set([ defaultPackages.concurrent, ]), - [defaultInterfaces.logger]: new Set([ - defaultPackages.logger, - ]), + [defaultInterfaces.logger]: new Set([defaultPackages.logger]), }, resolvers: [], }); diff --git a/packages/js/client-config-builder/src/helpers/index.ts b/packages/js/client-config-builder/src/helpers/index.ts deleted file mode 100644 index 1b5dc6b60c..0000000000 --- a/packages/js/client-config-builder/src/helpers/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./buildPolywrapCoreClientConfig"; -export * from "./sanitizeUri"; diff --git a/packages/js/client-config-builder/src/index.ts b/packages/js/client-config-builder/src/index.ts index ed000ea254..a9932dcdc9 100644 --- a/packages/js/client-config-builder/src/index.ts +++ b/packages/js/client-config-builder/src/index.ts @@ -1,5 +1,4 @@ export * from "./types"; -export * from "./helpers"; export * from "./BaseClientConfigBuilder"; export * from "./ClientConfigBuilder"; export * from "./bundles"; diff --git a/packages/js/client-config-builder/src/types/IClientConfigBuilder.ts b/packages/js/client-config-builder/src/types/IClientConfigBuilder.ts index 8e838f9304..a6def5f36d 100644 --- a/packages/js/client-config-builder/src/types/IClientConfigBuilder.ts +++ b/packages/js/client-config-builder/src/types/IClientConfigBuilder.ts @@ -1,26 +1,16 @@ import { BuilderConfig } from "./configs/BuilderConfig"; -import { ClientConfig } from "./configs/ClientConfig"; import { CoreClientConfig, Wrapper, IWrapPackage } from "@polywrap/core-js"; import { UriResolverLike } from "@polywrap/uri-resolvers-js"; export interface IClientConfigBuilder { // $start: IClientConfigBuilder-build - /** - * Build a sanitized client configuration that can be passed to the PolywrapClient constructor - * - * @returns ClientConfig that results from applying all the steps in the builder pipeline - */ - build(): ClientConfig; - // $end - - // $start: IClientConfigBuilder-buildCoreConfig /** * Build a sanitized core client configuration that can be passed to the PolywrapClient or PolywrapCoreClient constructors * * @returns CoreClientConfig that results from applying all the steps in the builder pipeline */ - buildCoreConfig(): CoreClientConfig; + build(): CoreClientConfig; // $end // $start: IClientConfigBuilder-add @@ -127,7 +117,9 @@ export interface IClientConfigBuilder { * @param uriEnvs: and object where key is the uri and value is the another object with the env variables for the uri * @returns IClientConfigBuilder (mutated self) */ - addEnvs(uriEnvs: Record>): IClientConfigBuilder; + addEnvs( + uriEnvs: Record> + ): IClientConfigBuilder; // $end // $start: IClientConfigBuilder-removeEnv diff --git a/packages/js/client-config-builder/src/types/configs/index.ts b/packages/js/client-config-builder/src/types/configs/index.ts index bc66d7e261..621970bfec 100644 --- a/packages/js/client-config-builder/src/types/configs/index.ts +++ b/packages/js/client-config-builder/src/types/configs/index.ts @@ -1,4 +1 @@ export * from "./BuilderConfig"; -export * from "./ClientConfig"; -export * from "./PolywrapClientConfig"; -export * from "./PolywrapCoreClientConfig"; diff --git a/packages/js/client-config-builder/src/types/configs/types/IUriRedirect.ts b/packages/js/client-config-builder/src/types/configs/types/IUriRedirect.ts deleted file mode 100644 index 58f9751182..0000000000 --- a/packages/js/client-config-builder/src/types/configs/types/IUriRedirect.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Uri } from "@polywrap/core-js"; - -export interface IUriRedirect { - from: TUri; - to: TUri; -} diff --git a/packages/js/client-config-builder/src/types/configs/types/InterfaceImplementations.ts b/packages/js/client-config-builder/src/types/configs/types/InterfaceImplementations.ts deleted file mode 100644 index 701c94c599..0000000000 --- a/packages/js/client-config-builder/src/types/configs/types/InterfaceImplementations.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Uri } from "@polywrap/core-js"; - -export interface InterfaceImplementations { - interface: TUri; - implementations: TUri[]; -} diff --git a/packages/js/client-config-builder/src/types/configs/types/UriResolverLike.ts b/packages/js/client-config-builder/src/types/configs/types/UriResolverLike.ts deleted file mode 100644 index 0c5888ef0c..0000000000 --- a/packages/js/client-config-builder/src/types/configs/types/UriResolverLike.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { IUriPackage } from "./IUriPackage"; -import { IUriRedirect } from "./IUriRedirect"; -import { IUriWrapper } from "./IUriWrapper"; - -import { IUriResolver, Uri } from "@polywrap/core-js"; - -export type UriResolverLike = - | IUriResolver - | IUriRedirect - | IUriPackage - | IUriWrapper - | UriResolverLike[]; diff --git a/packages/js/client-config-builder/src/types/configs/types/index.ts b/packages/js/client-config-builder/src/types/configs/types/index.ts deleted file mode 100644 index 74493cde6a..0000000000 --- a/packages/js/client-config-builder/src/types/configs/types/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from "./InterfaceImplementations"; -export * from "./Env"; -export * from "./IUriWrapper"; -export * from "./IUriRedirect"; -export * from "./IUriPackage"; -export * from "./UriResolverLike"; diff --git a/packages/js/client/README.md b/packages/js/client/README.md index 3ca52e65dc..5269ce3ee7 100644 --- a/packages/js/client/README.md +++ b/packages/js/client/README.md @@ -30,7 +30,7 @@ Use the PolywrapClient [constructor](#constructor) to instantiate the client wit Use the `@polywrap/client-config-builder-js` package to build a custom configuration for your project. ```ts - const config = new ClientConfigBuilder().addDefaults().buildCoreConfig(); + const config = new ClientConfigBuilder().addDefaults().build(); const client = new PolywrapClient(config, { noDefaults: true }); ``` diff --git a/packages/js/client/examples/quickstart.ts b/packages/js/client/examples/quickstart.ts index 1f7470ce0d..5713f6e789 100644 --- a/packages/js/client/examples/quickstart.ts +++ b/packages/js/client/examples/quickstart.ts @@ -11,7 +11,7 @@ export function instantiate(): PolywrapClient { export function configure(): PolywrapClient { // $start: quickstart-configure - const config = new ClientConfigBuilder().addDefaults().buildCoreConfig(); + const config = new ClientConfigBuilder().addDefaults().build(); const client = new PolywrapClient(config, { noDefaults: true }); // $end diff --git a/packages/js/client/src/PolywrapClient.ts b/packages/js/client/src/PolywrapClient.ts index 2356e042b4..1511d0160c 100644 --- a/packages/js/client/src/PolywrapClient.ts +++ b/packages/js/client/src/PolywrapClient.ts @@ -1,13 +1,13 @@ import { InvokerOptions, TryResolveUriOptions } from "./types"; - -import { PolywrapCoreClient } from "@polywrap/core-client-js"; import { PolywrapClientConfig, PolywrapCoreClientConfig, buildPolywrapCoreClientConfig, sanitizeUri, ClientConfig, -} from "@polywrap/client-config-builder-js"; +} from "./legacy"; + +import { PolywrapCoreClient } from "@polywrap/core-client-js"; import { CoreClientConfig, Env, diff --git a/packages/js/client/src/__tests__/core/interface-impls.spec.ts b/packages/js/client/src/__tests__/core/interface-impls.spec.ts index c4ac60c09d..454b7ad656 100644 --- a/packages/js/client/src/__tests__/core/interface-impls.spec.ts +++ b/packages/js/client/src/__tests__/core/interface-impls.spec.ts @@ -183,7 +183,7 @@ describe("interface-impls", () => { const implementationUris = interfaces[0].implementations; const builder = new ClientConfigBuilder(); - const defaultClientConfig = builder.addDefaults().buildCoreConfig(); + const defaultClientConfig = builder.addDefaults().build(); expect(implementationUris).toEqual([ ...(defaultClientConfig.interfaces || []).find( diff --git a/packages/js/client/src/__tests__/core/wasm-wrapper.spec.ts b/packages/js/client/src/__tests__/core/wasm-wrapper.spec.ts index 625a6f8de1..5d0fc9ab6b 100644 --- a/packages/js/client/src/__tests__/core/wasm-wrapper.spec.ts +++ b/packages/js/client/src/__tests__/core/wasm-wrapper.spec.ts @@ -129,7 +129,7 @@ describe("wasm-wrapper", () => { packages: { "wrap://ens/mock.polywrap.eth": mockPlugin() }, }).addDefaults(); - const client = new PolywrapClient(builder.buildCoreConfig()); + const client = new PolywrapClient(builder.build()); const clientResult = await client.invoke({ uri: simpleWrapperUri.uri, diff --git a/packages/js/client/src/index.ts b/packages/js/client/src/index.ts index e4aa0a3f44..3035d1805c 100644 --- a/packages/js/client/src/index.ts +++ b/packages/js/client/src/index.ts @@ -1,4 +1,5 @@ export * from "./PolywrapClient"; +export * from "./legacy"; export * from "@polywrap/core-js"; export * from "@polywrap/core-client-js"; export * from "@polywrap/uri-resolvers-js"; diff --git a/packages/js/client-config-builder/src/types/configs/ClientConfig.ts b/packages/js/client/src/legacy/ClientConfig.ts similarity index 100% rename from packages/js/client-config-builder/src/types/configs/ClientConfig.ts rename to packages/js/client/src/legacy/ClientConfig.ts diff --git a/packages/js/client-config-builder/src/types/configs/PolywrapClientConfig.ts b/packages/js/client/src/legacy/PolywrapClientConfig.ts similarity index 73% rename from packages/js/client-config-builder/src/types/configs/PolywrapClientConfig.ts rename to packages/js/client/src/legacy/PolywrapClientConfig.ts index e385dec919..96f825d0c6 100644 --- a/packages/js/client-config-builder/src/types/configs/PolywrapClientConfig.ts +++ b/packages/js/client/src/legacy/PolywrapClientConfig.ts @@ -1,10 +1,10 @@ import { - Env, - InterfaceImplementations, - IUriPackage, - IUriRedirect, - IUriWrapper, - UriResolverLike, + GenericEnv, + GenericInterfaceImplementations, + IGenericUriPackage, + IGenericUriRedirect, + IGenericUriWrapper, + GenericUriResolverLike, } from "./types"; import { IWrapperCache } from "@polywrap/uri-resolvers-js"; @@ -21,19 +21,19 @@ import { Uri } from "@polywrap/core-js"; */ export interface PolywrapClientConfig { /** set environmental variables for a wrapper */ - readonly envs: Env[]; + readonly envs: GenericEnv[]; /** register interface implementations */ - readonly interfaces: InterfaceImplementations[]; + readonly interfaces: GenericInterfaceImplementations[]; /** redirect invocations from one uri to another */ - readonly redirects: IUriRedirect[]; + readonly redirects: IGenericUriRedirect[]; /** add embedded wrappers */ - readonly wrappers: IUriWrapper[]; + readonly wrappers: IGenericUriWrapper[]; /** add and configure embedded packages */ - readonly packages: IUriPackage[]; + readonly packages: IGenericUriPackage[]; /** customize URI resolution * @@ -45,7 +45,7 @@ export interface PolywrapClientConfig { * | IUriWrapper * | UriResolverLike[] * */ - readonly resolvers: UriResolverLike[]; + readonly resolvers: GenericUriResolverLike[]; /** a wrapper cache to be used in place of the default wrapper cache */ readonly wrapperCache?: IWrapperCache; diff --git a/packages/js/client-config-builder/src/types/configs/PolywrapCoreClientConfig.ts b/packages/js/client/src/legacy/PolywrapCoreClientConfig.ts similarity index 68% rename from packages/js/client-config-builder/src/types/configs/PolywrapCoreClientConfig.ts rename to packages/js/client/src/legacy/PolywrapCoreClientConfig.ts index f22a6a72d8..f1ea57f544 100644 --- a/packages/js/client-config-builder/src/types/configs/PolywrapCoreClientConfig.ts +++ b/packages/js/client/src/legacy/PolywrapCoreClientConfig.ts @@ -1,4 +1,4 @@ -import { Env, InterfaceImplementations } from "./types"; +import { GenericEnv, GenericInterfaceImplementations } from "./types"; import { IUriResolver, Uri } from "@polywrap/core-js"; import { TracerConfig } from "@polywrap/tracing-js"; @@ -7,8 +7,8 @@ import { IWrapperCache } from "@polywrap/uri-resolvers-js"; export interface PolywrapCoreClientConfig< TUri extends Uri | string = Uri | string > { - readonly interfaces?: Readonly[]>; - readonly envs?: Readonly[]>; + readonly interfaces?: Readonly[]>; + readonly envs?: Readonly[]>; readonly resolver: Readonly>; readonly wrapperCache?: IWrapperCache; readonly tracerConfig?: Readonly>; diff --git a/packages/js/client-config-builder/src/helpers/buildPolywrapCoreClientConfig.ts b/packages/js/client/src/legacy/buildPolywrapCoreClientConfig.ts similarity index 93% rename from packages/js/client-config-builder/src/helpers/buildPolywrapCoreClientConfig.ts rename to packages/js/client/src/legacy/buildPolywrapCoreClientConfig.ts index 7019ebc190..8996187087 100644 --- a/packages/js/client-config-builder/src/helpers/buildPolywrapCoreClientConfig.ts +++ b/packages/js/client/src/legacy/buildPolywrapCoreClientConfig.ts @@ -1,12 +1,10 @@ import { PolywrapClientConfig, PolywrapCoreClientConfig, - BuilderConfig, ClientConfig, -} from "../types"; -import { UriResolverLike } from "../types/configs/types"; -import { ClientConfigBuilder } from "../ClientConfigBuilder"; -import { sanitizeUri } from "./sanitizeUri"; + sanitizeUri, +} from "."; +import { GenericUriResolverLike } from "./types"; import { CoreClientConfig, @@ -15,6 +13,10 @@ import { Uri, } from "@polywrap/core-js"; import { UriResolverLike as SanitizedUriResolverLike } from "@polywrap/uri-resolvers-js"; +import { + BuilderConfig, + ClientConfigBuilder, +} from "@polywrap/client-config-builder-js"; export function sanitizeConfig( config: Partial> | Partial @@ -76,7 +78,7 @@ export function sanitizeConfig( } export function sanitizeResolverLike( - resolverLike: UriResolverLike | SanitizedUriResolverLike + resolverLike: GenericUriResolverLike | SanitizedUriResolverLike ): SanitizedUriResolverLike { if (Array.isArray(resolverLike)) { const sanitizedResolvers: SanitizedUriResolverLike[] = []; @@ -165,8 +167,8 @@ export function buildPolywrapCoreClientConfig< } if (config && "wrapperCache" in config) { - return builder.buildCoreConfig(config.wrapperCache); + return builder.build(config.wrapperCache); } - return builder.buildCoreConfig(); + return builder.build(); } diff --git a/packages/js/client/src/legacy/index.ts b/packages/js/client/src/legacy/index.ts new file mode 100644 index 0000000000..800a33e7e8 --- /dev/null +++ b/packages/js/client/src/legacy/index.ts @@ -0,0 +1,6 @@ +export * from "./types"; +export * from "./ClientConfig"; +export * from "./PolywrapClientConfig"; +export * from "./PolywrapCoreClientConfig"; +export * from "./buildPolywrapCoreClientConfig"; +export * from "./sanitizeUri"; diff --git a/packages/js/client-config-builder/src/helpers/sanitizeUri.ts b/packages/js/client/src/legacy/sanitizeUri.ts similarity index 100% rename from packages/js/client-config-builder/src/helpers/sanitizeUri.ts rename to packages/js/client/src/legacy/sanitizeUri.ts diff --git a/packages/js/client-config-builder/src/types/configs/types/Env.ts b/packages/js/client/src/legacy/types/GenericEnv.ts similarity index 70% rename from packages/js/client-config-builder/src/types/configs/types/Env.ts rename to packages/js/client/src/legacy/types/GenericEnv.ts index 838b8f1fff..8492707a04 100644 --- a/packages/js/client-config-builder/src/types/configs/types/Env.ts +++ b/packages/js/client/src/legacy/types/GenericEnv.ts @@ -1,6 +1,6 @@ import { Uri } from "@polywrap/core-js"; -export interface Env { +export interface GenericEnv { /** Uri of wrapper */ uri: TUri; diff --git a/packages/js/client-config-builder/src/types/configs/types/IUriPackage.ts b/packages/js/client/src/legacy/types/GenericIUriPackage.ts similarity index 56% rename from packages/js/client-config-builder/src/types/configs/types/IUriPackage.ts rename to packages/js/client/src/legacy/types/GenericIUriPackage.ts index 3a5449d507..3596bce298 100644 --- a/packages/js/client-config-builder/src/types/configs/types/IUriPackage.ts +++ b/packages/js/client/src/legacy/types/GenericIUriPackage.ts @@ -1,6 +1,6 @@ import { Uri, IWrapPackage } from "@polywrap/core-js"; -export interface IUriPackage { +export interface IGenericUriPackage { uri: TUri; package: IWrapPackage; } diff --git a/packages/js/client/src/legacy/types/GenericIUriRedirect.ts b/packages/js/client/src/legacy/types/GenericIUriRedirect.ts new file mode 100644 index 0000000000..637fe4d627 --- /dev/null +++ b/packages/js/client/src/legacy/types/GenericIUriRedirect.ts @@ -0,0 +1,6 @@ +import { Uri } from "@polywrap/core-js"; + +export interface IGenericUriRedirect { + from: TUri; + to: TUri; +} diff --git a/packages/js/client-config-builder/src/types/configs/types/IUriWrapper.ts b/packages/js/client/src/legacy/types/GenericIUriWrapper.ts similarity index 53% rename from packages/js/client-config-builder/src/types/configs/types/IUriWrapper.ts rename to packages/js/client/src/legacy/types/GenericIUriWrapper.ts index cba35969a0..f59eb9d0a5 100644 --- a/packages/js/client-config-builder/src/types/configs/types/IUriWrapper.ts +++ b/packages/js/client/src/legacy/types/GenericIUriWrapper.ts @@ -1,6 +1,6 @@ import { Uri, Wrapper } from "@polywrap/core-js"; -export interface IUriWrapper { +export interface IGenericUriWrapper { uri: TUri; wrapper: Wrapper; } diff --git a/packages/js/client/src/legacy/types/GenericInterfaceImplementations.ts b/packages/js/client/src/legacy/types/GenericInterfaceImplementations.ts new file mode 100644 index 0000000000..339ca1a3bd --- /dev/null +++ b/packages/js/client/src/legacy/types/GenericInterfaceImplementations.ts @@ -0,0 +1,8 @@ +import { Uri } from "@polywrap/core-js"; + +export interface GenericInterfaceImplementations< + TUri extends Uri | string = string +> { + interface: TUri; + implementations: TUri[]; +} diff --git a/packages/js/client/src/legacy/types/GenericUriResolverLike.ts b/packages/js/client/src/legacy/types/GenericUriResolverLike.ts new file mode 100644 index 0000000000..eaf4f1d64d --- /dev/null +++ b/packages/js/client/src/legacy/types/GenericUriResolverLike.ts @@ -0,0 +1,12 @@ +import { IGenericUriPackage } from "./GenericIUriPackage"; +import { IGenericUriRedirect } from "./GenericIUriRedirect"; +import { IGenericUriWrapper } from "./GenericIUriWrapper"; + +import { IUriResolver, Uri } from "@polywrap/core-js"; + +export type GenericUriResolverLike = + | IUriResolver + | IGenericUriRedirect + | IGenericUriPackage + | IGenericUriWrapper + | GenericUriResolverLike[]; diff --git a/packages/js/client/src/legacy/types/index.ts b/packages/js/client/src/legacy/types/index.ts new file mode 100644 index 0000000000..4b551dc3bb --- /dev/null +++ b/packages/js/client/src/legacy/types/index.ts @@ -0,0 +1,6 @@ +export * from "./GenericInterfaceImplementations"; +export * from "./GenericEnv"; +export * from "./GenericIUriWrapper"; +export * from "./GenericIUriRedirect"; +export * from "./GenericIUriPackage"; +export * from "./GenericUriResolverLike"; diff --git a/packages/js/core-client/README.md b/packages/js/core-client/README.md index 2fd8431c7c..b5defa23fb 100644 --- a/packages/js/core-client/README.md +++ b/packages/js/core-client/README.md @@ -20,7 +20,7 @@ npm install --save @polywrap/core-client-js Use the `@polywrap/client-config-builder-js` package to build a CoreClientConfig for your project, then use the PolywrapCoreClient [constructor](#constructor) to instantiate the client with your config. ```ts - const config = new ClientConfigBuilder().addDefaults().buildCoreConfig(); + const config = new ClientConfigBuilder().addDefaults().build(); const client = new PolywrapCoreClient(config); ``` diff --git a/packages/js/core-client/examples/quickstart.ts b/packages/js/core-client/examples/quickstart.ts index 4e9410cd4c..c55ca0d4eb 100644 --- a/packages/js/core-client/examples/quickstart.ts +++ b/packages/js/core-client/examples/quickstart.ts @@ -4,7 +4,7 @@ import { Uri } from "@polywrap/core-js"; export function instantiate(): PolywrapCoreClient { // $start: quickstart-instantiate - const config = new ClientConfigBuilder().addDefaults().buildCoreConfig(); + const config = new ClientConfigBuilder().addDefaults().build(); const client = new PolywrapCoreClient(config); // $end @@ -13,7 +13,7 @@ export function instantiate(): PolywrapCoreClient { } export async function invoke(): Promise { - const config = new ClientConfigBuilder().addDefaults().buildCoreConfig(); + const config = new ClientConfigBuilder().addDefaults().build(); const client = new PolywrapCoreClient(config); diff --git a/packages/js/plugins/ethereum/src/__tests__/e2e.spec.ts b/packages/js/plugins/ethereum/src/__tests__/e2e.spec.ts index ec8b7a64d9..ad9df5ace4 100644 --- a/packages/js/plugins/ethereum/src/__tests__/e2e.spec.ts +++ b/packages/js/plugins/ethereum/src/__tests__/e2e.spec.ts @@ -1,8 +1,7 @@ import * as Schema from "../wrap"; -import { PolywrapClient } from "@polywrap/client-js"; -import { ClientConfig } from "@polywrap/client-config-builder-js"; +import { PolywrapClient, ClientConfig } from "@polywrap/client-js"; import { initTestEnvironment, stopTestEnvironment, diff --git a/packages/js/plugins/ethereum/src/__tests__/helpers/getDefaultConfig.ts b/packages/js/plugins/ethereum/src/__tests__/helpers/getDefaultConfig.ts index c62016a3ed..d64e910c9a 100644 --- a/packages/js/plugins/ethereum/src/__tests__/helpers/getDefaultConfig.ts +++ b/packages/js/plugins/ethereum/src/__tests__/helpers/getDefaultConfig.ts @@ -5,9 +5,9 @@ import { ethereumPlugin, Connections } from "../.."; import { providers } from "@polywrap/test-env-js"; import { defaultIpfsProviders, - ClientConfig, } from "@polywrap/client-config-builder-js"; import { Uri } from "@polywrap/core-js"; +import { ClientConfig } from "@polywrap/client-js"; export const getDefaultConfig = ( connections: Connections diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/config.ts b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/config.ts index 8c0d716d41..6eb74ce0a7 100644 --- a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/config.ts +++ b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/config.ts @@ -1,36 +1,10 @@ -import { BaseClientConfigBuilder, getDefaultConfig, IClientConfigBuilder, CoreClientConfig, ExtendableUriResolver, PackageToWrapperCacheResolver, RecursiveResolver, StaticResolver, Uri, WrapperCache } from "@polywrap/client-js"; +import { + IClientConfigBuilder, + ClientConfigBuilder, +} from "@polywrap/client-js"; import { PluginModule, PluginPackage } from "@polywrap/plugin-js"; import { latestWrapManifestVersion } from "@polywrap/wrap-manifest-types-js"; -export class CustomConfigBuilder extends BaseClientConfigBuilder { - addDefaults(): IClientConfigBuilder { - return this.add(getDefaultConfig()); - } - - buildCoreConfig(): CoreClientConfig { - const config = super.build(); - return { - envs: config.envs, - interfaces: config.interfaces, - resolver: - RecursiveResolver.from( - PackageToWrapperCacheResolver.from( - [ - StaticResolver.from([ - ...config.redirects, - ...config.wrappers, - ...config.packages, - ]), - ...this.config.resolvers, - new ExtendableUriResolver(), - ], - new WrapperCache() - ) - ), - }; - } -} - interface Config extends Record { val: number; } @@ -143,13 +117,13 @@ const mockPlugin = () => { imports: [], interfaces: [], }, - } + }, } ); }; export function configure(_: IClientConfigBuilder): IClientConfigBuilder { - return new CustomConfigBuilder() + return new ClientConfigBuilder() .addDefaults() .addPackage("wrap://ens/mock.eth", mockPlugin()); } diff --git a/packages/test-cases/cases/cli/wasm/codegen/007-override-config/config.ts b/packages/test-cases/cases/cli/wasm/codegen/007-override-config/config.ts index 0a2f2426fd..7b1ffd0156 100644 --- a/packages/test-cases/cases/cli/wasm/codegen/007-override-config/config.ts +++ b/packages/test-cases/cases/cli/wasm/codegen/007-override-config/config.ts @@ -1,46 +1,10 @@ import { - BaseClientConfigBuilder, - getDefaultConfig, IClientConfigBuilder, - CoreClientConfig, - ExtendableUriResolver, - PackageToWrapperCacheResolver, - RecursiveResolver, - StaticResolver, - Uri, - WrapperCache, + ClientConfigBuilder, } from "@polywrap/client-js"; import { PluginModule, PluginPackage } from "@polywrap/plugin-js"; import { latestWrapManifestVersion } from "@polywrap/schema-parse"; -export class CustomConfigBuilder extends BaseClientConfigBuilder { - addDefaults(): IClientConfigBuilder { - return this.add(getDefaultConfig()); - } - - buildCoreConfig(): CoreClientConfig { - const config = super.build(); - return { - envs: config.envs, - interfaces: config.interfaces, - resolver: RecursiveResolver.from( - PackageToWrapperCacheResolver.from( - [ - StaticResolver.from([ - ...config.redirects, - ...config.wrappers, - ...config.packages, - ]), - ...this.config.resolvers, - new ExtendableUriResolver(), - ], - new WrapperCache() - ) - ), - }; - } -} - interface Config extends Record { val: number; } @@ -159,7 +123,7 @@ const mockPlugin = () => { }; export function configure(_: IClientConfigBuilder): IClientConfigBuilder { - return new CustomConfigBuilder() + return new ClientConfigBuilder() .addDefaults() .addPackage("wrap://ens/mock.eth", mockPlugin()); }