nusm 0.1.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.
Files changed (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +240 -0
  3. package/dist/adapters/indexDbAdapter.d.ts +3 -0
  4. package/dist/adapters/indexDbAdapter.d.ts.map +1 -0
  5. package/dist/adapters/indexDbAdapter.js +53 -0
  6. package/dist/adapters/indexDbAdapter.js.map +1 -0
  7. package/dist/adapters/localStorageAdapter.d.ts +3 -0
  8. package/dist/adapters/localStorageAdapter.d.ts.map +1 -0
  9. package/dist/adapters/localStorageAdapter.js +6 -0
  10. package/dist/adapters/localStorageAdapter.js.map +1 -0
  11. package/dist/adapters/sessionStorageAdapter.d.ts +3 -0
  12. package/dist/adapters/sessionStorageAdapter.d.ts.map +1 -0
  13. package/dist/adapters/sessionStorageAdapter.js +6 -0
  14. package/dist/adapters/sessionStorageAdapter.js.map +1 -0
  15. package/dist/adapters/storageAdapter.d.ts +3 -0
  16. package/dist/adapters/storageAdapter.d.ts.map +1 -0
  17. package/dist/adapters/storageAdapter.js +62 -0
  18. package/dist/adapters/storageAdapter.js.map +1 -0
  19. package/dist/core/createNusmStore.d.ts +3 -0
  20. package/dist/core/createNusmStore.d.ts.map +1 -0
  21. package/dist/core/createNusmStore.js +491 -0
  22. package/dist/core/createNusmStore.js.map +1 -0
  23. package/dist/devtools/client.d.ts +15 -0
  24. package/dist/devtools/client.d.ts.map +1 -0
  25. package/dist/devtools/client.js +21 -0
  26. package/dist/devtools/client.js.map +1 -0
  27. package/dist/devtools/plugin.d.ts +3 -0
  28. package/dist/devtools/plugin.d.ts.map +1 -0
  29. package/dist/devtools/plugin.js +57 -0
  30. package/dist/devtools/plugin.js.map +1 -0
  31. package/dist/index.d.ts +7 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +6 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/react/index.d.ts +11 -0
  36. package/dist/react/index.d.ts.map +1 -0
  37. package/dist/react/index.js +32 -0
  38. package/dist/react/index.js.map +1 -0
  39. package/dist/types.d.ts +112 -0
  40. package/dist/types.d.ts.map +1 -0
  41. package/dist/types.js +2 -0
  42. package/dist/types.js.map +1 -0
  43. package/dist/utils.d.ts +5 -0
  44. package/dist/utils.d.ts.map +1 -0
  45. package/dist/utils.js +30 -0
  46. package/dist/utils.js.map +1 -0
  47. package/package.json +96 -0
@@ -0,0 +1,491 @@
1
+ import { AsyncDebouncer } from "@tanstack/pacer";
2
+ import { Store } from "@tanstack/store";
3
+ import { createNusmDevtoolsEmitter } from "../devtools/client";
4
+ import { deepMerge, sleep } from "../utils";
5
+ const DEFAULT_EVENT_LOG_CAP = 200;
6
+ const defaultResolveKey = (params) => {
7
+ if (params.kind === "entire") {
8
+ return `nusm:${params.storeId}:entire`;
9
+ }
10
+ return `nusm:${params.storeId}:slice:${params.sliceKey}`;
11
+ };
12
+ const resolveStoreId = (options) => {
13
+ if (options?.storeId)
14
+ return options.storeId;
15
+ const devtoolsName = typeof options?.devtools === "object" ? options.devtools.name : undefined;
16
+ if (devtoolsName) {
17
+ return devtoolsName
18
+ .trim()
19
+ .toLowerCase()
20
+ .replace(/\s+/g, "-")
21
+ .replace(/[^a-z0-9-_]/g, "");
22
+ }
23
+ return undefined;
24
+ };
25
+ const shouldDiscardPersisted = (hydrate) => {
26
+ const discard = hydrate?.discardPersisted;
27
+ if (typeof discard === "function")
28
+ return discard();
29
+ return Boolean(discard);
30
+ };
31
+ const resolveValidateResult = (validateResult, persisted) => {
32
+ if (typeof validateResult === "boolean") {
33
+ return { ok: validateResult, value: persisted };
34
+ }
35
+ return {
36
+ ok: validateResult.ok,
37
+ value: validateResult.value ?? persisted,
38
+ };
39
+ };
40
+ export function createNusmStore(initialState, options) {
41
+ const adapter = options?.adapter;
42
+ const persist = options?.persist;
43
+ const strategy = persist?.strategy ?? "entire";
44
+ const slices = persist?.slices ?? [];
45
+ const hydrateConfig = persist?.hydrate;
46
+ const onError = options?.onError;
47
+ const storeId = resolveStoreId(options);
48
+ const storeIdValue = storeId ?? "nusm";
49
+ const devtoolsEmitter = createNusmDevtoolsEmitter(Boolean(options?.devtools));
50
+ let lastFlushAt;
51
+ if (adapter && !storeId) {
52
+ throw new Error("nusm requires a stable storeId or devtools name when persistence is enabled.");
53
+ }
54
+ const store = new Store(initialState);
55
+ let readyResolve = () => undefined;
56
+ let readyReject = () => undefined;
57
+ const ready = new Promise((resolve, reject) => {
58
+ readyResolve = resolve;
59
+ readyReject = reject;
60
+ });
61
+ let isReady = false;
62
+ let suppressPersist = false;
63
+ const eventLogCap = typeof options?.devtools === "object" && options.devtools.eventLogCap
64
+ ? options.devtools.eventLogCap
65
+ : DEFAULT_EVENT_LOG_CAP;
66
+ const eventLog = [];
67
+ const hydrationStatus = {
68
+ byKey: {},
69
+ overall: adapter ? "pending" : "not_configured",
70
+ };
71
+ const addEvent = (event) => {
72
+ eventLog.push(event);
73
+ if (eventLog.length > eventLogCap) {
74
+ eventLog.splice(0, eventLog.length - eventLogCap);
75
+ }
76
+ devtoolsEmitter?.emitEvent(event);
77
+ };
78
+ const resolveKey = (params) => {
79
+ if (!storeId)
80
+ return "";
81
+ return adapter?.resolveKey
82
+ ? adapter.resolveKey({ storeId, ...params })
83
+ : defaultResolveKey({ storeId, ...params });
84
+ };
85
+ const persistenceUnits = new Map();
86
+ if (adapter) {
87
+ if (strategy === "entire") {
88
+ const key = resolveKey({ kind: "entire" });
89
+ persistenceUnits.set(key, { kind: "entire" });
90
+ hydrationStatus.byKey["entire"] = "pending";
91
+ }
92
+ else {
93
+ for (const slice of slices) {
94
+ const key = resolveKey({ kind: "slice", sliceKey: slice.key });
95
+ persistenceUnits.set(key, { kind: "slice", sliceKey: slice.key });
96
+ hydrationStatus.byKey[slice.key] = "pending";
97
+ }
98
+ }
99
+ }
100
+ const recentWrites = new Map();
101
+ const recentWriteWindowMs = adapter?.name.toLowerCase().includes("index")
102
+ ? 1000
103
+ : 500;
104
+ const queuedPayloads = new Map();
105
+ const flushQueue = async () => {
106
+ if (!adapter || queuedPayloads.size === 0)
107
+ return;
108
+ addEvent({ storeId: storeIdValue, ts: Date.now(), type: "persist_flush_start" });
109
+ const entries = Array.from(queuedPayloads.values());
110
+ queuedPayloads.clear();
111
+ await Promise.all(entries.map(async (entry) => {
112
+ try {
113
+ await adapter.setItem(entry.key, entry.payload);
114
+ recentWrites.set(entry.key, Date.now());
115
+ addEvent({
116
+ key: entry.key,
117
+ sliceKey: entry.sliceKey,
118
+ storeId: storeIdValue,
119
+ ts: Date.now(),
120
+ type: "persist_flush_ok",
121
+ });
122
+ }
123
+ catch (error) {
124
+ addEvent({
125
+ detail: error,
126
+ key: entry.key,
127
+ sliceKey: entry.sliceKey,
128
+ storeId: storeIdValue,
129
+ ts: Date.now(),
130
+ type: "persist_flush_error",
131
+ });
132
+ onError?.(error);
133
+ }
134
+ }));
135
+ lastFlushAt = Date.now();
136
+ emitDevtoolsSnapshot();
137
+ };
138
+ const pacerConfig = adapter?.pacer;
139
+ const pacer = adapter && pacerConfig !== false
140
+ ? new AsyncDebouncer(async () => {
141
+ await flushQueue();
142
+ }, {
143
+ leading: pacerConfig?.leading ?? false,
144
+ trailing: pacerConfig?.trailing ?? true,
145
+ wait: pacerConfig?.wait ?? 0,
146
+ })
147
+ : null;
148
+ const scheduleFlush = () => {
149
+ if (!adapter)
150
+ return;
151
+ if (pacerConfig === false) {
152
+ void flushQueue();
153
+ return;
154
+ }
155
+ pacer?.maybeExecute();
156
+ };
157
+ const enqueuePersist = (entry) => {
158
+ queuedPayloads.set(entry.key, entry);
159
+ addEvent({
160
+ key: entry.key,
161
+ sliceKey: entry.sliceKey,
162
+ storeId: storeIdValue,
163
+ ts: Date.now(),
164
+ type: "persist_scheduled",
165
+ });
166
+ scheduleFlush();
167
+ };
168
+ const subscribeToStore = () => {
169
+ store.subscribe(({ prevVal, currentVal }) => {
170
+ if (!adapter || suppressPersist)
171
+ return;
172
+ if (strategy === "entire") {
173
+ const key = resolveKey({ kind: "entire" });
174
+ enqueuePersist({ key, kind: "entire", payload: currentVal });
175
+ return;
176
+ }
177
+ for (const slice of slices) {
178
+ const prevSlice = slice.select(prevVal);
179
+ const nextSlice = slice.select(currentVal);
180
+ if (Object.is(prevSlice, nextSlice))
181
+ continue;
182
+ const key = resolveKey({ kind: "slice", sliceKey: slice.key });
183
+ enqueuePersist({
184
+ key,
185
+ kind: "slice",
186
+ payload: nextSlice,
187
+ sliceKey: slice.key,
188
+ });
189
+ }
190
+ });
191
+ };
192
+ const applyState = (nextState) => {
193
+ suppressPersist = true;
194
+ store.setState(nextState);
195
+ suppressPersist = false;
196
+ };
197
+ const hydrateEntire = async () => {
198
+ const key = resolveKey({ kind: "entire" });
199
+ if (!adapter)
200
+ return initialState;
201
+ if (shouldDiscardPersisted(hydrateConfig)) {
202
+ hydrationStatus.byKey["entire"] = "discarded";
203
+ addEvent({ storeId: storeIdValue, ts: Date.now(), type: "hydrate_discarded" });
204
+ return initialState;
205
+ }
206
+ try {
207
+ const raw = await adapter.getItem(key);
208
+ if (raw == null) {
209
+ hydrationStatus.byKey["entire"] = "hydrated";
210
+ return initialState;
211
+ }
212
+ let persistedValue = raw;
213
+ if (hydrateConfig?.validate) {
214
+ const result = resolveValidateResult(hydrateConfig.validate(persistedValue), persistedValue);
215
+ if (!result.ok) {
216
+ hydrationStatus.byKey["entire"] = "discarded";
217
+ addEvent({ storeId: storeIdValue, ts: Date.now(), type: "hydrate_discarded" });
218
+ return initialState;
219
+ }
220
+ persistedValue = result.value;
221
+ }
222
+ const merged = hydrateConfig?.merge
223
+ ? hydrateConfig.merge({
224
+ initial: initialState,
225
+ persisted: persistedValue,
226
+ })
227
+ : deepMerge(initialState, persistedValue);
228
+ hydrationStatus.byKey["entire"] = "hydrated";
229
+ return merged;
230
+ }
231
+ catch (error) {
232
+ hydrationStatus.byKey["entire"] = "error";
233
+ addEvent({
234
+ detail: error,
235
+ storeId: storeIdValue,
236
+ ts: Date.now(),
237
+ type: "hydrate_error",
238
+ });
239
+ onError?.(error);
240
+ return initialState;
241
+ }
242
+ };
243
+ const hydrateSlices = async () => {
244
+ let nextState = initialState;
245
+ if (shouldDiscardPersisted(hydrateConfig)) {
246
+ for (const slice of slices) {
247
+ hydrationStatus.byKey[slice.key] = "discarded";
248
+ }
249
+ addEvent({ storeId: storeIdValue, ts: Date.now(), type: "hydrate_discarded" });
250
+ return nextState;
251
+ }
252
+ for (const slice of slices) {
253
+ const key = resolveKey({ kind: "slice", sliceKey: slice.key });
254
+ try {
255
+ const raw = await adapter?.getItem(key);
256
+ if (raw == null) {
257
+ hydrationStatus.byKey[slice.key] = "hydrated";
258
+ continue;
259
+ }
260
+ let persistedValue = raw;
261
+ if (hydrateConfig?.validate) {
262
+ const result = resolveValidateResult(hydrateConfig.validate(persistedValue), persistedValue);
263
+ if (!result.ok) {
264
+ hydrationStatus.byKey[slice.key] = "discarded";
265
+ addEvent({
266
+ sliceKey: slice.key,
267
+ storeId: storeIdValue,
268
+ ts: Date.now(),
269
+ type: "hydrate_discarded",
270
+ });
271
+ continue;
272
+ }
273
+ persistedValue = result.value;
274
+ }
275
+ nextState = slice.apply(nextState, persistedValue);
276
+ hydrationStatus.byKey[slice.key] = "hydrated";
277
+ }
278
+ catch (error) {
279
+ hydrationStatus.byKey[slice.key] = "error";
280
+ addEvent({
281
+ detail: error,
282
+ sliceKey: slice.key,
283
+ storeId: storeIdValue,
284
+ ts: Date.now(),
285
+ type: "hydrate_error",
286
+ });
287
+ onError?.(error);
288
+ }
289
+ }
290
+ return nextState;
291
+ };
292
+ const finalizeHydration = () => {
293
+ const statuses = Object.values(hydrationStatus.byKey);
294
+ if (statuses.includes("error")) {
295
+ hydrationStatus.overall = "error";
296
+ }
297
+ else if (statuses.includes("discarded")) {
298
+ hydrationStatus.overall = "discarded";
299
+ }
300
+ else {
301
+ hydrationStatus.overall = adapter ? "hydrated" : "not_configured";
302
+ }
303
+ };
304
+ const hydrate = async () => {
305
+ if (!adapter) {
306
+ isReady = true;
307
+ readyResolve();
308
+ emitDevtoolsSnapshot();
309
+ return;
310
+ }
311
+ addEvent({ storeId: storeIdValue, ts: Date.now(), type: "hydrate_start" });
312
+ try {
313
+ const hydratedState = strategy === "entire" ? await hydrateEntire() : await hydrateSlices();
314
+ applyState(hydratedState);
315
+ finalizeHydration();
316
+ addEvent({ storeId: storeIdValue, ts: Date.now(), type: "hydrate_applied" });
317
+ isReady = true;
318
+ readyResolve();
319
+ devtoolsEmitter?.emitHydration(storeIdValue, hydrationStatus);
320
+ emitDevtoolsSnapshot();
321
+ }
322
+ catch (error) {
323
+ hydrationStatus.overall = "error";
324
+ addEvent({
325
+ detail: error,
326
+ storeId: storeIdValue,
327
+ ts: Date.now(),
328
+ type: "hydrate_error",
329
+ });
330
+ onError?.(error);
331
+ readyReject(error);
332
+ }
333
+ };
334
+ const handleAdapterEvent = async (event) => {
335
+ if (!adapter)
336
+ return;
337
+ if (event.type !== "clear" && event.key) {
338
+ const lastWrite = recentWrites.get(event.key);
339
+ if (lastWrite && Date.now() - lastWrite < recentWriteWindowMs) {
340
+ return;
341
+ }
342
+ }
343
+ const applyExternalState = (nextState) => {
344
+ suppressPersist = true;
345
+ store.setState(nextState);
346
+ suppressPersist = false;
347
+ addEvent({
348
+ key: event.key,
349
+ storeId: storeIdValue,
350
+ ts: Date.now(),
351
+ type: "adapter_external_event",
352
+ });
353
+ emitDevtoolsSnapshot();
354
+ };
355
+ if (event.type === "clear") {
356
+ if (strategy === "entire") {
357
+ applyExternalState(initialState);
358
+ return;
359
+ }
360
+ let nextState = initialState;
361
+ for (const slice of slices) {
362
+ nextState = slice.apply(nextState, slice.select(initialState));
363
+ }
364
+ applyExternalState(nextState);
365
+ return;
366
+ }
367
+ if (!event.key)
368
+ return;
369
+ const unit = persistenceUnits.get(event.key);
370
+ if (!unit)
371
+ return;
372
+ if (event.type === "remove") {
373
+ if (unit.kind === "entire") {
374
+ applyExternalState(initialState);
375
+ }
376
+ else {
377
+ const slice = slices.find((candidate) => candidate.key === unit.sliceKey);
378
+ if (slice) {
379
+ const resetValue = slice.select(initialState);
380
+ applyExternalState(slice.apply(store.state, resetValue));
381
+ }
382
+ }
383
+ return;
384
+ }
385
+ if (unit.kind === "entire") {
386
+ const raw = await adapter.getItem(event.key);
387
+ if (raw == null)
388
+ return;
389
+ const merged = hydrateConfig?.merge
390
+ ? hydrateConfig.merge({
391
+ initial: initialState,
392
+ persisted: raw,
393
+ })
394
+ : deepMerge(initialState, raw);
395
+ applyExternalState(merged);
396
+ }
397
+ else {
398
+ const slice = slices.find((candidate) => candidate.key === unit.sliceKey);
399
+ if (!slice)
400
+ return;
401
+ const raw = await adapter.getItem(event.key);
402
+ if (raw == null)
403
+ return;
404
+ applyExternalState(slice.apply(store.state, raw));
405
+ }
406
+ };
407
+ const pendingAdapterEvents = [];
408
+ if (adapter?.subscribe) {
409
+ adapter.subscribe((event) => {
410
+ if (!isReady) {
411
+ pendingAdapterEvents.push(event);
412
+ return;
413
+ }
414
+ void handleAdapterEvent(event);
415
+ });
416
+ }
417
+ const readPersistedSnapshot = async () => {
418
+ if (!adapter || !storeId)
419
+ return undefined;
420
+ if (adapter.getAllKeys) {
421
+ const keys = await adapter.getAllKeys();
422
+ const prefix = `nusm:${storeId}:`;
423
+ const relevant = keys.filter((key) => key.startsWith(prefix));
424
+ const results = {};
425
+ for (const key of relevant) {
426
+ const raw = await adapter.getItem(key);
427
+ if (raw == null)
428
+ continue;
429
+ results[key] = raw;
430
+ }
431
+ return results;
432
+ }
433
+ if (strategy === "entire") {
434
+ const key = resolveKey({ kind: "entire" });
435
+ const raw = await adapter.getItem(key);
436
+ if (raw == null)
437
+ return undefined;
438
+ return raw;
439
+ }
440
+ const result = {};
441
+ for (const slice of slices) {
442
+ const key = resolveKey({ kind: "slice", sliceKey: slice.key });
443
+ const raw = await adapter.getItem(key);
444
+ if (raw == null)
445
+ continue;
446
+ result[slice.key] = raw;
447
+ }
448
+ return result;
449
+ };
450
+ const emitDevtoolsSnapshot = () => {
451
+ if (!devtoolsEmitter)
452
+ return;
453
+ void (async () => {
454
+ const persisted = await readPersistedSnapshot();
455
+ devtoolsEmitter.emitSnapshot({
456
+ storeId: storeIdValue,
457
+ memory: store.state,
458
+ persisted,
459
+ hydration: hydrationStatus,
460
+ isReady,
461
+ pendingKeys: Array.from(queuedPayloads.keys()),
462
+ lastFlushAt,
463
+ });
464
+ })();
465
+ };
466
+ const getPersistedSnapshot = async () => {
467
+ return readPersistedSnapshot();
468
+ };
469
+ const getHydrationStatus = () => hydrationStatus;
470
+ const getEventLog = () => eventLog;
471
+ subscribeToStore();
472
+ void hydrate().then(async () => {
473
+ if (pendingAdapterEvents.length > 0) {
474
+ await sleep(0);
475
+ for (const event of pendingAdapterEvents.splice(0)) {
476
+ await handleAdapterEvent(event);
477
+ }
478
+ }
479
+ });
480
+ return {
481
+ getEventLog,
482
+ getHydrationStatus,
483
+ getPersistedSnapshot,
484
+ get isReady() {
485
+ return isReady;
486
+ },
487
+ ready,
488
+ store,
489
+ };
490
+ }
491
+ //# sourceMappingURL=createNusmStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createNusmStore.js","sourceRoot":"","sources":["../../src/core/createNusmStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { HydrationStatus, NusmDevtoolsSnapshot, NusmEvent } from "../types";
2
+ export type NusmDevtoolsEventMap = {
3
+ "nusm:snapshot": NusmDevtoolsSnapshot;
4
+ "nusm:event": NusmEvent;
5
+ "nusm:hydration": {
6
+ storeId: string;
7
+ hydration: HydrationStatus;
8
+ };
9
+ };
10
+ export declare const createNusmDevtoolsEmitter: (enabled: boolean) => {
11
+ emitSnapshot: (snapshot: NusmDevtoolsSnapshot) => void;
12
+ emitEvent: (event: NusmEvent) => void;
13
+ emitHydration: (storeId: string, hydration: HydrationStatus) => void;
14
+ } | null;
15
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/devtools/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEjF,MAAM,MAAM,oBAAoB,GAAG;IACjC,eAAe,EAAE,oBAAoB,CAAC;IACtC,YAAY,EAAE,SAAS,CAAC;IACxB,gBAAgB,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,eAAe,CAAA;KAAE,CAAC;CACnE,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAI,SAAS,OAAO;6BAS7B,oBAAoB;uBAG1B,SAAS;6BAGH,MAAM,aAAa,eAAe;QAI9D,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { EventClient } from "@tanstack/devtools-event-client";
2
+ export const createNusmDevtoolsEmitter = (enabled) => {
3
+ if (!enabled)
4
+ return null;
5
+ const client = new EventClient({
6
+ pluginId: "nusm",
7
+ enabled: true,
8
+ });
9
+ return {
10
+ emitSnapshot: (snapshot) => {
11
+ client.emit("snapshot", snapshot);
12
+ },
13
+ emitEvent: (event) => {
14
+ client.emit("event", event);
15
+ },
16
+ emitHydration: (storeId, hydration) => {
17
+ client.emit("hydration", { storeId, hydration });
18
+ },
19
+ };
20
+ };
21
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/devtools/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAS9D,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,OAAgB,EAAE,EAAE;IAC5D,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,MAAM,MAAM,GAAG,IAAI,WAAW,CAA+B;QAC3D,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,IAAI;KACd,CAAC,CAAC;IAEH,OAAO;QACL,YAAY,EAAE,CAAC,QAA8B,EAAE,EAAE;YAC/C,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACpC,CAAC;QACD,SAAS,EAAE,CAAC,KAAgB,EAAE,EAAE;YAC9B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC9B,CAAC;QACD,aAAa,EAAE,CAAC,OAAe,EAAE,SAA0B,EAAE,EAAE;YAC7D,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QACnD,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { TanStackDevtoolsPlugin } from "@tanstack/devtools";
2
+ export declare const createNusmDevtoolsPlugin: () => TanStackDevtoolsPlugin;
3
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/devtools/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAOjE,eAAO,MAAM,wBAAwB,QAAO,sBAiE3C,CAAC"}
@@ -0,0 +1,57 @@
1
+ export const createNusmDevtoolsPlugin = () => {
2
+ const pluginId = "nusm";
3
+ return {
4
+ id: pluginId,
5
+ name: "nusm",
6
+ defaultOpen: true,
7
+ render: (el) => {
8
+ const container = document.createElement("div");
9
+ container.style.display = "grid";
10
+ container.style.gap = "12px";
11
+ container.style.fontFamily = "monospace";
12
+ const snapshotTitle = document.createElement("h3");
13
+ snapshotTitle.textContent = "Snapshot";
14
+ snapshotTitle.style.margin = "0";
15
+ const snapshotPre = document.createElement("pre");
16
+ snapshotPre.style.whiteSpace = "pre-wrap";
17
+ snapshotPre.style.margin = "0";
18
+ snapshotPre.textContent = "No snapshot yet.";
19
+ const eventsTitle = document.createElement("h3");
20
+ eventsTitle.textContent = "Events";
21
+ eventsTitle.style.margin = "0";
22
+ const eventsPre = document.createElement("pre");
23
+ eventsPre.style.whiteSpace = "pre-wrap";
24
+ eventsPre.style.margin = "0";
25
+ eventsPre.textContent = "No events yet.";
26
+ container.appendChild(snapshotTitle);
27
+ container.appendChild(snapshotPre);
28
+ container.appendChild(eventsTitle);
29
+ container.appendChild(eventsPre);
30
+ el.appendChild(container);
31
+ const onSnapshot = (event) => {
32
+ const detail = event.detail;
33
+ if (!detail?.payload)
34
+ return;
35
+ snapshotPre.textContent = JSON.stringify(detail.payload, null, 2);
36
+ };
37
+ const onEvent = (event) => {
38
+ const detail = event
39
+ .detail;
40
+ if (!detail?.payload)
41
+ return;
42
+ const existing = eventsPre.textContent ?? "";
43
+ const line = JSON.stringify(detail.payload);
44
+ eventsPre.textContent =
45
+ existing === "No events yet." ? line : `${existing}\n${line}`;
46
+ };
47
+ window.addEventListener(`${pluginId}:snapshot`, onSnapshot);
48
+ window.addEventListener(`${pluginId}:event`, onEvent);
49
+ return () => {
50
+ window.removeEventListener(`${pluginId}:snapshot`, onSnapshot);
51
+ window.removeEventListener(`${pluginId}:event`, onEvent);
52
+ el.innerHTML = "";
53
+ };
54
+ },
55
+ };
56
+ };
57
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/devtools/plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export { createIndexDbAdapter } from "./adapters/indexDbAdapter";
2
+ export { createLocalStorageAdapter } from "./adapters/localStorageAdapter";
3
+ export { createSessionStorageAdapter } from "./adapters/sessionStorageAdapter";
4
+ export { createNusmStore } from "./core/createNusmStore";
5
+ export { createNusmDevtoolsPlugin } from "./devtools/plugin";
6
+ export type { AdapterEvent, AdapterEventType, CreateNusmStoreOptions, HydrateConfig, HydrationState, HydrationStatus, NusmDevtoolsSnapshot, IndexDbAdapterOptions, NusmAdapter, NusmEvent, NusmEventType, NusmPacerConfig, NusmStore, PersistSlice, StorageAdapterOptions, StorageLike, } from "./types";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,EACtB,aAAa,EACb,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,WAAW,EACX,SAAS,EACT,aAAa,EACb,eAAe,EACf,SAAS,EACT,YAAY,EACZ,qBAAqB,EACrB,WAAW,GACZ,MAAM,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export { createIndexDbAdapter } from "./adapters/indexDbAdapter";
2
+ export { createLocalStorageAdapter } from "./adapters/localStorageAdapter";
3
+ export { createSessionStorageAdapter } from "./adapters/sessionStorageAdapter";
4
+ export { createNusmStore } from "./core/createNusmStore";
5
+ export { createNusmDevtoolsPlugin } from "./devtools/plugin";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC"}