Documentation Index
Fetch the complete documentation index at: https://mintlify.com/prismatic-io/spectral/llms.txt
Use this file to discover all available pages before exploring further.
The util.types namespace provides functions for checking and coercing values to specific types. They are especially useful in action perform functions where input values arrive as unknown.
import util from "@prismatic-io/spectral";
// Check
util.types.isBool(value);
// Coerce
util.types.toBool(value);
Boolean
isBool(value)
Returns true if value is strictly true or false.
util.types.isBool(false); // true
util.types.isBool("Hello"); // false
toBool(value, defaultValue?)
Converts truthy and falsy string/boolean values to a boolean. The check is case-insensitive.
| Input | Result |
|---|
true, "t", "true", "y", "yes" | true |
false, "f", "false", "n", "no" | false |
undefined or "" | defaultValue (or false if omitted) |
util.types.toBool("yes"); // true
util.types.toBool("T"); // true
util.types.toBool("no"); // false
util.types.toBool("", true); // true (default applied)
util.types.toBool(undefined); // false
Integer
isInt(value)
Returns true only when value is an integer (not a float, not a numeric string).
util.types.isInt(5); // true
util.types.isInt("5"); // false
util.types.isInt(5.5); // false
toInt(value, defaultValue?)
Converts a number or numeric string to an integer, truncating any fractional part.
util.types.toInt(5.5); // 5
util.types.toInt("20.3"); // 20
util.types.toInt("", 1); // 1 (default applied)
util.types.toInt(undefined); // 0
// Throws if value cannot be coerced:
util.types.toInt("abc"); // Error: Value 'abc' cannot be coerced to int.
Number
isNumber(value)
Returns true when value can be coerced to a finite number.
util.types.isNumber(3.21); // true
util.types.isNumber("5.5"); // true
util.types.isNumber("Hello"); // false
toNumber(value, defaultValue?)
Coerces a value to a number. Returns defaultValue (or 0) for undefined, null, or "".
util.types.toNumber("3.22"); // 3.22
util.types.toNumber("", 5.5); // 5.5
util.types.toNumber(null, 5.5); // 5.5
util.types.toNumber(undefined); // 0
// Throws if value cannot be coerced:
util.types.toNumber("Hello"); // Error: Value 'Hello' cannot be coerced to a number.
BigInt
isBigInt(value)
Returns true if value is of type bigint.
util.types.isBigInt(3n); // true
util.types.isBigInt(3); // false
toBigInt(value)
Coerces an integer, integer string, bigint, or boolean to a bigint.
util.types.toBigInt(3); // 3n
util.types.toBigInt("-5"); // -5n
util.types.toBigInt(true); // 1n
util.types.toBigInt(false); // 0n
// Throws for floats:
util.types.toBigInt("5.5"); // Error: Value '5.5' cannot be coerced to bigint.
Date
isDate(value)
Returns true if value is a JavaScript Date object.
util.types.isDate(new Date()); // true
util.types.isDate("2021-03-20"); // false
toDate(value)
Parses an ISO 8601 date string or a UNIX epoch timestamp (seconds) into a Date object.
util.types.toDate(new Date("1995-12-17T03:24:00"));
// => Date('1995-12-17T09:24:00.000Z')
util.types.toDate("2021-03-20");
// => Date('2021-03-20T05:00:00.000Z')
util.types.toDate(1616198400);
// => Date('2021-03-20T00:00:00.000Z')
// Throws if value is not a valid date:
util.types.toDate("not-a-date"); // Error: Value 'not-a-date' cannot be coerced to date.
URL
isUrl(value)
Returns true if value is a syntactically valid URL. Does not verify network reachability.
util.types.isUrl("https://prismatic.io"); // true
util.types.isUrl("https:://prismatic.io"); // false (extra ":")
String
isString(value)
Returns true for primitive strings and String object instances.
util.types.isString("value"); // true
util.types.isString(new String("value")); // true
util.types.isString(["value"]); // false
util.types.isString(4); // false
toString(value, defaultValue?)
Converts any value to a string via template literal coercion. Returns defaultValue (or "") for undefined.
util.types.toString("Hello"); // "Hello"
util.types.toString(5.5); // "5.5"
util.types.toString("", "Some default"); // "Some default"
util.types.toString(undefined); // ""
JSON
isJSON(value)
Returns true if value is a string that parses as valid JSON. Numbers and booleans encoded as strings are also considered valid.
util.types.isJSON(""); // false
util.types.isJSON("5"); // true
util.types.isJSON('{"name":"John","age":30}'); // true
util.types.isJSON("someString"); // false
toJSON(value, prettyPrint?, retainKeyOrder?)
Safely serializes any value to a JSON string. Circular references are silently dropped.
When true, produces indented JSON with 2-space indentation. When false, produces compact JSON.
When false (default), keys are sorted alphabetically. When true, keys preserve insertion order.
const payload = { foo: "bar", baz: "buz" };
util.types.toJSON(payload);
// '{\n "baz": "buz",\n "foo": "bar"\n}'
util.types.toJSON(payload, true, true);
// '{\n "foo": "bar",\n "baz": "buz"\n}'
util.types.toJSON(payload, false, true);
// '{"foo":"bar","baz":"buz"}'
// Circular references are dropped:
const value: Record<string, unknown> = {};
value.value = value;
util.types.toJSON(value);
// '{}'
toJSON is safe to use in log statements — it handles objects with circular references or function properties that would cause JSON.stringify to throw.
Buffer / data payload
isBufferDataPayload(value)
Returns true if value is an object with a data property that is a Buffer.
util.types.isBufferDataPayload({ data: Buffer.from("hello"), contentType: "text/plain" });
// true
util.types.isBufferDataPayload({ data: "hello" });
// false — data must be a Buffer
toBufferDataPayload(value)
Converts strings, Buffers, Uint8Arrays, and objects to a DataPayload — an object with data (Buffer) and contentType (string) fields.
| Input type | contentType |
|---|
string | "text/plain" |
Buffer | "application/octet-stream" |
Uint8Array | "application/octet-stream" |
object / Array | "application/json" |
Existing DataPayload | preserved as-is |
const { data, contentType } = util.types.toBufferDataPayload("hello world");
// data => Buffer containing "hello world"
// contentType => "text/plain"
const { data: jsonData, contentType: jsonType } =
util.types.toBufferDataPayload({ foo: "bar" });
// jsonData => Buffer containing '{"foo":"bar"}'
// jsonType => "application/json"
isData(value) / toData(value) Deprecated
Aliases for isBufferDataPayload and toBufferDataPayload. Use the non-deprecated versions in new code.
Key-value pairs
keyValPairListToObject(kvpList, valueConverter?)
Transforms an array of { key, value } pairs (as produced by a Spectral key-value list input) into a plain object.
An array of objects, each with key (string) and value properties.
valueConverter
(value: unknown) => TValue
Optional function applied to each value before it is added to the result object.
const kvList = [
{ key: "foo", value: "bar" },
{ key: "myKey", value: "myValue" },
];
util.types.keyValPairListToObject(kvList);
// { foo: "bar", myKey: "myValue" }
// With a value converter:
util.types.keyValPairListToObject(kvList, (v) => String(v).toUpperCase());
// { foo: "BAR", myKey: "MYVALUE" }
// Handles undefined/null/empty gracefully:
util.types.keyValPairListToObject(undefined as any);
// {}
Connection
isConnection(value)
Returns true if value has the shape of a Spectral connection definition — a key, label, and an inputs object. For OAuth 2.0 connections it also validates required OAuth fields.
util.types.isConnection({
key: "myConnection",
label: "My Connection",
inputs: { apiUrl: "https://api.example.com" },
}); // true
util.types.isConnection("not-a-connection"); // false
Element
isElement(value)
Returns true if value is an object with a truthy key property. An optional label property is allowed.
util.types.isElement({ key: "foo" }); // true
util.types.isElement({ key: "foo", label: "Foo" }); // true
util.types.isElement({ label: "Foo" }); // false — missing key
Object selection and field maps
ObjectSelection
ObjectFieldMap
JSONForm
isObjectSelection(value)
Returns true if value is an array where every item has a truthy object property. Also accepts a JSON string.util.types.isObjectSelection([{ object: "foo" }]); // true
util.types.isObjectSelection('[{"object":"foo"}]'); // true — parsed from JSON
util.types.isObjectSelection([{ missingObject: "foo" }]); // false
toObjectSelection(value)
Coerces value to an ObjectSelection array or throws.util.types.toObjectSelection([{ object: "foo" }]);
// [{ object: "foo" }]
util.types.toObjectSelection('[{"object":"foo"}]');
// [{ object: "foo" }]
// Throws:
util.types.toObjectSelection([{ missingObject: "foo" }]);
// Error: Value ... cannot be coerced to ObjectSelection.
isObjectFieldMap(value)
Returns true if value is an object with a fields array where every item has a field property that satisfies isElement. Also accepts a JSON string.util.types.isObjectFieldMap({ fields: [{ field: { key: "foo" } }] }); // true
util.types.isObjectFieldMap({ fields: [{ field: { key: "foo", label: "Foo" } }] }); // true
util.types.isObjectFieldMap({ fields: [{ missingField: { key: "foo" } }] }); // false
toObjectFieldMap(value)
Coerces value to an ObjectFieldMap or throws.util.types.toObjectFieldMap({ fields: [{ field: { key: "id", label: "ID" } }] });
// { fields: [{ field: { key: "id", label: "ID" } }] }
// Throws:
util.types.toObjectFieldMap({ missingFields: [] });
// Error: Value ... cannot be coerced to ObjectFieldMap.
Returns true if value has truthy schema, uiSchema, and data properties. Also accepts a JSON string.util.types.isJSONForm({ schema: {}, uiSchema: {}, data: {} }); // true
util.types.isJSONForm({ schema: {}, uiSchema: {} }); // false — missing data
Coerces value to a JSONForm or throws.util.types.toJSONForm({ schema: {}, uiSchema: {}, data: {} });
// { schema: {}, uiSchema: {}, data: {} }
// Throws:
util.types.toJSONForm({ schema: {}, uiSchema: {} });
// Error: Value ... cannot be coerced to JSONForm.
Picklist and schedule
isPicklist(value)
Returns true if value is an array where every item is a string (or String object) or an Element.
util.types.isPicklist(["value", new String("value")]); // true
util.types.isPicklist([{ key: "foo" }, { key: "bar", label: "Bar" }]); // true
util.types.isPicklist(["value", 4]); // false — mixed types
util.types.isPicklist("value"); // false — not an array
isSchedule(value)
Returns true if value is an object with a truthy value property (representing a cron expression).
util.types.isSchedule({ value: "00 00 * * 2,3" }); // true
util.types.isSchedule({
value: "00 00 * * 2,3",
scheduleType: "week",
timeZone: "America/Chicago",
}); // true
util.types.isSchedule({ missingValue: "00 00 * * 2,3" }); // false
Object utilities
cleanObject(obj, predicate?)
Removes properties from an object that match a predicate. By default removes undefined, null, and "" values.
Optional function that returns true for properties to remove. Defaults to removing undefined, null, and "" values.
util.types.cleanObject({
foo: "bar",
bar: undefined,
baz: null,
buz: false,
biz: "",
});
// { foo: "bar", buz: false }
// Custom predicate — remove even numbers:
util.types.cleanObject(
{ foo: 1, bar: 2, baz: 3 },
(v) => v % 2 === 0,
);
// { foo: 1, baz: 3 }
Lowercases all header keys in an object, preserving their values.
util.types.lowerCaseHeaders({ "Content-Type": "Application/JSON" });
// { "content-type": "Application/JSON" }
util.types.lowerCaseHeaders({ "Cache-Control": "max-age=604800" });
// { "cache-control": "max-age=604800" }
toObject(value)
Parses a JSON string into an object, or returns the value as-is if it is already an object.
util.types.toObject('{"foo":"bar","baz":123}');
// { foo: "bar", baz: 123 }
util.types.toObject({ foo: "bar", baz: 123 });
// { foo: "bar", baz: 123 }