tailwindcss 0.0.0-insiders.4f0bb0b → 0.0.0-insiders.4f404ff
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 +52 -52
- package/lib/cli/build/utils.js +13 -13
- package/lib/cli/build/watching.js +9 -9
- package/lib/cli/help/index.js +9 -9
- package/lib/cli/index.js +57 -57
- package/lib/cli/init/index.js +16 -16
- package/lib/cli.js +1 -1
- package/lib/corePlugins.js +1755 -1755
- package/lib/css/preflight.css +5 -1
- package/lib/featureFlags.js +13 -13
- 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 +9 -9
- package/lib/lib/defaultExtractor.js +9 -9
- package/lib/lib/detectNesting.js +10 -10
- package/lib/lib/evaluateTailwindFunctions.js +19 -19
- package/lib/lib/expandApplyAtRules.js +18 -18
- package/lib/lib/expandTailwindAtRules.js +29 -29
- package/lib/lib/findAtConfigPath.js +5 -5
- package/lib/lib/generateRules.js +46 -46
- 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 +24 -24
- package/lib/lib/setupContextUtils.js +100 -100
- package/lib/lib/setupTrackingContext.js +2 -2
- package/lib/lib/sharedState.js +10 -10
- package/lib/lib/substituteScreenAtRules.js +2 -2
- package/lib/plugin.js +19 -19
- package/lib/postcss-plugins/nesting/index.js +1 -1
- package/lib/postcss-plugins/nesting/plugin.js +10 -10
- package/lib/processTailwindFeatures.js +2 -2
- package/lib/public/colors.js +263 -263
- 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 +16 -16
- package/lib/util/createUtilityPlugin.js +1 -1
- package/lib/util/dataTypes.js +110 -110
- package/lib/util/escapeCommas.js +1 -1
- package/lib/util/flattenColorPalette.js +2 -2
- package/lib/util/formatVariantSelector.js +14 -14
- package/lib/util/getAllConfigs.js +2 -2
- 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 +48 -48
- package/lib/util/normalizeScreens.js +16 -16
- 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 +16 -16
- 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 +5 -5
- 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 +4 -4
- 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 +4 -4
- package/scripts/release-notes.js +1 -1
- package/src/corePlugins.js +1 -1
- package/src/css/preflight.css +5 -1
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
|
@@ -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 = {} } = await (0, _lilconfig.lilconfig)(
|
|
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;
|
|
@@ -204,9 +204,9 @@ let state = {
|
|
|
204
204
|
},
|
|
205
205
|
refreshConfigDependencies () {
|
|
206
206
|
var _this_configBag;
|
|
207
|
-
_sharedState.env.DEBUG && console.time(
|
|
207
|
+
_sharedState.env.DEBUG && console.time('Module dependencies');
|
|
208
208
|
(_this_configBag = this.configBag) === null || _this_configBag === void 0 ? void 0 : _this_configBag.dispose();
|
|
209
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
209
|
+
_sharedState.env.DEBUG && console.timeEnd('Module dependencies');
|
|
210
210
|
},
|
|
211
211
|
readContentPaths () {
|
|
212
212
|
let content = [];
|
|
@@ -214,23 +214,23 @@ let state = {
|
|
|
214
214
|
// TODO: When we make the postcss plugin async-capable this can become async
|
|
215
215
|
let files = _fastglob.default.sync(this.contentPatterns.all);
|
|
216
216
|
for (let file of files){
|
|
217
|
-
if ((0, _featureFlags.flagEnabled)(this.config,
|
|
217
|
+
if ((0, _featureFlags.flagEnabled)(this.config, 'oxideParser')) {
|
|
218
218
|
content.push({
|
|
219
219
|
file,
|
|
220
220
|
extension: _path.default.extname(file).slice(1)
|
|
221
221
|
});
|
|
222
222
|
} else {
|
|
223
223
|
content.push({
|
|
224
|
-
content: _fs.default.readFileSync(_path.default.resolve(file),
|
|
224
|
+
content: _fs.default.readFileSync(_path.default.resolve(file), 'utf8'),
|
|
225
225
|
extension: _path.default.extname(file).slice(1)
|
|
226
226
|
});
|
|
227
227
|
}
|
|
228
228
|
}
|
|
229
229
|
// Resolve raw content in the tailwind config
|
|
230
230
|
let rawContent = this.config.content.files.filter((file)=>{
|
|
231
|
-
return file !== null && typeof file ===
|
|
231
|
+
return file !== null && typeof file === 'object';
|
|
232
232
|
});
|
|
233
|
-
for (let { raw: htmlContent, extension =
|
|
233
|
+
for (let { raw: htmlContent, extension = 'html' } of rawContent){
|
|
234
234
|
content.push({
|
|
235
235
|
content: htmlContent,
|
|
236
236
|
extension
|
|
@@ -243,26 +243,26 @@ let state = {
|
|
|
243
243
|
this.context.changedContent = this.changedContent.splice(0);
|
|
244
244
|
return this.context;
|
|
245
245
|
}
|
|
246
|
-
_sharedState.env.DEBUG && console.time(
|
|
246
|
+
_sharedState.env.DEBUG && console.time('Searching for config');
|
|
247
247
|
var _findAtConfigPath1;
|
|
248
248
|
let configPath = (_findAtConfigPath1 = (0, _findAtConfigPath.findAtConfigPath)(root, result)) !== null && _findAtConfigPath1 !== void 0 ? _findAtConfigPath1 : cliConfigPath;
|
|
249
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
250
|
-
_sharedState.env.DEBUG && console.time(
|
|
249
|
+
_sharedState.env.DEBUG && console.timeEnd('Searching for config');
|
|
250
|
+
_sharedState.env.DEBUG && console.time('Loading config');
|
|
251
251
|
let config = this.loadConfig(configPath, content);
|
|
252
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
253
|
-
_sharedState.env.DEBUG && console.time(
|
|
252
|
+
_sharedState.env.DEBUG && console.timeEnd('Loading config');
|
|
253
|
+
_sharedState.env.DEBUG && console.time('Creating context');
|
|
254
254
|
this.context = createContext(config, []);
|
|
255
255
|
Object.assign(this.context, {
|
|
256
256
|
userConfigPath: configPath
|
|
257
257
|
});
|
|
258
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
259
|
-
_sharedState.env.DEBUG && console.time(
|
|
258
|
+
_sharedState.env.DEBUG && console.timeEnd('Creating context');
|
|
259
|
+
_sharedState.env.DEBUG && console.time('Resolving content paths');
|
|
260
260
|
this.refreshContentPaths();
|
|
261
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
261
|
+
_sharedState.env.DEBUG && console.timeEnd('Resolving content paths');
|
|
262
262
|
if (this.watcher) {
|
|
263
|
-
_sharedState.env.DEBUG && console.time(
|
|
263
|
+
_sharedState.env.DEBUG && console.time('Watch new files');
|
|
264
264
|
this.watcher.refreshWatchedFiles();
|
|
265
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
265
|
+
_sharedState.env.DEBUG && console.timeEnd('Watch new files');
|
|
266
266
|
}
|
|
267
267
|
for (let file of this.readContentPaths()){
|
|
268
268
|
this.context.changedContent.push(file);
|
|
@@ -272,35 +272,35 @@ let state = {
|
|
|
272
272
|
};
|
|
273
273
|
async function createProcessor(args, cliConfigPath) {
|
|
274
274
|
var _args_content;
|
|
275
|
-
let input = args[
|
|
276
|
-
let output = args[
|
|
277
|
-
let includePostCss = args[
|
|
278
|
-
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;
|
|
279
279
|
let [beforePlugins, afterPlugins, postcssOptions] = includePostCss ? await loadPostCssPlugins(customPostCssPath) : [
|
|
280
280
|
[],
|
|
281
281
|
[],
|
|
282
282
|
{}
|
|
283
283
|
];
|
|
284
284
|
beforePlugins.unshift(...(0, _handleImportAtRules.handleImportAtRules)());
|
|
285
|
-
if (args[
|
|
286
|
-
_log.default.warn(
|
|
287
|
-
|
|
288
|
-
|
|
285
|
+
if (args['--purge']) {
|
|
286
|
+
_log.default.warn('purge-flag-deprecated', [
|
|
287
|
+
'The `--purge` flag has been deprecated.',
|
|
288
|
+
'Please use `--content` instead.'
|
|
289
289
|
]);
|
|
290
|
-
if (!args[
|
|
291
|
-
args[
|
|
290
|
+
if (!args['--content']) {
|
|
291
|
+
args['--content'] = args['--purge'];
|
|
292
292
|
}
|
|
293
293
|
}
|
|
294
294
|
var _args_content_split;
|
|
295
|
-
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 : [];
|
|
296
296
|
let tailwindPlugin = ()=>{
|
|
297
297
|
return {
|
|
298
|
-
postcssPlugin:
|
|
298
|
+
postcssPlugin: 'tailwindcss',
|
|
299
299
|
async Once (root, { result }) {
|
|
300
|
-
_sharedState.env.DEBUG && console.time(
|
|
300
|
+
_sharedState.env.DEBUG && console.time('Compiling CSS');
|
|
301
301
|
await (0, _processTailwindFeatures.default)(({ createContext })=>{
|
|
302
302
|
console.error();
|
|
303
|
-
console.error(
|
|
303
|
+
console.error('Rebuilding...');
|
|
304
304
|
return ()=>{
|
|
305
305
|
return state.getContext({
|
|
306
306
|
createContext,
|
|
@@ -311,7 +311,7 @@ async function createProcessor(args, cliConfigPath) {
|
|
|
311
311
|
});
|
|
312
312
|
};
|
|
313
313
|
})(root, result);
|
|
314
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
314
|
+
_sharedState.env.DEBUG && console.timeEnd('Compiling CSS');
|
|
315
315
|
}
|
|
316
316
|
};
|
|
317
317
|
};
|
|
@@ -319,22 +319,22 @@ async function createProcessor(args, cliConfigPath) {
|
|
|
319
319
|
let plugins = [
|
|
320
320
|
...beforePlugins,
|
|
321
321
|
tailwindPlugin,
|
|
322
|
-
!args[
|
|
322
|
+
!args['--minify'] && _utils.formatNodes,
|
|
323
323
|
...afterPlugins
|
|
324
324
|
].filter(Boolean);
|
|
325
325
|
/** @type {import('postcss').Processor} */ // @ts-ignore
|
|
326
326
|
let processor = (0, _postcss.default)(plugins);
|
|
327
327
|
async function readInput() {
|
|
328
328
|
// Piping in data, let's drain the stdin
|
|
329
|
-
if (input ===
|
|
329
|
+
if (input === '-') {
|
|
330
330
|
return (0, _utils.drainStdin)();
|
|
331
331
|
}
|
|
332
332
|
// Input file has been provided
|
|
333
333
|
if (input) {
|
|
334
|
-
return _fs.default.promises.readFile(_path.default.resolve(input),
|
|
334
|
+
return _fs.default.promises.readFile(_path.default.resolve(input), 'utf8');
|
|
335
335
|
}
|
|
336
336
|
// No input file provided, fallback to default atrules
|
|
337
|
-
return
|
|
337
|
+
return '@tailwind base; @tailwind components; @tailwind utilities';
|
|
338
338
|
}
|
|
339
339
|
async function build() {
|
|
340
340
|
let start = process.hrtime.bigint();
|
|
@@ -345,22 +345,22 @@ async function createProcessor(args, cliConfigPath) {
|
|
|
345
345
|
};
|
|
346
346
|
return readInput().then((css)=>processor.process(css, options)).then((result)=>lightningcss(result, {
|
|
347
347
|
...options,
|
|
348
|
-
minify: !!args[
|
|
348
|
+
minify: !!args['--minify']
|
|
349
349
|
})).then((result)=>{
|
|
350
350
|
if (!state.watcher) {
|
|
351
351
|
return result;
|
|
352
352
|
}
|
|
353
|
-
_sharedState.env.DEBUG && console.time(
|
|
353
|
+
_sharedState.env.DEBUG && console.time('Recording PostCSS dependencies');
|
|
354
354
|
for (let message of result.messages){
|
|
355
|
-
if (message.type ===
|
|
355
|
+
if (message.type === 'dependency') {
|
|
356
356
|
state.contextDependencies.add(message.file);
|
|
357
357
|
}
|
|
358
358
|
}
|
|
359
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
359
|
+
_sharedState.env.DEBUG && console.timeEnd('Recording PostCSS dependencies');
|
|
360
360
|
// TODO: This needs to be in a different spot
|
|
361
|
-
_sharedState.env.DEBUG && console.time(
|
|
361
|
+
_sharedState.env.DEBUG && console.time('Watch new files');
|
|
362
362
|
state.watcher.refreshWatchedFiles();
|
|
363
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
363
|
+
_sharedState.env.DEBUG && console.timeEnd('Watch new files');
|
|
364
364
|
return result;
|
|
365
365
|
}).then((result)=>{
|
|
366
366
|
if (!output) {
|
|
@@ -369,12 +369,12 @@ async function createProcessor(args, cliConfigPath) {
|
|
|
369
369
|
}
|
|
370
370
|
return Promise.all([
|
|
371
371
|
(0, _utils.outputFile)(result.opts.to, license() + result.css),
|
|
372
|
-
result.map && (0, _utils.outputFile)(result.opts.to +
|
|
372
|
+
result.map && (0, _utils.outputFile)(result.opts.to + '.map', result.map.toString())
|
|
373
373
|
]);
|
|
374
374
|
}).then(()=>{
|
|
375
375
|
let end = process.hrtime.bigint();
|
|
376
376
|
console.error();
|
|
377
|
-
console.error(
|
|
377
|
+
console.error('Done in', (end - start) / BigInt(1e6) + 'ms.');
|
|
378
378
|
}).then(()=>{}, (err)=>{
|
|
379
379
|
// TODO: If an initial build fails we can't easily pick up any PostCSS dependencies
|
|
380
380
|
// that were collected before the error occurred
|
|
@@ -400,7 +400,7 @@ async function createProcessor(args, cliConfigPath) {
|
|
|
400
400
|
extension: change.extension
|
|
401
401
|
})));
|
|
402
402
|
}
|
|
403
|
-
if (input !== undefined && input !==
|
|
403
|
+
if (input !== undefined && input !== '-') {
|
|
404
404
|
state.contextDependencies.add(_path.default.resolve(input));
|
|
405
405
|
}
|
|
406
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
|
}
|
|
@@ -21,8 +21,8 @@ function _interop_require_default(obj) {
|
|
|
21
21
|
};
|
|
22
22
|
}
|
|
23
23
|
function createWatcher(args, { state, rebuild }) {
|
|
24
|
-
let shouldPoll = args[
|
|
25
|
-
let shouldCoalesceWriteEvents = shouldPoll || process.platform ===
|
|
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
|
@@ -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(
|
|
62
|
+
console.log('Options:');
|
|
63
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
|
}
|