@httptoolkit/util 0.1.5 → 0.1.7

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/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from './promises';
2
2
  export * from './errors';
3
+ export * from './text';
package/dist/index.js CHANGED
@@ -16,4 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./promises"), exports);
18
18
  __exportStar(require("./errors"), exports);
19
+ __exportStar(require("./text"), exports);
19
20
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,2CAAyB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,2CAAyB;AACzB,yCAAuB"}
@@ -8,9 +8,14 @@ export declare const delay: (ms: number, options?: {
8
8
  unref?: boolean;
9
9
  }) => Promise<void>;
10
10
  export declare function doWhile<T>(doFn: () => Promise<T>, whileFn: () => Promise<boolean> | boolean): Promise<void>;
11
- export interface Deferred<T> {
11
+ /**
12
+ * A deferred is a promise (you can await it directly) but also exposes the promise
13
+ * explicitly at .promise, and exposes public resolve & reject callbacks for external
14
+ * resolution.
15
+ */
16
+ export interface Deferred<T> extends Promise<T> {
12
17
  resolve: (arg: T) => void;
13
- reject: (e?: Error) => void;
18
+ reject: (e: Error) => void;
14
19
  promise: Promise<T>;
15
20
  }
16
21
  export declare function getDeferred<T = void>(): Deferred<T>;
package/dist/promises.js CHANGED
@@ -15,15 +15,13 @@ async function doWhile(doFn, whileFn) {
15
15
  }
16
16
  exports.doWhile = doWhile;
17
17
  function getDeferred() {
18
- let resolve = undefined;
19
- let reject = undefined;
20
- let promise = new Promise((resolveCb, rejectCb) => {
18
+ let resolve;
19
+ let reject;
20
+ const promise = new Promise((resolveCb, rejectCb) => {
21
21
  resolve = resolveCb;
22
22
  reject = rejectCb;
23
23
  });
24
- // TS thinks we're using these before they're assigned, which is why
25
- // we need the undefined types, and the any here.
26
- return { resolve, reject, promise };
24
+ return Object.assign(promise, { resolve, reject, promise });
27
25
  }
28
26
  exports.getDeferred = getDeferred;
29
27
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"promises.js","sourceRoot":"","sources":["../src/promises.ts"],"names":[],"mappings":";;;AAEO,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,UAO9B,EAAE,EAAE,EAAE,CACN,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;IAC1B,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAEtC,IAAI,OAAO,CAAC,KAAK,IAAK,KAAa,CAAC,KAAK,EAAE;QACtC,KAAa,CAAC,KAAK,EAAE,CAAC;KAC1B;AACL,CAAC,CAAC,CAAC;AAdM,QAAA,KAAK,SAcX;AAEA,KAAK,UAAU,OAAO,CACzB,IAAsB,EACtB,OAAyC;IAEzC,GAAG;QACC,MAAM,IAAI,EAAE,CAAC;KAChB,QAAQ,MAAM,OAAO,EAAE,EAAE;AAC9B,CAAC;AAPD,0BAOC;AAQD,SAAgB,WAAW;IACvB,IAAI,OAAO,GAAmC,SAAS,CAAC;IACxD,IAAI,MAAM,GAAsC,SAAS,CAAC;IAE1D,IAAI,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE;QACjD,OAAO,GAAG,SAAS,CAAC;QACpB,MAAM,GAAG,QAAQ,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,oEAAoE;IACpE,iDAAiD;IACjD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAS,CAAC;AAC/C,CAAC;AAZD,kCAYC;AAED;;;;;;GAMG;AACH,SAAgB,oBAAoB,CAAI,EAAoB;IACxD,IAAI,cAAsC,CAAC;IAE3C,OAAO,GAAG,EAAE;QACR,IAAI,cAAc,KAAK,SAAS,EAAE;YAC9B,cAAc,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;gBAC/B,cAAc,GAAG,SAAS,CAAC;YAC/B,CAAC,CAAC,CAAC;SACN;QAED,OAAO,cAAc,CAAC;IAC1B,CAAC,CAAC;AACN,CAAC;AAZD,oDAYC"}
1
+ {"version":3,"file":"promises.js","sourceRoot":"","sources":["../src/promises.ts"],"names":[],"mappings":";;;AAEO,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,UAO9B,EAAE,EAAE,EAAE,CACN,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;IAC1B,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAEtC,IAAI,OAAO,CAAC,KAAK,IAAK,KAAa,CAAC,KAAK,EAAE;QACtC,KAAa,CAAC,KAAK,EAAE,CAAC;KAC1B;AACL,CAAC,CAAC,CAAC;AAdM,QAAA,KAAK,SAcX;AAEA,KAAK,UAAU,OAAO,CACzB,IAAsB,EACtB,OAAyC;IAEzC,GAAG;QACC,MAAM,IAAI,EAAE,CAAC;KAChB,QAAQ,MAAM,OAAO,EAAE,EAAE;AAC9B,CAAC;AAPD,0BAOC;AAaD,SAAgB,WAAW;IACvB,IAAI,OAA4B,CAAC;IACjC,IAAI,MAA6B,CAAC;IAElC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE;QACnD,OAAO,GAAG,SAAS,CAAC;QACpB,MAAM,GAAG,QAAQ,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AAChE,CAAC;AAVD,kCAUC;AAED;;;;;;GAMG;AACH,SAAgB,oBAAoB,CAAI,EAAoB;IACxD,IAAI,cAAsC,CAAC;IAE3C,OAAO,GAAG,EAAE;QACR,IAAI,cAAc,KAAK,SAAS,EAAE;YAC9B,cAAc,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;gBAC/B,cAAc,GAAG,SAAS,CAAC;YAC/B,CAAC,CAAC,CAAC;SACN;QAED,OAAO,cAAc,CAAC;IAC1B,CAAC,CAAC;AACN,CAAC;AAZD,oDAYC"}
package/dist/text.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ export declare function truncateWithEllipsis(str: string, length: number): string;
2
+ export declare function joinAnd(val: string[], options?: {
3
+ separator?: string;
4
+ finalSeparator?: string;
5
+ oxfordComma?: boolean;
6
+ }): string;
7
+ export declare function aOrAn(value: string): "a" | "an";
package/dist/text.js ADDED
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.aOrAn = exports.joinAnd = exports.truncateWithEllipsis = void 0;
4
+ function truncateWithEllipsis(str, length) {
5
+ if (str.length <= length) {
6
+ return str;
7
+ }
8
+ else {
9
+ return str.slice(0, length - 3) + "...";
10
+ }
11
+ }
12
+ exports.truncateWithEllipsis = truncateWithEllipsis;
13
+ function joinAnd(val, options = {}) {
14
+ if (val.length === 1)
15
+ return val[0];
16
+ const separator = options.separator ?? ', ';
17
+ const finalSeparator = options.finalSeparator ?? 'and ';
18
+ const oxfordComma = options.oxfordComma ?? false;
19
+ return val.slice(0, -1).join(separator) +
20
+ (oxfordComma ? separator : ' ') +
21
+ finalSeparator +
22
+ val[val.length - 1];
23
+ }
24
+ exports.joinAnd = joinAnd;
25
+ const VOWEL_ISH = ['a', 'e', 'i', 'o', 'u', 'y'];
26
+ function aOrAn(value) {
27
+ if (VOWEL_ISH.includes(value[0].toLowerCase()))
28
+ return 'an';
29
+ else
30
+ return 'a';
31
+ }
32
+ exports.aOrAn = aOrAn;
33
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../src/text.ts"],"names":[],"mappings":";;;AAAA,SAAgB,oBAAoB,CAAC,GAAW,EAAE,MAAc;IAC5D,IAAI,GAAG,CAAC,MAAM,IAAI,MAAM,EAAE;QACtB,OAAO,GAAG,CAAC;KACd;SAAM;QACH,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;KAC3C;AACL,CAAC;AAND,oDAMC;AAED,SAAgB,OAAO,CAAC,GAAa,EAAE,UAOnC,EAAE;IACF,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IAEpC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC;IAC5C,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,MAAM,CAAC;IACxD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,KAAK,CAAC;IAEjD,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;QACnC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;QAC/B,cAAc;QACd,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC5B,CAAC;AAlBD,0BAkBC;AAED,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACjD,SAAgB,KAAK,CAAC,KAAa;IAC/B,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;;QACvD,OAAO,GAAG,CAAC;AACpB,CAAC;AAHD,sBAGC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@httptoolkit/util",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "description": "A tiny utility package, sharing JS code widely used across HTTP Toolkit projects",
5
5
  "main": "dist/index.js",
6
6
  "files": [
package/src/index.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from './promises';
2
- export * from './errors';
2
+ export * from './errors';
3
+ export * from './text';
package/src/promises.ts CHANGED
@@ -25,24 +25,27 @@ export async function doWhile<T>(
25
25
  } while (await whileFn());
26
26
  }
27
27
 
28
- export interface Deferred<T> {
28
+ /**
29
+ * A deferred is a promise (you can await it directly) but also exposes the promise
30
+ * explicitly at .promise, and exposes public resolve & reject callbacks for external
31
+ * resolution.
32
+ */
33
+ export interface Deferred<T> extends Promise<T> {
29
34
  resolve: (arg: T) => void,
30
- reject: (e?: Error) => void,
35
+ reject: (e: Error) => void,
31
36
  promise: Promise<T>
32
37
  }
33
38
 
34
39
  export function getDeferred<T = void>(): Deferred<T> {
35
- let resolve: undefined | ((arg: T) => void) = undefined;
36
- let reject: undefined | ((e?: Error) => void) = undefined;
40
+ let resolve!: ((arg: T) => void);
41
+ let reject!: ((e: Error) => void);
37
42
 
38
- let promise = new Promise<T>((resolveCb, rejectCb) => {
43
+ const promise = new Promise<T>((resolveCb, rejectCb) => {
39
44
  resolve = resolveCb;
40
45
  reject = rejectCb;
41
46
  });
42
47
 
43
- // TS thinks we're using these before they're assigned, which is why
44
- // we need the undefined types, and the any here.
45
- return { resolve, reject, promise } as any;
48
+ return Object.assign(promise, { resolve, reject, promise });
46
49
  }
47
50
 
48
51
  /**
package/src/text.ts ADDED
@@ -0,0 +1,33 @@
1
+ export function truncateWithEllipsis(str: string, length: number) {
2
+ if (str.length <= length) {
3
+ return str;
4
+ } else {
5
+ return str.slice(0, length - 3) + "...";
6
+ }
7
+ }
8
+
9
+ export function joinAnd(val: string[], options: {
10
+ // Separator between all but the last value
11
+ separator?: string,
12
+ // Separator before last value (preceeded with space or `separator` if oxfordComma is true)
13
+ finalSeparator?: string,
14
+ // Should there be a separator between the penultimate value & finalSeparator?
15
+ oxfordComma?: boolean
16
+ } = {}) {
17
+ if (val.length === 1) return val[0];
18
+
19
+ const separator = options.separator ?? ', ';
20
+ const finalSeparator = options.finalSeparator ?? 'and ';
21
+ const oxfordComma = options.oxfordComma ?? false;
22
+
23
+ return val.slice(0, -1).join(separator) +
24
+ (oxfordComma ? separator : ' ') +
25
+ finalSeparator +
26
+ val[val.length - 1];
27
+ }
28
+
29
+ const VOWEL_ISH = ['a', 'e', 'i', 'o', 'u', 'y'];
30
+ export function aOrAn(value: string) {
31
+ if (VOWEL_ISH.includes(value[0].toLowerCase())) return 'an';
32
+ else return 'a';
33
+ }