diff --git a/packages/client/src/PolywrapClient.ts b/packages/client/src/PolywrapClient.ts index 164cc3176..8b85d9a61 100644 --- a/packages/client/src/PolywrapClient.ts +++ b/packages/client/src/PolywrapClient.ts @@ -75,41 +75,36 @@ export class PolywrapClient extends PolywrapCoreClient { } @Tracer.traceMethod("PolywrapClient: getEnvByUri") - public getEnvByUri( - uri: TUri - ): WrapperEnv | undefined { + public getEnvByUri(uri: Uri | string): WrapperEnv | undefined { return super.getEnvByUri(Uri.from(uri)); } @Tracer.traceMethod("PolywrapClient: getManifest") - public async getManifest( - uri: TUri + public async getManifest( + uri: Uri | string ): Promise> { return super.getManifest(Uri.from(uri)); } @Tracer.traceMethod("PolywrapClient: getFile") - public async getFile( - uri: TUri, + public async getFile( + uri: Uri | string, options: GetFileOptions ): Promise> { return super.getFile(Uri.from(uri), options); } @Tracer.traceMethod("PolywrapClient: getImplementations") - public async getImplementations( - uri: TUri, + public async getImplementations( + uri: Uri | string, options?: GetImplementationsOptions ): Promise> { return super.getImplementations(Uri.from(uri), options); } @Tracer.traceMethod("PolywrapClient: invokeWrapper") - public async invokeWrapper< - TData = unknown, - TUri extends Uri | string = string - >( - options: InvokerOptions & { wrapper: Wrapper } + public async invokeWrapper( + options: InvokerOptions & { wrapper: Wrapper } ): Promise> { return super.invokeWrapper({ ...options, @@ -118,8 +113,8 @@ export class PolywrapClient extends PolywrapCoreClient { } @Tracer.traceMethod("PolywrapClient: invoke") - public async invoke( - options: InvokerOptions + public async invoke( + options: InvokerOptions ): Promise> { return super.invoke({ ...options, @@ -128,8 +123,8 @@ export class PolywrapClient extends PolywrapCoreClient { } @Tracer.traceMethod("PolywrapClient: tryResolveUri") - public async tryResolveUri( - options: TryResolveUriOptions + public async tryResolveUri( + options: TryResolveUriOptions ): Promise> { return super.tryResolveUri({ ...options, @@ -156,8 +151,8 @@ export class PolywrapClient extends PolywrapCoreClient { * @returns A Promise with a Result containing a boolean or Error */ @Tracer.traceMethod("PolywrapClient: validateConfig") - public async validate /* $ */( - uri: TUri, + public async validate /* $ */( + uri: Uri | string, options: ValidateOptions ): Promise> { const wrapper = await this.loadWrapper(Uri.from(uri)); @@ -170,7 +165,7 @@ export class PolywrapClient extends PolywrapCoreClient { abi.importedModuleTypes || []; const importUri = (importedModuleType: ImportedModuleDefinition) => { - return this.tryResolveUri({ uri: importedModuleType.uri }); + return this.tryResolveUri({ uri: Uri.from(importedModuleType.uri) }); }; const resolvedModules = await Promise.all(importedModules.map(importUri)); const modulesNotFound = resolvedModules.filter(({ ok }) => !ok) as { diff --git a/packages/client/src/__tests__/core/embedded-package.spec.ts b/packages/client/src/__tests__/core/embedded-package.spec.ts index 9ad871104..98368cec1 100644 --- a/packages/client/src/__tests__/core/embedded-package.spec.ts +++ b/packages/client/src/__tests__/core/embedded-package.spec.ts @@ -2,7 +2,7 @@ import fs from "fs"; import path from "path"; import { GetPathToTestWrappers } from "@polywrap/test-cases"; import { InMemoryFileReader, WasmPackage } from "@polywrap/wasm-js"; -import { IWrapPackage } from "@polywrap/core-js"; +import {IWrapPackage, Uri} from "@polywrap/core-js"; import { Result, ResultErr, ResultOk } from "@polywrap/result"; import { PolywrapClient } from "../../PolywrapClient"; import { PolywrapClientConfigBuilder } from "@polywrap/client-config-builder-js"; @@ -10,7 +10,7 @@ import { PolywrapClientConfigBuilder } from "@polywrap/client-config-builder-js" jest.setTimeout(200000); const wrapperPath = `${GetPathToTestWrappers()}/subinvoke/00-subinvoke/implementations/as`; -const wrapperUri = `fs/${wrapperPath}`; +const wrapperUri = Uri.from(`fs/${wrapperPath}`); describe("Embedded package", () => { it("can invoke an embedded package", async () => { diff --git a/packages/client/src/__tests__/core/embedded-wrapper.spec.ts b/packages/client/src/__tests__/core/embedded-wrapper.spec.ts index aabceb36e..8c4eb8926 100644 --- a/packages/client/src/__tests__/core/embedded-wrapper.spec.ts +++ b/packages/client/src/__tests__/core/embedded-wrapper.spec.ts @@ -2,7 +2,7 @@ import fs from "fs"; import path from "path"; import { GetPathToTestWrappers } from "@polywrap/test-cases"; import { WasmWrapper, InMemoryFileReader } from "@polywrap/wasm-js"; -import { Wrapper } from "@polywrap/core-js"; +import {Uri, Wrapper} from "@polywrap/core-js"; import { Result, ResultErr, ResultOk } from "@polywrap/result"; import { PolywrapClient } from "../../PolywrapClient"; import { PolywrapClientConfigBuilder } from "@polywrap/client-config-builder-js"; @@ -10,7 +10,7 @@ import { PolywrapClientConfigBuilder } from "@polywrap/client-config-builder-js" jest.setTimeout(200000); const wrapperPath = `${GetPathToTestWrappers()}/subinvoke/00-subinvoke/implementations/as`; -const simpleWrapperUri = `fs/${wrapperPath}`; +const simpleWrapperUri = Uri.from(`fs/${wrapperPath}`); describe("Embedded wrapper", () => { it("can invoke an embedded wrapper", async () => { diff --git a/packages/client/src/__tests__/core/error-structure.spec.ts b/packages/client/src/__tests__/core/error-structure.spec.ts index 1943c1f4b..910ef2215 100644 --- a/packages/client/src/__tests__/core/error-structure.spec.ts +++ b/packages/client/src/__tests__/core/error-structure.spec.ts @@ -61,7 +61,7 @@ describe("Error structure", () => { test("Subinvoke a wrapper that is not found", async () => { const client = new PolywrapClient(); const result = await client.invoke({ - uri: asConsumerWrapperUri.uri, + uri: asConsumerWrapperUri, method: "throwError", args: { a: "Hey", @@ -99,7 +99,7 @@ describe("Error structure", () => { test("Invoke a wrapper with malformed arguments", async () => { const client = new PolywrapClient(); const result = await client.invoke({ - uri: asSubinvokeWrapperUri.uri, + uri: asSubinvokeWrapperUri, method: "add", args: { a: "1", @@ -130,7 +130,7 @@ describe("Error structure", () => { test("Invoke a wrapper method that doesn't exist", async () => { const client = new PolywrapClient(); const result = await client.invoke({ - uri: asSubinvokeWrapperUri.uri, + uri: asSubinvokeWrapperUri, method: "notExistingMethod", args: { arg: "test", @@ -165,13 +165,13 @@ describe("Error structure", () => { const config = new PolywrapClientConfigBuilder() .addDefaults() .setRedirects({ - "authority/imported-invoke": asInvokeWrapperUri.uri, - "authority/imported-subinvoke": asSubinvokeWrapperUri.uri, + "authority/imported-invoke": asInvokeWrapperUri, + "authority/imported-subinvoke": asSubinvokeWrapperUri, }) .build(); const client = new PolywrapClient(config); const result = await client.invoke({ - uri: asConsumerWrapperUri.uri, + uri: asConsumerWrapperUri, method: "throwError", args: { a: "Hey", @@ -275,7 +275,7 @@ describe("Error structure", () => { test("Invoke a wrapper with malformed arguments", async () => { const client = new PolywrapClient(); const result = await client.invoke({ - uri: rsSubinvokeWrapperUri.uri, + uri: rsSubinvokeWrapperUri, method: "add", args: { a: "1", @@ -306,7 +306,7 @@ describe("Error structure", () => { test("Invoke a wrapper method that doesn't exist", async () => { const client = new PolywrapClient(); const result = await client.invoke({ - uri: rsSubinvokeWrapperUri.uri, + uri: rsSubinvokeWrapperUri, method: "notExistingMethod", args: { arg: "test", @@ -341,14 +341,14 @@ describe("Error structure", () => { const config = new PolywrapClientConfigBuilder() .addDefaults() .setRedirects({ - "authority/imported-invoke": rsInvokeWrapperUri.uri, - "authority/imported-subinvoke": rsSubinvokeWrapperUri.uri, + "authority/imported-invoke": rsInvokeWrapperUri, + "authority/imported-subinvoke": rsSubinvokeWrapperUri, }) .build(); const client = new PolywrapClient(config); const result = await client.invoke({ - uri: rsConsumerWrapperUri.uri, + uri: rsConsumerWrapperUri, method: "throwError", args: { a: "Hey", diff --git a/packages/client/src/__tests__/core/type-test-cases.ts b/packages/client/src/__tests__/core/type-test-cases.ts index 066829b0b..d6f7ff6d7 100644 --- a/packages/client/src/__tests__/core/type-test-cases.ts +++ b/packages/client/src/__tests__/core/type-test-cases.ts @@ -5,6 +5,7 @@ import BigNumber from "bignumber.js"; import { PolywrapClientConfigBuilder } from "@polywrap/client-config-builder-js"; import { GetPathToTestWrappers } from "@polywrap/test-cases"; import { ResultOk } from "@polywrap/result"; +import {Uri} from "@polywrap/core-js"; export const typeTestCases = (implementation: string) => { describe("types test cases", () => { @@ -18,7 +19,7 @@ export const typeTestCases = (implementation: string) => { .build(); const client = new PolywrapClient(config); - const uri = `fs/${GetPathToTestWrappers()}/asyncify/implementations/${implementation}`; + const uri = Uri.from(`fs/${GetPathToTestWrappers()}/asyncify/implementations/${implementation}`); const subsequentInvokesResult = await client.invoke({ uri: uri, method: "subsequentInvokes", @@ -343,7 +344,7 @@ export const typeTestCases = (implementation: string) => { }); test(`json-type ${implementation}`, async () => { - const uri = `fs/${GetPathToTestWrappers()}/json-type/implementations/${implementation}`; + const uri = Uri.from(`fs/${GetPathToTestWrappers()}/json-type/implementations/${implementation}`); const client = new PolywrapClient(); type Json = string; const value = JSON.stringify({ foo: "bar", bar: "bar" }); @@ -675,7 +676,7 @@ export const typeTestCases = (implementation: string) => { }); test(`map-type ${implementation}`, async () => { - const uri = `fs/${GetPathToTestWrappers()}/map-type/implementations/${implementation}`; + const uri = Uri.from(`fs/${GetPathToTestWrappers()}/map-type/implementations/${implementation}`); const client = new PolywrapClient(); const mapClass = new Map() .set("Hello", 1) diff --git a/packages/client/src/__tests__/core/wasm-wrapper.spec.ts b/packages/client/src/__tests__/core/wasm-wrapper.spec.ts index 1cffcadea..d6ca0372c 100644 --- a/packages/client/src/__tests__/core/wasm-wrapper.spec.ts +++ b/packages/client/src/__tests__/core/wasm-wrapper.spec.ts @@ -28,7 +28,7 @@ describe("wasm-wrapper", () => { test("can invoke with string URI", async () => { const client = new PolywrapClient(); const result = await client.invoke({ - uri: wrapperUri.uri, + uri: wrapperUri, method: "add", args: { a: 1, @@ -40,7 +40,7 @@ describe("wasm-wrapper", () => { test("can invoke with typed URI", async () => { const client = new PolywrapClient(); - const result = await client.invoke({ + const result = await client.invoke({ uri: wrapperUri, method: "add", args: { @@ -55,7 +55,7 @@ describe("wasm-wrapper", () => { test("invoke with decode defaulted to true works as expected", async () => { const client = new PolywrapClient(); const result = await client.invoke({ - uri: wrapperUri.uri, + uri: wrapperUri, method: "add", args: { a: 1, diff --git a/packages/client/src/types/InvokerOptions.ts b/packages/client/src/types/InvokerOptions.ts index ca34900bc..b0a8bb649 100644 --- a/packages/client/src/types/InvokerOptions.ts +++ b/packages/client/src/types/InvokerOptions.ts @@ -1,8 +1,8 @@ import { IUriResolutionContext, Uri } from "@polywrap/core-js"; -export interface InvokerOptions { +export interface InvokerOptions { /** The Wrapper's URI */ - uri: TUri; + uri: Uri | string; /** Method to be executed. */ method: string; diff --git a/packages/client/src/types/TryResolveUriOptions.ts b/packages/client/src/types/TryResolveUriOptions.ts index 9f3aeac0f..d40a878db 100644 --- a/packages/client/src/types/TryResolveUriOptions.ts +++ b/packages/client/src/types/TryResolveUriOptions.ts @@ -1,6 +1,6 @@ import { IUriResolutionContext, Uri } from "@polywrap/core-js"; -export interface TryResolveUriOptions { +export interface TryResolveUriOptions { /** The Wrapper's URI */ uri: TUri; resolutionContext?: IUriResolutionContext; diff --git a/packages/config-builder/src/BaseClientConfigBuilder.ts b/packages/config-builder/src/BaseClientConfigBuilder.ts index dab04ec15..af05daa48 100644 --- a/packages/config-builder/src/BaseClientConfigBuilder.ts +++ b/packages/config-builder/src/BaseClientConfigBuilder.ts @@ -59,7 +59,7 @@ export abstract class BaseClientConfigBuilder implements ClientConfigBuilder { return this; } - setWrapper(uri: string, wrapper: Wrapper): ClientConfigBuilder { + setWrapper(uri: string | Uri, wrapper: Wrapper): ClientConfigBuilder { this._config.wrappers[this.sanitizeUri(uri)] = wrapper; return this; @@ -73,13 +73,16 @@ export abstract class BaseClientConfigBuilder implements ClientConfigBuilder { return this; } - removeWrapper(uri: string): ClientConfigBuilder { + removeWrapper(uri: string | Uri): ClientConfigBuilder { delete this._config.wrappers[this.sanitizeUri(uri)]; return this; } - setPackage(uri: string, wrapPackage: IWrapPackage): ClientConfigBuilder { + setPackage( + uri: string | Uri, + wrapPackage: IWrapPackage + ): ClientConfigBuilder { this._config.packages[this.sanitizeUri(uri)] = wrapPackage; return this; @@ -93,13 +96,13 @@ export abstract class BaseClientConfigBuilder implements ClientConfigBuilder { return this; } - removePackage(uri: string): ClientConfigBuilder { + removePackage(uri: string | Uri): ClientConfigBuilder { delete this._config.packages[this.sanitizeUri(uri)]; return this; } - addEnv(uri: string, env: Record): ClientConfigBuilder { + addEnv(uri: string | Uri, env: Record): ClientConfigBuilder { const sanitizedUri = this.sanitizeUri(uri); this._config.envs[sanitizedUri] = { ...this._config.envs[sanitizedUri], @@ -117,13 +120,13 @@ export abstract class BaseClientConfigBuilder implements ClientConfigBuilder { return this; } - removeEnv(uri: string): ClientConfigBuilder { + removeEnv(uri: string | Uri): ClientConfigBuilder { delete this._config.envs[this.sanitizeUri(uri)]; return this; } - setEnv(uri: string, env: Record): ClientConfigBuilder { + setEnv(uri: string | Uri, env: Record): ClientConfigBuilder { this._config.envs[this.sanitizeUri(uri)] = env; return this; @@ -149,8 +152,8 @@ export abstract class BaseClientConfigBuilder implements ClientConfigBuilder { } addInterfaceImplementations( - interfaceUri: string, - implementationUris: Array | Set + interfaceUri: string | Uri, + implementationUris: Array | Set ): ClientConfigBuilder { const existingInterface = this._config.interfaces[ this.sanitizeUri(interfaceUri) @@ -173,8 +176,8 @@ export abstract class BaseClientConfigBuilder implements ClientConfigBuilder { } removeInterfaceImplementation( - interfaceUri: string, - implementationUri: string + interfaceUri: string | Uri, + implementationUri: string | Uri ): ClientConfigBuilder { const existingInterface = this._config.interfaces[ this.sanitizeUri(interfaceUri) @@ -189,19 +192,19 @@ export abstract class BaseClientConfigBuilder implements ClientConfigBuilder { } if (existingInterface.size == 0) { - delete this._config.interfaces[interfaceUri]; + delete this._config.interfaces[interfaceUri.toString()]; } return this; } - setRedirect(from: string, to: string): ClientConfigBuilder { + setRedirect(from: string | Uri, to: string | Uri): ClientConfigBuilder { this._config.redirects[this.sanitizeUri(from)] = this.sanitizeUri(to); return this; } - setRedirects(redirects: Record): ClientConfigBuilder { + setRedirects(redirects: Record): ClientConfigBuilder { for (const uri in redirects) { this.setRedirect(this.sanitizeUri(uri), this.sanitizeUri(redirects[uri])); } @@ -209,7 +212,7 @@ export abstract class BaseClientConfigBuilder implements ClientConfigBuilder { return this; } - removeRedirect(from: string): ClientConfigBuilder { + removeRedirect(from: string | Uri): ClientConfigBuilder { delete this._config.redirects[this.sanitizeUri(from)]; return this; @@ -229,7 +232,7 @@ export abstract class BaseClientConfigBuilder implements ClientConfigBuilder { return this; } - private sanitizeUri(uri: string): string { + private sanitizeUri(uri: string | Uri): string { return Uri.from(uri).uri; } } diff --git a/packages/config-builder/src/types/ClientConfigBuilder.ts b/packages/config-builder/src/types/ClientConfigBuilder.ts index 5f6c6cb82..17228ac94 100644 --- a/packages/config-builder/src/types/ClientConfigBuilder.ts +++ b/packages/config-builder/src/types/ClientConfigBuilder.ts @@ -2,7 +2,12 @@ import { BuilderConfig } from "./configs"; import { BuildOptions } from "./BuildOptions"; import { BundleName } from "../bundles"; -import { CoreClientConfig, Wrapper, IWrapPackage } from "@polywrap/core-js"; +import { + CoreClientConfig, + Wrapper, + IWrapPackage, + Uri, +} from "@polywrap/core-js"; import { UriResolverLike } from "@polywrap/uri-resolvers-js"; export interface ClientConfigBuilder { @@ -55,7 +60,7 @@ export interface ClientConfigBuilder { * @param wrapper: wrapper to be added * @returns ClientConfigBuilder (mutated self) */ - setWrapper(uri: string, wrapper: Wrapper): ClientConfigBuilder; + setWrapper(uri: string | Uri, wrapper: Wrapper): ClientConfigBuilder; // $end // $start: ClientConfigBuilder-setWrappers @@ -76,7 +81,7 @@ export interface ClientConfigBuilder { * @param uri: the wrapper's URI * @returns ClientConfigBuilder (mutated self) */ - removeWrapper(uri: string): ClientConfigBuilder; + removeWrapper(uri: string | Uri): ClientConfigBuilder; // $end // $start: ClientConfigBuilder-setPackage @@ -87,7 +92,7 @@ export interface ClientConfigBuilder { * @param wrapPackage: package to be added * @returns ClientConfigBuilder (mutated self) */ - setPackage(uri: string, wrapPackage: IWrapPackage): ClientConfigBuilder; + setPackage(uri: string | Uri, wrapPackage: IWrapPackage): ClientConfigBuilder; // $end // $start: ClientConfigBuilder-setPackages @@ -108,7 +113,7 @@ export interface ClientConfigBuilder { * @param uri: the package's URI * @returns ClientConfigBuilder (mutated self) */ - removePackage(uri: string): ClientConfigBuilder; + removePackage(uri: string | Uri): ClientConfigBuilder; // $end // $start: ClientConfigBuilder-addEnv @@ -120,7 +125,7 @@ export interface ClientConfigBuilder { * @param env: an object with the env variables for the uri * @returns ClientConfigBuilder (mutated self) */ - addEnv(uri: string, env: Record): ClientConfigBuilder; + addEnv(uri: string | Uri, env: Record): ClientConfigBuilder; // $end // $start: ClientConfigBuilder-addEnvs @@ -143,7 +148,7 @@ export interface ClientConfigBuilder { * @param uri: the URI associated with the Env * @returns ClientConfigBuilder (mutated self) */ - removeEnv(uri: string): ClientConfigBuilder; + removeEnv(uri: string | Uri): ClientConfigBuilder; // $end // $start: ClientConfigBuilder-setEnv @@ -155,7 +160,7 @@ export interface ClientConfigBuilder { * @param env: an object with the environment variables for the uri * @returns ClientConfigBuilder (mutated self) */ - setEnv(uri: string, env: Record): ClientConfigBuilder; + setEnv(uri: string | Uri, env: Record): ClientConfigBuilder; // $end // $start: ClientConfigBuilder-addInterfaceImplementation @@ -167,8 +172,8 @@ export interface ClientConfigBuilder { * @returns ClientConfigBuilder (mutated self) */ addInterfaceImplementation( - interfaceUri: string, - implementationUri: string + interfaceUri: string | Uri, + implementationUri: string | Uri ): ClientConfigBuilder; // $end @@ -181,8 +186,8 @@ export interface ClientConfigBuilder { * @returns ClientConfigBuilder (mutated self) */ addInterfaceImplementations( - interfaceUri: string, - implementationUris: Array + interfaceUri: string | Uri, + implementationUris: Array ): ClientConfigBuilder; // $end @@ -195,8 +200,8 @@ export interface ClientConfigBuilder { * @returns ClientConfigBuilder (mutated self) */ removeInterfaceImplementation( - interfaceUri: string, - implementationUri: string + interfaceUri: string | Uri, + implementationUri: string | Uri ): ClientConfigBuilder; // $end @@ -208,7 +213,7 @@ export interface ClientConfigBuilder { * @param to: the URI to redirect to * @returns ClientConfigBuilder (mutated self) */ - setRedirect(from: string, to: string): ClientConfigBuilder; + setRedirect(from: string | Uri, to: string | Uri): ClientConfigBuilder; // $end // $start: ClientConfigBuilder-setRedirects @@ -218,7 +223,7 @@ export interface ClientConfigBuilder { * @param redirects: an object where key is from and value is to * @returns ClientConfigBuilder (mutated self) */ - setRedirects(redirects: Record): ClientConfigBuilder; + setRedirects(redirects: Record): ClientConfigBuilder; // $end // $start: ClientConfigBuilder-removeRedirect @@ -228,7 +233,7 @@ export interface ClientConfigBuilder { * @param from: the URI that is being redirected * @returns ClientConfigBuilder (mutated self) */ - removeRedirect(from: string): ClientConfigBuilder; + removeRedirect(from: string | Uri): ClientConfigBuilder; // $end // $start: ClientConfigBuilder-addResolver diff --git a/packages/core/src/types/UriResolver.ts b/packages/core/src/types/UriResolver.ts index 05a49a681..f9724d84c 100644 --- a/packages/core/src/types/UriResolver.ts +++ b/packages/core/src/types/UriResolver.ts @@ -8,7 +8,7 @@ import { Result } from "@polywrap/result"; /** Options required for URI resolution. */ export interface TryResolveUriOptions { /** The Wrapper's URI */ - uri: Uri; + uri: Uri | string; /** A URI resolution context */ resolutionContext?: IUriResolutionContext;