UNPKG

apollo-angular

Version:

Use your GraphQL data in your Angular app, with the Apollo Client

1 lines 30.8 kB
{"version":3,"file":"ngApollo.mjs","sources":["../../src/utils.ts","../../src/query-ref.ts","../../src/tokens.ts","../../src/apollo.ts","../../src/apollo-module.ts","../../src/query.ts","../../src/mutation.ts","../../src/subscription.ts","../../src/gql.ts","../../src/ngApollo.ts"],"sourcesContent":["import type { SchedulerAction, SchedulerLike, Subscription } from 'rxjs';\nimport { Observable, observable, queueScheduler } from 'rxjs';\nimport { map, observeOn, startWith } from 'rxjs/operators';\nimport { NgZone } from '@angular/core';\nimport type {\n Observable as AObservable,\n ApolloQueryResult,\n FetchResult,\n ObservableQuery,\n} from '@apollo/client/core';\nimport { MutationResult } from './types';\n\nexport function fromPromise<T>(promiseFn: () => Promise<T>): Observable<T> {\n return new Observable<T>(subscriber => {\n promiseFn().then(\n result => {\n if (!subscriber.closed) {\n subscriber.next(result);\n subscriber.complete();\n }\n },\n error => {\n if (!subscriber.closed) {\n subscriber.error(error);\n }\n },\n );\n\n return () => subscriber.unsubscribe();\n });\n}\n\nexport function useMutationLoading<T>(source: Observable<FetchResult<T>>, enabled: boolean) {\n if (!enabled) {\n return source.pipe(\n map<FetchResult<T>, MutationResult<T>>(result => ({\n ...result,\n loading: false,\n })),\n );\n }\n\n return source.pipe(\n startWith<MutationResult<T>>({\n loading: true,\n }),\n map<MutationResult<T>, MutationResult<T>>(result => ({\n ...result,\n loading: !!result.loading,\n })),\n );\n}\n\nexport class ZoneScheduler implements SchedulerLike {\n constructor(private readonly zone: NgZone) {}\n\n public now = Date.now ? Date.now : () => +new Date();\n\n public schedule<T>(\n work: (this: SchedulerAction<T>, state?: T) => void,\n delay: number = 0,\n state?: T,\n ): Subscription {\n return this.zone.run(() => queueScheduler.schedule(work, delay, state)) as Subscription;\n }\n}\n\n// XXX: Apollo's QueryObservable is not compatible with RxJS\n// TODO: remove it in one of future releases\n// https://github.com/ReactiveX/rxjs/blob/9fb0ce9e09c865920cf37915cc675e3b3a75050b/src/internal/util/subscribeTo.ts#L32\nexport function fixObservable<T>(obs: ObservableQuery<T>): Observable<ApolloQueryResult<T>>;\nexport function fixObservable<T>(obs: AObservable<T>): Observable<T>;\nexport function fixObservable<T>(\n obs: AObservable<T> | ObservableQuery<T>,\n): Observable<ApolloQueryResult<T>> | Observable<T> {\n (obs as any)[observable] = () => obs;\n return obs as any;\n}\n\nexport function wrapWithZone<T>(obs: Observable<T>, ngZone: NgZone): Observable<T> {\n return obs.pipe(observeOn(new ZoneScheduler(ngZone)));\n}\n","import { from, Observable } from 'rxjs';\nimport { NgZone } from '@angular/core';\nimport type {\n ApolloQueryResult,\n FetchMoreQueryOptions,\n MaybeMasked,\n ObservableQuery,\n OperationVariables,\n SubscribeToMoreOptions,\n TypedDocumentNode,\n Unmasked,\n} from '@apollo/client/core';\nimport { NetworkStatus } from '@apollo/client/core';\nimport { EmptyObject, WatchQueryOptions } from './types';\nimport { fixObservable, wrapWithZone } from './utils';\n\nfunction useInitialLoading<T, V extends OperationVariables>(obsQuery: ObservableQuery<T, V>) {\n return function useInitialLoadingOperator<T>(source: Observable<T>): Observable<T> {\n return new Observable(function useInitialLoadingSubscription(subscriber) {\n const currentResult = obsQuery.getCurrentResult();\n const { loading, errors, error, partial, data } = currentResult;\n const { partialRefetch, fetchPolicy } = obsQuery.options;\n\n const hasError = errors || error;\n\n if (\n partialRefetch &&\n partial &&\n (!data || Object.keys(data).length === 0) &&\n fetchPolicy !== 'cache-only' &&\n !loading &&\n !hasError\n ) {\n subscriber.next({\n ...currentResult,\n loading: true,\n networkStatus: NetworkStatus.loading,\n } as any);\n }\n\n return source.subscribe(subscriber);\n });\n };\n}\n\nexport type QueryRefFromDocument<T extends TypedDocumentNode> =\n T extends TypedDocumentNode<infer R, infer V> ? QueryRef<R, V & OperationVariables> : never;\n\nexport class QueryRef<TData, TVariables extends OperationVariables = EmptyObject> {\n public readonly valueChanges: Observable<ApolloQueryResult<TData>>;\n public readonly queryId: ObservableQuery<TData, TVariables>['queryId'];\n\n constructor(\n private readonly obsQuery: ObservableQuery<TData, TVariables>,\n ngZone: NgZone,\n options: WatchQueryOptions<TVariables, TData>,\n ) {\n const wrapped = wrapWithZone(from(fixObservable(this.obsQuery)), ngZone);\n\n this.valueChanges = options.useInitialLoading\n ? wrapped.pipe(useInitialLoading(this.obsQuery))\n : wrapped;\n this.queryId = this.obsQuery.queryId;\n }\n\n // ObservableQuery's methods\n\n public get options(): ObservableQuery<TData, TVariables>['options'] {\n return this.obsQuery.options;\n }\n\n public get variables(): ObservableQuery<TData, TVariables>['variables'] {\n return this.obsQuery.variables;\n }\n\n public result(): ReturnType<ObservableQuery<TData, TVariables>['result']> {\n return this.obsQuery.result();\n }\n\n public getCurrentResult(): ReturnType<ObservableQuery<TData, TVariables>['getCurrentResult']> {\n return this.obsQuery.getCurrentResult();\n }\n\n public getLastResult(): ReturnType<ObservableQuery<TData, TVariables>['getLastResult']> {\n return this.obsQuery.getLastResult();\n }\n\n public getLastError(): ReturnType<ObservableQuery<TData, TVariables>['getLastError']> {\n return this.obsQuery.getLastError();\n }\n\n public resetLastResults(): ReturnType<ObservableQuery<TData, TVariables>['resetLastResults']> {\n return this.obsQuery.resetLastResults();\n }\n\n public refetch(\n variables?: Parameters<ObservableQuery<TData, TVariables>['refetch']>[0],\n ): ReturnType<ObservableQuery<TData, TVariables>['refetch']> {\n return this.obsQuery.refetch(variables);\n }\n\n public fetchMore<TFetchData = TData, TFetchVars extends OperationVariables = TVariables>(\n fetchMoreOptions: FetchMoreQueryOptions<TFetchVars, TFetchData> & {\n updateQuery?: (\n previousQueryResult: Unmasked<TData>,\n options: {\n fetchMoreResult: Unmasked<TFetchData>;\n variables: TFetchVars;\n },\n ) => Unmasked<TData>;\n },\n ): Promise<ApolloQueryResult<MaybeMasked<TFetchData>>> {\n return this.obsQuery.fetchMore(fetchMoreOptions);\n }\n\n public subscribeToMore<\n TSubscriptionData = TData,\n TSubscriptionVariables extends OperationVariables = TVariables,\n >(\n options: SubscribeToMoreOptions<TData, TSubscriptionVariables, TSubscriptionData, TVariables>,\n ): ReturnType<ObservableQuery<TData, TVariables>['subscribeToMore']> {\n return this.obsQuery.subscribeToMore(options);\n }\n\n public updateQuery(\n mapFn: Parameters<ObservableQuery<TData, TVariables>['updateQuery']>[0],\n ): ReturnType<ObservableQuery<TData, TVariables>['updateQuery']> {\n return this.obsQuery.updateQuery(mapFn);\n }\n\n public stopPolling(): ReturnType<ObservableQuery<TData, TVariables>['stopPolling']> {\n return this.obsQuery.stopPolling();\n }\n\n public startPolling(\n pollInterval: Parameters<ObservableQuery<TData, TVariables>['startPolling']>[0],\n ): ReturnType<ObservableQuery<TData, TVariables>['startPolling']> {\n return this.obsQuery.startPolling(pollInterval);\n }\n\n public setOptions(\n opts: Parameters<ObservableQuery<TData, TVariables>['setOptions']>[0],\n ): ReturnType<ObservableQuery<TData, TVariables>['setOptions']> {\n return this.obsQuery.setOptions(opts);\n }\n\n public setVariables(\n variables: Parameters<ObservableQuery<TData, TVariables>['setVariables']>[0],\n ): ReturnType<ObservableQuery<TData, TVariables>['setVariables']> {\n return this.obsQuery.setVariables(variables);\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport type { ApolloClientOptions } from '@apollo/client/core';\nimport type { Flags, NamedOptions } from './types';\n\nexport const APOLLO_FLAGS = new InjectionToken<Flags>('APOLLO_FLAGS');\n\nexport const APOLLO_OPTIONS = new InjectionToken<ApolloClientOptions<any>>('APOLLO_OPTIONS');\n\nexport const APOLLO_NAMED_OPTIONS = new InjectionToken<NamedOptions>('APOLLO_NAMED_OPTIONS');\n","import { from, Observable } from 'rxjs';\nimport { Inject, Injectable, NgZone, Optional } from '@angular/core';\nimport type {\n ApolloClientOptions,\n ApolloQueryResult,\n FetchResult,\n ObservableQuery,\n OperationVariables,\n QueryOptions,\n SubscriptionOptions,\n WatchFragmentResult,\n} from '@apollo/client/core';\nimport { ApolloClient } from '@apollo/client/core';\nimport { QueryRef } from './query-ref';\nimport { APOLLO_FLAGS, APOLLO_NAMED_OPTIONS, APOLLO_OPTIONS } from './tokens';\nimport type {\n EmptyObject,\n ExtraSubscriptionOptions,\n Flags,\n MutationOptions,\n MutationResult,\n NamedOptions,\n WatchFragmentOptions,\n WatchQueryOptions,\n} from './types';\nimport { fixObservable, fromPromise, useMutationLoading, wrapWithZone } from './utils';\n\nexport class ApolloBase<TCacheShape = any> {\n private useInitialLoading: boolean;\n private useMutationLoading: boolean;\n\n constructor(\n protected readonly ngZone: NgZone,\n protected readonly flags?: Flags,\n protected _client?: ApolloClient<TCacheShape>,\n ) {\n this.useInitialLoading = flags?.useInitialLoading ?? false;\n this.useMutationLoading = flags?.useMutationLoading ?? false;\n }\n\n public watchQuery<TData, TVariables extends OperationVariables = EmptyObject>(\n options: WatchQueryOptions<TVariables, TData>,\n ): QueryRef<TData, TVariables> {\n return new QueryRef<TData, TVariables>(\n this.ensureClient().watchQuery<TData, TVariables>({\n ...options,\n }) as ObservableQuery<TData, TVariables>,\n this.ngZone,\n {\n useInitialLoading: this.useInitialLoading,\n ...options,\n },\n );\n }\n\n public query<T, V extends OperationVariables = EmptyObject>(\n options: QueryOptions<V, T>,\n ): Observable<ApolloQueryResult<T>> {\n return fromPromise<ApolloQueryResult<T>>(() => this.ensureClient().query<T, V>({ ...options }));\n }\n\n public mutate<T, V extends OperationVariables = EmptyObject>(\n options: MutationOptions<T, V>,\n ): Observable<MutationResult<T>> {\n return useMutationLoading(\n fromPromise(() => this.ensureClient().mutate<T, V>({ ...options })),\n options.useMutationLoading ?? this.useMutationLoading,\n );\n }\n\n public watchFragment<\n TFragmentData = unknown,\n TVariables extends OperationVariables = EmptyObject,\n >(\n options: WatchFragmentOptions<TFragmentData, TVariables>,\n extra?: ExtraSubscriptionOptions,\n ): Observable<WatchFragmentResult<TFragmentData>> {\n const obs = from(\n fixObservable(this.ensureClient().watchFragment<TFragmentData, TVariables>({ ...options })),\n );\n\n return extra && extra.useZone !== true ? obs : wrapWithZone(obs, this.ngZone);\n }\n\n public subscribe<T, V extends OperationVariables = EmptyObject>(\n options: SubscriptionOptions<V, T>,\n extra?: ExtraSubscriptionOptions,\n ): Observable<FetchResult<T>> {\n const obs = from(fixObservable(this.ensureClient().subscribe<T, V>({ ...options })));\n\n return extra && extra.useZone !== true ? obs : wrapWithZone(obs, this.ngZone);\n }\n\n /**\n * Get an instance of ApolloClient\n */\n public get client(): ApolloClient<TCacheShape> {\n return this.ensureClient();\n }\n\n /**\n * Set a new instance of ApolloClient\n * Remember to clean up the store before setting a new client.\n *\n * @param client ApolloClient instance\n */\n public set client(client: ApolloClient<TCacheShape>) {\n if (this._client) {\n throw new Error('Client has been already defined');\n }\n\n this._client = client;\n }\n\n private ensureClient(): ApolloClient<TCacheShape> {\n this.checkInstance();\n\n return this._client!;\n }\n\n private checkInstance(): this is { _client: ApolloClient<TCacheShape> } {\n if (this._client) {\n return true;\n } else {\n throw new Error('Client has not been defined yet');\n }\n }\n}\n\n@Injectable()\nexport class Apollo extends ApolloBase<any> {\n private map: Map<string, ApolloBase<any>> = new Map<string, ApolloBase<any>>();\n\n constructor(\n ngZone: NgZone,\n @Optional()\n @Inject(APOLLO_OPTIONS)\n apolloOptions?: ApolloClientOptions<any>,\n @Inject(APOLLO_NAMED_OPTIONS) @Optional() apolloNamedOptions?: NamedOptions,\n @Inject(APOLLO_FLAGS) @Optional() flags?: Flags,\n ) {\n super(ngZone, flags);\n\n if (apolloOptions) {\n this.createDefault(apolloOptions);\n }\n\n if (apolloNamedOptions && typeof apolloNamedOptions === 'object') {\n for (let name in apolloNamedOptions) {\n if (apolloNamedOptions.hasOwnProperty(name)) {\n const options = apolloNamedOptions[name];\n this.create(options, name);\n }\n }\n }\n }\n\n /**\n * Create an instance of ApolloClient\n * @param options Options required to create ApolloClient\n * @param name client's name\n */\n public create<TCacheShape>(options: ApolloClientOptions<TCacheShape>, name?: string): void {\n if (isNamed(name)) {\n this.createNamed<TCacheShape>(name, options);\n } else {\n this.createDefault<TCacheShape>(options);\n }\n }\n\n /**\n * Use a default ApolloClient\n */\n public default(): ApolloBase<any> {\n return this;\n }\n\n /**\n * Use a named ApolloClient\n * @param name client's name\n */\n public use(name: string): ApolloBase<any> {\n if (isNamed(name)) {\n return this.map.get(name)!;\n } else {\n return this.default();\n }\n }\n\n /**\n * Create a default ApolloClient, same as `apollo.create(options)`\n * @param options ApolloClient's options\n */\n public createDefault<TCacheShape>(options: ApolloClientOptions<TCacheShape>): void {\n if (this._client) {\n throw new Error('Apollo has been already created.');\n }\n\n this.client = this.ngZone.runOutsideAngular(() => new ApolloClient<TCacheShape>(options));\n }\n\n /**\n * Create a named ApolloClient, same as `apollo.create(options, name)`\n * @param name client's name\n * @param options ApolloClient's options\n */\n public createNamed<TCacheShape>(name: string, options: ApolloClientOptions<TCacheShape>): void {\n if (this.map.has(name)) {\n throw new Error(`Client ${name} has been already created`);\n }\n this.map.set(\n name,\n new ApolloBase(\n this.ngZone,\n this.flags,\n this.ngZone.runOutsideAngular(() => new ApolloClient<TCacheShape>(options)),\n ),\n );\n }\n\n /**\n * Remember to clean up the store before removing a client\n * @param name client's name\n */\n public removeClient(name?: string): void {\n if (isNamed(name)) {\n this.map.delete(name);\n } else {\n this._client = undefined;\n }\n }\n}\n\nfunction isNamed(name?: string): name is string {\n return !!name && name !== 'default';\n}\n","import { Provider } from '@angular/core';\nimport { ApolloClientOptions } from '@apollo/client/core';\nimport { Apollo } from './apollo';\nimport { APOLLO_FLAGS, APOLLO_NAMED_OPTIONS, APOLLO_OPTIONS } from './tokens';\nimport { Flags, NamedOptions } from './types';\n\nexport function provideApollo<TCacheShape = any>(\n optionsFactory: () => ApolloClientOptions<TCacheShape>,\n flags: Flags = {},\n): Provider {\n return [\n Apollo,\n {\n provide: APOLLO_OPTIONS,\n useFactory: optionsFactory,\n },\n {\n provide: APOLLO_FLAGS,\n useValue: flags,\n },\n ];\n}\n\nexport function provideNamedApollo(\n optionsFactory: () => NamedOptions,\n flags: Flags = {},\n): Provider {\n return [\n Apollo,\n {\n provide: APOLLO_NAMED_OPTIONS,\n useFactory: optionsFactory,\n },\n {\n provide: APOLLO_FLAGS,\n useValue: flags,\n },\n ];\n}\n","import type { DocumentNode } from 'graphql';\nimport type { Observable } from 'rxjs';\nimport { Injectable } from '@angular/core';\nimport type { ApolloQueryResult, OperationVariables, TypedDocumentNode } from '@apollo/client/core';\nimport { Apollo } from './apollo';\nimport { QueryRef } from './query-ref';\nimport { EmptyObject, QueryOptionsAlone, WatchQueryOptionsAlone } from './types';\n\n@Injectable()\nexport abstract class Query<T = {}, V extends OperationVariables = EmptyObject> {\n public abstract readonly document: DocumentNode | TypedDocumentNode<T, V>;\n public client = 'default';\n\n constructor(protected readonly apollo: Apollo) {}\n\n public watch(variables?: V, options?: WatchQueryOptionsAlone<V, T>): QueryRef<T, V> {\n return this.apollo.use(this.client).watchQuery<T, V>({\n ...options,\n variables,\n query: this.document,\n });\n }\n\n public fetch(variables?: V, options?: QueryOptionsAlone<V, T>): Observable<ApolloQueryResult<T>> {\n return this.apollo.use(this.client).query<T, V>({\n ...options,\n variables,\n query: this.document,\n });\n }\n}\n","import type { DocumentNode } from 'graphql';\nimport type { Observable } from 'rxjs';\nimport { Injectable } from '@angular/core';\nimport type { OperationVariables, TypedDocumentNode } from '@apollo/client/core';\nimport { Apollo } from './apollo';\nimport type { EmptyObject, MutationOptionsAlone, MutationResult } from './types';\n\n@Injectable()\nexport abstract class Mutation<T = {}, V extends OperationVariables = EmptyObject> {\n public abstract readonly document: DocumentNode | TypedDocumentNode<T, V>;\n public client = 'default';\n\n constructor(protected readonly apollo: Apollo) {}\n\n public mutate(\n variables?: V,\n options?: MutationOptionsAlone<T, V>,\n ): Observable<MutationResult<T>> {\n return this.apollo.use(this.client).mutate<T, V>({\n ...options,\n variables,\n mutation: this.document,\n });\n }\n}\n","import type { DocumentNode } from 'graphql';\nimport type { Observable } from 'rxjs';\nimport { Injectable } from '@angular/core';\nimport type { FetchResult, OperationVariables, TypedDocumentNode } from '@apollo/client/core';\nimport { Apollo } from './apollo';\nimport { EmptyObject, ExtraSubscriptionOptions, SubscriptionOptionsAlone } from './types';\n\n@Injectable()\nexport abstract class Subscription<T = any, V extends OperationVariables = EmptyObject> {\n public abstract readonly document: DocumentNode | TypedDocumentNode<T, V>;\n public client = 'default';\n\n constructor(protected readonly apollo: Apollo) {}\n\n public subscribe(\n variables?: V,\n options?: SubscriptionOptionsAlone<V, T>,\n extra?: ExtraSubscriptionOptions,\n ): Observable<FetchResult<T>> {\n return this.apollo.use(this.client).subscribe<T, V>(\n {\n ...options,\n variables,\n query: this.document,\n },\n extra,\n );\n }\n}\n","import { gql as gqlTag, TypedDocumentNode } from '@apollo/client/core';\n\nconst typedGQLTag: <Result, Variables>(\n literals: ReadonlyArray<string> | Readonly<string>,\n ...placeholders: any[]\n) => TypedDocumentNode<Result, Variables> = gqlTag;\n\nexport const gql = typedGQLTag;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.Apollo","gqlTag"],"mappings":";;;;;;AAYM,SAAU,WAAW,CAAI,SAA2B,EAAA;AACxD,IAAA,OAAO,IAAI,UAAU,CAAI,UAAU,IAAG;AACpC,QAAA,SAAS,EAAE,CAAC,IAAI,CACd,MAAM,IAAG;AACP,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AACtB,gBAAA,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACxB,UAAU,CAAC,QAAQ,EAAE,CAAC;aACvB;SACF,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AACtB,gBAAA,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aACzB;AACH,SAAC,CACF,CAAC;AAEF,QAAA,OAAO,MAAM,UAAU,CAAC,WAAW,EAAE,CAAC;AACxC,KAAC,CAAC,CAAC;AACL,CAAC;AAEe,SAAA,kBAAkB,CAAI,MAAkC,EAAE,OAAgB,EAAA;IACxF,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,MAAM,CAAC,IAAI,CAChB,GAAG,CAAoC,MAAM,KAAK;AAChD,YAAA,GAAG,MAAM;AACT,YAAA,OAAO,EAAE,KAAK;SACf,CAAC,CAAC,CACJ,CAAC;KACH;AAED,IAAA,OAAO,MAAM,CAAC,IAAI,CAChB,SAAS,CAAoB;AAC3B,QAAA,OAAO,EAAE,IAAI;AACd,KAAA,CAAC,EACF,GAAG,CAAuC,MAAM,KAAK;AACnD,QAAA,GAAG,MAAM;AACT,QAAA,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO;KAC1B,CAAC,CAAC,CACJ,CAAC;AACJ,CAAC;MAEY,aAAa,CAAA;AACK,IAAA,IAAA,CAAA;AAA7B,IAAA,WAAA,CAA6B,IAAY,EAAA;QAAZ,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;KAAI;IAEtC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;AAE9C,IAAA,QAAQ,CACb,IAAmD,EACnD,KAAgB,GAAA,CAAC,EACjB,KAAS,EAAA;QAET,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAiB,CAAC;KACzF;AACF,CAAA;AAOK,SAAU,aAAa,CAC3B,GAAwC,EAAA;IAEvC,GAAW,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC;AACrC,IAAA,OAAO,GAAU,CAAC;AACpB,CAAC;AAEe,SAAA,YAAY,CAAI,GAAkB,EAAE,MAAc,EAAA;AAChE,IAAA,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACxD;;ACjEA,SAAS,iBAAiB,CAAkC,QAA+B,EAAA;IACzF,OAAO,SAAS,yBAAyB,CAAI,MAAqB,EAAA;AAChE,QAAA,OAAO,IAAI,UAAU,CAAC,SAAS,6BAA6B,CAAC,UAAU,EAAA;AACrE,YAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAC;AAClD,YAAA,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC;YAChE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC;AAEzD,YAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,KAAK,CAAC;AAEjC,YAAA,IACE,cAAc;gBACd,OAAO;AACP,iBAAC,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AACzC,gBAAA,WAAW,KAAK,YAAY;AAC5B,gBAAA,CAAC,OAAO;gBACR,CAAC,QAAQ,EACT;gBACA,UAAU,CAAC,IAAI,CAAC;AACd,oBAAA,GAAG,aAAa;AAChB,oBAAA,OAAO,EAAE,IAAI;oBACb,aAAa,EAAE,aAAa,CAAC,OAAO;AAC9B,iBAAA,CAAC,CAAC;aACX;AAED,YAAA,OAAO,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AACtC,SAAC,CAAC,CAAC;AACL,KAAC,CAAC;AACJ,CAAC;MAKY,QAAQ,CAAA;AAKA,IAAA,QAAA,CAAA;AAJH,IAAA,YAAY,CAAuC;AACnD,IAAA,OAAO,CAAgD;AAEvE,IAAA,WAAA,CACmB,QAA4C,EAC7D,MAAc,EACd,OAA6C,EAAA;QAF5B,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAoC;AAI7D,QAAA,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAEzE,QAAA,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,iBAAiB;cACzC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;cAC9C,OAAO,CAAC;QACZ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;KACtC;;AAID,IAAA,IAAW,OAAO,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;KAC9B;AAED,IAAA,IAAW,SAAS,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;KAChC;IAEM,MAAM,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;KAC/B;IAEM,gBAAgB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;KACzC;IAEM,aAAa,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;KACtC;IAEM,YAAY,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;KACrC;IAEM,gBAAgB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;KACzC;AAEM,IAAA,OAAO,CACZ,SAAwE,EAAA;QAExE,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;KACzC;AAEM,IAAA,SAAS,CACd,gBAQC,EAAA;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;KAClD;AAEM,IAAA,eAAe,CAIpB,OAA6F,EAAA;QAE7F,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;KAC/C;AAEM,IAAA,WAAW,CAChB,KAAuE,EAAA;QAEvE,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KACzC;IAEM,WAAW,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;KACpC;AAEM,IAAA,YAAY,CACjB,YAA+E,EAAA;QAE/E,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;KACjD;AAEM,IAAA,UAAU,CACf,IAAqE,EAAA;QAErE,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;KACvC;AAEM,IAAA,YAAY,CACjB,SAA4E,EAAA;QAE5E,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;KAC9C;AACF;;MCnJY,YAAY,GAAG,IAAI,cAAc,CAAQ,cAAc,EAAE;MAEzD,cAAc,GAAG,IAAI,cAAc,CAA2B,gBAAgB,EAAE;MAEhF,oBAAoB,GAAG,IAAI,cAAc,CAAe,sBAAsB;;MCmB9E,UAAU,CAAA;AAKA,IAAA,MAAA,CAAA;AACA,IAAA,KAAA,CAAA;AACT,IAAA,OAAA,CAAA;AANJ,IAAA,iBAAiB,CAAU;AAC3B,IAAA,kBAAkB,CAAU;AAEpC,IAAA,WAAA,CACqB,MAAc,EACd,KAAa,EACtB,OAAmC,EAAA;QAF1B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAK,CAAA,KAAA,GAAL,KAAK,CAAQ;QACtB,IAAO,CAAA,OAAA,GAAP,OAAO,CAA4B;QAE7C,IAAI,CAAC,iBAAiB,GAAG,KAAK,EAAE,iBAAiB,IAAI,KAAK,CAAC;QAC3D,IAAI,CAAC,kBAAkB,GAAG,KAAK,EAAE,kBAAkB,IAAI,KAAK,CAAC;KAC9D;AAEM,IAAA,UAAU,CACf,OAA6C,EAAA;QAE7C,OAAO,IAAI,QAAQ,CACjB,IAAI,CAAC,YAAY,EAAE,CAAC,UAAU,CAAoB;AAChD,YAAA,GAAG,OAAO;AACX,SAAA,CAAuC,EACxC,IAAI,CAAC,MAAM,EACX;YACE,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;AACzC,YAAA,GAAG,OAAO;AACX,SAAA,CACF,CAAC;KACH;AAEM,IAAA,KAAK,CACV,OAA2B,EAAA;AAE3B,QAAA,OAAO,WAAW,CAAuB,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,KAAK,CAAO,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC;KACjG;AAEM,IAAA,MAAM,CACX,OAA8B,EAAA;AAE9B,QAAA,OAAO,kBAAkB,CACvB,WAAW,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,CAAO,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,EACnE,OAAO,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,CACtD,CAAC;KACH;IAEM,aAAa,CAIlB,OAAwD,EACxD,KAAgC,EAAA;QAEhC,MAAM,GAAG,GAAG,IAAI,CACd,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,aAAa,CAA4B,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAC5F,CAAC;QAEF,OAAO,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,GAAG,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;KAC/E;IAEM,SAAS,CACd,OAAkC,EAClC,KAAgC,EAAA;QAEhC,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,SAAS,CAAO,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAErF,OAAO,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,GAAG,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;KAC/E;AAED;;AAEG;AACH,IAAA,IAAW,MAAM,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;KAC5B;AAED;;;;;AAKG;IACH,IAAW,MAAM,CAAC,MAAiC,EAAA;AACjD,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;SACpD;AAED,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;KACvB;IAEO,YAAY,GAAA;QAClB,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,OAAO,IAAI,CAAC,OAAQ,CAAC;KACtB;IAEO,aAAa,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,OAAO,IAAI,CAAC;SACb;aAAM;AACL,YAAA,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;SACpD;KACF;AACF,CAAA;AAGK,MAAO,MAAO,SAAQ,UAAe,CAAA;AACjC,IAAA,GAAG,GAAiC,IAAI,GAAG,EAA2B,CAAC;AAE/E,IAAA,WAAA,CACE,MAAc,EAGd,aAAwC,EACE,kBAAiC,EACzC,KAAa,EAAA;AAE/C,QAAA,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAErB,IAAI,aAAa,EAAE;AACjB,YAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;SACnC;AAED,QAAA,IAAI,kBAAkB,IAAI,OAAO,kBAAkB,KAAK,QAAQ,EAAE;AAChE,YAAA,KAAK,IAAI,IAAI,IAAI,kBAAkB,EAAE;AACnC,gBAAA,IAAI,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;AAC3C,oBAAA,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;AACzC,oBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;iBAC5B;aACF;SACF;KACF;AAED;;;;AAIG;IACI,MAAM,CAAc,OAAyC,EAAE,IAAa,EAAA;AACjF,QAAA,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE;AACjB,YAAA,IAAI,CAAC,WAAW,CAAc,IAAI,EAAE,OAAO,CAAC,CAAC;SAC9C;aAAM;AACL,YAAA,IAAI,CAAC,aAAa,CAAc,OAAO,CAAC,CAAC;SAC1C;KACF;AAED;;AAEG;IACI,OAAO,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC;KACb;AAED;;;AAGG;AACI,IAAA,GAAG,CAAC,IAAY,EAAA;AACrB,QAAA,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE;YACjB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;SAC5B;aAAM;AACL,YAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;SACvB;KACF;AAED;;;AAGG;AACI,IAAA,aAAa,CAAc,OAAyC,EAAA;AACzE,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;SACrD;AAED,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,IAAI,YAAY,CAAc,OAAO,CAAC,CAAC,CAAC;KAC3F;AAED;;;;AAIG;IACI,WAAW,CAAc,IAAY,EAAE,OAAyC,EAAA;QACrF,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACtB,YAAA,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,CAAA,yBAAA,CAA2B,CAAC,CAAC;SAC5D;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CACV,IAAI,EACJ,IAAI,UAAU,CACZ,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,IAAI,YAAY,CAAc,OAAO,CAAC,CAAC,CAC5E,CACF,CAAC;KACH;AAED;;;AAGG;AACI,IAAA,YAAY,CAAC,IAAa,EAAA;AAC/B,QAAA,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE;AACjB,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACvB;aAAM;AACL,YAAA,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;SAC1B;KACF;AApGU,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAM,EAMP,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,cAAc,EAEd,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,oBAAoB,6BACpB,YAAY,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;2GATX,MAAM,EAAA,CAAA,CAAA;;2FAAN,MAAM,EAAA,UAAA,EAAA,CAAA;kBADlB,UAAU;;0BAMN,QAAQ;;0BACR,MAAM;2BAAC,cAAc,CAAA;;0BAErB,MAAM;2BAAC,oBAAoB,CAAA;;0BAAG,QAAQ;;0BACtC,MAAM;2BAAC,YAAY,CAAA;;0BAAG,QAAQ;;AA8FnC,SAAS,OAAO,CAAC,IAAa,EAAA;AAC5B,IAAA,OAAO,CAAC,CAAC,IAAI,IAAI,IAAI,KAAK,SAAS,CAAC;AACtC;;SCrOgB,aAAa,CAC3B,cAAsD,EACtD,QAAe,EAAE,EAAA;IAEjB,OAAO;QACL,MAAM;AACN,QAAA;AACE,YAAA,OAAO,EAAE,cAAc;AACvB,YAAA,UAAU,EAAE,cAAc;AAC3B,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,YAAY;AACrB,YAAA,QAAQ,EAAE,KAAK;AAChB,SAAA;KACF,CAAC;AACJ,CAAC;SAEe,kBAAkB,CAChC,cAAkC,EAClC,QAAe,EAAE,EAAA;IAEjB,OAAO;QACL,MAAM;AACN,QAAA;AACE,YAAA,OAAO,EAAE,oBAAoB;AAC7B,YAAA,UAAU,EAAE,cAAc;AAC3B,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,YAAY;AACrB,YAAA,QAAQ,EAAE,KAAK;AAChB,SAAA;KACF,CAAC;AACJ;;MC7BsB,KAAK,CAAA;AAIM,IAAA,MAAA,CAAA;IAFxB,MAAM,GAAG,SAAS,CAAC;AAE1B,IAAA,WAAA,CAA+B,MAAc,EAAA;QAAd,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;KAAI;IAE1C,KAAK,CAAC,SAAa,EAAE,OAAsC,EAAA;AAChE,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,UAAU,CAAO;AACnD,YAAA,GAAG,OAAO;YACV,SAAS;YACT,KAAK,EAAE,IAAI,CAAC,QAAQ;AACrB,SAAA,CAAC,CAAC;KACJ;IAEM,KAAK,CAAC,SAAa,EAAE,OAAiC,EAAA;AAC3D,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAO;AAC9C,YAAA,GAAG,OAAO;YACV,SAAS;YACT,KAAK,EAAE,IAAI,CAAC,QAAQ;AACrB,SAAA,CAAC,CAAC;KACJ;uGApBmB,KAAK,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;2GAAL,KAAK,EAAA,CAAA,CAAA;;2FAAL,KAAK,EAAA,UAAA,EAAA,CAAA;kBAD1B,UAAU;;;MCAW,QAAQ,CAAA;AAIG,IAAA,MAAA,CAAA;IAFxB,MAAM,GAAG,SAAS,CAAC;AAE1B,IAAA,WAAA,CAA+B,MAAc,EAAA;QAAd,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;KAAI;IAE1C,MAAM,CACX,SAAa,EACb,OAAoC,EAAA;AAEpC,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAO;AAC/C,YAAA,GAAG,OAAO;YACV,SAAS;YACT,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACxB,SAAA,CAAC,CAAC;KACJ;uGAfmB,QAAQ,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;2GAAR,QAAQ,EAAA,CAAA,CAAA;;2FAAR,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAD7B,UAAU;;;MCCW,YAAY,CAAA;AAID,IAAA,MAAA,CAAA;IAFxB,MAAM,GAAG,SAAS,CAAC;AAE1B,IAAA,WAAA,CAA+B,MAAc,EAAA;QAAd,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;KAAI;AAE1C,IAAA,SAAS,CACd,SAAa,EACb,OAAwC,EACxC,KAAgC,EAAA;AAEhC,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,CAC3C;AACE,YAAA,GAAG,OAAO;YACV,SAAS;YACT,KAAK,EAAE,IAAI,CAAC,QAAQ;SACrB,EACD,KAAK,CACN,CAAC;KACH;uGAnBmB,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;2GAAZ,YAAY,EAAA,CAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBADjC,UAAU;;;ACLX,MAAM,WAAW,GAG2BC,KAAM,CAAC;AAE5C,MAAM,GAAG,GAAG;;ACPnB;;AAEG;;;;"}