1
0
Fork 0

fix(async): split up defer with and without value, update typescript

BREAKING CHANGE: usage of `defer(number, T)` must be replaced with
`deferValue(number, T)`. Uses of `defer(number)` do not need to change.
This commit is contained in:
ssube 2020-12-28 23:24:46 -06:00
parent 9ed3b8ec31
commit 1847865c98
Signed by: ssube
GPG Key ID: 3EED7B957D362AF1
7 changed files with 120 additions and 67 deletions

View File

@ -9,7 +9,7 @@ Resolve after a set amount of time.
<b>Signature:</b> <b>Signature:</b>
```typescript ```typescript
export declare function defer<T = undefined>(ms: number, val?: T): Promise<T>; export declare function defer(ms: number): Promise<void>;
``` ```
## Parameters ## Parameters
@ -17,9 +17,8 @@ export declare function defer<T = undefined>(ms: number, val?: T): Promise<T>;
| Parameter | Type | Description | | Parameter | Type | Description |
| --- | --- | --- | | --- | --- | --- |
| ms | number | | | ms | number | |
| val | T | |
<b>Returns:</b> <b>Returns:</b>
Promise&lt;T&gt; Promise&lt;void&gt;

View File

@ -31,7 +31,7 @@
| [constructorName(val)](./js-utils.constructorname.md) | Get the constructor name from an instance. | | [constructorName(val)](./js-utils.constructorname.md) | Get the constructor name from an instance. |
| [countOf(val)](./js-utils.countof.md) | Calculate the "length" of an array or value.<!-- -->Arrays return their length, single values return 1, and nil values return 0. This counts the number of elements that setOrPush would add. | | [countOf(val)](./js-utils.countof.md) | Calculate the "length" of an array or value.<!-- -->Arrays return their length, single values return 1, and nil values return 0. This counts the number of elements that setOrPush would add. |
| [defaultWhen(condition, items)](./js-utils.defaultwhen.md) | Return the first element when <code>condition</code> is true and the second element when <code>condition</code> is false. | | [defaultWhen(condition, items)](./js-utils.defaultwhen.md) | Return the first element when <code>condition</code> is true and the second element when <code>condition</code> is false. |
| [defer(ms, val)](./js-utils.defer.md) | Resolve after a set amount of time. | | [defer(ms)](./js-utils.defer.md) | Resolve after a set amount of time. |
| [doesExist(val)](./js-utils.doesexist.md) | Check if a variable is not nil. | | [doesExist(val)](./js-utils.doesexist.md) | Check if a variable is not nil. |
| [encode(chunks, encoding)](./js-utils.encode.md) | Concatenate then encode a list of buffers. | | [encode(chunks, encoding)](./js-utils.encode.md) | Concatenate then encode a list of buffers. |
| [ensureArray(val)](./js-utils.ensurearray.md) | | | [ensureArray(val)](./js-utils.ensurearray.md) | |

View File

@ -32,9 +32,9 @@
"@types/node": "14.14.6", "@types/node": "14.14.6",
"@types/sinon-chai": "3.2.5", "@types/sinon-chai": "3.2.5",
"@types/source-map-support": "0.5.3", "@types/source-map-support": "0.5.3",
"@typescript-eslint/eslint-plugin": "4.6.0", "@typescript-eslint/eslint-plugin": "4.11.1",
"@typescript-eslint/eslint-plugin-tslint": "4.6.0", "@typescript-eslint/eslint-plugin-tslint": "4.11.1",
"@typescript-eslint/parser": "4.6.0", "@typescript-eslint/parser": "4.11.1",
"chai": "4.2.0", "chai": "4.2.0",
"chai-as-promised": "7.1.1", "chai-as-promised": "7.1.1",
"eslint": "7.12.1", "eslint": "7.12.1",
@ -70,10 +70,10 @@
"tslint": "6.1.3", "tslint": "6.1.3",
"tslint-clean-code": "0.2.10", "tslint-clean-code": "0.2.10",
"tslint-consistent-codestyle": "1.16.0", "tslint-consistent-codestyle": "1.16.0",
"tslint-etc": "1.13.7", "tslint-etc": "1.13.9",
"tslint-microsoft-contrib": "6.2.0", "tslint-microsoft-contrib": "6.2.0",
"tslint-sonarts": "1.9.0", "tslint-sonarts": "1.9.0",
"typescript": "4.0.5" "typescript": "4.1.3"
}, },
"nyc": { "nyc": {
"extends": "@istanbuljs/nyc-config-typescript" "extends": "@istanbuljs/nyc-config-typescript"

View File

@ -5,7 +5,15 @@ import { PredicateC0 } from './Predicate';
* Resolve after a set amount of time. * Resolve after a set amount of time.
* @public * @public
*/ */
export function defer<T = undefined>(ms: number, val?: T): Promise<T> { export function defer(ms: number): Promise<void> {
return new Promise((res, rej) => {
setTimeout(() => {
res();
}, ms);
});
}
export function deferValue<T>(ms: number, val: T): Promise<T> {
return new Promise((res, rej) => { return new Promise((res, rej) => {
setTimeout(() => { setTimeout(() => {
res(val); res(val);

34
src/Rollup.ts Normal file
View File

@ -0,0 +1,34 @@
import { sep } from 'path';
export interface ChunkMatch {
includes: Array<string>;
match: Array<string>;
}
export type ChunkMap = Record<string, ChunkMatch>;
export function fixPath(name: string): string {
return name.replace('/', sep);
}
export function chunkMap(map: ChunkMap, name: string): string {
for (const [chunk, def] of Object.entries(map)) {
for (const include of def.includes) {
if (name.includes(include)) {
return chunk;
}
}
for (const match of def.match) {
if (name.match(match)) {
return chunk;
}
}
}
if (name.length === 30 && name.match(/^[a-f0-9]+$/)) {
return 'vendor';
}
return 'unknown';
}

View File

@ -1,14 +1,21 @@
import { expect } from 'chai'; import { expect } from 'chai';
import { defer, timeout } from '../../src/Async'; import { defer, deferValue, timeout } from '../../src/Async';
import { TimeoutError } from '../../src/error/TimeoutError'; import { TimeoutError } from '../../src/error/TimeoutError';
const TEST_DEFER = 10;
const TEST_TOO_LONG = 25;
describe('async utils', async () => { describe('async utils', async () => {
describe('defer', async () => { describe('defer', async () => {
it('should resolve', async () => expect(defer(10, true)).to.eventually.equal(true)); it('should resolve', async () => expect(defer(TEST_DEFER)).to.eventually.equal(undefined));
});
describe('defer value', async () => {
it('should resolve to the given value', async () => expect(deferValue(TEST_DEFER, true)).to.eventually.equal(true));
}); });
describe('timeout', async () => { describe('timeout', async () => {
it('should reject slow promises', async () => expect(timeout(10, defer(20))).to.eventually.be.rejectedWith(TimeoutError)); it('should reject slow promises', async () => expect(timeout(TEST_DEFER, defer(TEST_TOO_LONG))).to.eventually.be.rejectedWith(TimeoutError));
}); });
}); });

113
yarn.lock
View File

@ -466,69 +466,69 @@
dependencies: dependencies:
source-map "^0.6.0" source-map "^0.6.0"
"@typescript-eslint/eslint-plugin-tslint@4.6.0": "@typescript-eslint/eslint-plugin-tslint@4.11.1":
version "4.6.0" version "4.11.1"
resolved "https://artifacts.apextoaster.com/repository/group-npm/@typescript-eslint/eslint-plugin-tslint/-/eslint-plugin-tslint-4.6.0.tgz#aad2ed5a1b242f738711412e4ad4dcb0be3e21a6" resolved "https://artifacts.apextoaster.com/repository/group-npm/@typescript-eslint/eslint-plugin-tslint/-/eslint-plugin-tslint-4.11.1.tgz#1cc9d7d8a3bc3ba4ffb75b90377ebd4c466f5f79"
integrity sha512-3ba/AAcufH6Gd2UB4Qzsx0PoxzALiad5sulv82kshNJju1bWcvFa3EKdleGwBjEkaK8pvo1bE3n4wZFP2p6Y3g== integrity sha512-jkfv3a1w/wG09G7BZv/TH0S4XXDxa2uBt7TDz9I+bmVGis+jKy7zbA3CDi8d8AGA7IGLAdBZObGwf80s3AQWLQ==
dependencies: dependencies:
"@typescript-eslint/experimental-utils" "4.6.0" "@typescript-eslint/experimental-utils" "4.11.1"
lodash "^4.17.15" lodash "^4.17.15"
"@typescript-eslint/eslint-plugin@4.6.0": "@typescript-eslint/eslint-plugin@4.11.1":
version "4.6.0" version "4.11.1"
resolved "https://artifacts.apextoaster.com/repository/group-npm/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.6.0.tgz#210cd538bb703f883aff81d3996961f5dba31fdb" resolved "https://artifacts.apextoaster.com/repository/group-npm/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.11.1.tgz#7579c6d17ad862154c10bc14b40e5427b729e209"
integrity sha512-1+419X+Ynijytr1iWI+/IcX/kJryc78YNpdaXR1aRO1sU3bC0vZrIAF1tIX7rudVI84W7o7M4zo5p1aVt70fAg== integrity sha512-fABclAX2QIEDmTMk6Yd7Muv1CzFLwWM4505nETzRHpP3br6jfahD9UUJkhnJ/g2m7lwfz8IlswcwGGPGiq9exw==
dependencies: dependencies:
"@typescript-eslint/experimental-utils" "4.6.0" "@typescript-eslint/experimental-utils" "4.11.1"
"@typescript-eslint/scope-manager" "4.6.0" "@typescript-eslint/scope-manager" "4.11.1"
debug "^4.1.1" debug "^4.1.1"
functional-red-black-tree "^1.0.1" functional-red-black-tree "^1.0.1"
regexpp "^3.0.0" regexpp "^3.0.0"
semver "^7.3.2" semver "^7.3.2"
tsutils "^3.17.1" tsutils "^3.17.1"
"@typescript-eslint/experimental-utils@4.6.0": "@typescript-eslint/experimental-utils@4.11.1":
version "4.6.0" version "4.11.1"
resolved "https://artifacts.apextoaster.com/repository/group-npm/@typescript-eslint/experimental-utils/-/experimental-utils-4.6.0.tgz#f750aef4dd8e5970b5c36084f0a5ca2f0db309a4" resolved "https://artifacts.apextoaster.com/repository/group-npm/@typescript-eslint/experimental-utils/-/experimental-utils-4.11.1.tgz#2dad3535b878c25c7424e40bfa79d899f3f485bc"
integrity sha512-pnh6Beh2/4xjJVNL+keP49DFHk3orDHHFylSp3WEjtgW3y1U+6l+jNnJrGlbs6qhAz5z96aFmmbUyKhunXKvKw== integrity sha512-mAlWowT4A6h0TC9F+J5pdbEhjNiEMO+kqPKQ4sc3fVieKL71dEqfkKgtcFVSX3cjSBwYwhImaQ/mXQF0oaI38g==
dependencies: dependencies:
"@types/json-schema" "^7.0.3" "@types/json-schema" "^7.0.3"
"@typescript-eslint/scope-manager" "4.6.0" "@typescript-eslint/scope-manager" "4.11.1"
"@typescript-eslint/types" "4.6.0" "@typescript-eslint/types" "4.11.1"
"@typescript-eslint/typescript-estree" "4.6.0" "@typescript-eslint/typescript-estree" "4.11.1"
eslint-scope "^5.0.0" eslint-scope "^5.0.0"
eslint-utils "^2.0.0" eslint-utils "^2.0.0"
"@typescript-eslint/parser@4.6.0": "@typescript-eslint/parser@4.11.1":
version "4.6.0" version "4.11.1"
resolved "https://artifacts.apextoaster.com/repository/group-npm/@typescript-eslint/parser/-/parser-4.6.0.tgz#7e9ff7df2f21d5c8f65f17add3b99eeeec33199d" resolved "https://artifacts.apextoaster.com/repository/group-npm/@typescript-eslint/parser/-/parser-4.11.1.tgz#981e18de2e019d6ca312596615f92e8f6f6598ed"
integrity sha512-Dj6NJxBhbdbPSZ5DYsQqpR32MwujF772F2H3VojWU6iT4AqL4BKuoNWOPFCoSZvCcADDvQjDpa6OLDAaiZPz2Q== integrity sha512-BJ3jwPQu1jeynJ5BrjLuGfK/UJu6uwHxJ/di7sanqmUmxzmyIcd3vz58PMR7wpi8k3iWq2Q11KMYgZbUpRoIPw==
dependencies: dependencies:
"@typescript-eslint/scope-manager" "4.6.0" "@typescript-eslint/scope-manager" "4.11.1"
"@typescript-eslint/types" "4.6.0" "@typescript-eslint/types" "4.11.1"
"@typescript-eslint/typescript-estree" "4.6.0" "@typescript-eslint/typescript-estree" "4.11.1"
debug "^4.1.1" debug "^4.1.1"
"@typescript-eslint/scope-manager@4.6.0": "@typescript-eslint/scope-manager@4.11.1":
version "4.6.0" version "4.11.1"
resolved "https://artifacts.apextoaster.com/repository/group-npm/@typescript-eslint/scope-manager/-/scope-manager-4.6.0.tgz#b7d8b57fe354047a72dfb31881d9643092838662" resolved "https://artifacts.apextoaster.com/repository/group-npm/@typescript-eslint/scope-manager/-/scope-manager-4.11.1.tgz#72dc2b60b0029ab0888479b12bf83034920b4b69"
integrity sha512-uZx5KvStXP/lwrMrfQQwDNvh2ppiXzz5TmyTVHb+5TfZ3sUP7U1onlz3pjoWrK9konRyFe1czyxObWTly27Ang== integrity sha512-Al2P394dx+kXCl61fhrrZ1FTI7qsRDIUiVSuN6rTwss6lUn8uVO2+nnF4AvO0ug8vMsy3ShkbxLu/uWZdTtJMQ==
dependencies: dependencies:
"@typescript-eslint/types" "4.6.0" "@typescript-eslint/types" "4.11.1"
"@typescript-eslint/visitor-keys" "4.6.0" "@typescript-eslint/visitor-keys" "4.11.1"
"@typescript-eslint/types@4.6.0": "@typescript-eslint/types@4.11.1":
version "4.6.0" version "4.11.1"
resolved "https://artifacts.apextoaster.com/repository/group-npm/@typescript-eslint/types/-/types-4.6.0.tgz#157ca925637fd53c193c6bf226a6c02b752dde2f" resolved "https://artifacts.apextoaster.com/repository/group-npm/@typescript-eslint/types/-/types-4.11.1.tgz#3ba30c965963ef9f8ced5a29938dd0c465bd3e05"
integrity sha512-5FAgjqH68SfFG4UTtIFv+rqYJg0nLjfkjD0iv+5O27a0xEeNZ5rZNDvFGZDizlCD1Ifj7MAbSW2DPMrf0E9zjA== integrity sha512-5kvd38wZpqGY4yP/6W3qhYX6Hz0NwUbijVsX2rxczpY6OXaMxh0+5E5uLJKVFwaBM7PJe1wnMym85NfKYIh6CA==
"@typescript-eslint/typescript-estree@4.6.0": "@typescript-eslint/typescript-estree@4.11.1":
version "4.6.0" version "4.11.1"
resolved "https://artifacts.apextoaster.com/repository/group-npm/@typescript-eslint/typescript-estree/-/typescript-estree-4.6.0.tgz#85bd98dcc8280511cfc5b2ce7b03a9ffa1732b08" resolved "https://artifacts.apextoaster.com/repository/group-npm/@typescript-eslint/typescript-estree/-/typescript-estree-4.11.1.tgz#a4416b4a65872a48773b9e47afabdf7519eb10bc"
integrity sha512-s4Z9qubMrAo/tw0CbN0IN4AtfwuehGXVZM0CHNMdfYMGBDhPdwTEpBrecwhP7dRJu6d9tT9ECYNaWDHvlFSngA== integrity sha512-tC7MKZIMRTYxQhrVAFoJq/DlRwv1bnqA4/S2r3+HuHibqvbrPcyf858lNzU7bFmy4mLeIHFYr34ar/1KumwyRw==
dependencies: dependencies:
"@typescript-eslint/types" "4.6.0" "@typescript-eslint/types" "4.11.1"
"@typescript-eslint/visitor-keys" "4.6.0" "@typescript-eslint/visitor-keys" "4.11.1"
debug "^4.1.1" debug "^4.1.1"
globby "^11.0.1" globby "^11.0.1"
is-glob "^4.0.1" is-glob "^4.0.1"
@ -536,12 +536,12 @@
semver "^7.3.2" semver "^7.3.2"
tsutils "^3.17.1" tsutils "^3.17.1"
"@typescript-eslint/visitor-keys@4.6.0": "@typescript-eslint/visitor-keys@4.11.1":
version "4.6.0" version "4.11.1"
resolved "https://artifacts.apextoaster.com/repository/group-npm/@typescript-eslint/visitor-keys/-/visitor-keys-4.6.0.tgz#fb05d6393891b0a089b243fc8f9fb8039383d5da" resolved "https://artifacts.apextoaster.com/repository/group-npm/@typescript-eslint/visitor-keys/-/visitor-keys-4.11.1.tgz#4c050a4c1f7239786e2dd4e69691436143024e05"
integrity sha512-38Aa9Ztl0XyFPVzmutHXqDMCu15Xx8yKvUo38Gu3GhsuckCh3StPI5t2WIO9LHEsOH7MLmlGfKUisU8eW1Sjhg== integrity sha512-IrlBhD9bm4bdYcS8xpWarazkKXlE7iYb1HzRuyBP114mIaj5DJPo11Us1HgH60dTt41TCZXMaTCAW+OILIYPOg==
dependencies: dependencies:
"@typescript-eslint/types" "4.6.0" "@typescript-eslint/types" "4.11.1"
eslint-visitor-keys "^2.0.0" eslint-visitor-keys "^2.0.0"
"@ungap/promise-all-settled@1.1.2": "@ungap/promise-all-settled@1.1.2":
@ -4415,10 +4415,10 @@ tslint-consistent-codestyle@1.16.0:
tslib "^1.7.1" tslib "^1.7.1"
tsutils "^2.29.0" tsutils "^2.29.0"
tslint-etc@1.13.7: tslint-etc@1.13.9:
version "1.13.7" version "1.13.9"
resolved "https://artifacts.apextoaster.com/repository/group-npm/tslint-etc/-/tslint-etc-1.13.7.tgz#3fc6dacc21b3ffa2e727398b7a8d7099dbb95942" resolved "https://artifacts.apextoaster.com/repository/group-npm/tslint-etc/-/tslint-etc-1.13.9.tgz#46464af0f03efb6d4b2c71b9b4adce41a2b2ed71"
integrity sha512-v66dIwtWwc1epHH/KjrUnl97oMRwuoSOYdh0YNHGKwZvtxJzM1Afb23ugfrj028+DZoR1vCxb4/YV7eXgTn2nw== integrity sha512-plelxI+RH0w1irVPxOX7REqnwaAM1FJcgoe12UU1Ft3zIvGx9VX4BNf9jRLAt2wd00TJPpCb0ACumaDoCXp7hA==
dependencies: dependencies:
"@phenomnomnominal/tsquery" "^4.0.0" "@phenomnomnominal/tsquery" "^4.0.0"
tslib "^2.0.0" tslib "^2.0.0"
@ -4561,16 +4561,21 @@ typedarray@^0.0.6:
resolved "https://artifacts.apextoaster.com/repository/group-npm/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" resolved "https://artifacts.apextoaster.com/repository/group-npm/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
typescript@4.0.5, typescript@~4.0.5: typescript@4.1.3:
version "4.0.5" version "4.1.3"
resolved "https://artifacts.apextoaster.com/repository/group-npm/typescript/-/typescript-4.0.5.tgz#ae9dddfd1069f1cb5beb3ef3b2170dd7c1332389" resolved "https://artifacts.apextoaster.com/repository/group-npm/typescript/-/typescript-4.1.3.tgz#519d582bd94cba0cf8934c7d8e8467e473f53bb7"
integrity sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ== integrity sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg==
typescript@^3.0.0: typescript@^3.0.0:
version "3.6.3" version "3.6.3"
resolved "https://artifacts.apextoaster.com/repository/group-npm/typescript/-/typescript-3.6.3.tgz#fea942fabb20f7e1ca7164ff626f1a9f3f70b4da" resolved "https://artifacts.apextoaster.com/repository/group-npm/typescript/-/typescript-3.6.3.tgz#fea942fabb20f7e1ca7164ff626f1a9f3f70b4da"
integrity sha512-N7bceJL1CtRQ2RiG0AQME13ksR7DiuQh/QehubYcghzv20tnh+MQnQIuJddTmsbqYj+dztchykemz0zFzlvdQw== integrity sha512-N7bceJL1CtRQ2RiG0AQME13ksR7DiuQh/QehubYcghzv20tnh+MQnQIuJddTmsbqYj+dztchykemz0zFzlvdQw==
typescript@~4.0.5:
version "4.0.5"
resolved "https://artifacts.apextoaster.com/repository/group-npm/typescript/-/typescript-4.0.5.tgz#ae9dddfd1069f1cb5beb3ef3b2170dd7c1332389"
integrity sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==
uglify-js@^3.1.4: uglify-js@^3.1.4:
version "3.6.0" version "3.6.0"
resolved "https://artifacts.apextoaster.com/repository/group-npm/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5" resolved "https://artifacts.apextoaster.com/repository/group-npm/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5"