/******************************* Summarize Docs *******************************/ const // node dependencies console = require('better-console'), fs = require('fs'), YAML = require('yamljs') ; let data = {}; /** * Test for prefix in string. * @param {string} str * @param {string} prefix * @return {boolean} */ function startsWith(str, prefix) { return str.indexOf(prefix) === 0; } function inArray(needle, haystack) { let length = haystack.length; for (let i = 0; i < length; i++) { if (haystack[i] === needle) { return true; } } return false; } /** * Parses a file for metadata and stores result in data object. * @param {File} file - object provided by map-stream. * @param {function(?,File)} - callback provided by map-stream to * reply when done. */ function parser(file, callback) { // file exit conditions if (file.isNull()) { return callback(null, file); // pass along } if (file.isStream()) { return callback(new Error('Streaming not supported')); } try { let /** @type {string} */ text = String(file.contents.toString('utf8')), lines = text.split('\n'), filename = file.path.slice(0, -4), key = 'server/documents', position = filename.indexOf(key) ; // exit conditions if (!lines) { return; } if (position < 0) { return callback(null, file); } filename = filename.slice(position + key.length + 1, filename.length); let lineCount = lines.length, active = false, yaml = [], categories = [ 'UI Element', 'UI Global', 'UI Collection', 'UI View', 'UI Module', 'UI Behavior', ], index, meta, line ; for (index = 0; index < lineCount; index++) { line = lines[index]; // Wait for metadata block to begin if (!active) { if (startsWith(line, '---')) { active = true; } continue; } // End of metadata block, stop parsing. if (startsWith(line, '---')) { break; } yaml.push(line); } // Parse yaml. meta = YAML.parse(yaml.join('\n')); if (meta && meta.type && meta.title && inArray(meta.type, categories)) { meta.category = meta.type; meta.filename = filename; meta.url = '/' + filename; // Primary key will by filepath data[meta.element] = meta; } else { // skip // console.log(meta); } } catch (error) { console.log(error, file.path); } callback(null, file); } /** * Export function expected by map-stream. */ module.exports = { result: data, parser: parser, };