text: 'use strict'
  
  const NPMBase = require('../npm/npm-base')
  const { versionColorForRange } = require('./node-version-color')
  
  module.exports = class NodeVersion extends NPMBase {
    static get category() {
      return 'platform-support'
    }
  
    static get defaultBadgeData() {
      return { label: 'node' }
    }
  
    static get route() {
      return this.buildRoute('node/v', { withTag: true })
    }
  
    static get examples() {
      return [
        {
          title: 'node',
          previewUrl: 'passport',
          keywords: ['npm'],
        },
        {
          title: 'node (scoped)',
          previewUrl: '@stdlib/stdlib',
          keywords: ['npm'],
        },
        {
          title: 'node (tag)',
          previewUrl: 'passport/latest',
          keywords: ['npm'],
        },
        {
          title: 'node (scoped with tag)',
          previewUrl: '@stdlib/stdlib/latest',
          keywords: ['npm'],
        },
        {
          title: 'node (scoped with tag, custom registry)',
          previewUrl: '@stdlib/stdlib/latest',
          query: { registry_uri: 'https://registry.npmjs.com' },
          keywords: ['npm'],
        },
      ]
    }
  
    static async render({ tag, nodeVersionRange }) {
      const label = tag ? `node@${tag}` : undefined
  
      if (nodeVersionRange === undefined) {
        return {
          label,
          message: 'not specified',
          color: 'lightgray',
        }
      } else {
        return {
          label,
          message: nodeVersionRange,
          color: await versionColorForRange(nodeVersionRange),
        }
      }
    }
  
    async handle(namedParams, queryParams) {
      const {
        scope,
        packageName,
        tag,
        registryUrl,
      } = this.constructor.unpackParams(namedParams, queryParams)
      const { engines } = await this.fetchPackageData({
        scope,
        packageName,
        registryUrl,
        tag,
      })
  
      const { node: nodeVersionRange } = engines || {}
  
      return this.constructor.render({ tag, nodeVersionRange })
    }
  }
  