tailwindcss 0.0.0-insiders.e51b09c → 0.0.0-insiders.e5eceb3
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 +113 -65
- 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 +90 -77
- package/lib/lib/getModuleDependencies.js +23 -23
- package/lib/lib/handleImportAtRules.js +3 -3
- package/lib/lib/load-config.js +3 -3
- package/lib/lib/normalizeTailwindDirectives.js +21 -21
- package/lib/lib/offsets.js +46 -46
- package/lib/lib/partitionApplyAtRules.js +2 -2
- package/lib/lib/regex.js +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 +79 -29
- 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 +18 -20
- 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 +23 -14
- 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 +33 -25
- package/src/lib/offsets.js +3 -3
- package/src/lib/setupContextUtils.js +51 -35
- package/src/plugin.js +21 -12
- 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
|
@@ -15,7 +15,7 @@ const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
|
|
15
15
|
const _postcss = /*#__PURE__*/ _interop_require_default(require("postcss"));
|
|
16
16
|
const _postcssloadconfig = /*#__PURE__*/ _interop_require_default(require("postcss-load-config"));
|
|
17
17
|
const _browserslist = /*#__PURE__*/ _interop_require_default(require("browserslist"));
|
|
18
|
-
const _lightningcss = /*#__PURE__*/
|
|
18
|
+
const _lightningcss = /*#__PURE__*/ _interop_require_wildcard(require("lightningcss"));
|
|
19
19
|
const _lilconfig = require("lilconfig");
|
|
20
20
|
const _plugins = /*#__PURE__*/ _interop_require_default(require("postcss-load-config/src/plugins" // Little bit scary, looking at private/internal API
|
|
21
21
|
));
|
|
@@ -40,21 +40,69 @@ function _interop_require_default(obj) {
|
|
|
40
40
|
default: obj
|
|
41
41
|
};
|
|
42
42
|
}
|
|
43
|
-
|
|
43
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
44
|
+
if (typeof WeakMap !== "function") return null;
|
|
45
|
+
var cacheBabelInterop = new WeakMap();
|
|
46
|
+
var cacheNodeInterop = new WeakMap();
|
|
47
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
48
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
49
|
+
})(nodeInterop);
|
|
50
|
+
}
|
|
51
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
52
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
53
|
+
return obj;
|
|
54
|
+
}
|
|
55
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
56
|
+
return {
|
|
57
|
+
default: obj
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
61
|
+
if (cache && cache.has(obj)) {
|
|
62
|
+
return cache.get(obj);
|
|
63
|
+
}
|
|
64
|
+
var newObj = {
|
|
65
|
+
__proto__: null
|
|
66
|
+
};
|
|
67
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
68
|
+
for(var key in obj){
|
|
69
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
70
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
71
|
+
if (desc && (desc.get || desc.set)) {
|
|
72
|
+
Object.defineProperty(newObj, key, desc);
|
|
73
|
+
} else {
|
|
74
|
+
newObj[key] = obj[key];
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
newObj.default = obj;
|
|
79
|
+
if (cache) {
|
|
80
|
+
cache.set(obj, newObj);
|
|
81
|
+
}
|
|
82
|
+
return newObj;
|
|
83
|
+
}
|
|
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 } = {}) {
|
|
44
88
|
try {
|
|
89
|
+
var _browserslist_findConfig;
|
|
90
|
+
var _result_opts_from;
|
|
91
|
+
let resolvedBrowsersListConfig = (_browserslist_findConfig = _browserslist.default.findConfig((_result_opts_from = result.opts.from) !== null && _result_opts_from !== void 0 ? _result_opts_from : process.cwd())) === null || _browserslist_findConfig === void 0 ? void 0 : _browserslist_findConfig.defaults;
|
|
92
|
+
let defaultBrowsersListConfig = _packagejson.default.browserslist;
|
|
93
|
+
let browsersListConfig = resolvedBrowsersListConfig !== null && resolvedBrowsersListConfig !== void 0 ? resolvedBrowsersListConfig : defaultBrowsersListConfig;
|
|
45
94
|
let transformed = _lightningcss.default.transform({
|
|
46
|
-
filename: result.opts.from ||
|
|
47
|
-
code: Buffer.from(result.css,
|
|
95
|
+
filename: result.opts.from || 'input.css',
|
|
96
|
+
code: Buffer.from(result.css, 'utf-8'),
|
|
48
97
|
minify,
|
|
49
98
|
sourceMap: result.map === undefined ? map : !!result.map,
|
|
50
99
|
inputSourceMap: result.map ? result.map.toString() : undefined,
|
|
51
|
-
targets: _lightningcss.default.browserslistToTargets((0, _browserslist.default)(
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
100
|
+
targets: _lightningcss.default.browserslistToTargets((0, _browserslist.default)(browsersListConfig)),
|
|
101
|
+
include: _lightningcss.Features.Nesting,
|
|
102
|
+
exclude: _lightningcss.Features.LogicalProperties
|
|
55
103
|
});
|
|
56
104
|
return Object.assign(result, {
|
|
57
|
-
css: transformed.code.toString(
|
|
105
|
+
css: transformed.code.toString(),
|
|
58
106
|
map: result.map ? Object.assign(result.map, {
|
|
59
107
|
toString () {
|
|
60
108
|
var _transformed_map;
|
|
@@ -63,7 +111,7 @@ async function lightningcss(result, { map =true , minify =true } = {}) {
|
|
|
63
111
|
}) : result.map
|
|
64
112
|
});
|
|
65
113
|
} catch (err) {
|
|
66
|
-
console.error(
|
|
114
|
+
console.error('Unable to use Lightning CSS. Using raw version instead.');
|
|
67
115
|
console.error(err);
|
|
68
116
|
return result;
|
|
69
117
|
}
|
|
@@ -77,8 +125,8 @@ async function lightningcss(result, { map =true , minify =true } = {}) {
|
|
|
77
125
|
let file = _path.default.resolve(customPostCssPath);
|
|
78
126
|
// Implementation, see: https://unpkg.com/browse/postcss-load-config@3.1.0/src/index.js
|
|
79
127
|
// @ts-ignore
|
|
80
|
-
let { config ={}
|
|
81
|
-
if (typeof config ===
|
|
128
|
+
let { config = {} } = await (0, _lilconfig.lilconfig)('postcss').load(file);
|
|
129
|
+
if (typeof config === 'function') {
|
|
82
130
|
config = config();
|
|
83
131
|
} else {
|
|
84
132
|
config = Object.assign({}, config);
|
|
@@ -94,10 +142,10 @@ async function lightningcss(result, { map =true , minify =true } = {}) {
|
|
|
94
142
|
})() : await (0, _postcssloadconfig.default)();
|
|
95
143
|
let configPlugins = config.plugins;
|
|
96
144
|
let configPluginTailwindIdx = configPlugins.findIndex((plugin)=>{
|
|
97
|
-
if (typeof plugin ===
|
|
145
|
+
if (typeof plugin === 'function' && plugin.name === 'tailwindcss') {
|
|
98
146
|
return true;
|
|
99
147
|
}
|
|
100
|
-
if (typeof plugin ===
|
|
148
|
+
if (typeof plugin === 'object' && plugin !== null && plugin.postcssPlugin === 'tailwindcss') {
|
|
101
149
|
return true;
|
|
102
150
|
}
|
|
103
151
|
return false;
|
|
@@ -154,9 +202,9 @@ let state = {
|
|
|
154
202
|
},
|
|
155
203
|
refreshConfigDependencies () {
|
|
156
204
|
var _this_configBag;
|
|
157
|
-
_sharedState.env.DEBUG && console.time(
|
|
205
|
+
_sharedState.env.DEBUG && console.time('Module dependencies');
|
|
158
206
|
(_this_configBag = this.configBag) === null || _this_configBag === void 0 ? void 0 : _this_configBag.dispose();
|
|
159
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
207
|
+
_sharedState.env.DEBUG && console.timeEnd('Module dependencies');
|
|
160
208
|
},
|
|
161
209
|
readContentPaths () {
|
|
162
210
|
let content = [];
|
|
@@ -164,23 +212,23 @@ let state = {
|
|
|
164
212
|
// TODO: When we make the postcss plugin async-capable this can become async
|
|
165
213
|
let files = _fastglob.default.sync(this.contentPatterns.all);
|
|
166
214
|
for (let file of files){
|
|
167
|
-
if ((0, _featureFlags.flagEnabled)(this.config,
|
|
215
|
+
if ((0, _featureFlags.flagEnabled)(this.config, 'oxideParser')) {
|
|
168
216
|
content.push({
|
|
169
217
|
file,
|
|
170
218
|
extension: _path.default.extname(file).slice(1)
|
|
171
219
|
});
|
|
172
220
|
} else {
|
|
173
221
|
content.push({
|
|
174
|
-
content: _fs.default.readFileSync(_path.default.resolve(file),
|
|
222
|
+
content: _fs.default.readFileSync(_path.default.resolve(file), 'utf8'),
|
|
175
223
|
extension: _path.default.extname(file).slice(1)
|
|
176
224
|
});
|
|
177
225
|
}
|
|
178
226
|
}
|
|
179
227
|
// Resolve raw content in the tailwind config
|
|
180
228
|
let rawContent = this.config.content.files.filter((file)=>{
|
|
181
|
-
return file !== null && typeof file ===
|
|
229
|
+
return file !== null && typeof file === 'object';
|
|
182
230
|
});
|
|
183
|
-
for (let { raw: htmlContent
|
|
231
|
+
for (let { raw: htmlContent, extension = 'html' } of rawContent){
|
|
184
232
|
content.push({
|
|
185
233
|
content: htmlContent,
|
|
186
234
|
extension
|
|
@@ -188,31 +236,31 @@ let state = {
|
|
|
188
236
|
}
|
|
189
237
|
return content;
|
|
190
238
|
},
|
|
191
|
-
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');
|
|
192
244
|
if (this.context) {
|
|
193
245
|
this.context.changedContent = this.changedContent.splice(0);
|
|
194
246
|
return this.context;
|
|
195
247
|
}
|
|
196
|
-
_sharedState.env.DEBUG && console.time(
|
|
197
|
-
var _findAtConfigPath1;
|
|
198
|
-
let configPath = (_findAtConfigPath1 = (0, _findAtConfigPath.findAtConfigPath)(root, result)) !== null && _findAtConfigPath1 !== void 0 ? _findAtConfigPath1 : cliConfigPath;
|
|
199
|
-
_sharedState.env.DEBUG && console.timeEnd("Searching for config");
|
|
200
|
-
_sharedState.env.DEBUG && console.time("Loading config");
|
|
248
|
+
_sharedState.env.DEBUG && console.time('Loading config');
|
|
201
249
|
let config = this.loadConfig(configPath, content);
|
|
202
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
203
|
-
_sharedState.env.DEBUG && console.time(
|
|
250
|
+
_sharedState.env.DEBUG && console.timeEnd('Loading config');
|
|
251
|
+
_sharedState.env.DEBUG && console.time('Creating context');
|
|
204
252
|
this.context = createContext(config, []);
|
|
205
253
|
Object.assign(this.context, {
|
|
206
254
|
userConfigPath: configPath
|
|
207
255
|
});
|
|
208
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
209
|
-
_sharedState.env.DEBUG && console.time(
|
|
256
|
+
_sharedState.env.DEBUG && console.timeEnd('Creating context');
|
|
257
|
+
_sharedState.env.DEBUG && console.time('Resolving content paths');
|
|
210
258
|
this.refreshContentPaths();
|
|
211
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
259
|
+
_sharedState.env.DEBUG && console.timeEnd('Resolving content paths');
|
|
212
260
|
if (this.watcher) {
|
|
213
|
-
_sharedState.env.DEBUG && console.time(
|
|
261
|
+
_sharedState.env.DEBUG && console.time('Watch new files');
|
|
214
262
|
this.watcher.refreshWatchedFiles();
|
|
215
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
263
|
+
_sharedState.env.DEBUG && console.timeEnd('Watch new files');
|
|
216
264
|
}
|
|
217
265
|
for (let file of this.readContentPaths()){
|
|
218
266
|
this.context.changedContent.push(file);
|
|
@@ -222,35 +270,35 @@ let state = {
|
|
|
222
270
|
};
|
|
223
271
|
async function createProcessor(args, cliConfigPath) {
|
|
224
272
|
var _args_content;
|
|
225
|
-
let input = args[
|
|
226
|
-
let output = args[
|
|
227
|
-
let includePostCss = args[
|
|
228
|
-
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;
|
|
229
277
|
let [beforePlugins, afterPlugins, postcssOptions] = includePostCss ? await loadPostCssPlugins(customPostCssPath) : [
|
|
230
278
|
[],
|
|
231
279
|
[],
|
|
232
280
|
{}
|
|
233
281
|
];
|
|
234
282
|
beforePlugins.unshift(...(0, _handleImportAtRules.handleImportAtRules)());
|
|
235
|
-
if (args[
|
|
236
|
-
_log.default.warn(
|
|
237
|
-
|
|
238
|
-
|
|
283
|
+
if (args['--purge']) {
|
|
284
|
+
_log.default.warn('purge-flag-deprecated', [
|
|
285
|
+
'The `--purge` flag has been deprecated.',
|
|
286
|
+
'Please use `--content` instead.'
|
|
239
287
|
]);
|
|
240
|
-
if (!args[
|
|
241
|
-
args[
|
|
288
|
+
if (!args['--content']) {
|
|
289
|
+
args['--content'] = args['--purge'];
|
|
242
290
|
}
|
|
243
291
|
}
|
|
244
292
|
var _args_content_split;
|
|
245
|
-
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 : [];
|
|
246
294
|
let tailwindPlugin = ()=>{
|
|
247
295
|
return {
|
|
248
|
-
postcssPlugin:
|
|
249
|
-
Once (root, { result
|
|
250
|
-
_sharedState.env.DEBUG && console.time(
|
|
251
|
-
(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 })=>{
|
|
252
300
|
console.error();
|
|
253
|
-
console.error(
|
|
301
|
+
console.error('Rebuilding...');
|
|
254
302
|
return ()=>{
|
|
255
303
|
return state.getContext({
|
|
256
304
|
createContext,
|
|
@@ -261,7 +309,7 @@ async function createProcessor(args, cliConfigPath) {
|
|
|
261
309
|
});
|
|
262
310
|
};
|
|
263
311
|
})(root, result);
|
|
264
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
312
|
+
_sharedState.env.DEBUG && console.timeEnd('Compiling CSS');
|
|
265
313
|
}
|
|
266
314
|
};
|
|
267
315
|
};
|
|
@@ -269,22 +317,22 @@ async function createProcessor(args, cliConfigPath) {
|
|
|
269
317
|
let plugins = [
|
|
270
318
|
...beforePlugins,
|
|
271
319
|
tailwindPlugin,
|
|
272
|
-
!args[
|
|
320
|
+
!args['--minify'] && _utils.formatNodes,
|
|
273
321
|
...afterPlugins
|
|
274
322
|
].filter(Boolean);
|
|
275
323
|
/** @type {import('postcss').Processor} */ // @ts-ignore
|
|
276
324
|
let processor = (0, _postcss.default)(plugins);
|
|
277
325
|
async function readInput() {
|
|
278
326
|
// Piping in data, let's drain the stdin
|
|
279
|
-
if (input ===
|
|
327
|
+
if (input === '-') {
|
|
280
328
|
return (0, _utils.drainStdin)();
|
|
281
329
|
}
|
|
282
330
|
// Input file has been provided
|
|
283
331
|
if (input) {
|
|
284
|
-
return _fs.default.promises.readFile(_path.default.resolve(input),
|
|
332
|
+
return _fs.default.promises.readFile(_path.default.resolve(input), 'utf8');
|
|
285
333
|
}
|
|
286
334
|
// No input file provided, fallback to default atrules
|
|
287
|
-
return
|
|
335
|
+
return '@tailwind base; @tailwind components; @tailwind utilities';
|
|
288
336
|
}
|
|
289
337
|
async function build() {
|
|
290
338
|
let start = process.hrtime.bigint();
|
|
@@ -295,36 +343,36 @@ async function createProcessor(args, cliConfigPath) {
|
|
|
295
343
|
};
|
|
296
344
|
return readInput().then((css)=>processor.process(css, options)).then((result)=>lightningcss(result, {
|
|
297
345
|
...options,
|
|
298
|
-
minify: !!args[
|
|
346
|
+
minify: !!args['--minify']
|
|
299
347
|
})).then((result)=>{
|
|
300
348
|
if (!state.watcher) {
|
|
301
349
|
return result;
|
|
302
350
|
}
|
|
303
|
-
_sharedState.env.DEBUG && console.time(
|
|
351
|
+
_sharedState.env.DEBUG && console.time('Recording PostCSS dependencies');
|
|
304
352
|
for (let message of result.messages){
|
|
305
|
-
if (message.type ===
|
|
353
|
+
if (message.type === 'dependency') {
|
|
306
354
|
state.contextDependencies.add(message.file);
|
|
307
355
|
}
|
|
308
356
|
}
|
|
309
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
357
|
+
_sharedState.env.DEBUG && console.timeEnd('Recording PostCSS dependencies');
|
|
310
358
|
// TODO: This needs to be in a different spot
|
|
311
|
-
_sharedState.env.DEBUG && console.time(
|
|
359
|
+
_sharedState.env.DEBUG && console.time('Watch new files');
|
|
312
360
|
state.watcher.refreshWatchedFiles();
|
|
313
|
-
_sharedState.env.DEBUG && console.timeEnd(
|
|
361
|
+
_sharedState.env.DEBUG && console.timeEnd('Watch new files');
|
|
314
362
|
return result;
|
|
315
363
|
}).then((result)=>{
|
|
316
364
|
if (!output) {
|
|
317
|
-
process.stdout.write(result.css);
|
|
365
|
+
process.stdout.write(license() + result.css);
|
|
318
366
|
return;
|
|
319
367
|
}
|
|
320
368
|
return Promise.all([
|
|
321
|
-
(0, _utils.outputFile)(result.opts.to, result.css),
|
|
322
|
-
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())
|
|
323
371
|
]);
|
|
324
372
|
}).then(()=>{
|
|
325
373
|
let end = process.hrtime.bigint();
|
|
326
374
|
console.error();
|
|
327
|
-
console.error(
|
|
375
|
+
console.error('Done in', (end - start) / BigInt(1e6) + 'ms.');
|
|
328
376
|
}).then(()=>{}, (err)=>{
|
|
329
377
|
// TODO: If an initial build fails we can't easily pick up any PostCSS dependencies
|
|
330
378
|
// that were collected before the error occurred
|
|
@@ -350,7 +398,7 @@ async function createProcessor(args, cliConfigPath) {
|
|
|
350
398
|
extension: change.extension
|
|
351
399
|
})));
|
|
352
400
|
}
|
|
353
|
-
if (input !== undefined && input !==
|
|
401
|
+
if (input !== undefined && input !== '-') {
|
|
354
402
|
state.contextDependencies.add(_path.default.resolve(input));
|
|
355
403
|
}
|
|
356
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
|
}
|