From c5b3747d67f22f6cf629f9b78ad44e1e45f09e3e Mon Sep 17 00:00:00 2001 From: krisbitney Date: Thu, 14 Sep 2023 13:12:40 +0300 Subject: [PATCH 1/4] Result error type now must be defined --- packages/result/src/Result.ts | 4 +--- packages/result/src/ResultErr.ts | 2 +- .../uri-resolvers/src/aggregator/UriResolverAggregatorBase.ts | 2 +- packages/uri-resolvers/src/cache/WrapperCacheResolver.ts | 2 +- packages/uri-resolvers/src/packages/PackageResolver.ts | 2 +- packages/uri-resolvers/src/redirects/RedirectResolver.ts | 2 +- packages/uri-resolvers/src/wrappers/WrapperResolver.ts | 2 +- packages/wasm/src/WasmWrapper.ts | 3 ++- 8 files changed, 9 insertions(+), 10 deletions(-) diff --git a/packages/result/src/Result.ts b/packages/result/src/Result.ts index 6ee308275..4b92a788c 100644 --- a/packages/result/src/Result.ts +++ b/packages/result/src/Result.ts @@ -1,3 +1 @@ -export type Result = - | { ok: true; value: T } - | { ok: false; error: E | undefined }; +export type Result = { ok: true; value: T } | { ok: false; error: E }; diff --git a/packages/result/src/ResultErr.ts b/packages/result/src/ResultErr.ts index 7f7d962fc..2d9d6d533 100644 --- a/packages/result/src/ResultErr.ts +++ b/packages/result/src/ResultErr.ts @@ -1,6 +1,6 @@ import { Result } from "./Result"; // eslint-disable-next-line @typescript-eslint/naming-convention -export const ResultErr = (error?: E): Result => { +export const ResultErr = (error: E): Result => { return { ok: false, error }; }; diff --git a/packages/uri-resolvers/src/aggregator/UriResolverAggregatorBase.ts b/packages/uri-resolvers/src/aggregator/UriResolverAggregatorBase.ts index c004b91c8..e32bc8179 100644 --- a/packages/uri-resolvers/src/aggregator/UriResolverAggregatorBase.ts +++ b/packages/uri-resolvers/src/aggregator/UriResolverAggregatorBase.ts @@ -129,7 +129,7 @@ export abstract class UriResolverAggregatorBase< } } - const result = UriResolutionResult.ok(uri); + const result = UriResolutionResult.ok(uri); resolutionContext.trackStep({ sourceUri: uri, diff --git a/packages/uri-resolvers/src/cache/WrapperCacheResolver.ts b/packages/uri-resolvers/src/cache/WrapperCacheResolver.ts index 401f97f5a..84fb23f1f 100644 --- a/packages/uri-resolvers/src/cache/WrapperCacheResolver.ts +++ b/packages/uri-resolvers/src/cache/WrapperCacheResolver.ts @@ -71,7 +71,7 @@ export class WrapperCacheResolver // Return from cache if available if (wrapper) { - const result = UriResolutionResult.ok(uri, wrapper); + const result = UriResolutionResult.ok(uri, wrapper); resolutionContext.trackStep({ sourceUri: uri, diff --git a/packages/uri-resolvers/src/packages/PackageResolver.ts b/packages/uri-resolvers/src/packages/PackageResolver.ts index 346e4b273..9eaefb8cf 100644 --- a/packages/uri-resolvers/src/packages/PackageResolver.ts +++ b/packages/uri-resolvers/src/packages/PackageResolver.ts @@ -43,7 +43,7 @@ export class PackageResolver extends ResolverWithHistory /* $ */ { */ protected async _tryResolveUri( uri: Uri - ): Promise> /* $ */ { + ): Promise> /* $ */ { if (uri.uri !== this._uri.uri) { return UriResolutionResult.ok(uri); } diff --git a/packages/uri-resolvers/src/redirects/RedirectResolver.ts b/packages/uri-resolvers/src/redirects/RedirectResolver.ts index 19bacfb44..e794c0491 100644 --- a/packages/uri-resolvers/src/redirects/RedirectResolver.ts +++ b/packages/uri-resolvers/src/redirects/RedirectResolver.ts @@ -49,7 +49,7 @@ export class RedirectResolver< */ protected async _tryResolveUri( uri: Uri - ): Promise> /* $ */ { + ): Promise> /* $ */ { if (uri.uri !== this.from.uri) { return UriResolutionResult.ok(uri); } diff --git a/packages/uri-resolvers/src/wrappers/WrapperResolver.ts b/packages/uri-resolvers/src/wrappers/WrapperResolver.ts index 782805273..8591e49a8 100644 --- a/packages/uri-resolvers/src/wrappers/WrapperResolver.ts +++ b/packages/uri-resolvers/src/wrappers/WrapperResolver.ts @@ -43,7 +43,7 @@ export class WrapperResolver extends ResolverWithHistory /* $ */ { */ protected async _tryResolveUri( uri: Uri - ): Promise> /* $ */ { + ): Promise> /* $ */ { if (uri.uri !== this._uri.uri) { return UriResolutionResult.ok(uri); } diff --git a/packages/wasm/src/WasmWrapper.ts b/packages/wasm/src/WasmWrapper.ts index fc7fb643c..97cd39a86 100644 --- a/packages/wasm/src/WasmWrapper.ts +++ b/packages/wasm/src/WasmWrapper.ts @@ -24,6 +24,7 @@ import { } from "@polywrap/core-js"; import { Result, ResultErr, ResultOk } from "@polywrap/result"; +// TODO: Remove unused properties export interface State { method: string; args: Uint8Array; @@ -41,7 +42,7 @@ export interface State { error?: string; args: unknown[]; }; - invokeResult?: Result; + invokeResult?: Result; getImplementationsResult?: Uint8Array; env: Uint8Array; resolutionContext?: IUriResolutionContext; From ffa06df30e502aedb4697827cec1042100c5dc28 Mon Sep 17 00:00:00 2001 From: krisbitney Date: Thu, 14 Sep 2023 13:37:50 +0300 Subject: [PATCH 2/4] fixed missing generic type annotations in tests --- .../client/src/__tests__/core/sanity.spec.ts | 2 +- .../src/__tests__/core/type-test-cases.ts | 28 +++++++++---------- .../src/__tests__/core/wasm-wrapper.spec.ts | 4 +-- packages/client/src/__tests__/helpers.ts | 2 -- .../__tests__/client-config-builder.spec.ts | 2 +- .../request-synchronizer-resolver.spec.ts | 2 +- 6 files changed, 19 insertions(+), 21 deletions(-) diff --git a/packages/client/src/__tests__/core/sanity.spec.ts b/packages/client/src/__tests__/core/sanity.spec.ts index c6c5caf0f..644f16b44 100644 --- a/packages/client/src/__tests__/core/sanity.spec.ts +++ b/packages/client/src/__tests__/core/sanity.spec.ts @@ -42,7 +42,7 @@ describe("sanity", () => { let config: CoreClientConfig = { resolver: { tryResolveUri: (_a: unknown, _b: unknown, _c: unknown) => { - return Promise.resolve(ResultErr()); + return Promise.resolve(ResultErr(undefined)); }, }, interfaces: undefined, diff --git a/packages/client/src/__tests__/core/type-test-cases.ts b/packages/client/src/__tests__/core/type-test-cases.ts index 475dc2df9..066829b0b 100644 --- a/packages/client/src/__tests__/core/type-test-cases.ts +++ b/packages/client/src/__tests__/core/type-test-cases.ts @@ -1,4 +1,4 @@ -import { memoryStoragePlugin, ErrResult } from "../helpers"; +import { memoryStoragePlugin } from "../helpers"; import { PolywrapClient } from "../../PolywrapClient"; import BigNumber from "bignumber.js"; @@ -226,7 +226,7 @@ export const typeTestCases = (implementation: string) => { }, }); - method1a = method1a as ErrResult; + if (method1a.ok) throw Error("Expected error, but found `result.ok === true`"); expect(method1a.error).toBeTruthy(); expect(method1a.error?.message).toMatch( /__wrap_abort: Invalid value for enum 'SanityEnum': 5/gm @@ -252,7 +252,7 @@ export const typeTestCases = (implementation: string) => { }, }); - method1c = method1c as ErrResult; + if (method1c.ok) throw Error("Expected error, but found `result.ok === true`"); expect(method1c.error).toBeTruthy(); expect(method1c.error?.message).toMatch( /__wrap_abort: Invalid key for enum 'SanityEnum': INVALID/gm @@ -279,7 +279,7 @@ export const typeTestCases = (implementation: string) => { arg: 10, }, }); - invalidBoolIntSent = invalidBoolIntSent as ErrResult; + if (invalidBoolIntSent.ok) throw Error("Expected error, but found `result.ok === true`"); expect(invalidBoolIntSent.error).toBeTruthy(); expect(invalidBoolIntSent.error?.message).toMatch( /Property must be of type 'bool'. Found 'int'./ @@ -292,7 +292,7 @@ export const typeTestCases = (implementation: string) => { arg: true, }, }); - invalidIntBoolSent = invalidIntBoolSent as ErrResult; + if (invalidIntBoolSent.ok) throw Error("Expected error, but found `result.ok === true`"); expect(invalidIntBoolSent.error).toBeTruthy(); expect(invalidIntBoolSent.error?.message).toMatch( /Property must be of type 'int'. Found 'bool'./ @@ -305,7 +305,7 @@ export const typeTestCases = (implementation: string) => { arg: [10], }, }); - invalidUIntArraySent = invalidUIntArraySent as ErrResult; + if (invalidUIntArraySent.ok) throw Error("Expected error, but found `result.ok === true`"); expect(invalidUIntArraySent.error).toBeTruthy(); expect(invalidUIntArraySent.error?.message).toMatch( /Property must be of type 'uint'. Found 'array'./ @@ -319,7 +319,7 @@ export const typeTestCases = (implementation: string) => { }, }); - invalidBytesFloatSent = invalidBytesFloatSent as ErrResult; + if (invalidBytesFloatSent.ok) throw Error("Expected error, but found `result.ok === true`"); expect(invalidBytesFloatSent.error).toBeTruthy(); expect(invalidBytesFloatSent.error?.message).toMatch( /Property must be of type 'bytes'. Found 'float64'./ @@ -335,7 +335,7 @@ export const typeTestCases = (implementation: string) => { }, }); - invalidArrayMapSent = invalidArrayMapSent as ErrResult; + if (invalidArrayMapSent.ok) throw Error("Expected error, but found `result.ok === true`"); expect(invalidArrayMapSent.error).toBeTruthy(); expect(invalidArrayMapSent.error?.message).toMatch( /Property must be of type 'array'. Found 'map'./ @@ -446,7 +446,7 @@ export const typeTestCases = (implementation: string) => { }, }); - i8Underflow = i8Underflow as ErrResult; + if (i8Underflow.ok) throw Error("Expected error, but found `result.ok === true`"); expect(i8Underflow.error).toBeTruthy(); expect(i8Underflow.error?.message).toMatch( /integer overflow: value = -129; bits = 8/ @@ -460,7 +460,7 @@ export const typeTestCases = (implementation: string) => { second: 10, }, }); - u8Overflow = u8Overflow as ErrResult; + if (u8Overflow.ok) throw Error("Expected error, but found `result.ok === true`"); expect(u8Overflow.error).toBeTruthy(); expect(u8Overflow.error?.message).toMatch( /unsigned integer overflow: value = 256; bits = 8/ @@ -474,7 +474,7 @@ export const typeTestCases = (implementation: string) => { second: 10, }, }); - i16Underflow = i16Underflow as ErrResult; + if (i16Underflow.ok) throw Error("Expected error, but found `result.ok === true`"); expect(i16Underflow.error).toBeTruthy(); expect(i16Underflow.error?.message).toMatch( /integer overflow: value = -32769; bits = 16/ @@ -488,7 +488,7 @@ export const typeTestCases = (implementation: string) => { second: 10, }, }); - u16Overflow = u16Overflow as ErrResult; + if (u16Overflow.ok) throw Error("Expected error, but found `result.ok === true`"); expect(u16Overflow.error).toBeTruthy(); expect(u16Overflow.error?.message).toMatch( /unsigned integer overflow: value = 65536; bits = 16/ @@ -502,7 +502,7 @@ export const typeTestCases = (implementation: string) => { second: 10, }, }); - i32Underflow = i32Underflow as ErrResult; + if (i32Underflow.ok) throw Error("Expected error, but found `result.ok === true`"); expect(i32Underflow.error).toBeTruthy(); expect(i32Underflow.error?.message).toMatch( /integer overflow: value = -2147483649; bits = 32/ @@ -516,7 +516,7 @@ export const typeTestCases = (implementation: string) => { second: 10, }, }); - u32Overflow = u32Overflow as ErrResult; + if (u32Overflow.ok) throw Error("Expected error, but found `result.ok === true`"); expect(u32Overflow.error).toBeTruthy(); expect(u32Overflow.error?.message).toMatch( /unsigned integer overflow: value = 4294967296; bits = 32/ diff --git a/packages/client/src/__tests__/core/wasm-wrapper.spec.ts b/packages/client/src/__tests__/core/wasm-wrapper.spec.ts index b80c72ee6..1cffcadea 100644 --- a/packages/client/src/__tests__/core/wasm-wrapper.spec.ts +++ b/packages/client/src/__tests__/core/wasm-wrapper.spec.ts @@ -6,7 +6,7 @@ import { WrapManifest } from "@polywrap/wrap-manifest-types-js"; import { PluginModule, PluginPackage } from "@polywrap/plugin-js"; import { UriResolver } from "@polywrap/uri-resolvers-js"; import { PolywrapClientConfigBuilder } from "@polywrap/client-config-builder-js"; -import { mockPluginRegistration, ErrResult } from "../helpers"; +import { mockPluginRegistration } from "../helpers"; import { ResultOk } from "@polywrap/result"; jest.setTimeout(200000); @@ -175,7 +175,7 @@ describe("wasm-wrapper", () => { } ); - pluginGetFileResult = pluginGetFileResult as ErrResult; + if (pluginGetFileResult.ok) throw Error("Expected error, but found `result.ok === true`"); expect(pluginGetFileResult.error?.message).toContain( "client.getFile(...) is not implemented for Plugins." ); diff --git a/packages/client/src/__tests__/helpers.ts b/packages/client/src/__tests__/helpers.ts index 74a1a0b00..3f3f7878e 100644 --- a/packages/client/src/__tests__/helpers.ts +++ b/packages/client/src/__tests__/helpers.ts @@ -53,8 +53,6 @@ export const mockPluginRegistration = (uri: string | Uri) => { }; }; -export type ErrResult = { ok: false; error: E | undefined }; - export const incompatiblePlugin = () => { class IncompatiblePlugin extends PluginModule> { async getData(_: {}): Promise { diff --git a/packages/config-builder/src/__tests__/client-config-builder.spec.ts b/packages/config-builder/src/__tests__/client-config-builder.spec.ts index 154fce456..389592885 100644 --- a/packages/config-builder/src/__tests__/client-config-builder.spec.ts +++ b/packages/config-builder/src/__tests__/client-config-builder.spec.ts @@ -23,7 +23,7 @@ class MockUriResolver implements IUriResolver { tryResolveUri( _uri: Uri, _client: CoreClient - ): Promise> { + ): Promise> { throw new Error("Not implemented"); } } diff --git a/packages/uri-resolvers/src/__tests__/request-synchronizer-resolver/request-synchronizer-resolver.spec.ts b/packages/uri-resolvers/src/__tests__/request-synchronizer-resolver/request-synchronizer-resolver.spec.ts index 187cc2f4c..64907ccc2 100644 --- a/packages/uri-resolvers/src/__tests__/request-synchronizer-resolver/request-synchronizer-resolver.spec.ts +++ b/packages/uri-resolvers/src/__tests__/request-synchronizer-resolver/request-synchronizer-resolver.spec.ts @@ -24,7 +24,7 @@ class SimpleAsyncRedirectResolver implements IUriResolver { case "wrap://test/should-redirect": return new Promise>((resolve) => { setTimeout(() => { - const result = UriResolutionResult.ok( + const result = UriResolutionResult.ok( new Uri("wrap://test/redirected") ); From 1409a4e869397fad3dcba65caf9586eb7a4ca7e3 Mon Sep 17 00:00:00 2001 From: krisbitney Date: Thu, 14 Sep 2023 14:05:52 +0300 Subject: [PATCH 3/4] changed `undefined` to `never` in tryResolveUri in PackageResolver, RedirectResolver, and WrapperResolver --- packages/uri-resolvers/src/packages/PackageResolver.ts | 2 +- packages/uri-resolvers/src/redirects/RedirectResolver.ts | 2 +- packages/uri-resolvers/src/wrappers/WrapperResolver.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/uri-resolvers/src/packages/PackageResolver.ts b/packages/uri-resolvers/src/packages/PackageResolver.ts index 9eaefb8cf..d6b8ae8a2 100644 --- a/packages/uri-resolvers/src/packages/PackageResolver.ts +++ b/packages/uri-resolvers/src/packages/PackageResolver.ts @@ -43,7 +43,7 @@ export class PackageResolver extends ResolverWithHistory /* $ */ { */ protected async _tryResolveUri( uri: Uri - ): Promise> /* $ */ { + ): Promise> /* $ */ { if (uri.uri !== this._uri.uri) { return UriResolutionResult.ok(uri); } diff --git a/packages/uri-resolvers/src/redirects/RedirectResolver.ts b/packages/uri-resolvers/src/redirects/RedirectResolver.ts index e794c0491..e5fcf4755 100644 --- a/packages/uri-resolvers/src/redirects/RedirectResolver.ts +++ b/packages/uri-resolvers/src/redirects/RedirectResolver.ts @@ -49,7 +49,7 @@ export class RedirectResolver< */ protected async _tryResolveUri( uri: Uri - ): Promise> /* $ */ { + ): Promise> /* $ */ { if (uri.uri !== this.from.uri) { return UriResolutionResult.ok(uri); } diff --git a/packages/uri-resolvers/src/wrappers/WrapperResolver.ts b/packages/uri-resolvers/src/wrappers/WrapperResolver.ts index 8591e49a8..1c10c0730 100644 --- a/packages/uri-resolvers/src/wrappers/WrapperResolver.ts +++ b/packages/uri-resolvers/src/wrappers/WrapperResolver.ts @@ -43,7 +43,7 @@ export class WrapperResolver extends ResolverWithHistory /* $ */ { */ protected async _tryResolveUri( uri: Uri - ): Promise> /* $ */ { + ): Promise> /* $ */ { if (uri.uri !== this._uri.uri) { return UriResolutionResult.ok(uri); } From 593d5435f6ba011cf398ee99a933f3ceaa5e3d77 Mon Sep 17 00:00:00 2001 From: krisbitney Date: Mon, 25 Sep 2023 14:36:58 +0300 Subject: [PATCH 4/4] updated row line in test --- .../shows-plugin-extension-error-with-subinvoke.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/uri-resolver-extensions/src/__tests__/histories/shows-plugin-extension-error-with-subinvoke.json b/packages/uri-resolver-extensions/src/__tests__/histories/shows-plugin-extension-error-with-subinvoke.json index 0fc5e4d87..c65b3d977 100644 --- a/packages/uri-resolver-extensions/src/__tests__/histories/shows-plugin-extension-error-with-subinvoke.json +++ b/packages/uri-resolver-extensions/src/__tests__/histories/shows-plugin-extension-error-with-subinvoke.json @@ -1,10 +1,10 @@ [ - "wrap://test/error => UriResolverAggregator => error (__wrap_abort: Test error\ncode: 51 WRAPPER INVOKE ABORTED\nuri: wrap://package/test-resolver\nmethod: tryResolveUri\nargs: {\n \"authority\": \"test\",\n \"path\": \"error\"\n} \nsource: { , row: 43, col: 21 }\ncode: 51 WRAPPER INVOKE ABORTED\nuri: wrap://package/subinvoke-resolver\nmethod: tryResolveUri\nargs: {\n \"authority\": \"test\",\n \"path\": \"error\"\n} \nsource: { , row: 177, col: 15 })", + "wrap://test/error => UriResolverAggregator => error (__wrap_abort: Test error\ncode: 51 WRAPPER INVOKE ABORTED\nuri: wrap://package/test-resolver\nmethod: tryResolveUri\nargs: {\n \"authority\": \"test\",\n \"path\": \"error\"\n} \nsource: { , row: 43, col: 21 }\ncode: 51 WRAPPER INVOKE ABORTED\nuri: wrap://package/subinvoke-resolver\nmethod: tryResolveUri\nargs: {\n \"authority\": \"test\",\n \"path\": \"error\"\n} \nsource: { , row: 178, col: 15 })", [ "wrap://test/error => StaticResolver - Miss", - "wrap://test/error => ExtendableUriResolver => error (__wrap_abort: Test error\ncode: 51 WRAPPER INVOKE ABORTED\nuri: wrap://package/test-resolver\nmethod: tryResolveUri\nargs: {\n \"authority\": \"test\",\n \"path\": \"error\"\n} \nsource: { , row: 43, col: 21 }\ncode: 51 WRAPPER INVOKE ABORTED\nuri: wrap://package/subinvoke-resolver\nmethod: tryResolveUri\nargs: {\n \"authority\": \"test\",\n \"path\": \"error\"\n} \nsource: { , row: 177, col: 15 })", + "wrap://test/error => ExtendableUriResolver => error (__wrap_abort: Test error\ncode: 51 WRAPPER INVOKE ABORTED\nuri: wrap://package/test-resolver\nmethod: tryResolveUri\nargs: {\n \"authority\": \"test\",\n \"path\": \"error\"\n} \nsource: { , row: 43, col: 21 }\ncode: 51 WRAPPER INVOKE ABORTED\nuri: wrap://package/subinvoke-resolver\nmethod: tryResolveUri\nargs: {\n \"authority\": \"test\",\n \"path\": \"error\"\n} \nsource: { , row: 178, col: 15 })", [ - "wrap://test/error => ResolverExtension (wrap://package/subinvoke-resolver) => error (__wrap_abort: Test error\ncode: 51 WRAPPER INVOKE ABORTED\nuri: wrap://package/test-resolver\nmethod: tryResolveUri\nargs: {\n \"authority\": \"test\",\n \"path\": \"error\"\n} \nsource: { , row: 43, col: 21 }\ncode: 51 WRAPPER INVOKE ABORTED\nuri: wrap://package/subinvoke-resolver\nmethod: tryResolveUri\nargs: {\n \"authority\": \"test\",\n \"path\": \"error\"\n} \nsource: { , row: 177, col: 15 })", + "wrap://test/error => ResolverExtension (wrap://package/subinvoke-resolver) => error (__wrap_abort: Test error\ncode: 51 WRAPPER INVOKE ABORTED\nuri: wrap://package/test-resolver\nmethod: tryResolveUri\nargs: {\n \"authority\": \"test\",\n \"path\": \"error\"\n} \nsource: { , row: 43, col: 21 }\ncode: 51 WRAPPER INVOKE ABORTED\nuri: wrap://package/subinvoke-resolver\nmethod: tryResolveUri\nargs: {\n \"authority\": \"test\",\n \"path\": \"error\"\n} \nsource: { , row: 178, col: 15 })", [ "wrap://package/subinvoke-resolver => Client.loadWrapper => wrapper (wrap://package/subinvoke-resolver)", [ @@ -13,7 +13,7 @@ "wrap://package/subinvoke-resolver => StaticResolver - Package (wrap://package/subinvoke-resolver) => package (wrap://package/subinvoke-resolver)" ] ], - "wrap://package/subinvoke-resolver => Client.invokeWrapper => error (__wrap_abort: Test error\ncode: 51 WRAPPER INVOKE ABORTED\nuri: wrap://package/test-resolver\nmethod: tryResolveUri\nargs: {\n \"authority\": \"test\",\n \"path\": \"error\"\n} \nsource: { , row: 43, col: 21 }\ncode: 51 WRAPPER INVOKE ABORTED\nuri: wrap://package/subinvoke-resolver\nmethod: tryResolveUri\nargs: {\n \"authority\": \"test\",\n \"path\": \"error\"\n} \nsource: { , row: 177, col: 15 })", + "wrap://package/subinvoke-resolver => Client.invokeWrapper => error (__wrap_abort: Test error\ncode: 51 WRAPPER INVOKE ABORTED\nuri: wrap://package/test-resolver\nmethod: tryResolveUri\nargs: {\n \"authority\": \"test\",\n \"path\": \"error\"\n} \nsource: { , row: 43, col: 21 }\ncode: 51 WRAPPER INVOKE ABORTED\nuri: wrap://package/subinvoke-resolver\nmethod: tryResolveUri\nargs: {\n \"authority\": \"test\",\n \"path\": \"error\"\n} \nsource: { , row: 178, col: 15 })", [ "wrap://package/test-resolver => Client.loadWrapper => wrapper (wrap://package/test-resolver)", [