react-mnemonic 1.3.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -4
- package/dist/bootstrap.cjs +864 -0
- package/dist/bootstrap.cjs.map +1 -0
- package/dist/bootstrap.d.cts +100 -0
- package/dist/bootstrap.d.ts +100 -0
- package/dist/bootstrap.js +857 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/core.cjs +932 -880
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.cts +3 -3
- package/dist/core.d.ts +3 -3
- package/dist/core.js +933 -881
- package/dist/core.js.map +1 -1
- package/dist/index.cjs +918 -866
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +919 -867
- package/dist/index.js.map +1 -1
- package/dist/{key-Bad1hAKN.d.cts → key-B0_N_rl6.d.cts} +1 -1
- package/dist/{key-QIDPiubI.d.ts → key-yGSxLOVj.d.ts} +1 -1
- package/dist/optional.cjs +12 -1
- package/dist/optional.cjs.map +1 -1
- package/dist/optional.d.cts +2 -2
- package/dist/optional.d.ts +2 -2
- package/dist/optional.js +12 -1
- package/dist/optional.js.map +1 -1
- package/dist/schema.cjs +918 -866
- package/dist/schema.cjs.map +1 -1
- package/dist/schema.d.cts +4 -4
- package/dist/schema.d.ts +4 -4
- package/dist/schema.js +919 -867
- package/dist/schema.js.map +1 -1
- package/dist/{types-DcdXbmVl.d.cts → types-RML7bepB.d.cts} +72 -1
- package/dist/{types-DcdXbmVl.d.ts → types-RML7bepB.d.ts} +72 -1
- package/package.json +10 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { y as UseMnemonicRecoveryOptions, w as MnemonicRecoveryHook, U as UseMnemonicKeyOptions, M as MnemonicKeyDescriptor, K as KeySchema, D as JsonSchema, E as SchemaBoundKeyOptions } from './types-RML7bepB.cjs';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Hook for namespace-scoped recovery actions such as hard reset and selective clear.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { y as UseMnemonicRecoveryOptions, w as MnemonicRecoveryHook, U as UseMnemonicKeyOptions, M as MnemonicKeyDescriptor, K as KeySchema, D as JsonSchema, E as SchemaBoundKeyOptions } from './types-RML7bepB.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Hook for namespace-scoped recovery actions such as hard reset and selective clear.
|
package/dist/optional.cjs
CHANGED
|
@@ -3,7 +3,18 @@
|
|
|
3
3
|
var react = require('react');
|
|
4
4
|
|
|
5
5
|
// src/Mnemonic/use-key-optional.ts
|
|
6
|
-
var
|
|
6
|
+
var OPTIONAL_BRIDGE_CONTEXT_KEY = /* @__PURE__ */ Symbol.for("react-mnemonic.optional-bridge-context");
|
|
7
|
+
function getMnemonicOptionalBridgeContext() {
|
|
8
|
+
const globalStore = globalThis;
|
|
9
|
+
const existing = globalStore[OPTIONAL_BRIDGE_CONTEXT_KEY];
|
|
10
|
+
if (existing) {
|
|
11
|
+
return existing;
|
|
12
|
+
}
|
|
13
|
+
const context = react.createContext(null);
|
|
14
|
+
globalStore[OPTIONAL_BRIDGE_CONTEXT_KEY] = context;
|
|
15
|
+
return context;
|
|
16
|
+
}
|
|
17
|
+
var MnemonicOptionalBridgeContext = getMnemonicOptionalBridgeContext();
|
|
7
18
|
function useMnemonicOptionalBridge() {
|
|
8
19
|
return react.useContext(MnemonicOptionalBridgeContext);
|
|
9
20
|
}
|
package/dist/optional.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Mnemonic/optional-bridge.tsx","../src/Mnemonic/use-key-optional.ts","../src/Mnemonic/key-optional.ts"],"names":["createContext","useContext","useMemo","useCallback","useState","useSyncExternalStore","useEffect","useRef"],"mappings":"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","file":"optional.cjs","sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\nimport { createContext, useContext } from \"react\";\nimport type { KeySchema, Listener, MnemonicOptionalBridge, OptionalMnemonicKeyOptions, Unsubscribe } from \"./types\";\n\nexport type OptionalReadResult<T> = {\n value: T;\n rewriteRaw?: string;\n pendingSchema?: KeySchema;\n};\n\nexport interface MnemonicOptionalBridgeInternal extends MnemonicOptionalBridge {\n subscribeRaw(key: string, listener: Listener): Unsubscribe;\n getRawSnapshot(key: string): string | null;\n decodeSnapshot<T>(key: string, raw: string | null, options: OptionalMnemonicKeyOptions<T>): OptionalReadResult<T>;\n setValue<T>(key: string, nextValue: T, options: OptionalMnemonicKeyOptions<T>): void;\n removeValue(key: string): void;\n commitSnapshot<T>(key: string, raw: string | null, snapshot: OptionalReadResult<T>): void;\n}\n\nexport const MnemonicOptionalBridgeContext = createContext<MnemonicOptionalBridgeInternal | null>(null);\n\nexport function useMnemonicOptionalBridge(): MnemonicOptionalBridgeInternal | null {\n return useContext(MnemonicOptionalBridgeContext);\n}\n\nexport function toPublicMnemonicOptionalBridge(\n bridge: MnemonicOptionalBridgeInternal | null,\n): MnemonicOptionalBridge | null {\n if (!bridge) {\n return null;\n }\n return {\n namespace: bridge.namespace,\n capabilities: bridge.capabilities,\n };\n}\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\nimport { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from \"react\";\nimport { toPublicMnemonicOptionalBridge, useMnemonicOptionalBridge } from \"./optional-bridge\";\nimport type {\n MnemonicKeyState,\n MnemonicOptionalBridge,\n OptionalMnemonicKeyDescriptor,\n OptionalMnemonicKeyOptions,\n} from \"./types\";\n\nconst SSR_SNAPSHOT_TOKEN = Symbol(\"mnemonic:optional-ssr-snapshot\");\n\nfunction resolveOptionalDescriptor<T>(\n keyOrDescriptor: string | OptionalMnemonicKeyDescriptor<T, string>,\n options?: OptionalMnemonicKeyOptions<T>,\n): OptionalMnemonicKeyDescriptor<T, string> {\n if (typeof keyOrDescriptor !== \"string\") {\n return keyOrDescriptor;\n }\n if (!options) {\n throw new Error(\"useMnemonicKeyOptional requires options when called with a string key\");\n }\n return {\n key: keyOrDescriptor,\n options,\n };\n}\n\nfunction resolveOptionalDefaultValue<T>(defaultValue: OptionalMnemonicKeyOptions<T>[\"defaultValue\"]): T {\n return typeof defaultValue === \"function\" ? (defaultValue as () => T)() : defaultValue;\n}\n\nfunction resolveOptionalServerValue<T>(options: OptionalMnemonicKeyOptions<T>): T {\n const serverValue = options.ssr?.serverValue;\n if (serverValue !== undefined) {\n return typeof serverValue === \"function\" ? (serverValue as () => T)() : serverValue;\n }\n return resolveOptionalDefaultValue(options.defaultValue);\n}\n\nexport function useMnemonicOptional(): MnemonicOptionalBridge | null {\n const bridge = useMnemonicOptionalBridge();\n return useMemo(() => toPublicMnemonicOptionalBridge(bridge), [bridge]);\n}\n\nexport function useMnemonicKeyOptional<T, K extends string>(\n descriptor: OptionalMnemonicKeyDescriptor<T, K>,\n): MnemonicKeyState<T>;\nexport function useMnemonicKeyOptional<T>(key: string, options: OptionalMnemonicKeyOptions<T>): MnemonicKeyState<T>;\nexport function useMnemonicKeyOptional<T>(\n keyOrDescriptor: string | OptionalMnemonicKeyDescriptor<T, string>,\n options?: OptionalMnemonicKeyOptions<T>,\n): MnemonicKeyState<T> {\n const bridge = useMnemonicOptionalBridge();\n const descriptor = resolveOptionalDescriptor(keyOrDescriptor, options);\n const key = descriptor.key;\n const resolvedOptions = descriptor.options;\n const { defaultValue, onMount, onChange } = resolvedOptions;\n const hasBridge = bridge !== null;\n\n const getFallback = useCallback(() => resolveOptionalDefaultValue(defaultValue), [defaultValue]);\n const getServerValue = useCallback(() => resolveOptionalServerValue(resolvedOptions), [resolvedOptions]);\n\n const [memoryValue, setMemoryValue] = useState<T>(() => getServerValue());\n const raw = useSyncExternalStore<string | null | typeof SSR_SNAPSHOT_TOKEN>(\n useCallback(\n (listener: () => void) => {\n if (!bridge) {\n return () => undefined;\n }\n return bridge.subscribeRaw(key, listener);\n },\n [bridge, key],\n ),\n useCallback(() => (bridge ? bridge.getRawSnapshot(key) : null), [bridge, key]),\n useCallback(\n () => (resolvedOptions.ssr?.serverValue === undefined ? null : SSR_SNAPSHOT_TOKEN),\n [resolvedOptions.ssr?.serverValue],\n ),\n );\n\n const bridgeSnapshot = useMemo(() => {\n if (!bridge) {\n return null;\n }\n if (raw === SSR_SNAPSHOT_TOKEN) {\n return {\n value: getServerValue(),\n };\n }\n return bridge.decodeSnapshot(key, raw, resolvedOptions);\n }, [bridge, getServerValue, key, raw, resolvedOptions]);\n\n useEffect(() => {\n if (!bridge || !bridgeSnapshot || raw === SSR_SNAPSHOT_TOKEN) {\n return;\n }\n bridge.commitSnapshot(key, raw, bridgeSnapshot);\n }, [bridge, bridgeSnapshot, key, raw]);\n\n const value = hasBridge ? (bridgeSnapshot?.value ?? memoryValue) : memoryValue;\n\n const mountedRef = useRef(false);\n const previousRef = useRef(value);\n\n useEffect(() => {\n if (mountedRef.current) {\n return;\n }\n mountedRef.current = true;\n onMount?.(value);\n previousRef.current = value;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const previous = previousRef.current;\n if (Object.is(previous, value)) {\n return;\n }\n previousRef.current = value;\n onChange?.(value, previous);\n }, [onChange, value]);\n\n const set = useMemo<MnemonicKeyState<T>[\"set\"]>(\n () => (next) => {\n if (bridge) {\n const nextValue =\n typeof next === \"function\"\n ? (next as (current: T) => T)(\n bridge.decodeSnapshot(key, bridge.getRawSnapshot(key), resolvedOptions).value,\n )\n : next;\n bridge.setValue(key, nextValue, resolvedOptions);\n return;\n }\n\n setMemoryValue((current) => (typeof next === \"function\" ? (next as (current: T) => T)(current) : next));\n },\n [bridge, key, resolvedOptions],\n );\n\n const reset = useMemo<MnemonicKeyState<T>[\"reset\"]>(\n () => () => {\n if (bridge) {\n bridge.setValue(key, getFallback(), resolvedOptions);\n return;\n }\n setMemoryValue(getFallback());\n },\n [bridge, getFallback, key, resolvedOptions],\n );\n\n const remove = useMemo<MnemonicKeyState<T>[\"remove\"]>(\n () => () => {\n if (bridge) {\n bridge.removeValue(key);\n return;\n }\n setMemoryValue(getFallback());\n },\n [bridge, getFallback, key],\n );\n\n return useMemo(\n () => ({\n value,\n set,\n reset,\n remove,\n }),\n [remove, reset, set, value],\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\nimport type { OptionalMnemonicKeyDescriptor, OptionalMnemonicKeyOptions } from \"./types\";\n\n/**\n * Define a reusable, importable contract for a lean optionally persistent key.\n */\nexport function defineMnemonicKey<const K extends string, T>(\n key: K,\n options: OptionalMnemonicKeyOptions<T>,\n): OptionalMnemonicKeyDescriptor<T, K> {\n return Object.freeze({\n key,\n options,\n });\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/Mnemonic/optional-bridge.tsx","../src/Mnemonic/use-key-optional.ts","../src/Mnemonic/key-optional.ts"],"names":["createContext","useContext","useMemo","useCallback","useState","useSyncExternalStore","useEffect","useRef"],"mappings":";;;;;AAqBA,IAAM,2BAAA,mBAA8B,MAAA,CAAO,GAAA,CAAI,wCAAwC,CAAA;AAEvF,SAAS,gCAAA,GAAmF;AACxF,EAAA,MAAM,WAAA,GAAc,UAAA;AAGpB,EAAA,MAAM,QAAA,GAAW,YAAY,2BAA2B,CAAA;AAExD,EAAA,IAAI,QAAA,EAAU;AACV,IAAA,OAAO,QAAA;AAAA,EACX;AAEA,EAAA,MAAM,OAAA,GAAUA,oBAAqD,IAAI,CAAA;AACzE,EAAA,WAAA,CAAY,2BAA2B,CAAA,GAAI,OAAA;AAC3C,EAAA,OAAO,OAAA;AACX;AAEO,IAAM,gCAAgC,gCAAA,EAAiC;AAEvE,SAAS,yBAAA,GAAmE;AAC/E,EAAA,OAAOC,iBAAW,6BAA6B,CAAA;AACnD;AAEO,SAAS,+BACZ,MAAA,EAC6B;AAC7B,EAAA,IAAI,CAAC,MAAA,EAAQ;AACT,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,OAAO;AAAA,IACH,WAAW,MAAA,CAAO,SAAA;AAAA,IAClB,cAAc,MAAA,CAAO;AAAA,GACzB;AACJ;;;AC1CA,IAAM,kBAAA,0BAA4B,gCAAgC,CAAA;AAElE,SAAS,yBAAA,CACL,iBACA,OAAA,EACwC;AACxC,EAAA,IAAI,OAAO,oBAAoB,QAAA,EAAU;AACrC,IAAA,OAAO,eAAA;AAAA,EACX;AACA,EAAA,IAAI,CAAC,OAAA,EAAS;AACV,IAAA,MAAM,IAAI,MAAM,uEAAuE,CAAA;AAAA,EAC3F;AACA,EAAA,OAAO;AAAA,IACH,GAAA,EAAK,eAAA;AAAA,IACL;AAAA,GACJ;AACJ;AAEA,SAAS,4BAA+B,YAAA,EAAgE;AACpG,EAAA,OAAO,OAAO,YAAA,KAAiB,UAAA,GAAc,YAAA,EAAyB,GAAI,YAAA;AAC9E;AAEA,SAAS,2BAA8B,OAAA,EAA2C;AAC9E,EAAA,MAAM,WAAA,GAAc,QAAQ,GAAA,EAAK,WAAA;AACjC,EAAA,IAAI,gBAAgB,MAAA,EAAW;AAC3B,IAAA,OAAO,OAAO,WAAA,KAAgB,UAAA,GAAc,WAAA,EAAwB,GAAI,WAAA;AAAA,EAC5E;AACA,EAAA,OAAO,2BAAA,CAA4B,QAAQ,YAAY,CAAA;AAC3D;AAEO,SAAS,mBAAA,GAAqD;AACjE,EAAA,MAAM,SAAS,yBAAA,EAA0B;AACzC,EAAA,OAAOC,cAAQ,MAAM,8BAAA,CAA+B,MAAM,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AACzE;AAMO,SAAS,sBAAA,CACZ,iBACA,OAAA,EACmB;AACnB,EAAA,MAAM,SAAS,yBAAA,EAA0B;AACzC,EAAA,MAAM,UAAA,GAAa,yBAAA,CAA0B,eAAA,EAAiB,OAAO,CAAA;AACrE,EAAA,MAAM,MAAM,UAAA,CAAW,GAAA;AACvB,EAAA,MAAM,kBAAkB,UAAA,CAAW,OAAA;AACnC,EAAA,MAAM,EAAE,YAAA,EAAc,OAAA,EAAS,QAAA,EAAS,GAAI,eAAA;AAC5C,EAAA,MAAM,YAAY,MAAA,KAAW,IAAA;AAE7B,EAAA,MAAM,WAAA,GAAcC,kBAAY,MAAM,2BAAA,CAA4B,YAAY,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAC/F,EAAA,MAAM,cAAA,GAAiBA,kBAAY,MAAM,0BAAA,CAA2B,eAAe,CAAA,EAAG,CAAC,eAAe,CAAC,CAAA;AAEvG,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,IAAIC,cAAA,CAAY,MAAM,gBAAgB,CAAA;AACxE,EAAA,MAAM,GAAA,GAAMC,0BAAA;AAAA,IACRF,iBAAA;AAAA,MACI,CAAC,QAAA,KAAyB;AACtB,QAAA,IAAI,CAAC,MAAA,EAAQ;AACT,UAAA,OAAO,MAAM,MAAA;AAAA,QACjB;AACA,QAAA,OAAO,MAAA,CAAO,YAAA,CAAa,GAAA,EAAK,QAAQ,CAAA;AAAA,MAC5C,CAAA;AAAA,MACA,CAAC,QAAQ,GAAG;AAAA,KAChB;AAAA,IACAA,iBAAA,CAAY,MAAO,MAAA,GAAS,MAAA,CAAO,cAAA,CAAe,GAAG,CAAA,GAAI,IAAA,EAAO,CAAC,MAAA,EAAQ,GAAG,CAAC,CAAA;AAAA,IAC7EA,iBAAA;AAAA,MACI,MAAO,eAAA,CAAgB,GAAA,EAAK,WAAA,KAAgB,SAAY,IAAA,GAAO,kBAAA;AAAA,MAC/D,CAAC,eAAA,CAAgB,GAAA,EAAK,WAAW;AAAA;AACrC,GACJ;AAEA,EAAA,MAAM,cAAA,GAAiBD,cAAQ,MAAM;AACjC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACT,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,IAAI,QAAQ,kBAAA,EAAoB;AAC5B,MAAA,OAAO;AAAA,QACH,OAAO,cAAA;AAAe,OAC1B;AAAA,IACJ;AACA,IAAA,OAAO,MAAA,CAAO,cAAA,CAAe,GAAA,EAAK,GAAA,EAAK,eAAe,CAAA;AAAA,EAC1D,GAAG,CAAC,MAAA,EAAQ,gBAAgB,GAAA,EAAK,GAAA,EAAK,eAAe,CAAC,CAAA;AAEtD,EAAAI,eAAA,CAAU,MAAM;AACZ,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,cAAA,IAAkB,QAAQ,kBAAA,EAAoB;AAC1D,MAAA;AAAA,IACJ;AACA,IAAA,MAAA,CAAO,cAAA,CAAe,GAAA,EAAK,GAAA,EAAK,cAAc,CAAA;AAAA,EAClD,GAAG,CAAC,MAAA,EAAQ,cAAA,EAAgB,GAAA,EAAK,GAAG,CAAC,CAAA;AAErC,EAAA,MAAM,KAAA,GAAQ,SAAA,GAAa,cAAA,EAAgB,KAAA,IAAS,WAAA,GAAe,WAAA;AAEnE,EAAA,MAAM,UAAA,GAAaC,aAAO,KAAK,CAAA;AAC/B,EAAA,MAAM,WAAA,GAAcA,aAAO,KAAK,CAAA;AAEhC,EAAAD,eAAA,CAAU,MAAM;AACZ,IAAA,IAAI,WAAW,OAAA,EAAS;AACpB,MAAA;AAAA,IACJ;AACA,IAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AACrB,IAAA,OAAA,GAAU,KAAK,CAAA;AACf,IAAA,WAAA,CAAY,OAAA,GAAU,KAAA;AAAA,EAE1B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAA,eAAA,CAAU,MAAM;AACZ,IAAA,MAAM,WAAW,WAAA,CAAY,OAAA;AAC7B,IAAA,IAAI,MAAA,CAAO,EAAA,CAAG,QAAA,EAAU,KAAK,CAAA,EAAG;AAC5B,MAAA;AAAA,IACJ;AACA,IAAA,WAAA,CAAY,OAAA,GAAU,KAAA;AACtB,IAAA,QAAA,GAAW,OAAO,QAAQ,CAAA;AAAA,EAC9B,CAAA,EAAG,CAAC,QAAA,EAAU,KAAK,CAAC,CAAA;AAEpB,EAAA,MAAM,GAAA,GAAMJ,aAAA;AAAA,IACR,MAAM,CAAC,IAAA,KAAS;AACZ,MAAA,IAAI,MAAA,EAAQ;AACR,QAAA,MAAM,SAAA,GACF,OAAO,IAAA,KAAS,UAAA,GACT,IAAA;AAAA,UACG,MAAA,CAAO,eAAe,GAAA,EAAK,MAAA,CAAO,eAAe,GAAG,CAAA,EAAG,eAAe,CAAA,CAAE;AAAA,SAC5E,GACA,IAAA;AACV,QAAA,MAAA,CAAO,QAAA,CAAS,GAAA,EAAK,SAAA,EAAW,eAAe,CAAA;AAC/C,QAAA;AAAA,MACJ;AAEA,MAAA,cAAA,CAAe,CAAC,YAAa,OAAO,IAAA,KAAS,aAAc,IAAA,CAA2B,OAAO,IAAI,IAAK,CAAA;AAAA,IAC1G,CAAA;AAAA,IACA,CAAC,MAAA,EAAQ,GAAA,EAAK,eAAe;AAAA,GACjC;AAEA,EAAA,MAAM,KAAA,GAAQA,aAAA;AAAA,IACV,MAAM,MAAM;AACR,MAAA,IAAI,MAAA,EAAQ;AACR,QAAA,MAAA,CAAO,QAAA,CAAS,GAAA,EAAK,WAAA,EAAY,EAAG,eAAe,CAAA;AACnD,QAAA;AAAA,MACJ;AACA,MAAA,cAAA,CAAe,aAAa,CAAA;AAAA,IAChC,CAAA;AAAA,IACA,CAAC,MAAA,EAAQ,WAAA,EAAa,GAAA,EAAK,eAAe;AAAA,GAC9C;AAEA,EAAA,MAAM,MAAA,GAASA,aAAA;AAAA,IACX,MAAM,MAAM;AACR,MAAA,IAAI,MAAA,EAAQ;AACR,QAAA,MAAA,CAAO,YAAY,GAAG,CAAA;AACtB,QAAA;AAAA,MACJ;AACA,MAAA,cAAA,CAAe,aAAa,CAAA;AAAA,IAChC,CAAA;AAAA,IACA,CAAC,MAAA,EAAQ,WAAA,EAAa,GAAG;AAAA,GAC7B;AAEA,EAAA,OAAOA,aAAA;AAAA,IACH,OAAO;AAAA,MACH,KAAA;AAAA,MACA,GAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACJ,CAAA;AAAA,IACA,CAAC,MAAA,EAAQ,KAAA,EAAO,GAAA,EAAK,KAAK;AAAA,GAC9B;AACJ;;;ACvKO,SAAS,iBAAA,CACZ,KACA,OAAA,EACmC;AACnC,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACjB,GAAA;AAAA,IACA;AAAA,GACH,CAAA;AACL","file":"optional.cjs","sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\nimport { createContext, useContext, type Context } from \"react\";\nimport type { KeySchema, Listener, MnemonicOptionalBridge, OptionalMnemonicKeyOptions, Unsubscribe } from \"./types\";\n\nexport type OptionalReadResult<T> = {\n value: T;\n rewriteRaw?: string;\n pendingSchema?: KeySchema;\n};\n\nexport interface MnemonicOptionalBridgeInternal extends MnemonicOptionalBridge {\n subscribeRaw(key: string, listener: Listener): Unsubscribe;\n getRawSnapshot(key: string): string | null;\n decodeSnapshot<T>(key: string, raw: string | null, options: OptionalMnemonicKeyOptions<T>): OptionalReadResult<T>;\n setValue<T>(key: string, nextValue: T, options: OptionalMnemonicKeyOptions<T>): void;\n removeValue(key: string): void;\n commitSnapshot<T>(key: string, raw: string | null, snapshot: OptionalReadResult<T>): void;\n}\n\nconst OPTIONAL_BRIDGE_CONTEXT_KEY = Symbol.for(\"react-mnemonic.optional-bridge-context\");\n\nfunction getMnemonicOptionalBridgeContext(): Context<MnemonicOptionalBridgeInternal | null> {\n const globalStore = globalThis as typeof globalThis & {\n [key: symbol]: unknown;\n };\n const existing = globalStore[OPTIONAL_BRIDGE_CONTEXT_KEY];\n\n if (existing) {\n return existing as Context<MnemonicOptionalBridgeInternal | null>;\n }\n\n const context = createContext<MnemonicOptionalBridgeInternal | null>(null);\n globalStore[OPTIONAL_BRIDGE_CONTEXT_KEY] = context;\n return context;\n}\n\nexport const MnemonicOptionalBridgeContext = getMnemonicOptionalBridgeContext();\n\nexport function useMnemonicOptionalBridge(): MnemonicOptionalBridgeInternal | null {\n return useContext(MnemonicOptionalBridgeContext);\n}\n\nexport function toPublicMnemonicOptionalBridge(\n bridge: MnemonicOptionalBridgeInternal | null,\n): MnemonicOptionalBridge | null {\n if (!bridge) {\n return null;\n }\n return {\n namespace: bridge.namespace,\n capabilities: bridge.capabilities,\n };\n}\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\nimport { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from \"react\";\nimport { toPublicMnemonicOptionalBridge, useMnemonicOptionalBridge } from \"./optional-bridge\";\nimport type {\n MnemonicKeyState,\n MnemonicOptionalBridge,\n OptionalMnemonicKeyDescriptor,\n OptionalMnemonicKeyOptions,\n} from \"./types\";\n\nconst SSR_SNAPSHOT_TOKEN = Symbol(\"mnemonic:optional-ssr-snapshot\");\n\nfunction resolveOptionalDescriptor<T>(\n keyOrDescriptor: string | OptionalMnemonicKeyDescriptor<T, string>,\n options?: OptionalMnemonicKeyOptions<T>,\n): OptionalMnemonicKeyDescriptor<T, string> {\n if (typeof keyOrDescriptor !== \"string\") {\n return keyOrDescriptor;\n }\n if (!options) {\n throw new Error(\"useMnemonicKeyOptional requires options when called with a string key\");\n }\n return {\n key: keyOrDescriptor,\n options,\n };\n}\n\nfunction resolveOptionalDefaultValue<T>(defaultValue: OptionalMnemonicKeyOptions<T>[\"defaultValue\"]): T {\n return typeof defaultValue === \"function\" ? (defaultValue as () => T)() : defaultValue;\n}\n\nfunction resolveOptionalServerValue<T>(options: OptionalMnemonicKeyOptions<T>): T {\n const serverValue = options.ssr?.serverValue;\n if (serverValue !== undefined) {\n return typeof serverValue === \"function\" ? (serverValue as () => T)() : serverValue;\n }\n return resolveOptionalDefaultValue(options.defaultValue);\n}\n\nexport function useMnemonicOptional(): MnemonicOptionalBridge | null {\n const bridge = useMnemonicOptionalBridge();\n return useMemo(() => toPublicMnemonicOptionalBridge(bridge), [bridge]);\n}\n\nexport function useMnemonicKeyOptional<T, K extends string>(\n descriptor: OptionalMnemonicKeyDescriptor<T, K>,\n): MnemonicKeyState<T>;\nexport function useMnemonicKeyOptional<T>(key: string, options: OptionalMnemonicKeyOptions<T>): MnemonicKeyState<T>;\nexport function useMnemonicKeyOptional<T>(\n keyOrDescriptor: string | OptionalMnemonicKeyDescriptor<T, string>,\n options?: OptionalMnemonicKeyOptions<T>,\n): MnemonicKeyState<T> {\n const bridge = useMnemonicOptionalBridge();\n const descriptor = resolveOptionalDescriptor(keyOrDescriptor, options);\n const key = descriptor.key;\n const resolvedOptions = descriptor.options;\n const { defaultValue, onMount, onChange } = resolvedOptions;\n const hasBridge = bridge !== null;\n\n const getFallback = useCallback(() => resolveOptionalDefaultValue(defaultValue), [defaultValue]);\n const getServerValue = useCallback(() => resolveOptionalServerValue(resolvedOptions), [resolvedOptions]);\n\n const [memoryValue, setMemoryValue] = useState<T>(() => getServerValue());\n const raw = useSyncExternalStore<string | null | typeof SSR_SNAPSHOT_TOKEN>(\n useCallback(\n (listener: () => void) => {\n if (!bridge) {\n return () => undefined;\n }\n return bridge.subscribeRaw(key, listener);\n },\n [bridge, key],\n ),\n useCallback(() => (bridge ? bridge.getRawSnapshot(key) : null), [bridge, key]),\n useCallback(\n () => (resolvedOptions.ssr?.serverValue === undefined ? null : SSR_SNAPSHOT_TOKEN),\n [resolvedOptions.ssr?.serverValue],\n ),\n );\n\n const bridgeSnapshot = useMemo(() => {\n if (!bridge) {\n return null;\n }\n if (raw === SSR_SNAPSHOT_TOKEN) {\n return {\n value: getServerValue(),\n };\n }\n return bridge.decodeSnapshot(key, raw, resolvedOptions);\n }, [bridge, getServerValue, key, raw, resolvedOptions]);\n\n useEffect(() => {\n if (!bridge || !bridgeSnapshot || raw === SSR_SNAPSHOT_TOKEN) {\n return;\n }\n bridge.commitSnapshot(key, raw, bridgeSnapshot);\n }, [bridge, bridgeSnapshot, key, raw]);\n\n const value = hasBridge ? (bridgeSnapshot?.value ?? memoryValue) : memoryValue;\n\n const mountedRef = useRef(false);\n const previousRef = useRef(value);\n\n useEffect(() => {\n if (mountedRef.current) {\n return;\n }\n mountedRef.current = true;\n onMount?.(value);\n previousRef.current = value;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const previous = previousRef.current;\n if (Object.is(previous, value)) {\n return;\n }\n previousRef.current = value;\n onChange?.(value, previous);\n }, [onChange, value]);\n\n const set = useMemo<MnemonicKeyState<T>[\"set\"]>(\n () => (next) => {\n if (bridge) {\n const nextValue =\n typeof next === \"function\"\n ? (next as (current: T) => T)(\n bridge.decodeSnapshot(key, bridge.getRawSnapshot(key), resolvedOptions).value,\n )\n : next;\n bridge.setValue(key, nextValue, resolvedOptions);\n return;\n }\n\n setMemoryValue((current) => (typeof next === \"function\" ? (next as (current: T) => T)(current) : next));\n },\n [bridge, key, resolvedOptions],\n );\n\n const reset = useMemo<MnemonicKeyState<T>[\"reset\"]>(\n () => () => {\n if (bridge) {\n bridge.setValue(key, getFallback(), resolvedOptions);\n return;\n }\n setMemoryValue(getFallback());\n },\n [bridge, getFallback, key, resolvedOptions],\n );\n\n const remove = useMemo<MnemonicKeyState<T>[\"remove\"]>(\n () => () => {\n if (bridge) {\n bridge.removeValue(key);\n return;\n }\n setMemoryValue(getFallback());\n },\n [bridge, getFallback, key],\n );\n\n return useMemo(\n () => ({\n value,\n set,\n reset,\n remove,\n }),\n [remove, reset, set, value],\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\nimport type { OptionalMnemonicKeyDescriptor, OptionalMnemonicKeyOptions } from \"./types\";\n\n/**\n * Define a reusable, importable contract for a lean optionally persistent key.\n */\nexport function defineMnemonicKey<const K extends string, T>(\n key: K,\n options: OptionalMnemonicKeyOptions<T>,\n): OptionalMnemonicKeyDescriptor<T, K> {\n return Object.freeze({\n key,\n options,\n });\n}\n"]}
|
package/dist/optional.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { O as OptionalMnemonicKeyDescriptor,
|
|
2
|
-
export { C as Codec,
|
|
1
|
+
import { O as OptionalMnemonicKeyDescriptor, i as MnemonicKeyState, z as OptionalMnemonicKeyOptions, A as MnemonicOptionalBridge } from './types-RML7bepB.cjs';
|
|
2
|
+
export { C as Codec, B as OptionalMnemonicKeySSRConfig } from './types-RML7bepB.cjs';
|
|
3
3
|
|
|
4
4
|
declare function useMnemonicOptional(): MnemonicOptionalBridge | null;
|
|
5
5
|
declare function useMnemonicKeyOptional<T, K extends string>(descriptor: OptionalMnemonicKeyDescriptor<T, K>): MnemonicKeyState<T>;
|
package/dist/optional.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { O as OptionalMnemonicKeyDescriptor,
|
|
2
|
-
export { C as Codec,
|
|
1
|
+
import { O as OptionalMnemonicKeyDescriptor, i as MnemonicKeyState, z as OptionalMnemonicKeyOptions, A as MnemonicOptionalBridge } from './types-RML7bepB.js';
|
|
2
|
+
export { C as Codec, B as OptionalMnemonicKeySSRConfig } from './types-RML7bepB.js';
|
|
3
3
|
|
|
4
4
|
declare function useMnemonicOptional(): MnemonicOptionalBridge | null;
|
|
5
5
|
declare function useMnemonicKeyOptional<T, K extends string>(descriptor: OptionalMnemonicKeyDescriptor<T, K>): MnemonicKeyState<T>;
|
package/dist/optional.js
CHANGED
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
import { createContext, useMemo, useCallback, useState, useSyncExternalStore, useEffect, useRef, useContext } from 'react';
|
|
2
2
|
|
|
3
3
|
// src/Mnemonic/use-key-optional.ts
|
|
4
|
-
var
|
|
4
|
+
var OPTIONAL_BRIDGE_CONTEXT_KEY = /* @__PURE__ */ Symbol.for("react-mnemonic.optional-bridge-context");
|
|
5
|
+
function getMnemonicOptionalBridgeContext() {
|
|
6
|
+
const globalStore = globalThis;
|
|
7
|
+
const existing = globalStore[OPTIONAL_BRIDGE_CONTEXT_KEY];
|
|
8
|
+
if (existing) {
|
|
9
|
+
return existing;
|
|
10
|
+
}
|
|
11
|
+
const context = createContext(null);
|
|
12
|
+
globalStore[OPTIONAL_BRIDGE_CONTEXT_KEY] = context;
|
|
13
|
+
return context;
|
|
14
|
+
}
|
|
15
|
+
var MnemonicOptionalBridgeContext = getMnemonicOptionalBridgeContext();
|
|
5
16
|
function useMnemonicOptionalBridge() {
|
|
6
17
|
return useContext(MnemonicOptionalBridgeContext);
|
|
7
18
|
}
|
package/dist/optional.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Mnemonic/optional-bridge.tsx","../src/Mnemonic/use-key-optional.ts","../src/Mnemonic/key-optional.ts"],"names":[],"mappings":"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","file":"optional.js","sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\nimport { createContext, useContext } from \"react\";\nimport type { KeySchema, Listener, MnemonicOptionalBridge, OptionalMnemonicKeyOptions, Unsubscribe } from \"./types\";\n\nexport type OptionalReadResult<T> = {\n value: T;\n rewriteRaw?: string;\n pendingSchema?: KeySchema;\n};\n\nexport interface MnemonicOptionalBridgeInternal extends MnemonicOptionalBridge {\n subscribeRaw(key: string, listener: Listener): Unsubscribe;\n getRawSnapshot(key: string): string | null;\n decodeSnapshot<T>(key: string, raw: string | null, options: OptionalMnemonicKeyOptions<T>): OptionalReadResult<T>;\n setValue<T>(key: string, nextValue: T, options: OptionalMnemonicKeyOptions<T>): void;\n removeValue(key: string): void;\n commitSnapshot<T>(key: string, raw: string | null, snapshot: OptionalReadResult<T>): void;\n}\n\nexport const MnemonicOptionalBridgeContext = createContext<MnemonicOptionalBridgeInternal | null>(null);\n\nexport function useMnemonicOptionalBridge(): MnemonicOptionalBridgeInternal | null {\n return useContext(MnemonicOptionalBridgeContext);\n}\n\nexport function toPublicMnemonicOptionalBridge(\n bridge: MnemonicOptionalBridgeInternal | null,\n): MnemonicOptionalBridge | null {\n if (!bridge) {\n return null;\n }\n return {\n namespace: bridge.namespace,\n capabilities: bridge.capabilities,\n };\n}\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\nimport { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from \"react\";\nimport { toPublicMnemonicOptionalBridge, useMnemonicOptionalBridge } from \"./optional-bridge\";\nimport type {\n MnemonicKeyState,\n MnemonicOptionalBridge,\n OptionalMnemonicKeyDescriptor,\n OptionalMnemonicKeyOptions,\n} from \"./types\";\n\nconst SSR_SNAPSHOT_TOKEN = Symbol(\"mnemonic:optional-ssr-snapshot\");\n\nfunction resolveOptionalDescriptor<T>(\n keyOrDescriptor: string | OptionalMnemonicKeyDescriptor<T, string>,\n options?: OptionalMnemonicKeyOptions<T>,\n): OptionalMnemonicKeyDescriptor<T, string> {\n if (typeof keyOrDescriptor !== \"string\") {\n return keyOrDescriptor;\n }\n if (!options) {\n throw new Error(\"useMnemonicKeyOptional requires options when called with a string key\");\n }\n return {\n key: keyOrDescriptor,\n options,\n };\n}\n\nfunction resolveOptionalDefaultValue<T>(defaultValue: OptionalMnemonicKeyOptions<T>[\"defaultValue\"]): T {\n return typeof defaultValue === \"function\" ? (defaultValue as () => T)() : defaultValue;\n}\n\nfunction resolveOptionalServerValue<T>(options: OptionalMnemonicKeyOptions<T>): T {\n const serverValue = options.ssr?.serverValue;\n if (serverValue !== undefined) {\n return typeof serverValue === \"function\" ? (serverValue as () => T)() : serverValue;\n }\n return resolveOptionalDefaultValue(options.defaultValue);\n}\n\nexport function useMnemonicOptional(): MnemonicOptionalBridge | null {\n const bridge = useMnemonicOptionalBridge();\n return useMemo(() => toPublicMnemonicOptionalBridge(bridge), [bridge]);\n}\n\nexport function useMnemonicKeyOptional<T, K extends string>(\n descriptor: OptionalMnemonicKeyDescriptor<T, K>,\n): MnemonicKeyState<T>;\nexport function useMnemonicKeyOptional<T>(key: string, options: OptionalMnemonicKeyOptions<T>): MnemonicKeyState<T>;\nexport function useMnemonicKeyOptional<T>(\n keyOrDescriptor: string | OptionalMnemonicKeyDescriptor<T, string>,\n options?: OptionalMnemonicKeyOptions<T>,\n): MnemonicKeyState<T> {\n const bridge = useMnemonicOptionalBridge();\n const descriptor = resolveOptionalDescriptor(keyOrDescriptor, options);\n const key = descriptor.key;\n const resolvedOptions = descriptor.options;\n const { defaultValue, onMount, onChange } = resolvedOptions;\n const hasBridge = bridge !== null;\n\n const getFallback = useCallback(() => resolveOptionalDefaultValue(defaultValue), [defaultValue]);\n const getServerValue = useCallback(() => resolveOptionalServerValue(resolvedOptions), [resolvedOptions]);\n\n const [memoryValue, setMemoryValue] = useState<T>(() => getServerValue());\n const raw = useSyncExternalStore<string | null | typeof SSR_SNAPSHOT_TOKEN>(\n useCallback(\n (listener: () => void) => {\n if (!bridge) {\n return () => undefined;\n }\n return bridge.subscribeRaw(key, listener);\n },\n [bridge, key],\n ),\n useCallback(() => (bridge ? bridge.getRawSnapshot(key) : null), [bridge, key]),\n useCallback(\n () => (resolvedOptions.ssr?.serverValue === undefined ? null : SSR_SNAPSHOT_TOKEN),\n [resolvedOptions.ssr?.serverValue],\n ),\n );\n\n const bridgeSnapshot = useMemo(() => {\n if (!bridge) {\n return null;\n }\n if (raw === SSR_SNAPSHOT_TOKEN) {\n return {\n value: getServerValue(),\n };\n }\n return bridge.decodeSnapshot(key, raw, resolvedOptions);\n }, [bridge, getServerValue, key, raw, resolvedOptions]);\n\n useEffect(() => {\n if (!bridge || !bridgeSnapshot || raw === SSR_SNAPSHOT_TOKEN) {\n return;\n }\n bridge.commitSnapshot(key, raw, bridgeSnapshot);\n }, [bridge, bridgeSnapshot, key, raw]);\n\n const value = hasBridge ? (bridgeSnapshot?.value ?? memoryValue) : memoryValue;\n\n const mountedRef = useRef(false);\n const previousRef = useRef(value);\n\n useEffect(() => {\n if (mountedRef.current) {\n return;\n }\n mountedRef.current = true;\n onMount?.(value);\n previousRef.current = value;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const previous = previousRef.current;\n if (Object.is(previous, value)) {\n return;\n }\n previousRef.current = value;\n onChange?.(value, previous);\n }, [onChange, value]);\n\n const set = useMemo<MnemonicKeyState<T>[\"set\"]>(\n () => (next) => {\n if (bridge) {\n const nextValue =\n typeof next === \"function\"\n ? (next as (current: T) => T)(\n bridge.decodeSnapshot(key, bridge.getRawSnapshot(key), resolvedOptions).value,\n )\n : next;\n bridge.setValue(key, nextValue, resolvedOptions);\n return;\n }\n\n setMemoryValue((current) => (typeof next === \"function\" ? (next as (current: T) => T)(current) : next));\n },\n [bridge, key, resolvedOptions],\n );\n\n const reset = useMemo<MnemonicKeyState<T>[\"reset\"]>(\n () => () => {\n if (bridge) {\n bridge.setValue(key, getFallback(), resolvedOptions);\n return;\n }\n setMemoryValue(getFallback());\n },\n [bridge, getFallback, key, resolvedOptions],\n );\n\n const remove = useMemo<MnemonicKeyState<T>[\"remove\"]>(\n () => () => {\n if (bridge) {\n bridge.removeValue(key);\n return;\n }\n setMemoryValue(getFallback());\n },\n [bridge, getFallback, key],\n );\n\n return useMemo(\n () => ({\n value,\n set,\n reset,\n remove,\n }),\n [remove, reset, set, value],\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\nimport type { OptionalMnemonicKeyDescriptor, OptionalMnemonicKeyOptions } from \"./types\";\n\n/**\n * Define a reusable, importable contract for a lean optionally persistent key.\n */\nexport function defineMnemonicKey<const K extends string, T>(\n key: K,\n options: OptionalMnemonicKeyOptions<T>,\n): OptionalMnemonicKeyDescriptor<T, K> {\n return Object.freeze({\n key,\n options,\n });\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/Mnemonic/optional-bridge.tsx","../src/Mnemonic/use-key-optional.ts","../src/Mnemonic/key-optional.ts"],"names":[],"mappings":"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","file":"optional.js","sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\nimport { createContext, useContext, type Context } from \"react\";\nimport type { KeySchema, Listener, MnemonicOptionalBridge, OptionalMnemonicKeyOptions, Unsubscribe } from \"./types\";\n\nexport type OptionalReadResult<T> = {\n value: T;\n rewriteRaw?: string;\n pendingSchema?: KeySchema;\n};\n\nexport interface MnemonicOptionalBridgeInternal extends MnemonicOptionalBridge {\n subscribeRaw(key: string, listener: Listener): Unsubscribe;\n getRawSnapshot(key: string): string | null;\n decodeSnapshot<T>(key: string, raw: string | null, options: OptionalMnemonicKeyOptions<T>): OptionalReadResult<T>;\n setValue<T>(key: string, nextValue: T, options: OptionalMnemonicKeyOptions<T>): void;\n removeValue(key: string): void;\n commitSnapshot<T>(key: string, raw: string | null, snapshot: OptionalReadResult<T>): void;\n}\n\nconst OPTIONAL_BRIDGE_CONTEXT_KEY = Symbol.for(\"react-mnemonic.optional-bridge-context\");\n\nfunction getMnemonicOptionalBridgeContext(): Context<MnemonicOptionalBridgeInternal | null> {\n const globalStore = globalThis as typeof globalThis & {\n [key: symbol]: unknown;\n };\n const existing = globalStore[OPTIONAL_BRIDGE_CONTEXT_KEY];\n\n if (existing) {\n return existing as Context<MnemonicOptionalBridgeInternal | null>;\n }\n\n const context = createContext<MnemonicOptionalBridgeInternal | null>(null);\n globalStore[OPTIONAL_BRIDGE_CONTEXT_KEY] = context;\n return context;\n}\n\nexport const MnemonicOptionalBridgeContext = getMnemonicOptionalBridgeContext();\n\nexport function useMnemonicOptionalBridge(): MnemonicOptionalBridgeInternal | null {\n return useContext(MnemonicOptionalBridgeContext);\n}\n\nexport function toPublicMnemonicOptionalBridge(\n bridge: MnemonicOptionalBridgeInternal | null,\n): MnemonicOptionalBridge | null {\n if (!bridge) {\n return null;\n }\n return {\n namespace: bridge.namespace,\n capabilities: bridge.capabilities,\n };\n}\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\nimport { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from \"react\";\nimport { toPublicMnemonicOptionalBridge, useMnemonicOptionalBridge } from \"./optional-bridge\";\nimport type {\n MnemonicKeyState,\n MnemonicOptionalBridge,\n OptionalMnemonicKeyDescriptor,\n OptionalMnemonicKeyOptions,\n} from \"./types\";\n\nconst SSR_SNAPSHOT_TOKEN = Symbol(\"mnemonic:optional-ssr-snapshot\");\n\nfunction resolveOptionalDescriptor<T>(\n keyOrDescriptor: string | OptionalMnemonicKeyDescriptor<T, string>,\n options?: OptionalMnemonicKeyOptions<T>,\n): OptionalMnemonicKeyDescriptor<T, string> {\n if (typeof keyOrDescriptor !== \"string\") {\n return keyOrDescriptor;\n }\n if (!options) {\n throw new Error(\"useMnemonicKeyOptional requires options when called with a string key\");\n }\n return {\n key: keyOrDescriptor,\n options,\n };\n}\n\nfunction resolveOptionalDefaultValue<T>(defaultValue: OptionalMnemonicKeyOptions<T>[\"defaultValue\"]): T {\n return typeof defaultValue === \"function\" ? (defaultValue as () => T)() : defaultValue;\n}\n\nfunction resolveOptionalServerValue<T>(options: OptionalMnemonicKeyOptions<T>): T {\n const serverValue = options.ssr?.serverValue;\n if (serverValue !== undefined) {\n return typeof serverValue === \"function\" ? (serverValue as () => T)() : serverValue;\n }\n return resolveOptionalDefaultValue(options.defaultValue);\n}\n\nexport function useMnemonicOptional(): MnemonicOptionalBridge | null {\n const bridge = useMnemonicOptionalBridge();\n return useMemo(() => toPublicMnemonicOptionalBridge(bridge), [bridge]);\n}\n\nexport function useMnemonicKeyOptional<T, K extends string>(\n descriptor: OptionalMnemonicKeyDescriptor<T, K>,\n): MnemonicKeyState<T>;\nexport function useMnemonicKeyOptional<T>(key: string, options: OptionalMnemonicKeyOptions<T>): MnemonicKeyState<T>;\nexport function useMnemonicKeyOptional<T>(\n keyOrDescriptor: string | OptionalMnemonicKeyDescriptor<T, string>,\n options?: OptionalMnemonicKeyOptions<T>,\n): MnemonicKeyState<T> {\n const bridge = useMnemonicOptionalBridge();\n const descriptor = resolveOptionalDescriptor(keyOrDescriptor, options);\n const key = descriptor.key;\n const resolvedOptions = descriptor.options;\n const { defaultValue, onMount, onChange } = resolvedOptions;\n const hasBridge = bridge !== null;\n\n const getFallback = useCallback(() => resolveOptionalDefaultValue(defaultValue), [defaultValue]);\n const getServerValue = useCallback(() => resolveOptionalServerValue(resolvedOptions), [resolvedOptions]);\n\n const [memoryValue, setMemoryValue] = useState<T>(() => getServerValue());\n const raw = useSyncExternalStore<string | null | typeof SSR_SNAPSHOT_TOKEN>(\n useCallback(\n (listener: () => void) => {\n if (!bridge) {\n return () => undefined;\n }\n return bridge.subscribeRaw(key, listener);\n },\n [bridge, key],\n ),\n useCallback(() => (bridge ? bridge.getRawSnapshot(key) : null), [bridge, key]),\n useCallback(\n () => (resolvedOptions.ssr?.serverValue === undefined ? null : SSR_SNAPSHOT_TOKEN),\n [resolvedOptions.ssr?.serverValue],\n ),\n );\n\n const bridgeSnapshot = useMemo(() => {\n if (!bridge) {\n return null;\n }\n if (raw === SSR_SNAPSHOT_TOKEN) {\n return {\n value: getServerValue(),\n };\n }\n return bridge.decodeSnapshot(key, raw, resolvedOptions);\n }, [bridge, getServerValue, key, raw, resolvedOptions]);\n\n useEffect(() => {\n if (!bridge || !bridgeSnapshot || raw === SSR_SNAPSHOT_TOKEN) {\n return;\n }\n bridge.commitSnapshot(key, raw, bridgeSnapshot);\n }, [bridge, bridgeSnapshot, key, raw]);\n\n const value = hasBridge ? (bridgeSnapshot?.value ?? memoryValue) : memoryValue;\n\n const mountedRef = useRef(false);\n const previousRef = useRef(value);\n\n useEffect(() => {\n if (mountedRef.current) {\n return;\n }\n mountedRef.current = true;\n onMount?.(value);\n previousRef.current = value;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const previous = previousRef.current;\n if (Object.is(previous, value)) {\n return;\n }\n previousRef.current = value;\n onChange?.(value, previous);\n }, [onChange, value]);\n\n const set = useMemo<MnemonicKeyState<T>[\"set\"]>(\n () => (next) => {\n if (bridge) {\n const nextValue =\n typeof next === \"function\"\n ? (next as (current: T) => T)(\n bridge.decodeSnapshot(key, bridge.getRawSnapshot(key), resolvedOptions).value,\n )\n : next;\n bridge.setValue(key, nextValue, resolvedOptions);\n return;\n }\n\n setMemoryValue((current) => (typeof next === \"function\" ? (next as (current: T) => T)(current) : next));\n },\n [bridge, key, resolvedOptions],\n );\n\n const reset = useMemo<MnemonicKeyState<T>[\"reset\"]>(\n () => () => {\n if (bridge) {\n bridge.setValue(key, getFallback(), resolvedOptions);\n return;\n }\n setMemoryValue(getFallback());\n },\n [bridge, getFallback, key, resolvedOptions],\n );\n\n const remove = useMemo<MnemonicKeyState<T>[\"remove\"]>(\n () => () => {\n if (bridge) {\n bridge.removeValue(key);\n return;\n }\n setMemoryValue(getFallback());\n },\n [bridge, getFallback, key],\n );\n\n return useMemo(\n () => ({\n value,\n set,\n reset,\n remove,\n }),\n [remove, reset, set, value],\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\nimport type { OptionalMnemonicKeyDescriptor, OptionalMnemonicKeyOptions } from \"./types\";\n\n/**\n * Define a reusable, importable contract for a lean optionally persistent key.\n */\nexport function defineMnemonicKey<const K extends string, T>(\n key: K,\n options: OptionalMnemonicKeyOptions<T>,\n): OptionalMnemonicKeyDescriptor<T, K> {\n return Object.freeze({\n key,\n options,\n });\n}\n"]}
|