{"version":3,"file":"patch.cjs","sources":["../../../src/cli/commands/patch.ts"],"sourcesContent":["import fs from \"fs/promises\";\nimport path from \"path\";\n\n/**\n * Patches Tailwind CSS installation to ensure version files exist and are correctly configured.\n *\n * This function:\n * - Resolves the Tailwind CSS module path\n * - Reads the Tailwind package.json to get the actual version\n * - Creates or updates version files (version.js, version.mjs, version.d.ts, version.d.mts)\n * - Updates package.json exports if necessary\n *\n * @returns {Promise<void>} A promise that resolves when patching is complete\n */\nexport async function patchTailwind(): Promise<void> {\n  try {\n    let tailwindPath: string | undefined;\n\n    try {\n      let tailwindModulePath;\n      if (typeof require !== \"undefined\") {\n        tailwindModulePath = require.resolve(\"tailwindcss/package.json\", {\n          paths: [process.cwd()],\n        });\n        tailwindPath = path.dirname(tailwindModulePath);\n      } else {\n        const { createRequire } = await import(\"module\");\n        const require = createRequire(import.meta.url);\n        tailwindModulePath = require.resolve(\"tailwindcss/package.json\", {\n          paths: [process.cwd()],\n        });\n        tailwindPath = path.dirname(tailwindModulePath);\n      }\n    } catch {\n      console.warn(\"Could not resolve Tailwind CSS module path. Skipping version patch.\");\n      return;\n    }\n\n    const tailwindPackageJsonPath = path.join(tailwindPath, \"package.json\");\n    let tailwindPackageJson: {\n      version: string;\n      exports?: Record<string, unknown>;\n    };\n\n    try {\n      const packageJsonContent = await fs.readFile(tailwindPackageJsonPath, \"utf-8\");\n      tailwindPackageJson = JSON.parse(packageJsonContent);\n    } catch {\n      console.warn(\"Could not read Tailwind CSS `package.json`. Skipping version patch.\");\n      return;\n    }\n\n    const actualVersion = tailwindPackageJson.version;\n\n    // Check if version files exist and have the correct version\n    const versionFilePath = path.join(tailwindPath, \"version.js\");\n    const versionMjsFilePath = path.join(tailwindPath, \"version.mjs\");\n    const versionDtsFilePath = path.join(tailwindPath, \"version.d.ts\");\n    const versionDmtsFilePath = path.join(tailwindPath, \"version.d.mts\");\n\n    let patchesApplied = false;\n\n    // create `version.js`, `version.mjs`, `version.d.ts` and `version.d.mts` files if needed\n    try {\n      let filesCreated = false;\n\n      // Check and create `version.js` file (CJS)\n      if (await shouldUpdateFile(versionFilePath, actualVersion)) {\n        const versionContent = `\"use strict\";\\n\\nconst version = \"${actualVersion}\";\\nmodule.exports = version;\\n`;\n        await fs.writeFile(versionFilePath, versionContent, \"utf-8\");\n        filesCreated = true;\n      }\n\n      // Check and create `version.mjs` file (ESM)\n      if (await shouldUpdateFile(versionMjsFilePath, actualVersion)) {\n        const versionMjsContent = `const version = \"${actualVersion}\";\\nexport default version;\\n`;\n        await fs.writeFile(versionMjsFilePath, versionMjsContent, \"utf-8\");\n        filesCreated = true;\n      }\n\n      // Check and create `version.d.ts` file\n      if (await shouldUpdateFile(versionDtsFilePath)) {\n        const versionDtsContent = `declare const version: string;\\nexport = version;\\n`;\n        await fs.writeFile(versionDtsFilePath, versionDtsContent, \"utf-8\");\n        filesCreated = true;\n      }\n\n      // Check and create `version.d.mts` file\n      if (await shouldUpdateFile(versionDmtsFilePath)) {\n        const versionDmtsContent = `declare const version: string;\\nexport default version;\\n`;\n        await fs.writeFile(versionDmtsFilePath, versionDmtsContent, \"utf-8\");\n        filesCreated = true;\n      }\n\n      if (filesCreated) {\n        patchesApplied = true;\n      }\n    } catch {\n      console.warn(\"Could not create Tailwind CSS version files. Skipping version patch.\");\n    }\n\n    // patch package.json.exports\n    try {\n      if (tailwindPackageJson.exports) {\n        if (!tailwindPackageJson.exports[\"./version\"] || !tailwindPackageJson.exports[\"./version.js\"]) {\n          tailwindPackageJson.exports = {\n            ...tailwindPackageJson.exports,\n            \"./version\": {\n              require: \"./version.js\",\n              import: \"./version.mjs\",\n            },\n            \"./version.js\": {\n              require: \"./version.js\",\n              import: \"./version.mjs\",\n            },\n          };\n          await fs.writeFile(tailwindPackageJsonPath, JSON.stringify(tailwindPackageJson, null, 2), \"utf-8\");\n          patchesApplied = true;\n        }\n      }\n    } catch {\n      console.warn(\"Could not patch Tailwind CSS `package.json.exports`. Skipping version patch.\");\n    }\n\n    if (patchesApplied) {\n      console.log(\"Patched Tailwind CSS\");\n    }\n  } catch (error) {\n    console.error(\"Failed to patch Tailwind CSS:\", error);\n  }\n}\n\n/**\n * Determines whether a file should be updated based on its existence and content.\n *\n * @param filePath - The path to the file to check\n * @param actualVersion - Optional version string to check for in the file content\n * @returns {Promise<boolean>} True if the file doesn't exist or doesn't contain the actual version\n */\nasync function shouldUpdateFile(filePath: string, actualVersion?: string): Promise<boolean> {\n  try {\n    const content = await fs.readFile(filePath, \"utf-8\");\n    if (actualVersion !== undefined) {\n      return !content.includes(actualVersion);\n    }\n    return false;\n  } catch {\n    // File doesn't exist\n    return true;\n  }\n}\n"],"names":[],"mappings":"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"}