@ehfuse/forma 3.3.0 → 3.3.2
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/dist/esm/src/core/FieldStore.d.ts +45 -0
- package/dist/esm/src/core/FieldStore.d.ts.map +1 -1
- package/dist/esm/src/core/FieldStore.js +165 -196
- package/dist/esm/src/core/FieldStore.js.map +1 -1
- package/dist/esm/src/hooks/useFormaState.d.ts.map +1 -1
- package/dist/esm/src/hooks/useFormaState.js +36 -11
- package/dist/esm/src/hooks/useFormaState.js.map +1 -1
- package/dist/esm/src/utils/deepEqual.d.ts +32 -0
- package/dist/esm/src/utils/deepEqual.d.ts.map +1 -0
- package/dist/esm/src/utils/deepEqual.js +102 -0
- package/dist/esm/src/utils/deepEqual.js.map +1 -0
- package/dist/esm/src/utils/dotNotation.d.ts.map +1 -1
- package/dist/esm/src/utils/dotNotation.js +3 -0
- package/dist/esm/src/utils/dotNotation.js.map +1 -1
- package/dist/esm/src/utils/persist.d.ts +15 -1
- package/dist/esm/src/utils/persist.d.ts.map +1 -1
- package/dist/esm/src/utils/persist.js +32 -2
- package/dist/esm/src/utils/persist.js.map +1 -1
- package/dist/src/core/FieldStore.d.ts +45 -0
- package/dist/src/core/FieldStore.d.ts.map +1 -1
- package/dist/src/core/FieldStore.js +165 -196
- package/dist/src/core/FieldStore.js.map +1 -1
- package/dist/src/hooks/useFormaState.d.ts.map +1 -1
- package/dist/src/hooks/useFormaState.js +36 -11
- package/dist/src/hooks/useFormaState.js.map +1 -1
- package/dist/src/utils/deepEqual.d.ts +32 -0
- package/dist/src/utils/deepEqual.d.ts.map +1 -0
- package/dist/src/utils/deepEqual.js +105 -0
- package/dist/src/utils/deepEqual.js.map +1 -0
- package/dist/src/utils/dotNotation.d.ts.map +1 -1
- package/dist/src/utils/dotNotation.js +3 -0
- package/dist/src/utils/dotNotation.js.map +1 -1
- package/dist/src/utils/persist.d.ts +15 -1
- package/dist/src/utils/persist.d.ts.map +1 -1
- package/dist/src/utils/persist.js +32 -2
- package/dist/src/utils/persist.js.map +1 -1
- package/package.json +3 -2
|
@@ -14,6 +14,7 @@ exports.useFormaState = useFormaState;
|
|
|
14
14
|
const react_1 = require("react");
|
|
15
15
|
const FieldStore_1 = require("../core/FieldStore");
|
|
16
16
|
const utils_1 = require("../utils");
|
|
17
|
+
const environment_1 = require("../utils/environment");
|
|
17
18
|
const persist_1 = require("../utils/persist");
|
|
18
19
|
const GlobalFormaContext_1 = require("../contexts/GlobalFormaContext");
|
|
19
20
|
/**
|
|
@@ -141,24 +142,48 @@ function useFormaState(initialValues = {}, options = {}) {
|
|
|
141
142
|
}, [store]); // store 의존성 추가
|
|
142
143
|
// Persist: 디바운스된 저장 함수 생성 | Create debounced save function
|
|
143
144
|
const debouncedSaveRef = (0, react_1.useRef)(null);
|
|
145
|
+
// Persist: 디바운스 저장 + 구독 + 이탈/언마운트 시 flush
|
|
146
|
+
// Persist: debounced save + subscription + flush on unmount/page-hide
|
|
147
|
+
// 하나의 effect 로 묶어 debounce 함수 생성과 flush 시점을 동일한 라이프사이클에 둔다.
|
|
148
|
+
// 이렇게 하면 언마운트나 탭 종료 직전의 마지막 변경이 debounce 대기 중에 유실되지 않는다.
|
|
149
|
+
// Keeping creation and flush in one effect ensures the last change isn't lost
|
|
150
|
+
// while still pending in the debounce window on unmount or tab close.
|
|
144
151
|
(0, react_1.useEffect)(() => {
|
|
145
|
-
if (!persistConfig)
|
|
152
|
+
if (!persistConfig) {
|
|
153
|
+
debouncedSaveRef.current = null;
|
|
146
154
|
return;
|
|
155
|
+
}
|
|
147
156
|
const debounceTime = persistConfig.debounce ?? 300;
|
|
148
|
-
|
|
157
|
+
const debouncedSave = (0, persist_1.debounce)((values) => {
|
|
149
158
|
(0, persist_1.savePersistedData)(persistConfig, values, storagePrefix);
|
|
150
159
|
}, debounceTime);
|
|
151
|
-
|
|
152
|
-
// Persist: 값 변경 시 저장 | Save on value change
|
|
153
|
-
(0, react_1.useEffect)(() => {
|
|
154
|
-
if (!persistConfig || !debouncedSaveRef.current)
|
|
155
|
-
return;
|
|
160
|
+
debouncedSaveRef.current = debouncedSave;
|
|
156
161
|
const unsubscribe = store.subscribeGlobal(() => {
|
|
157
|
-
|
|
158
|
-
debouncedSaveRef.current?.(currentValues);
|
|
162
|
+
debouncedSave(store.getValues());
|
|
159
163
|
});
|
|
160
|
-
|
|
161
|
-
|
|
164
|
+
// 페이지 이탈/백그라운드 전환 시 대기 중인 저장을 즉시 실행
|
|
165
|
+
// Flush pending save when the page is hidden or being unloaded.
|
|
166
|
+
// visibilitychange(hidden) + pagehide 가 beforeunload 보다 신뢰도가 높다(특히 모바일).
|
|
167
|
+
const flush = () => debouncedSave.flush();
|
|
168
|
+
const handleVisibility = () => {
|
|
169
|
+
if (document.visibilityState === "hidden")
|
|
170
|
+
flush();
|
|
171
|
+
};
|
|
172
|
+
if ((0, environment_1.isBrowser)()) {
|
|
173
|
+
document.addEventListener("visibilitychange", handleVisibility);
|
|
174
|
+
window.addEventListener("pagehide", flush);
|
|
175
|
+
}
|
|
176
|
+
return () => {
|
|
177
|
+
unsubscribe();
|
|
178
|
+
if ((0, environment_1.isBrowser)()) {
|
|
179
|
+
document.removeEventListener("visibilitychange", handleVisibility);
|
|
180
|
+
window.removeEventListener("pagehide", flush);
|
|
181
|
+
}
|
|
182
|
+
// 언마운트 시 대기 중인 마지막 저장을 즉시 반영 (손실 방지)
|
|
183
|
+
// Flush the pending save on unmount so the last change is persisted.
|
|
184
|
+
debouncedSave.flush();
|
|
185
|
+
};
|
|
186
|
+
}, [store, persistConfig, storagePrefix]);
|
|
162
187
|
// Persist: clearPersisted 함수 | clearPersisted function
|
|
163
188
|
const clearPersisted = (0, react_1.useCallback)(() => {
|
|
164
189
|
if (persistConfig) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFormaState.js","sourceRoot":"","sources":["../../../src/hooks/useFormaState.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;
|
|
1
|
+
{"version":3,"file":"useFormaState.js","sourceRoot":"","sources":["../../../src/hooks/useFormaState.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* deepEqual.ts
|
|
3
|
+
*
|
|
4
|
+
* Forma - 값 동등 비교 유틸 | Value deep-equality utility
|
|
5
|
+
*
|
|
6
|
+
* 기존 `JSON.stringify(a) === JSON.stringify(b)` 비교를 대체한다.
|
|
7
|
+
* Replaces the previous `JSON.stringify(a) === JSON.stringify(b)` comparison.
|
|
8
|
+
*
|
|
9
|
+
* 설계 원칙 | Design principles:
|
|
10
|
+
* - stringify 동작 보존 | Preserve stringify behavior:
|
|
11
|
+
* · 값이 undefined / function / symbol 인 키는 "없는 키"로 취급
|
|
12
|
+
* (keys whose value is undefined/function/symbol are treated as absent)
|
|
13
|
+
* - 개선 | Improvements:
|
|
14
|
+
* · 키 순서 무시 (stringify 는 순서 민감) | key order ignored
|
|
15
|
+
* · Date 는 시간값으로 비교 | Date compared by time value
|
|
16
|
+
* · 순환참조 안전 (stringify 는 throw) | cyclic-safe (stringify throws)
|
|
17
|
+
* · NaN === NaN (Object.is 의미) | NaN equals NaN
|
|
18
|
+
* - 성능 | Performance:
|
|
19
|
+
* · a === b 또는 Object.is 면 즉시 true | identity fast-path
|
|
20
|
+
*
|
|
21
|
+
* @license MIT License
|
|
22
|
+
* @copyright 2025 KIM YOUNG JIN (ehfuse@gmail.com)
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* 두 값이 깊은 의미에서 동일한지 비교한다. | Compare two values for deep equality.
|
|
26
|
+
*
|
|
27
|
+
* @param a 비교 대상 A | Value A
|
|
28
|
+
* @param b 비교 대상 B | Value B
|
|
29
|
+
* @returns 동일하면 true | true if deeply equal
|
|
30
|
+
*/
|
|
31
|
+
export declare function deepEqual(a: any, b: any): boolean;
|
|
32
|
+
//# sourceMappingURL=deepEqual.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deepEqual.d.ts","sourceRoot":"","sources":["../../../src/utils/deepEqual.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAmBH;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,OAAO,CAEjD"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* deepEqual.ts
|
|
4
|
+
*
|
|
5
|
+
* Forma - 값 동등 비교 유틸 | Value deep-equality utility
|
|
6
|
+
*
|
|
7
|
+
* 기존 `JSON.stringify(a) === JSON.stringify(b)` 비교를 대체한다.
|
|
8
|
+
* Replaces the previous `JSON.stringify(a) === JSON.stringify(b)` comparison.
|
|
9
|
+
*
|
|
10
|
+
* 설계 원칙 | Design principles:
|
|
11
|
+
* - stringify 동작 보존 | Preserve stringify behavior:
|
|
12
|
+
* · 값이 undefined / function / symbol 인 키는 "없는 키"로 취급
|
|
13
|
+
* (keys whose value is undefined/function/symbol are treated as absent)
|
|
14
|
+
* - 개선 | Improvements:
|
|
15
|
+
* · 키 순서 무시 (stringify 는 순서 민감) | key order ignored
|
|
16
|
+
* · Date 는 시간값으로 비교 | Date compared by time value
|
|
17
|
+
* · 순환참조 안전 (stringify 는 throw) | cyclic-safe (stringify throws)
|
|
18
|
+
* · NaN === NaN (Object.is 의미) | NaN equals NaN
|
|
19
|
+
* - 성능 | Performance:
|
|
20
|
+
* · a === b 또는 Object.is 면 즉시 true | identity fast-path
|
|
21
|
+
*
|
|
22
|
+
* @license MIT License
|
|
23
|
+
* @copyright 2025 KIM YOUNG JIN (ehfuse@gmail.com)
|
|
24
|
+
*/
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.deepEqual = deepEqual;
|
|
27
|
+
/**
|
|
28
|
+
* 객체에서 "실재하는" 키만 추린다. | Collect keys whose value is meaningful.
|
|
29
|
+
* stringify 가 직렬화에서 제외하는 값(undefined/function/symbol)을 가진 키는 제외.
|
|
30
|
+
* Excludes keys whose value would be dropped by JSON.stringify.
|
|
31
|
+
*/
|
|
32
|
+
function meaningfulKeys(obj) {
|
|
33
|
+
const keys = [];
|
|
34
|
+
for (const key in obj) {
|
|
35
|
+
if (!Object.prototype.hasOwnProperty.call(obj, key))
|
|
36
|
+
continue;
|
|
37
|
+
const v = obj[key];
|
|
38
|
+
const t = typeof v;
|
|
39
|
+
if (v === undefined || t === "function" || t === "symbol")
|
|
40
|
+
continue;
|
|
41
|
+
keys.push(key);
|
|
42
|
+
}
|
|
43
|
+
return keys;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* 두 값이 깊은 의미에서 동일한지 비교한다. | Compare two values for deep equality.
|
|
47
|
+
*
|
|
48
|
+
* @param a 비교 대상 A | Value A
|
|
49
|
+
* @param b 비교 대상 B | Value B
|
|
50
|
+
* @returns 동일하면 true | true if deeply equal
|
|
51
|
+
*/
|
|
52
|
+
function deepEqual(a, b) {
|
|
53
|
+
return deepEqualInner(a, b, new WeakMap());
|
|
54
|
+
}
|
|
55
|
+
function deepEqualInner(a, b, seen) {
|
|
56
|
+
// 1. identity / NaN | Object.is 로 +0/-0, NaN 까지 처리
|
|
57
|
+
if (Object.is(a, b))
|
|
58
|
+
return true;
|
|
59
|
+
// 2. 한쪽만 객체이거나 null 이면 다름 | one is non-object/null → not equal
|
|
60
|
+
if (a === null ||
|
|
61
|
+
b === null ||
|
|
62
|
+
typeof a !== "object" ||
|
|
63
|
+
typeof b !== "object") {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
// 3. Date | compare by time
|
|
67
|
+
const aIsDate = a instanceof Date;
|
|
68
|
+
const bIsDate = b instanceof Date;
|
|
69
|
+
if (aIsDate || bIsDate) {
|
|
70
|
+
return aIsDate && bIsDate && a.getTime() === b.getTime();
|
|
71
|
+
}
|
|
72
|
+
// 4. 배열 | arrays
|
|
73
|
+
const aIsArr = Array.isArray(a);
|
|
74
|
+
const bIsArr = Array.isArray(b);
|
|
75
|
+
if (aIsArr !== bIsArr)
|
|
76
|
+
return false;
|
|
77
|
+
// 5. 순환참조 가드 | cyclic guard
|
|
78
|
+
// 이미 (a -> b) 매핑을 본 적이 있으면 동일 경로로 간주
|
|
79
|
+
const prev = seen.get(a);
|
|
80
|
+
if (prev === b)
|
|
81
|
+
return true;
|
|
82
|
+
seen.set(a, b);
|
|
83
|
+
if (aIsArr) {
|
|
84
|
+
if (a.length !== b.length)
|
|
85
|
+
return false;
|
|
86
|
+
for (let i = 0; i < a.length; i++) {
|
|
87
|
+
if (!deepEqualInner(a[i], b[i], seen))
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
// 6. plain object — stringify 의미를 보존하기 위해 meaningfulKeys 사용
|
|
93
|
+
const aKeys = meaningfulKeys(a);
|
|
94
|
+
const bKeys = meaningfulKeys(b);
|
|
95
|
+
if (aKeys.length !== bKeys.length)
|
|
96
|
+
return false;
|
|
97
|
+
for (const key of aKeys) {
|
|
98
|
+
if (!Object.prototype.hasOwnProperty.call(b, key))
|
|
99
|
+
return false;
|
|
100
|
+
if (!deepEqualInner(a[key], b[key], seen))
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=deepEqual.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deepEqual.js","sourceRoot":"","sources":["../../../src/utils/deepEqual.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dotNotation.d.ts","sourceRoot":"","sources":["../../../src/utils/dotNotation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAQH;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,GAAG,
|
|
1
|
+
{"version":3,"file":"dotNotation.d.ts","sourceRoot":"","sources":["../../../src/utils/dotNotation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAQH;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,GAAG,CAqC1D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,GAAG,CA4CtE"}
|
|
@@ -48,6 +48,9 @@ const FORBIDDEN_KEYS = new Set(["__proto__", "prototype", "constructor"]);
|
|
|
48
48
|
* ```
|
|
49
49
|
*/
|
|
50
50
|
function getNestedValue(obj, path) {
|
|
51
|
+
if (obj === null || obj === undefined) {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
51
54
|
if (!path.includes(".")) {
|
|
52
55
|
if (FORBIDDEN_KEYS.has(path)) {
|
|
53
56
|
return undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dotNotation.js","sourceRoot":"","sources":["../../../src/utils/dotNotation.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;;AAoBH,
|
|
1
|
+
{"version":3,"file":"dotNotation.js","sourceRoot":"","sources":["../../../src/utils/dotNotation.ts"],"names":[],"mappings":"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"}
|
|
@@ -60,8 +60,22 @@ export declare function clearPersistedData(config: PersistConfig, storagePrefix?
|
|
|
60
60
|
* @param storagePrefix 스토리지 키 prefix (GlobalFormaProvider에서 제공) | Storage key prefix (from GlobalFormaProvider)
|
|
61
61
|
*/
|
|
62
62
|
export declare function hasPersistedData(config: PersistConfig, storagePrefix?: string): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* flush/cancel 가능한 디바운스 함수 타입 | Debounced function with flush/cancel
|
|
65
|
+
*/
|
|
66
|
+
export interface DebouncedFunction<T extends (...args: any[]) => any> {
|
|
67
|
+
(...args: Parameters<T>): void;
|
|
68
|
+
/** 대기 중인 호출을 즉시 실행 | Immediately invoke the pending call (if any) */
|
|
69
|
+
flush: () => void;
|
|
70
|
+
/** 대기 중인 호출을 취소 | Cancel the pending call */
|
|
71
|
+
cancel: () => void;
|
|
72
|
+
}
|
|
63
73
|
/**
|
|
64
74
|
* 디바운스 유틸리티 | Debounce utility
|
|
75
|
+
*
|
|
76
|
+
* flush(): 대기 중인 마지막 호출을 즉시 실행 (언마운트/페이지 이탈 시 저장 손실 방지용)
|
|
77
|
+
* flush(): immediately runs the pending call — used to avoid losing the last save on unmount/page unload
|
|
78
|
+
* cancel(): 대기 중인 호출을 취소 | cancel pending call
|
|
65
79
|
*/
|
|
66
|
-
export declare function debounce<T extends (...args: any[]) => any>(fn: T, delay: number):
|
|
80
|
+
export declare function debounce<T extends (...args: any[]) => any>(fn: T, delay: number): DebouncedFunction<T>;
|
|
67
81
|
//# sourceMappingURL=persist.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persist.d.ts","sourceRoot":"","sources":["../../../src/utils/persist.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,wCAAwC;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,6EAA6E;IAC7E,OAAO,CAAC,EAAE,cAAc,GAAG,gBAAgB,CAAC;CAC/C;AAED;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,cAAc,CAAC;AAYpD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,aAAa,GAAG,cAAc,CAK5E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7E;AAqBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3D,MAAM,EAAE,aAAa,EACrB,aAAa,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAiBnB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3D,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,CAAC,EACT,aAAa,CAAC,EAAE,MAAM,GACvB,OAAO,CA4BT;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAC9B,MAAM,EAAE,aAAa,EACrB,aAAa,CAAC,EAAE,MAAM,GACvB,OAAO,CAcT;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC5B,MAAM,EAAE,aAAa,EACrB,aAAa,CAAC,EAAE,MAAM,GACvB,OAAO,CAYT;AAED;;GAEG;AACH,
|
|
1
|
+
{"version":3,"file":"persist.d.ts","sourceRoot":"","sources":["../../../src/utils/persist.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,wCAAwC;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,6EAA6E;IAC7E,OAAO,CAAC,EAAE,cAAc,GAAG,gBAAgB,CAAC;CAC/C;AAED;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,cAAc,CAAC;AAYpD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,aAAa,GAAG,cAAc,CAK5E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7E;AAqBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3D,MAAM,EAAE,aAAa,EACrB,aAAa,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAiBnB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3D,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,CAAC,EACT,aAAa,CAAC,EAAE,MAAM,GACvB,OAAO,CA4BT;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAC9B,MAAM,EAAE,aAAa,EACrB,aAAa,CAAC,EAAE,MAAM,GACvB,OAAO,CAcT;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC5B,MAAM,EAAE,aAAa,EACrB,aAAa,CAAC,EAAE,MAAM,GACvB,OAAO,CAYT;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG;IAChE,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC/B,qEAAqE;IACrE,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,6CAA6C;IAC7C,MAAM,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACtD,EAAE,EAAE,CAAC,EACL,KAAK,EAAE,MAAM,GACd,iBAAiB,CAAC,CAAC,CAAC,CAyCtB"}
|
|
@@ -147,17 +147,47 @@ function hasPersistedData(config, storagePrefix) {
|
|
|
147
147
|
}
|
|
148
148
|
/**
|
|
149
149
|
* 디바운스 유틸리티 | Debounce utility
|
|
150
|
+
*
|
|
151
|
+
* flush(): 대기 중인 마지막 호출을 즉시 실행 (언마운트/페이지 이탈 시 저장 손실 방지용)
|
|
152
|
+
* flush(): immediately runs the pending call — used to avoid losing the last save on unmount/page unload
|
|
153
|
+
* cancel(): 대기 중인 호출을 취소 | cancel pending call
|
|
150
154
|
*/
|
|
151
155
|
function debounce(fn, delay) {
|
|
152
156
|
let timeoutId = null;
|
|
153
|
-
|
|
157
|
+
// 대기 중인 마지막 인자 보관 (flush 시 사용) | Keep last pending args for flush
|
|
158
|
+
let pendingArgs = null;
|
|
159
|
+
const debounced = (...args) => {
|
|
160
|
+
pendingArgs = args;
|
|
154
161
|
if (timeoutId) {
|
|
155
162
|
clearTimeout(timeoutId);
|
|
156
163
|
}
|
|
157
164
|
timeoutId = setTimeout(() => {
|
|
158
|
-
fn(...args);
|
|
159
165
|
timeoutId = null;
|
|
166
|
+
const callArgs = pendingArgs;
|
|
167
|
+
pendingArgs = null;
|
|
168
|
+
if (callArgs) {
|
|
169
|
+
fn(...callArgs);
|
|
170
|
+
}
|
|
160
171
|
}, delay);
|
|
161
172
|
};
|
|
173
|
+
debounced.flush = () => {
|
|
174
|
+
if (timeoutId) {
|
|
175
|
+
clearTimeout(timeoutId);
|
|
176
|
+
timeoutId = null;
|
|
177
|
+
}
|
|
178
|
+
if (pendingArgs) {
|
|
179
|
+
const callArgs = pendingArgs;
|
|
180
|
+
pendingArgs = null;
|
|
181
|
+
fn(...callArgs);
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
debounced.cancel = () => {
|
|
185
|
+
if (timeoutId) {
|
|
186
|
+
clearTimeout(timeoutId);
|
|
187
|
+
timeoutId = null;
|
|
188
|
+
}
|
|
189
|
+
pendingArgs = null;
|
|
190
|
+
};
|
|
191
|
+
return debounced;
|
|
162
192
|
}
|
|
163
193
|
//# sourceMappingURL=persist.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persist.js","sourceRoot":"","sources":["../../../src/utils/persist.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;AAsCH,wDAKC;AAKD,8CAEC;AA0BD,8CAoBC;AAQD,8CAgCC;AAOD,gDAiBC;AAOD,4CAeC;
|
|
1
|
+
{"version":3,"file":"persist.js","sourceRoot":"","sources":["../../../src/utils/persist.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;AAsCH,wDAKC;AAKD,8CAEC;AA0BD,8CAoBC;AAQD,8CAgCC;AAOD,gDAiBC;AAOD,4CAeC;AAoBD,4BA4CC;AApPD,+CAAwC;AAgCxC;;;GAGG;AACH,SAAgB,sBAAsB,CAAC,MAAqB;IACxD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IAC3B,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,GAAW,EAAE,aAAsB;IACjE,OAAO,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CACf,OAA0C,cAAc;IAExD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,CAAC;QACD,OAAO,IAAI,KAAK,gBAAgB;YAC5B,CAAC,CAAC,MAAM,CAAC,cAAc;YACvB,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACL,IAAA,qBAAO,EAAC,0BAA0B,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,SAAgB,iBAAiB,CAC7B,MAAqB,EACrB,aAAsB;IAEtB,MAAM,OAAO,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAE9D,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAEzB,MAAM,MAAM,GAAqB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACpD,OAAO,MAAM,CAAC,MAAM,CAAC;IACzB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,IAAA,qBAAO,EAAC,0CAA0C,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,SAAgB,iBAAiB,CAC7B,MAAqB,EACrB,MAAS,EACT,aAAsB;IAEtB,MAAM,OAAO,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAE9D,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAE3B,IAAI,CAAC;QACD,gBAAgB;QAChB,IAAI,UAAU,GAAG,MAAM,CAAC;QACxB,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,UAAU,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;YAC3B,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBAClC,OAAQ,UAAkB,CAAC,KAAK,CAAC,CAAC;YACtC,CAAC;QACL,CAAC;QAED,MAAM,IAAI,GAAqB;YAC3B,MAAM,EAAE,UAAU;YAClB,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QAEF,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,IAAA,qBAAO,EAAC,0CAA0C,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;QAClE,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB,CAC9B,MAAqB,EACrB,aAAsB;IAEtB,MAAM,OAAO,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAE9D,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAE3B,IAAI,CAAC;QACD,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,IAAA,qBAAO,EAAC,2CAA2C,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;QACnE,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,SAAgB,gBAAgB,CAC5B,MAAqB,EACrB,aAAsB;IAEtB,MAAM,OAAO,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAE9D,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAE3B,IAAI,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAaD;;;;;;GAMG;AACH,SAAgB,QAAQ,CACpB,EAAK,EACL,KAAa;IAEb,IAAI,SAAS,GAAyC,IAAI,CAAC;IAC3D,kEAAkE;IAClE,IAAI,WAAW,GAAyB,IAAI,CAAC;IAE7C,MAAM,SAAS,GAAG,CAAC,GAAG,IAAmB,EAAE,EAAE;QACzC,WAAW,GAAG,IAAI,CAAC;QACnB,IAAI,SAAS,EAAE,CAAC;YACZ,YAAY,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC;QACD,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YACxB,SAAS,GAAG,IAAI,CAAC;YACjB,MAAM,QAAQ,GAAG,WAAW,CAAC;YAC7B,WAAW,GAAG,IAAI,CAAC;YACnB,IAAI,QAAQ,EAAE,CAAC;gBACX,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC;YACpB,CAAC;QACL,CAAC,EAAE,KAAK,CAAC,CAAC;IACd,CAAC,CAAC;IAEF,SAAS,CAAC,KAAK,GAAG,GAAG,EAAE;QACnB,IAAI,SAAS,EAAE,CAAC;YACZ,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,SAAS,GAAG,IAAI,CAAC;QACrB,CAAC;QACD,IAAI,WAAW,EAAE,CAAC;YACd,MAAM,QAAQ,GAAG,WAAW,CAAC;YAC7B,WAAW,GAAG,IAAI,CAAC;YACnB,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC;IAEF,SAAS,CAAC,MAAM,GAAG,GAAG,EAAE;QACpB,IAAI,SAAS,EAAE,CAAC;YACZ,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,SAAS,GAAG,IAAI,CAAC;QACrB,CAAC;QACD,WAAW,GAAG,IAAI,CAAC;IACvB,CAAC,CAAC;IAEF,OAAO,SAAS,CAAC;AACrB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ehfuse/forma",
|
|
3
|
-
"version": "3.3.
|
|
3
|
+
"version": "3.3.2",
|
|
4
4
|
"description": "Advanced React state management library with individual field subscriptions - supports both forms and general state management with useFormaState",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"build:types": "tsc -p tsconfig.build.json --declaration --emitDeclarationOnly --outDir dist",
|
|
25
25
|
"clean": "rm -rf dist",
|
|
26
26
|
"prepublishOnly": "npm run build",
|
|
27
|
-
"test": "
|
|
27
|
+
"test": "node --import tsx --test src/**/*.test.ts",
|
|
28
28
|
"lint": "eslint . --ext .ts,.tsx",
|
|
29
29
|
"format": "prettier --write \"**/*.{ts,tsx,js,jsx,json,md}\"",
|
|
30
30
|
"dev": "cd example && npm run dev",
|
|
@@ -74,6 +74,7 @@
|
|
|
74
74
|
"devDependencies": {
|
|
75
75
|
"@types/react": "^19.1.12",
|
|
76
76
|
"esbuild": "^0.23.0",
|
|
77
|
+
"tsx": "^4.22.4",
|
|
77
78
|
"typescript": "^5.9.2"
|
|
78
79
|
}
|
|
79
80
|
}
|