{"version":3,"file":"validation.cjs","names":[],"sources":["../../../../src/batteries/tts/transformers_js/validation.ts"],"sourcesContent":["/**\n * Runtime validation schema and wrapper for transformers.js TTS adapter options.\n *\n * @module @nhtio/adk/batteries/tts/transformers_js/validation\n *\n * @remarks\n * Validates `TransformersJsTtsAdapterOptions` at construction time. Throws\n * `E_INVALID_TRANSFORMERS_JS_TTS_OPTIONS` on failure. `model` is required; unknown top-level keys are\n * rejected so typos fail loud.\n */\n\nimport { isError } from '@nhtio/adk/guards'\nimport { isInstanceOf } from '../../../lib/utils/guards'\nimport { validator, ValidationError } from '@nhtio/validation'\nimport { E_INVALID_TRANSFORMERS_JS_TTS_OPTIONS } from './exceptions'\nimport type { TransformersJsTtsAdapterOptions } from './types'\n\n/** Validator schema for `TransformersJsTtsAdapterOptions`. Rejects unknown top-level keys. */\nexport const transformersJsTtsOptionsSchema = validator\n  .object<TransformersJsTtsAdapterOptions>({\n    model: validator.string().min(1).required(),\n    // Pipeline knobs (the transformers.js pipeline is a callable object — accept function or object)\n    pipeline: validator\n      .alternatives(validator.function(), validator.object().unknown(true))\n      .optional(),\n    createPipeline: validator.function().optional(),\n    device: validator.string().optional(),\n    dtype: validator.string().optional(),\n    speakerEmbeddings: validator\n      .alternatives(\n        validator.string(),\n        validator\n          .any()\n          .custom((value, helpers) =>\n            isInstanceOf(value, 'Float32Array', Float32Array) ? value : helpers.error('any.invalid')\n          )\n          .required(),\n        validator\n          .any()\n          .custom((value, helpers) =>\n            isInstanceOf(value, 'URL', URL) ? value : helpers.error('any.invalid')\n          )\n          .required()\n      )\n      .optional(),\n    numInferenceSteps: validator.number().positive().optional(),\n    modelSource: validator.function().optional(),\n    onInitProgress: validator.function().optional(),\n    isAvailable: validator.function().optional(),\n    // Shared TTS defaults\n    voice: validator.string().optional(),\n    rate: validator.number().positive().optional(),\n    // ── Lifecycle hooks (opt-in, normalized phase machine; additive over onInitProgress) ──\n    onLifecycle: validator.function().optional(),\n    onLoading: validator.function().optional(),\n    onCompiling: validator.function().optional(),\n    onReady: validator.function().optional(),\n    onGenerating: validator.function().optional(),\n    onComplete: validator.function().optional(),\n    onError: validator.function().optional(),\n  })\n  .unknown(false)\n\nconst isValidationError = (value: unknown): value is ValidationError =>\n  isError(value) && Array.isArray((value as ValidationError).details)\n\nconst formatValidationDetails = (err: ValidationError): string =>\n  err.details.map((d) => d.message).join(' and ')\n\n/**\n * Validates an arbitrary input against `transformersJsTtsOptionsSchema`.\n *\n * @param input - The raw options object to validate.\n * @returns The resolved options object with defaults filled in.\n * @throws {@link @nhtio/adk/batteries!E_INVALID_TRANSFORMERS_JS_TTS_OPTIONS} when invalid.\n */\nexport const validateOptions = (input: unknown): TransformersJsTtsAdapterOptions => {\n  const { value, error } = transformersJsTtsOptionsSchema.validate(input, {\n    abortEarly: false,\n    convert: false,\n  })\n  if (error && isValidationError(error)) {\n    throw new E_INVALID_TRANSFORMERS_JS_TTS_OPTIONS([formatValidationDetails(error)], {\n      cause: error,\n    })\n  }\n  return value as TransformersJsTtsAdapterOptions\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAkBA,IAAa,iCAAiC,kBAAA,UAC3C,OAAwC;CACvC,OAAO,kBAAA,UAAU,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;CAE1C,UAAU,kBAAA,UACP,aAAa,kBAAA,UAAU,SAAS,GAAG,kBAAA,UAAU,OAAO,EAAE,QAAQ,IAAI,CAAC,EACnE,SAAS;CACZ,gBAAgB,kBAAA,UAAU,SAAS,EAAE,SAAS;CAC9C,QAAQ,kBAAA,UAAU,OAAO,EAAE,SAAS;CACpC,OAAO,kBAAA,UAAU,OAAO,EAAE,SAAS;CACnC,mBAAmB,kBAAA,UAChB,aACC,kBAAA,UAAU,OAAO,GACjB,kBAAA,UACG,IAAI,EACJ,QAAQ,OAAO,YACd,eAAA,aAAa,OAAO,gBAAgB,YAAY,IAAI,QAAQ,QAAQ,MAAM,aAAa,CACzF,EACC,SAAS,GACZ,kBAAA,UACG,IAAI,EACJ,QAAQ,OAAO,YACd,eAAA,aAAa,OAAO,OAAO,GAAG,IAAI,QAAQ,QAAQ,MAAM,aAAa,CACvE,EACC,SAAS,CACd,EACC,SAAS;CACZ,mBAAmB,kBAAA,UAAU,OAAO,EAAE,SAAS,EAAE,SAAS;CAC1D,aAAa,kBAAA,UAAU,SAAS,EAAE,SAAS;CAC3C,gBAAgB,kBAAA,UAAU,SAAS,EAAE,SAAS;CAC9C,aAAa,kBAAA,UAAU,SAAS,EAAE,SAAS;CAE3C,OAAO,kBAAA,UAAU,OAAO,EAAE,SAAS;CACnC,MAAM,kBAAA,UAAU,OAAO,EAAE,SAAS,EAAE,SAAS;CAE7C,aAAa,kBAAA,UAAU,SAAS,EAAE,SAAS;CAC3C,WAAW,kBAAA,UAAU,SAAS,EAAE,SAAS;CACzC,aAAa,kBAAA,UAAU,SAAS,EAAE,SAAS;CAC3C,SAAS,kBAAA,UAAU,SAAS,EAAE,SAAS;CACvC,cAAc,kBAAA,UAAU,SAAS,EAAE,SAAS;CAC5C,YAAY,kBAAA,UAAU,SAAS,EAAE,SAAS;CAC1C,SAAS,kBAAA,UAAU,SAAS,EAAE,SAAS;AACzC,CAAC,EACA,QAAQ,KAAK;AAEhB,IAAM,qBAAqB,UACzB,eAAA,QAAQ,KAAK,KAAK,MAAM,QAAS,MAA0B,OAAO;AAEpE,IAAM,2BAA2B,QAC/B,IAAI,QAAQ,KAAK,MAAM,EAAE,OAAO,EAAE,KAAK,OAAO;;;;;;;;AAShD,IAAa,mBAAmB,UAAoD;CAClF,MAAM,EAAE,OAAO,UAAU,+BAA+B,SAAS,OAAO;EACtE,YAAY;EACZ,SAAS;CACX,CAAC;CACD,IAAI,SAAS,kBAAkB,KAAK,GAClC,MAAM,IAAI,iDAAA,sCAAsC,CAAC,wBAAwB,KAAK,CAAC,GAAG,EAChF,OAAO,MACT,CAAC;CAEH,OAAO;AACT"}