Home / File/ version.ts — tailwindcss Source File

version.ts — tailwindcss Source File

Architecture documentation for version.ts, a typescript file in the tailwindcss codebase. 6 imports, 23 dependents.

File typescript CommandLineInterface Renderer 6 imports 23 dependents 6 functions

Entity Profile

Dependency Diagram

graph LR
  472e1b98_afcf_f1f2_ad91_916d742bb731["version.ts"]
  28a2f72d_350c_6647_bf9d_77c69e637045["default-map.ts"]
  472e1b98_afcf_f1f2_ad91_916d742bb731 --> 28a2f72d_350c_6647_bf9d_77c69e637045
  cfb4af0e_7b2d_34a1_693a_90088443cfec["DefaultMap"]
  472e1b98_afcf_f1f2_ad91_916d742bb731 --> cfb4af0e_7b2d_34a1_693a_90088443cfec
  db40ee65_f3fe_93a2_8502_7d805d2a1d6d["package-version.ts"]
  472e1b98_afcf_f1f2_ad91_916d742bb731 --> db40ee65_f3fe_93a2_8502_7d805d2a1d6d
  de3714a2_211f_a4e9_f8b7_4a8dd2f45374["getPackageVersionSync"]
  472e1b98_afcf_f1f2_ad91_916d742bb731 --> de3714a2_211f_a4e9_f8b7_4a8dd2f45374
  69c3e246_0d60_1a3b_6419_4c423b01252f["node:child_process"]
  472e1b98_afcf_f1f2_ad91_916d742bb731 --> 69c3e246_0d60_1a3b_6419_4c423b01252f
  272c8bc4_0377_0dec_4ef7_a683aaf19ca3["semver"]
  472e1b98_afcf_f1f2_ad91_916d742bb731 --> 272c8bc4_0377_0dec_4ef7_a683aaf19ca3
  031a0782_4b19_e996_bb0e_a2f940729176["migrate-at-apply.test.ts"]
  031a0782_4b19_e996_bb0e_a2f940729176 --> 472e1b98_afcf_f1f2_ad91_916d742bb731
  2cb5ef1d_43c0_4377_fe5a_941d800f83c7["migrate-at-layer-utilities.test.ts"]
  2cb5ef1d_43c0_4377_fe5a_941d800f83c7 --> 472e1b98_afcf_f1f2_ad91_916d742bb731
  7de2c7a6_0dcf_0fb9_b7dd_c51f75983852["migrate-at-layer-utilities.ts"]
  7de2c7a6_0dcf_0fb9_b7dd_c51f75983852 --> 472e1b98_afcf_f1f2_ad91_916d742bb731
  45ec79c2_d411_4cc2_0b36_0b2e19cf72e6["migrate-preflight.test.ts"]
  45ec79c2_d411_4cc2_0b36_0b2e19cf72e6 --> 472e1b98_afcf_f1f2_ad91_916d742bb731
  f67a6019_88a0_ffd1_f91c_1a51645f6931["migrate-preflight.ts"]
  f67a6019_88a0_ffd1_f91c_1a51645f6931 --> 472e1b98_afcf_f1f2_ad91_916d742bb731
  2b51b682_0d56_1a02_6f48_58a0c0a24159["is-safe-migration.test.ts"]
  2b51b682_0d56_1a02_6f48_58a0c0a24159 --> 472e1b98_afcf_f1f2_ad91_916d742bb731
  d5e14c3d_f7c4_162e_96e8_83915119d547["is-safe-migration.ts"]
  d5e14c3d_f7c4_162e_96e8_83915119d547 --> 472e1b98_afcf_f1f2_ad91_916d742bb731
  eb383a06_7f86_e9c5_3adf_f49fd1939047["migrate-camelcase-in-named-value.test.ts"]
  eb383a06_7f86_e9c5_3adf_f49fd1939047 --> 472e1b98_afcf_f1f2_ad91_916d742bb731
  style 472e1b98_afcf_f1f2_ad91_916d742bb731 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import { execSync } from 'node:child_process'
import semver from 'semver'
import { DefaultMap } from '../../../tailwindcss/src/utils/default-map'
import { getPackageVersionSync } from './package-version'

/**
 * Must be of major version.
 *
 * E.g.: `isMajor(3)`
 */
export function isMajor(version: number) {
  return semver.satisfies(installedTailwindVersion(), `>=${version}.0.0 <${version + 1}.0.0`)
}

/**
 * Must be of greater than the current major version including minor and patch.
 *
 * E.g.: `isGreaterThan(3)`
 */
export function isGreaterThan(version: number) {
  return semver.gte(installedTailwindVersion(), `${version + 1}.0.0`)
}

let cache = new DefaultMap((base) => {
  let tailwindVersion = getPackageVersionSync('tailwindcss', base)
  if (!tailwindVersion) throw new Error('Tailwind CSS is not installed')
  return tailwindVersion
})

export function installedTailwindVersion(base = process.cwd()): string {
  return cache.get(base)
}

let expectedCache = new DefaultMap((base) => {
  try {
    // This will report a problem if the package.json/package-lock.json
    // mismatches with the installed version in node_modules.
    //
    // Also tested this with Bun and PNPM, both seem to work fine.
    execSync('npm ls tailwindcss --json', { cwd: base, stdio: 'pipe' })
    return installedTailwindVersion(base)
  } catch (_e) {
    try {
      let e = _e as { stdout: Buffer }
      let data = JSON.parse(e.stdout.toString())

      return (
        // Could be a sub-dependency issue, but we are only interested in
        // the top-level version mismatch.
        /"(.*?)" from the root project/.exec(data.dependencies.tailwindcss.invalid)?.[1] ??
        // Fallback to the installed version
        installedTailwindVersion(base)
      )
    } catch {
      // We don't know how to verify, so let's just return the installed
      // version to not block the user.
      return installedTailwindVersion(base)
    }
  }
})
export function expectedTailwindVersion(base = process.cwd()): string {
  return expectedCache.get(base)
}

Subdomains

Imported By

Frequently Asked Questions

What does version.ts do?
version.ts is a source file in the tailwindcss codebase, written in typescript. It belongs to the CommandLineInterface domain, Renderer subdomain.
What functions are defined in version.ts?
version.ts defines 6 function(s): cache, expectedCache, expectedTailwindVersion, installedTailwindVersion, isGreaterThan, isMajor.
What does version.ts depend on?
version.ts imports 6 module(s): DefaultMap, default-map.ts, getPackageVersionSync, node:child_process, package-version.ts, semver.
What files import version.ts?
version.ts is imported by 23 file(s): index.test.ts, index.ts, is-safe-migration.test.ts, is-safe-migration.ts, migrate-at-apply.test.ts, migrate-at-layer-utilities.test.ts, migrate-at-layer-utilities.ts, migrate-camelcase-in-named-value.test.ts, and 15 more.
Where is version.ts in the architecture?
version.ts is located at packages/@tailwindcss-upgrade/src/utils/version.ts (domain: CommandLineInterface, subdomain: Renderer, directory: packages/@tailwindcss-upgrade/src/utils).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free