| // 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, |
| } |
| })(); |