{"version":3,"names":["BrokenLinkAnalysis","ModuleDependencyAnalysis","Paths","FETCH_TIMEOUT","extractLinks","file","content","url","includes","match","links","Array","statusCache","Map","extractedLinks","extractedLink","normalizedLink","normalizePath","status","get","validateLink","set","link","location","push","console","log","response","fetch","method","mode","redirect","referrer","type","ok","e","options","timeout","Promise","race","_","reject","setTimeout","Error","resolveModuleDependencies","fileUrl","dependencies","resolvedDependencies","dependency","resolvedDependency","System","resolve"],"sources":["analysis.js"],"sourcesContent":["import Paths from \"src/client/paths.js\"\n\nconst FETCH_TIMEOUT = 5000\n\nexport class BrokenLinkAnalysis {\n\n  static async extractLinks(file) {\n    if (!file || !file.content || file.url.includes(\"/src/external/\") || file.url.match(/\\.js$/)) {\n      return [];\n    }\n  \n    var links = new Array()\n    var statusCache = new Map()\n    var extractedLinks =  new Array()\n    \n    if (file.url.match(/\\.md$/)) {\n      // #BUG prevents loading in #FireFox due to invalid regexp group\n      // FF RegExp version does not support lookbehinds. https://stackoverflow.com/questions/49816707/firefox-invalid-regex-group\n      // #TODO Refactor\n\n      // let patternMdFiles = /(?<=(\\]:\\s*)|(\\]\\s*\\())((http(s)?:\\/\\/(w{3}[.])?([a-z0-9.-]{1,63}(([:]{1}[0-9]{4,})|([.]{1}){1,}([a-z]{2,})){1,})([a-zA-Z0-9\\/\\.\\-\\_#.?=%;]*))|((([./]+|[a-zA-Z\\-_]))([a-zA-Z0-9\\-_]+\\.|[a-zA-Z0-9\\-_]+\\/)+([a-zA-Z0-9\\-_#.?=%;]+)?))/gm\n      //      // /(?<=<|\\[.*\\]:\\s*|\\[.*\\]\\)|src\\s*=\\s*('|\")|href\\s*=\\s*('|\"))((((http(s)?:\\/\\/)(w{3}[.])?)([a-z0-9-]{1,63}(([:]{1}[0-9]{4,})|([.]{1}){1,}([a-z]{2,})){1,}))|([./]+|[a-zA-Z_-]))([a-zA-Z0-9\\-_]+\\.|[a-zA-Z0-9\\-_]+\\/)+((\\.)?[a-zA-Z0-9\\-_#.?=%;]+(\\/)?)/gm\n      // extractedLinks = file.content.match(patternMdFiles)\n      \n      \n    } else if (file.url.match(/\\.(css|(x)?html)$/)) {\n      \n      // #TODO Refactor\n      \n      // let patternHtmlCssFiles = /(?<=(src\\s*=\\s*|href\\s*=\\s*|[a-zA-Z0-9\\-_]+\\s*\\{\\s*.*\\s*:\\s*)('|\"))((((http(s)?:\\/\\/)(w{3}[.])?)([a-z0-9-]{1,63}(([:]{1}[0-9]{4,})|([.]{1}){1,}([a-z]{2,})){1,}))|([./]+|[a-zA-Z\\-_]))([a-zA-Z0-9\\-_]+\\.|[a-zA-Z0-9\\-_]+\\/)+((\\.)?[a-zA-Z0-9\\-_#.?=%;]+(\\/)?)/gm\n      // extractedLinks = file.content.match(patternHtmlCssFiles)\n    }\n    if(!extractedLinks) {\n      return [];\n    }\n    for (const extractedLink of extractedLinks) {\n      var normalizedLink = Paths.normalizePath(extractedLink, file.url)\n      var status = statusCache.get(normalizedLink)\n      if (!status) {\n        status = await this.validateLink(normalizedLink)\n        statusCache.set(normalizedLink, status)\n      }\n      \n      let link = {\n        link: extractedLink,\n        location: extractedLink.includes('lively-kernel.org') ? \"internal\" : \"external\",\n        url: file.url,\n        status: status,\n      }\n      links.push(link)  \n    }\n    return links\n  }\n   \n  static async validateLink(url) { \n    console.log(\"[fileindex] validateLink \" + url)  \n    try {\n      var response = await  BrokenLinkAnalysis.fetch(url, { \n        method: \"GET\", // \"GET\" or \"HEAD\" or \"OPTIONS\" \n        mode: 'no-cors', \n        redirect: \"follow\",\n        referrer: \"no-referrer\", // no-referrer, *client\n      }, FETCH_TIMEOUT) \n\n      if (response.type === \"basic\") { // internal link\n        if (response.ok) {\n          return \"alive\"\n        } else {\n          return \"broken\"\n        } \n      } else if (response.type === \"opaque\") { // external link\n        return \"alive\"\n      }\n    } catch(e) {\n      return \"broken\"\n    } \n    return \"alive\" // at least nothing went wrong?\n  }\n\n  static async fetch(url, options, timeout) {\n    return Promise.race([\n        fetch(url, options),\n        new Promise((_, reject) =>\n            setTimeout(() => {\n              reject(new Error('Fetch timeout: ' + url))\n        }, timeout)\n        )\n    ]);\n  }\n}\n\n\nexport class ModuleDependencyAnalysis {\n  \n   static async resolveModuleDependencies(fileUrl, dependencies) {\n    let resolvedDependencies = new Array()\n    for (const dependency of dependencies) {\n      let resolvedDependency = await System.resolve(dependency.url, fileUrl)\n      if (!resolvedDependency) {\n        resolvedDependencies.push(dependency.url)  \n      } else {\n        resolvedDependencies.push(resolvedDependency)\n      }\n    }\n     \n    return {\n      url: fileUrl,\n      dependencies: resolvedDependencies\n    }\n  }\n}\n\n\n"],"mappings":"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"}