breadc 0.1.0 → 0.1.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/README.md CHANGED
@@ -12,17 +12,21 @@ npm i breadc
12
12
 
13
13
  ## Usage
14
14
 
15
+ See [./examples/echo.ts](./examples/echo.ts).
16
+
15
17
  ```ts
16
18
  import Breadc from 'breadc'
17
19
 
18
- const cli = Breadc('vite', { version: '1.0.0' })
20
+ const cli = Breadc('echo', { version: '1.0.0' })
19
21
  .option('--host <host>')
20
22
  .option('--port <port>')
21
23
 
22
- cli.command('dev')
23
- .action((option) => {
24
- console.log(`Host: ${option.host}`);
25
- console.log(`Port: ${option.port}`);
24
+ cli
25
+ .command('[message]')
26
+ .action((message, option) => {
27
+ console.log(message ?? 'You can say anything!')
28
+ console.log(`Host: ${option.host}`)
29
+ console.log(`Port: ${option.port}`)
26
30
  })
27
31
 
28
32
  cli.run(process.argv.slice(2))
@@ -31,6 +35,30 @@ cli.run(process.argv.slice(2))
31
35
 
32
36
  If you are using IDEs that support TypeScript (like [Visual Studio Code](https://code.visualstudio.com/)), move your cursor to the parameter `option` in this `dev` command, and then you will find the `option` is automatically typed with `{ host: string, port: string }` or `Record<'host' | 'port', string>`.
33
37
 
38
+ ![vscode1](./images/vscode1.png)
39
+
40
+ ![vscode2](./images/vscode2.png)
41
+
42
+ ### Limitation
43
+
44
+ For the limitation of TypeScript, in the command format string, you can only write up to **4** pieces. That is to say, you can only write format string like `<p1> <p2> <p3> <p4>`, but `<p1> <p2> <p3> <p4> <p5>` does not work.
45
+
46
+ You should always use method chaining when registering options and commands. The example below will fail to infer the option `--host`.
47
+
48
+ ```ts
49
+ const cli = Breadc('cli')
50
+
51
+ cli
52
+ .option('--host')
53
+
54
+ cli
55
+ .option('--port')
56
+ .command('')
57
+ .action((option) => {
58
+ // The type of option is Record<'port', string>
59
+ })
60
+ ```
61
+
34
62
  ## Inspiration
35
63
 
36
64
  + [cac](https://github.com/cacjs/cac): Simple yet powerful framework for building command-line apps.
package/dist/index.d.ts CHANGED
@@ -86,7 +86,7 @@ declare type ActionFn<T extends any[], Option extends string = never> = (...arg:
86
86
  *
87
87
  * Generated by: npx tsx scripts/genType.ts 4
88
88
  */
89
- declare type ExtractCommand<T extends string> = T extends `[${infer P1}] [${infer P2}] [${infer P3}] [...${infer P4}]` ? [string | undefined, string | undefined, string | undefined, string[]] : T extends `[${infer P1}] [${infer P2}] [${infer P3}] [${infer P4}]` ? [string | undefined, string | undefined, string | undefined, string | undefined] : T extends `<${infer P1}> [${infer P2}] [${infer P3}] [...${infer P4}]` ? [string, string | undefined, string | undefined, string[]] : T extends `<${infer P1}> [${infer P2}] [${infer P3}] [${infer P4}]` ? [string, string | undefined, string | undefined, string | undefined] : T extends `<${infer P1}> <${infer P2}> [${infer P3}] [...${infer P4}]` ? [string, string, string | undefined, string[]] : T extends `<${infer P1}> <${infer P2}> [${infer P3}] [${infer P4}]` ? [string, string, string | undefined, string | undefined] : T extends `<${infer P1}> <${infer P2}> <${infer P3}> [...${infer P4}]` ? [string, string, string, string[]] : T extends `<${infer P1}> <${infer P2}> <${infer P3}> [${infer P4}]` ? [string, string, string, string | undefined] : T extends `<${infer P1}> <${infer P2}> <${infer P3}> <${infer P4}>` ? [string, string, string, string] : T extends `${infer P1} [${infer P2}] [${infer P3}] [...${infer P4}]` ? [string | undefined, string | undefined, string[]] : T extends `${infer P1} [${infer P2}] [${infer P3}] [${infer P4}]` ? [string | undefined, string | undefined, string | undefined] : T extends `${infer P1} <${infer P2}> [${infer P3}] [...${infer P4}]` ? [string, string | undefined, string[]] : T extends `${infer P1} <${infer P2}> [${infer P3}] [${infer P4}]` ? [string, string | undefined, string | undefined] : T extends `${infer P1} <${infer P2}> <${infer P3}> [...${infer P4}]` ? [string, string, string[]] : T extends `${infer P1} <${infer P2}> <${infer P3}> [${infer P4}]` ? [string, string, string | undefined] : T extends `${infer P1} <${infer P2}> <${infer P3}> <${infer P4}>` ? [string, string, string] : T extends `${infer P1} ${infer P2} [${infer P3}] [...${infer P4}]` ? [string | undefined, string[]] : T extends `${infer P1} ${infer P2} [${infer P3}] [${infer P4}]` ? [string | undefined, string | undefined] : T extends `${infer P1} ${infer P2} <${infer P3}> [...${infer P4}]` ? [string, string[]] : T extends `${infer P1} ${infer P2} <${infer P3}> [${infer P4}]` ? [string, string | undefined] : T extends `${infer P1} ${infer P2} <${infer P3}> <${infer P4}>` ? [string, string] : T extends `${infer P1} ${infer P2} ${infer P3} [...${infer P4}]` ? [string[]] : T extends `${infer P1} ${infer P2} ${infer P3} [${infer P4}]` ? [string | undefined] : T extends `${infer P1} ${infer P2} ${infer P3} <${infer P4}>` ? [string] : T extends `[${infer P1}] [${infer P2}] [...${infer P3}]` ? [string | undefined, string | undefined, string[]] : T extends `[${infer P1}] [${infer P2}] [${infer P3}]` ? [string | undefined, string | undefined, string | undefined] : T extends `<${infer P1}> [${infer P2}] [...${infer P3}]` ? [string, string | undefined, string[]] : T extends `<${infer P1}> [${infer P2}] [${infer P3}]` ? [string, string | undefined, string | undefined] : T extends `<${infer P1}> <${infer P2}> [...${infer P3}]` ? [string, string, string[]] : T extends `<${infer P1}> <${infer P2}> [${infer P3}]` ? [string, string, string | undefined] : T extends `<${infer P1}> <${infer P2}> <${infer P3}>` ? [string, string, string] : T extends `${infer P1} [${infer P2}] [...${infer P3}]` ? [string | undefined, string[]] : T extends `${infer P1} [${infer P2}] [${infer P3}]` ? [string | undefined, string | undefined] : T extends `${infer P1} <${infer P2}> [...${infer P3}]` ? [string, string[]] : T extends `${infer P1} <${infer P2}> [${infer P3}]` ? [string, string | undefined] : T extends `${infer P1} <${infer P2}> <${infer P3}>` ? [string, string] : T extends `${infer P1} ${infer P2} [...${infer P3}]` ? [string[]] : T extends `${infer P1} ${infer P2} [${infer P3}]` ? [string | undefined] : T extends `${infer P1} ${infer P2} <${infer P3}>` ? [string] : T extends `${infer P1} ${infer P2} ${infer P3}` ? [] : T extends `[${infer P1}] [...${infer P2}]` ? [string | undefined, string[]] : T extends `[${infer P1}] [${infer P2}]` ? [string | undefined, string | undefined] : T extends `<${infer P1}> [...${infer P2}]` ? [string, string[]] : T extends `<${infer P1}> [${infer P2}]` ? [string, string | undefined] : T extends `<${infer P1}> <${infer P2}>` ? [string, string] : T extends `${infer P1} [...${infer P2}]` ? [string[]] : T extends `${infer P1} [${infer P2}]` ? [string | undefined] : T extends `${infer P1} <${infer P2}>` ? [string] : T extends `${infer P1} ${infer P2}` ? [] : T extends `[...${infer P1}]` ? [string[]] : T extends `[${infer P1}]` ? [string | undefined] : T extends `<${infer P1}>` ? [string] : T extends `${infer P1}` ? [] : never;
89
+ declare type ExtractCommand<T extends string> = T extends `[${infer P1}] [${infer P2}] [${infer P3}] [...${infer P4}]` ? [string | undefined, string | undefined, string | undefined, string[]] : T extends `[${infer P1}] [${infer P2}] [${infer P3}] [${infer P4}]` ? [string | undefined, string | undefined, string | undefined, string | undefined] : T extends `<${infer P1}> [${infer P2}] [${infer P3}] [...${infer P4}]` ? [string, string | undefined, string | undefined, string[]] : T extends `<${infer P1}> [${infer P2}] [${infer P3}] [${infer P4}]` ? [string, string | undefined, string | undefined, string | undefined] : T extends `<${infer P1}> <${infer P2}> [${infer P3}] [...${infer P4}]` ? [string, string, string | undefined, string[]] : T extends `<${infer P1}> <${infer P2}> [${infer P3}] [${infer P4}]` ? [string, string, string | undefined, string | undefined] : T extends `<${infer P1}> <${infer P2}> <${infer P3}> [...${infer P4}]` ? [string, string, string, string[]] : T extends `<${infer P1}> <${infer P2}> <${infer P3}> [${infer P4}]` ? [string, string, string, string | undefined] : T extends `<${infer P1}> <${infer P2}> <${infer P3}> <${infer P4}>` ? [string, string, string, string] : T extends `${infer P1} [${infer P2}] [${infer P3}] [...${infer P4}]` ? [string | undefined, string | undefined, string[]] : T extends `${infer P1} [${infer P2}] [${infer P3}] [${infer P4}]` ? [string | undefined, string | undefined, string | undefined] : T extends `${infer P1} <${infer P2}> [${infer P3}] [...${infer P4}]` ? [string, string | undefined, string[]] : T extends `${infer P1} <${infer P2}> [${infer P3}] [${infer P4}]` ? [string, string | undefined, string | undefined] : T extends `${infer P1} <${infer P2}> <${infer P3}> [...${infer P4}]` ? [string, string, string[]] : T extends `${infer P1} <${infer P2}> <${infer P3}> [${infer P4}]` ? [string, string, string | undefined] : T extends `${infer P1} <${infer P2}> <${infer P3}> <${infer P4}>` ? [string, string, string] : T extends `${infer P1} ${infer P2} [${infer P3}] [...${infer P4}]` ? [string | undefined, string[]] : T extends `${infer P1} ${infer P2} [${infer P3}] [${infer P4}]` ? [string | undefined, string | undefined] : T extends `${infer P1} ${infer P2} <${infer P3}> [...${infer P4}]` ? [string, string[]] : T extends `${infer P1} ${infer P2} <${infer P3}> [${infer P4}]` ? [string, string | undefined] : T extends `${infer P1} ${infer P2} <${infer P3}> <${infer P4}>` ? [string, string] : T extends `${infer P1} ${infer P2} ${infer P3} [...${infer P4}]` ? [string[]] : T extends `${infer P1} ${infer P2} ${infer P3} [${infer P4}]` ? [string | undefined] : T extends `${infer P1} ${infer P2} ${infer P3} <${infer P4}>` ? [string] : T extends `[${infer P1}] [${infer P2}] [...${infer P3}]` ? [string | undefined, string | undefined, string[]] : T extends `[${infer P1}] [${infer P2}] [${infer P3}]` ? [string | undefined, string | undefined, string | undefined] : T extends `<${infer P1}> [${infer P2}] [...${infer P3}]` ? [string, string | undefined, string[]] : T extends `<${infer P1}> [${infer P2}] [${infer P3}]` ? [string, string | undefined, string | undefined] : T extends `<${infer P1}> <${infer P2}> [...${infer P3}]` ? [string, string, string[]] : T extends `<${infer P1}> <${infer P2}> [${infer P3}]` ? [string, string, string | undefined] : T extends `<${infer P1}> <${infer P2}> <${infer P3}>` ? [string, string, string] : T extends `${infer P1} [${infer P2}] [...${infer P3}]` ? [string | undefined, string[]] : T extends `${infer P1} [${infer P2}] [${infer P3}]` ? [string | undefined, string | undefined] : T extends `${infer P1} <${infer P2}> [...${infer P3}]` ? [string, string[]] : T extends `${infer P1} <${infer P2}> [${infer P3}]` ? [string, string | undefined] : T extends `${infer P1} <${infer P2}> <${infer P3}>` ? [string, string] : T extends `${infer P1} ${infer P2} [...${infer P3}]` ? [string[]] : T extends `${infer P1} ${infer P2} [${infer P3}]` ? [string | undefined] : T extends `${infer P1} ${infer P2} <${infer P3}>` ? [string] : T extends `${infer P1} ${infer P2} ${infer P3}` ? [] : T extends `[${infer P1}] [...${infer P2}]` ? [string | undefined, string[]] : T extends `[${infer P1}] [${infer P2}]` ? [string | undefined, string | undefined] : T extends `<${infer P1}> [...${infer P2}]` ? [string, string[]] : T extends `<${infer P1}> [${infer P2}]` ? [string, string | undefined] : T extends `<${infer P1}> <${infer P2}>` ? [string, string] : T extends `${infer P1} [...${infer P2}]` ? [string[]] : T extends `${infer P1} [${infer P2}]` ? [string | undefined] : T extends `${infer P1} <${infer P2}>` ? [string] : T extends `${infer P1} ${infer P2}` ? [] : T extends `[...${infer P1}]` ? [string[]] : T extends `[${infer P1}]` ? [string | undefined] : T extends `<${infer P1}>` ? [string] : T extends `${infer P1}` ? [] : T extends `` ? [] : never;
90
90
 
91
91
  declare class Breadc<GlobalOption extends string | never = never> {
92
92
  private readonly name;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "breadc",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Yet another Command Line Application Framework",
5
5
  "keywords": [
6
6
  "cli",