async parseExample(dir, name) {
    const htmlName = `${name}.html`;
    const htmlPath = path.join(dir, htmlName);
    const htmlSource = await fse.readFile(htmlPath, {encoding: 'utf8'});
    const {attributes: data, body} = frontMatter(
      this.ensureNewLineAtEnd(htmlSource),
    );
    assert(!!data.layout, `missing layout in ${htmlPath}`);
    return Object.assign(data, {
      contents: body,
      filename: htmlName,
      dir: dir,
      name: name,
      // process tags
      tags: data.tags ? data.tags.replace(/[\s"]+/g, '').split(',') : [],
    });
  }
@param {string} dir Examles dir
@param {string} name Example name
@return {TemplateConfig} Config from the examles's html template file