Skip to main content

Rest/Fn/Binary/
Command.rs

1/// Creates and returns the command-line argument matches for the `Rest`
2/// application.
3///
4/// This function sets up the command-line interface using the `clap` crate,
5
6/// defining various arguments and their properties such as short and long
7/// names, help messages, default values, and whether they are required.
8///
9/// # Returns
10///
11/// Returns an `ArgMatches` instance containing the parsed command-line
12/// arguments.
13///
14/// # Argument
15///
16/// * `Exclude` - An optional argument to specify patterns to exclude. Default
17///   is "node_modules".
18/// * `Parallel` - An optional flag to enable parallel processing.
19/// * `Pattern` - An optional argument to specify a pattern to match. Default is
20///   ".git".
21/// * `Root` - An optional argument to specify the root directory. Default is
22///   ".".
23///
24/// # Example
25///
26/// ```rust
27/// let matches = Fn();
28/// let exclude = matches.value_of("Exclude").unwrap_or("node_modules");
29/// let parallel = matches.is_present("Parallel");
30/// let pattern = matches.value_of("Pattern").unwrap_or(".git");
31/// let root = matches.value_of("Root").unwrap_or(".");
32/// ```
33///
34/// # Errors
35///
36/// This function will panic if there are issues with the argument definitions
37/// or parsing.
38pub fn Fn() -> ArgMatches {
39	Command::new("Rest")
40		.version(env!("CARGO_PKG_VERSION"))
41		.author("Source 🖋️ Open 👐🏻 <Source/Open@PlayForm.Cloud>")
42		.about("Rest ⛱️")
43		.subcommand(
44			Command::new("compile")
45				.about("Compile TypeScript files using SWC")
46				.arg(
47					Arg::new("Input")
48						.short('i')
49						.long("input")
50						.display_order(1)
51						.value_name("INPUT")
52						.required(true)
53						.help("Input directory containing TypeScript files"),
54				)
55				.arg(
56					Arg::new("Output")
57						.short('o')
58						.long("output")
59						.display_order(2)
60						.value_name("OUTPUT")
61						.required(true)
62						.help("Output directory for compiled JavaScript files"),
63				)
64				.arg(
65					Arg::new("Target")
66						.long("target")
67						.display_order(3)
68						.value_name("TARGET")
69						.required(false)
70						.help("ES target version (e.g., es2024)")
71						.default_value("es2024"),
72				)
73				.arg(
74					Arg::new("Module")
75						.long("module")
76						.display_order(4)
77						.value_name("MODULE")
78						.required(false)
79						.help("Module system (commonjs, esmodule)")
80						.default_value("esmodule"),
81				)
82				.arg(
83					Arg::new("SourceMaps")
84						.long("source-maps")
85						.display_order(5)
86						.action(SetTrue)
87						.required(false)
88						.help("Enable source maps"),
89				)
90				.arg(
91					Arg::new("UseDefineForClassFields")
92						.long("use-define-for-class-fields")
93						.display_order(6)
94						.action(SetTrue)
95						.required(false)
96						.help("Use defineForClassFields (VSCode: false)"),
97				)
98				.arg(
99					Arg::new("Parallel")
100						.short('P')
101						.long("Parallel")
102						.action(SetTrue)
103						.display_order(7)
104						.required(false)
105						.help("Parallel compilation ⏩"),
106				)
107				.arg(
108					Arg::new("Exclude")
109						.short('E')
110						.long("Exclude")
111						.display_order(8)
112						.value_name("EXCLUDE")
113						.required(false)
114						.help("Exclude patterns (comma-separated)")
115						.default_value("node_modules,.d.ts"),
116				),
117		)
118		.arg(
119			Arg::new("Exclude")
120				.short('E')
121				.long("Exclude")
122				.display_order(4)
123				.value_name("EXCLUDE")
124				.required(false)
125				.help("Exclude 🚫")
126				.default_value("node_modules"),
127		)
128		.arg(
129			Arg::new("Parallel")
130				.short('P')
131				.long("Parallel")
132				.action(SetTrue)
133				.display_order(2)
134				.value_name("PARALLEL")
135				.required(false)
136				.help("Parallel ⏩"),
137		)
138		.arg(
139			Arg::new("Pattern")
140				.long("Pattern")
141				.display_order(5)
142				.value_name("PATTERN")
143				.required(false)
144				.help("Pattern 🔍")
145				.default_value(".ts"),
146		)
147		.arg(
148			Arg::new("Root")
149				.short('R')
150				.long("Root")
151				.display_order(3)
152				.value_name("ROOT")
153				.required(false)
154				.help("Root 📂")
155				.default_value("."),
156		)
157		.get_matches()
158}
159
160use clap::{Arg, ArgAction::SetTrue, ArgMatches, Command};
161
162pub mod Entry;
163
164pub mod Parallel;
165
166pub mod Sequential;