@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 +6 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/help.d.ts +4 -0
- package/dist/help.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +171 -128
- package/package.json +1 -1
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;
|
|
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;
|
package/dist/help.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
|
72
|
+
function ee(e) {
|
|
73
73
|
return e instanceof a;
|
|
74
74
|
}
|
|
75
75
|
//#endregion
|
|
76
76
|
//#region src/help.ts
|
|
77
|
-
var
|
|
78
|
-
function
|
|
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
|
|
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
|
|
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: ${
|
|
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
|
|
96
|
-
let i = y(t.type) ? "" : ` <${e}>`, a = `${t.alias === void 0 ? " " : `-${t.alias}, `}--${e}${i}`, o =
|
|
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}${
|
|
99
|
+
right: `${t.description}${C(t, o)}`
|
|
100
100
|
};
|
|
101
101
|
}
|
|
102
|
-
function
|
|
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,
|
|
110
|
-
r !== void 0 && (
|
|
111
|
-
let
|
|
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
|
-
|
|
122
|
+
l.push(...t);
|
|
117
123
|
}
|
|
118
|
-
n &&
|
|
124
|
+
n && l.push("[options]");
|
|
119
125
|
}
|
|
120
|
-
if (
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
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
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
let t =
|
|
133
|
-
|
|
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
|
-
|
|
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
|
|
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(`${
|
|
165
|
+
i.push(`${b}<${e.paramName}>`);
|
|
144
166
|
continue;
|
|
145
167
|
}
|
|
146
|
-
i.push(`${
|
|
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
|
|
158
|
-
let { programName: t, defaultCommandName: n, commandPath: r, description: i, argsDefs: a, envPrefix: o,
|
|
159
|
-
|
|
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
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
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 (
|
|
174
|
-
|
|
175
|
-
for (let e of
|
|
193
|
+
if (u.push(""), l.length > 0) {
|
|
194
|
+
u.push("Available commands:");
|
|
195
|
+
for (let e of l) {
|
|
176
196
|
if (e.isDynamic) {
|
|
177
|
-
|
|
197
|
+
u.push(`${b}<${e.paramName}>`);
|
|
178
198
|
continue;
|
|
179
199
|
}
|
|
180
200
|
let t = e.name === n ? " (default)" : "";
|
|
181
|
-
|
|
201
|
+
u.push(`${b}${e.name}${t}`);
|
|
182
202
|
}
|
|
183
203
|
}
|
|
184
|
-
return
|
|
204
|
+
return u.join("\n");
|
|
185
205
|
}
|
|
186
206
|
//#endregion
|
|
187
207
|
//#region src/parser.ts
|
|
188
|
-
var
|
|
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(
|
|
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 ===
|
|
224
|
+
if (o === j) {
|
|
205
225
|
i = e.slice(a + 1);
|
|
206
226
|
break;
|
|
207
227
|
}
|
|
208
|
-
if (o.startsWith(
|
|
209
|
-
P(n, o.slice(5),
|
|
228
|
+
if (o.startsWith(M)) {
|
|
229
|
+
P(n, o.slice(5), ie), a++;
|
|
210
230
|
continue;
|
|
211
231
|
}
|
|
212
|
-
if (o.startsWith(
|
|
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(
|
|
237
|
+
if (o.startsWith(k)) {
|
|
218
238
|
let r = o.slice(2);
|
|
219
239
|
if (t.booleanFlags.has(r)) {
|
|
220
|
-
P(n, r,
|
|
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(
|
|
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(
|
|
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,
|
|
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
|
|
367
|
+
function ae(e, t) {
|
|
348
368
|
return e.slice(0, -t.length);
|
|
349
369
|
}
|
|
350
|
-
async function
|
|
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
|
|
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 =
|
|
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
|
|
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
|
|
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
|
|
442
|
-
return y(e) ? o.preprocess((e) => typeof e == "string" ? e === "true" || e === "1" : 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
|
|
464
|
+
function le(e, t) {
|
|
445
465
|
let n = {};
|
|
446
466
|
for (let [t, r] of Object.entries(e)) {
|
|
447
|
-
let e =
|
|
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
|
|
459
|
-
function
|
|
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
|
|
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
|
|
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
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
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
|
-
|
|
557
|
+
l = e;
|
|
558
|
+
} else {
|
|
559
|
+
let e = ne({
|
|
504
560
|
programName: r,
|
|
505
|
-
|
|
506
|
-
|
|
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(
|
|
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
|
|
568
|
+
let u = (await import(l.filePath)).default, d = u.args ?? {}, f = $(t, l.filePath), p = D({
|
|
528
569
|
programName: r,
|
|
529
|
-
commandPath:
|
|
530
|
-
description:
|
|
531
|
-
argsDefs: Object.keys(
|
|
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 (
|
|
535
|
-
console.log(
|
|
577
|
+
if (l.remainingTokens.includes("--help") || l.remainingTokens.includes("-h")) {
|
|
578
|
+
console.log(p);
|
|
536
579
|
return;
|
|
537
580
|
}
|
|
538
|
-
let
|
|
581
|
+
let m = pe(d), h;
|
|
539
582
|
try {
|
|
540
|
-
let t = I(
|
|
541
|
-
|
|
542
|
-
argsDefs:
|
|
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:
|
|
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(
|
|
595
|
+
console.error(O(p, t)), process.exit(Z);
|
|
553
596
|
}
|
|
554
|
-
throw e instanceof Error && (console.error(O(
|
|
597
|
+
throw e instanceof Error && (console.error(O(p, [e.message])), process.exit(Z)), e;
|
|
555
598
|
}
|
|
556
|
-
let { extensions:
|
|
557
|
-
commandPath:
|
|
558
|
-
params:
|
|
559
|
-
args:
|
|
560
|
-
extensions:
|
|
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(
|
|
563
|
-
await
|
|
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
|
-
})(
|
|
611
|
+
})(y);
|
|
569
612
|
}
|
|
570
|
-
return { run:
|
|
613
|
+
return { run: c };
|
|
571
614
|
}
|
|
572
615
|
//#endregion
|
|
573
616
|
//#region src/types.ts
|
|
574
|
-
function
|
|
617
|
+
function ve(e) {
|
|
575
618
|
return e;
|
|
576
619
|
}
|
|
577
620
|
//#endregion
|
|
578
|
-
export {
|
|
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
|
+
"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",
|