@ehfuse/forma 2.3.2 → 3.0.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 (87) hide show
  1. package/README.md +75 -0
  2. package/dist/esm/index.d.ts +4 -0
  3. package/dist/esm/index.d.ts.map +1 -1
  4. package/dist/esm/index.js +1 -1
  5. package/dist/esm/index.js.map +1 -1
  6. package/dist/esm/src/contexts/GlobalFormaContext.d.ts +2 -5
  7. package/dist/esm/src/contexts/GlobalFormaContext.d.ts.map +1 -1
  8. package/dist/esm/src/contexts/GlobalFormaContext.js +8 -10
  9. package/dist/esm/src/contexts/GlobalFormaContext.js.map +1 -1
  10. package/dist/esm/src/hooks/useForm.d.ts.map +1 -1
  11. package/dist/esm/src/hooks/useForm.js +56 -3
  12. package/dist/esm/src/hooks/useForm.js.map +1 -1
  13. package/dist/esm/src/hooks/useFormaState.d.ts +7 -0
  14. package/dist/esm/src/hooks/useFormaState.d.ts.map +1 -1
  15. package/dist/esm/src/hooks/useFormaState.js +56 -3
  16. package/dist/esm/src/hooks/useFormaState.js.map +1 -1
  17. package/dist/esm/src/hooks/useGlobalForm.js +2 -1
  18. package/dist/esm/src/hooks/useGlobalForm.js.map +1 -1
  19. package/dist/esm/src/hooks/useGlobalFormaState.js +2 -2
  20. package/dist/esm/src/hooks/useGlobalFormaState.js.map +1 -1
  21. package/dist/esm/src/hooks/useLocalStorage.d.ts +102 -0
  22. package/dist/esm/src/hooks/useLocalStorage.d.ts.map +1 -0
  23. package/dist/esm/src/hooks/useLocalStorage.js +233 -0
  24. package/dist/esm/src/hooks/useLocalStorage.js.map +1 -0
  25. package/dist/esm/src/hooks/useModal.d.ts.map +1 -1
  26. package/dist/esm/src/hooks/useModal.js +1 -1
  27. package/dist/esm/src/hooks/useModal.js.map +1 -1
  28. package/dist/esm/src/types/form.d.ts +13 -4
  29. package/dist/esm/src/types/form.d.ts.map +1 -1
  30. package/dist/esm/src/types/globalForm.d.ts +11 -3
  31. package/dist/esm/src/types/globalForm.d.ts.map +1 -1
  32. package/dist/esm/src/types/globalForm.js.map +1 -1
  33. package/dist/esm/src/utils/environment.d.ts +7 -0
  34. package/dist/esm/src/utils/environment.d.ts.map +1 -1
  35. package/dist/esm/src/utils/environment.js +11 -0
  36. package/dist/esm/src/utils/environment.js.map +1 -1
  37. package/dist/esm/src/utils/index.d.ts +2 -0
  38. package/dist/esm/src/utils/index.d.ts.map +1 -1
  39. package/dist/esm/src/utils/index.js +1 -0
  40. package/dist/esm/src/utils/index.js.map +1 -1
  41. package/dist/esm/src/utils/persist.d.ts +67 -0
  42. package/dist/esm/src/utils/persist.d.ts.map +1 -0
  43. package/dist/esm/src/utils/persist.js +154 -0
  44. package/dist/esm/src/utils/persist.js.map +1 -0
  45. package/dist/index.d.ts +4 -0
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +1 -1
  48. package/dist/index.js.map +1 -1
  49. package/dist/src/contexts/GlobalFormaContext.d.ts +2 -5
  50. package/dist/src/contexts/GlobalFormaContext.d.ts.map +1 -1
  51. package/dist/src/contexts/GlobalFormaContext.js +7 -9
  52. package/dist/src/contexts/GlobalFormaContext.js.map +1 -1
  53. package/dist/src/hooks/useForm.d.ts.map +1 -1
  54. package/dist/src/hooks/useForm.js +55 -2
  55. package/dist/src/hooks/useForm.js.map +1 -1
  56. package/dist/src/hooks/useFormaState.d.ts +7 -0
  57. package/dist/src/hooks/useFormaState.d.ts.map +1 -1
  58. package/dist/src/hooks/useFormaState.js +54 -1
  59. package/dist/src/hooks/useFormaState.js.map +1 -1
  60. package/dist/src/hooks/useGlobalForm.js +2 -1
  61. package/dist/src/hooks/useGlobalForm.js.map +1 -1
  62. package/dist/src/hooks/useGlobalFormaState.js +2 -2
  63. package/dist/src/hooks/useGlobalFormaState.js.map +1 -1
  64. package/dist/src/hooks/useLocalStorage.d.ts +102 -0
  65. package/dist/src/hooks/useLocalStorage.d.ts.map +1 -0
  66. package/dist/src/hooks/useLocalStorage.js +237 -0
  67. package/dist/src/hooks/useLocalStorage.js.map +1 -0
  68. package/dist/src/hooks/useModal.d.ts.map +1 -1
  69. package/dist/src/hooks/useModal.js.map +1 -1
  70. package/dist/src/types/form.d.ts +13 -4
  71. package/dist/src/types/form.d.ts.map +1 -1
  72. package/dist/src/types/globalForm.d.ts +11 -3
  73. package/dist/src/types/globalForm.d.ts.map +1 -1
  74. package/dist/src/types/globalForm.js.map +1 -1
  75. package/dist/src/utils/environment.d.ts +7 -0
  76. package/dist/src/utils/environment.d.ts.map +1 -1
  77. package/dist/src/utils/environment.js +12 -0
  78. package/dist/src/utils/environment.js.map +1 -1
  79. package/dist/src/utils/index.d.ts +2 -0
  80. package/dist/src/utils/index.d.ts.map +1 -1
  81. package/dist/src/utils/index.js +7 -1
  82. package/dist/src/utils/index.js.map +1 -1
  83. package/dist/src/utils/persist.d.ts +67 -0
  84. package/dist/src/utils/persist.d.ts.map +1 -0
  85. package/dist/src/utils/persist.js +163 -0
  86. package/dist/src/utils/persist.js.map +1 -0
  87. package/package.json +1 -1
@@ -0,0 +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,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACtD,EAAE,EAAE,CAAC,EACL,KAAK,EAAE,MAAM,GACd,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAYlC"}
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ /**
3
+ * persist.ts
4
+ *
5
+ * Forma - localStorage/sessionStorage 영속성 유틸리티
6
+ * Persistence utilities for localStorage/sessionStorage
7
+ *
8
+ * @license MIT License
9
+ * @copyright 2025 KIM YOUNG JIN (Kim Young Jin)
10
+ * @author KIM YOUNG JIN (ehfuse@gmail.com)
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.normalizePersistConfig = normalizePersistConfig;
14
+ exports.getFullStorageKey = getFullStorageKey;
15
+ exports.loadPersistedData = loadPersistedData;
16
+ exports.savePersistedData = savePersistedData;
17
+ exports.clearPersistedData = clearPersistedData;
18
+ exports.hasPersistedData = hasPersistedData;
19
+ exports.debounce = debounce;
20
+ const environment_1 = require("./environment");
21
+ /**
22
+ * PersistConfig를 PersistOptions로 정규화
23
+ * Normalize PersistConfig to PersistOptions
24
+ */
25
+ function normalizePersistConfig(config) {
26
+ if (typeof config === "string") {
27
+ return { key: config };
28
+ }
29
+ return config;
30
+ }
31
+ /**
32
+ * storagePrefix가 적용된 전체 키 생성 | Generate full key with storagePrefix
33
+ */
34
+ function getFullStorageKey(key, storagePrefix) {
35
+ return storagePrefix ? `${storagePrefix}:${key}` : key;
36
+ }
37
+ /**
38
+ * 스토리지 객체 가져오기 | Get storage object
39
+ */
40
+ function getStorage(type = "localStorage") {
41
+ if (typeof window === "undefined") {
42
+ return null;
43
+ }
44
+ try {
45
+ return type === "sessionStorage"
46
+ ? window.sessionStorage
47
+ : window.localStorage;
48
+ }
49
+ catch {
50
+ (0, environment_1.devWarn)("Storage is not available");
51
+ return null;
52
+ }
53
+ }
54
+ /**
55
+ * localStorage에서 데이터 불러오기 | Load data from localStorage
56
+ * @param config persist 설정 | persist configuration
57
+ * @param storagePrefix 스토리지 키 prefix (GlobalFormaProvider에서 제공) | Storage key prefix (from GlobalFormaProvider)
58
+ */
59
+ function loadPersistedData(config, storagePrefix) {
60
+ const options = normalizePersistConfig(config);
61
+ const storage = getStorage(options.storage);
62
+ const fullKey = getFullStorageKey(options.key, storagePrefix);
63
+ if (!storage)
64
+ return null;
65
+ try {
66
+ const stored = storage.getItem(fullKey);
67
+ if (!stored)
68
+ return null;
69
+ const parsed = JSON.parse(stored);
70
+ return parsed.values;
71
+ }
72
+ catch (e) {
73
+ (0, environment_1.devWarn)(`Failed to load persisted data for key "${fullKey}":`, e);
74
+ return null;
75
+ }
76
+ }
77
+ /**
78
+ * localStorage에 데이터 저장 | Save data to localStorage
79
+ * @param config persist 설정 | persist configuration
80
+ * @param values 저장할 값 | values to save
81
+ * @param storagePrefix 스토리지 키 prefix (GlobalFormaProvider에서 제공) | Storage key prefix (from GlobalFormaProvider)
82
+ */
83
+ function savePersistedData(config, values, storagePrefix) {
84
+ const options = normalizePersistConfig(config);
85
+ const storage = getStorage(options.storage);
86
+ const fullKey = getFullStorageKey(options.key, storagePrefix);
87
+ if (!storage)
88
+ return false;
89
+ try {
90
+ // exclude 필드 제외
91
+ let dataToSave = values;
92
+ if (options.exclude && options.exclude.length > 0) {
93
+ dataToSave = { ...values };
94
+ for (const field of options.exclude) {
95
+ delete dataToSave[field];
96
+ }
97
+ }
98
+ const data = {
99
+ values: dataToSave,
100
+ savedAt: Date.now(),
101
+ };
102
+ storage.setItem(fullKey, JSON.stringify(data));
103
+ return true;
104
+ }
105
+ catch (e) {
106
+ (0, environment_1.devWarn)(`Failed to save persisted data for key "${fullKey}":`, e);
107
+ return false;
108
+ }
109
+ }
110
+ /**
111
+ * localStorage에서 데이터 삭제 | Clear persisted data from localStorage
112
+ * @param config persist 설정 | persist configuration
113
+ * @param storagePrefix 스토리지 키 prefix (GlobalFormaProvider에서 제공) | Storage key prefix (from GlobalFormaProvider)
114
+ */
115
+ function clearPersistedData(config, storagePrefix) {
116
+ const options = normalizePersistConfig(config);
117
+ const storage = getStorage(options.storage);
118
+ const fullKey = getFullStorageKey(options.key, storagePrefix);
119
+ if (!storage)
120
+ return false;
121
+ try {
122
+ storage.removeItem(fullKey);
123
+ return true;
124
+ }
125
+ catch (e) {
126
+ (0, environment_1.devWarn)(`Failed to clear persisted data for key "${fullKey}":`, e);
127
+ return false;
128
+ }
129
+ }
130
+ /**
131
+ * 저장된 데이터가 있는지 확인 | Check if persisted data exists
132
+ * @param config persist 설정 | persist configuration
133
+ * @param storagePrefix 스토리지 키 prefix (GlobalFormaProvider에서 제공) | Storage key prefix (from GlobalFormaProvider)
134
+ */
135
+ function hasPersistedData(config, storagePrefix) {
136
+ const options = normalizePersistConfig(config);
137
+ const storage = getStorage(options.storage);
138
+ const fullKey = getFullStorageKey(options.key, storagePrefix);
139
+ if (!storage)
140
+ return false;
141
+ try {
142
+ return storage.getItem(fullKey) !== null;
143
+ }
144
+ catch {
145
+ return false;
146
+ }
147
+ }
148
+ /**
149
+ * 디바운스 유틸리티 | Debounce utility
150
+ */
151
+ function debounce(fn, delay) {
152
+ let timeoutId = null;
153
+ return (...args) => {
154
+ if (timeoutId) {
155
+ clearTimeout(timeoutId);
156
+ }
157
+ timeoutId = setTimeout(() => {
158
+ fn(...args);
159
+ timeoutId = null;
160
+ }, delay);
161
+ };
162
+ }
163
+ //# sourceMappingURL=persist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persist.js","sourceRoot":"","sources":["../../../src/utils/persist.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ehfuse/forma",
3
- "version": "2.3.2",
3
+ "version": "3.0.0",
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",