{"version":3,"sources":["jsdelivr-header.js","/npm/detect-es-version@0.1.4/src/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,aACA,MAAM,GAAK,QAAQ,MAAM,SACnB,KAAO,QAAQ,SACf,UAAE,WAAc,QAAQ,QACxB,MAAQ,QAAQ,SAChB,mBAAqB,QAAQ,mBAC7B,gBAAkB,QAAQ,oBAC1B,MAAQ,QAAQ,SAChB,OAAS,QAAQ,cACjB,MAAQ,QAAQ,oBAChB,kBAAoB,QAAQ,8BAC5B,mBAAqB,QAAQ,4BAC7B,iBAAE,iBAAgB,oBAAE,qBAAwB,QAAQ,eAEpD,yBAA2B,CAC/B,WAAY,CAAC,SAAU,UAAW,QAClC,eAAgB,CAAC,YAEb,uBAAyB,CAC7B,YAAa,KACb,6BAA6B,EAC7B,eAAe,GAGjB,SAAS,kBAAkB,GACzB,OAAQ,EAAK,MACX,IAAK,oBACL,IAAK,yBACL,IAAK,uBACH,GAAI,EAAK,QAAU,EAAK,OAAO,MAC7B,OAAO,EAAK,OAAO,MAErB,MACF,IAAK,iBACH,GAAI,MAAM,eAAe,GAAO,CAC9B,GAC6B,YAA3B,EAAK,UAAU,GAAG,MACS,kBAA3B,EAAK,UAAU,GAAG,KAElB,OAAO,EAAK,UAAU,GAAG,MACpB,GAA+B,oBAA3B,EAAK,UAAU,GAAG,KAC3B,OAAO,EAAK,UAAU,GAAG,OAAO,GAAG,MAAM,GAE7C,MAAO,GAAI,MAAM,oBAAoB,GACnC,OAAO,EAAK,UAAU,GAAG,MAGjC,CAOA,SAAS,oBAAoB,GAC3B,OAAO,EAAc,CACvB,CAOA,SAAS,eAAe,GACtB,IAAI,EAAc,iBAClB,MAAM,EACe,iBAAZ,EACH,EACA,MAAM,MAAM,EAAS,wBAI3B,OAHA,OAAO,KAAK,GAAK,SAAU,GACzB,EAAc,KAAK,IAAI,EAAa,mBAAmB,GACzD,IACO,CACT,CASA,eAAe,yBACb,EACA,EAAkB,yBAClB,EAAU,IAAI,KAEd,GAAI,EAAQ,IAAI,IAAe,EAAW,SAAS,SACjD,OAAQ,EAEV,EAAQ,IAAI,GAEZ,IAAI,EAAmB,iBACnB,EAAe,GAEnB,MAAM,QAAa,GAAG,SAAS,EAAY,QACrC,EAAM,MAAM,MAAM,EAAM,wBAE9B,OAAO,KAAK,GAAK,SAAU,GACzB,EAAmB,KAAK,IAAI,EAAkB,mBAAmB,IACjE,MAAM,EAAa,kBAAkB,GACjC,GAAc,EAAW,WAAW,MACtC,EAAa,KAAK,EAEtB,IAEA,MAAM,EAAU,UAAU,gBAAgB,OAAO,IAC3C,QAA+B,MAAM,SACzC,EACA,qBACA,MAAO,IACL,MAAM,QAAuB,EAC3B,KAAK,QAAQ,GACb,GAEF,aAAa,yBACX,EACA,EACA,EACD,IAGL,OAAO,KAAK,IAAI,KAAqB,EACvC,CAQA,eAAe,2BACb,EACA,EAAkB,0BAElB,MAAM,EAAU,UAAU,gBAAgB,OAAO,IAC3C,QAAmB,EAAQ,EAAa,KAC9C,aAAa,yBAAyB,EAAY,EACpD,CAQA,eAAe,sBACb,EACA,EAAkB,0BAElB,MAAM,QAAoB,kBAAkB,uBACtC,kBAAkB,eAAe,EAAe,GAEtD,MAAM,EAAc,mBAAmB,GAAe,KAChD,EAAc,KAAK,KAAK,EAAa,eAAgB,GACrD,QAAoB,2BACxB,EACA,GAIF,aADM,kBAAkB,YAAY,GAC7B,CACT,CAEA,OAAO,QAAU,CACf,8BACA,kDACA,4CACA,sDACA","file":"/npm/detect-es-version@0.1.4/src/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/detect-es-version@0.1.4/src/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","'use strict';\r\nconst fs = require('fs').promises;\r\nconst path = require('path');\r\nconst { promisify } = require('util');\r\nconst async = require('async');\r\nconst parsePackageString = require('npm-package-arg');\r\nconst enhancedResolve = require('enhanced-resolve');\r\nconst acorn = require('acorn');\r\nconst walker = require('acorn-walk');\r\nconst types = require('ast-module-types');\r\nconst InstallationUtils = require('./utils/installation-utils');\r\nconst getNodeEcmaVersion = require('./get-node-ecma-version');\r\nconst { MIN_ECMA_VERSION, DEFAULT_MAX_THREADS } = require('./constants');\r\n\r\nconst DEFAULT_RESOLVER_OPTIONS = {\r\n  mainFields: ['module', 'browser', 'main'],\r\n  conditionNames: ['browser'],\r\n};\r\nconst DEFAULT_PARSER_OPTIONS = {\r\n  ecmaVersion: 2020,\r\n  allowImportExportEverywhere: true,\r\n  allowHashBang: true,\r\n};\r\n\r\nfunction getNodeDependency(node) {\r\n  switch (node.type) {\r\n    case 'ImportDeclaration':\r\n    case 'ExportNamedDeclaration':\r\n    case 'ExportAllDeclaration':\r\n      if (node.source && node.source.value) {\r\n        return node.source.value;\r\n      }\r\n      break;\r\n    case 'CallExpression':\r\n      if (types.isPlainRequire(node)) {\r\n        if (\r\n          node.arguments[0].type === 'Literal' ||\r\n          node.arguments[0].type === 'StringLiteral'\r\n        ) {\r\n          return node.arguments[0].value;\r\n        } else if (node.arguments[0].type === 'TemplateLiteral') {\r\n          return node.arguments[0].quasis[0].value.raw;\r\n        }\r\n      } else if (types.isMainScopedRequire(node)) {\r\n        return node.arguments[0].value;\r\n      }\r\n  }\r\n}\r\n\r\n/**\r\n * Determines whether a given ecma version is considered modern\r\n * @param ecmaVersion The given ecma version\r\n * @return {boolean} True if the ecma version is >5. False otherwise.\r\n */\r\nfunction isEcmaVersionModern(ecmaVersion) {\r\n  return ecmaVersion > 5;\r\n}\r\n\r\n/**\r\n * Determines the ecma version of a string of source code or AST\r\n * @param {String|Object} content The source code or AST to inspect\r\n * @return {Number} The ecma version of the source code or AST\r\n */\r\nfunction getEcmaVersion(content) {\r\n  let ecmaVersion = MIN_ECMA_VERSION;\r\n  const ast =\r\n    typeof content === 'object'\r\n      ? content\r\n      : acorn.parse(content, DEFAULT_PARSER_OPTIONS);\r\n  walker.full(ast, function (node) {\r\n    ecmaVersion = Math.max(ecmaVersion, getNodeEcmaVersion(node));\r\n  });\r\n  return ecmaVersion;\r\n}\r\n\r\n/**\r\n * Determines the ecma version of an entry point and its dependency tree\r\n * @param {String} entryPoint An absolute filepath to an entry point\r\n * @param {Object} resolverOptions The resolver options for resolving entry points\r\n * @param {Set<String>} visited A set of visited entry points\r\n * @return {Promise<Number>} The ecma version of the entry point and its dependency tree\r\n */\r\nasync function getEntryPointEcmaVersion(\r\n  entryPoint,\r\n  resolverOptions = DEFAULT_RESOLVER_OPTIONS,\r\n  visited = new Set()\r\n) {\r\n  if (visited.has(entryPoint) || entryPoint.endsWith('.json')) {\r\n    return -1;\r\n  }\r\n  visited.add(entryPoint);\r\n\r\n  let entryEcmaVersion = MIN_ECMA_VERSION;\r\n  let dependencies = [];\r\n\r\n  const code = await fs.readFile(entryPoint, 'utf8');\r\n  const ast = acorn.parse(code, DEFAULT_PARSER_OPTIONS);\r\n\r\n  walker.full(ast, function (node) {\r\n    entryEcmaVersion = Math.max(entryEcmaVersion, getNodeEcmaVersion(node));\r\n    const dependency = getNodeDependency(node);\r\n    if (dependency && dependency.startsWith('.')) {\r\n      dependencies.push(dependency);\r\n    }\r\n  });\r\n\r\n  const resolve = promisify(enhancedResolve.create(resolverOptions));\r\n  const dependencyEcmaVersions = await async.mapLimit(\r\n    dependencies,\r\n    DEFAULT_MAX_THREADS,\r\n    async (dependency) => {\r\n      const dependencyPath = await resolve(\r\n        path.dirname(entryPoint),\r\n        dependency\r\n      );\r\n      return await getEntryPointEcmaVersion(\r\n        dependencyPath,\r\n        resolverOptions,\r\n        visited\r\n      );\r\n    }\r\n  );\r\n  return Math.max(entryEcmaVersion, ...dependencyEcmaVersions);\r\n}\r\n\r\n/**\r\n * Returns the ecma version of an entry point of a package\r\n * @param {String} packagePath An absolute filepath to a package\r\n * @param {Object} resolverOptions The resolver options for resolving entry points\r\n * @return {Promise<Number>} The ecma version of the entry point and its dependency tree\r\n */\r\nasync function getLocalPackageEcmaVersion(\r\n  packagePath,\r\n  resolverOptions = DEFAULT_RESOLVER_OPTIONS\r\n) {\r\n  const resolve = promisify(enhancedResolve.create(resolverOptions));\r\n  const entryPoint = await resolve(packagePath, '.');\r\n  return await getEntryPointEcmaVersion(entryPoint, resolverOptions);\r\n}\r\n\r\n/**\r\n * Returns the ecma version of an entry point of a package installed from npm\r\n * @param {String} packageString A string representing the package. e.g. preact@10.4.7\r\n * @param {Object} resolverOptions The resolver options for resolving entry points\r\n * @return {Promise<Number>} The ecma version of the entry point and its dependency tree\r\n */\r\nasync function getPackageEcmaVersion(\r\n  packageString,\r\n  resolverOptions = DEFAULT_RESOLVER_OPTIONS\r\n) {\r\n  const installPath = await InstallationUtils.getInstallPath();\r\n  await InstallationUtils.installPackage(packageString, installPath);\r\n\r\n  const packageName = parsePackageString(packageString).name;\r\n  const packagePath = path.join(installPath, 'node_modules', packageName);\r\n  const ecmaVersion = await getLocalPackageEcmaVersion(\r\n    packagePath,\r\n    resolverOptions\r\n  );\r\n\r\n  await InstallationUtils.cleanupPath(installPath);\r\n  return ecmaVersion;\r\n}\r\n\r\nmodule.exports = {\r\n  getEcmaVersion,\r\n  getEntryPointEcmaVersion,\r\n  getPackageEcmaVersion,\r\n  getLocalPackageEcmaVersion,\r\n  isEcmaVersionModern,\r\n};\r\n"]}