@gtkx/utils 1.0.0-rc.2 → 1.0.0-rc.4
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 +4 -5
- package/dist/array/index-before-or-end.d.ts +0 -12
- package/dist/array/index-before-or-end.d.ts.map +1 -1
- package/dist/array/index-before-or-end.js +0 -12
- package/dist/array/index-before-or-end.js.map +1 -1
- package/dist/array/index.d.ts +5 -5
- package/dist/array/index.js.map +1 -1
- package/dist/array/remove.d.ts +0 -11
- package/dist/array/remove.d.ts.map +1 -1
- package/dist/array/remove.js +0 -11
- package/dist/array/remove.js.map +1 -1
- package/dist/array/sort-strings-by.d.ts +0 -12
- package/dist/array/sort-strings-by.d.ts.map +1 -1
- package/dist/array/sort-strings-by.js +0 -12
- package/dist/array/sort-strings-by.js.map +1 -1
- package/dist/array/sort-strings.d.ts +0 -9
- package/dist/array/sort-strings.d.ts.map +1 -1
- package/dist/array/sort-strings.js +0 -9
- package/dist/array/sort-strings.js.map +1 -1
- package/dist/array/uniq-by.d.ts +0 -15
- package/dist/array/uniq-by.d.ts.map +1 -1
- package/dist/array/uniq-by.js +0 -15
- package/dist/array/uniq-by.js.map +1 -1
- package/dist/class/any-class.d.ts +0 -3
- package/dist/class/any-class.d.ts.map +1 -1
- package/dist/class/any-class.js.map +1 -1
- package/dist/class/get-parent-class.d.ts +1 -7
- package/dist/class/get-parent-class.d.ts.map +1 -1
- package/dist/class/get-parent-class.js +0 -6
- package/dist/class/get-parent-class.js.map +1 -1
- package/dist/class/index.d.ts +3 -3
- package/dist/class/index.js.map +1 -1
- package/dist/class/walk-class-chain.d.ts +1 -10
- package/dist/class/walk-class-chain.d.ts.map +1 -1
- package/dist/class/walk-class-chain.js +0 -9
- package/dist/class/walk-class-chain.js.map +1 -1
- package/dist/error/error-like.js.map +1 -1
- package/dist/error/error-message.d.ts +0 -10
- package/dist/error/error-message.d.ts.map +1 -1
- package/dist/error/error-message.js +0 -10
- package/dist/error/error-message.js.map +1 -1
- package/dist/error/format-child-process-error.d.ts +0 -9
- package/dist/error/format-child-process-error.d.ts.map +1 -1
- package/dist/error/format-child-process-error.js +0 -9
- package/dist/error/format-child-process-error.js.map +1 -1
- package/dist/error/index.d.ts +3 -3
- package/dist/error/index.js.map +1 -1
- package/dist/error/normalize-error.d.ts +0 -10
- package/dist/error/normalize-error.d.ts.map +1 -1
- package/dist/error/normalize-error.js +0 -10
- package/dist/error/normalize-error.js.map +1 -1
- package/dist/index.d.ts +12 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/log/create-logger.d.ts +1 -12
- package/dist/log/create-logger.d.ts.map +1 -1
- package/dist/log/create-logger.js +0 -11
- package/dist/log/create-logger.js.map +1 -1
- package/dist/log/default-logger.d.ts +4 -30
- package/dist/log/default-logger.d.ts.map +1 -1
- package/dist/log/default-logger.js +3 -29
- package/dist/log/default-logger.js.map +1 -1
- package/dist/log/index.d.ts +5 -3
- package/dist/log/index.d.ts.map +1 -1
- package/dist/log/index.js +3 -1
- package/dist/log/index.js.map +1 -1
- package/dist/log/logger.d.ts +2 -43
- package/dist/log/logger.d.ts.map +1 -1
- package/dist/log/logger.js +3 -34
- package/dist/log/logger.js.map +1 -1
- package/dist/map/get-or-insert.d.ts +0 -15
- package/dist/map/get-or-insert.d.ts.map +1 -1
- package/dist/map/get-or-insert.js +0 -15
- package/dist/map/get-or-insert.js.map +1 -1
- package/dist/map/index.d.ts +1 -1
- package/dist/map/index.js.map +1 -1
- package/dist/object/index.d.ts +3 -3
- package/dist/object/index.js.map +1 -1
- package/dist/object/omit.d.ts +0 -12
- package/dist/object/omit.d.ts.map +1 -1
- package/dist/object/omit.js +0 -12
- package/dist/object/omit.js.map +1 -1
- package/dist/object/pick-by.d.ts +0 -12
- package/dist/object/pick-by.d.ts.map +1 -1
- package/dist/object/pick-by.js +0 -12
- package/dist/object/pick-by.js.map +1 -1
- package/dist/object/structured-clone.d.ts +0 -16
- package/dist/object/structured-clone.d.ts.map +1 -1
- package/dist/object/structured-clone.js +0 -16
- package/dist/object/structured-clone.js.map +1 -1
- package/dist/predicate/index.d.ts +6 -6
- package/dist/predicate/index.js.map +1 -1
- package/dist/predicate/is-deep-equal.d.ts.map +1 -1
- package/dist/predicate/is-deep-equal.js +0 -13
- package/dist/predicate/is-deep-equal.js.map +1 -1
- package/dist/predicate/is-plain-object.d.ts +0 -14
- package/dist/predicate/is-plain-object.d.ts.map +1 -1
- package/dist/predicate/is-plain-object.js +0 -14
- package/dist/predicate/is-plain-object.js.map +1 -1
- package/dist/predicate/is-record.d.ts +0 -11
- package/dist/predicate/is-record.d.ts.map +1 -1
- package/dist/predicate/is-record.js +0 -11
- package/dist/predicate/is-record.js.map +1 -1
- package/dist/predicate/is-same-array-by.d.ts +0 -12
- package/dist/predicate/is-same-array-by.d.ts.map +1 -1
- package/dist/predicate/is-same-array-by.js +0 -12
- package/dist/predicate/is-same-array-by.js.map +1 -1
- package/dist/predicate/is-same-array.d.ts +0 -12
- package/dist/predicate/is-same-array.d.ts.map +1 -1
- package/dist/predicate/is-same-array.js +0 -12
- package/dist/predicate/is-same-array.js.map +1 -1
- package/dist/predicate/is-shallow-equal.d.ts.map +1 -1
- package/dist/predicate/is-shallow-equal.js +0 -14
- package/dist/predicate/is-shallow-equal.js.map +1 -1
- package/dist/process/exit-code-for-signal.d.ts +0 -11
- package/dist/process/exit-code-for-signal.d.ts.map +1 -1
- package/dist/process/exit-code-for-signal.js +0 -11
- package/dist/process/exit-code-for-signal.js.map +1 -1
- package/dist/process/index.d.ts +3 -3
- package/dist/process/index.js.map +1 -1
- package/dist/process/install-graceful-shutdown.d.ts +0 -6
- package/dist/process/install-graceful-shutdown.d.ts.map +1 -1
- package/dist/process/install-graceful-shutdown.js +7 -13
- package/dist/process/install-graceful-shutdown.js.map +1 -1
- package/dist/process/resolve-executable.d.ts +0 -11
- package/dist/process/resolve-executable.d.ts.map +1 -1
- package/dist/process/resolve-executable.js +0 -11
- package/dist/process/resolve-executable.js.map +1 -1
- package/dist/set/drain.d.ts +0 -8
- package/dist/set/drain.d.ts.map +1 -1
- package/dist/set/drain.js +0 -8
- package/dist/set/drain.js.map +1 -1
- package/dist/set/index.d.ts +1 -1
- package/dist/set/index.js.map +1 -1
- package/dist/source/index.d.ts +3 -3
- package/dist/source/index.js.map +1 -1
- package/dist/source/sanitize-identifier.d.ts +0 -11
- package/dist/source/sanitize-identifier.d.ts.map +1 -1
- package/dist/source/sanitize-identifier.js +0 -11
- package/dist/source/sanitize-identifier.js.map +1 -1
- package/dist/source/source-string-literal.d.ts +0 -10
- package/dist/source/source-string-literal.d.ts.map +1 -1
- package/dist/source/source-string-literal.js +0 -10
- package/dist/source/source-string-literal.js.map +1 -1
- package/dist/source/to-camel-identifier.d.ts +0 -10
- package/dist/source/to-camel-identifier.d.ts.map +1 -1
- package/dist/source/to-camel-identifier.js +0 -10
- package/dist/source/to-camel-identifier.js.map +1 -1
- package/dist/string/camel-case.d.ts +0 -14
- package/dist/string/camel-case.d.ts.map +1 -1
- package/dist/string/camel-case.js +0 -14
- package/dist/string/camel-case.js.map +1 -1
- package/dist/string/index.d.ts +5 -5
- package/dist/string/index.js.map +1 -1
- package/dist/string/kebab-case.d.ts +0 -11
- package/dist/string/kebab-case.d.ts.map +1 -1
- package/dist/string/kebab-case.js +0 -11
- package/dist/string/kebab-case.js.map +1 -1
- package/dist/string/lower-first.d.ts +0 -10
- package/dist/string/lower-first.d.ts.map +1 -1
- package/dist/string/lower-first.js +0 -10
- package/dist/string/lower-first.js.map +1 -1
- package/dist/string/pascal-case.d.ts +0 -13
- package/dist/string/pascal-case.d.ts.map +1 -1
- package/dist/string/pascal-case.js +0 -13
- package/dist/string/pascal-case.js.map +1 -1
- package/dist/string/upper-first.d.ts +0 -10
- package/dist/string/upper-first.d.ts.map +1 -1
- package/dist/string/upper-first.js +0 -10
- package/dist/string/upper-first.js.map +1 -1
- package/dist/util/index.d.ts +1 -1
- package/dist/util/index.js.map +1 -1
- package/dist/util/package-version.d.ts +0 -9
- package/dist/util/package-version.d.ts.map +1 -1
- package/dist/util/package-version.js +0 -9
- package/dist/util/package-version.js.map +1 -1
- package/package.json +1 -1
- package/src/array/index-before-or-end.ts +0 -12
- package/src/array/index.ts +5 -5
- package/src/array/remove.ts +0 -11
- package/src/array/sort-strings-by.ts +0 -12
- package/src/array/sort-strings.ts +0 -9
- package/src/array/uniq-by.ts +0 -15
- package/src/class/any-class.ts +0 -3
- package/src/class/get-parent-class.ts +1 -7
- package/src/class/index.ts +3 -3
- package/src/class/walk-class-chain.ts +2 -11
- package/src/error/error-like.ts +1 -1
- package/src/error/error-message.ts +1 -11
- package/src/error/format-child-process-error.ts +2 -11
- package/src/error/index.ts +3 -3
- package/src/error/normalize-error.ts +2 -12
- package/src/index.ts +12 -13
- package/src/log/create-logger.ts +1 -12
- package/src/log/default-logger.ts +4 -30
- package/src/log/index.ts +5 -3
- package/src/log/logger.ts +4 -45
- package/src/map/get-or-insert.ts +0 -15
- package/src/map/index.ts +1 -1
- package/src/object/index.ts +3 -3
- package/src/object/omit.ts +0 -12
- package/src/object/pick-by.ts +0 -12
- package/src/object/structured-clone.ts +1 -17
- package/src/predicate/index.ts +6 -6
- package/src/predicate/is-deep-equal.ts +2 -15
- package/src/predicate/is-plain-object.ts +0 -14
- package/src/predicate/is-record.ts +0 -11
- package/src/predicate/is-same-array-by.ts +0 -12
- package/src/predicate/is-same-array.ts +1 -13
- package/src/predicate/is-shallow-equal.ts +2 -16
- package/src/process/exit-code-for-signal.ts +0 -11
- package/src/process/index.ts +3 -3
- package/src/process/install-graceful-shutdown.ts +11 -17
- package/src/process/resolve-executable.ts +0 -11
- package/src/set/drain.ts +0 -8
- package/src/set/index.ts +1 -1
- package/src/source/index.ts +3 -3
- package/src/source/sanitize-identifier.ts +0 -11
- package/src/source/source-string-literal.ts +0 -10
- package/src/source/to-camel-identifier.ts +2 -12
- package/src/string/camel-case.ts +2 -16
- package/src/string/index.ts +5 -5
- package/src/string/kebab-case.ts +0 -11
- package/src/string/lower-first.ts +0 -10
- package/src/string/pascal-case.ts +2 -15
- package/src/string/upper-first.ts +0 -10
- package/src/util/index.ts +1 -1
- package/src/util/package-version.ts +0 -9
- package/dist/function/call-method.d.ts +0 -3
- package/dist/function/call-method.d.ts.map +0 -1
- package/dist/function/call-method.js +0 -19
- package/dist/function/call-method.js.map +0 -1
- package/dist/function/index.d.ts +0 -2
- package/dist/function/index.d.ts.map +0 -1
- package/dist/function/index.js +0 -2
- package/dist/function/index.js.map +0 -1
- package/src/function/call-method.ts +0 -22
- package/src/function/index.ts +0 -1
|
@@ -1,15 +1,6 @@
|
|
|
1
|
-
import { isRecord } from "../predicate/is-record.
|
|
2
|
-
import { readStream } from "./error-like.
|
|
1
|
+
import { isRecord } from "../predicate/is-record.ts";
|
|
2
|
+
import { readStream } from "./error-like.ts";
|
|
3
3
|
|
|
4
|
-
/**
|
|
5
|
-
* Combines the `stderr` and `stdout` of a failed child-process error into a single trimmed string.
|
|
6
|
-
*
|
|
7
|
-
* @param error - The child-process error to read output from.
|
|
8
|
-
* @returns The joined output, or `undefined` when neither stream carried any text.
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* formatChildProcessError({ stderr: "boom" }); // "boom"
|
|
12
|
-
*/
|
|
13
4
|
function formatChildProcessError(error: unknown): string | undefined {
|
|
14
5
|
if (!isRecord(error)) {
|
|
15
6
|
return undefined;
|
package/src/error/index.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { errorMessage } from "./error-message.
|
|
2
|
-
export { formatChildProcessError } from "./format-child-process-error.
|
|
3
|
-
export { normalizeError } from "./normalize-error.
|
|
1
|
+
export { errorMessage } from "./error-message.ts";
|
|
2
|
+
export { formatChildProcessError } from "./format-child-process-error.ts";
|
|
3
|
+
export { normalizeError } from "./normalize-error.ts";
|
|
@@ -1,16 +1,6 @@
|
|
|
1
|
-
import { isErrorLike } from "./error-like.
|
|
2
|
-
import { errorMessage } from "./error-message.
|
|
1
|
+
import { isErrorLike } from "./error-like.ts";
|
|
2
|
+
import { errorMessage } from "./error-message.ts";
|
|
3
3
|
|
|
4
|
-
/**
|
|
5
|
-
* Coerces an unknown thrown value into an `Error`, reusing it when it already is one and otherwise
|
|
6
|
-
* wrapping its message while copying any error-like own properties.
|
|
7
|
-
*
|
|
8
|
-
* @param error - The caught value to normalize.
|
|
9
|
-
* @returns The value itself when it is an `Error`, otherwise a new `Error` carrying its message.
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* normalizeError("boom"); // Error: boom
|
|
13
|
-
*/
|
|
14
4
|
function normalizeError(error: unknown): Error {
|
|
15
5
|
if (Error.isError(error)) {
|
|
16
6
|
return error;
|
package/src/index.ts
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
export * from "./array/index.
|
|
2
|
-
export * from "./class/index.
|
|
3
|
-
export * from "./error/index.
|
|
4
|
-
export * from "./
|
|
5
|
-
export * from "./
|
|
6
|
-
export * from "./
|
|
7
|
-
export * from "./
|
|
8
|
-
export * from "./
|
|
9
|
-
export * from "./
|
|
10
|
-
export * from "./
|
|
11
|
-
export * from "./
|
|
12
|
-
export * from "./
|
|
13
|
-
export * from "./util/index.js";
|
|
1
|
+
export * from "./array/index.ts";
|
|
2
|
+
export * from "./class/index.ts";
|
|
3
|
+
export * from "./error/index.ts";
|
|
4
|
+
export * from "./log/index.ts";
|
|
5
|
+
export * from "./map/index.ts";
|
|
6
|
+
export * from "./object/index.ts";
|
|
7
|
+
export * from "./predicate/index.ts";
|
|
8
|
+
export * from "./process/index.ts";
|
|
9
|
+
export * from "./set/index.ts";
|
|
10
|
+
export * from "./source/index.ts";
|
|
11
|
+
export * from "./string/index.ts";
|
|
12
|
+
export * from "./util/index.ts";
|
package/src/log/create-logger.ts
CHANGED
|
@@ -1,16 +1,5 @@
|
|
|
1
|
-
import { Logger, type LoggerOptions } from "./logger.
|
|
1
|
+
import { Logger, type LoggerOptions } from "./logger.ts";
|
|
2
2
|
|
|
3
|
-
/**
|
|
4
|
-
* Creates a {@link Logger} scoped to the given namespace.
|
|
5
|
-
*
|
|
6
|
-
* @param namespace - Namespace added to the log prefix and matched against debug configuration.
|
|
7
|
-
* @param options - Further logger options, excluding the namespace.
|
|
8
|
-
* @returns A new namespaced logger.
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* const log = createLogger("react");
|
|
12
|
-
* log.info("mounted");
|
|
13
|
-
*/
|
|
14
3
|
function createLogger(namespace: string, options: Omit<LoggerOptions, "namespace"> = {}): Logger {
|
|
15
4
|
return new Logger({ ...options, namespace });
|
|
16
5
|
}
|
|
@@ -1,49 +1,23 @@
|
|
|
1
|
-
import { Logger } from "./logger.
|
|
1
|
+
import { Logger } from "./logger.ts";
|
|
2
2
|
|
|
3
|
-
/**
|
|
4
|
-
* The default namespace-less {@link Logger} backing the module-level {@link info}, {@link warn},
|
|
5
|
-
* {@link error}, and {@link debug} functions.
|
|
6
|
-
*/
|
|
7
3
|
const logger: Logger = new Logger();
|
|
8
4
|
|
|
9
|
-
/**
|
|
10
|
-
* Writes an informational line through the shared {@link logger}.
|
|
11
|
-
*
|
|
12
|
-
* @param message - The message text.
|
|
13
|
-
* @param rest - Extra values appended after the message, formatted for display.
|
|
14
|
-
*/
|
|
15
5
|
function info(message: string, ...rest: unknown[]): void {
|
|
16
6
|
logger.info(message, ...rest);
|
|
17
7
|
}
|
|
18
8
|
|
|
19
|
-
/**
|
|
20
|
-
* Writes a warning line through the shared {@link logger}.
|
|
21
|
-
*
|
|
22
|
-
* @param message - The message text.
|
|
23
|
-
* @param rest - Extra values appended after the message, formatted for display.
|
|
24
|
-
*/
|
|
25
9
|
function warn(message: string, ...rest: unknown[]): void {
|
|
26
10
|
logger.warn(message, ...rest);
|
|
27
11
|
}
|
|
28
12
|
|
|
29
|
-
/**
|
|
30
|
-
* Writes an error line through the shared {@link logger}.
|
|
31
|
-
*
|
|
32
|
-
* @param message - The message text.
|
|
33
|
-
* @param rest - Extra values appended after the message, formatted for display.
|
|
34
|
-
*/
|
|
35
13
|
function error(message: string, ...rest: unknown[]): void {
|
|
36
14
|
logger.error(message, ...rest);
|
|
37
15
|
}
|
|
38
16
|
|
|
39
|
-
/**
|
|
40
|
-
* Writes a debug line through the shared {@link logger} when debug output is enabled.
|
|
41
|
-
*
|
|
42
|
-
* @param message - The message text.
|
|
43
|
-
* @param rest - Extra values appended after the message, formatted for display.
|
|
44
|
-
*/
|
|
45
17
|
function debug(message: string, ...rest: unknown[]): void {
|
|
46
18
|
logger.debug(message, ...rest);
|
|
47
19
|
}
|
|
48
20
|
|
|
49
|
-
export { logger, info, warn, error
|
|
21
|
+
export { logger, info, warn, error };
|
|
22
|
+
/** @internal */
|
|
23
|
+
export { debug };
|
package/src/log/index.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
export { createLogger } from "./create-logger.
|
|
2
|
-
export {
|
|
3
|
-
|
|
1
|
+
export { createLogger } from "./create-logger.ts";
|
|
2
|
+
export { error, info, logger, warn } from "./default-logger.ts";
|
|
3
|
+
/** @internal */
|
|
4
|
+
export { debug } from "./default-logger.ts";
|
|
5
|
+
export { Logger, type OutputStream } from "./logger.ts";
|
package/src/log/logger.ts
CHANGED
|
@@ -2,25 +2,15 @@ import pc from "picocolors";
|
|
|
2
2
|
|
|
3
3
|
type Colors = ReturnType<typeof pc.createColors>;
|
|
4
4
|
|
|
5
|
-
/**
|
|
6
|
-
* Minimal writable-stream shape a {@link Logger} writes formatted lines to.
|
|
7
|
-
*/
|
|
8
5
|
type OutputStream = {
|
|
9
6
|
write(chunk: string): unknown;
|
|
10
|
-
/** Whether the stream is a terminal, used to decide if colored output is emitted. */
|
|
11
7
|
isTTY?: boolean | undefined;
|
|
12
8
|
};
|
|
13
9
|
|
|
14
|
-
/**
|
|
15
|
-
* Options for constructing a {@link Logger}.
|
|
16
|
-
*/
|
|
17
10
|
type LoggerOptions = {
|
|
18
|
-
/** Namespace appended to the log prefix and matched against debug configuration. */
|
|
19
11
|
namespace?: string | undefined;
|
|
20
|
-
/** Stream to write log lines to; defaults to `process.stderr`. */
|
|
21
12
|
stream?: OutputStream | undefined;
|
|
22
|
-
|
|
23
|
-
debugEnabled?: boolean | undefined;
|
|
13
|
+
isDebugEnabled?: boolean | undefined;
|
|
24
14
|
};
|
|
25
15
|
|
|
26
16
|
const BASE_PREFIX = "[gtkx]";
|
|
@@ -69,23 +59,16 @@ function getPrefix(namespace: string | undefined): string {
|
|
|
69
59
|
return namespace === undefined ? BASE_PREFIX : `[gtkx:${namespace}]`;
|
|
70
60
|
}
|
|
71
61
|
|
|
72
|
-
/**
|
|
73
|
-
* Writes prefixed, optionally colored log lines to an output stream, with debug lines gated by
|
|
74
|
-
* command-line and environment configuration.
|
|
75
|
-
*/
|
|
76
62
|
class Logger {
|
|
77
63
|
private stream: OutputStream;
|
|
78
64
|
private prefix: string;
|
|
79
|
-
private
|
|
65
|
+
private isDebugEnabled: boolean;
|
|
80
66
|
private colors: Colors;
|
|
81
67
|
|
|
82
|
-
/**
|
|
83
|
-
* @param options - Namespace, target stream, and debug configuration for the logger.
|
|
84
|
-
*/
|
|
85
68
|
constructor(options: LoggerOptions = {}) {
|
|
86
69
|
this.stream = options.stream ?? process.stderr;
|
|
87
70
|
this.prefix = getPrefix(options.namespace);
|
|
88
|
-
this.
|
|
71
|
+
this.isDebugEnabled = options.isDebugEnabled ?? isDebugEnabled(options.namespace, process.argv, process.env);
|
|
89
72
|
this.colors = getColors(this.stream);
|
|
90
73
|
}
|
|
91
74
|
|
|
@@ -94,44 +77,20 @@ class Logger {
|
|
|
94
77
|
this.stream.write(`${this.prefix} ${message}${suffix}\n`);
|
|
95
78
|
}
|
|
96
79
|
|
|
97
|
-
/**
|
|
98
|
-
* Writes an informational line.
|
|
99
|
-
*
|
|
100
|
-
* @param message - The message text.
|
|
101
|
-
* @param rest - Extra values appended after the message, formatted for display.
|
|
102
|
-
*/
|
|
103
80
|
info(message: string, ...rest: unknown[]): void {
|
|
104
81
|
this.write(message, rest);
|
|
105
82
|
}
|
|
106
83
|
|
|
107
|
-
/**
|
|
108
|
-
* Writes a line marked as a warning.
|
|
109
|
-
*
|
|
110
|
-
* @param message - The message text.
|
|
111
|
-
* @param rest - Extra values appended after the message, formatted for display.
|
|
112
|
-
*/
|
|
113
84
|
warn(message: string, ...rest: unknown[]): void {
|
|
114
85
|
this.write(`${this.colors.yellow("warn")} ${message}`, rest);
|
|
115
86
|
}
|
|
116
87
|
|
|
117
|
-
/**
|
|
118
|
-
* Writes a line marked as an error.
|
|
119
|
-
*
|
|
120
|
-
* @param message - The message text.
|
|
121
|
-
* @param rest - Extra values appended after the message, formatted for display.
|
|
122
|
-
*/
|
|
123
88
|
error(message: string, ...rest: unknown[]): void {
|
|
124
89
|
this.write(`${this.colors.red("error")} ${message}`, rest);
|
|
125
90
|
}
|
|
126
91
|
|
|
127
|
-
/**
|
|
128
|
-
* Writes a line only when debug output is enabled for this logger.
|
|
129
|
-
*
|
|
130
|
-
* @param message - The message text.
|
|
131
|
-
* @param rest - Extra values appended after the message, formatted for display.
|
|
132
|
-
*/
|
|
133
92
|
debug(message: string, ...rest: unknown[]): void {
|
|
134
|
-
if (!this.
|
|
93
|
+
if (!this.isDebugEnabled) {
|
|
135
94
|
return;
|
|
136
95
|
}
|
|
137
96
|
|
package/src/map/get-or-insert.ts
CHANGED
|
@@ -4,21 +4,6 @@ type GetSet<K, V> = {
|
|
|
4
4
|
has(key: K): boolean;
|
|
5
5
|
};
|
|
6
6
|
|
|
7
|
-
/**
|
|
8
|
-
* Returns the value stored under `key`, or inserts and returns the value produced by `factory` when
|
|
9
|
-
* the key is absent. Works with both `Map` and `WeakMap`, and caches a computed `undefined` value.
|
|
10
|
-
*
|
|
11
|
-
* @template K - The key type.
|
|
12
|
-
* @template V - The value type.
|
|
13
|
-
* @param map - The `Map` or `WeakMap` to read from and populate.
|
|
14
|
-
* @param key - The key to look up.
|
|
15
|
-
* @param factory - Produces the value to insert when `key` is absent; called at most once.
|
|
16
|
-
* @returns The existing or newly-inserted value.
|
|
17
|
-
*
|
|
18
|
-
* @example
|
|
19
|
-
* const counts = new Map<string, number[]>();
|
|
20
|
-
* getOrInsert(counts, "a", () => []).push(1); // counts is Map { "a" => [1] }
|
|
21
|
-
*/
|
|
22
7
|
function getOrInsert<K, V>(map: GetSet<K, V>, key: K, factory: (key: K) => V): V {
|
|
23
8
|
if (map.has(key)) {
|
|
24
9
|
return map.get(key) as V;
|
package/src/map/index.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { getOrInsert } from "./get-or-insert.
|
|
1
|
+
export { getOrInsert } from "./get-or-insert.ts";
|
package/src/object/index.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { omit } from "./omit.
|
|
2
|
-
export { pickBy } from "./pick-by.
|
|
3
|
-
export { structuredClone } from "./structured-clone.
|
|
1
|
+
export { omit } from "./omit.ts";
|
|
2
|
+
export { pickBy } from "./pick-by.ts";
|
|
3
|
+
export { structuredClone } from "./structured-clone.ts";
|
package/src/object/omit.ts
CHANGED
|
@@ -1,15 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Creates a new object holding every entry of `obj` except the named keys.
|
|
3
|
-
*
|
|
4
|
-
* @template T - The type of the source object.
|
|
5
|
-
* @template K - The keys to leave out.
|
|
6
|
-
* @param obj - The object to copy entries from.
|
|
7
|
-
* @param keys - The keys to leave out of the result.
|
|
8
|
-
* @returns A new object without the named keys.
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* omit({ a: 1, b: 2 }, ["a"]); // { b: 2 }
|
|
12
|
-
*/
|
|
13
1
|
function omit<T extends object, K extends keyof T>(obj: T, keys: K[]): Omit<T, K> {
|
|
14
2
|
const excluded: Set<PropertyKey> = new Set(keys);
|
|
15
3
|
const result: Record<string, unknown> = {};
|
package/src/object/pick-by.ts
CHANGED
|
@@ -1,15 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Creates a new object of the entries of `obj` that satisfy the predicate.
|
|
3
|
-
*
|
|
4
|
-
* @template T - The type of the source object.
|
|
5
|
-
* @param obj - The object to pick entries from.
|
|
6
|
-
* @param shouldPick - Called with each value and key; return `true` to keep the entry.
|
|
7
|
-
* @returns A new object holding only the entries the predicate kept.
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* pickBy({ a: 1, b: 2 }, (value) => value > 1); // { b: 2 }
|
|
11
|
-
* pickBy({ a: 1, b: 2 }, (_value, key) => key !== "a"); // { b: 2 }
|
|
12
|
-
*/
|
|
13
1
|
function pickBy<T extends Record<string, unknown>>(
|
|
14
2
|
obj: T,
|
|
15
3
|
shouldPick: (value: T[keyof T], key: keyof T) => boolean,
|
|
@@ -1,21 +1,5 @@
|
|
|
1
|
-
import { isPlainObject } from "../predicate/is-plain-object.
|
|
1
|
+
import { isPlainObject } from "../predicate/is-plain-object.ts";
|
|
2
2
|
|
|
3
|
-
/**
|
|
4
|
-
* Recursively copies arrays and plain objects, sharing every other value by reference. The result
|
|
5
|
-
* mirrors exactly the structure `isDeepEqual` traverses, so comparing a value against its earlier
|
|
6
|
-
* clone detects in-place mutations of the original. Unlike the global of the same name, class
|
|
7
|
-
* instances such as `Date` and `Map` are shared rather than copied, and no value is ever rejected.
|
|
8
|
-
*
|
|
9
|
-
* @template T - The type of the value.
|
|
10
|
-
* @param value - The value to clone.
|
|
11
|
-
* @returns A clone whose arrays and plain objects are fresh and whose other values are shared.
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* const source = { a: [{ b: 1 }] };
|
|
15
|
-
* const copy = structuredClone(source);
|
|
16
|
-
* source.a[0].b = 2;
|
|
17
|
-
* copy.a[0].b; // 1
|
|
18
|
-
*/
|
|
19
3
|
function structuredClone<T>(value: T): T {
|
|
20
4
|
if (Array.isArray(value)) {
|
|
21
5
|
return value.map((item: unknown) => structuredClone(item)) as T;
|
package/src/predicate/index.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { isDeepEqual } from "./is-deep-equal.
|
|
2
|
-
export { isPlainObject } from "./is-plain-object.
|
|
3
|
-
export { isRecord } from "./is-record.
|
|
4
|
-
export { isSameArrayBy } from "./is-same-array-by.
|
|
5
|
-
export { isSameArray } from "./is-same-array.
|
|
6
|
-
export { isShallowEqual } from "./is-shallow-equal.
|
|
1
|
+
export { isDeepEqual } from "./is-deep-equal.ts";
|
|
2
|
+
export { isPlainObject } from "./is-plain-object.ts";
|
|
3
|
+
export { isRecord } from "./is-record.ts";
|
|
4
|
+
export { isSameArrayBy } from "./is-same-array-by.ts";
|
|
5
|
+
export { isSameArray } from "./is-same-array.ts";
|
|
6
|
+
export { isShallowEqual } from "./is-shallow-equal.ts";
|
|
@@ -1,19 +1,6 @@
|
|
|
1
|
-
import { areObjectKeysEqual } from "./are-object-keys-equal.
|
|
2
|
-
import { isPlainObject } from "./is-plain-object.
|
|
1
|
+
import { areObjectKeysEqual } from "./are-object-keys-equal.ts";
|
|
2
|
+
import { isPlainObject } from "./is-plain-object.ts";
|
|
3
3
|
|
|
4
|
-
/**
|
|
5
|
-
* Checks whether two values are deeply equal: identical, arrays of the same length whose elements
|
|
6
|
-
* are deeply equal in order, or plain objects with the same own enumerable keys and deeply equal
|
|
7
|
-
* values. Values that are neither both arrays nor both plain objects are equal only when identical.
|
|
8
|
-
*
|
|
9
|
-
* @param a - The first value.
|
|
10
|
-
* @param b - The second value.
|
|
11
|
-
* @returns `true` when the values are deeply equal.
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* isDeepEqual({ a: [1, { b: 2 }] }, { a: [1, { b: 2 }] }); // true
|
|
15
|
-
* isDeepEqual({ a: [1] }, { a: [2] }); // false
|
|
16
|
-
*/
|
|
17
4
|
const isDeepArrayEqual = (a: unknown, b: unknown): boolean => {
|
|
18
5
|
if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) {
|
|
19
6
|
return false;
|
|
@@ -1,17 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Checks whether a value is a plain object, i.e. one whose prototype is `Object.prototype` or `null`.
|
|
3
|
-
*
|
|
4
|
-
* Class instances, arrays, and other exotic objects return `false`.
|
|
5
|
-
*
|
|
6
|
-
* @param value - The value to test.
|
|
7
|
-
* @returns `true` when `value` is a plain object.
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* isPlainObject({ a: 1 }); // true
|
|
11
|
-
* isPlainObject(Object.create(null)); // true
|
|
12
|
-
* isPlainObject([1, 2]); // false
|
|
13
|
-
* isPlainObject(new Date()); // false
|
|
14
|
-
*/
|
|
15
1
|
function isPlainObject(value: unknown): value is Record<string, unknown> {
|
|
16
2
|
if (typeof value !== "object" || value === null) {
|
|
17
3
|
return false;
|
|
@@ -1,14 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Checks whether a value is a non-null object (including arrays and class instances, excluding `null`).
|
|
3
|
-
*
|
|
4
|
-
* @param value - The value to test.
|
|
5
|
-
* @returns `true` when `value` is a non-null object.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* isRecord({ a: 1 }); // true
|
|
9
|
-
* isRecord(null); // false
|
|
10
|
-
* isRecord("x"); // false
|
|
11
|
-
*/
|
|
12
1
|
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
13
2
|
return typeof value === "object" && value !== null;
|
|
14
3
|
}
|
|
@@ -1,15 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Checks whether two arrays have the same length and elements the comparator treats as equal, in order.
|
|
3
|
-
*
|
|
4
|
-
* @template T - The type of the array elements.
|
|
5
|
-
* @param a - The first array.
|
|
6
|
-
* @param b - The second array.
|
|
7
|
-
* @param isEqual - Compares elements at the same index; return `true` when they are equal.
|
|
8
|
-
* @returns `true` when the arrays are element-wise equal under `isEqual`.
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* isSameArrayBy([{ id: 1 }], [{ id: 1 }], (x, y) => x.id === y.id); // true
|
|
12
|
-
*/
|
|
13
1
|
function isSameArrayBy<T>(a: T[], b: T[], isEqual: (x: T, y: T) => boolean): boolean {
|
|
14
2
|
if (a.length !== b.length) {
|
|
15
3
|
return false;
|
|
@@ -1,17 +1,5 @@
|
|
|
1
|
-
import { isSameArrayBy } from "./is-same-array-by.
|
|
1
|
+
import { isSameArrayBy } from "./is-same-array-by.ts";
|
|
2
2
|
|
|
3
|
-
/**
|
|
4
|
-
* Checks whether two arrays have the same length and strictly equal (`===`) elements in order.
|
|
5
|
-
*
|
|
6
|
-
* @template T - The type of the array elements.
|
|
7
|
-
* @param a - The first array.
|
|
8
|
-
* @param b - The second array.
|
|
9
|
-
* @returns `true` when the arrays are element-wise strictly equal.
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* isSameArray([1, 2], [1, 2]); // true
|
|
13
|
-
* isSameArray([1, 2], [2, 1]); // false
|
|
14
|
-
*/
|
|
15
3
|
function isSameArray<T>(a: T[], b: T[]): boolean {
|
|
16
4
|
return isSameArrayBy(a, b, (x, y) => x === y);
|
|
17
5
|
}
|
|
@@ -1,20 +1,6 @@
|
|
|
1
|
-
import { areObjectKeysEqual } from "./are-object-keys-equal.
|
|
2
|
-
import { isPlainObject } from "./is-plain-object.
|
|
1
|
+
import { areObjectKeysEqual } from "./are-object-keys-equal.ts";
|
|
2
|
+
import { isPlainObject } from "./is-plain-object.ts";
|
|
3
3
|
|
|
4
|
-
/**
|
|
5
|
-
* Checks whether two values are shallowly equal: identical, or plain objects with the same own
|
|
6
|
-
* enumerable keys and strictly equal (`===`) values. Values that are not both plain objects are
|
|
7
|
-
* equal only when identical.
|
|
8
|
-
*
|
|
9
|
-
* @param a - The first value.
|
|
10
|
-
* @param b - The second value.
|
|
11
|
-
* @returns `true` when the values are shallowly equal.
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* isShallowEqual({ a: 1 }, { a: 1 }); // true
|
|
15
|
-
* isShallowEqual({ a: 1 }, { a: 2 }); // false
|
|
16
|
-
* isShallowEqual(3, 3); // true
|
|
17
|
-
*/
|
|
18
4
|
const isStrictEqual = (a: unknown, b: unknown): boolean => a === b;
|
|
19
5
|
|
|
20
6
|
function isShallowEqual(a: unknown, b: unknown): boolean {
|
|
@@ -1,14 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Maps a terminating signal to its conventional process exit code (130 for `SIGINT`, 143 otherwise),
|
|
3
|
-
* or 0 when no signal is given.
|
|
4
|
-
*
|
|
5
|
-
* @param signal - The signal that triggered termination, or `null`.
|
|
6
|
-
* @returns The conventional exit code for the signal.
|
|
7
|
-
*
|
|
8
|
-
* @example
|
|
9
|
-
* exitCodeForSignal("SIGINT"); // 130
|
|
10
|
-
* exitCodeForSignal(null); // 0
|
|
11
|
-
*/
|
|
12
1
|
function exitCodeForSignal(signal: NodeJS.Signals | null): number {
|
|
13
2
|
if (!signal) {
|
|
14
3
|
return 0;
|
package/src/process/index.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { exitCodeForSignal } from "./exit-code-for-signal.
|
|
2
|
-
export { installGracefulShutdown } from "./install-graceful-shutdown.
|
|
3
|
-
export { resolveExecutable } from "./resolve-executable.
|
|
1
|
+
export { exitCodeForSignal } from "./exit-code-for-signal.ts";
|
|
2
|
+
export { installGracefulShutdown } from "./install-graceful-shutdown.ts";
|
|
3
|
+
export { resolveExecutable } from "./resolve-executable.ts";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { error } from "../log/default-logger.
|
|
2
|
-
import { exitCodeForSignal } from "./exit-code-for-signal.
|
|
1
|
+
import { error } from "../log/default-logger.ts";
|
|
2
|
+
import { exitCodeForSignal } from "./exit-code-for-signal.ts";
|
|
3
3
|
|
|
4
4
|
type GracefulShutdownOptions = {
|
|
5
5
|
onSignal: (signal: NodeJS.Signals) => void | Promise<void>;
|
|
@@ -14,8 +14,8 @@ type ShutdownState = {
|
|
|
14
14
|
forceKillMs: number;
|
|
15
15
|
coalesceWindowMs: number;
|
|
16
16
|
firstSignal: NodeJS.Signals | null;
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
hasExited: boolean;
|
|
18
|
+
isCoalescing: boolean;
|
|
19
19
|
forceTimer: NodeJS.Timeout | null;
|
|
20
20
|
coalesceTimer: NodeJS.Timeout | null;
|
|
21
21
|
};
|
|
@@ -37,11 +37,11 @@ const clearTimers = (state: ShutdownState): void => {
|
|
|
37
37
|
};
|
|
38
38
|
|
|
39
39
|
const finish = (state: ShutdownState, signal: NodeJS.Signals, isGraceful: boolean): void => {
|
|
40
|
-
if (state.
|
|
40
|
+
if (state.hasExited) {
|
|
41
41
|
return;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
state.
|
|
44
|
+
state.hasExited = true;
|
|
45
45
|
clearTimers(state);
|
|
46
46
|
const { exitCode } = state.options;
|
|
47
47
|
const defaultCode = isGraceful ? 0 : exitCodeForSignal(signal);
|
|
@@ -62,10 +62,10 @@ const beginShutdown = (state: ShutdownState, signal: NodeJS.Signals): void => {
|
|
|
62
62
|
state.firstSignal = signal;
|
|
63
63
|
|
|
64
64
|
if (state.coalesceWindowMs > 0) {
|
|
65
|
-
state.
|
|
65
|
+
state.isCoalescing = true;
|
|
66
66
|
|
|
67
67
|
state.coalesceTimer = setTimeout(() => {
|
|
68
|
-
state.
|
|
68
|
+
state.isCoalescing = false;
|
|
69
69
|
}, state.coalesceWindowMs);
|
|
70
70
|
|
|
71
71
|
state.coalesceTimer.unref();
|
|
@@ -90,7 +90,7 @@ const handle = (state: ShutdownState, signal: NodeJS.Signals): void => {
|
|
|
90
90
|
return;
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
if (state.
|
|
93
|
+
if (state.isCoalescing) {
|
|
94
94
|
return;
|
|
95
95
|
}
|
|
96
96
|
|
|
@@ -98,20 +98,14 @@ const handle = (state: ShutdownState, signal: NodeJS.Signals): void => {
|
|
|
98
98
|
finish(state, signal, false);
|
|
99
99
|
};
|
|
100
100
|
|
|
101
|
-
/**
|
|
102
|
-
* Registers handlers for `SIGINT`, `SIGTERM`, and `SIGHUP` that run the given cleanup callback once
|
|
103
|
-
* and then exit, forcing exit if a repeated signal arrives or the cleanup exceeds its timeout.
|
|
104
|
-
*
|
|
105
|
-
* @param options - The shutdown callbacks and timing configuration.
|
|
106
|
-
*/
|
|
107
101
|
function installGracefulShutdown(options: GracefulShutdownOptions): void {
|
|
108
102
|
const state: ShutdownState = {
|
|
109
103
|
options,
|
|
110
104
|
forceKillMs: options.forceKillAfterMs ?? DEFAULT_FORCE_KILL_TIMEOUT_MS,
|
|
111
105
|
coalesceWindowMs: options.coalesceWindowMs ?? DEFAULT_COALESCE_WINDOW_MS,
|
|
112
106
|
firstSignal: null,
|
|
113
|
-
|
|
114
|
-
|
|
107
|
+
hasExited: false,
|
|
108
|
+
isCoalescing: false,
|
|
115
109
|
forceTimer: null,
|
|
116
110
|
coalesceTimer: null,
|
|
117
111
|
};
|
|
@@ -25,17 +25,6 @@ const findOnPath = (command: string): string | undefined => {
|
|
|
25
25
|
return undefined;
|
|
26
26
|
};
|
|
27
27
|
|
|
28
|
-
/**
|
|
29
|
-
* Resolves an executable to an absolute path, searching `PATH` only for a bare command name, so
|
|
30
|
-
* spawning it never re-runs a lookup against a `PATH` that may have changed.
|
|
31
|
-
*
|
|
32
|
-
* @param command - An executable name, or a path to one.
|
|
33
|
-
* @returns The absolute path of the executable.
|
|
34
|
-
* @throws When a bare command name is not found on `PATH`.
|
|
35
|
-
*
|
|
36
|
-
* @example
|
|
37
|
-
* resolveExecutable("weston"); // "/usr/bin/weston"
|
|
38
|
-
*/
|
|
39
28
|
function resolveExecutable(command: string): string {
|
|
40
29
|
if (isAbsolute(command)) {
|
|
41
30
|
return command;
|
package/src/set/drain.ts
CHANGED
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Iterates every item currently in `set`, then clears it. Use it to drain a set of pending work
|
|
3
|
-
* accumulated since the last drain.
|
|
4
|
-
*
|
|
5
|
-
* @template T - The set item type.
|
|
6
|
-
* @param set - The set to drain and clear.
|
|
7
|
-
* @param visit - Called with each item before the set is cleared.
|
|
8
|
-
*/
|
|
9
1
|
const drain = <T>(set: Set<T>, visit: (item: T) => void): void => {
|
|
10
2
|
for (const item of set) {
|
|
11
3
|
visit(item);
|
package/src/set/index.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { drain } from "./drain.
|
|
1
|
+
export { drain } from "./drain.ts";
|
package/src/source/index.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { sanitizeIdentifier } from "./sanitize-identifier.
|
|
2
|
-
export { sourceStringLiteral } from "./source-string-literal.
|
|
3
|
-
export { toCamelIdentifier } from "./to-camel-identifier.
|
|
1
|
+
export { sanitizeIdentifier } from "./sanitize-identifier.ts";
|
|
2
|
+
export { sourceStringLiteral } from "./source-string-literal.ts";
|
|
3
|
+
export { toCamelIdentifier } from "./to-camel-identifier.ts";
|
|
@@ -48,17 +48,6 @@ const RESERVED: Set<string> = new Set([
|
|
|
48
48
|
"yield",
|
|
49
49
|
]);
|
|
50
50
|
|
|
51
|
-
/**
|
|
52
|
-
* Returns the name unchanged, or with a trailing underscore when it collides with a reserved word,
|
|
53
|
-
* so it is safe to emit as a JavaScript identifier.
|
|
54
|
-
*
|
|
55
|
-
* @param name - The candidate identifier.
|
|
56
|
-
* @returns The name, suffixed with `_` when it is a reserved word.
|
|
57
|
-
*
|
|
58
|
-
* @example
|
|
59
|
-
* sanitizeIdentifier("iconName"); // "iconName"
|
|
60
|
-
* sanitizeIdentifier("class"); // "class_"
|
|
61
|
-
*/
|
|
62
51
|
function sanitizeIdentifier(name: string): string {
|
|
63
52
|
return RESERVED.has(name) ? `${name}_` : name;
|
|
64
53
|
}
|