-
Notifications
You must be signed in to change notification settings - Fork 4.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
7a24b3f
commit 9121d40
Showing
6 changed files
with
152 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters