@xylabs/promise 2.10.18 → 2.11.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/dist/fulfilled.d.ts +7 -0
- package/dist/fulfilled.d.ts.map +1 -0
- package/dist/fulfilled.js +13 -0
- package/dist/fulfilled.js.map +1 -0
- package/dist/fulfilled.mjs +11 -0
- package/dist/fulfilled.mjs.map +1 -0
- package/dist/fulfilledValues.d.ts +20 -0
- package/dist/fulfilledValues.d.ts.map +1 -0
- package/dist/fulfilledValues.js +28 -0
- package/dist/fulfilledValues.js.map +1 -0
- package/dist/fulfilledValues.mjs +26 -0
- package/dist/fulfilledValues.mjs.map +1 -0
- package/dist/index.d.mts +4 -34
- package/dist/index.d.mts.map +1 -0
- package/dist/index.d.ts +4 -34
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -47
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +4 -22
- package/dist/index.mjs.map +1 -1
- package/dist/rejected.d.ts +7 -0
- package/dist/rejected.d.ts.map +1 -0
- package/dist/rejected.js +13 -0
- package/dist/rejected.js.map +1 -0
- package/dist/rejected.mjs +11 -0
- package/dist/rejected.mjs.map +1 -0
- package/package.json +3 -9
- package/tsup.config.ts +0 -16
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fulfilled.d.ts","sourceRoot":"","sources":["../src/fulfilled.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,SAAS,uEAErB,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* For use with Promise.allSettled to filter only successful results
|
|
5
|
+
* @param val
|
|
6
|
+
* @returns
|
|
7
|
+
*/
|
|
8
|
+
const fulfilled = (val) => {
|
|
9
|
+
return val.status === 'fulfilled';
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
exports.fulfilled = fulfilled;
|
|
13
|
+
//# sourceMappingURL=fulfilled.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fulfilled.js","sources":["../src/fulfilled.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;;AAIG;AACI,MAAA,SAAe,GAAA,CAAA,GAAA,KAAA;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fulfilled.mjs","sources":["../src/fulfilled.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;AAIG;AACI,MAAA,SAAe,GAAA,CAAA,GAAA,KAAA;;;;;;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* For use with Promise.allSettled to reduce to only successful result values
|
|
3
|
+
* @example <caption>Casting the initialValue provided to reduce</caption>
|
|
4
|
+
* const resolved = Promise.resolve('resolved')
|
|
5
|
+
* const rejected = Promise.reject('rejected')
|
|
6
|
+
* const settled = await Promise.allSettled([resolved, rejected])
|
|
7
|
+
* const results = settled.reduce(fulfilledValues, [] as string[])
|
|
8
|
+
* // results === [ 'resolved' ]
|
|
9
|
+
* @example <caption>Providing type parameter to reduce and initialValue type can be inferred</caption>
|
|
10
|
+
* const resolved = Promise.resolve('resolved')
|
|
11
|
+
* const rejected = Promise.reject('rejected')
|
|
12
|
+
* const settled = await Promise.allSettled([resolved, rejected])
|
|
13
|
+
* const results = settled.reduce<string[]>(fulfilledValues, [])
|
|
14
|
+
* // results === [ 'resolved' ]
|
|
15
|
+
* @param previousValue
|
|
16
|
+
* @param currentValue
|
|
17
|
+
* @returns
|
|
18
|
+
*/
|
|
19
|
+
export declare const fulfilledValues: <T>(previousValue: T[], currentValue: PromiseSettledResult<T>) => T[];
|
|
20
|
+
//# sourceMappingURL=fulfilledValues.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fulfilledValues.d.ts","sourceRoot":"","sources":["../src/fulfilledValues.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,eAAe,uEAG3B,CAAA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* For use with Promise.allSettled to reduce to only successful result values
|
|
5
|
+
* @example <caption>Casting the initialValue provided to reduce</caption>
|
|
6
|
+
* const resolved = Promise.resolve('resolved')
|
|
7
|
+
* const rejected = Promise.reject('rejected')
|
|
8
|
+
* const settled = await Promise.allSettled([resolved, rejected])
|
|
9
|
+
* const results = settled.reduce(fulfilledValues, [] as string[])
|
|
10
|
+
* // results === [ 'resolved' ]
|
|
11
|
+
* @example <caption>Providing type parameter to reduce and initialValue type can be inferred</caption>
|
|
12
|
+
* const resolved = Promise.resolve('resolved')
|
|
13
|
+
* const rejected = Promise.reject('rejected')
|
|
14
|
+
* const settled = await Promise.allSettled([resolved, rejected])
|
|
15
|
+
* const results = settled.reduce<string[]>(fulfilledValues, [])
|
|
16
|
+
* // results === [ 'resolved' ]
|
|
17
|
+
* @param previousValue
|
|
18
|
+
* @param currentValue
|
|
19
|
+
* @returns
|
|
20
|
+
*/
|
|
21
|
+
const fulfilledValues = (previousValue, currentValue) => {
|
|
22
|
+
if (currentValue.status === 'fulfilled')
|
|
23
|
+
previousValue.push(currentValue.value);
|
|
24
|
+
return previousValue;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
exports.fulfilledValues = fulfilledValues;
|
|
28
|
+
//# sourceMappingURL=fulfilledValues.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fulfilledValues.js","sources":["../src/fulfilledValues.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;;;;;;;;;;;;;;;AAiBG;AACI,MAAA,eAAqB,GAAA,CAAA,aAAA,EAAA,YAAA,KAAA;;;;;;;;"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* For use with Promise.allSettled to reduce to only successful result values
|
|
3
|
+
* @example <caption>Casting the initialValue provided to reduce</caption>
|
|
4
|
+
* const resolved = Promise.resolve('resolved')
|
|
5
|
+
* const rejected = Promise.reject('rejected')
|
|
6
|
+
* const settled = await Promise.allSettled([resolved, rejected])
|
|
7
|
+
* const results = settled.reduce(fulfilledValues, [] as string[])
|
|
8
|
+
* // results === [ 'resolved' ]
|
|
9
|
+
* @example <caption>Providing type parameter to reduce and initialValue type can be inferred</caption>
|
|
10
|
+
* const resolved = Promise.resolve('resolved')
|
|
11
|
+
* const rejected = Promise.reject('rejected')
|
|
12
|
+
* const settled = await Promise.allSettled([resolved, rejected])
|
|
13
|
+
* const results = settled.reduce<string[]>(fulfilledValues, [])
|
|
14
|
+
* // results === [ 'resolved' ]
|
|
15
|
+
* @param previousValue
|
|
16
|
+
* @param currentValue
|
|
17
|
+
* @returns
|
|
18
|
+
*/
|
|
19
|
+
const fulfilledValues = (previousValue, currentValue) => {
|
|
20
|
+
if (currentValue.status === 'fulfilled')
|
|
21
|
+
previousValue.push(currentValue.value);
|
|
22
|
+
return previousValue;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export { fulfilledValues };
|
|
26
|
+
//# sourceMappingURL=fulfilledValues.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fulfilledValues.mjs","sources":["../src/fulfilledValues.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;AAiBG;AACI,MAAA,eAAqB,GAAA,CAAA,aAAA,EAAA,YAAA,KAAA;;;;;;;;"}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,35 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
* @returns
|
|
5
|
-
*/
|
|
6
|
-
declare const fulfilled: <T>(val: PromiseSettledResult<T>) => val is PromiseFulfilledResult<T>;
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* For use with Promise.allSettled to reduce to only successful result values
|
|
10
|
-
* @example <caption>Casting the initialValue provided to reduce</caption>
|
|
11
|
-
* const resolved = Promise.resolve('resolved')
|
|
12
|
-
* const rejected = Promise.reject('rejected')
|
|
13
|
-
* const settled = await Promise.allSettled([resolved, rejected])
|
|
14
|
-
* const results = settled.reduce(fulfilledValues, [] as string[])
|
|
15
|
-
* // results === [ 'resolved' ]
|
|
16
|
-
* @example <caption>Providing type parameter to reduce and initialValue type can be inferred</caption>
|
|
17
|
-
* const resolved = Promise.resolve('resolved')
|
|
18
|
-
* const rejected = Promise.reject('rejected')
|
|
19
|
-
* const settled = await Promise.allSettled([resolved, rejected])
|
|
20
|
-
* const results = settled.reduce<string[]>(fulfilledValues, [])
|
|
21
|
-
* // results === [ 'resolved' ]
|
|
22
|
-
* @param previousValue
|
|
23
|
-
* @param currentValue
|
|
24
|
-
* @returns
|
|
25
|
-
*/
|
|
26
|
-
declare const fulfilledValues: <T>(previousValue: T[], currentValue: PromiseSettledResult<T>) => T[];
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* For use with Promise.allSettled to filter only rejected results
|
|
30
|
-
* @param val
|
|
31
|
-
* @returns
|
|
32
|
-
*/
|
|
33
|
-
declare const rejected: <T>(val: PromiseSettledResult<T>) => val is PromiseRejectedResult;
|
|
34
|
-
|
|
1
|
+
import { fulfilled } from './fulfilled';
|
|
2
|
+
import { fulfilledValues } from './fulfilledValues';
|
|
3
|
+
import { rejected } from './rejected';
|
|
35
4
|
export { fulfilled, fulfilledValues, rejected };
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,35 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
* @returns
|
|
5
|
-
*/
|
|
6
|
-
declare const fulfilled: <T>(val: PromiseSettledResult<T>) => val is PromiseFulfilledResult<T>;
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* For use with Promise.allSettled to reduce to only successful result values
|
|
10
|
-
* @example <caption>Casting the initialValue provided to reduce</caption>
|
|
11
|
-
* const resolved = Promise.resolve('resolved')
|
|
12
|
-
* const rejected = Promise.reject('rejected')
|
|
13
|
-
* const settled = await Promise.allSettled([resolved, rejected])
|
|
14
|
-
* const results = settled.reduce(fulfilledValues, [] as string[])
|
|
15
|
-
* // results === [ 'resolved' ]
|
|
16
|
-
* @example <caption>Providing type parameter to reduce and initialValue type can be inferred</caption>
|
|
17
|
-
* const resolved = Promise.resolve('resolved')
|
|
18
|
-
* const rejected = Promise.reject('rejected')
|
|
19
|
-
* const settled = await Promise.allSettled([resolved, rejected])
|
|
20
|
-
* const results = settled.reduce<string[]>(fulfilledValues, [])
|
|
21
|
-
* // results === [ 'resolved' ]
|
|
22
|
-
* @param previousValue
|
|
23
|
-
* @param currentValue
|
|
24
|
-
* @returns
|
|
25
|
-
*/
|
|
26
|
-
declare const fulfilledValues: <T>(previousValue: T[], currentValue: PromiseSettledResult<T>) => T[];
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* For use with Promise.allSettled to filter only rejected results
|
|
30
|
-
* @param val
|
|
31
|
-
* @returns
|
|
32
|
-
*/
|
|
33
|
-
declare const rejected: <T>(val: PromiseSettledResult<T>) => val is PromiseRejectedResult;
|
|
34
|
-
|
|
1
|
+
import { fulfilled } from './fulfilled';
|
|
2
|
+
import { fulfilledValues } from './fulfilledValues';
|
|
3
|
+
import { rejected } from './rejected';
|
|
35
4
|
export { fulfilled, fulfilledValues, rejected };
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,51 +1,12 @@
|
|
|
1
|
-
|
|
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);
|
|
1
|
+
'use strict';
|
|
19
2
|
|
|
20
|
-
|
|
21
|
-
var
|
|
22
|
-
|
|
23
|
-
fulfilled: () => fulfilled,
|
|
24
|
-
fulfilledValues: () => fulfilledValues,
|
|
25
|
-
rejected: () => rejected
|
|
26
|
-
});
|
|
27
|
-
module.exports = __toCommonJS(src_exports);
|
|
3
|
+
var fulfilled = require('./fulfilled.js');
|
|
4
|
+
var fulfilledValues = require('./fulfilledValues.js');
|
|
5
|
+
var rejected = require('./rejected.js');
|
|
28
6
|
|
|
29
|
-
// src/fulfilled.ts
|
|
30
|
-
var fulfilled = (val) => {
|
|
31
|
-
return val.status === "fulfilled";
|
|
32
|
-
};
|
|
33
7
|
|
|
34
|
-
// src/fulfilledValues.ts
|
|
35
|
-
var fulfilledValues = (previousValue, currentValue) => {
|
|
36
|
-
if (currentValue.status === "fulfilled")
|
|
37
|
-
previousValue.push(currentValue.value);
|
|
38
|
-
return previousValue;
|
|
39
|
-
};
|
|
40
8
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
46
|
-
0 && (module.exports = {
|
|
47
|
-
fulfilled,
|
|
48
|
-
fulfilledValues,
|
|
49
|
-
rejected
|
|
50
|
-
});
|
|
51
|
-
//# sourceMappingURL=index.js.map
|
|
9
|
+
exports.fulfilled = fulfilled.fulfilled;
|
|
10
|
+
exports.fulfilledValues = fulfilledValues.fulfilledValues;
|
|
11
|
+
exports.rejected = rejected.rejected;
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,22 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
// src/fulfilledValues.ts
|
|
7
|
-
var fulfilledValues = (previousValue, currentValue) => {
|
|
8
|
-
if (currentValue.status === "fulfilled")
|
|
9
|
-
previousValue.push(currentValue.value);
|
|
10
|
-
return previousValue;
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
// src/rejected.ts
|
|
14
|
-
var rejected = (val) => {
|
|
15
|
-
return val.status === "rejected";
|
|
16
|
-
};
|
|
17
|
-
export {
|
|
18
|
-
fulfilled,
|
|
19
|
-
fulfilledValues,
|
|
20
|
-
rejected
|
|
21
|
-
};
|
|
22
|
-
//# sourceMappingURL=index.mjs.map
|
|
1
|
+
export { fulfilled } from './fulfilled.mjs';
|
|
2
|
+
export { fulfilledValues } from './fulfilledValues.mjs';
|
|
3
|
+
export { rejected } from './rejected.mjs';
|
|
4
|
+
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rejected.d.ts","sourceRoot":"","sources":["../src/rejected.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,QAAQ,mEAEpB,CAAA"}
|
package/dist/rejected.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* For use with Promise.allSettled to filter only rejected results
|
|
5
|
+
* @param val
|
|
6
|
+
* @returns
|
|
7
|
+
*/
|
|
8
|
+
const rejected = (val) => {
|
|
9
|
+
return val.status === 'rejected';
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
exports.rejected = rejected;
|
|
13
|
+
//# sourceMappingURL=rejected.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rejected.js","sources":["../src/rejected.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;;AAIG;AACI,MAAA,QAAM,GAAQ,CAAA,GAAA,KAAA;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rejected.mjs","sources":["../src/rejected.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;AAIG;AACI,MAAA,QAAM,GAAQ,CAAA,GAAA,KAAA;;;;;;"}
|
package/package.json
CHANGED
|
@@ -40,10 +40,6 @@
|
|
|
40
40
|
},
|
|
41
41
|
"main": "dist/index.js",
|
|
42
42
|
"module": "dist/index.mjs",
|
|
43
|
-
"scripts": {
|
|
44
|
-
"package-compile": "tsup && publint",
|
|
45
|
-
"package-recompile": "tsup && publint"
|
|
46
|
-
},
|
|
47
43
|
"homepage": "https://xylabs.com",
|
|
48
44
|
"keywords": [
|
|
49
45
|
"xylabs",
|
|
@@ -52,10 +48,8 @@
|
|
|
52
48
|
"esm"
|
|
53
49
|
],
|
|
54
50
|
"devDependencies": {
|
|
55
|
-
"@xylabs/ts-scripts-yarn3": "^
|
|
56
|
-
"@xylabs/tsconfig": "^
|
|
57
|
-
"publint": "^0.2.2",
|
|
58
|
-
"tsup": "^7.2.0"
|
|
51
|
+
"@xylabs/ts-scripts-yarn3": "^3.0.0-rc.16",
|
|
52
|
+
"@xylabs/tsconfig": "^3.0.0-rc.16"
|
|
59
53
|
},
|
|
60
54
|
"publishConfig": {
|
|
61
55
|
"access": "public"
|
|
@@ -65,5 +59,5 @@
|
|
|
65
59
|
"url": "https://github.com/xylabs/sdk-js.git"
|
|
66
60
|
},
|
|
67
61
|
"sideEffects": false,
|
|
68
|
-
"version": "2.
|
|
62
|
+
"version": "2.11.1"
|
|
69
63
|
}
|
package/tsup.config.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { defineConfig } from 'tsup'
|
|
2
|
-
|
|
3
|
-
// eslint-disable-next-line import/no-default-export
|
|
4
|
-
export default defineConfig({
|
|
5
|
-
bundle: true,
|
|
6
|
-
cjsInterop: true,
|
|
7
|
-
clean: false,
|
|
8
|
-
dts: {
|
|
9
|
-
entry: ['src/index.ts'],
|
|
10
|
-
},
|
|
11
|
-
entry: ['src/index.ts'],
|
|
12
|
-
format: ['cjs', 'esm'],
|
|
13
|
-
sourcemap: true,
|
|
14
|
-
splitting: false,
|
|
15
|
-
tsconfig: 'tsconfig.build.json',
|
|
16
|
-
})
|