zova-module-a-model 5.1.9 → 5.1.11
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bean.model.useQuery.d.ts","sourceRoot":"","sources":["../../../src/bean/bean.model/bean.model.useQuery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,yBAAyB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC/I,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"bean.model.useQuery.d.ts","sourceRoot":"","sources":["../../../src/bean/bean.model/bean.model.useQuery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,yBAAyB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC/I,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,KAAK,CAAC;AAM5C,OAAO,KAAK,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAGtG,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,qBAAa,iBAAkB,SAAQ,cAAc;IACnD,SAAS,CAAC,YAAY,GAAG,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE,KAAK,GAAG,YAAY,EAAE,SAAS,SAAS,QAAQ,GAAG,QAAQ,EAClH,OAAO,EAAE,4BAA4B,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,EAC7E,WAAW,CAAC,EAAE,WAAW,GACxB,gBAAgB,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACtD,SAAS,CAAC,YAAY,GAAG,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE,KAAK,GAAG,YAAY,EAAE,SAAS,SAAS,QAAQ,GAAG,QAAQ,EAClH,OAAO,EAAE,0BAA0B,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,EAC3E,WAAW,CAAC,EAAE,WAAW,GACxB,gBAAgB,CAAC,yBAAyB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC7D,SAAS,CAAC,YAAY,GAAG,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE,KAAK,GAAG,YAAY,EAAE,SAAS,SAAS,QAAQ,GAAG,QAAQ,EAClH,OAAO,EAAE,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,CAAC,EAC9E,WAAW,CAAC,EAAE,WAAW,GACxB,gBAAgB,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;CAoCvD"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { BeanBase, BeanInfo, BeanScopeBase, BeanSimple, SymbolBeanFullName, Virtual, cast, createBeanDecorator, deepExtend, useCustomRef } from "zova";
|
|
2
2
|
import { Bean, Scope, Service } from "zova-module-a-bean";
|
|
3
3
|
import { QueryCache, QueryClient, VueQueryPlugin, defaultShouldDehydrateQuery, dehydrate, hashKey, hydrate, useMutation, useQuery, useQueryClient } from "@tanstack/vue-query";
|
|
4
|
+
import { checkErrorJwtExpired } from "@cabloy/utils";
|
|
4
5
|
import localforage from "localforage";
|
|
5
6
|
import { experimental_createQueryPersister } from "@tanstack/query-persist-client-core";
|
|
6
7
|
import { markRaw } from "vue";
|
|
@@ -309,7 +310,7 @@ var BeanModelUseQuery = class extends BeanModelQuery {
|
|
|
309
310
|
if (!cast(options).meta?.disableErrorEffect) optionsDefault.throwOnError = (error, query) => {
|
|
310
311
|
let errorInfo = cast(options).meta?.errorInfo;
|
|
311
312
|
if (typeof errorInfo === "function") errorInfo = errorInfo(error, query);
|
|
312
|
-
if (!error.message.includes("useQuery:")) error.message = `useQuery: [${queryKey.join(", ")}]: ${error.message}`;
|
|
313
|
+
if (!error.message.includes("useQuery:") && !checkErrorJwtExpired(error)) error.message = `useQuery: [${queryKey.join(", ")}]: ${error.message}`;
|
|
313
314
|
this.$errorHandler(error, errorInfo ?? "useQuery");
|
|
314
315
|
return false;
|
|
315
316
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/types/query.ts","../src/.metadata/this.ts","../src/common/cookieWrapper.ts","../src/bean/bean.model/bean.model.last.ts","../src/bean/bean.model/bean.model.persister.ts","../src/bean/bean.model/bean.model.local.ts","../src/bean/bean.model/bean.model.cookie.ts","../src/bean/bean.model/bean.model.query.ts","../src/bean/bean.model/bean.model.useQuery.ts","../src/bean/bean.model/bean.model.useState.ts","../src/bean/bean.model/bean.model.useStateGeneral.ts","../src/bean/bean.model/bean.model.useMutation.ts","../src/bean/bean.model/bean.model.first.ts","../src/bean/bean.modelBase.ts","../src/service/storage.ts","../src/config/config.ts","../src/monkey.ts","../src/.metadata/index.ts","../src/lib/model.ts","../src/lib/utils.ts"],"sourcesContent":["import type { DefaultError, DehydratedState, Query, QueryKey, useMutation, useQuery, useQueryClient } from '@tanstack/vue-query';\nimport type { DebuggerOptions, UnwrapNestedRefs } from 'vue';\n\nimport 'zova';\n\ndeclare module 'zova' {\n export interface BeanBase {\n $queryClient: ReturnType<typeof useQueryClient>;\n }\n}\n\ndeclare module 'zova-module-a-ssr' {\n export interface SSRContextStateDefer {\n query: DehydratedState;\n }\n}\n\ndeclare module '@tanstack/vue-query' {\n export interface Register {\n queryMeta: MyQueryMeta;\n mutationMeta: MyMutationMeta;\n }\n}\n\nexport type { UseQueryOptions } from '@tanstack/vue-query';\n\nexport interface MyQueryMetaBase extends Record<string, unknown> {\n defaultData?: (() => any) | any;\n ssr?: QueryMetaSSR;\n persister?: QueryMetaPersister | boolean;\n disableErrorEffect?: boolean;\n disableSuspenseOnInit?: boolean;\n}\n\nexport interface MyQueryMeta extends MyQueryMetaBase {\n errorInfo?: ((error, query) => string) | string;\n}\n\nexport interface MyMutationMeta extends MyQueryMetaBase {\n errorInfo?: ((error, variables, context) => string) | string;\n}\n\nexport interface QueryMetaSSR {\n /** default is true */\n dehydrate?: boolean;\n}\n\nexport type QueryMetaPersisterStorage = 'cookie' | 'local' | 'db' | undefined;\n\nexport type QueryMetaPersisterCookieType = 'auto' | 'boolean' | 'number' | 'date' | 'string' | undefined;\n\nexport type StateType = 'db' | 'local' | 'cookie' | 'mem' | 'data';\n\nexport type StaleTime = number;\nexport type StaleTimeFunction<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> =\n | StaleTime\n | ((query: Query<TQueryFnData, TError, TData, TQueryKey>) => StaleTime);\n\nexport type MaxAgeTime = StaleTime;\nexport type MaxAgeTimeFunction<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = StaleTimeFunction<TQueryFnData, TError, TData, TQueryKey>;\n\nexport interface QueryMetaPersister {\n /** default is false */\n sync?: boolean;\n /** default is db if async, local if sync */\n storage?: QueryMetaPersisterStorage;\n /** default is false if db, true if local/cookie */\n storageKeySimplify?: boolean;\n /** default is 24 hours */\n maxAge?: MaxAgeTime;\n /**\n * How to serialize the data to storage.\n * @default `JSON.stringify`\n */\n serialize?: (persistedQuery: any, serializeDefault: (persistedQuery: any) => any) => any;\n serializeDefault?: (persistedQuery: any) => any;\n /**\n * How to deserialize the data from storage.\n * @default `JSON.parse`\n */\n deserialize?: (cachedString: any, deserializeDefault: (cachedString: any) => any) => any;\n deserializeDefault?: (cachedString: any) => any;\n prefix?: string;\n buster?: string;\n cookieType?: QueryMetaPersisterCookieType;\n refetchOnRestore?: boolean | 'always';\n}\n\nexport type DataQuery<TData> = UnwrapNestedRefs<ReturnType<typeof useQuery<TData | undefined, Error | null>>>;\n\nexport type DataMutation<TData = unknown, TVariables = void, TContext = unknown> = UnwrapNestedRefs<\n ReturnType<typeof useMutation<TData, DefaultError, TVariables, TContext>>\n>;\n\nexport function resolveStaleTime<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n staleTime: undefined | StaleTimeFunction<TQueryFnData, TError, TData, TQueryKey>,\n query: Query<TQueryFnData, TError, TData, TQueryKey>,\n): StaleTime | undefined {\n return typeof staleTime === 'function' ? staleTime(query) : staleTime;\n}\n\nexport function resolveMaxAgeTime<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n maxAge: undefined | MaxAgeTimeFunction<TQueryFnData, TError, TData, TQueryKey>,\n query: Query<TQueryFnData, TError, TData, TQueryKey>,\n): MaxAgeTime | undefined {\n return typeof maxAge === 'function' ? maxAge(query) : maxAge;\n}\n\nexport type UseQueryComputedFn<TDATA> = (oldValue?: TDATA) => TDATA;\n\nexport interface UseQueryComputedOptions<TDATA, TQueryKey> {\n queryKey: TQueryKey;\n queryFn: UseQueryComputedFn<TDATA>;\n debugOptions?: DebuggerOptions;\n}\n","export const __ThisModule__ = 'a-model';\nexport { ScopeModuleAModel as ScopeModule } from './index.js';\n","import type { Query } from '@tanstack/vue-query';\nimport type { CookieOptions } from 'zova';\n\nimport { BeanSimple } from 'zova';\n\nimport type { QueryMetaPersister } from '../types/index.js';\n\nimport { __ThisModule__ } from '../.metadata/this.js';\nimport { resolveMaxAgeTime } from '../types/index.js';\n\nexport class CookieWrapper extends BeanSimple {\n options: QueryMetaPersister;\n query: Query;\n\n protected __init__(options: QueryMetaPersister, query: Query) {\n this.options = options;\n this.query = query;\n }\n\n getItem(key: string): string | undefined {\n return this.app.meta.cookie.getItem(key);\n }\n\n setItem(key: string, value: string): void {\n const configScope = this.bean.scope(__ThisModule__).config;\n const opts: CookieOptions = { ...configScope.persister.cookie.options };\n let maxAge = resolveMaxAgeTime(this.options.maxAge, this.query);\n if (maxAge !== undefined) {\n if (maxAge === Infinity) maxAge = 1000 * 60 * 60 * 24 * 365;\n opts.expires = new Date(Date.now() + maxAge);\n }\n this.app.meta.cookie.setItem(key, value, opts);\n }\n\n removeItem(key: string): void {\n this.app.meta.cookie.removeItem(key);\n }\n}\n","import { BeanBase, cast } from 'zova';\n\nimport type { ScopeModule } from '../../.metadata/this.js';\nimport type { IDecoratorModelOptions } from '../../types/model.js';\nimport type { BeanModelBase } from '../bean.modelBase.js';\n\nimport { __ThisModule__ } from '../../.metadata/this.js';\n\nexport class BeanModelLast extends BeanBase {\n public selector: string;\n\n constructor(selector?: unknown) {\n super();\n if (this.$onionOptions?.enableSelector) {\n this.selector = (selector as string) ?? '';\n }\n }\n\n protected async __init__(_selector?: unknown) {\n // do nothing\n }\n\n public get $onionOptions(): IDecoratorModelOptions | undefined {\n return super.$onionOptions as IDecoratorModelOptions | undefined;\n }\n\n get self() {\n return cast<BeanModelBase>(this);\n }\n\n get scopeSelf(): ScopeModule {\n return this.bean.scope(__ThisModule__);\n }\n}\n","import type { Query, QueryKey } from '@tanstack/vue-query';\n\nimport { experimental_createQueryPersister } from '@tanstack/query-persist-client-core';\nimport localforage from 'localforage';\nimport { SymbolBeanFullName } from 'zova';\n\nimport type { QueryMetaPersister } from '../../types/index.js';\n\nimport { CookieWrapper } from '../../common/cookieWrapper.js';\nimport { resolveMaxAgeTime } from '../../types/index.js';\nimport { BeanModelLast } from './bean.model.last.js';\n\nexport class BeanModelPersister extends BeanModelLast {\n private _persisterLoad_inner<T>(storage: Storage, storageKey: string, storedData: any, query: Query, options: QueryMetaPersister): T | undefined {\n if (!storedData) return undefined;\n const persistedQuery = options.deserialize\n ? options.deserialize(storedData as string, options.deserializeDefault!)\n : options.deserializeDefault!(storedData as string);\n\n if (persistedQuery.state.dataUpdatedAt) {\n const queryAge = Date.now() - persistedQuery.state.dataUpdatedAt;\n const expired = queryAge > (resolveMaxAgeTime(options.maxAge, query) ?? Infinity);\n const busted = persistedQuery.buster !== options.buster;\n if (expired || busted) {\n storage.removeItem(storageKey);\n } else {\n // Set proper updatedAt, since resolving in the first pass overrides those values\n query.setState({\n dataUpdatedAt: persistedQuery.state.dataUpdatedAt,\n errorUpdatedAt: persistedQuery.state.errorUpdatedAt,\n });\n return persistedQuery.state.data as T;\n }\n } else {\n storage.removeItem(storageKey);\n }\n }\n\n $persisterLoad<T>(queryKey: QueryKey): Promise<T | undefined> | T | undefined {\n const query = this.self.$queryFind({ queryKey });\n if (!query) return undefined;\n const options = this._adjustPersisterOptions(query.meta?.persister);\n if (!options) return undefined;\n const storage = this._getPersisterStorage(options, query);\n if (!storage) return undefined;\n const storageKey = this._getPersisterStorageKey(options, query);\n try {\n const storedData = storage.getItem(storageKey);\n if (options.sync) {\n return this._persisterLoad_inner(storage as any, storageKey, storedData, query, options);\n } else {\n return (storedData as Promise<T>).then(storedData => {\n return this._persisterLoad_inner(storage as any, storageKey, storedData, query, options);\n });\n }\n } catch (err) {\n if (process.env.DEV) {\n console.error(err);\n console.warn('Encountered an error attempting to restore query cache from persisted location.');\n }\n storage.removeItem(storageKey);\n }\n }\n\n $persisterSave(queryKey: QueryKey) {\n const query = this.self.$queryFind({ queryKey });\n if (!query) return;\n const options = this._adjustPersisterOptions(query.meta?.persister);\n if (!options) return;\n const storage = this._getPersisterStorage(options, query);\n if (!storage) return;\n const storageKey = this._getPersisterStorageKey(options, query);\n const params = {\n state: query.state,\n queryKey: query.queryKey,\n queryHash: query.queryHash,\n buster: options.buster,\n };\n const data = options.serialize ? options.serialize(params, options.serializeDefault!) : options.serializeDefault!(params);\n if (options.sync === true) {\n storage.setItem(storageKey, data);\n } else {\n // Persist if we have storage defined, we use timeout to get proper state to be persisted\n setTimeout(() => {\n storage.setItem(storageKey, data);\n }, 0);\n }\n }\n\n $persisterRemove(queryKey: QueryKey) {\n const query = this.self.$queryFind({ queryKey });\n if (!query) return;\n const options = this._adjustPersisterOptions(query.meta?.persister);\n if (!options) return;\n const storage = this._getPersisterStorage(options, query);\n if (!storage) return;\n const storageKey = this._getPersisterStorageKey(options, query);\n if (options.sync === true) {\n storage.removeItem(storageKey);\n } else {\n // Persist if we have storage defined, we use timeout to get proper state to be persisted\n setTimeout(() => {\n storage.removeItem(storageKey);\n }, 0);\n }\n }\n\n protected _createPersister(options?: QueryMetaPersister | boolean): any {\n options = this._adjustPersisterOptions(options);\n if (!options) return undefined;\n return experimental_createQueryPersister({\n storage: this._getPersisterStorage(options) as any,\n maxAge: options.maxAge as number,\n refetchOnRestore: options.refetchOnRestore,\n prefix: options.prefix,\n buster: options.buster,\n }).persisterFn;\n }\n\n protected _adjustPersisterOptions(options?: QueryMetaPersister | boolean) {\n if (options === false) return undefined;\n if (options === undefined || options === true) {\n options = {};\n } else {\n options = { ...options };\n }\n options.storage = options.storage ?? (options.sync ? 'local' : 'db');\n options.maxAge = options.maxAge ?? this.scopeSelf.config.persister.maxAge[options.storage];\n options.refetchOnRestore = options.refetchOnRestore ?? this.scopeSelf.config.persister.refetchOnRestore;\n options.prefix = options.prefix ?? this._getPersisterPrefix();\n options.buster = options.buster ?? this._getPersisterBuster();\n options.serializeDefault = options.serializeDefault ?? JSON.stringify;\n options.deserializeDefault = options.deserializeDefault ?? JSON.parse;\n return options;\n }\n\n protected _getPersisterStorageKey(options: QueryMetaPersister, query: Query) {\n if (options.storageKeySimplify) return String(query.queryKey[query.queryKey.length - 1]);\n return `${options.prefix}-${query.queryHash}`;\n }\n\n protected _getPersisterStorage(options?: QueryMetaPersister | boolean, query?: Query) {\n options = this._adjustPersisterOptions(options);\n if (!options) return undefined;\n // cookie\n if (options.storage === 'cookie') return this.bean._newBeanSimple(CookieWrapper, false, options, query);\n // check server\n if (process.env.SERVER) return undefined;\n // local\n if (options.storage === 'local') return localStorage;\n // db\n if (options.storage === 'db') return localforage;\n }\n\n protected _getPersisterPrefix() {\n return `${this.sys.env.APP_NAME}-query`;\n }\n\n protected _getPersisterBuster() {\n return this.sys.env.APP_VERSION;\n }\n\n protected _forceQueryKeyPrefix(queryKey?: QueryKey): QueryKey {\n if (!queryKey) queryKey = [];\n if (!this._prefixIsBeanFullName(queryKey[0])) {\n const prefixes = [this[SymbolBeanFullName]];\n if (this.$onionOptions?.enableSelector) {\n prefixes.push(this.selector);\n }\n queryKey = prefixes.concat(queryKey as any);\n }\n return queryKey;\n }\n\n private _prefixIsBeanFullName(prefix?: any) {\n return prefix === this[SymbolBeanFullName];\n // return (prefix && typeof prefix === 'string' && prefix.split('.').length === 3);\n }\n}\n","import type { Query } from '@tanstack/vue-query';\n\nimport { BeanModelPersister } from './bean.model.persister.js';\n\nexport class BeanModelLocal extends BeanModelPersister {\n $serializeLocal(obj?: Query) {\n return JSON.stringify(obj?.state?.data);\n }\n\n $deserializeLocal(value?: string) {\n return {\n state: {\n data: value ? JSON.parse(value) : undefined,\n dataUpdateCount: 0,\n dataUpdatedAt: Date.now(),\n error: null,\n errorUpdateCount: 0,\n errorUpdatedAt: 0,\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchMeta: null,\n isInvalidated: false,\n status: 'success',\n fetchStatus: 'idle',\n },\n queryKey: undefined,\n queryHash: undefined,\n buster: this._getPersisterBuster(),\n };\n }\n}\n","import type { Query } from '@tanstack/vue-query';\n\nimport type { QueryMetaPersisterCookieType } from '../../types/index.js';\n\nimport { BeanModelLocal } from './bean.model.local.js';\n\nexport class BeanModelCookie extends BeanModelLocal {\n $serializeCookie(obj?: Query) {\n return String(obj?.state?.data ?? '');\n }\n\n $deserializeCookie(value?: any) {\n return {\n state: {\n data: value,\n dataUpdateCount: 0,\n dataUpdatedAt: Date.now(),\n error: null,\n errorUpdateCount: 0,\n errorUpdatedAt: 0,\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchMeta: null,\n isInvalidated: false,\n status: 'success',\n fetchStatus: 'idle',\n },\n queryKey: undefined,\n queryHash: undefined,\n buster: this._getPersisterBuster(),\n };\n }\n\n protected _cookieCoerce(value?: string, cookieType?: QueryMetaPersisterCookieType) {\n if (value === undefined || value === '') return undefined; // string of '' means should delete the cookie\n if (!cookieType || cookieType === 'auto') {\n return value === 'true' ? true : value === 'false' ? false : value;\n } else if (cookieType === 'boolean') {\n return value === 'true' ? true : value === 'false' ? false : Boolean(Number(value));\n } else if (cookieType === 'number') {\n return Number(value);\n } else if (cookieType === 'date') {\n return new Date(value);\n } else if (cookieType === 'string') {\n return value;\n }\n return value;\n }\n}\n","import type {\n DataTag,\n DefaultError,\n InvalidateOptions,\n InvalidateQueryFilters,\n Query,\n QueryFilters,\n QueryKey,\n RefetchOptions,\n RefetchQueryFilters,\n SetDataOptions,\n Updater,\n} from '@tanstack/vue-query';\n\nimport localforage from 'localforage';\nimport { cast } from 'zova';\n\nimport type { MaybeRefDeep, NoUnknown } from '../../common/types.js';\n\nimport { BeanModelCookie } from './bean.model.cookie.js';\n\nexport class BeanModelQuery extends BeanModelCookie {\n $setQueryData<\n TQueryFnData,\n TTaggedQueryKey extends QueryKey,\n TData = TTaggedQueryKey extends DataTag<unknown, infer TaggedValue> ? TaggedValue : TQueryFnData,\n >(\n queryKey: TTaggedQueryKey,\n updater: Updater<NoInfer<TData> | undefined, NoInfer<TData> | undefined>,\n persisterSave?: boolean,\n options?: MaybeRefDeep<SetDataOptions>,\n ): TData | undefined;\n $setQueryData<TQueryFnData, TData = NoUnknown<TQueryFnData>>(\n queryKey: MaybeRefDeep<QueryKey>,\n updater: Updater<NoInfer<TData> | undefined, NoInfer<TData> | undefined>,\n persisterSave?: boolean,\n options?: MaybeRefDeep<SetDataOptions>,\n ): TData | undefined;\n $setQueryData(queryKey, updater, persisterSave, options) {\n queryKey = this._forceQueryKeyPrefix(queryKey);\n const data = this.$queryClient.setQueryData(queryKey, updater, options);\n if (data === undefined) {\n if (persisterSave) {\n this.$persisterRemove(queryKey);\n }\n this.$setQueryDataDirect(queryKey, data);\n } else {\n if (persisterSave) {\n this.$persisterSave(queryKey);\n }\n }\n return data;\n }\n\n $queryFind<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData>(\n filters: QueryFilters,\n ): Query<TQueryFnData, TError, TData> | undefined {\n filters = this.$normalizeFilters(filters);\n return this.$queryClient.getQueryCache().find(filters as any);\n }\n\n $invalidateQueries(filters?: InvalidateQueryFilters, options?: MaybeRefDeep<InvalidateOptions>): Promise<void> {\n filters = this.$normalizeFilters(filters);\n return this.$queryClient.invalidateQueries(filters, options);\n }\n\n $refetchQueries(filters?: RefetchQueryFilters, options?: MaybeRefDeep<RefetchOptions>): Promise<void> {\n filters = this.$normalizeFilters(filters);\n return this.$queryClient.refetchQueries(filters, options);\n }\n\n $setQueryDataDirect(queryKey: QueryKey, value: any) {\n const query = this.$queryFind({ queryKey, exact: true });\n query?.setData(value);\n }\n\n async $clear() {\n const queries = this.$queryClient.getQueryCache().getAll();\n for (const query of queries) {\n query?.setData(undefined);\n }\n // remove all db cache\n await localforage.clear();\n }\n\n $normalizeFilters<T extends {}>(filters?: T): T {\n if (!filters) filters = {} as T;\n const queryKey = this._forceQueryKeyPrefix(cast(filters).queryKey);\n return { ...filters, queryKey };\n }\n}\n","import type { DefaultError, QueryClient, QueryKey, UseQueryDefinedReturnType, UseQueryOptions, UseQueryReturnType } from '@tanstack/vue-query';\nimport type { UnwrapNestedRefs } from 'vue';\n\nimport { useQuery } from '@tanstack/vue-query';\nimport { cast } from 'zova';\n\nimport type { DefinedInitialQueryOptions, UndefinedInitialQueryOptions } from '../../common/types.js';\n\nimport { resolveStaleTime } from '../../types/index.js';\nimport { BeanModelQuery } from './bean.model.query.js';\n\nexport class BeanModelUseQuery extends BeanModelQuery {\n $useQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: UndefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): UnwrapNestedRefs<UseQueryReturnType<TData, TError>>;\n $useQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: DefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): UnwrapNestedRefs<UseQueryDefinedReturnType<TData, TError>>;\n $useQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: UseQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>,\n queryClient?: QueryClient,\n ): UnwrapNestedRefs<UseQueryReturnType<TData, TError>>;\n $useQuery(options, queryClient) {\n const queryKey = this.self._forceQueryKeyPrefix(options.queryKey);\n const persister = this._createPersister(options.meta?.persister);\n const optionsDefault: any = {};\n if (!cast(options).meta?.disableErrorEffect) {\n optionsDefault.throwOnError = (error: Error, query) => {\n let errorInfo = cast(options).meta?.errorInfo;\n if (typeof errorInfo === 'function') {\n errorInfo = errorInfo(error, query);\n }\n if (!error.message.includes('useQuery:')) {\n error.message = `useQuery: [${queryKey.join(', ')}]: ${error.message}`;\n }\n this.$errorHandler(error, errorInfo ?? 'useQuery');\n return false;\n };\n }\n options = Object.assign(optionsDefault, options, { queryKey, persister });\n // staleTime\n const sync = typeof options.meta?.persister === 'object' && options.meta?.persister?.sync;\n if (sync !== true) {\n const staleTime = options.staleTime ?? this.scopeSelf.config.query.staleTime.async;\n const queryCache = this.$queryFind({ queryKey });\n const queryCacheExists = queryCache?.state.data !== undefined;\n options.staleTime = query => {\n if (process.env.CLIENT && this.ctx.meta.$ssr.isRuntimeSsrPreHydration && queryCacheExists) {\n return resolveStaleTime(this.scopeSelf.config.query.staleTime.ssr, query);\n }\n return resolveStaleTime(staleTime, query);\n };\n }\n return this.ctx.util.instanceScope(() => {\n return useQuery(options, queryClient);\n });\n }\n}\n","import type {\n DefaultError,\n Query,\n QueryClient,\n QueryKey,\n QueryMeta,\n UseQueryDefinedReturnType,\n UseQueryOptions,\n UseQueryReturnType,\n} from '@tanstack/vue-query';\nimport type { UnwrapNestedRefs } from 'vue';\n\nimport { hashKey } from '@tanstack/vue-query';\nimport { deepExtend, useCustomRef } from 'zova';\n\nimport type { DefinedInitialQueryOptions, UndefinedInitialQueryOptions } from '../../common/types.js';\nimport type { QueryMetaPersister, UseQueryComputedOptions } from '../../types/query.js';\n\nimport { BeanModelUseQuery } from './bean.model.useQuery.js';\n\nconst SymbolUseQueries = Symbol('SymbolUseQueries');\nconst SymbolUseComputeds = Symbol('SymbolUseComputeds');\n\nexport class BeanModelUseState extends BeanModelUseQuery {\n private [SymbolUseQueries]: Record<string, unknown> = {};\n private [SymbolUseComputeds]: Record<string, unknown> = {};\n\n async $loadStateDb<T>(dbData: T): Promise<T> {\n return await dbData;\n }\n\n $useStateDb<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: UndefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): TData;\n $useStateDb<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: DefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): TData;\n $useStateDb<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: UseQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>,\n queryClient?: QueryClient,\n ): TData;\n $useStateDb(options, queryClient) {\n options = deepExtend(\n {\n meta: {\n maxAge: this.scopeSelf.config.persister.maxAge.local,\n } satisfies QueryMeta,\n },\n options,\n {\n enabled: false,\n staleTime: Infinity,\n meta: {\n ssr: {\n dehydrate: false,\n },\n persister: { storage: 'db', sync: false },\n } satisfies QueryMeta,\n },\n );\n const self = this;\n return useCustomRef(() => {\n return {\n get() {\n return self._handleAsyncDataGet(options, queryClient, true);\n },\n set(value) {\n self._handleSyncDataSet(options, queryClient, true, value);\n },\n };\n });\n }\n\n $useStateLocal<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: UndefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): TData;\n $useStateLocal<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: DefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): TData;\n $useStateLocal<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: UseQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>,\n queryClient?: QueryClient,\n ): TData;\n $useStateLocal(options, queryClient) {\n options = deepExtend(\n {\n meta: {\n persister: {\n serializeDefault: (obj?: Query) => {\n return this.$serializeLocal(obj);\n },\n deserializeDefault: (value?: string) => {\n return this.$deserializeLocal(value);\n },\n storageKeySimplify: true,\n },\n } satisfies QueryMeta,\n },\n options,\n {\n enabled: false,\n staleTime: Infinity,\n meta: {\n persister: { storage: 'local', sync: true } satisfies QueryMetaPersister,\n },\n },\n );\n const self = this;\n return useCustomRef(() => {\n return {\n get() {\n return self._handleSyncDataGet(options, queryClient, true);\n },\n set(value) {\n self._handleSyncDataSet(options, queryClient, true, value);\n },\n };\n });\n // return useComputed({\n // get() {\n // return self._handleSyncDataGet(options, queryClient, true);\n // },\n // set(value) {\n // self._handleSyncDataSet(options, queryClient, true, value);\n // },\n // });\n }\n\n $useStateCookie<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: UndefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): TData;\n $useStateCookie<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: DefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): TData;\n $useStateCookie<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: UseQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>,\n queryClient?: QueryClient,\n ): TData;\n $useStateCookie(options, queryClient) {\n options = deepExtend(\n {\n meta: {\n persister: {\n serializeDefault: (obj?: Query) => {\n return this.$serializeCookie(obj);\n },\n deserializeDefault: (value?: string) => {\n const cookieType = options.meta.persister.cookieType;\n return this.$deserializeCookie(this._cookieCoerce(value, cookieType));\n },\n storageKeySimplify: true,\n },\n } satisfies QueryMeta,\n },\n options,\n {\n enabled: false,\n staleTime: Infinity,\n meta: {\n persister: { storage: 'cookie', sync: true } satisfies QueryMetaPersister,\n },\n },\n );\n const self = this;\n return useCustomRef(() => {\n return {\n get() {\n return self._handleSyncDataGet(options, queryClient, true);\n },\n set(value) {\n self._handleSyncDataSet(options, queryClient, true, value);\n },\n };\n });\n // return useComputed({\n // get() {\n // return self._handleSyncDataGet(options, queryClient, true);\n // },\n // set(value) {\n // self._handleSyncDataSet(options, queryClient, true, value);\n // },\n // });\n }\n\n $useStateMem<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: UndefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): TData;\n $useStateMem<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: DefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): TData;\n $useStateMem<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: UseQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>,\n queryClient?: QueryClient,\n ): TData;\n $useStateMem(options, queryClient) {\n options = deepExtend({}, options, {\n enabled: false,\n staleTime: Infinity,\n meta: {\n persister: false,\n },\n });\n const self = this;\n return useCustomRef(() => {\n return {\n get() {\n return self._handleSyncDataGet(options, queryClient, false);\n },\n set(value) {\n self._handleSyncDataSet(options, queryClient, false, value);\n },\n };\n });\n // return useComputed({\n // get() {\n // return self._handleSyncDataGet(options, queryClient, false);\n // },\n // set(value) {\n // self._handleSyncDataSet(options, queryClient, false, value);\n // },\n // });\n }\n\n $useStateComputed<TDATA, TQueryKey extends QueryKey>(options: UseQueryComputedOptions<TDATA, TQueryKey>): TDATA {\n const queryKey = this.self._forceQueryKeyPrefix(options.queryKey);\n const queryHash = hashKey(queryKey);\n if (!this[SymbolUseComputeds][queryHash]) {\n this[SymbolUseComputeds][queryHash] = this.$useComputed(options.queryFn, options.debugOptions);\n }\n return this[SymbolUseComputeds][queryHash] as unknown as TDATA;\n }\n\n $useStateData<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: UndefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): UnwrapNestedRefs<UseQueryReturnType<TData, TError>>;\n $useStateData<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: DefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): UnwrapNestedRefs<UseQueryDefinedReturnType<TData, TError>>;\n $useStateData<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: UseQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>,\n queryClient?: QueryClient,\n ): UnwrapNestedRefs<UseQueryReturnType<TData, TError>>;\n $useStateData(options, queryClient) {\n const queryKey = this.self._forceQueryKeyPrefix(options.queryKey);\n const queryHash = hashKey(queryKey);\n if (!this[SymbolUseQueries][queryHash]) {\n const useQuery = this.$useQuery(options, queryClient);\n this[SymbolUseQueries][queryHash] = useQuery;\n if (!options.meta?.disableSuspenseOnInit) {\n useQuery.suspense();\n }\n }\n return this[SymbolUseQueries][queryHash];\n }\n\n private _handleAsyncDataGet(options, queryClient, persister) {\n const query = this.$useStateData(options, queryClient);\n if (query.data !== undefined) return query.data;\n return this._handleAsyncDataGet_inner(options, queryClient, persister);\n }\n\n private async _handleAsyncDataGet_inner(options, queryClient, persister) {\n const queryKey = options.queryKey;\n const query = this.$useStateData(options, queryClient);\n if (persister) {\n const data = await this.$persisterLoad(queryKey);\n if (data !== undefined) {\n this.$setQueryData(queryKey, data, false);\n }\n }\n if (query.data === undefined) {\n this._handleSyncDataGet_defaultData(queryKey, options);\n }\n return query.data;\n }\n\n private _handleSyncDataGet(options, queryClient, persister) {\n const queryKey = options.queryKey;\n const query = this.$useStateData(options, queryClient);\n if (query.data !== undefined) return query.data;\n if (persister) {\n const data = this.$persisterLoad(queryKey);\n if (data !== undefined) {\n this.$setQueryData(queryKey, data, false);\n }\n }\n if (query.data === undefined) {\n this._handleSyncDataGet_defaultData(queryKey, options);\n }\n return query.data;\n }\n\n private _handleSyncDataGet_defaultData(queryKey, options) {\n let defaultData = options.meta?.defaultData;\n if (typeof defaultData === 'function') {\n defaultData = defaultData();\n }\n if (defaultData !== undefined) {\n // need not persister save\n this.$setQueryData(queryKey, defaultData, false);\n }\n }\n\n private _handleSyncDataSet(options, queryClient, persister, value) {\n const queryKey = options.queryKey;\n const query = this.$useStateData(options, queryClient);\n this.$setQueryData(queryKey, value, persister);\n return query;\n }\n}\n","import type { DefaultError, QueryClient, QueryKey, UseQueryDefinedReturnType, UseQueryOptions, UseQueryReturnType } from '@tanstack/vue-query';\nimport type { UnwrapNestedRefs } from 'vue';\n\nimport type { DefinedInitialQueryOptions, UndefinedInitialQueryOptions } from '../../common/types.js';\nimport type { StateType } from '../../types/query.js';\n\nimport { BeanModelUseState } from './bean.model.useState.js';\n\nexport class BeanModelUseStateGeneral extends BeanModelUseState {\n $useState<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n stateType: 'db' | 'local' | 'cookie' | 'mem',\n options: UndefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): TData;\n $useState<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n stateType: 'db' | 'local' | 'cookie' | 'mem',\n options: DefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): TData;\n $useState<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n stateType: 'db' | 'local' | 'cookie' | 'mem',\n options: UseQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>,\n queryClient?: QueryClient,\n ): TData;\n $useState<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n stateType: 'data',\n options: UndefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): UnwrapNestedRefs<UseQueryReturnType<TData, TError>>;\n $useState<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n stateType: 'data',\n options: DefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): UnwrapNestedRefs<UseQueryDefinedReturnType<TData, TError>>;\n $useState<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n stateType: 'data',\n options: UseQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>,\n queryClient?: QueryClient,\n ): UnwrapNestedRefs<UseQueryReturnType<TData, TError>>;\n $useState(stateType: StateType, options, queryClient) {\n switch (stateType) {\n case 'db':\n return this.$useStateDb(options, queryClient);\n case 'local':\n return this.$useStateLocal(options, queryClient);\n case 'cookie':\n return this.$useStateCookie(options, queryClient);\n case 'mem':\n return this.$useStateMem(options, queryClient);\n case 'data':\n return this.$useStateData(options, queryClient);\n }\n }\n}\n","import type { DefaultError, MutationKey, MutationObserverOptions, QueryClient, UseMutationReturnType } from '@tanstack/vue-query';\nimport type { UnwrapNestedRefs } from 'vue';\n\nimport { hashKey, useMutation } from '@tanstack/vue-query';\nimport { cast } from 'zova';\n\nimport type { MaybeRefDeep } from '../../common/types.js';\n\nimport { BeanModelUseStateGeneral } from './bean.model.useStateGeneral.js';\n\nconst SymbolUseMutations = Symbol('SymbolUseMutations');\n\nexport class BeanModelUseMutation extends BeanModelUseStateGeneral {\n private [SymbolUseMutations]: Record<string, unknown> = {};\n\n $useMutation<TData = unknown, TVariables = void, TContext = unknown>(\n mutationOptions: MaybeRefDeep<MutationObserverOptions<TData, DefaultError, TVariables, TContext>>,\n queryClient?: QueryClient,\n ): UnwrapNestedRefs<UseMutationReturnType<TData, DefaultError, TVariables, TContext>> {\n return this.ctx.util.instanceScope(() => {\n return useMutation(mutationOptions, queryClient) as any;\n });\n }\n\n $useMutationData<TData = unknown, TVariables = void, TContext = unknown>(\n mutationOptions: MaybeRefDeep<MutationObserverOptions<TData, DefaultError, TVariables, TContext>>,\n queryClient?: QueryClient,\n ): UnwrapNestedRefs<UseMutationReturnType<TData, DefaultError, TVariables, TContext>> {\n let mutationKey: MutationKey = cast(mutationOptions).mutationKey;\n if (!mutationKey || mutationKey.length === 0) throw new Error('should specify mutationKey');\n mutationKey = this.self._forceQueryKeyPrefix(mutationKey);\n const mutationHash = hashKey(mutationKey);\n if (!this[SymbolUseMutations][mutationHash]) {\n const optionsDefault: any = {};\n if (!cast(mutationOptions).meta?.disableErrorEffect) {\n optionsDefault.onError = (error, variables, context) => {\n let errorInfo = cast(mutationOptions).meta?.errorInfo;\n if (typeof errorInfo === 'function') {\n errorInfo = errorInfo(error, variables, context);\n }\n this.$errorHandler(error, errorInfo ?? 'useMutationData');\n };\n }\n mutationOptions = Object.assign(optionsDefault, mutationOptions, { mutationKey });\n this[SymbolUseMutations][mutationHash] = this.$useMutation(mutationOptions, queryClient);\n }\n return this[SymbolUseMutations][mutationHash] as UnwrapNestedRefs<UseMutationReturnType<TData, DefaultError, TVariables, TContext>>;\n }\n}\n","import { BeanModelUseMutation } from './bean.model.useMutation.js';\n\nexport class BeanModelFirst extends BeanModelUseMutation {}\n","import { Virtual } from 'zova';\nimport { Bean } from 'zova-module-a-bean';\n\nimport { BeanModelFirst } from './bean.model/bean.model.first.js';\n\n@Bean()\n@Virtual()\nexport class BeanModelBase extends BeanModelFirst {}\n","import type { VueQueryPluginOptions } from '@tanstack/vue-query';\n\nimport { dehydrate, hydrate, QueryCache, QueryClient, VueQueryPlugin } from '@tanstack/vue-query';\nimport { BeanBase, deepExtend } from 'zova';\nimport { Service } from 'zova-module-a-bean';\n\n@Service()\nexport class ServiceStorage extends BeanBase {\n private _queryClient: QueryClient;\n\n async moduleLoaded() {\n // options\n let options = this.scope.config.queryClientConfig.defaultOptions;\n if (process.env.SERVER) {\n options = deepExtend({}, options, {\n queries: { gcTime: Infinity },\n });\n }\n // queryCache\n const queryCache = new QueryCache();\n // queryClient\n const queryClient = (this._queryClient = new QueryClient({\n defaultOptions: options,\n queryCache,\n }));\n // use plugin\n const vueQueryPluginOptions: VueQueryPluginOptions = { queryClient };\n this.app.vue.use(VueQueryPlugin, vueQueryPluginOptions);\n }\n\n async appInitialize() {\n // onRendered\n if (process.env.SERVER) {\n this.ctx.meta.$ssr.context.onRendered((err?: Error) => {\n if (!err) {\n this.ctx.meta.$ssr.stateDefer.query = dehydrate(this._queryClient, {\n shouldDehydrateMutation: () => {\n return false;\n },\n });\n }\n this._queryClient.clear();\n });\n }\n // client\n if (process.env.CLIENT && this.ctx.meta.$ssr.isRuntimeSsrPreHydration) {\n hydrate(this._queryClient, this.ctx.meta.$ssr.stateDefer.query);\n }\n }\n}\n","import type { DefaultOptions } from '@tanstack/vue-query';\nimport type { CookieOptions, ZovaSys } from 'zova';\n\nimport { defaultShouldDehydrateQuery } from '@tanstack/vue-query';\n\nimport type { MaxAgeTime, StaleTimeFunction } from '../types/index.js';\n\nconst defaultOptions: DefaultOptions = {\n queries: {\n retry: false,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: true,\n gcTime: 1000 * 60 * 5,\n },\n dehydrate: {\n shouldDehydrateQuery(query) {\n if (query.meta?.ssr?.dehydrate === false) return false;\n // mem query return true, because mem persister is false\n if (typeof query.meta?.persister === 'object' && query.meta?.persister?.sync) return false;\n return defaultShouldDehydrateQuery(query);\n },\n shouldDehydrateMutation(_mutation) {\n return false;\n },\n },\n};\n\nexport const config = (_sys: ZovaSys) => {\n return {\n persister: {\n maxAge: {\n cookie: undefined as MaxAgeTime | undefined, // undefined: session cookie\n local: Infinity as MaxAgeTime,\n db: (1000 * 60 * 60 * 24) as number, // 24 hours\n },\n cookie: {\n options: {} as Omit<CookieOptions, 'expires'>,\n },\n refetchOnRestore: true,\n },\n query: {\n staleTime: {\n async: 0 as StaleTimeFunction,\n ssr: Infinity as StaleTimeFunction,\n },\n },\n queryClientConfig: {\n defaultOptions,\n },\n };\n};\n","import type { IModule } from '@cabloy/module-info';\nimport type { BeanBase, BeanContainer, IMonkeyAppInitialize, IMonkeyBeanInit } from 'zova';\n\nimport { useQueryClient } from '@tanstack/vue-query';\nimport { markRaw } from 'vue';\nimport { BeanSimple } from 'zova';\n\nimport { ServiceStorage } from './service/storage.js';\n\nexport class Monkey extends BeanSimple implements IMonkeyAppInitialize, IMonkeyBeanInit {\n private _moduleSelf: IModule;\n private _storage: ServiceStorage;\n\n constructor(moduleSelf: IModule) {\n super();\n this._moduleSelf = moduleSelf;\n }\n\n private async getStorage() {\n if (!this._storage) {\n this._storage = await this.bean._newBean(ServiceStorage, false);\n }\n return this._storage;\n }\n\n async appInitialize() {\n const storage = await this.getStorage();\n await storage.appInitialize();\n }\n\n async moduleLoading(_module: IModule) {}\n async moduleLoaded(module: IModule) {\n // self\n if (this._moduleSelf === module) {\n const storage = await this.getStorage();\n await storage.moduleLoaded();\n }\n }\n\n async beanInit(bean: BeanContainer, beanInstance: BeanBase) {\n bean.defineProperty(beanInstance, '$queryClient', {\n enumerable: false,\n configurable: true,\n get() {\n return markRaw(useQueryClient());\n },\n });\n }\n}\n","// eslint-disable\n/** bean: begin */\nexport * from '../bean/bean.modelBase.js';\n\nimport 'zova';\ndeclare module 'zova' {\n \n \n}\ndeclare module 'zova-module-a-model' {\n \n}\n/** bean: end */\n/** bean: begin */\nimport { BeanModelBase } from '../bean/bean.modelBase.js';\nimport 'zova';\ndeclare module 'zova' {\n export interface IBeanRecordGeneral {\n 'a-model.bean.modelBase': BeanModelBase;\n }\n}\n/** bean: end */\n/** service: begin */\nexport * from '../service/storage.js';\n\nimport 'zova-module-a-bean';\ndeclare module 'zova-module-a-bean' {\n \n export interface IServiceRecord {\n 'a-model:storage': never;\n }\n\n \n}\ndeclare module 'zova-module-a-model' {\n \n export interface ServiceStorage {\n /** @internal */\n get scope(): ScopeModuleAModel;\n }\n\n export interface ServiceStorage {\n get $beanFullName(): 'a-model.service.storage';\n get $onionName(): 'a-model:storage';\n \n } \n}\n/** service: end */\n/** service: begin */\nimport { ServiceStorage } from '../service/storage.js';\nimport 'zova';\ndeclare module 'zova' {\n export interface IBeanRecordGeneral {\n 'a-model.service.storage': ServiceStorage;\n }\n}\n/** service: end */\n/** config: begin */\nexport * from '../config/config.js';\nimport { config } from '../config/config.js';\n/** config: end */\n/** monkey: begin */\nexport * from '../monkey.js';\n/** monkey: end */\n/** scope: begin */\nimport { BeanScopeBase, type BeanScopeUtil, TypeModuleConfig } from 'zova';\nimport { Scope } from 'zova-module-a-bean';\n\n@Scope()\nexport class ScopeModuleAModel extends BeanScopeBase {}\n\nexport interface ScopeModuleAModel {\n util: BeanScopeUtil;\nconfig: TypeModuleConfig<typeof config>;\n}\n\nimport 'zova';\ndeclare module 'zova' {\n export interface IBeanScopeRecord {\n 'a-model': ScopeModuleAModel;\n }\n \n export interface IBeanScopeConfig {\n 'a-model': ReturnType<typeof config>;\n }\n\n \n\n \n}\n \n/** scope: end */\n","import { createBeanDecorator } from 'zova';\n\nimport type { IDecoratorModelOptions } from '../types/model.js';\n\nexport function Model<T extends IDecoratorModelOptions>(options?: T): ClassDecorator {\n return createBeanDecorator('model', 'ctx', true, options);\n}\n","import type { DataQuery } from '../types/query.js';\n\nexport type TypeQueryAutoLoadFn<T> = () => DataQuery<T> | undefined;\n\nexport async function $QueryAutoLoad<T = any>(fn: TypeQueryAutoLoadFn<T>) {\n return _QueryAutoLoadInner<T>(fn);\n}\n\nexport async function $QueriesAutoLoad<T1 = any, T2 = any, T3 = any, T4 = any, T5 = any>(\n fn1?: TypeQueryAutoLoadFn<T1>,\n fn2?: TypeQueryAutoLoadFn<T2>,\n fn3?: TypeQueryAutoLoadFn<T3>,\n fn4?: TypeQueryAutoLoadFn<T4>,\n fn5?: TypeQueryAutoLoadFn<T5>,\n ...fns: TypeQueryAutoLoadFn<any>[]\n): Promise<\n [\n DataQuery<T1> | undefined,\n DataQuery<T2> | undefined,\n DataQuery<T3> | undefined,\n DataQuery<T4> | undefined,\n DataQuery<T5> | undefined,\n ...DataQuery<any>[],\n ]\n> {\n let promises: any[] = [\n _QueryAutoLoadInner<T1>(fn1),\n _QueryAutoLoadInner<T2>(fn2),\n _QueryAutoLoadInner<T3>(fn3),\n _QueryAutoLoadInner<T4>(fn4),\n _QueryAutoLoadInner<T5>(fn5),\n ];\n if (fns.length > 0) {\n promises = promises.concat(fns.map(fn => _QueryAutoLoadInner(fn)));\n }\n return (await Promise.all(promises)) as any;\n}\n\nasync function _QueryAutoLoadInner<T = any>(fn?: TypeQueryAutoLoadFn<T>) {\n if (!fn) return;\n const query = fn();\n if (query && query.data === undefined) {\n await query.suspense();\n }\n return query;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/types/query.ts","../src/.metadata/this.ts","../src/common/cookieWrapper.ts","../src/bean/bean.model/bean.model.last.ts","../src/bean/bean.model/bean.model.persister.ts","../src/bean/bean.model/bean.model.local.ts","../src/bean/bean.model/bean.model.cookie.ts","../src/bean/bean.model/bean.model.query.ts","../src/bean/bean.model/bean.model.useQuery.ts","../src/bean/bean.model/bean.model.useState.ts","../src/bean/bean.model/bean.model.useStateGeneral.ts","../src/bean/bean.model/bean.model.useMutation.ts","../src/bean/bean.model/bean.model.first.ts","../src/bean/bean.modelBase.ts","../src/service/storage.ts","../src/config/config.ts","../src/monkey.ts","../src/.metadata/index.ts","../src/lib/model.ts","../src/lib/utils.ts"],"sourcesContent":["import type { DefaultError, DehydratedState, Query, QueryKey, useMutation, useQuery, useQueryClient } from '@tanstack/vue-query';\nimport type { DebuggerOptions, UnwrapNestedRefs } from 'vue';\n\nimport 'zova';\n\ndeclare module 'zova' {\n export interface BeanBase {\n $queryClient: ReturnType<typeof useQueryClient>;\n }\n}\n\ndeclare module 'zova-module-a-ssr' {\n export interface SSRContextStateDefer {\n query: DehydratedState;\n }\n}\n\ndeclare module '@tanstack/vue-query' {\n export interface Register {\n queryMeta: MyQueryMeta;\n mutationMeta: MyMutationMeta;\n }\n}\n\nexport type { UseQueryOptions } from '@tanstack/vue-query';\n\nexport interface MyQueryMetaBase extends Record<string, unknown> {\n defaultData?: (() => any) | any;\n ssr?: QueryMetaSSR;\n persister?: QueryMetaPersister | boolean;\n disableErrorEffect?: boolean;\n disableSuspenseOnInit?: boolean;\n}\n\nexport interface MyQueryMeta extends MyQueryMetaBase {\n errorInfo?: ((error, query) => string) | string;\n}\n\nexport interface MyMutationMeta extends MyQueryMetaBase {\n errorInfo?: ((error, variables, context) => string) | string;\n}\n\nexport interface QueryMetaSSR {\n /** default is true */\n dehydrate?: boolean;\n}\n\nexport type QueryMetaPersisterStorage = 'cookie' | 'local' | 'db' | undefined;\n\nexport type QueryMetaPersisterCookieType = 'auto' | 'boolean' | 'number' | 'date' | 'string' | undefined;\n\nexport type StateType = 'db' | 'local' | 'cookie' | 'mem' | 'data';\n\nexport type StaleTime = number;\nexport type StaleTimeFunction<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> =\n | StaleTime\n | ((query: Query<TQueryFnData, TError, TData, TQueryKey>) => StaleTime);\n\nexport type MaxAgeTime = StaleTime;\nexport type MaxAgeTimeFunction<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = StaleTimeFunction<TQueryFnData, TError, TData, TQueryKey>;\n\nexport interface QueryMetaPersister {\n /** default is false */\n sync?: boolean;\n /** default is db if async, local if sync */\n storage?: QueryMetaPersisterStorage;\n /** default is false if db, true if local/cookie */\n storageKeySimplify?: boolean;\n /** default is 24 hours */\n maxAge?: MaxAgeTime;\n /**\n * How to serialize the data to storage.\n * @default `JSON.stringify`\n */\n serialize?: (persistedQuery: any, serializeDefault: (persistedQuery: any) => any) => any;\n serializeDefault?: (persistedQuery: any) => any;\n /**\n * How to deserialize the data from storage.\n * @default `JSON.parse`\n */\n deserialize?: (cachedString: any, deserializeDefault: (cachedString: any) => any) => any;\n deserializeDefault?: (cachedString: any) => any;\n prefix?: string;\n buster?: string;\n cookieType?: QueryMetaPersisterCookieType;\n refetchOnRestore?: boolean | 'always';\n}\n\nexport type DataQuery<TData> = UnwrapNestedRefs<ReturnType<typeof useQuery<TData | undefined, Error | null>>>;\n\nexport type DataMutation<TData = unknown, TVariables = void, TContext = unknown> = UnwrapNestedRefs<\n ReturnType<typeof useMutation<TData, DefaultError, TVariables, TContext>>\n>;\n\nexport function resolveStaleTime<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n staleTime: undefined | StaleTimeFunction<TQueryFnData, TError, TData, TQueryKey>,\n query: Query<TQueryFnData, TError, TData, TQueryKey>,\n): StaleTime | undefined {\n return typeof staleTime === 'function' ? staleTime(query) : staleTime;\n}\n\nexport function resolveMaxAgeTime<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n maxAge: undefined | MaxAgeTimeFunction<TQueryFnData, TError, TData, TQueryKey>,\n query: Query<TQueryFnData, TError, TData, TQueryKey>,\n): MaxAgeTime | undefined {\n return typeof maxAge === 'function' ? maxAge(query) : maxAge;\n}\n\nexport type UseQueryComputedFn<TDATA> = (oldValue?: TDATA) => TDATA;\n\nexport interface UseQueryComputedOptions<TDATA, TQueryKey> {\n queryKey: TQueryKey;\n queryFn: UseQueryComputedFn<TDATA>;\n debugOptions?: DebuggerOptions;\n}\n","export const __ThisModule__ = 'a-model';\nexport { ScopeModuleAModel as ScopeModule } from './index.js';\n","import type { Query } from '@tanstack/vue-query';\nimport type { CookieOptions } from 'zova';\n\nimport { BeanSimple } from 'zova';\n\nimport type { QueryMetaPersister } from '../types/index.js';\n\nimport { __ThisModule__ } from '../.metadata/this.js';\nimport { resolveMaxAgeTime } from '../types/index.js';\n\nexport class CookieWrapper extends BeanSimple {\n options: QueryMetaPersister;\n query: Query;\n\n protected __init__(options: QueryMetaPersister, query: Query) {\n this.options = options;\n this.query = query;\n }\n\n getItem(key: string): string | undefined {\n return this.app.meta.cookie.getItem(key);\n }\n\n setItem(key: string, value: string): void {\n const configScope = this.bean.scope(__ThisModule__).config;\n const opts: CookieOptions = { ...configScope.persister.cookie.options };\n let maxAge = resolveMaxAgeTime(this.options.maxAge, this.query);\n if (maxAge !== undefined) {\n if (maxAge === Infinity) maxAge = 1000 * 60 * 60 * 24 * 365;\n opts.expires = new Date(Date.now() + maxAge);\n }\n this.app.meta.cookie.setItem(key, value, opts);\n }\n\n removeItem(key: string): void {\n this.app.meta.cookie.removeItem(key);\n }\n}\n","import { BeanBase, cast } from 'zova';\n\nimport type { ScopeModule } from '../../.metadata/this.js';\nimport type { IDecoratorModelOptions } from '../../types/model.js';\nimport type { BeanModelBase } from '../bean.modelBase.js';\n\nimport { __ThisModule__ } from '../../.metadata/this.js';\n\nexport class BeanModelLast extends BeanBase {\n public selector: string;\n\n constructor(selector?: unknown) {\n super();\n if (this.$onionOptions?.enableSelector) {\n this.selector = (selector as string) ?? '';\n }\n }\n\n protected async __init__(_selector?: unknown) {\n // do nothing\n }\n\n public get $onionOptions(): IDecoratorModelOptions | undefined {\n return super.$onionOptions as IDecoratorModelOptions | undefined;\n }\n\n get self() {\n return cast<BeanModelBase>(this);\n }\n\n get scopeSelf(): ScopeModule {\n return this.bean.scope(__ThisModule__);\n }\n}\n","import type { Query, QueryKey } from '@tanstack/vue-query';\n\nimport { experimental_createQueryPersister } from '@tanstack/query-persist-client-core';\nimport localforage from 'localforage';\nimport { SymbolBeanFullName } from 'zova';\n\nimport type { QueryMetaPersister } from '../../types/index.js';\n\nimport { CookieWrapper } from '../../common/cookieWrapper.js';\nimport { resolveMaxAgeTime } from '../../types/index.js';\nimport { BeanModelLast } from './bean.model.last.js';\n\nexport class BeanModelPersister extends BeanModelLast {\n private _persisterLoad_inner<T>(storage: Storage, storageKey: string, storedData: any, query: Query, options: QueryMetaPersister): T | undefined {\n if (!storedData) return undefined;\n const persistedQuery = options.deserialize\n ? options.deserialize(storedData as string, options.deserializeDefault!)\n : options.deserializeDefault!(storedData as string);\n\n if (persistedQuery.state.dataUpdatedAt) {\n const queryAge = Date.now() - persistedQuery.state.dataUpdatedAt;\n const expired = queryAge > (resolveMaxAgeTime(options.maxAge, query) ?? Infinity);\n const busted = persistedQuery.buster !== options.buster;\n if (expired || busted) {\n storage.removeItem(storageKey);\n } else {\n // Set proper updatedAt, since resolving in the first pass overrides those values\n query.setState({\n dataUpdatedAt: persistedQuery.state.dataUpdatedAt,\n errorUpdatedAt: persistedQuery.state.errorUpdatedAt,\n });\n return persistedQuery.state.data as T;\n }\n } else {\n storage.removeItem(storageKey);\n }\n }\n\n $persisterLoad<T>(queryKey: QueryKey): Promise<T | undefined> | T | undefined {\n const query = this.self.$queryFind({ queryKey });\n if (!query) return undefined;\n const options = this._adjustPersisterOptions(query.meta?.persister);\n if (!options) return undefined;\n const storage = this._getPersisterStorage(options, query);\n if (!storage) return undefined;\n const storageKey = this._getPersisterStorageKey(options, query);\n try {\n const storedData = storage.getItem(storageKey);\n if (options.sync) {\n return this._persisterLoad_inner(storage as any, storageKey, storedData, query, options);\n } else {\n return (storedData as Promise<T>).then(storedData => {\n return this._persisterLoad_inner(storage as any, storageKey, storedData, query, options);\n });\n }\n } catch (err) {\n if (process.env.DEV) {\n console.error(err);\n console.warn('Encountered an error attempting to restore query cache from persisted location.');\n }\n storage.removeItem(storageKey);\n }\n }\n\n $persisterSave(queryKey: QueryKey) {\n const query = this.self.$queryFind({ queryKey });\n if (!query) return;\n const options = this._adjustPersisterOptions(query.meta?.persister);\n if (!options) return;\n const storage = this._getPersisterStorage(options, query);\n if (!storage) return;\n const storageKey = this._getPersisterStorageKey(options, query);\n const params = {\n state: query.state,\n queryKey: query.queryKey,\n queryHash: query.queryHash,\n buster: options.buster,\n };\n const data = options.serialize ? options.serialize(params, options.serializeDefault!) : options.serializeDefault!(params);\n if (options.sync === true) {\n storage.setItem(storageKey, data);\n } else {\n // Persist if we have storage defined, we use timeout to get proper state to be persisted\n setTimeout(() => {\n storage.setItem(storageKey, data);\n }, 0);\n }\n }\n\n $persisterRemove(queryKey: QueryKey) {\n const query = this.self.$queryFind({ queryKey });\n if (!query) return;\n const options = this._adjustPersisterOptions(query.meta?.persister);\n if (!options) return;\n const storage = this._getPersisterStorage(options, query);\n if (!storage) return;\n const storageKey = this._getPersisterStorageKey(options, query);\n if (options.sync === true) {\n storage.removeItem(storageKey);\n } else {\n // Persist if we have storage defined, we use timeout to get proper state to be persisted\n setTimeout(() => {\n storage.removeItem(storageKey);\n }, 0);\n }\n }\n\n protected _createPersister(options?: QueryMetaPersister | boolean): any {\n options = this._adjustPersisterOptions(options);\n if (!options) return undefined;\n return experimental_createQueryPersister({\n storage: this._getPersisterStorage(options) as any,\n maxAge: options.maxAge as number,\n refetchOnRestore: options.refetchOnRestore,\n prefix: options.prefix,\n buster: options.buster,\n }).persisterFn;\n }\n\n protected _adjustPersisterOptions(options?: QueryMetaPersister | boolean) {\n if (options === false) return undefined;\n if (options === undefined || options === true) {\n options = {};\n } else {\n options = { ...options };\n }\n options.storage = options.storage ?? (options.sync ? 'local' : 'db');\n options.maxAge = options.maxAge ?? this.scopeSelf.config.persister.maxAge[options.storage];\n options.refetchOnRestore = options.refetchOnRestore ?? this.scopeSelf.config.persister.refetchOnRestore;\n options.prefix = options.prefix ?? this._getPersisterPrefix();\n options.buster = options.buster ?? this._getPersisterBuster();\n options.serializeDefault = options.serializeDefault ?? JSON.stringify;\n options.deserializeDefault = options.deserializeDefault ?? JSON.parse;\n return options;\n }\n\n protected _getPersisterStorageKey(options: QueryMetaPersister, query: Query) {\n if (options.storageKeySimplify) return String(query.queryKey[query.queryKey.length - 1]);\n return `${options.prefix}-${query.queryHash}`;\n }\n\n protected _getPersisterStorage(options?: QueryMetaPersister | boolean, query?: Query) {\n options = this._adjustPersisterOptions(options);\n if (!options) return undefined;\n // cookie\n if (options.storage === 'cookie') return this.bean._newBeanSimple(CookieWrapper, false, options, query);\n // check server\n if (process.env.SERVER) return undefined;\n // local\n if (options.storage === 'local') return localStorage;\n // db\n if (options.storage === 'db') return localforage;\n }\n\n protected _getPersisterPrefix() {\n return `${this.sys.env.APP_NAME}-query`;\n }\n\n protected _getPersisterBuster() {\n return this.sys.env.APP_VERSION;\n }\n\n protected _forceQueryKeyPrefix(queryKey?: QueryKey): QueryKey {\n if (!queryKey) queryKey = [];\n if (!this._prefixIsBeanFullName(queryKey[0])) {\n const prefixes = [this[SymbolBeanFullName]];\n if (this.$onionOptions?.enableSelector) {\n prefixes.push(this.selector);\n }\n queryKey = prefixes.concat(queryKey as any);\n }\n return queryKey;\n }\n\n private _prefixIsBeanFullName(prefix?: any) {\n return prefix === this[SymbolBeanFullName];\n // return (prefix && typeof prefix === 'string' && prefix.split('.').length === 3);\n }\n}\n","import type { Query } from '@tanstack/vue-query';\n\nimport { BeanModelPersister } from './bean.model.persister.js';\n\nexport class BeanModelLocal extends BeanModelPersister {\n $serializeLocal(obj?: Query) {\n return JSON.stringify(obj?.state?.data);\n }\n\n $deserializeLocal(value?: string) {\n return {\n state: {\n data: value ? JSON.parse(value) : undefined,\n dataUpdateCount: 0,\n dataUpdatedAt: Date.now(),\n error: null,\n errorUpdateCount: 0,\n errorUpdatedAt: 0,\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchMeta: null,\n isInvalidated: false,\n status: 'success',\n fetchStatus: 'idle',\n },\n queryKey: undefined,\n queryHash: undefined,\n buster: this._getPersisterBuster(),\n };\n }\n}\n","import type { Query } from '@tanstack/vue-query';\n\nimport type { QueryMetaPersisterCookieType } from '../../types/index.js';\n\nimport { BeanModelLocal } from './bean.model.local.js';\n\nexport class BeanModelCookie extends BeanModelLocal {\n $serializeCookie(obj?: Query) {\n return String(obj?.state?.data ?? '');\n }\n\n $deserializeCookie(value?: any) {\n return {\n state: {\n data: value,\n dataUpdateCount: 0,\n dataUpdatedAt: Date.now(),\n error: null,\n errorUpdateCount: 0,\n errorUpdatedAt: 0,\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchMeta: null,\n isInvalidated: false,\n status: 'success',\n fetchStatus: 'idle',\n },\n queryKey: undefined,\n queryHash: undefined,\n buster: this._getPersisterBuster(),\n };\n }\n\n protected _cookieCoerce(value?: string, cookieType?: QueryMetaPersisterCookieType) {\n if (value === undefined || value === '') return undefined; // string of '' means should delete the cookie\n if (!cookieType || cookieType === 'auto') {\n return value === 'true' ? true : value === 'false' ? false : value;\n } else if (cookieType === 'boolean') {\n return value === 'true' ? true : value === 'false' ? false : Boolean(Number(value));\n } else if (cookieType === 'number') {\n return Number(value);\n } else if (cookieType === 'date') {\n return new Date(value);\n } else if (cookieType === 'string') {\n return value;\n }\n return value;\n }\n}\n","import type {\n DataTag,\n DefaultError,\n InvalidateOptions,\n InvalidateQueryFilters,\n Query,\n QueryFilters,\n QueryKey,\n RefetchOptions,\n RefetchQueryFilters,\n SetDataOptions,\n Updater,\n} from '@tanstack/vue-query';\n\nimport localforage from 'localforage';\nimport { cast } from 'zova';\n\nimport type { MaybeRefDeep, NoUnknown } from '../../common/types.js';\n\nimport { BeanModelCookie } from './bean.model.cookie.js';\n\nexport class BeanModelQuery extends BeanModelCookie {\n $setQueryData<\n TQueryFnData,\n TTaggedQueryKey extends QueryKey,\n TData = TTaggedQueryKey extends DataTag<unknown, infer TaggedValue> ? TaggedValue : TQueryFnData,\n >(\n queryKey: TTaggedQueryKey,\n updater: Updater<NoInfer<TData> | undefined, NoInfer<TData> | undefined>,\n persisterSave?: boolean,\n options?: MaybeRefDeep<SetDataOptions>,\n ): TData | undefined;\n $setQueryData<TQueryFnData, TData = NoUnknown<TQueryFnData>>(\n queryKey: MaybeRefDeep<QueryKey>,\n updater: Updater<NoInfer<TData> | undefined, NoInfer<TData> | undefined>,\n persisterSave?: boolean,\n options?: MaybeRefDeep<SetDataOptions>,\n ): TData | undefined;\n $setQueryData(queryKey, updater, persisterSave, options) {\n queryKey = this._forceQueryKeyPrefix(queryKey);\n const data = this.$queryClient.setQueryData(queryKey, updater, options);\n if (data === undefined) {\n if (persisterSave) {\n this.$persisterRemove(queryKey);\n }\n this.$setQueryDataDirect(queryKey, data);\n } else {\n if (persisterSave) {\n this.$persisterSave(queryKey);\n }\n }\n return data;\n }\n\n $queryFind<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData>(\n filters: QueryFilters,\n ): Query<TQueryFnData, TError, TData> | undefined {\n filters = this.$normalizeFilters(filters);\n return this.$queryClient.getQueryCache().find(filters as any);\n }\n\n $invalidateQueries(filters?: InvalidateQueryFilters, options?: MaybeRefDeep<InvalidateOptions>): Promise<void> {\n filters = this.$normalizeFilters(filters);\n return this.$queryClient.invalidateQueries(filters, options);\n }\n\n $refetchQueries(filters?: RefetchQueryFilters, options?: MaybeRefDeep<RefetchOptions>): Promise<void> {\n filters = this.$normalizeFilters(filters);\n return this.$queryClient.refetchQueries(filters, options);\n }\n\n $setQueryDataDirect(queryKey: QueryKey, value: any) {\n const query = this.$queryFind({ queryKey, exact: true });\n query?.setData(value);\n }\n\n async $clear() {\n const queries = this.$queryClient.getQueryCache().getAll();\n for (const query of queries) {\n query?.setData(undefined);\n }\n // remove all db cache\n await localforage.clear();\n }\n\n $normalizeFilters<T extends {}>(filters?: T): T {\n if (!filters) filters = {} as T;\n const queryKey = this._forceQueryKeyPrefix(cast(filters).queryKey);\n return { ...filters, queryKey };\n }\n}\n","import type { DefaultError, QueryClient, QueryKey, UseQueryDefinedReturnType, UseQueryOptions, UseQueryReturnType } from '@tanstack/vue-query';\nimport type { UnwrapNestedRefs } from 'vue';\n\nimport { checkErrorJwtExpired } from '@cabloy/utils';\nimport { useQuery } from '@tanstack/vue-query';\nimport { cast } from 'zova';\n\nimport type { DefinedInitialQueryOptions, UndefinedInitialQueryOptions } from '../../common/types.js';\n\nimport { resolveStaleTime } from '../../types/index.js';\nimport { BeanModelQuery } from './bean.model.query.js';\n\nexport class BeanModelUseQuery extends BeanModelQuery {\n $useQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: UndefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): UnwrapNestedRefs<UseQueryReturnType<TData, TError>>;\n $useQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: DefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): UnwrapNestedRefs<UseQueryDefinedReturnType<TData, TError>>;\n $useQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: UseQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>,\n queryClient?: QueryClient,\n ): UnwrapNestedRefs<UseQueryReturnType<TData, TError>>;\n $useQuery(options, queryClient) {\n const queryKey = this.self._forceQueryKeyPrefix(options.queryKey);\n const persister = this._createPersister(options.meta?.persister);\n const optionsDefault: any = {};\n if (!cast(options).meta?.disableErrorEffect) {\n optionsDefault.throwOnError = (error: Error, query) => {\n let errorInfo = cast(options).meta?.errorInfo;\n if (typeof errorInfo === 'function') {\n errorInfo = errorInfo(error, query);\n }\n if (!error.message.includes('useQuery:') && !checkErrorJwtExpired(error)) {\n error.message = `useQuery: [${queryKey.join(', ')}]: ${error.message}`;\n }\n this.$errorHandler(error, errorInfo ?? 'useQuery');\n return false;\n };\n }\n options = Object.assign(optionsDefault, options, { queryKey, persister });\n // staleTime\n const sync = typeof options.meta?.persister === 'object' && options.meta?.persister?.sync;\n if (sync !== true) {\n const staleTime = options.staleTime ?? this.scopeSelf.config.query.staleTime.async;\n const queryCache = this.$queryFind({ queryKey });\n const queryCacheExists = queryCache?.state.data !== undefined;\n options.staleTime = query => {\n if (process.env.CLIENT && this.ctx.meta.$ssr.isRuntimeSsrPreHydration && queryCacheExists) {\n return resolveStaleTime(this.scopeSelf.config.query.staleTime.ssr, query);\n }\n return resolveStaleTime(staleTime, query);\n };\n }\n return this.ctx.util.instanceScope(() => {\n return useQuery(options, queryClient);\n });\n }\n}\n","import type {\n DefaultError,\n Query,\n QueryClient,\n QueryKey,\n QueryMeta,\n UseQueryDefinedReturnType,\n UseQueryOptions,\n UseQueryReturnType,\n} from '@tanstack/vue-query';\nimport type { UnwrapNestedRefs } from 'vue';\n\nimport { hashKey } from '@tanstack/vue-query';\nimport { deepExtend, useCustomRef } from 'zova';\n\nimport type { DefinedInitialQueryOptions, UndefinedInitialQueryOptions } from '../../common/types.js';\nimport type { QueryMetaPersister, UseQueryComputedOptions } from '../../types/query.js';\n\nimport { BeanModelUseQuery } from './bean.model.useQuery.js';\n\nconst SymbolUseQueries = Symbol('SymbolUseQueries');\nconst SymbolUseComputeds = Symbol('SymbolUseComputeds');\n\nexport class BeanModelUseState extends BeanModelUseQuery {\n private [SymbolUseQueries]: Record<string, unknown> = {};\n private [SymbolUseComputeds]: Record<string, unknown> = {};\n\n async $loadStateDb<T>(dbData: T): Promise<T> {\n return await dbData;\n }\n\n $useStateDb<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: UndefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): TData;\n $useStateDb<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: DefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): TData;\n $useStateDb<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: UseQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>,\n queryClient?: QueryClient,\n ): TData;\n $useStateDb(options, queryClient) {\n options = deepExtend(\n {\n meta: {\n maxAge: this.scopeSelf.config.persister.maxAge.local,\n } satisfies QueryMeta,\n },\n options,\n {\n enabled: false,\n staleTime: Infinity,\n meta: {\n ssr: {\n dehydrate: false,\n },\n persister: { storage: 'db', sync: false },\n } satisfies QueryMeta,\n },\n );\n const self = this;\n return useCustomRef(() => {\n return {\n get() {\n return self._handleAsyncDataGet(options, queryClient, true);\n },\n set(value) {\n self._handleSyncDataSet(options, queryClient, true, value);\n },\n };\n });\n }\n\n $useStateLocal<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: UndefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): TData;\n $useStateLocal<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: DefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): TData;\n $useStateLocal<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: UseQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>,\n queryClient?: QueryClient,\n ): TData;\n $useStateLocal(options, queryClient) {\n options = deepExtend(\n {\n meta: {\n persister: {\n serializeDefault: (obj?: Query) => {\n return this.$serializeLocal(obj);\n },\n deserializeDefault: (value?: string) => {\n return this.$deserializeLocal(value);\n },\n storageKeySimplify: true,\n },\n } satisfies QueryMeta,\n },\n options,\n {\n enabled: false,\n staleTime: Infinity,\n meta: {\n persister: { storage: 'local', sync: true } satisfies QueryMetaPersister,\n },\n },\n );\n const self = this;\n return useCustomRef(() => {\n return {\n get() {\n return self._handleSyncDataGet(options, queryClient, true);\n },\n set(value) {\n self._handleSyncDataSet(options, queryClient, true, value);\n },\n };\n });\n // return useComputed({\n // get() {\n // return self._handleSyncDataGet(options, queryClient, true);\n // },\n // set(value) {\n // self._handleSyncDataSet(options, queryClient, true, value);\n // },\n // });\n }\n\n $useStateCookie<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: UndefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): TData;\n $useStateCookie<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: DefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): TData;\n $useStateCookie<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: UseQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>,\n queryClient?: QueryClient,\n ): TData;\n $useStateCookie(options, queryClient) {\n options = deepExtend(\n {\n meta: {\n persister: {\n serializeDefault: (obj?: Query) => {\n return this.$serializeCookie(obj);\n },\n deserializeDefault: (value?: string) => {\n const cookieType = options.meta.persister.cookieType;\n return this.$deserializeCookie(this._cookieCoerce(value, cookieType));\n },\n storageKeySimplify: true,\n },\n } satisfies QueryMeta,\n },\n options,\n {\n enabled: false,\n staleTime: Infinity,\n meta: {\n persister: { storage: 'cookie', sync: true } satisfies QueryMetaPersister,\n },\n },\n );\n const self = this;\n return useCustomRef(() => {\n return {\n get() {\n return self._handleSyncDataGet(options, queryClient, true);\n },\n set(value) {\n self._handleSyncDataSet(options, queryClient, true, value);\n },\n };\n });\n // return useComputed({\n // get() {\n // return self._handleSyncDataGet(options, queryClient, true);\n // },\n // set(value) {\n // self._handleSyncDataSet(options, queryClient, true, value);\n // },\n // });\n }\n\n $useStateMem<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: UndefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): TData;\n $useStateMem<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: DefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): TData;\n $useStateMem<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: UseQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>,\n queryClient?: QueryClient,\n ): TData;\n $useStateMem(options, queryClient) {\n options = deepExtend({}, options, {\n enabled: false,\n staleTime: Infinity,\n meta: {\n persister: false,\n },\n });\n const self = this;\n return useCustomRef(() => {\n return {\n get() {\n return self._handleSyncDataGet(options, queryClient, false);\n },\n set(value) {\n self._handleSyncDataSet(options, queryClient, false, value);\n },\n };\n });\n // return useComputed({\n // get() {\n // return self._handleSyncDataGet(options, queryClient, false);\n // },\n // set(value) {\n // self._handleSyncDataSet(options, queryClient, false, value);\n // },\n // });\n }\n\n $useStateComputed<TDATA, TQueryKey extends QueryKey>(options: UseQueryComputedOptions<TDATA, TQueryKey>): TDATA {\n const queryKey = this.self._forceQueryKeyPrefix(options.queryKey);\n const queryHash = hashKey(queryKey);\n if (!this[SymbolUseComputeds][queryHash]) {\n this[SymbolUseComputeds][queryHash] = this.$useComputed(options.queryFn, options.debugOptions);\n }\n return this[SymbolUseComputeds][queryHash] as unknown as TDATA;\n }\n\n $useStateData<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: UndefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): UnwrapNestedRefs<UseQueryReturnType<TData, TError>>;\n $useStateData<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: DefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): UnwrapNestedRefs<UseQueryDefinedReturnType<TData, TError>>;\n $useStateData<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: UseQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>,\n queryClient?: QueryClient,\n ): UnwrapNestedRefs<UseQueryReturnType<TData, TError>>;\n $useStateData(options, queryClient) {\n const queryKey = this.self._forceQueryKeyPrefix(options.queryKey);\n const queryHash = hashKey(queryKey);\n if (!this[SymbolUseQueries][queryHash]) {\n const useQuery = this.$useQuery(options, queryClient);\n this[SymbolUseQueries][queryHash] = useQuery;\n if (!options.meta?.disableSuspenseOnInit) {\n useQuery.suspense();\n }\n }\n return this[SymbolUseQueries][queryHash];\n }\n\n private _handleAsyncDataGet(options, queryClient, persister) {\n const query = this.$useStateData(options, queryClient);\n if (query.data !== undefined) return query.data;\n return this._handleAsyncDataGet_inner(options, queryClient, persister);\n }\n\n private async _handleAsyncDataGet_inner(options, queryClient, persister) {\n const queryKey = options.queryKey;\n const query = this.$useStateData(options, queryClient);\n if (persister) {\n const data = await this.$persisterLoad(queryKey);\n if (data !== undefined) {\n this.$setQueryData(queryKey, data, false);\n }\n }\n if (query.data === undefined) {\n this._handleSyncDataGet_defaultData(queryKey, options);\n }\n return query.data;\n }\n\n private _handleSyncDataGet(options, queryClient, persister) {\n const queryKey = options.queryKey;\n const query = this.$useStateData(options, queryClient);\n if (query.data !== undefined) return query.data;\n if (persister) {\n const data = this.$persisterLoad(queryKey);\n if (data !== undefined) {\n this.$setQueryData(queryKey, data, false);\n }\n }\n if (query.data === undefined) {\n this._handleSyncDataGet_defaultData(queryKey, options);\n }\n return query.data;\n }\n\n private _handleSyncDataGet_defaultData(queryKey, options) {\n let defaultData = options.meta?.defaultData;\n if (typeof defaultData === 'function') {\n defaultData = defaultData();\n }\n if (defaultData !== undefined) {\n // need not persister save\n this.$setQueryData(queryKey, defaultData, false);\n }\n }\n\n private _handleSyncDataSet(options, queryClient, persister, value) {\n const queryKey = options.queryKey;\n const query = this.$useStateData(options, queryClient);\n this.$setQueryData(queryKey, value, persister);\n return query;\n }\n}\n","import type { DefaultError, QueryClient, QueryKey, UseQueryDefinedReturnType, UseQueryOptions, UseQueryReturnType } from '@tanstack/vue-query';\nimport type { UnwrapNestedRefs } from 'vue';\n\nimport type { DefinedInitialQueryOptions, UndefinedInitialQueryOptions } from '../../common/types.js';\nimport type { StateType } from '../../types/query.js';\n\nimport { BeanModelUseState } from './bean.model.useState.js';\n\nexport class BeanModelUseStateGeneral extends BeanModelUseState {\n $useState<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n stateType: 'db' | 'local' | 'cookie' | 'mem',\n options: UndefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): TData;\n $useState<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n stateType: 'db' | 'local' | 'cookie' | 'mem',\n options: DefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): TData;\n $useState<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n stateType: 'db' | 'local' | 'cookie' | 'mem',\n options: UseQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>,\n queryClient?: QueryClient,\n ): TData;\n $useState<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n stateType: 'data',\n options: UndefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): UnwrapNestedRefs<UseQueryReturnType<TData, TError>>;\n $useState<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n stateType: 'data',\n options: DefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n ): UnwrapNestedRefs<UseQueryDefinedReturnType<TData, TError>>;\n $useState<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n stateType: 'data',\n options: UseQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>,\n queryClient?: QueryClient,\n ): UnwrapNestedRefs<UseQueryReturnType<TData, TError>>;\n $useState(stateType: StateType, options, queryClient) {\n switch (stateType) {\n case 'db':\n return this.$useStateDb(options, queryClient);\n case 'local':\n return this.$useStateLocal(options, queryClient);\n case 'cookie':\n return this.$useStateCookie(options, queryClient);\n case 'mem':\n return this.$useStateMem(options, queryClient);\n case 'data':\n return this.$useStateData(options, queryClient);\n }\n }\n}\n","import type { DefaultError, MutationKey, MutationObserverOptions, QueryClient, UseMutationReturnType } from '@tanstack/vue-query';\nimport type { UnwrapNestedRefs } from 'vue';\n\nimport { hashKey, useMutation } from '@tanstack/vue-query';\nimport { cast } from 'zova';\n\nimport type { MaybeRefDeep } from '../../common/types.js';\n\nimport { BeanModelUseStateGeneral } from './bean.model.useStateGeneral.js';\n\nconst SymbolUseMutations = Symbol('SymbolUseMutations');\n\nexport class BeanModelUseMutation extends BeanModelUseStateGeneral {\n private [SymbolUseMutations]: Record<string, unknown> = {};\n\n $useMutation<TData = unknown, TVariables = void, TContext = unknown>(\n mutationOptions: MaybeRefDeep<MutationObserverOptions<TData, DefaultError, TVariables, TContext>>,\n queryClient?: QueryClient,\n ): UnwrapNestedRefs<UseMutationReturnType<TData, DefaultError, TVariables, TContext>> {\n return this.ctx.util.instanceScope(() => {\n return useMutation(mutationOptions, queryClient) as any;\n });\n }\n\n $useMutationData<TData = unknown, TVariables = void, TContext = unknown>(\n mutationOptions: MaybeRefDeep<MutationObserverOptions<TData, DefaultError, TVariables, TContext>>,\n queryClient?: QueryClient,\n ): UnwrapNestedRefs<UseMutationReturnType<TData, DefaultError, TVariables, TContext>> {\n let mutationKey: MutationKey = cast(mutationOptions).mutationKey;\n if (!mutationKey || mutationKey.length === 0) throw new Error('should specify mutationKey');\n mutationKey = this.self._forceQueryKeyPrefix(mutationKey);\n const mutationHash = hashKey(mutationKey);\n if (!this[SymbolUseMutations][mutationHash]) {\n const optionsDefault: any = {};\n if (!cast(mutationOptions).meta?.disableErrorEffect) {\n optionsDefault.onError = (error, variables, context) => {\n let errorInfo = cast(mutationOptions).meta?.errorInfo;\n if (typeof errorInfo === 'function') {\n errorInfo = errorInfo(error, variables, context);\n }\n this.$errorHandler(error, errorInfo ?? 'useMutationData');\n };\n }\n mutationOptions = Object.assign(optionsDefault, mutationOptions, { mutationKey });\n this[SymbolUseMutations][mutationHash] = this.$useMutation(mutationOptions, queryClient);\n }\n return this[SymbolUseMutations][mutationHash] as UnwrapNestedRefs<UseMutationReturnType<TData, DefaultError, TVariables, TContext>>;\n }\n}\n","import { BeanModelUseMutation } from './bean.model.useMutation.js';\n\nexport class BeanModelFirst extends BeanModelUseMutation {}\n","import { Virtual } from 'zova';\nimport { Bean } from 'zova-module-a-bean';\n\nimport { BeanModelFirst } from './bean.model/bean.model.first.js';\n\n@Bean()\n@Virtual()\nexport class BeanModelBase extends BeanModelFirst {}\n","import type { VueQueryPluginOptions } from '@tanstack/vue-query';\n\nimport { dehydrate, hydrate, QueryCache, QueryClient, VueQueryPlugin } from '@tanstack/vue-query';\nimport { BeanBase, deepExtend } from 'zova';\nimport { Service } from 'zova-module-a-bean';\n\n@Service()\nexport class ServiceStorage extends BeanBase {\n private _queryClient: QueryClient;\n\n async moduleLoaded() {\n // options\n let options = this.scope.config.queryClientConfig.defaultOptions;\n if (process.env.SERVER) {\n options = deepExtend({}, options, {\n queries: { gcTime: Infinity },\n });\n }\n // queryCache\n const queryCache = new QueryCache();\n // queryClient\n const queryClient = (this._queryClient = new QueryClient({\n defaultOptions: options,\n queryCache,\n }));\n // use plugin\n const vueQueryPluginOptions: VueQueryPluginOptions = { queryClient };\n this.app.vue.use(VueQueryPlugin, vueQueryPluginOptions);\n }\n\n async appInitialize() {\n // onRendered\n if (process.env.SERVER) {\n this.ctx.meta.$ssr.context.onRendered((err?: Error) => {\n if (!err) {\n this.ctx.meta.$ssr.stateDefer.query = dehydrate(this._queryClient, {\n shouldDehydrateMutation: () => {\n return false;\n },\n });\n }\n this._queryClient.clear();\n });\n }\n // client\n if (process.env.CLIENT && this.ctx.meta.$ssr.isRuntimeSsrPreHydration) {\n hydrate(this._queryClient, this.ctx.meta.$ssr.stateDefer.query);\n }\n }\n}\n","import type { DefaultOptions } from '@tanstack/vue-query';\nimport type { CookieOptions, ZovaSys } from 'zova';\n\nimport { defaultShouldDehydrateQuery } from '@tanstack/vue-query';\n\nimport type { MaxAgeTime, StaleTimeFunction } from '../types/index.js';\n\nconst defaultOptions: DefaultOptions = {\n queries: {\n retry: false,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: true,\n gcTime: 1000 * 60 * 5,\n },\n dehydrate: {\n shouldDehydrateQuery(query) {\n if (query.meta?.ssr?.dehydrate === false) return false;\n // mem query return true, because mem persister is false\n if (typeof query.meta?.persister === 'object' && query.meta?.persister?.sync) return false;\n return defaultShouldDehydrateQuery(query);\n },\n shouldDehydrateMutation(_mutation) {\n return false;\n },\n },\n};\n\nexport const config = (_sys: ZovaSys) => {\n return {\n persister: {\n maxAge: {\n cookie: undefined as MaxAgeTime | undefined, // undefined: session cookie\n local: Infinity as MaxAgeTime,\n db: (1000 * 60 * 60 * 24) as number, // 24 hours\n },\n cookie: {\n options: {} as Omit<CookieOptions, 'expires'>,\n },\n refetchOnRestore: true,\n },\n query: {\n staleTime: {\n async: 0 as StaleTimeFunction,\n ssr: Infinity as StaleTimeFunction,\n },\n },\n queryClientConfig: {\n defaultOptions,\n },\n };\n};\n","import type { IModule } from '@cabloy/module-info';\nimport type { BeanBase, BeanContainer, IMonkeyAppInitialize, IMonkeyBeanInit } from 'zova';\n\nimport { useQueryClient } from '@tanstack/vue-query';\nimport { markRaw } from 'vue';\nimport { BeanSimple } from 'zova';\n\nimport { ServiceStorage } from './service/storage.js';\n\nexport class Monkey extends BeanSimple implements IMonkeyAppInitialize, IMonkeyBeanInit {\n private _moduleSelf: IModule;\n private _storage: ServiceStorage;\n\n constructor(moduleSelf: IModule) {\n super();\n this._moduleSelf = moduleSelf;\n }\n\n private async getStorage() {\n if (!this._storage) {\n this._storage = await this.bean._newBean(ServiceStorage, false);\n }\n return this._storage;\n }\n\n async appInitialize() {\n const storage = await this.getStorage();\n await storage.appInitialize();\n }\n\n async moduleLoading(_module: IModule) {}\n async moduleLoaded(module: IModule) {\n // self\n if (this._moduleSelf === module) {\n const storage = await this.getStorage();\n await storage.moduleLoaded();\n }\n }\n\n async beanInit(bean: BeanContainer, beanInstance: BeanBase) {\n bean.defineProperty(beanInstance, '$queryClient', {\n enumerable: false,\n configurable: true,\n get() {\n return markRaw(useQueryClient());\n },\n });\n }\n}\n","// eslint-disable\n/** bean: begin */\nexport * from '../bean/bean.modelBase.js';\n\nimport 'zova';\ndeclare module 'zova' {\n \n \n}\ndeclare module 'zova-module-a-model' {\n \n}\n/** bean: end */\n/** bean: begin */\nimport { BeanModelBase } from '../bean/bean.modelBase.js';\nimport 'zova';\ndeclare module 'zova' {\n export interface IBeanRecordGeneral {\n 'a-model.bean.modelBase': BeanModelBase;\n }\n}\n/** bean: end */\n/** service: begin */\nexport * from '../service/storage.js';\n\nimport 'zova-module-a-bean';\ndeclare module 'zova-module-a-bean' {\n \n export interface IServiceRecord {\n 'a-model:storage': never;\n }\n\n \n}\ndeclare module 'zova-module-a-model' {\n \n export interface ServiceStorage {\n /** @internal */\n get scope(): ScopeModuleAModel;\n }\n\n export interface ServiceStorage {\n get $beanFullName(): 'a-model.service.storage';\n get $onionName(): 'a-model:storage';\n \n } \n}\n/** service: end */\n/** service: begin */\nimport { ServiceStorage } from '../service/storage.js';\nimport 'zova';\ndeclare module 'zova' {\n export interface IBeanRecordGeneral {\n 'a-model.service.storage': ServiceStorage;\n }\n}\n/** service: end */\n/** config: begin */\nexport * from '../config/config.js';\nimport { config } from '../config/config.js';\n/** config: end */\n/** monkey: begin */\nexport * from '../monkey.js';\n/** monkey: end */\n/** scope: begin */\nimport { BeanScopeBase, type BeanScopeUtil, TypeModuleConfig } from 'zova';\nimport { Scope } from 'zova-module-a-bean';\n\n@Scope()\nexport class ScopeModuleAModel extends BeanScopeBase {}\n\nexport interface ScopeModuleAModel {\n util: BeanScopeUtil;\nconfig: TypeModuleConfig<typeof config>;\n}\n\nimport 'zova';\ndeclare module 'zova' {\n export interface IBeanScopeRecord {\n 'a-model': ScopeModuleAModel;\n }\n \n export interface IBeanScopeConfig {\n 'a-model': ReturnType<typeof config>;\n }\n\n \n\n \n}\n \n/** scope: end */\n","import { createBeanDecorator } from 'zova';\n\nimport type { IDecoratorModelOptions } from '../types/model.js';\n\nexport function Model<T extends IDecoratorModelOptions>(options?: T): ClassDecorator {\n return createBeanDecorator('model', 'ctx', true, options);\n}\n","import type { DataQuery } from '../types/query.js';\n\nexport type TypeQueryAutoLoadFn<T> = () => DataQuery<T> | undefined;\n\nexport async function $QueryAutoLoad<T = any>(fn: TypeQueryAutoLoadFn<T>) {\n return _QueryAutoLoadInner<T>(fn);\n}\n\nexport async function $QueriesAutoLoad<T1 = any, T2 = any, T3 = any, T4 = any, T5 = any>(\n fn1?: TypeQueryAutoLoadFn<T1>,\n fn2?: TypeQueryAutoLoadFn<T2>,\n fn3?: TypeQueryAutoLoadFn<T3>,\n fn4?: TypeQueryAutoLoadFn<T4>,\n fn5?: TypeQueryAutoLoadFn<T5>,\n ...fns: TypeQueryAutoLoadFn<any>[]\n): Promise<\n [\n DataQuery<T1> | undefined,\n DataQuery<T2> | undefined,\n DataQuery<T3> | undefined,\n DataQuery<T4> | undefined,\n DataQuery<T5> | undefined,\n ...DataQuery<any>[],\n ]\n> {\n let promises: any[] = [\n _QueryAutoLoadInner<T1>(fn1),\n _QueryAutoLoadInner<T2>(fn2),\n _QueryAutoLoadInner<T3>(fn3),\n _QueryAutoLoadInner<T4>(fn4),\n _QueryAutoLoadInner<T5>(fn5),\n ];\n if (fns.length > 0) {\n promises = promises.concat(fns.map(fn => _QueryAutoLoadInner(fn)));\n }\n return (await Promise.all(promises)) as any;\n}\n\nasync function _QueryAutoLoadInner<T = any>(fn?: TypeQueryAutoLoadFn<T>) {\n if (!fn) return;\n const query = fn();\n if (query && query.data === undefined) {\n await query.suspense();\n }\n return query;\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zova-module-a-model",
|
|
3
|
-
"version": "5.1.
|
|
4
|
-
"gitHead": "
|
|
3
|
+
"version": "5.1.11",
|
|
4
|
+
"gitHead": "65998fc976043606187db480b17e3b80070176bf",
|
|
5
5
|
"description": "core",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"Zova Module"
|
|
@@ -32,9 +32,9 @@
|
|
|
32
32
|
"postpack": "clean-package restore && npm run clean"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@tanstack/query-core": "^5.99.
|
|
35
|
+
"@tanstack/query-core": "^5.99.1",
|
|
36
36
|
"@tanstack/query-persist-client-core": "^5.97.0",
|
|
37
|
-
"@tanstack/vue-query": "^5.99.
|
|
37
|
+
"@tanstack/vue-query": "^5.99.1",
|
|
38
38
|
"localforage": "^1.10.0",
|
|
39
39
|
"mutate-on-copy": "^1.1.8",
|
|
40
40
|
"table-identity": "^1.1.4"
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { DefaultError, QueryClient, QueryKey, UseQueryDefinedReturnType, UseQueryOptions, UseQueryReturnType } from '@tanstack/vue-query';
|
|
2
2
|
import type { UnwrapNestedRefs } from 'vue';
|
|
3
3
|
|
|
4
|
+
import { checkErrorJwtExpired } from '@cabloy/utils';
|
|
4
5
|
import { useQuery } from '@tanstack/vue-query';
|
|
5
6
|
import { cast } from 'zova';
|
|
6
7
|
|
|
@@ -32,7 +33,7 @@ export class BeanModelUseQuery extends BeanModelQuery {
|
|
|
32
33
|
if (typeof errorInfo === 'function') {
|
|
33
34
|
errorInfo = errorInfo(error, query);
|
|
34
35
|
}
|
|
35
|
-
if (!error.message.includes('useQuery:')) {
|
|
36
|
+
if (!error.message.includes('useQuery:') && !checkErrorJwtExpired(error)) {
|
|
36
37
|
error.message = `useQuery: [${queryKey.join(', ')}]: ${error.message}`;
|
|
37
38
|
}
|
|
38
39
|
this.$errorHandler(error, errorInfo ?? 'useQuery');
|