tailwindcss 0.0.0-insiders.cdbcefc → 0.0.0-insiders.ce653c5
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 +1 -1
- package/index.css +5 -0
- package/lib/cli/build/index.js +15 -12
- package/lib/cli/build/plugin.js +155 -104
- package/lib/cli/build/utils.js +20 -20
- package/lib/cli/build/watching.js +10 -10
- package/lib/cli/help/index.js +11 -11
- package/lib/cli/index.js +59 -58
- package/lib/cli/init/index.js +16 -16
- package/lib/cli.js +1 -5
- package/lib/corePluginList.js +4 -1
- package/lib/corePlugins.js +2000 -1895
- package/lib/css/preflight.css +27 -10
- package/lib/featureFlags.js +23 -22
- package/lib/index.js +1 -1
- package/lib/lib/cacheInvalidation.js +6 -4
- package/lib/lib/collapseAdjacentRules.js +9 -7
- package/lib/lib/collapseDuplicateDeclarations.js +1 -1
- package/lib/lib/content.js +68 -9
- package/lib/lib/defaultExtractor.js +44 -34
- package/lib/lib/detectNesting.js +10 -10
- package/lib/lib/evaluateTailwindFunctions.js +27 -25
- package/lib/lib/expandApplyAtRules.js +24 -18
- package/lib/lib/expandTailwindAtRules.js +89 -47
- package/lib/lib/findAtConfigPath.js +5 -5
- package/lib/lib/generateRules.js +103 -81
- package/lib/lib/getModuleDependencies.js +23 -23
- package/lib/lib/handleImportAtRules.js +50 -0
- package/lib/lib/load-config.js +17 -6
- package/lib/lib/normalizeTailwindDirectives.js +21 -36
- package/lib/lib/offsets.js +46 -46
- package/lib/lib/partitionApplyAtRules.js +2 -2
- package/lib/lib/regex.js +17 -17
- package/lib/lib/resolveDefaultsAtRules.js +28 -28
- package/lib/lib/setupContextUtils.js +198 -168
- package/lib/lib/setupTrackingContext.js +5 -4
- package/lib/lib/sharedState.js +24 -32
- package/lib/lib/substituteScreenAtRules.js +4 -4
- package/lib/plugin.js +108 -40
- package/lib/postcss-plugins/nesting/index.js +2 -2
- package/lib/postcss-plugins/nesting/plugin.js +10 -10
- package/lib/processTailwindFeatures.js +5 -5
- package/lib/public/colors.js +264 -264
- package/lib/util/applyImportantSelector.js +2 -2
- 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 +23 -23
- package/lib/util/createUtilityPlugin.js +3 -3
- package/lib/util/dataTypes.js +253 -132
- package/lib/util/escapeCommas.js +1 -1
- package/lib/util/flattenColorPalette.js +2 -2
- package/lib/util/formatVariantSelector.js +29 -22
- package/lib/util/getAllConfigs.js +3 -3
- 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 +26 -9
- package/lib/util/nameClass.js +4 -4
- package/lib/util/negateValue.js +8 -8
- package/lib/util/normalizeConfig.js +85 -57
- package/lib/util/normalizeScreens.js +22 -22
- package/lib/util/parseAnimationValue.js +38 -38
- package/lib/util/parseBoxShadowValue.js +21 -21
- package/lib/util/parseDependency.js +4 -4
- package/lib/util/parseGlob.js +4 -4
- package/lib/util/parseObjectStyles.js +1 -1
- package/lib/util/pluginUtils.js +45 -34
- package/lib/util/prefixSelector.js +4 -4
- package/lib/util/pseudoElements.js +78 -95
- package/lib/util/removeAlphaVariables.js +1 -1
- package/lib/util/resolveConfig.js +50 -43
- package/lib/util/resolveConfigPath.js +6 -6
- package/lib/util/responsive.js +1 -1
- package/lib/util/splitAtTopLevelOnly.js +3 -3
- 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 +20 -9
- package/lib/util/validateFormalSyntax.js +5 -5
- package/lib/util/withAlphaVariable.js +8 -8
- package/lib/value-parser/LICENSE +22 -0
- package/lib/value-parser/README.md +3 -0
- package/lib/value-parser/index.d.js +2 -0
- package/lib/value-parser/index.js +22 -0
- package/lib/value-parser/parse.js +259 -0
- package/lib/value-parser/stringify.js +38 -0
- package/lib/value-parser/unit.js +86 -0
- package/lib/value-parser/walk.js +16 -0
- package/nesting/index.d.ts +4 -0
- package/package.json +39 -47
- package/resolveConfig.d.ts +22 -3
- package/scripts/generate-types.js +1 -2
- package/scripts/release-notes.js +1 -1
- package/src/cli/build/index.js +4 -0
- package/src/cli/build/plugin.js +74 -52
- package/src/cli/build/watching.js +1 -1
- package/src/cli/index.js +1 -0
- package/src/cli.js +1 -5
- package/src/corePluginList.js +1 -1
- package/src/corePlugins.js +112 -24
- package/src/css/preflight.css +27 -10
- package/src/featureFlags.js +7 -13
- package/src/lib/content.js +75 -2
- package/src/lib/defaultExtractor.js +30 -17
- package/src/lib/evaluateTailwindFunctions.js +4 -1
- package/src/lib/expandApplyAtRules.js +7 -0
- package/src/lib/expandTailwindAtRules.js +75 -32
- package/src/lib/generateRules.js +52 -33
- package/src/lib/handleImportAtRules.js +34 -0
- package/src/lib/load-config.ts +8 -0
- package/src/lib/normalizeTailwindDirectives.js +0 -27
- package/src/lib/offsets.js +3 -3
- package/src/lib/setupContextUtils.js +82 -53
- package/src/lib/setupTrackingContext.js +1 -3
- package/src/lib/sharedState.js +0 -4
- package/src/plugin.js +86 -60
- package/src/processTailwindFeatures.js +3 -2
- package/src/util/cloneNodes.js +35 -14
- package/src/util/color.js +1 -1
- package/src/util/dataTypes.js +147 -24
- package/src/util/formatVariantSelector.js +11 -3
- package/src/util/isPlainObject.js +1 -1
- package/src/util/log.js +24 -0
- package/src/util/normalizeConfig.js +38 -11
- package/src/util/pluginUtils.js +16 -4
- package/src/util/prefixSelector.js +1 -0
- package/src/util/pseudoElements.js +14 -13
- package/src/util/resolveConfig.js +42 -24
- package/src/util/validateConfig.js +10 -0
- package/src/value-parser/LICENSE +22 -0
- package/src/value-parser/README.md +3 -0
- package/src/value-parser/index.d.ts +177 -0
- package/src/value-parser/index.js +28 -0
- package/src/value-parser/parse.js +303 -0
- package/src/value-parser/stringify.js +41 -0
- package/src/value-parser/unit.js +118 -0
- package/src/value-parser/walk.js +18 -0
- package/stubs/config.full.js +87 -15
- package/stubs/config.simple.js +1 -1
- package/stubs/postcss.config.cjs +0 -1
- package/stubs/postcss.config.js +0 -1
- package/types/config.d.ts +21 -10
- package/types/generated/corePluginList.d.ts +1 -1
- package/types/generated/default-theme.d.ts +35 -9
- package/types/index.d.ts +7 -3
- package/lib/cli/build/deps.js +0 -62
- package/lib/cli-peer-dependencies.js +0 -36
- package/lib/oxide/cli/build/deps.js +0 -89
- package/lib/oxide/cli/build/index.js +0 -53
- package/lib/oxide/cli/build/plugin.js +0 -375
- package/lib/oxide/cli/build/utils.js +0 -87
- package/lib/oxide/cli/build/watching.js +0 -179
- package/lib/oxide/cli/help/index.js +0 -72
- package/lib/oxide/cli/index.js +0 -214
- package/lib/oxide/cli/init/index.js +0 -52
- package/lib/oxide/cli.js +0 -5
- package/lib/oxide/postcss-plugin.js +0 -2
- package/peers/index.js +0 -96419
- package/scripts/swap-engines.js +0 -40
- package/src/cli/build/deps.js +0 -56
- package/src/cli-peer-dependencies.js +0 -15
- package/src/oxide/cli/build/deps.ts +0 -91
- package/src/oxide/cli/build/index.ts +0 -47
- package/src/oxide/cli/build/plugin.ts +0 -442
- package/src/oxide/cli/build/utils.ts +0 -74
- package/src/oxide/cli/build/watching.ts +0 -225
- package/src/oxide/cli/help/index.ts +0 -69
- package/src/oxide/cli/index.ts +0 -204
- package/src/oxide/cli/init/index.ts +0 -59
- package/src/oxide/cli.ts +0 -1
- package/src/oxide/postcss-plugin.ts +0 -1
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
<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
|
|
17
|
+
<a href="https://github.com/tailwindlabs/tailwindcss/actions"><img src="https://img.shields.io/github/actions/workflow/status/tailwindlabs/tailwindcss/ci.yml?branch=master" alt="Build Status"></a>
|
|
18
18
|
<a href="https://www.npmjs.com/package/tailwindcss"><img src="https://img.shields.io/npm/dt/tailwindcss.svg" alt="Total Downloads"></a>
|
|
19
19
|
<a href="https://github.com/tailwindcss/tailwindcss/releases"><img src="https://img.shields.io/npm/v/tailwindcss.svg" alt="Latest Release"></a>
|
|
20
20
|
<a href="https://github.com/tailwindcss/tailwindcss/blob/master/LICENSE"><img src="https://img.shields.io/npm/l/tailwindcss.svg" alt="License"></a>
|
package/index.css
ADDED
package/lib/cli/build/index.js
CHANGED
|
@@ -19,29 +19,32 @@ 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
|
+
}
|
|
37
40
|
// TODO: Reference the @config path here if exists
|
|
38
|
-
let configPath = args[
|
|
41
|
+
let configPath = args['--config'] ? args['--config'] : (0, _resolveConfigPath.resolveDefaultConfigPath)();
|
|
39
42
|
let processor = await (0, _plugin.createProcessor)(args, configPath);
|
|
40
43
|
if (shouldWatch) {
|
|
41
44
|
// Abort the watcher if stdin is closed to avoid zombie processes
|
|
42
45
|
// You can disable this behavior with --watch=always
|
|
43
|
-
if (args[
|
|
44
|
-
process.stdin.on(
|
|
46
|
+
if (args['--watch'] !== 'always') {
|
|
47
|
+
process.stdin.on('end', ()=>process.exit(0));
|
|
45
48
|
}
|
|
46
49
|
process.stdin.resume();
|
|
47
50
|
await processor.watch();
|
package/lib/cli/build/plugin.js
CHANGED
|
@@ -9,16 +9,19 @@ Object.defineProperty(exports, "createProcessor", {
|
|
|
9
9
|
return createProcessor;
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
|
+
const _packagejson = /*#__PURE__*/ _interop_require_default(require("../../../package.json"));
|
|
12
13
|
const _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
|
13
14
|
const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
|
15
|
+
const _postcss = /*#__PURE__*/ _interop_require_default(require("postcss"));
|
|
14
16
|
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"));
|
|
15
19
|
const _lilconfig = require("lilconfig");
|
|
16
20
|
const _plugins = /*#__PURE__*/ _interop_require_default(require("postcss-load-config/src/plugins" // Little bit scary, looking at private/internal API
|
|
17
21
|
));
|
|
18
22
|
const _options = /*#__PURE__*/ _interop_require_default(require("postcss-load-config/src/options" // Little bit scary, looking at private/internal API
|
|
19
23
|
));
|
|
20
24
|
const _processTailwindFeatures = /*#__PURE__*/ _interop_require_default(require("../../processTailwindFeatures"));
|
|
21
|
-
const _deps = require("./deps");
|
|
22
25
|
const _utils = require("./utils");
|
|
23
26
|
const _sharedState = require("../../lib/sharedState");
|
|
24
27
|
const _resolveConfig = /*#__PURE__*/ _interop_require_default(require("../../../resolveConfig.js"));
|
|
@@ -29,11 +32,90 @@ const _findAtConfigPath = require("../../lib/findAtConfigPath.js");
|
|
|
29
32
|
const _log = /*#__PURE__*/ _interop_require_default(require("../../util/log"));
|
|
30
33
|
const _loadconfig = require("../../lib/load-config");
|
|
31
34
|
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");
|
|
32
38
|
function _interop_require_default(obj) {
|
|
33
39
|
return obj && obj.__esModule ? obj : {
|
|
34
40
|
default: obj
|
|
35
41
|
};
|
|
36
42
|
}
|
|
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
|
+
__proto__: null
|
|
66
|
+
};
|
|
67
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
68
|
+
for(var key in obj){
|
|
69
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
70
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
71
|
+
if (desc && (desc.get || desc.set)) {
|
|
72
|
+
Object.defineProperty(newObj, key, desc);
|
|
73
|
+
} else {
|
|
74
|
+
newObj[key] = obj[key];
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
newObj.default = obj;
|
|
79
|
+
if (cache) {
|
|
80
|
+
cache.set(obj, newObj);
|
|
81
|
+
}
|
|
82
|
+
return newObj;
|
|
83
|
+
}
|
|
84
|
+
function license() {
|
|
85
|
+
return `/* ! tailwindcss v${_packagejson.default.version} | MIT License | https://tailwindcss.com */\n`;
|
|
86
|
+
}
|
|
87
|
+
async function lightningcss(result, { map = true, minify = true } = {}) {
|
|
88
|
+
try {
|
|
89
|
+
var _browserslist_findConfig;
|
|
90
|
+
var _result_opts_from;
|
|
91
|
+
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;
|
|
92
|
+
let defaultBrowsersListConfig = _packagejson.default.browserslist;
|
|
93
|
+
let browsersListConfig = resolvedBrowsersListConfig !== null && resolvedBrowsersListConfig !== void 0 ? resolvedBrowsersListConfig : defaultBrowsersListConfig;
|
|
94
|
+
let transformed = _lightningcss.default.transform({
|
|
95
|
+
filename: result.opts.from || 'input.css',
|
|
96
|
+
code: Buffer.from(result.css, 'utf-8'),
|
|
97
|
+
minify,
|
|
98
|
+
sourceMap: result.map === undefined ? map : !!result.map,
|
|
99
|
+
inputSourceMap: result.map ? result.map.toString() : undefined,
|
|
100
|
+
targets: _lightningcss.default.browserslistToTargets((0, _browserslist.default)(browsersListConfig)),
|
|
101
|
+
include: _lightningcss.Features.Nesting,
|
|
102
|
+
exclude: _lightningcss.Features.LogicalProperties
|
|
103
|
+
});
|
|
104
|
+
return Object.assign(result, {
|
|
105
|
+
css: transformed.code.toString(),
|
|
106
|
+
map: result.map ? Object.assign(result.map, {
|
|
107
|
+
toString () {
|
|
108
|
+
var _transformed_map;
|
|
109
|
+
return (_transformed_map = transformed.map) === null || _transformed_map === void 0 ? void 0 : _transformed_map.toString();
|
|
110
|
+
}
|
|
111
|
+
}) : result.map
|
|
112
|
+
});
|
|
113
|
+
} catch (err) {
|
|
114
|
+
console.error('Unable to use Lightning CSS. Using raw version instead.');
|
|
115
|
+
console.error(err);
|
|
116
|
+
return result;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
37
119
|
/**
|
|
38
120
|
*
|
|
39
121
|
* @param {string} [customPostCssPath ]
|
|
@@ -43,8 +125,8 @@ function _interop_require_default(obj) {
|
|
|
43
125
|
let file = _path.default.resolve(customPostCssPath);
|
|
44
126
|
// Implementation, see: https://unpkg.com/browse/postcss-load-config@3.1.0/src/index.js
|
|
45
127
|
// @ts-ignore
|
|
46
|
-
let { config ={}
|
|
47
|
-
if (typeof config ===
|
|
128
|
+
let { config = {} } = await (0, _lilconfig.lilconfig)('postcss').load(file);
|
|
129
|
+
if (typeof config === 'function') {
|
|
48
130
|
config = config();
|
|
49
131
|
} else {
|
|
50
132
|
config = Object.assign({}, config);
|
|
@@ -60,10 +142,10 @@ function _interop_require_default(obj) {
|
|
|
60
142
|
})() : await (0, _postcssloadconfig.default)();
|
|
61
143
|
let configPlugins = config.plugins;
|
|
62
144
|
let configPluginTailwindIdx = configPlugins.findIndex((plugin)=>{
|
|
63
|
-
if (typeof plugin ===
|
|
145
|
+
if (typeof plugin === 'function' && plugin.name === 'tailwindcss') {
|
|
64
146
|
return true;
|
|
65
147
|
}
|
|
66
|
-
if (typeof plugin ===
|
|
148
|
+
if (typeof plugin === 'object' && plugin !== null && plugin.postcssPlugin === 'tailwindcss') {
|
|
67
149
|
return true;
|
|
68
150
|
}
|
|
69
151
|
return false;
|
|
@@ -76,43 +158,11 @@ function _interop_require_default(obj) {
|
|
|
76
158
|
config.options
|
|
77
159
|
];
|
|
78
160
|
}
|
|
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
|
-
}
|
|
111
161
|
let state = {
|
|
112
162
|
/** @type {any} */ context: null,
|
|
113
163
|
/** @type {ReturnType<typeof createWatcher> | null} */ watcher: null,
|
|
114
164
|
/** @type {{content: string, extension: string}[]} */ changedContent: [],
|
|
115
|
-
/** @type {
|
|
165
|
+
/** @type {{config: import('../../../types').Config, dependencies: Set<string>, dispose: Function } | null} */ configBag: null,
|
|
116
166
|
contextDependencies: new Set(),
|
|
117
167
|
/** @type {import('../../lib/content.js').ContentPath[]} */ contentPaths: [],
|
|
118
168
|
refreshContentPaths () {
|
|
@@ -143,12 +193,7 @@ let state = {
|
|
|
143
193
|
}
|
|
144
194
|
}
|
|
145
195
|
};
|
|
146
|
-
|
|
147
|
-
this.configBag.config = (0, _resolveConfig.default)(this.configBag.config, {
|
|
148
|
-
content: {
|
|
149
|
-
files: []
|
|
150
|
-
}
|
|
151
|
-
});
|
|
196
|
+
this.configBag.config = (0, _validateConfig.validateConfig)((0, _resolveConfig.default)(this.configBag.config));
|
|
152
197
|
// Override content files if `--content` has been passed explicitly
|
|
153
198
|
if ((content === null || content === void 0 ? void 0 : content.length) > 0) {
|
|
154
199
|
this.configBag.config.content.files = content;
|
|
@@ -157,9 +202,9 @@ let state = {
|
|
|
157
202
|
},
|
|
158
203
|
refreshConfigDependencies () {
|
|
159
204
|
var _this_configBag;
|
|
160
|
-
_sharedState.env.DEBUG && console.time(
|
|
205
|
+
_sharedState.env.DEBUG && console.time('Module dependencies');
|
|
161
206
|
(_this_configBag = this.configBag) === null || _this_configBag === void 0 ? void 0 : _this_configBag.dispose();
|
|
162
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
207
|
+
_sharedState.env.DEBUG && console.timeEnd('Module dependencies');
|
|
163
208
|
},
|
|
164
209
|
readContentPaths () {
|
|
165
210
|
let content = [];
|
|
@@ -167,23 +212,23 @@ let state = {
|
|
|
167
212
|
// TODO: When we make the postcss plugin async-capable this can become async
|
|
168
213
|
let files = _fastglob.default.sync(this.contentPatterns.all);
|
|
169
214
|
for (let file of files){
|
|
170
|
-
if (
|
|
215
|
+
if ((0, _featureFlags.flagEnabled)(this.config, 'oxideParser')) {
|
|
171
216
|
content.push({
|
|
172
217
|
file,
|
|
173
218
|
extension: _path.default.extname(file).slice(1)
|
|
174
219
|
});
|
|
175
220
|
} else {
|
|
176
221
|
content.push({
|
|
177
|
-
content: _fs.default.readFileSync(_path.default.resolve(file),
|
|
222
|
+
content: _fs.default.readFileSync(_path.default.resolve(file), 'utf8'),
|
|
178
223
|
extension: _path.default.extname(file).slice(1)
|
|
179
224
|
});
|
|
180
225
|
}
|
|
181
226
|
}
|
|
182
227
|
// Resolve raw content in the tailwind config
|
|
183
228
|
let rawContent = this.config.content.files.filter((file)=>{
|
|
184
|
-
return file !== null && typeof file ===
|
|
229
|
+
return file !== null && typeof file === 'object';
|
|
185
230
|
});
|
|
186
|
-
for (let { raw: htmlContent
|
|
231
|
+
for (let { raw: htmlContent, extension = 'html' } of rawContent){
|
|
187
232
|
content.push({
|
|
188
233
|
content: htmlContent,
|
|
189
234
|
extension
|
|
@@ -191,31 +236,31 @@ let state = {
|
|
|
191
236
|
}
|
|
192
237
|
return content;
|
|
193
238
|
},
|
|
194
|
-
getContext ({ createContext
|
|
239
|
+
getContext ({ createContext, cliConfigPath, root, result, content }) {
|
|
240
|
+
_sharedState.env.DEBUG && console.time('Searching for config');
|
|
241
|
+
var _findAtConfigPath1;
|
|
242
|
+
let configPath = (_findAtConfigPath1 = (0, _findAtConfigPath.findAtConfigPath)(root, result)) !== null && _findAtConfigPath1 !== void 0 ? _findAtConfigPath1 : cliConfigPath;
|
|
243
|
+
_sharedState.env.DEBUG && console.timeEnd('Searching for config');
|
|
195
244
|
if (this.context) {
|
|
196
245
|
this.context.changedContent = this.changedContent.splice(0);
|
|
197
246
|
return this.context;
|
|
198
247
|
}
|
|
199
|
-
_sharedState.env.DEBUG && console.time(
|
|
200
|
-
var _findAtConfigPath1;
|
|
201
|
-
let configPath = (_findAtConfigPath1 = (0, _findAtConfigPath.findAtConfigPath)(root, result)) !== null && _findAtConfigPath1 !== void 0 ? _findAtConfigPath1 : cliConfigPath;
|
|
202
|
-
_sharedState.env.DEBUG && console.timeEnd("Searching for config");
|
|
203
|
-
_sharedState.env.DEBUG && console.time("Loading config");
|
|
248
|
+
_sharedState.env.DEBUG && console.time('Loading config');
|
|
204
249
|
let config = this.loadConfig(configPath, content);
|
|
205
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
206
|
-
_sharedState.env.DEBUG && console.time(
|
|
250
|
+
_sharedState.env.DEBUG && console.timeEnd('Loading config');
|
|
251
|
+
_sharedState.env.DEBUG && console.time('Creating context');
|
|
207
252
|
this.context = createContext(config, []);
|
|
208
253
|
Object.assign(this.context, {
|
|
209
254
|
userConfigPath: configPath
|
|
210
255
|
});
|
|
211
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
212
|
-
_sharedState.env.DEBUG && console.time(
|
|
256
|
+
_sharedState.env.DEBUG && console.timeEnd('Creating context');
|
|
257
|
+
_sharedState.env.DEBUG && console.time('Resolving content paths');
|
|
213
258
|
this.refreshContentPaths();
|
|
214
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
259
|
+
_sharedState.env.DEBUG && console.timeEnd('Resolving content paths');
|
|
215
260
|
if (this.watcher) {
|
|
216
|
-
_sharedState.env.DEBUG && console.time(
|
|
261
|
+
_sharedState.env.DEBUG && console.time('Watch new files');
|
|
217
262
|
this.watcher.refreshWatchedFiles();
|
|
218
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
263
|
+
_sharedState.env.DEBUG && console.timeEnd('Watch new files');
|
|
219
264
|
}
|
|
220
265
|
for (let file of this.readContentPaths()){
|
|
221
266
|
this.context.changedContent.push(file);
|
|
@@ -225,31 +270,35 @@ let state = {
|
|
|
225
270
|
};
|
|
226
271
|
async function createProcessor(args, cliConfigPath) {
|
|
227
272
|
var _args_content;
|
|
228
|
-
let
|
|
229
|
-
let
|
|
230
|
-
let
|
|
231
|
-
let
|
|
232
|
-
let
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
273
|
+
let input = args['--input'];
|
|
274
|
+
let output = args['--output'];
|
|
275
|
+
let includePostCss = args['--postcss'];
|
|
276
|
+
let customPostCssPath = typeof args['--postcss'] === 'string' ? args['--postcss'] : undefined;
|
|
277
|
+
let [beforePlugins, afterPlugins, postcssOptions] = includePostCss ? await loadPostCssPlugins(customPostCssPath) : [
|
|
278
|
+
[],
|
|
279
|
+
[],
|
|
280
|
+
{}
|
|
281
|
+
];
|
|
282
|
+
beforePlugins.unshift(...(0, _handleImportAtRules.handleImportAtRules)());
|
|
283
|
+
if (args['--purge']) {
|
|
284
|
+
_log.default.warn('purge-flag-deprecated', [
|
|
285
|
+
'The `--purge` flag has been deprecated.',
|
|
286
|
+
'Please use `--content` instead.'
|
|
238
287
|
]);
|
|
239
|
-
if (!args[
|
|
240
|
-
args[
|
|
288
|
+
if (!args['--content']) {
|
|
289
|
+
args['--content'] = args['--purge'];
|
|
241
290
|
}
|
|
242
291
|
}
|
|
243
292
|
var _args_content_split;
|
|
244
|
-
let content = (_args_content_split = (_args_content = args[
|
|
293
|
+
let content = (_args_content_split = (_args_content = args['--content']) === null || _args_content === void 0 ? void 0 : _args_content.split(RegExp("(?<!{[^}]+),"))) !== null && _args_content_split !== void 0 ? _args_content_split : [];
|
|
245
294
|
let tailwindPlugin = ()=>{
|
|
246
295
|
return {
|
|
247
|
-
postcssPlugin:
|
|
248
|
-
Once (root, { result
|
|
249
|
-
_sharedState.env.DEBUG && console.time(
|
|
250
|
-
(0, _processTailwindFeatures.default)(({ createContext
|
|
296
|
+
postcssPlugin: 'tailwindcss',
|
|
297
|
+
async Once (root, { result }) {
|
|
298
|
+
_sharedState.env.DEBUG && console.time('Compiling CSS');
|
|
299
|
+
await (0, _processTailwindFeatures.default)(({ createContext })=>{
|
|
251
300
|
console.error();
|
|
252
|
-
console.error(
|
|
301
|
+
console.error('Rebuilding...');
|
|
253
302
|
return ()=>{
|
|
254
303
|
return state.getContext({
|
|
255
304
|
createContext,
|
|
@@ -260,7 +309,7 @@ async function createProcessor(args, cliConfigPath) {
|
|
|
260
309
|
});
|
|
261
310
|
};
|
|
262
311
|
})(root, result);
|
|
263
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
312
|
+
_sharedState.env.DEBUG && console.timeEnd('Compiling CSS');
|
|
264
313
|
}
|
|
265
314
|
};
|
|
266
315
|
};
|
|
@@ -268,60 +317,62 @@ async function createProcessor(args, cliConfigPath) {
|
|
|
268
317
|
let plugins = [
|
|
269
318
|
...beforePlugins,
|
|
270
319
|
tailwindPlugin,
|
|
271
|
-
!args[
|
|
272
|
-
...afterPlugins
|
|
273
|
-
!args["--no-autoprefixer"] && (0, _deps.loadAutoprefixer)(),
|
|
274
|
-
args["--minify"] && (0, _deps.loadCssNano)()
|
|
320
|
+
!args['--minify'] && _utils.formatNodes,
|
|
321
|
+
...afterPlugins
|
|
275
322
|
].filter(Boolean);
|
|
276
323
|
/** @type {import('postcss').Processor} */ // @ts-ignore
|
|
277
|
-
let processor =
|
|
324
|
+
let processor = (0, _postcss.default)(plugins);
|
|
278
325
|
async function readInput() {
|
|
279
326
|
// Piping in data, let's drain the stdin
|
|
280
|
-
if (input ===
|
|
327
|
+
if (input === '-') {
|
|
281
328
|
return (0, _utils.drainStdin)();
|
|
282
329
|
}
|
|
283
330
|
// Input file has been provided
|
|
284
331
|
if (input) {
|
|
285
|
-
return _fs.default.promises.readFile(_path.default.resolve(input),
|
|
332
|
+
return _fs.default.promises.readFile(_path.default.resolve(input), 'utf8');
|
|
286
333
|
}
|
|
287
334
|
// No input file provided, fallback to default atrules
|
|
288
|
-
return
|
|
335
|
+
return '@tailwind base; @tailwind components; @tailwind utilities';
|
|
289
336
|
}
|
|
290
337
|
async function build() {
|
|
291
338
|
let start = process.hrtime.bigint();
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
339
|
+
let options = {
|
|
340
|
+
...postcssOptions,
|
|
341
|
+
from: input,
|
|
342
|
+
to: output
|
|
343
|
+
};
|
|
344
|
+
return readInput().then((css)=>processor.process(css, options)).then((result)=>lightningcss(result, {
|
|
345
|
+
...options,
|
|
346
|
+
minify: !!args['--minify']
|
|
296
347
|
})).then((result)=>{
|
|
297
348
|
if (!state.watcher) {
|
|
298
349
|
return result;
|
|
299
350
|
}
|
|
300
|
-
_sharedState.env.DEBUG && console.time(
|
|
351
|
+
_sharedState.env.DEBUG && console.time('Recording PostCSS dependencies');
|
|
301
352
|
for (let message of result.messages){
|
|
302
|
-
if (message.type ===
|
|
353
|
+
if (message.type === 'dependency') {
|
|
303
354
|
state.contextDependencies.add(message.file);
|
|
304
355
|
}
|
|
305
356
|
}
|
|
306
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
357
|
+
_sharedState.env.DEBUG && console.timeEnd('Recording PostCSS dependencies');
|
|
307
358
|
// TODO: This needs to be in a different spot
|
|
308
|
-
_sharedState.env.DEBUG && console.time(
|
|
359
|
+
_sharedState.env.DEBUG && console.time('Watch new files');
|
|
309
360
|
state.watcher.refreshWatchedFiles();
|
|
310
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
361
|
+
_sharedState.env.DEBUG && console.timeEnd('Watch new files');
|
|
311
362
|
return result;
|
|
312
363
|
}).then((result)=>{
|
|
313
364
|
if (!output) {
|
|
314
|
-
process.stdout.write(result.css);
|
|
365
|
+
process.stdout.write(license() + result.css);
|
|
315
366
|
return;
|
|
316
367
|
}
|
|
317
368
|
return Promise.all([
|
|
318
|
-
(0, _utils.outputFile)(result.opts.to, result.css),
|
|
319
|
-
result.map && (0, _utils.outputFile)(result.opts.to +
|
|
369
|
+
(0, _utils.outputFile)(result.opts.to, license() + result.css),
|
|
370
|
+
result.map && (0, _utils.outputFile)(result.opts.to + '.map', result.map.toString())
|
|
320
371
|
]);
|
|
321
372
|
}).then(()=>{
|
|
322
373
|
let end = process.hrtime.bigint();
|
|
323
374
|
console.error();
|
|
324
|
-
console.error(
|
|
375
|
+
console.error('Done in', (end - start) / BigInt(1e6) + 'ms.');
|
|
325
376
|
}).then(()=>{}, (err)=>{
|
|
326
377
|
// TODO: If an initial build fails we can't easily pick up any PostCSS dependencies
|
|
327
378
|
// that were collected before the error occurred
|
|
@@ -347,7 +398,7 @@ async function createProcessor(args, cliConfigPath) {
|
|
|
347
398
|
extension: change.extension
|
|
348
399
|
})));
|
|
349
400
|
}
|
|
350
|
-
if (input !== undefined && input !==
|
|
401
|
+
if (input !== undefined && input !== '-') {
|
|
351
402
|
state.contextDependencies.add(_path.default.resolve(input));
|
|
352
403
|
}
|
|
353
404
|
return {
|
package/lib/cli/build/utils.js
CHANGED
|
@@ -10,20 +10,20 @@ function _export(target, all) {
|
|
|
10
10
|
});
|
|
11
11
|
}
|
|
12
12
|
_export(exports, {
|
|
13
|
-
|
|
14
|
-
return
|
|
13
|
+
drainStdin: function() {
|
|
14
|
+
return drainStdin;
|
|
15
15
|
},
|
|
16
16
|
formatNodes: function() {
|
|
17
17
|
return formatNodes;
|
|
18
18
|
},
|
|
19
|
-
|
|
20
|
-
return
|
|
21
|
-
},
|
|
22
|
-
drainStdin: function() {
|
|
23
|
-
return drainStdin;
|
|
19
|
+
indentRecursive: function() {
|
|
20
|
+
return indentRecursive;
|
|
24
21
|
},
|
|
25
22
|
outputFile: function() {
|
|
26
23
|
return outputFile;
|
|
24
|
+
},
|
|
25
|
+
readFileWithRetries: function() {
|
|
26
|
+
return readFileWithRetries;
|
|
27
27
|
}
|
|
28
28
|
});
|
|
29
29
|
const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
|
@@ -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 (e) {}
|
|
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
|
}
|
|
@@ -20,9 +20,9 @@ function _interop_require_default(obj) {
|
|
|
20
20
|
default: obj
|
|
21
21
|
};
|
|
22
22
|
}
|
|
23
|
-
function createWatcher(args, { state
|
|
24
|
-
let shouldPoll = args[
|
|
25
|
-
let shouldCoalesceWriteEvents = shouldPoll || process.platform ===
|
|
23
|
+
function createWatcher(args, { state, rebuild }) {
|
|
24
|
+
let shouldPoll = args['--poll'];
|
|
25
|
+
let shouldCoalesceWriteEvents = shouldPoll || process.platform === 'win32';
|
|
26
26
|
// Polling interval in milliseconds
|
|
27
27
|
// Used only when polling or coalescing add/change events on Windows
|
|
28
28
|
let pollInterval = 10;
|
|
@@ -88,7 +88,7 @@ function createWatcher(args, { state , rebuild }) {
|
|
|
88
88
|
pendingRebuilds.add(file);
|
|
89
89
|
changedContent.push({
|
|
90
90
|
file,
|
|
91
|
-
content: content !== null && content !== void 0 ? content : ()=>_fs.default.promises.readFile(file,
|
|
91
|
+
content: content !== null && content !== void 0 ? content : ()=>_fs.default.promises.readFile(file, 'utf8'),
|
|
92
92
|
extension: _path.default.extname(file).slice(1)
|
|
93
93
|
});
|
|
94
94
|
if (_timer) {
|
|
@@ -107,12 +107,12 @@ function createWatcher(args, { state , rebuild }) {
|
|
|
107
107
|
chain = chain.then(rebuildAndContinue, rebuildAndContinue);
|
|
108
108
|
return chain;
|
|
109
109
|
}
|
|
110
|
-
watcher.on(
|
|
111
|
-
watcher.on(
|
|
110
|
+
watcher.on('change', (file)=>recordChangedFile(file));
|
|
111
|
+
watcher.on('add', (file)=>recordChangedFile(file));
|
|
112
112
|
// Restore watching any files that are "removed"
|
|
113
113
|
// This can happen when a file is pseudo-atomically replaced (a copy is created, overwritten, the old one is unlinked, and the new one is renamed)
|
|
114
114
|
// TODO: An an optimization we should allow removal when the config changes
|
|
115
|
-
watcher.on(
|
|
115
|
+
watcher.on('unlink', (file)=>{
|
|
116
116
|
file = (0, _normalizepath.default)(file);
|
|
117
117
|
// Only re-add the file if it's not covered by a dynamic pattern
|
|
118
118
|
if (!_micromatch.default.some([
|
|
@@ -125,8 +125,8 @@ function createWatcher(args, { state , rebuild }) {
|
|
|
125
125
|
// will only fire a rename event for atomic writes and not a change event
|
|
126
126
|
// This is very likely a chokidar bug but it's one we need to work around
|
|
127
127
|
// We treat this as a change event and rebuild the CSS
|
|
128
|
-
watcher.on(
|
|
129
|
-
if (evt !==
|
|
128
|
+
watcher.on('raw', (evt, filePath, meta)=>{
|
|
129
|
+
if (evt !== 'rename' || filePath === null) {
|
|
130
130
|
return;
|
|
131
131
|
}
|
|
132
132
|
let watchedPath = meta.watchedPath;
|
|
@@ -161,7 +161,7 @@ function createWatcher(args, { state , rebuild }) {
|
|
|
161
161
|
// This is because the order of events and timing is different on Linux
|
|
162
162
|
// @ts-ignore: TypeScript isn't picking up that content is a string here
|
|
163
163
|
await recordChangedFile(filePath, ()=>content, true);
|
|
164
|
-
} catch
|
|
164
|
+
} catch (e) {
|
|
165
165
|
// If reading the file fails, it's was probably a deleted temporary file
|
|
166
166
|
// So we can ignore it and no rebuild is needed
|
|
167
167
|
}
|