{"version":3,"file":"semver.cjs","names":["VERSION"],"sources":["../../src/internal/semver.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { VERSION } from '../version';\n\nconst re = /^(\\d+)\\.(\\d+)\\.(\\d+)(-(.+))?$/;\n\n/**\n * Create a function to test an API version to see if it is compatible with the provided ownVersion.\n *\n * The returned function has the following semantics:\n * - Exact match is always compatible\n * - Major versions must match exactly\n *    - 1.x package cannot use global 2.x package\n *    - 2.x package cannot use global 1.x package\n * - The minor version of the API module requesting access to the global API must be less than or equal to the minor version of this API\n *    - 1.3 package may use 1.4 global because the later global contains all functions 1.3 expects\n *    - 1.4 package may NOT use 1.3 global because it may try to call functions which don't exist on 1.3\n * - If the major version is 0, the minor version is treated as the major and the patch is treated as the minor\n * - Patch and build tag differences are not considered at this time\n *\n * @param ownVersion version which should be checked against\n */\nexport function _makeCompatibilityCheck(\n  ownVersion: string\n): (globalVersion: string) => boolean {\n  const acceptedVersions = new Set<string>([ownVersion]);\n  const rejectedVersions = new Set<string>();\n\n  const myVersionMatch = ownVersion.match(re);\n  if (!myVersionMatch) {\n    // we cannot guarantee compatibility so we always return noop\n    return () => false;\n  }\n\n  const ownVersionParsed = {\n    major: +myVersionMatch[1],\n    minor: +myVersionMatch[2],\n    patch: +myVersionMatch[3],\n    prerelease: myVersionMatch[4],\n  };\n\n  // if ownVersion has a prerelease tag, versions must match exactly\n  if (ownVersionParsed.prerelease != null) {\n    return function isExactmatch(globalVersion: string): boolean {\n      return globalVersion === ownVersion;\n    };\n  }\n\n  function _reject(v: string) {\n    rejectedVersions.add(v);\n    return false;\n  }\n\n  function _accept(v: string) {\n    acceptedVersions.add(v);\n    return true;\n  }\n\n  return function isCompatible(globalVersion: string): boolean {\n    if (acceptedVersions.has(globalVersion)) {\n      return true;\n    }\n\n    if (rejectedVersions.has(globalVersion)) {\n      return false;\n    }\n\n    const globalVersionMatch = globalVersion.match(re);\n    if (!globalVersionMatch) {\n      // cannot parse other version\n      // we cannot guarantee compatibility so we always noop\n      return _reject(globalVersion);\n    }\n\n    const globalVersionParsed = {\n      major: +globalVersionMatch[1],\n      minor: +globalVersionMatch[2],\n      patch: +globalVersionMatch[3],\n      prerelease: globalVersionMatch[4],\n    };\n\n    // if globalVersion has a prerelease tag, versions must match exactly\n    if (globalVersionParsed.prerelease != null) {\n      return _reject(globalVersion);\n    }\n\n    // major versions must match\n    if (ownVersionParsed.major !== globalVersionParsed.major) {\n      return _reject(globalVersion);\n    }\n\n    if (ownVersionParsed.major === 0) {\n      if (\n        ownVersionParsed.minor === globalVersionParsed.minor &&\n        ownVersionParsed.patch <= globalVersionParsed.patch\n      ) {\n        return _accept(globalVersion);\n      }\n\n      return _reject(globalVersion);\n    }\n\n    if (ownVersionParsed.minor <= globalVersionParsed.minor) {\n      return _accept(globalVersion);\n    }\n\n    return _reject(globalVersion);\n  };\n}\n\n/**\n * Test an API version to see if it is compatible with this API.\n *\n * - Exact match is always compatible\n * - Major versions must match exactly\n *    - 1.x package cannot use global 2.x package\n *    - 2.x package cannot use global 1.x package\n * - The minor version of the API module requesting access to the global API must be less than or equal to the minor version of this API\n *    - 1.3 package may use 1.4 global because the later global contains all functions 1.3 expects\n *    - 1.4 package may NOT use 1.3 global because it may try to call functions which don't exist on 1.3\n * - If the major version is 0, the minor version is treated as the major and the patch is treated as the minor\n * - Patch and build tag differences are not considered at this time\n *\n * @param version version of the API requesting an instance of the global API\n */\nexport const isCompatible = _makeCompatibilityCheck(VERSION);\n"],"mappings":";;AAOA,MAAM,KAAK;;;;;;;;;;;;;;;;;AAkBX,SAAgB,wBACd,YACoC;CACpC,MAAM,mCAAmB,IAAI,IAAY,CAAC,UAAU,CAAC;CACrD,MAAM,mCAAmB,IAAI,IAAY;CAEzC,MAAM,iBAAiB,WAAW,MAAM,EAAE;CAC1C,IAAI,CAAC,gBAEH,aAAa;CAGf,MAAM,mBAAmB;EACvB,OAAO,CAAC,eAAe;EACvB,OAAO,CAAC,eAAe;EACvB,OAAO,CAAC,eAAe;EACvB,YAAY,eAAe;CAC7B;CAGA,IAAI,iBAAiB,cAAc,MACjC,OAAO,SAAS,aAAa,eAAgC;EAC3D,OAAO,kBAAkB;CAC3B;CAGF,SAAS,QAAQ,GAAW;EAC1B,iBAAiB,IAAI,CAAC;EACtB,OAAO;CACT;CAEA,SAAS,QAAQ,GAAW;EAC1B,iBAAiB,IAAI,CAAC;EACtB,OAAO;CACT;CAEA,OAAO,SAAS,aAAa,eAAgC;EAC3D,IAAI,iBAAiB,IAAI,aAAa,GACpC,OAAO;EAGT,IAAI,iBAAiB,IAAI,aAAa,GACpC,OAAO;EAGT,MAAM,qBAAqB,cAAc,MAAM,EAAE;EACjD,IAAI,CAAC,oBAGH,OAAO,QAAQ,aAAa;EAG9B,MAAM,sBAAsB;GAC1B,OAAO,CAAC,mBAAmB;GAC3B,OAAO,CAAC,mBAAmB;GAC3B,OAAO,CAAC,mBAAmB;GAC3B,YAAY,mBAAmB;EACjC;EAGA,IAAI,oBAAoB,cAAc,MACpC,OAAO,QAAQ,aAAa;EAI9B,IAAI,iBAAiB,UAAU,oBAAoB,OACjD,OAAO,QAAQ,aAAa;EAG9B,IAAI,iBAAiB,UAAU,GAAG;GAChC,IACE,iBAAiB,UAAU,oBAAoB,SAC/C,iBAAiB,SAAS,oBAAoB,OAE9C,OAAO,QAAQ,aAAa;GAG9B,OAAO,QAAQ,aAAa;EAC9B;EAEA,IAAI,iBAAiB,SAAS,oBAAoB,OAChD,OAAO,QAAQ,aAAa;EAG9B,OAAO,QAAQ,aAAa;CAC9B;AACF;;;;;;;;;;;;;;;;AAiBA,MAAa,eAAe,wBAAwBA,gBAAAA,OAAO"}