mcp-client-gen 0.0.2 → 0.0.4
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 +54 -4
- package/dist/{index.js → cli.js} +119 -23
- package/dist/cli.js.map +16 -0
- package/package.json +29 -5
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
🚀 Generate type-safe TypeScript clients from any MCP (Model Context Protocol) server.
|
|
4
4
|
|
|
5
5
|
```typescript
|
|
6
|
-
import { notion, github, slack } from "./
|
|
6
|
+
import { notion, github, slack } from "./src/mcp-client";
|
|
7
7
|
|
|
8
8
|
// Type-safe client calls with full IntelliSense
|
|
9
9
|
const page = await notion.createPage({
|
|
@@ -72,13 +72,13 @@ npx mcp-client-gen -y # Accept all defaults and proceed
|
|
|
72
72
|
**Direct Mode:**
|
|
73
73
|
|
|
74
74
|
```bash
|
|
75
|
-
npx mcp-client-gen ./
|
|
75
|
+
npx mcp-client-gen ./src/mcp-client.ts
|
|
76
76
|
```
|
|
77
77
|
|
|
78
78
|
### 3. Use the Generated Client
|
|
79
79
|
|
|
80
80
|
```typescript
|
|
81
|
-
import { notion } from "./
|
|
81
|
+
import { notion } from "./src/mcp-client";
|
|
82
82
|
|
|
83
83
|
// All methods are fully typed based on the MCP server schema
|
|
84
84
|
const page = await notion.fetchPage("page-id");
|
|
@@ -114,7 +114,7 @@ Options:
|
|
|
114
114
|
Examples:
|
|
115
115
|
npx mcp-client-gen # Interactive mode
|
|
116
116
|
npx mcp-client-gen -y # Quick generation with defaults
|
|
117
|
-
npx mcp-client-gen ./
|
|
117
|
+
npx mcp-client-gen ./src/mcp-client.ts # Direct mode with output file
|
|
118
118
|
npx mcp-client-gen --config custom.json ./src/clients.ts
|
|
119
119
|
```
|
|
120
120
|
|
|
@@ -145,3 +145,53 @@ Examples:
|
|
|
145
145
|
- Authentication handling
|
|
146
146
|
- Streaming support
|
|
147
147
|
- Error handling and retries
|
|
148
|
+
|
|
149
|
+
## Authentication
|
|
150
|
+
|
|
151
|
+
Generated MCP clients include built-in support for OAuth 2.1 authentication using RFC 7591 Dynamic Client Registration. The authentication flow is handled automatically:
|
|
152
|
+
|
|
153
|
+
### OAuth 2.1 Support
|
|
154
|
+
|
|
155
|
+
- **Dynamic Client Registration (RFC 7591)** - Clients automatically register with OAuth providers
|
|
156
|
+
- **PKCE Flow (RFC 7636)** - Secure authorization code exchange with Proof Key for Code Exchange
|
|
157
|
+
- **Multiple Auth Methods** - Supports `client_secret_basic`, `client_secret_post`, and public clients
|
|
158
|
+
- **Token Management** - Automatic token refresh and credential storage
|
|
159
|
+
- **Resource Protection** - RFC 9728 OAuth 2.0 Protected Resource Metadata support
|
|
160
|
+
|
|
161
|
+
### Authentication Flow
|
|
162
|
+
|
|
163
|
+
1. **Discovery** - Client discovers OAuth authorization server metadata
|
|
164
|
+
2. **Registration** - Dynamic client registration if credentials not found
|
|
165
|
+
3. **Authorization** - PKCE-based authorization code flow initiation
|
|
166
|
+
4. **Token Exchange** - Secure token exchange with automatic refresh
|
|
167
|
+
5. **API Calls** - Authenticated requests using Bearer tokens
|
|
168
|
+
|
|
169
|
+
### Configuration
|
|
170
|
+
|
|
171
|
+
Authentication is configured per MCP server in your `.mcp.json`:
|
|
172
|
+
|
|
173
|
+
```jsonc
|
|
174
|
+
{
|
|
175
|
+
"mcpServers": {
|
|
176
|
+
"secured-service": {
|
|
177
|
+
"type": "http",
|
|
178
|
+
"url": "https://api.example.com/mcp",
|
|
179
|
+
"auth": {
|
|
180
|
+
"type": "oauth",
|
|
181
|
+
"clientId": "your-client-id", // Optional for dynamic registration
|
|
182
|
+
"scopes": ["read", "write"],
|
|
183
|
+
},
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
}
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
## Support & License
|
|
190
|
+
|
|
191
|
+
If this tool helps you build amazing integrations, consider [sponsoring the project](https://github.com/sponsors/koistya) to support continued development. 💖
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
**MIT Licensed** • Feel free to use this in your commercial projects, contribute back, or fork it entirely. Code should be free! 🔓
|
|
196
|
+
|
|
197
|
+
Built with ❤️ by [Konstantin Tarkus](https://github.com/koistya) and [contributors](https://github.com/kriasoft/mcp-client-gen/graphs/contributors).
|
package/dist/{index.js → cli.js}
RENAMED
|
@@ -145,15 +145,16 @@ var require_picocolors = __commonJS((exports, module) => {
|
|
|
145
145
|
module.exports.createColors = createColors;
|
|
146
146
|
});
|
|
147
147
|
|
|
148
|
-
//
|
|
149
|
-
import {
|
|
150
|
-
import { readFileSync as readFileSync2, existsSync as existsSync3 } from "node:fs";
|
|
148
|
+
// src/cli.ts
|
|
149
|
+
import { existsSync as existsSync3, readFileSync as readFileSync2 } from "node:fs";
|
|
151
150
|
import { resolve as resolve3 } from "node:path";
|
|
151
|
+
import { parseArgs } from "node:util";
|
|
152
152
|
|
|
153
153
|
// node_modules/@clack/core/dist/index.mjs
|
|
154
154
|
var import_sisteransi = __toESM(require_src(), 1);
|
|
155
|
-
import { stdin as j, stdout as M } from "node:process";
|
|
156
155
|
var import_picocolors = __toESM(require_picocolors(), 1);
|
|
156
|
+
import { stdin as j, stdout as M } from "node:process";
|
|
157
|
+
import * as g from "node:readline";
|
|
157
158
|
import O from "node:readline";
|
|
158
159
|
import { Writable as X } from "node:stream";
|
|
159
160
|
function DD({ onlyFirst: e = false } = {}) {
|
|
@@ -386,6 +387,28 @@ function m(e, u) {
|
|
|
386
387
|
const t = e;
|
|
387
388
|
t.isTTY && t.setRawMode(u);
|
|
388
389
|
}
|
|
390
|
+
function fD({ input: e = j, output: u = M, overwrite: t = true, hideCursor: F = true } = {}) {
|
|
391
|
+
const s = g.createInterface({ input: e, output: u, prompt: "", tabSize: 1 });
|
|
392
|
+
g.emitKeypressEvents(e, s), e.isTTY && e.setRawMode(true);
|
|
393
|
+
const i = (D, { name: C, sequence: n }) => {
|
|
394
|
+
const E = String(D);
|
|
395
|
+
if ($([E, C, n], "cancel")) {
|
|
396
|
+
F && u.write(import_sisteransi.cursor.show), process.exit(0);
|
|
397
|
+
return;
|
|
398
|
+
}
|
|
399
|
+
if (!t)
|
|
400
|
+
return;
|
|
401
|
+
const a = C === "return" ? 0 : -1, o = C === "return" ? -1 : 0;
|
|
402
|
+
g.moveCursor(u, a, o, () => {
|
|
403
|
+
g.clearLine(u, 1, () => {
|
|
404
|
+
e.once("keypress", i);
|
|
405
|
+
});
|
|
406
|
+
});
|
|
407
|
+
};
|
|
408
|
+
return F && u.write(import_sisteransi.cursor.hide), e.once("keypress", i), () => {
|
|
409
|
+
e.off("keypress", i), F && u.write(import_sisteransi.cursor.show), e.isTTY && !AD && e.setRawMode(false), s.terminal = false, s.close();
|
|
410
|
+
};
|
|
411
|
+
}
|
|
389
412
|
var gD = Object.defineProperty;
|
|
390
413
|
var vD = (e, u, t) => (u in e) ? gD(e, u, { enumerable: true, configurable: true, writable: true, value: t }) : e[u] = t;
|
|
391
414
|
var h = (e, u, t) => (vD(e, typeof u != "symbol" ? u + "" : u, t), t);
|
|
@@ -587,9 +610,9 @@ var G2 = (t) => {
|
|
|
587
610
|
const { cursor: n, options: r2, style: i } = t, s = t.maxItems ?? Number.POSITIVE_INFINITY, c = Math.max(process.stdout.rows - 4, 0), a = Math.min(c, Math.max(s, 5));
|
|
588
611
|
let l2 = 0;
|
|
589
612
|
n >= l2 + a - 3 ? l2 = Math.max(Math.min(n - a + 3, r2.length - a), 0) : n < l2 + 2 && (l2 = Math.max(n - 2, 0));
|
|
590
|
-
const $2 = a < r2.length && l2 > 0,
|
|
613
|
+
const $2 = a < r2.length && l2 > 0, g2 = a < r2.length && l2 + a < r2.length;
|
|
591
614
|
return r2.slice(l2, l2 + a).map((p2, v2, f) => {
|
|
592
|
-
const j2 = v2 === 0 && $2, E = v2 === f.length - 1 &&
|
|
615
|
+
const j2 = v2 === 0 && $2, E = v2 === f.length - 1 && g2;
|
|
593
616
|
return j2 || E ? import_picocolors2.default.dim("...") : i(p2, v2 + l2 === n);
|
|
594
617
|
});
|
|
595
618
|
};
|
|
@@ -671,12 +694,63 @@ ${import_picocolors2.default.gray(d2)} ${t}
|
|
|
671
694
|
`);
|
|
672
695
|
};
|
|
673
696
|
var J = `${import_picocolors2.default.gray(o)} `;
|
|
697
|
+
var Y2 = ({ indicator: t = "dots" } = {}) => {
|
|
698
|
+
const n = V2 ? ["◒", "◐", "◓", "◑"] : ["•", "o", "O", "0"], r2 = V2 ? 80 : 120, i = process.env.CI === "true";
|
|
699
|
+
let s, c, a = false, l2 = "", $2, g2 = performance.now();
|
|
700
|
+
const p2 = (m2) => {
|
|
701
|
+
const h2 = m2 > 1 ? "Something went wrong" : "Canceled";
|
|
702
|
+
a && N2(h2, m2);
|
|
703
|
+
}, v2 = () => p2(2), f = () => p2(1), j2 = () => {
|
|
704
|
+
process.on("uncaughtExceptionMonitor", v2), process.on("unhandledRejection", v2), process.on("SIGINT", f), process.on("SIGTERM", f), process.on("exit", p2);
|
|
705
|
+
}, E = () => {
|
|
706
|
+
process.removeListener("uncaughtExceptionMonitor", v2), process.removeListener("unhandledRejection", v2), process.removeListener("SIGINT", f), process.removeListener("SIGTERM", f), process.removeListener("exit", p2);
|
|
707
|
+
}, B2 = () => {
|
|
708
|
+
if ($2 === undefined)
|
|
709
|
+
return;
|
|
710
|
+
i && process.stdout.write(`
|
|
711
|
+
`);
|
|
712
|
+
const m2 = $2.split(`
|
|
713
|
+
`);
|
|
714
|
+
process.stdout.write(import_sisteransi2.cursor.move(-999, m2.length - 1)), process.stdout.write(import_sisteransi2.erase.down(m2.length));
|
|
715
|
+
}, R2 = (m2) => m2.replace(/\.+$/, ""), O2 = (m2) => {
|
|
716
|
+
const h2 = (performance.now() - m2) / 1000, w2 = Math.floor(h2 / 60), I2 = Math.floor(h2 % 60);
|
|
717
|
+
return w2 > 0 ? `[${w2}m ${I2}s]` : `[${I2}s]`;
|
|
718
|
+
}, H2 = (m2 = "") => {
|
|
719
|
+
a = true, s = fD(), l2 = R2(m2), g2 = performance.now(), process.stdout.write(`${import_picocolors2.default.gray(o)}
|
|
720
|
+
`);
|
|
721
|
+
let h2 = 0, w2 = 0;
|
|
722
|
+
j2(), c = setInterval(() => {
|
|
723
|
+
if (i && l2 === $2)
|
|
724
|
+
return;
|
|
725
|
+
B2(), $2 = l2;
|
|
726
|
+
const I2 = import_picocolors2.default.magenta(n[h2]);
|
|
727
|
+
if (i)
|
|
728
|
+
process.stdout.write(`${I2} ${l2}...`);
|
|
729
|
+
else if (t === "timer")
|
|
730
|
+
process.stdout.write(`${I2} ${l2} ${O2(g2)}`);
|
|
731
|
+
else {
|
|
732
|
+
const z2 = ".".repeat(Math.floor(w2)).slice(0, 3);
|
|
733
|
+
process.stdout.write(`${I2} ${l2}${z2}`);
|
|
734
|
+
}
|
|
735
|
+
h2 = h2 + 1 < n.length ? h2 + 1 : 0, w2 = w2 < n.length ? w2 + 0.125 : 0;
|
|
736
|
+
}, r2);
|
|
737
|
+
}, N2 = (m2 = "", h2 = 0) => {
|
|
738
|
+
a = false, clearInterval(c), B2();
|
|
739
|
+
const w2 = h2 === 0 ? import_picocolors2.default.green(C) : h2 === 1 ? import_picocolors2.default.red(L2) : import_picocolors2.default.red(W2);
|
|
740
|
+
l2 = R2(m2 ?? l2), t === "timer" ? process.stdout.write(`${w2} ${l2} ${O2(g2)}
|
|
741
|
+
`) : process.stdout.write(`${w2} ${l2}
|
|
742
|
+
`), E(), s();
|
|
743
|
+
};
|
|
744
|
+
return { start: H2, stop: N2, message: (m2 = "") => {
|
|
745
|
+
l2 = R2(m2 ?? l2);
|
|
746
|
+
} };
|
|
747
|
+
};
|
|
674
748
|
|
|
675
|
-
//
|
|
749
|
+
// src/prompts.ts
|
|
676
750
|
import { existsSync as existsSync2 } from "node:fs";
|
|
677
751
|
import { resolve as resolve2 } from "node:path";
|
|
678
752
|
|
|
679
|
-
//
|
|
753
|
+
// src/config.ts
|
|
680
754
|
import { existsSync, readFileSync } from "node:fs";
|
|
681
755
|
import { resolve } from "node:path";
|
|
682
756
|
var MCP_CONFIG_PATHS = [
|
|
@@ -740,7 +814,7 @@ function getMcpServers(paths) {
|
|
|
740
814
|
return servers;
|
|
741
815
|
}
|
|
742
816
|
|
|
743
|
-
//
|
|
817
|
+
// src/prompts.ts
|
|
744
818
|
async function promptForConfigFiles(cwd = process.cwd()) {
|
|
745
819
|
const availableFiles = await findMcpConfigFiles(cwd);
|
|
746
820
|
if (availableFiles.length === 0) {
|
|
@@ -785,7 +859,7 @@ async function promptForServers(configFiles) {
|
|
|
785
859
|
}
|
|
786
860
|
async function promptForOutputFile(cwd = process.cwd()) {
|
|
787
861
|
const srcExists = existsSync2(resolve2(cwd, "src"));
|
|
788
|
-
const defaultPath = srcExists ? "src/
|
|
862
|
+
const defaultPath = srcExists ? "src/mcp-client.ts" : "mcp-client.ts";
|
|
789
863
|
const outputPath = await he({
|
|
790
864
|
message: "Enter output file path:",
|
|
791
865
|
placeholder: defaultPath,
|
|
@@ -817,7 +891,7 @@ async function runInteractiveSetup(cwd = process.cwd(), useDefaults = false) {
|
|
|
817
891
|
throw new Error("No valid MCP servers found in configuration files. Check your .mcp.json configuration.");
|
|
818
892
|
}
|
|
819
893
|
const srcExists = existsSync2(resolve2(cwd, "src"));
|
|
820
|
-
const outputFile = srcExists ? "src/
|
|
894
|
+
const outputFile = srcExists ? "src/mcp-client.ts" : "mcp-client.ts";
|
|
821
895
|
console.log(`\uD83D\uDE80 Using defaults: ${servers.length} server${servers.length !== 1 ? "s" : ""} → ${outputFile}`);
|
|
822
896
|
return {
|
|
823
897
|
configFiles,
|
|
@@ -830,7 +904,7 @@ async function runInteractiveSetup(cwd = process.cwd(), useDefaults = false) {
|
|
|
830
904
|
const configFiles = await promptForConfigFiles(cwd);
|
|
831
905
|
const servers = await promptForServers(configFiles);
|
|
832
906
|
const outputFile = await promptForOutputFile(cwd);
|
|
833
|
-
Se(`\
|
|
907
|
+
Se(`\uD83C\uDF89 Configuration complete! Generating client for ${servers.length} server${servers.length !== 1 ? "s" : ""}`);
|
|
834
908
|
return {
|
|
835
909
|
configFiles,
|
|
836
910
|
servers,
|
|
@@ -841,8 +915,30 @@ async function runInteractiveSetup(cwd = process.cwd(), useDefaults = false) {
|
|
|
841
915
|
process.exit(1);
|
|
842
916
|
}
|
|
843
917
|
}
|
|
918
|
+
async function introspectServers(servers) {
|
|
919
|
+
const s = Y2();
|
|
920
|
+
s.start(`Introspecting ${servers.length} MCP server${servers.length !== 1 ? "s" : ""}...`);
|
|
921
|
+
const results = [];
|
|
922
|
+
for (const [index, server] of servers.entries()) {
|
|
923
|
+
s.message(`[${index + 1}/${servers.length}] Connecting to ${server.url}...`);
|
|
924
|
+
await new Promise((resolve3) => setTimeout(resolve3, 800));
|
|
925
|
+
s.message(`[${index + 1}/${servers.length}] Fetching capabilities from ${server.url}...`);
|
|
926
|
+
await new Promise((resolve3) => setTimeout(resolve3, 600));
|
|
927
|
+
results.push({
|
|
928
|
+
server,
|
|
929
|
+
tools: Math.floor(Math.random() * 10) + 5,
|
|
930
|
+
resources: Math.floor(Math.random() * 5),
|
|
931
|
+
prompts: Math.floor(Math.random() * 3)
|
|
932
|
+
});
|
|
933
|
+
}
|
|
934
|
+
const totalTools = results.reduce((sum, r2) => sum + r2.tools, 0);
|
|
935
|
+
const totalResources = results.reduce((sum, r2) => sum + r2.resources, 0);
|
|
936
|
+
const totalPrompts = results.reduce((sum, r2) => sum + r2.prompts, 0);
|
|
937
|
+
s.stop(`✅ Successfully introspected ${servers.length} server${servers.length !== 1 ? "s" : ""}: ${totalTools} tools, ${totalResources} resources, ${totalPrompts} prompts`);
|
|
938
|
+
return results;
|
|
939
|
+
}
|
|
844
940
|
|
|
845
|
-
//
|
|
941
|
+
// src/cli.ts
|
|
846
942
|
function showHelp() {
|
|
847
943
|
console.log(`
|
|
848
944
|
mcp-client-gen - Generate type-safe MCP client SDK
|
|
@@ -864,8 +960,8 @@ Options:
|
|
|
864
960
|
Examples:
|
|
865
961
|
npx mcp-client-gen # Interactive mode with prompts
|
|
866
962
|
npx mcp-client-gen -y # Quick generation with defaults
|
|
867
|
-
npx mcp-client-gen ./
|
|
868
|
-
npx mcp-client-gen --config custom.mcp.json ./
|
|
963
|
+
npx mcp-client-gen ./src/mcp-client.ts # Specify output file
|
|
964
|
+
npx mcp-client-gen --config custom.mcp.json ./src/mcp.ts
|
|
869
965
|
`);
|
|
870
966
|
}
|
|
871
967
|
function parseArguments() {
|
|
@@ -935,7 +1031,7 @@ async function generateMCPClientFromConfig(args) {
|
|
|
935
1031
|
export class ${capitalize(name)}Client {
|
|
936
1032
|
constructor(private serverUrl: string) {}
|
|
937
1033
|
|
|
938
|
-
//
|
|
1034
|
+
// Methods will be generated from introspected schemas
|
|
939
1035
|
async fetchPage(id: string) {
|
|
940
1036
|
// Implementation will be generated based on MCP server schema
|
|
941
1037
|
throw new Error("Not implemented yet");
|
|
@@ -956,11 +1052,7 @@ Usage:`);
|
|
|
956
1052
|
console.log(`const result = await ${serverNames[0]}.fetchPage("123");`);
|
|
957
1053
|
}
|
|
958
1054
|
async function generateMCPClientFromServers(servers, outputFile) {
|
|
959
|
-
|
|
960
|
-
console.log(`Servers: ${servers.map((s) => s.url).join(", ")}`);
|
|
961
|
-
console.log("⏳ Connecting to MCP servers...");
|
|
962
|
-
console.log("⏳ Fetching server capabilities...");
|
|
963
|
-
console.log("⏳ Generating TypeScript client...");
|
|
1055
|
+
const introspectionResults = await introspectServers(servers);
|
|
964
1056
|
const serverNames = servers.map((_3, index) => `server${index + 1}`);
|
|
965
1057
|
const clientExports = servers.map((server, index) => `export const server${index + 1} = new Server${index + 1}Client("${server.url}");`).join(`
|
|
966
1058
|
`);
|
|
@@ -968,7 +1060,7 @@ async function generateMCPClientFromServers(servers, outputFile) {
|
|
|
968
1060
|
export class Server${index + 1}Client {
|
|
969
1061
|
constructor(private serverUrl: string) {}
|
|
970
1062
|
|
|
971
|
-
//
|
|
1063
|
+
// Methods will be generated from introspected schemas
|
|
972
1064
|
async fetchPage(id: string) {
|
|
973
1065
|
// Implementation will be generated based on MCP server schema
|
|
974
1066
|
throw new Error("Not implemented yet");
|
|
@@ -982,7 +1074,8 @@ ${clientClasses}
|
|
|
982
1074
|
|
|
983
1075
|
${clientExports}
|
|
984
1076
|
`;
|
|
985
|
-
console.log(
|
|
1077
|
+
console.log(`
|
|
1078
|
+
✅ Generated client saved to ${outputFile}`);
|
|
986
1079
|
console.log(`
|
|
987
1080
|
Usage:`);
|
|
988
1081
|
console.log(`import { ${serverNames[0]} } from "${outputFile.replace(".ts", ".js")}";`);
|
|
@@ -1016,3 +1109,6 @@ async function main() {
|
|
|
1016
1109
|
}
|
|
1017
1110
|
}
|
|
1018
1111
|
main();
|
|
1112
|
+
|
|
1113
|
+
//# debugId=C4AC6AA8FC60AED264756E2164756E21
|
|
1114
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../node_modules/sisteransi/src/index.js", "../node_modules/picocolors/picocolors.js", "../src/cli.ts", "../node_modules/@clack/core/dist/index.mjs", "../node_modules/@clack/prompts/dist/index.mjs", "../src/prompts.ts", "../src/config.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"'use strict';\n\nconst ESC = '\\x1B';\nconst CSI = `${ESC}[`;\nconst beep = '\\u0007';\n\nconst cursor = {\n to(x, y) {\n if (!y) return `${CSI}${x + 1}G`;\n return `${CSI}${y + 1};${x + 1}H`;\n },\n move(x, y) {\n let ret = '';\n\n if (x < 0) ret += `${CSI}${-x}D`;\n else if (x > 0) ret += `${CSI}${x}C`;\n\n if (y < 0) ret += `${CSI}${-y}A`;\n else if (y > 0) ret += `${CSI}${y}B`;\n\n return ret;\n },\n up: (count = 1) => `${CSI}${count}A`,\n down: (count = 1) => `${CSI}${count}B`,\n forward: (count = 1) => `${CSI}${count}C`,\n backward: (count = 1) => `${CSI}${count}D`,\n nextLine: (count = 1) => `${CSI}E`.repeat(count),\n prevLine: (count = 1) => `${CSI}F`.repeat(count),\n left: `${CSI}G`,\n hide: `${CSI}?25l`,\n show: `${CSI}?25h`,\n save: `${ESC}7`,\n restore: `${ESC}8`\n}\n\nconst scroll = {\n up: (count = 1) => `${CSI}S`.repeat(count),\n down: (count = 1) => `${CSI}T`.repeat(count)\n}\n\nconst erase = {\n screen: `${CSI}2J`,\n up: (count = 1) => `${CSI}1J`.repeat(count),\n down: (count = 1) => `${CSI}J`.repeat(count),\n line: `${CSI}2K`,\n lineEnd: `${CSI}K`,\n lineStart: `${CSI}1K`,\n lines(count) {\n let clear = '';\n for (let i = 0; i < count; i++)\n clear += this.line + (i < count - 1 ? cursor.up() : '');\n if (count)\n clear += cursor.left;\n return clear;\n }\n}\n\nmodule.exports = { cursor, scroll, erase, beep };\n",
|
|
6
|
+
"let p = process || {}, argv = p.argv || [], env = p.env || {}\nlet isColorSupported =\n\t!(!!env.NO_COLOR || argv.includes(\"--no-color\")) &&\n\t(!!env.FORCE_COLOR || argv.includes(\"--color\") || p.platform === \"win32\" || ((p.stdout || {}).isTTY && env.TERM !== \"dumb\") || !!env.CI)\n\nlet formatter = (open, close, replace = open) =>\n\tinput => {\n\t\tlet string = \"\" + input, index = string.indexOf(close, open.length)\n\t\treturn ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close\n\t}\n\nlet replaceClose = (string, close, replace, index) => {\n\tlet result = \"\", cursor = 0\n\tdo {\n\t\tresult += string.substring(cursor, index) + replace\n\t\tcursor = index + close.length\n\t\tindex = string.indexOf(close, cursor)\n\t} while (~index)\n\treturn result + string.substring(cursor)\n}\n\nlet createColors = (enabled = isColorSupported) => {\n\tlet f = enabled ? formatter : () => String\n\treturn {\n\t\tisColorSupported: enabled,\n\t\treset: f(\"\\x1b[0m\", \"\\x1b[0m\"),\n\t\tbold: f(\"\\x1b[1m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[1m\"),\n\t\tdim: f(\"\\x1b[2m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[2m\"),\n\t\titalic: f(\"\\x1b[3m\", \"\\x1b[23m\"),\n\t\tunderline: f(\"\\x1b[4m\", \"\\x1b[24m\"),\n\t\tinverse: f(\"\\x1b[7m\", \"\\x1b[27m\"),\n\t\thidden: f(\"\\x1b[8m\", \"\\x1b[28m\"),\n\t\tstrikethrough: f(\"\\x1b[9m\", \"\\x1b[29m\"),\n\n\t\tblack: f(\"\\x1b[30m\", \"\\x1b[39m\"),\n\t\tred: f(\"\\x1b[31m\", \"\\x1b[39m\"),\n\t\tgreen: f(\"\\x1b[32m\", \"\\x1b[39m\"),\n\t\tyellow: f(\"\\x1b[33m\", \"\\x1b[39m\"),\n\t\tblue: f(\"\\x1b[34m\", \"\\x1b[39m\"),\n\t\tmagenta: f(\"\\x1b[35m\", \"\\x1b[39m\"),\n\t\tcyan: f(\"\\x1b[36m\", \"\\x1b[39m\"),\n\t\twhite: f(\"\\x1b[37m\", \"\\x1b[39m\"),\n\t\tgray: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\n\t\tbgBlack: f(\"\\x1b[40m\", \"\\x1b[49m\"),\n\t\tbgRed: f(\"\\x1b[41m\", \"\\x1b[49m\"),\n\t\tbgGreen: f(\"\\x1b[42m\", \"\\x1b[49m\"),\n\t\tbgYellow: f(\"\\x1b[43m\", \"\\x1b[49m\"),\n\t\tbgBlue: f(\"\\x1b[44m\", \"\\x1b[49m\"),\n\t\tbgMagenta: f(\"\\x1b[45m\", \"\\x1b[49m\"),\n\t\tbgCyan: f(\"\\x1b[46m\", \"\\x1b[49m\"),\n\t\tbgWhite: f(\"\\x1b[47m\", \"\\x1b[49m\"),\n\n\t\tblackBright: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\t\tredBright: f(\"\\x1b[91m\", \"\\x1b[39m\"),\n\t\tgreenBright: f(\"\\x1b[92m\", \"\\x1b[39m\"),\n\t\tyellowBright: f(\"\\x1b[93m\", \"\\x1b[39m\"),\n\t\tblueBright: f(\"\\x1b[94m\", \"\\x1b[39m\"),\n\t\tmagentaBright: f(\"\\x1b[95m\", \"\\x1b[39m\"),\n\t\tcyanBright: f(\"\\x1b[96m\", \"\\x1b[39m\"),\n\t\twhiteBright: f(\"\\x1b[97m\", \"\\x1b[39m\"),\n\n\t\tbgBlackBright: f(\"\\x1b[100m\", \"\\x1b[49m\"),\n\t\tbgRedBright: f(\"\\x1b[101m\", \"\\x1b[49m\"),\n\t\tbgGreenBright: f(\"\\x1b[102m\", \"\\x1b[49m\"),\n\t\tbgYellowBright: f(\"\\x1b[103m\", \"\\x1b[49m\"),\n\t\tbgBlueBright: f(\"\\x1b[104m\", \"\\x1b[49m\"),\n\t\tbgMagentaBright: f(\"\\x1b[105m\", \"\\x1b[49m\"),\n\t\tbgCyanBright: f(\"\\x1b[106m\", \"\\x1b[49m\"),\n\t\tbgWhiteBright: f(\"\\x1b[107m\", \"\\x1b[49m\"),\n\t}\n}\n\nmodule.exports = createColors()\nmodule.exports.createColors = createColors\n",
|
|
7
|
+
"#!/usr/bin/env node\n/* SPDX-FileCopyrightText: 2025-present Kriasoft */\n/* SPDX-License-Identifier: MIT */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { parseArgs } from \"node:util\";\nimport { introspectServers, runInteractiveSetup } from \"./prompts.js\";\nimport type { McpServer } from \"./types.js\";\n\ninterface MCPServerConfig {\n type: string;\n url: string;\n}\n\ninterface MCPConfig {\n mcpServers: Record<string, MCPServerConfig>;\n}\n\ninterface Args {\n output: string;\n config?: string;\n help?: boolean;\n yes?: boolean;\n}\n\nfunction showHelp() {\n console.log(`\nmcp-client-gen - Generate type-safe MCP client SDK\n\nUsage:\n npx mcp-client-gen # Launch interactive mode\n npx mcp-client-gen -y # Accept defaults and proceed\n npx mcp-client-gen <output-file> # Use specific output file\n npx mcp-client-gen --config <config-file> <output-file>\n\nArguments:\n <output-file> Output file path for the generated client\n\nOptions:\n --config <file> Path to MCP configuration file (default: .mcp.json)\n -y, --yes Accept all defaults and skip interactive prompts\n --help Show this help message\n\nExamples:\n npx mcp-client-gen # Interactive mode with prompts\n npx mcp-client-gen -y # Quick generation with defaults\n npx mcp-client-gen ./src/mcp-client.ts # Specify output file\n npx mcp-client-gen --config custom.mcp.json ./src/mcp.ts\n`);\n}\n\n/**\n * Parse CLI arguments to determine execution mode.\n * @returns Args object for processing, null if help was shown\n * @throws Process exits with code 1 on invalid arguments\n */\nfunction parseArguments(): Args | null {\n try {\n const { values, positionals } = parseArgs({\n options: {\n config: { type: \"string\" },\n help: { type: \"boolean\", short: \"h\" },\n yes: { type: \"boolean\", short: \"y\" },\n },\n allowPositionals: true,\n });\n\n if (values.help) {\n showHelp();\n return null;\n }\n\n // Empty positionals trigger interactive mode (prompts) or quick mode (-y)\n if (positionals.length === 0) {\n return {\n output: \"\", // Will be determined later\n config: values.config,\n yes: values.yes || false,\n };\n }\n\n return {\n output: positionals[0]!,\n config: values.config,\n yes: values.yes || false,\n };\n } catch (error) {\n console.error(\"Error parsing arguments:\", (error as Error).message);\n showHelp();\n process.exit(1);\n }\n}\n\n/**\n * Load MCP configuration from JSON file.\n * @param configPath Optional path, defaults to .mcp.json in cwd\n * @throws Process exits with code 1 if file missing or invalid JSON\n */\nfunction loadMCPConfig(configPath?: string): MCPConfig {\n const defaultConfigPath = resolve(process.cwd(), \".mcp.json\");\n const actualConfigPath = configPath\n ? resolve(process.cwd(), configPath)\n : defaultConfigPath;\n\n if (!existsSync(actualConfigPath)) {\n console.error(`Error: Configuration file not found: ${actualConfigPath}`);\n console.error(\n \"Create a .mcp.json file with your MCP server configuration.\",\n );\n process.exit(1);\n }\n\n try {\n const configContent = readFileSync(actualConfigPath, \"utf-8\");\n return JSON.parse(configContent);\n } catch (error) {\n console.error(\n `Error reading configuration file: ${(error as Error).message}`,\n );\n process.exit(1);\n }\n}\n\nasync function generateMCPClientFromConfig(args: Args) {\n const config = loadMCPConfig(args.config);\n const serverNames = Object.keys(config.mcpServers);\n\n console.log(\n `Generating MCP client SDK from ${serverNames.length} servers...`,\n );\n console.log(`Servers: ${serverNames.join(\", \")}`);\n\n // TODO: Replace with real introspection via mcp-client.ts\n console.log(\"⏳ Connecting to MCP servers...\");\n console.log(\"⏳ Fetching server capabilities...\");\n console.log(\"⏳ Generating TypeScript client...\");\n\n // Generate tree-shakable exports - one instance per server\n const clientExports = serverNames\n .map((name) => {\n const server = config.mcpServers[name];\n if (!server) throw new Error(`Server ${name} not found in configuration`);\n return `export const ${name} = new ${capitalize(name)}Client(\"${server.url}\");`;\n })\n .join(\"\\n\");\n\n const clientClasses = serverNames\n .map(\n (name) => `\nexport class ${capitalize(name)}Client {\n constructor(private serverUrl: string) {}\n \n // Methods will be generated from introspected schemas\n async fetchPage(id: string) {\n // Implementation will be generated based on MCP server schema\n throw new Error(\"Not implemented yet\");\n }\n}`,\n )\n .join(\"\\n\");\n\n const clientCode = `// Generated MCP client SDK\n// Generated from: ${Object.entries(config.mcpServers)\n .map(([name, server]) => `${name} (${server?.url || \"unknown\"})`)\n .join(\", \")}\n\n${clientClasses}\n\n${clientExports}\n`;\n\n // TODO: Write via fs.writeFileSync with prettier formatting\n console.log(`✅ Generated client saved to ${args.output}`);\n console.log(\"\\nUsage:\");\n console.log(\n `import { ${serverNames[0]} } from \"${args.output.replace(\".ts\", \".js\")}\";`,\n );\n console.log(`const result = await ${serverNames[0]}.fetchPage(\"123\");`);\n}\n\nasync function generateMCPClientFromServers(\n servers: McpServer[],\n outputFile: string,\n) {\n // Connect and fetch capabilities with visual progress\n const introspectionResults = await introspectServers(servers);\n\n // TODO: Extract meaningful names from server metadata\n const serverNames = servers.map((_, index) => `server${index + 1}`);\n\n const clientExports = servers\n .map(\n (server, index) =>\n `export const server${index + 1} = new Server${index + 1}Client(\"${server.url}\");`,\n )\n .join(\"\\n\");\n\n const clientClasses = servers\n .map(\n (server, index) => `\nexport class Server${index + 1}Client {\n constructor(private serverUrl: string) {}\n \n // Methods will be generated from introspected schemas\n async fetchPage(id: string) {\n // Implementation will be generated based on MCP server schema\n throw new Error(\"Not implemented yet\");\n }\n}`,\n )\n .join(\"\\n\");\n\n const clientCode = `// Generated MCP client SDK\n// Generated from: ${servers.map((s) => `${s.url} (${s.type})`).join(\", \")}\n\n${clientClasses}\n\n${clientExports}\n`;\n\n // TODO: Use codegen.ts to build proper TypeScript AST\n console.log(`\\n✅ Generated client saved to ${outputFile}`);\n console.log(\"\\nUsage:\");\n console.log(\n `import { ${serverNames[0]} } from \"${outputFile.replace(\".ts\", \".js\")}\";`,\n );\n console.log(`const result = await ${serverNames[0]}.fetchPage(\"123\");`);\n}\n\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n/**\n * CLI entry point - determines mode and delegates to appropriate handler.\n * Modes: interactive (no args), quick (-y), direct (output path given)\n */\nasync function main() {\n const args = parseArguments();\n\n // parseArguments returns null only when --help was shown\n if (!args) {\n console.error(\"Error: No arguments provided and help not requested\");\n showHelp();\n process.exit(1);\n }\n\n // Interactive/quick mode: prompts for server selection and output path\n if (!args.output) {\n try {\n const result = await runInteractiveSetup(process.cwd(), args.yes);\n await generateMCPClientFromServers(result.servers, result.outputFile);\n } catch (error) {\n console.error(\"Error:\", (error as Error).message);\n process.exit(1);\n }\n return;\n }\n\n // Direct mode: output path provided, use .mcp.json config\n try {\n await generateMCPClientFromConfig(args);\n } catch (error) {\n console.error(\"Error:\", (error as Error).message);\n process.exit(1);\n }\n}\n\nmain();\n",
|
|
8
|
+
"import{cursor as l,erase as b}from\"sisteransi\";import{stdin as j,stdout as M}from\"node:process\";import*as g from\"node:readline\";import O from\"node:readline\";import{Writable as X}from\"node:stream\";import v from\"picocolors\";function DD({onlyFirst:e=!1}={}){const t=[\"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C))\",\"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]))\"].join(\"|\");return new RegExp(t,e?void 0:\"g\")}const uD=DD();function P(e){if(typeof e!=\"string\")throw new TypeError(`Expected a \\`string\\`, got \\`${typeof e}\\``);return e.replace(uD,\"\")}function L(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,\"default\")?e.default:e}var W={exports:{}};(function(e){var u={};e.exports=u,u.eastAsianWidth=function(F){var s=F.charCodeAt(0),i=F.length==2?F.charCodeAt(1):0,D=s;return 55296<=s&&s<=56319&&56320<=i&&i<=57343&&(s&=1023,i&=1023,D=s<<10|i,D+=65536),D==12288||65281<=D&&D<=65376||65504<=D&&D<=65510?\"F\":D==8361||65377<=D&&D<=65470||65474<=D&&D<=65479||65482<=D&&D<=65487||65490<=D&&D<=65495||65498<=D&&D<=65500||65512<=D&&D<=65518?\"H\":4352<=D&&D<=4447||4515<=D&&D<=4519||4602<=D&&D<=4607||9001<=D&&D<=9002||11904<=D&&D<=11929||11931<=D&&D<=12019||12032<=D&&D<=12245||12272<=D&&D<=12283||12289<=D&&D<=12350||12353<=D&&D<=12438||12441<=D&&D<=12543||12549<=D&&D<=12589||12593<=D&&D<=12686||12688<=D&&D<=12730||12736<=D&&D<=12771||12784<=D&&D<=12830||12832<=D&&D<=12871||12880<=D&&D<=13054||13056<=D&&D<=19903||19968<=D&&D<=42124||42128<=D&&D<=42182||43360<=D&&D<=43388||44032<=D&&D<=55203||55216<=D&&D<=55238||55243<=D&&D<=55291||63744<=D&&D<=64255||65040<=D&&D<=65049||65072<=D&&D<=65106||65108<=D&&D<=65126||65128<=D&&D<=65131||110592<=D&&D<=110593||127488<=D&&D<=127490||127504<=D&&D<=127546||127552<=D&&D<=127560||127568<=D&&D<=127569||131072<=D&&D<=194367||177984<=D&&D<=196605||196608<=D&&D<=262141?\"W\":32<=D&&D<=126||162<=D&&D<=163||165<=D&&D<=166||D==172||D==175||10214<=D&&D<=10221||10629<=D&&D<=10630?\"Na\":D==161||D==164||167<=D&&D<=168||D==170||173<=D&&D<=174||176<=D&&D<=180||182<=D&&D<=186||188<=D&&D<=191||D==198||D==208||215<=D&&D<=216||222<=D&&D<=225||D==230||232<=D&&D<=234||236<=D&&D<=237||D==240||242<=D&&D<=243||247<=D&&D<=250||D==252||D==254||D==257||D==273||D==275||D==283||294<=D&&D<=295||D==299||305<=D&&D<=307||D==312||319<=D&&D<=322||D==324||328<=D&&D<=331||D==333||338<=D&&D<=339||358<=D&&D<=359||D==363||D==462||D==464||D==466||D==468||D==470||D==472||D==474||D==476||D==593||D==609||D==708||D==711||713<=D&&D<=715||D==717||D==720||728<=D&&D<=731||D==733||D==735||768<=D&&D<=879||913<=D&&D<=929||931<=D&&D<=937||945<=D&&D<=961||963<=D&&D<=969||D==1025||1040<=D&&D<=1103||D==1105||D==8208||8211<=D&&D<=8214||8216<=D&&D<=8217||8220<=D&&D<=8221||8224<=D&&D<=8226||8228<=D&&D<=8231||D==8240||8242<=D&&D<=8243||D==8245||D==8251||D==8254||D==8308||D==8319||8321<=D&&D<=8324||D==8364||D==8451||D==8453||D==8457||D==8467||D==8470||8481<=D&&D<=8482||D==8486||D==8491||8531<=D&&D<=8532||8539<=D&&D<=8542||8544<=D&&D<=8555||8560<=D&&D<=8569||D==8585||8592<=D&&D<=8601||8632<=D&&D<=8633||D==8658||D==8660||D==8679||D==8704||8706<=D&&D<=8707||8711<=D&&D<=8712||D==8715||D==8719||D==8721||D==8725||D==8730||8733<=D&&D<=8736||D==8739||D==8741||8743<=D&&D<=8748||D==8750||8756<=D&&D<=8759||8764<=D&&D<=8765||D==8776||D==8780||D==8786||8800<=D&&D<=8801||8804<=D&&D<=8807||8810<=D&&D<=8811||8814<=D&&D<=8815||8834<=D&&D<=8835||8838<=D&&D<=8839||D==8853||D==8857||D==8869||D==8895||D==8978||9312<=D&&D<=9449||9451<=D&&D<=9547||9552<=D&&D<=9587||9600<=D&&D<=9615||9618<=D&&D<=9621||9632<=D&&D<=9633||9635<=D&&D<=9641||9650<=D&&D<=9651||9654<=D&&D<=9655||9660<=D&&D<=9661||9664<=D&&D<=9665||9670<=D&&D<=9672||D==9675||9678<=D&&D<=9681||9698<=D&&D<=9701||D==9711||9733<=D&&D<=9734||D==9737||9742<=D&&D<=9743||9748<=D&&D<=9749||D==9756||D==9758||D==9792||D==9794||9824<=D&&D<=9825||9827<=D&&D<=9829||9831<=D&&D<=9834||9836<=D&&D<=9837||D==9839||9886<=D&&D<=9887||9918<=D&&D<=9919||9924<=D&&D<=9933||9935<=D&&D<=9953||D==9955||9960<=D&&D<=9983||D==10045||D==10071||10102<=D&&D<=10111||11093<=D&&D<=11097||12872<=D&&D<=12879||57344<=D&&D<=63743||65024<=D&&D<=65039||D==65533||127232<=D&&D<=127242||127248<=D&&D<=127277||127280<=D&&D<=127337||127344<=D&&D<=127386||917760<=D&&D<=917999||983040<=D&&D<=1048573||1048576<=D&&D<=1114109?\"A\":\"N\"},u.characterLength=function(F){var s=this.eastAsianWidth(F);return s==\"F\"||s==\"W\"||s==\"A\"?2:1};function t(F){return F.match(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[^\\uD800-\\uDFFF]/g)||[]}u.length=function(F){for(var s=t(F),i=0,D=0;D<s.length;D++)i=i+this.characterLength(s[D]);return i},u.slice=function(F,s,i){textLen=u.length(F),s=s||0,i=i||1,s<0&&(s=textLen+s),i<0&&(i=textLen+i);for(var D=\"\",C=0,n=t(F),E=0;E<n.length;E++){var a=n[E],o=u.length(a);if(C>=s-(o==2?1:0))if(C+o<=i)D+=a;else break;C+=o}return D}})(W);var tD=W.exports;const eD=L(tD);var FD=function(){return/\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67)\\uDB40\\uDC7F|(?:\\uD83E\\uDDD1\\uD83C\\uDFFF\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFE])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFE\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFD\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFC\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFB\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFC-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C\\uDFFB(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFC-\\uDFFF])|[\\u2695\\u2696\\u2708]\\uFE0F|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))?|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFE])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])\\uFE0F|\\u200D(?:(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC)?|(?:\\uD83D\\uDC69(?:\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69]))|\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1)(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC69(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83E\\uDDD1(?:\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDC69(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDE36\\u200D\\uD83C\\uDF2B|\\uD83C\\uDFF3\\uFE0F\\u200D\\u26A7|\\uD83D\\uDC3B\\u200D\\u2744|(?:(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF])\\u200D[\\u2640\\u2642]|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|\\uD83C\\uDFF4\\u200D\\u2620|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])\\u200D[\\u2640\\u2642]|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u2600-\\u2604\\u260E\\u2611\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26B0\\u26B1\\u26C8\\u26CF\\u26D1\\u26D3\\u26E9\\u26F0\\u26F1\\u26F4\\u26F7\\u26F8\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]|\\uD83D[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3])\\uFE0F|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66|\\uD83D\\uDE35\\u200D\\uD83D\\uDCAB|\\uD83D\\uDE2E\\u200D\\uD83D\\uDCA8|\\uD83D\\uDC15\\u200D\\uD83E\\uDDBA|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83D\\uDC69(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF6\\uD83C\\uDDE6|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83D\\uDC08\\u200D\\u2B1B|\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79)|\\uD83D\\uDC41\\uFE0F|\\uD83C\\uDFF3\\uFE0F|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|[#\\*0-9]\\uFE0F\\u20E3|\\u2764\\uFE0F|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDFF4|(?:[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270C\\u270D]|\\uD83D[\\uDD74\\uDD90])(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC08\\uDC15\\uDC3B\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE2E\\uDE35\\uDE36\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5]|\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD]|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF]|[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD1D\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78\\uDD7A-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCB\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6]|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26A7\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDED5-\\uDED7\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])\\uFE0F|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDC8F\\uDC91\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3C-\\uDD3E\\uDD77\\uDDB5\\uDDB6\\uDDB8\\uDDB9\\uDDBB\\uDDCD-\\uDDCF\\uDDD1-\\uDDDD])/g};const sD=L(FD);function p(e,u={}){if(typeof e!=\"string\"||e.length===0||(u={ambiguousIsNarrow:!0,...u},e=P(e),e.length===0))return 0;e=e.replace(sD(),\" \");const t=u.ambiguousIsNarrow?1:2;let F=0;for(const s of e){const i=s.codePointAt(0);if(i<=31||i>=127&&i<=159||i>=768&&i<=879)continue;switch(eD.eastAsianWidth(s)){case\"F\":case\"W\":F+=2;break;case\"A\":F+=t;break;default:F+=1}}return F}const w=10,N=(e=0)=>u=>`\\x1B[${u+e}m`,I=(e=0)=>u=>`\\x1B[${38+e};5;${u}m`,R=(e=0)=>(u,t,F)=>`\\x1B[${38+e};2;${u};${t};${F}m`,r={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(r.modifier);const iD=Object.keys(r.color),CD=Object.keys(r.bgColor);[...iD,...CD];function rD(){const e=new Map;for(const[u,t]of Object.entries(r)){for(const[F,s]of Object.entries(t))r[F]={open:`\\x1B[${s[0]}m`,close:`\\x1B[${s[1]}m`},t[F]=r[F],e.set(s[0],s[1]);Object.defineProperty(r,u,{value:t,enumerable:!1})}return Object.defineProperty(r,\"codes\",{value:e,enumerable:!1}),r.color.close=\"\\x1B[39m\",r.bgColor.close=\"\\x1B[49m\",r.color.ansi=N(),r.color.ansi256=I(),r.color.ansi16m=R(),r.bgColor.ansi=N(w),r.bgColor.ansi256=I(w),r.bgColor.ansi16m=R(w),Object.defineProperties(r,{rgbToAnsi256:{value:(u,t,F)=>u===t&&t===F?u<8?16:u>248?231:Math.round((u-8)/247*24)+232:16+36*Math.round(u/255*5)+6*Math.round(t/255*5)+Math.round(F/255*5),enumerable:!1},hexToRgb:{value:u=>{const t=/[a-f\\d]{6}|[a-f\\d]{3}/i.exec(u.toString(16));if(!t)return[0,0,0];let[F]=t;F.length===3&&(F=[...F].map(i=>i+i).join(\"\"));const s=Number.parseInt(F,16);return[s>>16&255,s>>8&255,s&255]},enumerable:!1},hexToAnsi256:{value:u=>r.rgbToAnsi256(...r.hexToRgb(u)),enumerable:!1},ansi256ToAnsi:{value:u=>{if(u<8)return 30+u;if(u<16)return 90+(u-8);let t,F,s;if(u>=232)t=((u-232)*10+8)/255,F=t,s=t;else{u-=16;const C=u%36;t=Math.floor(u/36)/5,F=Math.floor(C/6)/5,s=C%6/5}const i=Math.max(t,F,s)*2;if(i===0)return 30;let D=30+(Math.round(s)<<2|Math.round(F)<<1|Math.round(t));return i===2&&(D+=60),D},enumerable:!1},rgbToAnsi:{value:(u,t,F)=>r.ansi256ToAnsi(r.rgbToAnsi256(u,t,F)),enumerable:!1},hexToAnsi:{value:u=>r.ansi256ToAnsi(r.hexToAnsi256(u)),enumerable:!1}}),r}const ED=rD(),d=new Set([\"\\x1B\",\"\\x9B\"]),oD=39,y=\"\\x07\",V=\"[\",nD=\"]\",G=\"m\",_=`${nD}8;;`,z=e=>`${d.values().next().value}${V}${e}${G}`,K=e=>`${d.values().next().value}${_}${e}${y}`,aD=e=>e.split(\" \").map(u=>p(u)),k=(e,u,t)=>{const F=[...u];let s=!1,i=!1,D=p(P(e[e.length-1]));for(const[C,n]of F.entries()){const E=p(n);if(D+E<=t?e[e.length-1]+=n:(e.push(n),D=0),d.has(n)&&(s=!0,i=F.slice(C+1).join(\"\").startsWith(_)),s){i?n===y&&(s=!1,i=!1):n===G&&(s=!1);continue}D+=E,D===t&&C<F.length-1&&(e.push(\"\"),D=0)}!D&&e[e.length-1].length>0&&e.length>1&&(e[e.length-2]+=e.pop())},hD=e=>{const u=e.split(\" \");let t=u.length;for(;t>0&&!(p(u[t-1])>0);)t--;return t===u.length?e:u.slice(0,t).join(\" \")+u.slice(t).join(\"\")},lD=(e,u,t={})=>{if(t.trim!==!1&&e.trim()===\"\")return\"\";let F=\"\",s,i;const D=aD(e);let C=[\"\"];for(const[E,a]of e.split(\" \").entries()){t.trim!==!1&&(C[C.length-1]=C[C.length-1].trimStart());let o=p(C[C.length-1]);if(E!==0&&(o>=u&&(t.wordWrap===!1||t.trim===!1)&&(C.push(\"\"),o=0),(o>0||t.trim===!1)&&(C[C.length-1]+=\" \",o++)),t.hard&&D[E]>u){const c=u-o,f=1+Math.floor((D[E]-c-1)/u);Math.floor((D[E]-1)/u)<f&&C.push(\"\"),k(C,a,u);continue}if(o+D[E]>u&&o>0&&D[E]>0){if(t.wordWrap===!1&&o<u){k(C,a,u);continue}C.push(\"\")}if(o+D[E]>u&&t.wordWrap===!1){k(C,a,u);continue}C[C.length-1]+=a}t.trim!==!1&&(C=C.map(E=>hD(E)));const n=[...C.join(`\n`)];for(const[E,a]of n.entries()){if(F+=a,d.has(a)){const{groups:c}=new RegExp(`(?:\\\\${V}(?<code>\\\\d+)m|\\\\${_}(?<uri>.*)${y})`).exec(n.slice(E).join(\"\"))||{groups:{}};if(c.code!==void 0){const f=Number.parseFloat(c.code);s=f===oD?void 0:f}else c.uri!==void 0&&(i=c.uri.length===0?void 0:c.uri)}const o=ED.codes.get(Number(s));n[E+1]===`\n`?(i&&(F+=K(\"\")),s&&o&&(F+=z(o))):a===`\n`&&(s&&o&&(F+=z(s)),i&&(F+=K(i)))}return F};function Y(e,u,t){return String(e).normalize().replace(/\\r\\n/g,`\n`).split(`\n`).map(F=>lD(F,u,t)).join(`\n`)}const xD=[\"up\",\"down\",\"left\",\"right\",\"space\",\"enter\",\"cancel\"],B={actions:new Set(xD),aliases:new Map([[\"k\",\"up\"],[\"j\",\"down\"],[\"h\",\"left\"],[\"l\",\"right\"],[\"\u0003\",\"cancel\"],[\"escape\",\"cancel\"]])};function cD(e){for(const u in e){const t=u;if(!Object.hasOwn(e,t))continue;const F=e[t];switch(t){case\"aliases\":{for(const s in F)Object.hasOwn(F,s)&&(B.aliases.has(s)||B.aliases.set(s,F[s]));break}}}}function $(e,u){if(typeof e==\"string\")return B.aliases.get(e)===u;for(const t of e)if(t!==void 0&&$(t,u))return!0;return!1}function BD(e,u){if(e===u)return;const t=e.split(`\n`),F=u.split(`\n`),s=[];for(let i=0;i<Math.max(t.length,F.length);i++)t[i]!==F[i]&&s.push(i);return s}const AD=globalThis.process.platform.startsWith(\"win\"),S=Symbol(\"clack:cancel\");function pD(e){return e===S}function m(e,u){const t=e;t.isTTY&&t.setRawMode(u)}function fD({input:e=j,output:u=M,overwrite:t=!0,hideCursor:F=!0}={}){const s=g.createInterface({input:e,output:u,prompt:\"\",tabSize:1});g.emitKeypressEvents(e,s),e.isTTY&&e.setRawMode(!0);const i=(D,{name:C,sequence:n})=>{const E=String(D);if($([E,C,n],\"cancel\")){F&&u.write(l.show),process.exit(0);return}if(!t)return;const a=C===\"return\"?0:-1,o=C===\"return\"?-1:0;g.moveCursor(u,a,o,()=>{g.clearLine(u,1,()=>{e.once(\"keypress\",i)})})};return F&&u.write(l.hide),e.once(\"keypress\",i),()=>{e.off(\"keypress\",i),F&&u.write(l.show),e.isTTY&&!AD&&e.setRawMode(!1),s.terminal=!1,s.close()}}var gD=Object.defineProperty,vD=(e,u,t)=>u in e?gD(e,u,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[u]=t,h=(e,u,t)=>(vD(e,typeof u!=\"symbol\"?u+\"\":u,t),t);class x{constructor(u,t=!0){h(this,\"input\"),h(this,\"output\"),h(this,\"_abortSignal\"),h(this,\"rl\"),h(this,\"opts\"),h(this,\"_render\"),h(this,\"_track\",!1),h(this,\"_prevFrame\",\"\"),h(this,\"_subscribers\",new Map),h(this,\"_cursor\",0),h(this,\"state\",\"initial\"),h(this,\"error\",\"\"),h(this,\"value\");const{input:F=j,output:s=M,render:i,signal:D,...C}=u;this.opts=C,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=i.bind(this),this._track=t,this._abortSignal=D,this.input=F,this.output=s}unsubscribe(){this._subscribers.clear()}setSubscriber(u,t){const F=this._subscribers.get(u)??[];F.push(t),this._subscribers.set(u,F)}on(u,t){this.setSubscriber(u,{cb:t})}once(u,t){this.setSubscriber(u,{cb:t,once:!0})}emit(u,...t){const F=this._subscribers.get(u)??[],s=[];for(const i of F)i.cb(...t),i.once&&s.push(()=>F.splice(F.indexOf(i),1));for(const i of s)i()}prompt(){return new Promise((u,t)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state=\"cancel\",this.close(),u(S);this._abortSignal.addEventListener(\"abort\",()=>{this.state=\"cancel\",this.close()},{once:!0})}const F=new X;F._write=(s,i,D)=>{this._track&&(this.value=this.rl?.line.replace(/\\t/g,\"\"),this._cursor=this.rl?.cursor??0,this.emit(\"value\",this.value)),D()},this.input.pipe(F),this.rl=O.createInterface({input:this.input,output:F,tabSize:2,prompt:\"\",escapeCodeTimeout:50,terminal:!0}),O.emitKeypressEvents(this.input,this.rl),this.rl.prompt(),this.opts.initialValue!==void 0&&this._track&&this.rl.write(this.opts.initialValue),this.input.on(\"keypress\",this.onKeypress),m(this.input,!0),this.output.on(\"resize\",this.render),this.render(),this.once(\"submit\",()=>{this.output.write(l.show),this.output.off(\"resize\",this.render),m(this.input,!1),u(this.value)}),this.once(\"cancel\",()=>{this.output.write(l.show),this.output.off(\"resize\",this.render),m(this.input,!1),u(S)})})}onKeypress(u,t){if(this.state===\"error\"&&(this.state=\"active\"),t?.name&&(!this._track&&B.aliases.has(t.name)&&this.emit(\"cursor\",B.aliases.get(t.name)),B.actions.has(t.name)&&this.emit(\"cursor\",t.name)),u&&(u.toLowerCase()===\"y\"||u.toLowerCase()===\"n\")&&this.emit(\"confirm\",u.toLowerCase()===\"y\"),u===\"\t\"&&this.opts.placeholder&&(this.value||(this.rl?.write(this.opts.placeholder),this.emit(\"value\",this.opts.placeholder))),u&&this.emit(\"key\",u.toLowerCase()),t?.name===\"return\"){if(this.opts.validate){const F=this.opts.validate(this.value);F&&(this.error=F instanceof Error?F.message:F,this.state=\"error\",this.rl?.write(this.value))}this.state!==\"error\"&&(this.state=\"submit\")}$([u,t?.name,t?.sequence],\"cancel\")&&(this.state=\"cancel\"),(this.state===\"submit\"||this.state===\"cancel\")&&this.emit(\"finalize\"),this.render(),(this.state===\"submit\"||this.state===\"cancel\")&&this.close()}close(){this.input.unpipe(),this.input.removeListener(\"keypress\",this.onKeypress),this.output.write(`\n`),m(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){const u=Y(this._prevFrame,process.stdout.columns,{hard:!0}).split(`\n`).length-1;this.output.write(l.move(-999,u*-1))}render(){const u=Y(this._render(this)??\"\",process.stdout.columns,{hard:!0});if(u!==this._prevFrame){if(this.state===\"initial\")this.output.write(l.hide);else{const t=BD(this._prevFrame,u);if(this.restoreCursor(),t&&t?.length===1){const F=t[0];this.output.write(l.move(0,F)),this.output.write(b.lines(1));const s=u.split(`\n`);this.output.write(s[F]),this._prevFrame=u,this.output.write(l.move(0,s.length-F-1));return}if(t&&t?.length>1){const F=t[0];this.output.write(l.move(0,F)),this.output.write(b.down());const s=u.split(`\n`).slice(F);this.output.write(s.join(`\n`)),this._prevFrame=u;return}this.output.write(b.down())}this.output.write(u),this.state===\"initial\"&&(this.state=\"active\"),this._prevFrame=u}}}class dD extends x{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(u){super(u,!1),this.value=!!u.initialValue,this.on(\"value\",()=>{this.value=this._value}),this.on(\"confirm\",t=>{this.output.write(l.move(0,-1)),this.value=t,this.state=\"submit\",this.close()}),this.on(\"cursor\",()=>{this.value=!this.value})}}var mD=Object.defineProperty,bD=(e,u,t)=>u in e?mD(e,u,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[u]=t,Z=(e,u,t)=>(bD(e,typeof u!=\"symbol\"?u+\"\":u,t),t),q=(e,u,t)=>{if(!u.has(e))throw TypeError(\"Cannot \"+t)},T=(e,u,t)=>(q(e,u,\"read from private field\"),t?t.call(e):u.get(e)),wD=(e,u,t)=>{if(u.has(e))throw TypeError(\"Cannot add the same private member more than once\");u instanceof WeakSet?u.add(e):u.set(e,t)},yD=(e,u,t,F)=>(q(e,u,\"write to private field\"),F?F.call(e,t):u.set(e,t),t),A;let _D=class extends x{constructor(u){super(u,!1),Z(this,\"options\"),Z(this,\"cursor\",0),wD(this,A,void 0);const{options:t}=u;yD(this,A,u.selectableGroups!==!1),this.options=Object.entries(t).flatMap(([F,s])=>[{value:F,group:!0,label:F},...s.map(i=>({...i,group:F}))]),this.value=[...u.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:F})=>F===u.cursorAt),T(this,A)?0:1),this.on(\"cursor\",F=>{switch(F){case\"left\":case\"up\":{this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;const s=this.options[this.cursor]?.group===!0;!T(this,A)&&s&&(this.cursor=this.cursor===0?this.options.length-1:this.cursor-1);break}case\"down\":case\"right\":{this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;const s=this.options[this.cursor]?.group===!0;!T(this,A)&&s&&(this.cursor=this.cursor===this.options.length-1?0:this.cursor+1);break}case\"space\":this.toggleValue();break}})}getGroupItems(u){return this.options.filter(t=>t.group===u)}isGroupSelected(u){return this.getGroupItems(u).every(t=>this.value.includes(t.value))}toggleValue(){const u=this.options[this.cursor];if(u.group===!0){const t=u.value,F=this.getGroupItems(t);this.isGroupSelected(t)?this.value=this.value.filter(s=>F.findIndex(i=>i.value===s)===-1):this.value=[...this.value,...F.map(s=>s.value)],this.value=Array.from(new Set(this.value))}else{const t=this.value.includes(u.value);this.value=t?this.value.filter(F=>F!==u.value):[...this.value,u.value]}}};A=new WeakMap;var kD=Object.defineProperty,$D=(e,u,t)=>u in e?kD(e,u,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[u]=t,H=(e,u,t)=>($D(e,typeof u!=\"symbol\"?u+\"\":u,t),t);let SD=class extends x{constructor(u){super(u,!1),H(this,\"options\"),H(this,\"cursor\",0),this.options=u.options,this.value=[...u.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:t})=>t===u.cursorAt),0),this.on(\"key\",t=>{t===\"a\"&&this.toggleAll()}),this.on(\"cursor\",t=>{switch(t){case\"left\":case\"up\":this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break;case\"down\":case\"right\":this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break;case\"space\":this.toggleValue();break}})}get _value(){return this.options[this.cursor].value}toggleAll(){const u=this.value.length===this.options.length;this.value=u?[]:this.options.map(t=>t.value)}toggleValue(){const u=this.value.includes(this._value);this.value=u?this.value.filter(t=>t!==this._value):[...this.value,this._value]}};var TD=Object.defineProperty,jD=(e,u,t)=>u in e?TD(e,u,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[u]=t,U=(e,u,t)=>(jD(e,typeof u!=\"symbol\"?u+\"\":u,t),t);class MD extends x{constructor({mask:u,...t}){super(t),U(this,\"valueWithCursor\",\"\"),U(this,\"_mask\",\"\\u2022\"),this._mask=u??\"\\u2022\",this.on(\"finalize\",()=>{this.valueWithCursor=this.masked}),this.on(\"value\",()=>{if(this.cursor>=this.value.length)this.valueWithCursor=`${this.masked}${v.inverse(v.hidden(\"_\"))}`;else{const F=this.masked.slice(0,this.cursor),s=this.masked.slice(this.cursor);this.valueWithCursor=`${F}${v.inverse(s[0])}${s.slice(1)}`}})}get cursor(){return this._cursor}get masked(){return this.value.replaceAll(/./g,this._mask)}}var OD=Object.defineProperty,PD=(e,u,t)=>u in e?OD(e,u,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[u]=t,J=(e,u,t)=>(PD(e,typeof u!=\"symbol\"?u+\"\":u,t),t);class LD extends x{constructor(u){super(u,!1),J(this,\"options\"),J(this,\"cursor\",0),this.options=u.options,this.cursor=this.options.findIndex(({value:t})=>t===u.initialValue),this.cursor===-1&&(this.cursor=0),this.changeValue(),this.on(\"cursor\",t=>{switch(t){case\"left\":case\"up\":this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break;case\"down\":case\"right\":this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break}this.changeValue()})}get _value(){return this.options[this.cursor]}changeValue(){this.value=this._value.value}}var WD=Object.defineProperty,ND=(e,u,t)=>u in e?WD(e,u,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[u]=t,Q=(e,u,t)=>(ND(e,typeof u!=\"symbol\"?u+\"\":u,t),t);class ID extends x{constructor(u){super(u,!1),Q(this,\"options\"),Q(this,\"cursor\",0),this.options=u.options;const t=this.options.map(({value:[F]})=>F?.toLowerCase());this.cursor=Math.max(t.indexOf(u.initialValue),0),this.on(\"key\",F=>{if(!t.includes(F))return;const s=this.options.find(({value:[i]})=>i?.toLowerCase()===F);s&&(this.value=s.value,this.state=\"submit\",this.emit(\"submit\"))})}}class RD extends x{get valueWithCursor(){if(this.state===\"submit\")return this.value;if(this.cursor>=this.value.length)return`${this.value}\\u2588`;const u=this.value.slice(0,this.cursor),[t,...F]=this.value.slice(this.cursor);return`${u}${v.inverse(t)}${F.join(\"\")}`}get cursor(){return this._cursor}constructor(u){super(u),this.on(\"finalize\",()=>{this.value||(this.value=u.defaultValue)})}}export{dD as ConfirmPrompt,_D as GroupMultiSelectPrompt,SD as MultiSelectPrompt,MD as PasswordPrompt,x as Prompt,ID as SelectKeyPrompt,LD as SelectPrompt,RD as TextPrompt,fD as block,pD as isCancel,cD as updateSettings};\n//# sourceMappingURL=index.mjs.map\n",
|
|
9
|
+
"import{stripVTControlCharacters as S}from\"node:util\";import{TextPrompt as Q,PasswordPrompt as X,ConfirmPrompt as Z,SelectPrompt as ee,SelectKeyPrompt as te,MultiSelectPrompt as re,GroupMultiSelectPrompt as se,isCancel as ie,block as ne}from\"@clack/core\";export{isCancel,updateSettings}from\"@clack/core\";import y from\"node:process\";import e from\"picocolors\";import{cursor as oe,erase as ae}from\"sisteransi\";function ce(){return y.platform!==\"win32\"?y.env.TERM!==\"linux\":!!y.env.CI||!!y.env.WT_SESSION||!!y.env.TERMINUS_SUBLIME||y.env.ConEmuTask===\"{cmd::Cmder}\"||y.env.TERM_PROGRAM===\"Terminus-Sublime\"||y.env.TERM_PROGRAM===\"vscode\"||y.env.TERM===\"xterm-256color\"||y.env.TERM===\"alacritty\"||y.env.TERMINAL_EMULATOR===\"JetBrains-JediTerm\"}const V=ce(),u=(t,n)=>V?t:n,le=u(\"\\u25C6\",\"*\"),L=u(\"\\u25A0\",\"x\"),W=u(\"\\u25B2\",\"x\"),C=u(\"\\u25C7\",\"o\"),ue=u(\"\\u250C\",\"T\"),o=u(\"\\u2502\",\"|\"),d=u(\"\\u2514\",\"\\u2014\"),k=u(\"\\u25CF\",\">\"),P=u(\"\\u25CB\",\" \"),A=u(\"\\u25FB\",\"[\\u2022]\"),T=u(\"\\u25FC\",\"[+]\"),F=u(\"\\u25FB\",\"[ ]\"),$e=u(\"\\u25AA\",\"\\u2022\"),_=u(\"\\u2500\",\"-\"),me=u(\"\\u256E\",\"+\"),de=u(\"\\u251C\",\"+\"),pe=u(\"\\u256F\",\"+\"),q=u(\"\\u25CF\",\"\\u2022\"),D=u(\"\\u25C6\",\"*\"),U=u(\"\\u25B2\",\"!\"),K=u(\"\\u25A0\",\"x\"),b=t=>{switch(t){case\"initial\":case\"active\":return e.cyan(le);case\"cancel\":return e.red(L);case\"error\":return e.yellow(W);case\"submit\":return e.green(C)}},G=t=>{const{cursor:n,options:r,style:i}=t,s=t.maxItems??Number.POSITIVE_INFINITY,c=Math.max(process.stdout.rows-4,0),a=Math.min(c,Math.max(s,5));let l=0;n>=l+a-3?l=Math.max(Math.min(n-a+3,r.length-a),0):n<l+2&&(l=Math.max(n-2,0));const $=a<r.length&&l>0,g=a<r.length&&l+a<r.length;return r.slice(l,l+a).map((p,v,f)=>{const j=v===0&&$,E=v===f.length-1&&g;return j||E?e.dim(\"...\"):i(p,v+l===n)})},he=t=>new Q({validate:t.validate,placeholder:t.placeholder,defaultValue:t.defaultValue,initialValue:t.initialValue,render(){const n=`${e.gray(o)}\n${b(this.state)} ${t.message}\n`,r=t.placeholder?e.inverse(t.placeholder[0])+e.dim(t.placeholder.slice(1)):e.inverse(e.hidden(\"_\")),i=this.value?this.valueWithCursor:r;switch(this.state){case\"error\":return`${n.trim()}\n${e.yellow(o)} ${i}\n${e.yellow(d)} ${e.yellow(this.error)}\n`;case\"submit\":return`${n}${e.gray(o)} ${e.dim(this.value||t.placeholder)}`;case\"cancel\":return`${n}${e.gray(o)} ${e.strikethrough(e.dim(this.value??\"\"))}${this.value?.trim()?`\n${e.gray(o)}`:\"\"}`;default:return`${n}${e.cyan(o)} ${i}\n${e.cyan(d)}\n`}}}).prompt(),ge=t=>new X({validate:t.validate,mask:t.mask??$e,render(){const n=`${e.gray(o)}\n${b(this.state)} ${t.message}\n`,r=this.valueWithCursor,i=this.masked;switch(this.state){case\"error\":return`${n.trim()}\n${e.yellow(o)} ${i}\n${e.yellow(d)} ${e.yellow(this.error)}\n`;case\"submit\":return`${n}${e.gray(o)} ${e.dim(i)}`;case\"cancel\":return`${n}${e.gray(o)} ${e.strikethrough(e.dim(i??\"\"))}${i?`\n${e.gray(o)}`:\"\"}`;default:return`${n}${e.cyan(o)} ${r}\n${e.cyan(d)}\n`}}}).prompt(),ye=t=>{const n=t.active??\"Yes\",r=t.inactive??\"No\";return new Z({active:n,inactive:r,initialValue:t.initialValue??!0,render(){const i=`${e.gray(o)}\n${b(this.state)} ${t.message}\n`,s=this.value?n:r;switch(this.state){case\"submit\":return`${i}${e.gray(o)} ${e.dim(s)}`;case\"cancel\":return`${i}${e.gray(o)} ${e.strikethrough(e.dim(s))}\n${e.gray(o)}`;default:return`${i}${e.cyan(o)} ${this.value?`${e.green(k)} ${n}`:`${e.dim(P)} ${e.dim(n)}`} ${e.dim(\"/\")} ${this.value?`${e.dim(P)} ${e.dim(r)}`:`${e.green(k)} ${r}`}\n${e.cyan(d)}\n`}}}).prompt()},ve=t=>{const n=(r,i)=>{const s=r.label??String(r.value);switch(i){case\"selected\":return`${e.dim(s)}`;case\"active\":return`${e.green(k)} ${s} ${r.hint?e.dim(`(${r.hint})`):\"\"}`;case\"cancelled\":return`${e.strikethrough(e.dim(s))}`;default:return`${e.dim(P)} ${e.dim(s)}`}};return new ee({options:t.options,initialValue:t.initialValue,render(){const r=`${e.gray(o)}\n${b(this.state)} ${t.message}\n`;switch(this.state){case\"submit\":return`${r}${e.gray(o)} ${n(this.options[this.cursor],\"selected\")}`;case\"cancel\":return`${r}${e.gray(o)} ${n(this.options[this.cursor],\"cancelled\")}\n${e.gray(o)}`;default:return`${r}${e.cyan(o)} ${G({cursor:this.cursor,options:this.options,maxItems:t.maxItems,style:(i,s)=>n(i,s?\"active\":\"inactive\")}).join(`\n${e.cyan(o)} `)}\n${e.cyan(d)}\n`}}}).prompt()},we=t=>{const n=(r,i=\"inactive\")=>{const s=r.label??String(r.value);return i===\"selected\"?`${e.dim(s)}`:i===\"cancelled\"?`${e.strikethrough(e.dim(s))}`:i===\"active\"?`${e.bgCyan(e.gray(` ${r.value} `))} ${s} ${r.hint?e.dim(`(${r.hint})`):\"\"}`:`${e.gray(e.bgWhite(e.inverse(` ${r.value} `)))} ${s} ${r.hint?e.dim(`(${r.hint})`):\"\"}`};return new te({options:t.options,initialValue:t.initialValue,render(){const r=`${e.gray(o)}\n${b(this.state)} ${t.message}\n`;switch(this.state){case\"submit\":return`${r}${e.gray(o)} ${n(this.options.find(i=>i.value===this.value)??t.options[0],\"selected\")}`;case\"cancel\":return`${r}${e.gray(o)} ${n(this.options[0],\"cancelled\")}\n${e.gray(o)}`;default:return`${r}${e.cyan(o)} ${this.options.map((i,s)=>n(i,s===this.cursor?\"active\":\"inactive\")).join(`\n${e.cyan(o)} `)}\n${e.cyan(d)}\n`}}}).prompt()},fe=t=>{const n=(r,i)=>{const s=r.label??String(r.value);return i===\"active\"?`${e.cyan(A)} ${s} ${r.hint?e.dim(`(${r.hint})`):\"\"}`:i===\"selected\"?`${e.green(T)} ${e.dim(s)} ${r.hint?e.dim(`(${r.hint})`):\"\"}`:i===\"cancelled\"?`${e.strikethrough(e.dim(s))}`:i===\"active-selected\"?`${e.green(T)} ${s} ${r.hint?e.dim(`(${r.hint})`):\"\"}`:i===\"submitted\"?`${e.dim(s)}`:`${e.dim(F)} ${e.dim(s)}`};return new re({options:t.options,initialValues:t.initialValues,required:t.required??!0,cursorAt:t.cursorAt,validate(r){if(this.required&&r.length===0)return`Please select at least one option.\n${e.reset(e.dim(`Press ${e.gray(e.bgWhite(e.inverse(\" space \")))} to select, ${e.gray(e.bgWhite(e.inverse(\" enter \")))} to submit`))}`},render(){const r=`${e.gray(o)}\n${b(this.state)} ${t.message}\n`,i=(s,c)=>{const a=this.value.includes(s.value);return c&&a?n(s,\"active-selected\"):a?n(s,\"selected\"):n(s,c?\"active\":\"inactive\")};switch(this.state){case\"submit\":return`${r}${e.gray(o)} ${this.options.filter(({value:s})=>this.value.includes(s)).map(s=>n(s,\"submitted\")).join(e.dim(\", \"))||e.dim(\"none\")}`;case\"cancel\":{const s=this.options.filter(({value:c})=>this.value.includes(c)).map(c=>n(c,\"cancelled\")).join(e.dim(\", \"));return`${r}${e.gray(o)} ${s.trim()?`${s}\n${e.gray(o)}`:\"\"}`}case\"error\":{const s=this.error.split(`\n`).map((c,a)=>a===0?`${e.yellow(d)} ${e.yellow(c)}`:` ${c}`).join(`\n`);return`${r+e.yellow(o)} ${G({options:this.options,cursor:this.cursor,maxItems:t.maxItems,style:i}).join(`\n${e.yellow(o)} `)}\n${s}\n`}default:return`${r}${e.cyan(o)} ${G({options:this.options,cursor:this.cursor,maxItems:t.maxItems,style:i}).join(`\n${e.cyan(o)} `)}\n${e.cyan(d)}\n`}}}).prompt()},be=t=>{const{selectableGroups:n=!0}=t,r=(i,s,c=[])=>{const a=i.label??String(i.value),l=typeof i.group==\"string\",$=l&&(c[c.indexOf(i)+1]??{group:!0}),g=l&&$.group===!0,p=l?n?`${g?d:o} `:\" \":\"\";if(s===\"active\")return`${e.dim(p)}${e.cyan(A)} ${a} ${i.hint?e.dim(`(${i.hint})`):\"\"}`;if(s===\"group-active\")return`${p}${e.cyan(A)} ${e.dim(a)}`;if(s===\"group-active-selected\")return`${p}${e.green(T)} ${e.dim(a)}`;if(s===\"selected\"){const f=l||n?e.green(T):\"\";return`${e.dim(p)}${f} ${e.dim(a)} ${i.hint?e.dim(`(${i.hint})`):\"\"}`}if(s===\"cancelled\")return`${e.strikethrough(e.dim(a))}`;if(s===\"active-selected\")return`${e.dim(p)}${e.green(T)} ${a} ${i.hint?e.dim(`(${i.hint})`):\"\"}`;if(s===\"submitted\")return`${e.dim(a)}`;const v=l||n?e.dim(F):\"\";return`${e.dim(p)}${v} ${e.dim(a)}`};return new se({options:t.options,initialValues:t.initialValues,required:t.required??!0,cursorAt:t.cursorAt,selectableGroups:n,validate(i){if(this.required&&i.length===0)return`Please select at least one option.\n${e.reset(e.dim(`Press ${e.gray(e.bgWhite(e.inverse(\" space \")))} to select, ${e.gray(e.bgWhite(e.inverse(\" enter \")))} to submit`))}`},render(){const i=`${e.gray(o)}\n${b(this.state)} ${t.message}\n`;switch(this.state){case\"submit\":return`${i}${e.gray(o)} ${this.options.filter(({value:s})=>this.value.includes(s)).map(s=>r(s,\"submitted\")).join(e.dim(\", \"))}`;case\"cancel\":{const s=this.options.filter(({value:c})=>this.value.includes(c)).map(c=>r(c,\"cancelled\")).join(e.dim(\", \"));return`${i}${e.gray(o)} ${s.trim()?`${s}\n${e.gray(o)}`:\"\"}`}case\"error\":{const s=this.error.split(`\n`).map((c,a)=>a===0?`${e.yellow(d)} ${e.yellow(c)}`:` ${c}`).join(`\n`);return`${i}${e.yellow(o)} ${this.options.map((c,a,l)=>{const $=this.value.includes(c.value)||c.group===!0&&this.isGroupSelected(`${c.value}`),g=a===this.cursor;return!g&&typeof c.group==\"string\"&&this.options[this.cursor].value===c.group?r(c,$?\"group-active-selected\":\"group-active\",l):g&&$?r(c,\"active-selected\",l):$?r(c,\"selected\",l):r(c,g?\"active\":\"inactive\",l)}).join(`\n${e.yellow(o)} `)}\n${s}\n`}default:return`${i}${e.cyan(o)} ${this.options.map((s,c,a)=>{const l=this.value.includes(s.value)||s.group===!0&&this.isGroupSelected(`${s.value}`),$=c===this.cursor;return!$&&typeof s.group==\"string\"&&this.options[this.cursor].value===s.group?r(s,l?\"group-active-selected\":\"group-active\",a):$&&l?r(s,\"active-selected\",a):l?r(s,\"selected\",a):r(s,$?\"active\":\"inactive\",a)}).join(`\n${e.cyan(o)} `)}\n${e.cyan(d)}\n`}}}).prompt()},Me=(t=\"\",n=\"\")=>{const r=`\n${t}\n`.split(`\n`),i=S(n).length,s=Math.max(r.reduce((a,l)=>{const $=S(l);return $.length>a?$.length:a},0),i)+2,c=r.map(a=>`${e.gray(o)} ${e.dim(a)}${\" \".repeat(s-S(a).length)}${e.gray(o)}`).join(`\n`);process.stdout.write(`${e.gray(o)}\n${e.green(C)} ${e.reset(n)} ${e.gray(_.repeat(Math.max(s-i-1,1))+me)}\n${c}\n${e.gray(de+_.repeat(s+2)+pe)}\n`)},xe=(t=\"\")=>{process.stdout.write(`${e.gray(d)} ${e.red(t)}\n\n`)},Ie=(t=\"\")=>{process.stdout.write(`${e.gray(ue)} ${t}\n`)},Se=(t=\"\")=>{process.stdout.write(`${e.gray(o)}\n${e.gray(d)} ${t}\n\n`)},M={message:(t=\"\",{symbol:n=e.gray(o)}={})=>{const r=[`${e.gray(o)}`];if(t){const[i,...s]=t.split(`\n`);r.push(`${n} ${i}`,...s.map(c=>`${e.gray(o)} ${c}`))}process.stdout.write(`${r.join(`\n`)}\n`)},info:t=>{M.message(t,{symbol:e.blue(q)})},success:t=>{M.message(t,{symbol:e.green(D)})},step:t=>{M.message(t,{symbol:e.green(C)})},warn:t=>{M.message(t,{symbol:e.yellow(U)})},warning:t=>{M.warn(t)},error:t=>{M.message(t,{symbol:e.red(K)})}},J=`${e.gray(o)} `,x={message:async(t,{symbol:n=e.gray(o)}={})=>{process.stdout.write(`${e.gray(o)}\n${n} `);let r=3;for await(let i of t){i=i.replace(/\\n/g,`\n${J}`),i.includes(`\n`)&&(r=3+S(i.slice(i.lastIndexOf(`\n`))).length);const s=S(i).length;r+s<process.stdout.columns?(r+=s,process.stdout.write(i)):(process.stdout.write(`\n${J}${i.trimStart()}`),r=3+S(i.trimStart()).length)}process.stdout.write(`\n`)},info:t=>x.message(t,{symbol:e.blue(q)}),success:t=>x.message(t,{symbol:e.green(D)}),step:t=>x.message(t,{symbol:e.green(C)}),warn:t=>x.message(t,{symbol:e.yellow(U)}),warning:t=>x.warn(t),error:t=>x.message(t,{symbol:e.red(K)})},Y=({indicator:t=\"dots\"}={})=>{const n=V?[\"\\u25D2\",\"\\u25D0\",\"\\u25D3\",\"\\u25D1\"]:[\"\\u2022\",\"o\",\"O\",\"0\"],r=V?80:120,i=process.env.CI===\"true\";let s,c,a=!1,l=\"\",$,g=performance.now();const p=m=>{const h=m>1?\"Something went wrong\":\"Canceled\";a&&N(h,m)},v=()=>p(2),f=()=>p(1),j=()=>{process.on(\"uncaughtExceptionMonitor\",v),process.on(\"unhandledRejection\",v),process.on(\"SIGINT\",f),process.on(\"SIGTERM\",f),process.on(\"exit\",p)},E=()=>{process.removeListener(\"uncaughtExceptionMonitor\",v),process.removeListener(\"unhandledRejection\",v),process.removeListener(\"SIGINT\",f),process.removeListener(\"SIGTERM\",f),process.removeListener(\"exit\",p)},B=()=>{if($===void 0)return;i&&process.stdout.write(`\n`);const m=$.split(`\n`);process.stdout.write(oe.move(-999,m.length-1)),process.stdout.write(ae.down(m.length))},R=m=>m.replace(/\\.+$/,\"\"),O=m=>{const h=(performance.now()-m)/1e3,w=Math.floor(h/60),I=Math.floor(h%60);return w>0?`[${w}m ${I}s]`:`[${I}s]`},H=(m=\"\")=>{a=!0,s=ne(),l=R(m),g=performance.now(),process.stdout.write(`${e.gray(o)}\n`);let h=0,w=0;j(),c=setInterval(()=>{if(i&&l===$)return;B(),$=l;const I=e.magenta(n[h]);if(i)process.stdout.write(`${I} ${l}...`);else if(t===\"timer\")process.stdout.write(`${I} ${l} ${O(g)}`);else{const z=\".\".repeat(Math.floor(w)).slice(0,3);process.stdout.write(`${I} ${l}${z}`)}h=h+1<n.length?h+1:0,w=w<n.length?w+.125:0},r)},N=(m=\"\",h=0)=>{a=!1,clearInterval(c),B();const w=h===0?e.green(C):h===1?e.red(L):e.red(W);l=R(m??l),t===\"timer\"?process.stdout.write(`${w} ${l} ${O(g)}\n`):process.stdout.write(`${w} ${l}\n`),E(),s()};return{start:H,stop:N,message:(m=\"\")=>{l=R(m??l)}}},Ce=async(t,n)=>{const r={},i=Object.keys(t);for(const s of i){const c=t[s],a=await c({results:r})?.catch(l=>{throw l});if(typeof n?.onCancel==\"function\"&&ie(a)){r[s]=\"canceled\",n.onCancel({results:r});continue}r[s]=a}return r},Te=async t=>{for(const n of t){if(n.enabled===!1)continue;const r=Y();r.start(n.title);const i=await n.task(r.message);r.stop(i||n.title)}};export{xe as cancel,ye as confirm,Ce as group,be as groupMultiselect,Ie as intro,M as log,fe as multiselect,Me as note,Se as outro,ge as password,ve as select,we as selectKey,Y as spinner,x as stream,Te as tasks,he as text};\n//# sourceMappingURL=index.mjs.map\n",
|
|
10
|
+
"/* SPDX-FileCopyrightText: 2025-present Kriasoft */\n/* SPDX-License-Identifier: MIT */\n\nimport {\n cancel,\n intro,\n isCancel,\n multiselect,\n outro,\n spinner,\n text,\n} from \"@clack/prompts\";\nimport { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { findMcpConfigFiles, getMcpServers } from \"./config.js\";\nimport type { McpServer } from \"./types.js\";\n\nexport interface PromptsResult {\n configFiles: string[];\n servers: McpServer[];\n outputFile: string;\n}\n\n/**\n * Discover and select MCP config files.\n * @returns Selected absolute paths\n * @throws If no configs found\n */\nexport async function promptForConfigFiles(\n cwd: string = process.cwd(),\n): Promise<string[]> {\n const availableFiles = await findMcpConfigFiles(cwd);\n\n if (availableFiles.length === 0) {\n throw new Error(\n \"No MCP configuration files found. Create a .mcp.json file with your MCP server configuration.\",\n );\n }\n\n const configSelection = await multiselect({\n message: \"Select MCP configuration files to use:\",\n options: availableFiles.map((file) => ({\n value: file,\n label: file.replace(cwd + \"/\", \"\"),\n hint: `Found at ${file}`,\n })),\n initialValues: availableFiles, // Select all by default\n required: true,\n });\n\n if (isCancel(configSelection)) {\n cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n return configSelection as string[];\n}\n\n/**\n * Select servers from parsed configs.\n * @param configFiles Paths to parse for servers\n * @returns Deduplicated server list\n */\nexport async function promptForServers(\n configFiles: string[],\n): Promise<McpServer[]> {\n const allServers = getMcpServers(configFiles);\n\n if (allServers.length === 0) {\n throw new Error(\n \"No valid MCP servers found in configuration files. Check your .mcp.json configuration.\",\n );\n }\n\n const serverSelection = await multiselect({\n message: \"Select MCP servers to include:\",\n options: allServers.map((server) => ({\n value: server,\n label: `${server.url}`,\n hint: `Type: ${server.type}`,\n })),\n initialValues: allServers, // Select all by default\n required: true,\n });\n\n if (isCancel(serverSelection)) {\n cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n return serverSelection as McpServer[];\n}\n\n/**\n * Get output path for generated client.\n * @returns Validated TypeScript file path\n */\nexport async function promptForOutputFile(\n cwd: string = process.cwd(),\n): Promise<string> {\n // Smart default: src/ if exists, otherwise root\n const srcExists = existsSync(resolve(cwd, \"src\"));\n const defaultPath = srcExists ? \"src/mcp-client.ts\" : \"mcp-client.ts\";\n\n const outputPath = await text({\n message: \"Enter output file path:\",\n placeholder: defaultPath,\n defaultValue: defaultPath,\n validate: (value) => {\n if (!value || value.trim() === \"\") {\n return \"Output file path is required\";\n }\n if (!value.endsWith(\".ts\")) {\n return \"Output file must have .ts extension\";\n }\n return undefined;\n },\n });\n\n if (isCancel(outputPath)) {\n cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n return outputPath.trim();\n}\n\n/**\n * Interactive wizard or quick mode with defaults.\n * @param useDefaults Skip prompts with -y flag\n * @returns Complete generation config\n */\nexport async function runInteractiveSetup(\n cwd: string = process.cwd(),\n useDefaults: boolean = false,\n): Promise<PromptsResult> {\n if (useDefaults) {\n // Quick mode: all servers, default output path\n const configFiles = await findMcpConfigFiles(cwd);\n if (configFiles.length === 0) {\n throw new Error(\n \"No MCP configuration files found. Create a .mcp.json file with your MCP server configuration.\",\n );\n }\n\n const servers = getMcpServers(configFiles);\n if (servers.length === 0) {\n throw new Error(\n \"No valid MCP servers found in configuration files. Check your .mcp.json configuration.\",\n );\n }\n\n // Auto-detect src/ directory for better project structure\n const srcExists = existsSync(resolve(cwd, \"src\"));\n const outputFile = srcExists ? \"src/mcp-client.ts\" : \"mcp-client.ts\";\n\n console.log(\n `🚀 Using defaults: ${servers.length} server${servers.length !== 1 ? \"s\" : \"\"} → ${outputFile}`,\n );\n\n return {\n configFiles,\n servers,\n outputFile,\n };\n }\n intro(\"🧩 MCP Client Generator\");\n\n try {\n // Step 1: Choose which config files to use\n const configFiles = await promptForConfigFiles(cwd);\n\n // Step 2: Pick servers to generate client for\n const servers = await promptForServers(configFiles);\n\n // Step 3: Destination for generated TypeScript\n const outputFile = await promptForOutputFile(cwd);\n\n outro(\n `🎉 Configuration complete! Generating client for ${servers.length} server${servers.length !== 1 ? \"s\" : \"\"}`,\n );\n\n return {\n configFiles,\n servers,\n outputFile,\n };\n } catch (error) {\n cancel(`Error: ${(error as Error).message}`);\n process.exit(1);\n }\n}\n\n/**\n * Sequential server introspection with progress.\n * @returns Mock results (TODO: wire real McpClientManager)\n */\nexport async function introspectServers(servers: McpServer[]) {\n const s = spinner();\n s.start(\n `Introspecting ${servers.length} MCP server${servers.length !== 1 ? \"s\" : \"\"}...`,\n );\n\n const results = [];\n\n for (const [index, server] of servers.entries()) {\n s.message(\n `[${index + 1}/${servers.length}] Connecting to ${server.url}...`,\n );\n // TODO: McpClientManager.addServer()\n await new Promise((resolve) => setTimeout(resolve, 800));\n\n s.message(\n `[${index + 1}/${servers.length}] Fetching capabilities from ${server.url}...`,\n );\n // TODO: connection.client.listTools/Resources/Prompts()\n await new Promise((resolve) => setTimeout(resolve, 600));\n\n // Mock capabilities for development\n results.push({\n server,\n tools: Math.floor(Math.random() * 10) + 5,\n resources: Math.floor(Math.random() * 5),\n prompts: Math.floor(Math.random() * 3),\n });\n }\n\n const totalTools = results.reduce((sum, r) => sum + r.tools, 0);\n const totalResources = results.reduce((sum, r) => sum + r.resources, 0);\n const totalPrompts = results.reduce((sum, r) => sum + r.prompts, 0);\n\n s.stop(\n `✅ Successfully introspected ${servers.length} server${servers.length !== 1 ? \"s\" : \"\"}: ${totalTools} tools, ${totalResources} resources, ${totalPrompts} prompts`,\n );\n\n return results;\n}\n",
|
|
11
|
+
"/* SPDX-FileCopyrightText: 2025-present Kriasoft */\n/* SPDX-License-Identifier: MIT */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport type { McpServer } from \"./types.js\";\n\n/**\n * Priority-ordered paths for MCP configuration discovery.\n * .local files override non-local variants for local overrides.\n * @see https://code.visualstudio.com/docs/copilot/chat/mcp-servers\n */\nexport const MCP_CONFIG_PATHS = [\n \".mcp.local.json\",\n \".mcp.json\",\n \".cursor/mcp.local.json\",\n \".cursor/mcp.json\",\n \".vscode/mcp.local.json\",\n \".vscode/mcp.json\",\n];\n\n/**\n * Scan filesystem for MCP config files in priority order.\n * @param cwd Working directory to search from\n * @returns Absolute paths of existing config files\n */\nexport async function findMcpConfigFiles(\n cwd: string = process.cwd(),\n): Promise<string[]> {\n const foundFiles: string[] = [];\n\n for (const configPath of MCP_CONFIG_PATHS) {\n const fullPath = resolve(cwd, configPath);\n if (existsSync(fullPath)) {\n foundFiles.push(fullPath);\n }\n }\n\n return foundFiles;\n}\n\n/**\n * Parse MCP configs and extract unique server definitions.\n * @param paths Config file paths to parse (in priority order)\n * @returns Deduplicated servers (first URL occurrence wins)\n * @invariant Only returns http/sse servers, skips stdio/command servers\n * @supports Claude (.mcp.json), Cursor (.cursor/), VSCode (.vscode/) formats\n */\nexport function getMcpServers(paths: string[]): McpServer[] {\n const servers: McpServer[] = [];\n const seenUrls = new Set<string>();\n\n for (const path of paths) {\n try {\n const content = readFileSync(path, \"utf8\");\n const config = JSON.parse(content);\n\n // Claude/Cursor: mcpServers, VSCode: servers\n const isVSCodeFormat = !!config.servers;\n const serverConfigs = config.mcpServers || config.servers;\n\n if (serverConfigs && typeof serverConfigs === \"object\") {\n for (const [, serverConfig] of Object.entries(serverConfigs)) {\n if (typeof serverConfig === \"object\" && serverConfig !== null) {\n const server = serverConfig as any;\n const trimmedUrl =\n typeof server.url === \"string\" ? server.url.trim() : \"\";\n\n if (trimmedUrl && !seenUrls.has(trimmedUrl)) {\n // Infer type: explicit > format default (http)\n let serverType: \"http\" | \"sse\" | null = null;\n\n if (server.type === \"http\" || server.type === \"sse\") {\n serverType = server.type;\n } else if (server.type === \"stdio\" || server.command) {\n // stdio requires process spawning, not supported\n continue;\n } else if (!server.type) {\n // Missing type defaults to http for URL-based servers\n if (isVSCodeFormat || config.mcpServers) {\n serverType = \"http\";\n }\n }\n\n if (serverType) {\n seenUrls.add(trimmedUrl);\n servers.push({\n type: serverType,\n url: trimmedUrl,\n });\n }\n }\n }\n }\n }\n } catch (error) {\n // Invalid JSON ignored - user may have WIP configs\n continue;\n }\n }\n\n return servers;\n}\n"
|
|
12
|
+
],
|
|
13
|
+
"mappings": "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AAG,KAAG,SAAO,SAAO,KAAG,KAAG,SAAO,SAAO,KAAG,KAAG,SAAO,SAAO,KAAG,KAAG,SAAO,SAAO,KAAG,KAAG,SAAO,SAAO,KAAG,KAAG,SAAO,SAAO,KAAG,KAAG,SAAO,SAAO,KAAG,KAAG,SAAO,SAAO,KAAG,KAAG,SAAO,SAAO,KAAG,KAAG,SAAO,SAAO,KAAG,KAAG,SAAO,SAAO,KAAG,KAAG,SAAO,SAAO,KAAG,KAAG,SAAO,SAAO,KAAG,KAAG,SAAO,SAAO,KAAG,KAAG,SAAO,SAAO,KAAG,KAAG,SAAO,SAAO,KAAG,KAAG,SAAO,SAAO,KAAG,KAAG,SAAO,SAAO,KAAG,KAAG,SAAO,SAAO,KAAG,KAAG,SAAO,SAAO,KAAG,KAAG,SAAO,UAAQ,KAAG,KAAG,UAAQ,UAAQ,KAAG,KAAG,UAAQ,UAAQ,KAAG,KAAG,UAAQ,UAAQ,KAAG,KAAG,UAAQ,UAAQ,KAAG,KAAG,UAAQ,UAAQ,KAAG,KAAG,UAAQ,UAAQ,KAAG,KAAG,UAAQ,UAAQ,KAAG,KAAG,SAAO,MAAI,MAAI,KAAG,KAAG,OAAK,OAAK,KAAG,KAAG,OAAK,OAAK,KAAG,KAAG,OAAK,KAAG,OAAK,KAAG,OAAK,SAAO,KAAG,KAAG,SAAO,SAAO,KAAG,KAAG,QAAM,OAAK,KAAG,OAAK,KAAG,OAAK,OAAK,KAAG,KAAG,OAAK,KAAG,OAAK,OAAK,KAAG,KAAG,OAAK,OAAK,KAAG,KAAG,OAAK,OAAK,KAAG,KAAG,OAAK,OAAK,KAAG,KAAG,OAAK,KAAG,OAAK,KAAG,OAAK,OAAK,KAAG,KAAG,OAAK,OAAK,KAAG,KAAG,OAAK,KAAG,OAAK,OAAK,KAAG,KAAG,OAAK,OAAK,KAAG,KAAG,OAAK,KAAG,OAAK,OAAK,KAAG,KAAG,OAAK,OAAK,KAAG,KAAG,OAAK,KAAG,OAAK,KAAG,OAAK,KAAG,OAAK,KAAG,OAAK,KAAG,OAAK,KAAG,OAAK,OAAK,KAAG,KAAG,OAAK,KAAG,OAAK,OAAK,KAAG,KAAG,OAAK,KAAG,OAAK,OAAK,KAAG,KAAG,OAAK,KAAG,OAAK,OAAK,KAAG,KAAG,OAAK,KAAG,OAAK,OAAK,KAAG,KAAG,OAAK,OAAK,KAAG,KAAG,OAAK,KAAG,OAAK,KAAG,OAAK,KAAG,OAAK,KAAG,OAAK,KAAG,OAAK,KAAG,OAAK,KAAG,OAAK,KAAG,OAAK,KAAG,OAAK,KAAG,OAAK,KAAG,OAAK,KAAG,OAAK,KAAG,OAAK,OAAK,KAAG,KAAG,OAAK,KAAG,OAAK,KAAG,OAAK,OAAK,KAAG,KAAG,OAAK,KAAG,OAAK,KAAG,OAAK,OAAK,KAAG,KAAG,OAAK,OAAK,KAAG,KAAG,OAAK,OAAK,KAAG,KAAG,OAAK,OAAK,KAAG,KAAG,OAAK,OAAK,KAAG,KAAG,OAAK,KAAG,QAAM,QAAM,KAAG,KAAG,QAAM,KAAG,QAAM,KAAG,QAAM,QAAM,KAAG,KAAG,QAAM,QAAM,KAAG,KAAG,QAAM,QAAM,KAAG,KAAG,QAAM,QAAM,KAAG,KAAG,QAAM,QAAM,KAAG,KAAG,QAAM,KAAG,QAAM,QAAM,KAAG,KAAG,QAAM,KAAG,QAAM,KAAG,QAAM,KAAG,QAAM,KAAG,QAAM,KAAG,QAAM,QAAM,KAAG,KAAG,QAAM,KAAG,QAAM,KAAG,QAAM,KAAG,QAAM,KAAG,QAAM,KAAG,QAAM,KAAG,QAAM,QAAM,KAAG,KAAG,QAAM,KAAG,QAAM,KAAG,QAAM,QAAM,KAAG,KAAG,QAAM,QAAM,KAAG,KAAG,QAAM,QAAM,KAAG,KAAG,QAAM,QAAM,KAAG,KAAG,QAAM,KAAG,QAAM,QAAM,KAAG,KAAG,QAAM,QAAM,KAAG,KAAG,QAAM,KAAG,QAAM,KAAG,QAAM,KAAG,QAAM,KAAG,QAAM,QAAM,KAAG,KAAG,QAAM,QAAM,KAAG,KAAG,QAAM,KAAG,QAAM,KAAG,QAAM,KAAG,QAAM,KAAG,QAAM,KAAG,QAAM,QAAM,KAAG,KAAG,QAAM,KAAG,QAAM,KAAG,QAAM,QAAM,KAAG,KAAG,QAAM,KAAG,QAAM,QAAM,KAAG,KAAG,QAAM,QAAM,KAAG,KAAG,QAAM,KAAG,QAAM,KAAG,QAAM,KAAG,QAAM,QAAM,KAAG,KAAG,QAAM,QAAM,KAAG,KAAG,QAAM,QAAM,KAAG,KAAG,QAAM,QAAM,KAAG,KAAG,QAAM,QAAM,KAAG,KAAG,QAAM,QAAM,KAAG,KAAG,QAAM,KAAG,Q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",
|
|
14
|
+
"debugId": "C4AC6AA8FC60AED264756E2164756E21",
|
|
15
|
+
"names": []
|
|
16
|
+
}
|
package/package.json
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mcp-client-gen",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
4
4
|
"description": "Interactive CLI tool that generates type-safe TypeScript clients from MCP servers",
|
|
5
5
|
"module": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
8
|
-
"mcp-client-gen": "./dist/
|
|
8
|
+
"mcp-client-gen": "./dist/cli.js"
|
|
9
9
|
},
|
|
10
10
|
"files": [
|
|
11
11
|
"dist"
|
|
12
12
|
],
|
|
13
13
|
"keywords": [
|
|
14
14
|
"mcp",
|
|
15
|
+
"mcp-client",
|
|
15
16
|
"client",
|
|
16
17
|
"generator",
|
|
17
18
|
"sdk",
|
|
@@ -24,10 +25,17 @@
|
|
|
24
25
|
"prompts",
|
|
25
26
|
"schema",
|
|
26
27
|
"tool",
|
|
27
|
-
"type-safe"
|
|
28
|
+
"type-safe",
|
|
29
|
+
"model-context-protocol",
|
|
30
|
+
"oauth",
|
|
31
|
+
"oauth2",
|
|
32
|
+
"authentication",
|
|
33
|
+
"pkce",
|
|
34
|
+
"rfc7591"
|
|
28
35
|
],
|
|
29
36
|
"author": "Konstantin Tarkus <koistya@kriasoft.com>",
|
|
30
37
|
"license": "MIT",
|
|
38
|
+
"funding": "https://github.com/sponsors/koistya",
|
|
31
39
|
"repository": {
|
|
32
40
|
"type": "git",
|
|
33
41
|
"url": "https://github.com/kriasoft/mcp-client-gen.git"
|
|
@@ -38,6 +46,7 @@
|
|
|
38
46
|
},
|
|
39
47
|
"dependencies": {
|
|
40
48
|
"@clack/prompts": "^0.11.0",
|
|
49
|
+
"oauth-callback": "^1.2.0",
|
|
41
50
|
"ts-morph": "^26.0.0"
|
|
42
51
|
},
|
|
43
52
|
"peerDependencies": {
|
|
@@ -45,13 +54,28 @@
|
|
|
45
54
|
"typescript": "^5.9.2"
|
|
46
55
|
},
|
|
47
56
|
"devDependencies": {
|
|
48
|
-
"@modelcontextprotocol/sdk": "^1.17.
|
|
57
|
+
"@modelcontextprotocol/sdk": "^1.17.3",
|
|
49
58
|
"@types/bun": "latest",
|
|
50
59
|
"prettier": "^3.6.2",
|
|
51
60
|
"typescript": "^5.9.2"
|
|
52
61
|
},
|
|
62
|
+
"prettier": {
|
|
63
|
+
"trailingComma": "all",
|
|
64
|
+
"tabWidth": 2,
|
|
65
|
+
"semi": true,
|
|
66
|
+
"singleQuote": false,
|
|
67
|
+
"endOfLine": "lf"
|
|
68
|
+
},
|
|
53
69
|
"scripts": {
|
|
54
|
-
"build": "bun build
|
|
70
|
+
"build": "bun build src/cli.ts --outdir dist --target node --sourcemap",
|
|
71
|
+
"clean": "rm -rf dist",
|
|
72
|
+
"test": "bun test src",
|
|
73
|
+
"test:e2e": "bun test test/e2e",
|
|
74
|
+
"test:all": "bun test",
|
|
75
|
+
"typecheck": "bun tsc -p tsconfig.json --noEmit",
|
|
76
|
+
"format": "bun prettier --write .",
|
|
77
|
+
"format:check": "bun prettier --check .",
|
|
78
|
+
"validate": "bun run format:check && bun run typecheck && bun run test:all",
|
|
55
79
|
"prepublishOnly": "bun run build"
|
|
56
80
|
}
|
|
57
81
|
}
|