Skip to content

Commit 13d9c33

Browse files
committed
Have cli and web validator attempt to load '.bids-validator-config.json' if no config has been provided.
1 parent cb9752b commit 13d9c33

File tree

2 files changed

+27
-4
lines changed

2 files changed

+27
-4
lines changed

src/main.ts

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ import * as colors from '@std/fmt/colors'
44
import { readFileTree } from './files/deno.ts'
55
import { fileListToTree } from './files/browser.ts'
66
import { FileIgnoreRules } from './files/ignore.ts'
7-
import { resolve } from '@std/path'
7+
import { join, resolve } from '@std/path'
8+
import { exists } from "jsr:@std/fs/exists";
89
import { validate } from './validators/bids.ts'
910
import { consoleFormat, resultToJSONStr } from './utils/output.ts'
1011
import { setupLogging } from './utils/logger.ts'
@@ -28,7 +29,21 @@ export async function main(): Promise<ValidationResult> {
2829
: undefined
2930
const tree = await readFileTree(absolutePath, prune, options.preferredRemote)
3031

31-
const config = options.config ? JSON.parse(Deno.readTextFileSync(options.config)) as Config : {}
32+
let config = {}
33+
if (options.config) {
34+
config = JSON.parse(Deno.readTextFileSync(options.config))
35+
} else {
36+
const defaultConfig = join(absolutePath, '.bids-validator-config.json')
37+
try {
38+
await Deno.lstat(defaultConfig)
39+
config = JSON.parse(Deno.readTextFileSync(defaultConfig))
40+
options.config = defaultConfig
41+
} catch {
42+
if (!(err instanceof Deno.errors.NotFound)) {
43+
throw err;
44+
}
45+
}
46+
}
3247

3348
// Run the schema based validator
3449
const schemaResult = await validate(tree, options, config)

web/src/App.tsx

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React, { useState } from "react"
22
import "./App.css"
3-
import { directoryOpen } from "https://esm.sh/browser-fs-access@0.35.0"
3+
import { directoryOpen, fileOpen } from "https://esm.sh/browser-fs-access@0.35.0"
44
import confetti from 'https://cdn.jsdelivr.net/npm/canvas-confetti@1.9.3/dist/confetti.module.mjs';
55
import { fileListToTree, validate, getVersion } from "../dist/validator/main.js"
66
import type { ValidationResult } from "../../src/types/validation-result.ts"
@@ -50,11 +50,19 @@ function App() {
5050
const [validation, setValidation] = useState<ValidationResult>()
5151

5252
async function validateDir() {
53+
5354
const dirHandle = await directoryOpen({
5455
recursive: true,
5556
})
57+
let config = {}
58+
const configFile = dirHandle.find(file => file.name ==='.bids-validator-config.json')
59+
if (configFile) {
60+
config = configFile.text().then(text => JSON.parse(text)).catch((err) => {
61+
alert(`Failed to load ".bids-validator-config.json". \n\nUsing empty configuration object:\n\n${err}`)
62+
})
63+
}
5664
const fileTree = await fileListToTree(dirHandle)
57-
setValidation(await validate(fileTree, {}))
65+
setValidation(await validate(fileTree, config))
5866
}
5967

6068
const [version, setVersion] = useState<string>()

0 commit comments

Comments
 (0)