import { idFromName } from './builderIdUtils' import { normalizeSamplePrepStep } from './sampleNormalizers' import { createTemplateEnvelope } from './templateEnvelopes' import { validateSamplePrepData } from './templateValidators' import type { CreateSamplePrepTemplateOptions, SamplePrepStep, SamplePrepTemplate, SamplePrepTemplateData, } from './types' /** @deprecated Scheduled for removal from the core SDK in MINT 1.4; the biology templates move to a dedicated package or the owning plugins. */ export function createSamplePrepTemplate( options: CreateSamplePrepTemplateOptions ): SamplePrepTemplate { const prepType = options.prepType ?? 'extraction' const volumeUnit = options.volumeUnit ?? 'uL' const steps: SamplePrepStep[] = [] let order = 1 for (const [index, sample] of options.samples.entries()) { if (typeof sample !== 'string') { const step = normalizeSamplePrepStep(sample, prepType, volumeUnit, order, index) steps.push(step) order = Math.max(order, step.order + 1) continue } const sourceSampleId = idFromName(sample, `sample-${index + 1}`) steps.push({ id: `${sourceSampleId}-prep`, order, type: prepType, name: `Prepare ${sample}`, sourceSampleId, destinationSampleId: `${sourceSampleId}-prepared`, inputVolume: options.inputVolume, outputVolume: options.outputVolume, volumeUnit, status: 'planned', metadata: {}, }) order += 1 } const data: SamplePrepTemplateData = { protocolName: options.protocolName ?? 'Sample preparation', steps, metadata: options.metadata ?? {}, } validateSamplePrepData(data) return createTemplateEnvelope('sample-prep', data, options.metadata ?? {}) }