import { createAssayFeatureLookup, createAssaySampleLookup, } from './assayLookups' import { normalizeAssayFeature, normalizeAssaySample, } from './assayNormalizers' import { idFromName } from './builderIdUtils' import { createTemplateEnvelope } from './templateEnvelopes' import { validateAssayMatrixData } from './templateValidators' import type { AssayFeature, AssayMatrixTemplate, AssayMatrixTemplateData, AssaySample, CreateAssayMatrixTemplateOptions, } 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 createAssayMatrixTemplate( options: CreateAssayMatrixTemplateOptions ): AssayMatrixTemplate { const samples = options.samples.map((sample, index): AssaySample => { if (typeof sample !== 'string') return normalizeAssaySample(sample) return { sampleId: idFromName(sample, `sample-${index + 1}`), name: sample, metadata: {}, } }) const features = options.features.map((feature, index): AssayFeature => { if (typeof feature !== 'string') return normalizeAssayFeature(feature) return { id: idFromName(feature, `feature-${index + 1}`), name: feature, type: 'readout', metadata: {}, } }) const sampleLookup = createAssaySampleLookup(samples) const featureLookup = createAssayFeatureLookup(features) const measurements = Object.entries(options.values ?? {}).flatMap(([sampleId, featureValues]) => Object.entries(featureValues).map(([featureId, value]) => ({ sampleId: sampleLookup.get(sampleId) ?? sampleId, featureId: featureLookup.get(featureId) ?? featureId, value, metadata: {}, })) ) const data: AssayMatrixTemplateData = { samples, features, measurements, metadata: options.metadata ?? {}, } validateAssayMatrixData(data) return createTemplateEnvelope('assay-matrix', data, options.metadata ?? {}) }