@miyaoka/fsss 0.3.2 → 0.4.0

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.d.ts CHANGED
@@ -1,16 +1,21 @@
1
1
  interface AutoEnvConfig {
2
2
  prefix: string;
3
3
  }
4
+ interface VersionConfig {
5
+ number: string;
6
+ alias?: string | false;
7
+ }
4
8
  interface CLIOptions {
5
9
  name: string;
6
10
  commandsDir?: string;
7
11
  autoEnv?: AutoEnvConfig;
8
12
  defaultCommand?: string;
13
+ version?: string | VersionConfig;
9
14
  }
10
15
  interface CLI {
11
16
  run: () => Promise<void>;
12
17
  }
13
18
  declare function createCLI(options: CLIOptions): CLI;
14
19
  export { createCLI };
15
- export type { CLI, CLIOptions };
20
+ export type { CLI, CLIOptions, VersionConfig };
16
21
  //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAkBA,UAAU,aAAa;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,GAAG;IACX,GAAG,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAgFD,iBAAS,SAAS,CAAC,OAAO,EAAE,UAAU,GAAG,GAAG,CAgJ3C;AAED,OAAO,EAAE,SAAS,EAAE,CAAC;AACrB,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAkBA,UAAU,aAAa;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,aAAa;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;CACxB;AAED,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;CAClC;AAED,UAAU,GAAG;IACX,GAAG,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAwGD,iBAAS,SAAS,CAAC,OAAO,EAAE,UAAU,GAAG,GAAG,CAkK3C;AAED,OAAO,EAAE,SAAS,EAAE,CAAC;AACrB,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC"}
package/dist/help.d.ts CHANGED
@@ -6,6 +6,8 @@ interface HelpConfig {
6
6
  description?: string;
7
7
  argsDefs?: ArgsDefs;
8
8
  envPrefix?: string;
9
+ showVersion: boolean;
10
+ versionAlias?: string;
9
11
  }
10
12
  declare function generateHelp(config: HelpConfig): string;
11
13
  interface SubcommandHelpConfig {
@@ -22,6 +24,8 @@ interface DefaultCommandHelpConfig {
22
24
  description?: string;
23
25
  argsDefs?: ArgsDefs;
24
26
  envPrefix?: string;
27
+ showVersion: boolean;
28
+ versionAlias?: string;
25
29
  availableEntries: AvailableEntry[];
26
30
  }
27
31
  declare function generateDefaultCommandHelp(config: DefaultCommandHelpConfig): string;
@@ -1 +1 @@
1
- {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAU,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGhD,UAAU,UAAU;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAgFD,iBAAS,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CA8DhD;AAGD,UAAU,oBAAoB;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,gBAAgB,EAAE,cAAc,EAAE,CAAC;CACpC;AAED,iBAAS,sBAAsB,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAuBpE;AAID,iBAAS,2BAA2B,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAG/E;AAID,UAAU,wBAAwB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,cAAc,EAAE,CAAC;CACpC;AAED,iBAAS,0BAA0B,CAAC,MAAM,EAAE,wBAAwB,GAAG,MAAM,CAiE5E;AAED,OAAO,EACL,0BAA0B,EAC1B,YAAY,EACZ,sBAAsB,EACtB,2BAA2B,GAC5B,CAAC;AACF,YAAY,EAAE,wBAAwB,EAAE,UAAU,EAAE,oBAAoB,EAAE,CAAC"}
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAU,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGhD,UAAU,UAAU;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAwFD,iBAAS,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAkFhD;AAGD,UAAU,oBAAoB;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,gBAAgB,EAAE,cAAc,EAAE,CAAC;CACpC;AAED,iBAAS,sBAAsB,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAuBpE;AAID,iBAAS,2BAA2B,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAG/E;AAID,UAAU,wBAAwB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,cAAc,EAAE,CAAC;CACpC;AAED,iBAAS,0BAA0B,CAAC,MAAM,EAAE,wBAAwB,GAAG,MAAM,CAkE5E;AAED,OAAO,EACL,0BAA0B,EAC1B,YAAY,EACZ,sBAAsB,EACtB,2BAA2B,GAC5B,CAAC;AACF,YAAY,EAAE,wBAAwB,EAAE,UAAU,EAAE,oBAAoB,EAAE,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export { createCLI } from './cli';
2
2
  export { definePlugin } from './plugin';
3
3
  export { defineCommand } from './types';
4
- export type { CLI, CLIOptions } from './cli';
4
+ export type { CLI, CLIOptions, VersionConfig } from './cli';
5
5
  export type { ArgDef, ArgDefBase, ArgsDefs, CommandConfig, Extensions, InferArgs, Middleware, MiddlewareContext, Params, PluginConfig, PluginContext, PluginSetup, RunContext, } from './types';
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC7C,YAAY,EACV,MAAM,EACN,UAAU,EACV,QAAQ,EACR,aAAa,EACb,UAAU,EACV,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,MAAM,EACN,YAAY,EACZ,aAAa,EACb,WAAW,EACX,UAAU,GACX,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC5D,YAAY,EACV,MAAM,EACN,UAAU,EACV,QAAQ,EACR,aAAa,EACb,UAAU,EACV,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,MAAM,EACN,YAAY,EACZ,aAAa,EACb,WAAW,EACX,UAAU,GACX,MAAM,SAAS,CAAC"}
package/dist/index.js CHANGED
@@ -69,17 +69,17 @@ function v(e, t) {
69
69
  function y(e) {
70
70
  return e instanceof r;
71
71
  }
72
- function b(e) {
72
+ function ee(e) {
73
73
  return e instanceof a;
74
74
  }
75
75
  //#endregion
76
76
  //#region src/help.ts
77
- var x = " ", S = 2;
78
- function C(e, t, n, r) {
77
+ var b = " ", x = 2;
78
+ function S(e, t, n, r) {
79
79
  if (e.env !== void 0) return e.env;
80
80
  if (t !== void 0) return _(t, n, r);
81
81
  }
82
- function w(e) {
82
+ function te(e) {
83
83
  switch (typeof e) {
84
84
  case "string":
85
85
  case "number":
@@ -88,62 +88,84 @@ function w(e) {
88
88
  default: return JSON.stringify(e);
89
89
  }
90
90
  }
91
- function ee(e, t) {
91
+ function C(e, t) {
92
92
  let n = [];
93
- return t !== void 0 && n.push(`env: ${t}`), "default" in e && e.default !== void 0 && n.push(`default: ${w(e.default)}`), n.length === 0 ? "" : ` (${n.join(", ")})`;
93
+ return t !== void 0 && n.push(`env: ${t}`), "default" in e && e.default !== void 0 && n.push(`default: ${te(e.default)}`), n.length === 0 ? "" : ` (${n.join(", ")})`;
94
94
  }
95
- function T(e, t, n, r) {
96
- let i = y(t.type) ? "" : ` <${e}>`, a = `${t.alias === void 0 ? " " : `-${t.alias}, `}--${e}${i}`, o = C(t, n, r, e);
95
+ function w(e, t, n, r) {
96
+ let i = y(t.type) ? "" : ` <${e}>`, a = `${t.alias === void 0 ? " " : `-${t.alias}, `}--${e}${i}`, o = S(t, n, r, e);
97
97
  return {
98
98
  left: a,
99
- right: `${t.description}${ee(t, o)}`
99
+ right: `${t.description}${C(t, o)}`
100
100
  };
101
101
  }
102
- function E() {
102
+ function T() {
103
103
  return {
104
104
  left: "-h, --help",
105
105
  right: "ヘルプを表示する"
106
106
  };
107
107
  }
108
+ function E(e) {
109
+ return {
110
+ left: `${e === void 0 ? " " : `-${e}, `}--version`,
111
+ right: "バージョンを表示する"
112
+ };
113
+ }
108
114
  function D(e) {
109
- let { programName: t, commandPath: n, description: r, argsDefs: i, envPrefix: a } = e, o = [];
110
- r !== void 0 && (o.push(r), o.push(""));
111
- let s = [t, ...n];
115
+ let { programName: t, commandPath: n, description: r, argsDefs: i, envPrefix: a, showVersion: o, versionAlias: s } = e, c = [];
116
+ r !== void 0 && (c.push(r), c.push(""));
117
+ let l = [t, ...n];
112
118
  if (i !== void 0) {
113
119
  let e = Object.entries(i), t = e.some(([, e]) => e.positional === !0), n = e.some(([, e]) => e.positional !== !0);
114
120
  if (t) {
115
121
  let t = e.filter(([, e]) => e.positional === !0).map(([e]) => `<${e}>`);
116
- s.push(...t);
122
+ l.push(...t);
117
123
  }
118
- n && s.push("[options]");
124
+ n && l.push("[options]");
119
125
  }
120
- if (o.push(`Usage: ${s.join(" ")}`), o.push(""), i === void 0) return o.join("\n");
121
- let c = Object.entries(i).filter(([, e]) => e.positional !== !0);
122
- if (c.length === 0) {
123
- o.push("Options:");
124
- let e = E();
125
- return o.push(`${x}${e.left} ${e.right}`), o.join("\n");
126
+ if (c.push(`Usage: ${l.join(" ")}`), c.push(""), i === void 0) {
127
+ if (o) {
128
+ c.push("Options:");
129
+ let e = [T(), E(s)], t = Math.max(...e.map((e) => e.left.length));
130
+ for (let n of e) {
131
+ let e = " ".repeat(t - n.left.length + x);
132
+ c.push(`${b}${n.left}${e}${n.right}`);
133
+ }
134
+ }
135
+ return c.join("\n");
126
136
  }
127
- o.push("Options:");
128
- let l = c.map(([e, t]) => T(e, t, a, n));
129
- l.push(E());
130
- let u = Math.max(...l.map((e) => e.left.length));
131
- for (let e of l) {
132
- let t = " ".repeat(u - e.left.length + S);
133
- o.push(`${x}${e.left}${t}${e.right}`);
137
+ let u = Object.entries(i).filter(([, e]) => e.positional !== !0);
138
+ if (u.length === 0) {
139
+ c.push("Options:");
140
+ let e = [T()];
141
+ o && e.push(E(s));
142
+ let t = Math.max(...e.map((e) => e.left.length));
143
+ for (let n of e) {
144
+ let e = " ".repeat(t - n.left.length + x);
145
+ c.push(`${b}${n.left}${e}${n.right}`);
146
+ }
147
+ return c.join("\n");
134
148
  }
135
- return o.join("\n");
149
+ c.push("Options:");
150
+ let d = u.map(([e, t]) => w(e, t, a, n));
151
+ d.push(T()), o && d.push(E(s));
152
+ let f = Math.max(...d.map((e) => e.left.length));
153
+ for (let e of d) {
154
+ let t = " ".repeat(f - e.left.length + x);
155
+ c.push(`${b}${e.left}${t}${e.right}`);
156
+ }
157
+ return c.join("\n");
136
158
  }
137
- function te(e) {
159
+ function ne(e) {
138
160
  let { programName: t, commandPath: n, availableEntries: r } = e, i = [], a = [t, ...n].join(" ");
139
161
  if (i.push(`Usage: ${a} <command>`), i.push(""), r.length === 0) return i.push("No available commands."), i.join("\n");
140
162
  i.push("Available commands:");
141
163
  for (let e of r) {
142
164
  if (e.isDynamic) {
143
- i.push(`${x}<${e.paramName}>`);
165
+ i.push(`${b}<${e.paramName}>`);
144
166
  continue;
145
167
  }
146
- i.push(`${x}${e.name}`);
168
+ i.push(`${b}${e.name}`);
147
169
  }
148
170
  return i.join("\n");
149
171
  }
@@ -154,38 +176,36 @@ function O(e, t) {
154
176
  e
155
177
  ].join("\n");
156
178
  }
157
- function k(e) {
158
- let { programName: t, defaultCommandName: n, commandPath: r, description: i, argsDefs: a, envPrefix: o, availableEntries: s } = e, c = [];
159
- if (i !== void 0 && (c.push(i), c.push("")), a !== void 0 && Object.entries(a).some(([, e]) => e.positional !== !0) ? c.push(`Usage: ${t} [options]`) : c.push(`Usage: ${t}`), c.push(` ${t} <command>`), c.push(""), a !== void 0) {
179
+ function re(e) {
180
+ let { programName: t, defaultCommandName: n, commandPath: r, description: i, argsDefs: a, envPrefix: o, showVersion: s, versionAlias: c, availableEntries: l } = e, u = [];
181
+ i !== void 0 && (u.push(i), u.push("")), a !== void 0 && Object.entries(a).some(([, e]) => e.positional !== !0) ? u.push(`Usage: ${t} [options]`) : u.push(`Usage: ${t}`), u.push(` ${t} <command>`), u.push("");
182
+ let d = [];
183
+ if (a !== void 0) {
160
184
  let e = Object.entries(a).filter(([, e]) => e.positional !== !0);
161
- if (e.length > 0) {
162
- c.push("Options:");
163
- let t = e.map(([e, t]) => T(e, t, o, r));
164
- t.push(E());
165
- let n = Math.max(...t.map((e) => e.left.length));
166
- for (let e of t) {
167
- let t = " ".repeat(n - e.left.length + S);
168
- c.push(`${x}${e.left}${t}${e.right}`);
169
- }
170
- c.push("");
171
- }
185
+ d.push(...e.map(([e, t]) => w(e, t, o, r)));
186
+ }
187
+ d.push(T()), s && d.push(E(c)), u.push("Options:");
188
+ let f = Math.max(...d.map((e) => e.left.length));
189
+ for (let e of d) {
190
+ let t = " ".repeat(f - e.left.length + x);
191
+ u.push(`${b}${e.left}${t}${e.right}`);
172
192
  }
173
- if (s.length > 0) {
174
- c.push("Available commands:");
175
- for (let e of s) {
193
+ if (u.push(""), l.length > 0) {
194
+ u.push("Available commands:");
195
+ for (let e of l) {
176
196
  if (e.isDynamic) {
177
- c.push(`${x}<${e.paramName}>`);
197
+ u.push(`${b}<${e.paramName}>`);
178
198
  continue;
179
199
  }
180
200
  let t = e.name === n ? " (default)" : "";
181
- c.push(`${x}${e.name}${t}`);
201
+ u.push(`${b}${e.name}${t}`);
182
202
  }
183
203
  }
184
- return c.join("\n");
204
+ return u.join("\n");
185
205
  }
186
206
  //#endregion
187
207
  //#region src/parser.ts
188
- var A = "--", j = "-", ne = "--", re = "--no-", M = "true", N = "false";
208
+ var k = "--", A = "-", j = "--", M = "--no-", N = "true", ie = "false";
189
209
  function P(e, t, n) {
190
210
  let r = e.get(t);
191
211
  if (r) {
@@ -195,29 +215,29 @@ function P(e, t, n) {
195
215
  e.set(t, [n]);
196
216
  }
197
217
  function F(e, t) {
198
- return t + 1 >= e.length ? !1 : !e[t + 1].startsWith(j);
218
+ return t + 1 >= e.length ? !1 : !e[t + 1].startsWith(A);
199
219
  }
200
220
  function I(e, t) {
201
221
  let n = /* @__PURE__ */ new Map(), r = [], i = [], a = 0;
202
222
  for (; a < e.length;) {
203
223
  let o = e[a];
204
- if (o === ne) {
224
+ if (o === j) {
205
225
  i = e.slice(a + 1);
206
226
  break;
207
227
  }
208
- if (o.startsWith(re)) {
209
- P(n, o.slice(5), N), a++;
228
+ if (o.startsWith(M)) {
229
+ P(n, o.slice(5), ie), a++;
210
230
  continue;
211
231
  }
212
- if (o.startsWith(A) && o.includes("=")) {
232
+ if (o.startsWith(k) && o.includes("=")) {
213
233
  let e = o.indexOf("=");
214
234
  P(n, o.slice(2, e), o.slice(e + 1)), a++;
215
235
  continue;
216
236
  }
217
- if (o.startsWith(A)) {
237
+ if (o.startsWith(k)) {
218
238
  let r = o.slice(2);
219
239
  if (t.booleanFlags.has(r)) {
220
- P(n, r, M), a++;
240
+ P(n, r, N), a++;
221
241
  continue;
222
242
  }
223
243
  if (F(e, a)) {
@@ -226,15 +246,15 @@ function I(e, t) {
226
246
  }
227
247
  throw Error(`Flag --${r} requires a value`);
228
248
  }
229
- if (o.startsWith(j) && !o.startsWith(A) && o.includes("=")) {
249
+ if (o.startsWith(A) && !o.startsWith(k) && o.includes("=")) {
230
250
  let e = o.indexOf("="), r = o.slice(1, e), i = o.slice(e + 1);
231
251
  P(n, t.aliases.get(r) ?? r, i), a++;
232
252
  continue;
233
253
  }
234
- if (o.startsWith(j) && !o.startsWith(A)) {
254
+ if (o.startsWith(A) && !o.startsWith(k)) {
235
255
  let r = o.slice(1), i = t.aliases.get(r) ?? r;
236
256
  if (t.booleanFlags.has(i)) {
237
- P(n, i, M), a++;
257
+ P(n, i, N), a++;
238
258
  continue;
239
259
  }
240
260
  if (F(e, a)) {
@@ -344,24 +364,24 @@ var G = /^\[(.+)]$/, K = [".ts", ".js"], q = "index", J = "_";
344
364
  function Y(e) {
345
365
  return K.find((t) => e.endsWith(t));
346
366
  }
347
- function ie(e, t) {
367
+ function ae(e, t) {
348
368
  return e.slice(0, -t.length);
349
369
  }
350
- async function ae(e) {
370
+ async function oe(e) {
351
371
  try {
352
372
  return (await l(e)).isFile();
353
373
  } catch {
354
374
  return !1;
355
375
  }
356
376
  }
357
- async function oe(e) {
377
+ async function se(e) {
358
378
  try {
359
379
  let t = (await c(e, { withFileTypes: !0 })).toSorted((e, t) => (e.isFile() ? K.indexOf(Y(e.name) ?? "") : -1) - (t.isFile() ? K.indexOf(Y(t.name) ?? "") : -1)), n = [], r = /* @__PURE__ */ new Set();
360
380
  for (let e of t) {
361
381
  if (e.name.startsWith(J)) continue;
362
382
  let t = e.isFile() ? Y(e.name) : void 0;
363
383
  if (t !== void 0) {
364
- let i = ie(e.name, t);
384
+ let i = ae(e.name, t);
365
385
  if (i === q || r.has(i)) continue;
366
386
  r.add(i), n.push({
367
387
  name: i,
@@ -421,7 +441,7 @@ async function X(t, r) {
421
441
  }
422
442
  for (let t of K) {
423
443
  let n = e(i, q + t);
424
- if (await ae(n)) return {
444
+ if (await oe(n)) return {
425
445
  kind: "resolved",
426
446
  filePath: n,
427
447
  params: a,
@@ -429,7 +449,7 @@ async function X(t, r) {
429
449
  traversedDirs: o
430
450
  };
431
451
  }
432
- let l = await oe(i);
452
+ let l = await se(i);
433
453
  return {
434
454
  kind: "unresolved",
435
455
  stoppedDir: i,
@@ -438,13 +458,13 @@ async function X(t, r) {
438
458
  }
439
459
  //#endregion
440
460
  //#region src/validator.ts
441
- function se(e) {
442
- return y(e) ? o.preprocess((e) => typeof e == "string" ? e === "true" || e === "1" : e, e) : b(e) ? o.preprocess((e) => typeof e == "string" ? Number(e) : e, e) : e;
461
+ function ce(e) {
462
+ return y(e) ? o.preprocess((e) => typeof e == "string" ? e === "true" || e === "1" : e, e) : ee(e) ? o.preprocess((e) => typeof e == "string" ? Number(e) : e, e) : e;
443
463
  }
444
- function ce(e, t) {
464
+ function le(e, t) {
445
465
  let n = {};
446
466
  for (let [t, r] of Object.entries(e)) {
447
- let e = se(r.type);
467
+ let e = ce(r.type);
448
468
  if (r.multiple === !0) {
449
469
  n[t] = o.array(e);
450
470
  continue;
@@ -455,8 +475,17 @@ function ce(e, t) {
455
475
  }
456
476
  //#endregion
457
477
  //#region src/cli.ts
458
- var le = "commands", Z = 2, Q = 1;
459
- function ue(e) {
478
+ var ue = "commands", de = 2, Z = 1, Q = "V";
479
+ function fe(e) {
480
+ return typeof e == "string" ? {
481
+ number: e,
482
+ alias: Q
483
+ } : {
484
+ number: e.number,
485
+ alias: e.alias === !1 ? void 0 : e.alias ?? Q
486
+ };
487
+ }
488
+ function pe(e) {
460
489
  let t = /* @__PURE__ */ new Set(), n = /* @__PURE__ */ new Map();
461
490
  for (let [r, i] of Object.entries(e)) y(i.type) && t.add(r), i.alias !== void 0 && n.set(i.alias, r);
462
491
  return {
@@ -467,11 +496,11 @@ function ue(e) {
467
496
  function $(e, r) {
468
497
  return t(n(e), r).replace(/\.ts$/, "").split("/").filter((e) => e !== "index" && !e.startsWith("["));
469
498
  }
470
- function de(e, r) {
499
+ function me(e, r) {
471
500
  let i = t(n(e), r);
472
501
  return i === "" || i === "." ? [] : i.split("/").filter((e) => !e.startsWith("["));
473
502
  }
474
- function fe(e) {
503
+ function he(e) {
475
504
  let t, n = [];
476
505
  for (let r = 0; r < e.length; r++) {
477
506
  let i = e[r];
@@ -492,87 +521,101 @@ function fe(e) {
492
521
  remainingTokens: n
493
522
  };
494
523
  }
495
- function pe(e) {
496
- let t = e.commandsDir ?? le, r = e.name, a = e.autoEnv?.prefix, o = e.defaultCommand;
497
- async function s() {
498
- let { configPath: e, remainingTokens: s } = fe(process.argv.slice(Z)), c = await X(t, s);
499
- if (c.kind === "unresolved") if (n(c.stoppedDir) === n(t) && o !== void 0) {
500
- if (s.includes("--help") || s.includes("-h")) {
501
- let e = await X(t, [o]);
524
+ function ge(e, t) {
525
+ return e.some((e) => e === "--version" || t !== void 0 && e === `-${t}`);
526
+ }
527
+ function _e(e) {
528
+ let t = e.commandsDir ?? ue, r = e.name, a = e.autoEnv?.prefix, o = e.defaultCommand, s = e.version === void 0 ? void 0 : fe(e.version);
529
+ async function c() {
530
+ let { configPath: e, remainingTokens: c } = he(process.argv.slice(de)), l = await X(t, c);
531
+ if (l.kind === "unresolved") {
532
+ let e = n(l.stoppedDir) === n(t), i = c.some((e) => !e.startsWith("-"));
533
+ if (e && !i && s !== void 0 && ge(c, s.alias)) {
534
+ console.log(s.number);
535
+ return;
536
+ }
537
+ if (e && o !== void 0) {
538
+ if (c.includes("--help") || c.includes("-h")) {
539
+ let e = await X(t, [o]);
540
+ if (e.kind === "unresolved") throw Error(`defaultCommand "${o}" does not match any command file`);
541
+ let n = (await import(e.filePath)).default, i = n.args ?? {}, c = re({
542
+ programName: r,
543
+ defaultCommandName: o,
544
+ commandPath: $(t, e.filePath),
545
+ description: n.description,
546
+ argsDefs: Object.keys(i).length > 0 ? i : void 0,
547
+ envPrefix: a,
548
+ showVersion: s !== void 0,
549
+ versionAlias: s?.alias,
550
+ availableEntries: l.availableEntries
551
+ });
552
+ console.log(c);
553
+ return;
554
+ }
555
+ let e = await X(t, [o, ...c]);
502
556
  if (e.kind === "unresolved") throw Error(`defaultCommand "${o}" does not match any command file`);
503
- let n = (await import(e.filePath)).default, i = n.args ?? {}, s = k({
557
+ l = e;
558
+ } else {
559
+ let e = ne({
504
560
  programName: r,
505
- defaultCommandName: o,
506
- commandPath: $(t, e.filePath),
507
- description: n.description,
508
- argsDefs: Object.keys(i).length > 0 ? i : void 0,
509
- envPrefix: a,
510
- availableEntries: c.availableEntries
561
+ commandPath: me(t, l.stoppedDir),
562
+ availableEntries: l.availableEntries
511
563
  });
512
- console.log(s);
564
+ console.log(e);
513
565
  return;
514
566
  }
515
- let e = await X(t, [o, ...s]);
516
- if (e.kind === "unresolved") throw Error(`defaultCommand "${o}" does not match any command file`);
517
- c = e;
518
- } else {
519
- let e = te({
520
- programName: r,
521
- commandPath: de(t, c.stoppedDir),
522
- availableEntries: c.availableEntries
523
- });
524
- console.log(e);
525
- return;
526
567
  }
527
- let l = (await import(c.filePath)).default, u = l.args ?? {}, d = $(t, c.filePath), f = D({
568
+ let u = (await import(l.filePath)).default, d = u.args ?? {}, f = $(t, l.filePath), p = D({
528
569
  programName: r,
529
- commandPath: d,
530
- description: l.description,
531
- argsDefs: Object.keys(u).length > 0 ? u : void 0,
532
- envPrefix: a
570
+ commandPath: f,
571
+ description: u.description,
572
+ argsDefs: Object.keys(d).length > 0 ? d : void 0,
573
+ envPrefix: a,
574
+ showVersion: s !== void 0,
575
+ versionAlias: s?.alias
533
576
  });
534
- if (c.remainingTokens.includes("--help") || c.remainingTokens.includes("-h")) {
535
- console.log(f);
577
+ if (l.remainingTokens.includes("--help") || l.remainingTokens.includes("-h")) {
578
+ console.log(p);
536
579
  return;
537
580
  }
538
- let p = ue(u), m;
581
+ let m = pe(d), h;
539
582
  try {
540
- let t = I(c.remainingTokens, p), n = await g(r, e);
541
- m = ce(u, W({
542
- argsDefs: u,
583
+ let t = I(l.remainingTokens, m), n = await g(r, e);
584
+ h = le(d, W({
585
+ argsDefs: d,
543
586
  parsedTokens: t,
544
587
  env: process.env,
545
588
  config: n,
546
- commandPath: d,
589
+ commandPath: f,
547
590
  envPrefix: a
548
591
  }));
549
592
  } catch (e) {
550
593
  if (e instanceof i) {
551
594
  let t = e.issues.map((e) => `${e.path.join(".")}: ${e.message}`);
552
- console.error(O(f, t)), process.exit(Q);
595
+ console.error(O(p, t)), process.exit(Z);
553
596
  }
554
- throw e instanceof Error && (console.error(O(f, [e.message])), process.exit(Q)), e;
597
+ throw e instanceof Error && (console.error(O(p, [e.message])), process.exit(Z)), e;
555
598
  }
556
- let { extensions: h, middlewares: _ } = await H(c.traversedDirs, { cliName: r }), v = {
557
- commandPath: d,
558
- params: c.params,
559
- args: m,
560
- extensions: h
599
+ let { extensions: _, middlewares: v } = await H(l.traversedDirs, { cliName: r }), y = {
600
+ commandPath: f,
601
+ params: l.params,
602
+ args: h,
603
+ extensions: _
561
604
  };
562
- await V(_, async (e) => {
563
- await l.run({
605
+ await V(v, async (e) => {
606
+ await u.run({
564
607
  params: e.params,
565
608
  args: e.args,
566
609
  extensions: e.extensions
567
610
  });
568
- })(v);
611
+ })(y);
569
612
  }
570
- return { run: s };
613
+ return { run: c };
571
614
  }
572
615
  //#endregion
573
616
  //#region src/types.ts
574
- function me(e) {
617
+ function ve(e) {
575
618
  return e;
576
619
  }
577
620
  //#endregion
578
- export { pe as createCLI, me as defineCommand, z as definePlugin };
621
+ export { _e as createCLI, ve as defineCommand, z as definePlugin };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@miyaoka/fsss",
3
- "version": "0.3.2",
3
+ "version": "0.4.0",
4
4
  "description": "A CLI framework where your file structure becomes your command structure, and a single schema gives you typed values whether they come from flags, env vars, or config files.",
5
5
  "type": "module",
6
6
  "author": "miyaoka",