'use strict';

import {
  forEach
} from 'min-dash';

import {
  Parser
} from 'saxen';

var TYPES = {
  bpmn: 'http://www.omg.org/spec/BPMN',
  dmn: 'http://www.omg.org/spec/DMN',
  cmmn: 'http://www.omg.org/spec/CMMN'
};


module.exports = function parseType(file) {
  var contents = file.contents,
      type = null,
      namespace;

  const parser = new Parser();

  parser.on('openTag', function(elementName, attrGetter) {

    // bpmn:definitions
    // dmn:Definitions
    if (elementName.indexOf(':') !== -1) {
      let [ prefix, name ] = elementName.split(':');

      if (name.toLowerCase() === 'definitions') {
        namespace = attrGetter()[ `xmlns:${prefix}` ];
      }
    }

    // definitions
    // Defintitions
    if (elementName.toLowerCase() === 'definitions') {
      namespace = attrGetter().xmlns;
    }

    // only parse first tag
    parser.stop();
  });

  try {
    parser.parse(contents);

    forEach(TYPES, function(uri, t) {
      if (namespace && namespace.indexOf(uri) !== -1) {
        type = t;
      }
    });
  } catch (err) {
    console.log(err);
  }

  return type;
};

@@ -20,22 +20,24 @@
 rt %7B%0A  f
-orEach
+indIndex
 %0A%7D from 
@@ -224,149 +224,147 @@
 ;%0A%0A%0A
-module.exports = function parseType(file) %7B%0A  var contents = file.contents,%0A      type = null,%0A      namespace;%0A%0A  const parser = new Parser(
+function getRootNamespace(xml) %7B%0A  let namespace;%0A%0A  const parser = new Parser();%0A%0A  parser.on('error', function() %7B%0A    parser.stop();%0A  %7D
 );%0A%0A
@@ -519,18 +519,20 @@
 %7B%0A      
-le
+cons
 t %5B pref
@@ -683,26 +683,35 @@
      %7D%0A    %7D
-%0A%0A
+ else %7B%0A%0A  
     // defin
@@ -721,16 +721,18 @@
 ons%0A    
+ 
+ 
 // Defin
@@ -735,24 +735,26 @@
 efintitions%0A
+  
     if (elem
@@ -792,24 +792,26 @@
 nitions') %7B%0A
+  
       namesp
@@ -836,16 +836,24 @@
 .xmlns;%0A
+      %7D%0A
     %7D%0A%0A 
@@ -909,18 +909,8 @@
 );%0A%0A
-  try %7B%0A  
   pa
@@ -924,207 +924,286 @@
 rse(
-contents);%0A%0A    forEach(TYPES, function(uri, t) %7B%0A      if (namespace && namespace.indexOf(uri) !== -1) %7B%0A   
+xml);%0A%0A  return namespace;%0A%7D%0A%0Afunction parseType(file) %7B%0A  let type = null;%0A%0A  const nsUri = getRootNamespace(file.contents);%0A%0A  if (nsUri) %7B%0A
     
- 
 type = 
-t;%0A      %7D%0A    %7D);%0A  %7D catch (err) %7B%0A    console.log(err);%0A  %7D%0A%0A  return type;%0A%7D;%0A
+findIndex(TYPES, function(uri) %7B%0A      return nsUri.startsWith(uri);%0A    %7D);%0A%0A%0A  %7D%0A%0A  return type;%0A%7D%0A%0Amodule.exports = parseType;

simplify and restructure