You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The bash shell has a feature called process substitution (details below) which allows creating named pipes. ajv (CLI) does not appear to work well with such named pipes
$ ajv validate -s <(longer pipeline that yield a JSON or YAML schema)<(longer pipeline that yield a JSON or YAML data file)
/dev/fd/62 valid
this shows the data is valid, even when it does not satisfy the schema.
Rewritten in a way that should be equivalent from a bash script yields different ajv results:
$ (longer pipeline that yield a JSON or YAML schema) > schema.json
$ (longer pipeline that yield a JSON or YAML data file) > data.json
$ ajv validate -s schema.json -d data.json
data.json invalid
[
{
instancePath: '/info/breakingChanges',
schemaPath: '#/properties/info/properties/breakingChanges/const',
keyword: 'const',
params: { allowedValue: true },
message: 'must be equal to constant'
}
]
Here's a simpler use case
Save the attached files, which unfortunately GitHub required me to rename with .txt extensions, so rename with
In situations where longer pipelines are used to derive the schema (i.e. text pipelines on YAML or other content ) and a schema.yaml or schema.json file is not directly available, I think ajv should work with named pipes
ajv validate -s <(longer pipeline that yield a JSON or YAML schema)<(longer pipeline that yield a JSON or YAML data file)
without having to resort to temp files that one must then clean up/manage etc.
Process substitution allows a process's input or output to be
referred to using a filename. It takes the form of <(list) or
>(list). The process list is run asynchronously, and its input
or output appears as a filename. This filename is passed as an
argument to the current command as the result of the expansion.
The text was updated successfully, but these errors were encountered:
Fixes issue ajv-validator#244
Default to parsing JSON if filename (a named fifo) is passed
that does not have a recognized extension - parse rather than
return `{}` for the schema, which accepts all input.
Added code to allow tsc to compile without error when accessing
`err.message` etc.
The bash shell has a feature called process substitution (details below) which allows creating named pipes.
ajv
(CLI) does not appear to work well with such named pipesthis shows the data is valid, even when it does not satisfy the schema.
Rewritten in a way that should be equivalent from a bash script yields different
ajv
results:Here's a simpler use case
Save the attached files, which unfortunately GitHub required me to rename with
.txt
extensions, so rename with)
Use the shell and
js-yaml
to convert the files from YAML to JSON:Even though
data.yaml
is invalid (as perschema.yaml
), this command incorrectly shows the file as valid.(here,
/dev/fd/62
is the named pipe for the pipelinejs-yaml data.yaml
)Running
ajv
directlyIn situations where longer pipelines are used to derive the schema (i.e. text pipelines on YAML or other content ) and a
schema.yaml
orschema.json
file is not directly available, I thinkajv
should work with named pipeswithout having to resort to temp files that one must then clean up/manage etc.
From the bash(1) man page:
Process Substitution
The text was updated successfully, but these errors were encountered: