@lucidlayer/babel-plugin-traceform
Version:
Babel plugin to inject data-traceform-id attributes into React components for Traceform
77 lines • 3.2 kB
JavaScript
/**
* Traceform ID Utilities (Centralized)
*
* - createTraceformId: Generates a standardized Traceform ID.
* - parseTraceformId: Parses a Traceform ID into its components.
* - isValidTraceformId: Checks if a string is a valid Traceform ID.
*
* All error handling is centralized via an optional errorHandler parameter.
* Consumers may pass a function to handle errors (e.g., for UI feedback or logging).
*
* Canonical Format: relativeFilePath::ComponentName::instanceIndex
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.createTraceformId = createTraceformId;
exports.parseTraceformId = parseTraceformId;
exports.isValidTraceformId = isValidTraceformId;
/**
* Creates a standardized Traceform ID.
* @param relativePath - File path relative to project root (forward slashes).
* @param componentName - Name of the React component.
* @param instanceIndex - Index of the component instance (default 0).
* @param errorHandler - Optional error handler for consumer-specific feedback.
* @param consumer - Optional string identifying the consumer (for error context).
* @returns The standardized Traceform ID string.
*/
function createTraceformId(relativePath, componentName, instanceIndex = 0, errorHandler, consumer = 'SharedUtil') {
if (!relativePath || !componentName) {
const errorContext = {
code: 'TF-SHARED-001',
message: '[Traceform Shared Util] Missing relativePath or componentName for createTraceformId',
data: { relativePath, componentName, instanceIndex },
consumer,
};
if (errorHandler)
errorHandler(errorContext);
else
console.warn(errorContext.message, errorContext.data);
return 'invalid::invalid::invalid';
}
const normalizedPath = relativePath.replace(/\\/g, '/');
return `${normalizedPath}::${componentName}::${instanceIndex}`;
}
/**
* Parses a Traceform ID into its components.
* @param id - The Traceform ID string to parse.
* @returns An object with relativePath, componentName, and instanceIndex.
*/
function parseTraceformId(id) {
const parts = id.split('::');
if (parts.length < 3) {
console.warn(`[Traceform Shared Util] Invalid Traceform ID format: ${id}`);
return { relativePath: '', componentName: '', instanceIndex: -1 };
}
const instanceIndex = parseInt(parts[parts.length - 1], 10);
const componentName = parts[parts.length - 2];
const relativePath = parts.slice(0, parts.length - 2).join('::');
return { relativePath, componentName, instanceIndex };
}
/**
* Checks if a string is a valid Traceform ID.
* @param id - The string to check.
* @returns True if the string appears to be a valid Traceform ID.
*/
function isValidTraceformId(id) {
if (!id || typeof id !== 'string')
return false;
const parts = id.split('::');
if (parts.length < 3)
return false;
const lastPart = parts[parts.length - 1];
return !isNaN(parseInt(lastPart, 10));
}
// Potential future additions:
// - Function to parse a Traceform ID back into its parts
// - More robust validation
//# sourceMappingURL=traceformIdUtils.js.map
;