Back to list
elbwalker

understanding-transformers

by elbwalker

Open-source tag manager for developers

313🍴 16📅 Jan 22, 2026

SKILL.md


name: understanding-transformers description: Use when working with transformers, understanding event validation/enrichment/redaction, or learning about transformer chaining. Covers interface, return values, and pipeline integration.

Understanding walkerOS Transformers

Overview

Transformers are middleware for validating, enriching, and redacting events in the walkerOS pipeline. They run in chains at configurable points between sources, collector, and destinations.

Core principle: Transformers transform events. They don't capture (sources) or deliver (destinations)—they modify events in-flight.

Use Cases

Use CasePurposeExample
ValidateEnsure events match schema contractsJSON Schema validation
EnrichAdd server-side data to eventsUser segments, geo data
RedactRemove sensitive data before destinationsStrip PII, anonymize IPs

Transformer Interface

See packages/core/src/types/transformer.ts for canonical interface.

Init Function (Context Pattern)

Transformers use a context-based initialization pattern:

import type { Transformer } from '@walkeros/core';

export const transformerMyTransformer: Transformer.Init<Types> = (context) => {
  const { config = {}, env, logger, id } = context;
  const settings = SettingsSchema.parse(config.settings || {});

  return {
    push(event, pushContext) {
      // Process event
      return event;
    },
  };
};

Init Context contains:

PropertyTypePurpose
configTransformer.ConfigSettings, mapping, next chain
envTypes['env']Environment dependencies
loggerLoggerLogging functions
idstringTransformer identifier
collectorCollector.InstanceReference to collector
ingestIngest (optional)Request metadata from source

Instance Methods

MethodPurposeRequired
pushProcess event, return modified/falseRequired
initOne-time initializationOptional
destroyCleanup resourcesOptional

Return Values

The push function controls event flow:

ReturnBehavior
eventContinue chain with modified event
voidContinue chain, event unchanged
falseStop chain, event dropped
push(event, context) {
  if (!event.data?.id) {
    context.logger.error('Missing required id');
    return false;  // Stop chain
  }

  event.data.enrichedAt = Date.now();
  return event;  // Continue with modified event
}

Pipeline Integration

Transformers run at two points in the pipeline:

Source → [Pre-Transformers] → Collector → [Post-Transformers] → Destination
          (source.next)                   (destination.before)

Pre-Collector Chain

Runs after source captures event, before collector enrichment:

sources: {
  browser: {
    code: sourceBrowser,
    next: 'validate'  // First transformer in pre-chain
  }
}

Post-Collector Chain

Runs after collector enrichment, before destination receives event:

destinations: {
  gtag: {
    code: destinationGtag,
    before: 'redact'  // First transformer in post-chain
  }
}

Chain Linking

Transformers link together via next:

transformers: {
  validate: {
    code: transformerValidator,
    config: { next: 'enrich' }  // Chain to next transformer
  },
  enrich: {
    code: transformerEnrich,
    config: { next: 'redact' }
  },
  redact: {
    code: transformerRedact
    // No next = end of chain
  }
}

Push Context

The push function receives a context with event metadata:

PropertyPurpose
configTransformer configuration
envEnvironment dependencies
loggerScoped logger for output
idTransformer identifier
collectorAccess to collector instance
ingestRequest metadata from source
push(event, context) {
  const { logger, id, ingest } = context;

  logger.debug('Processing', { transformer: id, event: event.name });

  // Access request metadata if available
  if (ingest?.ip) {
    event.data = { ...event.data, clientIp: ingest.ip };
  }

  return event;
}

Transformer Paths

PathDescription
packages/transformers/Transformer packages
packages/transformers/validator/Validator transformer

Skills:

Source Files:

Package READMEs:

Documentation:

Score

Total Score

75/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

+10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

+5
最近の活動

1ヶ月以内に更新

+10
フォーク

10回以上フォークされている

+5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

+5

Reviews

💬

Reviews coming soon