# node:util

> How Elide supports Node's `util` and `util/types`: format, inspect, promisify, parseArgs and the type predicates, and the inspect options and functions that are missing.

`node:util` and `node:util/types` provide [Node's utilities](https://nodejs.org/api/util.html), including `format`,
`inspect`, `promisify`, `parseArgs`, `parseEnv`, `styleText`, `MIMEType` and the `types` predicates; `node:sys` returns
the same object.

## Example

```js
// util.mjs
import { format, inspect, isDeepStrictEqual, parseArgs, types } from "node:util";

console.log(format("%s has %d items", "cart", 3));
console.log(inspect({ tags: new Set(["a", "b"]), nested: { deep: { deeper: {} } } }, { depth: 0 }));

const { values, positionals } = parseArgs({
  args: ["--port", "8080", "-v", "app.js"],
  options: { port: { type: "string" }, verbose: { type: "boolean", short: "v" } },
  allowPositionals: true,
});
console.log(values.port, values.verbose, positionals.join());
console.log(types.isPromise(Promise.resolve()), isDeepStrictEqual({ a: [1] }, { a: [1] }));
```

`elide run util.mjs` prints:

```text
cart has 3 items
{ tags: [Set], nested: [Object] }
8080 true app.js
true true
```

## Differences from Node

- `inspect` ignores `numericSeparator` and `getters`, and does not color regular expressions.
- `getCallSites()` calls a user-defined `Error.prepareStackTrace`.
- `diff()` is missing; `toUSVString()` and `log()` throw `ERR_METHOD_NOT_IMPLEMENTED`.
- `util.types` predicates are non-enumerable; list them with `Object.getOwnPropertyNames(util.types)`.

<!-- api-reference:start 882dc6af0216 -->
## Reference

**Status:** Partial · 9 of 18 suite tests pass (50.0%) · since 1.1.0

### Exports

| Export | Kind | Status | Notes |
| --- | --- | --- | --- |
| `format()` | function | Full | Formats a string using printf-style substitution patterns (%s, %d, %o, etc.) |
| `formatWithOptions()` | function | Full | Like format(), but accepts an explicit util.inspect options object for the first argument |
| `inspect()` | function | Full | Returns a string representation of an object for debugging |
| `promisify()` | function | Full | Wraps a callback-based function so it returns a Promise |
| `inherits()` | function | Full | Sets up prototype inheritance between a constructor and a superclass |
| `isDeepStrictEqual()` | function | Full | Returns true if two values are deeply equal using the strict equality algorithm |
| `deprecate()` | function | Full | Wraps a function to emit a deprecation warning when called |
| `debuglog()` | function | Full | Returns a logging function that writes to stderr only if the NODE_DEBUG env variable includes section |
| `callbackify()` | function | Full | Wraps an async function (or a function that returns a Promise) so it follows the error-first callback… |
| `getSystemErrorName()` | function | Full | Returns the string name for a numeric error code (the errno value) |
| `getSystemErrorMessage()` | function | Full | Returns the string message for a numeric error code (the errno value) |
| `getSystemErrorMap()` | function | Full | Returns a Map of all system error codes to [name, message] pairs |
| `toUSVString()` | function | Full | Returns a string after replacing any lone surrogates with the Unicode replacement character U+FFFD |
| `stripVTControlCharacters()` | function | Full | Removes ANSI escape codes (including color and cursor movement) from a string |
| `styleText()` | function | Full | Formats text with ANSI styling for terminal output |
| `getCallSites()` | function | Full | Returns an array of call site objects representing the current call stack |
| `parseEnv()` | function | Full | Parses a .env file content string into a key-value object |
| `log()` | function | Full | Writes a formatted timestamp + message to stdout (similar to console.log but with a timestamp) |
| `types` | property | Full | Object with type-checking predicates (e.g. util.types.isDate, util.types.isMap) |
| `TextEncoder` | property | Full | The WHATWG TextEncoder class |
| `TextDecoder` | property | Full | The WHATWG TextDecoder class |

### Not implemented

`convertProcessSignalToExitCode`, `debug`, `diff`, `isArray`, `setTraceSigInt`, `transferableAbortController`, `transferableAbortSignal`.

**Tests:** [node-api `node:util`](https://github.com/elide-dev/testsuite/blob/main/reports/1.6.0%2B6e718933f/4cbcae6c33a8/node-api/node-api.md): 9 pass, 8 fail, 1 error, 12 skipped. Failing: `test-util-callbackify.js`, `test-util-format.js`, `test-util-getcallsites-preparestacktrace.js`, `test-util-getcallsites-sourcemap.js`, `test-util-inspect-getters-accessing-this.js`, `test-util-inspect-long-running.js`, `test-util-inspect-namespace.js`, `test-util-inspect-regexp.js`, and 1 more.
<!-- api-reference:end -->
