From cad0cae1fcbc31d9d4b3608288e3f2f15e8c3aef Mon Sep 17 00:00:00 2001 From: Kay Robbins <1189050+VisLab@users.noreply.github.com> Date: Sun, 9 Feb 2025 10:35:58 -0600 Subject: [PATCH 1/2] Updated the hed validation to only load schemas once --- src/validators/hed.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/validators/hed.ts b/src/validators/hed.ts index fc34ec0df..ed76a6fa7 100644 --- a/src/validators/hed.ts +++ b/src/validators/hed.ts @@ -25,6 +25,9 @@ function sidecarValueHasHed(sidecarValue: unknown) { let hedSchemas: object | undefined | null = undefined async function setHedSchemas(datasetDescriptionJson = {}) { + if (hedSchemas !== undefined) { + return [] as HedIssue[] + } const datasetDescriptionData = new hedValidator.bids.BidsJsonFile( '/dataset_description.json', datasetDescriptionJson, @@ -59,14 +62,14 @@ 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) file = await buildHedTsvFile(context) - } else if (context.extension == '.json' && sidecarHasHed(context.json)) { + } else if (context.extension === '.json' && sidecarHasHed(context.json)) { hedValidationIssues = hedValidationIssues = await setHedSchemas( context.dataset.dataset_description, ) From 3b64628d4cba679e5e89a66494d650d5a9dd2d69 Mon Sep 17 00:00:00 2001 From: "Christopher J. Markiewicz" Date: Sun, 9 Feb 2025 13:07:43 -0500 Subject: [PATCH 2/2] rf(hed): Move hedSchemas onto context.dataset --- src/schema/context.ts | 3 +++ src/validators/hed.ts | 20 ++++++++------------ 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/schema/context.ts b/src/schema/context.ts index 2fa81dce9..7280970d0 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 ed76a6fa7..3f96954fb 100644 --- a/src/validators/hed.ts +++ b/src/validators/hed.ts @@ -22,25 +22,23 @@ function sidecarValueHasHed(sidecarValue: unknown) { ) } -let hedSchemas: object | undefined | null = undefined - -async function setHedSchemas(datasetDescriptionJson = {}) { - if (hedSchemas !== undefined) { +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, @@ -66,18 +64,16 @@ export async function hedValidate( 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, - ) + 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({