typof 1.0.16 → 1.0.18
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/README.md +37 -49
- package/dist/main.cjs +98 -0
- package/dist/{main.d.ts → main.d.cts} +7 -4
- package/dist/main.d.mts +7 -4
- package/dist/main.mjs +76 -96
- package/package.json +6 -5
- package/dist/main.js +0 -144
package/README.md
CHANGED
|
@@ -1,17 +1,5 @@
|
|
|
1
|
-
[
|
|
2
|
-
[
|
|
3
|
-
[Boolean]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean
|
|
4
|
-
[Date]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
|
|
5
|
-
[Buffer]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer
|
|
6
|
-
[Promise]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
|
|
7
|
-
[Void]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Undefined
|
|
8
|
-
[Null]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/null
|
|
9
|
-
[Undefined]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Undefined
|
|
10
|
-
|
|
11
|
-
<!---->
|
|
12
|
-
|
|
13
|
-
[Types]: ./src/types/Types.type.ts
|
|
14
|
-
[UnknownObject]: ./src/types/UnknownObject.type.ts
|
|
1
|
+
[Types]: ./src/types/types.ts
|
|
2
|
+
[UnknownObject]: ./src/types/unknown_object.ts
|
|
15
3
|
|
|
16
4
|
<div align="center">
|
|
17
5
|
<br/>
|
|
@@ -126,31 +114,31 @@ Infer types.
|
|
|
126
114
|
> // Index zero always ensures reliable type checking. As the index increases, species depth also increases.
|
|
127
115
|
> if (typof('0.5')[0] === 'string') console.log('This is a string.');
|
|
128
116
|
>
|
|
129
|
-
> typof('test'); // [
|
|
117
|
+
> typof('test'); // ['string']
|
|
130
118
|
>
|
|
131
|
-
> typof('0'); // [
|
|
132
|
-
> typof(0); // [
|
|
119
|
+
> typof('0'); // ['string', 'number', 'integer']
|
|
120
|
+
> typof(0); // ['number', 'integer']
|
|
133
121
|
>
|
|
134
|
-
> typof('0.5'); // [
|
|
135
|
-
> typof(0.5); // [
|
|
122
|
+
> typof('0.5'); // ['string', 'number', 'float']
|
|
123
|
+
> typof(0.5); // ['number', 'float']
|
|
136
124
|
>
|
|
137
|
-
> typof('true'); // [
|
|
138
|
-
> typof(true); // [
|
|
125
|
+
> typof('true'); // ['string', 'boolean']
|
|
126
|
+
> typof(true); // ['boolean']
|
|
139
127
|
>
|
|
140
|
-
> typof('2025-01-01'); // [
|
|
141
|
-
> typof(new Date('2025-01-01')); // [
|
|
128
|
+
> typof('2025-01-01'); // ['string', 'date']
|
|
129
|
+
> typof(new Date('2025-01-01')); // ['object', 'date']
|
|
142
130
|
>
|
|
143
|
-
> typof('{"key":"value"}'); // [
|
|
144
|
-
> typof({ key: 'value' }); // [
|
|
131
|
+
> typof('{"key":"value"}'); // ['string', 'object']
|
|
132
|
+
> typof({ key: 'value' }); // ['object']
|
|
145
133
|
>
|
|
146
|
-
> typof('["test"]'); // [
|
|
147
|
-
> typof(['test']); // [
|
|
134
|
+
> typof('["test"]'); // ['string', 'array']
|
|
135
|
+
> typof(['test']); // ['array']
|
|
148
136
|
>
|
|
149
|
-
> typof('null'); // [
|
|
150
|
-
> typof(null); // [
|
|
137
|
+
> typof('null'); // ['string', 'null']
|
|
138
|
+
> typof(null); // ['null']
|
|
151
139
|
>
|
|
152
|
-
> typof('undefined'); // [
|
|
153
|
-
> typof(undefined); // [
|
|
140
|
+
> typof('undefined'); // ['string', 'undefined']
|
|
141
|
+
> typof(undefined); // ['undefined']
|
|
154
142
|
> ```
|
|
155
143
|
|
|
156
144
|
<br/>
|
|
@@ -163,18 +151,18 @@ Convert to string.
|
|
|
163
151
|
> | --------- | ------- | ------- | ----------------- |
|
|
164
152
|
> | `value` | Unknown | | Value to convert. |
|
|
165
153
|
>
|
|
166
|
-
> returns
|
|
154
|
+
> returns String
|
|
167
155
|
>
|
|
168
156
|
> Example:
|
|
169
157
|
>
|
|
170
158
|
> ```typescript
|
|
171
|
-
> string(0.5); //
|
|
172
|
-
> string(true); //
|
|
173
|
-
> string(new Date('2025-01-01')); //
|
|
159
|
+
> string(0.5); // '0.5'
|
|
160
|
+
> string(true); // 'true'
|
|
161
|
+
> string(new Date('2025-01-01')); // '2025-01-01T00:00:00.000Z'
|
|
174
162
|
> string({ key: 'value' }); // '{"key":"value"}'
|
|
175
163
|
> string(['test']); // '["test"]'
|
|
176
|
-
> string(null); //
|
|
177
|
-
> string(undefined); //
|
|
164
|
+
> string(null); // 'null'
|
|
165
|
+
> string(undefined); // 'undefined'
|
|
178
166
|
> ```
|
|
179
167
|
|
|
180
168
|
<br/>
|
|
@@ -187,7 +175,7 @@ Convert to number.
|
|
|
187
175
|
> | --------- | ------- | ------- | ----------------- |
|
|
188
176
|
> | `value` | Unknown | | Value to convert. |
|
|
189
177
|
>
|
|
190
|
-
> returns
|
|
178
|
+
> returns Number
|
|
191
179
|
>
|
|
192
180
|
> Example:
|
|
193
181
|
>
|
|
@@ -207,7 +195,7 @@ Convert to integer.
|
|
|
207
195
|
> | --------- | ------- | ------- | ----------------- |
|
|
208
196
|
> | `value` | Unknown | | Value to convert. |
|
|
209
197
|
>
|
|
210
|
-
> returns
|
|
198
|
+
> returns Number
|
|
211
199
|
>
|
|
212
200
|
> Example:
|
|
213
201
|
>
|
|
@@ -227,14 +215,14 @@ Convert to boolean.
|
|
|
227
215
|
> | --------- | ------- | ------- | ----------------- |
|
|
228
216
|
> | `value` | Unknown | | Value to convert. |
|
|
229
217
|
>
|
|
230
|
-
> returns
|
|
218
|
+
> returns Boolean | Value
|
|
231
219
|
>
|
|
232
220
|
> Example:
|
|
233
221
|
>
|
|
234
222
|
> ```typescript
|
|
235
223
|
> boolean('true'); // true
|
|
236
224
|
> boolean(true); // true
|
|
237
|
-
> boolean('test'); //
|
|
225
|
+
> boolean('test'); // 'test'
|
|
238
226
|
> ```
|
|
239
227
|
|
|
240
228
|
<br/>
|
|
@@ -247,14 +235,14 @@ Convert to date.
|
|
|
247
235
|
> | --------- | ------- | ------- | ----------------- |
|
|
248
236
|
> | `value` | Unknown | | Value to convert. |
|
|
249
237
|
>
|
|
250
|
-
> returns
|
|
238
|
+
> returns Date | Value
|
|
251
239
|
>
|
|
252
240
|
> Example:
|
|
253
241
|
>
|
|
254
242
|
> ```typescript
|
|
255
243
|
> date('2025-01-01'); // 2025-01-01T00:00:00.000Z
|
|
256
244
|
> date(new Date('2025-01-01')); // 2025-01-01T00:00:00.000Z
|
|
257
|
-
> date('test'); //
|
|
245
|
+
> date('test'); // 'test'
|
|
258
246
|
> ```
|
|
259
247
|
|
|
260
248
|
<br/>
|
|
@@ -272,7 +260,7 @@ Convert to object.
|
|
|
272
260
|
> Example:
|
|
273
261
|
>
|
|
274
262
|
> ```typescript
|
|
275
|
-
> object('{"key":"value"}'); // { key:
|
|
263
|
+
> object('{"key":"value"}'); // { key: 'value' }
|
|
276
264
|
> object('["test"]'); // '["test"]'
|
|
277
265
|
> ```
|
|
278
266
|
|
|
@@ -291,7 +279,7 @@ Convert to array.
|
|
|
291
279
|
> Example:
|
|
292
280
|
>
|
|
293
281
|
> ```typescript
|
|
294
|
-
> array('["test"]'); // [
|
|
282
|
+
> array('["test"]'); // ['test']
|
|
295
283
|
> array('{"key":"value"}'); // '{"key":"value"}'
|
|
296
284
|
> ```
|
|
297
285
|
|
|
@@ -305,14 +293,14 @@ Convert to null.
|
|
|
305
293
|
> | --------- | ------- | ------- | ----------------- |
|
|
306
294
|
> | `value` | Unknown | | Value to convert. |
|
|
307
295
|
>
|
|
308
|
-
> returns
|
|
296
|
+
> returns Null | Value
|
|
309
297
|
>
|
|
310
298
|
> Example:
|
|
311
299
|
>
|
|
312
300
|
> ```typescript
|
|
313
301
|
> _null('null'); // null
|
|
314
302
|
> _null(null); // null
|
|
315
|
-
> _null('test'); //
|
|
303
|
+
> _null('test'); // 'test'
|
|
316
304
|
> ```
|
|
317
305
|
|
|
318
306
|
<br/>
|
|
@@ -325,14 +313,14 @@ Convert to undefined.
|
|
|
325
313
|
> | --------- | ------- | ------- | ----------------- |
|
|
326
314
|
> | `value` | Unknown | | Value to convert. |
|
|
327
315
|
>
|
|
328
|
-
> returns
|
|
316
|
+
> returns Undefined | Value
|
|
329
317
|
>
|
|
330
318
|
> Example:
|
|
331
319
|
>
|
|
332
320
|
> ```typescript
|
|
333
321
|
> _undefined('undefined'); // undefined
|
|
334
322
|
> _undefined(undefined); // undefined
|
|
335
|
-
> _undefined('test'); //
|
|
323
|
+
> _undefined('test'); // 'test'
|
|
336
324
|
> ```
|
|
337
325
|
|
|
338
326
|
### Types
|
package/dist/main.cjs
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
//#region src/utils/is_iso_date.ts
|
|
3
|
+
const is_iso_date = (value) => {
|
|
4
|
+
if (!/^\d{4}-\d{2}-\d{2}.*$/.test(value)) return false;
|
|
5
|
+
return !Number.isNaN(new Date(value).getTime());
|
|
6
|
+
};
|
|
7
|
+
//#endregion
|
|
8
|
+
//#region src/utils/is_object.ts
|
|
9
|
+
const is_object = (value) => {
|
|
10
|
+
if (typeof value === "object" && value !== null) return true;
|
|
11
|
+
if (typeof value === "string") try {
|
|
12
|
+
const parsed = JSON.parse(value);
|
|
13
|
+
return typeof parsed === "object" && parsed !== null;
|
|
14
|
+
} catch {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
return false;
|
|
18
|
+
};
|
|
19
|
+
//#endregion
|
|
20
|
+
//#region src/utils/typof.ts
|
|
21
|
+
const typof = (value) => {
|
|
22
|
+
const types = [];
|
|
23
|
+
if (typeof value === "string") {
|
|
24
|
+
value = value.trim();
|
|
25
|
+
if (typeof value !== "string") return types;
|
|
26
|
+
types.push("string");
|
|
27
|
+
if (value === "") return types;
|
|
28
|
+
if (Number.isFinite(Number(value))) {
|
|
29
|
+
const number = Number(value);
|
|
30
|
+
types.push("number");
|
|
31
|
+
if (Number.isInteger(number)) types.push("integer");
|
|
32
|
+
else types.push("float");
|
|
33
|
+
}
|
|
34
|
+
if (value === "true" || value === "false") types.push("boolean");
|
|
35
|
+
if (is_iso_date(value)) types.push("date");
|
|
36
|
+
if (is_object(value) && !Array.isArray(JSON.parse(value))) types.push("object");
|
|
37
|
+
if (is_object(value) && Array.isArray(JSON.parse(value))) types.push("array");
|
|
38
|
+
if (value === "null") types.push("null");
|
|
39
|
+
if (value === "undefined") types.push("undefined");
|
|
40
|
+
} else if (typeof value === "number") {
|
|
41
|
+
if (!Number.isFinite(value)) return types;
|
|
42
|
+
types.push("number");
|
|
43
|
+
if (Number.isInteger(value)) types.push("integer");
|
|
44
|
+
else types.push("float");
|
|
45
|
+
} else if (typeof value === "boolean") types.push("boolean");
|
|
46
|
+
else if (is_object(value) && !Array.isArray(value)) {
|
|
47
|
+
types.push("object");
|
|
48
|
+
if (value instanceof Date) types.push("date");
|
|
49
|
+
} else if (is_object(value) && Array.isArray(value)) types.push("array");
|
|
50
|
+
else if (value === null) types.push("null");
|
|
51
|
+
else if (value === void 0) types.push("undefined");
|
|
52
|
+
return types;
|
|
53
|
+
};
|
|
54
|
+
const string = (value) => {
|
|
55
|
+
const types = typof(value);
|
|
56
|
+
return types.includes("object") || types.includes("array") ? JSON.stringify(value) : String(value);
|
|
57
|
+
};
|
|
58
|
+
const number = (value) => {
|
|
59
|
+
return typof(value).includes("number") ? Number(value) : NaN;
|
|
60
|
+
};
|
|
61
|
+
const integer = (value) => {
|
|
62
|
+
return typof(value).includes("number") ? Math.trunc(Number(value)) : NaN;
|
|
63
|
+
};
|
|
64
|
+
const boolean = (value) => {
|
|
65
|
+
const types = typof(value);
|
|
66
|
+
if (types.includes("boolean") && types.includes("string")) if (value === "true") return true;
|
|
67
|
+
else if (value === "false") return false;
|
|
68
|
+
else return value;
|
|
69
|
+
else return value;
|
|
70
|
+
};
|
|
71
|
+
const date = (value) => {
|
|
72
|
+
return typof(value).includes("date") ? new Date(value) : value;
|
|
73
|
+
};
|
|
74
|
+
const object = (value) => {
|
|
75
|
+
const types = typof(value);
|
|
76
|
+
return types.includes("object") && types.includes("string") ? JSON.parse(value) : value;
|
|
77
|
+
};
|
|
78
|
+
const array = (value) => {
|
|
79
|
+
const types = typof(value);
|
|
80
|
+
return types.includes("array") && types.includes("string") ? JSON.parse(value) : value;
|
|
81
|
+
};
|
|
82
|
+
const _null = (value) => {
|
|
83
|
+
return typof(value).includes("null") ? null : value;
|
|
84
|
+
};
|
|
85
|
+
const _undefined = (value) => {
|
|
86
|
+
return typof(value).includes("undefined") ? void 0 : value;
|
|
87
|
+
};
|
|
88
|
+
//#endregion
|
|
89
|
+
exports._null = _null;
|
|
90
|
+
exports._undefined = _undefined;
|
|
91
|
+
exports.array = array;
|
|
92
|
+
exports.boolean = boolean;
|
|
93
|
+
exports.date = date;
|
|
94
|
+
exports.integer = integer;
|
|
95
|
+
exports.number = number;
|
|
96
|
+
exports.object = object;
|
|
97
|
+
exports.string = string;
|
|
98
|
+
exports.typof = typof;
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
//#region src/types/types.d.ts
|
|
1
2
|
type Types = 'string' | 'number' | 'integer' | 'float' | 'boolean' | 'date' | 'object' | 'array' | 'null' | 'undefined';
|
|
2
|
-
|
|
3
|
+
//#endregion
|
|
4
|
+
//#region src/types/unknown_object.d.ts
|
|
3
5
|
type UnknownObject = Record<string, unknown>;
|
|
4
|
-
|
|
6
|
+
//#endregion
|
|
7
|
+
//#region src/utils/typof.d.ts
|
|
5
8
|
declare const typof: (value: unknown) => Types[];
|
|
6
9
|
declare const string: (value: unknown) => string;
|
|
7
10
|
declare const number: (value: unknown) => number;
|
|
@@ -12,5 +15,5 @@ declare const object: <Value>(value: Value) => UnknownObject | Value;
|
|
|
12
15
|
declare const array: <Value>(value: Value) => unknown[] | Value;
|
|
13
16
|
declare const _null: <Value>(value: Value) => null | Value;
|
|
14
17
|
declare const _undefined: <Value>(value: Value) => undefined | Value;
|
|
15
|
-
|
|
16
|
-
export { type Types, type UnknownObject, _null, _undefined, array, boolean, date, integer, number, object, string, typof };
|
|
18
|
+
//#endregion
|
|
19
|
+
export { type Types, type UnknownObject, _null, _undefined, array, boolean, date, integer, number, object, string, typof };
|
package/dist/main.d.mts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
//#region src/types/types.d.ts
|
|
1
2
|
type Types = 'string' | 'number' | 'integer' | 'float' | 'boolean' | 'date' | 'object' | 'array' | 'null' | 'undefined';
|
|
2
|
-
|
|
3
|
+
//#endregion
|
|
4
|
+
//#region src/types/unknown_object.d.ts
|
|
3
5
|
type UnknownObject = Record<string, unknown>;
|
|
4
|
-
|
|
6
|
+
//#endregion
|
|
7
|
+
//#region src/utils/typof.d.ts
|
|
5
8
|
declare const typof: (value: unknown) => Types[];
|
|
6
9
|
declare const string: (value: unknown) => string;
|
|
7
10
|
declare const number: (value: unknown) => number;
|
|
@@ -12,5 +15,5 @@ declare const object: <Value>(value: Value) => UnknownObject | Value;
|
|
|
12
15
|
declare const array: <Value>(value: Value) => unknown[] | Value;
|
|
13
16
|
declare const _null: <Value>(value: Value) => null | Value;
|
|
14
17
|
declare const _undefined: <Value>(value: Value) => undefined | Value;
|
|
15
|
-
|
|
16
|
-
export { type Types, type UnknownObject, _null, _undefined, array, boolean, date, integer, number, object, string, typof };
|
|
18
|
+
//#endregion
|
|
19
|
+
export { type Types, type UnknownObject, _null, _undefined, array, boolean, date, integer, number, object, string, typof };
|
package/dist/main.mjs
CHANGED
|
@@ -1,108 +1,88 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
//#region src/utils/is_iso_date.ts
|
|
2
|
+
const is_iso_date = (value) => {
|
|
3
|
+
if (!/^\d{4}-\d{2}-\d{2}.*$/.test(value)) return false;
|
|
4
|
+
return !Number.isNaN(new Date(value).getTime());
|
|
5
5
|
};
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
return false;
|
|
6
|
+
//#endregion
|
|
7
|
+
//#region src/utils/is_object.ts
|
|
8
|
+
const is_object = (value) => {
|
|
9
|
+
if (typeof value === "object" && value !== null) return true;
|
|
10
|
+
if (typeof value === "string") try {
|
|
11
|
+
const parsed = JSON.parse(value);
|
|
12
|
+
return typeof parsed === "object" && parsed !== null;
|
|
13
|
+
} catch {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
return false;
|
|
19
17
|
};
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
types.push("array");
|
|
55
|
-
} else if (value === null) {
|
|
56
|
-
types.push("null");
|
|
57
|
-
} else if (value === void 0) types.push("undefined");
|
|
58
|
-
return types;
|
|
18
|
+
//#endregion
|
|
19
|
+
//#region src/utils/typof.ts
|
|
20
|
+
const typof = (value) => {
|
|
21
|
+
const types = [];
|
|
22
|
+
if (typeof value === "string") {
|
|
23
|
+
value = value.trim();
|
|
24
|
+
if (typeof value !== "string") return types;
|
|
25
|
+
types.push("string");
|
|
26
|
+
if (value === "") return types;
|
|
27
|
+
if (Number.isFinite(Number(value))) {
|
|
28
|
+
const number = Number(value);
|
|
29
|
+
types.push("number");
|
|
30
|
+
if (Number.isInteger(number)) types.push("integer");
|
|
31
|
+
else types.push("float");
|
|
32
|
+
}
|
|
33
|
+
if (value === "true" || value === "false") types.push("boolean");
|
|
34
|
+
if (is_iso_date(value)) types.push("date");
|
|
35
|
+
if (is_object(value) && !Array.isArray(JSON.parse(value))) types.push("object");
|
|
36
|
+
if (is_object(value) && Array.isArray(JSON.parse(value))) types.push("array");
|
|
37
|
+
if (value === "null") types.push("null");
|
|
38
|
+
if (value === "undefined") types.push("undefined");
|
|
39
|
+
} else if (typeof value === "number") {
|
|
40
|
+
if (!Number.isFinite(value)) return types;
|
|
41
|
+
types.push("number");
|
|
42
|
+
if (Number.isInteger(value)) types.push("integer");
|
|
43
|
+
else types.push("float");
|
|
44
|
+
} else if (typeof value === "boolean") types.push("boolean");
|
|
45
|
+
else if (is_object(value) && !Array.isArray(value)) {
|
|
46
|
+
types.push("object");
|
|
47
|
+
if (value instanceof Date) types.push("date");
|
|
48
|
+
} else if (is_object(value) && Array.isArray(value)) types.push("array");
|
|
49
|
+
else if (value === null) types.push("null");
|
|
50
|
+
else if (value === void 0) types.push("undefined");
|
|
51
|
+
return types;
|
|
59
52
|
};
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
53
|
+
const string = (value) => {
|
|
54
|
+
const types = typof(value);
|
|
55
|
+
return types.includes("object") || types.includes("array") ? JSON.stringify(value) : String(value);
|
|
63
56
|
};
|
|
64
|
-
|
|
65
|
-
|
|
57
|
+
const number = (value) => {
|
|
58
|
+
return typof(value).includes("number") ? Number(value) : NaN;
|
|
66
59
|
};
|
|
67
|
-
|
|
68
|
-
|
|
60
|
+
const integer = (value) => {
|
|
61
|
+
return typof(value).includes("number") ? Math.trunc(Number(value)) : NaN;
|
|
69
62
|
};
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
return false;
|
|
77
|
-
} else return value;
|
|
78
|
-
} else return value;
|
|
63
|
+
const boolean = (value) => {
|
|
64
|
+
const types = typof(value);
|
|
65
|
+
if (types.includes("boolean") && types.includes("string")) if (value === "true") return true;
|
|
66
|
+
else if (value === "false") return false;
|
|
67
|
+
else return value;
|
|
68
|
+
else return value;
|
|
79
69
|
};
|
|
80
|
-
|
|
81
|
-
|
|
70
|
+
const date = (value) => {
|
|
71
|
+
return typof(value).includes("date") ? new Date(value) : value;
|
|
82
72
|
};
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
73
|
+
const object = (value) => {
|
|
74
|
+
const types = typof(value);
|
|
75
|
+
return types.includes("object") && types.includes("string") ? JSON.parse(value) : value;
|
|
86
76
|
};
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
77
|
+
const array = (value) => {
|
|
78
|
+
const types = typof(value);
|
|
79
|
+
return types.includes("array") && types.includes("string") ? JSON.parse(value) : value;
|
|
90
80
|
};
|
|
91
|
-
|
|
92
|
-
|
|
81
|
+
const _null = (value) => {
|
|
82
|
+
return typof(value).includes("null") ? null : value;
|
|
93
83
|
};
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
};
|
|
97
|
-
export {
|
|
98
|
-
_null,
|
|
99
|
-
_undefined,
|
|
100
|
-
array,
|
|
101
|
-
boolean,
|
|
102
|
-
date,
|
|
103
|
-
integer,
|
|
104
|
-
number,
|
|
105
|
-
object,
|
|
106
|
-
string,
|
|
107
|
-
typof
|
|
84
|
+
const _undefined = (value) => {
|
|
85
|
+
return typof(value).includes("undefined") ? void 0 : value;
|
|
108
86
|
};
|
|
87
|
+
//#endregion
|
|
88
|
+
export { _null, _undefined, array, boolean, date, integer, number, object, string, typof };
|
package/package.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "typof",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.18",
|
|
4
4
|
"description": "Infer types.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/keift/typof",
|
|
7
7
|
"bugs": "https://github.com/keift/typof/issues",
|
|
8
|
-
"main": "./dist/main.
|
|
8
|
+
"main": "./dist/main.cjs",
|
|
9
9
|
"module": "./dist/main.mjs",
|
|
10
|
-
"types": "./dist/main.d.
|
|
10
|
+
"types": "./dist/main.d.mts",
|
|
11
11
|
"scripts": {
|
|
12
12
|
"tests": "bun run lint && bun test",
|
|
13
|
-
"build": "
|
|
13
|
+
"build": "tsdown",
|
|
14
14
|
"prettier": "prettier --write ./",
|
|
15
15
|
"lint": "eslint ./"
|
|
16
16
|
},
|
|
@@ -18,7 +18,8 @@
|
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"prettier": "latest",
|
|
20
20
|
"rulint": "latest",
|
|
21
|
-
"
|
|
21
|
+
"tsdown": "latest",
|
|
22
|
+
"unrun": "latest"
|
|
22
23
|
},
|
|
23
24
|
"repository": {
|
|
24
25
|
"type": "git",
|
package/dist/main.js
DELETED
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
|
|
20
|
-
// src/main.ts
|
|
21
|
-
var main_exports = {};
|
|
22
|
-
__export(main_exports, {
|
|
23
|
-
_null: () => _null,
|
|
24
|
-
_undefined: () => _undefined,
|
|
25
|
-
array: () => array,
|
|
26
|
-
boolean: () => boolean,
|
|
27
|
-
date: () => date,
|
|
28
|
-
integer: () => integer,
|
|
29
|
-
number: () => number,
|
|
30
|
-
object: () => object,
|
|
31
|
-
string: () => string,
|
|
32
|
-
typof: () => typof
|
|
33
|
-
});
|
|
34
|
-
module.exports = __toCommonJS(main_exports);
|
|
35
|
-
|
|
36
|
-
// src/utils/IsISODate.util.ts
|
|
37
|
-
var isISODate = (value) => {
|
|
38
|
-
if (!/^\d{4}-\d{2}-\d{2}.*$/.test(value)) return false;
|
|
39
|
-
return !Number.isNaN(new Date(value).getTime());
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
// src/utils/IsObject.util.ts
|
|
43
|
-
var isObject = (value) => {
|
|
44
|
-
if (typeof value === "object" && value !== null) return true;
|
|
45
|
-
if (typeof value === "string") {
|
|
46
|
-
try {
|
|
47
|
-
const parsed = JSON.parse(value);
|
|
48
|
-
return typeof parsed === "object" && parsed !== null;
|
|
49
|
-
} catch {
|
|
50
|
-
return false;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
return false;
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
// src/utils/Typof.util.ts
|
|
57
|
-
var typof = (value) => {
|
|
58
|
-
const types = [];
|
|
59
|
-
if (typeof value === "string") {
|
|
60
|
-
value = value.trim();
|
|
61
|
-
if (typeof value !== "string") return types;
|
|
62
|
-
types.push("string");
|
|
63
|
-
if (value === "") return types;
|
|
64
|
-
if (Number.isFinite(Number(value))) {
|
|
65
|
-
const number2 = Number(value);
|
|
66
|
-
types.push("number");
|
|
67
|
-
if (Number.isInteger(number2)) {
|
|
68
|
-
types.push("integer");
|
|
69
|
-
} else types.push("float");
|
|
70
|
-
}
|
|
71
|
-
if (value === "true" || value === "false") types.push("boolean");
|
|
72
|
-
if (isISODate(value)) types.push("date");
|
|
73
|
-
if (isObject(value) && !Array.isArray(JSON.parse(value))) types.push("object");
|
|
74
|
-
if (isObject(value) && Array.isArray(JSON.parse(value))) types.push("array");
|
|
75
|
-
if (value === "null") types.push("null");
|
|
76
|
-
if (value === "undefined") types.push("undefined");
|
|
77
|
-
} else if (typeof value === "number") {
|
|
78
|
-
if (!Number.isFinite(value)) return types;
|
|
79
|
-
types.push("number");
|
|
80
|
-
if (Number.isInteger(value)) {
|
|
81
|
-
types.push("integer");
|
|
82
|
-
} else types.push("float");
|
|
83
|
-
} else if (typeof value === "boolean") {
|
|
84
|
-
types.push("boolean");
|
|
85
|
-
} else if (isObject(value) && !Array.isArray(value)) {
|
|
86
|
-
types.push("object");
|
|
87
|
-
if (value instanceof Date) types.push("date");
|
|
88
|
-
} else if (isObject(value) && Array.isArray(value)) {
|
|
89
|
-
types.push("array");
|
|
90
|
-
} else if (value === null) {
|
|
91
|
-
types.push("null");
|
|
92
|
-
} else if (value === void 0) types.push("undefined");
|
|
93
|
-
return types;
|
|
94
|
-
};
|
|
95
|
-
var string = (value) => {
|
|
96
|
-
const types = typof(value);
|
|
97
|
-
return types.includes("object") || types.includes("array") ? JSON.stringify(value) : String(value);
|
|
98
|
-
};
|
|
99
|
-
var number = (value) => {
|
|
100
|
-
return typof(value).includes("number") ? Number(value) : NaN;
|
|
101
|
-
};
|
|
102
|
-
var integer = (value) => {
|
|
103
|
-
return typof(value).includes("number") ? Math.trunc(Number(value)) : NaN;
|
|
104
|
-
};
|
|
105
|
-
var boolean = (value) => {
|
|
106
|
-
const types = typof(value);
|
|
107
|
-
if (types.includes("boolean") && types.includes("string")) {
|
|
108
|
-
if (value === "true") {
|
|
109
|
-
return true;
|
|
110
|
-
} else if (value === "false") {
|
|
111
|
-
return false;
|
|
112
|
-
} else return value;
|
|
113
|
-
} else return value;
|
|
114
|
-
};
|
|
115
|
-
var date = (value) => {
|
|
116
|
-
return typof(value).includes("date") ? new Date(value) : value;
|
|
117
|
-
};
|
|
118
|
-
var object = (value) => {
|
|
119
|
-
const types = typof(value);
|
|
120
|
-
return types.includes("object") && types.includes("string") ? JSON.parse(value) : value;
|
|
121
|
-
};
|
|
122
|
-
var array = (value) => {
|
|
123
|
-
const types = typof(value);
|
|
124
|
-
return types.includes("array") && types.includes("string") ? JSON.parse(value) : value;
|
|
125
|
-
};
|
|
126
|
-
var _null = (value) => {
|
|
127
|
-
return typof(value).includes("null") ? null : value;
|
|
128
|
-
};
|
|
129
|
-
var _undefined = (value) => {
|
|
130
|
-
return typof(value).includes("undefined") ? void 0 : value;
|
|
131
|
-
};
|
|
132
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
133
|
-
0 && (module.exports = {
|
|
134
|
-
_null,
|
|
135
|
-
_undefined,
|
|
136
|
-
array,
|
|
137
|
-
boolean,
|
|
138
|
-
date,
|
|
139
|
-
integer,
|
|
140
|
-
number,
|
|
141
|
-
object,
|
|
142
|
-
string,
|
|
143
|
-
typof
|
|
144
|
-
});
|