From ea12e595c46dc8ed12c83397567e7d2d1c504a09 Mon Sep 17 00:00:00 2001 From: Pileks Date: Sat, 28 Jan 2023 19:07:39 +0100 Subject: [PATCH 01/13] WIP: Remove ClientConfigBuilder.build and replace it with buildCoreConfig --- packages/js/client-config-builder/README.md | 19 +- .../examples/quickstart.ts | 11 +- .../js/client-config-builder/readme/README.md | 5 - .../src/BaseClientConfigBuilder.ts | 55 ++++- .../src/ClientConfigBuilder.ts | 16 +- .../__tests__/client-config-builder.spec.ts | 218 +++++++++--------- .../helpers/buildPolywrapCoreClientConfig.ts | 4 +- .../src/types/IClientConfigBuilder.ts | 12 +- 8 files changed, 170 insertions(+), 170 deletions(-) diff --git a/packages/js/client-config-builder/README.md b/packages/js/client-config-builder/README.md index f42f0a94e3..48cc89e9e6 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([]) ); @@ -460,23 +457,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 diff --git a/packages/js/client-config-builder/examples/quickstart.ts b/packages/js/client-config-builder/examples/quickstart.ts index 8a56e168e2..c05f9e6230 100644 --- a/packages/js/client-config-builder/examples/quickstart.ts +++ b/packages/js/client-config-builder/examples/quickstart.ts @@ -56,23 +56,20 @@ export function build(): 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..1b28f86d53 100644 --- a/packages/js/client-config-builder/readme/README.md +++ b/packages/js/client-config-builder/readme/README.md @@ -164,11 +164,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..f4ad86de4e 100644 --- a/packages/js/client-config-builder/src/BaseClientConfigBuilder.ts +++ b/packages/js/client-config-builder/src/BaseClientConfigBuilder.ts @@ -27,7 +27,7 @@ export abstract class BaseClientConfigBuilder implements IClientConfigBuilder { }; abstract addDefaults(): IClientConfigBuilder; - abstract buildCoreConfig( + abstract build( wrapperCache?: IWrapperCache, resolver?: IUriResolver ): CoreClientConfig; @@ -210,13 +210,40 @@ export abstract class BaseClientConfigBuilder implements IClientConfigBuilder { return this; } - build(): ClientConfig { + protected buildx(): ClientConfig { + const envs = this.buildEnvs(); + + const interfaces = this.buildInterfaces(); + + const redirects = this.buildRedirects(); + + const wrappers = this.buildWrappers(); + + const packages = this.buildPackages(); + + return { + envs, + interfaces, + redirects, + wrappers, + packages, + resolvers: this._config.resolvers, + }; + } + + protected buildEnvs(): Env[] { const envs: Env[] = []; + for (const [uri, env] of Object.entries(this._config.envs)) { envs.push({ uri: Uri.from(uri), env }); } + return envs; + } + + protected buildInterfaces(): InterfaceImplementations[] { const interfaces: InterfaceImplementations[] = []; + for (const [interfaceUri, implementations] of Object.entries( this._config.interfaces )) { @@ -229,28 +256,36 @@ export abstract class BaseClientConfigBuilder implements IClientConfigBuilder { }); } + return interfaces; + } + + protected 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; + } + + protected buildWrappers(): IUriWrapper[] { const wrappers: IUriWrapper[] = []; + for (const [uri, wrapper] of Object.entries(this._config.wrappers)) { wrappers.push({ uri: Uri.from(uri), wrapper }); } + return wrappers; + } + + protected buildPackages(): IUriPackage[] { 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, - }; + return packages; } } diff --git a/packages/js/client-config-builder/src/ClientConfigBuilder.ts b/packages/js/client-config-builder/src/ClientConfigBuilder.ts index 4848165f6a..3e42ff4a52 100644 --- a/packages/js/client-config-builder/src/ClientConfigBuilder.ts +++ b/packages/js/client-config-builder/src/ClientConfigBuilder.ts @@ -25,26 +25,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() 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..91084dd4ea 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 @@ -7,21 +7,28 @@ import { } from "@polywrap/core-js"; import { Result } from "@polywrap/result"; import { builtDefaultConfig } from "./builtDefaultConfig"; +import { UriResolutionResult } from "@polywrap/uri-resolvers-js"; -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); } } @@ -69,7 +76,7 @@ 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(); @@ -93,7 +100,7 @@ describe("Client config builder", () => { resolvers: [testUriResolver], }) .build(); - + expect(clientConfig).toBeTruthy(); expect(clientConfig.envs).toStrictEqual( Object.entries(testEnvs).map(([uri, env]) => ({ @@ -107,13 +114,8 @@ 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]); + + // TODO: How to test resolver? }); it("should succesfully add and merge two config objects and build", () => { @@ -144,13 +146,8 @@ 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]); + + // TODO: How to test resolver? }); it("should successfully add the default config", () => { @@ -161,8 +158,8 @@ describe("Client config builder", () => { 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); + + // TODO: How to test resolver? }); it("should successfully add an env", () => { @@ -533,108 +530,109 @@ describe("Client config builder", () => { }); it("should add an uri redirect", () => { - const from = "wrap://ens/from.this.ens"; - const to = "wrap://ens/to.that.ens"; - - const config = new ClientConfigBuilder().addRedirect(from, to).build(); - - expect(config.redirects).toHaveLength(1); - expect(config.redirects).toContainEqual({ - from: Uri.from(from), - to: Uri.from(to), - }); + // const from = "wrap://ens/from.this.ens"; + // const to = "wrap://ens/to.that.ens"; + + // const config = new ClientConfigBuilder().addRedirect(from, to).build(); + // TODO: How to test resolver? + // expect(config.redirects).toHaveLength(1); + // expect(config.redirects).toContainEqual({ + // from: Uri.from(from), + // to: Uri.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() - .addRedirect(from1, to1) - .addRedirect(from2, to2) - .build(); - - 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 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() + // .addRedirect(from1, to1) + // .addRedirect(from2, to2) + // .build(); + + // TODO: How to test resolver? + // 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), + // }); }); it("should overwrite an existing uri redirect if from matches on add", () => { - const from1 = "wrap://ens/from1.this.ens"; - const from2 = "wrap://ens/from2.this.ens"; - const to1 = "wrap://ens/to.that1.ens"; - const to2 = "wrap://ens/to.that2.ens"; - - const config = new ClientConfigBuilder() - .addRedirect(from1, to1) - .addRedirect(from2, to1) - .addRedirect(from1, to2) - .build(); - - 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 from1 = "wrap://ens/from1.this.ens"; + // const from2 = "wrap://ens/from2.this.ens"; + // const to1 = "wrap://ens/to.that1.ens"; + // const to2 = "wrap://ens/to.that2.ens"; + + // const config = new ClientConfigBuilder() + // .addRedirect(from1, to1) + // .addRedirect(from2, to1) + // .addRedirect(from1, to2) + // .build(); + + // TODO: How to test resolver? + // 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), + // }); }); 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() - .addRedirect(from1, to1) - .addRedirect(from2, to2) - .removeRedirect(from1) - .build(); - - expect(config.redirects).toHaveLength(1); - expect(config.redirects).toContainEqual({ - from: Uri.from(from2), - to: Uri.from(to2), - }); + // 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() + // .addRedirect(from1, to1) + // .addRedirect(from2, to2) + // .removeRedirect(from1) + // .build(); + + // TODO: How to test resolver? + // expect(config.redirects).toHaveLength(1); + // expect(config.redirects).toContainEqual({ + // from: Uri.from(from2), + // to: Uri.from(to2), + // }); }); it("should set uri resolver", () => { - const uriResolver = new NamedUriResolver("ResolverName"); + // TODO: How to test resolver? + // const uriResolver = new MockUriResolver("ResolverName"); - const config = new ClientConfigBuilder().addResolver(uriResolver).build(); + // const config = new ClientConfigBuilder().addResolver(uriResolver).build(); - expect((config.resolvers as Array)[0].name).toBe( - "ResolverName" - ); + // expect((config.resolvers as Array)[0].name).toBe( + // "ResolverName" + // ); }); it("should overwrite uri resolver on set when it already exists", () => { - const uriResolver1 = new NamedUriResolver("first"); - const uriResolver2 = new NamedUriResolver("second"); + // TODO: How to test resolver? + // const uriResolver1 = new MockUriResolver("first"); + // const uriResolver2 = new MockUriResolver("second"); - const config = new ClientConfigBuilder() - .addResolver(uriResolver1) - .addResolver(uriResolver2) - .build(); + // const config = new ClientConfigBuilder() + // .addResolver(uriResolver1) + // .addResolver(uriResolver2) + // .build(); - expect((config.resolvers as Array)[0].name).toBe( - "first" - ); - expect((config.resolvers as Array)[1].name).toBe( - "second" - ); + // expect((config.resolvers as Array)[0].name).toBe("first"); + // expect((config.resolvers as Array)[1].name).toBe("second"); }); }); diff --git a/packages/js/client-config-builder/src/helpers/buildPolywrapCoreClientConfig.ts b/packages/js/client-config-builder/src/helpers/buildPolywrapCoreClientConfig.ts index 7019ebc190..0dfc25bd92 100644 --- a/packages/js/client-config-builder/src/helpers/buildPolywrapCoreClientConfig.ts +++ b/packages/js/client-config-builder/src/helpers/buildPolywrapCoreClientConfig.ts @@ -165,8 +165,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-config-builder/src/types/IClientConfigBuilder.ts b/packages/js/client-config-builder/src/types/IClientConfigBuilder.ts index 8e838f9304..2412245170 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 From 3fe3b5a04c1d7c3d9117169ff562165dc93cd781 Mon Sep 17 00:00:00 2001 From: Pileks Date: Sat, 28 Jan 2023 19:38:45 +0100 Subject: [PATCH 02/13] fix up package builds --- packages/cli/src/commands/build.ts | 2 +- packages/cli/src/commands/codegen.ts | 2 +- packages/cli/src/commands/docgen.ts | 2 +- packages/cli/src/lib/workflow/JobRunner.ts | 2 +- packages/js/client/README.md | 2 +- packages/js/client/examples/quickstart.ts | 2 +- packages/js/core-client/README.md | 2 +- packages/js/core-client/examples/quickstart.ts | 4 ++-- 8 files changed, 9 insertions(+), 9 deletions(-) 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..992a536000 100644 --- a/packages/cli/src/lib/workflow/JobRunner.ts +++ b/packages/cli/src/lib/workflow/JobRunner.ts @@ -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/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/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); From a8382fba355c42bd01410e36da0ff266bccf9b02 Mon Sep 17 00:00:00 2001 From: Pileks Date: Sat, 28 Jan 2023 20:37:44 +0100 Subject: [PATCH 03/13] fix test cases --- .../014-override-config/config.ts | 38 +++--------------- .../codegen/007-override-config/config.ts | 40 +------------------ 2 files changed, 8 insertions(+), 70 deletions(-) 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()); } From fa458f0bc6023f0abfac13d8114d962dc01b9dbe Mon Sep 17 00:00:00 2001 From: Pileks Date: Sun, 29 Jan 2023 17:54:08 +0100 Subject: [PATCH 04/13] fix test cases and lint --- .../src/BaseClientConfigBuilder.ts | 6 +++--- .../client-config-builder/src/ClientConfigBuilder.ts | 2 +- .../src/__tests__/client-config-builder.spec.ts | 10 ++-------- .../src/bundles/getDefaultConfig.ts | 4 +--- .../src/types/IClientConfigBuilder.ts | 4 +++- 5 files changed, 10 insertions(+), 16 deletions(-) diff --git a/packages/js/client-config-builder/src/BaseClientConfigBuilder.ts b/packages/js/client-config-builder/src/BaseClientConfigBuilder.ts index f4ad86de4e..9a1cddd167 100644 --- a/packages/js/client-config-builder/src/BaseClientConfigBuilder.ts +++ b/packages/js/client-config-builder/src/BaseClientConfigBuilder.ts @@ -217,7 +217,7 @@ export abstract class BaseClientConfigBuilder implements IClientConfigBuilder { const redirects = this.buildRedirects(); - const wrappers = this.buildWrappers(); + const wrappers = this.buildWrappers(); const packages = this.buildPackages(); @@ -271,7 +271,7 @@ export abstract class BaseClientConfigBuilder implements IClientConfigBuilder { protected buildWrappers(): IUriWrapper[] { const wrappers: IUriWrapper[] = []; - + for (const [uri, wrapper] of Object.entries(this._config.wrappers)) { wrappers.push({ uri: Uri.from(uri), wrapper }); } @@ -281,7 +281,7 @@ export abstract class BaseClientConfigBuilder implements IClientConfigBuilder { protected buildPackages(): IUriPackage[] { const packages: IUriPackage[] = []; - + for (const [uri, wrapPackage] of Object.entries(this._config.packages)) { packages.push({ uri: Uri.from(uri), package: wrapPackage }); } diff --git a/packages/js/client-config-builder/src/ClientConfigBuilder.ts b/packages/js/client-config-builder/src/ClientConfigBuilder.ts index 3e42ff4a52..2944b61fd2 100644 --- a/packages/js/client-config-builder/src/ClientConfigBuilder.ts +++ b/packages/js/client-config-builder/src/ClientConfigBuilder.ts @@ -40,7 +40,7 @@ export class ClientConfigBuilder extends BaseClientConfigBuilder { StaticResolver.from([ ...this.buildRedirects(), ...this.buildWrappers(), - ...this.buildPackages() + ...this.buildPackages(), ]), ...this._config.resolvers, new ExtendableUriResolver(), 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 91084dd4ea..01fa62a4d2 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 @@ -81,14 +81,8 @@ describe("Client config builder", () => { 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", () => { 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/types/IClientConfigBuilder.ts b/packages/js/client-config-builder/src/types/IClientConfigBuilder.ts index 2412245170..a6def5f36d 100644 --- a/packages/js/client-config-builder/src/types/IClientConfigBuilder.ts +++ b/packages/js/client-config-builder/src/types/IClientConfigBuilder.ts @@ -117,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 From c7b1b07bb31fc8390451fa302c9ba87810cea572 Mon Sep 17 00:00:00 2001 From: Pileks Date: Sun, 29 Jan 2023 18:17:50 +0100 Subject: [PATCH 05/13] fix wasm-wrapper test --- packages/js/client/src/__tests__/core/wasm-wrapper.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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, From 6419ef6b3ffcad0669fa066a59d8f52846f2608d Mon Sep 17 00:00:00 2001 From: Pileks Date: Sun, 29 Jan 2023 20:23:47 +0100 Subject: [PATCH 06/13] rename legacy client configuration types --- .../helpers/buildPolywrapCoreClientConfig.ts | 4 ++-- .../src/types/configs/PolywrapClientConfig.ts | 24 +++++++++---------- .../types/configs/PolywrapCoreClientConfig.ts | 6 ++--- .../src/types/configs/types/Env.ts | 2 +- .../src/types/configs/types/IUriPackage.ts | 2 +- .../src/types/configs/types/IUriRedirect.ts | 2 +- .../src/types/configs/types/IUriWrapper.ts | 2 +- .../configs/types/InterfaceImplementations.ts | 2 +- .../types/configs/types/UriResolverLike.ts | 16 ++++++------- 9 files changed, 30 insertions(+), 30 deletions(-) diff --git a/packages/js/client-config-builder/src/helpers/buildPolywrapCoreClientConfig.ts b/packages/js/client-config-builder/src/helpers/buildPolywrapCoreClientConfig.ts index 0dfc25bd92..f6f1e30fa6 100644 --- a/packages/js/client-config-builder/src/helpers/buildPolywrapCoreClientConfig.ts +++ b/packages/js/client-config-builder/src/helpers/buildPolywrapCoreClientConfig.ts @@ -4,7 +4,7 @@ import { BuilderConfig, ClientConfig, } from "../types"; -import { UriResolverLike } from "../types/configs/types"; +import { GenericUriResolverLike } from "../types/configs/types"; import { ClientConfigBuilder } from "../ClientConfigBuilder"; import { sanitizeUri } from "./sanitizeUri"; @@ -76,7 +76,7 @@ export function sanitizeConfig( } export function sanitizeResolverLike( - resolverLike: UriResolverLike | SanitizedUriResolverLike + resolverLike: GenericUriResolverLike | SanitizedUriResolverLike ): SanitizedUriResolverLike { if (Array.isArray(resolverLike)) { const sanitizedResolvers: SanitizedUriResolverLike[] = []; diff --git a/packages/js/client-config-builder/src/types/configs/PolywrapClientConfig.ts b/packages/js/client-config-builder/src/types/configs/PolywrapClientConfig.ts index e385dec919..96f825d0c6 100644 --- a/packages/js/client-config-builder/src/types/configs/PolywrapClientConfig.ts +++ b/packages/js/client-config-builder/src/types/configs/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-config-builder/src/types/configs/PolywrapCoreClientConfig.ts index f22a6a72d8..f1ea57f544 100644 --- a/packages/js/client-config-builder/src/types/configs/PolywrapCoreClientConfig.ts +++ b/packages/js/client-config-builder/src/types/configs/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/types/configs/types/Env.ts b/packages/js/client-config-builder/src/types/configs/types/Env.ts index 838b8f1fff..8492707a04 100644 --- a/packages/js/client-config-builder/src/types/configs/types/Env.ts +++ b/packages/js/client-config-builder/src/types/configs/types/Env.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-config-builder/src/types/configs/types/IUriPackage.ts index 3a5449d507..3596bce298 100644 --- a/packages/js/client-config-builder/src/types/configs/types/IUriPackage.ts +++ b/packages/js/client-config-builder/src/types/configs/types/IUriPackage.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-config-builder/src/types/configs/types/IUriRedirect.ts b/packages/js/client-config-builder/src/types/configs/types/IUriRedirect.ts index 58f9751182..637fe4d627 100644 --- a/packages/js/client-config-builder/src/types/configs/types/IUriRedirect.ts +++ b/packages/js/client-config-builder/src/types/configs/types/IUriRedirect.ts @@ -1,6 +1,6 @@ import { Uri } from "@polywrap/core-js"; -export interface IUriRedirect { +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-config-builder/src/types/configs/types/IUriWrapper.ts index cba35969a0..f59eb9d0a5 100644 --- a/packages/js/client-config-builder/src/types/configs/types/IUriWrapper.ts +++ b/packages/js/client-config-builder/src/types/configs/types/IUriWrapper.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-config-builder/src/types/configs/types/InterfaceImplementations.ts b/packages/js/client-config-builder/src/types/configs/types/InterfaceImplementations.ts index 701c94c599..6a0295ea68 100644 --- a/packages/js/client-config-builder/src/types/configs/types/InterfaceImplementations.ts +++ b/packages/js/client-config-builder/src/types/configs/types/InterfaceImplementations.ts @@ -1,6 +1,6 @@ import { Uri } from "@polywrap/core-js"; -export interface InterfaceImplementations { +export interface GenericInterfaceImplementations { 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 index 0c5888ef0c..56bd34d58d 100644 --- a/packages/js/client-config-builder/src/types/configs/types/UriResolverLike.ts +++ b/packages/js/client-config-builder/src/types/configs/types/UriResolverLike.ts @@ -1,12 +1,12 @@ -import { IUriPackage } from "./IUriPackage"; -import { IUriRedirect } from "./IUriRedirect"; -import { IUriWrapper } from "./IUriWrapper"; +import { IGenericUriPackage } from "./IUriPackage"; +import { IGenericUriRedirect } from "./IUriRedirect"; +import { IGenericUriWrapper } from "./IUriWrapper"; import { IUriResolver, Uri } from "@polywrap/core-js"; -export type UriResolverLike = +export type GenericUriResolverLike = | IUriResolver - | IUriRedirect - | IUriPackage - | IUriWrapper - | UriResolverLike[]; + | IGenericUriRedirect + | IGenericUriPackage + | IGenericUriWrapper + | GenericUriResolverLike[]; From 151a43ded026266e39a956bb691d24926dd689fd Mon Sep 17 00:00:00 2001 From: Pileks Date: Sun, 29 Jan 2023 21:07:18 +0100 Subject: [PATCH 07/13] move legacy configuration types to client-js package --- packages/cli/src/lib/workflow/JobRunner.ts | 10 +- packages/js/client-config-builder/README.md | 47 +----- .../examples/quickstart.ts | 3 +- .../js/client-config-builder/readme/README.md | 6 - .../src/BaseClientConfigBuilder.ts | 22 --- .../src/__tests__/builtDefaultConfig.ts | 135 ------------------ .../__tests__/client-config-builder.spec.ts | 11 +- .../src/helpers/index.ts | 2 - .../js/client-config-builder/src/index.ts | 1 - .../src/types/configs/index.ts | 3 - packages/js/client/src/PolywrapClient.ts | 2 +- packages/js/client/src/index.ts | 1 + .../src/legacy}/ClientConfig.ts | 0 .../src/legacy}/PolywrapClientConfig.ts | 0 .../src/legacy}/PolywrapCoreClientConfig.ts | 0 .../legacy}/buildPolywrapCoreClientConfig.ts | 9 +- packages/js/client/src/legacy/index.ts | 6 + .../src/legacy}/sanitizeUri.ts | 0 .../src/legacy}/types/Env.ts | 0 .../src/legacy}/types/IUriPackage.ts | 0 .../src/legacy}/types/IUriRedirect.ts | 0 .../src/legacy}/types/IUriWrapper.ts | 0 .../legacy}/types/InterfaceImplementations.ts | 0 .../src/legacy}/types/UriResolverLike.ts | 0 .../src/legacy}/types/index.ts | 0 25 files changed, 27 insertions(+), 231 deletions(-) delete mode 100644 packages/js/client-config-builder/src/__tests__/builtDefaultConfig.ts delete mode 100644 packages/js/client-config-builder/src/helpers/index.ts rename packages/js/{client-config-builder/src/types/configs => client/src/legacy}/ClientConfig.ts (100%) rename packages/js/{client-config-builder/src/types/configs => client/src/legacy}/PolywrapClientConfig.ts (100%) rename packages/js/{client-config-builder/src/types/configs => client/src/legacy}/PolywrapCoreClientConfig.ts (100%) rename packages/js/{client-config-builder/src/helpers => client/src/legacy}/buildPolywrapCoreClientConfig.ts (95%) create mode 100644 packages/js/client/src/legacy/index.ts rename packages/js/{client-config-builder/src/helpers => client/src/legacy}/sanitizeUri.ts (100%) rename packages/js/{client-config-builder/src/types/configs => client/src/legacy}/types/Env.ts (100%) rename packages/js/{client-config-builder/src/types/configs => client/src/legacy}/types/IUriPackage.ts (100%) rename packages/js/{client-config-builder/src/types/configs => client/src/legacy}/types/IUriRedirect.ts (100%) rename packages/js/{client-config-builder/src/types/configs => client/src/legacy}/types/IUriWrapper.ts (100%) rename packages/js/{client-config-builder/src/types/configs => client/src/legacy}/types/InterfaceImplementations.ts (100%) rename packages/js/{client-config-builder/src/types/configs => client/src/legacy}/types/UriResolverLike.ts (100%) rename packages/js/{client-config-builder/src/types/configs => client/src/legacy}/types/index.ts (100%) diff --git a/packages/cli/src/lib/workflow/JobRunner.ts b/packages/cli/src/lib/workflow/JobRunner.ts index 992a536000..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; diff --git a/packages/js/client-config-builder/README.md b/packages/js/client-config-builder/README.md index 48cc89e9e6..1bc48e532e 100644 --- a/packages/js/client-config-builder/README.md +++ b/packages/js/client-config-builder/README.md @@ -149,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 @@ -302,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 @@ -565,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 c05f9e6230..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,7 +51,6 @@ export function configure(): ClientConfigBuilder { export function build(): | ClientConfigBuilder - | ClientConfig | CoreClientConfig { 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 1b28f86d53..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 diff --git a/packages/js/client-config-builder/src/BaseClientConfigBuilder.ts b/packages/js/client-config-builder/src/BaseClientConfigBuilder.ts index 9a1cddd167..f2f1b0c5f8 100644 --- a/packages/js/client-config-builder/src/BaseClientConfigBuilder.ts +++ b/packages/js/client-config-builder/src/BaseClientConfigBuilder.ts @@ -1,5 +1,4 @@ import { BuilderConfig } from "./types/configs/BuilderConfig"; -import { ClientConfig } from "./types/configs/ClientConfig"; import { IClientConfigBuilder } from "./types/IClientConfigBuilder"; import { @@ -210,27 +209,6 @@ export abstract class BaseClientConfigBuilder implements IClientConfigBuilder { return this; } - protected buildx(): ClientConfig { - const envs = this.buildEnvs(); - - const interfaces = this.buildInterfaces(); - - const redirects = this.buildRedirects(); - - const wrappers = this.buildWrappers(); - - const packages = this.buildPackages(); - - return { - envs, - interfaces, - redirects, - wrappers, - packages, - resolvers: this._config.resolvers, - }; - } - protected buildEnvs(): Env[] { const envs: Env[] = []; 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 01fa62a4d2..22f78b7573 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,7 +6,6 @@ import { UriPackageOrWrapper, } from "@polywrap/core-js"; import { Result } from "@polywrap/result"; -import { builtDefaultConfig } from "./builtDefaultConfig"; import { UriResolutionResult } from "@polywrap/uri-resolvers-js"; class MockUriResolver implements IUriResolver { @@ -145,13 +144,13 @@ describe("Client config builder", () => { }); it("should successfully add the default config", () => { - const clientConfig = new ClientConfigBuilder().addDefaults().build(); + // const clientConfig = new ClientConfigBuilder().addDefaults().build(); - const expectedConfig = builtDefaultConfig(); + // const expectedConfig = builtDefaultConfig(); - expect(clientConfig).toBeTruthy(); - expect(clientConfig.envs).toStrictEqual(expectedConfig.envs); - expect(clientConfig.interfaces).toStrictEqual(expectedConfig.interfaces); + // expect(clientConfig).toBeTruthy(); + // expect(clientConfig.envs).toStrictEqual(expectedConfig.envs); + // expect(clientConfig.interfaces).toStrictEqual(expectedConfig.interfaces); // TODO: How to test resolver? }); 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/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/src/PolywrapClient.ts b/packages/js/client/src/PolywrapClient.ts index 2356e042b4..40d9795ac8 100644 --- a/packages/js/client/src/PolywrapClient.ts +++ b/packages/js/client/src/PolywrapClient.ts @@ -7,7 +7,7 @@ import { buildPolywrapCoreClientConfig, sanitizeUri, ClientConfig, -} from "@polywrap/client-config-builder-js"; +} from "./legacy"; import { CoreClientConfig, Env, 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 100% rename from packages/js/client-config-builder/src/types/configs/PolywrapClientConfig.ts rename to packages/js/client/src/legacy/PolywrapClientConfig.ts diff --git a/packages/js/client-config-builder/src/types/configs/PolywrapCoreClientConfig.ts b/packages/js/client/src/legacy/PolywrapCoreClientConfig.ts similarity index 100% rename from packages/js/client-config-builder/src/types/configs/PolywrapCoreClientConfig.ts rename to packages/js/client/src/legacy/PolywrapCoreClientConfig.ts diff --git a/packages/js/client-config-builder/src/helpers/buildPolywrapCoreClientConfig.ts b/packages/js/client/src/legacy/buildPolywrapCoreClientConfig.ts similarity index 95% rename from packages/js/client-config-builder/src/helpers/buildPolywrapCoreClientConfig.ts rename to packages/js/client/src/legacy/buildPolywrapCoreClientConfig.ts index f6f1e30fa6..930aa4908f 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 { GenericUriResolverLike } from "../types/configs/types"; -import { ClientConfigBuilder } from "../ClientConfigBuilder"; -import { sanitizeUri } from "./sanitizeUri"; + sanitizeUri +} from "."; +import { GenericUriResolverLike } from "./types"; import { CoreClientConfig, @@ -15,6 +13,7 @@ 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 diff --git a/packages/js/client/src/legacy/index.ts b/packages/js/client/src/legacy/index.ts new file mode 100644 index 0000000000..5216ec9dab --- /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/Env.ts similarity index 100% rename from packages/js/client-config-builder/src/types/configs/types/Env.ts rename to packages/js/client/src/legacy/types/Env.ts diff --git a/packages/js/client-config-builder/src/types/configs/types/IUriPackage.ts b/packages/js/client/src/legacy/types/IUriPackage.ts similarity index 100% rename from packages/js/client-config-builder/src/types/configs/types/IUriPackage.ts rename to packages/js/client/src/legacy/types/IUriPackage.ts diff --git a/packages/js/client-config-builder/src/types/configs/types/IUriRedirect.ts b/packages/js/client/src/legacy/types/IUriRedirect.ts similarity index 100% rename from packages/js/client-config-builder/src/types/configs/types/IUriRedirect.ts rename to packages/js/client/src/legacy/types/IUriRedirect.ts diff --git a/packages/js/client-config-builder/src/types/configs/types/IUriWrapper.ts b/packages/js/client/src/legacy/types/IUriWrapper.ts similarity index 100% rename from packages/js/client-config-builder/src/types/configs/types/IUriWrapper.ts rename to packages/js/client/src/legacy/types/IUriWrapper.ts diff --git a/packages/js/client-config-builder/src/types/configs/types/InterfaceImplementations.ts b/packages/js/client/src/legacy/types/InterfaceImplementations.ts similarity index 100% rename from packages/js/client-config-builder/src/types/configs/types/InterfaceImplementations.ts rename to packages/js/client/src/legacy/types/InterfaceImplementations.ts diff --git a/packages/js/client-config-builder/src/types/configs/types/UriResolverLike.ts b/packages/js/client/src/legacy/types/UriResolverLike.ts similarity index 100% rename from packages/js/client-config-builder/src/types/configs/types/UriResolverLike.ts rename to packages/js/client/src/legacy/types/UriResolverLike.ts diff --git a/packages/js/client-config-builder/src/types/configs/types/index.ts b/packages/js/client/src/legacy/types/index.ts similarity index 100% rename from packages/js/client-config-builder/src/types/configs/types/index.ts rename to packages/js/client/src/legacy/types/index.ts From 39a082b0a946365b2005061ad4ae2690f1833433 Mon Sep 17 00:00:00 2001 From: Pileks Date: Mon, 30 Jan 2023 14:02:36 +0100 Subject: [PATCH 08/13] chore: fix tests --- packages/js/client/src/__tests__/core/interface-impls.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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( From c1cae91c3d7b40f0d1a402327840ac9bbaf2480b Mon Sep 17 00:00:00 2001 From: Pileks Date: Mon, 30 Jan 2023 14:32:34 +0100 Subject: [PATCH 09/13] client - rename files in legacy folder --- .../src/legacy/types/{Env.ts => GenericEnv.ts} | 0 .../types/{IUriPackage.ts => GenericIUriPackage.ts} | 0 .../{IUriRedirect.ts => GenericIUriRedirect.ts} | 0 .../types/{IUriWrapper.ts => GenericIUriWrapper.ts} | 0 ...tations.ts => GenericInterfaceImplementations.ts} | 0 ...{UriResolverLike.ts => GenericUriResolverLike.ts} | 6 +++--- packages/js/client/src/legacy/types/index.ts | 12 ++++++------ 7 files changed, 9 insertions(+), 9 deletions(-) rename packages/js/client/src/legacy/types/{Env.ts => GenericEnv.ts} (100%) rename packages/js/client/src/legacy/types/{IUriPackage.ts => GenericIUriPackage.ts} (100%) rename packages/js/client/src/legacy/types/{IUriRedirect.ts => GenericIUriRedirect.ts} (100%) rename packages/js/client/src/legacy/types/{IUriWrapper.ts => GenericIUriWrapper.ts} (100%) rename packages/js/client/src/legacy/types/{InterfaceImplementations.ts => GenericInterfaceImplementations.ts} (100%) rename packages/js/client/src/legacy/types/{UriResolverLike.ts => GenericUriResolverLike.ts} (60%) diff --git a/packages/js/client/src/legacy/types/Env.ts b/packages/js/client/src/legacy/types/GenericEnv.ts similarity index 100% rename from packages/js/client/src/legacy/types/Env.ts rename to packages/js/client/src/legacy/types/GenericEnv.ts diff --git a/packages/js/client/src/legacy/types/IUriPackage.ts b/packages/js/client/src/legacy/types/GenericIUriPackage.ts similarity index 100% rename from packages/js/client/src/legacy/types/IUriPackage.ts rename to packages/js/client/src/legacy/types/GenericIUriPackage.ts diff --git a/packages/js/client/src/legacy/types/IUriRedirect.ts b/packages/js/client/src/legacy/types/GenericIUriRedirect.ts similarity index 100% rename from packages/js/client/src/legacy/types/IUriRedirect.ts rename to packages/js/client/src/legacy/types/GenericIUriRedirect.ts diff --git a/packages/js/client/src/legacy/types/IUriWrapper.ts b/packages/js/client/src/legacy/types/GenericIUriWrapper.ts similarity index 100% rename from packages/js/client/src/legacy/types/IUriWrapper.ts rename to packages/js/client/src/legacy/types/GenericIUriWrapper.ts diff --git a/packages/js/client/src/legacy/types/InterfaceImplementations.ts b/packages/js/client/src/legacy/types/GenericInterfaceImplementations.ts similarity index 100% rename from packages/js/client/src/legacy/types/InterfaceImplementations.ts rename to packages/js/client/src/legacy/types/GenericInterfaceImplementations.ts diff --git a/packages/js/client/src/legacy/types/UriResolverLike.ts b/packages/js/client/src/legacy/types/GenericUriResolverLike.ts similarity index 60% rename from packages/js/client/src/legacy/types/UriResolverLike.ts rename to packages/js/client/src/legacy/types/GenericUriResolverLike.ts index 56bd34d58d..eaf4f1d64d 100644 --- a/packages/js/client/src/legacy/types/UriResolverLike.ts +++ b/packages/js/client/src/legacy/types/GenericUriResolverLike.ts @@ -1,6 +1,6 @@ -import { IGenericUriPackage } from "./IUriPackage"; -import { IGenericUriRedirect } from "./IUriRedirect"; -import { IGenericUriWrapper } from "./IUriWrapper"; +import { IGenericUriPackage } from "./GenericIUriPackage"; +import { IGenericUriRedirect } from "./GenericIUriRedirect"; +import { IGenericUriWrapper } from "./GenericIUriWrapper"; import { IUriResolver, Uri } from "@polywrap/core-js"; diff --git a/packages/js/client/src/legacy/types/index.ts b/packages/js/client/src/legacy/types/index.ts index 74493cde6a..4b551dc3bb 100644 --- a/packages/js/client/src/legacy/types/index.ts +++ b/packages/js/client/src/legacy/types/index.ts @@ -1,6 +1,6 @@ -export * from "./InterfaceImplementations"; -export * from "./Env"; -export * from "./IUriWrapper"; -export * from "./IUriRedirect"; -export * from "./IUriPackage"; -export * from "./UriResolverLike"; +export * from "./GenericInterfaceImplementations"; +export * from "./GenericEnv"; +export * from "./GenericIUriWrapper"; +export * from "./GenericIUriRedirect"; +export * from "./GenericIUriPackage"; +export * from "./GenericUriResolverLike"; From ebf64136031c8adc4ba3395132c01370c3589a0c Mon Sep 17 00:00:00 2001 From: Pileks Date: Mon, 30 Jan 2023 14:41:27 +0100 Subject: [PATCH 10/13] chore: lint --- packages/js/client/src/PolywrapClient.ts | 4 ++-- .../src/legacy/buildPolywrapCoreClientConfig.ts | 7 +++++-- packages/js/client/src/legacy/index.ts | 12 ++++++------ .../legacy/types/GenericInterfaceImplementations.ts | 4 +++- 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/packages/js/client/src/PolywrapClient.ts b/packages/js/client/src/PolywrapClient.ts index 40d9795ac8..1511d0160c 100644 --- a/packages/js/client/src/PolywrapClient.ts +++ b/packages/js/client/src/PolywrapClient.ts @@ -1,6 +1,4 @@ import { InvokerOptions, TryResolveUriOptions } from "./types"; - -import { PolywrapCoreClient } from "@polywrap/core-client-js"; import { PolywrapClientConfig, PolywrapCoreClientConfig, @@ -8,6 +6,8 @@ import { sanitizeUri, ClientConfig, } from "./legacy"; + +import { PolywrapCoreClient } from "@polywrap/core-client-js"; import { CoreClientConfig, Env, diff --git a/packages/js/client/src/legacy/buildPolywrapCoreClientConfig.ts b/packages/js/client/src/legacy/buildPolywrapCoreClientConfig.ts index 930aa4908f..8996187087 100644 --- a/packages/js/client/src/legacy/buildPolywrapCoreClientConfig.ts +++ b/packages/js/client/src/legacy/buildPolywrapCoreClientConfig.ts @@ -2,7 +2,7 @@ import { PolywrapClientConfig, PolywrapCoreClientConfig, ClientConfig, - sanitizeUri + sanitizeUri, } from "."; import { GenericUriResolverLike } from "./types"; @@ -13,7 +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"; +import { + BuilderConfig, + ClientConfigBuilder, +} from "@polywrap/client-config-builder-js"; export function sanitizeConfig( config: Partial> | Partial diff --git a/packages/js/client/src/legacy/index.ts b/packages/js/client/src/legacy/index.ts index 5216ec9dab..800a33e7e8 100644 --- a/packages/js/client/src/legacy/index.ts +++ b/packages/js/client/src/legacy/index.ts @@ -1,6 +1,6 @@ -export * from './types'; -export * from './ClientConfig'; -export * from './PolywrapClientConfig'; -export * from './PolywrapCoreClientConfig'; -export * from './buildPolywrapCoreClientConfig'; -export * from './sanitizeUri'; +export * from "./types"; +export * from "./ClientConfig"; +export * from "./PolywrapClientConfig"; +export * from "./PolywrapCoreClientConfig"; +export * from "./buildPolywrapCoreClientConfig"; +export * from "./sanitizeUri"; diff --git a/packages/js/client/src/legacy/types/GenericInterfaceImplementations.ts b/packages/js/client/src/legacy/types/GenericInterfaceImplementations.ts index 6a0295ea68..339ca1a3bd 100644 --- a/packages/js/client/src/legacy/types/GenericInterfaceImplementations.ts +++ b/packages/js/client/src/legacy/types/GenericInterfaceImplementations.ts @@ -1,6 +1,8 @@ import { Uri } from "@polywrap/core-js"; -export interface GenericInterfaceImplementations { +export interface GenericInterfaceImplementations< + TUri extends Uri | string = string +> { interface: TUri; implementations: TUri[]; } From 6e1f2cc66726983c9f64bd7005127a3c0ff6fd71 Mon Sep 17 00:00:00 2001 From: Pileks Date: Mon, 30 Jan 2023 16:11:55 +0100 Subject: [PATCH 11/13] chore: fix tests --- packages/js/plugins/ethereum/src/__tests__/e2e.spec.ts | 3 +-- .../plugins/ethereum/src/__tests__/helpers/getDefaultConfig.ts | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) 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 From a3c356f04463674b0bde1776753f84e0691358ad Mon Sep 17 00:00:00 2001 From: Pileks Date: Mon, 30 Jan 2023 17:08:50 +0100 Subject: [PATCH 12/13] refactor ClientConfigBuilder & fix up related tests --- .../src/BaseClientConfigBuilder.ts | 64 ----- .../src/ClientConfigBuilder.ts | 74 ++++- .../__tests__/client-config-builder.spec.ts | 262 ++++++++++-------- 3 files changed, 227 insertions(+), 173 deletions(-) diff --git a/packages/js/client-config-builder/src/BaseClientConfigBuilder.ts b/packages/js/client-config-builder/src/BaseClientConfigBuilder.ts index f2f1b0c5f8..f75ba527da 100644 --- a/packages/js/client-config-builder/src/BaseClientConfigBuilder.ts +++ b/packages/js/client-config-builder/src/BaseClientConfigBuilder.ts @@ -5,12 +5,6 @@ import { CoreClientConfig, Wrapper, IWrapPackage, - Env, - Uri, - InterfaceImplementations, - IUriRedirect, - IUriWrapper, - IUriPackage, IUriResolver, } from "@polywrap/core-js"; import { IWrapperCache, UriResolverLike } from "@polywrap/uri-resolvers-js"; @@ -208,62 +202,4 @@ export abstract class BaseClientConfigBuilder implements IClientConfigBuilder { return this; } - - protected buildEnvs(): Env[] { - const envs: Env[] = []; - - for (const [uri, env] of Object.entries(this._config.envs)) { - envs.push({ uri: Uri.from(uri), env }); - } - - return envs; - } - - protected 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; - } - - protected 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; - } - - protected buildWrappers(): IUriWrapper[] { - const wrappers: IUriWrapper[] = []; - - for (const [uri, wrapper] of Object.entries(this._config.wrappers)) { - wrappers.push({ uri: Uri.from(uri), wrapper }); - } - - return wrappers; - } - - protected 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/ClientConfigBuilder.ts b/packages/js/client-config-builder/src/ClientConfigBuilder.ts index 2944b61fd2..8371aedfc4 100644 --- a/packages/js/client-config-builder/src/ClientConfigBuilder.ts +++ b/packages/js/client-config-builder/src/ClientConfigBuilder.ts @@ -2,7 +2,16 @@ import { getDefaultConfig } from "./bundles"; import { BaseClientConfigBuilder } from "./BaseClientConfigBuilder"; import { IClientConfigBuilder } from "./types/IClientConfigBuilder"; -import { CoreClientConfig, IUriResolver } from "@polywrap/core-js"; +import { + CoreClientConfig, + Env, + InterfaceImplementations, + IUriPackage, + IUriRedirect, + IUriResolver, + IUriWrapper, + Uri, +} from "@polywrap/core-js"; import { IWrapperCache, PackageToWrapperCacheResolver, @@ -11,6 +20,7 @@ import { WrapperCache, } from "@polywrap/uri-resolvers-js"; import { ExtendableUriResolver } from "@polywrap/uri-resolver-extensions-js"; +import { BuilderConfig } from "./types"; export class ClientConfigBuilder extends BaseClientConfigBuilder { // $start: ClientConfigBuilder-constructor @@ -50,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__/client-config-builder.spec.ts b/packages/js/client-config-builder/src/__tests__/client-config-builder.spec.ts index 22f78b7573..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 @@ -7,6 +7,7 @@ import { } from "@polywrap/core-js"; import { Result } from "@polywrap/result"; import { UriResolutionResult } from "@polywrap/uri-resolvers-js"; +import { getDefaultConfig } from "../bundles"; class MockUriResolver implements IUriResolver { private from: string; @@ -32,6 +33,8 @@ class MockUriResolver implements IUriResolver { } describe("Client config builder", () => { + const emptyBuilderConfig = new ClientConfigBuilder().config; + const testEnv1: Record> = { "wrap://ens/test.plugin.one": { test: "value" }, }; @@ -75,7 +78,10 @@ describe("Client config builder", () => { ...testUriRedirect2, }; - const testUriResolver: IUriResolver = new MockUriResolver("wrap://ens/testFrom.eth", "wrap://ens/testTo.eth"); + 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(); @@ -85,15 +91,20 @@ describe("Client config builder", () => { }); 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( Object.entries(testEnvs).map(([uri, env]) => ({ @@ -108,11 +119,14 @@ describe("Client config builder", () => { })) ); - // TODO: How to test resolver? + 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, @@ -123,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( @@ -140,19 +156,27 @@ describe("Client config builder", () => { })) ); - // TODO: How to test resolver? + 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); - - // TODO: How to test resolver? + expect(clientConfig).toBeTruthy(); + + const expectedBuilderConfig = getDefaultConfig(); + expect(builderConfig).toEqual(expectedBuilderConfig); }); it("should successfully add an env", () => { @@ -523,109 +547,131 @@ describe("Client config builder", () => { }); it("should add an uri redirect", () => { - // const from = "wrap://ens/from.this.ens"; - // const to = "wrap://ens/to.that.ens"; - - // const config = new ClientConfigBuilder().addRedirect(from, to).build(); - // TODO: How to test resolver? - // expect(config.redirects).toHaveLength(1); - // expect(config.redirects).toContainEqual({ - // from: Uri.from(from), - // to: Uri.from(to), - // }); + const from = "wrap://ens/from.this.ens"; + const to = "wrap://ens/to.that.ens"; + + const builder = new ClientConfigBuilder().addRedirect( + from, + to + ) as ClientConfigBuilder; + + const config = builder.build(); + const builderConfig = builder.config; + + 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() - // .addRedirect(from1, to1) - // .addRedirect(from2, to2) - // .build(); - - // TODO: How to test resolver? - // 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 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 builder = new ClientConfigBuilder() + .addRedirect(from1, to1) + .addRedirect(from2, to2) as ClientConfigBuilder; + + const config = builder.build(); + const builderConfig = builder.config; + + expect(config).toBeTruthy(); + expect(builderConfig).toStrictEqual({ + ...emptyBuilderConfig, + redirects: { + [from1]: to1, + [from2]: to2, + }, + }); }); it("should overwrite an existing uri redirect if from matches on add", () => { - // const from1 = "wrap://ens/from1.this.ens"; - // const from2 = "wrap://ens/from2.this.ens"; - // const to1 = "wrap://ens/to.that1.ens"; - // const to2 = "wrap://ens/to.that2.ens"; - - // const config = new ClientConfigBuilder() - // .addRedirect(from1, to1) - // .addRedirect(from2, to1) - // .addRedirect(from1, to2) - // .build(); - - // TODO: How to test resolver? - // 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 from1 = "wrap://ens/from1.this.ens"; + const from2 = "wrap://ens/from2.this.ens"; + const to1 = "wrap://ens/to.that1.ens"; + const to2 = "wrap://ens/to.that2.ens"; + + const builder = new ClientConfigBuilder() + .addRedirect(from1, to1) + .addRedirect(from2, to1) + .addRedirect(from1, to2) as ClientConfigBuilder; + + 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() - // .addRedirect(from1, to1) - // .addRedirect(from2, to2) - // .removeRedirect(from1) - // .build(); - - // TODO: How to test resolver? - // expect(config.redirects).toHaveLength(1); - // expect(config.redirects).toContainEqual({ - // from: Uri.from(from2), - // to: Uri.from(to2), - // }); + 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 builder = new ClientConfigBuilder() + .addRedirect(from1, to1) + .addRedirect(from2, to2) + .removeRedirect(from1) as ClientConfigBuilder; + + const config = builder.build(); + const builderConfig = builder.config; + + expect(config).toBeTruthy(); + expect(builderConfig).toStrictEqual({ + ...emptyBuilderConfig, + redirects: { + [from2]: to2, + }, + }); }); it("should set uri resolver", () => { - // TODO: How to test resolver? - // const uriResolver = new MockUriResolver("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", () => { - // TODO: How to test resolver? - // const uriResolver1 = new MockUriResolver("first"); - // const uriResolver2 = new MockUriResolver("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 builder = new ClientConfigBuilder() + .addResolver(uriResolver1) + .addResolver(uriResolver2) as ClientConfigBuilder; + + const config = builder.build(); + const builderConfig = builder.config; - // const config = new ClientConfigBuilder() - // .addResolver(uriResolver1) - // .addResolver(uriResolver2) - // .build(); + expect(config).toBeTruthy(); - // expect((config.resolvers as Array)[0].name).toBe("first"); - // expect((config.resolvers as Array)[1].name).toBe("second"); + expect(builderConfig.resolvers).toStrictEqual([uriResolver1, uriResolver2]); }); }); From 09ccb139f040cc805dd6e1b03bd45e1b28b3838f Mon Sep 17 00:00:00 2001 From: Pileks Date: Mon, 30 Jan 2023 17:11:43 +0100 Subject: [PATCH 13/13] chore: lint --- packages/js/client-config-builder/src/ClientConfigBuilder.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/js/client-config-builder/src/ClientConfigBuilder.ts b/packages/js/client-config-builder/src/ClientConfigBuilder.ts index 8371aedfc4..55e72e7d62 100644 --- a/packages/js/client-config-builder/src/ClientConfigBuilder.ts +++ b/packages/js/client-config-builder/src/ClientConfigBuilder.ts @@ -1,6 +1,7 @@ import { getDefaultConfig } from "./bundles"; import { BaseClientConfigBuilder } from "./BaseClientConfigBuilder"; import { IClientConfigBuilder } from "./types/IClientConfigBuilder"; +import { BuilderConfig } from "./types"; import { CoreClientConfig, @@ -20,7 +21,6 @@ import { WrapperCache, } from "@polywrap/uri-resolvers-js"; import { ExtendableUriResolver } from "@polywrap/uri-resolver-extensions-js"; -import { BuilderConfig } from "./types"; export class ClientConfigBuilder extends BaseClientConfigBuilder { // $start: ClientConfigBuilder-constructor