@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.
- package/LICENSE +201 -0
- package/README.md +71 -0
- package/cjs/hooks/index.d.ts +9 -0
- package/cjs/hooks/index.js +21 -0
- package/cjs/hooks/index.js.map +1 -0
- package/cjs/hooks/useAdvancedUserAgentData.d.ts +26 -0
- package/cjs/hooks/useAdvancedUserAgentData.js +62 -0
- package/cjs/hooks/useAdvancedUserAgentData.js.map +1 -0
- package/cjs/hooks/useAsyncEffect.d.ts +9 -0
- package/cjs/hooks/useAsyncEffect.js +30 -0
- package/cjs/hooks/useAsyncEffect.js.map +1 -0
- package/cjs/hooks/useAsyncMemo.d.ts +6 -0
- package/cjs/hooks/useAsyncMemo.js +8 -0
- package/cjs/hooks/useAsyncMemo.js.map +1 -0
- package/cjs/hooks/useAsyncState.d.ts +39 -0
- package/cjs/hooks/useAsyncState.js +99 -0
- package/cjs/hooks/useAsyncState.js.map +1 -0
- package/cjs/hooks/useAsyncTask.d.ts +9 -0
- package/cjs/hooks/useAsyncTask.js +52 -0
- package/cjs/hooks/useAsyncTask.js.map +1 -0
- package/cjs/hooks/useAsyncTasks.d.ts +11 -0
- package/cjs/hooks/useAsyncTasks.js +35 -0
- package/cjs/hooks/useAsyncTasks.js.map +1 -0
- package/cjs/hooks/usePatchState.d.ts +7 -0
- package/cjs/hooks/usePatchState.js +18 -0
- package/cjs/hooks/usePatchState.js.map +1 -0
- package/cjs/index.d.ts +1 -0
- package/cjs/index.js +5 -0
- package/cjs/index.js.map +1 -0
- package/cjs/utils/development/sentry.d.ts +5 -0
- package/cjs/utils/development/sentry.js +15 -0
- package/cjs/utils/development/sentry.js.map +1 -0
- package/cjs/utils/isAppleSilicon.d.ts +2 -0
- package/cjs/utils/isAppleSilicon.js +10 -0
- package/cjs/utils/isAppleSilicon.js.map +1 -0
- package/esm/hooks/index.d.ts +9 -0
- package/esm/hooks/index.js +9 -0
- package/esm/hooks/index.js.map +1 -0
- package/esm/hooks/useAdvancedUserAgentData.d.ts +26 -0
- package/esm/hooks/useAdvancedUserAgentData.js +57 -0
- package/esm/hooks/useAdvancedUserAgentData.js.map +1 -0
- package/esm/hooks/useAsyncEffect.d.ts +9 -0
- package/esm/hooks/useAsyncEffect.js +27 -0
- package/esm/hooks/useAsyncEffect.js.map +1 -0
- package/esm/hooks/useAsyncMemo.d.ts +6 -0
- package/esm/hooks/useAsyncMemo.js +4 -0
- package/esm/hooks/useAsyncMemo.js.map +1 -0
- package/esm/hooks/useAsyncState.d.ts +39 -0
- package/esm/hooks/useAsyncState.js +110 -0
- package/esm/hooks/useAsyncState.js.map +1 -0
- package/esm/hooks/useAsyncTask.d.ts +9 -0
- package/esm/hooks/useAsyncTask.js +49 -0
- package/esm/hooks/useAsyncTask.js.map +1 -0
- package/esm/hooks/useAsyncTasks.d.ts +11 -0
- package/esm/hooks/useAsyncTasks.js +32 -0
- package/esm/hooks/useAsyncTasks.js.map +1 -0
- package/esm/hooks/usePatchState.d.ts +7 -0
- package/esm/hooks/usePatchState.js +15 -0
- package/esm/hooks/usePatchState.js.map +1 -0
- package/esm/index.d.ts +1 -0
- package/esm/index.js +2 -0
- package/esm/index.js.map +1 -0
- package/esm/utils/development/sentry.d.ts +5 -0
- package/esm/utils/development/sentry.js +11 -0
- package/esm/utils/development/sentry.js.map +1 -0
- package/esm/utils/isAppleSilicon.d.ts +2 -0
- package/esm/utils/isAppleSilicon.js +6 -0
- package/esm/utils/isAppleSilicon.js.map +1 -0
- 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
package/esm/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA"}
|
|
@@ -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,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
|
+
}
|