-
Notifications
You must be signed in to change notification settings - Fork 0
Examples
David S. edited this page Dec 17, 2025
·
2 revisions
Real-world examples demonstrating how to use Phantom.js in OIE scripting scenarios.
Process and validate user input data.
// Get user input
var firstName = phantom.maps.channel.get("firstName");
var lastName = phantom.maps.channel.get("lastName");
var email = phantom.maps.channel.get("email");
// Clean and normalize names
var cleanFirstName = phantom.strings.operation.capitalize(
phantom.strings.operation.trim(firstName)
);
var cleanLastName = phantom.strings.operation.capitalize(
phantom.strings.operation.trim(lastName)
);
// Validate email
if (phantom.strings.operation.contains(email, "@") &&
!phantom.strings.operation.isEmpty(email)) {
// Create full name
var fullName = phantom.strings.operation.join(
cleanFirstName,
cleanLastName,
" "
);
// Save processed data
phantom.maps.channel.save("fullName", fullName);
phantom.maps.channel.save("validEmail", email);
}Calculate order totals with tax and discounts.
// Get order data
var itemPrice = phantom.maps.channel.get("itemPrice");
var quantity = phantom.maps.channel.get("quantity");
var discountPercent = phantom.maps.channel.get("discountPercent");
var taxRate = 0.08; // 8%
// Validate and parse
if (phantom.numbers.operation.isNumber(itemPrice) &&
phantom.numbers.operation.isNumber(quantity)) {
var price = phantom.numbers.operation.parse(itemPrice);
var qty = phantom.numbers.operation.parse(quantity);
// Calculate subtotal
var subtotal = phantom.numbers.operation.multiply(price, qty);
// Apply discount
var discount = phantom.numbers.operation.divide(
phantom.numbers.operation.multiply(subtotal, discountPercent),
100
);
var discountedTotal = phantom.numbers.operation.subtract(subtotal, discount);
// Calculate tax
var tax = phantom.numbers.operation.multiply(discountedTotal, taxRate);
// Final total
var total = phantom.numbers.operation.add(discountedTotal, tax);
// Format and save
phantom.maps.channel.save("subtotal",
phantom.numbers.operation.toFixed(subtotal, 2));
phantom.maps.channel.save("discount",
phantom.numbers.operation.toFixed(discount, 2));
phantom.maps.channel.save("tax",
phantom.numbers.operation.toFixed(tax, 2));
phantom.maps.channel.save("total",
phantom.numbers.operation.toFixed(total, 2));
}Generate and format unique identifiers.
// Generate random ID
var randomId = phantom.numbers.operation.randomInt(100000, 999999);
// Format as padded string
var formattedId = phantom.strings.operation.leftPad(
randomId.toString(),
"0",
8
);
// Add prefix
var finalId = phantom.strings.operation.join("ID-", formattedId, "");
// Save
phantom.maps.channel.save("generatedId", finalId);
// Output: "ID-00123456"Validate and clean incoming data.
// Get raw data
var rawData = phantom.maps.channel.get("rawData");
// Validation pipeline
if (!phantom.strings.operation.isBlank(rawData)) {
// Step 1: Trim whitespace
var step1 = phantom.strings.operation.trim(rawData);
// Step 2: Remove special characters
var step2 = phantom.strings.operation.remove(step1, "@");
var step3 = phantom.strings.operation.remove(step2, "#");
// Step 3: Normalize case
var step4 = phantom.strings.operation.toLowerCase(step3);
// Step 4: Capitalize
var cleaned = phantom.strings.operation.capitalize(step4);
// Validate length
if (phantom.strings.operation.length(cleaned) > 0 &&
phantom.strings.operation.length(cleaned) <= 100) {
phantom.maps.channel.save("validatedData", cleaned);
}
}Process and format date/time strings.
// Get timestamp string
var timestamp = phantom.maps.channel.get("timestamp");
// Format: "2024-01-15T10:30:00"
// Extract date part
var datePart = phantom.strings.operation.substring(timestamp, 0, 10);
// Output: "2024-01-15"
// Extract time part
var timePart = phantom.strings.operation.substring(timestamp, 11);
// Output: "10:30:00"
// Split date components
var dateParts = phantom.strings.operation.split(datePart, "-");
var year = dateParts[0];
var month = dateParts[1];
var day = dateParts[2];
// Format as display string
var displayDate = phantom.strings.operation.join(
month,
phantom.strings.operation.join(day, year, "/"),
"/"
);
// Output: "01/15/2024"
phantom.maps.channel.save("formattedDate", displayDate);Use configuration to drive processing logic.
// Get configuration
var processingMode = phantom.maps.configuration.get("processingMode");
var maxRetries = phantom.maps.configuration.get("maxRetries");
// Process based on mode
if (phantom.strings.operation.compare(processingMode, "strict") === 0) {
// Strict mode: validate everything
var data = phantom.maps.channel.get("data");
if (phantom.strings.operation.isEmpty(data)) {
phantom.maps.channel.save("error", "Data is required");
} else {
// Process in strict mode
phantom.maps.channel.save("processed", processStrict(data));
}
} else {
// Normal mode: lenient processing
var data = phantom.maps.channel.get("data");
if (!phantom.strings.operation.isBlank(data)) {
phantom.maps.channel.save("processed", processNormal(data));
}
}
// Use max retries
if (phantom.numbers.operation.isNumber(maxRetries)) {
var retries = phantom.numbers.operation.parse(maxRetries);
phantom.maps.channel.save("maxRetries", retries);
}Validate and clamp numeric values to acceptable ranges.
// Get user input
var userAge = phantom.maps.channel.get("age");
var userScore = phantom.maps.channel.get("score");
// Validate age (must be between 18 and 100)
if (phantom.numbers.operation.isNumber(userAge)) {
var age = phantom.numbers.operation.parse(userAge);
if (phantom.numbers.operation.between(age, 18, 100)) {
phantom.maps.channel.save("validAge", age);
} else {
// Clamp to valid range
var clampedAge = phantom.numbers.operation.clamp(age, 18, 100);
phantom.maps.channel.save("validAge", clampedAge);
}
}
// Validate score (must be between 0 and 100)
if (phantom.numbers.operation.isNumber(userScore)) {
var score = phantom.numbers.operation.parse(userScore);
var validScore = phantom.numbers.operation.clamp(score, 0, 100);
phantom.maps.channel.save("validScore", validScore);
}Find and replace patterns in text.
// Get text content
var content = phantom.maps.channel.get("content");
// Replace placeholders
var step1 = phantom.strings.operation.replaceAll(content, "${name}", "John");
var step2 = phantom.strings.operation.replaceAll(step1, "${date}", "2024-01-15");
var step3 = phantom.strings.operation.replaceAll(step2, "${company}", "Acme Corp");
// Save processed content
phantom.maps.channel.save("processedContent", step3);Format numbers for user display.
// Get numeric values
var price = phantom.maps.channel.get("price");
var quantity = phantom.maps.channel.get("quantity");
if (phantom.numbers.operation.isNumber(price) &&
phantom.numbers.operation.isNumber(quantity)) {
var priceNum = phantom.numbers.operation.parse(price);
var qtyNum = phantom.numbers.operation.parse(quantity);
// Calculate total
var total = phantom.numbers.operation.multiply(priceNum, qtyNum);
// Format for different locales
var usFormat = "$" + phantom.numbers.operation.toFixed(total, 2);
var euFormat = phantom.numbers.operation.toFixed(total, 2) + " EUR";
// Round for display
var roundedTotal = phantom.numbers.operation.round(total, 0);
phantom.maps.channel.save("usFormatted", usFormat);
phantom.maps.channel.save("euFormatted", euFormat);
phantom.maps.channel.save("roundedTotal", roundedTotal);
}Comprehensive error handling for operations.
try {
// Get and validate data
var input = phantom.maps.channel.get("input");
if (phantom.strings.operation.isBlank(input)) {
throw new Error("Input is required");
}
// Process data
var processed = phantom.strings.operation.trim(input);
var upper = phantom.strings.operation.toUpperCase(processed);
// Save result
phantom.maps.channel.save("result", upper);
} catch (e) {
// Handle errors
if (e.message === "Invalid operation") {
phantom.maps.channel.save("error", "Invalid input data");
} else {
phantom.maps.channel.save("error", e.message);
}
}Parse and manipulate JSON data from API responses.
// Get JSON string from map
var jsonString = phantom.maps.channel.get("apiResponse");
try {
// Parse JSON
var obj = phantom.json.operation.parse(jsonString);
// Extract nested values
var userName = phantom.json.operation.get(obj, "user.name");
var userEmail = phantom.json.operation.get(obj, "user.email");
var userId = phantom.json.operation.get(obj, "user.id");
// Validate required fields
if (phantom.json.operation.has(obj, "user.name") &&
phantom.json.operation.has(obj, "user.email")) {
// Save extracted data
phantom.maps.channel.save("userName", userName);
phantom.maps.channel.save("userEmail", userEmail);
phantom.maps.channel.save("userId", userId);
}
} catch (e) {
phantom.maps.channel.save("error", "Failed to parse JSON");
}Transform JSON structure for different systems.
// Get source JSON
var sourceJson = phantom.maps.channel.get("sourceData");
var source = phantom.json.operation.parse(sourceJson);
// Create new structure
var transformed = {};
transformed = phantom.json.operation.set(transformed, "firstName",
phantom.json.operation.get(source, "user.firstName"));
transformed = phantom.json.operation.set(transformed, "lastName",
phantom.json.operation.get(source, "user.lastName"));
transformed = phantom.json.operation.set(transformed, "fullName",
phantom.strings.operation.join(
phantom.json.operation.get(transformed, "firstName"),
phantom.json.operation.get(transformed, "lastName"),
" "
)
);
// Save transformed JSON
phantom.maps.channel.save("transformedData",
phantom.json.operation.stringify(transformed));Merge base configuration with overrides.
// Get base configuration
var baseConfigJson = phantom.maps.configuration.get("baseConfig");
var baseConfig = phantom.json.operation.parse(baseConfigJson);
// Get override configuration
var overrideJson = phantom.maps.channel.get("overrides");
var overrides = phantom.json.operation.parse(overrideJson);
// Merge (overrides take precedence)
var finalConfig = phantom.json.operation.merge(baseConfig, overrides);
// Save final configuration
phantom.maps.channel.save("finalConfig",
phantom.json.operation.stringify(finalConfig));Process all keys in a JSON object dynamically.
// Get JSON object
var jsonString = phantom.maps.channel.get("data");
var obj = phantom.json.operation.parse(jsonString);
// Get all keys
var keys = phantom.json.operation.keys(obj);
// Process each key-value pair
var processed = {};
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
var value = phantom.json.operation.get(obj, key);
// Transform value (example: uppercase strings)
if (phantom.strings.operation.isBlank(value) === false) {
var transformed = phantom.strings.operation.toUpperCase(
phantom.strings.operation.trim(value)
);
processed = phantom.json.operation.set(processed, key, transformed);
}
}
// Save processed data
phantom.maps.channel.save("processedData",
phantom.json.operation.stringify(processed));- Getting Started - Learn the basics
- String Operations - All string utilities
- Number Operations - All number utilities
- JSON Operations - All JSON utilities
- Map Operations - Working with maps
- Best Practices - Tips and patterns
Phantom - A product of David Labs.