tailwindcss 0.0.0-insiders.cb8af0c → 0.0.0-insiders.cb9c64a

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.
Files changed (187) hide show
  1. package/README.md +1 -1
  2. package/index.css +5 -0
  3. package/lib/cli/build/index.js +48 -12
  4. package/lib/cli/build/plugin.js +340 -106
  5. package/lib/cli/build/utils.js +59 -27
  6. package/lib/cli/build/watching.js +156 -39
  7. package/lib/cli/help/index.js +62 -17
  8. package/lib/cli/index.js +157 -97
  9. package/lib/cli/init/index.js +49 -25
  10. package/lib/cli.js +1 -1
  11. package/lib/corePluginList.js +11 -5
  12. package/lib/corePlugins.js +2583 -2047
  13. package/lib/css/preflight.css +24 -7
  14. package/lib/featureFlags.js +57 -31
  15. package/lib/index.js +1 -1
  16. package/lib/lib/cacheInvalidation.js +80 -30
  17. package/lib/lib/collapseAdjacentRules.js +50 -25
  18. package/lib/lib/collapseDuplicateDeclarations.js +72 -26
  19. package/lib/lib/content.js +160 -41
  20. package/lib/lib/defaultExtractor.js +224 -107
  21. package/lib/lib/detectNesting.js +39 -13
  22. package/lib/lib/evaluateTailwindFunctions.js +197 -108
  23. package/lib/lib/expandApplyAtRules.js +494 -181
  24. package/lib/lib/expandTailwindAtRules.js +276 -94
  25. package/lib/lib/findAtConfigPath.js +34 -15
  26. package/lib/lib/generateRules.js +798 -364
  27. package/lib/lib/getModuleDependencies.js +88 -50
  28. package/lib/lib/handleImportAtRules.js +50 -0
  29. package/lib/lib/load-config.js +39 -18
  30. package/lib/lib/normalizeTailwindDirectives.js +61 -30
  31. package/lib/lib/offsets.js +245 -80
  32. package/lib/lib/partitionApplyAtRules.js +53 -29
  33. package/lib/lib/regex.js +52 -30
  34. package/lib/lib/remap-bitfield.js +86 -9
  35. package/lib/lib/resolveDefaultsAtRules.js +133 -63
  36. package/lib/lib/setupContextUtils.js +1153 -606
  37. package/lib/lib/setupTrackingContext.js +150 -58
  38. package/lib/lib/sharedState.js +69 -29
  39. package/lib/lib/substituteScreenAtRules.js +21 -11
  40. package/lib/plugin.js +146 -14
  41. package/lib/postcss-plugins/nesting/index.js +14 -8
  42. package/lib/postcss-plugins/nesting/plugin.js +68 -23
  43. package/lib/processTailwindFeatures.js +44 -13
  44. package/lib/public/colors.js +289 -280
  45. package/lib/public/create-plugin.js +11 -6
  46. package/lib/public/default-config.js +12 -6
  47. package/lib/public/default-theme.js +12 -6
  48. package/lib/public/load-config.js +9 -5
  49. package/lib/public/resolve-config.js +10 -6
  50. package/lib/util/applyImportantSelector.js +28 -17
  51. package/lib/util/bigSign.js +9 -6
  52. package/lib/util/buildMediaQuery.js +20 -11
  53. package/lib/util/cloneDeep.js +19 -9
  54. package/lib/util/cloneNodes.js +51 -16
  55. package/lib/util/color.js +91 -51
  56. package/lib/util/colorNames.js +752 -0
  57. package/lib/util/configurePlugins.js +18 -9
  58. package/lib/util/createPlugin.js +17 -8
  59. package/lib/util/createUtilityPlugin.js +31 -17
  60. package/lib/util/dataTypes.js +347 -85
  61. package/lib/util/defaults.js +21 -9
  62. package/lib/util/escapeClassName.js +15 -9
  63. package/lib/util/escapeCommas.js +10 -7
  64. package/lib/util/flattenColorPalette.js +11 -7
  65. package/lib/util/formatVariantSelector.js +221 -65
  66. package/lib/util/getAllConfigs.js +44 -35
  67. package/lib/util/hashConfig.js +12 -8
  68. package/lib/util/isKeyframeRule.js +10 -7
  69. package/lib/util/isPlainObject.js +14 -9
  70. package/lib/util/isSyntacticallyValidPropertyValue.js +52 -21
  71. package/lib/util/log.js +40 -12
  72. package/lib/util/nameClass.js +31 -10
  73. package/lib/util/negateValue.js +33 -15
  74. package/lib/util/normalizeConfig.js +281 -74
  75. package/lib/util/normalizeScreens.js +147 -72
  76. package/lib/util/parseAnimationValue.js +84 -34
  77. package/lib/util/parseBoxShadowValue.js +68 -19
  78. package/lib/util/parseDependency.js +40 -14
  79. package/lib/util/parseGlob.js +25 -8
  80. package/lib/util/parseObjectStyles.js +29 -18
  81. package/lib/util/pluginUtils.js +215 -85
  82. package/lib/util/prefixSelector.js +31 -12
  83. package/lib/util/pseudoElements.js +172 -110
  84. package/lib/util/removeAlphaVariables.js +23 -8
  85. package/lib/util/resolveConfig.js +233 -107
  86. package/lib/util/resolveConfigPath.js +49 -19
  87. package/lib/util/responsive.js +11 -7
  88. package/lib/util/splitAtTopLevelOnly.js +46 -10
  89. package/lib/util/tap.js +11 -7
  90. package/lib/util/toColorValue.js +10 -7
  91. package/lib/util/toPath.js +28 -8
  92. package/lib/util/transformThemeValue.js +64 -29
  93. package/lib/util/validateConfig.js +38 -17
  94. package/lib/util/validateFormalSyntax.js +18 -10
  95. package/lib/util/withAlphaVariable.js +56 -32
  96. package/lib/value-parser/LICENSE +22 -0
  97. package/lib/value-parser/README.md +3 -0
  98. package/lib/value-parser/index.d.js +2 -0
  99. package/lib/value-parser/index.js +22 -0
  100. package/lib/value-parser/parse.js +259 -0
  101. package/lib/value-parser/stringify.js +38 -0
  102. package/lib/value-parser/unit.js +86 -0
  103. package/lib/value-parser/walk.js +16 -0
  104. package/nesting/index.d.ts +4 -0
  105. package/package.json +47 -59
  106. package/resolveConfig.d.ts +22 -3
  107. package/scripts/generate-types.js +1 -2
  108. package/scripts/release-notes.js +1 -1
  109. package/src/cli/build/index.js +4 -0
  110. package/src/cli/build/plugin.js +74 -52
  111. package/src/cli/build/watching.js +1 -1
  112. package/src/cli/index.js +1 -0
  113. package/src/cli.js +1 -5
  114. package/src/corePluginList.js +1 -1
  115. package/src/corePlugins.js +68 -19
  116. package/src/css/preflight.css +24 -7
  117. package/src/featureFlags.js +7 -13
  118. package/src/lib/content.js +33 -1
  119. package/src/lib/defaultExtractor.js +30 -17
  120. package/src/lib/evaluateTailwindFunctions.js +4 -1
  121. package/src/lib/expandApplyAtRules.js +7 -0
  122. package/src/lib/expandTailwindAtRules.js +76 -33
  123. package/src/lib/generateRules.js +42 -33
  124. package/src/lib/handleImportAtRules.js +34 -0
  125. package/src/lib/load-config.ts +8 -0
  126. package/src/lib/normalizeTailwindDirectives.js +0 -27
  127. package/src/lib/offsets.js +3 -3
  128. package/src/lib/setupContextUtils.js +58 -50
  129. package/src/lib/setupTrackingContext.js +2 -4
  130. package/src/lib/sharedState.js +0 -4
  131. package/src/plugin.js +86 -60
  132. package/src/processTailwindFeatures.js +3 -2
  133. package/src/util/cloneNodes.js +35 -14
  134. package/src/util/color.js +2 -2
  135. package/src/util/colorNames.js +150 -0
  136. package/src/util/dataTypes.js +135 -24
  137. package/src/util/formatVariantSelector.js +11 -3
  138. package/src/util/isPlainObject.js +1 -1
  139. package/src/util/log.js +24 -0
  140. package/src/util/normalizeConfig.js +38 -11
  141. package/src/util/pluginUtils.js +16 -4
  142. package/src/util/prefixSelector.js +1 -0
  143. package/src/util/pseudoElements.js +14 -17
  144. package/src/util/resolveConfig.js +42 -24
  145. package/src/util/validateConfig.js +10 -0
  146. package/src/value-parser/LICENSE +22 -0
  147. package/src/value-parser/README.md +3 -0
  148. package/src/value-parser/index.d.ts +177 -0
  149. package/src/value-parser/index.js +28 -0
  150. package/src/value-parser/parse.js +303 -0
  151. package/src/value-parser/stringify.js +41 -0
  152. package/src/value-parser/unit.js +118 -0
  153. package/src/value-parser/walk.js +18 -0
  154. package/stubs/config.full.js +87 -15
  155. package/stubs/config.simple.js +1 -1
  156. package/stubs/postcss.config.cjs +0 -1
  157. package/stubs/postcss.config.js +0 -1
  158. package/types/config.d.ts +14 -10
  159. package/types/generated/corePluginList.d.ts +1 -1
  160. package/types/generated/default-theme.d.ts +35 -9
  161. package/types/index.d.ts +7 -3
  162. package/lib/cli/build/deps.js +0 -46
  163. package/lib/cli-peer-dependencies.js +0 -26
  164. package/lib/oxide/cli/build/deps.js +0 -66
  165. package/lib/oxide/cli/build/index.js +0 -21
  166. package/lib/oxide/cli/build/plugin.js +0 -193
  167. package/lib/oxide/cli/build/utils.js +0 -56
  168. package/lib/oxide/cli/build/watching.js +0 -63
  169. package/lib/oxide/cli/help/index.js +0 -28
  170. package/lib/oxide/cli/index.js +0 -153
  171. package/lib/oxide/cli/init/index.js +0 -31
  172. package/lib/oxide/cli.js +0 -4
  173. package/lib/oxide/postcss-plugin.js +0 -2
  174. package/peers/index.js +0 -79459
  175. package/scripts/swap-engines.js +0 -40
  176. package/src/cli/build/deps.js +0 -56
  177. package/src/cli-peer-dependencies.js +0 -15
  178. package/src/oxide/cli/build/deps.ts +0 -91
  179. package/src/oxide/cli/build/index.ts +0 -47
  180. package/src/oxide/cli/build/plugin.ts +0 -442
  181. package/src/oxide/cli/build/utils.ts +0 -74
  182. package/src/oxide/cli/build/watching.ts +0 -225
  183. package/src/oxide/cli/help/index.ts +0 -69
  184. package/src/oxide/cli/index.ts +0 -204
  185. package/src/oxide/cli/init/index.ts +0 -59
  186. package/src/oxide/cli.ts +0 -1
  187. package/src/oxide/postcss-plugin.ts +0 -1
package/README.md CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
 
16
16
  <p align="center">
17
- <a href="https://github.com/tailwindlabs/tailwindcss/actions"><img src="https://img.shields.io/github/actions/workflow/status/tailwindlabs/tailwindcss/ci-stable.yml?branch=master" alt="Build Status"></a>
17
+ <a href="https://github.com/tailwindlabs/tailwindcss/actions"><img src="https://img.shields.io/github/actions/workflow/status/tailwindlabs/tailwindcss/ci.yml?branch=master" alt="Build Status"></a>
18
18
  <a href="https://www.npmjs.com/package/tailwindcss"><img src="https://img.shields.io/npm/dt/tailwindcss.svg" alt="Total Downloads"></a>
19
19
  <a href="https://github.com/tailwindcss/tailwindcss/releases"><img src="https://img.shields.io/npm/v/tailwindcss.svg" alt="Latest Release"></a>
20
20
  <a href="https://github.com/tailwindcss/tailwindcss/blob/master/LICENSE"><img src="https://img.shields.io/npm/l/tailwindcss.svg" alt="License"></a>
package/index.css ADDED
@@ -0,0 +1,5 @@
1
+ @tailwind base;
2
+
3
+ @tailwind components;
4
+
5
+ @tailwind utilities;
@@ -1,21 +1,57 @@
1
+ // @ts-check
1
2
  "use strict";
2
3
  Object.defineProperty(exports, "__esModule", {
3
- value: !0
4
- }), Object.defineProperty(exports, "build", {
5
- enumerable: !0,
6
- get: ()=>build
4
+ value: true
7
5
  });
8
- const _fs = _interopRequireDefault(require("fs")), _path = _interopRequireDefault(require("path")), _resolveConfigPathJs = require("../../util/resolveConfigPath.js"), _pluginJs = require("./plugin.js");
9
- function _interopRequireDefault(obj) {
6
+ Object.defineProperty(exports, "build", {
7
+ enumerable: true,
8
+ get: function() {
9
+ return build;
10
+ }
11
+ });
12
+ const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
13
+ const _path = /*#__PURE__*/ _interop_require_default(require("path"));
14
+ const _resolveConfigPath = require("../../util/resolveConfigPath.js");
15
+ const _plugin = require("./plugin.js");
16
+ function _interop_require_default(obj) {
10
17
  return obj && obj.__esModule ? obj : {
11
18
  default: obj
12
19
  };
13
20
  }
14
21
  async function build(args) {
15
- let input = args["--input"], shouldWatch = args["--watch"];
16
- !input && args._[1] && (console.error("[deprecation] Running tailwindcss without -i, please provide an input file."), input = args["--input"] = args._[1]), input && "-" !== input && !_fs.default.existsSync(input = _path.default.resolve(input)) && (console.error(`Specified input file ${args["--input"]} does not exist.`), process.exit(9)), args["--config"] && !_fs.default.existsSync(args["--config"] = _path.default.resolve(args["--config"])) && (console.error(`Specified config file ${args["--config"]} does not exist.`), process.exit(9));
17
- let processor = await (0, _pluginJs.createProcessor)(args, args["--config"] ? args["--config"] : (0, _resolveConfigPathJs.resolveDefaultConfigPath)());
18
- shouldWatch ? ("always" !== args["--watch"] && process.stdin.on("end", ()=>process.exit(0)), process.stdin.resume(), await processor.watch()) : await processor.build().catch((e)=>{
19
- console.error(e), process.exit(1);
20
- });
22
+ let input = args['--input'];
23
+ let shouldWatch = args['--watch'];
24
+ // TODO: Deprecate this in future versions
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
+ }
29
+ if (input && input !== '-' && !_fs.default.existsSync(input = _path.default.resolve(input))) {
30
+ console.error(`Specified input file ${args['--input']} does not exist.`);
31
+ process.exit(9);
32
+ }
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
+ process.exit(9);
36
+ }
37
+ if (args['--no-autoprefixer']) {
38
+ console.error('[deprecation] The --no-autoprefixer flag is deprecated and has no effect.');
39
+ }
40
+ // TODO: Reference the @config path here if exists
41
+ let configPath = args['--config'] ? args['--config'] : (0, _resolveConfigPath.resolveDefaultConfigPath)();
42
+ let processor = await (0, _plugin.createProcessor)(args, configPath);
43
+ if (shouldWatch) {
44
+ // Abort the watcher if stdin is closed to avoid zombie processes
45
+ // You can disable this behavior with --watch=always
46
+ if (args['--watch'] !== 'always') {
47
+ process.stdin.on('end', ()=>process.exit(0));
48
+ }
49
+ process.stdin.resume();
50
+ await processor.watch();
51
+ } else {
52
+ await processor.build().catch((e)=>{
53
+ console.error(e);
54
+ process.exit(1);
55
+ });
56
+ }
21
57
  }
@@ -1,41 +1,173 @@
1
+ // @ts-check
1
2
  "use strict";
2
3
  Object.defineProperty(exports, "__esModule", {
3
- value: !0
4
- }), Object.defineProperty(exports, "createProcessor", {
5
- enumerable: !0,
6
- get: ()=>createProcessor
4
+ value: true
7
5
  });
8
- const _path = _interopRequireDefault(require("path")), _fs = _interopRequireDefault(require("fs")), _postcssLoadConfig = _interopRequireDefault(require("postcss-load-config")), _lilconfig = require("lilconfig"), _plugins = _interopRequireDefault(require("postcss-load-config/src/plugins")), _options = _interopRequireDefault(require("postcss-load-config/src/options")), _processTailwindFeatures = _interopRequireDefault(require("../../processTailwindFeatures")), _deps = require("./deps"), _utils = require("./utils"), _sharedState = require("../../lib/sharedState"), _resolveConfigJs = _interopRequireDefault(require("../../../resolveConfig.js")), _contentJs = require("../../lib/content.js"), _watchingJs = require("./watching.js"), _fastGlob = _interopRequireDefault(require("fast-glob")), _findAtConfigPathJs = require("../../lib/findAtConfigPath.js"), _log = _interopRequireDefault(require("../../util/log")), _loadConfig = require("../../lib/load-config"), _getModuleDependencies = _interopRequireDefault(require("../../lib/getModuleDependencies"));
9
- function _interopRequireDefault(obj) {
6
+ Object.defineProperty(exports, "createProcessor", {
7
+ enumerable: true,
8
+ get: function() {
9
+ return createProcessor;
10
+ }
11
+ });
12
+ const _packagejson = /*#__PURE__*/ _interop_require_default(require("../../../package.json"));
13
+ const _path = /*#__PURE__*/ _interop_require_default(require("path"));
14
+ const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
15
+ const _postcss = /*#__PURE__*/ _interop_require_default(require("postcss"));
16
+ const _postcssloadconfig = /*#__PURE__*/ _interop_require_default(require("postcss-load-config"));
17
+ const _browserslist = /*#__PURE__*/ _interop_require_default(require("browserslist"));
18
+ const _lightningcss = /*#__PURE__*/ _interop_require_wildcard(require("lightningcss"));
19
+ const _lilconfig = require("lilconfig");
20
+ const _plugins = /*#__PURE__*/ _interop_require_default(require("postcss-load-config/src/plugins" // Little bit scary, looking at private/internal API
21
+ ));
22
+ const _options = /*#__PURE__*/ _interop_require_default(require("postcss-load-config/src/options" // Little bit scary, looking at private/internal API
23
+ ));
24
+ const _processTailwindFeatures = /*#__PURE__*/ _interop_require_default(require("../../processTailwindFeatures"));
25
+ const _utils = require("./utils");
26
+ const _sharedState = require("../../lib/sharedState");
27
+ const _resolveConfig = /*#__PURE__*/ _interop_require_default(require("../../../resolveConfig.js"));
28
+ const _content = require("../../lib/content.js");
29
+ const _watching = require("./watching.js");
30
+ const _fastglob = /*#__PURE__*/ _interop_require_default(require("fast-glob"));
31
+ const _findAtConfigPath = require("../../lib/findAtConfigPath.js");
32
+ const _log = /*#__PURE__*/ _interop_require_default(require("../../util/log"));
33
+ const _loadconfig = require("../../lib/load-config");
34
+ const _getModuleDependencies = /*#__PURE__*/ _interop_require_default(require("../../lib/getModuleDependencies"));
35
+ const _validateConfig = require("../../util/validateConfig");
36
+ const _handleImportAtRules = require("../../lib/handleImportAtRules");
37
+ const _featureFlags = require("../../featureFlags");
38
+ function _interop_require_default(obj) {
10
39
  return obj && obj.__esModule ? obj : {
11
40
  default: obj
12
41
  };
13
42
  }
14
- async function loadPostCssPlugins(customPostCssPath) {
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 } = {}) {
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;
94
+ let transformed = _lightningcss.default.transform({
95
+ filename: result.opts.from || 'input.css',
96
+ code: Buffer.from(result.css, 'utf-8'),
97
+ minify,
98
+ sourceMap: result.map === undefined ? map : !!result.map,
99
+ inputSourceMap: result.map ? result.map.toString() : undefined,
100
+ targets: _lightningcss.default.browserslistToTargets((0, _browserslist.default)(browsersListConfig)),
101
+ include: _lightningcss.Features.Nesting,
102
+ exclude: _lightningcss.Features.LogicalProperties
103
+ });
104
+ return Object.assign(result, {
105
+ css: transformed.code.toString(),
106
+ map: result.map ? Object.assign(result.map, {
107
+ toString () {
108
+ var _transformed_map;
109
+ return (_transformed_map = transformed.map) === null || _transformed_map === void 0 ? void 0 : _transformed_map.toString();
110
+ }
111
+ }) : result.map
112
+ });
113
+ } catch (err) {
114
+ console.error('Unable to use Lightning CSS. Using raw version instead.');
115
+ console.error(err);
116
+ return result;
117
+ }
118
+ }
119
+ /**
120
+ *
121
+ * @param {string} [customPostCssPath ]
122
+ * @returns
123
+ */ async function loadPostCssPlugins(customPostCssPath) {
15
124
  let config = customPostCssPath ? await (async ()=>{
16
- let file = _path.default.resolve(customPostCssPath), { config ={} } = await (0, _lilconfig.lilconfig)("postcss").load(file);
17
- return (config = "function" == typeof config ? config() : Object.assign({}, config)).plugins || (config.plugins = []), {
125
+ let file = _path.default.resolve(customPostCssPath);
126
+ // Implementation, see: https://unpkg.com/browse/postcss-load-config@3.1.0/src/index.js
127
+ // @ts-ignore
128
+ let { config = {} } = await (0, _lilconfig.lilconfig)('postcss').load(file);
129
+ if (typeof config === 'function') {
130
+ config = config();
131
+ } else {
132
+ config = Object.assign({}, config);
133
+ }
134
+ if (!config.plugins) {
135
+ config.plugins = [];
136
+ }
137
+ return {
18
138
  file,
19
139
  plugins: (0, _plugins.default)(config, file),
20
140
  options: (0, _options.default)(config, file)
21
141
  };
22
- })() : await (0, _postcssLoadConfig.default)(), configPlugins = config.plugins, configPluginTailwindIdx = configPlugins.findIndex((plugin)=>"function" == typeof plugin && "tailwindcss" === plugin.name || "object" == typeof plugin && null !== plugin && "tailwindcss" === plugin.postcssPlugin);
142
+ })() : await (0, _postcssloadconfig.default)();
143
+ let configPlugins = config.plugins;
144
+ let configPluginTailwindIdx = configPlugins.findIndex((plugin)=>{
145
+ if (typeof plugin === 'function' && plugin.name === 'tailwindcss') {
146
+ return true;
147
+ }
148
+ if (typeof plugin === 'object' && plugin !== null && plugin.postcssPlugin === 'tailwindcss') {
149
+ return true;
150
+ }
151
+ return false;
152
+ });
153
+ let beforePlugins = configPluginTailwindIdx === -1 ? [] : configPlugins.slice(0, configPluginTailwindIdx);
154
+ let afterPlugins = configPluginTailwindIdx === -1 ? configPlugins : configPlugins.slice(configPluginTailwindIdx + 1);
23
155
  return [
24
- -1 === configPluginTailwindIdx ? [] : configPlugins.slice(0, configPluginTailwindIdx),
25
- -1 === configPluginTailwindIdx ? configPlugins : configPlugins.slice(configPluginTailwindIdx + 1),
156
+ beforePlugins,
157
+ afterPlugins,
26
158
  config.options
27
159
  ];
28
160
  }
29
161
  let state = {
30
- context: null,
31
- watcher: null,
32
- changedContent: [],
33
- configBag: null,
162
+ /** @type {any} */ context: null,
163
+ /** @type {ReturnType<typeof createWatcher> | null} */ watcher: null,
164
+ /** @type {{content: string, extension: string}[]} */ changedContent: [],
165
+ /** @type {{config: import('../../../types').Config, dependencies: Set<string>, dispose: Function } | null} */ configBag: null,
34
166
  contextDependencies: new Set(),
35
- contentPaths: [],
167
+ /** @type {import('../../lib/content.js').ContentPath[]} */ contentPaths: [],
36
168
  refreshContentPaths () {
37
169
  var _this_context;
38
- this.contentPaths = (0, _contentJs.parseCandidateFiles)(this.context, null === (_this_context = this.context) || void 0 === _this_context ? void 0 : _this_context.tailwindConfig);
170
+ this.contentPaths = (0, _content.parseCandidateFiles)(this.context, (_this_context = this.context) === null || _this_context === void 0 ? void 0 : _this_context.tailwindConfig);
39
171
  },
40
172
  get config () {
41
173
  return this.context.tailwindConfig;
@@ -43,153 +175,255 @@ let state = {
43
175
  get contentPatterns () {
44
176
  return {
45
177
  all: this.contentPaths.map((contentPath)=>contentPath.pattern),
46
- dynamic: this.contentPaths.filter((contentPath)=>void 0 !== contentPath.glob).map((contentPath)=>contentPath.pattern)
178
+ dynamic: this.contentPaths.filter((contentPath)=>contentPath.glob !== undefined).map((contentPath)=>contentPath.pattern)
47
179
  };
48
180
  },
49
181
  loadConfig (configPath, content) {
50
- this.watcher && configPath && this.refreshConfigDependencies();
51
- let config = (0, _loadConfig.loadConfig)(configPath), dependencies = (0, _getModuleDependencies.default)(configPath);
52
- return this.configBag = {
182
+ if (this.watcher && configPath) {
183
+ this.refreshConfigDependencies();
184
+ }
185
+ let config = (0, _loadconfig.loadConfig)(configPath);
186
+ let dependencies = (0, _getModuleDependencies.default)(configPath);
187
+ this.configBag = {
53
188
  config,
54
189
  dependencies,
55
190
  dispose () {
56
- for (let file of dependencies)delete require.cache[require.resolve(file)];
57
- }
58
- }, this.configBag.config = (0, _resolveConfigJs.default)(this.configBag.config, {
59
- content: {
60
- files: []
191
+ for (let file of dependencies){
192
+ delete require.cache[require.resolve(file)];
193
+ }
61
194
  }
62
- }), (null == content ? void 0 : content.length) > 0 && (this.configBag.config.content.files = content), this.configBag.config;
195
+ };
196
+ this.configBag.config = (0, _validateConfig.validateConfig)((0, _resolveConfig.default)(this.configBag.config));
197
+ // Override content files if `--content` has been passed explicitly
198
+ if ((content === null || content === void 0 ? void 0 : content.length) > 0) {
199
+ this.configBag.config.content.files = content;
200
+ }
201
+ return this.configBag.config;
63
202
  },
64
203
  refreshConfigDependencies () {
65
204
  var _this_configBag;
66
- _sharedState.env.DEBUG && console.time("Module dependencies"), null === (_this_configBag = this.configBag) || void 0 === _this_configBag || _this_configBag.dispose(), _sharedState.env.DEBUG && console.timeEnd("Module dependencies");
205
+ _sharedState.env.DEBUG && console.time('Module dependencies');
206
+ (_this_configBag = this.configBag) === null || _this_configBag === void 0 ? void 0 : _this_configBag.dispose();
207
+ _sharedState.env.DEBUG && console.timeEnd('Module dependencies');
67
208
  },
68
209
  readContentPaths () {
69
210
  let content = [];
70
- for (let file of _fastGlob.default.sync(this.contentPatterns.all))content.push({
71
- content: _fs.default.readFileSync(_path.default.resolve(file), "utf8"),
72
- extension: _path.default.extname(file).slice(1)
73
- });
74
- for (let { raw: htmlContent , extension ="html" } of this.config.content.files.filter((file)=>null !== file && "object" == typeof file))content.push({
75
- content: htmlContent,
76
- extension
211
+ // Resolve globs from the content config
212
+ // TODO: When we make the postcss plugin async-capable this can become async
213
+ let files = _fastglob.default.sync(this.contentPatterns.all);
214
+ for (let file of files){
215
+ if ((0, _featureFlags.flagEnabled)(this.config, 'oxideParser')) {
216
+ content.push({
217
+ file,
218
+ extension: _path.default.extname(file).slice(1)
219
+ });
220
+ } else {
221
+ content.push({
222
+ content: _fs.default.readFileSync(_path.default.resolve(file), 'utf8'),
223
+ extension: _path.default.extname(file).slice(1)
224
+ });
225
+ }
226
+ }
227
+ // Resolve raw content in the tailwind config
228
+ let rawContent = this.config.content.files.filter((file)=>{
229
+ return file !== null && typeof file === 'object';
77
230
  });
231
+ for (let { raw: htmlContent, extension = 'html' } of rawContent){
232
+ content.push({
233
+ content: htmlContent,
234
+ extension
235
+ });
236
+ }
78
237
  return content;
79
238
  },
80
- getContext ({ createContext , cliConfigPath , root , result , content }) {
81
- var _findAtConfigPath;
82
- if (this.context) return this.context.changedContent = this.changedContent.splice(0), this.context;
83
- _sharedState.env.DEBUG && console.time("Searching for config");
84
- let configPath = null !== (_findAtConfigPath = (0, _findAtConfigPathJs.findAtConfigPath)(root, result)) && void 0 !== _findAtConfigPath ? _findAtConfigPath : cliConfigPath;
85
- _sharedState.env.DEBUG && console.timeEnd("Searching for config"), _sharedState.env.DEBUG && console.time("Loading config");
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');
244
+ if (this.context) {
245
+ this.context.changedContent = this.changedContent.splice(0);
246
+ return this.context;
247
+ }
248
+ _sharedState.env.DEBUG && console.time('Loading config');
86
249
  let config = this.loadConfig(configPath, content);
87
- for (let file of (_sharedState.env.DEBUG && console.timeEnd("Loading config"), _sharedState.env.DEBUG && console.time("Creating context"), this.context = createContext(config, []), Object.assign(this.context, {
250
+ _sharedState.env.DEBUG && console.timeEnd('Loading config');
251
+ _sharedState.env.DEBUG && console.time('Creating context');
252
+ this.context = createContext(config, []);
253
+ Object.assign(this.context, {
88
254
  userConfigPath: configPath
89
- }), _sharedState.env.DEBUG && console.timeEnd("Creating context"), _sharedState.env.DEBUG && console.time("Resolving content paths"), this.refreshContentPaths(), _sharedState.env.DEBUG && console.timeEnd("Resolving content paths"), this.watcher && (_sharedState.env.DEBUG && console.time("Watch new files"), this.watcher.refreshWatchedFiles(), _sharedState.env.DEBUG && console.timeEnd("Watch new files")), this.readContentPaths()))this.context.changedContent.push(file);
255
+ });
256
+ _sharedState.env.DEBUG && console.timeEnd('Creating context');
257
+ _sharedState.env.DEBUG && console.time('Resolving content paths');
258
+ this.refreshContentPaths();
259
+ _sharedState.env.DEBUG && console.timeEnd('Resolving content paths');
260
+ if (this.watcher) {
261
+ _sharedState.env.DEBUG && console.time('Watch new files');
262
+ this.watcher.refreshWatchedFiles();
263
+ _sharedState.env.DEBUG && console.timeEnd('Watch new files');
264
+ }
265
+ for (let file of this.readContentPaths()){
266
+ this.context.changedContent.push(file);
267
+ }
90
268
  return this.context;
91
269
  }
92
270
  };
93
271
  async function createProcessor(args, cliConfigPath) {
94
- var _args_content, _args_content_split;
95
- let postcss, IMPORT_COMMENT;
96
- let postcss1 = (0, _deps.loadPostcss)(), input = args["--input"], output = args["--output"], includePostCss = args["--postcss"], customPostCssPath = "string" == typeof args["--postcss"] ? args["--postcss"] : void 0, [beforePlugins, afterPlugins, postcssOptions] = includePostCss ? await loadPostCssPlugins(customPostCssPath) : (postcss = (0, _deps.loadPostcss)(), IMPORT_COMMENT = "__TAILWIND_RESTORE_IMPORT__: ", [
97
- [
98
- (root)=>{
99
- root.walkAtRules("import", (rule)=>{
100
- rule.params.slice(1).startsWith("tailwindcss/") && (rule.after(postcss.comment({
101
- text: IMPORT_COMMENT + rule.params
102
- })), rule.remove());
103
- });
104
- },
105
- (0, _deps.loadPostcssImport)(),
106
- (root)=>{
107
- root.walkComments((rule)=>{
108
- rule.text.startsWith(IMPORT_COMMENT) && (rule.after(postcss.atRule({
109
- name: "import",
110
- params: rule.text.replace(IMPORT_COMMENT, "")
111
- })), rule.remove());
112
- });
113
- }
114
- ],
272
+ var _args_content;
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;
277
+ let [beforePlugins, afterPlugins, postcssOptions] = includePostCss ? await loadPostCssPlugins(customPostCssPath) : [
278
+ [],
115
279
  [],
116
280
  {}
117
- ]);
118
- args["--purge"] && (_log.default.warn("purge-flag-deprecated", [
119
- "The `--purge` flag has been deprecated.",
120
- "Please use `--content` instead."
121
- ]), args["--content"] || (args["--content"] = args["--purge"]));
122
- let content = null !== (_args_content_split = null === (_args_content = args["--content"]) || void 0 === _args_content ? void 0 : _args_content.split(/(?<!{[^}]+),/)) && void 0 !== _args_content_split ? _args_content_split : [], tailwindPlugin = ()=>({
123
- postcssPlugin: "tailwindcss",
124
- Once (root, { result }) {
125
- _sharedState.env.DEBUG && console.time("Compiling CSS"), (0, _processTailwindFeatures.default)(({ createContext })=>(console.error(), console.error("Rebuilding..."), ()=>state.getContext({
281
+ ];
282
+ beforePlugins.unshift(...(0, _handleImportAtRules.handleImportAtRules)());
283
+ if (args['--purge']) {
284
+ _log.default.warn('purge-flag-deprecated', [
285
+ 'The `--purge` flag has been deprecated.',
286
+ 'Please use `--content` instead.'
287
+ ]);
288
+ if (!args['--content']) {
289
+ args['--content'] = args['--purge'];
290
+ }
291
+ }
292
+ var _args_content_split;
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 : [];
294
+ let tailwindPlugin = ()=>{
295
+ return {
296
+ postcssPlugin: 'tailwindcss',
297
+ async Once (root, { result }) {
298
+ _sharedState.env.DEBUG && console.time('Compiling CSS');
299
+ await (0, _processTailwindFeatures.default)(({ createContext })=>{
300
+ console.error();
301
+ console.error('Rebuilding...');
302
+ return ()=>{
303
+ return state.getContext({
126
304
  createContext,
127
305
  cliConfigPath,
128
306
  root,
129
307
  result,
130
308
  content
131
- })))(root, result), _sharedState.env.DEBUG && console.timeEnd("Compiling CSS");
309
+ });
310
+ };
311
+ })(root, result);
312
+ _sharedState.env.DEBUG && console.timeEnd('Compiling CSS');
132
313
  }
133
- });
134
- tailwindPlugin.postcss = !0;
135
- let processor = postcss1([
314
+ };
315
+ };
316
+ tailwindPlugin.postcss = true;
317
+ let plugins = [
136
318
  ...beforePlugins,
137
319
  tailwindPlugin,
138
- !args["--minify"] && _utils.formatNodes,
139
- ...afterPlugins,
140
- !args["--no-autoprefixer"] && (0, _deps.loadAutoprefixer)(),
141
- args["--minify"] && (0, _deps.loadCssNano)()
142
- ].filter(Boolean));
320
+ !args['--minify'] && _utils.formatNodes,
321
+ ...afterPlugins
322
+ ].filter(Boolean);
323
+ /** @type {import('postcss').Processor} */ // @ts-ignore
324
+ let processor = (0, _postcss.default)(plugins);
143
325
  async function readInput() {
144
- return "-" === input ? (0, _utils.drainStdin)() : input ? _fs.default.promises.readFile(_path.default.resolve(input), "utf8") : "@tailwind base; @tailwind components; @tailwind utilities";
326
+ // Piping in data, let's drain the stdin
327
+ if (input === '-') {
328
+ return (0, _utils.drainStdin)();
329
+ }
330
+ // Input file has been provided
331
+ if (input) {
332
+ return _fs.default.promises.readFile(_path.default.resolve(input), 'utf8');
333
+ }
334
+ // No input file provided, fallback to default atrules
335
+ return '@tailwind base; @tailwind components; @tailwind utilities';
145
336
  }
146
337
  async function build() {
147
338
  let start = process.hrtime.bigint();
148
- return readInput().then((css)=>processor.process(css, {
149
- ...postcssOptions,
150
- from: input,
151
- to: output
339
+ let options = {
340
+ ...postcssOptions,
341
+ from: input,
342
+ to: output
343
+ };
344
+ return readInput().then((css)=>processor.process(css, options)).then((result)=>lightningcss(result, {
345
+ ...options,
346
+ minify: !!args['--minify']
152
347
  })).then((result)=>{
153
- if (!state.watcher) return result;
154
- for (let message of (_sharedState.env.DEBUG && console.time("Recording PostCSS dependencies"), result.messages))"dependency" === message.type && state.contextDependencies.add(message.file);
155
- return _sharedState.env.DEBUG && console.timeEnd("Recording PostCSS dependencies"), _sharedState.env.DEBUG && console.time("Watch new files"), state.watcher.refreshWatchedFiles(), _sharedState.env.DEBUG && console.timeEnd("Watch new files"), result;
348
+ if (!state.watcher) {
349
+ return result;
350
+ }
351
+ _sharedState.env.DEBUG && console.time('Recording PostCSS dependencies');
352
+ for (let message of result.messages){
353
+ if (message.type === 'dependency') {
354
+ state.contextDependencies.add(message.file);
355
+ }
356
+ }
357
+ _sharedState.env.DEBUG && console.timeEnd('Recording PostCSS dependencies');
358
+ // TODO: This needs to be in a different spot
359
+ _sharedState.env.DEBUG && console.time('Watch new files');
360
+ state.watcher.refreshWatchedFiles();
361
+ _sharedState.env.DEBUG && console.timeEnd('Watch new files');
362
+ return result;
156
363
  }).then((result)=>{
157
364
  if (!output) {
158
- process.stdout.write(result.css);
365
+ process.stdout.write(license() + result.css);
159
366
  return;
160
367
  }
161
368
  return Promise.all([
162
- (0, _utils.outputFile)(result.opts.to, result.css),
163
- result.map && (0, _utils.outputFile)(result.opts.to + ".map", result.map.toString())
369
+ (0, _utils.outputFile)(result.opts.to, license() + result.css),
370
+ result.map && (0, _utils.outputFile)(result.opts.to + '.map', result.map.toString())
164
371
  ]);
165
372
  }).then(()=>{
166
373
  let end = process.hrtime.bigint();
167
- console.error(), console.error("Done in", (end - start) / BigInt(1e6) + "ms.");
374
+ console.error();
375
+ console.error('Done in', (end - start) / BigInt(1e6) + 'ms.');
168
376
  }).then(()=>{}, (err)=>{
169
- if (!state.watcher) return Promise.reject(err);
170
- console.error(err);
377
+ // TODO: If an initial build fails we can't easily pick up any PostCSS dependencies
378
+ // that were collected before the error occurred
379
+ // The result is not stored on the error so we have to store it externally
380
+ // and pull the messages off of it here somehow
381
+ // This results in a less than ideal DX because the watcher will not pick up
382
+ // changes to imported CSS if one of them caused an error during the initial build
383
+ // If you fix it and then save the main CSS file so there's no error
384
+ // The watcher will start watching the imported CSS files and will be
385
+ // resilient to future errors.
386
+ if (state.watcher) {
387
+ console.error(err);
388
+ } else {
389
+ return Promise.reject(err);
390
+ }
171
391
  });
172
392
  }
173
- async function parseChanges(changes) {
393
+ /**
394
+ * @param {{file: string, content(): Promise<string>, extension: string}[]} changes
395
+ */ async function parseChanges(changes) {
174
396
  return Promise.all(changes.map(async (change)=>({
175
397
  content: await change.content(),
176
398
  extension: change.extension
177
399
  })));
178
400
  }
179
- return void 0 !== input && "-" !== input && state.contextDependencies.add(_path.default.resolve(input)), {
401
+ if (input !== undefined && input !== '-') {
402
+ state.contextDependencies.add(_path.default.resolve(input));
403
+ }
404
+ return {
180
405
  build,
181
406
  watch: async ()=>{
182
- state.watcher = (0, _watchingJs.createWatcher)(args, {
407
+ state.watcher = (0, _watching.createWatcher)(args, {
183
408
  state,
184
- async rebuild (changes) {
185
- if (changes.some((change)=>{
409
+ /**
410
+ * @param {{file: string, content(): Promise<string>, extension: string}[]} changes
411
+ */ async rebuild (changes) {
412
+ let needsNewContext = changes.some((change)=>{
186
413
  var _state_configBag;
187
- return (null === (_state_configBag = state.configBag) || void 0 === _state_configBag ? void 0 : _state_configBag.dependencies.has(change.file)) || state.contextDependencies.has(change.file);
188
- })) state.context = null;
189
- else for (let change of (await parseChanges(changes)))state.changedContent.push(change);
414
+ return ((_state_configBag = state.configBag) === null || _state_configBag === void 0 ? void 0 : _state_configBag.dependencies.has(change.file)) || state.contextDependencies.has(change.file);
415
+ });
416
+ if (needsNewContext) {
417
+ state.context = null;
418
+ } else {
419
+ for (let change of (await parseChanges(changes))){
420
+ state.changedContent.push(change);
421
+ }
422
+ }
190
423
  return build();
191
424
  }
192
- }), await build();
425
+ });
426
+ await build();
193
427
  }
194
428
  };
195
429
  }