or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

advanced

combinators.mdconcurrency-testing.mdmodel-based-testing.md
configuration.mdindex.md
tile.json

web.mddocs/arbitraries/

Web and Network Arbitraries

Web and network arbitraries generate URLs, email addresses, IP addresses, domain names, and unique identifiers following web standards.

Capabilities

URL Generation

Generate complete URLs and URL components.

/**
 * Generate complete valid URLs
 * @param constraints - URL scheme, authority, and path constraints
 * @returns Arbitrary generating URLs
 */
function webUrl(constraints?: WebUrlConstraints): Arbitrary<string>;

/**
 * Generate web authority parts (domain with optional port and user info)
 * @param constraints - Authority component constraints
 * @returns Arbitrary generating authority strings
 */
function webAuthority(constraints?: WebAuthorityConstraints): Arbitrary<string>;

/**
 * Generate URL paths
 * @param constraints - Path constraints
 * @returns Arbitrary generating URL paths
 */
function webPath(constraints?: WebPathConstraints): Arbitrary<string>;

/**
 * Generate URL path segments
 * @param constraints - Segment constraints
 * @returns Arbitrary generating path segments
 */
function webSegment(constraints?: WebSegmentConstraints): Arbitrary<string>;

/**
 * Generate URL query parameter strings
 * @param constraints - Query parameter constraints
 * @returns Arbitrary generating query strings
 */
function webQueryParameters(constraints?: WebQueryParametersConstraints): Arbitrary<string>;

/**
 * Generate URL fragment identifiers
 * @param constraints - Fragment constraints
 * @returns Arbitrary generating fragment strings
 */
function webFragments(constraints?: WebFragmentsConstraints): Arbitrary<string>;

interface WebUrlConstraints {
  authoritySettings?: WebAuthorityConstraints;
  validSchemes?: string[];
  withFragments?: boolean;
  withQueryParameters?: boolean;
  size?: SizeForArbitrary;
}

interface WebAuthorityConstraints {
  withIPv4?: boolean;
  withIPv4Extended?: boolean;
  withIPv6?: boolean;
  withPort?: boolean;
  withUserInfo?: boolean;
  size?: SizeForArbitrary;
}

interface WebPathConstraints {
  size?: SizeForArbitrary;
}

interface WebSegmentConstraints {
  size?: SizeForArbitrary;
}

interface WebQueryParametersConstraints {
  size?: SizeForArbitrary;
}

interface WebFragmentsConstraints {
  size?: SizeForArbitrary;
}

Usage Examples:

import {
  webUrl,
  webAuthority,
  webPath,
  webQueryParameters,
  property,
  assert,
} from 'fast-check';

// Generate complete URLs
assert(
  property(webUrl({ validSchemes: ['http', 'https'] }), (url) => {
    return url.startsWith('http://') || url.startsWith('https://');
  })
);

// Generate authority with port
assert(
  property(webAuthority({ withPort: true }), (authority) => {
    return typeof authority === 'string' && authority.length > 0;
  })
);

// Generate paths
assert(
  property(webPath(), (path) => {
    return path.startsWith('/');
  })
);

// Build custom URL
assert(
  property(webAuthority(), webPath(), webQueryParameters(), (auth, path, query) => {
    const url = `https://${auth}${path}?${query}`;
    return new URL(url).href === url;
  })
);

Domain and Email Generation

Generate domain names and email addresses.

/**
 * Generate valid domain names
 * @param constraints - Domain constraints
 * @returns Arbitrary generating domain names
 */
function domain(constraints?: DomainConstraints): Arbitrary<string>;

/**
 * Generate valid email addresses
 * @param constraints - Email address constraints
 * @returns Arbitrary generating email addresses
 */
function emailAddress(constraints?: EmailAddressConstraints): Arbitrary<string>;

interface DomainConstraints {
  size?: SizeForArbitrary;
}

interface EmailAddressConstraints {
  size?: SizeForArbitrary;
}

Usage Examples:

import { domain, emailAddress, property, assert } from 'fast-check';

// Domain names
assert(
  property(domain(), (d) => {
    return d.includes('.') && !d.startsWith('.') && !d.endsWith('.');
  })
);

// Email addresses
assert(
  property(emailAddress(), (email) => {
    return email.includes('@') && email.split('@').length === 2;
  })
);

IP Address Generation

Generate IPv4 and IPv6 addresses.

/**
 * Generate valid IPv4 addresses
 * @returns Arbitrary generating IPv4 addresses
 */
function ipV4(): Arbitrary<string>;

/**
 * Generate IPv4 addresses in extended format (including class-based formats)
 * @returns Arbitrary generating extended IPv4 addresses
 */
function ipV4Extended(): Arbitrary<string>;

/**
 * Generate valid IPv6 addresses
 * @returns Arbitrary generating IPv6 addresses
 */
function ipV6(): Arbitrary<string>;

Usage Examples:

import { ipV4, ipV4Extended, ipV6, property, assert } from 'fast-check';

// IPv4 addresses
assert(
  property(ipV4(), (ip) => {
    const parts = ip.split('.');
    return (
      parts.length === 4 &&
      parts.every((part) => {
        const num = parseInt(part, 10);
        return num >= 0 && num <= 255;
      })
    );
  })
);

// IPv6 addresses
assert(
  property(ipV6(), (ip) => {
    return ip.includes(':');
  })
);

Unique Identifier Generation

Generate UUIDs and ULIDs.

/**
 * Generate UUIDs (versions 1-8 supported)
 * @param constraints - UUID version constraint
 * @returns Arbitrary generating UUIDs in lowercase hexadecimal format
 */
function uuid(constraints?: UuidConstraints): Arbitrary<string>;

/**
 * Generate ULIDs (Universally Unique Lexicographically Sortable Identifiers)
 * @returns Arbitrary generating ULIDs
 */
function ulid(): Arbitrary<string>;

interface UuidConstraints {
  version?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;
}

Usage Examples:

import { uuid, ulid, property, assert } from 'fast-check';

// UUIDs (default v4)
assert(
  property(uuid(), (id) => {
    return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/.test(id);
  })
);

// Specific UUID version
assert(
  property(uuid({ version: 4 }), (id) => {
    const parts = id.split('-');
    return parts[2].startsWith('4'); // Version 4 identifier
  })
);

// ULIDs
assert(
  property(ulid(), (id) => {
    return /^[0-9A-HJKMNP-TV-Z]{26}$/.test(id);
  })
);

Type Definitions

type SizeForArbitrary =
  | 'xsmall'
  | 'small'
  | 'medium'
  | 'large'
  | 'xlarge'
  | '='
  | number
  | { min?: number; max?: number };