-
Notifications
You must be signed in to change notification settings - Fork 0
Best Practices
Guidelines and patterns for effectively using Phantom.js in your OIE scripting projects.
Before processing data, validate it to avoid errors.
// ❌ Bad: No validation
var value = phantom.maps.channel.get("value");
var result = phantom.numbers.operation.parse(value);
// ✅ Good: Validate first
var value = phantom.maps.channel.get("value");
if (phantom.numbers.operation.isNumber(value)) {
var result = phantom.numbers.operation.parse(value);
// Process result
} else {
// Handle invalid input
}Wrap operations that might fail in try-catch blocks.
try {
var result = phantom.numbers.operation.divide(10, 0);
} catch (e) {
// Handle error: "Invalid operation"
logger.error("Division failed: " + e.message);
phantom.maps.channel.save("error", "Division by zero");
}Always check if a key exists before using it.
// ❌ Bad: May return null/undefined
var value = phantom.maps.channel.get("key");
var processed = phantom.strings.operation.trim(value);
// ✅ Good: Check existence first
if (phantom.maps.channel.exists("key")) {
var value = phantom.maps.channel.get("key");
var processed = phantom.strings.operation.trim(value);
}Always trim and normalize string data before processing.
// ✅ Good: Clean first, then process
var raw = phantom.maps.channel.get("data");
var cleaned = phantom.strings.operation.trim(raw);
if (!phantom.strings.operation.isBlank(cleaned)) {
// Process cleaned data
var processed = phantom.strings.operation.toUpperCase(cleaned);
}Build transformation pipelines by chaining operations.
// ✅ Good: Clear pipeline
var result = phantom.strings.operation.capitalize(
phantom.strings.operation.trim(
phantom.strings.operation.toLowerCase(input)
)
);Choose the right operation for your needs.
// For single replacement
phantom.strings.operation.replace(text, "old", "new");
// For all replacements
phantom.strings.operation.replaceAll(text, "old", "new");Check if strings are empty or blank before processing.
var input = phantom.maps.channel.get("input");
if (!phantom.strings.operation.isBlank(input)) {
// Safe to process
var processed = phantom.strings.operation.trim(input);
}Always use isNumber before parse.
// ❌ Bad: May throw error
var num = phantom.numbers.operation.parse(value);
// ✅ Good: Validate first
if (phantom.numbers.operation.isNumber(value)) {
var num = phantom.numbers.operation.parse(value);
}Always check denominator before dividing.
var denominator = phantom.maps.channel.get("denominator");
if (phantom.numbers.operation.isNumber(denominator)) {
var denom = phantom.numbers.operation.parse(denominator);
if (!phantom.numbers.operation.isZero(denom)) {
var result = phantom.numbers.operation.divide(10, denom);
} else {
// Handle division by zero
}
}Choose the right rounding method for your use case.
// For general rounding
var rounded = phantom.numbers.operation.round(3.7, 0); // 4
// For always rounding up (pricing)
var price = phantom.numbers.operation.ceil(3.1); // 4
// For always rounding down
var count = phantom.numbers.operation.floor(3.9); // 3
// For removing decimals
var whole = phantom.numbers.operation.truncate(3.7); // 3Use clamp to ensure values stay within acceptable ranges.
var userInput = phantom.maps.channel.get("value");
if (phantom.numbers.operation.isNumber(userInput)) {
var value = phantom.numbers.operation.parse(userInput);
var safeValue = phantom.numbers.operation.clamp(value, 0, 100);
phantom.maps.channel.save("safeValue", safeValue);
}Choose the right map for your data scope.
// Temporary data: use channel map
phantom.maps.channel.save("tempData", value);
// Shared data: use global map
phantom.maps.global.save("sharedConfig", config);
// Connector-specific: use connector map
phantom.maps.connector.save("apiKey", key);Delete temporary data after use.
// Save temporary data
phantom.maps.channel.save("tempData", value);
// Process data
var processed = processData(phantom.maps.channel.get("tempData"));
// Clean up
phantom.maps.channel.delete("tempData");Always check if a key exists before retrieving.
if (phantom.maps.channel.exists("userId")) {
var userId = phantom.maps.channel.get("userId");
// Process user
} else {
// Handle missing data
}Don't perform the same operation multiple times.
// ❌ Bad: Multiple operations
var trimmed1 = phantom.strings.operation.trim(input);
var trimmed2 = phantom.strings.operation.trim(input);
// ✅ Good: Store result
var trimmed = phantom.strings.operation.trim(input);
var upper = phantom.strings.operation.toUpperCase(trimmed);Validate input as early as possible to avoid unnecessary processing.
// ✅ Good: Validate first
if (phantom.strings.operation.isBlank(input)) {
return; // Exit early
}
// Process only if valid
var processed = processData(input);try {
var result = phantom.numbers.operation.divide(a, b);
phantom.maps.channel.save("result", result);
} catch (e) {
if (e.message === "Invalid operation") {
phantom.maps.channel.save("error", "Invalid calculation");
}
}try {
var value = phantom.maps.channel.get("key");
var parsed = phantom.numbers.operation.parse(value);
} catch (e) {
if (e.message === "Invalid operation") {
// Handle invalid operation
logger.error("Failed to parse value");
}
}// Data validation
var isValid = validateData(input);
// Data processing
if (isValid) {
var processed = processData(input);
phantom.maps.channel.save("result", processed);
}// ✅ Good: Descriptive names
var cleanedInput = phantom.strings.operation.trim(input);
var formattedOutput = phantom.strings.operation.capitalize(cleanedInput);
// ❌ Bad: Unclear names
var x = phantom.strings.operation.trim(input);
var y = phantom.strings.operation.capitalize(x);// Don't do this
var result = phantom.numbers.operation.parse(phantom.maps.channel.get("value"));// Don't do this
var result = phantom.numbers.operation.divide(10, 0);
// May throw error// Don't do this
var value = phantom.maps.channel.get("nonexistent");
var processed = phantom.strings.operation.trim(value);// Don't do this
var result = phantom.strings.operation.toUpperCase(
phantom.maps.channel.get("data")
);
// May have whitespace issues- Getting Started - Basic usage patterns
- Examples - Real-world examples
- Troubleshooting - Common issues and solutions
Phantom - A product of David Labs.