/
opt
/
canhelp
/
node_modules
/
tailwindcss
/
src
/
util
/
/opt/canhelp/node_modules/tailwindcss/src/util
mkdir
upload
Name
Size
Mode
Actions
applyImportantSelector.js
774
0644
edit
dl
rm
bigSign.js
98
0644
edit
dl
rm
buildMediaQuery.js
560
0644
edit
dl
rm
cloneDeep.js
283
0644
edit
dl
rm
cloneNodes.js
1333
0644
edit
dl
rm
color.js
2718
0644
edit
dl
rm
colorNames.js
4301
0644
edit
dl
rm
configurePlugins.js
578
0644
edit
dl
rm
createPlugin.js
703
0644
edit
dl
rm
createUtilityPlugin.js
1222
0644
edit
dl
rm
dataTypes.js
7332
0644
edit
dl
rm
defaults.js
361
0644
edit
dl
rm
escapeClassName.js
255
0644
edit
dl
rm
escapeCommas.js
96
0644
edit
dl
rm
flattenColorPalette.js
410
0644
edit
dl
rm
formatVariantSelector.js
9862
0644
edit
dl
rm
getAllConfigs.js
1037
0644
edit
dl
rm
hashConfig.js
126
0644
edit
dl
rm
isKeyframeRule.js
142
0644
edit
dl
rm
isPlainObject.js
262
0644
edit
dl
rm
isSyntacticallyValidPropertyValue.js
1612
0644
edit
dl
rm
log.js
789
0644
edit
dl
rm
math-operators.ts
5290
0644
edit
dl
rm
nameClass.js
634
0644
edit
dl
rm
negateValue.js
771
0644
edit
dl
rm
normalizeConfig.js
9024
0644
edit
dl
rm
normalizeScreens.js
4346
0644
edit
dl
rm
parseAnimationValue.js
2351
0644
edit
dl
rm
parseBoxShadowValue.js
1855
0644
edit
dl
rm
parseDependency.js
867
0644
edit
dl
rm
parseGlob.js
510
0644
edit
dl
rm
parseObjectStyles.js
429
0644
edit
dl
rm
pluginUtils.js
8183
0644
edit
dl
rm
prefixSelector.js
992
0644
edit
dl
rm
pseudoElements.js
5717
0644
edit
dl
rm
removeAlphaVariables.js
785
0644
edit
dl
rm
resolveConfig.js
6967
0644
edit
dl
rm
resolveConfigPath.js
1591
0644
edit
dl
rm
responsive.js
243
0644
edit
dl
rm
splitAtTopLevelOnly.js
1527
0644
edit
dl
rm
tap.js
72
0644
edit
dl
rm
toColorValue.js
137
0644
edit
dl
rm
toPath.js
739
0644
edit
dl
rm
transformThemeValue.js
1637
0644
edit
dl
rm
validateConfig.js
888
0644
edit
dl
rm
validateFormalSyntax.js
1020
0644
edit
dl
rm
withAlphaVariable.js
1215
0644
edit
dl
rm
Edit:
/opt/canhelp/node_modules/tailwindcss/src/util/normalizeConfig.js
(9024B)
import { flagEnabled } from '../featureFlags' import log, { dim } from './log' export function normalizeConfig(config) { // Quick structure validation /** * type FilePath = string * type RawFile = { raw: string, extension?: string } * type ExtractorFn = (content: string) => Array<string> * type TransformerFn = (content: string) => string * * type Content = * | Array<FilePath | RawFile> * | { * files: Array<FilePath | RawFile>, * extract?: ExtractorFn | { [extension: string]: ExtractorFn } * transform?: TransformerFn | { [extension: string]: TransformerFn } * } */ let valid = (() => { // `config.purge` should not exist anymore if (config.purge) { return false } // `config.content` should exist if (!config.content) { return false } // `config.content` should be an object or an array if ( !Array.isArray(config.content) && !(typeof config.content === 'object' && config.content !== null) ) { return false } // When `config.content` is an array, it should consist of FilePaths or RawFiles if (Array.isArray(config.content)) { return config.content.every((path) => { // `path` can be a string if (typeof path === 'string') return true // `path` can be an object { raw: string, extension?: string } // `raw` must be a string if (typeof path?.raw !== 'string') return false // `extension` (if provided) should also be a string if (path?.extension && typeof path?.extension !== 'string') { return false } return true }) } // When `config.content` is an object if (typeof config.content === 'object' && config.content !== null) { // Only `files`, `relative`, `extract`, and `transform` can exist in `config.content` if ( Object.keys(config.content).some( (key) => !['files', 'relative', 'extract', 'transform'].includes(key) ) ) { return false } // `config.content.files` should exist of FilePaths or RawFiles if (Array.isArray(config.content.files)) { if ( !config.content.files.every((path) => { // `path` can be a string if (typeof path === 'string') return true // `path` can be an object { raw: string, extension?: string } // `raw` must be a string if (typeof path?.raw !== 'string') return false // `extension` (if provided) should also be a string if (path?.extension && typeof path?.extension !== 'string') { return false } return true }) ) { return false } // `config.content.extract` is optional, and can be a Function or a Record<String, Function> if (typeof config.content.extract === 'object') { for (let value of Object.values(config.content.extract)) { if (typeof value !== 'function') { return false } } } else if ( !(config.content.extract === undefined || typeof config.content.extract === 'function') ) { return false } // `config.content.transform` is optional, and can be a Function or a Record<String, Function> if (typeof config.content.transform === 'object') { for (let value of Object.values(config.content.transform)) { if (typeof value !== 'function') { return false } } } else if ( !( config.content.transform === undefined || typeof config.content.transform === 'function' ) ) { return false } // `config.content.relative` is optional and can be a boolean if ( typeof config.content.relative !== 'boolean' && typeof config.content.relative !== 'undefined' ) { return false } } return true } return false })() if (!valid) { log.warn('purge-deprecation', [ 'The `purge`/`content` options have changed in Tailwind CSS v3.0.', 'Update your configuration file to eliminate this warning.', 'https://tailwindcss.com/docs/upgrade-guide#configure-content-sources', ]) } // Normalize the `safelist` config.safelist = (() => { let { content, purge, safelist } = config if (Array.isArray(safelist)) return safelist if (Array.isArray(content?.safelist)) return content.safelist if (Array.isArray(purge?.safelist)) return purge.safelist if (Array.isArray(purge?.options?.safelist)) return purge.options.safelist return [] })() // Normalize the `blocklist` config.blocklist = (() => { let { blocklist } = config if (Array.isArray(blocklist)) { if (blocklist.every((item) => typeof item === 'string')) { return blocklist } log.warn('blocklist-invalid', [ 'The `blocklist` option must be an array of strings.', 'https://tailwindcss.com/docs/content-configuration#discarding-classes', ]) } return [] })() // Normalize prefix option if (typeof config.prefix === 'function') { log.warn('prefix-function', [ 'As of Tailwind CSS v3.0, `prefix` cannot be a function.', 'Update `prefix` in your configuration to be a string to eliminate this warning.', 'https://tailwindcss.com/docs/upgrade-guide#prefix-cannot-be-a-function', ]) config.prefix = '' } else { config.prefix = config.prefix ?? '' } // Normalize the `content` config.content = { relative: (() => { let { content } = config if (content?.relative) { return content.relative } return flagEnabled(config, 'relativeContentPathsByDefault') })(), files: (() => { let { content, purge } = config if (Array.isArray(purge)) return purge if (Array.isArray(purge?.content)) return purge.content if (Array.isArray(content)) return content if (Array.isArray(content?.content)) return content.content if (Array.isArray(content?.files)) return content.files return [] })(), extract: (() => { let extract = (() => { if (config.purge?.extract) return config.purge.extract if (config.content?.extract) return config.content.extract if (config.purge?.extract?.DEFAULT) return config.purge.extract.DEFAULT if (config.content?.extract?.DEFAULT) return config.content.extract.DEFAULT if (config.purge?.options?.extractors) return config.purge.options.extractors if (config.content?.options?.extractors) return config.content.options.extractors return {} })() let extractors = {} let defaultExtractor = (() => { if (config.purge?.options?.defaultExtractor) { return config.purge.options.defaultExtractor } if (config.content?.options?.defaultExtractor) { return config.content.options.defaultExtractor } return undefined })() if (defaultExtractor !== undefined) { extractors.DEFAULT = defaultExtractor } // Functions if (typeof extract === 'function') { extractors.DEFAULT = extract } // Arrays else if (Array.isArray(extract)) { for (let { extensions, extractor } of extract ?? []) { for (let extension of extensions) { extractors[extension] = extractor } } } // Objects else if (typeof extract === 'object' && extract !== null) { Object.assign(extractors, extract) } return extractors })(), transform: (() => { let transform = (() => { if (config.purge?.transform) return config.purge.transform if (config.content?.transform) return config.content.transform if (config.purge?.transform?.DEFAULT) return config.purge.transform.DEFAULT if (config.content?.transform?.DEFAULT) return config.content.transform.DEFAULT return {} })() let transformers = {} if (typeof transform === 'function') { transformers.DEFAULT = transform } else if (typeof transform === 'object' && transform !== null) { Object.assign(transformers, transform) } return transformers })(), } // Validate globs to prevent bogus globs. // E.g.: `./src/*.{html}` is invalid, the `{html}` should just be `html` for (let file of config.content.files) { if (typeof file === 'string' && /{([^,]*?)}/g.test(file)) { log.warn('invalid-glob-braces', [ `The glob pattern ${dim(file)} in your Tailwind CSS configuration is invalid.`, `Update it to ${dim(file.replace(/{([^,]*?)}/g, '$1'))} to silence this warning.`, // TODO: Add https://tw.wtf/invalid-glob-braces ]) break } } return config }
Save
cmd:
run