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