Skip to content

Standard Library

ISL includes a standard library of modules that provide common operations. Import them with the use keyword.

Importing modules

// Import entire module
use @isl/string
// Import with alias
use @isl/math as math
// Import specific items
use { Length, Trim, Contains } from @isl/string

Core modules (ISL 1.0)

@isl/string

String manipulation functions. 100% deterministic.

use @isl/string
preconditions {
Length(name) > 0
Length(name) <= 100
Contains(email, "@")
not IsEmpty(description)
}
FunctionDescriptionExample
Length(s)String lengthLength("hello")5
Trim(s)Remove leading/trailing whitespaceTrim(" hi ")"hi"
Contains(s, sub)Check substringContains("hello", "ell")true
StartsWith(s, prefix)Check prefixStartsWith("hello", "he")true
EndsWith(s, suffix)Check suffixEndsWith("hello", "lo")true
ToUpper(s)UppercaseToUpper("hello")"HELLO"
ToLower(s)LowercaseToLower("HELLO")"hello"
Replace(s, old, new)Replace substringReplace("foo", "o", "a")"faa"
Split(s, sep)Split into listSplit("a,b", ",")["a","b"]
IsEmpty(s)Check if emptyIsEmpty("")true

@isl/math

Mathematical operations. 100% deterministic.

use @isl/math
postconditions {
success implies {
result.total == Round(subtotal * (1 + tax_rate), 2)
Abs(result.balance) <= max_overdraft
}
}
FunctionDescriptionExample
Abs(n)Absolute valueAbs(-5)5
Min(a, b)Minimum of two valuesMin(3, 7)3
Max(a, b)Maximum of two valuesMax(3, 7)7
Round(n, places)Round to decimal placesRound(3.456, 2)3.46
Floor(n)Round downFloor(3.7)3
Ceil(n)Round upCeil(3.2)4
Clamp(n, min, max)Clamp to rangeClamp(15, 0, 10)10

@isl/collections

List and Map operations. 100% deterministic.

use @isl/collections
postconditions {
success implies {
Size(result.items) > 0
Contains(result.tags, "verified")
not IsEmpty(result.items)
}
}
FunctionDescriptionExample
Size(collection)Number of elementsSize([1,2,3])3
Contains(coll, item)Check membershipContains([1,2], 1)true
IsEmpty(coll)Check if emptyIsEmpty([])true
First(list)First elementFirst([1,2,3])1
Last(list)Last elementLast([1,2,3])3
Flatten(list)Flatten nested listsFlatten([[1],[2]])[1,2]
Keys(map)Map keysKeys({a:1})["a"]
Values(map)Map valuesValues({a:1})[1]

@isl/json

JSON parsing and manipulation. 100% deterministic.

use @isl/json
preconditions {
IsValidJson(payload)
}
postconditions {
success implies {
GetField(result.metadata, "version") == "1.0"
}
}
FunctionDescription
IsValidJson(s)Check if valid JSON
GetField(json, path)Extract field by path
HasField(json, path)Check field existence

@isl/datetime

Date and time operations. Mixed determinism (some functions depend on current time).

use @isl/datetime
postconditions {
success implies {
result.created_at <= Now()
DurationBetween(result.start, result.end) > 0
IsAfter(result.expires_at, Now())
}
}
FunctionDescriptionDeterministic
Now()Current timestampNo
DurationBetween(a, b)Duration between timestampsYes
AddDuration(ts, dur)Add duration to timestampYes
IsBefore(a, b)Check temporal orderingYes
IsAfter(a, b)Check temporal orderingYes
FormatTimestamp(ts, fmt)Format as stringYes

@isl/uuid

UUID generation and validation. Mixed determinism.

use @isl/uuid
postconditions {
success implies {
IsValidUUID(result.id)
}
}
FunctionDescriptionDeterministic
GenerateUUID()Generate new UUIDNo
IsValidUUID(s)Validate UUID formatYes

@isl/crypto

Cryptographic operations. Mixed determinism.

use @isl/crypto
postconditions {
success implies {
Length(Hash(result.content)) == 64
}
}
FunctionDescriptionDeterministic
Hash(data)SHA-256 hashYes
HmacSign(data, key)HMAC signatureYes
HmacVerify(data, sig, key)Verify HMACYes
GenerateToken(len)Random tokenNo

@isl/encoding

Encoding and decoding. 100% deterministic.

FunctionDescription
Base64Encode(data)Encode to Base64
Base64Decode(s)Decode from Base64
UrlEncode(s)URL-encode string
UrlDecode(s)URL-decode string

@isl/regex

Pattern matching. 100% deterministic.

use @isl/regex
preconditions {
Matches(email, "^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$")
Matches(phone, "^\\+[1-9]\\d{1,14}$")
}
FunctionDescription
Matches(s, pattern)Test regex match
FindAll(s, pattern)Find all matches
ReplaceAll(s, pattern, repl)Replace all matches

@isl/url

URL parsing and manipulation. 100% deterministic.

FunctionDescription
ParseUrl(s)Parse URL into parts
GetHost(url)Extract hostname
GetPath(url)Extract path
GetQuery(url, key)Extract query parameter
IsValidUrl(s)Validate URL format

Using stdlib in specs

domain NotificationService {
use @isl/string
use @isl/datetime
use @isl/regex
behavior SendEmail {
input {
to: Email
subject: String
body: String
}
preconditions {
Matches(to, "^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$")
not IsEmpty(subject)
Length(subject) <= 200
not IsEmpty(body)
}
postconditions {
success implies {
result.sent_at <= Now()
result.recipient == to
result.subject == subject
}
}
}
}