create-vorma 0.84.0 → 0.85.0-pre.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.js +148 -44
- package/dist/main.js.map +4 -4
- package/package.json +7 -4
package/dist/main.js
CHANGED
|
@@ -25,9 +25,9 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
25
25
|
mod
|
|
26
26
|
));
|
|
27
27
|
|
|
28
|
-
//
|
|
28
|
+
// vormaclient/create/node_modules/sisteransi/src/index.js
|
|
29
29
|
var require_src = __commonJS({
|
|
30
|
-
"
|
|
30
|
+
"vormaclient/create/node_modules/sisteransi/src/index.js"(exports, module) {
|
|
31
31
|
"use strict";
|
|
32
32
|
var ESC = "\x1B";
|
|
33
33
|
var CSI = `${ESC}[`;
|
|
@@ -81,9 +81,9 @@ var require_src = __commonJS({
|
|
|
81
81
|
}
|
|
82
82
|
});
|
|
83
83
|
|
|
84
|
-
//
|
|
84
|
+
// vormaclient/create/node_modules/picocolors/picocolors.browser.js
|
|
85
85
|
var require_picocolors_browser = __commonJS({
|
|
86
|
-
"
|
|
86
|
+
"vormaclient/create/node_modules/picocolors/picocolors.browser.js"(exports, module) {
|
|
87
87
|
"use strict";
|
|
88
88
|
var x2 = String;
|
|
89
89
|
var create = function() {
|
|
@@ -94,10 +94,10 @@ var require_picocolors_browser = __commonJS({
|
|
|
94
94
|
}
|
|
95
95
|
});
|
|
96
96
|
|
|
97
|
-
//
|
|
97
|
+
// vormaclient/create/node_modules/@clack/prompts/dist/index.mjs
|
|
98
98
|
import { stripVTControlCharacters as S2 } from "node:util";
|
|
99
99
|
|
|
100
|
-
//
|
|
100
|
+
// vormaclient/create/node_modules/@clack/core/dist/index.mjs
|
|
101
101
|
var import_sisteransi = __toESM(require_src(), 1);
|
|
102
102
|
var import_picocolors = __toESM(require_picocolors_browser(), 1);
|
|
103
103
|
import { stdin as j, stdout as M } from "node:process";
|
|
@@ -305,7 +305,7 @@ function BD(e2, u2) {
|
|
|
305
305
|
return s;
|
|
306
306
|
}
|
|
307
307
|
var AD = globalThis.process.platform.startsWith("win");
|
|
308
|
-
var S = Symbol("clack:cancel");
|
|
308
|
+
var S = /* @__PURE__ */ Symbol("clack:cancel");
|
|
309
309
|
function pD(e2) {
|
|
310
310
|
return e2 === S;
|
|
311
311
|
}
|
|
@@ -489,7 +489,7 @@ var RD = class extends x {
|
|
|
489
489
|
}
|
|
490
490
|
};
|
|
491
491
|
|
|
492
|
-
//
|
|
492
|
+
// vormaclient/create/node_modules/@clack/prompts/dist/index.mjs
|
|
493
493
|
var import_picocolors2 = __toESM(require_picocolors_browser(), 1);
|
|
494
494
|
var import_sisteransi2 = __toESM(require_src(), 1);
|
|
495
495
|
import y2 from "node:process";
|
|
@@ -695,13 +695,114 @@ var Y2 = ({ indicator: t = "dots" } = {}) => {
|
|
|
695
695
|
} };
|
|
696
696
|
};
|
|
697
697
|
|
|
698
|
-
//
|
|
699
|
-
import {
|
|
698
|
+
// vormaclient/create/main.ts
|
|
699
|
+
import { execFileSync } from "node:child_process";
|
|
700
700
|
import * as fs from "node:fs";
|
|
701
701
|
import * as os from "node:os";
|
|
702
702
|
import * as path from "node:path";
|
|
703
703
|
import { dirname as dirname2 } from "node:path";
|
|
704
704
|
import { fileURLToPath } from "node:url";
|
|
705
|
+
|
|
706
|
+
// vormaclient/create/runtime_helpers.ts
|
|
707
|
+
function parseMajorMinorPatchVersionFromRegexMatch(props) {
|
|
708
|
+
const { match, allowMissingPatch } = props;
|
|
709
|
+
if (!match) {
|
|
710
|
+
return null;
|
|
711
|
+
}
|
|
712
|
+
const majorText = match[1];
|
|
713
|
+
const minorText = match[2];
|
|
714
|
+
const patchText = match[3];
|
|
715
|
+
if (!majorText || !minorText) {
|
|
716
|
+
return null;
|
|
717
|
+
}
|
|
718
|
+
const major = Number.parseInt(majorText, 10);
|
|
719
|
+
const minor = Number.parseInt(minorText, 10);
|
|
720
|
+
const patch = Number.parseInt(
|
|
721
|
+
patchText || (allowMissingPatch ? "0" : ""),
|
|
722
|
+
10
|
|
723
|
+
);
|
|
724
|
+
if (!Number.isFinite(major) || !Number.isFinite(minor) || !Number.isFinite(patch)) {
|
|
725
|
+
return null;
|
|
726
|
+
}
|
|
727
|
+
return {
|
|
728
|
+
major,
|
|
729
|
+
minor,
|
|
730
|
+
patch
|
|
731
|
+
};
|
|
732
|
+
}
|
|
733
|
+
function parseNodeVersionOrNull(nodeVersion) {
|
|
734
|
+
const version = parseMajorMinorPatchVersionFromRegexMatch({
|
|
735
|
+
match: nodeVersion.trim().match(/^v(\d+)\.(\d+)\.(\d+)$/),
|
|
736
|
+
allowMissingPatch: false
|
|
737
|
+
});
|
|
738
|
+
if (!version) {
|
|
739
|
+
return null;
|
|
740
|
+
}
|
|
741
|
+
return version;
|
|
742
|
+
}
|
|
743
|
+
function isNodeVersionAtLeast(props) {
|
|
744
|
+
const { nodeVersion, minimumMajor, minimumMinor } = props;
|
|
745
|
+
return isMajorMinorVersionAtLeast({
|
|
746
|
+
parsedVersion: parseNodeVersionOrNull(nodeVersion),
|
|
747
|
+
minimumMajor,
|
|
748
|
+
minimumMinor
|
|
749
|
+
});
|
|
750
|
+
}
|
|
751
|
+
function parseGoVersionOrNull(goVersionOutput) {
|
|
752
|
+
const version = parseMajorMinorPatchVersionFromRegexMatch({
|
|
753
|
+
match: goVersionOutput.trim().match(/(?:^|\s)go(\d+)\.(\d+)(?:\.(\d+))?/),
|
|
754
|
+
allowMissingPatch: true
|
|
755
|
+
});
|
|
756
|
+
if (!version) {
|
|
757
|
+
return null;
|
|
758
|
+
}
|
|
759
|
+
return {
|
|
760
|
+
major: version.major,
|
|
761
|
+
minor: version.minor,
|
|
762
|
+
patch: version.patch,
|
|
763
|
+
normalizedVersion: `go${version.major}.${version.minor}.${version.patch}`
|
|
764
|
+
};
|
|
765
|
+
}
|
|
766
|
+
function isGoVersionAtLeast(props) {
|
|
767
|
+
const { goVersionOutput, minimumMajor, minimumMinor } = props;
|
|
768
|
+
return isMajorMinorVersionAtLeast({
|
|
769
|
+
parsedVersion: parseGoVersionOrNull(goVersionOutput),
|
|
770
|
+
minimumMajor,
|
|
771
|
+
minimumMinor
|
|
772
|
+
});
|
|
773
|
+
}
|
|
774
|
+
function isMajorMinorVersionAtLeast(props) {
|
|
775
|
+
const { parsedVersion, minimumMajor, minimumMinor } = props;
|
|
776
|
+
if (!parsedVersion) {
|
|
777
|
+
return false;
|
|
778
|
+
}
|
|
779
|
+
if (parsedVersion.major > minimumMajor) {
|
|
780
|
+
return true;
|
|
781
|
+
}
|
|
782
|
+
if (parsedVersion.major < minimumMajor) {
|
|
783
|
+
return false;
|
|
784
|
+
}
|
|
785
|
+
return parsedVersion.minor >= minimumMinor;
|
|
786
|
+
}
|
|
787
|
+
function buildGoModInitCommandArgs(moduleName) {
|
|
788
|
+
return ["mod", "init", moduleName];
|
|
789
|
+
}
|
|
790
|
+
function buildGoModReplaceCommandArgs(vormaPath) {
|
|
791
|
+
return [
|
|
792
|
+
"mod",
|
|
793
|
+
"edit",
|
|
794
|
+
"-replace",
|
|
795
|
+
`github.com/vormadev/vorma=${vormaPath}`
|
|
796
|
+
];
|
|
797
|
+
}
|
|
798
|
+
function buildGoGetCommandArgs(version) {
|
|
799
|
+
return ["get", `github.com/vormadev/vorma@v${version}`];
|
|
800
|
+
}
|
|
801
|
+
function buildGoRunCommandArgs(bootstrapFile) {
|
|
802
|
+
return ["run", bootstrapFile];
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
// vormaclient/create/main.ts
|
|
705
806
|
var __filename = fileURLToPath(import.meta.url);
|
|
706
807
|
var __dirname = dirname2(__filename);
|
|
707
808
|
async function main() {
|
|
@@ -710,24 +811,27 @@ async function main() {
|
|
|
710
811
|
console.log();
|
|
711
812
|
Ie("Welcome to the Vorma new app creator!");
|
|
712
813
|
let goVersion = "";
|
|
814
|
+
let parsedGoVersion = null;
|
|
713
815
|
try {
|
|
714
|
-
goVersion =
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
816
|
+
goVersion = execFileSync("go", ["version"], {
|
|
817
|
+
encoding: "utf8"
|
|
818
|
+
}).trim();
|
|
819
|
+
parsedGoVersion = parseGoVersionOrNull(goVersion);
|
|
820
|
+
if (!parsedGoVersion) {
|
|
821
|
+
xe(
|
|
822
|
+
"Go version not recognized. Please ensure Go is installed correctly. See https://go.dev/doc/install for installation instructions."
|
|
823
|
+
);
|
|
824
|
+
process.exit(1);
|
|
825
|
+
}
|
|
826
|
+
if (!isGoVersionAtLeast({
|
|
827
|
+
goVersionOutput: goVersion,
|
|
828
|
+
minimumMajor: 1,
|
|
829
|
+
minimumMinor: 24
|
|
830
|
+
})) {
|
|
831
|
+
xe(
|
|
832
|
+
"Go version 1.24 or higher is required. See https://go.dev/doc/install for installation instructions."
|
|
833
|
+
);
|
|
834
|
+
process.exit(1);
|
|
731
835
|
}
|
|
732
836
|
} catch {
|
|
733
837
|
xe(
|
|
@@ -736,18 +840,18 @@ async function main() {
|
|
|
736
840
|
process.exit(1);
|
|
737
841
|
}
|
|
738
842
|
const nodeVersion = process.version;
|
|
739
|
-
|
|
740
|
-
|
|
843
|
+
if (!isNodeVersionAtLeast({
|
|
844
|
+
nodeVersion,
|
|
845
|
+
minimumMajor: 22,
|
|
846
|
+
minimumMinor: 11
|
|
847
|
+
})) {
|
|
741
848
|
xe(
|
|
742
|
-
"Node.js version
|
|
849
|
+
"Node.js version 22.11 or higher is required. Please ensure Node.js is installed correctly."
|
|
743
850
|
);
|
|
744
851
|
process.exit(1);
|
|
745
852
|
}
|
|
746
|
-
const
|
|
747
|
-
|
|
748
|
-
xe("Node.js version 22.11 or higher is required");
|
|
749
|
-
process.exit(1);
|
|
750
|
-
}
|
|
853
|
+
const nodeMajorVersionMatch = nodeVersion.match(/^v(\d+)\./);
|
|
854
|
+
const nodeMajor = Number.parseInt(nodeMajorVersionMatch?.[1] || "", 10);
|
|
751
855
|
const createNewDir = await ye({
|
|
752
856
|
message: "Create a new directory for your Vorma app?",
|
|
753
857
|
initialValue: true
|
|
@@ -840,13 +944,14 @@ async function main() {
|
|
|
840
944
|
const s = Y2();
|
|
841
945
|
s.start("Initializing Go module");
|
|
842
946
|
try {
|
|
843
|
-
|
|
947
|
+
execFileSync("go", buildGoModInitCommandArgs(moduleName), {
|
|
948
|
+
cwd: moduleRoot
|
|
949
|
+
});
|
|
844
950
|
if (isLocalTest) {
|
|
845
951
|
const vormaPath = path.resolve(__dirname, "../../../../../");
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
);
|
|
952
|
+
execFileSync("go", buildGoModReplaceCommandArgs(vormaPath), {
|
|
953
|
+
cwd: moduleRoot
|
|
954
|
+
});
|
|
850
955
|
M2.info("Using local Vorma code for testing");
|
|
851
956
|
}
|
|
852
957
|
s.stop("Go module initialized");
|
|
@@ -935,8 +1040,7 @@ async function main() {
|
|
|
935
1040
|
console.log("\u{1F6E0}\uFE0F Preparing bootstrapper...");
|
|
936
1041
|
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "create-vorma-"));
|
|
937
1042
|
const bootstrapFile = path.join(tempDir, "main.go");
|
|
938
|
-
const
|
|
939
|
-
const goVersionString = goVersionMatch ? goVersionMatch[0] : "";
|
|
1043
|
+
const goVersionString = parsedGoVersion?.normalizedVersion || "";
|
|
940
1044
|
try {
|
|
941
1045
|
const goCode = `package main
|
|
942
1046
|
|
|
@@ -967,14 +1071,14 @@ func main() {
|
|
|
967
1071
|
const usingExistingModule = !createNewModule;
|
|
968
1072
|
const skipVormaGet = isLocalTest && usingExistingModule;
|
|
969
1073
|
if (!skipVormaGet) {
|
|
970
|
-
|
|
1074
|
+
execFileSync("go", buildGoGetCommandArgs(version), {
|
|
971
1075
|
cwd: process.cwd(),
|
|
972
1076
|
stdio: "pipe"
|
|
973
1077
|
});
|
|
974
1078
|
}
|
|
975
1079
|
console.log("\u{1F6E0}\uFE0F Running bootstrapper...");
|
|
976
1080
|
try {
|
|
977
|
-
|
|
1081
|
+
execFileSync("go", buildGoRunCommandArgs(bootstrapFile), {
|
|
978
1082
|
cwd: process.cwd(),
|
|
979
1083
|
stdio: "inherit"
|
|
980
1084
|
});
|
package/dist/main.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../node_modules/sisteransi/src/index.js", "../node_modules/picocolors/picocolors.browser.js", "../node_modules/node_modules/.pnpm/ansi-regex@6.1.0/node_modules/ansi-regex/index.js", "../node_modules/node_modules/.pnpm/strip-ansi@7.1.0/node_modules/strip-ansi/index.js", "../node_modules/node_modules/.pnpm/eastasianwidth@0.2.0/node_modules/eastasianwidth/eastasianwidth.js", "../node_modules/node_modules/.pnpm/emoji-regex@9.2.2/node_modules/emoji-regex/index.js", "../node_modules/node_modules/.pnpm/string-width@5.1.2/node_modules/string-width/index.js", "../node_modules/node_modules/.pnpm/ansi-styles@6.2.1/node_modules/ansi-styles/index.js", "../node_modules/node_modules/.pnpm/wrap-ansi@8.1.0/node_modules/wrap-ansi/index.js", "../node_modules/@clack/core/src/utils/settings.ts", "../node_modules/@clack/core/src/utils/string.ts", "../node_modules/@clack/core/src/utils/index.ts", "../node_modules/@clack/core/src/prompts/prompt.ts", "../node_modules/@clack/core/src/prompts/confirm.ts", "../node_modules/@clack/core/src/prompts/group-multiselect.ts", "../node_modules/@clack/core/src/prompts/multi-select.ts", "../node_modules/@clack/core/src/prompts/password.ts", "../node_modules/@clack/core/src/prompts/select.ts", "../node_modules/@clack/core/src/prompts/select-key.ts", "../node_modules/@clack/core/src/prompts/text.ts", "../node_modules/node_modules/.pnpm/is-unicode-supported@1.3.0/node_modules/is-unicode-supported/index.js", "../node_modules/@clack/prompts/src/index.ts", "../main.ts"],
|
|
4
|
-
"sourcesContent": ["'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", "var x=String;\nvar create=function() {return {isColorSupported:false,reset:x,bold:x,dim:x,italic:x,underline:x,inverse:x,hidden:x,strikethrough:x,black:x,red:x,green:x,yellow:x,blue:x,magenta:x,cyan:x,white:x,gray:x,bgBlack:x,bgRed:x,bgGreen:x,bgYellow:x,bgBlue:x,bgMagenta:x,bgCyan:x,bgWhite:x,blackBright:x,redBright:x,greenBright:x,yellowBright:x,blueBright:x,magentaBright:x,cyanBright:x,whiteBright:x,bgBlackBright:x,bgRedBright:x,bgGreenBright:x,bgYellowBright:x,bgBlueBright:x,bgMagentaBright:x,bgCyanBright:x,bgWhiteBright:x}};\nmodule.exports=create();\nmodule.exports.createColors = create;\n", "export default function ansiRegex({onlyFirst = false} = {}) {\n\t// Valid string terminator sequences are BEL, ESC\\, and 0x9c\n\tconst ST = '(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)';\n\tconst pattern = [\n\t\t`[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?${ST})`,\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]))',\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n", "import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n", "var eaw = {};\n\nif ('undefined' == typeof module) {\n window.eastasianwidth = eaw;\n} else {\n module.exports = eaw;\n}\n\neaw.eastAsianWidth = function(character) {\n var x = character.charCodeAt(0);\n var y = (character.length == 2) ? character.charCodeAt(1) : 0;\n var codePoint = x;\n if ((0xD800 <= x && x <= 0xDBFF) && (0xDC00 <= y && y <= 0xDFFF)) {\n x &= 0x3FF;\n y &= 0x3FF;\n codePoint = (x << 10) | y;\n codePoint += 0x10000;\n }\n\n if ((0x3000 == codePoint) ||\n (0xFF01 <= codePoint && codePoint <= 0xFF60) ||\n (0xFFE0 <= codePoint && codePoint <= 0xFFE6)) {\n return 'F';\n }\n if ((0x20A9 == codePoint) ||\n (0xFF61 <= codePoint && codePoint <= 0xFFBE) ||\n (0xFFC2 <= codePoint && codePoint <= 0xFFC7) ||\n (0xFFCA <= codePoint && codePoint <= 0xFFCF) ||\n (0xFFD2 <= codePoint && codePoint <= 0xFFD7) ||\n (0xFFDA <= codePoint && codePoint <= 0xFFDC) ||\n (0xFFE8 <= codePoint && codePoint <= 0xFFEE)) {\n return 'H';\n }\n if ((0x1100 <= codePoint && codePoint <= 0x115F) ||\n (0x11A3 <= codePoint && codePoint <= 0x11A7) ||\n (0x11FA <= codePoint && codePoint <= 0x11FF) ||\n (0x2329 <= codePoint && codePoint <= 0x232A) ||\n (0x2E80 <= codePoint && codePoint <= 0x2E99) ||\n (0x2E9B <= codePoint && codePoint <= 0x2EF3) ||\n (0x2F00 <= codePoint && codePoint <= 0x2FD5) ||\n (0x2FF0 <= codePoint && codePoint <= 0x2FFB) ||\n (0x3001 <= codePoint && codePoint <= 0x303E) ||\n (0x3041 <= codePoint && codePoint <= 0x3096) ||\n (0x3099 <= codePoint && codePoint <= 0x30FF) ||\n (0x3105 <= codePoint && codePoint <= 0x312D) ||\n (0x3131 <= codePoint && codePoint <= 0x318E) ||\n (0x3190 <= codePoint && codePoint <= 0x31BA) ||\n (0x31C0 <= codePoint && codePoint <= 0x31E3) ||\n (0x31F0 <= codePoint && codePoint <= 0x321E) ||\n (0x3220 <= codePoint && codePoint <= 0x3247) ||\n (0x3250 <= codePoint && codePoint <= 0x32FE) ||\n (0x3300 <= codePoint && codePoint <= 0x4DBF) ||\n (0x4E00 <= codePoint && codePoint <= 0xA48C) ||\n (0xA490 <= codePoint && codePoint <= 0xA4C6) ||\n (0xA960 <= codePoint && codePoint <= 0xA97C) ||\n (0xAC00 <= codePoint && codePoint <= 0xD7A3) ||\n (0xD7B0 <= codePoint && codePoint <= 0xD7C6) ||\n (0xD7CB <= codePoint && codePoint <= 0xD7FB) ||\n (0xF900 <= codePoint && codePoint <= 0xFAFF) ||\n (0xFE10 <= codePoint && codePoint <= 0xFE19) ||\n (0xFE30 <= codePoint && codePoint <= 0xFE52) ||\n (0xFE54 <= codePoint && codePoint <= 0xFE66) ||\n (0xFE68 <= codePoint && codePoint <= 0xFE6B) ||\n (0x1B000 <= codePoint && codePoint <= 0x1B001) ||\n (0x1F200 <= codePoint && codePoint <= 0x1F202) ||\n (0x1F210 <= codePoint && codePoint <= 0x1F23A) ||\n (0x1F240 <= codePoint && codePoint <= 0x1F248) ||\n (0x1F250 <= codePoint && codePoint <= 0x1F251) ||\n (0x20000 <= codePoint && codePoint <= 0x2F73F) ||\n (0x2B740 <= codePoint && codePoint <= 0x2FFFD) ||\n (0x30000 <= codePoint && codePoint <= 0x3FFFD)) {\n return 'W';\n }\n if ((0x0020 <= codePoint && codePoint <= 0x007E) ||\n (0x00A2 <= codePoint && codePoint <= 0x00A3) ||\n (0x00A5 <= codePoint && codePoint <= 0x00A6) ||\n (0x00AC == codePoint) ||\n (0x00AF == codePoint) ||\n (0x27E6 <= codePoint && codePoint <= 0x27ED) ||\n (0x2985 <= codePoint && codePoint <= 0x2986)) {\n return 'Na';\n }\n if ((0x00A1 == codePoint) ||\n (0x00A4 == codePoint) ||\n (0x00A7 <= codePoint && codePoint <= 0x00A8) ||\n (0x00AA == codePoint) ||\n (0x00AD <= codePoint && codePoint <= 0x00AE) ||\n (0x00B0 <= codePoint && codePoint <= 0x00B4) ||\n (0x00B6 <= codePoint && codePoint <= 0x00BA) ||\n (0x00BC <= codePoint && codePoint <= 0x00BF) ||\n (0x00C6 == codePoint) ||\n (0x00D0 == codePoint) ||\n (0x00D7 <= codePoint && codePoint <= 0x00D8) ||\n (0x00DE <= codePoint && codePoint <= 0x00E1) ||\n (0x00E6 == codePoint) ||\n (0x00E8 <= codePoint && codePoint <= 0x00EA) ||\n (0x00EC <= codePoint && codePoint <= 0x00ED) ||\n (0x00F0 == codePoint) ||\n (0x00F2 <= codePoint && codePoint <= 0x00F3) ||\n (0x00F7 <= codePoint && codePoint <= 0x00FA) ||\n (0x00FC == codePoint) ||\n (0x00FE == codePoint) ||\n (0x0101 == codePoint) ||\n (0x0111 == codePoint) ||\n (0x0113 == codePoint) ||\n (0x011B == codePoint) ||\n (0x0126 <= codePoint && codePoint <= 0x0127) ||\n (0x012B == codePoint) ||\n (0x0131 <= codePoint && codePoint <= 0x0133) ||\n (0x0138 == codePoint) ||\n (0x013F <= codePoint && codePoint <= 0x0142) ||\n (0x0144 == codePoint) ||\n (0x0148 <= codePoint && codePoint <= 0x014B) ||\n (0x014D == codePoint) ||\n (0x0152 <= codePoint && codePoint <= 0x0153) ||\n (0x0166 <= codePoint && codePoint <= 0x0167) ||\n (0x016B == codePoint) ||\n (0x01CE == codePoint) ||\n (0x01D0 == codePoint) ||\n (0x01D2 == codePoint) ||\n (0x01D4 == codePoint) ||\n (0x01D6 == codePoint) ||\n (0x01D8 == codePoint) ||\n (0x01DA == codePoint) ||\n (0x01DC == codePoint) ||\n (0x0251 == codePoint) ||\n (0x0261 == codePoint) ||\n (0x02C4 == codePoint) ||\n (0x02C7 == codePoint) ||\n (0x02C9 <= codePoint && codePoint <= 0x02CB) ||\n (0x02CD == codePoint) ||\n (0x02D0 == codePoint) ||\n (0x02D8 <= codePoint && codePoint <= 0x02DB) ||\n (0x02DD == codePoint) ||\n (0x02DF == codePoint) ||\n (0x0300 <= codePoint && codePoint <= 0x036F) ||\n (0x0391 <= codePoint && codePoint <= 0x03A1) ||\n (0x03A3 <= codePoint && codePoint <= 0x03A9) ||\n (0x03B1 <= codePoint && codePoint <= 0x03C1) ||\n (0x03C3 <= codePoint && codePoint <= 0x03C9) ||\n (0x0401 == codePoint) ||\n (0x0410 <= codePoint && codePoint <= 0x044F) ||\n (0x0451 == codePoint) ||\n (0x2010 == codePoint) ||\n (0x2013 <= codePoint && codePoint <= 0x2016) ||\n (0x2018 <= codePoint && codePoint <= 0x2019) ||\n (0x201C <= codePoint && codePoint <= 0x201D) ||\n (0x2020 <= codePoint && codePoint <= 0x2022) ||\n (0x2024 <= codePoint && codePoint <= 0x2027) ||\n (0x2030 == codePoint) ||\n (0x2032 <= codePoint && codePoint <= 0x2033) ||\n (0x2035 == codePoint) ||\n (0x203B == codePoint) ||\n (0x203E == codePoint) ||\n (0x2074 == codePoint) ||\n (0x207F == codePoint) ||\n (0x2081 <= codePoint && codePoint <= 0x2084) ||\n (0x20AC == codePoint) ||\n (0x2103 == codePoint) ||\n (0x2105 == codePoint) ||\n (0x2109 == codePoint) ||\n (0x2113 == codePoint) ||\n (0x2116 == codePoint) ||\n (0x2121 <= codePoint && codePoint <= 0x2122) ||\n (0x2126 == codePoint) ||\n (0x212B == codePoint) ||\n (0x2153 <= codePoint && codePoint <= 0x2154) ||\n (0x215B <= codePoint && codePoint <= 0x215E) ||\n (0x2160 <= codePoint && codePoint <= 0x216B) ||\n (0x2170 <= codePoint && codePoint <= 0x2179) ||\n (0x2189 == codePoint) ||\n (0x2190 <= codePoint && codePoint <= 0x2199) ||\n (0x21B8 <= codePoint && codePoint <= 0x21B9) ||\n (0x21D2 == codePoint) ||\n (0x21D4 == codePoint) ||\n (0x21E7 == codePoint) ||\n (0x2200 == codePoint) ||\n (0x2202 <= codePoint && codePoint <= 0x2203) ||\n (0x2207 <= codePoint && codePoint <= 0x2208) ||\n (0x220B == codePoint) ||\n (0x220F == codePoint) ||\n (0x2211 == codePoint) ||\n (0x2215 == codePoint) ||\n (0x221A == codePoint) ||\n (0x221D <= codePoint && codePoint <= 0x2220) ||\n (0x2223 == codePoint) ||\n (0x2225 == codePoint) ||\n (0x2227 <= codePoint && codePoint <= 0x222C) ||\n (0x222E == codePoint) ||\n (0x2234 <= codePoint && codePoint <= 0x2237) ||\n (0x223C <= codePoint && codePoint <= 0x223D) ||\n (0x2248 == codePoint) ||\n (0x224C == codePoint) ||\n (0x2252 == codePoint) ||\n (0x2260 <= codePoint && codePoint <= 0x2261) ||\n (0x2264 <= codePoint && codePoint <= 0x2267) ||\n (0x226A <= codePoint && codePoint <= 0x226B) ||\n (0x226E <= codePoint && codePoint <= 0x226F) ||\n (0x2282 <= codePoint && codePoint <= 0x2283) ||\n (0x2286 <= codePoint && codePoint <= 0x2287) ||\n (0x2295 == codePoint) ||\n (0x2299 == codePoint) ||\n (0x22A5 == codePoint) ||\n (0x22BF == codePoint) ||\n (0x2312 == codePoint) ||\n (0x2460 <= codePoint && codePoint <= 0x24E9) ||\n (0x24EB <= codePoint && codePoint <= 0x254B) ||\n (0x2550 <= codePoint && codePoint <= 0x2573) ||\n (0x2580 <= codePoint && codePoint <= 0x258F) ||\n (0x2592 <= codePoint && codePoint <= 0x2595) ||\n (0x25A0 <= codePoint && codePoint <= 0x25A1) ||\n (0x25A3 <= codePoint && codePoint <= 0x25A9) ||\n (0x25B2 <= codePoint && codePoint <= 0x25B3) ||\n (0x25B6 <= codePoint && codePoint <= 0x25B7) ||\n (0x25BC <= codePoint && codePoint <= 0x25BD) ||\n (0x25C0 <= codePoint && codePoint <= 0x25C1) ||\n (0x25C6 <= codePoint && codePoint <= 0x25C8) ||\n (0x25CB == codePoint) ||\n (0x25CE <= codePoint && codePoint <= 0x25D1) ||\n (0x25E2 <= codePoint && codePoint <= 0x25E5) ||\n (0x25EF == codePoint) ||\n (0x2605 <= codePoint && codePoint <= 0x2606) ||\n (0x2609 == codePoint) ||\n (0x260E <= codePoint && codePoint <= 0x260F) ||\n (0x2614 <= codePoint && codePoint <= 0x2615) ||\n (0x261C == codePoint) ||\n (0x261E == codePoint) ||\n (0x2640 == codePoint) ||\n (0x2642 == codePoint) ||\n (0x2660 <= codePoint && codePoint <= 0x2661) ||\n (0x2663 <= codePoint && codePoint <= 0x2665) ||\n (0x2667 <= codePoint && codePoint <= 0x266A) ||\n (0x266C <= codePoint && codePoint <= 0x266D) ||\n (0x266F == codePoint) ||\n (0x269E <= codePoint && codePoint <= 0x269F) ||\n (0x26BE <= codePoint && codePoint <= 0x26BF) ||\n (0x26C4 <= codePoint && codePoint <= 0x26CD) ||\n (0x26CF <= codePoint && codePoint <= 0x26E1) ||\n (0x26E3 == codePoint) ||\n (0x26E8 <= codePoint && codePoint <= 0x26FF) ||\n (0x273D == codePoint) ||\n (0x2757 == codePoint) ||\n (0x2776 <= codePoint && codePoint <= 0x277F) ||\n (0x2B55 <= codePoint && codePoint <= 0x2B59) ||\n (0x3248 <= codePoint && codePoint <= 0x324F) ||\n (0xE000 <= codePoint && codePoint <= 0xF8FF) ||\n (0xFE00 <= codePoint && codePoint <= 0xFE0F) ||\n (0xFFFD == codePoint) ||\n (0x1F100 <= codePoint && codePoint <= 0x1F10A) ||\n (0x1F110 <= codePoint && codePoint <= 0x1F12D) ||\n (0x1F130 <= codePoint && codePoint <= 0x1F169) ||\n (0x1F170 <= codePoint && codePoint <= 0x1F19A) ||\n (0xE0100 <= codePoint && codePoint <= 0xE01EF) ||\n (0xF0000 <= codePoint && codePoint <= 0xFFFFD) ||\n (0x100000 <= codePoint && codePoint <= 0x10FFFD)) {\n return 'A';\n }\n\n return 'N';\n};\n\neaw.characterLength = function(character) {\n var code = this.eastAsianWidth(character);\n if (code == 'F' || code == 'W' || code == 'A') {\n return 2;\n } else {\n return 1;\n }\n};\n\n// Split a string considering surrogate-pairs.\nfunction stringToArray(string) {\n return string.match(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[^\\uD800-\\uDFFF]/g) || [];\n}\n\neaw.length = function(string) {\n var characters = stringToArray(string);\n var len = 0;\n for (var i = 0; i < characters.length; i++) {\n len = len + this.characterLength(characters[i]);\n }\n return len;\n};\n\neaw.slice = function(text, start, end) {\n textLen = eaw.length(text)\n start = start ? start : 0;\n end = end ? end : 1;\n if (start < 0) {\n start = textLen + start;\n }\n if (end < 0) {\n end = textLen + end;\n }\n var result = '';\n var eawLen = 0;\n var chars = stringToArray(text);\n for (var i = 0; i < chars.length; i++) {\n var char = chars[i];\n var charLen = eaw.length(char);\n if (eawLen >= start - (charLen == 2 ? 1 : 0)) {\n if (eawLen + charLen <= end) {\n result += char;\n } else {\n break;\n }\n }\n eawLen += charLen;\n }\n return result;\n};\n", "\"use strict\";\n\nmodule.exports = function () {\n // https://mths.be/emoji\n 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;\n};\n", "import stripAnsi from 'strip-ansi';\nimport eastAsianWidth from 'eastasianwidth';\nimport emojiRegex from 'emoji-regex';\n\nexport default function stringWidth(string, options = {}) {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\n\t}\n\n\toptions = {\n\t\tambiguousIsNarrow: true,\n\t\t...options\n\t};\n\n\tstring = stripAnsi(string);\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tstring = string.replace(emojiRegex(), ' ');\n\n\tconst ambiguousCharacterWidth = options.ambiguousIsNarrow ? 1 : 2;\n\tlet width = 0;\n\n\tfor (const character of string) {\n\t\tconst codePoint = character.codePointAt(0);\n\n\t\t// Ignore control characters\n\t\tif (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (codePoint >= 0x300 && codePoint <= 0x36F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst code = eastAsianWidth.eastAsianWidth(character);\n\t\tswitch (code) {\n\t\t\tcase 'F':\n\t\t\tcase 'W':\n\t\t\t\twidth += 2;\n\t\t\t\tbreak;\n\t\t\tcase 'A':\n\t\t\t\twidth += ambiguousCharacterWidth;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\twidth += 1;\n\t\t}\n\t}\n\n\treturn width;\n}\n", "const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue: (red, green, blue) => {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue: hex => {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue: code => {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n", "import stringWidth from 'string-width';\nimport stripAnsi from 'strip-ansi';\nimport ansiStyles from 'ansi-styles';\n\nconst ESCAPES = new Set([\n\t'\\u001B',\n\t'\\u009B',\n]);\n\nconst END_CODE = 39;\nconst ANSI_ESCAPE_BELL = '\\u0007';\nconst ANSI_CSI = '[';\nconst ANSI_OSC = ']';\nconst ANSI_SGR_TERMINATOR = 'm';\nconst ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`;\n\nconst wrapAnsiCode = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`;\nconst wrapAnsiHyperlink = uri => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`;\n\n// Calculate the length of words split on ' ', ignoring\n// the extra characters added by ansi escape codes\nconst wordLengths = string => string.split(' ').map(character => stringWidth(character));\n\n// Wrap a long word across multiple rows\n// Ansi escape codes do not count towards length\nconst wrapWord = (rows, word, columns) => {\n\tconst characters = [...word];\n\n\tlet isInsideEscape = false;\n\tlet isInsideLinkEscape = false;\n\tlet visible = stringWidth(stripAnsi(rows[rows.length - 1]));\n\n\tfor (const [index, character] of characters.entries()) {\n\t\tconst characterLength = stringWidth(character);\n\n\t\tif (visible + characterLength <= columns) {\n\t\t\trows[rows.length - 1] += character;\n\t\t} else {\n\t\t\trows.push(character);\n\t\t\tvisible = 0;\n\t\t}\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tisInsideEscape = true;\n\t\t\tisInsideLinkEscape = characters.slice(index + 1).join('').startsWith(ANSI_ESCAPE_LINK);\n\t\t}\n\n\t\tif (isInsideEscape) {\n\t\t\tif (isInsideLinkEscape) {\n\t\t\t\tif (character === ANSI_ESCAPE_BELL) {\n\t\t\t\t\tisInsideEscape = false;\n\t\t\t\t\tisInsideLinkEscape = false;\n\t\t\t\t}\n\t\t\t} else if (character === ANSI_SGR_TERMINATOR) {\n\t\t\t\tisInsideEscape = false;\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tvisible += characterLength;\n\n\t\tif (visible === columns && index < characters.length - 1) {\n\t\t\trows.push('');\n\t\t\tvisible = 0;\n\t\t}\n\t}\n\n\t// It's possible that the last row we copy over is only\n\t// ansi escape characters, handle this edge-case\n\tif (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) {\n\t\trows[rows.length - 2] += rows.pop();\n\t}\n};\n\n// Trims spaces from a string ignoring invisible sequences\nconst stringVisibleTrimSpacesRight = string => {\n\tconst words = string.split(' ');\n\tlet last = words.length;\n\n\twhile (last > 0) {\n\t\tif (stringWidth(words[last - 1]) > 0) {\n\t\t\tbreak;\n\t\t}\n\n\t\tlast--;\n\t}\n\n\tif (last === words.length) {\n\t\treturn string;\n\t}\n\n\treturn words.slice(0, last).join(' ') + words.slice(last).join('');\n};\n\n// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode\n//\n// 'hard' will never allow a string to take up more than columns characters\n//\n// 'soft' allows long words to expand past the column length\nconst exec = (string, columns, options = {}) => {\n\tif (options.trim !== false && string.trim() === '') {\n\t\treturn '';\n\t}\n\n\tlet returnValue = '';\n\tlet escapeCode;\n\tlet escapeUrl;\n\n\tconst lengths = wordLengths(string);\n\tlet rows = [''];\n\n\tfor (const [index, word] of string.split(' ').entries()) {\n\t\tif (options.trim !== false) {\n\t\t\trows[rows.length - 1] = rows[rows.length - 1].trimStart();\n\t\t}\n\n\t\tlet rowLength = stringWidth(rows[rows.length - 1]);\n\n\t\tif (index !== 0) {\n\t\t\tif (rowLength >= columns && (options.wordWrap === false || options.trim === false)) {\n\t\t\t\t// If we start with a new word but the current row length equals the length of the columns, add a new row\n\t\t\t\trows.push('');\n\t\t\t\trowLength = 0;\n\t\t\t}\n\n\t\t\tif (rowLength > 0 || options.trim === false) {\n\t\t\t\trows[rows.length - 1] += ' ';\n\t\t\t\trowLength++;\n\t\t\t}\n\t\t}\n\n\t\t// In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns'\n\t\tif (options.hard && lengths[index] > columns) {\n\t\t\tconst remainingColumns = (columns - rowLength);\n\t\t\tconst breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns);\n\t\t\tconst breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns);\n\t\t\tif (breaksStartingNextLine < breaksStartingThisLine) {\n\t\t\t\trows.push('');\n\t\t\t}\n\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) {\n\t\t\tif (options.wordWrap === false && rowLength < columns) {\n\t\t\t\twrapWord(rows, word, columns);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\trows.push('');\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && options.wordWrap === false) {\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\trows[rows.length - 1] += word;\n\t}\n\n\tif (options.trim !== false) {\n\t\trows = rows.map(row => stringVisibleTrimSpacesRight(row));\n\t}\n\n\tconst pre = [...rows.join('\\n')];\n\n\tfor (const [index, character] of pre.entries()) {\n\t\treturnValue += character;\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tconst {groups} = new RegExp(`(?:\\\\${ANSI_CSI}(?<code>\\\\d+)m|\\\\${ANSI_ESCAPE_LINK}(?<uri>.*)${ANSI_ESCAPE_BELL})`).exec(pre.slice(index).join('')) || {groups: {}};\n\t\t\tif (groups.code !== undefined) {\n\t\t\t\tconst code = Number.parseFloat(groups.code);\n\t\t\t\tescapeCode = code === END_CODE ? undefined : code;\n\t\t\t} else if (groups.uri !== undefined) {\n\t\t\t\tescapeUrl = groups.uri.length === 0 ? undefined : groups.uri;\n\t\t\t}\n\t\t}\n\n\t\tconst code = ansiStyles.codes.get(Number(escapeCode));\n\n\t\tif (pre[index + 1] === '\\n') {\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink('');\n\t\t\t}\n\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(code);\n\t\t\t}\n\t\t} else if (character === '\\n') {\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(escapeCode);\n\t\t\t}\n\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink(escapeUrl);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn returnValue;\n};\n\n// For each newline, invoke the method separately\nexport default function wrapAnsi(string, columns, options) {\n\treturn String(string)\n\t\t.normalize()\n\t\t.replace(/\\r\\n/g, '\\n')\n\t\t.split('\\n')\n\t\t.map(line => exec(line, columns, options))\n\t\t.join('\\n');\n}\n", "const actions = ['up', 'down', 'left', 'right', 'space', 'enter', 'cancel'] as const;\nexport type Action = (typeof actions)[number];\n\n/** Global settings for Clack programs, stored in memory */\ninterface InternalClackSettings {\n\tactions: Set<Action>;\n\taliases: Map<string, Action>;\n}\n\nexport const settings: InternalClackSettings = {\n\tactions: new Set(actions),\n\taliases: new Map<string, Action>([\n\t\t// vim support\n\t\t['k', 'up'],\n\t\t['j', 'down'],\n\t\t['h', 'left'],\n\t\t['l', 'right'],\n\t\t['\\x03', 'cancel'],\n\t\t// opinionated defaults!\n\t\t['escape', 'cancel'],\n\t]),\n};\n\nexport interface ClackSettings {\n\t/**\n\t * Set custom global aliases for the default actions.\n\t * This will not overwrite existing aliases, it will only add new ones!\n\t *\n\t * @param aliases - An object that maps aliases to actions\n\t * @default { k: 'up', j: 'down', h: 'left', l: 'right', '\\x03': 'cancel', 'escape': 'cancel' }\n\t */\n\taliases: Record<string, Action>;\n}\n\nexport function updateSettings(updates: ClackSettings) {\n\tfor (const _key in updates) {\n\t\tconst key = _key as keyof ClackSettings;\n\t\tif (!Object.hasOwn(updates, key)) continue;\n\t\tconst value = updates[key];\n\n\t\tswitch (key) {\n\t\t\tcase 'aliases': {\n\t\t\t\tfor (const alias in value) {\n\t\t\t\t\tif (!Object.hasOwn(value, alias)) continue;\n\t\t\t\t\tif (!settings.aliases.has(alias)) {\n\t\t\t\t\t\tsettings.aliases.set(alias, value[alias]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Check if a key is an alias for a default action\n * @param key - The raw key which might match to an action\n * @param action - The action to match\n * @returns boolean\n */\nexport function isActionKey(key: string | Array<string | undefined>, action: Action) {\n\tif (typeof key === 'string') {\n\t\treturn settings.aliases.get(key) === action;\n\t}\n\n\tfor (const value of key) {\n\t\tif (value === undefined) continue;\n\t\tif (isActionKey(value, action)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n", "export function diffLines(a: string, b: string) {\n\tif (a === b) return;\n\n\tconst aLines = a.split('\\n');\n\tconst bLines = b.split('\\n');\n\tconst diff: number[] = [];\n\n\tfor (let i = 0; i < Math.max(aLines.length, bLines.length); i++) {\n\t\tif (aLines[i] !== bLines[i]) diff.push(i);\n\t}\n\n\treturn diff;\n}\n", "import { stdin, stdout } from 'node:process';\nimport type { Key } from 'node:readline';\nimport * as readline from 'node:readline';\nimport type { Readable } from 'node:stream';\nimport { cursor } from 'sisteransi';\nimport { isActionKey } from './settings';\n\nexport * from './string';\nexport * from './settings';\n\nconst isWindows = globalThis.process.platform.startsWith('win');\n\nexport const CANCEL_SYMBOL = Symbol('clack:cancel');\n\nexport function isCancel(value: unknown): value is symbol {\n\treturn value === CANCEL_SYMBOL;\n}\n\nexport function setRawMode(input: Readable, value: boolean) {\n\tconst i = input as typeof stdin;\n\n\tif (i.isTTY) i.setRawMode(value);\n}\n\nexport function block({\n\tinput = stdin,\n\toutput = stdout,\n\toverwrite = true,\n\thideCursor = true,\n} = {}) {\n\tconst rl = readline.createInterface({\n\t\tinput,\n\t\toutput,\n\t\tprompt: '',\n\t\ttabSize: 1,\n\t});\n\treadline.emitKeypressEvents(input, rl);\n\tif (input.isTTY) input.setRawMode(true);\n\n\tconst clear = (data: Buffer, { name, sequence }: Key) => {\n\t\tconst str = String(data);\n\t\tif (isActionKey([str, name, sequence], 'cancel')) {\n\t\t\tif (hideCursor) output.write(cursor.show);\n\t\t\tprocess.exit(0);\n\t\t\treturn;\n\t\t}\n\t\tif (!overwrite) return;\n\t\tconst dx = name === 'return' ? 0 : -1;\n\t\tconst dy = name === 'return' ? -1 : 0;\n\n\t\treadline.moveCursor(output, dx, dy, () => {\n\t\t\treadline.clearLine(output, 1, () => {\n\t\t\t\tinput.once('keypress', clear);\n\t\t\t});\n\t\t});\n\t};\n\tif (hideCursor) output.write(cursor.hide);\n\tinput.once('keypress', clear);\n\n\treturn () => {\n\t\tinput.off('keypress', clear);\n\t\tif (hideCursor) output.write(cursor.show);\n\n\t\t// Prevent Windows specific issues: https://github.com/bombshell-dev/clack/issues/176\n\t\tif (input.isTTY && !isWindows) input.setRawMode(false);\n\n\t\t// @ts-expect-error fix for https://github.com/nodejs/node/issues/31762#issuecomment-1441223907\n\t\trl.terminal = false;\n\t\trl.close();\n\t};\n}\n", "import { stdin, stdout } from 'node:process';\nimport readline, { type Key, type ReadLine } from 'node:readline';\nimport type { Readable } from 'node:stream';\nimport { Writable } from 'node:stream';\nimport { cursor, erase } from 'sisteransi';\nimport wrap from 'wrap-ansi';\n\nimport { CANCEL_SYMBOL, diffLines, isActionKey, setRawMode, settings } from '../utils';\n\nimport type { ClackEvents, ClackState } from '../types';\nimport type { Action } from '../utils';\n\nexport interface PromptOptions<Self extends Prompt> {\n\trender(this: Omit<Self, 'prompt'>): string | undefined;\n\tplaceholder?: string;\n\tinitialValue?: any;\n\tvalidate?: ((value: any) => string | Error | undefined) | undefined;\n\tinput?: Readable;\n\toutput?: Writable;\n\tdebug?: boolean;\n\tsignal?: AbortSignal;\n}\n\nexport default class Prompt {\n\tprotected input: Readable;\n\tprotected output: Writable;\n\tprivate _abortSignal?: AbortSignal;\n\n\tprivate rl: ReadLine | undefined;\n\tprivate opts: Omit<PromptOptions<Prompt>, 'render' | 'input' | 'output'>;\n\tprivate _render: (context: Omit<Prompt, 'prompt'>) => string | undefined;\n\tprivate _track = false;\n\tprivate _prevFrame = '';\n\tprivate _subscribers = new Map<string, { cb: (...args: any) => any; once?: boolean }[]>();\n\tprotected _cursor = 0;\n\n\tpublic state: ClackState = 'initial';\n\tpublic error = '';\n\tpublic value: any;\n\n\tconstructor(options: PromptOptions<Prompt>, trackValue = true) {\n\t\tconst { input = stdin, output = stdout, render, signal, ...opts } = options;\n\n\t\tthis.opts = opts;\n\t\tthis.onKeypress = this.onKeypress.bind(this);\n\t\tthis.close = this.close.bind(this);\n\t\tthis.render = this.render.bind(this);\n\t\tthis._render = render.bind(this);\n\t\tthis._track = trackValue;\n\t\tthis._abortSignal = signal;\n\n\t\tthis.input = input;\n\t\tthis.output = output;\n\t}\n\n\t/**\n\t * Unsubscribe all listeners\n\t */\n\tprotected unsubscribe() {\n\t\tthis._subscribers.clear();\n\t}\n\n\t/**\n\t * Set a subscriber with opts\n\t * @param event - The event name\n\t */\n\tprivate setSubscriber<T extends keyof ClackEvents>(\n\t\tevent: T,\n\t\topts: { cb: ClackEvents[T]; once?: boolean }\n\t) {\n\t\tconst params = this._subscribers.get(event) ?? [];\n\t\tparams.push(opts);\n\t\tthis._subscribers.set(event, params);\n\t}\n\n\t/**\n\t * Subscribe to an event\n\t * @param event - The event name\n\t * @param cb - The callback\n\t */\n\tpublic on<T extends keyof ClackEvents>(event: T, cb: ClackEvents[T]) {\n\t\tthis.setSubscriber(event, { cb });\n\t}\n\n\t/**\n\t * Subscribe to an event once\n\t * @param event - The event name\n\t * @param cb - The callback\n\t */\n\tpublic once<T extends keyof ClackEvents>(event: T, cb: ClackEvents[T]) {\n\t\tthis.setSubscriber(event, { cb, once: true });\n\t}\n\n\t/**\n\t * Emit an event with data\n\t * @param event - The event name\n\t * @param data - The data to pass to the callback\n\t */\n\tpublic emit<T extends keyof ClackEvents>(event: T, ...data: Parameters<ClackEvents[T]>) {\n\t\tconst cbs = this._subscribers.get(event) ?? [];\n\t\tconst cleanup: (() => void)[] = [];\n\n\t\tfor (const subscriber of cbs) {\n\t\t\tsubscriber.cb(...data);\n\n\t\t\tif (subscriber.once) {\n\t\t\t\tcleanup.push(() => cbs.splice(cbs.indexOf(subscriber), 1));\n\t\t\t}\n\t\t}\n\n\t\tfor (const cb of cleanup) {\n\t\t\tcb();\n\t\t}\n\t}\n\n\tpublic prompt() {\n\t\treturn new Promise<string | symbol>((resolve, reject) => {\n\t\t\tif (this._abortSignal) {\n\t\t\t\tif (this._abortSignal.aborted) {\n\t\t\t\t\tthis.state = 'cancel';\n\n\t\t\t\t\tthis.close();\n\t\t\t\t\treturn resolve(CANCEL_SYMBOL);\n\t\t\t\t}\n\n\t\t\t\tthis._abortSignal.addEventListener(\n\t\t\t\t\t'abort',\n\t\t\t\t\t() => {\n\t\t\t\t\t\tthis.state = 'cancel';\n\t\t\t\t\t\tthis.close();\n\t\t\t\t\t},\n\t\t\t\t\t{ once: true }\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst sink = new Writable();\n\t\t\tsink._write = (chunk, encoding, done) => {\n\t\t\t\tif (this._track) {\n\t\t\t\t\tthis.value = this.rl?.line.replace(/\\t/g, '');\n\t\t\t\t\tthis._cursor = this.rl?.cursor ?? 0;\n\t\t\t\t\tthis.emit('value', this.value);\n\t\t\t\t}\n\t\t\t\tdone();\n\t\t\t};\n\t\t\tthis.input.pipe(sink);\n\n\t\t\tthis.rl = readline.createInterface({\n\t\t\t\tinput: this.input,\n\t\t\t\toutput: sink,\n\t\t\t\ttabSize: 2,\n\t\t\t\tprompt: '',\n\t\t\t\tescapeCodeTimeout: 50,\n\t\t\t\tterminal: true,\n\t\t\t});\n\t\t\treadline.emitKeypressEvents(this.input, this.rl);\n\t\t\tthis.rl.prompt();\n\t\t\tif (this.opts.initialValue !== undefined && this._track) {\n\t\t\t\tthis.rl.write(this.opts.initialValue);\n\t\t\t}\n\n\t\t\tthis.input.on('keypress', this.onKeypress);\n\t\t\tsetRawMode(this.input, true);\n\t\t\tthis.output.on('resize', this.render);\n\n\t\t\tthis.render();\n\n\t\t\tthis.once('submit', () => {\n\t\t\t\tthis.output.write(cursor.show);\n\t\t\t\tthis.output.off('resize', this.render);\n\t\t\t\tsetRawMode(this.input, false);\n\t\t\t\tresolve(this.value);\n\t\t\t});\n\t\t\tthis.once('cancel', () => {\n\t\t\t\tthis.output.write(cursor.show);\n\t\t\t\tthis.output.off('resize', this.render);\n\t\t\t\tsetRawMode(this.input, false);\n\t\t\t\tresolve(CANCEL_SYMBOL);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate onKeypress(char: string, key?: Key) {\n\t\tif (this.state === 'error') {\n\t\t\tthis.state = 'active';\n\t\t}\n\t\tif (key?.name) {\n\t\t\tif (!this._track && settings.aliases.has(key.name)) {\n\t\t\t\tthis.emit('cursor', settings.aliases.get(key.name));\n\t\t\t}\n\t\t\tif (settings.actions.has(key.name as Action)) {\n\t\t\t\tthis.emit('cursor', key.name as Action);\n\t\t\t}\n\t\t}\n\t\tif (char && (char.toLowerCase() === 'y' || char.toLowerCase() === 'n')) {\n\t\t\tthis.emit('confirm', char.toLowerCase() === 'y');\n\t\t}\n\t\tif (char === '\\t' && this.opts.placeholder) {\n\t\t\tif (!this.value) {\n\t\t\t\tthis.rl?.write(this.opts.placeholder);\n\t\t\t\tthis.emit('value', this.opts.placeholder);\n\t\t\t}\n\t\t}\n\t\tif (char) {\n\t\t\tthis.emit('key', char.toLowerCase());\n\t\t}\n\n\t\tif (key?.name === 'return') {\n\t\t\tif (this.opts.validate) {\n\t\t\t\tconst problem = this.opts.validate(this.value);\n\t\t\t\tif (problem) {\n\t\t\t\t\tthis.error = problem instanceof Error ? problem.message : problem;\n\t\t\t\t\tthis.state = 'error';\n\t\t\t\t\tthis.rl?.write(this.value);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.state !== 'error') {\n\t\t\t\tthis.state = 'submit';\n\t\t\t}\n\t\t}\n\n\t\tif (isActionKey([char, key?.name, key?.sequence], 'cancel')) {\n\t\t\tthis.state = 'cancel';\n\t\t}\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\tthis.emit('finalize');\n\t\t}\n\t\tthis.render();\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\tprotected close() {\n\t\tthis.input.unpipe();\n\t\tthis.input.removeListener('keypress', this.onKeypress);\n\t\tthis.output.write('\\n');\n\t\tsetRawMode(this.input, false);\n\t\tthis.rl?.close();\n\t\tthis.rl = undefined;\n\t\tthis.emit(`${this.state}`, this.value);\n\t\tthis.unsubscribe();\n\t}\n\n\tprivate restoreCursor() {\n\t\tconst lines =\n\t\t\twrap(this._prevFrame, process.stdout.columns, { hard: true }).split('\\n').length - 1;\n\t\tthis.output.write(cursor.move(-999, lines * -1));\n\t}\n\n\tprivate render() {\n\t\tconst frame = wrap(this._render(this) ?? '', process.stdout.columns, { hard: true });\n\t\tif (frame === this._prevFrame) return;\n\n\t\tif (this.state === 'initial') {\n\t\t\tthis.output.write(cursor.hide);\n\t\t} else {\n\t\t\tconst diff = diffLines(this._prevFrame, frame);\n\t\t\tthis.restoreCursor();\n\t\t\t// If a single line has changed, only update that line\n\t\t\tif (diff && diff?.length === 1) {\n\t\t\t\tconst diffLine = diff[0];\n\t\t\t\tthis.output.write(cursor.move(0, diffLine));\n\t\t\t\tthis.output.write(erase.lines(1));\n\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\tthis.output.write(lines[diffLine]);\n\t\t\t\tthis._prevFrame = frame;\n\t\t\t\tthis.output.write(cursor.move(0, lines.length - diffLine - 1));\n\t\t\t\treturn;\n\t\t\t\t// If many lines have changed, rerender everything past the first line\n\t\t\t}\n\t\t\tif (diff && diff?.length > 1) {\n\t\t\t\tconst diffLine = diff[0];\n\t\t\t\tthis.output.write(cursor.move(0, diffLine));\n\t\t\t\tthis.output.write(erase.down());\n\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\tconst newLines = lines.slice(diffLine);\n\t\t\t\tthis.output.write(newLines.join('\\n'));\n\t\t\t\tthis._prevFrame = frame;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.output.write(erase.down());\n\t\t}\n\n\t\tthis.output.write(frame);\n\t\tif (this.state === 'initial') {\n\t\t\tthis.state = 'active';\n\t\t}\n\t\tthis._prevFrame = frame;\n\t}\n}\n", "import { cursor } from 'sisteransi';\nimport Prompt, { type PromptOptions } from './prompt';\n\ninterface ConfirmOptions extends PromptOptions<ConfirmPrompt> {\n\tactive: string;\n\tinactive: string;\n\tinitialValue?: boolean;\n}\nexport default class ConfirmPrompt extends Prompt {\n\tget cursor() {\n\t\treturn this.value ? 0 : 1;\n\t}\n\n\tprivate get _value() {\n\t\treturn this.cursor === 0;\n\t}\n\n\tconstructor(opts: ConfirmOptions) {\n\t\tsuper(opts, false);\n\t\tthis.value = !!opts.initialValue;\n\n\t\tthis.on('value', () => {\n\t\t\tthis.value = this._value;\n\t\t});\n\n\t\tthis.on('confirm', (confirm) => {\n\t\t\tthis.output.write(cursor.move(0, -1));\n\t\t\tthis.value = confirm;\n\t\t\tthis.state = 'submit';\n\t\t\tthis.close();\n\t\t});\n\n\t\tthis.on('cursor', () => {\n\t\t\tthis.value = !this.value;\n\t\t});\n\t}\n}\n", "import Prompt, { type PromptOptions } from './prompt';\n\ninterface GroupMultiSelectOptions<T extends { value: any }>\n\textends PromptOptions<GroupMultiSelectPrompt<T>> {\n\toptions: Record<string, T[]>;\n\tinitialValues?: T['value'][];\n\trequired?: boolean;\n\tcursorAt?: T['value'];\n\tselectableGroups?: boolean;\n}\nexport default class GroupMultiSelectPrompt<T extends { value: any }> extends Prompt {\n\toptions: (T & { group: string | boolean })[];\n\tcursor = 0;\n\t#selectableGroups: boolean;\n\n\tgetGroupItems(group: string): T[] {\n\t\treturn this.options.filter((o) => o.group === group);\n\t}\n\n\tisGroupSelected(group: string) {\n\t\tconst items = this.getGroupItems(group);\n\t\treturn items.every((i) => this.value.includes(i.value));\n\t}\n\n\tprivate toggleValue() {\n\t\tconst item = this.options[this.cursor];\n\t\tif (item.group === true) {\n\t\t\tconst group = item.value;\n\t\t\tconst groupedItems = this.getGroupItems(group);\n\t\t\tif (this.isGroupSelected(group)) {\n\t\t\t\tthis.value = this.value.filter(\n\t\t\t\t\t(v: string) => groupedItems.findIndex((i) => i.value === v) === -1\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.value = [...this.value, ...groupedItems.map((i) => i.value)];\n\t\t\t}\n\t\t\tthis.value = Array.from(new Set(this.value));\n\t\t} else {\n\t\t\tconst selected = this.value.includes(item.value);\n\t\t\tthis.value = selected\n\t\t\t\t? this.value.filter((v: T['value']) => v !== item.value)\n\t\t\t\t: [...this.value, item.value];\n\t\t}\n\t}\n\n\tconstructor(opts: GroupMultiSelectOptions<T>) {\n\t\tsuper(opts, false);\n\t\tconst { options } = opts;\n\t\tthis.#selectableGroups = opts.selectableGroups !== false;\n\t\tthis.options = Object.entries(options).flatMap(([key, option]) => [\n\t\t\t{ value: key, group: true, label: key },\n\t\t\t...option.map((opt) => ({ ...opt, group: key })),\n\t\t]) as any;\n\t\tthis.value = [...(opts.initialValues ?? [])];\n\t\tthis.cursor = Math.max(\n\t\t\tthis.options.findIndex(({ value }) => value === opts.cursorAt),\n\t\t\tthis.#selectableGroups ? 0 : 1\n\t\t);\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up': {\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tconst currentIsGroup = this.options[this.cursor]?.group === true;\n\t\t\t\t\tif (!this.#selectableGroups && currentIsGroup) {\n\t\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right': {\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tconst currentIsGroup = this.options[this.cursor]?.group === true;\n\t\t\t\t\tif (!this.#selectableGroups && currentIsGroup) {\n\t\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'space':\n\t\t\t\t\tthis.toggleValue();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n}\n", "import Prompt, { type PromptOptions } from './prompt';\n\ninterface MultiSelectOptions<T extends { value: any }> extends PromptOptions<MultiSelectPrompt<T>> {\n\toptions: T[];\n\tinitialValues?: T['value'][];\n\trequired?: boolean;\n\tcursorAt?: T['value'];\n}\nexport default class MultiSelectPrompt<T extends { value: any }> extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tprivate get _value() {\n\t\treturn this.options[this.cursor].value;\n\t}\n\n\tprivate toggleAll() {\n\t\tconst allSelected = this.value.length === this.options.length;\n\t\tthis.value = allSelected ? [] : this.options.map((v) => v.value);\n\t}\n\n\tprivate toggleValue() {\n\t\tconst selected = this.value.includes(this._value);\n\t\tthis.value = selected\n\t\t\t? this.value.filter((value: T['value']) => value !== this._value)\n\t\t\t: [...this.value, this._value];\n\t}\n\n\tconstructor(opts: MultiSelectOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tthis.value = [...(opts.initialValues ?? [])];\n\t\tthis.cursor = Math.max(\n\t\t\tthis.options.findIndex(({ value }) => value === opts.cursorAt),\n\t\t\t0\n\t\t);\n\t\tthis.on('key', (char) => {\n\t\t\tif (char === 'a') {\n\t\t\t\tthis.toggleAll();\n\t\t\t}\n\t\t});\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'space':\n\t\t\t\t\tthis.toggleValue();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n}\n", "import color from 'picocolors';\nimport Prompt, { type PromptOptions } from './prompt';\n\ninterface PasswordOptions extends PromptOptions<PasswordPrompt> {\n\tmask?: string;\n}\nexport default class PasswordPrompt extends Prompt {\n\tvalueWithCursor = '';\n\tprivate _mask = '•';\n\tget cursor() {\n\t\treturn this._cursor;\n\t}\n\tget masked() {\n\t\treturn this.value.replaceAll(/./g, this._mask);\n\t}\n\tconstructor({ mask, ...opts }: PasswordOptions) {\n\t\tsuper(opts);\n\t\tthis._mask = mask ?? '•';\n\n\t\tthis.on('finalize', () => {\n\t\t\tthis.valueWithCursor = this.masked;\n\t\t});\n\t\tthis.on('value', () => {\n\t\t\tif (this.cursor >= this.value.length) {\n\t\t\t\tthis.valueWithCursor = `${this.masked}${color.inverse(color.hidden('_'))}`;\n\t\t\t} else {\n\t\t\t\tconst s1 = this.masked.slice(0, this.cursor);\n\t\t\t\tconst s2 = this.masked.slice(this.cursor);\n\t\t\t\tthis.valueWithCursor = `${s1}${color.inverse(s2[0])}${s2.slice(1)}`;\n\t\t\t}\n\t\t});\n\t}\n}\n", "import Prompt, { type PromptOptions } from './prompt';\n\ninterface SelectOptions<T extends { value: any }> extends PromptOptions<SelectPrompt<T>> {\n\toptions: T[];\n\tinitialValue?: T['value'];\n}\nexport default class SelectPrompt<T extends { value: any }> extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tprivate get _value() {\n\t\treturn this.options[this.cursor];\n\t}\n\n\tprivate changeValue() {\n\t\tthis.value = this._value.value;\n\t}\n\n\tconstructor(opts: SelectOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tthis.cursor = this.options.findIndex(({ value }) => value === opts.initialValue);\n\t\tif (this.cursor === -1) this.cursor = 0;\n\t\tthis.changeValue();\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthis.changeValue();\n\t\t});\n\t}\n}\n", "import Prompt, { type PromptOptions } from './prompt';\n\ninterface SelectKeyOptions<T extends { value: any }> extends PromptOptions<SelectKeyPrompt<T>> {\n\toptions: T[];\n}\nexport default class SelectKeyPrompt<T extends { value: any }> extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tconstructor(opts: SelectKeyOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tconst keys = this.options.map(({ value: [initial] }) => initial?.toLowerCase());\n\t\tthis.cursor = Math.max(keys.indexOf(opts.initialValue), 0);\n\n\t\tthis.on('key', (key) => {\n\t\t\tif (!keys.includes(key)) return;\n\t\t\tconst value = this.options.find(({ value: [initial] }) => initial?.toLowerCase() === key);\n\t\t\tif (value) {\n\t\t\t\tthis.value = value.value;\n\t\t\t\tthis.state = 'submit';\n\t\t\t\tthis.emit('submit');\n\t\t\t}\n\t\t});\n\t}\n}\n", "import color from 'picocolors';\nimport Prompt, { type PromptOptions } from './prompt';\n\nexport interface TextOptions extends PromptOptions<TextPrompt> {\n\tplaceholder?: string;\n\tdefaultValue?: string;\n}\n\nexport default class TextPrompt extends Prompt {\n\tget valueWithCursor() {\n\t\tif (this.state === 'submit') {\n\t\t\treturn this.value;\n\t\t}\n\t\tif (this.cursor >= this.value.length) {\n\t\t\treturn `${this.value}█`;\n\t\t}\n\t\tconst s1 = this.value.slice(0, this.cursor);\n\t\tconst [s2, ...s3] = this.value.slice(this.cursor);\n\t\treturn `${s1}${color.inverse(s2)}${s3.join('')}`;\n\t}\n\tget cursor() {\n\t\treturn this._cursor;\n\t}\n\tconstructor(opts: TextOptions) {\n\t\tsuper(opts);\n\n\t\tthis.on('finalize', () => {\n\t\t\tif (!this.value) {\n\t\t\t\tthis.value = opts.defaultValue;\n\t\t\t}\n\t\t});\n\t}\n}\n", "import process from 'node:process';\n\nexport default function isUnicodeSupported() {\n\tif (process.platform !== 'win32') {\n\t\treturn process.env.TERM !== 'linux'; // Linux console (kernel)\n\t}\n\n\treturn Boolean(process.env.CI)\n\t\t|| Boolean(process.env.WT_SESSION) // Windows Terminal\n\t\t|| Boolean(process.env.TERMINUS_SUBLIME) // Terminus (<0.2.27)\n\t\t|| process.env.ConEmuTask === '{cmd::Cmder}' // ConEmu and cmder\n\t\t|| process.env.TERM_PROGRAM === 'Terminus-Sublime'\n\t\t|| process.env.TERM_PROGRAM === 'vscode'\n\t\t|| process.env.TERM === 'xterm-256color'\n\t\t|| process.env.TERM === 'alacritty'\n\t\t|| process.env.TERMINAL_EMULATOR === 'JetBrains-JediTerm';\n}\n", "import { stripVTControlCharacters as strip } from 'node:util';\nimport {\n\tConfirmPrompt,\n\tGroupMultiSelectPrompt,\n\tMultiSelectPrompt,\n\tPasswordPrompt,\n\tSelectKeyPrompt,\n\tSelectPrompt,\n\ttype State,\n\tTextPrompt,\n\tblock,\n\tisCancel,\n} from '@clack/core';\nimport isUnicodeSupported from 'is-unicode-supported';\nimport color from 'picocolors';\nimport { cursor, erase } from 'sisteransi';\n\nexport { isCancel } from '@clack/core';\nexport { updateSettings, type ClackSettings } from '@clack/core';\n\nconst unicode = isUnicodeSupported();\nconst s = (c: string, fallback: string) => (unicode ? c : fallback);\nconst S_STEP_ACTIVE = s('◆', '*');\nconst S_STEP_CANCEL = s('■', 'x');\nconst S_STEP_ERROR = s('▲', 'x');\nconst S_STEP_SUBMIT = s('◇', 'o');\n\nconst S_BAR_START = s('┌', 'T');\nconst S_BAR = s('│', '|');\nconst S_BAR_END = s('└', '—');\n\nconst S_RADIO_ACTIVE = s('●', '>');\nconst S_RADIO_INACTIVE = s('○', ' ');\nconst S_CHECKBOX_ACTIVE = s('◻', '[•]');\nconst S_CHECKBOX_SELECTED = s('◼', '[+]');\nconst S_CHECKBOX_INACTIVE = s('◻', '[ ]');\nconst S_PASSWORD_MASK = s('▪', '•');\n\nconst S_BAR_H = s('─', '-');\nconst S_CORNER_TOP_RIGHT = s('╮', '+');\nconst S_CONNECT_LEFT = s('├', '+');\nconst S_CORNER_BOTTOM_RIGHT = s('╯', '+');\n\nconst S_INFO = s('●', '•');\nconst S_SUCCESS = s('◆', '*');\nconst S_WARN = s('▲', '!');\nconst S_ERROR = s('■', 'x');\n\nconst symbol = (state: State) => {\n\tswitch (state) {\n\t\tcase 'initial':\n\t\tcase 'active':\n\t\t\treturn color.cyan(S_STEP_ACTIVE);\n\t\tcase 'cancel':\n\t\t\treturn color.red(S_STEP_CANCEL);\n\t\tcase 'error':\n\t\t\treturn color.yellow(S_STEP_ERROR);\n\t\tcase 'submit':\n\t\t\treturn color.green(S_STEP_SUBMIT);\n\t}\n};\n\ninterface LimitOptionsParams<TOption> {\n\toptions: TOption[];\n\tmaxItems: number | undefined;\n\tcursor: number;\n\tstyle: (option: TOption, active: boolean) => string;\n}\n\nconst limitOptions = <TOption>(params: LimitOptionsParams<TOption>): string[] => {\n\tconst { cursor, options, style } = params;\n\n\tconst paramMaxItems = params.maxItems ?? Number.POSITIVE_INFINITY;\n\tconst outputMaxItems = Math.max(process.stdout.rows - 4, 0);\n\t// We clamp to minimum 5 because anything less doesn't make sense UX wise\n\tconst maxItems = Math.min(outputMaxItems, Math.max(paramMaxItems, 5));\n\tlet slidingWindowLocation = 0;\n\n\tif (cursor >= slidingWindowLocation + maxItems - 3) {\n\t\tslidingWindowLocation = Math.max(Math.min(cursor - maxItems + 3, options.length - maxItems), 0);\n\t} else if (cursor < slidingWindowLocation + 2) {\n\t\tslidingWindowLocation = Math.max(cursor - 2, 0);\n\t}\n\n\tconst shouldRenderTopEllipsis = maxItems < options.length && slidingWindowLocation > 0;\n\tconst shouldRenderBottomEllipsis =\n\t\tmaxItems < options.length && slidingWindowLocation + maxItems < options.length;\n\n\treturn options\n\t\t.slice(slidingWindowLocation, slidingWindowLocation + maxItems)\n\t\t.map((option, i, arr) => {\n\t\t\tconst isTopLimit = i === 0 && shouldRenderTopEllipsis;\n\t\t\tconst isBottomLimit = i === arr.length - 1 && shouldRenderBottomEllipsis;\n\t\t\treturn isTopLimit || isBottomLimit\n\t\t\t\t? color.dim('...')\n\t\t\t\t: style(option, i + slidingWindowLocation === cursor);\n\t\t});\n};\n\nexport interface TextOptions {\n\tmessage: string;\n\tplaceholder?: string;\n\tdefaultValue?: string;\n\tinitialValue?: string;\n\tvalidate?: (value: string) => string | Error | undefined;\n}\nexport const text = (opts: TextOptions) => {\n\treturn new TextPrompt({\n\t\tvalidate: opts.validate,\n\t\tplaceholder: opts.placeholder,\n\t\tdefaultValue: opts.defaultValue,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst placeholder = opts.placeholder\n\t\t\t\t? color.inverse(opts.placeholder[0]) + color.dim(opts.placeholder.slice(1))\n\t\t\t\t: color.inverse(color.hidden('_'));\n\t\t\tconst value = !this.value ? placeholder : this.valueWithCursor;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'error':\n\t\t\t\t\treturn `${title.trim()}\\n${color.yellow(S_BAR)} ${value}\\n${color.yellow(\n\t\t\t\t\t\tS_BAR_END\n\t\t\t\t\t)} ${color.yellow(this.error)}\\n`;\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(this.value || opts.placeholder)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(\n\t\t\t\t\t\tcolor.dim(this.value ?? '')\n\t\t\t\t\t)}${this.value?.trim() ? `\\n${color.gray(S_BAR)}` : ''}`;\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${value}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<string | symbol>;\n};\n\nexport interface PasswordOptions {\n\tmessage: string;\n\tmask?: string;\n\tvalidate?: (value: string) => string | Error | undefined;\n}\nexport const password = (opts: PasswordOptions) => {\n\treturn new PasswordPrompt({\n\t\tvalidate: opts.validate,\n\t\tmask: opts.mask ?? S_PASSWORD_MASK,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst value = this.valueWithCursor;\n\t\t\tconst masked = this.masked;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'error':\n\t\t\t\t\treturn `${title.trim()}\\n${color.yellow(S_BAR)} ${masked}\\n${color.yellow(\n\t\t\t\t\t\tS_BAR_END\n\t\t\t\t\t)} ${color.yellow(this.error)}\\n`;\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(masked)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(color.dim(masked ?? ''))}${\n\t\t\t\t\t\tmasked ? `\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${value}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<string | symbol>;\n};\n\nexport interface ConfirmOptions {\n\tmessage: string;\n\tactive?: string;\n\tinactive?: string;\n\tinitialValue?: boolean;\n}\nexport const confirm = (opts: ConfirmOptions) => {\n\tconst active = opts.active ?? 'Yes';\n\tconst inactive = opts.inactive ?? 'No';\n\treturn new ConfirmPrompt({\n\t\tactive,\n\t\tinactive,\n\t\tinitialValue: opts.initialValue ?? true,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst value = this.value ? active : inactive;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(value)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(\n\t\t\t\t\t\tcolor.dim(value)\n\t\t\t\t\t)}\\n${color.gray(S_BAR)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${\n\t\t\t\t\t\tthis.value\n\t\t\t\t\t\t\t? `${color.green(S_RADIO_ACTIVE)} ${active}`\n\t\t\t\t\t\t\t: `${color.dim(S_RADIO_INACTIVE)} ${color.dim(active)}`\n\t\t\t\t\t} ${color.dim('/')} ${\n\t\t\t\t\t\t!this.value\n\t\t\t\t\t\t\t? `${color.green(S_RADIO_ACTIVE)} ${inactive}`\n\t\t\t\t\t\t\t: `${color.dim(S_RADIO_INACTIVE)} ${color.dim(inactive)}`\n\t\t\t\t\t}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<boolean | symbol>;\n};\n\ntype Primitive = Readonly<string | boolean | number>;\n\nexport type Option<Value> = Value extends Primitive\n\t? {\n\t\t\t/**\n\t\t\t * Internal data for this option.\n\t\t\t */\n\t\t\tvalue: Value;\n\t\t\t/**\n\t\t\t * The optional, user-facing text for this option.\n\t\t\t *\n\t\t\t * By default, the `value` is converted to a string.\n\t\t\t */\n\t\t\tlabel?: string;\n\t\t\t/**\n\t\t\t * An optional hint to display to the user when\n\t\t\t * this option might be selected.\n\t\t\t *\n\t\t\t * By default, no `hint` is displayed.\n\t\t\t */\n\t\t\thint?: string;\n\t\t}\n\t: {\n\t\t\t/**\n\t\t\t * Internal data for this option.\n\t\t\t */\n\t\t\tvalue: Value;\n\t\t\t/**\n\t\t\t * Required. The user-facing text for this option.\n\t\t\t */\n\t\t\tlabel: string;\n\t\t\t/**\n\t\t\t * An optional hint to display to the user when\n\t\t\t * this option might be selected.\n\t\t\t *\n\t\t\t * By default, no `hint` is displayed.\n\t\t\t */\n\t\t\thint?: string;\n\t\t};\n\nexport interface SelectOptions<Value> {\n\tmessage: string;\n\toptions: Option<Value>[];\n\tinitialValue?: Value;\n\tmaxItems?: number;\n}\n\nexport const select = <Value>(opts: SelectOptions<Value>) => {\n\tconst opt = (option: Option<Value>, state: 'inactive' | 'active' | 'selected' | 'cancelled') => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tswitch (state) {\n\t\t\tcase 'selected':\n\t\t\t\treturn `${color.dim(label)}`;\n\t\t\tcase 'active':\n\t\t\t\treturn `${color.green(S_RADIO_ACTIVE)} ${label} ${\n\t\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t\t}`;\n\t\t\tcase 'cancelled':\n\t\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t\tdefault:\n\t\t\t\treturn `${color.dim(S_RADIO_INACTIVE)} ${color.dim(label)}`;\n\t\t}\n\t};\n\n\treturn new SelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(this.options[this.cursor], 'selected')}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(\n\t\t\t\t\t\tthis.options[this.cursor],\n\t\t\t\t\t\t'cancelled'\n\t\t\t\t\t)}\\n${color.gray(S_BAR)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${limitOptions({\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: (item, active) => opt(item, active ? 'active' : 'inactive'),\n\t\t\t\t\t}).join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value | symbol>;\n};\n\nexport const selectKey = <Value extends string>(opts: SelectOptions<Value>) => {\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate: 'inactive' | 'active' | 'selected' | 'cancelled' = 'inactive'\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tif (state === 'selected') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active') {\n\t\t\treturn `${color.bgCyan(color.gray(` ${option.value} `))} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\treturn `${color.gray(color.bgWhite(color.inverse(` ${option.value} `)))} ${label} ${\n\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t}`;\n\t};\n\n\treturn new SelectKeyPrompt({\n\t\toptions: opts.options,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(\n\t\t\t\t\t\tthis.options.find((opt) => opt.value === this.value) ?? opts.options[0],\n\t\t\t\t\t\t'selected'\n\t\t\t\t\t)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(this.options[0], 'cancelled')}\\n${color.gray(\n\t\t\t\t\t\tS_BAR\n\t\t\t\t\t)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i) => opt(option, i === this.cursor ? 'active' : 'inactive'))\n\t\t\t\t\t\t.join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value | symbol>;\n};\n\nexport interface MultiSelectOptions<Value> {\n\tmessage: string;\n\toptions: Option<Value>[];\n\tinitialValues?: Value[];\n\tmaxItems?: number;\n\trequired?: boolean;\n\tcursorAt?: Value;\n}\nexport const multiselect = <Value>(opts: MultiSelectOptions<Value>) => {\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate: 'inactive' | 'active' | 'selected' | 'active-selected' | 'submitted' | 'cancelled'\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tif (state === 'active') {\n\t\t\treturn `${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'selected') {\n\t\t\treturn `${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active-selected') {\n\t\t\treturn `${color.green(S_CHECKBOX_SELECTED)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'submitted') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\treturn `${color.dim(S_CHECKBOX_INACTIVE)} ${color.dim(label)}`;\n\t};\n\n\treturn new MultiSelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValues: opts.initialValues,\n\t\trequired: opts.required ?? true,\n\t\tcursorAt: opts.cursorAt,\n\t\tvalidate(selected: Value[]) {\n\t\t\tif (this.required && selected.length === 0)\n\t\t\t\treturn `Please select at least one option.\\n${color.reset(\n\t\t\t\t\tcolor.dim(\n\t\t\t\t\t\t`Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray(\n\t\t\t\t\t\t\tcolor.bgWhite(color.inverse(' enter '))\n\t\t\t\t\t\t)} to submit`\n\t\t\t\t\t)\n\t\t\t\t)}`;\n\t\t},\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tconst styleOption = (option: Option<Value>, active: boolean) => {\n\t\t\t\tconst selected = this.value.includes(option.value);\n\t\t\t\tif (active && selected) {\n\t\t\t\t\treturn opt(option, 'active-selected');\n\t\t\t\t}\n\t\t\t\tif (selected) {\n\t\t\t\t\treturn opt(option, 'selected');\n\t\t\t\t}\n\t\t\t\treturn opt(option, active ? 'active' : 'inactive');\n\t\t\t};\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tthis.options\n\t\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t\t.map((option) => opt(option, 'submitted'))\n\t\t\t\t\t\t\t.join(color.dim(', ')) || color.dim('none')\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst label = this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'cancelled'))\n\t\t\t\t\t\t.join(color.dim(', '));\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tlabel.trim() ? `${label}\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst footer = this.error\n\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t.map((ln, i) =>\n\t\t\t\t\t\t\ti === 0 ? `${color.yellow(S_BAR_END)} ${color.yellow(ln)}` : ` ${ln}`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\treturn `${title + color.yellow(S_BAR)} ${limitOptions({\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: styleOption,\n\t\t\t\t\t}).join(`\\n${color.yellow(S_BAR)} `)}\\n${footer}\\n`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${limitOptions({\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: styleOption,\n\t\t\t\t\t}).join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value[] | symbol>;\n};\n\nexport interface GroupMultiSelectOptions<Value> {\n\tmessage: string;\n\toptions: Record<string, Option<Value>[]>;\n\tinitialValues?: Value[];\n\trequired?: boolean;\n\tcursorAt?: Value;\n\tselectableGroups?: boolean;\n}\nexport const groupMultiselect = <Value>(opts: GroupMultiSelectOptions<Value>) => {\n\tconst { selectableGroups = true } = opts;\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate:\n\t\t\t| 'inactive'\n\t\t\t| 'active'\n\t\t\t| 'selected'\n\t\t\t| 'active-selected'\n\t\t\t| 'group-active'\n\t\t\t| 'group-active-selected'\n\t\t\t| 'submitted'\n\t\t\t| 'cancelled',\n\t\toptions: Option<Value>[] = []\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tconst isItem = typeof (option as any).group === 'string';\n\t\tconst next = isItem && (options[options.indexOf(option) + 1] ?? { group: true });\n\t\tconst isLast = isItem && (next as any).group === true;\n\t\tconst prefix = isItem ? (selectableGroups ? `${isLast ? S_BAR_END : S_BAR} ` : ' ') : '';\n\n\t\tif (state === 'active') {\n\t\t\treturn `${color.dim(prefix)}${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'group-active') {\n\t\t\treturn `${prefix}${color.cyan(S_CHECKBOX_ACTIVE)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'group-active-selected') {\n\t\t\treturn `${prefix}${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'selected') {\n\t\t\tconst selectedCheckbox = isItem || selectableGroups ? color.green(S_CHECKBOX_SELECTED) : '';\n\t\t\treturn `${color.dim(prefix)}${selectedCheckbox} ${color.dim(label)} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active-selected') {\n\t\t\treturn `${color.dim(prefix)}${color.green(S_CHECKBOX_SELECTED)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'submitted') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\tconst unselectedCheckbox = isItem || selectableGroups ? color.dim(S_CHECKBOX_INACTIVE) : '';\n\t\treturn `${color.dim(prefix)}${unselectedCheckbox} ${color.dim(label)}`;\n\t};\n\n\treturn new GroupMultiSelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValues: opts.initialValues,\n\t\trequired: opts.required ?? true,\n\t\tcursorAt: opts.cursorAt,\n\t\tselectableGroups,\n\t\tvalidate(selected: Value[]) {\n\t\t\tif (this.required && selected.length === 0)\n\t\t\t\treturn `Please select at least one option.\\n${color.reset(\n\t\t\t\t\tcolor.dim(\n\t\t\t\t\t\t`Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray(\n\t\t\t\t\t\t\tcolor.bgWhite(color.inverse(' enter '))\n\t\t\t\t\t\t)} to submit`\n\t\t\t\t\t)\n\t\t\t\t)}`;\n\t\t},\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'submitted'))\n\t\t\t\t\t\t.join(color.dim(', '))}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst label = this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'cancelled'))\n\t\t\t\t\t\t.join(color.dim(', '));\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tlabel.trim() ? `${label}\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst footer = this.error\n\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t.map((ln, i) =>\n\t\t\t\t\t\t\ti === 0 ? `${color.yellow(S_BAR_END)} ${color.yellow(ln)}` : ` ${ln}`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\treturn `${title}${color.yellow(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i, options) => {\n\t\t\t\t\t\t\tconst selected =\n\t\t\t\t\t\t\t\tthis.value.includes(option.value) ||\n\t\t\t\t\t\t\t\t(option.group === true && this.isGroupSelected(`${option.value}`));\n\t\t\t\t\t\t\tconst active = i === this.cursor;\n\t\t\t\t\t\t\tconst groupActive =\n\t\t\t\t\t\t\t\t!active &&\n\t\t\t\t\t\t\t\ttypeof option.group === 'string' &&\n\t\t\t\t\t\t\t\tthis.options[this.cursor].value === option.group;\n\t\t\t\t\t\t\tif (groupActive) {\n\t\t\t\t\t\t\t\treturn opt(option, selected ? 'group-active-selected' : 'group-active', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (active && selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'active-selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn opt(option, active ? 'active' : 'inactive', options);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(`\\n${color.yellow(S_BAR)} `)}\\n${footer}\\n`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i, options) => {\n\t\t\t\t\t\t\tconst selected =\n\t\t\t\t\t\t\t\tthis.value.includes(option.value) ||\n\t\t\t\t\t\t\t\t(option.group === true && this.isGroupSelected(`${option.value}`));\n\t\t\t\t\t\t\tconst active = i === this.cursor;\n\t\t\t\t\t\t\tconst groupActive =\n\t\t\t\t\t\t\t\t!active &&\n\t\t\t\t\t\t\t\ttypeof option.group === 'string' &&\n\t\t\t\t\t\t\t\tthis.options[this.cursor].value === option.group;\n\t\t\t\t\t\t\tif (groupActive) {\n\t\t\t\t\t\t\t\treturn opt(option, selected ? 'group-active-selected' : 'group-active', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (active && selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'active-selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn opt(option, active ? 'active' : 'inactive', options);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value[] | symbol>;\n};\n\nexport const note = (message = '', title = '') => {\n\tconst lines = `\\n${message}\\n`.split('\\n');\n\tconst titleLen = strip(title).length;\n\tconst len =\n\t\tMath.max(\n\t\t\tlines.reduce((sum, ln) => {\n\t\t\t\tconst line = strip(ln);\n\t\t\t\treturn line.length > sum ? line.length : sum;\n\t\t\t}, 0),\n\t\t\ttitleLen\n\t\t) + 2;\n\tconst msg = lines\n\t\t.map(\n\t\t\t(ln) =>\n\t\t\t\t`${color.gray(S_BAR)} ${color.dim(ln)}${' '.repeat(len - strip(ln).length)}${color.gray(\n\t\t\t\t\tS_BAR\n\t\t\t\t)}`\n\t\t)\n\t\t.join('\\n');\n\tprocess.stdout.write(\n\t\t`${color.gray(S_BAR)}\\n${color.green(S_STEP_SUBMIT)} ${color.reset(title)} ${color.gray(\n\t\t\tS_BAR_H.repeat(Math.max(len - titleLen - 1, 1)) + S_CORNER_TOP_RIGHT\n\t\t)}\\n${msg}\\n${color.gray(S_CONNECT_LEFT + S_BAR_H.repeat(len + 2) + S_CORNER_BOTTOM_RIGHT)}\\n`\n\t);\n};\n\nexport const cancel = (message = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR_END)} ${color.red(message)}\\n\\n`);\n};\n\nexport const intro = (title = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR_START)} ${title}\\n`);\n};\n\nexport const outro = (message = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR)}\\n${color.gray(S_BAR_END)} ${message}\\n\\n`);\n};\n\nexport type LogMessageOptions = {\n\tsymbol?: string;\n};\nexport const log = {\n\tmessage: (message = '', { symbol = color.gray(S_BAR) }: LogMessageOptions = {}) => {\n\t\tconst parts = [`${color.gray(S_BAR)}`];\n\t\tif (message) {\n\t\t\tconst [firstLine, ...lines] = message.split('\\n');\n\t\t\tparts.push(`${symbol} ${firstLine}`, ...lines.map((ln) => `${color.gray(S_BAR)} ${ln}`));\n\t\t}\n\t\tprocess.stdout.write(`${parts.join('\\n')}\\n`);\n\t},\n\tinfo: (message: string) => {\n\t\tlog.message(message, { symbol: color.blue(S_INFO) });\n\t},\n\tsuccess: (message: string) => {\n\t\tlog.message(message, { symbol: color.green(S_SUCCESS) });\n\t},\n\tstep: (message: string) => {\n\t\tlog.message(message, { symbol: color.green(S_STEP_SUBMIT) });\n\t},\n\twarn: (message: string) => {\n\t\tlog.message(message, { symbol: color.yellow(S_WARN) });\n\t},\n\t/** alias for `log.warn()`. */\n\twarning: (message: string) => {\n\t\tlog.warn(message);\n\t},\n\terror: (message: string) => {\n\t\tlog.message(message, { symbol: color.red(S_ERROR) });\n\t},\n};\n\nconst prefix = `${color.gray(S_BAR)} `;\nexport const stream = {\n\tmessage: async (\n\t\titerable: Iterable<string> | AsyncIterable<string>,\n\t\t{ symbol = color.gray(S_BAR) }: LogMessageOptions = {}\n\t) => {\n\t\tprocess.stdout.write(`${color.gray(S_BAR)}\\n${symbol} `);\n\t\tlet lineWidth = 3;\n\t\tfor await (let chunk of iterable) {\n\t\t\tchunk = chunk.replace(/\\n/g, `\\n${prefix}`);\n\t\t\tif (chunk.includes('\\n')) {\n\t\t\t\tlineWidth = 3 + strip(chunk.slice(chunk.lastIndexOf('\\n'))).length;\n\t\t\t}\n\t\t\tconst chunkLen = strip(chunk).length;\n\t\t\tif (lineWidth + chunkLen < process.stdout.columns) {\n\t\t\t\tlineWidth += chunkLen;\n\t\t\t\tprocess.stdout.write(chunk);\n\t\t\t} else {\n\t\t\t\tprocess.stdout.write(`\\n${prefix}${chunk.trimStart()}`);\n\t\t\t\tlineWidth = 3 + strip(chunk.trimStart()).length;\n\t\t\t}\n\t\t}\n\t\tprocess.stdout.write('\\n');\n\t},\n\tinfo: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.blue(S_INFO) });\n\t},\n\tsuccess: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.green(S_SUCCESS) });\n\t},\n\tstep: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.green(S_STEP_SUBMIT) });\n\t},\n\twarn: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.yellow(S_WARN) });\n\t},\n\t/** alias for `log.warn()`. */\n\twarning: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.warn(iterable);\n\t},\n\terror: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.red(S_ERROR) });\n\t},\n};\n\nexport interface SpinnerOptions {\n\tindicator?: 'dots' | 'timer';\n}\n\nexport const spinner = ({ indicator = 'dots' }: SpinnerOptions = {}) => {\n\tconst frames = unicode ? ['◒', '◐', '◓', '◑'] : ['•', 'o', 'O', '0'];\n\tconst delay = unicode ? 80 : 120;\n\tconst isCI = process.env.CI === 'true';\n\n\tlet unblock: () => void;\n\tlet loop: NodeJS.Timeout;\n\tlet isSpinnerActive = false;\n\tlet _message = '';\n\tlet _prevMessage: string | undefined = undefined;\n\tlet _origin: number = performance.now();\n\n\tconst handleExit = (code: number) => {\n\t\tconst msg = code > 1 ? 'Something went wrong' : 'Canceled';\n\t\tif (isSpinnerActive) stop(msg, code);\n\t};\n\n\tconst errorEventHandler = () => handleExit(2);\n\tconst signalEventHandler = () => handleExit(1);\n\n\tconst registerHooks = () => {\n\t\t// Reference: https://nodejs.org/api/process.html#event-uncaughtexception\n\t\tprocess.on('uncaughtExceptionMonitor', errorEventHandler);\n\t\t// Reference: https://nodejs.org/api/process.html#event-unhandledrejection\n\t\tprocess.on('unhandledRejection', errorEventHandler);\n\t\t// Reference Signal Events: https://nodejs.org/api/process.html#signal-events\n\t\tprocess.on('SIGINT', signalEventHandler);\n\t\tprocess.on('SIGTERM', signalEventHandler);\n\t\tprocess.on('exit', handleExit);\n\t};\n\n\tconst clearHooks = () => {\n\t\tprocess.removeListener('uncaughtExceptionMonitor', errorEventHandler);\n\t\tprocess.removeListener('unhandledRejection', errorEventHandler);\n\t\tprocess.removeListener('SIGINT', signalEventHandler);\n\t\tprocess.removeListener('SIGTERM', signalEventHandler);\n\t\tprocess.removeListener('exit', handleExit);\n\t};\n\n\tconst clearPrevMessage = () => {\n\t\tif (_prevMessage === undefined) return;\n\t\tif (isCI) process.stdout.write('\\n');\n\t\tconst prevLines = _prevMessage.split('\\n');\n\t\tprocess.stdout.write(cursor.move(-999, prevLines.length - 1));\n\t\tprocess.stdout.write(erase.down(prevLines.length));\n\t};\n\n\tconst parseMessage = (msg: string): string => {\n\t\treturn msg.replace(/\\.+$/, '');\n\t};\n\n\tconst formatTimer = (origin: number): string => {\n\t\tconst duration = (performance.now() - origin) / 1000;\n\t\tconst min = Math.floor(duration / 60);\n\t\tconst secs = Math.floor(duration % 60);\n\t\treturn min > 0 ? `[${min}m ${secs}s]` : `[${secs}s]`;\n\t};\n\n\tconst start = (msg = ''): void => {\n\t\tisSpinnerActive = true;\n\t\tunblock = block();\n\t\t_message = parseMessage(msg);\n\t\t_origin = performance.now();\n\t\tprocess.stdout.write(`${color.gray(S_BAR)}\\n`);\n\t\tlet frameIndex = 0;\n\t\tlet indicatorTimer = 0;\n\t\tregisterHooks();\n\t\tloop = setInterval(() => {\n\t\t\tif (isCI && _message === _prevMessage) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tclearPrevMessage();\n\t\t\t_prevMessage = _message;\n\t\t\tconst frame = color.magenta(frames[frameIndex]);\n\n\t\t\tif (isCI) {\n\t\t\t\tprocess.stdout.write(`${frame} ${_message}...`);\n\t\t\t} else if (indicator === 'timer') {\n\t\t\t\tprocess.stdout.write(`${frame} ${_message} ${formatTimer(_origin)}`);\n\t\t\t} else {\n\t\t\t\tconst loadingDots = '.'.repeat(Math.floor(indicatorTimer)).slice(0, 3);\n\t\t\t\tprocess.stdout.write(`${frame} ${_message}${loadingDots}`);\n\t\t\t}\n\n\t\t\tframeIndex = frameIndex + 1 < frames.length ? frameIndex + 1 : 0;\n\t\t\tindicatorTimer = indicatorTimer < frames.length ? indicatorTimer + 0.125 : 0;\n\t\t}, delay);\n\t};\n\n\tconst stop = (msg = '', code = 0): void => {\n\t\tisSpinnerActive = false;\n\t\tclearInterval(loop);\n\t\tclearPrevMessage();\n\t\tconst step =\n\t\t\tcode === 0\n\t\t\t\t? color.green(S_STEP_SUBMIT)\n\t\t\t\t: code === 1\n\t\t\t\t\t? color.red(S_STEP_CANCEL)\n\t\t\t\t\t: color.red(S_STEP_ERROR);\n\t\t_message = parseMessage(msg ?? _message);\n\t\tif (indicator === 'timer') {\n\t\t\tprocess.stdout.write(`${step} ${_message} ${formatTimer(_origin)}\\n`);\n\t\t} else {\n\t\t\tprocess.stdout.write(`${step} ${_message}\\n`);\n\t\t}\n\t\tclearHooks();\n\t\tunblock();\n\t};\n\n\tconst message = (msg = ''): void => {\n\t\t_message = parseMessage(msg ?? _message);\n\t};\n\n\treturn {\n\t\tstart,\n\t\tstop,\n\t\tmessage,\n\t};\n};\n\nexport type PromptGroupAwaitedReturn<T> = {\n\t[P in keyof T]: Exclude<Awaited<T[P]>, symbol>;\n};\n\nexport interface PromptGroupOptions<T> {\n\t/**\n\t * Control how the group can be canceled\n\t * if one of the prompts is canceled.\n\t */\n\tonCancel?: (opts: { results: Prettify<Partial<PromptGroupAwaitedReturn<T>>> }) => void;\n}\n\ntype Prettify<T> = {\n\t[P in keyof T]: T[P];\n} & {};\n\nexport type PromptGroup<T> = {\n\t[P in keyof T]: (opts: {\n\t\tresults: Prettify<Partial<PromptGroupAwaitedReturn<Omit<T, P>>>>;\n\t}) => undefined | Promise<T[P] | undefined>;\n};\n\n/**\n * Define a group of prompts to be displayed\n * and return a results of objects within the group\n */\nexport const group = async <T>(\n\tprompts: PromptGroup<T>,\n\topts?: PromptGroupOptions<T>\n): Promise<Prettify<PromptGroupAwaitedReturn<T>>> => {\n\tconst results = {} as any;\n\tconst promptNames = Object.keys(prompts);\n\n\tfor (const name of promptNames) {\n\t\tconst prompt = prompts[name as keyof T];\n\t\tconst result = await prompt({ results })?.catch((e) => {\n\t\t\tthrow e;\n\t\t});\n\n\t\t// Pass the results to the onCancel function\n\t\t// so the user can decide what to do with the results\n\t\t// TODO: Switch to callback within core to avoid isCancel Fn\n\t\tif (typeof opts?.onCancel === 'function' && isCancel(result)) {\n\t\t\tresults[name] = 'canceled';\n\t\t\topts.onCancel({ results });\n\t\t\tcontinue;\n\t\t}\n\n\t\tresults[name] = result;\n\t}\n\n\treturn results;\n};\n\nexport type Task = {\n\t/**\n\t * Task title\n\t */\n\ttitle: string;\n\t/**\n\t * Task function\n\t */\n\ttask: (message: (string: string) => void) => string | Promise<string> | void | Promise<void>;\n\n\t/**\n\t * If enabled === false the task will be skipped\n\t */\n\tenabled?: boolean;\n};\n\n/**\n * Define a group of tasks to be executed\n */\nexport const tasks = async (tasks: Task[]) => {\n\tfor (const task of tasks) {\n\t\tif (task.enabled === false) continue;\n\n\t\tconst s = spinner();\n\t\ts.start(task.title);\n\t\tconst result = await task.task(s.message);\n\t\ts.stop(result || task.title);\n\t}\n};\n", "#!/usr/bin/env node\n\nimport {\n\tcancel,\n\tconfirm,\n\tintro,\n\tisCancel,\n\tlog,\n\tselect,\n\tspinner,\n\ttext,\n} from \"@clack/prompts\";\nimport { execSync } from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport { dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nasync function main() {\n\tconst args = process.argv.slice(2);\n\tconst isLocalTest = args.includes(\"--local-test\");\n\n\tconsole.log();\n\tintro(\"Welcome to the Vorma new app creator!\");\n\n\t// Check Go installation\n\tlet goVersion = \"\";\n\ttry {\n\t\tgoVersion = execSync(\"go version\", { encoding: \"utf8\" }).trim();\n\t\tconst versionMatch = goVersion.match(/go(\\d+)\\.(\\d+)/);\n\t\tif (versionMatch) {\n\t\t\tif (!versionMatch[1] || !versionMatch[2]) {\n\t\t\t\tcancel(\n\t\t\t\t\t\"Go version not recognized. Please ensure Go is installed correctly. See https://go.dev/doc/install for installation instructions.\",\n\t\t\t\t);\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t\tconst major = parseInt(versionMatch[1]);\n\t\t\tconst minor = parseInt(versionMatch[2]);\n\t\t\tif (major < 1 || (major === 1 && minor < 24)) {\n\t\t\t\tcancel(\n\t\t\t\t\t\"Go version 1.24 or higher is required. See https://go.dev/doc/install for installation instructions.\",\n\t\t\t\t);\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t}\n\t} catch {\n\t\tcancel(\n\t\t\t\"Go is not installed. See https://go.dev/doc/install for installation instructions.\",\n\t\t);\n\t\tprocess.exit(1);\n\t}\n\n\t// Check Node version\n\tconst nodeVersion = process.version;\n\tconst firstPart = nodeVersion.split(\".\")[0];\n\tif (!firstPart || firstPart.length < 2 || !firstPart.startsWith(\"v\")) {\n\t\tcancel(\n\t\t\t\"Node.js version not recognized. Please ensure Node.js is installed correctly.\",\n\t\t);\n\t\tprocess.exit(1);\n\t}\n\tconst nodeMajor = parseInt(firstPart.substring(1));\n\tif (nodeMajor < 22) {\n\t\tcancel(\"Node.js version 22.11 or higher is required\");\n\t\tprocess.exit(1);\n\t}\n\n\t// Option to create a new directory at start if not already in desired location\n\tconst createNewDir = await confirm({\n\t\tmessage: \"Create a new directory for your Vorma app?\",\n\t\tinitialValue: true,\n\t});\n\n\tif (isCancel(createNewDir)) {\n\t\tcancel(\"Operation cancelled\");\n\t\tprocess.exit(0);\n\t}\n\n\tlet targetDir = process.cwd();\n\n\tif (createNewDir) {\n\t\tconst dirName = await text({\n\t\t\tmessage: \"Enter directory name:\",\n\t\t\tvalidate: (value) => {\n\t\t\t\tif (!value || value.trim() === \"\")\n\t\t\t\t\treturn \"Directory name is required\";\n\t\t\t\t// Check for invalid characters in directory name\n\t\t\t\tif (!/^[a-zA-Z0-9-_]+$/.test(value)) {\n\t\t\t\t\treturn \"Directory name can only contain letters, numbers, hyphens, and underscores\";\n\t\t\t\t}\n\t\t\t\t// Check if directory already exists\n\t\t\t\tconst proposedPath = path.join(process.cwd(), value);\n\t\t\t\tif (fs.existsSync(proposedPath)) {\n\t\t\t\t\treturn `Directory \"${value}\" already exists`;\n\t\t\t\t}\n\t\t\t\treturn undefined;\n\t\t\t},\n\t\t});\n\n\t\tif (isCancel(dirName)) {\n\t\t\tcancel(\"Operation cancelled\");\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\t// Create the directory and change to it\n\t\ttargetDir = path.join(process.cwd(), dirName as string);\n\t\tfs.mkdirSync(targetDir, { recursive: true });\n\t\tprocess.chdir(targetDir);\n\t\tlog.success(`Created directory: ${dirName}`);\n\t}\n\n\t// Find go.mod and determine import path\n\tlet goModPath: string | null = null;\n\tlet moduleRoot: string | null = null;\n\tlet moduleName: string | null = null;\n\tlet createNewModule = false;\n\n\t// Search for go.mod\n\tlet currentDir = process.cwd();\n\twhile (currentDir !== path.dirname(currentDir)) {\n\t\tconst modPath = path.join(currentDir, \"go.mod\");\n\t\tif (fs.existsSync(modPath)) {\n\t\t\tgoModPath = modPath;\n\t\t\tmoduleRoot = currentDir;\n\t\t\tbreak;\n\t\t}\n\t\tcurrentDir = path.dirname(currentDir);\n\t}\n\n\t// Parse module name if found\n\tif (goModPath) {\n\t\tconst modContent = fs.readFileSync(goModPath, \"utf8\");\n\t\tconst moduleMatch = modContent.match(/^module\\s+(.+)$/m);\n\t\tif (moduleMatch && moduleMatch[1]) {\n\t\t\tmoduleName = moduleMatch[1].trim();\n\t\t}\n\n\t\t// When module is found, give option to use it or create nested module\n\t\tconst moduleChoice = await select({\n\t\t\tmessage: `Found parent Go module: ${moduleName}`,\n\t\t\toptions: [\n\t\t\t\t{ value: \"new\", label: \"Create new go.mod\" },\n\t\t\t\t{ value: \"use\", label: \"Use parent go.mod\" },\n\t\t\t],\n\t\t});\n\n\t\tif (isCancel(moduleChoice)) {\n\t\t\tcancel(\"Operation cancelled\");\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tif (moduleChoice === \"new\") {\n\t\t\tcreateNewModule = true;\n\t\t\t// Reset module info since we're creating a new one\n\t\t\tgoModPath = null;\n\t\t\tmoduleRoot = null;\n\t\t\tmoduleName = null;\n\t\t}\n\t} else {\n\t\t// No module found, we need to create one\n\t\tcreateNewModule = true;\n\t}\n\n\t// Handle go.mod initialization if needed\n\tif (createNewModule) {\n\t\tconst modNameInput = await text({\n\t\t\tmessage:\n\t\t\t\t'Enter module name (e.g., \"myapp\" or \"github.com/user/myapp\"):',\n\t\t\tvalidate: (value) => {\n\t\t\t\tif (!value || value.trim() === \"\")\n\t\t\t\t\treturn \"Module name is required\";\n\t\t\t\treturn undefined;\n\t\t\t},\n\t\t});\n\n\t\tif (isCancel(modNameInput)) {\n\t\t\tcancel(\"Operation cancelled\");\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tmoduleName = modNameInput as string;\n\t\tmoduleRoot = process.cwd();\n\n\t\tconst s = spinner();\n\t\ts.start(\"Initializing Go module\");\n\t\ttry {\n\t\t\texecSync(`go mod init ${moduleName}`, { cwd: moduleRoot });\n\t\t\tif (isLocalTest) {\n\t\t\t\tconst vormaPath = path.resolve(__dirname, \"../../../../../\");\n\t\t\t\texecSync(\n\t\t\t\t\t`go mod edit -replace github.com/vormadev/vorma=${vormaPath}`,\n\t\t\t\t\t{ cwd: moduleRoot },\n\t\t\t\t);\n\t\t\t\tlog.info(\"Using local Vorma code for testing\");\n\t\t\t}\n\t\t\ts.stop(\"Go module initialized\");\n\t\t} catch (error) {\n\t\t\ts.stop(\"Failed to initialize module\");\n\t\t\tcancel(`Error: ${error}`);\n\t\t\tprocess.exit(1);\n\t\t}\n\t}\n\n\t// Check for underscore directories from module root to current directory\n\tconst pathFromModuleRoot = moduleRoot\n\t\t? path.relative(moduleRoot, process.cwd())\n\t\t: \"\";\n\tconst pathSegments = pathFromModuleRoot\n\t\t.split(path.sep)\n\t\t.filter((seg) => seg.length > 0);\n\tconst underscoreSegments = pathSegments.filter((seg) =>\n\t\tseg.startsWith(\"_\"),\n\t);\n\tif (underscoreSegments.length > 0) {\n\t\tcancel(\n\t\t\t`Cannot create Vorma app in a path containing directories that start with underscores:\\n ${underscoreSegments.join(\", \")}\\n` +\n\t\t\t\t` Go ignores directories starting with underscores, which will cause build issues.`,\n\t\t);\n\t\tprocess.exit(1);\n\t}\n\n\t// Calculate import path automatically\n\tlet importPath = moduleName!;\n\tif (moduleRoot !== process.cwd()) {\n\t\tconst relativePath = path.relative(moduleRoot!, process.cwd());\n\t\timportPath = path.posix.join(\n\t\t\tmoduleName!,\n\t\t\t...relativePath.split(path.sep),\n\t\t);\n\t}\n\n\t// Collect options\n\tconst uiVariant = await select({\n\t\tmessage: \"Choose frontend UI library:\",\n\t\toptions: [\n\t\t\t{ value: \"react\", label: \"React\" },\n\t\t\t{ value: \"preact\", label: \"Preact\" },\n\t\t\t{ value: \"solid\", label: \"Solid\" },\n\t\t],\n\t});\n\n\tif (isCancel(uiVariant)) {\n\t\tcancel(\"Operation cancelled\");\n\t\tprocess.exit(0);\n\t}\n\n\tconst packageManager = (await select({\n\t\tmessage: \"Choose JS package manager:\",\n\t\toptions: [\n\t\t\t{ value: \"npm\", label: \"npm\" },\n\t\t\t{ value: \"pnpm\", label: \"pnpm\" },\n\t\t\t{ value: \"yarn\", label: \"yarn\" },\n\t\t\t{ value: \"bun\", label: \"bun\" },\n\t\t],\n\t})) as string;\n\n\tif (isCancel(packageManager)) {\n\t\tcancel(\"Operation cancelled\");\n\t\tprocess.exit(0);\n\t}\n\n\tconst deploymentTarget = await select({\n\t\tmessage: \"Choose deployment target:\",\n\t\toptions: [\n\t\t\t{\n\t\t\t\tvalue: \"docker\",\n\t\t\t\tlabel: \"Docker\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: \"vercel\",\n\t\t\t\tlabel: \"Vercel\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: \"none\",\n\t\t\t\tlabel: \"None (I'll figure it out myself)\",\n\t\t\t},\n\t\t],\n\t});\n\n\tif (isCancel(deploymentTarget)) {\n\t\tcancel(\"Operation cancelled\");\n\t\tprocess.exit(0);\n\t}\n\n\t// Ask about Tailwind CSS\n\tconst includeTailwind = await confirm({\n\t\tmessage: \"Include Tailwind CSS?\",\n\t\tinitialValue: false,\n\t});\n\n\tif (isCancel(includeTailwind)) {\n\t\tcancel(\"Operation cancelled\");\n\t\tprocess.exit(0);\n\t}\n\n\tconsole.log();\n\tconsole.log(\"\uD83D\uDEE0\uFE0F Preparing bootstrapper...\");\n\n\t// Create temporary directory\n\tconst tempDir = fs.mkdtempSync(path.join(os.tmpdir(), \"create-vorma-\"));\n\tconst bootstrapFile = path.join(tempDir, \"main.go\");\n\n\t// Extract Go version string (e.g., \"go1.24.0\")\n\tconst goVersionMatch = goVersion.match(/go\\d+\\.\\d+\\.\\d+/);\n\tconst goVersionString = goVersionMatch ? goVersionMatch[0] : \"\";\n\n\ttry {\n\t\t// Write bootstrap Go file\n\t\tconst goCode = `package main\n\nimport \"github.com/vormadev/vorma/bootstrap\"\n\nfunc main() {\n\tbootstrap.Init(bootstrap.Options{\n\t\tGoImportBase: \"${importPath}\",\n\t\tUIVariant: \"${uiVariant}\",\n\t\tJSPackageManager: \"${packageManager}\",\n\t\tDeploymentTarget: \"${deploymentTarget}\",\n\t\tIncludeTailwind: ${includeTailwind},\n\t\tNodeMajorVersion: \"${nodeMajor}\",\n\t\tGoVersion: \"${goVersionString}\",\n\t\t${createNewDir ? `CreatedInDir: \"${path.basename(targetDir)}\",` : \"\"}\n\t\tModuleRoot: \"${moduleRoot || process.cwd()}\",\n\t\tCurrentDir: \"${process.cwd()}\",\n\t\tHasParentModule: ${moduleRoot !== null && moduleRoot !== process.cwd()},\n\t})\n}\n`;\n\t\tfs.writeFileSync(bootstrapFile, goCode);\n\n\t\t// Install Vorma dependency\n\t\tconst packageJsonPath = path.join(__dirname, \"../package.json\");\n\t\tconst packageJson = JSON.parse(\n\t\t\tfs.readFileSync(packageJsonPath, \"utf8\"),\n\t\t);\n\t\tconst version = packageJson.version;\n\t\tconst usingExistingModule = !createNewModule;\n\t\tconst skipVormaGet = isLocalTest && usingExistingModule;\n\t\tif (!skipVormaGet) {\n\t\t\texecSync(`go get github.com/vormadev/vorma@v${version}`, {\n\t\t\t\tcwd: process.cwd(),\n\t\t\t\tstdio: \"pipe\",\n\t\t\t});\n\t\t}\n\n\t\t// Run bootstrap\n\t\tconsole.log(\"\uD83D\uDEE0\uFE0F Running bootstrapper...\");\n\t\ttry {\n\t\t\texecSync(`go run ${bootstrapFile}`, {\n\t\t\t\tcwd: process.cwd(),\n\t\t\t\tstdio: \"inherit\",\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Failed to create app\");\n\t\t\tthrow error;\n\t\t}\n\t} catch (error) {\n\t\tcancel(`Error: ${error}`);\n\t\tprocess.exit(1);\n\t} finally {\n\t\t// Clean up temp directory\n\t\ttry {\n\t\t\tfs.rmSync(tempDir, { recursive: true, force: true });\n\t\t} catch {\n\t\t\t// Ignore cleanup errors\n\t\t}\n\t}\n}\n\nmain().catch((error) => {\n\tconsole.error(\"Unexpected error:\", error);\n\tprocess.exit(1);\n});\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["x", "y", "x", "ansiRegex", "onlyFirst", "pattern", "regex", "stripAnsi", "string", "e", "eaw", "module", "character", "x", "y", "codePoint", "code", "stringToArray", "characters", "len", "i", "text", "start", "end", "result", "eawLen", "chars", "char", "charLen", "emojiRegex", "stringWidth", "options", "ambiguousCharacterWidth", "width", "eastAsianWidth", "ANSI_BACKGROUND_OFFSET", "wrapAnsi16", "offset", "wrapAnsi256", "wrapAnsi16m", "red", "green", "blue", "styles", "foregroundColorNames", "backgroundColorNames", "assembleStyles", "codes", "groupName", "group", "styleName", "style", "hex", "matches", "colorString", "integer", "remainder", "value", "ansiStyles", "ESCAPES", "END_CODE", "ANSI_ESCAPE_BELL", "ANSI_CSI", "ANSI_OSC", "ANSI_SGR_TERMINATOR", "ANSI_ESCAPE_LINK", "wrapAnsiCode", "wrapAnsiHyperlink", "uri", "wordLengths", "wrapWord", "rows", "word", "columns", "isInsideEscape", "isInsideLinkEscape", "visible", "index", "characterLength", "stringVisibleTrimSpacesRight", "words", "last", "exec", "returnValue", "escapeCode", "escapeUrl", "lengths", "rowLength", "remainingColumns", "breaksStartingThisLine", "row", "pre", "groups", "wrapAnsi", "line", "actions", "settings", "isActionKey", "key", "action", "settings", "value", "diffLines", "a", "b", "aLines", "bLines", "diff", "i", "isWindows", "CANCEL_SYMBOL", "isCancel", "setRawMode", "input", "block", "stdin", "output", "stdout", "overwrite", "hideCursor", "rl", "readline", "clear", "data", "name", "sequence", "str", "cursor", "dx", "dy", "v", "t", "e", "s", "Prompt", "options", "trackValue", "__publicField", "render", "signal", "opts", "event", "params", "cb", "cbs", "cleanup", "subscriber", "resolve", "reject", "sink", "Writable", "chunk", "encoding", "done", "char", "problem", "lines", "wrap", "frame", "diffLine", "erase", "newLines", "ConfirmPrompt", "confirm", "_selectableGroups", "_selectableGroups", "e", "u", "SelectPrompt", "Prompt", "opts", "__publicField", "value", "key", "TextPrompt", "Prompt", "s1", "s2", "s3", "color", "opts", "isUnicodeSupported", "process", "unicode", "s", "c", "fallback", "S_STEP_ACTIVE", "S_STEP_CANCEL", "S_STEP_ERROR", "S_STEP_SUBMIT", "S_BAR_START", "S_BAR", "S_BAR_END", "S_RADIO_ACTIVE", "S_RADIO_INACTIVE", "S_CHECKBOX_ACTIVE", "S_CHECKBOX_SELECTED", "S_CHECKBOX_INACTIVE", "S_PASSWORD_MASK", "S_BAR_H", "S_CORNER_TOP_RIGHT", "S_CONNECT_LEFT", "S_CORNER_BOTTOM_RIGHT", "S_INFO", "S_SUCCESS", "S_WARN", "S_ERROR", "symbol", "state", "color", "limitOptions", "params", "cursor", "options", "style", "paramMaxItems", "outputMaxItems", "maxItems", "slidingWindowLocation", "shouldRenderTopEllipsis", "shouldRenderBottomEllipsis", "option", "i", "arr", "isTopLimit", "isBottomLimit", "text", "opts", "TextPrompt", "title", "placeholder", "value", "confirm", "opts", "active", "inactive", "ConfirmPrompt", "title", "color", "S_BAR", "symbol", "value", "S_RADIO_ACTIVE", "S_RADIO_INACTIVE", "S_BAR_END", "select", "opt", "option", "state", "label", "SelectPrompt", "limitOptions", "item", "cancel", "message", "color", "S_BAR_END", "intro", "title", "S_BAR_START", "log", "message", "symbol", "color", "S_BAR", "parts", "firstLine", "lines", "ln", "S_INFO", "S_SUCCESS", "S_STEP_SUBMIT", "S_WARN", "S_ERROR", "prefix", "spinner", "indicator", "frames", "unicode", "delay", "isCI", "unblock", "loop", "isSpinnerActive", "_message", "_prevMessage", "_origin", "handleExit", "code", "msg", "stop", "errorEventHandler", "signalEventHandler", "registerHooks", "clearHooks", "clearPrevMessage", "prevLines", "cursor", "erase", "parseMessage", "formatTimer", "origin", "duration", "min", "secs", "start", "block", "color", "S_BAR", "frameIndex", "indicatorTimer", "frame", "loadingDots", "step", "S_STEP_SUBMIT", "S_STEP_CANCEL", "S_STEP_ERROR", "dirname", "M", "Y"]
|
|
3
|
+
"sources": ["../node_modules/sisteransi/src/index.js", "../node_modules/picocolors/picocolors.browser.js", "../node_modules/node_modules/.pnpm/ansi-regex@6.1.0/node_modules/ansi-regex/index.js", "../node_modules/node_modules/.pnpm/strip-ansi@7.1.0/node_modules/strip-ansi/index.js", "../node_modules/node_modules/.pnpm/eastasianwidth@0.2.0/node_modules/eastasianwidth/eastasianwidth.js", "../node_modules/node_modules/.pnpm/emoji-regex@9.2.2/node_modules/emoji-regex/index.js", "../node_modules/node_modules/.pnpm/string-width@5.1.2/node_modules/string-width/index.js", "../node_modules/node_modules/.pnpm/ansi-styles@6.2.1/node_modules/ansi-styles/index.js", "../node_modules/node_modules/.pnpm/wrap-ansi@8.1.0/node_modules/wrap-ansi/index.js", "../node_modules/@clack/core/src/utils/settings.ts", "../node_modules/@clack/core/src/utils/string.ts", "../node_modules/@clack/core/src/utils/index.ts", "../node_modules/@clack/core/src/prompts/prompt.ts", "../node_modules/@clack/core/src/prompts/confirm.ts", "../node_modules/@clack/core/src/prompts/group-multiselect.ts", "../node_modules/@clack/core/src/prompts/multi-select.ts", "../node_modules/@clack/core/src/prompts/password.ts", "../node_modules/@clack/core/src/prompts/select.ts", "../node_modules/@clack/core/src/prompts/select-key.ts", "../node_modules/@clack/core/src/prompts/text.ts", "../node_modules/node_modules/.pnpm/is-unicode-supported@1.3.0/node_modules/is-unicode-supported/index.js", "../node_modules/@clack/prompts/src/index.ts", "../main.ts", "../runtime_helpers.ts"],
|
|
4
|
+
"sourcesContent": ["'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", "var x=String;\nvar create=function() {return {isColorSupported:false,reset:x,bold:x,dim:x,italic:x,underline:x,inverse:x,hidden:x,strikethrough:x,black:x,red:x,green:x,yellow:x,blue:x,magenta:x,cyan:x,white:x,gray:x,bgBlack:x,bgRed:x,bgGreen:x,bgYellow:x,bgBlue:x,bgMagenta:x,bgCyan:x,bgWhite:x,blackBright:x,redBright:x,greenBright:x,yellowBright:x,blueBright:x,magentaBright:x,cyanBright:x,whiteBright:x,bgBlackBright:x,bgRedBright:x,bgGreenBright:x,bgYellowBright:x,bgBlueBright:x,bgMagentaBright:x,bgCyanBright:x,bgWhiteBright:x}};\nmodule.exports=create();\nmodule.exports.createColors = create;\n", "export default function ansiRegex({onlyFirst = false} = {}) {\n\t// Valid string terminator sequences are BEL, ESC\\, and 0x9c\n\tconst ST = '(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)';\n\tconst pattern = [\n\t\t`[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?${ST})`,\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]))',\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n", "import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n", "var eaw = {};\n\nif ('undefined' == typeof module) {\n window.eastasianwidth = eaw;\n} else {\n module.exports = eaw;\n}\n\neaw.eastAsianWidth = function(character) {\n var x = character.charCodeAt(0);\n var y = (character.length == 2) ? character.charCodeAt(1) : 0;\n var codePoint = x;\n if ((0xD800 <= x && x <= 0xDBFF) && (0xDC00 <= y && y <= 0xDFFF)) {\n x &= 0x3FF;\n y &= 0x3FF;\n codePoint = (x << 10) | y;\n codePoint += 0x10000;\n }\n\n if ((0x3000 == codePoint) ||\n (0xFF01 <= codePoint && codePoint <= 0xFF60) ||\n (0xFFE0 <= codePoint && codePoint <= 0xFFE6)) {\n return 'F';\n }\n if ((0x20A9 == codePoint) ||\n (0xFF61 <= codePoint && codePoint <= 0xFFBE) ||\n (0xFFC2 <= codePoint && codePoint <= 0xFFC7) ||\n (0xFFCA <= codePoint && codePoint <= 0xFFCF) ||\n (0xFFD2 <= codePoint && codePoint <= 0xFFD7) ||\n (0xFFDA <= codePoint && codePoint <= 0xFFDC) ||\n (0xFFE8 <= codePoint && codePoint <= 0xFFEE)) {\n return 'H';\n }\n if ((0x1100 <= codePoint && codePoint <= 0x115F) ||\n (0x11A3 <= codePoint && codePoint <= 0x11A7) ||\n (0x11FA <= codePoint && codePoint <= 0x11FF) ||\n (0x2329 <= codePoint && codePoint <= 0x232A) ||\n (0x2E80 <= codePoint && codePoint <= 0x2E99) ||\n (0x2E9B <= codePoint && codePoint <= 0x2EF3) ||\n (0x2F00 <= codePoint && codePoint <= 0x2FD5) ||\n (0x2FF0 <= codePoint && codePoint <= 0x2FFB) ||\n (0x3001 <= codePoint && codePoint <= 0x303E) ||\n (0x3041 <= codePoint && codePoint <= 0x3096) ||\n (0x3099 <= codePoint && codePoint <= 0x30FF) ||\n (0x3105 <= codePoint && codePoint <= 0x312D) ||\n (0x3131 <= codePoint && codePoint <= 0x318E) ||\n (0x3190 <= codePoint && codePoint <= 0x31BA) ||\n (0x31C0 <= codePoint && codePoint <= 0x31E3) ||\n (0x31F0 <= codePoint && codePoint <= 0x321E) ||\n (0x3220 <= codePoint && codePoint <= 0x3247) ||\n (0x3250 <= codePoint && codePoint <= 0x32FE) ||\n (0x3300 <= codePoint && codePoint <= 0x4DBF) ||\n (0x4E00 <= codePoint && codePoint <= 0xA48C) ||\n (0xA490 <= codePoint && codePoint <= 0xA4C6) ||\n (0xA960 <= codePoint && codePoint <= 0xA97C) ||\n (0xAC00 <= codePoint && codePoint <= 0xD7A3) ||\n (0xD7B0 <= codePoint && codePoint <= 0xD7C6) ||\n (0xD7CB <= codePoint && codePoint <= 0xD7FB) ||\n (0xF900 <= codePoint && codePoint <= 0xFAFF) ||\n (0xFE10 <= codePoint && codePoint <= 0xFE19) ||\n (0xFE30 <= codePoint && codePoint <= 0xFE52) ||\n (0xFE54 <= codePoint && codePoint <= 0xFE66) ||\n (0xFE68 <= codePoint && codePoint <= 0xFE6B) ||\n (0x1B000 <= codePoint && codePoint <= 0x1B001) ||\n (0x1F200 <= codePoint && codePoint <= 0x1F202) ||\n (0x1F210 <= codePoint && codePoint <= 0x1F23A) ||\n (0x1F240 <= codePoint && codePoint <= 0x1F248) ||\n (0x1F250 <= codePoint && codePoint <= 0x1F251) ||\n (0x20000 <= codePoint && codePoint <= 0x2F73F) ||\n (0x2B740 <= codePoint && codePoint <= 0x2FFFD) ||\n (0x30000 <= codePoint && codePoint <= 0x3FFFD)) {\n return 'W';\n }\n if ((0x0020 <= codePoint && codePoint <= 0x007E) ||\n (0x00A2 <= codePoint && codePoint <= 0x00A3) ||\n (0x00A5 <= codePoint && codePoint <= 0x00A6) ||\n (0x00AC == codePoint) ||\n (0x00AF == codePoint) ||\n (0x27E6 <= codePoint && codePoint <= 0x27ED) ||\n (0x2985 <= codePoint && codePoint <= 0x2986)) {\n return 'Na';\n }\n if ((0x00A1 == codePoint) ||\n (0x00A4 == codePoint) ||\n (0x00A7 <= codePoint && codePoint <= 0x00A8) ||\n (0x00AA == codePoint) ||\n (0x00AD <= codePoint && codePoint <= 0x00AE) ||\n (0x00B0 <= codePoint && codePoint <= 0x00B4) ||\n (0x00B6 <= codePoint && codePoint <= 0x00BA) ||\n (0x00BC <= codePoint && codePoint <= 0x00BF) ||\n (0x00C6 == codePoint) ||\n (0x00D0 == codePoint) ||\n (0x00D7 <= codePoint && codePoint <= 0x00D8) ||\n (0x00DE <= codePoint && codePoint <= 0x00E1) ||\n (0x00E6 == codePoint) ||\n (0x00E8 <= codePoint && codePoint <= 0x00EA) ||\n (0x00EC <= codePoint && codePoint <= 0x00ED) ||\n (0x00F0 == codePoint) ||\n (0x00F2 <= codePoint && codePoint <= 0x00F3) ||\n (0x00F7 <= codePoint && codePoint <= 0x00FA) ||\n (0x00FC == codePoint) ||\n (0x00FE == codePoint) ||\n (0x0101 == codePoint) ||\n (0x0111 == codePoint) ||\n (0x0113 == codePoint) ||\n (0x011B == codePoint) ||\n (0x0126 <= codePoint && codePoint <= 0x0127) ||\n (0x012B == codePoint) ||\n (0x0131 <= codePoint && codePoint <= 0x0133) ||\n (0x0138 == codePoint) ||\n (0x013F <= codePoint && codePoint <= 0x0142) ||\n (0x0144 == codePoint) ||\n (0x0148 <= codePoint && codePoint <= 0x014B) ||\n (0x014D == codePoint) ||\n (0x0152 <= codePoint && codePoint <= 0x0153) ||\n (0x0166 <= codePoint && codePoint <= 0x0167) ||\n (0x016B == codePoint) ||\n (0x01CE == codePoint) ||\n (0x01D0 == codePoint) ||\n (0x01D2 == codePoint) ||\n (0x01D4 == codePoint) ||\n (0x01D6 == codePoint) ||\n (0x01D8 == codePoint) ||\n (0x01DA == codePoint) ||\n (0x01DC == codePoint) ||\n (0x0251 == codePoint) ||\n (0x0261 == codePoint) ||\n (0x02C4 == codePoint) ||\n (0x02C7 == codePoint) ||\n (0x02C9 <= codePoint && codePoint <= 0x02CB) ||\n (0x02CD == codePoint) ||\n (0x02D0 == codePoint) ||\n (0x02D8 <= codePoint && codePoint <= 0x02DB) ||\n (0x02DD == codePoint) ||\n (0x02DF == codePoint) ||\n (0x0300 <= codePoint && codePoint <= 0x036F) ||\n (0x0391 <= codePoint && codePoint <= 0x03A1) ||\n (0x03A3 <= codePoint && codePoint <= 0x03A9) ||\n (0x03B1 <= codePoint && codePoint <= 0x03C1) ||\n (0x03C3 <= codePoint && codePoint <= 0x03C9) ||\n (0x0401 == codePoint) ||\n (0x0410 <= codePoint && codePoint <= 0x044F) ||\n (0x0451 == codePoint) ||\n (0x2010 == codePoint) ||\n (0x2013 <= codePoint && codePoint <= 0x2016) ||\n (0x2018 <= codePoint && codePoint <= 0x2019) ||\n (0x201C <= codePoint && codePoint <= 0x201D) ||\n (0x2020 <= codePoint && codePoint <= 0x2022) ||\n (0x2024 <= codePoint && codePoint <= 0x2027) ||\n (0x2030 == codePoint) ||\n (0x2032 <= codePoint && codePoint <= 0x2033) ||\n (0x2035 == codePoint) ||\n (0x203B == codePoint) ||\n (0x203E == codePoint) ||\n (0x2074 == codePoint) ||\n (0x207F == codePoint) ||\n (0x2081 <= codePoint && codePoint <= 0x2084) ||\n (0x20AC == codePoint) ||\n (0x2103 == codePoint) ||\n (0x2105 == codePoint) ||\n (0x2109 == codePoint) ||\n (0x2113 == codePoint) ||\n (0x2116 == codePoint) ||\n (0x2121 <= codePoint && codePoint <= 0x2122) ||\n (0x2126 == codePoint) ||\n (0x212B == codePoint) ||\n (0x2153 <= codePoint && codePoint <= 0x2154) ||\n (0x215B <= codePoint && codePoint <= 0x215E) ||\n (0x2160 <= codePoint && codePoint <= 0x216B) ||\n (0x2170 <= codePoint && codePoint <= 0x2179) ||\n (0x2189 == codePoint) ||\n (0x2190 <= codePoint && codePoint <= 0x2199) ||\n (0x21B8 <= codePoint && codePoint <= 0x21B9) ||\n (0x21D2 == codePoint) ||\n (0x21D4 == codePoint) ||\n (0x21E7 == codePoint) ||\n (0x2200 == codePoint) ||\n (0x2202 <= codePoint && codePoint <= 0x2203) ||\n (0x2207 <= codePoint && codePoint <= 0x2208) ||\n (0x220B == codePoint) ||\n (0x220F == codePoint) ||\n (0x2211 == codePoint) ||\n (0x2215 == codePoint) ||\n (0x221A == codePoint) ||\n (0x221D <= codePoint && codePoint <= 0x2220) ||\n (0x2223 == codePoint) ||\n (0x2225 == codePoint) ||\n (0x2227 <= codePoint && codePoint <= 0x222C) ||\n (0x222E == codePoint) ||\n (0x2234 <= codePoint && codePoint <= 0x2237) ||\n (0x223C <= codePoint && codePoint <= 0x223D) ||\n (0x2248 == codePoint) ||\n (0x224C == codePoint) ||\n (0x2252 == codePoint) ||\n (0x2260 <= codePoint && codePoint <= 0x2261) ||\n (0x2264 <= codePoint && codePoint <= 0x2267) ||\n (0x226A <= codePoint && codePoint <= 0x226B) ||\n (0x226E <= codePoint && codePoint <= 0x226F) ||\n (0x2282 <= codePoint && codePoint <= 0x2283) ||\n (0x2286 <= codePoint && codePoint <= 0x2287) ||\n (0x2295 == codePoint) ||\n (0x2299 == codePoint) ||\n (0x22A5 == codePoint) ||\n (0x22BF == codePoint) ||\n (0x2312 == codePoint) ||\n (0x2460 <= codePoint && codePoint <= 0x24E9) ||\n (0x24EB <= codePoint && codePoint <= 0x254B) ||\n (0x2550 <= codePoint && codePoint <= 0x2573) ||\n (0x2580 <= codePoint && codePoint <= 0x258F) ||\n (0x2592 <= codePoint && codePoint <= 0x2595) ||\n (0x25A0 <= codePoint && codePoint <= 0x25A1) ||\n (0x25A3 <= codePoint && codePoint <= 0x25A9) ||\n (0x25B2 <= codePoint && codePoint <= 0x25B3) ||\n (0x25B6 <= codePoint && codePoint <= 0x25B7) ||\n (0x25BC <= codePoint && codePoint <= 0x25BD) ||\n (0x25C0 <= codePoint && codePoint <= 0x25C1) ||\n (0x25C6 <= codePoint && codePoint <= 0x25C8) ||\n (0x25CB == codePoint) ||\n (0x25CE <= codePoint && codePoint <= 0x25D1) ||\n (0x25E2 <= codePoint && codePoint <= 0x25E5) ||\n (0x25EF == codePoint) ||\n (0x2605 <= codePoint && codePoint <= 0x2606) ||\n (0x2609 == codePoint) ||\n (0x260E <= codePoint && codePoint <= 0x260F) ||\n (0x2614 <= codePoint && codePoint <= 0x2615) ||\n (0x261C == codePoint) ||\n (0x261E == codePoint) ||\n (0x2640 == codePoint) ||\n (0x2642 == codePoint) ||\n (0x2660 <= codePoint && codePoint <= 0x2661) ||\n (0x2663 <= codePoint && codePoint <= 0x2665) ||\n (0x2667 <= codePoint && codePoint <= 0x266A) ||\n (0x266C <= codePoint && codePoint <= 0x266D) ||\n (0x266F == codePoint) ||\n (0x269E <= codePoint && codePoint <= 0x269F) ||\n (0x26BE <= codePoint && codePoint <= 0x26BF) ||\n (0x26C4 <= codePoint && codePoint <= 0x26CD) ||\n (0x26CF <= codePoint && codePoint <= 0x26E1) ||\n (0x26E3 == codePoint) ||\n (0x26E8 <= codePoint && codePoint <= 0x26FF) ||\n (0x273D == codePoint) ||\n (0x2757 == codePoint) ||\n (0x2776 <= codePoint && codePoint <= 0x277F) ||\n (0x2B55 <= codePoint && codePoint <= 0x2B59) ||\n (0x3248 <= codePoint && codePoint <= 0x324F) ||\n (0xE000 <= codePoint && codePoint <= 0xF8FF) ||\n (0xFE00 <= codePoint && codePoint <= 0xFE0F) ||\n (0xFFFD == codePoint) ||\n (0x1F100 <= codePoint && codePoint <= 0x1F10A) ||\n (0x1F110 <= codePoint && codePoint <= 0x1F12D) ||\n (0x1F130 <= codePoint && codePoint <= 0x1F169) ||\n (0x1F170 <= codePoint && codePoint <= 0x1F19A) ||\n (0xE0100 <= codePoint && codePoint <= 0xE01EF) ||\n (0xF0000 <= codePoint && codePoint <= 0xFFFFD) ||\n (0x100000 <= codePoint && codePoint <= 0x10FFFD)) {\n return 'A';\n }\n\n return 'N';\n};\n\neaw.characterLength = function(character) {\n var code = this.eastAsianWidth(character);\n if (code == 'F' || code == 'W' || code == 'A') {\n return 2;\n } else {\n return 1;\n }\n};\n\n// Split a string considering surrogate-pairs.\nfunction stringToArray(string) {\n return string.match(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[^\\uD800-\\uDFFF]/g) || [];\n}\n\neaw.length = function(string) {\n var characters = stringToArray(string);\n var len = 0;\n for (var i = 0; i < characters.length; i++) {\n len = len + this.characterLength(characters[i]);\n }\n return len;\n};\n\neaw.slice = function(text, start, end) {\n textLen = eaw.length(text)\n start = start ? start : 0;\n end = end ? end : 1;\n if (start < 0) {\n start = textLen + start;\n }\n if (end < 0) {\n end = textLen + end;\n }\n var result = '';\n var eawLen = 0;\n var chars = stringToArray(text);\n for (var i = 0; i < chars.length; i++) {\n var char = chars[i];\n var charLen = eaw.length(char);\n if (eawLen >= start - (charLen == 2 ? 1 : 0)) {\n if (eawLen + charLen <= end) {\n result += char;\n } else {\n break;\n }\n }\n eawLen += charLen;\n }\n return result;\n};\n", "\"use strict\";\n\nmodule.exports = function () {\n // https://mths.be/emoji\n 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;\n};\n", "import stripAnsi from 'strip-ansi';\nimport eastAsianWidth from 'eastasianwidth';\nimport emojiRegex from 'emoji-regex';\n\nexport default function stringWidth(string, options = {}) {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\n\t}\n\n\toptions = {\n\t\tambiguousIsNarrow: true,\n\t\t...options\n\t};\n\n\tstring = stripAnsi(string);\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tstring = string.replace(emojiRegex(), ' ');\n\n\tconst ambiguousCharacterWidth = options.ambiguousIsNarrow ? 1 : 2;\n\tlet width = 0;\n\n\tfor (const character of string) {\n\t\tconst codePoint = character.codePointAt(0);\n\n\t\t// Ignore control characters\n\t\tif (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (codePoint >= 0x300 && codePoint <= 0x36F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst code = eastAsianWidth.eastAsianWidth(character);\n\t\tswitch (code) {\n\t\t\tcase 'F':\n\t\t\tcase 'W':\n\t\t\t\twidth += 2;\n\t\t\t\tbreak;\n\t\t\tcase 'A':\n\t\t\t\twidth += ambiguousCharacterWidth;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\twidth += 1;\n\t\t}\n\t}\n\n\treturn width;\n}\n", "const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue: (red, green, blue) => {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue: hex => {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue: code => {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n", "import stringWidth from 'string-width';\nimport stripAnsi from 'strip-ansi';\nimport ansiStyles from 'ansi-styles';\n\nconst ESCAPES = new Set([\n\t'\\u001B',\n\t'\\u009B',\n]);\n\nconst END_CODE = 39;\nconst ANSI_ESCAPE_BELL = '\\u0007';\nconst ANSI_CSI = '[';\nconst ANSI_OSC = ']';\nconst ANSI_SGR_TERMINATOR = 'm';\nconst ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`;\n\nconst wrapAnsiCode = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`;\nconst wrapAnsiHyperlink = uri => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`;\n\n// Calculate the length of words split on ' ', ignoring\n// the extra characters added by ansi escape codes\nconst wordLengths = string => string.split(' ').map(character => stringWidth(character));\n\n// Wrap a long word across multiple rows\n// Ansi escape codes do not count towards length\nconst wrapWord = (rows, word, columns) => {\n\tconst characters = [...word];\n\n\tlet isInsideEscape = false;\n\tlet isInsideLinkEscape = false;\n\tlet visible = stringWidth(stripAnsi(rows[rows.length - 1]));\n\n\tfor (const [index, character] of characters.entries()) {\n\t\tconst characterLength = stringWidth(character);\n\n\t\tif (visible + characterLength <= columns) {\n\t\t\trows[rows.length - 1] += character;\n\t\t} else {\n\t\t\trows.push(character);\n\t\t\tvisible = 0;\n\t\t}\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tisInsideEscape = true;\n\t\t\tisInsideLinkEscape = characters.slice(index + 1).join('').startsWith(ANSI_ESCAPE_LINK);\n\t\t}\n\n\t\tif (isInsideEscape) {\n\t\t\tif (isInsideLinkEscape) {\n\t\t\t\tif (character === ANSI_ESCAPE_BELL) {\n\t\t\t\t\tisInsideEscape = false;\n\t\t\t\t\tisInsideLinkEscape = false;\n\t\t\t\t}\n\t\t\t} else if (character === ANSI_SGR_TERMINATOR) {\n\t\t\t\tisInsideEscape = false;\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tvisible += characterLength;\n\n\t\tif (visible === columns && index < characters.length - 1) {\n\t\t\trows.push('');\n\t\t\tvisible = 0;\n\t\t}\n\t}\n\n\t// It's possible that the last row we copy over is only\n\t// ansi escape characters, handle this edge-case\n\tif (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) {\n\t\trows[rows.length - 2] += rows.pop();\n\t}\n};\n\n// Trims spaces from a string ignoring invisible sequences\nconst stringVisibleTrimSpacesRight = string => {\n\tconst words = string.split(' ');\n\tlet last = words.length;\n\n\twhile (last > 0) {\n\t\tif (stringWidth(words[last - 1]) > 0) {\n\t\t\tbreak;\n\t\t}\n\n\t\tlast--;\n\t}\n\n\tif (last === words.length) {\n\t\treturn string;\n\t}\n\n\treturn words.slice(0, last).join(' ') + words.slice(last).join('');\n};\n\n// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode\n//\n// 'hard' will never allow a string to take up more than columns characters\n//\n// 'soft' allows long words to expand past the column length\nconst exec = (string, columns, options = {}) => {\n\tif (options.trim !== false && string.trim() === '') {\n\t\treturn '';\n\t}\n\n\tlet returnValue = '';\n\tlet escapeCode;\n\tlet escapeUrl;\n\n\tconst lengths = wordLengths(string);\n\tlet rows = [''];\n\n\tfor (const [index, word] of string.split(' ').entries()) {\n\t\tif (options.trim !== false) {\n\t\t\trows[rows.length - 1] = rows[rows.length - 1].trimStart();\n\t\t}\n\n\t\tlet rowLength = stringWidth(rows[rows.length - 1]);\n\n\t\tif (index !== 0) {\n\t\t\tif (rowLength >= columns && (options.wordWrap === false || options.trim === false)) {\n\t\t\t\t// If we start with a new word but the current row length equals the length of the columns, add a new row\n\t\t\t\trows.push('');\n\t\t\t\trowLength = 0;\n\t\t\t}\n\n\t\t\tif (rowLength > 0 || options.trim === false) {\n\t\t\t\trows[rows.length - 1] += ' ';\n\t\t\t\trowLength++;\n\t\t\t}\n\t\t}\n\n\t\t// In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns'\n\t\tif (options.hard && lengths[index] > columns) {\n\t\t\tconst remainingColumns = (columns - rowLength);\n\t\t\tconst breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns);\n\t\t\tconst breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns);\n\t\t\tif (breaksStartingNextLine < breaksStartingThisLine) {\n\t\t\t\trows.push('');\n\t\t\t}\n\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) {\n\t\t\tif (options.wordWrap === false && rowLength < columns) {\n\t\t\t\twrapWord(rows, word, columns);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\trows.push('');\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && options.wordWrap === false) {\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\trows[rows.length - 1] += word;\n\t}\n\n\tif (options.trim !== false) {\n\t\trows = rows.map(row => stringVisibleTrimSpacesRight(row));\n\t}\n\n\tconst pre = [...rows.join('\\n')];\n\n\tfor (const [index, character] of pre.entries()) {\n\t\treturnValue += character;\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tconst {groups} = new RegExp(`(?:\\\\${ANSI_CSI}(?<code>\\\\d+)m|\\\\${ANSI_ESCAPE_LINK}(?<uri>.*)${ANSI_ESCAPE_BELL})`).exec(pre.slice(index).join('')) || {groups: {}};\n\t\t\tif (groups.code !== undefined) {\n\t\t\t\tconst code = Number.parseFloat(groups.code);\n\t\t\t\tescapeCode = code === END_CODE ? undefined : code;\n\t\t\t} else if (groups.uri !== undefined) {\n\t\t\t\tescapeUrl = groups.uri.length === 0 ? undefined : groups.uri;\n\t\t\t}\n\t\t}\n\n\t\tconst code = ansiStyles.codes.get(Number(escapeCode));\n\n\t\tif (pre[index + 1] === '\\n') {\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink('');\n\t\t\t}\n\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(code);\n\t\t\t}\n\t\t} else if (character === '\\n') {\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(escapeCode);\n\t\t\t}\n\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink(escapeUrl);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn returnValue;\n};\n\n// For each newline, invoke the method separately\nexport default function wrapAnsi(string, columns, options) {\n\treturn String(string)\n\t\t.normalize()\n\t\t.replace(/\\r\\n/g, '\\n')\n\t\t.split('\\n')\n\t\t.map(line => exec(line, columns, options))\n\t\t.join('\\n');\n}\n", "const actions = ['up', 'down', 'left', 'right', 'space', 'enter', 'cancel'] as const;\nexport type Action = (typeof actions)[number];\n\n/** Global settings for Clack programs, stored in memory */\ninterface InternalClackSettings {\n\tactions: Set<Action>;\n\taliases: Map<string, Action>;\n}\n\nexport const settings: InternalClackSettings = {\n\tactions: new Set(actions),\n\taliases: new Map<string, Action>([\n\t\t// vim support\n\t\t['k', 'up'],\n\t\t['j', 'down'],\n\t\t['h', 'left'],\n\t\t['l', 'right'],\n\t\t['\\x03', 'cancel'],\n\t\t// opinionated defaults!\n\t\t['escape', 'cancel'],\n\t]),\n};\n\nexport interface ClackSettings {\n\t/**\n\t * Set custom global aliases for the default actions.\n\t * This will not overwrite existing aliases, it will only add new ones!\n\t *\n\t * @param aliases - An object that maps aliases to actions\n\t * @default { k: 'up', j: 'down', h: 'left', l: 'right', '\\x03': 'cancel', 'escape': 'cancel' }\n\t */\n\taliases: Record<string, Action>;\n}\n\nexport function updateSettings(updates: ClackSettings) {\n\tfor (const _key in updates) {\n\t\tconst key = _key as keyof ClackSettings;\n\t\tif (!Object.hasOwn(updates, key)) continue;\n\t\tconst value = updates[key];\n\n\t\tswitch (key) {\n\t\t\tcase 'aliases': {\n\t\t\t\tfor (const alias in value) {\n\t\t\t\t\tif (!Object.hasOwn(value, alias)) continue;\n\t\t\t\t\tif (!settings.aliases.has(alias)) {\n\t\t\t\t\t\tsettings.aliases.set(alias, value[alias]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Check if a key is an alias for a default action\n * @param key - The raw key which might match to an action\n * @param action - The action to match\n * @returns boolean\n */\nexport function isActionKey(key: string | Array<string | undefined>, action: Action) {\n\tif (typeof key === 'string') {\n\t\treturn settings.aliases.get(key) === action;\n\t}\n\n\tfor (const value of key) {\n\t\tif (value === undefined) continue;\n\t\tif (isActionKey(value, action)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n", "export function diffLines(a: string, b: string) {\n\tif (a === b) return;\n\n\tconst aLines = a.split('\\n');\n\tconst bLines = b.split('\\n');\n\tconst diff: number[] = [];\n\n\tfor (let i = 0; i < Math.max(aLines.length, bLines.length); i++) {\n\t\tif (aLines[i] !== bLines[i]) diff.push(i);\n\t}\n\n\treturn diff;\n}\n", "import { stdin, stdout } from 'node:process';\nimport type { Key } from 'node:readline';\nimport * as readline from 'node:readline';\nimport type { Readable } from 'node:stream';\nimport { cursor } from 'sisteransi';\nimport { isActionKey } from './settings';\n\nexport * from './string';\nexport * from './settings';\n\nconst isWindows = globalThis.process.platform.startsWith('win');\n\nexport const CANCEL_SYMBOL = Symbol('clack:cancel');\n\nexport function isCancel(value: unknown): value is symbol {\n\treturn value === CANCEL_SYMBOL;\n}\n\nexport function setRawMode(input: Readable, value: boolean) {\n\tconst i = input as typeof stdin;\n\n\tif (i.isTTY) i.setRawMode(value);\n}\n\nexport function block({\n\tinput = stdin,\n\toutput = stdout,\n\toverwrite = true,\n\thideCursor = true,\n} = {}) {\n\tconst rl = readline.createInterface({\n\t\tinput,\n\t\toutput,\n\t\tprompt: '',\n\t\ttabSize: 1,\n\t});\n\treadline.emitKeypressEvents(input, rl);\n\tif (input.isTTY) input.setRawMode(true);\n\n\tconst clear = (data: Buffer, { name, sequence }: Key) => {\n\t\tconst str = String(data);\n\t\tif (isActionKey([str, name, sequence], 'cancel')) {\n\t\t\tif (hideCursor) output.write(cursor.show);\n\t\t\tprocess.exit(0);\n\t\t\treturn;\n\t\t}\n\t\tif (!overwrite) return;\n\t\tconst dx = name === 'return' ? 0 : -1;\n\t\tconst dy = name === 'return' ? -1 : 0;\n\n\t\treadline.moveCursor(output, dx, dy, () => {\n\t\t\treadline.clearLine(output, 1, () => {\n\t\t\t\tinput.once('keypress', clear);\n\t\t\t});\n\t\t});\n\t};\n\tif (hideCursor) output.write(cursor.hide);\n\tinput.once('keypress', clear);\n\n\treturn () => {\n\t\tinput.off('keypress', clear);\n\t\tif (hideCursor) output.write(cursor.show);\n\n\t\t// Prevent Windows specific issues: https://github.com/bombshell-dev/clack/issues/176\n\t\tif (input.isTTY && !isWindows) input.setRawMode(false);\n\n\t\t// @ts-expect-error fix for https://github.com/nodejs/node/issues/31762#issuecomment-1441223907\n\t\trl.terminal = false;\n\t\trl.close();\n\t};\n}\n", "import { stdin, stdout } from 'node:process';\nimport readline, { type Key, type ReadLine } from 'node:readline';\nimport type { Readable } from 'node:stream';\nimport { Writable } from 'node:stream';\nimport { cursor, erase } from 'sisteransi';\nimport wrap from 'wrap-ansi';\n\nimport { CANCEL_SYMBOL, diffLines, isActionKey, setRawMode, settings } from '../utils';\n\nimport type { ClackEvents, ClackState } from '../types';\nimport type { Action } from '../utils';\n\nexport interface PromptOptions<Self extends Prompt> {\n\trender(this: Omit<Self, 'prompt'>): string | undefined;\n\tplaceholder?: string;\n\tinitialValue?: any;\n\tvalidate?: ((value: any) => string | Error | undefined) | undefined;\n\tinput?: Readable;\n\toutput?: Writable;\n\tdebug?: boolean;\n\tsignal?: AbortSignal;\n}\n\nexport default class Prompt {\n\tprotected input: Readable;\n\tprotected output: Writable;\n\tprivate _abortSignal?: AbortSignal;\n\n\tprivate rl: ReadLine | undefined;\n\tprivate opts: Omit<PromptOptions<Prompt>, 'render' | 'input' | 'output'>;\n\tprivate _render: (context: Omit<Prompt, 'prompt'>) => string | undefined;\n\tprivate _track = false;\n\tprivate _prevFrame = '';\n\tprivate _subscribers = new Map<string, { cb: (...args: any) => any; once?: boolean }[]>();\n\tprotected _cursor = 0;\n\n\tpublic state: ClackState = 'initial';\n\tpublic error = '';\n\tpublic value: any;\n\n\tconstructor(options: PromptOptions<Prompt>, trackValue = true) {\n\t\tconst { input = stdin, output = stdout, render, signal, ...opts } = options;\n\n\t\tthis.opts = opts;\n\t\tthis.onKeypress = this.onKeypress.bind(this);\n\t\tthis.close = this.close.bind(this);\n\t\tthis.render = this.render.bind(this);\n\t\tthis._render = render.bind(this);\n\t\tthis._track = trackValue;\n\t\tthis._abortSignal = signal;\n\n\t\tthis.input = input;\n\t\tthis.output = output;\n\t}\n\n\t/**\n\t * Unsubscribe all listeners\n\t */\n\tprotected unsubscribe() {\n\t\tthis._subscribers.clear();\n\t}\n\n\t/**\n\t * Set a subscriber with opts\n\t * @param event - The event name\n\t */\n\tprivate setSubscriber<T extends keyof ClackEvents>(\n\t\tevent: T,\n\t\topts: { cb: ClackEvents[T]; once?: boolean }\n\t) {\n\t\tconst params = this._subscribers.get(event) ?? [];\n\t\tparams.push(opts);\n\t\tthis._subscribers.set(event, params);\n\t}\n\n\t/**\n\t * Subscribe to an event\n\t * @param event - The event name\n\t * @param cb - The callback\n\t */\n\tpublic on<T extends keyof ClackEvents>(event: T, cb: ClackEvents[T]) {\n\t\tthis.setSubscriber(event, { cb });\n\t}\n\n\t/**\n\t * Subscribe to an event once\n\t * @param event - The event name\n\t * @param cb - The callback\n\t */\n\tpublic once<T extends keyof ClackEvents>(event: T, cb: ClackEvents[T]) {\n\t\tthis.setSubscriber(event, { cb, once: true });\n\t}\n\n\t/**\n\t * Emit an event with data\n\t * @param event - The event name\n\t * @param data - The data to pass to the callback\n\t */\n\tpublic emit<T extends keyof ClackEvents>(event: T, ...data: Parameters<ClackEvents[T]>) {\n\t\tconst cbs = this._subscribers.get(event) ?? [];\n\t\tconst cleanup: (() => void)[] = [];\n\n\t\tfor (const subscriber of cbs) {\n\t\t\tsubscriber.cb(...data);\n\n\t\t\tif (subscriber.once) {\n\t\t\t\tcleanup.push(() => cbs.splice(cbs.indexOf(subscriber), 1));\n\t\t\t}\n\t\t}\n\n\t\tfor (const cb of cleanup) {\n\t\t\tcb();\n\t\t}\n\t}\n\n\tpublic prompt() {\n\t\treturn new Promise<string | symbol>((resolve, reject) => {\n\t\t\tif (this._abortSignal) {\n\t\t\t\tif (this._abortSignal.aborted) {\n\t\t\t\t\tthis.state = 'cancel';\n\n\t\t\t\t\tthis.close();\n\t\t\t\t\treturn resolve(CANCEL_SYMBOL);\n\t\t\t\t}\n\n\t\t\t\tthis._abortSignal.addEventListener(\n\t\t\t\t\t'abort',\n\t\t\t\t\t() => {\n\t\t\t\t\t\tthis.state = 'cancel';\n\t\t\t\t\t\tthis.close();\n\t\t\t\t\t},\n\t\t\t\t\t{ once: true }\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst sink = new Writable();\n\t\t\tsink._write = (chunk, encoding, done) => {\n\t\t\t\tif (this._track) {\n\t\t\t\t\tthis.value = this.rl?.line.replace(/\\t/g, '');\n\t\t\t\t\tthis._cursor = this.rl?.cursor ?? 0;\n\t\t\t\t\tthis.emit('value', this.value);\n\t\t\t\t}\n\t\t\t\tdone();\n\t\t\t};\n\t\t\tthis.input.pipe(sink);\n\n\t\t\tthis.rl = readline.createInterface({\n\t\t\t\tinput: this.input,\n\t\t\t\toutput: sink,\n\t\t\t\ttabSize: 2,\n\t\t\t\tprompt: '',\n\t\t\t\tescapeCodeTimeout: 50,\n\t\t\t\tterminal: true,\n\t\t\t});\n\t\t\treadline.emitKeypressEvents(this.input, this.rl);\n\t\t\tthis.rl.prompt();\n\t\t\tif (this.opts.initialValue !== undefined && this._track) {\n\t\t\t\tthis.rl.write(this.opts.initialValue);\n\t\t\t}\n\n\t\t\tthis.input.on('keypress', this.onKeypress);\n\t\t\tsetRawMode(this.input, true);\n\t\t\tthis.output.on('resize', this.render);\n\n\t\t\tthis.render();\n\n\t\t\tthis.once('submit', () => {\n\t\t\t\tthis.output.write(cursor.show);\n\t\t\t\tthis.output.off('resize', this.render);\n\t\t\t\tsetRawMode(this.input, false);\n\t\t\t\tresolve(this.value);\n\t\t\t});\n\t\t\tthis.once('cancel', () => {\n\t\t\t\tthis.output.write(cursor.show);\n\t\t\t\tthis.output.off('resize', this.render);\n\t\t\t\tsetRawMode(this.input, false);\n\t\t\t\tresolve(CANCEL_SYMBOL);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate onKeypress(char: string, key?: Key) {\n\t\tif (this.state === 'error') {\n\t\t\tthis.state = 'active';\n\t\t}\n\t\tif (key?.name) {\n\t\t\tif (!this._track && settings.aliases.has(key.name)) {\n\t\t\t\tthis.emit('cursor', settings.aliases.get(key.name));\n\t\t\t}\n\t\t\tif (settings.actions.has(key.name as Action)) {\n\t\t\t\tthis.emit('cursor', key.name as Action);\n\t\t\t}\n\t\t}\n\t\tif (char && (char.toLowerCase() === 'y' || char.toLowerCase() === 'n')) {\n\t\t\tthis.emit('confirm', char.toLowerCase() === 'y');\n\t\t}\n\t\tif (char === '\\t' && this.opts.placeholder) {\n\t\t\tif (!this.value) {\n\t\t\t\tthis.rl?.write(this.opts.placeholder);\n\t\t\t\tthis.emit('value', this.opts.placeholder);\n\t\t\t}\n\t\t}\n\t\tif (char) {\n\t\t\tthis.emit('key', char.toLowerCase());\n\t\t}\n\n\t\tif (key?.name === 'return') {\n\t\t\tif (this.opts.validate) {\n\t\t\t\tconst problem = this.opts.validate(this.value);\n\t\t\t\tif (problem) {\n\t\t\t\t\tthis.error = problem instanceof Error ? problem.message : problem;\n\t\t\t\t\tthis.state = 'error';\n\t\t\t\t\tthis.rl?.write(this.value);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.state !== 'error') {\n\t\t\t\tthis.state = 'submit';\n\t\t\t}\n\t\t}\n\n\t\tif (isActionKey([char, key?.name, key?.sequence], 'cancel')) {\n\t\t\tthis.state = 'cancel';\n\t\t}\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\tthis.emit('finalize');\n\t\t}\n\t\tthis.render();\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\tprotected close() {\n\t\tthis.input.unpipe();\n\t\tthis.input.removeListener('keypress', this.onKeypress);\n\t\tthis.output.write('\\n');\n\t\tsetRawMode(this.input, false);\n\t\tthis.rl?.close();\n\t\tthis.rl = undefined;\n\t\tthis.emit(`${this.state}`, this.value);\n\t\tthis.unsubscribe();\n\t}\n\n\tprivate restoreCursor() {\n\t\tconst lines =\n\t\t\twrap(this._prevFrame, process.stdout.columns, { hard: true }).split('\\n').length - 1;\n\t\tthis.output.write(cursor.move(-999, lines * -1));\n\t}\n\n\tprivate render() {\n\t\tconst frame = wrap(this._render(this) ?? '', process.stdout.columns, { hard: true });\n\t\tif (frame === this._prevFrame) return;\n\n\t\tif (this.state === 'initial') {\n\t\t\tthis.output.write(cursor.hide);\n\t\t} else {\n\t\t\tconst diff = diffLines(this._prevFrame, frame);\n\t\t\tthis.restoreCursor();\n\t\t\t// If a single line has changed, only update that line\n\t\t\tif (diff && diff?.length === 1) {\n\t\t\t\tconst diffLine = diff[0];\n\t\t\t\tthis.output.write(cursor.move(0, diffLine));\n\t\t\t\tthis.output.write(erase.lines(1));\n\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\tthis.output.write(lines[diffLine]);\n\t\t\t\tthis._prevFrame = frame;\n\t\t\t\tthis.output.write(cursor.move(0, lines.length - diffLine - 1));\n\t\t\t\treturn;\n\t\t\t\t// If many lines have changed, rerender everything past the first line\n\t\t\t}\n\t\t\tif (diff && diff?.length > 1) {\n\t\t\t\tconst diffLine = diff[0];\n\t\t\t\tthis.output.write(cursor.move(0, diffLine));\n\t\t\t\tthis.output.write(erase.down());\n\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\tconst newLines = lines.slice(diffLine);\n\t\t\t\tthis.output.write(newLines.join('\\n'));\n\t\t\t\tthis._prevFrame = frame;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.output.write(erase.down());\n\t\t}\n\n\t\tthis.output.write(frame);\n\t\tif (this.state === 'initial') {\n\t\t\tthis.state = 'active';\n\t\t}\n\t\tthis._prevFrame = frame;\n\t}\n}\n", "import { cursor } from 'sisteransi';\nimport Prompt, { type PromptOptions } from './prompt';\n\ninterface ConfirmOptions extends PromptOptions<ConfirmPrompt> {\n\tactive: string;\n\tinactive: string;\n\tinitialValue?: boolean;\n}\nexport default class ConfirmPrompt extends Prompt {\n\tget cursor() {\n\t\treturn this.value ? 0 : 1;\n\t}\n\n\tprivate get _value() {\n\t\treturn this.cursor === 0;\n\t}\n\n\tconstructor(opts: ConfirmOptions) {\n\t\tsuper(opts, false);\n\t\tthis.value = !!opts.initialValue;\n\n\t\tthis.on('value', () => {\n\t\t\tthis.value = this._value;\n\t\t});\n\n\t\tthis.on('confirm', (confirm) => {\n\t\t\tthis.output.write(cursor.move(0, -1));\n\t\t\tthis.value = confirm;\n\t\t\tthis.state = 'submit';\n\t\t\tthis.close();\n\t\t});\n\n\t\tthis.on('cursor', () => {\n\t\t\tthis.value = !this.value;\n\t\t});\n\t}\n}\n", "import Prompt, { type PromptOptions } from './prompt';\n\ninterface GroupMultiSelectOptions<T extends { value: any }>\n\textends PromptOptions<GroupMultiSelectPrompt<T>> {\n\toptions: Record<string, T[]>;\n\tinitialValues?: T['value'][];\n\trequired?: boolean;\n\tcursorAt?: T['value'];\n\tselectableGroups?: boolean;\n}\nexport default class GroupMultiSelectPrompt<T extends { value: any }> extends Prompt {\n\toptions: (T & { group: string | boolean })[];\n\tcursor = 0;\n\t#selectableGroups: boolean;\n\n\tgetGroupItems(group: string): T[] {\n\t\treturn this.options.filter((o) => o.group === group);\n\t}\n\n\tisGroupSelected(group: string) {\n\t\tconst items = this.getGroupItems(group);\n\t\treturn items.every((i) => this.value.includes(i.value));\n\t}\n\n\tprivate toggleValue() {\n\t\tconst item = this.options[this.cursor];\n\t\tif (item.group === true) {\n\t\t\tconst group = item.value;\n\t\t\tconst groupedItems = this.getGroupItems(group);\n\t\t\tif (this.isGroupSelected(group)) {\n\t\t\t\tthis.value = this.value.filter(\n\t\t\t\t\t(v: string) => groupedItems.findIndex((i) => i.value === v) === -1\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.value = [...this.value, ...groupedItems.map((i) => i.value)];\n\t\t\t}\n\t\t\tthis.value = Array.from(new Set(this.value));\n\t\t} else {\n\t\t\tconst selected = this.value.includes(item.value);\n\t\t\tthis.value = selected\n\t\t\t\t? this.value.filter((v: T['value']) => v !== item.value)\n\t\t\t\t: [...this.value, item.value];\n\t\t}\n\t}\n\n\tconstructor(opts: GroupMultiSelectOptions<T>) {\n\t\tsuper(opts, false);\n\t\tconst { options } = opts;\n\t\tthis.#selectableGroups = opts.selectableGroups !== false;\n\t\tthis.options = Object.entries(options).flatMap(([key, option]) => [\n\t\t\t{ value: key, group: true, label: key },\n\t\t\t...option.map((opt) => ({ ...opt, group: key })),\n\t\t]) as any;\n\t\tthis.value = [...(opts.initialValues ?? [])];\n\t\tthis.cursor = Math.max(\n\t\t\tthis.options.findIndex(({ value }) => value === opts.cursorAt),\n\t\t\tthis.#selectableGroups ? 0 : 1\n\t\t);\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up': {\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tconst currentIsGroup = this.options[this.cursor]?.group === true;\n\t\t\t\t\tif (!this.#selectableGroups && currentIsGroup) {\n\t\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right': {\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tconst currentIsGroup = this.options[this.cursor]?.group === true;\n\t\t\t\t\tif (!this.#selectableGroups && currentIsGroup) {\n\t\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'space':\n\t\t\t\t\tthis.toggleValue();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n}\n", "import Prompt, { type PromptOptions } from './prompt';\n\ninterface MultiSelectOptions<T extends { value: any }> extends PromptOptions<MultiSelectPrompt<T>> {\n\toptions: T[];\n\tinitialValues?: T['value'][];\n\trequired?: boolean;\n\tcursorAt?: T['value'];\n}\nexport default class MultiSelectPrompt<T extends { value: any }> extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tprivate get _value() {\n\t\treturn this.options[this.cursor].value;\n\t}\n\n\tprivate toggleAll() {\n\t\tconst allSelected = this.value.length === this.options.length;\n\t\tthis.value = allSelected ? [] : this.options.map((v) => v.value);\n\t}\n\n\tprivate toggleValue() {\n\t\tconst selected = this.value.includes(this._value);\n\t\tthis.value = selected\n\t\t\t? this.value.filter((value: T['value']) => value !== this._value)\n\t\t\t: [...this.value, this._value];\n\t}\n\n\tconstructor(opts: MultiSelectOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tthis.value = [...(opts.initialValues ?? [])];\n\t\tthis.cursor = Math.max(\n\t\t\tthis.options.findIndex(({ value }) => value === opts.cursorAt),\n\t\t\t0\n\t\t);\n\t\tthis.on('key', (char) => {\n\t\t\tif (char === 'a') {\n\t\t\t\tthis.toggleAll();\n\t\t\t}\n\t\t});\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'space':\n\t\t\t\t\tthis.toggleValue();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n}\n", "import color from 'picocolors';\nimport Prompt, { type PromptOptions } from './prompt';\n\ninterface PasswordOptions extends PromptOptions<PasswordPrompt> {\n\tmask?: string;\n}\nexport default class PasswordPrompt extends Prompt {\n\tvalueWithCursor = '';\n\tprivate _mask = '•';\n\tget cursor() {\n\t\treturn this._cursor;\n\t}\n\tget masked() {\n\t\treturn this.value.replaceAll(/./g, this._mask);\n\t}\n\tconstructor({ mask, ...opts }: PasswordOptions) {\n\t\tsuper(opts);\n\t\tthis._mask = mask ?? '•';\n\n\t\tthis.on('finalize', () => {\n\t\t\tthis.valueWithCursor = this.masked;\n\t\t});\n\t\tthis.on('value', () => {\n\t\t\tif (this.cursor >= this.value.length) {\n\t\t\t\tthis.valueWithCursor = `${this.masked}${color.inverse(color.hidden('_'))}`;\n\t\t\t} else {\n\t\t\t\tconst s1 = this.masked.slice(0, this.cursor);\n\t\t\t\tconst s2 = this.masked.slice(this.cursor);\n\t\t\t\tthis.valueWithCursor = `${s1}${color.inverse(s2[0])}${s2.slice(1)}`;\n\t\t\t}\n\t\t});\n\t}\n}\n", "import Prompt, { type PromptOptions } from './prompt';\n\ninterface SelectOptions<T extends { value: any }> extends PromptOptions<SelectPrompt<T>> {\n\toptions: T[];\n\tinitialValue?: T['value'];\n}\nexport default class SelectPrompt<T extends { value: any }> extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tprivate get _value() {\n\t\treturn this.options[this.cursor];\n\t}\n\n\tprivate changeValue() {\n\t\tthis.value = this._value.value;\n\t}\n\n\tconstructor(opts: SelectOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tthis.cursor = this.options.findIndex(({ value }) => value === opts.initialValue);\n\t\tif (this.cursor === -1) this.cursor = 0;\n\t\tthis.changeValue();\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthis.changeValue();\n\t\t});\n\t}\n}\n", "import Prompt, { type PromptOptions } from './prompt';\n\ninterface SelectKeyOptions<T extends { value: any }> extends PromptOptions<SelectKeyPrompt<T>> {\n\toptions: T[];\n}\nexport default class SelectKeyPrompt<T extends { value: any }> extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tconstructor(opts: SelectKeyOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tconst keys = this.options.map(({ value: [initial] }) => initial?.toLowerCase());\n\t\tthis.cursor = Math.max(keys.indexOf(opts.initialValue), 0);\n\n\t\tthis.on('key', (key) => {\n\t\t\tif (!keys.includes(key)) return;\n\t\t\tconst value = this.options.find(({ value: [initial] }) => initial?.toLowerCase() === key);\n\t\t\tif (value) {\n\t\t\t\tthis.value = value.value;\n\t\t\t\tthis.state = 'submit';\n\t\t\t\tthis.emit('submit');\n\t\t\t}\n\t\t});\n\t}\n}\n", "import color from 'picocolors';\nimport Prompt, { type PromptOptions } from './prompt';\n\nexport interface TextOptions extends PromptOptions<TextPrompt> {\n\tplaceholder?: string;\n\tdefaultValue?: string;\n}\n\nexport default class TextPrompt extends Prompt {\n\tget valueWithCursor() {\n\t\tif (this.state === 'submit') {\n\t\t\treturn this.value;\n\t\t}\n\t\tif (this.cursor >= this.value.length) {\n\t\t\treturn `${this.value}█`;\n\t\t}\n\t\tconst s1 = this.value.slice(0, this.cursor);\n\t\tconst [s2, ...s3] = this.value.slice(this.cursor);\n\t\treturn `${s1}${color.inverse(s2)}${s3.join('')}`;\n\t}\n\tget cursor() {\n\t\treturn this._cursor;\n\t}\n\tconstructor(opts: TextOptions) {\n\t\tsuper(opts);\n\n\t\tthis.on('finalize', () => {\n\t\t\tif (!this.value) {\n\t\t\t\tthis.value = opts.defaultValue;\n\t\t\t}\n\t\t});\n\t}\n}\n", "import process from 'node:process';\n\nexport default function isUnicodeSupported() {\n\tif (process.platform !== 'win32') {\n\t\treturn process.env.TERM !== 'linux'; // Linux console (kernel)\n\t}\n\n\treturn Boolean(process.env.CI)\n\t\t|| Boolean(process.env.WT_SESSION) // Windows Terminal\n\t\t|| Boolean(process.env.TERMINUS_SUBLIME) // Terminus (<0.2.27)\n\t\t|| process.env.ConEmuTask === '{cmd::Cmder}' // ConEmu and cmder\n\t\t|| process.env.TERM_PROGRAM === 'Terminus-Sublime'\n\t\t|| process.env.TERM_PROGRAM === 'vscode'\n\t\t|| process.env.TERM === 'xterm-256color'\n\t\t|| process.env.TERM === 'alacritty'\n\t\t|| process.env.TERMINAL_EMULATOR === 'JetBrains-JediTerm';\n}\n", "import { stripVTControlCharacters as strip } from 'node:util';\nimport {\n\tConfirmPrompt,\n\tGroupMultiSelectPrompt,\n\tMultiSelectPrompt,\n\tPasswordPrompt,\n\tSelectKeyPrompt,\n\tSelectPrompt,\n\ttype State,\n\tTextPrompt,\n\tblock,\n\tisCancel,\n} from '@clack/core';\nimport isUnicodeSupported from 'is-unicode-supported';\nimport color from 'picocolors';\nimport { cursor, erase } from 'sisteransi';\n\nexport { isCancel } from '@clack/core';\nexport { updateSettings, type ClackSettings } from '@clack/core';\n\nconst unicode = isUnicodeSupported();\nconst s = (c: string, fallback: string) => (unicode ? c : fallback);\nconst S_STEP_ACTIVE = s('◆', '*');\nconst S_STEP_CANCEL = s('■', 'x');\nconst S_STEP_ERROR = s('▲', 'x');\nconst S_STEP_SUBMIT = s('◇', 'o');\n\nconst S_BAR_START = s('┌', 'T');\nconst S_BAR = s('│', '|');\nconst S_BAR_END = s('└', '—');\n\nconst S_RADIO_ACTIVE = s('●', '>');\nconst S_RADIO_INACTIVE = s('○', ' ');\nconst S_CHECKBOX_ACTIVE = s('◻', '[•]');\nconst S_CHECKBOX_SELECTED = s('◼', '[+]');\nconst S_CHECKBOX_INACTIVE = s('◻', '[ ]');\nconst S_PASSWORD_MASK = s('▪', '•');\n\nconst S_BAR_H = s('─', '-');\nconst S_CORNER_TOP_RIGHT = s('╮', '+');\nconst S_CONNECT_LEFT = s('├', '+');\nconst S_CORNER_BOTTOM_RIGHT = s('╯', '+');\n\nconst S_INFO = s('●', '•');\nconst S_SUCCESS = s('◆', '*');\nconst S_WARN = s('▲', '!');\nconst S_ERROR = s('■', 'x');\n\nconst symbol = (state: State) => {\n\tswitch (state) {\n\t\tcase 'initial':\n\t\tcase 'active':\n\t\t\treturn color.cyan(S_STEP_ACTIVE);\n\t\tcase 'cancel':\n\t\t\treturn color.red(S_STEP_CANCEL);\n\t\tcase 'error':\n\t\t\treturn color.yellow(S_STEP_ERROR);\n\t\tcase 'submit':\n\t\t\treturn color.green(S_STEP_SUBMIT);\n\t}\n};\n\ninterface LimitOptionsParams<TOption> {\n\toptions: TOption[];\n\tmaxItems: number | undefined;\n\tcursor: number;\n\tstyle: (option: TOption, active: boolean) => string;\n}\n\nconst limitOptions = <TOption>(params: LimitOptionsParams<TOption>): string[] => {\n\tconst { cursor, options, style } = params;\n\n\tconst paramMaxItems = params.maxItems ?? Number.POSITIVE_INFINITY;\n\tconst outputMaxItems = Math.max(process.stdout.rows - 4, 0);\n\t// We clamp to minimum 5 because anything less doesn't make sense UX wise\n\tconst maxItems = Math.min(outputMaxItems, Math.max(paramMaxItems, 5));\n\tlet slidingWindowLocation = 0;\n\n\tif (cursor >= slidingWindowLocation + maxItems - 3) {\n\t\tslidingWindowLocation = Math.max(Math.min(cursor - maxItems + 3, options.length - maxItems), 0);\n\t} else if (cursor < slidingWindowLocation + 2) {\n\t\tslidingWindowLocation = Math.max(cursor - 2, 0);\n\t}\n\n\tconst shouldRenderTopEllipsis = maxItems < options.length && slidingWindowLocation > 0;\n\tconst shouldRenderBottomEllipsis =\n\t\tmaxItems < options.length && slidingWindowLocation + maxItems < options.length;\n\n\treturn options\n\t\t.slice(slidingWindowLocation, slidingWindowLocation + maxItems)\n\t\t.map((option, i, arr) => {\n\t\t\tconst isTopLimit = i === 0 && shouldRenderTopEllipsis;\n\t\t\tconst isBottomLimit = i === arr.length - 1 && shouldRenderBottomEllipsis;\n\t\t\treturn isTopLimit || isBottomLimit\n\t\t\t\t? color.dim('...')\n\t\t\t\t: style(option, i + slidingWindowLocation === cursor);\n\t\t});\n};\n\nexport interface TextOptions {\n\tmessage: string;\n\tplaceholder?: string;\n\tdefaultValue?: string;\n\tinitialValue?: string;\n\tvalidate?: (value: string) => string | Error | undefined;\n}\nexport const text = (opts: TextOptions) => {\n\treturn new TextPrompt({\n\t\tvalidate: opts.validate,\n\t\tplaceholder: opts.placeholder,\n\t\tdefaultValue: opts.defaultValue,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst placeholder = opts.placeholder\n\t\t\t\t? color.inverse(opts.placeholder[0]) + color.dim(opts.placeholder.slice(1))\n\t\t\t\t: color.inverse(color.hidden('_'));\n\t\t\tconst value = !this.value ? placeholder : this.valueWithCursor;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'error':\n\t\t\t\t\treturn `${title.trim()}\\n${color.yellow(S_BAR)} ${value}\\n${color.yellow(\n\t\t\t\t\t\tS_BAR_END\n\t\t\t\t\t)} ${color.yellow(this.error)}\\n`;\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(this.value || opts.placeholder)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(\n\t\t\t\t\t\tcolor.dim(this.value ?? '')\n\t\t\t\t\t)}${this.value?.trim() ? `\\n${color.gray(S_BAR)}` : ''}`;\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${value}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<string | symbol>;\n};\n\nexport interface PasswordOptions {\n\tmessage: string;\n\tmask?: string;\n\tvalidate?: (value: string) => string | Error | undefined;\n}\nexport const password = (opts: PasswordOptions) => {\n\treturn new PasswordPrompt({\n\t\tvalidate: opts.validate,\n\t\tmask: opts.mask ?? S_PASSWORD_MASK,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst value = this.valueWithCursor;\n\t\t\tconst masked = this.masked;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'error':\n\t\t\t\t\treturn `${title.trim()}\\n${color.yellow(S_BAR)} ${masked}\\n${color.yellow(\n\t\t\t\t\t\tS_BAR_END\n\t\t\t\t\t)} ${color.yellow(this.error)}\\n`;\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(masked)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(color.dim(masked ?? ''))}${\n\t\t\t\t\t\tmasked ? `\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${value}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<string | symbol>;\n};\n\nexport interface ConfirmOptions {\n\tmessage: string;\n\tactive?: string;\n\tinactive?: string;\n\tinitialValue?: boolean;\n}\nexport const confirm = (opts: ConfirmOptions) => {\n\tconst active = opts.active ?? 'Yes';\n\tconst inactive = opts.inactive ?? 'No';\n\treturn new ConfirmPrompt({\n\t\tactive,\n\t\tinactive,\n\t\tinitialValue: opts.initialValue ?? true,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst value = this.value ? active : inactive;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(value)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(\n\t\t\t\t\t\tcolor.dim(value)\n\t\t\t\t\t)}\\n${color.gray(S_BAR)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${\n\t\t\t\t\t\tthis.value\n\t\t\t\t\t\t\t? `${color.green(S_RADIO_ACTIVE)} ${active}`\n\t\t\t\t\t\t\t: `${color.dim(S_RADIO_INACTIVE)} ${color.dim(active)}`\n\t\t\t\t\t} ${color.dim('/')} ${\n\t\t\t\t\t\t!this.value\n\t\t\t\t\t\t\t? `${color.green(S_RADIO_ACTIVE)} ${inactive}`\n\t\t\t\t\t\t\t: `${color.dim(S_RADIO_INACTIVE)} ${color.dim(inactive)}`\n\t\t\t\t\t}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<boolean | symbol>;\n};\n\ntype Primitive = Readonly<string | boolean | number>;\n\nexport type Option<Value> = Value extends Primitive\n\t? {\n\t\t\t/**\n\t\t\t * Internal data for this option.\n\t\t\t */\n\t\t\tvalue: Value;\n\t\t\t/**\n\t\t\t * The optional, user-facing text for this option.\n\t\t\t *\n\t\t\t * By default, the `value` is converted to a string.\n\t\t\t */\n\t\t\tlabel?: string;\n\t\t\t/**\n\t\t\t * An optional hint to display to the user when\n\t\t\t * this option might be selected.\n\t\t\t *\n\t\t\t * By default, no `hint` is displayed.\n\t\t\t */\n\t\t\thint?: string;\n\t\t}\n\t: {\n\t\t\t/**\n\t\t\t * Internal data for this option.\n\t\t\t */\n\t\t\tvalue: Value;\n\t\t\t/**\n\t\t\t * Required. The user-facing text for this option.\n\t\t\t */\n\t\t\tlabel: string;\n\t\t\t/**\n\t\t\t * An optional hint to display to the user when\n\t\t\t * this option might be selected.\n\t\t\t *\n\t\t\t * By default, no `hint` is displayed.\n\t\t\t */\n\t\t\thint?: string;\n\t\t};\n\nexport interface SelectOptions<Value> {\n\tmessage: string;\n\toptions: Option<Value>[];\n\tinitialValue?: Value;\n\tmaxItems?: number;\n}\n\nexport const select = <Value>(opts: SelectOptions<Value>) => {\n\tconst opt = (option: Option<Value>, state: 'inactive' | 'active' | 'selected' | 'cancelled') => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tswitch (state) {\n\t\t\tcase 'selected':\n\t\t\t\treturn `${color.dim(label)}`;\n\t\t\tcase 'active':\n\t\t\t\treturn `${color.green(S_RADIO_ACTIVE)} ${label} ${\n\t\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t\t}`;\n\t\t\tcase 'cancelled':\n\t\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t\tdefault:\n\t\t\t\treturn `${color.dim(S_RADIO_INACTIVE)} ${color.dim(label)}`;\n\t\t}\n\t};\n\n\treturn new SelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(this.options[this.cursor], 'selected')}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(\n\t\t\t\t\t\tthis.options[this.cursor],\n\t\t\t\t\t\t'cancelled'\n\t\t\t\t\t)}\\n${color.gray(S_BAR)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${limitOptions({\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: (item, active) => opt(item, active ? 'active' : 'inactive'),\n\t\t\t\t\t}).join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value | symbol>;\n};\n\nexport const selectKey = <Value extends string>(opts: SelectOptions<Value>) => {\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate: 'inactive' | 'active' | 'selected' | 'cancelled' = 'inactive'\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tif (state === 'selected') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active') {\n\t\t\treturn `${color.bgCyan(color.gray(` ${option.value} `))} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\treturn `${color.gray(color.bgWhite(color.inverse(` ${option.value} `)))} ${label} ${\n\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t}`;\n\t};\n\n\treturn new SelectKeyPrompt({\n\t\toptions: opts.options,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(\n\t\t\t\t\t\tthis.options.find((opt) => opt.value === this.value) ?? opts.options[0],\n\t\t\t\t\t\t'selected'\n\t\t\t\t\t)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(this.options[0], 'cancelled')}\\n${color.gray(\n\t\t\t\t\t\tS_BAR\n\t\t\t\t\t)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i) => opt(option, i === this.cursor ? 'active' : 'inactive'))\n\t\t\t\t\t\t.join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value | symbol>;\n};\n\nexport interface MultiSelectOptions<Value> {\n\tmessage: string;\n\toptions: Option<Value>[];\n\tinitialValues?: Value[];\n\tmaxItems?: number;\n\trequired?: boolean;\n\tcursorAt?: Value;\n}\nexport const multiselect = <Value>(opts: MultiSelectOptions<Value>) => {\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate: 'inactive' | 'active' | 'selected' | 'active-selected' | 'submitted' | 'cancelled'\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tif (state === 'active') {\n\t\t\treturn `${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'selected') {\n\t\t\treturn `${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active-selected') {\n\t\t\treturn `${color.green(S_CHECKBOX_SELECTED)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'submitted') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\treturn `${color.dim(S_CHECKBOX_INACTIVE)} ${color.dim(label)}`;\n\t};\n\n\treturn new MultiSelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValues: opts.initialValues,\n\t\trequired: opts.required ?? true,\n\t\tcursorAt: opts.cursorAt,\n\t\tvalidate(selected: Value[]) {\n\t\t\tif (this.required && selected.length === 0)\n\t\t\t\treturn `Please select at least one option.\\n${color.reset(\n\t\t\t\t\tcolor.dim(\n\t\t\t\t\t\t`Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray(\n\t\t\t\t\t\t\tcolor.bgWhite(color.inverse(' enter '))\n\t\t\t\t\t\t)} to submit`\n\t\t\t\t\t)\n\t\t\t\t)}`;\n\t\t},\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tconst styleOption = (option: Option<Value>, active: boolean) => {\n\t\t\t\tconst selected = this.value.includes(option.value);\n\t\t\t\tif (active && selected) {\n\t\t\t\t\treturn opt(option, 'active-selected');\n\t\t\t\t}\n\t\t\t\tif (selected) {\n\t\t\t\t\treturn opt(option, 'selected');\n\t\t\t\t}\n\t\t\t\treturn opt(option, active ? 'active' : 'inactive');\n\t\t\t};\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tthis.options\n\t\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t\t.map((option) => opt(option, 'submitted'))\n\t\t\t\t\t\t\t.join(color.dim(', ')) || color.dim('none')\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst label = this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'cancelled'))\n\t\t\t\t\t\t.join(color.dim(', '));\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tlabel.trim() ? `${label}\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst footer = this.error\n\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t.map((ln, i) =>\n\t\t\t\t\t\t\ti === 0 ? `${color.yellow(S_BAR_END)} ${color.yellow(ln)}` : ` ${ln}`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\treturn `${title + color.yellow(S_BAR)} ${limitOptions({\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: styleOption,\n\t\t\t\t\t}).join(`\\n${color.yellow(S_BAR)} `)}\\n${footer}\\n`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${limitOptions({\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: styleOption,\n\t\t\t\t\t}).join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value[] | symbol>;\n};\n\nexport interface GroupMultiSelectOptions<Value> {\n\tmessage: string;\n\toptions: Record<string, Option<Value>[]>;\n\tinitialValues?: Value[];\n\trequired?: boolean;\n\tcursorAt?: Value;\n\tselectableGroups?: boolean;\n}\nexport const groupMultiselect = <Value>(opts: GroupMultiSelectOptions<Value>) => {\n\tconst { selectableGroups = true } = opts;\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate:\n\t\t\t| 'inactive'\n\t\t\t| 'active'\n\t\t\t| 'selected'\n\t\t\t| 'active-selected'\n\t\t\t| 'group-active'\n\t\t\t| 'group-active-selected'\n\t\t\t| 'submitted'\n\t\t\t| 'cancelled',\n\t\toptions: Option<Value>[] = []\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tconst isItem = typeof (option as any).group === 'string';\n\t\tconst next = isItem && (options[options.indexOf(option) + 1] ?? { group: true });\n\t\tconst isLast = isItem && (next as any).group === true;\n\t\tconst prefix = isItem ? (selectableGroups ? `${isLast ? S_BAR_END : S_BAR} ` : ' ') : '';\n\n\t\tif (state === 'active') {\n\t\t\treturn `${color.dim(prefix)}${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'group-active') {\n\t\t\treturn `${prefix}${color.cyan(S_CHECKBOX_ACTIVE)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'group-active-selected') {\n\t\t\treturn `${prefix}${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'selected') {\n\t\t\tconst selectedCheckbox = isItem || selectableGroups ? color.green(S_CHECKBOX_SELECTED) : '';\n\t\t\treturn `${color.dim(prefix)}${selectedCheckbox} ${color.dim(label)} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active-selected') {\n\t\t\treturn `${color.dim(prefix)}${color.green(S_CHECKBOX_SELECTED)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'submitted') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\tconst unselectedCheckbox = isItem || selectableGroups ? color.dim(S_CHECKBOX_INACTIVE) : '';\n\t\treturn `${color.dim(prefix)}${unselectedCheckbox} ${color.dim(label)}`;\n\t};\n\n\treturn new GroupMultiSelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValues: opts.initialValues,\n\t\trequired: opts.required ?? true,\n\t\tcursorAt: opts.cursorAt,\n\t\tselectableGroups,\n\t\tvalidate(selected: Value[]) {\n\t\t\tif (this.required && selected.length === 0)\n\t\t\t\treturn `Please select at least one option.\\n${color.reset(\n\t\t\t\t\tcolor.dim(\n\t\t\t\t\t\t`Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray(\n\t\t\t\t\t\t\tcolor.bgWhite(color.inverse(' enter '))\n\t\t\t\t\t\t)} to submit`\n\t\t\t\t\t)\n\t\t\t\t)}`;\n\t\t},\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'submitted'))\n\t\t\t\t\t\t.join(color.dim(', '))}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst label = this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'cancelled'))\n\t\t\t\t\t\t.join(color.dim(', '));\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tlabel.trim() ? `${label}\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst footer = this.error\n\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t.map((ln, i) =>\n\t\t\t\t\t\t\ti === 0 ? `${color.yellow(S_BAR_END)} ${color.yellow(ln)}` : ` ${ln}`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\treturn `${title}${color.yellow(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i, options) => {\n\t\t\t\t\t\t\tconst selected =\n\t\t\t\t\t\t\t\tthis.value.includes(option.value) ||\n\t\t\t\t\t\t\t\t(option.group === true && this.isGroupSelected(`${option.value}`));\n\t\t\t\t\t\t\tconst active = i === this.cursor;\n\t\t\t\t\t\t\tconst groupActive =\n\t\t\t\t\t\t\t\t!active &&\n\t\t\t\t\t\t\t\ttypeof option.group === 'string' &&\n\t\t\t\t\t\t\t\tthis.options[this.cursor].value === option.group;\n\t\t\t\t\t\t\tif (groupActive) {\n\t\t\t\t\t\t\t\treturn opt(option, selected ? 'group-active-selected' : 'group-active', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (active && selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'active-selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn opt(option, active ? 'active' : 'inactive', options);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(`\\n${color.yellow(S_BAR)} `)}\\n${footer}\\n`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i, options) => {\n\t\t\t\t\t\t\tconst selected =\n\t\t\t\t\t\t\t\tthis.value.includes(option.value) ||\n\t\t\t\t\t\t\t\t(option.group === true && this.isGroupSelected(`${option.value}`));\n\t\t\t\t\t\t\tconst active = i === this.cursor;\n\t\t\t\t\t\t\tconst groupActive =\n\t\t\t\t\t\t\t\t!active &&\n\t\t\t\t\t\t\t\ttypeof option.group === 'string' &&\n\t\t\t\t\t\t\t\tthis.options[this.cursor].value === option.group;\n\t\t\t\t\t\t\tif (groupActive) {\n\t\t\t\t\t\t\t\treturn opt(option, selected ? 'group-active-selected' : 'group-active', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (active && selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'active-selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn opt(option, active ? 'active' : 'inactive', options);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value[] | symbol>;\n};\n\nexport const note = (message = '', title = '') => {\n\tconst lines = `\\n${message}\\n`.split('\\n');\n\tconst titleLen = strip(title).length;\n\tconst len =\n\t\tMath.max(\n\t\t\tlines.reduce((sum, ln) => {\n\t\t\t\tconst line = strip(ln);\n\t\t\t\treturn line.length > sum ? line.length : sum;\n\t\t\t}, 0),\n\t\t\ttitleLen\n\t\t) + 2;\n\tconst msg = lines\n\t\t.map(\n\t\t\t(ln) =>\n\t\t\t\t`${color.gray(S_BAR)} ${color.dim(ln)}${' '.repeat(len - strip(ln).length)}${color.gray(\n\t\t\t\t\tS_BAR\n\t\t\t\t)}`\n\t\t)\n\t\t.join('\\n');\n\tprocess.stdout.write(\n\t\t`${color.gray(S_BAR)}\\n${color.green(S_STEP_SUBMIT)} ${color.reset(title)} ${color.gray(\n\t\t\tS_BAR_H.repeat(Math.max(len - titleLen - 1, 1)) + S_CORNER_TOP_RIGHT\n\t\t)}\\n${msg}\\n${color.gray(S_CONNECT_LEFT + S_BAR_H.repeat(len + 2) + S_CORNER_BOTTOM_RIGHT)}\\n`\n\t);\n};\n\nexport const cancel = (message = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR_END)} ${color.red(message)}\\n\\n`);\n};\n\nexport const intro = (title = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR_START)} ${title}\\n`);\n};\n\nexport const outro = (message = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR)}\\n${color.gray(S_BAR_END)} ${message}\\n\\n`);\n};\n\nexport type LogMessageOptions = {\n\tsymbol?: string;\n};\nexport const log = {\n\tmessage: (message = '', { symbol = color.gray(S_BAR) }: LogMessageOptions = {}) => {\n\t\tconst parts = [`${color.gray(S_BAR)}`];\n\t\tif (message) {\n\t\t\tconst [firstLine, ...lines] = message.split('\\n');\n\t\t\tparts.push(`${symbol} ${firstLine}`, ...lines.map((ln) => `${color.gray(S_BAR)} ${ln}`));\n\t\t}\n\t\tprocess.stdout.write(`${parts.join('\\n')}\\n`);\n\t},\n\tinfo: (message: string) => {\n\t\tlog.message(message, { symbol: color.blue(S_INFO) });\n\t},\n\tsuccess: (message: string) => {\n\t\tlog.message(message, { symbol: color.green(S_SUCCESS) });\n\t},\n\tstep: (message: string) => {\n\t\tlog.message(message, { symbol: color.green(S_STEP_SUBMIT) });\n\t},\n\twarn: (message: string) => {\n\t\tlog.message(message, { symbol: color.yellow(S_WARN) });\n\t},\n\t/** alias for `log.warn()`. */\n\twarning: (message: string) => {\n\t\tlog.warn(message);\n\t},\n\terror: (message: string) => {\n\t\tlog.message(message, { symbol: color.red(S_ERROR) });\n\t},\n};\n\nconst prefix = `${color.gray(S_BAR)} `;\nexport const stream = {\n\tmessage: async (\n\t\titerable: Iterable<string> | AsyncIterable<string>,\n\t\t{ symbol = color.gray(S_BAR) }: LogMessageOptions = {}\n\t) => {\n\t\tprocess.stdout.write(`${color.gray(S_BAR)}\\n${symbol} `);\n\t\tlet lineWidth = 3;\n\t\tfor await (let chunk of iterable) {\n\t\t\tchunk = chunk.replace(/\\n/g, `\\n${prefix}`);\n\t\t\tif (chunk.includes('\\n')) {\n\t\t\t\tlineWidth = 3 + strip(chunk.slice(chunk.lastIndexOf('\\n'))).length;\n\t\t\t}\n\t\t\tconst chunkLen = strip(chunk).length;\n\t\t\tif (lineWidth + chunkLen < process.stdout.columns) {\n\t\t\t\tlineWidth += chunkLen;\n\t\t\t\tprocess.stdout.write(chunk);\n\t\t\t} else {\n\t\t\t\tprocess.stdout.write(`\\n${prefix}${chunk.trimStart()}`);\n\t\t\t\tlineWidth = 3 + strip(chunk.trimStart()).length;\n\t\t\t}\n\t\t}\n\t\tprocess.stdout.write('\\n');\n\t},\n\tinfo: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.blue(S_INFO) });\n\t},\n\tsuccess: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.green(S_SUCCESS) });\n\t},\n\tstep: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.green(S_STEP_SUBMIT) });\n\t},\n\twarn: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.yellow(S_WARN) });\n\t},\n\t/** alias for `log.warn()`. */\n\twarning: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.warn(iterable);\n\t},\n\terror: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.red(S_ERROR) });\n\t},\n};\n\nexport interface SpinnerOptions {\n\tindicator?: 'dots' | 'timer';\n}\n\nexport const spinner = ({ indicator = 'dots' }: SpinnerOptions = {}) => {\n\tconst frames = unicode ? ['◒', '◐', '◓', '◑'] : ['•', 'o', 'O', '0'];\n\tconst delay = unicode ? 80 : 120;\n\tconst isCI = process.env.CI === 'true';\n\n\tlet unblock: () => void;\n\tlet loop: NodeJS.Timeout;\n\tlet isSpinnerActive = false;\n\tlet _message = '';\n\tlet _prevMessage: string | undefined = undefined;\n\tlet _origin: number = performance.now();\n\n\tconst handleExit = (code: number) => {\n\t\tconst msg = code > 1 ? 'Something went wrong' : 'Canceled';\n\t\tif (isSpinnerActive) stop(msg, code);\n\t};\n\n\tconst errorEventHandler = () => handleExit(2);\n\tconst signalEventHandler = () => handleExit(1);\n\n\tconst registerHooks = () => {\n\t\t// Reference: https://nodejs.org/api/process.html#event-uncaughtexception\n\t\tprocess.on('uncaughtExceptionMonitor', errorEventHandler);\n\t\t// Reference: https://nodejs.org/api/process.html#event-unhandledrejection\n\t\tprocess.on('unhandledRejection', errorEventHandler);\n\t\t// Reference Signal Events: https://nodejs.org/api/process.html#signal-events\n\t\tprocess.on('SIGINT', signalEventHandler);\n\t\tprocess.on('SIGTERM', signalEventHandler);\n\t\tprocess.on('exit', handleExit);\n\t};\n\n\tconst clearHooks = () => {\n\t\tprocess.removeListener('uncaughtExceptionMonitor', errorEventHandler);\n\t\tprocess.removeListener('unhandledRejection', errorEventHandler);\n\t\tprocess.removeListener('SIGINT', signalEventHandler);\n\t\tprocess.removeListener('SIGTERM', signalEventHandler);\n\t\tprocess.removeListener('exit', handleExit);\n\t};\n\n\tconst clearPrevMessage = () => {\n\t\tif (_prevMessage === undefined) return;\n\t\tif (isCI) process.stdout.write('\\n');\n\t\tconst prevLines = _prevMessage.split('\\n');\n\t\tprocess.stdout.write(cursor.move(-999, prevLines.length - 1));\n\t\tprocess.stdout.write(erase.down(prevLines.length));\n\t};\n\n\tconst parseMessage = (msg: string): string => {\n\t\treturn msg.replace(/\\.+$/, '');\n\t};\n\n\tconst formatTimer = (origin: number): string => {\n\t\tconst duration = (performance.now() - origin) / 1000;\n\t\tconst min = Math.floor(duration / 60);\n\t\tconst secs = Math.floor(duration % 60);\n\t\treturn min > 0 ? `[${min}m ${secs}s]` : `[${secs}s]`;\n\t};\n\n\tconst start = (msg = ''): void => {\n\t\tisSpinnerActive = true;\n\t\tunblock = block();\n\t\t_message = parseMessage(msg);\n\t\t_origin = performance.now();\n\t\tprocess.stdout.write(`${color.gray(S_BAR)}\\n`);\n\t\tlet frameIndex = 0;\n\t\tlet indicatorTimer = 0;\n\t\tregisterHooks();\n\t\tloop = setInterval(() => {\n\t\t\tif (isCI && _message === _prevMessage) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tclearPrevMessage();\n\t\t\t_prevMessage = _message;\n\t\t\tconst frame = color.magenta(frames[frameIndex]);\n\n\t\t\tif (isCI) {\n\t\t\t\tprocess.stdout.write(`${frame} ${_message}...`);\n\t\t\t} else if (indicator === 'timer') {\n\t\t\t\tprocess.stdout.write(`${frame} ${_message} ${formatTimer(_origin)}`);\n\t\t\t} else {\n\t\t\t\tconst loadingDots = '.'.repeat(Math.floor(indicatorTimer)).slice(0, 3);\n\t\t\t\tprocess.stdout.write(`${frame} ${_message}${loadingDots}`);\n\t\t\t}\n\n\t\t\tframeIndex = frameIndex + 1 < frames.length ? frameIndex + 1 : 0;\n\t\t\tindicatorTimer = indicatorTimer < frames.length ? indicatorTimer + 0.125 : 0;\n\t\t}, delay);\n\t};\n\n\tconst stop = (msg = '', code = 0): void => {\n\t\tisSpinnerActive = false;\n\t\tclearInterval(loop);\n\t\tclearPrevMessage();\n\t\tconst step =\n\t\t\tcode === 0\n\t\t\t\t? color.green(S_STEP_SUBMIT)\n\t\t\t\t: code === 1\n\t\t\t\t\t? color.red(S_STEP_CANCEL)\n\t\t\t\t\t: color.red(S_STEP_ERROR);\n\t\t_message = parseMessage(msg ?? _message);\n\t\tif (indicator === 'timer') {\n\t\t\tprocess.stdout.write(`${step} ${_message} ${formatTimer(_origin)}\\n`);\n\t\t} else {\n\t\t\tprocess.stdout.write(`${step} ${_message}\\n`);\n\t\t}\n\t\tclearHooks();\n\t\tunblock();\n\t};\n\n\tconst message = (msg = ''): void => {\n\t\t_message = parseMessage(msg ?? _message);\n\t};\n\n\treturn {\n\t\tstart,\n\t\tstop,\n\t\tmessage,\n\t};\n};\n\nexport type PromptGroupAwaitedReturn<T> = {\n\t[P in keyof T]: Exclude<Awaited<T[P]>, symbol>;\n};\n\nexport interface PromptGroupOptions<T> {\n\t/**\n\t * Control how the group can be canceled\n\t * if one of the prompts is canceled.\n\t */\n\tonCancel?: (opts: { results: Prettify<Partial<PromptGroupAwaitedReturn<T>>> }) => void;\n}\n\ntype Prettify<T> = {\n\t[P in keyof T]: T[P];\n} & {};\n\nexport type PromptGroup<T> = {\n\t[P in keyof T]: (opts: {\n\t\tresults: Prettify<Partial<PromptGroupAwaitedReturn<Omit<T, P>>>>;\n\t}) => undefined | Promise<T[P] | undefined>;\n};\n\n/**\n * Define a group of prompts to be displayed\n * and return a results of objects within the group\n */\nexport const group = async <T>(\n\tprompts: PromptGroup<T>,\n\topts?: PromptGroupOptions<T>\n): Promise<Prettify<PromptGroupAwaitedReturn<T>>> => {\n\tconst results = {} as any;\n\tconst promptNames = Object.keys(prompts);\n\n\tfor (const name of promptNames) {\n\t\tconst prompt = prompts[name as keyof T];\n\t\tconst result = await prompt({ results })?.catch((e) => {\n\t\t\tthrow e;\n\t\t});\n\n\t\t// Pass the results to the onCancel function\n\t\t// so the user can decide what to do with the results\n\t\t// TODO: Switch to callback within core to avoid isCancel Fn\n\t\tif (typeof opts?.onCancel === 'function' && isCancel(result)) {\n\t\t\tresults[name] = 'canceled';\n\t\t\topts.onCancel({ results });\n\t\t\tcontinue;\n\t\t}\n\n\t\tresults[name] = result;\n\t}\n\n\treturn results;\n};\n\nexport type Task = {\n\t/**\n\t * Task title\n\t */\n\ttitle: string;\n\t/**\n\t * Task function\n\t */\n\ttask: (message: (string: string) => void) => string | Promise<string> | void | Promise<void>;\n\n\t/**\n\t * If enabled === false the task will be skipped\n\t */\n\tenabled?: boolean;\n};\n\n/**\n * Define a group of tasks to be executed\n */\nexport const tasks = async (tasks: Task[]) => {\n\tfor (const task of tasks) {\n\t\tif (task.enabled === false) continue;\n\n\t\tconst s = spinner();\n\t\ts.start(task.title);\n\t\tconst result = await task.task(s.message);\n\t\ts.stop(result || task.title);\n\t}\n};\n", "#!/usr/bin/env node\n\nimport {\n\tcancel,\n\tconfirm,\n\tintro,\n\tisCancel,\n\tlog,\n\tselect,\n\tspinner,\n\ttext,\n} from \"@clack/prompts\";\nimport { execFileSync } from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport { dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport {\n\tbuildGoGetCommandArgs,\n\tbuildGoModInitCommandArgs,\n\tbuildGoModReplaceCommandArgs,\n\tbuildGoRunCommandArgs,\n\tisGoVersionAtLeast,\n\tisNodeVersionAtLeast,\n\tparseGoVersionOrNull,\n} from \"./runtime_helpers.js\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nasync function main() {\n\tconst args = process.argv.slice(2);\n\tconst isLocalTest = args.includes(\"--local-test\");\n\n\tconsole.log();\n\tintro(\"Welcome to the Vorma new app creator!\");\n\n\t// Check Go installation\n\tlet goVersion = \"\";\n\tlet parsedGoVersion: ReturnType<typeof parseGoVersionOrNull> = null;\n\ttry {\n\t\tgoVersion = execFileSync(\"go\", [\"version\"], {\n\t\t\tencoding: \"utf8\",\n\t\t}).trim();\n\t\tparsedGoVersion = parseGoVersionOrNull(goVersion);\n\t\tif (!parsedGoVersion) {\n\t\t\tcancel(\n\t\t\t\t\"Go version not recognized. Please ensure Go is installed correctly. See https://go.dev/doc/install for installation instructions.\",\n\t\t\t);\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tif (\n\t\t\t!isGoVersionAtLeast({\n\t\t\t\tgoVersionOutput: goVersion,\n\t\t\t\tminimumMajor: 1,\n\t\t\t\tminimumMinor: 24,\n\t\t\t})\n\t\t) {\n\t\t\tcancel(\n\t\t\t\t\"Go version 1.24 or higher is required. See https://go.dev/doc/install for installation instructions.\",\n\t\t\t);\n\t\t\tprocess.exit(1);\n\t\t}\n\t} catch {\n\t\tcancel(\n\t\t\t\"Go is not installed. See https://go.dev/doc/install for installation instructions.\",\n\t\t);\n\t\tprocess.exit(1);\n\t}\n\n\t// Check Node version\n\tconst nodeVersion = process.version;\n\tif (\n\t\t!isNodeVersionAtLeast({\n\t\t\tnodeVersion,\n\t\t\tminimumMajor: 22,\n\t\t\tminimumMinor: 11,\n\t\t})\n\t) {\n\t\tcancel(\n\t\t\t\"Node.js version 22.11 or higher is required. Please ensure Node.js is installed correctly.\",\n\t\t);\n\t\tprocess.exit(1);\n\t}\n\tconst nodeMajorVersionMatch = nodeVersion.match(/^v(\\d+)\\./);\n\tconst nodeMajor = Number.parseInt(nodeMajorVersionMatch?.[1] || \"\", 10);\n\n\t// Option to create a new directory at start if not already in desired location\n\tconst createNewDir = await confirm({\n\t\tmessage: \"Create a new directory for your Vorma app?\",\n\t\tinitialValue: true,\n\t});\n\n\tif (isCancel(createNewDir)) {\n\t\tcancel(\"Operation cancelled\");\n\t\tprocess.exit(0);\n\t}\n\n\tlet targetDir = process.cwd();\n\n\tif (createNewDir) {\n\t\tconst dirName = await text({\n\t\t\tmessage: \"Enter directory name:\",\n\t\t\tvalidate: (value) => {\n\t\t\t\tif (!value || value.trim() === \"\")\n\t\t\t\t\treturn \"Directory name is required\";\n\t\t\t\t// Check for invalid characters in directory name\n\t\t\t\tif (!/^[a-zA-Z0-9-_]+$/.test(value)) {\n\t\t\t\t\treturn \"Directory name can only contain letters, numbers, hyphens, and underscores\";\n\t\t\t\t}\n\t\t\t\t// Check if directory already exists\n\t\t\t\tconst proposedPath = path.join(process.cwd(), value);\n\t\t\t\tif (fs.existsSync(proposedPath)) {\n\t\t\t\t\treturn `Directory \"${value}\" already exists`;\n\t\t\t\t}\n\t\t\t\treturn undefined;\n\t\t\t},\n\t\t});\n\n\t\tif (isCancel(dirName)) {\n\t\t\tcancel(\"Operation cancelled\");\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\t// Create the directory and change to it\n\t\ttargetDir = path.join(process.cwd(), dirName as string);\n\t\tfs.mkdirSync(targetDir, { recursive: true });\n\t\tprocess.chdir(targetDir);\n\t\tlog.success(`Created directory: ${dirName}`);\n\t}\n\n\t// Find go.mod and determine import path\n\tlet goModPath: string | null = null;\n\tlet moduleRoot: string | null = null;\n\tlet moduleName: string | null = null;\n\tlet createNewModule = false;\n\n\t// Search for go.mod\n\tlet currentDir = process.cwd();\n\twhile (currentDir !== path.dirname(currentDir)) {\n\t\tconst modPath = path.join(currentDir, \"go.mod\");\n\t\tif (fs.existsSync(modPath)) {\n\t\t\tgoModPath = modPath;\n\t\t\tmoduleRoot = currentDir;\n\t\t\tbreak;\n\t\t}\n\t\tcurrentDir = path.dirname(currentDir);\n\t}\n\n\t// Parse module name if found\n\tif (goModPath) {\n\t\tconst modContent = fs.readFileSync(goModPath, \"utf8\");\n\t\tconst moduleMatch = modContent.match(/^module\\s+(.+)$/m);\n\t\tif (moduleMatch && moduleMatch[1]) {\n\t\t\tmoduleName = moduleMatch[1].trim();\n\t\t}\n\n\t\t// When module is found, give option to use it or create nested module\n\t\tconst moduleChoice = await select({\n\t\t\tmessage: `Found parent Go module: ${moduleName}`,\n\t\t\toptions: [\n\t\t\t\t{ value: \"new\", label: \"Create new go.mod\" },\n\t\t\t\t{ value: \"use\", label: \"Use parent go.mod\" },\n\t\t\t],\n\t\t});\n\n\t\tif (isCancel(moduleChoice)) {\n\t\t\tcancel(\"Operation cancelled\");\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tif (moduleChoice === \"new\") {\n\t\t\tcreateNewModule = true;\n\t\t\t// Reset module info since we're creating a new one\n\t\t\tgoModPath = null;\n\t\t\tmoduleRoot = null;\n\t\t\tmoduleName = null;\n\t\t}\n\t} else {\n\t\t// No module found, we need to create one\n\t\tcreateNewModule = true;\n\t}\n\n\t// Handle go.mod initialization if needed\n\tif (createNewModule) {\n\t\tconst modNameInput = await text({\n\t\t\tmessage:\n\t\t\t\t'Enter module name (e.g., \"myapp\" or \"github.com/user/myapp\"):',\n\t\t\tvalidate: (value) => {\n\t\t\t\tif (!value || value.trim() === \"\")\n\t\t\t\t\treturn \"Module name is required\";\n\t\t\t\treturn undefined;\n\t\t\t},\n\t\t});\n\n\t\tif (isCancel(modNameInput)) {\n\t\t\tcancel(\"Operation cancelled\");\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tmoduleName = modNameInput as string;\n\t\tmoduleRoot = process.cwd();\n\n\t\tconst s = spinner();\n\t\ts.start(\"Initializing Go module\");\n\t\ttry {\n\t\t\texecFileSync(\"go\", buildGoModInitCommandArgs(moduleName), {\n\t\t\t\tcwd: moduleRoot,\n\t\t\t});\n\t\t\tif (isLocalTest) {\n\t\t\t\tconst vormaPath = path.resolve(__dirname, \"../../../../../\");\n\t\t\t\texecFileSync(\"go\", buildGoModReplaceCommandArgs(vormaPath), {\n\t\t\t\t\tcwd: moduleRoot,\n\t\t\t\t});\n\t\t\t\tlog.info(\"Using local Vorma code for testing\");\n\t\t\t}\n\t\t\ts.stop(\"Go module initialized\");\n\t\t} catch (error) {\n\t\t\ts.stop(\"Failed to initialize module\");\n\t\t\tcancel(`Error: ${error}`);\n\t\t\tprocess.exit(1);\n\t\t}\n\t}\n\n\t// Check for underscore directories from module root to current directory\n\tconst pathFromModuleRoot = moduleRoot\n\t\t? path.relative(moduleRoot, process.cwd())\n\t\t: \"\";\n\tconst pathSegments = pathFromModuleRoot\n\t\t.split(path.sep)\n\t\t.filter((seg) => seg.length > 0);\n\tconst underscoreSegments = pathSegments.filter((seg) =>\n\t\tseg.startsWith(\"_\"),\n\t);\n\tif (underscoreSegments.length > 0) {\n\t\tcancel(\n\t\t\t`Cannot create Vorma app in a path containing directories that start with underscores:\\n ${underscoreSegments.join(\", \")}\\n` +\n\t\t\t\t` Go ignores directories starting with underscores, which will cause build issues.`,\n\t\t);\n\t\tprocess.exit(1);\n\t}\n\n\t// Calculate import path automatically\n\tlet importPath = moduleName!;\n\tif (moduleRoot !== process.cwd()) {\n\t\tconst relativePath = path.relative(moduleRoot!, process.cwd());\n\t\timportPath = path.posix.join(\n\t\t\tmoduleName!,\n\t\t\t...relativePath.split(path.sep),\n\t\t);\n\t}\n\n\t// Collect options\n\tconst uiVariant = await select({\n\t\tmessage: \"Choose frontend UI library:\",\n\t\toptions: [\n\t\t\t{ value: \"react\", label: \"React\" },\n\t\t\t{ value: \"preact\", label: \"Preact\" },\n\t\t\t{ value: \"solid\", label: \"Solid\" },\n\t\t],\n\t});\n\n\tif (isCancel(uiVariant)) {\n\t\tcancel(\"Operation cancelled\");\n\t\tprocess.exit(0);\n\t}\n\n\tconst packageManager = (await select({\n\t\tmessage: \"Choose JS package manager:\",\n\t\toptions: [\n\t\t\t{ value: \"npm\", label: \"npm\" },\n\t\t\t{ value: \"pnpm\", label: \"pnpm\" },\n\t\t\t{ value: \"yarn\", label: \"yarn\" },\n\t\t\t{ value: \"bun\", label: \"bun\" },\n\t\t],\n\t})) as string;\n\n\tif (isCancel(packageManager)) {\n\t\tcancel(\"Operation cancelled\");\n\t\tprocess.exit(0);\n\t}\n\n\tconst deploymentTarget = await select({\n\t\tmessage: \"Choose deployment target:\",\n\t\toptions: [\n\t\t\t{\n\t\t\t\tvalue: \"docker\",\n\t\t\t\tlabel: \"Docker\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: \"vercel\",\n\t\t\t\tlabel: \"Vercel\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: \"none\",\n\t\t\t\tlabel: \"None (I'll figure it out myself)\",\n\t\t\t},\n\t\t],\n\t});\n\n\tif (isCancel(deploymentTarget)) {\n\t\tcancel(\"Operation cancelled\");\n\t\tprocess.exit(0);\n\t}\n\n\t// Ask about Tailwind CSS\n\tconst includeTailwind = await confirm({\n\t\tmessage: \"Include Tailwind CSS?\",\n\t\tinitialValue: false,\n\t});\n\n\tif (isCancel(includeTailwind)) {\n\t\tcancel(\"Operation cancelled\");\n\t\tprocess.exit(0);\n\t}\n\n\tconsole.log();\n\tconsole.log(\"\uD83D\uDEE0\uFE0F Preparing bootstrapper...\");\n\n\t// Create temporary directory\n\tconst tempDir = fs.mkdtempSync(path.join(os.tmpdir(), \"create-vorma-\"));\n\tconst bootstrapFile = path.join(tempDir, \"main.go\");\n\n\tconst goVersionString = parsedGoVersion?.normalizedVersion || \"\";\n\n\ttry {\n\t\t// Write bootstrap Go file\n\t\tconst goCode = `package main\n\nimport \"github.com/vormadev/vorma/bootstrap\"\n\nfunc main() {\n\tbootstrap.Init(bootstrap.Options{\n\t\tGoImportBase: \"${importPath}\",\n\t\tUIVariant: \"${uiVariant}\",\n\t\tJSPackageManager: \"${packageManager}\",\n\t\tDeploymentTarget: \"${deploymentTarget}\",\n\t\tIncludeTailwind: ${includeTailwind},\n\t\tNodeMajorVersion: \"${nodeMajor}\",\n\t\tGoVersion: \"${goVersionString}\",\n\t\t${createNewDir ? `CreatedInDir: \"${path.basename(targetDir)}\",` : \"\"}\n\t\tModuleRoot: \"${moduleRoot || process.cwd()}\",\n\t\tCurrentDir: \"${process.cwd()}\",\n\t\tHasParentModule: ${moduleRoot !== null && moduleRoot !== process.cwd()},\n\t})\n}\n`;\n\t\tfs.writeFileSync(bootstrapFile, goCode);\n\n\t\t// Install Vorma dependency\n\t\tconst packageJsonPath = path.join(__dirname, \"../package.json\");\n\t\tconst packageJson = JSON.parse(\n\t\t\tfs.readFileSync(packageJsonPath, \"utf8\"),\n\t\t);\n\t\tconst version = packageJson.version;\n\t\tconst usingExistingModule = !createNewModule;\n\t\tconst skipVormaGet = isLocalTest && usingExistingModule;\n\t\tif (!skipVormaGet) {\n\t\t\texecFileSync(\"go\", buildGoGetCommandArgs(version), {\n\t\t\t\tcwd: process.cwd(),\n\t\t\t\tstdio: \"pipe\",\n\t\t\t});\n\t\t}\n\n\t\t// Run bootstrap\n\t\tconsole.log(\"\uD83D\uDEE0\uFE0F Running bootstrapper...\");\n\t\ttry {\n\t\t\texecFileSync(\"go\", buildGoRunCommandArgs(bootstrapFile), {\n\t\t\t\tcwd: process.cwd(),\n\t\t\t\tstdio: \"inherit\",\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Failed to create app\");\n\t\t\tthrow error;\n\t\t}\n\t} catch (error) {\n\t\tcancel(`Error: ${error}`);\n\t\tprocess.exit(1);\n\t} finally {\n\t\t// Clean up temp directory\n\t\ttry {\n\t\t\tfs.rmSync(tempDir, { recursive: true, force: true });\n\t\t} catch {\n\t\t\t// Ignore cleanup errors\n\t\t}\n\t}\n}\n\nmain().catch((error) => {\n\tconsole.error(\"Unexpected error:\", error);\n\tprocess.exit(1);\n});\n", "export type ParsedNodeVersion = {\n\tmajor: number;\n\tminor: number;\n\tpatch: number;\n};\n\nexport type ParsedGoVersion = {\n\tmajor: number;\n\tminor: number;\n\tpatch: number;\n\tnormalizedVersion: string;\n};\n\ntype ParsedMajorMinorPatchVersion = {\n\tmajor: number;\n\tminor: number;\n\tpatch: number;\n};\n\nfunction parseMajorMinorPatchVersionFromRegexMatch(props: {\n\tmatch: RegExpMatchArray | null;\n\tallowMissingPatch: boolean;\n}): ParsedMajorMinorPatchVersion | null {\n\tconst { match, allowMissingPatch } = props;\n\tif (!match) {\n\t\treturn null;\n\t}\n\n\tconst majorText = match[1];\n\tconst minorText = match[2];\n\tconst patchText = match[3];\n\n\tif (!majorText || !minorText) {\n\t\treturn null;\n\t}\n\n\tconst major = Number.parseInt(majorText, 10);\n\tconst minor = Number.parseInt(minorText, 10);\n\tconst patch = Number.parseInt(\n\t\tpatchText || (allowMissingPatch ? \"0\" : \"\"),\n\t\t10,\n\t);\n\tif (\n\t\t!Number.isFinite(major) ||\n\t\t!Number.isFinite(minor) ||\n\t\t!Number.isFinite(patch)\n\t) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tmajor,\n\t\tminor,\n\t\tpatch,\n\t};\n}\n\nexport function parseNodeVersionOrNull(\n\tnodeVersion: string,\n): ParsedNodeVersion | null {\n\tconst version = parseMajorMinorPatchVersionFromRegexMatch({\n\t\tmatch: nodeVersion.trim().match(/^v(\\d+)\\.(\\d+)\\.(\\d+)$/),\n\t\tallowMissingPatch: false,\n\t});\n\tif (!version) {\n\t\treturn null;\n\t}\n\n\treturn version;\n}\n\nexport function isNodeVersionAtLeast(props: {\n\tnodeVersion: string;\n\tminimumMajor: number;\n\tminimumMinor: number;\n}): boolean {\n\tconst { nodeVersion, minimumMajor, minimumMinor } = props;\n\treturn isMajorMinorVersionAtLeast({\n\t\tparsedVersion: parseNodeVersionOrNull(nodeVersion),\n\t\tminimumMajor,\n\t\tminimumMinor,\n\t});\n}\n\nexport function parseGoVersionOrNull(\n\tgoVersionOutput: string,\n): ParsedGoVersion | null {\n\tconst version = parseMajorMinorPatchVersionFromRegexMatch({\n\t\tmatch: goVersionOutput\n\t\t\t.trim()\n\t\t\t.match(/(?:^|\\s)go(\\d+)\\.(\\d+)(?:\\.(\\d+))?/),\n\t\tallowMissingPatch: true,\n\t});\n\tif (!version) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tmajor: version.major,\n\t\tminor: version.minor,\n\t\tpatch: version.patch,\n\t\tnormalizedVersion: `go${version.major}.${version.minor}.${version.patch}`,\n\t};\n}\n\nexport function isGoVersionAtLeast(props: {\n\tgoVersionOutput: string;\n\tminimumMajor: number;\n\tminimumMinor: number;\n}): boolean {\n\tconst { goVersionOutput, minimumMajor, minimumMinor } = props;\n\treturn isMajorMinorVersionAtLeast({\n\t\tparsedVersion: parseGoVersionOrNull(goVersionOutput),\n\t\tminimumMajor,\n\t\tminimumMinor,\n\t});\n}\n\ntype MajorMinorVersion = {\n\tmajor: number;\n\tminor: number;\n} | null;\n\nfunction isMajorMinorVersionAtLeast(props: {\n\tparsedVersion: MajorMinorVersion;\n\tminimumMajor: number;\n\tminimumMinor: number;\n}): boolean {\n\tconst { parsedVersion, minimumMajor, minimumMinor } = props;\n\tif (!parsedVersion) {\n\t\treturn false;\n\t}\n\n\tif (parsedVersion.major > minimumMajor) {\n\t\treturn true;\n\t}\n\n\tif (parsedVersion.major < minimumMajor) {\n\t\treturn false;\n\t}\n\n\treturn parsedVersion.minor >= minimumMinor;\n}\n\nexport function buildGoModInitCommandArgs(moduleName: string): Array<string> {\n\treturn [\"mod\", \"init\", moduleName];\n}\n\nexport function buildGoModReplaceCommandArgs(vormaPath: string): Array<string> {\n\treturn [\n\t\t\"mod\",\n\t\t\"edit\",\n\t\t\"-replace\",\n\t\t`github.com/vormadev/vorma=${vormaPath}`,\n\t];\n}\n\nexport function buildGoGetCommandArgs(version: string): Array<string> {\n\treturn [\"get\", `github.com/vormadev/vorma@v${version}`];\n}\n\nexport function buildGoRunCommandArgs(bootstrapFile: string): Array<string> {\n\treturn [\"run\", bootstrapFile];\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["x", "y", "x", "ansiRegex", "onlyFirst", "pattern", "regex", "stripAnsi", "string", "e", "eaw", "module", "character", "x", "y", "codePoint", "code", "stringToArray", "characters", "len", "i", "text", "start", "end", "result", "eawLen", "chars", "char", "charLen", "emojiRegex", "stringWidth", "options", "ambiguousCharacterWidth", "width", "eastAsianWidth", "ANSI_BACKGROUND_OFFSET", "wrapAnsi16", "offset", "wrapAnsi256", "wrapAnsi16m", "red", "green", "blue", "styles", "foregroundColorNames", "backgroundColorNames", "assembleStyles", "codes", "groupName", "group", "styleName", "style", "hex", "matches", "colorString", "integer", "remainder", "value", "ansiStyles", "ESCAPES", "END_CODE", "ANSI_ESCAPE_BELL", "ANSI_CSI", "ANSI_OSC", "ANSI_SGR_TERMINATOR", "ANSI_ESCAPE_LINK", "wrapAnsiCode", "wrapAnsiHyperlink", "uri", "wordLengths", "wrapWord", "rows", "word", "columns", "isInsideEscape", "isInsideLinkEscape", "visible", "index", "characterLength", "stringVisibleTrimSpacesRight", "words", "last", "exec", "returnValue", "escapeCode", "escapeUrl", "lengths", "rowLength", "remainingColumns", "breaksStartingThisLine", "row", "pre", "groups", "wrapAnsi", "line", "actions", "settings", "isActionKey", "key", "action", "settings", "value", "diffLines", "a", "b", "aLines", "bLines", "diff", "i", "isWindows", "CANCEL_SYMBOL", "isCancel", "setRawMode", "input", "block", "stdin", "output", "stdout", "overwrite", "hideCursor", "rl", "readline", "clear", "data", "name", "sequence", "str", "cursor", "dx", "dy", "v", "t", "e", "s", "Prompt", "options", "trackValue", "__publicField", "render", "signal", "opts", "event", "params", "cb", "cbs", "cleanup", "subscriber", "resolve", "reject", "sink", "Writable", "chunk", "encoding", "done", "char", "problem", "lines", "wrap", "frame", "diffLine", "erase", "newLines", "ConfirmPrompt", "confirm", "_selectableGroups", "_selectableGroups", "e", "u", "SelectPrompt", "Prompt", "opts", "__publicField", "value", "key", "TextPrompt", "Prompt", "s1", "s2", "s3", "color", "opts", "isUnicodeSupported", "process", "unicode", "s", "c", "fallback", "S_STEP_ACTIVE", "S_STEP_CANCEL", "S_STEP_ERROR", "S_STEP_SUBMIT", "S_BAR_START", "S_BAR", "S_BAR_END", "S_RADIO_ACTIVE", "S_RADIO_INACTIVE", "S_CHECKBOX_ACTIVE", "S_CHECKBOX_SELECTED", "S_CHECKBOX_INACTIVE", "S_PASSWORD_MASK", "S_BAR_H", "S_CORNER_TOP_RIGHT", "S_CONNECT_LEFT", "S_CORNER_BOTTOM_RIGHT", "S_INFO", "S_SUCCESS", "S_WARN", "S_ERROR", "symbol", "state", "color", "limitOptions", "params", "cursor", "options", "style", "paramMaxItems", "outputMaxItems", "maxItems", "slidingWindowLocation", "shouldRenderTopEllipsis", "shouldRenderBottomEllipsis", "option", "i", "arr", "isTopLimit", "isBottomLimit", "text", "opts", "TextPrompt", "title", "placeholder", "value", "confirm", "opts", "active", "inactive", "ConfirmPrompt", "title", "color", "S_BAR", "symbol", "value", "S_RADIO_ACTIVE", "S_RADIO_INACTIVE", "S_BAR_END", "select", "opt", "option", "state", "label", "SelectPrompt", "limitOptions", "item", "cancel", "message", "color", "S_BAR_END", "intro", "title", "S_BAR_START", "log", "message", "symbol", "color", "S_BAR", "parts", "firstLine", "lines", "ln", "S_INFO", "S_SUCCESS", "S_STEP_SUBMIT", "S_WARN", "S_ERROR", "prefix", "spinner", "indicator", "frames", "unicode", "delay", "isCI", "unblock", "loop", "isSpinnerActive", "_message", "_prevMessage", "_origin", "handleExit", "code", "msg", "stop", "errorEventHandler", "signalEventHandler", "registerHooks", "clearHooks", "clearPrevMessage", "prevLines", "cursor", "erase", "parseMessage", "formatTimer", "origin", "duration", "min", "secs", "start", "block", "color", "S_BAR", "frameIndex", "indicatorTimer", "frame", "loadingDots", "step", "S_STEP_SUBMIT", "S_STEP_CANCEL", "S_STEP_ERROR", "dirname", "dirname", "M", "Y"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-vorma",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.85.0-pre.1",
|
|
4
4
|
"description": "CLI for creating new Vorma applications.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "BSD-3-Clause",
|
|
7
7
|
"repository": {
|
|
8
8
|
"url": "https://github.com/vormadev/vorma",
|
|
9
9
|
"type": "git",
|
|
10
|
-
"directory": "
|
|
10
|
+
"directory": "vormaclient/create"
|
|
11
11
|
},
|
|
12
12
|
"bugs": {
|
|
13
13
|
"url": "https://github.com/vormadev/vorma/issues"
|
|
@@ -17,6 +17,9 @@
|
|
|
17
17
|
"bin": {
|
|
18
18
|
"create-vorma": "./dist/main.js"
|
|
19
19
|
},
|
|
20
|
+
"exports": {
|
|
21
|
+
".": "./dist/main.js"
|
|
22
|
+
},
|
|
20
23
|
"files": [
|
|
21
24
|
"dist"
|
|
22
25
|
],
|
|
@@ -24,8 +27,8 @@
|
|
|
24
27
|
"@clack/prompts": "^0.11.0"
|
|
25
28
|
},
|
|
26
29
|
"devDependencies": {
|
|
27
|
-
"@types/node": "^24.
|
|
28
|
-
"typescript": "^5.9.
|
|
30
|
+
"@types/node": "^24.10.7",
|
|
31
|
+
"typescript": "^5.9.3"
|
|
29
32
|
},
|
|
30
33
|
"engines": {
|
|
31
34
|
"node": ">=22.11.0"
|