tailwindcss 0.0.0-insiders.293ee90 → 0.0.0-insiders.2a40326

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 (91) hide show
  1. package/README.md +1 -1
  2. package/lib/cli/build/plugin.js +18 -13
  3. package/lib/cli/index.js +231 -10
  4. package/lib/cli/init/index.js +2 -2
  5. package/lib/cli/shared.js +2 -1
  6. package/lib/cli.js +4 -236
  7. package/lib/corePlugins.js +26 -26
  8. package/lib/featureFlags.js +8 -8
  9. package/lib/index.js +4 -46
  10. package/lib/lib/collapseAdjacentRules.js +2 -2
  11. package/lib/lib/collapseDuplicateDeclarations.js +2 -2
  12. package/lib/lib/content.js +16 -16
  13. package/lib/lib/defaultExtractor.js +10 -5
  14. package/lib/lib/detectNesting.js +7 -1
  15. package/lib/lib/evaluateTailwindFunctions.js +4 -4
  16. package/lib/lib/expandApplyAtRules.js +2 -2
  17. package/lib/lib/expandTailwindAtRules.js +37 -9
  18. package/lib/lib/findAtConfigPath.js +3 -3
  19. package/lib/lib/generateRules.js +90 -41
  20. package/lib/lib/offsets.js +83 -1
  21. package/lib/lib/remap-bitfield.js +87 -0
  22. package/lib/lib/resolveDefaultsAtRules.js +4 -4
  23. package/lib/lib/setupContextUtils.js +89 -61
  24. package/lib/lib/setupTrackingContext.js +25 -4
  25. package/lib/lib/sharedState.js +2 -1
  26. package/lib/oxide/cli/build/deps.js +81 -0
  27. package/lib/oxide/cli/build/index.js +47 -0
  28. package/lib/oxide/cli/build/plugin.js +364 -0
  29. package/lib/oxide/cli/build/utils.js +77 -0
  30. package/lib/oxide/cli/build/watching.js +177 -0
  31. package/lib/oxide/cli/help/index.js +70 -0
  32. package/lib/oxide/cli/index.js +220 -0
  33. package/lib/oxide/cli/init/index.js +35 -0
  34. package/lib/oxide/cli/shared.js +12 -0
  35. package/lib/oxide/cli.js +5 -0
  36. package/lib/oxide/postcss-plugin.js +2 -0
  37. package/lib/plugin.js +48 -0
  38. package/lib/postcss-plugins/nesting/plugin.js +2 -2
  39. package/lib/util/cloneNodes.js +2 -2
  40. package/lib/util/color.js +4 -4
  41. package/lib/util/createUtilityPlugin.js +2 -2
  42. package/lib/util/dataTypes.js +26 -2
  43. package/lib/util/defaults.js +4 -4
  44. package/lib/util/escapeClassName.js +3 -3
  45. package/lib/util/formatVariantSelector.js +170 -104
  46. package/lib/util/getAllConfigs.js +2 -2
  47. package/lib/util/negateValue.js +2 -2
  48. package/lib/util/normalizeConfig.js +22 -22
  49. package/lib/util/pluginUtils.js +15 -15
  50. package/lib/util/prefixSelector.js +22 -8
  51. package/lib/util/resolveConfig.js +7 -7
  52. package/oxide-node-api-shim/index.js +21 -0
  53. package/oxide-node-api-shim/package.json +5 -0
  54. package/package.json +32 -18
  55. package/peers/index.js +107 -172
  56. package/src/cli/build/plugin.js +11 -6
  57. package/src/cli/index.js +234 -3
  58. package/src/cli/shared.js +1 -0
  59. package/src/cli.js +4 -231
  60. package/src/corePlugins.js +6 -2
  61. package/src/index.js +4 -46
  62. package/src/lib/content.js +12 -17
  63. package/src/lib/defaultExtractor.js +9 -3
  64. package/src/lib/detectNesting.js +9 -1
  65. package/src/lib/expandTailwindAtRules.js +40 -6
  66. package/src/lib/generateRules.js +77 -23
  67. package/src/lib/offsets.js +98 -1
  68. package/src/lib/remap-bitfield.js +82 -0
  69. package/src/lib/setupContextUtils.js +72 -35
  70. package/src/lib/setupTrackingContext.js +31 -6
  71. package/src/lib/sharedState.js +1 -0
  72. package/src/oxide/cli/build/deps.ts +91 -0
  73. package/src/oxide/cli/build/index.ts +47 -0
  74. package/src/oxide/cli/build/plugin.ts +436 -0
  75. package/src/oxide/cli/build/utils.ts +74 -0
  76. package/src/oxide/cli/build/watching.ts +225 -0
  77. package/src/oxide/cli/help/index.ts +69 -0
  78. package/src/oxide/cli/index.ts +212 -0
  79. package/src/oxide/cli/init/index.ts +32 -0
  80. package/src/oxide/cli/shared.ts +4 -0
  81. package/src/oxide/cli.ts +1 -0
  82. package/src/oxide/postcss-plugin.ts +1 -0
  83. package/src/plugin.js +47 -0
  84. package/src/util/dataTypes.js +29 -4
  85. package/src/util/formatVariantSelector.js +214 -121
  86. package/src/util/negateValue.js +1 -1
  87. package/src/util/prefixSelector.js +28 -10
  88. package/stubs/defaultConfig.stub.js +3 -0
  89. package/types/config.d.ts +6 -1
  90. package/types/generated/default-theme.d.ts +5 -2
  91. package/CHANGELOG.md +0 -2340
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/workflow/status/tailwindlabs/tailwindcss/Node.js%20CI" 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/nodejs.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>
@@ -113,8 +113,8 @@ let state = {
113
113
  contextDependencies: new Set(),
114
114
  /** @type {import('../../lib/content.js').ContentPath[]} */ contentPaths: [],
115
115
  refreshContentPaths () {
116
- var ref;
117
- this.contentPaths = (0, _contentJs.parseCandidateFiles)(this.context, (ref = this.context) === null || ref === void 0 ? void 0 : ref.tailwindConfig);
116
+ var _this_context;
117
+ this.contentPaths = (0, _contentJs.parseCandidateFiles)(this.context, (_this_context = this.context) === null || _this_context === void 0 ? void 0 : _this_context.tailwindConfig);
118
118
  },
119
119
  get config () {
120
120
  return this.context.tailwindConfig;
@@ -161,10 +161,17 @@ let state = {
161
161
  // TODO: When we make the postcss plugin async-capable this can become async
162
162
  let files = _fastGlob.default.sync(this.contentPatterns.all);
163
163
  for (let file of files){
164
- content.push({
165
- content: _fs.default.readFileSync(_path.default.resolve(file), "utf8"),
166
- extension: _path.default.extname(file).slice(1)
167
- });
164
+ if (_shared.env.OXIDE) {
165
+ content.push({
166
+ file,
167
+ extension: _path.default.extname(file).slice(1)
168
+ });
169
+ } else {
170
+ content.push({
171
+ content: _fs.default.readFileSync(_path.default.resolve(file), "utf8"),
172
+ extension: _path.default.extname(file).slice(1)
173
+ });
174
+ }
168
175
  }
169
176
  // Resolve raw content in the tailwind config
170
177
  let rawContent = this.config.content.files.filter((file)=>{
@@ -184,8 +191,8 @@ let state = {
184
191
  return this.context;
185
192
  }
186
193
  _shared.env.DEBUG && console.time("Searching for config");
187
- var ref;
188
- let configPath = (ref = (0, _findAtConfigPathJs.findAtConfigPath)(root, result)) !== null && ref !== void 0 ? ref : cliConfigPath;
194
+ var _findAtConfigPath;
195
+ let configPath = (_findAtConfigPath = (0, _findAtConfigPathJs.findAtConfigPath)(root, result)) !== null && _findAtConfigPath !== void 0 ? _findAtConfigPath : cliConfigPath;
189
196
  _shared.env.DEBUG && console.timeEnd("Searching for config");
190
197
  _shared.env.DEBUG && console.time("Loading config");
191
198
  let config = this.loadConfig(configPath, content);
@@ -204,16 +211,14 @@ let state = {
204
211
  this.watcher.refreshWatchedFiles();
205
212
  _shared.env.DEBUG && console.timeEnd("Watch new files");
206
213
  }
207
- _shared.env.DEBUG && console.time("Reading content files");
208
214
  for (let file of this.readContentPaths()){
209
215
  this.context.changedContent.push(file);
210
216
  }
211
- _shared.env.DEBUG && console.timeEnd("Reading content files");
212
217
  return this.context;
213
218
  }
214
219
  };
215
220
  async function createProcessor(args, cliConfigPath) {
216
- var ref;
221
+ var _args_content;
217
222
  let postcss = (0, _deps.loadPostcss)();
218
223
  let input = args["--input"];
219
224
  let output = args["--output"];
@@ -229,8 +234,8 @@ async function createProcessor(args, cliConfigPath) {
229
234
  args["--content"] = args["--purge"];
230
235
  }
231
236
  }
232
- var ref1;
233
- let content = (ref1 = (ref = args["--content"]) === null || ref === void 0 ? void 0 : ref.split(/(?<!{[^}]+),/)) !== null && ref1 !== void 0 ? ref1 : [];
237
+ var _args_content_split;
238
+ let content = (_args_content_split = (_args_content = args["--content"]) === null || _args_content === void 0 ? void 0 : _args_content.split(/(?<!{[^}]+),/)) !== null && _args_content_split !== void 0 ? _args_content_split : [];
234
239
  let tailwindPlugin = ()=>{
235
240
  return {
236
241
  postcssPlugin: "tailwindcss",
package/lib/cli/index.js CHANGED
@@ -1,18 +1,239 @@
1
+ #!/usr/bin/env node
1
2
  "use strict";
2
3
  Object.defineProperty(exports, "__esModule", {
3
4
  value: true
4
5
  });
5
- _exportStar(require("./build"), exports);
6
- _exportStar(require("./config"), exports);
7
- _exportStar(require("./content"), exports);
8
- function _exportStar(from, to) {
9
- Object.keys(from).forEach(function(k) {
10
- if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) Object.defineProperty(to, k, {
11
- enumerable: true,
12
- get: function() {
13
- return from[k];
6
+ const _path = /*#__PURE__*/ _interopRequireDefault(require("path"));
7
+ const _arg = /*#__PURE__*/ _interopRequireDefault(require("arg"));
8
+ const _fs = /*#__PURE__*/ _interopRequireDefault(require("fs"));
9
+ const _build = require("./build");
10
+ const _help = require("./help");
11
+ const _init = require("./init");
12
+ function _interopRequireDefault(obj) {
13
+ return obj && obj.__esModule ? obj : {
14
+ default: obj
15
+ };
16
+ }
17
+ function isESM() {
18
+ const pkgPath = _path.default.resolve("./package.json");
19
+ try {
20
+ let pkg = JSON.parse(_fs.default.readFileSync(pkgPath, "utf8"));
21
+ return pkg.type && pkg.type === "module";
22
+ } catch (err) {
23
+ return false;
24
+ }
25
+ }
26
+ let configs = isESM() ? {
27
+ tailwind: "tailwind.config.cjs",
28
+ postcss: "postcss.config.cjs"
29
+ } : {
30
+ tailwind: "tailwind.config.js",
31
+ postcss: "postcss.config.js"
32
+ };
33
+ // ---
34
+ function oneOf(...options) {
35
+ return Object.assign((value = true)=>{
36
+ for (let option of options){
37
+ let parsed = option(value);
38
+ if (parsed === value) {
39
+ return parsed;
14
40
  }
41
+ }
42
+ throw new Error("...");
43
+ }, {
44
+ manualParsing: true
45
+ });
46
+ }
47
+ let commands = {
48
+ init: {
49
+ run: _init.init,
50
+ args: {
51
+ "--full": {
52
+ type: Boolean,
53
+ description: `Initialize a full \`${configs.tailwind}\` file`
54
+ },
55
+ "--postcss": {
56
+ type: Boolean,
57
+ description: `Initialize a \`${configs.postcss}\` file`
58
+ },
59
+ "-f": "--full",
60
+ "-p": "--postcss"
61
+ }
62
+ },
63
+ build: {
64
+ run: _build.build,
65
+ args: {
66
+ "--input": {
67
+ type: String,
68
+ description: "Input file"
69
+ },
70
+ "--output": {
71
+ type: String,
72
+ description: "Output file"
73
+ },
74
+ "--watch": {
75
+ type: oneOf(String, Boolean),
76
+ description: "Watch for changes and rebuild as needed"
77
+ },
78
+ "--poll": {
79
+ type: Boolean,
80
+ description: "Use polling instead of filesystem events when watching"
81
+ },
82
+ "--content": {
83
+ type: String,
84
+ description: "Content paths to use for removing unused classes"
85
+ },
86
+ "--purge": {
87
+ type: String,
88
+ deprecated: true
89
+ },
90
+ "--postcss": {
91
+ type: oneOf(String, Boolean),
92
+ description: "Load custom PostCSS configuration"
93
+ },
94
+ "--minify": {
95
+ type: Boolean,
96
+ description: "Minify the output"
97
+ },
98
+ "--config": {
99
+ type: String,
100
+ description: "Path to a custom config file"
101
+ },
102
+ "--no-autoprefixer": {
103
+ type: Boolean,
104
+ description: "Disable autoprefixer"
105
+ },
106
+ "-c": "--config",
107
+ "-i": "--input",
108
+ "-o": "--output",
109
+ "-m": "--minify",
110
+ "-w": "--watch",
111
+ "-p": "--poll"
112
+ }
113
+ }
114
+ };
115
+ let sharedFlags = {
116
+ "--help": {
117
+ type: Boolean,
118
+ description: "Display usage information"
119
+ },
120
+ "-h": "--help"
121
+ };
122
+ if (process.stdout.isTTY /* Detect redirecting output to a file */ && (process.argv[2] === undefined || process.argv.slice(2).every((flag)=>sharedFlags[flag] !== undefined))) {
123
+ (0, _help.help)({
124
+ usage: [
125
+ "tailwindcss [--input input.css] [--output output.css] [--watch] [options...]",
126
+ "tailwindcss init [--full] [--postcss] [options...]"
127
+ ],
128
+ commands: Object.keys(commands).filter((command)=>command !== "build").map((command)=>`${command} [options]`),
129
+ options: {
130
+ ...commands.build.args,
131
+ ...sharedFlags
132
+ }
133
+ });
134
+ process.exit(0);
135
+ }
136
+ let command = ((arg = "")=>arg.startsWith("-") ? undefined : arg)(process.argv[2]) || "build";
137
+ if (commands[command] === undefined) {
138
+ if (_fs.default.existsSync(_path.default.resolve(command))) {
139
+ // TODO: Deprecate this in future versions
140
+ // Check if non-existing command, might be a file.
141
+ command = "build";
142
+ } else {
143
+ (0, _help.help)({
144
+ message: `Invalid command: ${command}`,
145
+ usage: [
146
+ "tailwindcss <command> [options]"
147
+ ],
148
+ commands: Object.keys(commands).filter((command)=>command !== "build").map((command)=>`${command} [options]`),
149
+ options: sharedFlags
150
+ });
151
+ process.exit(1);
152
+ }
153
+ }
154
+ // Execute command
155
+ let { args: flags , run } = commands[command];
156
+ let args = (()=>{
157
+ try {
158
+ let result = (0, _arg.default)(Object.fromEntries(Object.entries({
159
+ ...flags,
160
+ ...sharedFlags
161
+ }).filter(([_key, value])=>{
162
+ var _value_type;
163
+ return !(value === null || value === void 0 ? void 0 : (_value_type = value.type) === null || _value_type === void 0 ? void 0 : _value_type.manualParsing);
164
+ }).map(([key, value])=>[
165
+ key,
166
+ typeof value === "object" ? value.type : value
167
+ ])), {
168
+ permissive: true
15
169
  });
170
+ // Manual parsing of flags to allow for special flags like oneOf(Boolean, String)
171
+ for(let i = result["_"].length - 1; i >= 0; --i){
172
+ let flag = result["_"][i];
173
+ if (!flag.startsWith("-")) continue;
174
+ let [flagName, flagValue] = flag.split("=");
175
+ let handler = flags[flagName];
176
+ // Resolve flagName & handler
177
+ while(typeof handler === "string"){
178
+ flagName = handler;
179
+ handler = flags[handler];
180
+ }
181
+ if (!handler) continue;
182
+ let args = [];
183
+ let offset = i + 1;
184
+ // --flag value syntax was used so we need to pull `value` from `args`
185
+ if (flagValue === undefined) {
186
+ // Parse args for current flag
187
+ while(result["_"][offset] && !result["_"][offset].startsWith("-")){
188
+ args.push(result["_"][offset++]);
189
+ }
190
+ // Cleanup manually parsed flags + args
191
+ result["_"].splice(i, 1 + args.length);
192
+ // No args were provided, use default value defined in handler
193
+ // One arg was provided, use that directly
194
+ // Multiple args were provided so pass them all in an array
195
+ flagValue = args.length === 0 ? undefined : args.length === 1 ? args[0] : args;
196
+ } else {
197
+ // Remove the whole flag from the args array
198
+ result["_"].splice(i, 1);
199
+ }
200
+ // Set the resolved value in the `result` object
201
+ result[flagName] = handler.type(flagValue, flagName);
202
+ }
203
+ // Ensure that the `command` is always the first argument in the `args`.
204
+ // This is important so that we don't have to check if a default command
205
+ // (build) was used or not from within each plugin.
206
+ //
207
+ // E.g.: tailwindcss input.css -> _: ['build', 'input.css']
208
+ // E.g.: tailwindcss build input.css -> _: ['build', 'input.css']
209
+ if (result["_"][0] !== command) {
210
+ result["_"].unshift(command);
211
+ }
212
+ return result;
213
+ } catch (err) {
214
+ if (err.code === "ARG_UNKNOWN_OPTION") {
215
+ (0, _help.help)({
216
+ message: err.message,
217
+ usage: [
218
+ "tailwindcss <command> [options]"
219
+ ],
220
+ options: sharedFlags
221
+ });
222
+ process.exit(1);
223
+ }
224
+ throw err;
225
+ }
226
+ })();
227
+ if (args["--help"]) {
228
+ (0, _help.help)({
229
+ options: {
230
+ ...flags,
231
+ ...sharedFlags
232
+ },
233
+ usage: [
234
+ `tailwindcss ${command} [options]`
235
+ ]
16
236
  });
17
- return from;
237
+ process.exit(0);
18
238
  }
239
+ run(args, configs);
@@ -16,8 +16,8 @@ function _interopRequireDefault(obj) {
16
16
  }
17
17
  function init(args, configs) {
18
18
  let messages = [];
19
- var ref;
20
- let tailwindConfigLocation = _path.default.resolve((ref = args["_"][1]) !== null && ref !== void 0 ? ref : `./${configs.tailwind}`);
19
+ var _args___;
20
+ let tailwindConfigLocation = _path.default.resolve((_args___ = args["_"][1]) !== null && _args___ !== void 0 ? _args___ : `./${configs.tailwind}`);
21
21
  if (_fs.default.existsSync(tailwindConfigLocation)) {
22
22
  messages.push(`${_path.default.basename(tailwindConfigLocation)} already exists.`);
23
23
  } else {
package/lib/cli/shared.js CHANGED
@@ -8,5 +8,6 @@ Object.defineProperty(exports, "env", {
8
8
  get: ()=>env
9
9
  });
10
10
  const env = {
11
- DEBUG: process.env.DEBUG !== undefined && process.env.DEBUG !== "0"
11
+ DEBUG: process.env.DEBUG !== undefined && process.env.DEBUG !== "0",
12
+ OXIDE: process.env.OXIDE
12
13
  };
package/lib/cli.js CHANGED
@@ -1,239 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- const _path = /*#__PURE__*/ _interopRequireDefault(require("path"));
7
- const _arg = /*#__PURE__*/ _interopRequireDefault(require("arg"));
8
- const _fs = /*#__PURE__*/ _interopRequireDefault(require("fs"));
9
- const _build = require("./cli/build");
10
- const _help = require("./cli/help");
11
- const _init = require("./cli/init");
12
- function _interopRequireDefault(obj) {
13
- return obj && obj.__esModule ? obj : {
14
- default: obj
15
- };
3
+ if (process.env.OXIDE) {
4
+ module.exports = require("./oxide/cli");
5
+ } else {
6
+ module.exports = require("./cli/index");
16
7
  }
17
- function isESM() {
18
- const pkgPath = _path.default.resolve("./package.json");
19
- try {
20
- let pkg = JSON.parse(_fs.default.readFileSync(pkgPath, "utf8"));
21
- return pkg.type && pkg.type === "module";
22
- } catch (err) {
23
- return false;
24
- }
25
- }
26
- let configs = isESM() ? {
27
- tailwind: "tailwind.config.cjs",
28
- postcss: "postcss.config.cjs"
29
- } : {
30
- tailwind: "tailwind.config.js",
31
- postcss: "postcss.config.js"
32
- };
33
- // ---
34
- function oneOf(...options) {
35
- return Object.assign((value = true)=>{
36
- for (let option of options){
37
- let parsed = option(value);
38
- if (parsed === value) {
39
- return parsed;
40
- }
41
- }
42
- throw new Error("...");
43
- }, {
44
- manualParsing: true
45
- });
46
- }
47
- let commands = {
48
- init: {
49
- run: _init.init,
50
- args: {
51
- "--full": {
52
- type: Boolean,
53
- description: `Initialize a full \`${configs.tailwind}\` file`
54
- },
55
- "--postcss": {
56
- type: Boolean,
57
- description: `Initialize a \`${configs.postcss}\` file`
58
- },
59
- "-f": "--full",
60
- "-p": "--postcss"
61
- }
62
- },
63
- build: {
64
- run: _build.build,
65
- args: {
66
- "--input": {
67
- type: String,
68
- description: "Input file"
69
- },
70
- "--output": {
71
- type: String,
72
- description: "Output file"
73
- },
74
- "--watch": {
75
- type: oneOf(String, Boolean),
76
- description: "Watch for changes and rebuild as needed"
77
- },
78
- "--poll": {
79
- type: Boolean,
80
- description: "Use polling instead of filesystem events when watching"
81
- },
82
- "--content": {
83
- type: String,
84
- description: "Content paths to use for removing unused classes"
85
- },
86
- "--purge": {
87
- type: String,
88
- deprecated: true
89
- },
90
- "--postcss": {
91
- type: oneOf(String, Boolean),
92
- description: "Load custom PostCSS configuration"
93
- },
94
- "--minify": {
95
- type: Boolean,
96
- description: "Minify the output"
97
- },
98
- "--config": {
99
- type: String,
100
- description: "Path to a custom config file"
101
- },
102
- "--no-autoprefixer": {
103
- type: Boolean,
104
- description: "Disable autoprefixer"
105
- },
106
- "-c": "--config",
107
- "-i": "--input",
108
- "-o": "--output",
109
- "-m": "--minify",
110
- "-w": "--watch",
111
- "-p": "--poll"
112
- }
113
- }
114
- };
115
- let sharedFlags = {
116
- "--help": {
117
- type: Boolean,
118
- description: "Display usage information"
119
- },
120
- "-h": "--help"
121
- };
122
- if (process.stdout.isTTY /* Detect redirecting output to a file */ && (process.argv[2] === undefined || process.argv.slice(2).every((flag)=>sharedFlags[flag] !== undefined))) {
123
- (0, _help.help)({
124
- usage: [
125
- "tailwindcss [--input input.css] [--output output.css] [--watch] [options...]",
126
- "tailwindcss init [--full] [--postcss] [options...]"
127
- ],
128
- commands: Object.keys(commands).filter((command)=>command !== "build").map((command)=>`${command} [options]`),
129
- options: {
130
- ...commands.build.args,
131
- ...sharedFlags
132
- }
133
- });
134
- process.exit(0);
135
- }
136
- let command = ((arg = "")=>arg.startsWith("-") ? undefined : arg)(process.argv[2]) || "build";
137
- if (commands[command] === undefined) {
138
- if (_fs.default.existsSync(_path.default.resolve(command))) {
139
- // TODO: Deprecate this in future versions
140
- // Check if non-existing command, might be a file.
141
- command = "build";
142
- } else {
143
- (0, _help.help)({
144
- message: `Invalid command: ${command}`,
145
- usage: [
146
- "tailwindcss <command> [options]"
147
- ],
148
- commands: Object.keys(commands).filter((command)=>command !== "build").map((command)=>`${command} [options]`),
149
- options: sharedFlags
150
- });
151
- process.exit(1);
152
- }
153
- }
154
- // Execute command
155
- let { args: flags , run } = commands[command];
156
- let args = (()=>{
157
- try {
158
- let result = (0, _arg.default)(Object.fromEntries(Object.entries({
159
- ...flags,
160
- ...sharedFlags
161
- }).filter(([_key, value])=>{
162
- var ref;
163
- return !(value === null || value === void 0 ? void 0 : (ref = value.type) === null || ref === void 0 ? void 0 : ref.manualParsing);
164
- }).map(([key, value])=>[
165
- key,
166
- typeof value === "object" ? value.type : value
167
- ])), {
168
- permissive: true
169
- });
170
- // Manual parsing of flags to allow for special flags like oneOf(Boolean, String)
171
- for(let i = result["_"].length - 1; i >= 0; --i){
172
- let flag = result["_"][i];
173
- if (!flag.startsWith("-")) continue;
174
- let [flagName, flagValue] = flag.split("=");
175
- let handler = flags[flagName];
176
- // Resolve flagName & handler
177
- while(typeof handler === "string"){
178
- flagName = handler;
179
- handler = flags[handler];
180
- }
181
- if (!handler) continue;
182
- let args = [];
183
- let offset = i + 1;
184
- // --flag value syntax was used so we need to pull `value` from `args`
185
- if (flagValue === undefined) {
186
- // Parse args for current flag
187
- while(result["_"][offset] && !result["_"][offset].startsWith("-")){
188
- args.push(result["_"][offset++]);
189
- }
190
- // Cleanup manually parsed flags + args
191
- result["_"].splice(i, 1 + args.length);
192
- // No args were provided, use default value defined in handler
193
- // One arg was provided, use that directly
194
- // Multiple args were provided so pass them all in an array
195
- flagValue = args.length === 0 ? undefined : args.length === 1 ? args[0] : args;
196
- } else {
197
- // Remove the whole flag from the args array
198
- result["_"].splice(i, 1);
199
- }
200
- // Set the resolved value in the `result` object
201
- result[flagName] = handler.type(flagValue, flagName);
202
- }
203
- // Ensure that the `command` is always the first argument in the `args`.
204
- // This is important so that we don't have to check if a default command
205
- // (build) was used or not from within each plugin.
206
- //
207
- // E.g.: tailwindcss input.css -> _: ['build', 'input.css']
208
- // E.g.: tailwindcss build input.css -> _: ['build', 'input.css']
209
- if (result["_"][0] !== command) {
210
- result["_"].unshift(command);
211
- }
212
- return result;
213
- } catch (err) {
214
- if (err.code === "ARG_UNKNOWN_OPTION") {
215
- (0, _help.help)({
216
- message: err.message,
217
- usage: [
218
- "tailwindcss <command> [options]"
219
- ],
220
- options: sharedFlags
221
- });
222
- process.exit(1);
223
- }
224
- throw err;
225
- }
226
- })();
227
- if (args["--help"]) {
228
- (0, _help.help)({
229
- options: {
230
- ...flags,
231
- ...sharedFlags
232
- },
233
- usage: [
234
- `tailwindcss ${command} [options]`
235
- ]
236
- });
237
- process.exit(0);
238
- }
239
- run(args, configs);