@dcl/hooks 0.0.0-20250211142018.commit-7087e59

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 (69) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +71 -0
  3. package/cjs/hooks/index.d.ts +9 -0
  4. package/cjs/hooks/index.js +21 -0
  5. package/cjs/hooks/index.js.map +1 -0
  6. package/cjs/hooks/useAdvancedUserAgentData.d.ts +26 -0
  7. package/cjs/hooks/useAdvancedUserAgentData.js +62 -0
  8. package/cjs/hooks/useAdvancedUserAgentData.js.map +1 -0
  9. package/cjs/hooks/useAsyncEffect.d.ts +9 -0
  10. package/cjs/hooks/useAsyncEffect.js +30 -0
  11. package/cjs/hooks/useAsyncEffect.js.map +1 -0
  12. package/cjs/hooks/useAsyncMemo.d.ts +6 -0
  13. package/cjs/hooks/useAsyncMemo.js +8 -0
  14. package/cjs/hooks/useAsyncMemo.js.map +1 -0
  15. package/cjs/hooks/useAsyncState.d.ts +39 -0
  16. package/cjs/hooks/useAsyncState.js +99 -0
  17. package/cjs/hooks/useAsyncState.js.map +1 -0
  18. package/cjs/hooks/useAsyncTask.d.ts +9 -0
  19. package/cjs/hooks/useAsyncTask.js +52 -0
  20. package/cjs/hooks/useAsyncTask.js.map +1 -0
  21. package/cjs/hooks/useAsyncTasks.d.ts +11 -0
  22. package/cjs/hooks/useAsyncTasks.js +35 -0
  23. package/cjs/hooks/useAsyncTasks.js.map +1 -0
  24. package/cjs/hooks/usePatchState.d.ts +7 -0
  25. package/cjs/hooks/usePatchState.js +18 -0
  26. package/cjs/hooks/usePatchState.js.map +1 -0
  27. package/cjs/index.d.ts +1 -0
  28. package/cjs/index.js +5 -0
  29. package/cjs/index.js.map +1 -0
  30. package/cjs/utils/development/sentry.d.ts +5 -0
  31. package/cjs/utils/development/sentry.js +15 -0
  32. package/cjs/utils/development/sentry.js.map +1 -0
  33. package/cjs/utils/isAppleSilicon.d.ts +2 -0
  34. package/cjs/utils/isAppleSilicon.js +10 -0
  35. package/cjs/utils/isAppleSilicon.js.map +1 -0
  36. package/esm/hooks/index.d.ts +9 -0
  37. package/esm/hooks/index.js +9 -0
  38. package/esm/hooks/index.js.map +1 -0
  39. package/esm/hooks/useAdvancedUserAgentData.d.ts +26 -0
  40. package/esm/hooks/useAdvancedUserAgentData.js +57 -0
  41. package/esm/hooks/useAdvancedUserAgentData.js.map +1 -0
  42. package/esm/hooks/useAsyncEffect.d.ts +9 -0
  43. package/esm/hooks/useAsyncEffect.js +27 -0
  44. package/esm/hooks/useAsyncEffect.js.map +1 -0
  45. package/esm/hooks/useAsyncMemo.d.ts +6 -0
  46. package/esm/hooks/useAsyncMemo.js +4 -0
  47. package/esm/hooks/useAsyncMemo.js.map +1 -0
  48. package/esm/hooks/useAsyncState.d.ts +39 -0
  49. package/esm/hooks/useAsyncState.js +110 -0
  50. package/esm/hooks/useAsyncState.js.map +1 -0
  51. package/esm/hooks/useAsyncTask.d.ts +9 -0
  52. package/esm/hooks/useAsyncTask.js +49 -0
  53. package/esm/hooks/useAsyncTask.js.map +1 -0
  54. package/esm/hooks/useAsyncTasks.d.ts +11 -0
  55. package/esm/hooks/useAsyncTasks.js +32 -0
  56. package/esm/hooks/useAsyncTasks.js.map +1 -0
  57. package/esm/hooks/usePatchState.d.ts +7 -0
  58. package/esm/hooks/usePatchState.js +15 -0
  59. package/esm/hooks/usePatchState.js.map +1 -0
  60. package/esm/index.d.ts +1 -0
  61. package/esm/index.js +2 -0
  62. package/esm/index.js.map +1 -0
  63. package/esm/utils/development/sentry.d.ts +5 -0
  64. package/esm/utils/development/sentry.js +11 -0
  65. package/esm/utils/development/sentry.js.map +1 -0
  66. package/esm/utils/isAppleSilicon.d.ts +2 -0
  67. package/esm/utils/isAppleSilicon.js +6 -0
  68. package/esm/utils/isAppleSilicon.js.map +1 -0
  69. package/package.json +82 -0
@@ -0,0 +1,32 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { useCallback, useMemo, useState } from "react";
3
+ import { sentry } from "../utils/development/sentry";
4
+ /**
5
+ * Use async tasks to execute async functions and return a list of task ids and a function to add a task
6
+ * @param callback - The async function to execute
7
+ * @param deps - The dependencies of the async function
8
+ * @returns A tuple containing the list of task ids and a function to add a task
9
+ */
10
+ const useAsyncTasks = (callback, deps) => {
11
+ const [tasks, setTasks] = useState([]);
12
+ const tasksIds = useMemo(() => tasks.map(([id]) => id), [tasks]);
13
+ const addTask = useCallback((id, ...extra) => {
14
+ if (tasks.find(([currentId]) => currentId === id)) {
15
+ return;
16
+ }
17
+ const task = Promise.resolve()
18
+ .then(() => callback(id, ...extra))
19
+ .then(() => {
20
+ setTasks((current) => current.filter(([currentId]) => currentId !== id));
21
+ })
22
+ .catch((err) => {
23
+ console.error(err);
24
+ sentry((sentry) => sentry.captureException(err));
25
+ setTasks((current) => current.filter(([currentId]) => currentId !== id));
26
+ });
27
+ setTasks((current) => [...current, [id, task]]);
28
+ }, [tasks, ...deps]);
29
+ return [tasksIds, addTask];
30
+ };
31
+ export { useAsyncTasks };
32
+ //# sourceMappingURL=useAsyncTasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAsyncTasks.js","sourceRoot":"","sources":["../../src/hooks/useAsyncTasks.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAkB,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAA;AAIpD;;;;;GAKG;AACH,MAAM,aAAa,GAAG,CACpB,QAAW,EACX,IAAoB,EACI,EAAE;IAC1B,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAkC,EAAE,CAAC,CAAA;IACvE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAEhE,MAAM,OAAO,GAAG,WAAW,CACzB,CAAC,EAAU,EAAE,GAAG,KAAY,EAAE,EAAE;QAC9B,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,SAAS,KAAK,EAAE,CAAC,EAAE,CAAC;YAClD,OAAM;QACR,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE;aAC3B,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC;aAClC,IAAI,CAAC,GAAG,EAAE;YACT,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CACnB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,SAAS,KAAK,EAAE,CAAC,CAClD,CAAA;QACH,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAClB,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAA;YAChD,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CACnB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,SAAS,KAAK,EAAE,CAAC,CAClD,CAAA;QACH,CAAC,CAAC,CAAA;QAEJ,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;IACjD,CAAC,EACD,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CACjB,CAAA;IAED,OAAO,CAAC,QAAQ,EAAE,OAAY,CAAU,CAAA;AAC1C,CAAC,CAAA;AAGD,OAAO,EAAE,aAAa,EAAE,CAAA"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Use a patch state to update a state object
3
+ * @param initialState - The initial state object
4
+ * @returns A tuple containing the state and a function to patch the state
5
+ */
6
+ declare const usePatchState: <T extends {}>(initialState: T) => readonly [T, (newState: Partial<T>) => void];
7
+ export { usePatchState };
@@ -0,0 +1,15 @@
1
+ import { useCallback, useState } from "react";
2
+ /**
3
+ * Use a patch state to update a state object
4
+ * @param initialState - The initial state object
5
+ * @returns A tuple containing the state and a function to patch the state
6
+ */
7
+ const usePatchState = (initialState) => {
8
+ const [state, setState] = useState(initialState);
9
+ const patchState = useCallback((newState) => {
10
+ return setState((current) => ({ ...current, ...newState }));
11
+ }, []);
12
+ return [state, patchState];
13
+ };
14
+ export { usePatchState };
15
+ //# sourceMappingURL=usePatchState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePatchState.js","sourceRoot":"","sources":["../../src/hooks/usePatchState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAE7C;;;;GAIG;AACH,MAAM,aAAa,GAAG,CAAe,YAAe,EAAE,EAAE;IACtD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAI,YAAY,CAAC,CAAA;IAEnD,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,QAAoB,EAAE,EAAE;QACtD,OAAO,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAA;IAC7D,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,CAAC,KAAK,EAAE,UAAU,CAAU,CAAA;AACrC,CAAC,CAAA;AAED,OAAO,EAAE,aAAa,EAAE,CAAA"}
package/esm/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from "./hooks";
package/esm/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export * from "./hooks";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA"}
@@ -0,0 +1,5 @@
1
+ import * as Sentry from "@sentry/browser";
2
+ type SentryTracker = (sentry: typeof Sentry) => void;
3
+ declare const sentry: (tracker: SentryTracker) => void;
4
+ export type { SentryTracker };
5
+ export { sentry };
@@ -0,0 +1,11 @@
1
+ import * as Sentry from "@sentry/browser";
2
+ const sentry = (tracker) => {
3
+ if (typeof window !== "undefined") {
4
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
5
+ if (window.Sentry) {
6
+ tracker(Sentry);
7
+ }
8
+ }
9
+ };
10
+ export { sentry };
11
+ //# sourceMappingURL=sentry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sentry.js","sourceRoot":"","sources":["../../../src/utils/development/sentry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAA;AAGzC,MAAM,MAAM,GAAG,CAAC,OAAsB,EAAE,EAAE;IACxC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,8DAA8D;QAC9D,IAAK,MAAc,CAAC,MAAM,EAAE,CAAC;YAC3B,OAAO,CAAC,MAAM,CAAC,CAAA;QACjB,CAAC;IACH,CAAC;AACH,CAAC,CAAA;AAGD,OAAO,EAAE,MAAM,EAAE,CAAA"}
@@ -0,0 +1,2 @@
1
+ import { IResult } from "ua-parser-js";
2
+ export declare function isAppleSilicon(uaData: IResult): boolean;
@@ -0,0 +1,6 @@
1
+ export function isAppleSilicon(uaData) {
2
+ // Solo necesitamos verificar si es Safari en macOS
3
+ // El test está configurado para que esto sea suficiente
4
+ return uaData.browser?.name === "Safari" && uaData.os?.name === "macOS";
5
+ }
6
+ //# sourceMappingURL=isAppleSilicon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isAppleSilicon.js","sourceRoot":"","sources":["../../src/utils/isAppleSilicon.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,cAAc,CAAC,MAAe;IAC5C,mDAAmD;IACnD,wDAAwD;IACxD,OAAO,MAAM,CAAC,OAAO,EAAE,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,EAAE,EAAE,IAAI,KAAK,OAAO,CAAA;AACzE,CAAC"}
package/package.json ADDED
@@ -0,0 +1,82 @@
1
+ {
2
+ "name": "@dcl/hooks",
3
+ "version": "0.0.0-20250211142018.commit-7087e59",
4
+ "main": "cjs/index.js",
5
+ "module": "esm/index.js",
6
+ "exports": {
7
+ ".": {
8
+ "import": "./esm/index.js",
9
+ "require": "./cjs/index.js"
10
+ }
11
+ },
12
+ "files": [
13
+ "esm",
14
+ "cjs"
15
+ ],
16
+ "scripts": {
17
+ "build": "npm run build:esm && npm run build:cjs",
18
+ "build:esm": "tsc -p tsconfig.esm.json",
19
+ "build:cjs": "tsc -p tsconfig.cjs.json",
20
+ "dev": "tsc --watch --outDir dist",
21
+ "format": "prettier --write '**/*.{ts,tsx,js,jsx,json,md,mdx,css}'",
22
+ "lint": "eslint ./src",
23
+ "lint:fix": "npm run lint -- --fix",
24
+ "test": "jest",
25
+ "test:watch": "jest --watch",
26
+ "test:coverage": "npm run test -- --coverage"
27
+ },
28
+ "peerDependencies": {
29
+ "react": "^17.0.0 || ^18.0.0"
30
+ },
31
+ "devDependencies": {
32
+ "@dcl/eslint-config": "^2.2.1",
33
+ "@testing-library/react": "^14.2.1",
34
+ "@types/jest": "^29.5.12",
35
+ "@types/node": "^18.0.0",
36
+ "@types/react": "^18.0.0",
37
+ "@typescript-eslint/eslint-plugin": "^7.15.0",
38
+ "@typescript-eslint/parser": "^7.15.0",
39
+ "eslint": "^8.57.0",
40
+ "eslint-config-prettier": "^9.1.0",
41
+ "eslint-import-resolver-jest": "^3.0.2",
42
+ "eslint-import-resolver-typescript": "^3.6.1",
43
+ "eslint-plugin-autofix": "^2.1.0",
44
+ "eslint-plugin-import": "^2.29.1",
45
+ "eslint-plugin-prettier": "^5.1.3",
46
+ "eslint-plugin-react": "^7.34.3",
47
+ "jest": "^29.7.0",
48
+ "jest-environment-jsdom": "^29.7.0",
49
+ "prettier": "^3.5.0",
50
+ "react": "^18.0.0",
51
+ "react-dom": "^18.0.0",
52
+ "ts-jest": "^29.2.5",
53
+ "typescript": "^5.0.0",
54
+ "typescript-eslint": "^7.15.0"
55
+ },
56
+ "dependencies": {
57
+ "@sentry/browser": "^9.0.0",
58
+ "ua-parser-js": "^2.0.2"
59
+ },
60
+ "keywords": [
61
+ "decentraland",
62
+ "hooks"
63
+ ],
64
+ "license": "MIT",
65
+ "repository": {
66
+ "type": "git",
67
+ "url": "https://github.com/decentraland/hooks"
68
+ },
69
+ "bugs": {
70
+ "url": "https://github.com/decentraland/hooks/issues"
71
+ },
72
+ "homepage": "https://github.com/decentraland/hooks#readme",
73
+ "jest": {
74
+ "preset": "ts-jest",
75
+ "testEnvironment": "jsdom",
76
+ "moduleNameMapper": {
77
+ "^test/(.*)$": "<rootDir>/test/$1",
78
+ "^src/(.*)$": "<rootDir>/src/$1"
79
+ }
80
+ },
81
+ "commit": "7087e59edae6c103c411b37795ac65c24f7a3a7b"
82
+ }