pinia-plugin-subscription 0.1.8 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-VL_PgzVK.js","sources":["../../src/core/PluginSubscriber.ts","../../src/system/Debug.ts","../../src/utils/store.ts","../../src/utils/validation/index.ts","../../src/core/Store.ts","../../src/utils/constantes.ts","../../src/system/log.ts"],"sourcesContent":["import Store from \"./Store\";\nimport type { PiniaPluginContext, Store as PiniaStore } from \"pinia\";\nimport type { AnyObject } from \"../types\";\nimport type {\n PluginExecutionOptions,\n PluginHydrationScheduler,\n PluginSubscriber as PluginSubscriberInterface,\n PluginSubscriptions,\n StoreMutationSubscription,\n StoreOnActionSubscription\n} from \"../types/plugin\";\nimport type { Console } from \"../types/log\";\n\n\ntype CreateInstance<Instance = Store> = (store: PiniaStore, options: AnyObject, debug: boolean, customConsole?: Console) => Instance | undefined\n\n\nexport default abstract class PluginSubscriber<Instance extends Store> implements PluginSubscriberInterface {\n private _console?: Console\n private _createInstance: CreateInstance\n private _name: string\n private _pluginOptions?: AnyObject\n private _storeInstance?: Instance\n protected _resetStoreCallback?: (store?: PiniaStore) => void\n private _storeOnActionSubscription?: StoreOnActionSubscription\n private _storeMutationSubscription?: StoreMutationSubscription\n private _subscriptions?: PluginSubscriptions\n protected pluginCreated?: (store: PiniaStore) => void\n public execution?: PluginExecutionOptions\n public hydrationScheduler?: PluginHydrationScheduler\n\n\n get console(): Console {\n return this._console ?? console\n }\n\n get name(): string {\n return this._name;\n }\n\n get storeInstance(): Instance | undefined {\n return this._storeInstance\n }\n\n get pluginOptions(): AnyObject {\n return this._pluginOptions ?? {};\n }\n\n set pluginOptions(options: AnyObject | undefined) {\n this._pluginOptions = options;\n }\n\n get resetStoreCallback(): ((store?: PiniaStore) => void) | undefined {\n return this._resetStoreCallback as ((store?: PiniaStore) => void) | undefined;\n }\n\n get storeOnActionSubscription(): StoreOnActionSubscription | undefined {\n return this._storeOnActionSubscription;\n }\n\n get storeMutationSubscription(): StoreMutationSubscription | undefined {\n return this._storeMutationSubscription;\n }\n\n get subscriptions(): PluginSubscriptions | undefined {\n return this._subscriptions\n }\n\n set subscriptions(subscriptions: PluginSubscriptions) {\n this._subscriptions = subscriptions\n }\n\n\n constructor(pluginName: string, createInstanceFunction: CreateInstance, pluginConsole?: Console) {\n this._name = pluginName\n this._createInstance = createInstanceFunction\n\n if (pluginConsole) {\n this._console = pluginConsole\n }\n }\n\n\n public afterHydration(context: PiniaPluginContext, debug: boolean): void | Promise<void> {\n return\n }\n\n public hydrate(context: PiniaPluginContext, debug: boolean): void | Promise<void> {\n return\n }\n\n public invoke(\n { store, options }: PiniaPluginContext,\n debug: boolean\n ): boolean {\n this._storeInstance = this._createInstance(store, { ...options, ...this.pluginOptions }, debug, this.console) as Instance\n\n if (!this._storeInstance) {\n return false\n }\n\n this._subscriptions = this._storeInstance.getSubscriptions()\n this._storeMutationSubscription = this._storeInstance.storeSubscribe\n this._storeOnActionSubscription = this._storeInstance.onAction\n\n if (this.pluginCreated) {\n this.pluginCreated(store)\n }\n\n return true\n }\n}","import type { Console } from \"../types/log\"\n\nexport default abstract class Debug {\n protected abstract _className: string\n private _console?: Console\n private _debug: boolean = false\n\n get console(): Console {\n return this._console ?? console\n }\n set console(customConsole: Console) {\n this._console = customConsole\n }\n\n get debug(): boolean { return this._debug }\n set debug(debug: boolean) { this._debug = debug }\n\n constructor(debug: boolean, customConsole?: Console) {\n this._debug = debug\n\n if (customConsole) {\n this._console = customConsole\n }\n }\n\n\n debugLog(...args: any): void {\n if (this._debug) {\n if (Array.isArray(args)) {\n args[0] = `${this._className} - ${args[0]}`\n }\n this.console.log(...args)\n }\n }\n\n logError(...args: any): void {\n this.console.error(...args)\n }\n}","import { defineStore } from \"pinia\"\nimport type {\n DefineSetupStoreOptions,\n DefineStoreOptions,\n SetupStoreDefinition,\n StateTree,\n Store,\n StoreDefinition,\n _ExtractActionsFromSetupStore,\n _ExtractGettersFromSetupStore,\n _ExtractStateFromSetupStore,\n _GettersTree\n} from \"pinia\"\nimport type { AnyObject } from \"../types\"\nimport type {\n DefineAStoreDefinition,\n DefineAStoreSetupContext,\n EmptyExtensions,\n PluginStoreOptions,\n StoreOptions\n} from \"../types/store\"\n\n\nexport const itemState = {\n '@id': undefined,\n id: undefined\n}\n\ntype DefineAStoreSetup<SS, TExtraExtensions extends Record<string, unknown> = EmptyExtensions> =\n (ctx: DefineAStoreSetupContext<SS, TExtraExtensions>) => SS\n\n/**\n * Options parameter of pinia's `defineStore()` for setup stores, derived from\n * the setup function return type.\n */\ntype DefineAStoreSetupOptions<Id extends string, SS> = DefineSetupStoreOptions<\n Id,\n _ExtractStateFromSetupStore<SS>,\n _ExtractGettersFromSetupStore<SS>,\n _ExtractActionsFromSetupStore<SS>\n>\n\nconst defineAStoreSetupContexts = new WeakMap<object, DefineAStoreSetupContext<AnyObject>>()\nconst defineAStoreSetupContextsById = new Map<string, DefineAStoreSetupContext<AnyObject>>()\nconst setupContextDisposeWrappedStores = new WeakSet<object>()\nconst setupContextMapWarnThreshold = 50\n\nfunction isSetupContextDebugEnabled(options: PluginStoreOptions): boolean {\n return options?.storeOptions?.debug === true\n}\n\nfunction logSetupContextMapSizes(id: string, options: PluginStoreOptions, action: string): void {\n if (!isSetupContextDebugEnabled(options)) {\n return\n }\n\n const setupContextByIdSize = defineAStoreSetupContextsById.size\n console.debug(`[defineAStoreSetup] ${id} - ${action} (contextsById=${setupContextByIdSize})`)\n\n if (setupContextByIdSize >= setupContextMapWarnThreshold) {\n console.warn(`[defineAStoreSetup] contextsById reached ${setupContextByIdSize} entries`)\n }\n}\n\nfunction registerSetupContextCleanupOnDispose(\n store: AnyObject,\n id: string,\n options: PluginStoreOptions\n): void {\n if (setupContextDisposeWrappedStores.has(store) || typeof store.$dispose !== 'function') {\n return\n }\n\n const originalDispose = store.$dispose as (...args: unknown[]) => unknown\n store.$dispose = (...args: unknown[]) => {\n defineAStoreSetupContexts.delete(store)\n defineAStoreSetupContextsById.delete(id)\n logSetupContextMapSizes(id, options, 'dispose cleanup')\n return originalDispose.apply(store, args)\n }\n setupContextDisposeWrappedStores.add(store)\n}\n\n/**\n * Define a store with the setup API. State, getters and actions are inferred\n * from the setup function return, exactly like pinia's `defineStore`, so\n * store members are listed by IDEs and action prototypes are preserved.\n * @template Id The type of the store identifier.\n * @template SS The type of the setup function return.\n * @param id The unique identifier for the store.\n * @param storeDefinition The setup function defining the store.\n * @param options Optional store options.\n * @returns The defined store.\n */\nexport function defineAStore<Id extends string, SS>(\n id: Id,\n storeDefinition: (ctx?: DefineAStoreSetupContext<AnyObject>) => SS,\n options?: StoreOptions\n): SetupStoreDefinition<Id, SS>\n/**\n * Define a store with the options API, mirroring pinia's `defineStore` inference.\n * @template Id The type of the store identifier.\n * @template S The type of the store's state.\n * @template G The type of the store's getters.\n * @template A The type of the store's actions.\n * @param id The unique identifier for the store.\n * @param storeDefinition The store options definition.\n * @param options Optional store options.\n * @returns The defined store.\n */\nexport function defineAStore<Id extends string, S extends StateTree = {}, G extends _GettersTree<S> = {}, A = {}>(\n id: Id,\n storeDefinition: Omit<DefineStoreOptions<Id, S, G, A>, 'id'>,\n options?: StoreOptions\n): StoreDefinition<Id, S, G, A>\n/**\n * Define a store with explicit store/state types, e.g. when plugins augment\n * the store with members not returned by the setup function.\n * @template Sto The type of the store.\n * @template Sta The type of the store's state.\n * @param id The unique identifier for the store.\n * @param storeDefinition The store definition, either as an options object or a setup function.\n * @param options Optional store options.\n * @returns The defined store.\n */\nexport function defineAStore<Sto, Sta>(\n id: string,\n storeDefinition:\n | Omit<DefineStoreOptions<string, StateTree & Sta, AnyObject, Partial<Sto>>, 'id'>\n | ((ctx?: DefineAStoreSetupContext<Sto & Sta>) => AnyObject),\n options?: StoreOptions\n): DefineAStoreDefinition<Sto, Sta>\nexport function defineAStore(\n id: string,\n storeDefinition:\n | Omit<DefineStoreOptions<string, StateTree, AnyObject, AnyObject>, 'id'>\n | DefineAStoreSetup<AnyObject>,\n options?: StoreOptions\n): StoreDefinition {\n const storeOptions: PluginStoreOptions = options ? { storeOptions: options } : {} as PluginStoreOptions\n\n return (typeof storeDefinition === 'function'\n ? defineAStoreSetup(\n id,\n storeDefinition as DefineAStoreSetup<AnyObject>,\n storeOptions\n )\n : defineAStoreOptionApi(\n id,\n storeDefinition,\n storeOptions\n )) as StoreDefinition\n}\n\n/**\n * Define a store with a required, fully typed setup context. State, getters\n * and actions are inferred from the setup function return.\n * @template Id The type of the store identifier.\n * @template SS The type of the setup function return.\n * @template TExtraExtensions The type of the store's extra extensions.\n * @param id The unique identifier for the store.\n * @param storeDefinition The setup function defining the store.\n * @param options Optional store options.\n * @returns The defined store with setup context.\n */\nexport function defineAStoreCtx<Id extends string, SS, TExtraExtensions extends Record<string, unknown> = EmptyExtensions>(\n id: Id,\n storeDefinition: (ctx: DefineAStoreSetupContext<AnyObject, TExtraExtensions>) => SS,\n options?: StoreOptions\n): SetupStoreDefinition<Id, SS>\n/**\n * Define a store with a setup context and explicit store/state types, e.g.\n * when plugins augment the store with members not returned by the setup function.\n * @template Sto The type of the store.\n * @template Sta The type of the store's state.\n * @template TExtraExtensions The type of the store's extra extensions.\n * @param id The unique identifier for the store.\n * @param storeDefinition The setup function defining the store.\n * @param options Optional store options.\n * @returns The defined store with setup context.\n */\nexport function defineAStoreCtx<Sto, Sta, TExtraExtensions extends Record<string, unknown> = EmptyExtensions>(\n id: string,\n storeDefinition: (ctx: DefineAStoreSetupContext<Sto & Sta, TExtraExtensions>) => AnyObject,\n options?: StoreOptions\n): DefineAStoreDefinition<Sto, Sta>\nexport function defineAStoreCtx(\n id: string,\n storeDefinition: DefineAStoreSetup<AnyObject, any>,\n options?: StoreOptions\n): StoreDefinition {\n const storeOptions: PluginStoreOptions = options\n ? { storeOptions: { ...options, enhancedStore: true } }\n : { storeOptions: { enhancedStore: true } } as PluginStoreOptions\n\n return defineAStoreSetup(\n id,\n storeDefinition,\n storeOptions\n ) as StoreDefinition\n}\n\nexport function defineAStoreSetup<Id extends string, SS>(\n id: Id,\n storeDefinition: DefineAStoreSetup<SS>,\n options: PluginStoreOptions\n): SetupStoreDefinition<Id, SS> {\n const setupContext: DefineAStoreSetupContext<SS> = {\n id,\n extensions: {}\n }\n\n const shouldStoreSetupContext = options?.storeOptions?.enhancedStore === true\n\n // `storeOptions` augments pinia's DefineStoreOptionsBase (see createPlugin.ts);\n // the assertion stays valid in compilation units where the augmentation is not loaded.\n const useStore = defineStore(\n id,\n () => storeDefinition(setupContext),\n options as unknown as DefineAStoreSetupOptions<Id, SS>\n )\n\n return Object.assign(((...args: Parameters<typeof useStore>) => {\n if (shouldStoreSetupContext) {\n defineAStoreSetupContextsById.set(id, setupContext as DefineAStoreSetupContext<AnyObject>)\n logSetupContextMapSizes(id, options, 'registered context by id')\n }\n\n const store = useStore(...args)\n\n if (shouldStoreSetupContext) {\n defineAStoreSetupContexts.set(store, setupContext as DefineAStoreSetupContext<AnyObject>)\n defineAStoreSetupContextsById.delete(id)\n logSetupContextMapSizes(id, options, 'moved context to weak map')\n registerSetupContextCleanupOnDispose(store as AnyObject, id, options)\n }\n\n return store\n }) as typeof useStore, useStore)\n}\n\nexport function defineAStoreOptionApi<Id extends string, S extends StateTree = {}, G extends _GettersTree<S> = {}, A = {}>(\n id: Id,\n storeDefinition: Omit<DefineStoreOptions<Id, S, G, A>, 'id'>,\n options?: PluginStoreOptions\n): StoreDefinition<Id, S, G, A> {\n if (options) {\n storeDefinition = { ...storeDefinition, ...(options ?? {}) }\n }\n\n return defineStore(id, storeDefinition)\n}\n\nconst deniedFirstChar = new Set<string>(['_', '$'])\n\n/**\n * Check if a property has a denied first character : ['_', '$'].\n * @param property The property name to check.\n * @returns True if the property has a denied first character, false otherwise.\n */\nexport function hasDeniedFirstChar(property: string): boolean {\n return deniedFirstChar.has(property[0] as string)\n}\n\n/**\n * Get the setup context associated with a store instance (or pending store id).\n * @param store The store instance, or an object exposing the store `$id`.\n * @returns The setup context when the store was defined with `enhancedStore` enabled, undefined otherwise.\n */\nexport function getDefineAStoreSetupContext(store: object): DefineAStoreSetupContext<AnyObject> | undefined {\n const storeRecord = store as AnyObject\n\n return defineAStoreSetupContexts.get(store)\n ?? (typeof storeRecord?.$id === 'string'\n ? defineAStoreSetupContextsById.get(storeRecord.$id)\n : undefined)\n}\n\n/**\n * Get the enhanced store from the context.\n * @template TEnhancedStore The type of the enhanced store.\n * @param ctx The context containing the extensions.\n * @returns The enhanced store casted to the specified types.\n */\nexport function getEnhancedStore<TEnhancedStore>(\n ctx: DefineAStoreSetupContext<TEnhancedStore>\n): TEnhancedStore {\n const enhancedStore = ctx.extensions.enhancedStore ?? ctx.extensions.extending\n\n if (!enhancedStore) {\n throw new Error(`${ctx.id}Store - getEnhancedStore - Error: enhanced store is required`)\n }\n\n return enhancedStore\n}\n\n/**\n * Set the enhanced store in context with deprecated alias support.\n * @template TEnhancedStore The type of the enhanced store.\n * @param ctx The context containing the extensions.\n * @param store The store to expose as enhancement.\n */\nexport function setEnhancedStore<TEnhancedStore>(\n ctx: DefineAStoreSetupContext<TEnhancedStore>,\n store: TEnhancedStore\n): void {\n ctx.extensions.enhancedStore = store\n ctx.extensions.extending = store\n}\n\n/**\n * @deprecated Use getEnhancedStore instead.\n */\nexport function getExtendingStore<TEnhancedStore>(\n ctx: DefineAStoreSetupContext<TEnhancedStore>\n): TEnhancedStore {\n console.warn(`${ctx.id}Store - getExtendingStore is deprecated. Use getEnhancedStore instead.`)\n return getEnhancedStore<TEnhancedStore>(ctx)\n}\n\n/**\n * Get the storage key for a given action and store combination.\n * @param actionName The name of the action.\n * @param store The Pinia store instance.\n * @returns The storage key for the action and store combination.\n */\nexport function getActionStoreKey(actionName: string, store: Store): string {\n return `${actionName}-${store.$id}`\n}","export function isEmpty(value: any): boolean {\n if (!value) {\n return (typeof value === 'boolean' || typeof value === 'number') ? false : true\n }\n\n if (Array.isArray(value)) {\n return value.length === 0\n }\n\n if (typeof value === 'object') {\n return Object.keys(value).length === 0\n }\n\n if (typeof value === 'string') {\n return value.trim() === ''\n }\n\n return false\n}","import { ref, toRef, type Ref } from \"vue\"\nimport Debug from \"../system/Debug\"\nimport { getDefineAStoreSetupContext, hasDeniedFirstChar, setEnhancedStore } from \"../utils/store\"\nimport { isEmpty } from \"../utils/validation\"\n\nimport type {\n PluginSubscriptions,\n StoreMutationSubscription,\n StoreMutationSubscriptionCallback,\n StoreMutationSubscriptionReturn,\n StoreOnActionSubscription,\n StoreOnActionSubscriptionCallback,\n StoreOnActionSubscriptionReturn\n} from \"../types/plugin\"\nimport type { Store as PiniaStore, StateTree } from \"pinia\"\nimport type { Console } from \"../types/log\"\nimport type { AnyObject, PluginSubscriberInterface } from \"../types\"\nimport type { StoreOptions, StatePropertyValue } from \"../types/store\"\n\n\nexport default class Store extends Debug {\n protected _className = 'Store'\n private _onAction?: StoreOnActionSubscriptionCallback\n private _options: StoreOptions\n private _store: PiniaStore\n private _subscriptions: PluginSubscriptions = {}\n private _storeSubscribe?: StoreMutationSubscriptionCallback\n\n protected static _requiredKeys?: string[]\n\n get onAction(): StoreOnActionSubscription | undefined {\n if (!this._onAction) {\n return\n }\n\n return () => ({\n store: this.store as PiniaStore,\n callback: this._onAction\n }) as StoreOnActionSubscriptionReturn\n }\n\n set onAction(onAction: StoreOnActionSubscriptionCallback) {\n this._onAction = onAction\n }\n\n get options(): StoreOptions { return this._options }\n\n get state(): StateTree { return this._store.$state }\n\n set state(state: StateTree) { this._store.$state = state }\n\n get store(): AnyObject { return this._store }\n\n get storeSubscribe(): StoreMutationSubscription | undefined {\n if (!this._storeSubscribe) {\n return\n }\n\n return () => ({\n store: this.store as PiniaStore,\n callback: this._storeSubscribe\n }) as StoreMutationSubscriptionReturn\n }\n\n set storeSubscribe(storeSubscribe: StoreMutationSubscriptionCallback) {\n this._storeSubscribe = storeSubscribe\n }\n\n\n constructor(store: PiniaStore, options: AnyObject, debug: boolean = false, customConsole?: Console) {\n super(debug, customConsole)\n this._options = options.storeOptions\n this._store = store\n\n if (this._options?.enhancedStore) {\n const ctx = getDefineAStoreSetupContext(this.store)\n\n if (ctx) {\n setEnhancedStore(ctx, this.store)\n }\n }\n }\n\n /**\n * Add property to state\n * @param name \n * @param value \n */\n addToState(name: string, value?: StatePropertyValue): void {\n if (!this.isOptionApi()) {\n if (!(value as Ref)?.value) {\n value = ref<StatePropertyValue>(value)\n }\n }\n\n this.state[name] = value\n this.store[name] = toRef(this.state, name)\n }\n\n addSubscription(\n pluginName: string,\n subscription: PluginSubscriberInterface,\n options?: { subscriptionOptions?: StoreOptions, stores?: PiniaStore[] }\n ): void {\n this._subscriptions[pluginName] = { subscription, ...(options ?? {}) }\n }\n\n afterHydration(): void | Promise<void> {\n return\n }\n\n /**\n * Create and return a class instance\n * @param store \n * @param options \n * @param debug \n * @returns \n */\n static customizeStore<Instance extends Store>(\n store: PiniaStore,\n options: AnyObject,\n debug: boolean = false,\n customConsole?: Console\n ): Instance | undefined {\n if (options.storeOptions && this.hasRequiredKeys(options.storeOptions)) {\n return new this(store, options, debug, customConsole) as Instance\n }\n }\n\n getOption(optionName: keyof StoreOptions) {\n return this.options && (this.options as StoreOptions)[optionName]\n }\n\n getStatePropertyValue(propertyName: string) {\n return this.getValue(this.state[propertyName])\n }\n\n getSubscriptions(): PluginSubscriptions | undefined {\n if (isEmpty(this._subscriptions)) {\n return\n }\n\n return this._subscriptions\n }\n\n getValue(value: any) {\n return value?.__v_isRef ? value.value : value\n }\n\n protected hasDeniedFirstChar(property: string): boolean {\n return hasDeniedFirstChar(property)\n }\n\n protected static hasRequiredKeys(options: AnyObject): boolean {\n return this._requiredKeys !== undefined && this._requiredKeys?.every(requiredKey => !!options[requiredKey])\n }\n\n hydrate(): void | Promise<void> {\n return\n }\n\n isOptionApi(): boolean { return this.store._isOptionsAPI }\n\n stateHas(property: string): boolean { return Object.prototype.hasOwnProperty.call(this.state, property) }\n\n storeHas(property: string): boolean { return Object.prototype.hasOwnProperty.call(this.store, property) }\n}","export const pluginName: string = 'pinia-plugin-subscription'","import { pluginName } from '../utils/constantes'\nimport type { Console, LogType, StyleDefinition, StyleDefinitions } from '../types/log'\n\n\nconst style = (bgColor: string, color: string = 'white') =>\n `background-color: ${bgColor}; color: ${color}; padding: 1px; margin-right: 5px; font-size: 12px`\n\n\nexport function log(logStyle: string, args: any) {\n if (!logStyle) {\n throw new Error('Style instructions are required')\n }\n\n console.log(\n '%c%s',\n logStyle,\n args.shift(),\n ...args\n )\n}\n\nexport abstract class CustomConsole implements Console {\n protected _bgColor: string = '#ffec73'\n protected _color: string = 'green'\n protected _icon: string = '🍍⚡'\n protected _errorBgColor: string = '#d24545'\n protected _errorColor: string = 'white'\n protected _errorIcon: string = '🍍⚠️'\n protected abstract _pluginName: string\n protected _styles: StyleDefinitions = {\n error: { bgColor: this._errorBgColor, color: this._errorColor, icon: this._errorIcon },\n info: { bgColor: this._bgColor, color: this._color, icon: this._icon }\n }\n\n protected formatMessage(message: string, icon: string): string {\n return ` [${icon} ${pluginName}] - ${message} `\n }\n\n protected generateStyle(styleDefinition: StyleDefinition): string {\n return style(styleDefinition.bgColor, styleDefinition.color)\n }\n\n protected getStyleDefinition(messageType?: LogType): StyleDefinition {\n return this._styles[messageType ?? 'info']\n }\n\n log(...args: any) {\n this.useLog(\n this.getStyleDefinition(),\n args\n )\n }\n\n error(...args: any) {\n const logType = 'error'\n this.useLog(\n this.getStyleDefinition(logType),\n args\n )\n }\n\n protected rebuildArgs(args: string | any[], icon: string) {\n if (typeof args === 'string') {\n return [this.formatMessage(args, icon)]\n }\n\n if (Array.isArray(args)) {\n return [this.formatMessage(args.shift(), icon), ...(args ?? [])]\n }\n }\n\n protected useLog(styleDefinition: StyleDefinition, args: any) {\n log(\n this.generateStyle(styleDefinition),\n this.rebuildArgs(args, styleDefinition.icon)\n )\n }\n}\n\nclass PluginConsoleClass extends CustomConsole {\n protected _pluginName: string = pluginName\n}\n\nexport const PluginConsole = new PluginConsoleClass()"],"names":["PluginSubscriber","pluginName","createInstanceFunction","pluginConsole","__publicField","options","subscriptions","context","debug","store","Debug","customConsole","args","defineAStoreSetupContexts","defineAStoreSetupContextsById","setupContextDisposeWrappedStores","setupContextMapWarnThreshold","isSetupContextDebugEnabled","logSetupContextMapSizes","id","action","setupContextByIdSize","registerSetupContextCleanupOnDispose","originalDispose","defineAStore","storeDefinition","storeOptions","defineAStoreSetup","defineAStoreOptionApi","defineAStoreCtx","setupContext","shouldStoreSetupContext","useStore","defineStore","deniedFirstChar","hasDeniedFirstChar","property","getDefineAStoreSetupContext","storeRecord","getEnhancedStore","ctx","enhancedStore","setEnhancedStore","getExtendingStore","getActionStoreKey","actionName","isEmpty","value","Store","onAction","state","storeSubscribe","name","ref","subscription","optionName","propertyName","requiredKey","style","bgColor","color","log","logStyle","CustomConsole","message","icon","styleDefinition","messageType","PluginConsoleClass","PluginConsole"],"mappings":"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"}
@@ -28,8 +28,8 @@ export default abstract class PluginSubscriber<Instance extends Store> implement
28
28
  get subscriptions(): PluginSubscriptions | undefined;
29
29
  set subscriptions(subscriptions: PluginSubscriptions);
30
30
  constructor(pluginName: string, createInstanceFunction: CreateInstance, pluginConsole?: Console);
31
- hydrate(context: PiniaPluginContext, debug: boolean): void | Promise<void>;
32
31
  afterHydration(context: PiniaPluginContext, debug: boolean): void | Promise<void>;
32
+ hydrate(context: PiniaPluginContext, debug: boolean): void | Promise<void>;
33
33
  invoke({ store, options }: PiniaPluginContext, debug: boolean): boolean;
34
34
  }
35
35
  export {};
@@ -4,9 +4,13 @@ import type { PluginSubscriber, PluginSubscriptionOptions, PluginSubscriptions }
4
4
  export default class PluginSubscription extends Debug {
5
5
  protected _className: string;
6
6
  private _hydrationScheduler;
7
+ private _onActionSubscriptions;
8
+ private _onActionAfterSubscriptions;
9
+ private _onActionOnErrorSubscriptions;
7
10
  private _options?;
8
11
  private _pluginDebug?;
9
12
  private _resetStoreCallback;
13
+ private _storeRollbackSnapshotsHandler;
10
14
  private _subscribers;
11
15
  private _subscribersDelivered;
12
16
  private _subscribersScheduled;
@@ -16,7 +20,32 @@ export default class PluginSubscription extends Debug {
16
20
  set subscribers(subscribers: PluginSubscriber[]);
17
21
  get subscriptions(): PluginSubscriptions[] | undefined;
18
22
  constructor(subscribers: PluginSubscriber[], debugOrOptions?: PluginSubscriptionOptions | string[], pluginOptions?: PluginSubscriptionOptions);
23
+ private addOnActionAfterCallback;
24
+ private addOnActionOnErrorCallback;
19
25
  private addResetStoreCallback;
26
+ private clearOnActionCallbacksSubscriptions;
27
+ private clearStoreTracking;
28
+ /**
29
+ * Creates a callback collector for the specified action and store.
30
+ * @param actionName The name of the action to collect callbacks for.
31
+ * @param store The store instance associated with the action.
32
+ * @returns A function that collects callbacks for the specified action and store.
33
+ */
34
+ private createOnActionAfterCallbackCollector;
35
+ /**
36
+ * Creates a callback collector for the specified action and store that handles errors.
37
+ * @param actionName The name of the action to collect error callbacks for.
38
+ * @param store The store instance associated with the action.
39
+ * @returns A function that collects error callbacks for the specified action and store.
40
+ */
41
+ private createOnActionOnErrorCallbackCollector;
42
+ /**
43
+ * Rolls back the state snapshot for a given action if an error occurs, and removes the snapshot after the action completes or fails.
44
+ * @param actionName The name of the action being executed.
45
+ * @param store The Pinia store instance.
46
+ * @returns void
47
+ */
48
+ private createRollbackSnapshot;
20
49
  private defineCurrentEnvironment;
21
50
  private definePluginDebug;
22
51
  private definePluginExecution;
@@ -24,15 +53,21 @@ export default class PluginSubscription extends Debug {
24
53
  private defineSubscriberKey;
25
54
  private defineSubscriptionKey;
26
55
  private executeResetStoreCallbacks;
56
+ /**
57
+ * Executes the store's onAction subscription for the given plugin subscriber.
58
+ * @param store The Pinia store instance.
59
+ * @param subscriber The plugin subscriber.
60
+ * @returns void
61
+ */
62
+ private executeStoreOnActionSubscription;
27
63
  private executeSubscriber;
28
64
  private executeSubscriberSafely;
65
+ plugin({ store, options }: PiniaPluginContext): void;
29
66
  private queueSubscriberExecution;
67
+ private registerStoreCleanup;
68
+ private rewriteResetStore;
30
69
  private shouldInvokePlugin;
31
70
  private shouldScheduleAfterHydration;
32
- plugin({ store, options }: PiniaPluginContext): void;
33
- private rewriteResetStore;
34
- private registerStoreCleanup;
35
- private clearStoreTracking;
36
71
  private storeOnActionSubscription;
37
72
  private storeMutationSubscription;
38
73
  private subscriptionDelivery;
@@ -0,0 +1,65 @@
1
+ import type { PiniaPluginContext, Store } from 'pinia';
2
+ /**
3
+ * Handles rollback state snapshots for Pinia stores.
4
+ * This class provides methods to add rollback actions to stores,
5
+ * create rollback snapshots, and manage the state snapshots internally.
6
+ */
7
+ export default class RollbackStateSnapshotsHandler {
8
+ private _stateSnapshots;
9
+ private _storeHasRollbackSnapshots;
10
+ private _storeRollbackSnapshotsParams;
11
+ /**
12
+ * Adds a rollback action to the given store.
13
+ * This method extends the store with a $rollbackAfterFailure function that handles rollback logic for actions.
14
+ * The action arguments are forwarded through apply(), so they must be provided as a single array.
15
+ * @param {Store} store The store to which the rollback action will be added.
16
+ * @returns void
17
+ */
18
+ addRollbackAction(store: Store): void;
19
+ /**
20
+ * Creates a rollback snapshot for the specified action and store.
21
+ * This snapshot can be used to restore the store's state in case of an error during the action execution.
22
+ * @param {string} actionName The name of the action for which the rollback snapshot is created.
23
+ * @param {Store} store The Pinia store instance.
24
+ * @returns An object containing `after` and `onError` callbacks for handling the rollback, or `undefined` if no snapshot is created.
25
+ */
26
+ createOnActionCallbacks(actionName: string, store: Store): {
27
+ after: () => void;
28
+ onError: () => void;
29
+ } | undefined;
30
+ /**
31
+ * Initializes the rollback state snapshots handler from the given Pinia plugin context.
32
+ * This method extracts the rollback snapshot parameters from the store options and stores them internally.
33
+ * @param {PiniaPluginContext} param0 The Pinia plugin context containing the store and its options.
34
+ * @returns void
35
+ */
36
+ initFromPluginContext({ options, store }: PiniaPluginContext): void;
37
+ /**
38
+ * Clears all rollback tracking data for the given store.
39
+ * Must be called when the store is disposed to avoid memory leaks with dynamically created stores.
40
+ * @param {Store} store The disposed Pinia store instance.
41
+ * @returns void
42
+ */
43
+ clearStoreTracking(store: Store): void;
44
+ private patchStore;
45
+ /**
46
+ * Removes a state snapshot identified by the given snapshot key from the internal state snapshot tracking.
47
+ * @param snapshotKey The key of the state snapshot to be removed.
48
+ * @returns void
49
+ */
50
+ private removeStateSnapshot;
51
+ /**
52
+ * Saves the current state snapshot for a given store and action.
53
+ * @param store The Pinia store instance.
54
+ * @param actionName The name of the action being executed.
55
+ * @param stateKeys The state keys to include in the snapshot, or 'all' for the full state.
56
+ * @returns A unique symbol key representing the saved snapshot.
57
+ */
58
+ private saveStateSnapshot;
59
+ /**
60
+ * Checks if the given store has rollback snapshots.
61
+ * @param store The Pinia store instance.
62
+ * @returns True if the store has rollback snapshots, false otherwise.
63
+ */
64
+ storeHasRollbackSnapshots(store: Store): boolean;
65
+ }
@@ -18,8 +18,6 @@ export default class Store extends Debug {
18
18
  get state(): StateTree;
19
19
  set state(state: StateTree);
20
20
  get store(): AnyObject;
21
- hydrate(): void | Promise<void>;
22
- afterHydration(): void | Promise<void>;
23
21
  get storeSubscribe(): StoreMutationSubscription | undefined;
24
22
  set storeSubscribe(storeSubscribe: StoreMutationSubscriptionCallback);
25
23
  constructor(store: PiniaStore, options: AnyObject, debug?: boolean, customConsole?: Console);
@@ -33,6 +31,7 @@ export default class Store extends Debug {
33
31
  subscriptionOptions?: StoreOptions;
34
32
  stores?: PiniaStore[];
35
33
  }): void;
34
+ afterHydration(): void | Promise<void>;
36
35
  /**
37
36
  * Create and return a class instance
38
37
  * @param store
@@ -41,12 +40,13 @@ export default class Store extends Debug {
41
40
  * @returns
42
41
  */
43
42
  static customizeStore<Instance extends Store>(store: PiniaStore, options: AnyObject, debug?: boolean, customConsole?: Console): Instance | undefined;
44
- hasDeniedFirstChar(property: string): boolean;
45
- protected static hasRequiredKeys(options: AnyObject): boolean;
46
43
  getOption(optionName: keyof StoreOptions): import("../types").StoreOptionsPropertyValue;
47
44
  getStatePropertyValue(propertyName: string): any;
48
45
  getSubscriptions(): PluginSubscriptions | undefined;
49
46
  getValue(value: any): any;
47
+ protected hasDeniedFirstChar(property: string): boolean;
48
+ protected static hasRequiredKeys(options: AnyObject): boolean;
49
+ hydrate(): void | Promise<void>;
50
50
  isOptionApi(): boolean;
51
51
  stateHas(property: string): boolean;
52
52
  storeHas(property: string): boolean;
@@ -0,0 +1,3 @@
1
+ import type { StateTree } from 'pinia';
2
+ import type { CreateStateSnapshotKeys } from '../types/plugin';
3
+ export declare function createStateSnapshot(state: StateTree, keys?: CreateStateSnapshotKeys): StateTree;
package/dist/helpers.js CHANGED
@@ -1,7 +1,8 @@
1
- import { C as a, a as r, S as e, i } from "./chunks/index-B-zO0yrr.js";
1
+ import { C as a, a as r, S as e, i } from "./chunks/index-VL_PgzVK.js";
2
2
  export {
3
3
  a as CustomConsole,
4
4
  r as PluginSubscriber,
5
5
  e as Store,
6
6
  i as isEmpty
7
7
  };
8
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -3,8 +3,9 @@ import PluginSubscription from '../core/PluginSubscription';
3
3
  import Store from '../core/Store';
4
4
  export { createPlugin } from "../plugins/createPlugin";
5
5
  export { createHydrationPlugin } from "../plugins/createHydrationPlugin";
6
- export type { AnyObject, Console, CustomStore, DefineAStoreSetupContext, DefineAStoreSetupExtensions, EmptyExtensions, PluginExecutionEnvironment, PluginExecutionOptions, PluginHydrationScheduler, PluginHydrationTiming, PluginRuntimeEnvironment, PluginStoreOptions, PluginSubscriptionOptions, PluginSubscriberInterface, PluginSubscriptionDefinition, PluginSubscriptions, StatePropertyValue, StoreOptions, StoreOptionsPropertyValue, StoreMutationSubscription, StoreMutationSubscriptionCallback, StoreOnActionCallbackParameters, StoreOnActionSubscription, StoreOnActionSubscriptionCallback, NativePiniaSubscription, NativePiniaSubscriptionReturn, SearchCollectionCriteria, LogType, StyleDefinition, StyleDefinitionKeys, StyleDefinitions, ConsoleStyleDefinition, ConsoleStyleDefinitionKeys, ConsoleStyleDefinitions, PartialList, ListTypes, ListTypesMap, List } from "../types";
6
+ export type { AnyObject, Console, CustomStore, DefineAStoreSetupContext, DefineAStoreSetupExtensions, EmptyExtensions, PluginExecutionEnvironment, PluginExecutionOptions, PluginHydrationScheduler, PluginHydrationTiming, PluginRuntimeEnvironment, PluginStoreOptions, PluginSubscriptionOptions, PluginSubscriberInterface, PluginSubscriptionDefinition, PluginSubscriptions, StatePropertyValue, StoreOptions, StoreOptionsExtensions, StoreOptionsPropertyValue, StoreMutationSubscription, StoreMutationSubscriptionCallback, StoreOnActionCallbackParameters, StoreOnActionSubscription, StoreOnActionSubscriptionCallback, NativePiniaSubscription, NativePiniaSubscriptionReturn, SearchCollectionCriteria, LogType, StyleDefinition, StyleDefinitionKeys, StyleDefinitions, ConsoleStyleDefinition, ConsoleStyleDefinitionKeys, ConsoleStyleDefinitions, PartialList, ListTypes, ListTypesMap, List } from "../types";
7
7
  export type { StoreMutationSubscriptionReturn, StoreOnActionSubscriptionReturn } from "../types/plugin";
8
+ export type { RollbackActionParams, RollbackAfterFailureParams } from "../types/store";
8
9
  export { defineAStore, defineAStoreCtx, getDefineAStoreSetupContext, getEnhancedStore, getExtendingStore, setEnhancedStore } from "../utils/store";
9
10
  export { CustomConsole } from "../system/log";
10
11
  export { isEmpty } from "../utils/validation";