{"version":3,"sources":["../src/schemas/index.ts","../src/schemas/settings.ts","../src/schemas/mapping.ts","../src/examples/index.ts","../src/examples/env.ts","../src/examples/step.ts"],"sourcesContent":["import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\nimport { MappingSchema } from './mapping';\n\nexport { SettingsSchema, RedisSettingsSchema, type Settings } from './settings';\nexport { MappingSchema, type Mapping } from './mapping';\n\n// JSON Schema\nexport const settings = zodToSchema(SettingsSchema);\nexport const mapping = zodToSchema(MappingSchema);\n","import { z } from '@walkeros/core/dev';\n\nexport const RedisSettingsSchema = z.object({\n  streamKey: z\n    .string()\n    .min(1)\n    .describe(\n      \"Redis stream key name (like 'walkeros:events'). All events are appended to this stream via XADD.\",\n    ),\n  url: z\n    .string()\n    .describe(\n      \"Redis connection URL (like 'redis://localhost:6379' or 'rediss://:password@host:6380'). Supports redis:// and rediss:// (TLS) protocols.\",\n    )\n    .optional(),\n  options: z\n    .record(z.string(), z.unknown())\n    .describe(\n      'ioredis connection options. Used when url is not provided. Supports host, port, password, db, tls, and all other ioredis options.',\n    )\n    .optional(),\n  maxLen: z\n    .number()\n    .int()\n    .positive()\n    .describe(\n      'Maximum stream length. Enables approximate MAXLEN trimming on every XADD to bound memory usage (like 50000).',\n    )\n    .optional(),\n  exactTrimming: z\n    .boolean()\n    .describe(\n      'Use exact MAXLEN instead of approximate (~). Not recommended for production. Default: false.',\n    )\n    .optional(),\n  serialization: z\n    .enum(['json', 'flat'])\n    .describe(\n      \"Serialization mode. 'json' stores the full event as a single 'event' field (default). 'flat' stores top-level event fields as separate stream entry fields.\",\n    )\n    .optional(),\n});\n\nexport const SettingsSchema = z.object({\n  redis: RedisSettingsSchema.describe(\n    \"Redis Streams configuration (like { streamKey: 'walkeros:events', url: 'redis://localhost:6379' })\",\n  ),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\nexport const MappingSchema = z.object({\n  streamKey: z\n    .string()\n    .optional()\n    .describe(\n      'Override Redis stream key for this rule. Takes precedence over settings.redis.streamKey.',\n    ),\n});\n\nexport type Mapping = z.infer<typeof MappingSchema>;\n","export * as env from './env';\nexport * as step from './step';\n","import type {\n  Env,\n  RedisClientConstructor,\n  RedisClientMock,\n  RedisPipelineMock,\n  XaddArg,\n} from '../types';\n\n// Narrow helper type aliases so the mock SDK is typed explicitly without `any`.\ntype XaddFn = (...args: XaddArg[]) => Promise<string | null>;\ntype QuitFn = () => Promise<string>;\n\nconst asyncXadd: XaddFn = () => Promise.resolve('1700000100000-0');\nconst asyncQuit: QuitFn = () => Promise.resolve('OK');\n\nfunction createMockPipeline(): RedisPipelineMock {\n  const pipeline: RedisPipelineMock = {\n    xadd: () => pipeline,\n    exec: () => Promise.resolve([]),\n  };\n  return pipeline;\n}\n\nclass MockRedisClient implements RedisClientMock {\n  constructor(_urlOrOptions: string | Record<string, unknown>) {}\n  xadd: XaddFn = asyncXadd;\n  pipeline(): RedisPipelineMock {\n    return createMockPipeline();\n  }\n  quit: QuitFn = asyncQuit;\n  on(): unknown {\n    return this;\n  }\n}\n\nconst MockRedisConstructor: RedisClientConstructor = MockRedisClient;\n\nexport const push: Env = {\n  Redis: {\n    Client: MockRedisConstructor,\n  },\n};\n\nexport const simulation = ['call:client.xadd'];\n","import type { Flow } from '@walkeros/core';\nimport { getEvent } from '@walkeros/core';\nimport type { Settings } from '../types';\n\n/**\n * Extended step example that may carry destination-level settings overrides.\n */\nexport type RedisStepExample = Flow.StepExample & {\n  settings?: Partial<Settings>;\n};\n\n/**\n * Default JSON serialization -- single 'event' field with full event JSON.\n */\nexport const jsonDefault: RedisStepExample = {\n  title: 'Default stream',\n  description:\n    'An event is appended to the configured Redis stream via XADD with the full event JSON as a single field.',\n  in: getEvent('page view', {\n    timestamp: 1700000100,\n  }),\n  out: [['client.xadd', ['walkeros:events', '*', 'event', 'json:event']]],\n};\n\n/**\n * Order event -- verifies different event types pass through correctly.\n */\nexport const orderComplete: RedisStepExample = {\n  title: 'Order event',\n  description:\n    'An order complete event is appended to the Redis stream alongside other event types for downstream consumers.',\n  in: getEvent('order complete', {\n    timestamp: 1700000101,\n    data: { id: 'ORD-400', total: 99.99, currency: 'EUR' },\n  }),\n  out: [['client.xadd', ['walkeros:events', '*', 'event', 'json:event']]],\n};\n\n/**\n * With MAXLEN approximate trimming -- trimming args inserted before '*'.\n */\nexport const withMaxLen: RedisStepExample = {\n  title: 'MAXLEN trim',\n  description:\n    'XADD uses approximate MAXLEN trimming to cap the Redis stream length, discarding older entries efficiently.',\n  in: getEvent('product view', {\n    timestamp: 1700000102,\n    data: { id: 'SKU-123', name: 'Widget' },\n  }),\n  settings: {\n    redis: {\n      streamKey: 'walkeros:events',\n      maxLen: 50000,\n    },\n  },\n  out: [\n    [\n      'client.xadd',\n      ['walkeros:events', 'MAXLEN', '~', 50000, '*', 'event', 'json:event'],\n    ],\n  ],\n};\n\n/**\n * Exact MAXLEN trimming -- no '~' between MAXLEN and the count.\n */\nexport const withExactTrim: RedisStepExample = {\n  title: 'Exact trim',\n  description:\n    'XADD uses exact MAXLEN trimming to enforce a precise Redis stream length at the cost of extra work.',\n  in: getEvent('page view', {\n    timestamp: 1700000103,\n  }),\n  settings: {\n    redis: {\n      streamKey: 'walkeros:events',\n      maxLen: 5000,\n      exactTrimming: true,\n    },\n  },\n  out: [\n    [\n      'client.xadd',\n      ['walkeros:events', 'MAXLEN', 5000, '*', 'event', 'json:event'],\n    ],\n  ],\n};\n\n/**\n * Stream key override per rule -- routes this event to a dedicated stream.\n */\nexport const streamKeyOverride: RedisStepExample = {\n  title: 'Stream key override',\n  description:\n    'A mapping rule routes the event to a dedicated Redis stream instead of the destination default.',\n  in: getEvent('order complete', {\n    timestamp: 1700000104,\n    data: { id: 'ORD-500', total: 42 },\n  }),\n  mapping: {\n    settings: {\n      streamKey: 'walkeros:orders',\n    },\n  },\n  out: [['client.xadd', ['walkeros:orders', '*', 'event', 'json:event']]],\n};\n\n/**\n * Ignored event -- mapping.ignore: true produces no xadd call.\n */\nexport const ignoredEvent: RedisStepExample = {\n  public: false,\n  in: getEvent('debug noise', {\n    timestamp: 1700000105,\n  }),\n  mapping: { ignore: true },\n  out: [],\n};\n"],"mappings":"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","names":["z"]}