From 922162896c50a601372b1ea5d7b9b5d55e08e63e Mon Sep 17 00:00:00 2001 From: ashley-hebler Date: Thu, 11 Jun 2020 16:16:15 -0500 Subject: [PATCH] Update utils for new structure --- docs/config/tasks/utils.js | 81 ++++++++++++++++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 82 insertions(+), 1 deletion(-) diff --git a/docs/config/tasks/utils.js b/docs/config/tasks/utils.js index 6d8d7248..ed0eef41 100644 --- a/docs/config/tasks/utils.js +++ b/docs/config/tasks/utils.js @@ -1,3 +1,77 @@ +const fs = require('fs-extra'); +const nunjucks = require('nunjucks'); +const { + docsStyles, + siteURL, + mappedGithubData, +} = require('../../config/paths.js'); + +const generateClassName = (str) => { + let className = str; + const parens = /\(([^)]+)\)/; + const parensMatch = parens.exec(str); + if (parensMatch && typeof parensMatch[1] !== 'undefined') { + [, className] = parensMatch; + } + return className; +}; + +const generateName = (str) => { + let extractedName = str; + const parens = /\(([^)]+)\)/; + const parensMatch = parens.exec(str); + if (parensMatch && typeof parensMatch[1] !== 'undefined') { + extractedName = extractedName.replace(parens, '').trim(); + } + return extractedName; +}; + +const generateTemplate = async (str) => { + const isFile = str.includes('.html'); + let template = str; + if (isFile) { + const codePath = `${docsStyles}${str}`; + template = fs.readFileSync(codePath, 'utf-8'); + } + return template; +} + +const renderTemplate = async (template, data) => { + const env = nunjucks.configure('./assets/scss'); + let rendered = ''; + try { + rendered = env.renderString(template, { ...data, siteURL }); + } catch (error) { + // eslint-disable-next-line no-console + console.log(error); + } + return rendered +} + +// If string is .classname, make it just classname +const stripSelector = (str) => { + return str[0] === '.' ? str.substring(1) : str +} + + +const readUsageInfo = async () => { + let github = {}; + try { + github = await fs.readJson(mappedGithubData.out); + } catch (err) { + // eslint-disable-next-line no-console + console.error(err); + } + return github; +}; + +const findUsageInfo = (usageInfo, className) => { + return typeof usageInfo.classData[stripSelector(className)] !== + 'undefined' + ? usageInfo.classData[stripSelector(className)].searchDataArr + : []; +} + const slugify = text => { return text .toString() @@ -14,6 +88,13 @@ const stripTags = str => { }; module.exports = { + findUsageInfo, + generateClassName, + generateName, + generateTemplate, + readUsageInfo, + renderTemplate, slugify, + stripSelector, stripTags, }; diff --git a/package.json b/package.json index af47d4cf..9b9b571d 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "dev": "SITE_ENV=development node docs/config/tasks/build.js && SITE_ENV=development eleventy --serve", "test": "npm run lint && npm run build", "release": "np --any-branch", - "type": "tsc ./docs/config/ts/hello.ts" + "type": "tsc ./docs/config/ts/hello.ts && node ./docs/config/ts/hello.js" }, "files": [ "/assets"