@miyaoka/fsss 0.3.1 → 0.3.2

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/codegen.js CHANGED
@@ -2,6 +2,7 @@
2
2
  import { join as e, relative as t } from "node:path";
3
3
  import { mkdir as n, readFile as r, readdir as i, writeFile as a } from "node:fs/promises";
4
4
  import { parseArgs as o } from "node:util";
5
+ //#region src/codegen.ts
5
6
  var s = "_plugins", c = ".ts", l = /export\s+interface\s+(\w+)/g;
6
7
  async function u(t) {
7
8
  let n = [];
@@ -55,3 +56,4 @@ var { values: p } = o({ options: {
55
56
  outDir: { type: "string" }
56
57
  } });
57
58
  (p.commandsDir === void 0 || p.outDir === void 0) && (console.error("Usage: bun run codegen.ts --commandsDir <path> --outDir <path>"), process.exit(1)), await f(p.commandsDir, p.outDir);
59
+ //#endregion
@@ -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;AAkED,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;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"}
package/dist/index.js CHANGED
@@ -2,6 +2,7 @@ import { join as e, relative as t, resolve as n } from "node:path";
2
2
  import { ZodBoolean as r, ZodError as i, ZodNumber as a, z as o } from "zod";
3
3
  import { readFile as s, readdir as c, stat as l } from "node:fs/promises";
4
4
  import { homedir as u } from "node:os";
5
+ //#region src/config.ts
5
6
  function d(e) {
6
7
  return typeof e == "object" && !!e;
7
8
  }
@@ -37,7 +38,7 @@ function h(t, n) {
37
38
  let r = [];
38
39
  return r.push(e(u(), ".config", t, "config.json")), r.push(e(process.cwd(), `${t}.config.json`)), n !== void 0 && r.push(n), r;
39
40
  }
40
- async function ee(e, t) {
41
+ async function g(e, t) {
41
42
  let n = h(e, t), r;
42
43
  for (let e of n) {
43
44
  let t = await p(e);
@@ -51,45 +52,60 @@ async function ee(e, t) {
51
52
  }
52
53
  return r;
53
54
  }
54
- function g(e, t, n) {
55
+ //#endregion
56
+ //#region src/auto-mapping.ts
57
+ function _(e, t, n) {
55
58
  return [
56
59
  e,
57
60
  ...t,
58
61
  n
59
62
  ].join("_").toUpperCase();
60
63
  }
61
- function _(e, t) {
64
+ function v(e, t) {
62
65
  return [...e, t].join(".");
63
66
  }
64
- function v(e) {
67
+ //#endregion
68
+ //#region src/zod-utils.ts
69
+ function y(e) {
65
70
  return e instanceof r;
66
71
  }
67
- function te(e) {
72
+ function b(e) {
68
73
  return e instanceof a;
69
74
  }
70
- var y = " ", b = 2;
71
- function x(e, t, n, r) {
75
+ //#endregion
76
+ //#region src/help.ts
77
+ var x = " ", S = 2;
78
+ function C(e, t, n, r) {
72
79
  if (e.env !== void 0) return e.env;
73
- if (t !== void 0) return g(t, n, r);
80
+ if (t !== void 0) return _(t, n, r);
81
+ }
82
+ function w(e) {
83
+ switch (typeof e) {
84
+ case "string":
85
+ case "number":
86
+ case "boolean":
87
+ case "bigint": return String(e);
88
+ default: return JSON.stringify(e);
89
+ }
74
90
  }
75
- function S(e, t) {
91
+ function ee(e, t) {
76
92
  let n = [];
77
- return t !== void 0 && n.push(`env: ${t}`), "default" in e && e.default !== void 0 && n.push(`default: ${String(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: ${w(e.default)}`), n.length === 0 ? "" : ` (${n.join(", ")})`;
78
94
  }
79
- function C(e, t, n, r) {
80
- let i = v(t.type) ? "" : ` <${e}>`, a = `${t.alias === void 0 ? " " : `-${t.alias}, `}--${e}${i}`, o = x(t, n, r, e);
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);
81
97
  return {
82
98
  left: a,
83
- right: `${t.description}${S(t, o)}`
99
+ right: `${t.description}${ee(t, o)}`
84
100
  };
85
101
  }
86
- function w() {
102
+ function E() {
87
103
  return {
88
104
  left: "-h, --help",
89
105
  right: "ヘルプを表示する"
90
106
  };
91
107
  }
92
- function T(e) {
108
+ function D(e) {
93
109
  let { programName: t, commandPath: n, description: r, argsDefs: i, envPrefix: a } = e, o = [];
94
110
  r !== void 0 && (o.push(r), o.push(""));
95
111
  let s = [t, ...n];
@@ -105,51 +121,51 @@ function T(e) {
105
121
  let c = Object.entries(i).filter(([, e]) => e.positional !== !0);
106
122
  if (c.length === 0) {
107
123
  o.push("Options:");
108
- let e = w();
109
- return o.push(`${y}${e.left} ${e.right}`), o.join("\n");
124
+ let e = E();
125
+ return o.push(`${x}${e.left} ${e.right}`), o.join("\n");
110
126
  }
111
127
  o.push("Options:");
112
- let l = c.map(([e, t]) => C(e, t, a, n));
113
- l.push(w());
128
+ let l = c.map(([e, t]) => T(e, t, a, n));
129
+ l.push(E());
114
130
  let u = Math.max(...l.map((e) => e.left.length));
115
131
  for (let e of l) {
116
- let t = " ".repeat(u - e.left.length + b);
117
- o.push(`${y}${e.left}${t}${e.right}`);
132
+ let t = " ".repeat(u - e.left.length + S);
133
+ o.push(`${x}${e.left}${t}${e.right}`);
118
134
  }
119
135
  return o.join("\n");
120
136
  }
121
- function E(e) {
137
+ function te(e) {
122
138
  let { programName: t, commandPath: n, availableEntries: r } = e, i = [], a = [t, ...n].join(" ");
123
139
  if (i.push(`Usage: ${a} <command>`), i.push(""), r.length === 0) return i.push("No available commands."), i.join("\n");
124
140
  i.push("Available commands:");
125
141
  for (let e of r) {
126
142
  if (e.isDynamic) {
127
- i.push(`${y}<${e.paramName}>`);
143
+ i.push(`${x}<${e.paramName}>`);
128
144
  continue;
129
145
  }
130
- i.push(`${y}${e.name}`);
146
+ i.push(`${x}${e.name}`);
131
147
  }
132
148
  return i.join("\n");
133
149
  }
134
- function D(e, t) {
150
+ function O(e, t) {
135
151
  return [
136
152
  `Error: ${t.join(", ")}`,
137
153
  "",
138
154
  e
139
155
  ].join("\n");
140
156
  }
141
- function O(e) {
157
+ function k(e) {
142
158
  let { programName: t, defaultCommandName: n, commandPath: r, description: i, argsDefs: a, envPrefix: o, availableEntries: s } = e, c = [];
143
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) {
144
160
  let e = Object.entries(a).filter(([, e]) => e.positional !== !0);
145
161
  if (e.length > 0) {
146
162
  c.push("Options:");
147
- let t = e.map(([e, t]) => C(e, t, o, r));
148
- t.push(w());
163
+ let t = e.map(([e, t]) => T(e, t, o, r));
164
+ t.push(E());
149
165
  let n = Math.max(...t.map((e) => e.left.length));
150
166
  for (let e of t) {
151
- let t = " ".repeat(n - e.left.length + b);
152
- c.push(`${y}${e.left}${t}${e.right}`);
167
+ let t = " ".repeat(n - e.left.length + S);
168
+ c.push(`${x}${e.left}${t}${e.right}`);
153
169
  }
154
170
  c.push("");
155
171
  }
@@ -158,17 +174,19 @@ function O(e) {
158
174
  c.push("Available commands:");
159
175
  for (let e of s) {
160
176
  if (e.isDynamic) {
161
- c.push(`${y}<${e.paramName}>`);
177
+ c.push(`${x}<${e.paramName}>`);
162
178
  continue;
163
179
  }
164
180
  let t = e.name === n ? " (default)" : "";
165
- c.push(`${y}${e.name}${t}`);
181
+ c.push(`${x}${e.name}${t}`);
166
182
  }
167
183
  }
168
184
  return c.join("\n");
169
185
  }
170
- var k = "--", A = "-", ne = "--", re = "--no-", j = "true", M = "false";
171
- function N(e, t, n) {
186
+ //#endregion
187
+ //#region src/parser.ts
188
+ var A = "--", j = "-", ne = "--", re = "--no-", M = "true", N = "false";
189
+ function P(e, t, n) {
172
190
  let r = e.get(t);
173
191
  if (r) {
174
192
  r.push(n);
@@ -176,11 +194,11 @@ function N(e, t, n) {
176
194
  }
177
195
  e.set(t, [n]);
178
196
  }
179
- function P(e, t) {
180
- return t + 1 >= e.length ? !1 : !e[t + 1].startsWith(A);
181
- }
182
197
  function F(e, t) {
183
- let n = new Map(), r = [], i = [], a = 0;
198
+ return t + 1 >= e.length ? !1 : !e[t + 1].startsWith(j);
199
+ }
200
+ function I(e, t) {
201
+ let n = /* @__PURE__ */ new Map(), r = [], i = [], a = 0;
184
202
  for (; a < e.length;) {
185
203
  let o = e[a];
186
204
  if (o === ne) {
@@ -188,39 +206,39 @@ function F(e, t) {
188
206
  break;
189
207
  }
190
208
  if (o.startsWith(re)) {
191
- N(n, o.slice(5), M), a++;
209
+ P(n, o.slice(5), N), a++;
192
210
  continue;
193
211
  }
194
- if (o.startsWith(k) && o.includes("=")) {
212
+ if (o.startsWith(A) && o.includes("=")) {
195
213
  let e = o.indexOf("=");
196
- N(n, o.slice(2, e), o.slice(e + 1)), a++;
214
+ P(n, o.slice(2, e), o.slice(e + 1)), a++;
197
215
  continue;
198
216
  }
199
- if (o.startsWith(k)) {
217
+ if (o.startsWith(A)) {
200
218
  let r = o.slice(2);
201
219
  if (t.booleanFlags.has(r)) {
202
- N(n, r, j), a++;
220
+ P(n, r, M), a++;
203
221
  continue;
204
222
  }
205
- if (P(e, a)) {
206
- N(n, r, e[a + 1]), a += 2;
223
+ if (F(e, a)) {
224
+ P(n, r, e[a + 1]), a += 2;
207
225
  continue;
208
226
  }
209
227
  throw Error(`Flag --${r} requires a value`);
210
228
  }
211
- if (o.startsWith(A) && !o.startsWith(k) && o.includes("=")) {
229
+ if (o.startsWith(j) && !o.startsWith(A) && o.includes("=")) {
212
230
  let e = o.indexOf("="), r = o.slice(1, e), i = o.slice(e + 1);
213
- N(n, t.aliases.get(r) ?? r, i), a++;
231
+ P(n, t.aliases.get(r) ?? r, i), a++;
214
232
  continue;
215
233
  }
216
- if (o.startsWith(A) && !o.startsWith(k)) {
234
+ if (o.startsWith(j) && !o.startsWith(A)) {
217
235
  let r = o.slice(1), i = t.aliases.get(r) ?? r;
218
236
  if (t.booleanFlags.has(i)) {
219
- N(n, i, j), a++;
237
+ P(n, i, M), a++;
220
238
  continue;
221
239
  }
222
- if (P(e, a)) {
223
- N(n, i, e[a + 1]), a += 2;
240
+ if (F(e, a)) {
241
+ P(n, i, e[a + 1]), a += 2;
224
242
  continue;
225
243
  }
226
244
  throw Error(`Flag -${r} requires a value`);
@@ -233,11 +251,13 @@ function F(e, t) {
233
251
  doubleDashArgs: i
234
252
  };
235
253
  }
236
- var I = "_plugins", L = ".ts";
237
- function R(e) {
254
+ //#endregion
255
+ //#region src/plugin.ts
256
+ var L = "_plugins", R = ".ts";
257
+ function z(e) {
238
258
  return e;
239
259
  }
240
- async function z(e, t) {
260
+ async function B(e, t) {
241
261
  let n = {}, r = [];
242
262
  for (let i of e) {
243
263
  let e = await i(t);
@@ -248,7 +268,7 @@ async function z(e, t) {
248
268
  middlewares: r
249
269
  };
250
270
  }
251
- function B(e, t) {
271
+ function V(e, t) {
252
272
  let n = t;
253
273
  for (let t = e.length - 1; t >= 0; t--) {
254
274
  let r = e[t], i = n;
@@ -256,29 +276,31 @@ function B(e, t) {
256
276
  }
257
277
  return n;
258
278
  }
259
- async function V(t, n) {
279
+ async function H(t, n) {
260
280
  let r = [];
261
281
  for (let n of t) {
262
- let t = e(n, I), i;
282
+ let t = e(n, L), i;
263
283
  try {
264
284
  i = await c(t, { withFileTypes: !0 });
265
285
  } catch {
266
286
  continue;
267
287
  }
268
- let a = i.filter((e) => e.isFile() && e.name.endsWith(L)).sort((e, t) => e.name.localeCompare(t.name));
288
+ let a = i.filter((e) => e.isFile() && e.name.endsWith(R)).sort((e, t) => e.name.localeCompare(t.name));
269
289
  for (let n of a) {
270
290
  let i = e(t, n.name), a = (await import(i)).default;
271
291
  if (a === void 0) throw Error(`Plugin file ${i} does not have a default export`);
272
292
  r.push(a);
273
293
  }
274
294
  }
275
- return z(r, n);
295
+ return B(r, n);
276
296
  }
277
- function H(e, t, n, r) {
297
+ //#endregion
298
+ //#region src/resolver.ts
299
+ function U(e, t, n, r) {
278
300
  if (e !== void 0) return e;
279
- if (t !== void 0) return g(t, n, r);
301
+ if (t !== void 0) return _(t, n, r);
280
302
  }
281
- function U(e) {
303
+ function W(e) {
282
304
  let { argsDefs: t, parsedTokens: n, env: r, config: i, commandPath: a, envPrefix: o } = e, s = {}, c = 0;
283
305
  for (let [e, l] of Object.entries(t)) {
284
306
  let t = n.flags.get(e);
@@ -294,7 +316,7 @@ function U(e) {
294
316
  s[e] = n.positionals[c], c++;
295
317
  continue;
296
318
  }
297
- let u = H(l.env, o, a, e);
319
+ let u = U(l.env, o, a, e);
298
320
  if (u !== void 0) {
299
321
  let t = r[u];
300
322
  if (t !== void 0) {
@@ -303,7 +325,7 @@ function U(e) {
303
325
  }
304
326
  }
305
327
  if (i !== void 0) {
306
- let t = f(i, l.config ?? _(a, e));
328
+ let t = f(i, l.config ?? v(a, e));
307
329
  if (t !== void 0) {
308
330
  s[e] = t;
309
331
  continue;
@@ -316,29 +338,39 @@ function U(e) {
316
338
  }
317
339
  return s;
318
340
  }
319
- var W = /^\[(.+)]$/, G = ".ts", K = "index", q = "_";
320
- async function J(e) {
341
+ //#endregion
342
+ //#region src/router.ts
343
+ var G = /^\[(.+)]$/, K = [".ts", ".js"], q = "index", J = "_";
344
+ function Y(e) {
345
+ return K.find((t) => e.endsWith(t));
346
+ }
347
+ function ie(e, t) {
348
+ return e.slice(0, -t.length);
349
+ }
350
+ async function ae(e) {
321
351
  try {
322
352
  return (await l(e)).isFile();
323
353
  } catch {
324
354
  return !1;
325
355
  }
326
356
  }
327
- async function Y(e) {
357
+ async function oe(e) {
328
358
  try {
329
- let t = await c(e, { withFileTypes: !0 }), n = [];
330
- for (let e of t) if (!e.name.startsWith(q)) {
331
- if (e.isFile() && e.name.endsWith(G)) {
332
- let t = e.name.slice(0, -3);
333
- if (t === K) continue;
334
- n.push({
335
- name: t,
359
+ 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
+ for (let e of t) {
361
+ if (e.name.startsWith(J)) continue;
362
+ let t = e.isFile() ? Y(e.name) : void 0;
363
+ if (t !== void 0) {
364
+ let i = ie(e.name, t);
365
+ if (i === q || r.has(i)) continue;
366
+ r.add(i), n.push({
367
+ name: i,
336
368
  isDynamic: !1
337
369
  });
338
370
  continue;
339
371
  }
340
372
  if (e.isDirectory()) {
341
- let t = e.name.match(W);
373
+ let t = e.name.match(G);
342
374
  if (t !== null) {
343
375
  n.push({
344
376
  name: e.name,
@@ -363,52 +395,56 @@ async function X(t, r) {
363
395
  for (let t = 0; t < r.length; t++) {
364
396
  let n = r[t];
365
397
  if (n.startsWith("-")) break;
366
- let l = await c(i, { withFileTypes: !0 }), u = n + G, d = l.find((e) => e.isFile() && e.name === u);
367
- if (d) return s = t + 1, {
398
+ let l = await c(i, { withFileTypes: !0 }), u = K.reduce((e, t) => e ?? l.find((e) => e.isFile() && e.name === n + t), void 0);
399
+ if (u) return s = t + 1, {
368
400
  kind: "resolved",
369
- filePath: e(i, d.name),
401
+ filePath: e(i, u.name),
370
402
  params: a,
371
403
  remainingTokens: r.slice(s),
372
404
  traversedDirs: o
373
405
  };
374
- let f = l.find((e) => e.isDirectory() && e.name === n);
375
- if (f) {
376
- i = e(i, f.name), o.push(i), s = t + 1;
406
+ let d = l.find((e) => e.isDirectory() && e.name === n);
407
+ if (d) {
408
+ i = e(i, d.name), o.push(i), s = t + 1;
377
409
  continue;
378
410
  }
379
- let p, m = l.find((e) => {
411
+ let f, p = l.find((e) => {
380
412
  if (!e.isDirectory()) return !1;
381
- let t = e.name.match(W);
382
- return t === null ? !1 : (p = t[1], !0);
413
+ let t = e.name.match(G);
414
+ return t === null ? !1 : (f = t[1], !0);
383
415
  });
384
- if (m && p !== void 0) {
385
- a[p] = n, i = e(i, m.name), o.push(i), s = t + 1;
416
+ if (p && f !== void 0) {
417
+ a[f] = n, i = e(i, p.name), o.push(i), s = t + 1;
386
418
  continue;
387
419
  }
388
420
  break;
389
421
  }
390
- let l = e(i, K + G);
391
- if (await J(l)) return {
392
- kind: "resolved",
393
- filePath: l,
394
- params: a,
395
- remainingTokens: r.slice(s),
396
- traversedDirs: o
397
- };
398
- let u = await Y(i);
422
+ for (let t of K) {
423
+ let n = e(i, q + t);
424
+ if (await ae(n)) return {
425
+ kind: "resolved",
426
+ filePath: n,
427
+ params: a,
428
+ remainingTokens: r.slice(s),
429
+ traversedDirs: o
430
+ };
431
+ }
432
+ let l = await oe(i);
399
433
  return {
400
434
  kind: "unresolved",
401
435
  stoppedDir: i,
402
- availableEntries: u
436
+ availableEntries: l
403
437
  };
404
438
  }
405
- function ie(e) {
406
- return v(e) ? o.preprocess((e) => typeof e == "string" ? e === "true" || e === "1" : e, e) : te(e) ? o.preprocess((e) => typeof e == "string" ? Number(e) : e, e) : e;
439
+ //#endregion
440
+ //#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;
407
443
  }
408
- function ae(e, t) {
444
+ function ce(e, t) {
409
445
  let n = {};
410
446
  for (let [t, r] of Object.entries(e)) {
411
- let e = ie(r.type);
447
+ let e = se(r.type);
412
448
  if (r.multiple === !0) {
413
449
  n[t] = o.array(e);
414
450
  continue;
@@ -417,10 +453,12 @@ function ae(e, t) {
417
453
  }
418
454
  return o.object(n).parse(t);
419
455
  }
420
- var oe = "commands", se = 2, Z = 1;
421
- function Q(e) {
422
- let t = new Set(), n = new Map();
423
- for (let [r, i] of Object.entries(e)) v(i.type) && t.add(r), i.alias !== void 0 && n.set(i.alias, r);
456
+ //#endregion
457
+ //#region src/cli.ts
458
+ var le = "commands", Z = 2, Q = 1;
459
+ function ue(e) {
460
+ let t = /* @__PURE__ */ new Set(), n = /* @__PURE__ */ new Map();
461
+ for (let [r, i] of Object.entries(e)) y(i.type) && t.add(r), i.alias !== void 0 && n.set(i.alias, r);
424
462
  return {
425
463
  booleanFlags: t,
426
464
  aliases: n
@@ -429,11 +467,11 @@ function Q(e) {
429
467
  function $(e, r) {
430
468
  return t(n(e), r).replace(/\.ts$/, "").split("/").filter((e) => e !== "index" && !e.startsWith("["));
431
469
  }
432
- function ce(e, r) {
470
+ function de(e, r) {
433
471
  let i = t(n(e), r);
434
472
  return i === "" || i === "." ? [] : i.split("/").filter((e) => !e.startsWith("["));
435
473
  }
436
- function le(e) {
474
+ function fe(e) {
437
475
  let t, n = [];
438
476
  for (let r = 0; r < e.length; r++) {
439
477
  let i = e[r];
@@ -454,15 +492,15 @@ function le(e) {
454
492
  remainingTokens: n
455
493
  };
456
494
  }
457
- function ue(e) {
458
- let t = e.commandsDir ?? oe, r = e.name, a = e.autoEnv?.prefix, o = e.defaultCommand;
495
+ function pe(e) {
496
+ let t = e.commandsDir ?? le, r = e.name, a = e.autoEnv?.prefix, o = e.defaultCommand;
459
497
  async function s() {
460
- let { configPath: e, remainingTokens: s } = le(process.argv.slice(se)), c = await X(t, s);
498
+ let { configPath: e, remainingTokens: s } = fe(process.argv.slice(Z)), c = await X(t, s);
461
499
  if (c.kind === "unresolved") if (n(c.stoppedDir) === n(t) && o !== void 0) {
462
500
  if (s.includes("--help") || s.includes("-h")) {
463
501
  let e = await X(t, [o]);
464
502
  if (e.kind === "unresolved") throw Error(`defaultCommand "${o}" does not match any command file`);
465
- let n = (await import(e.filePath)).default, i = n.args ?? {}, s = O({
503
+ let n = (await import(e.filePath)).default, i = n.args ?? {}, s = k({
466
504
  programName: r,
467
505
  defaultCommandName: o,
468
506
  commandPath: $(t, e.filePath),
@@ -478,15 +516,15 @@ function ue(e) {
478
516
  if (e.kind === "unresolved") throw Error(`defaultCommand "${o}" does not match any command file`);
479
517
  c = e;
480
518
  } else {
481
- let e = E({
519
+ let e = te({
482
520
  programName: r,
483
- commandPath: ce(t, c.stoppedDir),
521
+ commandPath: de(t, c.stoppedDir),
484
522
  availableEntries: c.availableEntries
485
523
  });
486
524
  console.log(e);
487
525
  return;
488
526
  }
489
- let l = (await import(c.filePath)).default, u = l.args ?? {}, d = $(t, c.filePath), f = T({
527
+ let l = (await import(c.filePath)).default, u = l.args ?? {}, d = $(t, c.filePath), f = D({
490
528
  programName: r,
491
529
  commandPath: d,
492
530
  description: l.description,
@@ -497,10 +535,10 @@ function ue(e) {
497
535
  console.log(f);
498
536
  return;
499
537
  }
500
- let p = Q(u), m;
538
+ let p = ue(u), m;
501
539
  try {
502
- let t = F(c.remainingTokens, p), n = await ee(r, e);
503
- m = ae(u, U({
540
+ let t = I(c.remainingTokens, p), n = await g(r, e);
541
+ m = ce(u, W({
504
542
  argsDefs: u,
505
543
  parsedTokens: t,
506
544
  env: process.env,
@@ -511,27 +549,30 @@ function ue(e) {
511
549
  } catch (e) {
512
550
  if (e instanceof i) {
513
551
  let t = e.issues.map((e) => `${e.path.join(".")}: ${e.message}`);
514
- console.error(D(f, t)), process.exit(Z);
552
+ console.error(O(f, t)), process.exit(Q);
515
553
  }
516
- throw e instanceof Error && (console.error(D(f, [e.message])), process.exit(Z)), e;
554
+ throw e instanceof Error && (console.error(O(f, [e.message])), process.exit(Q)), e;
517
555
  }
518
- let { extensions: h, middlewares: g } = await V(c.traversedDirs, { cliName: r }), _ = {
556
+ let { extensions: h, middlewares: _ } = await H(c.traversedDirs, { cliName: r }), v = {
519
557
  commandPath: d,
520
558
  params: c.params,
521
559
  args: m,
522
560
  extensions: h
523
561
  };
524
- await B(g, async (e) => {
562
+ await V(_, async (e) => {
525
563
  await l.run({
526
564
  params: e.params,
527
565
  args: e.args,
528
566
  extensions: e.extensions
529
567
  });
530
- })(_);
568
+ })(v);
531
569
  }
532
570
  return { run: s };
533
571
  }
534
- function de(e) {
572
+ //#endregion
573
+ //#region src/types.ts
574
+ function me(e) {
535
575
  return e;
536
576
  }
537
- export { ue as createCLI, de as defineCommand, R as definePlugin };
577
+ //#endregion
578
+ export { pe as createCLI, me as defineCommand, z as definePlugin };
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAQA,UAAU,aAAa;IACrB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,cAAc,EAAE,CAAC;CACpC;AAED,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,KAAK,WAAW,GAAG,aAAa,GAAG,eAAe,CAAC;AAqDnD,iBAAe,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAmFvF;AAED,OAAO,EAAE,YAAY,EAAE,CAAC;AACxB,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAiBA,UAAU,aAAa;IACrB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,cAAc,EAAE,CAAC;CACpC;AAED,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,KAAK,WAAW,GAAG,aAAa,GAAG,eAAe,CAAC;AAsEnD,iBAAe,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAuFvF;AAED,OAAO,EAAE,YAAY,EAAE,CAAC;AACxB,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@miyaoka/fsss",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
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",
@@ -38,12 +38,12 @@
38
38
  "devDependencies": {
39
39
  "@tsconfig/node24": "24.0.4",
40
40
  "@types/bun": "1.3.10",
41
- "oxfmt": "0.36.0",
42
- "oxlint": "1.51.0",
41
+ "oxfmt": "0.37.0",
42
+ "oxlint": "1.52.0",
43
43
  "oxlint-tsgolint": "0.16.0",
44
44
  "typescript": "5.9.3",
45
45
  "unplugin-dts": "1.0.0-beta.6",
46
- "vite": "8.0.0-beta.16"
46
+ "vite": "8.0.0-beta.18"
47
47
  },
48
48
  "scripts": {
49
49
  "build": "vite build",