react-state-bucket 1.2.9 → 1.2.10

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/Initial.js ADDED
@@ -0,0 +1,37 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var Cookie=require('./Cookie.js');const Initial = (initial, data_key, option) => {
2
+ let state = {};
3
+ let data = "";
4
+ if (typeof window !== 'undefined') {
5
+ if (option.store === 'session' || option.store === 'local') {
6
+ let storage = option.store === "session" ? sessionStorage : localStorage;
7
+ data = storage.getItem(data_key);
8
+ }
9
+ else if (option.store === 'url') {
10
+ let url = new URL(window.location.href);
11
+ data = decodeURIComponent(url.searchParams.get(data_key) || "");
12
+ }
13
+ else if (option.store === 'cookie') {
14
+ data = Cookie.getCookie(data_key);
15
+ }
16
+ }
17
+ if (data) {
18
+ try {
19
+ data = JSON.parse(data);
20
+ }
21
+ catch (error) {
22
+ data = {};
23
+ }
24
+ }
25
+ else {
26
+ data = {};
27
+ }
28
+ for (let key in initial) {
29
+ try {
30
+ state[key] = initial[key].parse(data[key]);
31
+ }
32
+ catch (error) {
33
+ state[key] = data[key];
34
+ }
35
+ }
36
+ return state;
37
+ };exports.default=Initial;//# sourceMappingURL=Initial.js.map
package/Initial.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Initial.js","sources":["../src/Initial.ts"],"sourcesContent":["import { BucketOptions, InitialBucketData } from \".\";\nimport { getCookie } from \"./Cookie\";\n\nconst Initial = (initial: InitialBucketData, data_key: string, option: BucketOptions) => {\n let state = {} as Record<string, any>;\n let data: any = \"\"\n\n if (typeof window !== 'undefined') {\n if (option.store === 'session' || option.store === 'local') {\n let storage = option.store === \"session\" ? sessionStorage : localStorage\n data = storage.getItem(data_key)\n } else if (option.store === 'url') {\n let url = new URL(window.location.href)\n data = decodeURIComponent(url.searchParams.get(data_key) || \"\")\n } else if (option.store === 'cookie') {\n data = getCookie(data_key)\n }\n }\n\n if (data) {\n try {\n data = JSON.parse(data)\n } catch (error) {\n data = {}\n }\n } else {\n data = {}\n }\n\n for (let key in initial) {\n try {\n state[key] = initial[key].parse(data[key])\n } catch (error) {\n state[key] = data[key]\n }\n }\n\n return state;\n}\n\nexport default Initial;"],"names":["getCookie"],"mappings":"wGAGA,MAAM,OAAO,GAAG,CAAC,OAA0B,EAAE,QAAgB,EAAE,MAAqB,KAAI;IACrF,IAAI,KAAK,GAAG,EAAyB;IACrC,IAAI,IAAI,GAAQ,EAAE;AAElB,IAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AAChC,QAAA,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,OAAO,EAAE;AACzD,YAAA,IAAI,OAAO,GAAG,MAAM,CAAC,KAAK,KAAK,SAAS,GAAG,cAAc,GAAG,YAAY;AACxE,YAAA,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;QACnC;AAAO,aAAA,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,EAAE;YAChC,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;AACvC,YAAA,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClE;AAAO,aAAA,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE;AACnC,YAAA,IAAI,GAAGA,gBAAS,CAAC,QAAQ,CAAC;QAC7B;IACH;IAEA,IAAI,IAAI,EAAE;AACP,QAAA,IAAI;AACD,YAAA,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAC1B;QAAE,OAAO,KAAK,EAAE;YACb,IAAI,GAAG,EAAE;QACZ;IACH;SAAO;QACJ,IAAI,GAAG,EAAE;IACZ;AAEA,IAAA,KAAK,IAAI,GAAG,IAAI,OAAO,EAAE;AACtB,QAAA,IAAI;AACD,YAAA,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7C;QAAE,OAAO,KAAK,EAAE;YACb,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;QACzB;IACH;AAEA,IAAA,OAAO,KAAK;AACf"}
package/Initial.mjs ADDED
@@ -0,0 +1,37 @@
1
+ import {getCookie}from'./Cookie.mjs';const Initial = (initial, data_key, option) => {
2
+ let state = {};
3
+ let data = "";
4
+ if (typeof window !== 'undefined') {
5
+ if (option.store === 'session' || option.store === 'local') {
6
+ let storage = option.store === "session" ? sessionStorage : localStorage;
7
+ data = storage.getItem(data_key);
8
+ }
9
+ else if (option.store === 'url') {
10
+ let url = new URL(window.location.href);
11
+ data = decodeURIComponent(url.searchParams.get(data_key) || "");
12
+ }
13
+ else if (option.store === 'cookie') {
14
+ data = getCookie(data_key);
15
+ }
16
+ }
17
+ if (data) {
18
+ try {
19
+ data = JSON.parse(data);
20
+ }
21
+ catch (error) {
22
+ data = {};
23
+ }
24
+ }
25
+ else {
26
+ data = {};
27
+ }
28
+ for (let key in initial) {
29
+ try {
30
+ state[key] = initial[key].parse(data[key]);
31
+ }
32
+ catch (error) {
33
+ state[key] = data[key];
34
+ }
35
+ }
36
+ return state;
37
+ };export{Initial as default};//# sourceMappingURL=Initial.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Initial.mjs","sources":["../src/Initial.ts"],"sourcesContent":["import { BucketOptions, InitialBucketData } from \".\";\nimport { getCookie } from \"./Cookie\";\n\nconst Initial = (initial: InitialBucketData, data_key: string, option: BucketOptions) => {\n let state = {} as Record<string, any>;\n let data: any = \"\"\n\n if (typeof window !== 'undefined') {\n if (option.store === 'session' || option.store === 'local') {\n let storage = option.store === \"session\" ? sessionStorage : localStorage\n data = storage.getItem(data_key)\n } else if (option.store === 'url') {\n let url = new URL(window.location.href)\n data = decodeURIComponent(url.searchParams.get(data_key) || \"\")\n } else if (option.store === 'cookie') {\n data = getCookie(data_key)\n }\n }\n\n if (data) {\n try {\n data = JSON.parse(data)\n } catch (error) {\n data = {}\n }\n } else {\n data = {}\n }\n\n for (let key in initial) {\n try {\n state[key] = initial[key].parse(data[key])\n } catch (error) {\n state[key] = data[key]\n }\n }\n\n return state;\n}\n\nexport default Initial;"],"names":[],"mappings":"qCAGA,MAAM,OAAO,GAAG,CAAC,OAA0B,EAAE,QAAgB,EAAE,MAAqB,KAAI;IACrF,IAAI,KAAK,GAAG,EAAyB;IACrC,IAAI,IAAI,GAAQ,EAAE;AAElB,IAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AAChC,QAAA,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,OAAO,EAAE;AACzD,YAAA,IAAI,OAAO,GAAG,MAAM,CAAC,KAAK,KAAK,SAAS,GAAG,cAAc,GAAG,YAAY;AACxE,YAAA,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;QACnC;AAAO,aAAA,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,EAAE;YAChC,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;AACvC,YAAA,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClE;AAAO,aAAA,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE;AACnC,YAAA,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC;QAC7B;IACH;IAEA,IAAI,IAAI,EAAE;AACP,QAAA,IAAI;AACD,YAAA,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAC1B;QAAE,OAAO,KAAK,EAAE;YACb,IAAI,GAAG,EAAE;QACZ;IACH;SAAO;QACJ,IAAI,GAAG,EAAE;IACZ;AAEA,IAAA,KAAK,IAAI,GAAG,IAAI,OAAO,EAAE;AACtB,QAAA,IAAI;AACD,YAAA,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7C;QAAE,OAAO,KAAK,EAAE;YACb,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;QACzB;IACH;AAEA,IAAA,OAAO,KAAK;AACf"}
package/index.d.ts CHANGED
@@ -13,7 +13,11 @@ type InitialBucketData = {
13
13
  declare const createBucket: <T extends InitialBucketData>(initial: T, option?: BucketOptions) => {
14
14
  (): Record<keyof T, any>;
15
15
  validate(): boolean;
16
+ isValid(key: keyof T): boolean;
17
+ getChanges(): Partial<Record<keyof T, any>>;
18
+ isChanged(k: keyof T): boolean;
16
19
  errors(): Record<string, string>;
20
+ getError(key: keyof T): any;
17
21
  };
18
22
  declare const xv: {
19
23
  any: () => xanv.XVAny<any>;
package/index.js CHANGED
@@ -1,81 +1,16 @@
1
- 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),xanv=require('xanv'),youid=require('youid'),Cookie=require('./Cookie.js');const createBucket = (initial, option) => {
2
- const hooks = new Map();
3
- const state = {};
4
- let data_key = (option === null || option === void 0 ? void 0 : option.data_key) || '';
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),xanv=require('xanv'),youid=require('youid'),Cookie=require('./Cookie.js'),Initial=require('./Initial.js');const createBucket = (initial, option) => {
2
+ option = Object.assign({ store: "memory" }, option);
5
3
  if (!(option === null || option === void 0 ? void 0 : option.data_key)) {
6
4
  let data_key = '';
7
5
  for (let key in initial) {
8
6
  const field = initial[key];
9
7
  data_key += key + ':' + JSON.stringify(field.meta) + ';';
10
8
  }
11
- data_key = youid(data_key);
12
- }
13
- option = Object.assign(Object.assign({ store: "memory" }, option), { data_key });
14
- // set state prototype for validation
15
- for (let key in initial) {
16
- try {
17
- state[key] = initial[key].parse(undefined);
18
- }
19
- catch (error) { }
20
- }
21
- if (typeof window !== 'undefined') {
22
- if (option.store === 'session' || option.store === 'local') {
23
- let storage = option.store === "session" ? sessionStorage : localStorage;
24
- const value = storage.getItem(data_key);
25
- let data = {};
26
- if (value) {
27
- data = JSON.parse(value);
28
- }
29
- for (let key in initial) {
30
- try {
31
- state[key] = initial[key].parse(data[key]);
32
- }
33
- catch (error) {
34
- state[key] = data[key];
35
- }
36
- }
37
- }
38
- else if (option.store === 'url') {
39
- let url = new URL(window.location.href);
40
- const value = url.searchParams.get(data_key);
41
- let data = {};
42
- if (value) {
43
- data = JSON.parse(decodeURIComponent(value));
44
- }
45
- for (let key in initial) {
46
- try {
47
- state[key] = initial[key].parse(data[key]);
48
- }
49
- catch (error) {
50
- state[key] = data[key];
51
- }
52
- }
53
- }
54
- else if (option.store === 'cookie') {
55
- const cookieData = Cookie.getCookie(data_key);
56
- let data = {};
57
- if (cookieData) {
58
- data = JSON.parse(cookieData);
59
- }
60
- for (let key in initial) {
61
- try {
62
- state[key] = initial[key].parse(data[key]);
63
- }
64
- catch (error) {
65
- state[key] = data[key];
66
- }
67
- }
68
- }
69
- else {
70
- for (let key in initial) {
71
- try {
72
- state[key] = initial[key].parse(undefined);
73
- }
74
- catch (error) {
75
- }
76
- }
77
- }
9
+ option.data_key = youid(data_key);
78
10
  }
11
+ const hooks = new Map();
12
+ const state = Initial.default(initial, (option === null || option === void 0 ? void 0 : option.data_key) || '', option || {});
13
+ const changes = {};
79
14
  const useBucket = () => {
80
15
  const id = "rsb_" + react.useId();
81
16
  const [, setState] = react.useState(0);
@@ -84,7 +19,7 @@
84
19
  return () => {
85
20
  hooks.delete(id);
86
21
  };
87
- }, [id]);
22
+ }, []);
88
23
  return new Proxy(state, {
89
24
  get: (target, prop) => target[prop],
90
25
  set: (target, prop, value) => {
@@ -93,19 +28,23 @@
93
28
  }
94
29
  target[prop] = value;
95
30
  hooks.forEach((hook) => hook());
31
+ changes[prop] = true;
32
+ if ((option === null || option === void 0 ? void 0 : option.onChange) && changes[prop]) {
33
+ option.onChange(prop, value);
34
+ }
96
35
  if (typeof window !== 'undefined') {
97
36
  value = JSON.stringify(value);
98
37
  if (option.store === 'session' || option.store === 'local') {
99
38
  let storage = option.store === "session" ? sessionStorage : localStorage;
100
- storage.setItem(data_key, JSON.stringify(state));
39
+ storage.setItem(option.data_key, JSON.stringify(state));
101
40
  }
102
41
  else if (option.store === 'url') {
103
42
  let url = new URL(window.location.href);
104
- url.searchParams.set(data_key, encodeURIComponent(JSON.stringify(state)));
43
+ url.searchParams.set(option.data_key, encodeURIComponent(JSON.stringify(state)));
105
44
  window.history.replaceState({}, '', url.toString());
106
45
  }
107
46
  else if (option.store === 'cookie') {
108
- Cookie.setCookie(data_key, JSON.stringify(state));
47
+ Cookie.setCookie(option.data_key, JSON.stringify(state));
109
48
  }
110
49
  }
111
50
  return true;
@@ -123,6 +62,25 @@
123
62
  }
124
63
  return true;
125
64
  };
65
+ useBucket.isValid = (key) => {
66
+ try {
67
+ initial[key].parse(state[key]);
68
+ }
69
+ catch (error) {
70
+ return false;
71
+ }
72
+ return true;
73
+ };
74
+ useBucket.getChanges = () => {
75
+ const changedData = {};
76
+ for (let k in changes) {
77
+ if (changes[k]) {
78
+ changedData[k] = state[k];
79
+ }
80
+ }
81
+ return changedData;
82
+ };
83
+ useBucket.isChanged = (k) => !!changes[k];
126
84
  useBucket.errors = () => {
127
85
  const errors = {};
128
86
  for (let k in initial) {
@@ -135,6 +93,15 @@
135
93
  }
136
94
  return errors;
137
95
  };
96
+ useBucket.getError = (key) => {
97
+ try {
98
+ initial[key].parse(state[key]);
99
+ }
100
+ catch (error) {
101
+ return error.message;
102
+ }
103
+ return null;
104
+ };
138
105
  return useBucket;
139
106
  };
140
107
  const xv = xanv.xv;exports.createBucket=createBucket;exports.xv=xv;//# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { useEffect, useId, useState } from \"react\"\nimport { xv as XV, XVInstanceType } from \"xanv\"\nimport youid from \"youid\";\nimport { getCookie, setCookie } from \"./Cookie\";\n\nexport type StoreType = \"memory\" | \"session\" | \"local\" | \"url\" | \"cookie\"\nexport type BucketOptions = {\n store?: StoreType;\n data_key?: string;\n onChange?: (key: string, value: any) => void\n}\n\nexport type InitialBucketData = {\n [key: string]: XVInstanceType\n}\n\nexport const createBucket = <T extends InitialBucketData>(initial: T, option?: BucketOptions) => {\n const hooks = new Map<string, Function>()\n const state: Record<keyof T, T[keyof T]> = {} as any\n\n let data_key = option?.data_key || ''\n if (!option?.data_key) {\n let data_key = ''\n for (let key in initial) {\n const field = initial[key]\n data_key += key + ':' + JSON.stringify(field.meta) + ';'\n }\n data_key = youid(data_key)\n }\n\n option = {\n store: \"memory\",\n ...option,\n data_key,\n }\n // set state prototype for validation\n\n for (let key in initial) {\n try {\n state[key] = initial[key].parse(undefined)\n } catch (error) { }\n }\n\n if (typeof window !== 'undefined') {\n if (option.store === 'session' || option.store === 'local') {\n let storage = option.store === \"session\" ? sessionStorage : localStorage\n const value = storage.getItem(data_key)\n let data: any = {}\n if (value) {\n data = JSON.parse(value)\n }\n for (let key in initial) {\n try {\n state[key] = initial[key].parse(data[key])\n } catch (error) {\n state[key] = data[key]\n }\n }\n } else if (option.store === 'url') {\n let url = new URL(window.location.href)\n const value = url.searchParams.get(data_key)\n let data: any = {}\n if (value) {\n data = JSON.parse(decodeURIComponent(value))\n }\n for (let key in initial) {\n try {\n state[key] = initial[key].parse(data[key])\n } catch (error) {\n state[key] = data[key]\n }\n }\n } else if (option.store === 'cookie') {\n const cookieData = getCookie(data_key)\n let data: any = {}\n if (cookieData) {\n data = JSON.parse(cookieData)\n }\n for (let key in initial) {\n try {\n state[key] = initial[key].parse(data[key])\n } catch (error) {\n state[key] = data[key]\n }\n }\n } else {\n for (let key in initial) {\n try {\n state[key] = initial[key].parse(undefined)\n } catch (error) {\n }\n }\n }\n }\n\n const useBucket = () => {\n const id = \"rsb_\" + useId()\n const [, setState] = useState(0)\n\n useEffect(() => {\n hooks.set(id, () => setState(Math.random()))\n return () => {\n hooks.delete(id)\n }\n }, [id])\n\n return new Proxy(state, {\n get: (target: any, prop: string) => target[prop],\n set: (target, prop: string, value) => {\n if (!(prop in initial)) {\n throw new Error(`Property ${String(prop)} is not defined in the bucket.`)\n }\n (target as any)[prop as keyof T] = value;\n hooks.forEach((hook) => hook());\n if (typeof window !== 'undefined') {\n value = JSON.stringify(value) as any\n if (option.store === 'session' || option.store === 'local') {\n let storage = option.store === \"session\" ? sessionStorage : localStorage\n storage.setItem(data_key, JSON.stringify(state))\n } else if (option.store === 'url') {\n let url = new URL(window.location.href)\n url.searchParams.set(data_key, encodeURIComponent(JSON.stringify(state)))\n window.history.replaceState({}, '', url.toString())\n } else if (option.store === 'cookie') {\n setCookie(data_key, JSON.stringify(state))\n }\n }\n return true;\n }\n }) as Record<keyof T, any>\n }\n\n useBucket.validate = () => {\n try {\n for (let k in initial) {\n initial[k].parse(state[k])\n }\n } catch (error) {\n return false\n }\n return true\n }\n\n useBucket.errors = () => {\n const errors: Record<string, string> = {}\n for (let k in initial) {\n try {\n initial[k].parse(state[k])\n } catch (error: any) {\n errors[k] = error.message\n }\n }\n return errors\n }\n\n return useBucket\n}\n\nexport const xv = XV"],"names":["getCookie","useId","useState","useEffect","setCookie","XV"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { useEffect, useId, useState } from \"react\"\nimport { xv as XV, XVInstanceType } from \"xanv\"\nimport youid from \"youid\";\nimport { getCookie, setCookie } from \"./Cookie\";\nimport Initial from \"./Initial\";\n\nexport type StoreType = \"memory\" | \"session\" | \"local\" | \"url\" | \"cookie\"\nexport type BucketOptions = {\n store?: StoreType;\n data_key?: string;\n onChange?: (key: string, value: any) => void\n}\n\nexport type InitialBucketData = {\n [key: string]: XVInstanceType\n}\n\n\nexport const createBucket = <T extends InitialBucketData>(initial: T, option?: BucketOptions) => {\n option = {\n store: \"memory\",\n ...option,\n }\n\n if (!option?.data_key) {\n let data_key = ''\n for (let key in initial) {\n const field = initial[key]\n data_key += key + ':' + JSON.stringify(field.meta) + ';'\n }\n option.data_key = youid(data_key)\n }\n\n\n const hooks = new Map<string, Function>()\n const state: Record<keyof T, T[keyof T]> = Initial(initial, option?.data_key || '', option || {}) as Record<keyof T, T[keyof T]>;\n const changes: Record<keyof T, boolean> = {} as any\n\n const useBucket = () => {\n const id = \"rsb_\" + useId()\n const [, setState] = useState(0)\n\n useEffect(() => {\n hooks.set(id, () => setState(Math.random()))\n return () => {\n hooks.delete(id)\n }\n }, [])\n\n return new Proxy(state, {\n get: (target: any, prop: string) => target[prop],\n set: (target, prop: string, value) => {\n if (!(prop in initial)) {\n throw new Error(`Property ${String(prop)} is not defined in the bucket.`)\n }\n (target as any)[prop as keyof T] = value;\n hooks.forEach((hook) => hook());\n changes[prop as keyof T] = true\n\n if (option?.onChange && changes[prop as keyof T]) {\n option.onChange(prop as string, value)\n }\n\n if (typeof window !== 'undefined') {\n value = JSON.stringify(value) as any\n if (option.store === 'session' || option.store === 'local') {\n let storage = option.store === \"session\" ? sessionStorage : localStorage\n storage.setItem(option.data_key!, JSON.stringify(state))\n } else if (option.store === 'url') {\n let url = new URL(window.location.href)\n url.searchParams.set(option.data_key!, encodeURIComponent(JSON.stringify(state)))\n window.history.replaceState({}, '', url.toString())\n } else if (option.store === 'cookie') {\n setCookie(option.data_key!, JSON.stringify(state))\n }\n }\n return true;\n }\n }) as Record<keyof T, any>\n }\n\n useBucket.validate = () => {\n try {\n for (let k in initial) {\n initial[k].parse(state[k])\n }\n } catch (error) {\n return false\n }\n return true\n }\n\n useBucket.isValid = (key: keyof T) => {\n try {\n initial[key].parse(state[key])\n } catch (error) {\n return false\n }\n return true\n }\n\n useBucket.getChanges = () => {\n const changedData: Partial<Record<keyof T, any>> = {}\n for (let k in changes) {\n if (changes[k as keyof T]) {\n changedData[k as keyof T] = state[k as keyof T]\n }\n }\n return changedData\n }\n\n useBucket.isChanged = (k: keyof T) => !!changes[k]\n\n useBucket.errors = () => {\n const errors: Record<string, string> = {}\n for (let k in initial) {\n try {\n initial[k].parse(state[k])\n } catch (error: any) {\n errors[k] = error.message\n }\n }\n return errors\n }\n\n useBucket.getError = (key: keyof T) => {\n try {\n initial[key].parse(state[key])\n } catch (error: any) {\n return error.message\n }\n return null\n }\n\n\n return useBucket\n}\n\nexport const xv = XV"],"names":["Initial","useId","useState","useEffect","setCookie","XV"],"mappings":"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"}
package/index.mjs CHANGED
@@ -1,81 +1,16 @@
1
- import {useId,useState,useEffect}from'react';import {xv as xv$1}from'xanv';import youid from'youid';import {getCookie,setCookie}from'./Cookie.mjs';const createBucket = (initial, option) => {
2
- const hooks = new Map();
3
- const state = {};
4
- let data_key = (option === null || option === void 0 ? void 0 : option.data_key) || '';
1
+ import {useId,useState,useEffect}from'react';import {xv as xv$1}from'xanv';import youid from'youid';import {setCookie}from'./Cookie.mjs';import Initial from'./Initial.mjs';const createBucket = (initial, option) => {
2
+ option = Object.assign({ store: "memory" }, option);
5
3
  if (!(option === null || option === void 0 ? void 0 : option.data_key)) {
6
4
  let data_key = '';
7
5
  for (let key in initial) {
8
6
  const field = initial[key];
9
7
  data_key += key + ':' + JSON.stringify(field.meta) + ';';
10
8
  }
11
- data_key = youid(data_key);
12
- }
13
- option = Object.assign(Object.assign({ store: "memory" }, option), { data_key });
14
- // set state prototype for validation
15
- for (let key in initial) {
16
- try {
17
- state[key] = initial[key].parse(undefined);
18
- }
19
- catch (error) { }
20
- }
21
- if (typeof window !== 'undefined') {
22
- if (option.store === 'session' || option.store === 'local') {
23
- let storage = option.store === "session" ? sessionStorage : localStorage;
24
- const value = storage.getItem(data_key);
25
- let data = {};
26
- if (value) {
27
- data = JSON.parse(value);
28
- }
29
- for (let key in initial) {
30
- try {
31
- state[key] = initial[key].parse(data[key]);
32
- }
33
- catch (error) {
34
- state[key] = data[key];
35
- }
36
- }
37
- }
38
- else if (option.store === 'url') {
39
- let url = new URL(window.location.href);
40
- const value = url.searchParams.get(data_key);
41
- let data = {};
42
- if (value) {
43
- data = JSON.parse(decodeURIComponent(value));
44
- }
45
- for (let key in initial) {
46
- try {
47
- state[key] = initial[key].parse(data[key]);
48
- }
49
- catch (error) {
50
- state[key] = data[key];
51
- }
52
- }
53
- }
54
- else if (option.store === 'cookie') {
55
- const cookieData = getCookie(data_key);
56
- let data = {};
57
- if (cookieData) {
58
- data = JSON.parse(cookieData);
59
- }
60
- for (let key in initial) {
61
- try {
62
- state[key] = initial[key].parse(data[key]);
63
- }
64
- catch (error) {
65
- state[key] = data[key];
66
- }
67
- }
68
- }
69
- else {
70
- for (let key in initial) {
71
- try {
72
- state[key] = initial[key].parse(undefined);
73
- }
74
- catch (error) {
75
- }
76
- }
77
- }
9
+ option.data_key = youid(data_key);
78
10
  }
11
+ const hooks = new Map();
12
+ const state = Initial(initial, (option === null || option === void 0 ? void 0 : option.data_key) || '', option || {});
13
+ const changes = {};
79
14
  const useBucket = () => {
80
15
  const id = "rsb_" + useId();
81
16
  const [, setState] = useState(0);
@@ -84,7 +19,7 @@ import {useId,useState,useEffect}from'react';import {xv as xv$1}from'xanv';impor
84
19
  return () => {
85
20
  hooks.delete(id);
86
21
  };
87
- }, [id]);
22
+ }, []);
88
23
  return new Proxy(state, {
89
24
  get: (target, prop) => target[prop],
90
25
  set: (target, prop, value) => {
@@ -93,19 +28,23 @@ import {useId,useState,useEffect}from'react';import {xv as xv$1}from'xanv';impor
93
28
  }
94
29
  target[prop] = value;
95
30
  hooks.forEach((hook) => hook());
31
+ changes[prop] = true;
32
+ if ((option === null || option === void 0 ? void 0 : option.onChange) && changes[prop]) {
33
+ option.onChange(prop, value);
34
+ }
96
35
  if (typeof window !== 'undefined') {
97
36
  value = JSON.stringify(value);
98
37
  if (option.store === 'session' || option.store === 'local') {
99
38
  let storage = option.store === "session" ? sessionStorage : localStorage;
100
- storage.setItem(data_key, JSON.stringify(state));
39
+ storage.setItem(option.data_key, JSON.stringify(state));
101
40
  }
102
41
  else if (option.store === 'url') {
103
42
  let url = new URL(window.location.href);
104
- url.searchParams.set(data_key, encodeURIComponent(JSON.stringify(state)));
43
+ url.searchParams.set(option.data_key, encodeURIComponent(JSON.stringify(state)));
105
44
  window.history.replaceState({}, '', url.toString());
106
45
  }
107
46
  else if (option.store === 'cookie') {
108
- setCookie(data_key, JSON.stringify(state));
47
+ setCookie(option.data_key, JSON.stringify(state));
109
48
  }
110
49
  }
111
50
  return true;
@@ -123,6 +62,25 @@ import {useId,useState,useEffect}from'react';import {xv as xv$1}from'xanv';impor
123
62
  }
124
63
  return true;
125
64
  };
65
+ useBucket.isValid = (key) => {
66
+ try {
67
+ initial[key].parse(state[key]);
68
+ }
69
+ catch (error) {
70
+ return false;
71
+ }
72
+ return true;
73
+ };
74
+ useBucket.getChanges = () => {
75
+ const changedData = {};
76
+ for (let k in changes) {
77
+ if (changes[k]) {
78
+ changedData[k] = state[k];
79
+ }
80
+ }
81
+ return changedData;
82
+ };
83
+ useBucket.isChanged = (k) => !!changes[k];
126
84
  useBucket.errors = () => {
127
85
  const errors = {};
128
86
  for (let k in initial) {
@@ -135,6 +93,15 @@ import {useId,useState,useEffect}from'react';import {xv as xv$1}from'xanv';impor
135
93
  }
136
94
  return errors;
137
95
  };
96
+ useBucket.getError = (key) => {
97
+ try {
98
+ initial[key].parse(state[key]);
99
+ }
100
+ catch (error) {
101
+ return error.message;
102
+ }
103
+ return null;
104
+ };
138
105
  return useBucket;
139
106
  };
140
107
  const xv = xv$1;export{createBucket,xv};//# sourceMappingURL=index.mjs.map
package/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["import { useEffect, useId, useState } from \"react\"\nimport { xv as XV, XVInstanceType } from \"xanv\"\nimport youid from \"youid\";\nimport { getCookie, setCookie } from \"./Cookie\";\n\nexport type StoreType = \"memory\" | \"session\" | \"local\" | \"url\" | \"cookie\"\nexport type BucketOptions = {\n store?: StoreType;\n data_key?: string;\n onChange?: (key: string, value: any) => void\n}\n\nexport type InitialBucketData = {\n [key: string]: XVInstanceType\n}\n\nexport const createBucket = <T extends InitialBucketData>(initial: T, option?: BucketOptions) => {\n const hooks = new Map<string, Function>()\n const state: Record<keyof T, T[keyof T]> = {} as any\n\n let data_key = option?.data_key || ''\n if (!option?.data_key) {\n let data_key = ''\n for (let key in initial) {\n const field = initial[key]\n data_key += key + ':' + JSON.stringify(field.meta) + ';'\n }\n data_key = youid(data_key)\n }\n\n option = {\n store: \"memory\",\n ...option,\n data_key,\n }\n // set state prototype for validation\n\n for (let key in initial) {\n try {\n state[key] = initial[key].parse(undefined)\n } catch (error) { }\n }\n\n if (typeof window !== 'undefined') {\n if (option.store === 'session' || option.store === 'local') {\n let storage = option.store === \"session\" ? sessionStorage : localStorage\n const value = storage.getItem(data_key)\n let data: any = {}\n if (value) {\n data = JSON.parse(value)\n }\n for (let key in initial) {\n try {\n state[key] = initial[key].parse(data[key])\n } catch (error) {\n state[key] = data[key]\n }\n }\n } else if (option.store === 'url') {\n let url = new URL(window.location.href)\n const value = url.searchParams.get(data_key)\n let data: any = {}\n if (value) {\n data = JSON.parse(decodeURIComponent(value))\n }\n for (let key in initial) {\n try {\n state[key] = initial[key].parse(data[key])\n } catch (error) {\n state[key] = data[key]\n }\n }\n } else if (option.store === 'cookie') {\n const cookieData = getCookie(data_key)\n let data: any = {}\n if (cookieData) {\n data = JSON.parse(cookieData)\n }\n for (let key in initial) {\n try {\n state[key] = initial[key].parse(data[key])\n } catch (error) {\n state[key] = data[key]\n }\n }\n } else {\n for (let key in initial) {\n try {\n state[key] = initial[key].parse(undefined)\n } catch (error) {\n }\n }\n }\n }\n\n const useBucket = () => {\n const id = \"rsb_\" + useId()\n const [, setState] = useState(0)\n\n useEffect(() => {\n hooks.set(id, () => setState(Math.random()))\n return () => {\n hooks.delete(id)\n }\n }, [id])\n\n return new Proxy(state, {\n get: (target: any, prop: string) => target[prop],\n set: (target, prop: string, value) => {\n if (!(prop in initial)) {\n throw new Error(`Property ${String(prop)} is not defined in the bucket.`)\n }\n (target as any)[prop as keyof T] = value;\n hooks.forEach((hook) => hook());\n if (typeof window !== 'undefined') {\n value = JSON.stringify(value) as any\n if (option.store === 'session' || option.store === 'local') {\n let storage = option.store === \"session\" ? sessionStorage : localStorage\n storage.setItem(data_key, JSON.stringify(state))\n } else if (option.store === 'url') {\n let url = new URL(window.location.href)\n url.searchParams.set(data_key, encodeURIComponent(JSON.stringify(state)))\n window.history.replaceState({}, '', url.toString())\n } else if (option.store === 'cookie') {\n setCookie(data_key, JSON.stringify(state))\n }\n }\n return true;\n }\n }) as Record<keyof T, any>\n }\n\n useBucket.validate = () => {\n try {\n for (let k in initial) {\n initial[k].parse(state[k])\n }\n } catch (error) {\n return false\n }\n return true\n }\n\n useBucket.errors = () => {\n const errors: Record<string, string> = {}\n for (let k in initial) {\n try {\n initial[k].parse(state[k])\n } catch (error: any) {\n errors[k] = error.message\n }\n }\n return errors\n }\n\n return useBucket\n}\n\nexport const xv = XV"],"names":["XV"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["import { useEffect, useId, useState } from \"react\"\nimport { xv as XV, XVInstanceType } from \"xanv\"\nimport youid from \"youid\";\nimport { getCookie, setCookie } from \"./Cookie\";\nimport Initial from \"./Initial\";\n\nexport type StoreType = \"memory\" | \"session\" | \"local\" | \"url\" | \"cookie\"\nexport type BucketOptions = {\n store?: StoreType;\n data_key?: string;\n onChange?: (key: string, value: any) => void\n}\n\nexport type InitialBucketData = {\n [key: string]: XVInstanceType\n}\n\n\nexport const createBucket = <T extends InitialBucketData>(initial: T, option?: BucketOptions) => {\n option = {\n store: \"memory\",\n ...option,\n }\n\n if (!option?.data_key) {\n let data_key = ''\n for (let key in initial) {\n const field = initial[key]\n data_key += key + ':' + JSON.stringify(field.meta) + ';'\n }\n option.data_key = youid(data_key)\n }\n\n\n const hooks = new Map<string, Function>()\n const state: Record<keyof T, T[keyof T]> = Initial(initial, option?.data_key || '', option || {}) as Record<keyof T, T[keyof T]>;\n const changes: Record<keyof T, boolean> = {} as any\n\n const useBucket = () => {\n const id = \"rsb_\" + useId()\n const [, setState] = useState(0)\n\n useEffect(() => {\n hooks.set(id, () => setState(Math.random()))\n return () => {\n hooks.delete(id)\n }\n }, [])\n\n return new Proxy(state, {\n get: (target: any, prop: string) => target[prop],\n set: (target, prop: string, value) => {\n if (!(prop in initial)) {\n throw new Error(`Property ${String(prop)} is not defined in the bucket.`)\n }\n (target as any)[prop as keyof T] = value;\n hooks.forEach((hook) => hook());\n changes[prop as keyof T] = true\n\n if (option?.onChange && changes[prop as keyof T]) {\n option.onChange(prop as string, value)\n }\n\n if (typeof window !== 'undefined') {\n value = JSON.stringify(value) as any\n if (option.store === 'session' || option.store === 'local') {\n let storage = option.store === \"session\" ? sessionStorage : localStorage\n storage.setItem(option.data_key!, JSON.stringify(state))\n } else if (option.store === 'url') {\n let url = new URL(window.location.href)\n url.searchParams.set(option.data_key!, encodeURIComponent(JSON.stringify(state)))\n window.history.replaceState({}, '', url.toString())\n } else if (option.store === 'cookie') {\n setCookie(option.data_key!, JSON.stringify(state))\n }\n }\n return true;\n }\n }) as Record<keyof T, any>\n }\n\n useBucket.validate = () => {\n try {\n for (let k in initial) {\n initial[k].parse(state[k])\n }\n } catch (error) {\n return false\n }\n return true\n }\n\n useBucket.isValid = (key: keyof T) => {\n try {\n initial[key].parse(state[key])\n } catch (error) {\n return false\n }\n return true\n }\n\n useBucket.getChanges = () => {\n const changedData: Partial<Record<keyof T, any>> = {}\n for (let k in changes) {\n if (changes[k as keyof T]) {\n changedData[k as keyof T] = state[k as keyof T]\n }\n }\n return changedData\n }\n\n useBucket.isChanged = (k: keyof T) => !!changes[k]\n\n useBucket.errors = () => {\n const errors: Record<string, string> = {}\n for (let k in initial) {\n try {\n initial[k].parse(state[k])\n } catch (error: any) {\n errors[k] = error.message\n }\n }\n return errors\n }\n\n useBucket.getError = (key: keyof T) => {\n try {\n initial[key].parse(state[key])\n } catch (error: any) {\n return error.message\n }\n return null\n }\n\n\n return useBucket\n}\n\nexport const xv = XV"],"names":["XV"],"mappings":"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"}
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.2.9",
2
+ "version": "1.2.10",
3
3
  "name": "react-state-bucket",
4
4
  "author": "Naxrul Ahmed",
5
5
  "license": "MIT",