@leancodepl/utils 8.3.6 → 8.5.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.
- package/package.json +41 -5
- package/index.cjs.d.ts +0 -1
- package/index.cjs.default.js +0 -1
- package/index.cjs.js +0 -184
- package/index.cjs.mjs +0 -2
- package/index.esm.d.ts +0 -1
- package/index.esm.js +0 -166
- package/src/index.d.ts +0 -16
- package/src/lib/addPrefix.d.ts +0 -5
- package/src/lib/assertDefined.d.ts +0 -1
- package/src/lib/assertNotEmpty.d.ts +0 -1
- package/src/lib/assertNotNull.d.ts +0 -1
- package/src/lib/downloadFile.d.ts +0 -6
- package/src/lib/ensureDefined.d.ts +0 -1
- package/src/lib/ensureNotEmpty.d.ts +0 -1
- package/src/lib/ensureNotNull.d.ts +0 -1
- package/src/lib/hooks/useBoundRunInTask.d.ts +0 -4
- package/src/lib/hooks/useDialog.d.ts +0 -5
- package/src/lib/hooks/useKeyByRoute.d.ts +0 -1
- package/src/lib/hooks/useRunInTask.d.ts +0 -1
- package/src/lib/hooks/useSetUnset.d.ts +0 -2
- package/src/lib/transformDeep.d.ts +0 -3
- package/src/lib/transformFirst.d.ts +0 -2
- package/src/lib/types/index.d.ts +0 -2
- package/src/lib/types/transformDeep.d.ts +0 -10
- package/src/lib/types/unpromisify.d.ts +0 -1
package/package.json
CHANGED
|
@@ -1,24 +1,60 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@leancodepl/utils",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.5.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
|
+
"publishConfig": {
|
|
6
|
+
"access": "public",
|
|
7
|
+
"registry": "https://registry.npmjs.org/"
|
|
8
|
+
},
|
|
9
|
+
"engines": {
|
|
10
|
+
"node": ">=18.0.0"
|
|
11
|
+
},
|
|
5
12
|
"dependencies": {
|
|
6
|
-
"@leancodepl/api-date": "8.
|
|
13
|
+
"@leancodepl/api-date": "8.5.0",
|
|
7
14
|
"tiny-invariant": ">=1.3.1"
|
|
8
15
|
},
|
|
9
16
|
"peerDependencies": {
|
|
10
|
-
"react": "
|
|
17
|
+
"react": "*"
|
|
18
|
+
},
|
|
19
|
+
"repository": {
|
|
20
|
+
"type": "git",
|
|
21
|
+
"url": "git+https://github.com/leancodepl/js_corelibrary.git",
|
|
22
|
+
"directory": "packages/utils"
|
|
23
|
+
},
|
|
24
|
+
"homepage": "https://github.com/leancodepl/js_corelibrary",
|
|
25
|
+
"bugs": {
|
|
26
|
+
"url": "https://github.com/leancodepl/js_corelibrary/issues"
|
|
27
|
+
},
|
|
28
|
+
"description": "Common utility functions and React hooks for web applications",
|
|
29
|
+
"keywords": [
|
|
30
|
+
"utilities",
|
|
31
|
+
"react",
|
|
32
|
+
"hooks",
|
|
33
|
+
"helpers",
|
|
34
|
+
"typescript",
|
|
35
|
+
"javascript",
|
|
36
|
+
"leancode"
|
|
37
|
+
],
|
|
38
|
+
"author": {
|
|
39
|
+
"name": "LeanCode",
|
|
40
|
+
"url": "https://leancode.co"
|
|
11
41
|
},
|
|
42
|
+
"files": [
|
|
43
|
+
"dist",
|
|
44
|
+
"README.md",
|
|
45
|
+
"CHANGELOG.md"
|
|
46
|
+
],
|
|
47
|
+
"sideEffects": false,
|
|
12
48
|
"exports": {
|
|
13
49
|
"./package.json": "./package.json",
|
|
14
50
|
".": {
|
|
15
51
|
"module": "./index.esm.js",
|
|
16
|
-
"types": "./index.
|
|
52
|
+
"types": "./index.d.ts",
|
|
17
53
|
"import": "./index.cjs.mjs",
|
|
18
54
|
"default": "./index.cjs.js"
|
|
19
55
|
}
|
|
20
56
|
},
|
|
21
57
|
"module": "./index.esm.js",
|
|
22
58
|
"main": "./index.cjs.js",
|
|
23
|
-
"types": "./index.
|
|
59
|
+
"types": "./index.d.ts"
|
|
24
60
|
}
|
package/index.cjs.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./src/index";
|
package/index.cjs.default.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
exports._default = require('./index.cjs.js').default;
|
package/index.cjs.js
DELETED
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var invariant = require('tiny-invariant');
|
|
4
|
-
var react = require('react');
|
|
5
|
-
|
|
6
|
-
function addPrefix(object, prefix) {
|
|
7
|
-
return Object.fromEntries(Object.entries(object).map(([key, value])=>[
|
|
8
|
-
`${prefix}${key}`,
|
|
9
|
-
value
|
|
10
|
-
]));
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
function transformFirst(value, transformFn) {
|
|
14
|
-
if (value.length === 0) {
|
|
15
|
-
return "";
|
|
16
|
-
}
|
|
17
|
-
return transformFn(value[0]) + value.slice(1);
|
|
18
|
-
}
|
|
19
|
-
function toLowerFirst(value) {
|
|
20
|
-
return transformFirst(value, (value)=>value.toLowerCase());
|
|
21
|
-
}
|
|
22
|
-
function toUpperFirst(value) {
|
|
23
|
-
return transformFirst(value, (value)=>value.toUpperCase());
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
function _extends() {
|
|
27
|
-
_extends = Object.assign || function assign(target) {
|
|
28
|
-
for(var i = 1; i < arguments.length; i++){
|
|
29
|
-
var source = arguments[i];
|
|
30
|
-
for(var key in source)if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
|
|
31
|
-
}
|
|
32
|
-
return target;
|
|
33
|
-
};
|
|
34
|
-
return _extends.apply(this, arguments);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
function transformDeep(value, mode) {
|
|
38
|
-
if (value === null || value === undefined) {
|
|
39
|
-
return undefined;
|
|
40
|
-
}
|
|
41
|
-
if (Array.isArray(value)) {
|
|
42
|
-
return value.map((val)=>transformDeep(val, mode));
|
|
43
|
-
}
|
|
44
|
-
if (typeof value === "object") {
|
|
45
|
-
const transformKey = mode === "capitalize" ? toUpperFirst : toLowerFirst;
|
|
46
|
-
return Object.entries(value).reduce((accumulator, [key, value])=>_extends({}, accumulator, {
|
|
47
|
-
[transformKey(key)]: transformDeep(value, mode)
|
|
48
|
-
}), {});
|
|
49
|
-
}
|
|
50
|
-
return value;
|
|
51
|
-
}
|
|
52
|
-
function uncapitalizeDeep(value) {
|
|
53
|
-
return transformDeep(value, "uncapitalize");
|
|
54
|
-
}
|
|
55
|
-
function capitalizeDeep(value) {
|
|
56
|
-
return transformDeep(value, "capitalize");
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
function assertDefined(value, message) {
|
|
60
|
-
invariant(value !== undefined, message);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
function assertNotNull(value, message) {
|
|
64
|
-
invariant(value !== null, message);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
function assertNotEmpty(value, message) {
|
|
68
|
-
invariant(value !== null && value !== undefined, message);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
function ensureDefined(value, message) {
|
|
72
|
-
assertDefined(value, message);
|
|
73
|
-
return value;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function ensureNotNull(value, message) {
|
|
77
|
-
assertNotNull(value, message);
|
|
78
|
-
return value;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
function ensureNotEmpty(value, message) {
|
|
82
|
-
assertNotEmpty(value, message);
|
|
83
|
-
return value;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
function downloadFile(dataOrUrl, options = {}) {
|
|
87
|
-
if (typeof dataOrUrl === "string") {
|
|
88
|
-
const { name } = options;
|
|
89
|
-
const a = document.createElement("a");
|
|
90
|
-
a.href = dataOrUrl;
|
|
91
|
-
a.target = "_blank";
|
|
92
|
-
if (name) a.download = name;
|
|
93
|
-
a.click();
|
|
94
|
-
} else {
|
|
95
|
-
const url = URL.createObjectURL(dataOrUrl);
|
|
96
|
-
downloadFile(url, options);
|
|
97
|
-
URL.revokeObjectURL(url);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
function useRunInTask() {
|
|
102
|
-
const [runningTasks, setRunningTasks] = react.useState(0);
|
|
103
|
-
const runInTask = react.useCallback(async (task)=>{
|
|
104
|
-
setRunningTasks((runningTasks)=>runningTasks + 1);
|
|
105
|
-
try {
|
|
106
|
-
return await task();
|
|
107
|
-
} finally{
|
|
108
|
-
setRunningTasks((runningTasks)=>runningTasks - 1);
|
|
109
|
-
}
|
|
110
|
-
}, []);
|
|
111
|
-
return [
|
|
112
|
-
runningTasks > 0,
|
|
113
|
-
runInTask
|
|
114
|
-
];
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
function useBoundRunInTask(block) {
|
|
118
|
-
const [isRunning, runInTask] = useRunInTask();
|
|
119
|
-
const runBlockInTask = react.useMemo(()=>block ? (...args)=>runInTask(()=>block(...args)) : undefined, [
|
|
120
|
-
block,
|
|
121
|
-
runInTask
|
|
122
|
-
]);
|
|
123
|
-
return [
|
|
124
|
-
isRunning,
|
|
125
|
-
runBlockInTask
|
|
126
|
-
];
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
function useKeyByRoute(routeMatches) {
|
|
130
|
-
const keys = [];
|
|
131
|
-
for(const key in routeMatches){
|
|
132
|
-
const matches = routeMatches[key];
|
|
133
|
-
if (Array.isArray(matches) ? matches.some((match)=>match !== null) : matches !== null) {
|
|
134
|
-
keys.push(key);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
return keys;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
function useSetUnset(set) {
|
|
141
|
-
return [
|
|
142
|
-
react.useCallback(()=>set(true), [
|
|
143
|
-
set
|
|
144
|
-
]),
|
|
145
|
-
react.useCallback(()=>set(false), [
|
|
146
|
-
set
|
|
147
|
-
])
|
|
148
|
-
];
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
function useDialog(onAfterClose) {
|
|
152
|
-
const [isDialogOpen, setIsDialogOpen] = react.useState(false);
|
|
153
|
-
const [openDialog, closeDialog] = useSetUnset(setIsDialogOpen);
|
|
154
|
-
const close = react.useCallback(()=>{
|
|
155
|
-
closeDialog();
|
|
156
|
-
if (onAfterClose) setTimeout(onAfterClose);
|
|
157
|
-
}, [
|
|
158
|
-
closeDialog,
|
|
159
|
-
onAfterClose
|
|
160
|
-
]);
|
|
161
|
-
return {
|
|
162
|
-
isDialogOpen,
|
|
163
|
-
openDialog,
|
|
164
|
-
closeDialog: close
|
|
165
|
-
};
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
exports.addPrefix = addPrefix;
|
|
169
|
-
exports.assertDefined = assertDefined;
|
|
170
|
-
exports.assertNotEmpty = assertNotEmpty;
|
|
171
|
-
exports.assertNotNull = assertNotNull;
|
|
172
|
-
exports.capitalizeDeep = capitalizeDeep;
|
|
173
|
-
exports.downloadFile = downloadFile;
|
|
174
|
-
exports.ensureDefined = ensureDefined;
|
|
175
|
-
exports.ensureNotEmpty = ensureNotEmpty;
|
|
176
|
-
exports.ensureNotNull = ensureNotNull;
|
|
177
|
-
exports.toLowerFirst = toLowerFirst;
|
|
178
|
-
exports.toUpperFirst = toUpperFirst;
|
|
179
|
-
exports.uncapitalizeDeep = uncapitalizeDeep;
|
|
180
|
-
exports.useBoundRunInTask = useBoundRunInTask;
|
|
181
|
-
exports.useDialog = useDialog;
|
|
182
|
-
exports.useKeyByRoute = useKeyByRoute;
|
|
183
|
-
exports.useRunInTask = useRunInTask;
|
|
184
|
-
exports.useSetUnset = useSetUnset;
|
package/index.cjs.mjs
DELETED
package/index.esm.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./src/index";
|
package/index.esm.js
DELETED
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
import invariant from 'tiny-invariant';
|
|
2
|
-
import { useState, useCallback, useMemo } from 'react';
|
|
3
|
-
|
|
4
|
-
function addPrefix(object, prefix) {
|
|
5
|
-
return Object.fromEntries(Object.entries(object).map(([key, value])=>[
|
|
6
|
-
`${prefix}${key}`,
|
|
7
|
-
value
|
|
8
|
-
]));
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
function transformFirst(value, transformFn) {
|
|
12
|
-
if (value.length === 0) {
|
|
13
|
-
return "";
|
|
14
|
-
}
|
|
15
|
-
return transformFn(value[0]) + value.slice(1);
|
|
16
|
-
}
|
|
17
|
-
function toLowerFirst(value) {
|
|
18
|
-
return transformFirst(value, (value)=>value.toLowerCase());
|
|
19
|
-
}
|
|
20
|
-
function toUpperFirst(value) {
|
|
21
|
-
return transformFirst(value, (value)=>value.toUpperCase());
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
function _extends() {
|
|
25
|
-
_extends = Object.assign || function assign(target) {
|
|
26
|
-
for(var i = 1; i < arguments.length; i++){
|
|
27
|
-
var source = arguments[i];
|
|
28
|
-
for(var key in source)if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
|
|
29
|
-
}
|
|
30
|
-
return target;
|
|
31
|
-
};
|
|
32
|
-
return _extends.apply(this, arguments);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
function transformDeep(value, mode) {
|
|
36
|
-
if (value === null || value === undefined) {
|
|
37
|
-
return undefined;
|
|
38
|
-
}
|
|
39
|
-
if (Array.isArray(value)) {
|
|
40
|
-
return value.map((val)=>transformDeep(val, mode));
|
|
41
|
-
}
|
|
42
|
-
if (typeof value === "object") {
|
|
43
|
-
const transformKey = mode === "capitalize" ? toUpperFirst : toLowerFirst;
|
|
44
|
-
return Object.entries(value).reduce((accumulator, [key, value])=>_extends({}, accumulator, {
|
|
45
|
-
[transformKey(key)]: transformDeep(value, mode)
|
|
46
|
-
}), {});
|
|
47
|
-
}
|
|
48
|
-
return value;
|
|
49
|
-
}
|
|
50
|
-
function uncapitalizeDeep(value) {
|
|
51
|
-
return transformDeep(value, "uncapitalize");
|
|
52
|
-
}
|
|
53
|
-
function capitalizeDeep(value) {
|
|
54
|
-
return transformDeep(value, "capitalize");
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
function assertDefined(value, message) {
|
|
58
|
-
invariant(value !== undefined, message);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
function assertNotNull(value, message) {
|
|
62
|
-
invariant(value !== null, message);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
function assertNotEmpty(value, message) {
|
|
66
|
-
invariant(value !== null && value !== undefined, message);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
function ensureDefined(value, message) {
|
|
70
|
-
assertDefined(value, message);
|
|
71
|
-
return value;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
function ensureNotNull(value, message) {
|
|
75
|
-
assertNotNull(value, message);
|
|
76
|
-
return value;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
function ensureNotEmpty(value, message) {
|
|
80
|
-
assertNotEmpty(value, message);
|
|
81
|
-
return value;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
function downloadFile(dataOrUrl, options = {}) {
|
|
85
|
-
if (typeof dataOrUrl === "string") {
|
|
86
|
-
const { name } = options;
|
|
87
|
-
const a = document.createElement("a");
|
|
88
|
-
a.href = dataOrUrl;
|
|
89
|
-
a.target = "_blank";
|
|
90
|
-
if (name) a.download = name;
|
|
91
|
-
a.click();
|
|
92
|
-
} else {
|
|
93
|
-
const url = URL.createObjectURL(dataOrUrl);
|
|
94
|
-
downloadFile(url, options);
|
|
95
|
-
URL.revokeObjectURL(url);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
function useRunInTask() {
|
|
100
|
-
const [runningTasks, setRunningTasks] = useState(0);
|
|
101
|
-
const runInTask = useCallback(async (task)=>{
|
|
102
|
-
setRunningTasks((runningTasks)=>runningTasks + 1);
|
|
103
|
-
try {
|
|
104
|
-
return await task();
|
|
105
|
-
} finally{
|
|
106
|
-
setRunningTasks((runningTasks)=>runningTasks - 1);
|
|
107
|
-
}
|
|
108
|
-
}, []);
|
|
109
|
-
return [
|
|
110
|
-
runningTasks > 0,
|
|
111
|
-
runInTask
|
|
112
|
-
];
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
function useBoundRunInTask(block) {
|
|
116
|
-
const [isRunning, runInTask] = useRunInTask();
|
|
117
|
-
const runBlockInTask = useMemo(()=>block ? (...args)=>runInTask(()=>block(...args)) : undefined, [
|
|
118
|
-
block,
|
|
119
|
-
runInTask
|
|
120
|
-
]);
|
|
121
|
-
return [
|
|
122
|
-
isRunning,
|
|
123
|
-
runBlockInTask
|
|
124
|
-
];
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
function useKeyByRoute(routeMatches) {
|
|
128
|
-
const keys = [];
|
|
129
|
-
for(const key in routeMatches){
|
|
130
|
-
const matches = routeMatches[key];
|
|
131
|
-
if (Array.isArray(matches) ? matches.some((match)=>match !== null) : matches !== null) {
|
|
132
|
-
keys.push(key);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
return keys;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
function useSetUnset(set) {
|
|
139
|
-
return [
|
|
140
|
-
useCallback(()=>set(true), [
|
|
141
|
-
set
|
|
142
|
-
]),
|
|
143
|
-
useCallback(()=>set(false), [
|
|
144
|
-
set
|
|
145
|
-
])
|
|
146
|
-
];
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
function useDialog(onAfterClose) {
|
|
150
|
-
const [isDialogOpen, setIsDialogOpen] = useState(false);
|
|
151
|
-
const [openDialog, closeDialog] = useSetUnset(setIsDialogOpen);
|
|
152
|
-
const close = useCallback(()=>{
|
|
153
|
-
closeDialog();
|
|
154
|
-
if (onAfterClose) setTimeout(onAfterClose);
|
|
155
|
-
}, [
|
|
156
|
-
closeDialog,
|
|
157
|
-
onAfterClose
|
|
158
|
-
]);
|
|
159
|
-
return {
|
|
160
|
-
isDialogOpen,
|
|
161
|
-
openDialog,
|
|
162
|
-
closeDialog: close
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
export { addPrefix, assertDefined, assertNotEmpty, assertNotNull, capitalizeDeep, downloadFile, ensureDefined, ensureNotEmpty, ensureNotNull, toLowerFirst, toUpperFirst, uncapitalizeDeep, useBoundRunInTask, useDialog, useKeyByRoute, useRunInTask, useSetUnset };
|
package/src/index.d.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
export * from "./lib/types";
|
|
2
|
-
export * from "./lib/addPrefix";
|
|
3
|
-
export * from "./lib/transformFirst";
|
|
4
|
-
export * from "./lib/transformDeep";
|
|
5
|
-
export * from "./lib/assertDefined";
|
|
6
|
-
export * from "./lib/assertNotNull";
|
|
7
|
-
export * from "./lib/assertNotEmpty";
|
|
8
|
-
export * from "./lib/ensureDefined";
|
|
9
|
-
export * from "./lib/ensureNotNull";
|
|
10
|
-
export * from "./lib/ensureNotEmpty";
|
|
11
|
-
export * from "./lib/downloadFile";
|
|
12
|
-
export * from "./lib/hooks/useRunInTask";
|
|
13
|
-
export * from "./lib/hooks/useBoundRunInTask";
|
|
14
|
-
export * from "./lib/hooks/useKeyByRoute";
|
|
15
|
-
export * from "./lib/hooks/useSetUnset";
|
|
16
|
-
export * from "./lib/hooks/useDialog";
|
package/src/lib/addPrefix.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function assertDefined<T>(value: T | undefined, message?: string): asserts value is T;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function assertNotEmpty<T>(value: T | null | undefined, message?: string): asserts value is T;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function assertNotNull<T>(value: T | null, message?: string): asserts value is T;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function ensureDefined<T>(value: T | undefined, message?: string): T;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function ensureNotEmpty<T>(value: T | null | undefined, message?: string): T;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function ensureNotNull<T>(value: T | null, message?: string): T;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function useKeyByRoute<TKey extends string>(routeMatches: Record<TKey, (object | null)[] | never | object | null>): TKey[];
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function useRunInTask(): readonly [boolean, <T>(task: () => Promise<T> | T) => Promise<T>];
|
package/src/lib/types/index.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { ApiDateOnly, ApiDateTimeOffset, ApiTimeOnly, ApiTimeSpan } from "@leancodepl/api-date";
|
|
2
|
-
export type Mode = "capitalize" | "uncapitalize";
|
|
3
|
-
export type TransformDeep<T, TMode extends Mode> = T extends Array<infer TArrayElement> ? Array<TransformDeep<TArrayElement, TMode>> : T extends object ? T extends ApiDateOnly | ApiDateTimeOffset | ApiTimeOnly | ApiTimeSpan ? T : {
|
|
4
|
-
[TKey in keyof T as TKey extends string ? TMode extends "uncapitalize" ? Uncapitalize<TKey> : Capitalize<TKey> : TKey]: TransformDeep<T[TKey], TMode>;
|
|
5
|
-
} : T extends null ? undefined : T;
|
|
6
|
-
export type UncapitalizeDeep<T> = TransformDeep<T, "uncapitalize">;
|
|
7
|
-
export type CapitalizeDeep<T> = TransformDeep<T, "capitalize">;
|
|
8
|
-
export type MutableDeep<T> = T extends bigint | boolean | Date | number | string | symbol | null | undefined ? T : T extends ReadonlyArray<infer ArrayType> ? Array<MutableDeep<ArrayType>> : {
|
|
9
|
-
-readonly [K in keyof T]: MutableDeep<T[K]>;
|
|
10
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export type Unpromisify<T> = T extends Promise<infer TResult> ? TResult : T;
|