// Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information // regarding copyright ownership. The ASF licenses this file // to you under the Apache License, Version 2.0 (the // "License"); you may not use this file except in compliance // with the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. 'use strict'; module.exports = (function () { var fs = require('fs'); var path = require('path'); function stripFrontMatter (text) { // get and replace front matter if it's there // NOTE: // String.replace() replaces only the first occurrence // of a string, which is what we want var rawFrontMatterString = getRawFrontMatterString(text); if (rawFrontMatterString !== null) { return text.replace(rawFrontMatterString, ''); } return text; } function getFrontMatterString (text) { var rawFrontMatterString = getRawFrontMatterString(text); if (rawFrontMatterString !== null) { // strip out front matter markers var frontMatterString = rawFrontMatterString.replace(/^---\s*$/gm, ''); return frontMatterString; } return null; } function setFrontMatterString (text, frontMatterString) { var textOnly = stripFrontMatter(text); var newText = '---\n' + frontMatterString + '---\n\n' + textOnly; return newText; } function getRawFrontMatterString (text) { // NOTE: // [\s\S] matches all characters // *? non-greedy *-match var match = text.match(/^(---\s*\r?\n[\s\S]*?\r?\n---\s*\r?\n)[\s\S]*$/); if (match === null) { return null; } return match[1]; } function listdirsSync (root) { return fs.readdirSync(root).filter(function (fileName) { return fs.statSync(path.join(root, fileName)).isDirectory(); }); } function tocfileName (language, version, suffix) { var versionSlug = version.replace(/\./g, '-'); if (suffix) { suffix = '-' + suffix; } else { suffix = ''; } return language + '_' + versionSlug + suffix + '.yml'; } function srcTocfileName (language, version) { return tocfileName(language, version, 'src'); } function genTocfileName (language, version) { return tocfileName(language, version, 'gen'); } function mergeObjects (a, b) { var c = {}; // NOTE: b's properties override a's properties Object.keys(a).forEach(function (key) { c[key] = a[key]; }); Object.keys(b).forEach(function (key) { c[key] = b[key]; }); return c; } function generatedBy (scriptName) { return '# WARNING: This file is generated by ' + path.basename(scriptName); } return { stripFrontMatter: stripFrontMatter, getFrontMatterString: getFrontMatterString, setFrontMatterString: setFrontMatterString, getRawFrontMatterString: getRawFrontMatterString, listdirsSync: listdirsSync, tocfileName: tocfileName, srcTocfileName: srcTocfileName, genTocfileName: genTocfileName, mergeObjects: mergeObjects, generatedBy: generatedBy }; })();