site/semantic/tasks/docs/metadata.js
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);

}
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);

}
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 ) ; }
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.
Parses a file for metadata and stores result in data object .