enskit 1.13.1 → 1.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # enskit
2
2
 
3
+ The React toolkit for ENSv2 development. Provides typed Omnigraph API hooks, providers, and utilities powered by [`urql`](https://nearform.com/open-source/urql/) and [`gql.tada`](https://gql-tada.0no.co/).
4
+
3
5
  This package name is reserved for the [ENSNode](https://ensnode.io) project by [NameHash Labs](https://namehashlabs.org).
4
6
 
5
7
  For more information, visit [ensnode.io](https://ensnode.io).
8
+
9
+ ## Installation
10
+
11
+ ```bash
12
+ npm install enskit enssdk
13
+ ```
14
+
15
+ > **Version compatibility:** Our hosted ENSNode instances currently run ENSNode v1.13. If you are querying them from your own app, you **must** use `enskit@1.13.1` and `enssdk@1.13.1`. The latest published versions (`1.14.0+`) contain breaking changes in the Omnigraph API data model not yet deployed to our hosted infrastructure. This notice will be removed once the hosted instances are upgraded.
16
+ >
17
+ > ```bash
18
+ > npm install enskit@1.13.1 enssdk@1.13.1
19
+ > ```
@@ -166,7 +166,10 @@ var omnigraphCacheExchange = cacheExchange({
166
166
  },
167
167
  // These entities are Embedded Data and don't have a relevant key
168
168
  Label: EMBEDDED_DATA,
169
- WrappedBaseRegistrarRegistration: EMBEDDED_DATA
169
+ WrappedBaseRegistrarRegistration: EMBEDDED_DATA,
170
+ CanonicalName: EMBEDDED_DATA,
171
+ DomainCanonical: EMBEDDED_DATA,
172
+ DomainResolver: EMBEDDED_DATA
170
173
  },
171
174
  resolvers: mergeResolverMaps(
172
175
  // produce relayPagination() local resolvers for each t.connection in the schema
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/react/omnigraph/graphql.ts","../../../src/react/omnigraph/hooks.ts","../../../src/react/omnigraph/provider.tsx","../../../src/react/omnigraph/client.ts","../../../src/react/omnigraph/_lib/cache-exchange.ts","../../../src/react/omnigraph/_lib/by-id-lookup-resolvers.ts","../../../src/react/omnigraph/_lib/introspection-helpers.ts","../../../src/react/omnigraph/_lib/local-bigint-resolvers.ts","../../../src/react/omnigraph/_lib/local-connection-resolvers.ts","../../../src/react/omnigraph/_lib/merge-resolver-maps.ts"],"sourcesContent":["import type { introspection, OmnigraphScalars } from \"enssdk/omnigraph\";\nimport { initGraphQLTada } from \"gql.tada\";\n\nexport const graphql = initGraphQLTada<{\n introspection: typeof introspection;\n scalars: Omit<OmnigraphScalars, \"BigInt\"> & {\n // override the default Omnigraph Scalar definitions to include a deserialized BigInt (see cache-exchange.ts)\n BigInt: bigint;\n };\n}>();\n\nexport type { FragmentOf, ResultOf, VariablesOf } from \"gql.tada\";\nexport { readFragment } from \"gql.tada\";\n","\"use client\";\n\nimport type { AnyVariables, OperationContext } from \"@urql/core\";\nimport type { TadaDocumentNode } from \"gql.tada\";\nimport type { DocumentNode } from \"graphql\";\nimport { type UseQueryResponse, useQuery } from \"urql\";\n\nexport type UseOmnigraphQueryArgs<Data = unknown, Variables extends AnyVariables = AnyVariables> = {\n query: DocumentNode | TadaDocumentNode<Data, Variables> | string;\n variables?: Variables;\n pause?: boolean;\n context?: Partial<OperationContext>;\n};\n\nexport type UseOmnigraphQueryResult<\n Data = unknown,\n Variables extends AnyVariables = AnyVariables,\n> = UseQueryResponse<Data, Variables>;\n\nexport function useOmnigraphQuery<Data = unknown, Variables extends AnyVariables = AnyVariables>(\n args: UseOmnigraphQueryArgs<Data, Variables>,\n): UseOmnigraphQueryResult<Data, Variables> {\n return useQuery<Data, Variables>({\n query: args.query as DocumentNode,\n variables: args.variables as Variables,\n pause: args.pause,\n context: args.context,\n });\n}\n","\"use client\";\n\nimport type { EnsNodeClient } from \"enssdk/core\";\nimport { createElement, type ReactElement, type ReactNode, useMemo } from \"react\";\nimport { Provider } from \"urql\";\n\nimport { createOmnigraphUrqlClient } from \"./client\";\n\nexport interface OmnigraphProviderProps {\n client: EnsNodeClient;\n children?: ReactNode;\n}\n\nexport function OmnigraphProvider({ client, children }: OmnigraphProviderProps): ReactElement {\n const urqlClient = useMemo(() => createOmnigraphUrqlClient(client.config), [client]);\n\n return createElement(Provider, { value: urqlClient }, children);\n}\n","import { Client, fetchExchange } from \"@urql/core\";\nimport type { EnsNodeClientConfig } from \"enssdk/core\";\n\nimport { omnigraphCacheExchange } from \"./_lib/cache-exchange\";\n\nexport function createOmnigraphUrqlClient(config: EnsNodeClientConfig) {\n return new Client({\n url: new URL(\"/api/omnigraph\", config.url).href,\n fetch: config.fetch,\n exchanges: [omnigraphCacheExchange, fetchExchange],\n });\n}\n","import { cacheExchange } from \"@urql/exchange-graphcache\";\nimport type { AccountId } from \"enssdk\";\nimport { stringifyAccountId } from \"enssdk\";\nimport { introspection } from \"enssdk/omnigraph\";\n\nimport { byIdLookupResolvers } from \"./by-id-lookup-resolvers\";\nimport { localBigIntResolvers } from \"./local-bigint-resolvers\";\nimport { localConnectionResolvers } from \"./local-connection-resolvers\";\nimport { mergeResolverMaps } from \"./merge-resolver-maps\";\n\n/**\n * Entities without keys are 'Embedded Data', and we tell graphcache about them to avoid warnings\n * about the inability to normalize them.\n *\n * @see https://nearform.com/open-source/urql/docs/graphcache/normalized-caching/#custom-keys-and-non-keyable-entities\n */\nconst EMBEDDED_DATA = () => null;\n\nexport const omnigraphCacheExchange = cacheExchange({\n schema: introspection,\n keys: {\n // by default, all Entities are assumed to match the Relay spec, and graphcache treats\n // them as keyable by `id`. if it encounters an Entity with no `id` field and no other\n // special handling here in the cacheExchange.keys definitions, it will issue a warning.\n\n // AccountIds are keyable by stringifying them\n AccountId: (data) => {\n if (!data.address) return null;\n if (!data.chainId) return null;\n\n return stringifyAccountId(data as unknown as AccountId);\n },\n\n // Accounts are keyable by just `address` if `id` is not provided\n Account: (data) => {\n const key = data.id ?? data.address;\n return typeof key === \"string\" ? key : null;\n },\n\n // These entities are Embedded Data and don't have a relevant key\n Label: EMBEDDED_DATA,\n WrappedBaseRegistrarRegistration: EMBEDDED_DATA,\n },\n resolvers: mergeResolverMaps(\n // produce relayPagination() local resolvers for each t.connection in the schema\n localConnectionResolvers(introspection),\n\n // produce local resolvers that parse BigInt scalar fields from cached strings into native bigint\n localBigIntResolvers(introspection),\n\n // produce local cache resolvers for the Query.entity(by: { }) lookups\n byIdLookupResolvers,\n ),\n});\n","import type { Cache, ResolveInfo, Resolver, Variables } from \"@urql/exchange-graphcache\";\nimport {\n type AccountId,\n type Address,\n makeConcreteRegistryId,\n makePermissionsId,\n makeResolverId,\n type PermissionsId,\n type RegistryId,\n type ResolverId,\n} from \"enssdk\";\n\n/**\n * This local resolver delegates to graphcache's built-in cache resolution with the full argument set,\n * effectively telling urql 'not found locally' and to fetch from the network.\n */\nconst passthrough = (args: Variables, cache: Cache, info: ResolveInfo) =>\n cache.resolve(info.parentTypeName, info.fieldName, args);\n\nexport const byIdLookupResolvers: Record<string, Record<string, Resolver>> = {\n Query: {\n domain(parent, args, cache, info) {\n const by = args.by as { id?: string; name?: string };\n\n if (by.id) {\n const v1Key = cache.keyOfEntity({ __typename: \"ENSv1Domain\", id: by.id });\n if (v1Key && cache.resolve(v1Key, \"id\")) return v1Key;\n\n const v2Key = cache.keyOfEntity({ __typename: \"ENSv2Domain\", id: by.id });\n if (v2Key && cache.resolve(v2Key, \"id\")) return v2Key;\n }\n\n return passthrough(args, cache, info);\n },\n account(parent, args, cache, info) {\n const by = args.by as { id?: Address; address?: Address };\n\n if (by.id) return { __typename: \"Account\", id: by.id };\n if (by.address) return { __typename: \"Account\", id: by.address };\n\n return passthrough(args, cache, info);\n },\n registry(parent, args, cache, info) {\n const by = args.by as { id?: RegistryId; contract?: AccountId };\n\n // see if we have an ENSv1VirtualRegistry by id\n if (by.id) {\n const virtualKey = cache.keyOfEntity({ __typename: \"ENSv1VirtualRegistry\", id: by.id });\n if (virtualKey && cache.resolve(virtualKey, \"id\")) return virtualKey;\n }\n\n // otherwise, fall back to concrete by id or contract\n const id = by.id ?? (by.contract ? makeConcreteRegistryId(by.contract) : undefined);\n if (id) {\n const v1Key = cache.keyOfEntity({ __typename: \"ENSv1Registry\", id });\n if (v1Key && cache.resolve(v1Key, \"id\")) return v1Key;\n\n const v2Key = cache.keyOfEntity({ __typename: \"ENSv2Registry\", id });\n if (v2Key && cache.resolve(v2Key, \"id\")) return v2Key;\n }\n\n return passthrough(args, cache, info);\n },\n resolver(parent, args, cache, info) {\n const by = args.by as { id?: ResolverId; contract?: AccountId };\n\n if (by.id) return { __typename: \"Resolver\", id: by.id };\n if (by.contract) return { __typename: \"Resolver\", id: makeResolverId(by.contract) };\n\n return passthrough(args, cache, info);\n },\n permissions(parent, args, cache, info) {\n const by = args.by as { id?: PermissionsId; contract?: AccountId };\n\n if (by.id) return { __typename: \"Permissions\", id: by.id };\n if (by.contract) return { __typename: \"Permissions\", id: makePermissionsId(by.contract) };\n\n return passthrough(args, cache, info);\n },\n },\n};\n","export interface IntrospectionTypeRef {\n readonly kind: string;\n readonly name?: string;\n readonly ofType?: IntrospectionTypeRef | null;\n}\n\nexport interface IntrospectionField {\n readonly name: string;\n readonly type: IntrospectionTypeRef;\n}\n\nexport interface IntrospectionType {\n readonly kind: string;\n readonly name: string;\n readonly fields?: readonly IntrospectionField[] | null;\n}\n\nexport interface IntrospectionSchema {\n readonly __schema: {\n readonly types: readonly IntrospectionType[];\n };\n}\n\nexport function unwrapType(type: IntrospectionTypeRef): IntrospectionTypeRef {\n return type.ofType ? unwrapType(type.ofType) : type;\n}\n","import type { Resolver, ScalarObject } from \"@urql/exchange-graphcache\";\n\nimport {\n type IntrospectionSchema,\n type IntrospectionTypeRef,\n unwrapType,\n} from \"./introspection-helpers\";\n\n// graphcache's ResolverResult type doesn't include bigint, but the value is stored\n// in the normalized cache and returned to the consumer as-is, so bigint works at runtime\n// the load-bearing piece of type inference is in packages/enskit/src/react/omnigraph/graphql.ts where\n// the GraphQL BigInt Scalar is mapped to the `bigint` primitive, which is only supported by these\n// runtime local resolvers.\nconst toBigInt: Resolver = (parent, args, cache, info) => {\n const value = parent[info.fieldName];\n if (value == null) return value;\n return BigInt(value as string) as unknown as ScalarObject;\n};\n\nconst toBigIntList: Resolver = (parent, args, cache, info) => {\n const value = parent[info.fieldName];\n if (value == null) return value;\n\n // now we know value is a (string | null)[], so map to a (bigint | null)[]\n return (value as readonly (string | null)[]).map((v) => (v == null ? v : BigInt(v)));\n};\n\nfunction isBigIntType(type: IntrospectionTypeRef) {\n return unwrapType(type).name === \"BigInt\";\n}\n\n// NOTE: the recursion is to handle not-null-wrapped lists\nfunction isListType(type: IntrospectionTypeRef): boolean {\n if (type.kind === \"LIST\") return true;\n return type.ofType ? isListType(type.ofType) : false;\n}\n\n/**\n * Derives local resolvers that parse BigInt scalar fields from cached strings into native bigint.\n */\nexport function localBigIntResolvers(\n schema: IntrospectionSchema,\n): Record<string, Record<string, Resolver>> {\n const resolvers: Record<string, Record<string, Resolver>> = {};\n\n for (const type of schema.__schema.types) {\n if (type.kind !== \"OBJECT\" || type.name.startsWith(\"__\")) continue;\n\n for (const field of type.fields ?? []) {\n if (!isBigIntType(field.type)) continue;\n\n resolvers[type.name] ??= {};\n resolvers[type.name][field.name] = isListType(field.type) ? toBigIntList : toBigInt;\n }\n }\n\n return resolvers;\n}\n","import type { Resolver } from \"@urql/exchange-graphcache\";\nimport { relayPagination } from \"@urql/exchange-graphcache/extras\";\n\nimport { type IntrospectionSchema, unwrapType } from \"./introspection-helpers\";\n\n/**\n * Derives `relayPagination()` local resolvers for all connection fields in the schema.\n */\nexport function localConnectionResolvers(\n schema: IntrospectionSchema,\n): Record<string, Record<string, Resolver>> {\n const resolvers: Record<string, Record<string, Resolver>> = {};\n\n for (const type of schema.__schema.types) {\n if (type.kind !== \"OBJECT\" || type.name.startsWith(\"__\")) continue;\n\n for (const field of type.fields ?? []) {\n const leaf = unwrapType(field.type);\n if (leaf.name?.endsWith(\"Connection\")) {\n resolvers[type.name] ??= {};\n resolvers[type.name][field.name] = relayPagination();\n }\n }\n }\n\n return resolvers;\n}\n","import type { Resolver } from \"@urql/exchange-graphcache\";\n\n/**\n * deep-merge resolver maps so types appearing in both get all their field resolvers\n */\nexport function mergeResolverMaps<RESOLVER extends Resolver>(\n ...maps: Record<string, Record<string, RESOLVER>>[]\n): Record<string, Record<string, RESOLVER>> {\n const result: Record<string, Record<string, RESOLVER>> = {};\n for (const map of maps) {\n for (const [typeName, fields] of Object.entries(map)) {\n result[typeName] = { ...result[typeName], ...fields };\n }\n }\n return result;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/react/omnigraph/graphql.ts","../../../src/react/omnigraph/hooks.ts","../../../src/react/omnigraph/provider.tsx","../../../src/react/omnigraph/client.ts","../../../src/react/omnigraph/_lib/cache-exchange.ts","../../../src/react/omnigraph/_lib/by-id-lookup-resolvers.ts","../../../src/react/omnigraph/_lib/introspection-helpers.ts","../../../src/react/omnigraph/_lib/local-bigint-resolvers.ts","../../../src/react/omnigraph/_lib/local-connection-resolvers.ts","../../../src/react/omnigraph/_lib/merge-resolver-maps.ts"],"sourcesContent":["import type { introspection, OmnigraphScalars } from \"enssdk/omnigraph\";\nimport { initGraphQLTada } from \"gql.tada\";\n\nexport const graphql = initGraphQLTada<{\n introspection: typeof introspection;\n scalars: Omit<OmnigraphScalars, \"BigInt\"> & {\n // override the default Omnigraph Scalar definitions to include a deserialized BigInt (see cache-exchange.ts)\n BigInt: bigint;\n };\n}>();\n\nexport type { FragmentOf, ResultOf, VariablesOf } from \"gql.tada\";\nexport { readFragment } from \"gql.tada\";\n","\"use client\";\n\nimport type { AnyVariables, OperationContext } from \"@urql/core\";\nimport type { TadaDocumentNode } from \"gql.tada\";\nimport type { DocumentNode } from \"graphql\";\nimport { type UseQueryResponse, useQuery } from \"urql\";\n\nexport type UseOmnigraphQueryArgs<Data = unknown, Variables extends AnyVariables = AnyVariables> = {\n query: DocumentNode | TadaDocumentNode<Data, Variables> | string;\n variables?: Variables;\n pause?: boolean;\n context?: Partial<OperationContext>;\n};\n\nexport type UseOmnigraphQueryResult<\n Data = unknown,\n Variables extends AnyVariables = AnyVariables,\n> = UseQueryResponse<Data, Variables>;\n\nexport function useOmnigraphQuery<Data = unknown, Variables extends AnyVariables = AnyVariables>(\n args: UseOmnigraphQueryArgs<Data, Variables>,\n): UseOmnigraphQueryResult<Data, Variables> {\n return useQuery<Data, Variables>({\n query: args.query as DocumentNode,\n variables: args.variables as Variables,\n pause: args.pause,\n context: args.context,\n });\n}\n","\"use client\";\n\nimport type { EnsNodeClient } from \"enssdk/core\";\nimport { createElement, type ReactElement, type ReactNode, useMemo } from \"react\";\nimport { Provider } from \"urql\";\n\nimport { createOmnigraphUrqlClient } from \"./client\";\n\nexport interface OmnigraphProviderProps {\n client: EnsNodeClient;\n children?: ReactNode;\n}\n\nexport function OmnigraphProvider({ client, children }: OmnigraphProviderProps): ReactElement {\n const urqlClient = useMemo(() => createOmnigraphUrqlClient(client.config), [client]);\n\n return createElement(Provider, { value: urqlClient }, children);\n}\n","import { Client, fetchExchange } from \"@urql/core\";\nimport type { EnsNodeClientConfig } from \"enssdk/core\";\n\nimport { omnigraphCacheExchange } from \"./_lib/cache-exchange\";\n\nexport function createOmnigraphUrqlClient(config: EnsNodeClientConfig) {\n return new Client({\n url: new URL(\"/api/omnigraph\", config.url).href,\n fetch: config.fetch,\n exchanges: [omnigraphCacheExchange, fetchExchange],\n });\n}\n","import { cacheExchange } from \"@urql/exchange-graphcache\";\nimport type { AccountId } from \"enssdk\";\nimport { stringifyAccountId } from \"enssdk\";\nimport { introspection } from \"enssdk/omnigraph\";\n\nimport { byIdLookupResolvers } from \"./by-id-lookup-resolvers\";\nimport { localBigIntResolvers } from \"./local-bigint-resolvers\";\nimport { localConnectionResolvers } from \"./local-connection-resolvers\";\nimport { mergeResolverMaps } from \"./merge-resolver-maps\";\n\n/**\n * Entities without keys are 'Embedded Data', and we tell graphcache about them to avoid warnings\n * about the inability to normalize them.\n *\n * @see https://nearform.com/open-source/urql/docs/graphcache/normalized-caching/#custom-keys-and-non-keyable-entities\n */\nconst EMBEDDED_DATA = () => null;\n\nexport const omnigraphCacheExchange = cacheExchange({\n schema: introspection,\n keys: {\n // by default, all Entities are assumed to match the Relay spec, and graphcache treats\n // them as keyable by `id`. if it encounters an Entity with no `id` field and no other\n // special handling here in the cacheExchange.keys definitions, it will issue a warning.\n\n // AccountIds are keyable by stringifying them\n AccountId: (data) => {\n if (!data.address) return null;\n if (!data.chainId) return null;\n\n return stringifyAccountId(data as unknown as AccountId);\n },\n\n // Accounts are keyable by just `address` if `id` is not provided\n Account: (data) => {\n const key = data.id ?? data.address;\n return typeof key === \"string\" ? key : null;\n },\n\n // These entities are Embedded Data and don't have a relevant key\n Label: EMBEDDED_DATA,\n WrappedBaseRegistrarRegistration: EMBEDDED_DATA,\n CanonicalName: EMBEDDED_DATA,\n DomainCanonical: EMBEDDED_DATA,\n DomainResolver: EMBEDDED_DATA,\n },\n resolvers: mergeResolverMaps(\n // produce relayPagination() local resolvers for each t.connection in the schema\n localConnectionResolvers(introspection),\n\n // produce local resolvers that parse BigInt scalar fields from cached strings into native bigint\n localBigIntResolvers(introspection),\n\n // produce local cache resolvers for the Query.entity(by: { }) lookups\n byIdLookupResolvers,\n ),\n});\n","import type { Cache, ResolveInfo, Resolver, Variables } from \"@urql/exchange-graphcache\";\nimport {\n type AccountId,\n type Address,\n makeConcreteRegistryId,\n makePermissionsId,\n makeResolverId,\n type PermissionsId,\n type RegistryId,\n type ResolverId,\n} from \"enssdk\";\n\n/**\n * This local resolver delegates to graphcache's built-in cache resolution with the full argument set,\n * effectively telling urql 'not found locally' and to fetch from the network.\n */\nconst passthrough = (args: Variables, cache: Cache, info: ResolveInfo) =>\n cache.resolve(info.parentTypeName, info.fieldName, args);\n\nexport const byIdLookupResolvers: Record<string, Record<string, Resolver>> = {\n Query: {\n domain(parent, args, cache, info) {\n const by = args.by as { id?: string; name?: string };\n\n if (by.id) {\n const v1Key = cache.keyOfEntity({ __typename: \"ENSv1Domain\", id: by.id });\n if (v1Key && cache.resolve(v1Key, \"id\")) return v1Key;\n\n const v2Key = cache.keyOfEntity({ __typename: \"ENSv2Domain\", id: by.id });\n if (v2Key && cache.resolve(v2Key, \"id\")) return v2Key;\n }\n\n return passthrough(args, cache, info);\n },\n account(parent, args, cache, info) {\n const by = args.by as { id?: Address; address?: Address };\n\n if (by.id) return { __typename: \"Account\", id: by.id };\n if (by.address) return { __typename: \"Account\", id: by.address };\n\n return passthrough(args, cache, info);\n },\n registry(parent, args, cache, info) {\n const by = args.by as { id?: RegistryId; contract?: AccountId };\n\n // see if we have an ENSv1VirtualRegistry by id\n if (by.id) {\n const virtualKey = cache.keyOfEntity({ __typename: \"ENSv1VirtualRegistry\", id: by.id });\n if (virtualKey && cache.resolve(virtualKey, \"id\")) return virtualKey;\n }\n\n // otherwise, fall back to concrete by id or contract\n const id = by.id ?? (by.contract ? makeConcreteRegistryId(by.contract) : undefined);\n if (id) {\n const v1Key = cache.keyOfEntity({ __typename: \"ENSv1Registry\", id });\n if (v1Key && cache.resolve(v1Key, \"id\")) return v1Key;\n\n const v2Key = cache.keyOfEntity({ __typename: \"ENSv2Registry\", id });\n if (v2Key && cache.resolve(v2Key, \"id\")) return v2Key;\n }\n\n return passthrough(args, cache, info);\n },\n resolver(parent, args, cache, info) {\n const by = args.by as { id?: ResolverId; contract?: AccountId };\n\n if (by.id) return { __typename: \"Resolver\", id: by.id };\n if (by.contract) return { __typename: \"Resolver\", id: makeResolverId(by.contract) };\n\n return passthrough(args, cache, info);\n },\n permissions(parent, args, cache, info) {\n const by = args.by as { id?: PermissionsId; contract?: AccountId };\n\n if (by.id) return { __typename: \"Permissions\", id: by.id };\n if (by.contract) return { __typename: \"Permissions\", id: makePermissionsId(by.contract) };\n\n return passthrough(args, cache, info);\n },\n },\n};\n","export interface IntrospectionTypeRef {\n readonly kind: string;\n readonly name?: string;\n readonly ofType?: IntrospectionTypeRef | null;\n}\n\nexport interface IntrospectionField {\n readonly name: string;\n readonly type: IntrospectionTypeRef;\n}\n\nexport interface IntrospectionType {\n readonly kind: string;\n readonly name: string;\n readonly fields?: readonly IntrospectionField[] | null;\n}\n\nexport interface IntrospectionSchema {\n readonly __schema: {\n readonly types: readonly IntrospectionType[];\n };\n}\n\nexport function unwrapType(type: IntrospectionTypeRef): IntrospectionTypeRef {\n return type.ofType ? unwrapType(type.ofType) : type;\n}\n","import type { Resolver, ScalarObject } from \"@urql/exchange-graphcache\";\n\nimport {\n type IntrospectionSchema,\n type IntrospectionTypeRef,\n unwrapType,\n} from \"./introspection-helpers\";\n\n// graphcache's ResolverResult type doesn't include bigint, but the value is stored\n// in the normalized cache and returned to the consumer as-is, so bigint works at runtime\n// the load-bearing piece of type inference is in packages/enskit/src/react/omnigraph/graphql.ts where\n// the GraphQL BigInt Scalar is mapped to the `bigint` primitive, which is only supported by these\n// runtime local resolvers.\nconst toBigInt: Resolver = (parent, args, cache, info) => {\n const value = parent[info.fieldName];\n if (value == null) return value;\n return BigInt(value as string) as unknown as ScalarObject;\n};\n\nconst toBigIntList: Resolver = (parent, args, cache, info) => {\n const value = parent[info.fieldName];\n if (value == null) return value;\n\n // now we know value is a (string | null)[], so map to a (bigint | null)[]\n return (value as readonly (string | null)[]).map((v) => (v == null ? v : BigInt(v)));\n};\n\nfunction isBigIntType(type: IntrospectionTypeRef) {\n return unwrapType(type).name === \"BigInt\";\n}\n\n// NOTE: the recursion is to handle not-null-wrapped lists\nfunction isListType(type: IntrospectionTypeRef): boolean {\n if (type.kind === \"LIST\") return true;\n return type.ofType ? isListType(type.ofType) : false;\n}\n\n/**\n * Derives local resolvers that parse BigInt scalar fields from cached strings into native bigint.\n */\nexport function localBigIntResolvers(\n schema: IntrospectionSchema,\n): Record<string, Record<string, Resolver>> {\n const resolvers: Record<string, Record<string, Resolver>> = {};\n\n for (const type of schema.__schema.types) {\n if (type.kind !== \"OBJECT\" || type.name.startsWith(\"__\")) continue;\n\n for (const field of type.fields ?? []) {\n if (!isBigIntType(field.type)) continue;\n\n resolvers[type.name] ??= {};\n resolvers[type.name][field.name] = isListType(field.type) ? toBigIntList : toBigInt;\n }\n }\n\n return resolvers;\n}\n","import type { Resolver } from \"@urql/exchange-graphcache\";\nimport { relayPagination } from \"@urql/exchange-graphcache/extras\";\n\nimport { type IntrospectionSchema, unwrapType } from \"./introspection-helpers\";\n\n/**\n * Derives `relayPagination()` local resolvers for all connection fields in the schema.\n */\nexport function localConnectionResolvers(\n schema: IntrospectionSchema,\n): Record<string, Record<string, Resolver>> {\n const resolvers: Record<string, Record<string, Resolver>> = {};\n\n for (const type of schema.__schema.types) {\n if (type.kind !== \"OBJECT\" || type.name.startsWith(\"__\")) continue;\n\n for (const field of type.fields ?? []) {\n const leaf = unwrapType(field.type);\n if (leaf.name?.endsWith(\"Connection\")) {\n resolvers[type.name] ??= {};\n resolvers[type.name][field.name] = relayPagination();\n }\n }\n }\n\n return resolvers;\n}\n","import type { Resolver } from \"@urql/exchange-graphcache\";\n\n/**\n * deep-merge resolver maps so types appearing in both get all their field resolvers\n */\nexport function mergeResolverMaps<RESOLVER extends Resolver>(\n ...maps: Record<string, Record<string, RESOLVER>>[]\n): Record<string, Record<string, RESOLVER>> {\n const result: Record<string, Record<string, RESOLVER>> = {};\n for (const map of maps) {\n for (const [typeName, fields] of Object.entries(map)) {\n result[typeName] = { ...result[typeName], ...fields };\n }\n }\n return result;\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "enskit",
3
- "version": "1.13.1",
3
+ "version": "1.15.0",
4
4
  "type": "module",
5
5
  "description": "The ENS toolkit for React applications",
6
6
  "license": "MIT",
@@ -37,7 +37,7 @@
37
37
  "@urql/core": "^6.0.0",
38
38
  "@urql/exchange-graphcache": "^9.0.0",
39
39
  "urql": "^5.0.1",
40
- "enssdk": "1.13.1"
40
+ "enssdk": "1.15.0"
41
41
  },
42
42
  "peerDependencies": {
43
43
  "gql.tada": "^1.8.10",
@@ -52,9 +52,9 @@
52
52
  "react": "19.2.1",
53
53
  "tsup": "^8.3.6",
54
54
  "typescript": "^5.7.3",
55
- "viem": "^2.22.13",
55
+ "viem": "^2.50.3",
56
56
  "vitest": "^4.0.2",
57
- "@ensnode/shared-configs": "1.13.1"
57
+ "@ensnode/shared-configs": "1.15.0"
58
58
  },
59
59
  "scripts": {
60
60
  "prepublish": "tsup",