@enkidevs/curriculum-ast-validators

Validators for Enki Curriculum AST

Usage no npm install needed!

<script type="module">
  import enkidevsCurriculumAstValidators from 'https://cdn.skypack.dev/@enkidevs/curriculum-ast-validators';
</script>

README

Enki Curriculum AST Validators

Validates Enki Curriculum AST.

See Enki curriculum processors for more details.

Rules

Headline

There can only be 1 Headline node per Insight. This is checked by the headline validator.

YAML

There can only be 1 YAML metadata node per Insight. This is checked by the yaml validator.

Insight Section

The section name must be one of the following:

  • Content
  • Footnotes
  • Revision
  • Practice
  • Quiz

Insight Question Gap

The insight question must have at least 1 question gap.

Insight Question Answers

The insight question must have answers and the number of question gaps must match the number of correct answers

API

const { contentTypes } = require('@enkidevs/curriculum-helpers');
const { getParser } = require('@enkidevs/curriculum-parser-markdown');
const {
  getValidator,
  getSafeValidator,
  validate,
  validateSafe,
} = require('@enkidevs/curriculum-ast-validators');

const ast = getParser(contentTypes.INSIGHT).parseSync('# Missing YAML config');

// safely validate any insight property
const error = getSafeValidator(contentTypes.INSIGHT).yaml(ast);
console.error(`${error.message}\n\n`);
// "Must have exactly 1 yaml configuration but found 0 instead"

// safely validate an entire insight
const errors = validateSafe(contentTypes.INSIGHT)(ast);
console.error(`[${errors.map(e => e.message)}]\n\n`);
// ["Must have exactly 1 yaml configuration but found 0 instead"]

// strictly validate any insight property
try {
  getValidator(contentTypes.INSIGHT).yaml(ast);
} catch (e) {
  console.error(`${e.message}\n\n`);
  // "Must have exactly 1 yaml configuration but found 0 instead"
}

// strictly validate an entire insight
try {
  validate(contentTypes.INSIGHT)(ast);
} catch (e) {
  console.error(`${e.message}\n\n`);
  // "Must have exactly 1 yaml configuration but found 0 instead"
}