59 lines
1.7 KiB
JavaScript
59 lines
1.7 KiB
JavaScript
const fs = require("fs-extra")
|
|
const path = require("path")
|
|
const chalk = require("chalk")
|
|
const {
|
|
attempt,
|
|
readSnippets,
|
|
getCodeBlocks,
|
|
getSection,
|
|
getTitle,
|
|
getTextualContent
|
|
} = require("./util");
|
|
|
|
console.time("Extractor");
|
|
|
|
attempt("snippet_data.json generation", () => {
|
|
const output = Object.entries(readSnippets()).map(([name, contents]) => {
|
|
const title = getTitle(contents);
|
|
const text = getTextualContent(contents);
|
|
const codeBlocks = getCodeBlocks(contents);
|
|
const notes = getSection("#### Notes", contents, false)
|
|
.split("\n")
|
|
.map(v => v.replace(/[*-] /g, ""))
|
|
.filter(v => v.trim() !== "")
|
|
// const answer = getSection("#### Answer", contents)
|
|
|
|
// const goodToHear = getSection("#### Good to hear", contents, false)
|
|
// .split("\n")
|
|
// .map(v => v.replace(/[*-] /g, ""))
|
|
// .filter(v => v.trim() !== "")
|
|
|
|
// const links = getSection("##### Additional links", contents)
|
|
// .split("\n")
|
|
// .filter(v =>
|
|
// /(\/\*[\w\'\s\r\n\*]*\*\/)|(\/\/[\w\s\']*)|(\<![\-\-\s\w\>\/]*\>)/.test(
|
|
// v
|
|
// )
|
|
// )
|
|
// .map(v => v.replace(/[*-] /g, ""))
|
|
// .filter(v => v.trim() !== "" && !v.includes("tags"))
|
|
|
|
return {
|
|
name,
|
|
title,
|
|
text,
|
|
codeBlocks,
|
|
expertise: parseInt(
|
|
(contents.match(/<!--\s*expertise:\s*\(*(.+)\)*/) || [])[1],
|
|
10
|
|
),
|
|
tags: (contents.match(/<!--\s*tags:\s*\(*(.+)\)*\s*-->/) || [])[1].split(",").map(v => v.trim()),
|
|
notes
|
|
}
|
|
})
|
|
|
|
fs.writeFileSync("./data/snippet_data.json", JSON.stringify(output, null, 2))
|
|
})
|
|
|
|
console.log(`${chalk.green("SUCCESS!")} snippet_data.json file generated!`);
|
|
console.timeEnd("Extractor"); |