blob: 297b3f25f996925d5d9eb915c27c577208e9bdb1 [file] [log] [blame]
// 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
};
})();