tailwindcss 0.0.0-insiders.9f591a5 → 0.0.0-insiders.9fcfea4
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 +58 -57
- 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 +1898 -1894
- package/lib/css/preflight.css +6 -2
- package/lib/featureFlags.js +17 -16
- 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 -9
- 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 +63 -55
- 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 +44 -44
- 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 +23 -23
- 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 +70 -65
- 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 +69 -69
- 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 +16 -16
- package/scripts/release-notes.js +1 -1
- package/src/cli/build/plugin.js +2 -2
- package/src/corePlugins.js +13 -7
- package/src/css/preflight.css +6 -2
- package/src/lib/expandTailwindAtRules.js +15 -11
- package/src/lib/generateRules.js +13 -6
- package/src/lib/setupContextUtils.js +18 -5
- package/src/plugin.js +3 -3
- 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 +1 -1
- package/src/util/prefixSelector.js +1 -0
- package/stubs/config.full.js +6 -7
- package/types/config.d.ts +6 -6
- 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
|
@@ -82,7 +82,7 @@ function _interop_require_wildcard(obj, nodeInterop) {
|
|
|
82
82
|
function license() {
|
|
83
83
|
return `/* ! tailwindcss v${_packagejson.default.version} | MIT License | https://tailwindcss.com */\n`;
|
|
84
84
|
}
|
|
85
|
-
async function lightningcss(result, { map =true
|
|
85
|
+
async function lightningcss(result, { map = true, minify = true } = {}) {
|
|
86
86
|
try {
|
|
87
87
|
var _browserslist_findConfig;
|
|
88
88
|
var _result_opts_from;
|
|
@@ -90,8 +90,8 @@ async function lightningcss(result, { map =true , minify =true } = {}) {
|
|
|
90
90
|
let defaultBrowsersListConfig = _packagejson.default.browserslist;
|
|
91
91
|
let browsersListConfig = resolvedBrowsersListConfig !== null && resolvedBrowsersListConfig !== void 0 ? resolvedBrowsersListConfig : defaultBrowsersListConfig;
|
|
92
92
|
let transformed = _lightningcss.default.transform({
|
|
93
|
-
filename: result.opts.from ||
|
|
94
|
-
code: Buffer.from(result.css,
|
|
93
|
+
filename: result.opts.from || 'input.css',
|
|
94
|
+
code: Buffer.from(result.css, 'utf-8'),
|
|
95
95
|
minify,
|
|
96
96
|
sourceMap: result.map === undefined ? map : !!result.map,
|
|
97
97
|
inputSourceMap: result.map ? result.map.toString() : undefined,
|
|
@@ -103,7 +103,7 @@ async function lightningcss(result, { map =true , minify =true } = {}) {
|
|
|
103
103
|
exclude: _lightningcss.Features.LogicalProperties
|
|
104
104
|
});
|
|
105
105
|
return Object.assign(result, {
|
|
106
|
-
css: transformed.code.toString(
|
|
106
|
+
css: transformed.code.toString('utf8'),
|
|
107
107
|
map: result.map ? Object.assign(result.map, {
|
|
108
108
|
toString () {
|
|
109
109
|
var _transformed_map;
|
|
@@ -112,7 +112,7 @@ async function lightningcss(result, { map =true , minify =true } = {}) {
|
|
|
112
112
|
}) : result.map
|
|
113
113
|
});
|
|
114
114
|
} catch (err) {
|
|
115
|
-
console.error(
|
|
115
|
+
console.error('Unable to use Lightning CSS. Using raw version instead.');
|
|
116
116
|
console.error(err);
|
|
117
117
|
return result;
|
|
118
118
|
}
|
|
@@ -126,8 +126,8 @@ async function lightningcss(result, { map =true , minify =true } = {}) {
|
|
|
126
126
|
let file = _path.default.resolve(customPostCssPath);
|
|
127
127
|
// Implementation, see: https://unpkg.com/browse/postcss-load-config@3.1.0/src/index.js
|
|
128
128
|
// @ts-ignore
|
|
129
|
-
let { config ={}
|
|
130
|
-
if (typeof config ===
|
|
129
|
+
let { config = {} } = await (0, _lilconfig.lilconfig)('postcss').load(file);
|
|
130
|
+
if (typeof config === 'function') {
|
|
131
131
|
config = config();
|
|
132
132
|
} else {
|
|
133
133
|
config = Object.assign({}, config);
|
|
@@ -143,10 +143,10 @@ async function lightningcss(result, { map =true , minify =true } = {}) {
|
|
|
143
143
|
})() : await (0, _postcssloadconfig.default)();
|
|
144
144
|
let configPlugins = config.plugins;
|
|
145
145
|
let configPluginTailwindIdx = configPlugins.findIndex((plugin)=>{
|
|
146
|
-
if (typeof plugin ===
|
|
146
|
+
if (typeof plugin === 'function' && plugin.name === 'tailwindcss') {
|
|
147
147
|
return true;
|
|
148
148
|
}
|
|
149
|
-
if (typeof plugin ===
|
|
149
|
+
if (typeof plugin === 'object' && plugin !== null && plugin.postcssPlugin === 'tailwindcss') {
|
|
150
150
|
return true;
|
|
151
151
|
}
|
|
152
152
|
return false;
|
|
@@ -180,6 +180,7 @@ let state = {
|
|
|
180
180
|
};
|
|
181
181
|
},
|
|
182
182
|
loadConfig (configPath, content) {
|
|
183
|
+
var _content;
|
|
183
184
|
if (this.watcher && configPath) {
|
|
184
185
|
this.refreshConfigDependencies();
|
|
185
186
|
}
|
|
@@ -196,16 +197,16 @@ let state = {
|
|
|
196
197
|
};
|
|
197
198
|
this.configBag.config = (0, _validateConfig.validateConfig)((0, _resolveConfig.default)(this.configBag.config));
|
|
198
199
|
// Override content files if `--content` has been passed explicitly
|
|
199
|
-
if ((content === null ||
|
|
200
|
+
if (((_content = content) === null || _content === void 0 ? void 0 : _content.length) > 0) {
|
|
200
201
|
this.configBag.config.content.files = content;
|
|
201
202
|
}
|
|
202
203
|
return this.configBag.config;
|
|
203
204
|
},
|
|
204
205
|
refreshConfigDependencies () {
|
|
205
206
|
var _this_configBag;
|
|
206
|
-
_sharedState.env.DEBUG && console.time(
|
|
207
|
+
_sharedState.env.DEBUG && console.time('Module dependencies');
|
|
207
208
|
(_this_configBag = this.configBag) === null || _this_configBag === void 0 ? void 0 : _this_configBag.dispose();
|
|
208
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
209
|
+
_sharedState.env.DEBUG && console.timeEnd('Module dependencies');
|
|
209
210
|
},
|
|
210
211
|
readContentPaths () {
|
|
211
212
|
let content = [];
|
|
@@ -213,23 +214,23 @@ let state = {
|
|
|
213
214
|
// TODO: When we make the postcss plugin async-capable this can become async
|
|
214
215
|
let files = _fastglob.default.sync(this.contentPatterns.all);
|
|
215
216
|
for (let file of files){
|
|
216
|
-
if ((0, _featureFlags.flagEnabled)(this.config,
|
|
217
|
+
if ((0, _featureFlags.flagEnabled)(this.config, 'oxideParser')) {
|
|
217
218
|
content.push({
|
|
218
219
|
file,
|
|
219
220
|
extension: _path.default.extname(file).slice(1)
|
|
220
221
|
});
|
|
221
222
|
} else {
|
|
222
223
|
content.push({
|
|
223
|
-
content: _fs.default.readFileSync(_path.default.resolve(file),
|
|
224
|
+
content: _fs.default.readFileSync(_path.default.resolve(file), 'utf8'),
|
|
224
225
|
extension: _path.default.extname(file).slice(1)
|
|
225
226
|
});
|
|
226
227
|
}
|
|
227
228
|
}
|
|
228
229
|
// Resolve raw content in the tailwind config
|
|
229
230
|
let rawContent = this.config.content.files.filter((file)=>{
|
|
230
|
-
return file !== null && typeof file ===
|
|
231
|
+
return file !== null && typeof file === 'object';
|
|
231
232
|
});
|
|
232
|
-
for (let { raw: htmlContent
|
|
233
|
+
for (let { raw: htmlContent, extension = 'html' } of rawContent){
|
|
233
234
|
content.push({
|
|
234
235
|
content: htmlContent,
|
|
235
236
|
extension
|
|
@@ -237,31 +238,31 @@ let state = {
|
|
|
237
238
|
}
|
|
238
239
|
return content;
|
|
239
240
|
},
|
|
240
|
-
getContext ({ createContext
|
|
241
|
+
getContext ({ createContext, cliConfigPath, root, result, content }) {
|
|
241
242
|
if (this.context) {
|
|
242
243
|
this.context.changedContent = this.changedContent.splice(0);
|
|
243
244
|
return this.context;
|
|
244
245
|
}
|
|
245
|
-
_sharedState.env.DEBUG && console.time(
|
|
246
|
+
_sharedState.env.DEBUG && console.time('Searching for config');
|
|
246
247
|
var _findAtConfigPath1;
|
|
247
248
|
let configPath = (_findAtConfigPath1 = (0, _findAtConfigPath.findAtConfigPath)(root, result)) !== null && _findAtConfigPath1 !== void 0 ? _findAtConfigPath1 : cliConfigPath;
|
|
248
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
249
|
-
_sharedState.env.DEBUG && console.time(
|
|
249
|
+
_sharedState.env.DEBUG && console.timeEnd('Searching for config');
|
|
250
|
+
_sharedState.env.DEBUG && console.time('Loading config');
|
|
250
251
|
let config = this.loadConfig(configPath, content);
|
|
251
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
252
|
-
_sharedState.env.DEBUG && console.time(
|
|
252
|
+
_sharedState.env.DEBUG && console.timeEnd('Loading config');
|
|
253
|
+
_sharedState.env.DEBUG && console.time('Creating context');
|
|
253
254
|
this.context = createContext(config, []);
|
|
254
255
|
Object.assign(this.context, {
|
|
255
256
|
userConfigPath: configPath
|
|
256
257
|
});
|
|
257
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
258
|
-
_sharedState.env.DEBUG && console.time(
|
|
258
|
+
_sharedState.env.DEBUG && console.timeEnd('Creating context');
|
|
259
|
+
_sharedState.env.DEBUG && console.time('Resolving content paths');
|
|
259
260
|
this.refreshContentPaths();
|
|
260
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
261
|
+
_sharedState.env.DEBUG && console.timeEnd('Resolving content paths');
|
|
261
262
|
if (this.watcher) {
|
|
262
|
-
_sharedState.env.DEBUG && console.time(
|
|
263
|
+
_sharedState.env.DEBUG && console.time('Watch new files');
|
|
263
264
|
this.watcher.refreshWatchedFiles();
|
|
264
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
265
|
+
_sharedState.env.DEBUG && console.timeEnd('Watch new files');
|
|
265
266
|
}
|
|
266
267
|
for (let file of this.readContentPaths()){
|
|
267
268
|
this.context.changedContent.push(file);
|
|
@@ -271,35 +272,35 @@ let state = {
|
|
|
271
272
|
};
|
|
272
273
|
async function createProcessor(args, cliConfigPath) {
|
|
273
274
|
var _args_content;
|
|
274
|
-
let input = args[
|
|
275
|
-
let output = args[
|
|
276
|
-
let includePostCss = args[
|
|
277
|
-
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;
|
|
278
279
|
let [beforePlugins, afterPlugins, postcssOptions] = includePostCss ? await loadPostCssPlugins(customPostCssPath) : [
|
|
279
280
|
[],
|
|
280
281
|
[],
|
|
281
282
|
{}
|
|
282
283
|
];
|
|
283
284
|
beforePlugins.unshift(...(0, _handleImportAtRules.handleImportAtRules)());
|
|
284
|
-
if (args[
|
|
285
|
-
_log.default.warn(
|
|
286
|
-
|
|
287
|
-
|
|
285
|
+
if (args['--purge']) {
|
|
286
|
+
_log.default.warn('purge-flag-deprecated', [
|
|
287
|
+
'The `--purge` flag has been deprecated.',
|
|
288
|
+
'Please use `--content` instead.'
|
|
288
289
|
]);
|
|
289
|
-
if (!args[
|
|
290
|
-
args[
|
|
290
|
+
if (!args['--content']) {
|
|
291
|
+
args['--content'] = args['--purge'];
|
|
291
292
|
}
|
|
292
293
|
}
|
|
293
294
|
var _args_content_split;
|
|
294
|
-
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 : [];
|
|
295
296
|
let tailwindPlugin = ()=>{
|
|
296
297
|
return {
|
|
297
|
-
postcssPlugin:
|
|
298
|
-
Once (root, { result
|
|
299
|
-
_sharedState.env.DEBUG && console.time(
|
|
300
|
-
(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 })=>{
|
|
301
302
|
console.error();
|
|
302
|
-
console.error(
|
|
303
|
+
console.error('Rebuilding...');
|
|
303
304
|
return ()=>{
|
|
304
305
|
return state.getContext({
|
|
305
306
|
createContext,
|
|
@@ -310,7 +311,7 @@ async function createProcessor(args, cliConfigPath) {
|
|
|
310
311
|
});
|
|
311
312
|
};
|
|
312
313
|
})(root, result);
|
|
313
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
314
|
+
_sharedState.env.DEBUG && console.timeEnd('Compiling CSS');
|
|
314
315
|
}
|
|
315
316
|
};
|
|
316
317
|
};
|
|
@@ -318,22 +319,22 @@ async function createProcessor(args, cliConfigPath) {
|
|
|
318
319
|
let plugins = [
|
|
319
320
|
...beforePlugins,
|
|
320
321
|
tailwindPlugin,
|
|
321
|
-
!args[
|
|
322
|
+
!args['--minify'] && _utils.formatNodes,
|
|
322
323
|
...afterPlugins
|
|
323
324
|
].filter(Boolean);
|
|
324
325
|
/** @type {import('postcss').Processor} */ // @ts-ignore
|
|
325
326
|
let processor = (0, _postcss.default)(plugins);
|
|
326
327
|
async function readInput() {
|
|
327
328
|
// Piping in data, let's drain the stdin
|
|
328
|
-
if (input ===
|
|
329
|
+
if (input === '-') {
|
|
329
330
|
return (0, _utils.drainStdin)();
|
|
330
331
|
}
|
|
331
332
|
// Input file has been provided
|
|
332
333
|
if (input) {
|
|
333
|
-
return _fs.default.promises.readFile(_path.default.resolve(input),
|
|
334
|
+
return _fs.default.promises.readFile(_path.default.resolve(input), 'utf8');
|
|
334
335
|
}
|
|
335
336
|
// No input file provided, fallback to default atrules
|
|
336
|
-
return
|
|
337
|
+
return '@tailwind base; @tailwind components; @tailwind utilities';
|
|
337
338
|
}
|
|
338
339
|
async function build() {
|
|
339
340
|
let start = process.hrtime.bigint();
|
|
@@ -344,22 +345,22 @@ async function createProcessor(args, cliConfigPath) {
|
|
|
344
345
|
};
|
|
345
346
|
return readInput().then((css)=>processor.process(css, options)).then((result)=>lightningcss(result, {
|
|
346
347
|
...options,
|
|
347
|
-
minify: !!args[
|
|
348
|
+
minify: !!args['--minify']
|
|
348
349
|
})).then((result)=>{
|
|
349
350
|
if (!state.watcher) {
|
|
350
351
|
return result;
|
|
351
352
|
}
|
|
352
|
-
_sharedState.env.DEBUG && console.time(
|
|
353
|
+
_sharedState.env.DEBUG && console.time('Recording PostCSS dependencies');
|
|
353
354
|
for (let message of result.messages){
|
|
354
|
-
if (message.type ===
|
|
355
|
+
if (message.type === 'dependency') {
|
|
355
356
|
state.contextDependencies.add(message.file);
|
|
356
357
|
}
|
|
357
358
|
}
|
|
358
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
359
|
+
_sharedState.env.DEBUG && console.timeEnd('Recording PostCSS dependencies');
|
|
359
360
|
// TODO: This needs to be in a different spot
|
|
360
|
-
_sharedState.env.DEBUG && console.time(
|
|
361
|
+
_sharedState.env.DEBUG && console.time('Watch new files');
|
|
361
362
|
state.watcher.refreshWatchedFiles();
|
|
362
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
363
|
+
_sharedState.env.DEBUG && console.timeEnd('Watch new files');
|
|
363
364
|
return result;
|
|
364
365
|
}).then((result)=>{
|
|
365
366
|
if (!output) {
|
|
@@ -368,12 +369,12 @@ async function createProcessor(args, cliConfigPath) {
|
|
|
368
369
|
}
|
|
369
370
|
return Promise.all([
|
|
370
371
|
(0, _utils.outputFile)(result.opts.to, license() + result.css),
|
|
371
|
-
result.map && (0, _utils.outputFile)(result.opts.to +
|
|
372
|
+
result.map && (0, _utils.outputFile)(result.opts.to + '.map', result.map.toString())
|
|
372
373
|
]);
|
|
373
374
|
}).then(()=>{
|
|
374
375
|
let end = process.hrtime.bigint();
|
|
375
376
|
console.error();
|
|
376
|
-
console.error(
|
|
377
|
+
console.error('Done in', (end - start) / BigInt(1e6) + 'ms.');
|
|
377
378
|
}).then(()=>{}, (err)=>{
|
|
378
379
|
// TODO: If an initial build fails we can't easily pick up any PostCSS dependencies
|
|
379
380
|
// that were collected before the error occurred
|
|
@@ -399,7 +400,7 @@ async function createProcessor(args, cliConfigPath) {
|
|
|
399
400
|
extension: change.extension
|
|
400
401
|
})));
|
|
401
402
|
}
|
|
402
|
-
if (input !== undefined && input !==
|
|
403
|
+
if (input !== undefined && input !== '-') {
|
|
403
404
|
state.contextDependencies.add(_path.default.resolve(input));
|
|
404
405
|
}
|
|
405
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
|
}
|