UNPKG

@lucidlayer/babel-plugin-traceform

Version:

Babel plugin to inject data-traceform-id attributes into React components for Traceform

77 lines 3.2 kB
"use strict"; /** * 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