UNPKG

@mysten/sui

Version:
1 lines 2.85 kB
{"version":3,"file":"client.mjs","names":[],"sources":["../../src/client/client.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { Simplify, UnionToIntersection } from '@mysten/utils';\nimport { ClientCache } from './cache.js';\nimport type { CoreClient } from './core.js';\nimport type { ClientWithExtensions, SuiClientTypes, SuiClientRegistration } from './types.js';\n\nexport abstract class BaseClient {\n\tnetwork: SuiClientTypes.Network;\n\tcache: ClientCache;\n\tbase: BaseClient;\n\n\tconstructor({\n\t\tnetwork,\n\t\tbase,\n\t\tcache = base?.cache ?? new ClientCache(),\n\t}: SuiClientTypes.SuiClientOptions) {\n\t\tthis.network = network;\n\t\tthis.base = base ?? this;\n\t\tthis.cache = cache;\n\t}\n\n\tabstract core: CoreClient;\n\n\t$extend<const Registrations extends SuiClientRegistration<this>[]>(\n\t\t...registrations: Registrations\n\t) {\n\t\tconst extensions: Record<string, unknown> = Object.fromEntries(\n\t\t\tregistrations.map((registration) => {\n\t\t\t\treturn [registration.name, registration.register(this)];\n\t\t\t}),\n\t\t);\n\n\t\tconst methodCache = new Map<string | symbol, Function>();\n\n\t\treturn new Proxy(this, {\n\t\t\tget(target, prop, receiver) {\n\t\t\t\tif (typeof prop === 'string' && prop in extensions) {\n\t\t\t\t\treturn extensions[prop];\n\t\t\t\t}\n\t\t\t\tconst value = Reflect.get(target, prop, receiver);\n\t\t\t\tif (typeof value === 'function') {\n\t\t\t\t\tif (prop === '$extend') {\n\t\t\t\t\t\treturn value.bind(receiver);\n\t\t\t\t\t}\n\t\t\t\t\tif (!methodCache.has(prop)) {\n\t\t\t\t\t\tmethodCache.set(prop, value.bind(target));\n\t\t\t\t\t}\n\t\t\t\t\treturn methodCache.get(prop);\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t},\n\t\t}) as ClientWithExtensions<\n\t\t\tSimplify<\n\t\t\t\tUnionToIntersection<\n\t\t\t\t\t{\n\t\t\t\t\t\t[K in keyof Registrations]: Registrations[K] extends SuiClientRegistration<\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\tinfer Name extends string,\n\t\t\t\t\t\t\tinfer Extension\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t[K2 in Name]: Extension;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: never;\n\t\t\t\t\t}[number]\n\t\t\t\t>\n\t\t\t>,\n\t\t\tthis\n\t\t>;\n\t}\n}\n"],"mappings":";;;AAQA,IAAsB,aAAtB,MAAiC;CAKhC,YAAY,EACX,SACA,MACA,QAAQ,MAAM,SAAS,IAAI,aAAa,IACL;AACnC,OAAK,UAAU;AACf,OAAK,OAAO,QAAQ;AACpB,OAAK,QAAQ;;CAKd,QACC,GAAG,eACF;EACD,MAAM,aAAsC,OAAO,YAClD,cAAc,KAAK,iBAAiB;AACnC,UAAO,CAAC,aAAa,MAAM,aAAa,SAAS,KAAK,CAAC;IACtD,CACF;EAED,MAAM,8BAAc,IAAI,KAAgC;AAExD,SAAO,IAAI,MAAM,MAAM,EACtB,IAAI,QAAQ,MAAM,UAAU;AAC3B,OAAI,OAAO,SAAS,YAAY,QAAQ,WACvC,QAAO,WAAW;GAEnB,MAAM,QAAQ,QAAQ,IAAI,QAAQ,MAAM,SAAS;AACjD,OAAI,OAAO,UAAU,YAAY;AAChC,QAAI,SAAS,UACZ,QAAO,MAAM,KAAK,SAAS;AAE5B,QAAI,CAAC,YAAY,IAAI,KAAK,CACzB,aAAY,IAAI,MAAM,MAAM,KAAK,OAAO,CAAC;AAE1C,WAAO,YAAY,IAAI,KAAK;;AAE7B,UAAO;KAER,CAAC"}