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 UpgradeToolkit TemplateAnalysis 6 imports 23 dependents 6 functions

Entity Profile

Dependency Diagram

graph LR
  fff09679_e13c_392d_23bb_cebc04ddb008["version.ts"]
  c056448b_f7a2_9149_54e8_f0f8470fe3aa["default-map.ts"]
  fff09679_e13c_392d_23bb_cebc04ddb008 --> c056448b_f7a2_9149_54e8_f0f8470fe3aa
  bf2992f6_4a37_8536_70f8_94b13631027d["DefaultMap"]
  fff09679_e13c_392d_23bb_cebc04ddb008 --> bf2992f6_4a37_8536_70f8_94b13631027d
  0f4b2aca_6ae5_ec90_f7db_7b345b730686["package-version.ts"]
  fff09679_e13c_392d_23bb_cebc04ddb008 --> 0f4b2aca_6ae5_ec90_f7db_7b345b730686
  a9a3f876_1870_b56c_a1a1_adc3de661d5a["getPackageVersionSync"]
  fff09679_e13c_392d_23bb_cebc04ddb008 --> a9a3f876_1870_b56c_a1a1_adc3de661d5a
  8d4c06fc_a152_c497_9c1b_b60c5c91b817["node:child_process"]
  fff09679_e13c_392d_23bb_cebc04ddb008 --> 8d4c06fc_a152_c497_9c1b_b60c5c91b817
  ceb9c460_c8df_eea5_d0c9_fb401dc6bdf3["semver"]
  fff09679_e13c_392d_23bb_cebc04ddb008 --> ceb9c460_c8df_eea5_d0c9_fb401dc6bdf3
  412091df_9a6e_6a86_01bf_19968d3ae586["migrate-at-apply.test.ts"]
  412091df_9a6e_6a86_01bf_19968d3ae586 --> fff09679_e13c_392d_23bb_cebc04ddb008
  bf639994_959a_cded_6f3a_163595545a18["migrate-at-layer-utilities.test.ts"]
  bf639994_959a_cded_6f3a_163595545a18 --> fff09679_e13c_392d_23bb_cebc04ddb008
  9e4e8a58_fb9b_d663_2880_954972aac787["migrate-at-layer-utilities.ts"]
  9e4e8a58_fb9b_d663_2880_954972aac787 --> fff09679_e13c_392d_23bb_cebc04ddb008
  48369d9b_74af_14f1_33c7_7d263509d02f["migrate-preflight.test.ts"]
  48369d9b_74af_14f1_33c7_7d263509d02f --> fff09679_e13c_392d_23bb_cebc04ddb008
  4ccbfbad_b80c_422a_38fe_dc35ee118e8d["migrate-preflight.ts"]
  4ccbfbad_b80c_422a_38fe_dc35ee118e8d --> fff09679_e13c_392d_23bb_cebc04ddb008
  af634e72_8f21_9695_7ac2_bb89b92a31b2["is-safe-migration.test.ts"]
  af634e72_8f21_9695_7ac2_bb89b92a31b2 --> fff09679_e13c_392d_23bb_cebc04ddb008
  0e3e8c5a_e3ef_6c0d_8a31_e358e2206f79["is-safe-migration.ts"]
  0e3e8c5a_e3ef_6c0d_8a31_e358e2206f79 --> fff09679_e13c_392d_23bb_cebc04ddb008
  e295a71c_3b67_dd42_3cf7_c583c04aa2ee["migrate-camelcase-in-named-value.test.ts"]
  e295a71c_3b67_dd42_3cf7_c583c04aa2ee --> fff09679_e13c_392d_23bb_cebc04ddb008
  style fff09679_e13c_392d_23bb_cebc04ddb008 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 UpgradeToolkit domain, TemplateAnalysis 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: UpgradeToolkit, subdomain: TemplateAnalysis, 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