/** * Low-level Effect wrappers for Storage, including session + localStorage, and its usage via Context. * @since 8.19.0 */ import type { ParseOptions } from "@effect/schema/AST"; import * as ParseResult from "@effect/schema/ParseResult"; import * as S from "@effect/schema/Schema"; import * as Context from "@typed/context"; import * as Effect from "effect/Effect"; import type * as Layer from "effect/Layer"; import * as O from "effect/Option"; import { Window } from "./Window.js"; /** * The (local/session)Storage interface is a simple key/value store, used to store data * persistently across browser sessions. * @since 8.19.0 * @category models */ export interface Storage extends globalThis.Storage { } /** * The (local/session)Storage interface is a simple key/value store, used to store data * persistently across browser sessions. * @since 8.19.0 * @category context */ export declare const Storage: Context.Tagged; /** * Get an item from storage * @since 8.19.0 * @category getters */ export declare const getItem: (key: string) => StorageEffect>; /** * set an item from storage * @since 8.19.0 * @category setters */ export declare const setItem: (key: string, value: string) => StorageEffect; /** * Delete an item from storage * @since 8.19.0 * @category setters */ export declare const removeItem: (key: string) => StorageEffect; /** * A Layer for using sessionStorage for Storage * @since 8.19.0 * @category context */ export declare const sessionStorage: Layer.Layer; /** * A Layer for using localStorage for Storage * @since 8.19.0 * @category context */ export declare const localStorage: Layer.Layer; /** * SchemaStorage is a wrapper around Storage that allows you to store and retrieve values * that are parsed and encoded using a Schema. Given that storage is a string based key/value * store, this allows you to store and retrieve values that are not strings. JSON.stringify and * JSON.parse is used on the values to store and retrieve them. * * @since 8.19.0 * @category models */ export interface SchemaStorage>>> { readonly schemas: Schemas; readonly get: (key: K, options?: ParseOptions) => StorageEffect>, ParseResult.ParseError, S.Schema.Context>; readonly set: (key: K, value: S.Schema.Type, options?: ParseOptions) => StorageEffect>; readonly remove: (key: K) => StorageEffect; readonly key: (key: K) => SchemaKeyStorage, S.Schema.Type>; } /** * SchemaKeyStorage is effectively a lens into a specific key in a SchemaStorage. * It allows you to get/set/remove a value for a specific key. * * @since 8.19.0 * @category models */ export interface SchemaKeyStorage { readonly schema: S.Schema; readonly get: (options?: ParseOptions) => StorageEffect, ParseResult.ParseError, R>; readonly set: (value: O, options?: ParseOptions) => StorageEffect; readonly remove: StorageEffect; } /** * Construct a SchemaStorage * @since 8.19.0 * @category constructors */ export declare function SchemaStorage>>>(schemas: Schemas): SchemaStorage; /** * Construct a SchemaKeyStorage * @since 8.19.0 * @category constructors */ export declare function SchemaKeyStorage(key: K, schema: S.Schema): SchemaKeyStorage; /** * StorageEffect is a small extension of an Effect, which has 2 additional properties: * local and session. These are utilized to run the effect with either localStorage or * sessionStorage. * * @since 8.19.0 * @category models */ export interface StorageEffect extends Effect.Effect | Storage> { readonly local: Effect.Effect>; readonly session: Effect.Effect>; } /** * StorageEffect is a small extension of an Effect, which has 2 additional properties: * local and session. These are utilized to run the effect with either localStorage or * sessionStorage. * * @since 8.19.0 * @category constructors */ export declare function StorageEffect(effect: Effect.Effect): StorageEffect>; //# sourceMappingURL=Storage.d.ts.map