summaryrefslogtreecommitdiff
path: root/node_modules/tailwindcss/src/lib/cacheInvalidation.js
diff options
context:
space:
mode:
authorPhilipp Tanlak <philipp.tanlak@gmail.com>2025-11-24 20:54:57 +0100
committerPhilipp Tanlak <philipp.tanlak@gmail.com>2025-11-24 20:57:48 +0100
commitb1e2c8fd5cb5dfa46bc440a12eafaf56cd844b1c (patch)
tree49d360fd6cbc6a2754efe93524ac47ff0fbe0f7d /node_modules/tailwindcss/src/lib/cacheInvalidation.js
Docs
Diffstat (limited to 'node_modules/tailwindcss/src/lib/cacheInvalidation.js')
-rw-r--r--node_modules/tailwindcss/src/lib/cacheInvalidation.js52
1 files changed, 52 insertions, 0 deletions
diff --git a/node_modules/tailwindcss/src/lib/cacheInvalidation.js b/node_modules/tailwindcss/src/lib/cacheInvalidation.js
new file mode 100644
index 0000000..fa13702
--- /dev/null
+++ b/node_modules/tailwindcss/src/lib/cacheInvalidation.js
@@ -0,0 +1,52 @@
+import crypto from 'crypto'
+import * as sharedState from './sharedState'
+
+/**
+ * Calculate the hash of a string.
+ *
+ * This doesn't need to be cryptographically secure or
+ * anything like that since it's used only to detect
+ * when the CSS changes to invalidate the context.
+ *
+ * This is wrapped in a try/catch because it's really dependent
+ * on how Node itself is build and the environment and OpenSSL
+ * version / build that is installed on the user's machine.
+ *
+ * Based on the environment this can just outright fail.
+ *
+ * See https://github.com/nodejs/node/issues/40455
+ *
+ * @param {string} str
+ */
+function getHash(str) {
+ try {
+ return crypto.createHash('md5').update(str, 'utf-8').digest('binary')
+ } catch (err) {
+ return ''
+ }
+}
+
+/**
+ * Determine if the CSS tree is different from the
+ * previous version for the given `sourcePath`.
+ *
+ * @param {string} sourcePath
+ * @param {import('postcss').Node} root
+ */
+export function hasContentChanged(sourcePath, root) {
+ let css = root.toString()
+
+ // We only care about files with @tailwind directives
+ // Other files use an existing context
+ if (!css.includes('@tailwind')) {
+ return false
+ }
+
+ let existingHash = sharedState.sourceHashMap.get(sourcePath)
+ let rootHash = getHash(css)
+ let didChange = existingHash !== rootHash
+
+ sharedState.sourceHashMap.set(sourcePath, rootHash)
+
+ return didChange
+}