function parse()

in src/parser/parse.js [27:61]


function parse(text, opts = {}) {
  if (!text) {
    return Promise.reject('No data to parse');
  }
  const format = opts.format || 'wdl';
  const subWfDetailing = (opts.subWfDetailing && _.isArray(opts.subWfDetailing)) ? opts.subWfDetailing : null;
  const recursionDepth = opts.recursionDepth || 0;
  const baseURI = opts.baseURI || null;
  const zipFile = opts.zipFile || null;
  if (format === 'wdl') {
    if (zipFile) {
      const wdlArray = opts.wdlArray || [];
      return JSZip.loadAsync(zipFile).then((files) => {
        const zipWdlFiles = [];

        files.forEach((relativePath, zipEntry) => {
          if (!zipEntry.dir && zipEntry.name.indexOf('.wdl') === zipEntry.name.length - 4) {
            zipWdlFiles.push(zipEntry);
          }
        });

        return Promise.all(zipWdlFiles.map(zipWdlFile => zipWdlFile.async('string').then(str => ({
          name: zipWdlFile.name.split('/').pop(),
          wdl: str,
        }))))
          .then(zipWdlArray => parseWDL(
            text,
            { wdlArray: wdlArray.concat(zipWdlArray), baseURI, subWfDetailing, recursionDepth },
          ));
      }, e => Promise.reject(`Parse zip file: ${e}`));
    }
    return parseWDL(text, opts);
  }
  return Promise.reject(`Unsupported format: ${format}`);
}