tailwindcss 0.0.0-insiders.4f404ff → 0.0.0-insiders.4f9f603
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -5
- package/lib/cli/build/deps.js +62 -0
- package/lib/cli/build/index.js +12 -15
- package/lib/cli/build/plugin.js +110 -168
- package/lib/cli/build/utils.js +13 -13
- package/lib/cli/build/watching.js +10 -10
- package/lib/cli/help/index.js +11 -11
- package/lib/cli/index.js +60 -61
- package/lib/cli/init/index.js +16 -16
- package/lib/cli-peer-dependencies.js +36 -0
- package/lib/cli.js +1 -1
- package/lib/corePluginList.js +4 -1
- package/lib/corePlugins.js +2054 -1910
- package/lib/css/preflight.css +21 -14
- package/lib/featureFlags.js +17 -23
- package/lib/index.js +1 -1
- package/lib/lib/cacheInvalidation.js +3 -3
- package/lib/lib/collapseAdjacentRules.js +6 -6
- package/lib/lib/collapseDuplicateDeclarations.js +1 -1
- package/lib/lib/content.js +72 -32
- package/lib/lib/defaultExtractor.js +64 -34
- package/lib/lib/evaluateTailwindFunctions.js +23 -23
- package/lib/lib/expandApplyAtRules.js +37 -18
- package/lib/lib/expandTailwindAtRules.js +51 -87
- package/lib/lib/findAtConfigPath.js +5 -5
- package/lib/lib/generateRules.js +87 -67
- package/lib/lib/getModuleDependencies.js +23 -23
- package/lib/lib/load-config.js +29 -6
- package/lib/lib/normalizeTailwindDirectives.js +36 -21
- package/lib/lib/offsets.js +97 -48
- package/lib/lib/partitionApplyAtRules.js +2 -2
- package/lib/lib/regex.js +5 -5
- package/lib/lib/resolveDefaultsAtRules.js +39 -39
- package/lib/lib/setupContextUtils.js +195 -167
- package/lib/lib/setupTrackingContext.js +4 -5
- package/lib/lib/sharedState.js +10 -10
- package/lib/lib/substituteScreenAtRules.js +4 -4
- package/lib/plugin.js +8 -124
- package/lib/postcss-plugins/nesting/index.js +2 -2
- package/lib/postcss-plugins/nesting/plugin.js +11 -11
- package/lib/processTailwindFeatures.js +3 -5
- package/lib/public/colors.js +264 -264
- package/lib/util/applyImportantSelector.js +6 -4
- package/lib/util/buildMediaQuery.js +2 -2
- package/lib/util/cloneDeep.js +1 -1
- package/lib/util/cloneNodes.js +33 -13
- package/lib/util/color.js +20 -20
- package/lib/util/createUtilityPlugin.js +3 -3
- package/lib/util/dataTypes.js +199 -113
- package/lib/util/defaults.js +4 -4
- package/lib/util/escapeClassName.js +2 -2
- package/lib/util/escapeCommas.js +1 -1
- package/lib/util/flattenColorPalette.js +2 -2
- package/lib/util/formatVariantSelector.js +24 -19
- package/lib/util/getAllConfigs.js +4 -5
- package/lib/util/isKeyframeRule.js +1 -1
- package/lib/util/isPlainObject.js +2 -2
- package/lib/util/isSyntacticallyValidPropertyValue.js +10 -10
- package/lib/util/log.js +6 -23
- package/lib/util/nameClass.js +4 -4
- package/lib/util/negateValue.js +8 -8
- package/lib/util/normalizeConfig.js +63 -95
- package/lib/util/normalizeScreens.js +18 -18
- package/lib/util/parseAnimationValue.js +39 -39
- package/lib/util/parseBoxShadowValue.js +18 -18
- package/lib/util/parseDependency.js +4 -4
- package/lib/util/parseGlob.js +4 -5
- package/lib/util/parseObjectStyles.js +1 -1
- package/lib/util/pluginUtils.js +36 -21
- package/lib/util/prefixSelector.js +4 -4
- package/lib/util/pseudoElements.js +72 -69
- package/lib/util/removeAlphaVariables.js +3 -1
- package/lib/util/resolveConfig.js +11 -15
- package/lib/util/resolveConfigPath.js +8 -6
- package/lib/util/responsive.js +1 -1
- package/lib/util/splitAtTopLevelOnly.js +3 -7
- package/lib/util/toColorValue.js +1 -1
- package/lib/util/toPath.js +2 -2
- package/lib/util/transformThemeValue.js +24 -24
- package/lib/util/validateConfig.js +9 -20
- package/lib/util/validateFormalSyntax.js +5 -5
- package/lib/util/withAlphaVariable.js +7 -7
- package/lib/value-parser/index.js +5 -5
- package/lib/value-parser/parse.js +43 -43
- package/lib/value-parser/stringify.js +11 -11
- package/lib/value-parser/unit.js +5 -5
- package/lib/value-parser/walk.js +1 -1
- package/nesting/index.d.ts +4 -0
- package/package.json +51 -46
- package/peers/index.js +97871 -0
- package/resolveConfig.d.ts +22 -3
- package/scripts/generate-types.js +1 -2
- package/scripts/release-notes.js +1 -1
- package/src/cli/build/deps.js +56 -0
- package/src/cli/build/index.js +0 -4
- package/src/cli/build/plugin.js +59 -87
- package/src/cli/build/watching.js +1 -1
- package/src/cli/index.js +0 -1
- package/src/cli-peer-dependencies.js +15 -0
- package/src/corePluginList.js +1 -1
- package/src/corePlugins.js +186 -56
- package/src/css/preflight.css +21 -14
- package/src/featureFlags.js +3 -9
- package/src/lib/content.js +88 -33
- package/src/lib/defaultExtractor.js +56 -18
- package/src/lib/expandApplyAtRules.js +24 -0
- package/src/lib/expandTailwindAtRules.js +20 -57
- package/src/lib/generateRules.js +43 -22
- package/src/lib/load-config.ts +30 -0
- package/src/lib/normalizeTailwindDirectives.js +27 -0
- package/src/lib/offsets.js +62 -3
- package/src/lib/resolveDefaultsAtRules.js +16 -14
- package/src/lib/setupContextUtils.js +79 -39
- package/src/plugin.js +0 -86
- package/src/processTailwindFeatures.js +0 -3
- package/src/util/applyImportantSelector.js +5 -6
- package/src/util/cloneNodes.js +35 -14
- package/src/util/color.js +1 -1
- package/src/util/dataTypes.js +108 -6
- package/src/util/formatVariantSelector.js +7 -0
- package/src/util/isPlainObject.js +1 -1
- package/src/util/log.js +0 -24
- package/src/util/normalizeConfig.js +12 -41
- package/src/util/parseAnimationValue.js +1 -1
- package/src/util/parseGlob.js +1 -2
- package/src/util/pluginUtils.js +21 -1
- package/src/util/pseudoElements.js +4 -0
- package/src/util/removeAlphaVariables.js +2 -0
- package/src/util/resolveConfigPath.js +2 -0
- package/src/util/splitAtTopLevelOnly.js +1 -5
- package/src/util/validateConfig.js +0 -10
- package/src/util/withAlphaVariable.js +2 -2
- package/stubs/config.full.js +75 -9
- package/stubs/config.simple.js +1 -1
- package/stubs/postcss.config.cjs +1 -0
- package/stubs/postcss.config.js +1 -0
- package/types/config.d.ts +18 -8
- package/types/generated/corePluginList.d.ts +1 -1
- package/types/generated/default-theme.d.ts +34 -9
- package/types/index.d.ts +7 -3
- package/index.css +0 -5
- package/lib/lib/detectNesting.js +0 -45
- package/lib/lib/handleImportAtRules.js +0 -50
- package/src/lib/detectNesting.js +0 -47
- package/src/lib/handleImportAtRules.js +0 -34
package/README.md
CHANGED
|
@@ -12,15 +12,14 @@
|
|
|
12
12
|
A utility-first CSS framework for rapidly building custom user interfaces.
|
|
13
13
|
</p>
|
|
14
14
|
|
|
15
|
-
|
|
16
15
|
<p align="center">
|
|
17
|
-
<a href="https://github.com/tailwindlabs/tailwindcss/actions"><img src="https://img.shields.io/github/actions/workflow/status/tailwindlabs/tailwindcss/ci.yml?branch=
|
|
16
|
+
<a href="https://github.com/tailwindlabs/tailwindcss/actions"><img src="https://img.shields.io/github/actions/workflow/status/tailwindlabs/tailwindcss/ci.yml?branch=main" alt="Build Status"></a>
|
|
18
17
|
<a href="https://www.npmjs.com/package/tailwindcss"><img src="https://img.shields.io/npm/dt/tailwindcss.svg" alt="Total Downloads"></a>
|
|
19
18
|
<a href="https://github.com/tailwindcss/tailwindcss/releases"><img src="https://img.shields.io/npm/v/tailwindcss.svg" alt="Latest Release"></a>
|
|
20
|
-
<a href="https://github.com/tailwindcss/tailwindcss/blob/
|
|
19
|
+
<a href="https://github.com/tailwindcss/tailwindcss/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/tailwindcss.svg" alt="License"></a>
|
|
21
20
|
</p>
|
|
22
21
|
|
|
23
|
-
|
|
22
|
+
---
|
|
24
23
|
|
|
25
24
|
## Documentation
|
|
26
25
|
|
|
@@ -38,4 +37,4 @@ For casual chit-chat with others using the framework:
|
|
|
38
37
|
|
|
39
38
|
## Contributing
|
|
40
39
|
|
|
41
|
-
If you're interested in contributing to Tailwind CSS, please read our [contributing docs](https://github.com/tailwindcss/tailwindcss/blob/
|
|
40
|
+
If you're interested in contributing to Tailwind CSS, please read our [contributing docs](https://github.com/tailwindcss/tailwindcss/blob/main/.github/CONTRIBUTING.md) **before submitting a pull request**.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
function _export(target, all) {
|
|
7
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
get: all[name]
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
_export(exports, {
|
|
13
|
+
loadPostcss: function() {
|
|
14
|
+
return loadPostcss;
|
|
15
|
+
},
|
|
16
|
+
loadPostcssImport: function() {
|
|
17
|
+
return loadPostcssImport;
|
|
18
|
+
},
|
|
19
|
+
loadCssNano: function() {
|
|
20
|
+
return loadCssNano;
|
|
21
|
+
},
|
|
22
|
+
loadAutoprefixer: function() {
|
|
23
|
+
return loadAutoprefixer;
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
const _index = require("../../../peers/index.js");
|
|
27
|
+
function loadPostcss() {
|
|
28
|
+
// Try to load a local `postcss` version first
|
|
29
|
+
try {
|
|
30
|
+
return require("postcss");
|
|
31
|
+
} catch {}
|
|
32
|
+
return (0, _index.lazyPostcss)();
|
|
33
|
+
}
|
|
34
|
+
function loadPostcssImport() {
|
|
35
|
+
// Try to load a local `postcss-import` version first
|
|
36
|
+
try {
|
|
37
|
+
return require("postcss-import");
|
|
38
|
+
} catch {}
|
|
39
|
+
return (0, _index.lazyPostcssImport)();
|
|
40
|
+
}
|
|
41
|
+
function loadCssNano() {
|
|
42
|
+
let options = {
|
|
43
|
+
preset: [
|
|
44
|
+
"default",
|
|
45
|
+
{
|
|
46
|
+
cssDeclarationSorter: false
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
|
+
};
|
|
50
|
+
// Try to load a local `cssnano` version first
|
|
51
|
+
try {
|
|
52
|
+
return require("cssnano");
|
|
53
|
+
} catch {}
|
|
54
|
+
return (0, _index.lazyCssnano)()(options);
|
|
55
|
+
}
|
|
56
|
+
function loadAutoprefixer() {
|
|
57
|
+
// Try to load a local `autoprefixer` version first
|
|
58
|
+
try {
|
|
59
|
+
return require("autoprefixer");
|
|
60
|
+
} catch {}
|
|
61
|
+
return (0, _index.lazyAutoprefixer)();
|
|
62
|
+
}
|
package/lib/cli/build/index.js
CHANGED
|
@@ -19,32 +19,29 @@ function _interop_require_default(obj) {
|
|
|
19
19
|
};
|
|
20
20
|
}
|
|
21
21
|
async function build(args) {
|
|
22
|
-
let input = args[
|
|
23
|
-
let shouldWatch = args[
|
|
22
|
+
let input = args["--input"];
|
|
23
|
+
let shouldWatch = args["--watch"];
|
|
24
24
|
// TODO: Deprecate this in future versions
|
|
25
|
-
if (!input && args[
|
|
26
|
-
console.error(
|
|
27
|
-
input = args[
|
|
25
|
+
if (!input && args["_"][1]) {
|
|
26
|
+
console.error("[deprecation] Running tailwindcss without -i, please provide an input file.");
|
|
27
|
+
input = args["--input"] = args["_"][1];
|
|
28
28
|
}
|
|
29
|
-
if (input && input !==
|
|
30
|
-
console.error(`Specified input file ${args[
|
|
29
|
+
if (input && input !== "-" && !_fs.default.existsSync(input = _path.default.resolve(input))) {
|
|
30
|
+
console.error(`Specified input file ${args["--input"]} does not exist.`);
|
|
31
31
|
process.exit(9);
|
|
32
32
|
}
|
|
33
|
-
if (args[
|
|
34
|
-
console.error(`Specified config file ${args[
|
|
33
|
+
if (args["--config"] && !_fs.default.existsSync(args["--config"] = _path.default.resolve(args["--config"]))) {
|
|
34
|
+
console.error(`Specified config file ${args["--config"]} does not exist.`);
|
|
35
35
|
process.exit(9);
|
|
36
36
|
}
|
|
37
|
-
if (args['--no-autoprefixer']) {
|
|
38
|
-
console.error('[deprecation] The --no-autoprefixer flag is deprecated and has no effect.');
|
|
39
|
-
}
|
|
40
37
|
// TODO: Reference the @config path here if exists
|
|
41
|
-
let configPath = args[
|
|
38
|
+
let configPath = args["--config"] ? args["--config"] : (0, _resolveConfigPath.resolveDefaultConfigPath)();
|
|
42
39
|
let processor = await (0, _plugin.createProcessor)(args, configPath);
|
|
43
40
|
if (shouldWatch) {
|
|
44
41
|
// Abort the watcher if stdin is closed to avoid zombie processes
|
|
45
42
|
// You can disable this behavior with --watch=always
|
|
46
|
-
if (args[
|
|
47
|
-
process.stdin.on(
|
|
43
|
+
if (args["--watch"] !== "always") {
|
|
44
|
+
process.stdin.on("end", ()=>process.exit(0));
|
|
48
45
|
}
|
|
49
46
|
process.stdin.resume();
|
|
50
47
|
await processor.watch();
|
package/lib/cli/build/plugin.js
CHANGED
|
@@ -9,19 +9,16 @@ Object.defineProperty(exports, "createProcessor", {
|
|
|
9
9
|
return createProcessor;
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
|
-
const _packagejson = /*#__PURE__*/ _interop_require_default(require("../../../package.json"));
|
|
13
12
|
const _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
|
14
13
|
const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
|
15
|
-
const _postcss = /*#__PURE__*/ _interop_require_default(require("postcss"));
|
|
16
14
|
const _postcssloadconfig = /*#__PURE__*/ _interop_require_default(require("postcss-load-config"));
|
|
17
|
-
const _browserslist = /*#__PURE__*/ _interop_require_default(require("browserslist"));
|
|
18
|
-
const _lightningcss = /*#__PURE__*/ _interop_require_wildcard(require("lightningcss"));
|
|
19
15
|
const _lilconfig = require("lilconfig");
|
|
20
16
|
const _plugins = /*#__PURE__*/ _interop_require_default(require("postcss-load-config/src/plugins" // Little bit scary, looking at private/internal API
|
|
21
17
|
));
|
|
22
18
|
const _options = /*#__PURE__*/ _interop_require_default(require("postcss-load-config/src/options" // Little bit scary, looking at private/internal API
|
|
23
19
|
));
|
|
24
20
|
const _processTailwindFeatures = /*#__PURE__*/ _interop_require_default(require("../../processTailwindFeatures"));
|
|
21
|
+
const _deps = require("./deps");
|
|
25
22
|
const _utils = require("./utils");
|
|
26
23
|
const _sharedState = require("../../lib/sharedState");
|
|
27
24
|
const _resolveConfig = /*#__PURE__*/ _interop_require_default(require("../../../resolveConfig.js"));
|
|
@@ -32,91 +29,11 @@ const _findAtConfigPath = require("../../lib/findAtConfigPath.js");
|
|
|
32
29
|
const _log = /*#__PURE__*/ _interop_require_default(require("../../util/log"));
|
|
33
30
|
const _loadconfig = require("../../lib/load-config");
|
|
34
31
|
const _getModuleDependencies = /*#__PURE__*/ _interop_require_default(require("../../lib/getModuleDependencies"));
|
|
35
|
-
const _validateConfig = require("../../util/validateConfig");
|
|
36
|
-
const _handleImportAtRules = require("../../lib/handleImportAtRules");
|
|
37
|
-
const _featureFlags = require("../../featureFlags");
|
|
38
32
|
function _interop_require_default(obj) {
|
|
39
33
|
return obj && obj.__esModule ? obj : {
|
|
40
34
|
default: obj
|
|
41
35
|
};
|
|
42
36
|
}
|
|
43
|
-
function _getRequireWildcardCache(nodeInterop) {
|
|
44
|
-
if (typeof WeakMap !== "function") return null;
|
|
45
|
-
var cacheBabelInterop = new WeakMap();
|
|
46
|
-
var cacheNodeInterop = new WeakMap();
|
|
47
|
-
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
48
|
-
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
49
|
-
})(nodeInterop);
|
|
50
|
-
}
|
|
51
|
-
function _interop_require_wildcard(obj, nodeInterop) {
|
|
52
|
-
if (!nodeInterop && obj && obj.__esModule) {
|
|
53
|
-
return obj;
|
|
54
|
-
}
|
|
55
|
-
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
56
|
-
return {
|
|
57
|
-
default: obj
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
var cache = _getRequireWildcardCache(nodeInterop);
|
|
61
|
-
if (cache && cache.has(obj)) {
|
|
62
|
-
return cache.get(obj);
|
|
63
|
-
}
|
|
64
|
-
var newObj = {};
|
|
65
|
-
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
66
|
-
for(var key in obj){
|
|
67
|
-
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
68
|
-
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
69
|
-
if (desc && (desc.get || desc.set)) {
|
|
70
|
-
Object.defineProperty(newObj, key, desc);
|
|
71
|
-
} else {
|
|
72
|
-
newObj[key] = obj[key];
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
newObj.default = obj;
|
|
77
|
-
if (cache) {
|
|
78
|
-
cache.set(obj, newObj);
|
|
79
|
-
}
|
|
80
|
-
return newObj;
|
|
81
|
-
}
|
|
82
|
-
function license() {
|
|
83
|
-
return `/* ! tailwindcss v${_packagejson.default.version} | MIT License | https://tailwindcss.com */\n`;
|
|
84
|
-
}
|
|
85
|
-
async function lightningcss(result, { map = true, minify = true } = {}) {
|
|
86
|
-
try {
|
|
87
|
-
var _browserslist_findConfig;
|
|
88
|
-
var _result_opts_from;
|
|
89
|
-
let resolvedBrowsersListConfig = (_browserslist_findConfig = _browserslist.default.findConfig((_result_opts_from = result.opts.from) !== null && _result_opts_from !== void 0 ? _result_opts_from : process.cwd())) === null || _browserslist_findConfig === void 0 ? void 0 : _browserslist_findConfig.defaults;
|
|
90
|
-
let defaultBrowsersListConfig = _packagejson.default.browserslist;
|
|
91
|
-
let browsersListConfig = resolvedBrowsersListConfig !== null && resolvedBrowsersListConfig !== void 0 ? resolvedBrowsersListConfig : defaultBrowsersListConfig;
|
|
92
|
-
let transformed = _lightningcss.default.transform({
|
|
93
|
-
filename: result.opts.from || 'input.css',
|
|
94
|
-
code: Buffer.from(result.css, 'utf-8'),
|
|
95
|
-
minify,
|
|
96
|
-
sourceMap: result.map === undefined ? map : !!result.map,
|
|
97
|
-
inputSourceMap: result.map ? result.map.toString() : undefined,
|
|
98
|
-
targets: _lightningcss.default.browserslistToTargets((0, _browserslist.default)(browsersListConfig)),
|
|
99
|
-
drafts: {
|
|
100
|
-
nesting: true
|
|
101
|
-
},
|
|
102
|
-
include: _lightningcss.Features.Nesting,
|
|
103
|
-
exclude: _lightningcss.Features.LogicalProperties
|
|
104
|
-
});
|
|
105
|
-
return Object.assign(result, {
|
|
106
|
-
css: transformed.code.toString('utf8'),
|
|
107
|
-
map: result.map ? Object.assign(result.map, {
|
|
108
|
-
toString () {
|
|
109
|
-
var _transformed_map;
|
|
110
|
-
return (_transformed_map = transformed.map) === null || _transformed_map === void 0 ? void 0 : _transformed_map.toString();
|
|
111
|
-
}
|
|
112
|
-
}) : result.map
|
|
113
|
-
});
|
|
114
|
-
} catch (err) {
|
|
115
|
-
console.error('Unable to use Lightning CSS. Using raw version instead.');
|
|
116
|
-
console.error(err);
|
|
117
|
-
return result;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
37
|
/**
|
|
121
38
|
*
|
|
122
39
|
* @param {string} [customPostCssPath ]
|
|
@@ -126,8 +43,8 @@ async function lightningcss(result, { map = true, minify = true } = {}) {
|
|
|
126
43
|
let file = _path.default.resolve(customPostCssPath);
|
|
127
44
|
// Implementation, see: https://unpkg.com/browse/postcss-load-config@3.1.0/src/index.js
|
|
128
45
|
// @ts-ignore
|
|
129
|
-
let { config =
|
|
130
|
-
if (typeof config ===
|
|
46
|
+
let { config ={} } = await (0, _lilconfig.lilconfig)("postcss").load(file);
|
|
47
|
+
if (typeof config === "function") {
|
|
131
48
|
config = config();
|
|
132
49
|
} else {
|
|
133
50
|
config = Object.assign({}, config);
|
|
@@ -143,10 +60,10 @@ async function lightningcss(result, { map = true, minify = true } = {}) {
|
|
|
143
60
|
})() : await (0, _postcssloadconfig.default)();
|
|
144
61
|
let configPlugins = config.plugins;
|
|
145
62
|
let configPluginTailwindIdx = configPlugins.findIndex((plugin)=>{
|
|
146
|
-
if (typeof plugin ===
|
|
63
|
+
if (typeof plugin === "function" && plugin.name === "tailwindcss") {
|
|
147
64
|
return true;
|
|
148
65
|
}
|
|
149
|
-
if (typeof plugin ===
|
|
66
|
+
if (typeof plugin === "object" && plugin !== null && plugin.postcssPlugin === "tailwindcss") {
|
|
150
67
|
return true;
|
|
151
68
|
}
|
|
152
69
|
return false;
|
|
@@ -159,11 +76,43 @@ async function lightningcss(result, { map = true, minify = true } = {}) {
|
|
|
159
76
|
config.options
|
|
160
77
|
];
|
|
161
78
|
}
|
|
79
|
+
function loadBuiltinPostcssPlugins() {
|
|
80
|
+
let postcss = (0, _deps.loadPostcss)();
|
|
81
|
+
let IMPORT_COMMENT = "__TAILWIND_RESTORE_IMPORT__: ";
|
|
82
|
+
return [
|
|
83
|
+
[
|
|
84
|
+
(root)=>{
|
|
85
|
+
root.walkAtRules("import", (rule)=>{
|
|
86
|
+
if (rule.params.slice(1).startsWith("tailwindcss/")) {
|
|
87
|
+
rule.after(postcss.comment({
|
|
88
|
+
text: IMPORT_COMMENT + rule.params
|
|
89
|
+
}));
|
|
90
|
+
rule.remove();
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
},
|
|
94
|
+
(0, _deps.loadPostcssImport)(),
|
|
95
|
+
(root)=>{
|
|
96
|
+
root.walkComments((rule)=>{
|
|
97
|
+
if (rule.text.startsWith(IMPORT_COMMENT)) {
|
|
98
|
+
rule.after(postcss.atRule({
|
|
99
|
+
name: "import",
|
|
100
|
+
params: rule.text.replace(IMPORT_COMMENT, "")
|
|
101
|
+
}));
|
|
102
|
+
rule.remove();
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
],
|
|
107
|
+
[],
|
|
108
|
+
{}
|
|
109
|
+
];
|
|
110
|
+
}
|
|
162
111
|
let state = {
|
|
163
112
|
/** @type {any} */ context: null,
|
|
164
113
|
/** @type {ReturnType<typeof createWatcher> | null} */ watcher: null,
|
|
165
114
|
/** @type {{content: string, extension: string}[]} */ changedContent: [],
|
|
166
|
-
/** @type {
|
|
115
|
+
/** @type {ReturnType<typeof load> | null} */ configBag: null,
|
|
167
116
|
contextDependencies: new Set(),
|
|
168
117
|
/** @type {import('../../lib/content.js').ContentPath[]} */ contentPaths: [],
|
|
169
118
|
refreshContentPaths () {
|
|
@@ -180,7 +129,6 @@ let state = {
|
|
|
180
129
|
};
|
|
181
130
|
},
|
|
182
131
|
loadConfig (configPath, content) {
|
|
183
|
-
var _content;
|
|
184
132
|
if (this.watcher && configPath) {
|
|
185
133
|
this.refreshConfigDependencies();
|
|
186
134
|
}
|
|
@@ -195,42 +143,42 @@ let state = {
|
|
|
195
143
|
}
|
|
196
144
|
}
|
|
197
145
|
};
|
|
198
|
-
|
|
146
|
+
// @ts-ignore
|
|
147
|
+
this.configBag.config = (0, _resolveConfig.default)(this.configBag.config, {
|
|
148
|
+
content: {
|
|
149
|
+
files: []
|
|
150
|
+
}
|
|
151
|
+
});
|
|
199
152
|
// Override content files if `--content` has been passed explicitly
|
|
200
|
-
if ((
|
|
153
|
+
if ((content === null || content === void 0 ? void 0 : content.length) > 0) {
|
|
201
154
|
this.configBag.config.content.files = content;
|
|
202
155
|
}
|
|
203
156
|
return this.configBag.config;
|
|
204
157
|
},
|
|
205
158
|
refreshConfigDependencies () {
|
|
206
159
|
var _this_configBag;
|
|
207
|
-
_sharedState.env.DEBUG && console.time(
|
|
160
|
+
_sharedState.env.DEBUG && console.time("Module dependencies");
|
|
208
161
|
(_this_configBag = this.configBag) === null || _this_configBag === void 0 ? void 0 : _this_configBag.dispose();
|
|
209
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
162
|
+
_sharedState.env.DEBUG && console.timeEnd("Module dependencies");
|
|
210
163
|
},
|
|
211
164
|
readContentPaths () {
|
|
212
165
|
let content = [];
|
|
213
166
|
// Resolve globs from the content config
|
|
214
167
|
// TODO: When we make the postcss plugin async-capable this can become async
|
|
215
168
|
let files = _fastglob.default.sync(this.contentPatterns.all);
|
|
169
|
+
let checkBroadPattern = (0, _content.createBroadPatternCheck)(this.contentPatterns.all);
|
|
216
170
|
for (let file of files){
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
} else {
|
|
223
|
-
content.push({
|
|
224
|
-
content: _fs.default.readFileSync(_path.default.resolve(file), 'utf8'),
|
|
225
|
-
extension: _path.default.extname(file).slice(1)
|
|
226
|
-
});
|
|
227
|
-
}
|
|
171
|
+
checkBroadPattern(file);
|
|
172
|
+
content.push({
|
|
173
|
+
content: _fs.default.readFileSync(_path.default.resolve(file), "utf8"),
|
|
174
|
+
extension: _path.default.extname(file).slice(1)
|
|
175
|
+
});
|
|
228
176
|
}
|
|
229
177
|
// Resolve raw content in the tailwind config
|
|
230
178
|
let rawContent = this.config.content.files.filter((file)=>{
|
|
231
|
-
return file !== null && typeof file ===
|
|
179
|
+
return file !== null && typeof file === "object";
|
|
232
180
|
});
|
|
233
|
-
for (let { raw: htmlContent, extension =
|
|
181
|
+
for (let { raw: htmlContent , extension ="html" } of rawContent){
|
|
234
182
|
content.push({
|
|
235
183
|
content: htmlContent,
|
|
236
184
|
extension
|
|
@@ -238,31 +186,31 @@ let state = {
|
|
|
238
186
|
}
|
|
239
187
|
return content;
|
|
240
188
|
},
|
|
241
|
-
getContext ({ createContext, cliConfigPath, root, result, content
|
|
189
|
+
getContext ({ createContext , cliConfigPath , root , result , content }) {
|
|
190
|
+
_sharedState.env.DEBUG && console.time("Searching for config");
|
|
191
|
+
var _findAtConfigPath1;
|
|
192
|
+
let configPath = (_findAtConfigPath1 = (0, _findAtConfigPath.findAtConfigPath)(root, result)) !== null && _findAtConfigPath1 !== void 0 ? _findAtConfigPath1 : cliConfigPath;
|
|
193
|
+
_sharedState.env.DEBUG && console.timeEnd("Searching for config");
|
|
242
194
|
if (this.context) {
|
|
243
195
|
this.context.changedContent = this.changedContent.splice(0);
|
|
244
196
|
return this.context;
|
|
245
197
|
}
|
|
246
|
-
_sharedState.env.DEBUG && console.time(
|
|
247
|
-
var _findAtConfigPath1;
|
|
248
|
-
let configPath = (_findAtConfigPath1 = (0, _findAtConfigPath.findAtConfigPath)(root, result)) !== null && _findAtConfigPath1 !== void 0 ? _findAtConfigPath1 : cliConfigPath;
|
|
249
|
-
_sharedState.env.DEBUG && console.timeEnd('Searching for config');
|
|
250
|
-
_sharedState.env.DEBUG && console.time('Loading config');
|
|
198
|
+
_sharedState.env.DEBUG && console.time("Loading config");
|
|
251
199
|
let config = this.loadConfig(configPath, content);
|
|
252
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
253
|
-
_sharedState.env.DEBUG && console.time(
|
|
200
|
+
_sharedState.env.DEBUG && console.timeEnd("Loading config");
|
|
201
|
+
_sharedState.env.DEBUG && console.time("Creating context");
|
|
254
202
|
this.context = createContext(config, []);
|
|
255
203
|
Object.assign(this.context, {
|
|
256
204
|
userConfigPath: configPath
|
|
257
205
|
});
|
|
258
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
259
|
-
_sharedState.env.DEBUG && console.time(
|
|
206
|
+
_sharedState.env.DEBUG && console.timeEnd("Creating context");
|
|
207
|
+
_sharedState.env.DEBUG && console.time("Resolving content paths");
|
|
260
208
|
this.refreshContentPaths();
|
|
261
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
209
|
+
_sharedState.env.DEBUG && console.timeEnd("Resolving content paths");
|
|
262
210
|
if (this.watcher) {
|
|
263
|
-
_sharedState.env.DEBUG && console.time(
|
|
211
|
+
_sharedState.env.DEBUG && console.time("Watch new files");
|
|
264
212
|
this.watcher.refreshWatchedFiles();
|
|
265
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
213
|
+
_sharedState.env.DEBUG && console.timeEnd("Watch new files");
|
|
266
214
|
}
|
|
267
215
|
for (let file of this.readContentPaths()){
|
|
268
216
|
this.context.changedContent.push(file);
|
|
@@ -272,35 +220,31 @@ let state = {
|
|
|
272
220
|
};
|
|
273
221
|
async function createProcessor(args, cliConfigPath) {
|
|
274
222
|
var _args_content;
|
|
275
|
-
let
|
|
276
|
-
let
|
|
277
|
-
let
|
|
278
|
-
let
|
|
279
|
-
let
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
if (args['--purge']) {
|
|
286
|
-
_log.default.warn('purge-flag-deprecated', [
|
|
287
|
-
'The `--purge` flag has been deprecated.',
|
|
288
|
-
'Please use `--content` instead.'
|
|
223
|
+
let postcss = (0, _deps.loadPostcss)();
|
|
224
|
+
let input = args["--input"];
|
|
225
|
+
let output = args["--output"];
|
|
226
|
+
let includePostCss = args["--postcss"];
|
|
227
|
+
let customPostCssPath = typeof args["--postcss"] === "string" ? args["--postcss"] : undefined;
|
|
228
|
+
let [beforePlugins, afterPlugins, postcssOptions] = includePostCss ? await loadPostCssPlugins(customPostCssPath) : loadBuiltinPostcssPlugins();
|
|
229
|
+
if (args["--purge"]) {
|
|
230
|
+
_log.default.warn("purge-flag-deprecated", [
|
|
231
|
+
"The `--purge` flag has been deprecated.",
|
|
232
|
+
"Please use `--content` instead."
|
|
289
233
|
]);
|
|
290
|
-
if (!args[
|
|
291
|
-
args[
|
|
234
|
+
if (!args["--content"]) {
|
|
235
|
+
args["--content"] = args["--purge"];
|
|
292
236
|
}
|
|
293
237
|
}
|
|
294
238
|
var _args_content_split;
|
|
295
|
-
let content = (_args_content_split = (_args_content = args[
|
|
239
|
+
let content = (_args_content_split = (_args_content = args["--content"]) === null || _args_content === void 0 ? void 0 : _args_content.split(/(?<!{[^}]+),/)) !== null && _args_content_split !== void 0 ? _args_content_split : [];
|
|
296
240
|
let tailwindPlugin = ()=>{
|
|
297
241
|
return {
|
|
298
|
-
postcssPlugin:
|
|
299
|
-
async Once (root, { result
|
|
300
|
-
_sharedState.env.DEBUG && console.time(
|
|
301
|
-
await (0, _processTailwindFeatures.default)(({ createContext
|
|
242
|
+
postcssPlugin: "tailwindcss",
|
|
243
|
+
async Once (root, { result }) {
|
|
244
|
+
_sharedState.env.DEBUG && console.time("Compiling CSS");
|
|
245
|
+
await (0, _processTailwindFeatures.default)(({ createContext })=>{
|
|
302
246
|
console.error();
|
|
303
|
-
console.error(
|
|
247
|
+
console.error("Rebuilding...");
|
|
304
248
|
return ()=>{
|
|
305
249
|
return state.getContext({
|
|
306
250
|
createContext,
|
|
@@ -311,7 +255,7 @@ async function createProcessor(args, cliConfigPath) {
|
|
|
311
255
|
});
|
|
312
256
|
};
|
|
313
257
|
})(root, result);
|
|
314
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
258
|
+
_sharedState.env.DEBUG && console.timeEnd("Compiling CSS");
|
|
315
259
|
}
|
|
316
260
|
};
|
|
317
261
|
};
|
|
@@ -319,62 +263,60 @@ async function createProcessor(args, cliConfigPath) {
|
|
|
319
263
|
let plugins = [
|
|
320
264
|
...beforePlugins,
|
|
321
265
|
tailwindPlugin,
|
|
322
|
-
!args[
|
|
323
|
-
...afterPlugins
|
|
266
|
+
!args["--minify"] && _utils.formatNodes,
|
|
267
|
+
...afterPlugins,
|
|
268
|
+
!args["--no-autoprefixer"] && (0, _deps.loadAutoprefixer)(),
|
|
269
|
+
args["--minify"] && (0, _deps.loadCssNano)()
|
|
324
270
|
].filter(Boolean);
|
|
325
271
|
/** @type {import('postcss').Processor} */ // @ts-ignore
|
|
326
|
-
let processor = (
|
|
272
|
+
let processor = postcss(plugins);
|
|
327
273
|
async function readInput() {
|
|
328
274
|
// Piping in data, let's drain the stdin
|
|
329
|
-
if (input ===
|
|
275
|
+
if (input === "-") {
|
|
330
276
|
return (0, _utils.drainStdin)();
|
|
331
277
|
}
|
|
332
278
|
// Input file has been provided
|
|
333
279
|
if (input) {
|
|
334
|
-
return _fs.default.promises.readFile(_path.default.resolve(input),
|
|
280
|
+
return _fs.default.promises.readFile(_path.default.resolve(input), "utf8");
|
|
335
281
|
}
|
|
336
|
-
// No input file provided, fallback to default
|
|
337
|
-
return
|
|
282
|
+
// No input file provided, fallback to default at-rules
|
|
283
|
+
return "@tailwind base; @tailwind components; @tailwind utilities";
|
|
338
284
|
}
|
|
339
285
|
async function build() {
|
|
340
286
|
let start = process.hrtime.bigint();
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
};
|
|
346
|
-
return readInput().then((css)=>processor.process(css, options)).then((result)=>lightningcss(result, {
|
|
347
|
-
...options,
|
|
348
|
-
minify: !!args['--minify']
|
|
287
|
+
return readInput().then((css)=>processor.process(css, {
|
|
288
|
+
...postcssOptions,
|
|
289
|
+
from: input,
|
|
290
|
+
to: output
|
|
349
291
|
})).then((result)=>{
|
|
350
292
|
if (!state.watcher) {
|
|
351
293
|
return result;
|
|
352
294
|
}
|
|
353
|
-
_sharedState.env.DEBUG && console.time(
|
|
295
|
+
_sharedState.env.DEBUG && console.time("Recording PostCSS dependencies");
|
|
354
296
|
for (let message of result.messages){
|
|
355
|
-
if (message.type ===
|
|
297
|
+
if (message.type === "dependency") {
|
|
356
298
|
state.contextDependencies.add(message.file);
|
|
357
299
|
}
|
|
358
300
|
}
|
|
359
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
301
|
+
_sharedState.env.DEBUG && console.timeEnd("Recording PostCSS dependencies");
|
|
360
302
|
// TODO: This needs to be in a different spot
|
|
361
|
-
_sharedState.env.DEBUG && console.time(
|
|
303
|
+
_sharedState.env.DEBUG && console.time("Watch new files");
|
|
362
304
|
state.watcher.refreshWatchedFiles();
|
|
363
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
305
|
+
_sharedState.env.DEBUG && console.timeEnd("Watch new files");
|
|
364
306
|
return result;
|
|
365
307
|
}).then((result)=>{
|
|
366
308
|
if (!output) {
|
|
367
|
-
process.stdout.write(
|
|
309
|
+
process.stdout.write(result.css);
|
|
368
310
|
return;
|
|
369
311
|
}
|
|
370
312
|
return Promise.all([
|
|
371
|
-
(0, _utils.outputFile)(result.opts.to,
|
|
372
|
-
result.map && (0, _utils.outputFile)(result.opts.to +
|
|
313
|
+
(0, _utils.outputFile)(result.opts.to, result.css),
|
|
314
|
+
result.map && (0, _utils.outputFile)(result.opts.to + ".map", result.map.toString())
|
|
373
315
|
]);
|
|
374
316
|
}).then(()=>{
|
|
375
317
|
let end = process.hrtime.bigint();
|
|
376
318
|
console.error();
|
|
377
|
-
console.error(
|
|
319
|
+
console.error("Done in", (end - start) / BigInt(1e6) + "ms.");
|
|
378
320
|
}).then(()=>{}, (err)=>{
|
|
379
321
|
// TODO: If an initial build fails we can't easily pick up any PostCSS dependencies
|
|
380
322
|
// that were collected before the error occurred
|
|
@@ -400,7 +342,7 @@ async function createProcessor(args, cliConfigPath) {
|
|
|
400
342
|
extension: change.extension
|
|
401
343
|
})));
|
|
402
344
|
}
|
|
403
|
-
if (input !== undefined && input !==
|
|
345
|
+
if (input !== undefined && input !== "-") {
|
|
404
346
|
state.contextDependencies.add(_path.default.resolve(input));
|
|
405
347
|
}
|
|
406
348
|
return {
|
package/lib/cli/build/utils.js
CHANGED
|
@@ -35,26 +35,26 @@ function _interop_require_default(obj) {
|
|
|
35
35
|
}
|
|
36
36
|
function indentRecursive(node, indent = 0) {
|
|
37
37
|
node.each && node.each((child, i)=>{
|
|
38
|
-
if (!child.raws.before || !child.raws.before.trim() || child.raws.before.includes(
|
|
39
|
-
child.raws.before = `\n${node.type !==
|
|
38
|
+
if (!child.raws.before || !child.raws.before.trim() || child.raws.before.includes("\n")) {
|
|
39
|
+
child.raws.before = `\n${node.type !== "rule" && i > 0 ? "\n" : ""}${" ".repeat(indent)}`;
|
|
40
40
|
}
|
|
41
|
-
child.raws.after = `\n${
|
|
41
|
+
child.raws.after = `\n${" ".repeat(indent)}`;
|
|
42
42
|
indentRecursive(child, indent + 1);
|
|
43
43
|
});
|
|
44
44
|
}
|
|
45
45
|
function formatNodes(root) {
|
|
46
46
|
indentRecursive(root);
|
|
47
47
|
if (root.first) {
|
|
48
|
-
root.first.raws.before =
|
|
48
|
+
root.first.raws.before = "";
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
async function readFileWithRetries(path, tries = 5) {
|
|
52
52
|
for(let n = 0; n <= tries; n++){
|
|
53
53
|
try {
|
|
54
|
-
return await _fs.default.promises.readFile(path,
|
|
54
|
+
return await _fs.default.promises.readFile(path, "utf8");
|
|
55
55
|
} catch (err) {
|
|
56
56
|
if (n !== tries) {
|
|
57
|
-
if (err.code ===
|
|
57
|
+
if (err.code === "ENOENT" || err.code === "EBUSY") {
|
|
58
58
|
await new Promise((resolve)=>setTimeout(resolve, 10));
|
|
59
59
|
continue;
|
|
60
60
|
}
|
|
@@ -65,24 +65,24 @@ async function readFileWithRetries(path, tries = 5) {
|
|
|
65
65
|
}
|
|
66
66
|
function drainStdin() {
|
|
67
67
|
return new Promise((resolve, reject)=>{
|
|
68
|
-
let result =
|
|
69
|
-
process.stdin.on(
|
|
68
|
+
let result = "";
|
|
69
|
+
process.stdin.on("data", (chunk)=>{
|
|
70
70
|
result += chunk;
|
|
71
71
|
});
|
|
72
|
-
process.stdin.on(
|
|
73
|
-
process.stdin.on(
|
|
72
|
+
process.stdin.on("end", ()=>resolve(result));
|
|
73
|
+
process.stdin.on("error", (err)=>reject(err));
|
|
74
74
|
});
|
|
75
75
|
}
|
|
76
76
|
async function outputFile(file, newContents) {
|
|
77
77
|
try {
|
|
78
|
-
let currentContents = await _fs.default.promises.readFile(file,
|
|
78
|
+
let currentContents = await _fs.default.promises.readFile(file, "utf8");
|
|
79
79
|
if (currentContents === newContents) {
|
|
80
80
|
return; // Skip writing the file
|
|
81
81
|
}
|
|
82
|
-
} catch
|
|
82
|
+
} catch {}
|
|
83
83
|
// Write the file
|
|
84
84
|
await _fs.default.promises.mkdir(_path.default.dirname(file), {
|
|
85
85
|
recursive: true
|
|
86
86
|
});
|
|
87
|
-
await _fs.default.promises.writeFile(file, newContents,
|
|
87
|
+
await _fs.default.promises.writeFile(file, newContents, "utf8");
|
|
88
88
|
}
|