123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- /*******************************
- Summarize Docs
- *******************************/
- var
- // node dependencies
- console = require('better-console'),
- fs = require('fs'),
- YAML = require('yamljs')
- ;
- var 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) {
- var length = haystack.length;
- for(var 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 {
- var
- /** @type {string} */
- text = String(file.contents.toString('utf8')),
- lines = text.split('\n'),
- filename = file.path.substring(0, file.path.length - 4),
- key = 'server/documents',
- position = filename.indexOf(key)
- ;
- // exit conditions
- if(!lines) {
- return;
- }
- if(position < 0) {
- return callback(null, file);
- }
- filename = filename.substring(position + key.length + 1, filename.length);
- var
- 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;
- meta.title = meta.title;
- // Primary key will by filepath
- data[meta.element] = meta;
- }
- else {
- // skip
- // console.log(meta);
- }
- }
- catch(error) {
- console.log(error, filename);
- }
- callback(null, file);
- }
- /**
- * Export function expected by map-stream.
- */
- module.exports = {
- result : data,
- parser : parser
- };
|