extra-utils 5.0.1 → 5.1.1
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 +71 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/pipe-async.d.ts +44 -0
- package/lib/pipe-async.js +8 -0
- package/lib/pipe-async.js.map +1 -0
- package/package.json +12 -11
- package/src/array/index.ts +2 -0
- package/src/array/is-array.ts +7 -0
- package/src/array/is-empty-array.ts +9 -0
- package/src/boolean/index.ts +2 -0
- package/src/boolean/is-boolean.ts +7 -0
- package/src/boolean/is-falsy.ts +9 -0
- package/src/in-enum.ts +10 -0
- package/src/index.ts +14 -0
- package/src/is-date.ts +7 -0
- package/src/is-function.ts +9 -0
- package/src/is-regexp.ts +7 -0
- package/src/is-symbol.ts +7 -0
- package/src/json/index.ts +2 -0
- package/src/json/is-json-serializable.ts +17 -0
- package/src/json/is-json-value.ts +20 -0
- package/src/nullish/index.ts +3 -0
- package/src/nullish/is-null.ts +7 -0
- package/src/nullish/is-nullish.ts +12 -0
- package/src/nullish/is-undefined.ts +7 -0
- package/src/number/index.ts +5 -0
- package/src/number/is-bigint.ts +7 -0
- package/src/number/is-finite.ts +3 -0
- package/src/number/is-infinity.ts +7 -0
- package/src/number/is-nan.ts +7 -0
- package/src/number/is-number.ts +7 -0
- package/src/object/index.ts +3 -0
- package/src/object/is-empty-object.ts +7 -0
- package/src/object/is-object.ts +12 -0
- package/src/object/is-plain-object.ts +15 -0
- package/src/pipe-async.ts +79 -0
- package/src/pipe.ts +77 -0
- package/src/string/index.ts +7 -0
- package/src/string/is-char.ts +10 -0
- package/src/string/is-string.ts +7 -0
- package/src/string/is-url-string.ts +12 -0
- package/src/string/remove-blank-lines.ts +8 -0
- package/src/string/remove-extra-indents.ts +29 -0
- package/src/string/remove-leading-blank-lines.ts +20 -0
- package/src/string/remove-trailing-blank-lines.ts +20 -0
- package/src/string/utils.ts +7 -0
package/README.md
CHANGED
|
@@ -279,3 +279,74 @@ function pipe<T, U>(
|
|
|
279
279
|
, ...operators: Array<(value: any) => unknown>
|
|
280
280
|
): U
|
|
281
281
|
```
|
|
282
|
+
|
|
283
|
+
### pipeAsync
|
|
284
|
+
```ts
|
|
285
|
+
function pipeAsync<A, B, C, D, E, F, G, H>(
|
|
286
|
+
value: Awaitable<A>
|
|
287
|
+
, ...operators: [
|
|
288
|
+
(value: A) => Awaitable<B>
|
|
289
|
+
, (value: B) => Awaitable<C>
|
|
290
|
+
, (value: C) => Awaitable<D>
|
|
291
|
+
, (value: D) => Awaitable<E>
|
|
292
|
+
, (value: E) => Awaitable<F>
|
|
293
|
+
, (value: F) => Awaitable<G>
|
|
294
|
+
, (value: G) => Awaitable<H>
|
|
295
|
+
]
|
|
296
|
+
): Promise<H>
|
|
297
|
+
function pipeAsync<A, B, C, D, E, F, G>(
|
|
298
|
+
value: Awaitable<A>
|
|
299
|
+
, ...operators: [
|
|
300
|
+
(value: A) => Awaitable<B>
|
|
301
|
+
, (value: B) => Awaitable<C>
|
|
302
|
+
, (value: C) => Awaitable<D>
|
|
303
|
+
, (value: D) => Awaitable<E>
|
|
304
|
+
, (value: E) => Awaitable<F>
|
|
305
|
+
, (value: F) => Awaitable<G>
|
|
306
|
+
]
|
|
307
|
+
): Promise<G>
|
|
308
|
+
function pipeAsync<A, B, C, D, E, F>(
|
|
309
|
+
value: Awaitable<A>
|
|
310
|
+
, ...operators: [
|
|
311
|
+
(value: A) => Awaitable<B>
|
|
312
|
+
, (value: B) => Awaitable<C>
|
|
313
|
+
, (value: C) => Awaitable<D>
|
|
314
|
+
, (value: D) => Awaitable<E>
|
|
315
|
+
, (value: E) => Awaitable<F>
|
|
316
|
+
]
|
|
317
|
+
): Promise<F>
|
|
318
|
+
function pipeAsync<A, B, C, D, E>(
|
|
319
|
+
value: Awaitable<A>
|
|
320
|
+
, ...operators: [
|
|
321
|
+
(value: A) => Awaitable<B>
|
|
322
|
+
, (value: B) => Awaitable<C>
|
|
323
|
+
, (value: C) => Awaitable<D>
|
|
324
|
+
, (value: D) => Awaitable<E>
|
|
325
|
+
]
|
|
326
|
+
): Promise<E>
|
|
327
|
+
function pipeAsync<A, B, C, D>(
|
|
328
|
+
value: Awaitable<A>
|
|
329
|
+
, ...operators: [
|
|
330
|
+
(value: A) => Awaitable<B>
|
|
331
|
+
, (value: B) => Awaitable<C>
|
|
332
|
+
, (value: C) => Awaitable<D>
|
|
333
|
+
]
|
|
334
|
+
): Promise<D>
|
|
335
|
+
function pipeAsync<A, B, C>(
|
|
336
|
+
value: Awaitable<A>
|
|
337
|
+
, ...operators: [
|
|
338
|
+
(value: A) => Awaitable<B>
|
|
339
|
+
, (value: B) => Awaitable<C>
|
|
340
|
+
]
|
|
341
|
+
): Promise<C>
|
|
342
|
+
function pipeAsync<A, B>(
|
|
343
|
+
value: Awaitable<A>
|
|
344
|
+
, ...operators: [
|
|
345
|
+
(value: A) => Awaitable<B>
|
|
346
|
+
]
|
|
347
|
+
): Promise<B>
|
|
348
|
+
function pipeAsync<T, U>(
|
|
349
|
+
value: Awaitable<T>
|
|
350
|
+
, ...operators: Array<(value: any) => Awaitable<unknown>>
|
|
351
|
+
): Promise<U>
|
|
352
|
+
```
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,WAAW,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,WAAW,CAAA;AACzB,cAAc,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Awaitable } from 'justypes';
|
|
2
|
+
export declare function pipeAsync<A, B, C, D, E, F, G, H>(value: Awaitable<A>, ...operators: [
|
|
3
|
+
(value: A) => Awaitable<B>,
|
|
4
|
+
(value: B) => Awaitable<C>,
|
|
5
|
+
(value: C) => Awaitable<D>,
|
|
6
|
+
(value: D) => Awaitable<E>,
|
|
7
|
+
(value: E) => Awaitable<F>,
|
|
8
|
+
(value: F) => Awaitable<G>,
|
|
9
|
+
(value: G) => Awaitable<H>
|
|
10
|
+
]): Promise<H>;
|
|
11
|
+
export declare function pipeAsync<A, B, C, D, E, F, G>(value: Awaitable<A>, ...operators: [
|
|
12
|
+
(value: A) => Awaitable<B>,
|
|
13
|
+
(value: B) => Awaitable<C>,
|
|
14
|
+
(value: C) => Awaitable<D>,
|
|
15
|
+
(value: D) => Awaitable<E>,
|
|
16
|
+
(value: E) => Awaitable<F>,
|
|
17
|
+
(value: F) => Awaitable<G>
|
|
18
|
+
]): Promise<G>;
|
|
19
|
+
export declare function pipeAsync<A, B, C, D, E, F>(value: Awaitable<A>, ...operators: [
|
|
20
|
+
(value: A) => Awaitable<B>,
|
|
21
|
+
(value: B) => Awaitable<C>,
|
|
22
|
+
(value: C) => Awaitable<D>,
|
|
23
|
+
(value: D) => Awaitable<E>,
|
|
24
|
+
(value: E) => Awaitable<F>
|
|
25
|
+
]): Promise<F>;
|
|
26
|
+
export declare function pipeAsync<A, B, C, D, E>(value: Awaitable<A>, ...operators: [
|
|
27
|
+
(value: A) => Awaitable<B>,
|
|
28
|
+
(value: B) => Awaitable<C>,
|
|
29
|
+
(value: C) => Awaitable<D>,
|
|
30
|
+
(value: D) => Awaitable<E>
|
|
31
|
+
]): Promise<E>;
|
|
32
|
+
export declare function pipeAsync<A, B, C, D>(value: Awaitable<A>, ...operators: [
|
|
33
|
+
(value: A) => Awaitable<B>,
|
|
34
|
+
(value: B) => Awaitable<C>,
|
|
35
|
+
(value: C) => Awaitable<D>
|
|
36
|
+
]): Promise<D>;
|
|
37
|
+
export declare function pipeAsync<A, B, C>(value: Awaitable<A>, ...operators: [
|
|
38
|
+
(value: A) => Awaitable<B>,
|
|
39
|
+
(value: B) => Awaitable<C>
|
|
40
|
+
]): Promise<C>;
|
|
41
|
+
export declare function pipeAsync<A, B>(value: Awaitable<A>, ...operators: [
|
|
42
|
+
(value: A) => Awaitable<B>
|
|
43
|
+
]): Promise<B>;
|
|
44
|
+
export declare function pipeAsync<T, U>(value: Awaitable<T>, ...operators: Array<(value: any) => Awaitable<unknown>>): Promise<U>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipe-async.js","sourceRoot":"","sources":["../src/pipe-async.ts"],"names":[],"mappings":"AAqEA,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,KAAmB,EACnB,GAAG,SAAyC;IAE5C,IAAI,MAAM,GAAU,MAAM,KAAK,CAAA;IAC/B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;QAChC,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAA;KAChC;IACD,OAAO,MAAW,CAAA;AACpB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "extra-utils",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.1.1",
|
|
4
4
|
"description": "Utilities for JavaScript and Typescript",
|
|
5
5
|
"files": [
|
|
6
|
+
"src",
|
|
6
7
|
"lib"
|
|
7
8
|
],
|
|
8
9
|
"type": "module",
|
|
@@ -35,25 +36,25 @@
|
|
|
35
36
|
"devDependencies": {
|
|
36
37
|
"@blackglory/jest-resolver": "^0.3.0",
|
|
37
38
|
"@blackglory/pass": "^1.1.0",
|
|
38
|
-
"@commitlint/cli": "^17.4.
|
|
39
|
-
"@commitlint/config-conventional": "^17.4.
|
|
40
|
-
"@types/jest": "^29.
|
|
41
|
-
"@types/jsdom": "^
|
|
39
|
+
"@commitlint/cli": "^17.4.4",
|
|
40
|
+
"@commitlint/config-conventional": "^17.4.4",
|
|
41
|
+
"@types/jest": "^29.4.0",
|
|
42
|
+
"@types/jsdom": "^21.1.0",
|
|
42
43
|
"@types/lodash-es": "^4.17.6",
|
|
43
|
-
"@typescript-eslint/eslint-plugin": "^5.
|
|
44
|
-
"@typescript-eslint/parser": "^5.
|
|
44
|
+
"@typescript-eslint/eslint-plugin": "^5.52.0",
|
|
45
|
+
"@typescript-eslint/parser": "^5.52.0",
|
|
45
46
|
"cross-env": "^7.0.3",
|
|
46
|
-
"eslint": "^8.
|
|
47
|
+
"eslint": "^8.34.0",
|
|
47
48
|
"husky": "^4.3.8",
|
|
48
|
-
"jest": "^29.3
|
|
49
|
-
"jest-resolve": "^29.3
|
|
49
|
+
"jest": "^29.4.3",
|
|
50
|
+
"jest-resolve": "^29.4.3",
|
|
50
51
|
"npm-run-all": "^4.1.5",
|
|
51
52
|
"rimraf": "^3.0.2",
|
|
52
53
|
"standard-version": "^9.5.0",
|
|
53
54
|
"ts-jest": "^29.0.5",
|
|
54
55
|
"ts-patch": "^2.1.0",
|
|
55
56
|
"tsd": "^0.25.0",
|
|
56
|
-
"tslib": "^2.
|
|
57
|
+
"tslib": "^2.5.0",
|
|
57
58
|
"typescript": "4.8",
|
|
58
59
|
"typescript-transform-paths": "^3.4.6"
|
|
59
60
|
},
|
package/src/in-enum.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// 由于以下原因, 该函数不应该被改写为其他形式:
|
|
2
|
+
// - enum在TypeScript里被作为单独的类型看待, 不满足extends object
|
|
3
|
+
// - 作为泛型时, enum参数会被提取为typeof enum类型而不是enum
|
|
4
|
+
export function inEnum<T>(val: unknown, _enum: object): val is T {
|
|
5
|
+
return Object.values(_enum).includes(val)
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function notInEnum<T, U>(val: T, _enum: object): val is Exclude<T, U> {
|
|
9
|
+
return !inEnum(val, _enum)
|
|
10
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export * from './array/index.js'
|
|
2
|
+
export * from './boolean/index.js'
|
|
3
|
+
export * from './number/index.js'
|
|
4
|
+
export * from './object/index.js'
|
|
5
|
+
export * from './json/index.js'
|
|
6
|
+
export * from './string/index.js'
|
|
7
|
+
export * from './nullish/index.js'
|
|
8
|
+
export * from './in-enum.js'
|
|
9
|
+
export * from './is-regexp.js'
|
|
10
|
+
export * from './is-symbol.js'
|
|
11
|
+
export * from './is-date.js'
|
|
12
|
+
export * from './is-function.js'
|
|
13
|
+
export * from './pipe.js'
|
|
14
|
+
export * from './pipe-async.js'
|
package/src/is-date.ts
ADDED
package/src/is-regexp.ts
ADDED
package/src/is-symbol.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { JSONValue, JSONSerializable } from 'justypes'
|
|
2
|
+
import { isObject } from '@src/object/index.js'
|
|
3
|
+
import { isFunction } from '@src/is-function.js'
|
|
4
|
+
|
|
5
|
+
export function isJSONSerializable<T extends
|
|
6
|
+
| JSONValue
|
|
7
|
+
| Record<string, JSONValue | JSONSerializable<any>>
|
|
8
|
+
| Array<JSONValue | JSONSerializable<any>>
|
|
9
|
+
>(val: unknown): val is JSONSerializable<T> {
|
|
10
|
+
return isObject(val)
|
|
11
|
+
&& 'toJSON' in val
|
|
12
|
+
&& isFunction(val.toJSON)
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function isntJSONSerializable<T>(val: T): val is Exclude<T, JSONSerializable<any>> {
|
|
16
|
+
return !isJSONSerializable(val)
|
|
17
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { JSONValue } from 'justypes'
|
|
2
|
+
import { isNull } from '@src/nullish/index.js'
|
|
3
|
+
import { isBoolean } from '@src/boolean/index.js'
|
|
4
|
+
import { isString } from '@src/string/index.js'
|
|
5
|
+
import { isNumber } from '@src/number/index.js'
|
|
6
|
+
import { isArray } from '@src/array/index.js'
|
|
7
|
+
import { isPlainObject } from '@src/object/index.js'
|
|
8
|
+
|
|
9
|
+
export function isJSONValue(val: unknown): val is JSONValue {
|
|
10
|
+
return isNull(val)
|
|
11
|
+
|| isBoolean(val)
|
|
12
|
+
|| isString(val)
|
|
13
|
+
|| isNumber(val)
|
|
14
|
+
|| (isArray(val) && val.every(isJSONValue))
|
|
15
|
+
|| (isPlainObject(val) && Object.values(val).every(isJSONValue))
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function isntJSONValue<T>(val: T): val is Exclude<T, JSONValue> {
|
|
19
|
+
return !isJSONValue(val)
|
|
20
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Nullish } from 'justypes'
|
|
2
|
+
import { isNull } from './is-null.js'
|
|
3
|
+
import { isUndefined } from './is-undefined.js'
|
|
4
|
+
|
|
5
|
+
export function isNullish(val: unknown): val is Nullish {
|
|
6
|
+
return isNull(val)
|
|
7
|
+
|| isUndefined(val)
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function isntNullish<T>(val: T): val is Exclude<T, Nullish> {
|
|
11
|
+
return !isNullish(val)
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export function isObject(
|
|
2
|
+
val: unknown
|
|
3
|
+
): val is object & Record<string | symbol | number, unknown> {
|
|
4
|
+
return val !== null
|
|
5
|
+
&& typeof val === 'object'
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function isntObject<T>(
|
|
9
|
+
val: T
|
|
10
|
+
): val is Exclude<T, object & Record<string | symbol | number, unknown>> {
|
|
11
|
+
return !isObject(val)
|
|
12
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { isPlainObject as isPlainObjectByLodash } from 'lodash-es'
|
|
2
|
+
|
|
3
|
+
export function isPlainObject(
|
|
4
|
+
val: unknown
|
|
5
|
+
): val is object & Record<string | symbol | number, unknown> {
|
|
6
|
+
// 仅通过`Object.getPrototypeOf(val) === Object.prototype`无法判断Node.js的一些纯对象,
|
|
7
|
+
// 因此在此引入lodash的方法.
|
|
8
|
+
return isPlainObjectByLodash(val)
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function isntPlainObject<T>(
|
|
12
|
+
val: T
|
|
13
|
+
): val is Exclude<T, object & Record<string | symbol | number, unknown>> {
|
|
14
|
+
return !isPlainObject(val)
|
|
15
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { Awaitable } from 'justypes'
|
|
2
|
+
|
|
3
|
+
export function pipeAsync<A, B, C, D, E, F, G, H>(
|
|
4
|
+
value: Awaitable<A>
|
|
5
|
+
, ...operators: [
|
|
6
|
+
(value: A) => Awaitable<B>
|
|
7
|
+
, (value: B) => Awaitable<C>
|
|
8
|
+
, (value: C) => Awaitable<D>
|
|
9
|
+
, (value: D) => Awaitable<E>
|
|
10
|
+
, (value: E) => Awaitable<F>
|
|
11
|
+
, (value: F) => Awaitable<G>
|
|
12
|
+
, (value: G) => Awaitable<H>
|
|
13
|
+
]
|
|
14
|
+
): Promise<H>
|
|
15
|
+
export function pipeAsync<A, B, C, D, E, F, G>(
|
|
16
|
+
value: Awaitable<A>
|
|
17
|
+
, ...operators: [
|
|
18
|
+
(value: A) => Awaitable<B>
|
|
19
|
+
, (value: B) => Awaitable<C>
|
|
20
|
+
, (value: C) => Awaitable<D>
|
|
21
|
+
, (value: D) => Awaitable<E>
|
|
22
|
+
, (value: E) => Awaitable<F>
|
|
23
|
+
, (value: F) => Awaitable<G>
|
|
24
|
+
]
|
|
25
|
+
): Promise<G>
|
|
26
|
+
export function pipeAsync<A, B, C, D, E, F>(
|
|
27
|
+
value: Awaitable<A>
|
|
28
|
+
, ...operators: [
|
|
29
|
+
(value: A) => Awaitable<B>
|
|
30
|
+
, (value: B) => Awaitable<C>
|
|
31
|
+
, (value: C) => Awaitable<D>
|
|
32
|
+
, (value: D) => Awaitable<E>
|
|
33
|
+
, (value: E) => Awaitable<F>
|
|
34
|
+
]
|
|
35
|
+
): Promise<F>
|
|
36
|
+
export function pipeAsync<A, B, C, D, E>(
|
|
37
|
+
value: Awaitable<A>
|
|
38
|
+
, ...operators: [
|
|
39
|
+
(value: A) => Awaitable<B>
|
|
40
|
+
, (value: B) => Awaitable<C>
|
|
41
|
+
, (value: C) => Awaitable<D>
|
|
42
|
+
, (value: D) => Awaitable<E>
|
|
43
|
+
]
|
|
44
|
+
): Promise<E>
|
|
45
|
+
export function pipeAsync<A, B, C, D>(
|
|
46
|
+
value: Awaitable<A>
|
|
47
|
+
, ...operators: [
|
|
48
|
+
(value: A) => Awaitable<B>
|
|
49
|
+
, (value: B) => Awaitable<C>
|
|
50
|
+
, (value: C) => Awaitable<D>
|
|
51
|
+
]
|
|
52
|
+
): Promise<D>
|
|
53
|
+
export function pipeAsync<A, B, C>(
|
|
54
|
+
value: Awaitable<A>
|
|
55
|
+
, ...operators: [
|
|
56
|
+
(value: A) => Awaitable<B>
|
|
57
|
+
, (value: B) => Awaitable<C>
|
|
58
|
+
]
|
|
59
|
+
): Promise<C>
|
|
60
|
+
export function pipeAsync<A, B>(
|
|
61
|
+
value: Awaitable<A>
|
|
62
|
+
, ...operators: [
|
|
63
|
+
(value: A) => Awaitable<B>
|
|
64
|
+
]
|
|
65
|
+
): Promise<B>
|
|
66
|
+
export function pipeAsync<T, U>(
|
|
67
|
+
value: Awaitable<T>
|
|
68
|
+
, ...operators: Array<(value: any) => Awaitable<unknown>>
|
|
69
|
+
): Promise<U>
|
|
70
|
+
export async function pipeAsync<T, U>(
|
|
71
|
+
value: Awaitable<T>
|
|
72
|
+
, ...operators: Array<(value: T | U) => T | U>
|
|
73
|
+
): Promise<U> {
|
|
74
|
+
let result: T | U = await value
|
|
75
|
+
for (const operator of operators) {
|
|
76
|
+
result = await operator(result)
|
|
77
|
+
}
|
|
78
|
+
return result as U
|
|
79
|
+
}
|
package/src/pipe.ts
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
export function pipe<A, B, C, D, E, F, G, H>(
|
|
2
|
+
value: A
|
|
3
|
+
, ...operators: [
|
|
4
|
+
(value: A) => B
|
|
5
|
+
, (value: B) => C
|
|
6
|
+
, (value: C) => D
|
|
7
|
+
, (value: D) => E
|
|
8
|
+
, (value: E) => F
|
|
9
|
+
, (value: F) => G
|
|
10
|
+
, (value: G) => H
|
|
11
|
+
]
|
|
12
|
+
): H
|
|
13
|
+
export function pipe<A, B, C, D, E, F, G>(
|
|
14
|
+
value: A
|
|
15
|
+
, ...operators: [
|
|
16
|
+
(value: A) => B
|
|
17
|
+
, (value: B) => C
|
|
18
|
+
, (value: C) => D
|
|
19
|
+
, (value: D) => E
|
|
20
|
+
, (value: E) => F
|
|
21
|
+
, (value: F) => G
|
|
22
|
+
]
|
|
23
|
+
): G
|
|
24
|
+
export function pipe<A, B, C, D, E, F>(
|
|
25
|
+
value: A
|
|
26
|
+
, ...operators: [
|
|
27
|
+
(value: A) => B
|
|
28
|
+
, (value: B) => C
|
|
29
|
+
, (value: C) => D
|
|
30
|
+
, (value: D) => E
|
|
31
|
+
, (value: E) => F
|
|
32
|
+
]
|
|
33
|
+
): F
|
|
34
|
+
export function pipe<A, B, C, D, E>(
|
|
35
|
+
value: A
|
|
36
|
+
, ...operators: [
|
|
37
|
+
(value: A) => B
|
|
38
|
+
, (value: B) => C
|
|
39
|
+
, (value: C) => D
|
|
40
|
+
, (value: D) => E
|
|
41
|
+
]
|
|
42
|
+
): E
|
|
43
|
+
export function pipe<A, B, C, D>(
|
|
44
|
+
value: A
|
|
45
|
+
, ...operators: [
|
|
46
|
+
(value: A) => B
|
|
47
|
+
, (value: B) => C
|
|
48
|
+
, (value: C) => D
|
|
49
|
+
]
|
|
50
|
+
): D
|
|
51
|
+
export function pipe<A, B, C>(
|
|
52
|
+
value: A
|
|
53
|
+
, ...operators: [
|
|
54
|
+
(value: A) => B
|
|
55
|
+
, (value: B) => C
|
|
56
|
+
]
|
|
57
|
+
): C
|
|
58
|
+
export function pipe<A, B>(
|
|
59
|
+
value: A
|
|
60
|
+
, ...operators: [
|
|
61
|
+
(value: A) => B
|
|
62
|
+
]
|
|
63
|
+
): B
|
|
64
|
+
export function pipe<T, U>(
|
|
65
|
+
value: T
|
|
66
|
+
, ...operators: Array<(value: any) => unknown>
|
|
67
|
+
): U
|
|
68
|
+
export function pipe<T, U>(
|
|
69
|
+
value: T
|
|
70
|
+
, ...operators: Array<(value: T | U) => T | U>
|
|
71
|
+
): U {
|
|
72
|
+
let result: T | U = value
|
|
73
|
+
for (const operator of operators) {
|
|
74
|
+
result = operator(result)
|
|
75
|
+
}
|
|
76
|
+
return result as U
|
|
77
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './is-char.js'
|
|
2
|
+
export * from './is-string.js'
|
|
3
|
+
export * from './is-url-string.js'
|
|
4
|
+
export * from './remove-blank-lines.js'
|
|
5
|
+
export * from './remove-extra-indents.js'
|
|
6
|
+
export * from './remove-leading-blank-lines.js'
|
|
7
|
+
export * from './remove-trailing-blank-lines.js'
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { isntBlankLine } from './utils.js'
|
|
2
|
+
|
|
3
|
+
export function removeExtraIndents(
|
|
4
|
+
text: string
|
|
5
|
+
, { ignoreBlankLines = false }: {
|
|
6
|
+
ignoreBlankLines?: boolean
|
|
7
|
+
} = {}
|
|
8
|
+
): string {
|
|
9
|
+
const lines = text.split('\n')
|
|
10
|
+
const commonIndentLength = lines
|
|
11
|
+
.filter(line => ignoreBlankLines ? isntBlankLine(line) : true)
|
|
12
|
+
.reduce(
|
|
13
|
+
(acc, cur) => {
|
|
14
|
+
const indent = cur.match(/^(\s+)/)
|
|
15
|
+
if (indent) {
|
|
16
|
+
return Math.min(acc, indent[1].length)
|
|
17
|
+
} else {
|
|
18
|
+
return 0
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
, Infinity
|
|
22
|
+
)
|
|
23
|
+
if (commonIndentLength === 0 || commonIndentLength === Infinity) {
|
|
24
|
+
return text
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const newLines = lines.map(x => x.slice(commonIndentLength))
|
|
28
|
+
return newLines.join('\n')
|
|
29
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { isBlankLine } from './utils.js'
|
|
2
|
+
|
|
3
|
+
export function removeLeadingBlankLines(
|
|
4
|
+
text: string
|
|
5
|
+
, maxRemovals: number = Infinity
|
|
6
|
+
): string {
|
|
7
|
+
const lines = text.split('\n')
|
|
8
|
+
|
|
9
|
+
let removals = 0
|
|
10
|
+
while (
|
|
11
|
+
removals < maxRemovals &&
|
|
12
|
+
lines.length > 0 &&
|
|
13
|
+
isBlankLine(lines[0])
|
|
14
|
+
) {
|
|
15
|
+
lines.shift()
|
|
16
|
+
removals++
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
return lines.join('\n')
|
|
20
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { isBlankLine } from './utils.js'
|
|
2
|
+
|
|
3
|
+
export function removeTrailingBlankLines(
|
|
4
|
+
text: string
|
|
5
|
+
, maxRemovals: number = Infinity
|
|
6
|
+
): string {
|
|
7
|
+
const lines = text.split('\n')
|
|
8
|
+
|
|
9
|
+
let removals = 0
|
|
10
|
+
while (
|
|
11
|
+
removals < maxRemovals &&
|
|
12
|
+
lines.length > 0 &&
|
|
13
|
+
isBlankLine(lines[lines.length - 1])
|
|
14
|
+
) {
|
|
15
|
+
lines.pop()
|
|
16
|
+
removals++
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
return lines.join('\n')
|
|
20
|
+
}
|