@tamagui/cli 2.7.7 → 3.0.0-beta.1093.1

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/dist/cli.cjs CHANGED
@@ -5,370 +5,372 @@ var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __getProtoOf = Object.getPrototypeOf;
6
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
7
  var __copyProps = (to, from, except, desc) => {
8
- if (from && typeof from === "object" || typeof from === "function") {
9
- for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
10
- get: () => from[key],
11
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
12
- });
13
- }
14
- return to;
8
+ if (from && typeof from === "object" || typeof from === "function") {
9
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
10
+ get: () => from[key],
11
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
12
+ });
13
+ }
14
+ return to;
15
15
  };
16
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
- // If the importer is in node compatibility mode or this is not an ESM
18
- // file that has been converted to a CommonJS file using a Babel-
19
- // compatible transform (i.e. "__esModule" has not been set), then set
20
- // "default" to the CommonJS "module.exports" for node compatibility.
21
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
22
- value: mod,
23
- enumerable: true
16
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
17
+ value: mod,
18
+ enumerable: true
24
19
  }) : target, mod));
25
20
  var import_arg = __toESM(require("arg"));
26
21
  var import_chalk = __toESM(require("chalk"));
27
22
  var import_utils = require("./utils.cjs");
28
- ["exit", "SIGINT"].forEach(_ => {
29
- process.on(_, () => {
30
- (0, import_utils.disposeAll)();
31
- process.exit();
32
- });
33
- });
23
+ process.on("exit", import_utils.disposeAll);
34
24
  const COMMAND_MAP = {
35
- check: {
36
- description: `Checks for inconsistent versions, duplicate installs, lockfile issues, and missing config.`,
37
- shorthands: [],
38
- flags: {
39
- "--help": Boolean,
40
- "--debug": Boolean,
41
- "--verbose": Boolean
42
- },
43
- async run() {
44
- const {
45
- _,
46
- ...flags2
47
- } = (0, import_arg.default)(this.flags);
48
- const options = await (0, import_utils.getOptions)({
49
- debug: flags2["--debug"] ? flags2["--verbose"] ? "verbose" : true : false
50
- });
51
- const {
52
- checkDeps
53
- } = require("@tamagui/static/checkDeps");
54
- await checkDeps(options.paths.root);
55
- }
56
- },
57
- generate: {
58
- description: `Builds your entire tamagui configuration and outputs any CSS.`,
59
- shorthands: [],
60
- flags: {
61
- "--help": Boolean,
62
- "--debug": Boolean,
63
- "--verbose": Boolean
64
- },
65
- async run() {
66
- const {
67
- _,
68
- ...flags2
69
- } = (0, import_arg.default)(this.flags);
70
- const options = await (0, import_utils.getOptions)({
71
- debug: flags2["--debug"] ? flags2["--verbose"] ? "verbose" : true : false,
72
- loadTamaguiOptions: true
73
- });
74
- const {
75
- loadTamagui
76
- } = require("@tamagui/static/loadTamagui");
77
- process.env.TAMAGUI_KEEP_THEMES = "1";
78
- await loadTamagui({
79
- ...options.tamaguiOptions,
80
- platform: "web"
81
- });
82
- const {
83
- generatePrompt
84
- } = require("./generate-prompt.cjs");
85
- const {
86
- join
87
- } = require("node:path");
88
- await generatePrompt({
89
- ...options,
90
- output: join(options.paths.dotDir, "prompt.md")
91
- });
92
- }
93
- },
94
- "generate-css": {
95
- shorthands: [],
96
- description: `Generate the tamagui.generated.css file from your config`,
97
- flags: {
98
- "--help": Boolean,
99
- "--debug": Boolean,
100
- "--verbose": Boolean,
101
- "--output": String
102
- },
103
- async run() {
104
- const {
105
- _,
106
- ...flags2
107
- } = (0, import_arg.default)(this.flags);
108
- const options = await (0, import_utils.getOptions)({
109
- debug: flags2["--debug"] ? flags2["--verbose"] ? "verbose" : true : false,
110
- loadTamaguiOptions: true
111
- });
112
- const outputPath = flags2["--output"] || options.tamaguiOptions.outputCSS || "./tamagui.generated.css";
113
- const {
114
- loadTamagui
115
- } = require("@tamagui/static/loadTamagui");
116
- process.env.TAMAGUI_KEEP_THEMES = "1";
117
- await loadTamagui({
118
- ...options.tamaguiOptions,
119
- outputCSS: outputPath,
120
- platform: "web"
121
- });
122
- console.info(`Generated CSS to ${outputPath}`);
123
- }
124
- },
125
- "generate-themes": {
126
- shorthands: [],
127
- description: `Use to pre-build your themes`,
128
- flags: {
129
- "--help": Boolean,
130
- "--debug": Boolean,
131
- "--verbose": Boolean
132
- },
133
- async run() {
134
- const {
135
- _,
136
- ...flags2
137
- } = (0, import_arg.default)(this.flags);
138
- const options = await (0, import_utils.getOptions)({
139
- debug: flags2["--debug"] ? flags2["--verbose"] ? "verbose" : true : false
140
- });
141
- const [_cmd, inPath, outPath] = _;
142
- if (!inPath || !outPath) {
143
- throw new Error(`Must supply both input and output paths, missing one (inPath: ${inPath}, outPath: ${outPath})`);
144
- }
145
- const {
146
- generateThemes,
147
- writeGeneratedThemes
148
- } = require("@tamagui/generate-themes");
149
- try {
150
- const generated = await generateThemes(inPath);
151
- if (generated) {
152
- await writeGeneratedThemes(options.paths.dotDir, outPath, generated);
153
- console.info(`Successfully generated themes to ${outPath}`);
154
- } else {
155
- process.exit(1);
156
- }
157
- } catch (err) {
158
- console.error(`Error generating themes: ${err}`);
159
- return;
160
- }
161
- }
162
- },
163
- add: {
164
- shorthands: [],
165
- description: `Use to add fonts and icons to your monorepo.`,
166
- flags: {
167
- "--help": Boolean,
168
- "--debug": Boolean,
169
- "--verbose": Boolean
170
- },
171
- async run() {
172
- const {
173
- _,
174
- ...flags2
175
- } = (0, import_arg.default)(this.flags);
176
- const {
177
- installGeneratedPackage
178
- } = require("./add.cjs");
179
- const [cmd, type, path] = _;
180
- await installGeneratedPackage(type, path);
181
- }
182
- },
183
- build: {
184
- shorthands: ["b"],
185
- description: `Use to pre-build a Tamagui component directory. Use -- to run a command after optimization, then auto-restore files.`,
186
- flags: {
187
- "--help": Boolean,
188
- "--debug": Boolean,
189
- "--verbose": Boolean,
190
- "--dry-run": Boolean,
191
- "--target": String,
192
- "--include": String,
193
- "--exclude": String,
194
- "--output": String,
195
- "--output-around": Boolean,
196
- "--expect-optimizations": Number
197
- },
198
- async run() {
199
- const argvSeparatorIdx = process.argv.indexOf("--");
200
- let runCommand;
201
- if (argvSeparatorIdx !== -1) {
202
- runCommand = process.argv.slice(argvSeparatorIdx + 1);
203
- const argsBeforeSeparator = process.argv.slice(0, argvSeparatorIdx);
204
- process.argv = argsBeforeSeparator;
205
- }
206
- const {
207
- _,
208
- ...flags2
209
- } = (0, import_arg.default)(this.flags);
210
- const [_command, dir] = _;
211
- const dryRun = flags2["--dry-run"] || false;
212
- const debug = flags2["--debug"] ? flags2["--verbose"] ? "verbose" : true : false;
213
- const {
214
- build
215
- } = require("./build.cjs");
216
- const options = await (0, import_utils.getOptions)({
217
- debug
218
- });
219
- await build({
220
- ...options,
221
- dir,
222
- include: flags2["--include"],
223
- target: flags2["--target"] || "both",
224
- exclude: flags2["--exclude"],
225
- output: flags2["--output"],
226
- outputAround: flags2["--output-around"],
227
- expectOptimizations: flags2["--expect-optimizations"],
228
- runCommand,
229
- dryRun
230
- });
231
- }
232
- },
233
- upgrade: {
234
- shorthands: ["up"],
235
- description: `Upgrade all tamagui packages in your workspace to the latest version`,
236
- flags: {
237
- "--help": Boolean,
238
- "--debug": Boolean,
239
- "--from": String,
240
- "--to": String,
241
- "--changelog-only": Boolean,
242
- "--dry-run": Boolean
243
- },
244
- async run() {
245
- const {
246
- _,
247
- ...flags2
248
- } = (0, import_arg.default)(this.flags);
249
- const {
250
- upgrade
251
- } = require("./upgrade.cjs");
252
- await upgrade({
253
- from: flags2["--from"],
254
- to: flags2["--to"],
255
- changelogOnly: flags2["--changelog-only"],
256
- dryRun: flags2["--dry-run"],
257
- debug: flags2["--debug"]
258
- });
259
- }
260
- },
261
- "update-template": {
262
- shorthands: ["ut"],
263
- description: `Used to update your git repo with the source template. (e.g. Takeout)`,
264
- flags: {
265
- "--help": Boolean,
266
- "--template-repo": String,
267
- "--ignored-patterns": String
268
- },
269
- async run() {
270
- const {
271
- _,
272
- ...flags2
273
- } = (0, import_arg.default)(this.flags);
274
- const {
275
- updateTemplate
276
- } = require("./update-template.cjs");
277
- if (!flags2["--template-repo"]) {
278
- throw new Error("--template-repo is required");
279
- }
280
- await updateTemplate(flags2["--template-repo"], flags2["--ignored-patterns"]?.split(" "));
281
- }
282
- },
283
- "generate-prompt": {
284
- shorthands: [],
285
- description: `Generate an LLM-friendly markdown file from your Tamagui config`,
286
- flags: {
287
- "--help": Boolean,
288
- "--debug": Boolean,
289
- "--output": String
290
- },
291
- async run() {
292
- const {
293
- _,
294
- ...flags2
295
- } = (0, import_arg.default)(this.flags);
296
- const {
297
- generatePrompt
298
- } = require("./generate-prompt.cjs");
299
- const options = await (0, import_utils.getOptions)({
300
- debug: flags2["--debug"] ? true : false,
301
- loadTamaguiOptions: true
302
- });
303
- await generatePrompt({
304
- ...options,
305
- output: flags2["--output"]
306
- });
307
- }
308
- }
25
+ check: {
26
+ description: `Checks flat style values, inconsistent versions, duplicate installs, lockfile issues, and missing config.`,
27
+ shorthands: [],
28
+ flags: {
29
+ "--help": Boolean,
30
+ "--debug": Boolean,
31
+ "--verbose": Boolean,
32
+ "--styles-only": Boolean,
33
+ "--deps-only": Boolean
34
+ },
35
+ async run() {
36
+ const { _, ...flags2 } = (0, import_arg.default)(this.flags);
37
+ const options = await (0, import_utils.getOptions)({ debug: flags2["--debug"] ? flags2["--verbose"] ? "verbose" : true : false });
38
+ if (!flags2["--styles-only"]) {
39
+ const { checkDeps } = require("@tamagui/static/checkDeps");
40
+ await checkDeps(options.paths.root);
41
+ }
42
+ if (flags2["--deps-only"]) return;
43
+ const { checkStyleFiles, formatCheckResults, MissingConfigArtifactError } = require("@tamagui/language-service/check");
44
+ try {
45
+ const result = checkStyleFiles({
46
+ root: options.paths.root,
47
+ configPath: options.paths.conf
48
+ });
49
+ console.info(formatCheckResults(result));
50
+ if (result.diagnosticCount > 0) process.exitCode = 1;
51
+ } catch (error) {
52
+ if (error instanceof MissingConfigArtifactError) {
53
+ console.warn(import_chalk.default.yellow(`skipping flat value check: ${error.message}`));
54
+ return;
55
+ }
56
+ throw error;
57
+ }
58
+ }
59
+ },
60
+ generate: {
61
+ description: `Builds your entire tamagui configuration and outputs any CSS.`,
62
+ shorthands: [],
63
+ flags: {
64
+ "--help": Boolean,
65
+ "--debug": Boolean,
66
+ "--verbose": Boolean
67
+ },
68
+ async run() {
69
+ const { _, ...flags2 } = (0, import_arg.default)(this.flags);
70
+ const options = await (0, import_utils.getOptions)({
71
+ debug: flags2["--debug"] ? flags2["--verbose"] ? "verbose" : true : false,
72
+ loadTamaguiOptions: true
73
+ });
74
+ const { loadTamagui } = require("@tamagui/static/loadTamagui");
75
+ process.env.TAMAGUI_KEEP_THEMES = "1";
76
+ await loadTamagui({
77
+ ...options.tamaguiOptions,
78
+ platform: "web"
79
+ });
80
+ const { generatePrompt } = require("./generate-prompt.cjs");
81
+ const { join } = require("node:path");
82
+ await generatePrompt({
83
+ ...options,
84
+ output: join(options.paths.dotDir, "prompt.md")
85
+ });
86
+ }
87
+ },
88
+ "generate-css": {
89
+ shorthands: [],
90
+ description: `Generate the tamagui.generated.css file from your config`,
91
+ flags: {
92
+ "--help": Boolean,
93
+ "--debug": Boolean,
94
+ "--verbose": Boolean,
95
+ "--output": String
96
+ },
97
+ async run() {
98
+ const { _, ...flags2 } = (0, import_arg.default)(this.flags);
99
+ const options = await (0, import_utils.getOptions)({
100
+ debug: flags2["--debug"] ? flags2["--verbose"] ? "verbose" : true : false,
101
+ loadTamaguiOptions: true
102
+ });
103
+ const outputPath = flags2["--output"] || options.tamaguiOptions.outputCSS || "./tamagui.generated.css";
104
+ const { loadTamagui } = require("@tamagui/static/loadTamagui");
105
+ process.env.TAMAGUI_KEEP_THEMES = "1";
106
+ await loadTamagui({
107
+ ...options.tamaguiOptions,
108
+ outputCSS: outputPath,
109
+ platform: "web"
110
+ });
111
+ console.info(`Generated CSS to ${outputPath}`);
112
+ }
113
+ },
114
+ "generate-themes": {
115
+ shorthands: [],
116
+ description: `Use to pre-build your themes`,
117
+ flags: {
118
+ "--help": Boolean,
119
+ "--debug": Boolean,
120
+ "--verbose": Boolean
121
+ },
122
+ async run() {
123
+ const { _, ...flags2 } = (0, import_arg.default)(this.flags);
124
+ const options = await (0, import_utils.getOptions)({ debug: flags2["--debug"] ? flags2["--verbose"] ? "verbose" : true : false });
125
+ const [_cmd, inPath, outPath] = _;
126
+ if (!inPath || !outPath) {
127
+ throw new Error(`Must supply both input and output paths, missing one (inPath: ${inPath}, outPath: ${outPath})`);
128
+ }
129
+ const { generateThemes, writeGeneratedThemes } = require("@tamagui/generate-themes");
130
+ try {
131
+ const generated = await generateThemes(inPath);
132
+ if (generated) {
133
+ await writeGeneratedThemes(options.paths.dotDir, outPath, generated);
134
+ console.info(`Successfully generated themes to ${outPath}`);
135
+ } else {
136
+ process.exit(1);
137
+ }
138
+ } catch (err) {
139
+ console.error(`Error generating themes: ${err}`);
140
+ return;
141
+ }
142
+ }
143
+ },
144
+ add: {
145
+ shorthands: [],
146
+ description: `Use to add fonts and icons to your monorepo.`,
147
+ flags: {
148
+ "--help": Boolean,
149
+ "--debug": Boolean,
150
+ "--verbose": Boolean
151
+ },
152
+ async run() {
153
+ const { _, ...flags2 } = (0, import_arg.default)(this.flags);
154
+ const { installGeneratedPackage } = require("./add.cjs");
155
+ const [cmd, type, path] = _;
156
+ await installGeneratedPackage(type, path);
157
+ }
158
+ },
159
+ build: {
160
+ shorthands: ["b"],
161
+ description: `Use to pre-build a Tamagui component directory. Use -- to run a command after optimization, then auto-restore files.`,
162
+ flags: {
163
+ "--help": Boolean,
164
+ "--debug": Boolean,
165
+ "--verbose": Boolean,
166
+ "--dry-run": Boolean,
167
+ "--target": String,
168
+ "--include": String,
169
+ "--exclude": String,
170
+ "--output": String,
171
+ "--output-around": Boolean,
172
+ "--expect-optimizations": Number
173
+ },
174
+ async run() {
175
+ const argvSeparatorIdx = process.argv.indexOf("--");
176
+ let runCommand;
177
+ if (argvSeparatorIdx !== -1) {
178
+ runCommand = process.argv.slice(argvSeparatorIdx + 1);
179
+ const argsBeforeSeparator = process.argv.slice(0, argvSeparatorIdx);
180
+ process.argv = argsBeforeSeparator;
181
+ }
182
+ const { _, ...flags2 } = (0, import_arg.default)(this.flags);
183
+ const [_command, dir] = _;
184
+ const dryRun = flags2["--dry-run"] || false;
185
+ const debug = flags2["--debug"] ? flags2["--verbose"] ? "verbose" : true : false;
186
+ const { build } = require("./build.cjs");
187
+ const options = await (0, import_utils.getOptions)({ debug });
188
+ await build({
189
+ ...options,
190
+ dir,
191
+ include: flags2["--include"],
192
+ target: flags2["--target"] || "both",
193
+ exclude: flags2["--exclude"],
194
+ output: flags2["--output"],
195
+ outputAround: flags2["--output-around"],
196
+ expectOptimizations: flags2["--expect-optimizations"],
197
+ runCommand,
198
+ dryRun
199
+ });
200
+ }
201
+ },
202
+ upgrade: {
203
+ shorthands: ["up"],
204
+ description: `Upgrade all tamagui packages in your workspace to the latest version`,
205
+ flags: {
206
+ "--help": Boolean,
207
+ "--debug": Boolean,
208
+ "--from": String,
209
+ "--to": String,
210
+ "--changelog-only": Boolean,
211
+ "--dry-run": Boolean
212
+ },
213
+ async run() {
214
+ const { _, ...flags2 } = (0, import_arg.default)(this.flags);
215
+ const { upgrade } = require("./upgrade.cjs");
216
+ await upgrade({
217
+ from: flags2["--from"],
218
+ to: flags2["--to"],
219
+ changelogOnly: flags2["--changelog-only"],
220
+ dryRun: flags2["--dry-run"],
221
+ debug: flags2["--debug"]
222
+ });
223
+ }
224
+ },
225
+ setup: {
226
+ shorthands: [],
227
+ description: `Print an AI-agent prompt for adding Tamagui to a project for the first time`,
228
+ usage: `$ tamagui setup`,
229
+ flags: { "--help": Boolean },
230
+ async run() {
231
+ const { printSetupPrompt } = require("./setup-prompt.cjs");
232
+ printSetupPrompt();
233
+ }
234
+ },
235
+ migrate: {
236
+ shorthands: [],
237
+ description: `Print an AI-agent prompt for migrating a Tamagui app to v3`,
238
+ usage: `$ tamagui migrate --from v2
239
+ $ tamagui migrate --from v1`,
240
+ flags: {
241
+ "--help": Boolean,
242
+ "--from": String
243
+ },
244
+ async run() {
245
+ const { _, ...flags2 } = (0, import_arg.default)(this.flags);
246
+ const [_cmd, fromArg] = _;
247
+ const { printMigrationPrompt } = require("./migrate.cjs");
248
+ printMigrationPrompt({ from: flags2["--from"] || fromArg });
249
+ }
250
+ },
251
+ "to-tailwind": {
252
+ shorthands: [],
253
+ description: `Convert Tamagui JSX props in files or globs to Tailwind className syntax`,
254
+ flags: {
255
+ "--help": Boolean,
256
+ "--write": Boolean,
257
+ "--config": String,
258
+ "--use-default-config": Boolean,
259
+ "--rename-dom": Boolean
260
+ },
261
+ async run() {
262
+ const { _, ...flags2 } = (0, import_arg.default)(this.flags);
263
+ const { toTailwind } = require("./to-tailwind.cjs");
264
+ const [_cmd, ...patterns] = _;
265
+ await toTailwind({
266
+ patterns,
267
+ write: flags2["--write"],
268
+ configPath: flags2["--config"],
269
+ useDefaultConfig: flags2["--use-default-config"],
270
+ renameDom: flags2["--rename-dom"]
271
+ });
272
+ }
273
+ },
274
+ "update-template": {
275
+ shorthands: ["ut"],
276
+ description: `Used to update your git repo with the source template. (e.g. Takeout)`,
277
+ flags: {
278
+ "--help": Boolean,
279
+ "--template-repo": String,
280
+ "--ignored-patterns": String
281
+ },
282
+ async run() {
283
+ const { _, ...flags2 } = (0, import_arg.default)(this.flags);
284
+ const { updateTemplate } = require("./update-template.cjs");
285
+ if (!flags2["--template-repo"]) {
286
+ throw new Error("--template-repo is required");
287
+ }
288
+ await updateTemplate(flags2["--template-repo"], flags2["--ignored-patterns"]?.split(" "));
289
+ }
290
+ },
291
+ "generate-prompt": {
292
+ shorthands: [],
293
+ description: `Generate an LLM-friendly markdown file from your Tamagui config`,
294
+ flags: {
295
+ "--help": Boolean,
296
+ "--debug": Boolean,
297
+ "--output": String
298
+ },
299
+ async run() {
300
+ const { _, ...flags2 } = (0, import_arg.default)(this.flags);
301
+ const { generatePrompt } = require("./generate-prompt.cjs");
302
+ const options = await (0, import_utils.getOptions)({
303
+ debug: flags2["--debug"] ? true : false,
304
+ loadTamaguiOptions: true
305
+ });
306
+ await generatePrompt({
307
+ ...options,
308
+ output: flags2["--output"]
309
+ });
310
+ }
311
+ }
309
312
  };
310
- const commandEntries = Object.keys(COMMAND_MAP).flatMap(command2 => {
311
- const definition2 = COMMAND_MAP[command2];
312
- const entries = [command2, ...definition2.shorthands].map(cmd => {
313
- return [cmd, definition2];
314
- });
315
- return entries;
313
+ const commandEntries = Object.keys(COMMAND_MAP).flatMap((command2) => {
314
+ const definition2 = COMMAND_MAP[command2];
315
+ const entries = [command2, ...definition2.shorthands].map((cmd) => {
316
+ return [cmd, definition2];
317
+ });
318
+ return entries;
316
319
  });
317
320
  const commands = Object.fromEntries(commandEntries);
318
- const {
319
- _: [command],
320
- ...flags
321
- } = (0, import_arg.default)({
322
- "--help": Boolean,
323
- "--version": Boolean
324
- }, {
325
- permissive: true
326
- });
321
+ const { _: [command], ...flags } = (0, import_arg.default)({
322
+ "--help": Boolean,
323
+ "--version": Boolean
324
+ }, { permissive: true });
327
325
  if (flags["--version"]) {
328
- console.info(require("../package.json").version);
329
- process.exit(0);
326
+ console.info(require("../package.json").version);
327
+ process.exit(0);
330
328
  }
331
329
  if (!command && flags["--help"]) {
332
- console.info(`$ tamagui
330
+ console.info(`$ tamagui
333
331
 
334
332
  commands:
335
333
 
336
- ${Object.keys(COMMAND_MAP).map(key => {
337
- return ` ${key}`;
338
- }).join("\n")}`);
339
- process.exit(0);
334
+ ${Object.keys(COMMAND_MAP).map((key) => {
335
+ return ` ${key}`;
336
+ }).join("\n")}`);
337
+ process.exit(0);
340
338
  }
341
339
  if (!(command in commands)) {
342
- console.error();
343
- console.warn(import_chalk.default.yellow(`Not a valid command: ${command}`));
344
- process.exit(1);
340
+ console.error();
341
+ console.warn(import_chalk.default.yellow(`Not a valid command: ${command}`));
342
+ process.exit(1);
345
343
  }
346
344
  const definition = commands[command];
347
345
  main();
348
346
  async function main() {
349
- if (flags["--help"]) {
350
- console.info(`
347
+ if (flags["--help"]) {
348
+ console.info(`
351
349
  $ tamagui ${command}: ${definition.description}
352
350
  `);
353
- console.info(`Flags: ${Object.entries(definition.flags).map(([k, v]) => `${k} (${v.name})`)}`);
354
- process.exit(0);
355
- }
356
- const {
357
- _,
358
- ...cmdFlags
359
- } = (0, import_arg.default)(definition.flags);
360
- if (cmdFlags["--help"]) {
361
- console.info(`$ tamagui ${_}
351
+ if ("usage" in definition && definition.usage) {
352
+ console.info(`Usage:
353
+ ${definition.usage}
354
+ `);
355
+ }
356
+ console.info(`Flags:
357
+ ${Object.entries(definition.flags).map(([k, v]) => ` ${k} (${v.name})`).join("\n")}`);
358
+ process.exit(0);
359
+ }
360
+ const { _, ...cmdFlags } = (0, import_arg.default)(definition.flags);
361
+ if (cmdFlags["--help"]) {
362
+ console.info(`$ tamagui ${_}
362
363
 
363
364
  Flags: ${JSON.stringify(cmdFlags, null, 2)}
364
365
 
365
366
  `);
366
- process.exit(0);
367
- }
368
- try {
369
- await definition.run();
370
- } catch (err) {
371
- console.error(`Error running command: ${err.message}`);
372
- }
373
- process.exit(0);
374
- }
367
+ process.exit(0);
368
+ }
369
+ try {
370
+ await definition.run();
371
+ } catch (err) {
372
+ console.error(`Error running command: ${err.message}`);
373
+ process.exit(1);
374
+ }
375
+ process.exit(process.exitCode ?? 0);
376
+ }