@wopjs/cast 0.1.9 → 0.1.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/LICENSE.txt +1 -1
- package/README.md +32 -28
- package/dist/index.d.mts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +12 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +12 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/src/is-to-as.ts +14 -4
package/LICENSE.txt
CHANGED
package/README.md
CHANGED
|
@@ -144,46 +144,50 @@ if (isTruthy(val)) {
|
|
|
144
144
|
| `toPlainObjectOfTrue` | Filter object to only `true` values |
|
|
145
145
|
| `print` | Safely stringify any value for display |
|
|
146
146
|
|
|
147
|
+
### Return Helpers
|
|
148
|
+
|
|
149
|
+
Constant functions useful for callbacks and default values:
|
|
150
|
+
|
|
151
|
+
| Function | Returns |
|
|
152
|
+
| -------------------- | ----------- |
|
|
153
|
+
| `noop` | `void` |
|
|
154
|
+
| `returnsUndefined` | `undefined` |
|
|
155
|
+
| `returnsNull` | `null` |
|
|
156
|
+
| `returnsFalse` | `false` |
|
|
157
|
+
| `returnsTrue` | `true` |
|
|
158
|
+
| `returnsEmptyString` | `""` |
|
|
159
|
+
|
|
147
160
|
## Usage Example
|
|
148
161
|
|
|
149
162
|
```ts
|
|
150
|
-
import
|
|
163
|
+
import {
|
|
164
|
+
asPlainObject,
|
|
165
|
+
asString,
|
|
166
|
+
toNumber,
|
|
167
|
+
asArray,
|
|
168
|
+
toNonEmptyPlainObject,
|
|
169
|
+
toPlainObjectOfTrue,
|
|
170
|
+
isNumber,
|
|
171
|
+
asNumber,
|
|
172
|
+
} from "@wopjs/cast";
|
|
151
173
|
|
|
152
174
|
// Parsing unknown API response
|
|
153
175
|
function parseUser(data: unknown) {
|
|
154
|
-
const obj =
|
|
176
|
+
const obj = asPlainObject(data);
|
|
155
177
|
return {
|
|
156
|
-
name:
|
|
157
|
-
age:
|
|
158
|
-
tags:
|
|
159
|
-
settings:
|
|
178
|
+
name: asString(obj.name),
|
|
179
|
+
age: toNumber(obj.age), // undefined if not a number
|
|
180
|
+
tags: asArray(obj.tags),
|
|
181
|
+
settings: toNonEmptyPlainObject(obj.settings),
|
|
160
182
|
};
|
|
161
183
|
}
|
|
162
184
|
|
|
163
185
|
// Filtering object values
|
|
164
186
|
const config = { debug: true, verbose: false, enabled: true };
|
|
165
|
-
|
|
187
|
+
toPlainObjectOfTrue(config); // { debug: true, enabled: true }
|
|
166
188
|
|
|
167
189
|
// Safe number handling
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
## Publish New Version
|
|
174
|
-
|
|
175
|
-
You can use [npm version](https://docs.npmjs.com/cli/v10/commands/npm-version) to bump version.
|
|
176
|
-
|
|
190
|
+
isNumber(NaN); // false (NaN is excluded)
|
|
191
|
+
asNumber(NaN); // 0 (safe fallback)
|
|
192
|
+
asNumber("42"); // 0 (not coerced, use parseInt for that)
|
|
177
193
|
```
|
|
178
|
-
npm version patch
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
Push the tag to remote and CI will publish the new version to npm.
|
|
182
|
-
|
|
183
|
-
```
|
|
184
|
-
git push --follow-tags
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
### CI Publish
|
|
188
|
-
|
|
189
|
-
If you want to publish the package in CI, you need to set the `NPM_TOKEN` secrets [in GitHub repository settings](https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions#creating-secrets-for-a-repository). See how to [create a NPM access token](https://docs.npmjs.com/creating-and-viewing-access-tokens).
|
package/dist/index.d.mts
CHANGED
|
@@ -37,6 +37,7 @@ declare const asString: (x: unknown) => string;
|
|
|
37
37
|
declare const isNonEmptyString: (x: unknown) => x is string;
|
|
38
38
|
/** Returns `x` if `x` is a string and not empty, otherwise returns `undefined`. */
|
|
39
39
|
declare const toNonEmptyString: (x: unknown) => string | _;
|
|
40
|
+
/** Extracts array type from `T`, or `unknown[]` if no array type found. */
|
|
40
41
|
type ExtractArray<T> = SetDefaultType<Extract<T, readonly unknown[]>, unknown[]>;
|
|
41
42
|
declare const isArray: <T>(x: T) => x is ExtractArray<T>;
|
|
42
43
|
/** Returns `x` if `x` is an array. */
|
package/dist/index.d.ts
CHANGED
|
@@ -37,6 +37,7 @@ declare const asString: (x: unknown) => string;
|
|
|
37
37
|
declare const isNonEmptyString: (x: unknown) => x is string;
|
|
38
38
|
/** Returns `x` if `x` is a string and not empty, otherwise returns `undefined`. */
|
|
39
39
|
declare const toNonEmptyString: (x: unknown) => string | _;
|
|
40
|
+
/** Extracts array type from `T`, or `unknown[]` if no array type found. */
|
|
40
41
|
type ExtractArray<T> = SetDefaultType<Extract<T, readonly unknown[]>, unknown[]>;
|
|
41
42
|
declare const isArray: <T>(x: T) => x is ExtractArray<T>;
|
|
42
43
|
/** Returns `x` if `x` is an array. */
|
package/dist/index.js
CHANGED
|
@@ -31,9 +31,19 @@ var asObject = (x) => isObject(x) ? x : {};
|
|
|
31
31
|
var isPlainObject = (x) => isObject(x) && !isArray(x);
|
|
32
32
|
var toPlainObject = (x) => isPlainObject(x) ? x : _;
|
|
33
33
|
var asPlainObject = (x) => isPlainObject(x) ? x : {};
|
|
34
|
-
var
|
|
34
|
+
var walkPlainObjectValues = (x, predicate) => {
|
|
35
|
+
if (isPlainObject(x)) {
|
|
36
|
+
for (let key in x) {
|
|
37
|
+
if (Object.hasOwn(x, key) && (!predicate || predicate(x[key]))) {
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return false;
|
|
43
|
+
};
|
|
44
|
+
var isNonEmptyPlainObject = (x) => walkPlainObjectValues(x);
|
|
35
45
|
var toNonEmptyPlainObject = (x) => isNonEmptyPlainObject(x) ? x : _;
|
|
36
|
-
var isNonEmptyJSONObject = (x) =>
|
|
46
|
+
var isNonEmptyJSONObject = (x) => walkPlainObjectValues(x, isDefined);
|
|
37
47
|
var toNonEmptyJSONObject = (x) => isNonEmptyJSONObject(x) ? x : _;
|
|
38
48
|
var toPlainObjectOf = (x, f) => {
|
|
39
49
|
if (isPlainObject(x)) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/is-to-as.ts","../src/returns.ts"],"names":[],"mappings":";;;AAAA,IAAM,CAAA,GAAI,MAAA;AAOH,IAAM,SAAA,GAAY,CAAI,CAAA,KAA6B,CAAA,KAAM;AAEzD,IAAM,MAAA,GAAS,CAAC,CAAA,KAA0B,CAAA,KAAM;AAGhD,IAAM,MAAA,GAAS,CAAC,CAAA,KAA0B,CAAA,KAAM,OAAO,IAAA,GAAO;AAG9D,IAAM,MAAA,GAAS,CAAC,CAAA,KAAyB,CAAA,KAAM,OAAO,CAAA,GAAI;AAO1D,IAAM,OAAA,GAAU,CAAI,CAAA,KAA+B,CAAC;AAGpD,IAAM,UAAU,CAAI,CAAA,KAA+B,OAAA,CAAQ,CAAC,IAAI,CAAA,GAAI;AAGpE,IAAM,QAAA,GAAW,CAAI,CAAA,KAAiC,CAAC,CAAC;AAGxD,IAAM,WAAW,CAAI,CAAA,KAAiC,QAAA,CAAS,CAAC,IAAI,CAAA,GAAI;AAExE,IAAM,SAAA,GAAY,CAAC,CAAA,KAA6B,CAAA,KAAM,QAAQ,CAAA,KAAM;AAGpE,IAAM,YAAY,CAAC,CAAA,KAA6B,SAAA,CAAU,CAAC,IAAI,CAAA,GAAI;AAGnE,IAAM,WAAW,CAAC,CAAA,KAA4B,OAAO,CAAA,KAAM,YAAY,CAAA,KAAM;AAG7E,IAAM,WAAW,CAAC,CAAA,KAA4B,QAAA,CAAS,CAAC,IAAI,CAAA,GAAI;AAGhE,IAAM,WAAW,CAAC,CAAA,KAAwB,QAAA,CAAS,CAAC,IAAI,CAAA,GAAI;AAG5D,IAAM,QAAA,GAAW,CAAC,CAAA,KAA4B,OAAO,CAAA,KAAM;AAG3D,IAAM,WAAW,CAAC,CAAA,KAA4B,QAAA,CAAS,CAAC,IAAI,CAAA,GAAI;AAGhE,IAAM,WAAW,CAAC,CAAA,KAAwB,QAAA,CAAS,CAAC,IAAI,CAAA,GAAI;AAG5D,IAAM,mBAAmB,CAAC,CAAA,KAA4B,QAAA,CAAS,CAAC,KAAK,CAAA,KAAM;AAG3E,IAAM,mBAAmB,CAAC,CAAA,KAA4B,gBAAA,CAAiB,CAAC,IAAI,CAAA,GAAI;
|
|
1
|
+
{"version":3,"sources":["../src/is-to-as.ts","../src/returns.ts"],"names":[],"mappings":";;;AAAA,IAAM,CAAA,GAAI,MAAA;AAOH,IAAM,SAAA,GAAY,CAAI,CAAA,KAA6B,CAAA,KAAM;AAEzD,IAAM,MAAA,GAAS,CAAC,CAAA,KAA0B,CAAA,KAAM;AAGhD,IAAM,MAAA,GAAS,CAAC,CAAA,KAA0B,CAAA,KAAM,OAAO,IAAA,GAAO;AAG9D,IAAM,MAAA,GAAS,CAAC,CAAA,KAAyB,CAAA,KAAM,OAAO,CAAA,GAAI;AAO1D,IAAM,OAAA,GAAU,CAAI,CAAA,KAA+B,CAAC;AAGpD,IAAM,UAAU,CAAI,CAAA,KAA+B,OAAA,CAAQ,CAAC,IAAI,CAAA,GAAI;AAGpE,IAAM,QAAA,GAAW,CAAI,CAAA,KAAiC,CAAC,CAAC;AAGxD,IAAM,WAAW,CAAI,CAAA,KAAiC,QAAA,CAAS,CAAC,IAAI,CAAA,GAAI;AAExE,IAAM,SAAA,GAAY,CAAC,CAAA,KAA6B,CAAA,KAAM,QAAQ,CAAA,KAAM;AAGpE,IAAM,YAAY,CAAC,CAAA,KAA6B,SAAA,CAAU,CAAC,IAAI,CAAA,GAAI;AAGnE,IAAM,WAAW,CAAC,CAAA,KAA4B,OAAO,CAAA,KAAM,YAAY,CAAA,KAAM;AAG7E,IAAM,WAAW,CAAC,CAAA,KAA4B,QAAA,CAAS,CAAC,IAAI,CAAA,GAAI;AAGhE,IAAM,WAAW,CAAC,CAAA,KAAwB,QAAA,CAAS,CAAC,IAAI,CAAA,GAAI;AAG5D,IAAM,QAAA,GAAW,CAAC,CAAA,KAA4B,OAAO,CAAA,KAAM;AAG3D,IAAM,WAAW,CAAC,CAAA,KAA4B,QAAA,CAAS,CAAC,IAAI,CAAA,GAAI;AAGhE,IAAM,WAAW,CAAC,CAAA,KAAwB,QAAA,CAAS,CAAC,IAAI,CAAA,GAAI;AAG5D,IAAM,mBAAmB,CAAC,CAAA,KAA4B,QAAA,CAAS,CAAC,KAAK,CAAA,KAAM;AAG3E,IAAM,mBAAmB,CAAC,CAAA,KAA4B,gBAAA,CAAiB,CAAC,IAAI,CAAA,GAAI;AAKhF,IAAM,UAAU,KAAA,CAAM;AAGtB,IAAM,UAAU,CAAI,CAAA,KAA+B,OAAA,CAAQ,CAAC,IAAI,CAAA,GAAI;AAGpE,IAAM,UAAU,CAAI,CAAA,KAA2B,QAAQ,CAAC,CAAA,GAAI,IAAK;AAGjE,IAAM,kBAAkB,CAAI,CAAA,KAA+B,QAAQ,CAAC,CAAA,IAAK,EAAE,MAAA,GAAS;AAGpF,IAAM,kBAAkB,CAAI,CAAA,KAA+B,eAAA,CAAgB,CAAC,IAAI,CAAA,GAAI;AAKpF,IAAM,WAAW,CAAI,CAAA,KAAgC,CAAA,KAAM,IAAA,IAAQ,OAAO,CAAA,KAAM;AAGhF,IAAM,WAAW,CAAI,CAAA,KAAgC,QAAA,CAAS,CAAC,IAAI,CAAA,GAAI;AAGvE,IAAM,WAAW,CAAI,CAAA,KAA4B,SAAS,CAAC,CAAA,GAAI,IAAK;AASpE,IAAM,aAAA,GAAgB,CAAI,CAAA,KAAqC,QAAA,CAAS,CAAC,CAAA,IAAK,CAAC,QAAQ,CAAC;AAGxF,IAAM,gBAAgB,CAAI,CAAA,KAAqC,aAAA,CAAc,CAAC,IAAI,CAAA,GAAI;AAGtF,IAAM,gBAAgB,CAAI,CAAA,KAAiC,cAAc,CAAC,CAAA,GAAI,IAAK;AAE1F,IAAM,qBAAA,GAAwB,CAAI,CAAA,EAAM,SAAA,KAAiD;AACvF,EAAA,IAAI,aAAA,CAAc,CAAC,CAAA,EAAG;AACpB,IAAA,KAAA,IAAS,OAAO,CAAA,EAAG;AACjB,MAAA,IAAI,MAAA,CAAO,MAAA,CAAO,CAAA,EAAG,GAAG,CAAA,KAAM,CAAC,SAAA,IAAa,SAAA,CAAU,CAAA,CAAE,GAAG,CAAC,CAAA,CAAA,EAAI;AAC9D,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT,CAAA;AAGO,IAAM,qBAAA,GAAwB,CAAI,CAAA,KAAqC,qBAAA,CAAsB,CAAC;AAG9F,IAAM,wBAAwB,CAAI,CAAA,KAAqC,qBAAA,CAAsB,CAAC,IAAI,CAAA,GAAI;AAGtG,IAAM,oBAAA,GAAuB,CAAI,CAAA,KAAqC,qBAAA,CAAsB,GAAG,SAAS;AAGxG,IAAM,uBAAuB,CAAI,CAAA,KAAqC,oBAAA,CAAqB,CAAC,IAAI,CAAA,GAAI;AAQpG,IAAM,eAAA,GAAkB,CAC7B,CAAA,EACA,CAAA,KAC+B;AAC/B,EAAA,IAAI,aAAA,CAAc,CAAC,CAAA,EAAG;AACpB,IAAA,IAAI,KAAA,GAAQ,EAAA;AACZ,IAAA,IAAI,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA;AACzB,IAAA,IAAI,SAAS,KAAA,CAAM,MAAA;AACnB,IAAA,IAAI,MAAA;AAEJ,IAAA,OAAO,EAAE,QAAQ,MAAA,EAAQ;AACvB,MAAA,IAAI,GAAA,GAAM,MAAM,KAAK,CAAA;AACrB,MAAA,IAAI,KAAA,GAAQ,EAAE,GAAG,CAAA;AACjB,MAAA,IAAI,CAAA,CAAE,KAAK,CAAA,EAAG;AACZ,QAAA,CAAC,MAAA,KAAW,EAAC,EAAG,GAAG,CAAA,GAAI,KAAA;AAAA,MACzB;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAGO,IAAM,mBAAA,GAAsB,CAAC,CAAA,KAA8C,eAAA,CAAgB,GAAG,MAAM;AAOpG,IAAM,KAAA,GAAQ,CAAC,CAAA,KAAuB;AAC3C,EAAA,IAAI,QAAA,CAAS,CAAC,CAAA,EAAG,OAAO,CAAA;AACxB,EAAA,IAAI,CAAA,IAAK,MAAM,OAAO,EAAA;AACtB,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,CAAA,EAAG,IAAA,EAAM,CAAC,CAAA;AAAA,EAClC,CAAA,CAAA,MAAQ;AAEN,IAAA,OAAO,CAAA,GAAI,EAAA;AAAA,EACb;AACF;;;AC7KO,IAAM,OAAO,MAAY;AAAC;AAE1B,IAAM,gBAAA,GAAmB;AAEzB,IAAM,cAAc,MAAY;AAEhC,IAAM,eAAe,MAAa;AAElC,IAAM,cAAc,MAAY;AAEhC,IAAM,qBAAqB,MAAc","file":"index.js"}
|
package/dist/index.mjs
CHANGED
|
@@ -29,9 +29,19 @@ var asObject = (x) => isObject(x) ? x : {};
|
|
|
29
29
|
var isPlainObject = (x) => isObject(x) && !isArray(x);
|
|
30
30
|
var toPlainObject = (x) => isPlainObject(x) ? x : _;
|
|
31
31
|
var asPlainObject = (x) => isPlainObject(x) ? x : {};
|
|
32
|
-
var
|
|
32
|
+
var walkPlainObjectValues = (x, predicate) => {
|
|
33
|
+
if (isPlainObject(x)) {
|
|
34
|
+
for (let key in x) {
|
|
35
|
+
if (Object.hasOwn(x, key) && (!predicate || predicate(x[key]))) {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return false;
|
|
41
|
+
};
|
|
42
|
+
var isNonEmptyPlainObject = (x) => walkPlainObjectValues(x);
|
|
33
43
|
var toNonEmptyPlainObject = (x) => isNonEmptyPlainObject(x) ? x : _;
|
|
34
|
-
var isNonEmptyJSONObject = (x) =>
|
|
44
|
+
var isNonEmptyJSONObject = (x) => walkPlainObjectValues(x, isDefined);
|
|
35
45
|
var toNonEmptyJSONObject = (x) => isNonEmptyJSONObject(x) ? x : _;
|
|
36
46
|
var toPlainObjectOf = (x, f) => {
|
|
37
47
|
if (isPlainObject(x)) {
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/is-to-as.ts","../src/returns.ts"],"names":[],"mappings":";AAAA,IAAM,CAAA,GAAI,MAAA;AAOH,IAAM,SAAA,GAAY,CAAI,CAAA,KAA6B,CAAA,KAAM;AAEzD,IAAM,MAAA,GAAS,CAAC,CAAA,KAA0B,CAAA,KAAM;AAGhD,IAAM,MAAA,GAAS,CAAC,CAAA,KAA0B,CAAA,KAAM,OAAO,IAAA,GAAO;AAG9D,IAAM,MAAA,GAAS,CAAC,CAAA,KAAyB,CAAA,KAAM,OAAO,CAAA,GAAI;AAO1D,IAAM,OAAA,GAAU,CAAI,CAAA,KAA+B,CAAC;AAGpD,IAAM,UAAU,CAAI,CAAA,KAA+B,OAAA,CAAQ,CAAC,IAAI,CAAA,GAAI;AAGpE,IAAM,QAAA,GAAW,CAAI,CAAA,KAAiC,CAAC,CAAC;AAGxD,IAAM,WAAW,CAAI,CAAA,KAAiC,QAAA,CAAS,CAAC,IAAI,CAAA,GAAI;AAExE,IAAM,SAAA,GAAY,CAAC,CAAA,KAA6B,CAAA,KAAM,QAAQ,CAAA,KAAM;AAGpE,IAAM,YAAY,CAAC,CAAA,KAA6B,SAAA,CAAU,CAAC,IAAI,CAAA,GAAI;AAGnE,IAAM,WAAW,CAAC,CAAA,KAA4B,OAAO,CAAA,KAAM,YAAY,CAAA,KAAM;AAG7E,IAAM,WAAW,CAAC,CAAA,KAA4B,QAAA,CAAS,CAAC,IAAI,CAAA,GAAI;AAGhE,IAAM,WAAW,CAAC,CAAA,KAAwB,QAAA,CAAS,CAAC,IAAI,CAAA,GAAI;AAG5D,IAAM,QAAA,GAAW,CAAC,CAAA,KAA4B,OAAO,CAAA,KAAM;AAG3D,IAAM,WAAW,CAAC,CAAA,KAA4B,QAAA,CAAS,CAAC,IAAI,CAAA,GAAI;AAGhE,IAAM,WAAW,CAAC,CAAA,KAAwB,QAAA,CAAS,CAAC,IAAI,CAAA,GAAI;AAG5D,IAAM,mBAAmB,CAAC,CAAA,KAA4B,QAAA,CAAS,CAAC,KAAK,CAAA,KAAM;AAG3E,IAAM,mBAAmB,CAAC,CAAA,KAA4B,gBAAA,CAAiB,CAAC,IAAI,CAAA,GAAI;
|
|
1
|
+
{"version":3,"sources":["../src/is-to-as.ts","../src/returns.ts"],"names":[],"mappings":"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","file":"index.mjs"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wopjs/cast",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.10",
|
|
4
4
|
"description": "Type-safe utilities for filtering and coercing unknown values in TypeScript.",
|
|
5
5
|
"repository": "wopjs/cast",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"license": "MIT",
|
|
50
50
|
"devDependencies": {
|
|
51
51
|
"@eslint/js": "^9.15.0",
|
|
52
|
-
"@types/node": "^
|
|
52
|
+
"@types/node": "^25.0.9",
|
|
53
53
|
"@vitest/coverage-v8": "^4.0.4",
|
|
54
54
|
"commit-and-tag-version": "^12.5.0",
|
|
55
55
|
"eslint": "^9.15.0",
|
package/src/is-to-as.ts
CHANGED
|
@@ -60,6 +60,7 @@ export const isNonEmptyString = (x: unknown): x is string => isString(x) && x !=
|
|
|
60
60
|
/** Returns `x` if `x` is a string and not empty, otherwise returns `undefined`. */
|
|
61
61
|
export const toNonEmptyString = (x: unknown): string | _ => (isNonEmptyString(x) ? x : _);
|
|
62
62
|
|
|
63
|
+
/** Extracts array type from `T`, or `unknown[]` if no array type found. */
|
|
63
64
|
export type ExtractArray<T> = SetDefaultType<Extract<T, readonly unknown[]>, unknown[]>;
|
|
64
65
|
|
|
65
66
|
export const isArray = Array.isArray as <T>(x: T) => x is ExtractArray<T>;
|
|
@@ -102,16 +103,25 @@ export const toPlainObject = <T>(x: T): ExtractPlainObject<T> | _ => (isPlainObj
|
|
|
102
103
|
/** Returns `x` if `x` is a plain object, otherwise returns `{}` (empty object). */
|
|
103
104
|
export const asPlainObject = <T>(x: T): ExtractPlainObject<T> => (isPlainObject(x) ? x : ({} as ExtractPlainObject<T>));
|
|
104
105
|
|
|
106
|
+
const walkPlainObjectValues = <T>(x: T, predicate?: (x: unknown) => boolean): boolean => {
|
|
107
|
+
if (isPlainObject(x)) {
|
|
108
|
+
for (let key in x) {
|
|
109
|
+
if (Object.hasOwn(x, key) && (!predicate || predicate(x[key]))) {
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return false;
|
|
115
|
+
};
|
|
116
|
+
|
|
105
117
|
/** Returns `true` if `x` is a plain object and has at least one key. */
|
|
106
|
-
export const isNonEmptyPlainObject = <T>(x: T): x is ExtractPlainObject<T> =>
|
|
107
|
-
isPlainObject(x) && Object.keys(x).length > 0;
|
|
118
|
+
export const isNonEmptyPlainObject = <T>(x: T): x is ExtractPlainObject<T> => walkPlainObjectValues(x);
|
|
108
119
|
|
|
109
120
|
/** Returns `x` if `x` is a plain object and has at least one key. */
|
|
110
121
|
export const toNonEmptyPlainObject = <T>(x: T): ExtractPlainObject<T> | _ => (isNonEmptyPlainObject(x) ? x : _);
|
|
111
122
|
|
|
112
123
|
/** Returns `true` if `x` is a plain object and has at least one key with non-undefined value. */
|
|
113
|
-
export const isNonEmptyJSONObject = <T>(x: T): x is ExtractPlainObject<T> =>
|
|
114
|
-
isPlainObject(x) && Object.values(x).some(isDefined);
|
|
124
|
+
export const isNonEmptyJSONObject = <T>(x: T): x is ExtractPlainObject<T> => walkPlainObjectValues(x, isDefined);
|
|
115
125
|
|
|
116
126
|
/** Returns `x` if `x` is a plain object and has at least one key with non-undefined value, otherwise returns `undefined`. */
|
|
117
127
|
export const toNonEmptyJSONObject = <T>(x: T): ExtractPlainObject<T> | _ => (isNonEmptyJSONObject(x) ? x : _);
|