diff --git a/src/schema/context.ts b/src/schema/context.ts index 2fa81dce..7280970d 100644 --- a/src/schema/context.ts +++ b/src/schema/context.ts @@ -39,6 +39,9 @@ export class BIDSContextDataset implements Dataset { schema: Schema pseudofileExtensions: Set + // Opaque object for HED validator + hedSchemas: object | undefined | null = undefined + constructor( args: Partial, ) { diff --git a/src/validators/hed.ts b/src/validators/hed.ts index fc34ec0d..3f96954f 100644 --- a/src/validators/hed.ts +++ b/src/validators/hed.ts @@ -22,22 +22,23 @@ function sidecarValueHasHed(sidecarValue: unknown) { ) } -let hedSchemas: object | undefined | null = undefined - -async function setHedSchemas(datasetDescriptionJson = {}) { +async function setHedSchemas(dataset: BIDSContextDataset) { + if (dataset.hedSchemas !== undefined) { + return [] as HedIssue[] + } const datasetDescriptionData = new hedValidator.bids.BidsJsonFile( '/dataset_description.json', - datasetDescriptionJson, + dataset.dataset_description, null, ) try { - hedSchemas = await hedValidator.bids.buildBidsSchemas( + dataset.hedSchemas = await hedValidator.bids.buildBidsSchemas( datasetDescriptionData, null, ) return [] as HedIssue[] } catch (issueError) { - hedSchemas = null + dataset.hedSchemas = null return hedValidator.bids.BidsHedIssue.fromHedIssues( issueError, datasetDescriptionData.file, @@ -59,22 +60,20 @@ export async function hedValidate( let hedValidationIssues = [] as HedIssue[] try { - if (context.extension == '.tsv' && context.columns) { + if (context.extension === '.tsv' && context.columns) { if (!('HED' in context.columns) && !sidecarHasHed(context.sidecar)) { return } - hedValidationIssues = await setHedSchemas(context.dataset.dataset_description) + hedValidationIssues = await setHedSchemas(context.dataset) file = await buildHedTsvFile(context) - } else if (context.extension == '.json' && sidecarHasHed(context.json)) { - hedValidationIssues = hedValidationIssues = await setHedSchemas( - context.dataset.dataset_description, - ) + } else if (context.extension === '.json' && sidecarHasHed(context.json)) { + hedValidationIssues = hedValidationIssues = await setHedSchemas(context.dataset) file = buildHedSidecarFile(context) } if (file) { - hedValidationIssues.push(...file.validate(hedSchemas)) + hedValidationIssues.push(...file.validate(context.dataset.hedSchemas)) } } catch (error) { context.dataset.issues.add({