UNPKG

autotel

Version:
95 lines (93 loc) 3.51 kB
'use strict'; // src/span-name-normalizer.ts var NORMALIZER_PATTERNS = { // Numeric IDs: /users/123 → /users/:id numericId: /\/\d+(?=\/|$)/g, // UUIDs: /users/550e8400-e29b-41d4-a716-446655440000 → /users/:uuid uuid: /\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}(?=\/|$)/gi, // Short UUIDs (without dashes): /users/550e8400e29b41d4a716446655440000 → /users/:uuid shortUuid: /\/[0-9a-f]{32}(?=\/|$)/gi, // MongoDB ObjectIds: /docs/507f1f77bcf86cd799439011 → /docs/:objectId objectId: /\/[0-9a-f]{24}(?=\/|$)/gi, // Hashes (6+ hex chars): /assets/abc123def.js → /assets/:hash.js hash: /\/[0-9a-f]{6,}(?=\.[a-z]+$)/gi, // ISO dates: /logs/2024-01-15 → /logs/:date isoDate: /\/\d{4}-\d{2}-\d{2}(?=\/|$)/g, // Timestamps: /events/1705334400 → /events/:timestamp timestamp: /\/1[0-9]{9}(?=\/|$)/g, // Email-like segments: /users/john@example.com → /users/:email email: /\/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(?=\/|$)/g }; var NORMALIZER_PRESETS = { /** * REST API preset - normalizes common REST path patterns * Handles: numeric IDs, UUIDs, ObjectIds, dates, timestamps, emails */ "rest-api": (name) => { return name.replaceAll(NORMALIZER_PATTERNS.uuid, "/:uuid").replaceAll(NORMALIZER_PATTERNS.shortUuid, "/:uuid").replaceAll(NORMALIZER_PATTERNS.objectId, "/:objectId").replaceAll(NORMALIZER_PATTERNS.isoDate, "/:date").replaceAll(NORMALIZER_PATTERNS.timestamp, "/:timestamp").replaceAll(NORMALIZER_PATTERNS.email, "/:email").replaceAll(NORMALIZER_PATTERNS.numericId, "/:id"); }, /** * GraphQL preset - normalizes GraphQL operation names and paths * Keeps query/mutation names but normalizes embedded IDs */ graphql: (name) => { return name.replaceAll(NORMALIZER_PATTERNS.uuid, "/:uuid").replaceAll(NORMALIZER_PATTERNS.numericId, "/:id"); }, /** * Minimal preset - only normalizes numeric IDs and UUIDs */ minimal: (name) => { return name.replaceAll(NORMALIZER_PATTERNS.uuid, "/:uuid").replaceAll(NORMALIZER_PATTERNS.numericId, "/:id"); } }; function resolveNormalizer(config) { if (typeof config === "function") { return config; } const preset = NORMALIZER_PRESETS[config]; if (!preset) { throw new Error( `Unknown span name normalizer preset: "${config}". Available presets: ${Object.keys(NORMALIZER_PRESETS).join(", ")}` ); } return preset; } var SpanNameNormalizingProcessor = class { wrappedProcessor; normalizer; constructor(wrappedProcessor, options) { this.wrappedProcessor = wrappedProcessor; this.normalizer = resolveNormalizer(options.normalizer); } /** * Normalize span name on start (when Span is mutable) */ onStart(span, parentContext) { try { const originalName = span.name; const normalizedName = this.normalizer(originalName); if (normalizedName !== originalName) { span.updateName(normalizedName); } } catch { } this.wrappedProcessor.onStart(span, parentContext); } /** * Pass through onEnd unchanged */ onEnd(span) { this.wrappedProcessor.onEnd(span); } forceFlush() { return this.wrappedProcessor.forceFlush(); } shutdown() { return this.wrappedProcessor.shutdown(); } }; exports.NORMALIZER_PATTERNS = NORMALIZER_PATTERNS; exports.NORMALIZER_PRESETS = NORMALIZER_PRESETS; exports.SpanNameNormalizingProcessor = SpanNameNormalizingProcessor; //# sourceMappingURL=chunk-IOYFAFHJ.cjs.map //# sourceMappingURL=chunk-IOYFAFHJ.cjs.map