@siberiacancode/reactuse 0.0.118 → 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 (54) hide show
  1. package/dist/cjs/hooks/useDoubleClick/useDoubleClick.cjs +1 -1
  2. package/dist/cjs/hooks/useDoubleClick/useDoubleClick.cjs.map +1 -1
  3. package/dist/cjs/hooks/useInterval/useInterval.cjs +1 -1
  4. package/dist/cjs/hooks/useInterval/useInterval.cjs.map +1 -1
  5. package/dist/cjs/hooks/useLongPress/useLongPress.cjs +1 -1
  6. package/dist/cjs/hooks/useLongPress/useLongPress.cjs.map +1 -1
  7. package/dist/cjs/hooks/useOnce/useOnce.cjs +1 -1
  8. package/dist/cjs/hooks/useOnce/useOnce.cjs.map +1 -1
  9. package/dist/cjs/hooks/usePerformanceObserver/usePerformanceObserver.cjs +1 -1
  10. package/dist/cjs/hooks/usePerformanceObserver/usePerformanceObserver.cjs.map +1 -1
  11. package/dist/cjs/hooks/usePrevious/usePrevious.cjs +1 -1
  12. package/dist/cjs/hooks/usePrevious/usePrevious.cjs.map +1 -1
  13. package/dist/cjs/hooks/useQuery/useQuery.cjs +1 -1
  14. package/dist/cjs/hooks/useQuery/useQuery.cjs.map +1 -1
  15. package/dist/cjs/hooks/useResizeObserver/useResizeObserver.cjs +1 -1
  16. package/dist/cjs/hooks/useResizeObserver/useResizeObserver.cjs.map +1 -1
  17. package/dist/cjs/hooks/useTimeout/useTimeout.cjs +1 -1
  18. package/dist/cjs/hooks/useTimeout/useTimeout.cjs.map +1 -1
  19. package/dist/cjs/hooks/useTimer/useTimer.cjs +1 -1
  20. package/dist/cjs/hooks/useTimer/useTimer.cjs.map +1 -1
  21. package/dist/cjs/hooks/useVibrate/useVibrate.cjs +1 -1
  22. package/dist/cjs/hooks/useVibrate/useVibrate.cjs.map +1 -1
  23. package/dist/cjs/hooks/useWakeLock/useWakeLock.cjs +1 -1
  24. package/dist/cjs/hooks/useWakeLock/useWakeLock.cjs.map +1 -1
  25. package/dist/cjs/hooks/useWebSocket/useWebSocket.cjs +1 -1
  26. package/dist/cjs/hooks/useWebSocket/useWebSocket.cjs.map +1 -1
  27. package/dist/esm/hooks/useDoubleClick/useDoubleClick.mjs +4 -4
  28. package/dist/esm/hooks/useDoubleClick/useDoubleClick.mjs.map +1 -1
  29. package/dist/esm/hooks/useInterval/useInterval.mjs +6 -6
  30. package/dist/esm/hooks/useInterval/useInterval.mjs.map +1 -1
  31. package/dist/esm/hooks/useLongPress/useLongPress.mjs +1 -1
  32. package/dist/esm/hooks/useLongPress/useLongPress.mjs.map +1 -1
  33. package/dist/esm/hooks/useOnce/useOnce.mjs +3 -3
  34. package/dist/esm/hooks/useOnce/useOnce.mjs.map +1 -1
  35. package/dist/esm/hooks/usePerformanceObserver/usePerformanceObserver.mjs +14 -14
  36. package/dist/esm/hooks/usePerformanceObserver/usePerformanceObserver.mjs.map +1 -1
  37. package/dist/esm/hooks/usePrevious/usePrevious.mjs +3 -3
  38. package/dist/esm/hooks/usePrevious/usePrevious.mjs.map +1 -1
  39. package/dist/esm/hooks/useQuery/useQuery.mjs +9 -9
  40. package/dist/esm/hooks/useQuery/useQuery.mjs.map +1 -1
  41. package/dist/esm/hooks/useResizeObserver/useResizeObserver.mjs +17 -17
  42. package/dist/esm/hooks/useResizeObserver/useResizeObserver.mjs.map +1 -1
  43. package/dist/esm/hooks/useTimeout/useTimeout.mjs +1 -1
  44. package/dist/esm/hooks/useTimeout/useTimeout.mjs.map +1 -1
  45. package/dist/esm/hooks/useTimer/useTimer.mjs +15 -15
  46. package/dist/esm/hooks/useTimer/useTimer.mjs.map +1 -1
  47. package/dist/esm/hooks/useVibrate/useVibrate.mjs +9 -9
  48. package/dist/esm/hooks/useVibrate/useVibrate.mjs.map +1 -1
  49. package/dist/esm/hooks/useWakeLock/useWakeLock.mjs +3 -3
  50. package/dist/esm/hooks/useWakeLock/useWakeLock.mjs.map +1 -1
  51. package/dist/esm/hooks/useWebSocket/useWebSocket.mjs +5 -5
  52. package/dist/esm/hooks/useWebSocket/useWebSocket.mjs.map +1 -1
  53. package/dist/types/hooks/usePrevious/usePrevious.d.ts +1 -1
  54. package/package.json +13 -13
@@ -1,14 +1,14 @@
1
- import { useRef as y, useState as k, useEffect as w } from "react";
2
- import { useEvent as C } from "../useEvent/useEvent.mjs";
1
+ import { useRef as y, useState as k, useEffect as v } from "react";
2
+ import { useEvent as w } from "../useEvent/useEvent.mjs";
3
3
  import { getRetry as m } from "../../utils/helpers/getRetry.mjs";
4
4
  const W = (t, e) => {
5
- const u = y(), d = y(e != null && e.retry ? m(e.retry) : 0), a = y(!1), [S, n] = k("connecting"), g = (r) => {
5
+ const u = y(void 0), d = y(e != null && e.retry ? m(e.retry) : 0), a = y(!1), [S, n] = k("connecting"), g = (r) => {
6
6
  var c;
7
7
  return (c = u.current) == null ? void 0 : c.send(r);
8
8
  }, R = () => {
9
9
  var r;
10
10
  a.current = !0, (r = u.current) == null || r.close();
11
- }, l = C(() => {
11
+ }, l = w(() => {
12
12
  u.current = new WebSocket(
13
13
  typeof t == "function" ? t() : t,
14
14
  e == null ? void 0 : e.protocols
@@ -32,7 +32,7 @@ const W = (t, e) => {
32
32
  }
33
33
  });
34
34
  });
35
- w(() => (l(), () => {
35
+ v(() => (l(), () => {
36
36
  u.current && (u.current.close(), u.current = void 0);
37
37
  }), [t]);
38
38
  const b = () => {
@@ -1 +1 @@
1
- {"version":3,"file":"useWebSocket.mjs","sources":["../../../../src/hooks/useWebSocket/useWebSocket.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport { getRetry } from '@/utils/helpers';\n\nimport { useEvent } from '../useEvent/useEvent';\n\nexport type UseWebSocketUrl = (() => string) | string;\n\nexport interface UseWebSocketOptions {\n protocols?: Array<'soap' | 'wasm'>;\n retry?: boolean | number;\n onConnected?: (webSocket: WebSocket) => void;\n onDisconnected?: (event: CloseEvent, webSocket: WebSocket) => void;\n onError?: (event: Event, webSocket: WebSocket) => void;\n onMessage?: (event: MessageEvent, webSocket: WebSocket) => void;\n}\n\nexport type UseWebSocketStatus = 'connected' | 'connecting' | 'disconnected' | 'failed';\n\nexport interface UseWebSocketReturn {\n client?: WebSocket;\n close: WebSocket['close'];\n send: WebSocket['send'];\n status: UseWebSocketStatus;\n open: () => void;\n}\n\n/**\n * @name useWebSocket\n * @description - Hook that connects to a WebSocket server and handles incoming and outgoing messages\n * @category Browser\n *\n * @param {UseWebSocketUrl} url The URL of the WebSocket server\n * @param {(webSocket: WebSocket) => void} [options.onConnected] The callback function that is called when the WebSocket connection is established\n * @param {(event: CloseEvent, webSocket: WebSocket) => void} [options.onDisconnected] The callback function that is called when the WebSocket connection is closed\n * @param {(event: Event, webSocket: WebSocket) => void} [options.onError] The callback function that is called when an error occurs\n * @param {(event: MessageEvent, webSocket: WebSocket) => void} [options.onMessage] The callback function that is called when a message is received\n * @param {boolean | number} [options.retry] The number of times to retry the connection\n * @param {Array<'soap' | 'wasm'>} [options.protocols] The list of protocols to use\n * @returns {UseWebSocketReturn} An object with the status, close, send, open, and ws properties\n *\n * @example\n * const { status, close, send, open, client } = useWebSocket('url');\n */\nexport const useWebSocket = (\n url: UseWebSocketUrl,\n options?: UseWebSocketOptions\n): UseWebSocketReturn => {\n const webSocketRef = useRef<WebSocket>();\n const retryCountRef = useRef(options?.retry ? getRetry(options.retry) : 0);\n const explicityCloseRef = useRef(false);\n\n const [status, setStatus] = useState<UseWebSocketStatus>('connecting');\n\n const send = (data: string | ArrayBufferLike | ArrayBufferView | Blob) =>\n webSocketRef.current?.send(data);\n\n const close = () => {\n explicityCloseRef.current = true;\n webSocketRef.current?.close();\n };\n\n const init = useEvent(() => {\n webSocketRef.current = new WebSocket(\n typeof url === 'function' ? url() : url,\n options?.protocols\n );\n setStatus('connecting');\n\n const webSocket = webSocketRef.current;\n if (!webSocket) return;\n\n webSocket.onopen = () => {\n setStatus('connected');\n options?.onConnected?.(webSocket);\n };\n\n webSocket.onerror = (event) => {\n setStatus('failed');\n options?.onError?.(event, webSocket);\n };\n\n webSocket.onmessage = (event) => options?.onMessage?.(event, webSocket);\n\n webSocket.onclose = (event) => {\n setStatus('disconnected');\n options?.onDisconnected?.(event, webSocket);\n if (explicityCloseRef.current) return;\n\n if (retryCountRef.current > 0) {\n retryCountRef.current -= 1;\n return init();\n }\n retryCountRef.current = options?.retry ? getRetry(options.retry) : 0;\n };\n });\n\n useEffect(() => {\n init();\n\n return () => {\n if (!webSocketRef.current) return;\n webSocketRef.current.close();\n webSocketRef.current = undefined;\n };\n }, [url]);\n\n const open = () => {\n explicityCloseRef.current = false;\n init();\n };\n\n return { client: webSocketRef.current, close, open, send, status };\n};\n"],"names":["useWebSocket","url","options","webSocketRef","useRef","retryCountRef","getRetry","explicityCloseRef","status","setStatus","useState","send","data","_a","close","init","useEvent","webSocket","event","useEffect","open"],"mappings":";;;AA4Ca,MAAAA,IAAe,CAC1BC,GACAC,MACuB;AACvB,QAAMC,IAAeC,EAAkB,GACjCC,IAAgBD,EAAOF,KAAA,QAAAA,EAAS,QAAQI,EAASJ,EAAQ,KAAK,IAAI,CAAC,GACnEK,IAAoBH,EAAO,EAAK,GAEhC,CAACI,GAAQC,CAAS,IAAIC,EAA6B,YAAY,GAE/DC,IAAO,CAACC,MAAA;;AACZ,YAAAC,IAAAV,EAAa,YAAb,gBAAAU,EAAsB,KAAKD;AAAA,KAEvBE,IAAQ,MAAM;;AAClB,IAAAP,EAAkB,UAAU,KAC5BM,IAAAV,EAAa,YAAb,QAAAU,EAAsB;AAAA,EACxB,GAEME,IAAOC,EAAS,MAAM;AAC1B,IAAAb,EAAa,UAAU,IAAI;AAAA,MACzB,OAAOF,KAAQ,aAAaA,EAAA,IAAQA;AAAA,MACpCC,KAAA,gBAAAA,EAAS;AAAA,IACX,GACAO,EAAU,YAAY;AAEtB,UAAMQ,IAAYd,EAAa;AAC/B,IAAKc,MAELA,EAAU,SAAS,MAAM;;AACvB,MAAAR,EAAU,WAAW,IACrBI,IAAAX,KAAA,gBAAAA,EAAS,gBAAT,QAAAW,EAAA,KAAAX,GAAuBe;AAAA,IACzB,GAEUA,EAAA,UAAU,CAACC,MAAU;;AAC7B,MAAAT,EAAU,QAAQ,IACTI,IAAAX,KAAA,gBAAAA,EAAA,YAAA,QAAAW,EAAA,KAAAX,GAAUgB,GAAOD;AAAA,IAC5B,GAEAA,EAAU,YAAY,CAACC,MAAA;;AAAU,cAAAL,IAAAX,KAAA,gBAAAA,EAAS,cAAT,gBAAAW,EAAA,KAAAX,GAAqBgB,GAAOD;AAAA,OAEnDA,EAAA,UAAU,CAACC,MAAU;;AAG7B,UAFAT,EAAU,cAAc,IACfI,IAAAX,KAAA,gBAAAA,EAAA,mBAAA,QAAAW,EAAA,KAAAX,GAAiBgB,GAAOD,IAC7B,CAAAV,EAAkB,SAElB;AAAA,YAAAF,EAAc,UAAU;AAC1B,iBAAAA,EAAc,WAAW,GAClBU,EAAK;AAEd,QAAAV,EAAc,UAAUH,KAAA,QAAAA,EAAS,QAAQI,EAASJ,EAAQ,KAAK,IAAI;AAAA;AAAA,IACrE;AAAA,EAAA,CACD;AAED,EAAAiB,EAAU,OACHJ,EAAA,GAEE,MAAM;AACP,IAACZ,EAAa,YAClBA,EAAa,QAAQ,MAAM,GAC3BA,EAAa,UAAU;AAAA,EACzB,IACC,CAACF,CAAG,CAAC;AAER,QAAMmB,IAAO,MAAM;AACjB,IAAAb,EAAkB,UAAU,IACvBQ,EAAA;AAAA,EACP;AAEA,SAAO,EAAE,QAAQZ,EAAa,SAAS,OAAAW,GAAO,MAAAM,GAAM,MAAAT,GAAM,QAAAH,EAAO;AACnE;"}
1
+ {"version":3,"file":"useWebSocket.mjs","sources":["../../../../src/hooks/useWebSocket/useWebSocket.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport { getRetry } from '@/utils/helpers';\n\nimport { useEvent } from '../useEvent/useEvent';\n\nexport type UseWebSocketUrl = (() => string) | string;\n\nexport interface UseWebSocketOptions {\n protocols?: Array<'soap' | 'wasm'>;\n retry?: boolean | number;\n onConnected?: (webSocket: WebSocket) => void;\n onDisconnected?: (event: CloseEvent, webSocket: WebSocket) => void;\n onError?: (event: Event, webSocket: WebSocket) => void;\n onMessage?: (event: MessageEvent, webSocket: WebSocket) => void;\n}\n\nexport type UseWebSocketStatus = 'connected' | 'connecting' | 'disconnected' | 'failed';\n\nexport interface UseWebSocketReturn {\n client?: WebSocket;\n close: WebSocket['close'];\n send: WebSocket['send'];\n status: UseWebSocketStatus;\n open: () => void;\n}\n\n/**\n * @name useWebSocket\n * @description - Hook that connects to a WebSocket server and handles incoming and outgoing messages\n * @category Browser\n *\n * @param {UseWebSocketUrl} url The URL of the WebSocket server\n * @param {(webSocket: WebSocket) => void} [options.onConnected] The callback function that is called when the WebSocket connection is established\n * @param {(event: CloseEvent, webSocket: WebSocket) => void} [options.onDisconnected] The callback function that is called when the WebSocket connection is closed\n * @param {(event: Event, webSocket: WebSocket) => void} [options.onError] The callback function that is called when an error occurs\n * @param {(event: MessageEvent, webSocket: WebSocket) => void} [options.onMessage] The callback function that is called when a message is received\n * @param {boolean | number} [options.retry] The number of times to retry the connection\n * @param {Array<'soap' | 'wasm'>} [options.protocols] The list of protocols to use\n * @returns {UseWebSocketReturn} An object with the status, close, send, open, and ws properties\n *\n * @example\n * const { status, close, send, open, client } = useWebSocket('url');\n */\nexport const useWebSocket = (\n url: UseWebSocketUrl,\n options?: UseWebSocketOptions\n): UseWebSocketReturn => {\n const webSocketRef = useRef<WebSocket>(undefined);\n const retryCountRef = useRef(options?.retry ? getRetry(options.retry) : 0);\n const explicityCloseRef = useRef(false);\n\n const [status, setStatus] = useState<UseWebSocketStatus>('connecting');\n\n const send = (data: string | ArrayBufferLike | ArrayBufferView | Blob) =>\n webSocketRef.current?.send(data);\n\n const close = () => {\n explicityCloseRef.current = true;\n webSocketRef.current?.close();\n };\n\n const init = useEvent(() => {\n webSocketRef.current = new WebSocket(\n typeof url === 'function' ? url() : url,\n options?.protocols\n );\n setStatus('connecting');\n\n const webSocket = webSocketRef.current;\n if (!webSocket) return;\n\n webSocket.onopen = () => {\n setStatus('connected');\n options?.onConnected?.(webSocket);\n };\n\n webSocket.onerror = (event) => {\n setStatus('failed');\n options?.onError?.(event, webSocket);\n };\n\n webSocket.onmessage = (event) => options?.onMessage?.(event, webSocket);\n\n webSocket.onclose = (event) => {\n setStatus('disconnected');\n options?.onDisconnected?.(event, webSocket);\n if (explicityCloseRef.current) return;\n\n if (retryCountRef.current > 0) {\n retryCountRef.current -= 1;\n return init();\n }\n retryCountRef.current = options?.retry ? getRetry(options.retry) : 0;\n };\n });\n\n useEffect(() => {\n init();\n\n return () => {\n if (!webSocketRef.current) return;\n webSocketRef.current.close();\n webSocketRef.current = undefined;\n };\n }, [url]);\n\n const open = () => {\n explicityCloseRef.current = false;\n init();\n };\n\n return { client: webSocketRef.current, close, open, send, status };\n};\n"],"names":["useWebSocket","url","options","webSocketRef","useRef","retryCountRef","getRetry","explicityCloseRef","status","setStatus","useState","send","data","_a","close","init","useEvent","webSocket","event","useEffect","open"],"mappings":";;;AA4Ca,MAAAA,IAAe,CAC1BC,GACAC,MACuB;AACjB,QAAAC,IAAeC,EAAkB,MAAS,GAC1CC,IAAgBD,EAAOF,KAAA,QAAAA,EAAS,QAAQI,EAASJ,EAAQ,KAAK,IAAI,CAAC,GACnEK,IAAoBH,EAAO,EAAK,GAEhC,CAACI,GAAQC,CAAS,IAAIC,EAA6B,YAAY,GAE/DC,IAAO,CAACC,MAAA;;AACZ,YAAAC,IAAAV,EAAa,YAAb,gBAAAU,EAAsB,KAAKD;AAAA,KAEvBE,IAAQ,MAAM;;AAClB,IAAAP,EAAkB,UAAU,KAC5BM,IAAAV,EAAa,YAAb,QAAAU,EAAsB;AAAA,EACxB,GAEME,IAAOC,EAAS,MAAM;AAC1B,IAAAb,EAAa,UAAU,IAAI;AAAA,MACzB,OAAOF,KAAQ,aAAaA,EAAA,IAAQA;AAAA,MACpCC,KAAA,gBAAAA,EAAS;AAAA,IACX,GACAO,EAAU,YAAY;AAEtB,UAAMQ,IAAYd,EAAa;AAC/B,IAAKc,MAELA,EAAU,SAAS,MAAM;;AACvB,MAAAR,EAAU,WAAW,IACrBI,IAAAX,KAAA,gBAAAA,EAAS,gBAAT,QAAAW,EAAA,KAAAX,GAAuBe;AAAA,IACzB,GAEUA,EAAA,UAAU,CAACC,MAAU;;AAC7B,MAAAT,EAAU,QAAQ,IACTI,IAAAX,KAAA,gBAAAA,EAAA,YAAA,QAAAW,EAAA,KAAAX,GAAUgB,GAAOD;AAAA,IAC5B,GAEAA,EAAU,YAAY,CAACC,MAAA;;AAAU,cAAAL,IAAAX,KAAA,gBAAAA,EAAS,cAAT,gBAAAW,EAAA,KAAAX,GAAqBgB,GAAOD;AAAA,OAEnDA,EAAA,UAAU,CAACC,MAAU;;AAG7B,UAFAT,EAAU,cAAc,IACfI,IAAAX,KAAA,gBAAAA,EAAA,mBAAA,QAAAW,EAAA,KAAAX,GAAiBgB,GAAOD,IAC7B,CAAAV,EAAkB,SAElB;AAAA,YAAAF,EAAc,UAAU;AAC1B,iBAAAA,EAAc,WAAW,GAClBU,EAAK;AAEd,QAAAV,EAAc,UAAUH,KAAA,QAAAA,EAAS,QAAQI,EAASJ,EAAQ,KAAK,IAAI;AAAA;AAAA,IACrE;AAAA,EAAA,CACD;AAED,EAAAiB,EAAU,OACHJ,EAAA,GAEE,MAAM;AACP,IAACZ,EAAa,YAClBA,EAAa,QAAQ,MAAM,GAC3BA,EAAa,UAAU;AAAA,EACzB,IACC,CAACF,CAAG,CAAC;AAER,QAAMmB,IAAO,MAAM;AACjB,IAAAb,EAAkB,UAAU,IACvBQ,EAAA;AAAA,EACP;AAEA,SAAO,EAAE,QAAQZ,EAAa,SAAS,OAAAW,GAAO,MAAAM,GAAM,MAAAT,GAAM,QAAAH,EAAO;AACnE;"}
@@ -9,7 +9,7 @@ export interface UsePreviousOptions<Value> {
9
9
  * @template Value The type of the value
10
10
  * @param {Value} value The value to get the previous value
11
11
  * @param {(a: Value, b: Value) => boolean} [options.equality] The custom equality function to determine if the value has changed
12
- * @returns {Value} The previous value
12
+ * @returns {Value | undefined} The previous value
13
13
  *
14
14
  * @example
15
15
  * const prevValue = usePrevious(value);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@siberiacancode/reactuse",
3
- "version": "0.0.118",
3
+ "version": "0.1.0",
4
4
  "description": "The ultimate collection of react hooks",
5
5
  "author": {
6
6
  "name": "SIBERIA CAN CODE 🧊",
@@ -51,9 +51,9 @@
51
51
  "lint-staged": "lint-staged"
52
52
  },
53
53
  "peerDependencies": {
54
- "@types/react": "^18.0.0",
55
- "react": "^17.0.2 || ^18.0.0",
56
- "react-dom": "^17.0.2 || ^18.0.0"
54
+ "@types/react": "^18",
55
+ "react": "^17 || ^18 || ^19",
56
+ "react-dom": "^17 || ^18 || ^19"
57
57
  },
58
58
  "peerDependenciesMeta": {
59
59
  "@types/react": {
@@ -66,19 +66,19 @@
66
66
  "devDependencies": {
67
67
  "@siberiacancode/vitest": "^2.1.0",
68
68
  "@testing-library/dom": "^10.4.0",
69
- "@testing-library/react": "^16.2.0",
70
- "@types/dom-speech-recognition": "^0.0.4",
71
- "@types/react": "^18.3.18",
72
- "@types/react-dom": "^18.3.5",
69
+ "@testing-library/react": "^16.3.0",
70
+ "@types/dom-speech-recognition": "^0.0.6",
71
+ "@types/react": "^19.1.2",
72
+ "@types/react-dom": "^19.1.2",
73
73
  "@types/web-bluetooth": "^0.0.21",
74
- "@vitejs/plugin-react": "^4.3.4",
74
+ "@vitejs/plugin-react": "^4.4.1",
75
75
  "core-js": "^3.41.0",
76
- "react": "^18.3.1",
77
- "react-dom": "^18.3.1",
76
+ "react": "^19.1.0",
77
+ "react-dom": "^19.1.0",
78
78
  "shx": "^0.4.0",
79
- "vite": "^6.2.3",
79
+ "vite": "^6.3.2",
80
80
  "vite-plugin-dts": "^4.5.3",
81
- "vitest": "^3.0.9"
81
+ "vitest": "^3.1.2"
82
82
  },
83
83
  "lint-staged": {
84
84
  "*.js": [