is-what 3.14.1 → 4.1.2
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +113 -29
- package/dist/{index.cjs.js → index.cjs} +23 -5
- package/dist/{index.esm.js → index.es.js} +22 -6
- package/{types → dist/types}/index.d.ts +14 -0
- package/package.json +68 -39
- package/.babelrc +0 -3
- package/.eslintignore +0 -9
- package/.eslintrc.js +0 -18
- package/.github/FUNDING.yml +0 -12
- package/.prettierrc +0 -9
- package/.vscode/settings.json +0 -9
- package/build.js +0 -60
- package/src/index.ts +0 -395
- package/test/ava.ts +0 -376
- package/test/index.test.js +0 -15
- package/tsconfig.json +0 -11
package/README.md
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
# is What? 🙉
|
2
2
|
|
3
|
-
|
3
|
+
<a href="https://www.npmjs.com/package/is-what"><img src="https://img.shields.io/npm/v/is-what.svg" alt="Total Downloads"></a>
|
4
|
+
<a href="https://www.npmjs.com/package/is-what"><img src="https://img.shields.io/npm/dw/is-what.svg" alt="Latest Stable Version"></a>
|
5
|
+
|
6
|
+
Very simple & small JS type check functions. It's fully TypeScript supported!
|
4
7
|
|
5
8
|
```
|
6
9
|
npm i is-what
|
@@ -13,6 +16,7 @@ Or for deno available at: `"deno.land/x/is_what"`
|
|
13
16
|
I built is-what because the existing solutions were all too complex or too poorly built.
|
14
17
|
|
15
18
|
I was looking for:
|
19
|
+
|
16
20
|
- A simple way to check any kind of type (including non-primitives)
|
17
21
|
- Be able to check if an object is a plain object `{}` or a special object (like a class instance) ‼️
|
18
22
|
- Let TypeScript automatically know what type a value is when checking
|
@@ -35,6 +39,12 @@ import { isString, isDate, isPlainObject } from 'is-what'
|
|
35
39
|
### Simple type check functions
|
36
40
|
|
37
41
|
```js
|
42
|
+
// basics
|
43
|
+
isBoolean(true) // true
|
44
|
+
isBoolean(false) // true
|
45
|
+
isUndefined(undefined) // true
|
46
|
+
isNull(null) // true
|
47
|
+
|
38
48
|
// strings
|
39
49
|
isString('') // true
|
40
50
|
isEmptyString('') // true
|
@@ -42,38 +52,86 @@ isFullString('') // false
|
|
42
52
|
|
43
53
|
// numbers
|
44
54
|
isNumber(0) // true
|
45
|
-
isNumber(
|
55
|
+
isNumber('0') // false
|
56
|
+
isNumber(NaN) // false *
|
57
|
+
isPositiveNumber(1) // true
|
58
|
+
isNegativeNumber(-1) // true
|
59
|
+
// * see below for special NaN use cases!
|
60
|
+
|
61
|
+
// arrays
|
62
|
+
isArray([]) // true
|
63
|
+
isEmptyArray([]) // true
|
64
|
+
isFullArray([1]) // true
|
65
|
+
|
66
|
+
// objects
|
67
|
+
isPlainObject({}) // true *
|
68
|
+
isEmptyObject({}) // true
|
69
|
+
isFullObject({ a: 1 }) // true
|
70
|
+
// * see below for special object (& class instance) use cases!
|
71
|
+
|
72
|
+
// functions
|
73
|
+
isFunction(function () {}) // true
|
74
|
+
isFunction(() => {}) // true
|
46
75
|
|
47
76
|
// dates
|
48
77
|
isDate(new Date()) // true
|
49
78
|
isDate(new Date('invalid date')) // false
|
50
79
|
|
80
|
+
// maps & sets
|
81
|
+
isMap(new Map()) // true
|
82
|
+
isSet(new Set()) // true
|
83
|
+
isWeakMap(new WeakMap()) // true
|
84
|
+
isWeakSet(new WeakSet()) // true
|
85
|
+
|
51
86
|
// others
|
52
|
-
isBoolean(false) // true
|
53
|
-
isFunction(function () {}) // true
|
54
|
-
isArray([]) // true
|
55
|
-
isUndefined(undefined) // true
|
56
|
-
isNull(null) // true
|
57
87
|
isRegExp(/\s/gi) // true
|
58
88
|
isSymbol(Symbol()) // true
|
59
89
|
isBlob(new Blob()) // true
|
60
90
|
isFile(new File([''], '', { type: 'text/html' })) // true
|
91
|
+
isError(new Error('')) // true
|
92
|
+
isPromise(new Promise((resolve) => {})) // true
|
61
93
|
|
62
94
|
// primitives
|
63
95
|
isPrimitive('') // true
|
64
96
|
// true for any of: boolean, null, undefined, number, string, symbol
|
65
97
|
```
|
66
98
|
|
67
|
-
###
|
99
|
+
### Let's talk about NaN
|
68
100
|
|
69
|
-
|
101
|
+
`isNaN` is a built-in JS Function but it really makes no sense:
|
70
102
|
|
71
103
|
```js
|
72
|
-
|
104
|
+
// 1)
|
105
|
+
typeof NaN === 'number' // true
|
106
|
+
// 🤔 ("not a number" is a "number"...)
|
73
107
|
|
74
|
-
|
75
|
-
//
|
76
|
-
|
108
|
+
// 2)
|
109
|
+
isNaN('1') // false
|
110
|
+
// 🤔 the string '1' is not-"not a number"... so it's a number??
|
111
|
+
|
112
|
+
// 3)
|
113
|
+
isNaN('one') // true
|
114
|
+
// 🤔 'one' is NaN but `NaN === 'one'` is false...
|
115
|
+
```
|
116
|
+
|
117
|
+
With is-what the way we treat NaN makes a little bit more sense:
|
118
|
+
|
119
|
+
```js
|
120
|
+
import { isNumber, isNaNValue } from 'is-what'
|
121
|
+
|
122
|
+
// 1)
|
123
|
+
isNumber(NaN) // false!
|
124
|
+
// let's not treat NaN as a number
|
125
|
+
|
126
|
+
// 2)
|
127
|
+
isNaNValue('1') // false
|
128
|
+
// if it's not NaN, it's not NaN!!
|
129
|
+
|
130
|
+
// 3)
|
131
|
+
isNaNValue('one') // false
|
132
|
+
// if it's not NaN, it's not NaN!!
|
133
|
+
|
134
|
+
isNaNValue(NaN) // true
|
77
135
|
```
|
78
136
|
|
79
137
|
### isPlainObject vs isAnyObject
|
@@ -85,11 +143,11 @@ Checking for a JavaScript object can be really difficult. In JavaScript you can
|
|
85
143
|
|
86
144
|
```js
|
87
145
|
// define a plain object
|
88
|
-
const plainObject = {hello: 'I am a good old object.'}
|
146
|
+
const plainObject = { hello: 'I am a good old object.' }
|
89
147
|
|
90
148
|
// define a special object
|
91
149
|
class SpecialObject {
|
92
|
-
constructor
|
150
|
+
constructor(somethingSpecial) {
|
93
151
|
this.speciality = somethingSpecial
|
94
152
|
}
|
95
153
|
}
|
@@ -108,18 +166,30 @@ getType(specialObject) // returns 'Object'
|
|
108
166
|
|
109
167
|
> Please note that `isPlainObject` will only return `true` for normal plain JavaScript objects.
|
110
168
|
|
169
|
+
### Getting and checking for specific types
|
170
|
+
|
171
|
+
You can check for specific types with `getType` and `isType`:
|
172
|
+
|
173
|
+
```js
|
174
|
+
import { getType, isType } from 'is-what'
|
175
|
+
|
176
|
+
getType('') // returns 'String'
|
177
|
+
// pass a Type as second param:
|
178
|
+
isType('', String) // returns true
|
179
|
+
```
|
180
|
+
|
111
181
|
## TypeScript
|
112
182
|
|
113
183
|
is-what makes TypeScript know the type during if statements. This means that a check returns the type of the payload for TypeScript users.
|
114
184
|
|
115
185
|
```ts
|
116
|
-
function isNumber
|
186
|
+
function isNumber(payload: any): payload is number {
|
117
187
|
// return boolean
|
118
188
|
}
|
119
189
|
// As you can see above, all functions return a boolean for JavaScript, but pass the payload type to TypeScript.
|
120
190
|
|
121
191
|
// usage example:
|
122
|
-
function fn
|
192
|
+
function fn(payload: string | number): number {
|
123
193
|
if (isNumber(payload)) {
|
124
194
|
// ↑ TypeScript already knows payload is a number here!
|
125
195
|
return payload
|
@@ -131,8 +201,8 @@ function fn (payload: string | number): number {
|
|
131
201
|
`isPlainObject` and `isAnyObject` with TypeScript will declare the payload to be an object type with any props:
|
132
202
|
|
133
203
|
```ts
|
134
|
-
function isPlainObject
|
135
|
-
function isAnyObject
|
204
|
+
function isPlainObject(payload: any): payload is { [key: string]: any }
|
205
|
+
function isAnyObject(payload: any): payload is { [key: string]: any }
|
136
206
|
// The reason to return `{[key: string]: any}` is to be able to do
|
137
207
|
if (isPlainObject(payload) && payload.id) return payload.id
|
138
208
|
// if isPlainObject() would return `payload is object` then it would give an error at `payload.id`
|
@@ -140,20 +210,34 @@ if (isPlainObject(payload) && payload.id) return payload.id
|
|
140
210
|
|
141
211
|
### isObjectLike
|
142
212
|
|
143
|
-
If you want more control over
|
213
|
+
If you want more control over what kind of interface/type is casted when checking for objects.
|
214
|
+
|
215
|
+
To cast to a specific type while checking for `isAnyObject`, can use `isObjectLike<T>`:
|
144
216
|
|
145
217
|
```ts
|
146
218
|
import { isObjectLike } from 'is-what'
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
//
|
219
|
+
|
220
|
+
const payload = { name: 'Mesqueeb' } // current type: `{ name: string }`
|
221
|
+
|
222
|
+
// Without casting:
|
223
|
+
if (isAnyObject(payload)) {
|
224
|
+
// in here `payload` is casted to: `Record<string | number | symbol, any>`
|
225
|
+
// WE LOOSE THE TYPE!
|
226
|
+
}
|
227
|
+
|
228
|
+
// With casting:
|
229
|
+
// you can pass a specific type for TS that will be casted when the function returns
|
230
|
+
if (isObjectLike<{ name: string }>(payload)) {
|
231
|
+
// in here `payload` is casted to: `{ name: string }`
|
232
|
+
}
|
151
233
|
```
|
152
234
|
|
235
|
+
Please note: this library will not actually check the shape of the object, you need to do that yourself.
|
236
|
+
|
153
237
|
`isObjectLike<T>` works like this under the hood:
|
154
238
|
|
155
239
|
```ts
|
156
|
-
function isObjectLike<T extends object>
|
240
|
+
function isObjectLike<T extends object>(payload: any): payload is T {
|
157
241
|
return isAnyObject(payload)
|
158
242
|
}
|
159
243
|
```
|
@@ -173,16 +257,16 @@ function isObjectLike<T extends object> (payload: any): payload is T {
|
|
173
257
|
It's litterally just these functions:
|
174
258
|
|
175
259
|
```js
|
176
|
-
function getType
|
260
|
+
function getType(payload) {
|
177
261
|
return Object.prototype.toString.call(payload).slice(8, -1)
|
178
262
|
}
|
179
|
-
function isUndefined
|
263
|
+
function isUndefined(payload) {
|
180
264
|
return getType(payload) === 'Undefined'
|
181
265
|
}
|
182
|
-
function isString
|
266
|
+
function isString(payload) {
|
183
267
|
return getType(payload) === 'String'
|
184
268
|
}
|
185
|
-
function isAnyObject
|
269
|
+
function isAnyObject(payload) {
|
186
270
|
return getType(payload) === 'Object'
|
187
271
|
}
|
188
272
|
// etc...
|
@@ -162,6 +162,24 @@ function isEmptyString(payload) {
|
|
162
162
|
function isNumber(payload) {
|
163
163
|
return getType(payload) === 'Number' && !isNaN(payload);
|
164
164
|
}
|
165
|
+
/**
|
166
|
+
* Returns whether the payload is a positive number (but not 0)
|
167
|
+
*
|
168
|
+
* @param {*} payload
|
169
|
+
* @returns {payload is number}
|
170
|
+
*/
|
171
|
+
function isPositiveNumber(payload) {
|
172
|
+
return isNumber(payload) && payload > 0;
|
173
|
+
}
|
174
|
+
/**
|
175
|
+
* Returns whether the payload is a negative number (but not 0)
|
176
|
+
*
|
177
|
+
* @param {*} payload
|
178
|
+
* @returns {payload is number}
|
179
|
+
*/
|
180
|
+
function isNegativeNumber(payload) {
|
181
|
+
return isNumber(payload) && payload < 0;
|
182
|
+
}
|
165
183
|
/**
|
166
184
|
* Returns whether the payload is a boolean
|
167
185
|
*
|
@@ -299,11 +317,9 @@ function isPrimitive(payload) {
|
|
299
317
|
* @param {*} payload
|
300
318
|
* @returns {(payload is null | undefined)}
|
301
319
|
*/
|
302
|
-
|
320
|
+
const isNullOrUndefined = isOneOf(isNull, isUndefined);
|
303
321
|
function isOneOf(a, b, c, d, e) {
|
304
|
-
return
|
305
|
-
return a(value) || b(value) || (!!c && c(value)) || (!!d && d(value)) || (!!e && e(value));
|
306
|
-
};
|
322
|
+
return (value) => a(value) || b(value) || (!!c && c(value)) || (!!d && d(value)) || (!!e && e(value));
|
307
323
|
}
|
308
324
|
/**
|
309
325
|
* Does a generic check to check that the given payload is of a given type.
|
@@ -324,7 +340,7 @@ function isType(payload, type) {
|
|
324
340
|
throw new TypeError('Type is not a class');
|
325
341
|
}
|
326
342
|
// Classes usually have names (as functions usually have names)
|
327
|
-
|
343
|
+
const name = type.name;
|
328
344
|
return getType(payload) === name || Boolean(payload && payload.constructor === type);
|
329
345
|
}
|
330
346
|
|
@@ -345,6 +361,7 @@ exports.isFullString = isFullString;
|
|
345
361
|
exports.isFunction = isFunction;
|
346
362
|
exports.isMap = isMap;
|
347
363
|
exports.isNaNValue = isNaNValue;
|
364
|
+
exports.isNegativeNumber = isNegativeNumber;
|
348
365
|
exports.isNull = isNull;
|
349
366
|
exports.isNullOrUndefined = isNullOrUndefined;
|
350
367
|
exports.isNumber = isNumber;
|
@@ -352,6 +369,7 @@ exports.isObject = isObject;
|
|
352
369
|
exports.isObjectLike = isObjectLike;
|
353
370
|
exports.isOneOf = isOneOf;
|
354
371
|
exports.isPlainObject = isPlainObject;
|
372
|
+
exports.isPositiveNumber = isPositiveNumber;
|
355
373
|
exports.isPrimitive = isPrimitive;
|
356
374
|
exports.isPromise = isPromise;
|
357
375
|
exports.isRegExp = isRegExp;
|
@@ -158,6 +158,24 @@ function isEmptyString(payload) {
|
|
158
158
|
function isNumber(payload) {
|
159
159
|
return getType(payload) === 'Number' && !isNaN(payload);
|
160
160
|
}
|
161
|
+
/**
|
162
|
+
* Returns whether the payload is a positive number (but not 0)
|
163
|
+
*
|
164
|
+
* @param {*} payload
|
165
|
+
* @returns {payload is number}
|
166
|
+
*/
|
167
|
+
function isPositiveNumber(payload) {
|
168
|
+
return isNumber(payload) && payload > 0;
|
169
|
+
}
|
170
|
+
/**
|
171
|
+
* Returns whether the payload is a negative number (but not 0)
|
172
|
+
*
|
173
|
+
* @param {*} payload
|
174
|
+
* @returns {payload is number}
|
175
|
+
*/
|
176
|
+
function isNegativeNumber(payload) {
|
177
|
+
return isNumber(payload) && payload < 0;
|
178
|
+
}
|
161
179
|
/**
|
162
180
|
* Returns whether the payload is a boolean
|
163
181
|
*
|
@@ -295,11 +313,9 @@ function isPrimitive(payload) {
|
|
295
313
|
* @param {*} payload
|
296
314
|
* @returns {(payload is null | undefined)}
|
297
315
|
*/
|
298
|
-
|
316
|
+
const isNullOrUndefined = isOneOf(isNull, isUndefined);
|
299
317
|
function isOneOf(a, b, c, d, e) {
|
300
|
-
return
|
301
|
-
return a(value) || b(value) || (!!c && c(value)) || (!!d && d(value)) || (!!e && e(value));
|
302
|
-
};
|
318
|
+
return (value) => a(value) || b(value) || (!!c && c(value)) || (!!d && d(value)) || (!!e && e(value));
|
303
319
|
}
|
304
320
|
/**
|
305
321
|
* Does a generic check to check that the given payload is of a given type.
|
@@ -320,8 +336,8 @@ function isType(payload, type) {
|
|
320
336
|
throw new TypeError('Type is not a class');
|
321
337
|
}
|
322
338
|
// Classes usually have names (as functions usually have names)
|
323
|
-
|
339
|
+
const name = type.name;
|
324
340
|
return getType(payload) === name || Boolean(payload && payload.constructor === type);
|
325
341
|
}
|
326
342
|
|
327
|
-
export { getType, isAnyObject, isArray, isBlob, isBoolean, isDate, isEmptyArray, isEmptyObject, isEmptyString, isError, isFile, isFullArray, isFullObject, isFullString, isFunction, isMap, isNaNValue, isNull, isNullOrUndefined, isNumber, isObject, isObjectLike, isOneOf, isPlainObject, isPrimitive, isPromise, isRegExp, isSet, isString, isSymbol, isType, isUndefined, isWeakMap, isWeakSet };
|
343
|
+
export { getType, isAnyObject, isArray, isBlob, isBoolean, isDate, isEmptyArray, isEmptyObject, isEmptyString, isError, isFile, isFullArray, isFullObject, isFullString, isFunction, isMap, isNaNValue, isNegativeNumber, isNull, isNullOrUndefined, isNumber, isObject, isObjectLike, isOneOf, isPlainObject, isPositiveNumber, isPrimitive, isPromise, isRegExp, isSet, isString, isSymbol, isType, isUndefined, isWeakMap, isWeakSet };
|
@@ -129,6 +129,20 @@ export declare function isEmptyString(payload: any): payload is string;
|
|
129
129
|
* @returns {payload is number}
|
130
130
|
*/
|
131
131
|
export declare function isNumber(payload: any): payload is number;
|
132
|
+
/**
|
133
|
+
* Returns whether the payload is a positive number (but not 0)
|
134
|
+
*
|
135
|
+
* @param {*} payload
|
136
|
+
* @returns {payload is number}
|
137
|
+
*/
|
138
|
+
export declare function isPositiveNumber(payload: any): payload is number;
|
139
|
+
/**
|
140
|
+
* Returns whether the payload is a negative number (but not 0)
|
141
|
+
*
|
142
|
+
* @param {*} payload
|
143
|
+
* @returns {payload is number}
|
144
|
+
*/
|
145
|
+
export declare function isNegativeNumber(payload: any): payload is number;
|
132
146
|
/**
|
133
147
|
* Returns whether the payload is a boolean
|
134
148
|
*
|
package/package.json
CHANGED
@@ -1,19 +1,31 @@
|
|
1
1
|
{
|
2
2
|
"name": "is-what",
|
3
3
|
"sideEffects": false,
|
4
|
-
"
|
4
|
+
"type": "module",
|
5
|
+
"version": "4.1.2",
|
5
6
|
"description": "JS type check (TypeScript supported) functions like `isPlainObject() isArray()` etc. A simple & small integration.",
|
6
|
-
"
|
7
|
-
"
|
8
|
-
"
|
7
|
+
"module": "./dist/index.es.js",
|
8
|
+
"main": "./dist/index.cjs",
|
9
|
+
"types": "./dist/types/index.d.ts",
|
10
|
+
"exports": {
|
11
|
+
".": {
|
12
|
+
"import": "./dist/index.es.js",
|
13
|
+
"require": "./dist/index.cjs",
|
14
|
+
"types": "./dist/types/index.d.ts"
|
15
|
+
}
|
16
|
+
},
|
17
|
+
"files": [
|
18
|
+
"dist"
|
19
|
+
],
|
20
|
+
"engines": {
|
21
|
+
"node": ">=12.13",
|
22
|
+
"npm": ">=7"
|
23
|
+
},
|
9
24
|
"scripts": {
|
10
|
-
"test": "
|
11
|
-
"
|
12
|
-
"
|
13
|
-
"
|
14
|
-
"rollup": "rollup -c ./build.js",
|
15
|
-
"build": "rimraf types && rimraf dist && npm run lint && npm run rollup && npm run test && npm run jest",
|
16
|
-
"release": "npm run build && np"
|
25
|
+
"test": "vitest run",
|
26
|
+
"lint": "tsc --noEmit ./src/index.ts && eslint ./src --ext .ts",
|
27
|
+
"build": "rollup -c ./scripts/build.js",
|
28
|
+
"release": "npm run lint && del dist && npm run build && np"
|
17
29
|
},
|
18
30
|
"repository": {
|
19
31
|
"type": "git",
|
@@ -41,46 +53,63 @@
|
|
41
53
|
"is-plain-object"
|
42
54
|
],
|
43
55
|
"author": "Luca Ban - Mesqueeb",
|
56
|
+
"funding": "https://github.com/sponsors/mesqueeb",
|
44
57
|
"license": "MIT",
|
45
58
|
"bugs": {
|
46
59
|
"url": "https://github.com/mesqueeb/is-what/issues"
|
47
60
|
},
|
48
61
|
"homepage": "https://github.com/mesqueeb/is-what#readme",
|
49
62
|
"devDependencies": {
|
50
|
-
"@
|
51
|
-
"@
|
52
|
-
"
|
53
|
-
"
|
54
|
-
"
|
55
|
-
"
|
56
|
-
"
|
57
|
-
"
|
58
|
-
"
|
59
|
-
"
|
60
|
-
"
|
61
|
-
"
|
62
|
-
"jest": "^26.6.3",
|
63
|
-
"np": "^7.4.0",
|
64
|
-
"prettier": "^2.2.1",
|
65
|
-
"regenerator-runtime": "^0.13.7",
|
66
|
-
"rimraf": "^3.0.2",
|
67
|
-
"rollup": "^2.39.0",
|
68
|
-
"rollup-plugin-typescript2": "^0.30.0",
|
69
|
-
"ts-node": "^9.1.1",
|
70
|
-
"tsconfig-paths": "^3.9.0",
|
71
|
-
"typescript": "^4.1.5"
|
63
|
+
"@typescript-eslint/eslint-plugin": "^5.10.1",
|
64
|
+
"@typescript-eslint/parser": "^5.10.1",
|
65
|
+
"del-cli": "^4.0.1",
|
66
|
+
"eslint": "^8.7.0",
|
67
|
+
"eslint-config-prettier": "^8.3.0",
|
68
|
+
"eslint-plugin-tree-shaking": "^1.10.0",
|
69
|
+
"np": "^7.6.0",
|
70
|
+
"prettier": "^2.5.1",
|
71
|
+
"rollup": "^2.66.0",
|
72
|
+
"rollup-plugin-typescript2": "^0.31.1",
|
73
|
+
"typescript": "^4.5.5",
|
74
|
+
"vitest": "^0.2.1"
|
72
75
|
},
|
73
76
|
"ava": {
|
74
|
-
"extensions":
|
75
|
-
"ts"
|
76
|
-
|
77
|
-
"
|
78
|
-
"
|
79
|
-
"ts-node/register"
|
77
|
+
"extensions": {
|
78
|
+
"ts": "module"
|
79
|
+
},
|
80
|
+
"nodeArguments": [
|
81
|
+
"--loader=ts-node/esm"
|
80
82
|
]
|
81
83
|
},
|
82
84
|
"np": {
|
83
85
|
"yarn": false,
|
84
86
|
"branch": "production"
|
87
|
+
},
|
88
|
+
"eslintConfig": {
|
89
|
+
"ignorePatterns": [
|
90
|
+
"node_modules",
|
91
|
+
"dist",
|
92
|
+
"scripts",
|
93
|
+
"test"
|
94
|
+
],
|
95
|
+
"root": true,
|
96
|
+
"parser": "@typescript-eslint/parser",
|
97
|
+
"plugins": [
|
98
|
+
"@typescript-eslint",
|
99
|
+
"tree-shaking"
|
100
|
+
],
|
101
|
+
"extends": [
|
102
|
+
"eslint:recommended",
|
103
|
+
"plugin:@typescript-eslint/eslint-recommended",
|
104
|
+
"plugin:@typescript-eslint/recommended",
|
105
|
+
"prettier"
|
106
|
+
],
|
107
|
+
"rules": {
|
108
|
+
"@typescript-eslint/no-empty-function": "off",
|
109
|
+
"@typescript-eslint/no-explicit-any": "off",
|
110
|
+
"@typescript-eslint/ban-ts-ignore": "off",
|
111
|
+
"tree-shaking/no-side-effects-in-initialization": "error",
|
112
|
+
"@typescript-eslint/ban-ts-comment": "off"
|
113
|
+
}
|
85
114
|
}
|
86
115
|
}
|
package/.babelrc
DELETED
package/.eslintignore
DELETED
package/.eslintrc.js
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
// npm i -D @typescript-eslint/eslint-plugin @typescript-eslint/parser eslint eslint-config-prettier eslint-plugin-tree-shaking
|
2
|
-
module.exports = {
|
3
|
-
root: true,
|
4
|
-
parser: '@typescript-eslint/parser',
|
5
|
-
plugins: ['@typescript-eslint', 'tree-shaking'],
|
6
|
-
extends: [
|
7
|
-
'eslint:recommended',
|
8
|
-
'plugin:@typescript-eslint/eslint-recommended',
|
9
|
-
'plugin:@typescript-eslint/recommended',
|
10
|
-
'prettier/@typescript-eslint',
|
11
|
-
],
|
12
|
-
rules: {
|
13
|
-
'@typescript-eslint/no-explicit-any': 'off',
|
14
|
-
'@typescript-eslint/ban-ts-ignore': 'off',
|
15
|
-
'tree-shaking/no-side-effects-in-initialization': 'error',
|
16
|
-
'@typescript-eslint/explicit-module-boundary-types': 'off'
|
17
|
-
},
|
18
|
-
}
|
package/.github/FUNDING.yml
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
# These are supported funding model platforms
|
2
|
-
|
3
|
-
github: mesqueeb
|
4
|
-
patreon: # Replace with a single Patreon username
|
5
|
-
open_collective: # Replace with a single Open Collective username
|
6
|
-
ko_fi: # Replace with a single Ko-fi username
|
7
|
-
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
8
|
-
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
9
|
-
liberapay: # Replace with a single Liberapay username
|
10
|
-
issuehunt: # Replace with a single IssueHunt username
|
11
|
-
otechie: # Replace with a single Otechie username
|
12
|
-
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
|
package/.prettierrc
DELETED
package/.vscode/settings.json
DELETED
@@ -1,9 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"editor.formatOnSave": true,
|
3
|
-
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
4
|
-
"editor.tabSize": 2, // make sure this is the same as .prettierrc
|
5
|
-
"editor.insertSpaces": true,
|
6
|
-
"files.insertFinalNewline": true,
|
7
|
-
"files.trimFinalNewlines": true,
|
8
|
-
"files.trimTrailingWhitespace": true
|
9
|
-
}
|
package/build.js
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
/* eslint-disable */
|
2
|
-
|
3
|
-
// npm install rollup-plugin-typescript2 typescript --save-dev
|
4
|
-
import typescript from 'rollup-plugin-typescript2'
|
5
|
-
// import { terser } from 'rollup-plugin-terser'
|
6
|
-
// import resolve from 'rollup-plugin-node-resolve'
|
7
|
-
|
8
|
-
// ------------------------------------------------------------------------------------------
|
9
|
-
// formats
|
10
|
-
// ------------------------------------------------------------------------------------------
|
11
|
-
// amd – Asynchronous Module Definition, used with module loaders like RequireJS
|
12
|
-
// cjs – CommonJS, suitable for Node and Browserify/Webpack
|
13
|
-
// esm – Keep the bundle as an ES module file
|
14
|
-
// iife – A self-executing function, suitable for inclusion as a <script> tag. (If you want to create a bundle for your application, you probably want to use this, because it leads to smaller file sizes.)
|
15
|
-
// umd – Universal Module Definition, works as amd, cjs and iife all in one
|
16
|
-
// system – Native format of the SystemJS loader
|
17
|
-
|
18
|
-
// ------------------------------------------------------------------------------------------
|
19
|
-
// setup
|
20
|
-
// ------------------------------------------------------------------------------------------
|
21
|
-
const pkg = require('./package.json')
|
22
|
-
const name = pkg.name
|
23
|
-
const className = name.replace(/(^\w|-\w)/g, c => c.replace('-', '').toUpperCase())
|
24
|
-
const external = Object.keys(pkg.dependencies || [])
|
25
|
-
const plugins = [
|
26
|
-
typescript({ useTsconfigDeclarationDir: true, tsconfigOverride: { exclude: ['test/**/*'] } }),
|
27
|
-
]
|
28
|
-
|
29
|
-
// ------------------------------------------------------------------------------------------
|
30
|
-
// Builds
|
31
|
-
// ------------------------------------------------------------------------------------------
|
32
|
-
function defaults (config) {
|
33
|
-
// defaults
|
34
|
-
const defaults = {
|
35
|
-
plugins,
|
36
|
-
external,
|
37
|
-
}
|
38
|
-
// defaults.output
|
39
|
-
config.output = config.output.map(output => {
|
40
|
-
return Object.assign(
|
41
|
-
{
|
42
|
-
sourcemap: false,
|
43
|
-
name: className,
|
44
|
-
exports: 'named',
|
45
|
-
},
|
46
|
-
output
|
47
|
-
)
|
48
|
-
})
|
49
|
-
return Object.assign(defaults, config)
|
50
|
-
}
|
51
|
-
|
52
|
-
export default [
|
53
|
-
defaults({
|
54
|
-
input: 'src/index.ts',
|
55
|
-
output: [
|
56
|
-
{ file: 'dist/index.cjs.js', format: 'cjs' },
|
57
|
-
{ file: 'dist/index.esm.js', format: 'esm' },
|
58
|
-
],
|
59
|
-
}),
|
60
|
-
]
|