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