@polywrap/uri-resolvers
URI resolvers to customize URI resolution in the Polywrap Client.
Installation
npm install --save @polywrap/uri-resolvers-js
Usage
This example is similar to the default resolver used by the PolywrapClientConfigBuilder in the @polywrap/client-config-builder-js package.
const resolver = RecursiveResolver.from(
WrapperCacheResolver.from(
[
StaticResolver.from([
...redirects,
...wrappers,
...packages,
]),
],
new WrapperCache()
)
);
Reference
UriResolverAggregatorBase
export abstract class UriResolverAggregatorBase<
TResolutionError = undefined,
TGetResolversError = undefined
> implements IUriResolver<TResolutionError | TGetResolversError>
Methods
getUriResolvers
abstract getUriResolvers(
uri: Uri,
client: CoreClient,
resolutionContext: IUriResolutionContext
): Promise<Result<IUriResolver<unknown>[], TGetResolversError>>;
tryResolveUri
async tryResolveUri(
uri: Uri,
client: CoreClient,
resolutionContext: IUriResolutionContext
): Promise<
Result<UriPackageOrWrapper, TResolutionError | TGetResolversError>
>
getStepDescription (protected)
protected abstract getStepDescription(
uri: Uri,
result: Result<UriPackageOrWrapper, TResolutionError>
): string;
tryResolveUriWithResolvers (protected)
protected async tryResolveUriWithResolvers(
uri: Uri,
client: CoreClient,
resolvers: IUriResolver<unknown>[],
resolutionContext: IUriResolutionContext
): Promise<Result<UriPackageOrWrapper, TResolutionError>>
UriResolverAggregator
export class UriResolverAggregator<
TResolutionError = undefined,
TGetResolversError = undefined
> extends UriResolverAggregatorBase<
TResolutionError,
TGetResolversError
>
Types
GetResolversFunc
export type GetResolversFunc = (
uri: Uri,
client: CoreClient
) => Promise<IUriResolver<unknown>[]>;
GetResolversWithErrorFunc
export type GetResolversWithErrorFunc<TError> = (
uri: Uri,
client: CoreClient
) => Promise<Result<IUriResolver<unknown>[], TError>>;
Methods
constructor
constructor(resolvers: UriResolverLike[], resolverName?: string);
constructor(
resolvers: (
uri: Uri,
client: CoreClient
) => Promise<Result<IUriResolver<unknown>[], TGetResolversError>>,
resolverName?: string
);
constructor(resolvers: GetResolversFunc, resolverName?: string);
constructor(
resolvers:
| UriResolverLike[]
| GetResolversFunc
| GetResolversWithErrorFunc<TGetResolversError>,
private _resolverName?: string
)
getUriResolvers
async getUriResolvers(
uri: Uri,
client: CoreClient
): Promise<Result<IUriResolver<unknown>[], TGetResolversError>>
getStepDescription (protected)
protected getStepDescription = (): string
IWrapperCache
export interface IWrapperCache {
get(uri: Uri): MaybeAsync<Wrapper | undefined>;
set(uri: Uri, wrapper: Wrapper): MaybeAsync<void>;
}
WrapperCache
export class WrapperCache implements IWrapperCache
Methods
get
get(uri: Uri): Wrapper | undefined
set
set(uris: Uri, wrapper: Wrapper): void
WrapperCacheResolver
export class WrapperCacheResolver<TError>
implements IUriResolver<TError | Error>
constructor
constructor(
private _innerResolver: IUriResolver<TError>,
private _cache: IWrapperCache
)
Methods
from
static from<TResolverError = unknown>(
innerResolver: UriResolverLike,
cache: IWrapperCache
): WrapperCacheResolver<TResolverError>
tryResolveUri
async tryResolveUri(
uri: Uri,
client: CoreClient,
resolutionContext: IUriResolutionContext
): Promise<Result<UriPackageOrWrapper, TError | Error>>
getUriResolutionPath
export const getUriResolutionPath = (
history: IUriResolutionStep<unknown>[]
): IUriResolutionStep<unknown>[]
InfiniteLoopError
export class InfiniteLoopError extends Error
constructor
constructor(
private readonly _uri: Uri,
private readonly _history: IUriResolutionStep<unknown>[]
)
ResolverWithHistory
export abstract class ResolverWithHistory<TError = undefined>
implements IUriResolver<TError>
Methods
tryResolveUri
async tryResolveUri(
uri: Uri,
client: CoreClient,
resolutionContext: IUriResolutionContext
): Promise<Result<UriPackageOrWrapper, TError>>
getStepDescription (protected)
protected abstract getStepDescription(
uri: Uri,
result: Result<UriPackageOrWrapper, TError>
): string;
_tryResolveUri (protected)
protected abstract _tryResolveUri(
uri: Uri,
client: CoreClient,
resolutionContext: IUriResolutionContext
): Promise<Result<UriPackageOrWrapper, TError>>;
ResolverWithLoopGuard
export class ResolverWithLoopGuard<TError = undefined>
implements IUriResolver<TError | InfiniteLoopError>
constructor
constructor(private _resolver: IUriResolver<TError>)
Methods
from
static from<TResolverError = unknown>(
resolver: UriResolverLike
): ResolverWithLoopGuard<TResolverError>
tryResolveUri
async tryResolveUri(
uri: Uri,
client: CoreClient,
resolutionContext: IUriResolutionContext
): Promise<Result<UriPackageOrWrapper, TError | InfiniteLoopError>>
PackageToWrapperResolver
export class PackageToWrapperResolver<TError>
implements IUriResolver<TError | Error>
constructor
constructor(
private _innerResolver: IUriResolver<TError>,
private _options?: {
deserializeManifestOptions?: DeserializeManifestOptions;
}
)
Methods
from
static from<TResolverError = unknown>(
innerResolver: UriResolverLike,
options?: { deserializeManifestOptions?: DeserializeManifestOptions }
): PackageToWrapperResolver<TResolverError>
tryResolveUri
async tryResolveUri(
uri: Uri,
client: CoreClient,
resolutionContext: IUriResolutionContext
): Promise<Result<UriPackageOrWrapper, TError | Error>>
UriResolver
export class UriResolver
Methods
from
static from<TError = undefined>(
resolverLike: UriResolverLike,
resolverName?: string
): IUriResolver<TError>
UriResolverLike
export type UriResolverLike =
| IUriResolver<unknown>
| IUriRedirect
| IUriPackage
| IUriWrapper
| UriResolverLike[];
UriResolutionResult
export class UriResolutionResult<TError = undefined>
Methods
ok
static ok<TError = undefined>(uri: Uri): Result<UriPackageOrWrapper, TError>;
static ok<TError = undefined>(
uri: Uri,
wrapPackage: IWrapPackage
): Result<UriPackageOrWrapper, TError>;
static ok<TError = undefined>(
uri: Uri,
wrapper: Wrapper
): Result<UriPackageOrWrapper, TError>;
static ok<TError = undefined>(
uriPackageOrWrapper: UriPackageOrWrapper
): Result<UriPackageOrWrapper, TError>;
static ok<TError = undefined>(
uriPackageOrWrapper: Uri | UriPackageOrWrapper,
packageOrWrapper?: IWrapPackage | Wrapper
): Result<UriPackageOrWrapper, TError>
err
static err<TError = unknown>(
error: TError
): Result<UriPackageOrWrapper, TError>
PackageResolver
export class PackageResolver extends ResolverWithHistory
constructor
constructor(private _uri: Uri, private wrapPackage: IWrapPackage)
Methods
getStepDescription (protected)
protected getStepDescription = (): string
_tryResolveUri (protected)
protected async _tryResolveUri(
uri: Uri
): Promise<Result<UriPackageOrWrapper>>
RedirectResolver
export class RedirectResolver<
TUri extends string | Uri = string
> extends ResolverWithHistory
constructor
constructor(from: TUri, to: TUri)
Methods
getStepDescription (protected)
protected getStepDescription = (): string
_tryResolveUri (protected)
protected async _tryResolveUri(
uri: Uri
): Promise<Result<UriPackageOrWrapper>>
WrapperResolver
export class WrapperResolver extends ResolverWithHistory
constructor
constructor(private _uri: Uri, private _wrapper: Wrapper)
Methods
getStepDescription (protected)
protected getStepDescription = (): string
_tryResolveUri
protected async _tryResolveUri(
uri: Uri
): Promise<Result<UriPackageOrWrapper>>
StaticResolver
export class StaticResolver<TError = undefined>
implements IUriResolver<TError>
constructor
constructor(public uriMap: Map<string, UriPackageOrWrapper>)
Methods
from
static from<TError = undefined>(
staticResolverLikes: UriResolverLike[]
): StaticResolver<TError>
tryResolveUri
async tryResolveUri(
uri: Uri,
_: CoreClient,
resolutionContext: IUriResolutionContext
): Promise<Result<UriPackageOrWrapper, TError>>
StaticResolverLike
export type StaticResolverLike =
| IUriRedirect
| IUriPackage
| IUriWrapper
| StaticResolverLike[];
RequestSynchronizerResolver
export class RequestSynchronizerResolver<TError>
implements IUriResolver<TError>
constructor
constructor(
private resolverToSynchronize: IUriResolver<TError>,
private options?: {
shouldIgnoreCache?: (error: TError | undefined) => boolean;
}
)
Methods
from
static from<TResolverError = unknown>(
resolver: UriResolverLike,
options?: {
shouldIgnoreCache?: (error: TResolverError | undefined) => boolean;
}
): RequestSynchronizerResolver<TResolverError>
tryResolveUri
async tryResolveUri(
uri: Uri,
client: CoreClient,
resolutionContext: IUriResolutionContext
): Promise<Result<UriPackageOrWrapper, TError>>
Development
This package is open-source. It lives within the Polywrap JavaScript Client repository. Contributions from the community are welcomed!
Build
nvm use && yarn install && yarn build
Test
yarn test
``