tailwindcss 0.0.0-insiders.729dafe → 0.0.0-insiders.73272fa
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/lib/cli/build/index.js +14 -14
- package/lib/cli/build/plugin.js +112 -62
- 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 -60
- package/lib/cli/init/index.js +16 -16
- package/lib/cli.js +1 -1
- package/lib/corePlugins.js +1899 -1901
- package/lib/css/preflight.css +6 -2
- package/lib/featureFlags.js +21 -17
- 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 +10 -10
- package/lib/lib/defaultExtractor.js +9 -24
- package/lib/lib/detectNesting.js +10 -10
- package/lib/lib/evaluateTailwindFunctions.js +23 -23
- package/lib/lib/expandApplyAtRules.js +18 -18
- package/lib/lib/expandTailwindAtRules.js +37 -36
- package/lib/lib/findAtConfigPath.js +5 -5
- package/lib/lib/generateRules.js +64 -66
- package/lib/lib/getModuleDependencies.js +23 -23
- package/lib/lib/handleImportAtRules.js +3 -3
- package/lib/lib/load-config.js +3 -3
- package/lib/lib/normalizeTailwindDirectives.js +21 -21
- package/lib/lib/offsets.js +46 -46
- package/lib/lib/partitionApplyAtRules.js +2 -2
- package/lib/lib/regex.js +5 -5
- package/lib/lib/resolveDefaultsAtRules.js +25 -25
- package/lib/lib/setupContextUtils.js +160 -135
- package/lib/lib/setupTrackingContext.js +5 -4
- package/lib/lib/sharedState.js +10 -10
- package/lib/lib/substituteScreenAtRules.js +4 -4
- package/lib/plugin.js +79 -28
- package/lib/postcss-plugins/nesting/index.js +2 -2
- package/lib/postcss-plugins/nesting/plugin.js +11 -11
- 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 +1 -1
- package/lib/util/color.js +19 -19
- package/lib/util/createUtilityPlugin.js +3 -3
- package/lib/util/dataTypes.js +154 -100
- 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 +22 -20
- package/lib/util/getAllConfigs.js +5 -4
- package/lib/util/isKeyframeRule.js +1 -1
- package/lib/util/isPlainObject.js +1 -1
- package/lib/util/isSyntacticallyValidPropertyValue.js +10 -10
- package/lib/util/log.js +11 -11
- package/lib/util/nameClass.js +4 -4
- package/lib/util/negateValue.js +8 -8
- package/lib/util/normalizeConfig.js +81 -62
- package/lib/util/normalizeScreens.js +18 -18
- package/lib/util/parseAnimationValue.js +38 -38
- package/lib/util/parseBoxShadowValue.js +18 -18
- 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 +21 -21
- package/lib/util/prefixSelector.js +4 -4
- package/lib/util/pseudoElements.js +75 -95
- package/lib/util/removeAlphaVariables.js +1 -1
- package/lib/util/resolveConfig.js +15 -11
- 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 +13 -13
- package/lib/util/validateFormalSyntax.js +5 -5
- package/lib/util/withAlphaVariable.js +5 -5
- 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/package.json +18 -20
- package/scripts/release-notes.js +1 -1
- package/src/cli/build/plugin.js +18 -6
- package/src/corePlugins.js +15 -15
- package/src/css/preflight.css +6 -2
- package/src/featureFlags.js +3 -7
- package/src/lib/defaultExtractor.js +1 -11
- package/src/lib/expandTailwindAtRules.js +15 -11
- package/src/lib/generateRules.js +18 -21
- package/src/lib/offsets.js +3 -3
- package/src/lib/setupContextUtils.js +18 -5
- package/src/plugin.js +23 -11
- package/src/processTailwindFeatures.js +3 -2
- package/src/util/dataTypes.js +59 -11
- package/src/util/formatVariantSelector.js +4 -3
- package/src/util/normalizeConfig.js +16 -1
- package/src/util/prefixSelector.js +1 -0
- package/src/util/pseudoElements.js +10 -13
- package/stubs/config.full.js +6 -7
- package/types/config.d.ts +8 -7
- package/types/generated/default-theme.d.ts +6 -0
package/lib/cli/build/index.js
CHANGED
|
@@ -19,32 +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[
|
|
38
|
-
console.error(
|
|
37
|
+
if (args['--no-autoprefixer']) {
|
|
38
|
+
console.error('[deprecation] The --no-autoprefixer flag is deprecated and has no effect.');
|
|
39
39
|
}
|
|
40
40
|
// TODO: Reference the @config path here if exists
|
|
41
|
-
let configPath = args[
|
|
41
|
+
let configPath = args['--config'] ? args['--config'] : (0, _resolveConfigPath.resolveDefaultConfigPath)();
|
|
42
42
|
let processor = await (0, _plugin.createProcessor)(args, configPath);
|
|
43
43
|
if (shouldWatch) {
|
|
44
44
|
// Abort the watcher if stdin is closed to avoid zombie processes
|
|
45
45
|
// You can disable this behavior with --watch=always
|
|
46
|
-
if (args[
|
|
47
|
-
process.stdin.on(
|
|
46
|
+
if (args['--watch'] !== 'always') {
|
|
47
|
+
process.stdin.on('end', ()=>process.exit(0));
|
|
48
48
|
}
|
|
49
49
|
process.stdin.resume();
|
|
50
50
|
await processor.watch();
|
package/lib/cli/build/plugin.js
CHANGED
|
@@ -15,7 +15,7 @@ const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
|
|
15
15
|
const _postcss = /*#__PURE__*/ _interop_require_default(require("postcss"));
|
|
16
16
|
const _postcssloadconfig = /*#__PURE__*/ _interop_require_default(require("postcss-load-config"));
|
|
17
17
|
const _browserslist = /*#__PURE__*/ _interop_require_default(require("browserslist"));
|
|
18
|
-
const _lightningcss = /*#__PURE__*/
|
|
18
|
+
const _lightningcss = /*#__PURE__*/ _interop_require_wildcard(require("lightningcss"));
|
|
19
19
|
const _lilconfig = require("lilconfig");
|
|
20
20
|
const _plugins = /*#__PURE__*/ _interop_require_default(require("postcss-load-config/src/plugins" // Little bit scary, looking at private/internal API
|
|
21
21
|
));
|
|
@@ -40,21 +40,70 @@ function _interop_require_default(obj) {
|
|
|
40
40
|
default: obj
|
|
41
41
|
};
|
|
42
42
|
}
|
|
43
|
-
|
|
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 } = {}) {
|
|
44
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;
|
|
45
92
|
let transformed = _lightningcss.default.transform({
|
|
46
|
-
filename: result.opts.from ||
|
|
47
|
-
code: Buffer.from(result.css,
|
|
93
|
+
filename: result.opts.from || 'input.css',
|
|
94
|
+
code: Buffer.from(result.css, 'utf-8'),
|
|
48
95
|
minify,
|
|
49
96
|
sourceMap: result.map === undefined ? map : !!result.map,
|
|
50
97
|
inputSourceMap: result.map ? result.map.toString() : undefined,
|
|
51
|
-
targets: _lightningcss.default.browserslistToTargets((0, _browserslist.default)(
|
|
98
|
+
targets: _lightningcss.default.browserslistToTargets((0, _browserslist.default)(browsersListConfig)),
|
|
52
99
|
drafts: {
|
|
53
100
|
nesting: true
|
|
54
|
-
}
|
|
101
|
+
},
|
|
102
|
+
include: _lightningcss.Features.Nesting,
|
|
103
|
+
exclude: _lightningcss.Features.LogicalProperties
|
|
55
104
|
});
|
|
56
105
|
return Object.assign(result, {
|
|
57
|
-
css: transformed.code.toString(
|
|
106
|
+
css: transformed.code.toString('utf8'),
|
|
58
107
|
map: result.map ? Object.assign(result.map, {
|
|
59
108
|
toString () {
|
|
60
109
|
var _transformed_map;
|
|
@@ -63,7 +112,7 @@ async function lightningcss(result, { map =true , minify =true } = {}) {
|
|
|
63
112
|
}) : result.map
|
|
64
113
|
});
|
|
65
114
|
} catch (err) {
|
|
66
|
-
console.error(
|
|
115
|
+
console.error('Unable to use Lightning CSS. Using raw version instead.');
|
|
67
116
|
console.error(err);
|
|
68
117
|
return result;
|
|
69
118
|
}
|
|
@@ -77,8 +126,8 @@ async function lightningcss(result, { map =true , minify =true } = {}) {
|
|
|
77
126
|
let file = _path.default.resolve(customPostCssPath);
|
|
78
127
|
// Implementation, see: https://unpkg.com/browse/postcss-load-config@3.1.0/src/index.js
|
|
79
128
|
// @ts-ignore
|
|
80
|
-
let { config ={}
|
|
81
|
-
if (typeof config ===
|
|
129
|
+
let { config = {} } = await (0, _lilconfig.lilconfig)('postcss').load(file);
|
|
130
|
+
if (typeof config === 'function') {
|
|
82
131
|
config = config();
|
|
83
132
|
} else {
|
|
84
133
|
config = Object.assign({}, config);
|
|
@@ -94,10 +143,10 @@ async function lightningcss(result, { map =true , minify =true } = {}) {
|
|
|
94
143
|
})() : await (0, _postcssloadconfig.default)();
|
|
95
144
|
let configPlugins = config.plugins;
|
|
96
145
|
let configPluginTailwindIdx = configPlugins.findIndex((plugin)=>{
|
|
97
|
-
if (typeof plugin ===
|
|
146
|
+
if (typeof plugin === 'function' && plugin.name === 'tailwindcss') {
|
|
98
147
|
return true;
|
|
99
148
|
}
|
|
100
|
-
if (typeof plugin ===
|
|
149
|
+
if (typeof plugin === 'object' && plugin !== null && plugin.postcssPlugin === 'tailwindcss') {
|
|
101
150
|
return true;
|
|
102
151
|
}
|
|
103
152
|
return false;
|
|
@@ -131,6 +180,7 @@ let state = {
|
|
|
131
180
|
};
|
|
132
181
|
},
|
|
133
182
|
loadConfig (configPath, content) {
|
|
183
|
+
var _content;
|
|
134
184
|
if (this.watcher && configPath) {
|
|
135
185
|
this.refreshConfigDependencies();
|
|
136
186
|
}
|
|
@@ -147,16 +197,16 @@ let state = {
|
|
|
147
197
|
};
|
|
148
198
|
this.configBag.config = (0, _validateConfig.validateConfig)((0, _resolveConfig.default)(this.configBag.config));
|
|
149
199
|
// Override content files if `--content` has been passed explicitly
|
|
150
|
-
if ((content === null ||
|
|
200
|
+
if (((_content = content) === null || _content === void 0 ? void 0 : _content.length) > 0) {
|
|
151
201
|
this.configBag.config.content.files = content;
|
|
152
202
|
}
|
|
153
203
|
return this.configBag.config;
|
|
154
204
|
},
|
|
155
205
|
refreshConfigDependencies () {
|
|
156
206
|
var _this_configBag;
|
|
157
|
-
_sharedState.env.DEBUG && console.time(
|
|
207
|
+
_sharedState.env.DEBUG && console.time('Module dependencies');
|
|
158
208
|
(_this_configBag = this.configBag) === null || _this_configBag === void 0 ? void 0 : _this_configBag.dispose();
|
|
159
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
209
|
+
_sharedState.env.DEBUG && console.timeEnd('Module dependencies');
|
|
160
210
|
},
|
|
161
211
|
readContentPaths () {
|
|
162
212
|
let content = [];
|
|
@@ -164,23 +214,23 @@ let state = {
|
|
|
164
214
|
// TODO: When we make the postcss plugin async-capable this can become async
|
|
165
215
|
let files = _fastglob.default.sync(this.contentPatterns.all);
|
|
166
216
|
for (let file of files){
|
|
167
|
-
if ((0, _featureFlags.flagEnabled)(this.config,
|
|
217
|
+
if ((0, _featureFlags.flagEnabled)(this.config, 'oxideParser')) {
|
|
168
218
|
content.push({
|
|
169
219
|
file,
|
|
170
220
|
extension: _path.default.extname(file).slice(1)
|
|
171
221
|
});
|
|
172
222
|
} else {
|
|
173
223
|
content.push({
|
|
174
|
-
content: _fs.default.readFileSync(_path.default.resolve(file),
|
|
224
|
+
content: _fs.default.readFileSync(_path.default.resolve(file), 'utf8'),
|
|
175
225
|
extension: _path.default.extname(file).slice(1)
|
|
176
226
|
});
|
|
177
227
|
}
|
|
178
228
|
}
|
|
179
229
|
// Resolve raw content in the tailwind config
|
|
180
230
|
let rawContent = this.config.content.files.filter((file)=>{
|
|
181
|
-
return file !== null && typeof file ===
|
|
231
|
+
return file !== null && typeof file === 'object';
|
|
182
232
|
});
|
|
183
|
-
for (let { raw: htmlContent
|
|
233
|
+
for (let { raw: htmlContent, extension = 'html' } of rawContent){
|
|
184
234
|
content.push({
|
|
185
235
|
content: htmlContent,
|
|
186
236
|
extension
|
|
@@ -188,31 +238,31 @@ let state = {
|
|
|
188
238
|
}
|
|
189
239
|
return content;
|
|
190
240
|
},
|
|
191
|
-
getContext ({ createContext
|
|
241
|
+
getContext ({ createContext, cliConfigPath, root, result, content }) {
|
|
192
242
|
if (this.context) {
|
|
193
243
|
this.context.changedContent = this.changedContent.splice(0);
|
|
194
244
|
return this.context;
|
|
195
245
|
}
|
|
196
|
-
_sharedState.env.DEBUG && console.time(
|
|
246
|
+
_sharedState.env.DEBUG && console.time('Searching for config');
|
|
197
247
|
var _findAtConfigPath1;
|
|
198
248
|
let configPath = (_findAtConfigPath1 = (0, _findAtConfigPath.findAtConfigPath)(root, result)) !== null && _findAtConfigPath1 !== void 0 ? _findAtConfigPath1 : cliConfigPath;
|
|
199
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
200
|
-
_sharedState.env.DEBUG && console.time(
|
|
249
|
+
_sharedState.env.DEBUG && console.timeEnd('Searching for config');
|
|
250
|
+
_sharedState.env.DEBUG && console.time('Loading config');
|
|
201
251
|
let config = this.loadConfig(configPath, content);
|
|
202
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
203
|
-
_sharedState.env.DEBUG && console.time(
|
|
252
|
+
_sharedState.env.DEBUG && console.timeEnd('Loading config');
|
|
253
|
+
_sharedState.env.DEBUG && console.time('Creating context');
|
|
204
254
|
this.context = createContext(config, []);
|
|
205
255
|
Object.assign(this.context, {
|
|
206
256
|
userConfigPath: configPath
|
|
207
257
|
});
|
|
208
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
209
|
-
_sharedState.env.DEBUG && console.time(
|
|
258
|
+
_sharedState.env.DEBUG && console.timeEnd('Creating context');
|
|
259
|
+
_sharedState.env.DEBUG && console.time('Resolving content paths');
|
|
210
260
|
this.refreshContentPaths();
|
|
211
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
261
|
+
_sharedState.env.DEBUG && console.timeEnd('Resolving content paths');
|
|
212
262
|
if (this.watcher) {
|
|
213
|
-
_sharedState.env.DEBUG && console.time(
|
|
263
|
+
_sharedState.env.DEBUG && console.time('Watch new files');
|
|
214
264
|
this.watcher.refreshWatchedFiles();
|
|
215
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
265
|
+
_sharedState.env.DEBUG && console.timeEnd('Watch new files');
|
|
216
266
|
}
|
|
217
267
|
for (let file of this.readContentPaths()){
|
|
218
268
|
this.context.changedContent.push(file);
|
|
@@ -222,35 +272,35 @@ let state = {
|
|
|
222
272
|
};
|
|
223
273
|
async function createProcessor(args, cliConfigPath) {
|
|
224
274
|
var _args_content;
|
|
225
|
-
let input = args[
|
|
226
|
-
let output = args[
|
|
227
|
-
let includePostCss = args[
|
|
228
|
-
let customPostCssPath = typeof args[
|
|
275
|
+
let input = args['--input'];
|
|
276
|
+
let output = args['--output'];
|
|
277
|
+
let includePostCss = args['--postcss'];
|
|
278
|
+
let customPostCssPath = typeof args['--postcss'] === 'string' ? args['--postcss'] : undefined;
|
|
229
279
|
let [beforePlugins, afterPlugins, postcssOptions] = includePostCss ? await loadPostCssPlugins(customPostCssPath) : [
|
|
230
280
|
[],
|
|
231
281
|
[],
|
|
232
282
|
{}
|
|
233
283
|
];
|
|
234
284
|
beforePlugins.unshift(...(0, _handleImportAtRules.handleImportAtRules)());
|
|
235
|
-
if (args[
|
|
236
|
-
_log.default.warn(
|
|
237
|
-
|
|
238
|
-
|
|
285
|
+
if (args['--purge']) {
|
|
286
|
+
_log.default.warn('purge-flag-deprecated', [
|
|
287
|
+
'The `--purge` flag has been deprecated.',
|
|
288
|
+
'Please use `--content` instead.'
|
|
239
289
|
]);
|
|
240
|
-
if (!args[
|
|
241
|
-
args[
|
|
290
|
+
if (!args['--content']) {
|
|
291
|
+
args['--content'] = args['--purge'];
|
|
242
292
|
}
|
|
243
293
|
}
|
|
244
294
|
var _args_content_split;
|
|
245
|
-
let content = (_args_content_split = (_args_content = args[
|
|
295
|
+
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 : [];
|
|
246
296
|
let tailwindPlugin = ()=>{
|
|
247
297
|
return {
|
|
248
|
-
postcssPlugin:
|
|
249
|
-
Once (root, { result
|
|
250
|
-
_sharedState.env.DEBUG && console.time(
|
|
251
|
-
(0, _processTailwindFeatures.default)(({ createContext
|
|
298
|
+
postcssPlugin: 'tailwindcss',
|
|
299
|
+
async Once (root, { result }) {
|
|
300
|
+
_sharedState.env.DEBUG && console.time('Compiling CSS');
|
|
301
|
+
await (0, _processTailwindFeatures.default)(({ createContext })=>{
|
|
252
302
|
console.error();
|
|
253
|
-
console.error(
|
|
303
|
+
console.error('Rebuilding...');
|
|
254
304
|
return ()=>{
|
|
255
305
|
return state.getContext({
|
|
256
306
|
createContext,
|
|
@@ -261,7 +311,7 @@ async function createProcessor(args, cliConfigPath) {
|
|
|
261
311
|
});
|
|
262
312
|
};
|
|
263
313
|
})(root, result);
|
|
264
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
314
|
+
_sharedState.env.DEBUG && console.timeEnd('Compiling CSS');
|
|
265
315
|
}
|
|
266
316
|
};
|
|
267
317
|
};
|
|
@@ -269,22 +319,22 @@ async function createProcessor(args, cliConfigPath) {
|
|
|
269
319
|
let plugins = [
|
|
270
320
|
...beforePlugins,
|
|
271
321
|
tailwindPlugin,
|
|
272
|
-
!args[
|
|
322
|
+
!args['--minify'] && _utils.formatNodes,
|
|
273
323
|
...afterPlugins
|
|
274
324
|
].filter(Boolean);
|
|
275
325
|
/** @type {import('postcss').Processor} */ // @ts-ignore
|
|
276
326
|
let processor = (0, _postcss.default)(plugins);
|
|
277
327
|
async function readInput() {
|
|
278
328
|
// Piping in data, let's drain the stdin
|
|
279
|
-
if (input ===
|
|
329
|
+
if (input === '-') {
|
|
280
330
|
return (0, _utils.drainStdin)();
|
|
281
331
|
}
|
|
282
332
|
// Input file has been provided
|
|
283
333
|
if (input) {
|
|
284
|
-
return _fs.default.promises.readFile(_path.default.resolve(input),
|
|
334
|
+
return _fs.default.promises.readFile(_path.default.resolve(input), 'utf8');
|
|
285
335
|
}
|
|
286
336
|
// No input file provided, fallback to default atrules
|
|
287
|
-
return
|
|
337
|
+
return '@tailwind base; @tailwind components; @tailwind utilities';
|
|
288
338
|
}
|
|
289
339
|
async function build() {
|
|
290
340
|
let start = process.hrtime.bigint();
|
|
@@ -295,36 +345,36 @@ async function createProcessor(args, cliConfigPath) {
|
|
|
295
345
|
};
|
|
296
346
|
return readInput().then((css)=>processor.process(css, options)).then((result)=>lightningcss(result, {
|
|
297
347
|
...options,
|
|
298
|
-
minify: !!args[
|
|
348
|
+
minify: !!args['--minify']
|
|
299
349
|
})).then((result)=>{
|
|
300
350
|
if (!state.watcher) {
|
|
301
351
|
return result;
|
|
302
352
|
}
|
|
303
|
-
_sharedState.env.DEBUG && console.time(
|
|
353
|
+
_sharedState.env.DEBUG && console.time('Recording PostCSS dependencies');
|
|
304
354
|
for (let message of result.messages){
|
|
305
|
-
if (message.type ===
|
|
355
|
+
if (message.type === 'dependency') {
|
|
306
356
|
state.contextDependencies.add(message.file);
|
|
307
357
|
}
|
|
308
358
|
}
|
|
309
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
359
|
+
_sharedState.env.DEBUG && console.timeEnd('Recording PostCSS dependencies');
|
|
310
360
|
// TODO: This needs to be in a different spot
|
|
311
|
-
_sharedState.env.DEBUG && console.time(
|
|
361
|
+
_sharedState.env.DEBUG && console.time('Watch new files');
|
|
312
362
|
state.watcher.refreshWatchedFiles();
|
|
313
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
363
|
+
_sharedState.env.DEBUG && console.timeEnd('Watch new files');
|
|
314
364
|
return result;
|
|
315
365
|
}).then((result)=>{
|
|
316
366
|
if (!output) {
|
|
317
|
-
process.stdout.write(result.css);
|
|
367
|
+
process.stdout.write(license() + result.css);
|
|
318
368
|
return;
|
|
319
369
|
}
|
|
320
370
|
return Promise.all([
|
|
321
|
-
(0, _utils.outputFile)(result.opts.to, result.css),
|
|
322
|
-
result.map && (0, _utils.outputFile)(result.opts.to +
|
|
371
|
+
(0, _utils.outputFile)(result.opts.to, license() + result.css),
|
|
372
|
+
result.map && (0, _utils.outputFile)(result.opts.to + '.map', result.map.toString())
|
|
323
373
|
]);
|
|
324
374
|
}).then(()=>{
|
|
325
375
|
let end = process.hrtime.bigint();
|
|
326
376
|
console.error();
|
|
327
|
-
console.error(
|
|
377
|
+
console.error('Done in', (end - start) / BigInt(1e6) + 'ms.');
|
|
328
378
|
}).then(()=>{}, (err)=>{
|
|
329
379
|
// TODO: If an initial build fails we can't easily pick up any PostCSS dependencies
|
|
330
380
|
// that were collected before the error occurred
|
|
@@ -350,7 +400,7 @@ async function createProcessor(args, cliConfigPath) {
|
|
|
350
400
|
extension: change.extension
|
|
351
401
|
})));
|
|
352
402
|
}
|
|
353
|
-
if (input !== undefined && input !==
|
|
403
|
+
if (input !== undefined && input !== '-') {
|
|
354
404
|
state.contextDependencies.add(_path.default.resolve(input));
|
|
355
405
|
}
|
|
356
406
|
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 (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') {
|
|
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
|
}
|
package/lib/cli/help/index.js
CHANGED
|
@@ -15,7 +15,7 @@ function _interop_require_default(obj) {
|
|
|
15
15
|
default: obj
|
|
16
16
|
};
|
|
17
17
|
}
|
|
18
|
-
function help({ message
|
|
18
|
+
function help({ message, usage, commands, options }) {
|
|
19
19
|
let indent = 2;
|
|
20
20
|
// Render header
|
|
21
21
|
console.log();
|
|
@@ -23,31 +23,31 @@ function help({ message , usage , commands , options }) {
|
|
|
23
23
|
// Render message
|
|
24
24
|
if (message) {
|
|
25
25
|
console.log();
|
|
26
|
-
for (let msg of message.split(
|
|
26
|
+
for (let msg of message.split('\n')){
|
|
27
27
|
console.log(msg);
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
// Render usage
|
|
31
31
|
if (usage && usage.length > 0) {
|
|
32
32
|
console.log();
|
|
33
|
-
console.log(
|
|
33
|
+
console.log('Usage:');
|
|
34
34
|
for (let example of usage){
|
|
35
|
-
console.log(
|
|
35
|
+
console.log(' '.repeat(indent), example);
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
// Render commands
|
|
39
39
|
if (commands && commands.length > 0) {
|
|
40
40
|
console.log();
|
|
41
|
-
console.log(
|
|
41
|
+
console.log('Commands:');
|
|
42
42
|
for (let command of commands){
|
|
43
|
-
console.log(
|
|
43
|
+
console.log(' '.repeat(indent), command);
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
// Render options
|
|
47
47
|
if (options) {
|
|
48
48
|
let groupedOptions = {};
|
|
49
49
|
for (let [key, value] of Object.entries(options)){
|
|
50
|
-
if (typeof value ===
|
|
50
|
+
if (typeof value === 'object') {
|
|
51
51
|
groupedOptions[key] = {
|
|
52
52
|
...value,
|
|
53
53
|
flags: [
|
|
@@ -59,13 +59,13 @@ function help({ message , usage , commands , options }) {
|
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
console.log();
|
|
62
|
-
console.log(
|
|
63
|
-
for (let { flags
|
|
62
|
+
console.log('Options:');
|
|
63
|
+
for (let { flags, description, deprecated } of Object.values(groupedOptions)){
|
|
64
64
|
if (deprecated) continue;
|
|
65
65
|
if (flags.length === 1) {
|
|
66
|
-
console.log(
|
|
66
|
+
console.log(' '.repeat(indent + 4 /* 4 = "-i, ".length */ ), flags.slice().reverse().join(', ').padEnd(20, ' '), description);
|
|
67
67
|
} else {
|
|
68
|
-
console.log(
|
|
68
|
+
console.log(' '.repeat(indent), flags.slice().reverse().join(', ').padEnd(24, ' '), description);
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
}
|