create-dynamic-app
Version:
CLI tool to generate sample applications using Dynamic's web3 authentication
1,193 lines (1,185 loc) • 604 kB
JavaScript
#!/usr/bin/env node
import { createRequire } from "node:module";
var __create = Object.create;
var __getProtoOf = Object.getPrototypeOf;
var __defProp = Object.defineProperty;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __toESM = (mod, isNodeMode, target) => {
target = mod != null ? __create(__getProtoOf(mod)) : {};
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
for (let key of __getOwnPropNames(mod))
if (!__hasOwnProp.call(to, key))
__defProp(to, key, {
get: () => mod[key],
enumerable: true
});
return to;
};
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, {
get: all[name],
enumerable: true,
configurable: true,
set: (newValue) => all[name] = () => newValue
});
};
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
var __require = /* @__PURE__ */ createRequire(import.meta.url);
// node_modules/figlet/lib/figlet.js
var require_figlet = __commonJS((exports, module) => {
var figlet = (() => {
const FULL_WIDTH = 0, FITTING = 1, SMUSHING = 2, CONTROLLED_SMUSHING = 3;
const figFonts = {};
const figDefaults = {
font: "Standard",
fontPath: "./fonts"
};
function getSmushingRules(oldLayout, newLayout) {
let rules = {};
let val, index, len, code;
let codes = [
[16384, "vLayout", SMUSHING],
[8192, "vLayout", FITTING],
[4096, "vRule5", true],
[2048, "vRule4", true],
[1024, "vRule3", true],
[512, "vRule2", true],
[256, "vRule1", true],
[128, "hLayout", SMUSHING],
[64, "hLayout", FITTING],
[32, "hRule6", true],
[16, "hRule5", true],
[8, "hRule4", true],
[4, "hRule3", true],
[2, "hRule2", true],
[1, "hRule1", true]
];
val = newLayout !== null ? newLayout : oldLayout;
index = 0;
len = codes.length;
while (index < len) {
code = codes[index];
if (val >= code[0]) {
val = val - code[0];
rules[code[1]] = typeof rules[code[1]] === "undefined" ? code[2] : rules[code[1]];
} else if (code[1] !== "vLayout" && code[1] !== "hLayout") {
rules[code[1]] = false;
}
index++;
}
if (typeof rules["hLayout"] === "undefined") {
if (oldLayout === 0) {
rules["hLayout"] = FITTING;
} else if (oldLayout === -1) {
rules["hLayout"] = FULL_WIDTH;
} else {
if (rules["hRule1"] || rules["hRule2"] || rules["hRule3"] || rules["hRule4"] || rules["hRule5"] || rules["hRule6"]) {
rules["hLayout"] = CONTROLLED_SMUSHING;
} else {
rules["hLayout"] = SMUSHING;
}
}
} else if (rules["hLayout"] === SMUSHING) {
if (rules["hRule1"] || rules["hRule2"] || rules["hRule3"] || rules["hRule4"] || rules["hRule5"] || rules["hRule6"]) {
rules["hLayout"] = CONTROLLED_SMUSHING;
}
}
if (typeof rules["vLayout"] === "undefined") {
if (rules["vRule1"] || rules["vRule2"] || rules["vRule3"] || rules["vRule4"] || rules["vRule5"]) {
rules["vLayout"] = CONTROLLED_SMUSHING;
} else {
rules["vLayout"] = FULL_WIDTH;
}
} else if (rules["vLayout"] === SMUSHING) {
if (rules["vRule1"] || rules["vRule2"] || rules["vRule3"] || rules["vRule4"] || rules["vRule5"]) {
rules["vLayout"] = CONTROLLED_SMUSHING;
}
}
return rules;
}
function hRule1_Smush(ch1, ch2, hardBlank) {
if (ch1 === ch2 && ch1 !== hardBlank) {
return ch1;
}
return false;
}
function hRule2_Smush(ch1, ch2) {
let rule2Str = "|/\\[]{}()<>";
if (ch1 === "_") {
if (rule2Str.indexOf(ch2) !== -1) {
return ch2;
}
} else if (ch2 === "_") {
if (rule2Str.indexOf(ch1) !== -1) {
return ch1;
}
}
return false;
}
function hRule3_Smush(ch1, ch2) {
let rule3Classes = "| /\\ [] {} () <>";
let r3_pos1 = rule3Classes.indexOf(ch1);
let r3_pos2 = rule3Classes.indexOf(ch2);
if (r3_pos1 !== -1 && r3_pos2 !== -1) {
if (r3_pos1 !== r3_pos2 && Math.abs(r3_pos1 - r3_pos2) !== 1) {
const startPos = Math.max(r3_pos1, r3_pos2);
const endPos = startPos + 1;
return rule3Classes.substring(startPos, endPos);
}
}
return false;
}
function hRule4_Smush(ch1, ch2) {
let rule4Str = "[] {} ()";
let r4_pos1 = rule4Str.indexOf(ch1);
let r4_pos2 = rule4Str.indexOf(ch2);
if (r4_pos1 !== -1 && r4_pos2 !== -1) {
if (Math.abs(r4_pos1 - r4_pos2) <= 1) {
return "|";
}
}
return false;
}
function hRule5_Smush(ch1, ch2) {
let rule5Str = "/\\ \\/ ><";
let rule5Hash = { 0: "|", 3: "Y", 6: "X" };
let r5_pos1 = rule5Str.indexOf(ch1);
let r5_pos2 = rule5Str.indexOf(ch2);
if (r5_pos1 !== -1 && r5_pos2 !== -1) {
if (r5_pos2 - r5_pos1 === 1) {
return rule5Hash[r5_pos1];
}
}
return false;
}
function hRule6_Smush(ch1, ch2, hardBlank) {
if (ch1 === hardBlank && ch2 === hardBlank) {
return hardBlank;
}
return false;
}
function vRule1_Smush(ch1, ch2) {
if (ch1 === ch2) {
return ch1;
}
return false;
}
function vRule2_Smush(ch1, ch2) {
let rule2Str = "|/\\[]{}()<>";
if (ch1 === "_") {
if (rule2Str.indexOf(ch2) !== -1) {
return ch2;
}
} else if (ch2 === "_") {
if (rule2Str.indexOf(ch1) !== -1) {
return ch1;
}
}
return false;
}
function vRule3_Smush(ch1, ch2) {
let rule3Classes = "| /\\ [] {} () <>";
let r3_pos1 = rule3Classes.indexOf(ch1);
let r3_pos2 = rule3Classes.indexOf(ch2);
if (r3_pos1 !== -1 && r3_pos2 !== -1) {
if (r3_pos1 !== r3_pos2 && Math.abs(r3_pos1 - r3_pos2) !== 1) {
const startPos = Math.max(r3_pos1, r3_pos2);
const endPos = startPos + 1;
return rule3Classes.substring(startPos, endPos);
}
}
return false;
}
function vRule4_Smush(ch1, ch2) {
if (ch1 === "-" && ch2 === "_" || ch1 === "_" && ch2 === "-") {
return "=";
}
return false;
}
function vRule5_Smush(ch1, ch2) {
if (ch1 === "|" && ch2 === "|") {
return "|";
}
return false;
}
function uni_Smush(ch1, ch2, hardBlank) {
if (ch2 === " " || ch2 === "") {
return ch1;
} else if (ch2 === hardBlank && ch1 !== " ") {
return ch1;
} else {
return ch2;
}
}
function canVerticalSmush(txt1, txt2, opts) {
if (opts.fittingRules.vLayout === FULL_WIDTH) {
return "invalid";
}
let ii, len = Math.min(txt1.length, txt2.length), ch1, ch2, endSmush = false, validSmush;
if (len === 0) {
return "invalid";
}
for (ii = 0;ii < len; ii++) {
ch1 = txt1.substring(ii, ii + 1);
ch2 = txt2.substring(ii, ii + 1);
if (ch1 !== " " && ch2 !== " ") {
if (opts.fittingRules.vLayout === FITTING) {
return "invalid";
} else if (opts.fittingRules.vLayout === SMUSHING) {
return "end";
} else {
if (vRule5_Smush(ch1, ch2)) {
endSmush = endSmush || false;
continue;
}
validSmush = false;
validSmush = opts.fittingRules.vRule1 ? vRule1_Smush(ch1, ch2) : validSmush;
validSmush = !validSmush && opts.fittingRules.vRule2 ? vRule2_Smush(ch1, ch2) : validSmush;
validSmush = !validSmush && opts.fittingRules.vRule3 ? vRule3_Smush(ch1, ch2) : validSmush;
validSmush = !validSmush && opts.fittingRules.vRule4 ? vRule4_Smush(ch1, ch2) : validSmush;
endSmush = true;
if (!validSmush) {
return "invalid";
}
}
}
}
if (endSmush) {
return "end";
} else {
return "valid";
}
}
function getVerticalSmushDist(lines1, lines2, opts) {
let maxDist = lines1.length;
let len1 = lines1.length;
let len2 = lines2.length;
let subLines1, subLines2, slen;
let curDist = 1;
let ii, ret, result;
while (curDist <= maxDist) {
subLines1 = lines1.slice(Math.max(0, len1 - curDist), len1);
subLines2 = lines2.slice(0, Math.min(maxDist, curDist));
slen = subLines2.length;
result = "";
for (ii = 0;ii < slen; ii++) {
ret = canVerticalSmush(subLines1[ii], subLines2[ii], opts);
if (ret === "end") {
result = ret;
} else if (ret === "invalid") {
result = ret;
break;
} else {
if (result === "") {
result = "valid";
}
}
}
if (result === "invalid") {
curDist--;
break;
}
if (result === "end") {
break;
}
if (result === "valid") {
curDist++;
}
}
return Math.min(maxDist, curDist);
}
function verticallySmushLines(line1, line2, opts) {
let ii, len = Math.min(line1.length, line2.length);
let ch1, ch2, result = "", validSmush;
for (ii = 0;ii < len; ii++) {
ch1 = line1.substring(ii, ii + 1);
ch2 = line2.substring(ii, ii + 1);
if (ch1 !== " " && ch2 !== " ") {
if (opts.fittingRules.vLayout === FITTING) {
result += uni_Smush(ch1, ch2);
} else if (opts.fittingRules.vLayout === SMUSHING) {
result += uni_Smush(ch1, ch2);
} else {
validSmush = false;
validSmush = opts.fittingRules.vRule5 ? vRule5_Smush(ch1, ch2) : validSmush;
validSmush = !validSmush && opts.fittingRules.vRule1 ? vRule1_Smush(ch1, ch2) : validSmush;
validSmush = !validSmush && opts.fittingRules.vRule2 ? vRule2_Smush(ch1, ch2) : validSmush;
validSmush = !validSmush && opts.fittingRules.vRule3 ? vRule3_Smush(ch1, ch2) : validSmush;
validSmush = !validSmush && opts.fittingRules.vRule4 ? vRule4_Smush(ch1, ch2) : validSmush;
result += validSmush;
}
} else {
result += uni_Smush(ch1, ch2);
}
}
return result;
}
function verticalSmush(lines1, lines2, overlap, opts) {
let len1 = lines1.length;
let len2 = lines2.length;
let piece1 = lines1.slice(0, Math.max(0, len1 - overlap));
let piece2_1 = lines1.slice(Math.max(0, len1 - overlap), len1);
let piece2_2 = lines2.slice(0, Math.min(overlap, len2));
let ii, len, line, piece2 = [], piece3, result = [];
len = piece2_1.length;
for (ii = 0;ii < len; ii++) {
if (ii >= len2) {
line = piece2_1[ii];
} else {
line = verticallySmushLines(piece2_1[ii], piece2_2[ii], opts);
}
piece2.push(line);
}
piece3 = lines2.slice(Math.min(overlap, len2), len2);
return result.concat(piece1, piece2, piece3);
}
function padLines(lines, numSpaces) {
let ii, len = lines.length, padding = "";
for (ii = 0;ii < numSpaces; ii++) {
padding += " ";
}
for (ii = 0;ii < len; ii++) {
lines[ii] += padding;
}
}
function smushVerticalFigLines(output, lines, opts) {
let len1 = output[0].length;
let len2 = lines[0].length;
let overlap;
if (len1 > len2) {
padLines(lines, len1 - len2);
} else if (len2 > len1) {
padLines(output, len2 - len1);
}
overlap = getVerticalSmushDist(output, lines, opts);
return verticalSmush(output, lines, overlap, opts);
}
function getHorizontalSmushLength(txt1, txt2, opts) {
if (opts.fittingRules.hLayout === FULL_WIDTH) {
return 0;
}
let ii, len1 = txt1.length, len2 = txt2.length;
let maxDist = len1;
let curDist = 1;
let breakAfter = false;
let validSmush = false;
let seg1, seg2, ch1, ch2;
if (len1 === 0) {
return 0;
}
distCal:
while (curDist <= maxDist) {
const seg1StartPos = len1 - curDist;
seg1 = txt1.substring(seg1StartPos, seg1StartPos + curDist);
seg2 = txt2.substring(0, Math.min(curDist, len2));
for (ii = 0;ii < Math.min(curDist, len2); ii++) {
ch1 = seg1.substring(ii, ii + 1);
ch2 = seg2.substring(ii, ii + 1);
if (ch1 !== " " && ch2 !== " ") {
if (opts.fittingRules.hLayout === FITTING) {
curDist = curDist - 1;
break distCal;
} else if (opts.fittingRules.hLayout === SMUSHING) {
if (ch1 === opts.hardBlank || ch2 === opts.hardBlank) {
curDist = curDist - 1;
}
break distCal;
} else {
breakAfter = true;
validSmush = false;
validSmush = opts.fittingRules.hRule1 ? hRule1_Smush(ch1, ch2, opts.hardBlank) : validSmush;
validSmush = !validSmush && opts.fittingRules.hRule2 ? hRule2_Smush(ch1, ch2, opts.hardBlank) : validSmush;
validSmush = !validSmush && opts.fittingRules.hRule3 ? hRule3_Smush(ch1, ch2, opts.hardBlank) : validSmush;
validSmush = !validSmush && opts.fittingRules.hRule4 ? hRule4_Smush(ch1, ch2, opts.hardBlank) : validSmush;
validSmush = !validSmush && opts.fittingRules.hRule5 ? hRule5_Smush(ch1, ch2, opts.hardBlank) : validSmush;
validSmush = !validSmush && opts.fittingRules.hRule6 ? hRule6_Smush(ch1, ch2, opts.hardBlank) : validSmush;
if (!validSmush) {
curDist = curDist - 1;
break distCal;
}
}
}
}
if (breakAfter) {
break;
}
curDist++;
}
return Math.min(maxDist, curDist);
}
function horizontalSmush(textBlock1, textBlock2, overlap, opts) {
let ii, jj, outputFig = [], overlapStart, piece1, piece2, piece3, len1, len2, txt1, txt2;
for (ii = 0;ii < opts.height; ii++) {
txt1 = textBlock1[ii];
txt2 = textBlock2[ii];
len1 = txt1.length;
len2 = txt2.length;
overlapStart = len1 - overlap;
piece1 = txt1.substr(0, Math.max(0, overlapStart));
piece2 = "";
const seg1StartPos = Math.max(0, len1 - overlap);
var seg1 = txt1.substring(seg1StartPos, seg1StartPos + overlap);
var seg2 = txt2.substring(0, Math.min(overlap, len2));
for (jj = 0;jj < overlap; jj++) {
var ch1 = jj < len1 ? seg1.substring(jj, jj + 1) : " ";
var ch2 = jj < len2 ? seg2.substring(jj, jj + 1) : " ";
if (ch1 !== " " && ch2 !== " ") {
if (opts.fittingRules.hLayout === FITTING) {
piece2 += uni_Smush(ch1, ch2, opts.hardBlank);
} else if (opts.fittingRules.hLayout === SMUSHING) {
piece2 += uni_Smush(ch1, ch2, opts.hardBlank);
} else {
var nextCh = "";
nextCh = !nextCh && opts.fittingRules.hRule1 ? hRule1_Smush(ch1, ch2, opts.hardBlank) : nextCh;
nextCh = !nextCh && opts.fittingRules.hRule2 ? hRule2_Smush(ch1, ch2, opts.hardBlank) : nextCh;
nextCh = !nextCh && opts.fittingRules.hRule3 ? hRule3_Smush(ch1, ch2, opts.hardBlank) : nextCh;
nextCh = !nextCh && opts.fittingRules.hRule4 ? hRule4_Smush(ch1, ch2, opts.hardBlank) : nextCh;
nextCh = !nextCh && opts.fittingRules.hRule5 ? hRule5_Smush(ch1, ch2, opts.hardBlank) : nextCh;
nextCh = !nextCh && opts.fittingRules.hRule6 ? hRule6_Smush(ch1, ch2, opts.hardBlank) : nextCh;
nextCh = nextCh || uni_Smush(ch1, ch2, opts.hardBlank);
piece2 += nextCh;
}
} else {
piece2 += uni_Smush(ch1, ch2, opts.hardBlank);
}
}
if (overlap >= len2) {
piece3 = "";
} else {
piece3 = txt2.substring(overlap, overlap + Math.max(0, len2 - overlap));
}
outputFig[ii] = piece1 + piece2 + piece3;
}
return outputFig;
}
function newFigChar(len) {
let outputFigText = [], row;
for (row = 0;row < len; row++) {
outputFigText[row] = "";
}
return outputFigText;
}
const figLinesWidth = function(textLines) {
return Math.max.apply(Math, textLines.map(function(line, i) {
return line.length;
}));
};
function joinFigArray(array, len, opts) {
return array.reduce(function(acc, data) {
return horizontalSmush(acc, data.fig, data.overlap, opts);
}, newFigChar(len));
}
function breakWord(figChars, len, opts) {
const result = {};
for (let i = figChars.length;--i; ) {
let w = joinFigArray(figChars.slice(0, i), len, opts);
if (figLinesWidth(w) <= opts.width) {
result.outputFigText = w;
if (i < figChars.length) {
result.chars = figChars.slice(i);
} else {
result.chars = [];
}
break;
}
}
return result;
}
function generateFigTextLines(txt, figChars, opts) {
let charIndex, figChar, overlap = 0, row, outputFigText, len, height = opts.height, outputFigLines = [], maxWidth, nextFigChars, figWords = [], char, isSpace, textFigWord, textFigLine, tmpBreak;
outputFigText = newFigChar(height);
if (opts.width > 0 && opts.whitespaceBreak) {
nextFigChars = {
chars: [],
overlap
};
}
if (opts.printDirection === 1) {
txt = txt.split("").reverse().join("");
}
len = txt.length;
for (charIndex = 0;charIndex < len; charIndex++) {
char = txt.substring(charIndex, charIndex + 1);
isSpace = char.match(/\s/);
figChar = figChars[char.charCodeAt(0)];
textFigLine = null;
if (figChar) {
if (opts.fittingRules.hLayout !== FULL_WIDTH) {
overlap = 1e4;
for (row = 0;row < opts.height; row++) {
overlap = Math.min(overlap, getHorizontalSmushLength(outputFigText[row], figChar[row], opts));
}
overlap = overlap === 1e4 ? 0 : overlap;
}
if (opts.width > 0) {
if (opts.whitespaceBreak) {
textFigWord = joinFigArray(nextFigChars.chars.concat([
{
fig: figChar,
overlap
}
]), height, opts);
textFigLine = joinFigArray(figWords.concat([
{
fig: textFigWord,
overlap: nextFigChars.overlap
}
]), height, opts);
maxWidth = figLinesWidth(textFigLine);
} else {
textFigLine = horizontalSmush(outputFigText, figChar, overlap, opts);
maxWidth = figLinesWidth(textFigLine);
}
if (maxWidth >= opts.width && charIndex > 0) {
if (opts.whitespaceBreak) {
outputFigText = joinFigArray(figWords.slice(0, -1), height, opts);
if (figWords.length > 1) {
outputFigLines.push(outputFigText);
outputFigText = newFigChar(height);
}
figWords = [];
} else {
outputFigLines.push(outputFigText);
outputFigText = newFigChar(height);
}
}
}
if (opts.width > 0 && opts.whitespaceBreak) {
if (!isSpace || charIndex === len - 1) {
nextFigChars.chars.push({ fig: figChar, overlap });
}
if (isSpace || charIndex === len - 1) {
tmpBreak = null;
while (true) {
textFigLine = joinFigArray(nextFigChars.chars, height, opts);
maxWidth = figLinesWidth(textFigLine);
if (maxWidth >= opts.width) {
tmpBreak = breakWord(nextFigChars.chars, height, opts);
nextFigChars = { chars: tmpBreak.chars };
outputFigLines.push(tmpBreak.outputFigText);
} else {
break;
}
}
if (maxWidth > 0) {
if (tmpBreak) {
figWords.push({ fig: textFigLine, overlap: 1 });
} else {
figWords.push({
fig: textFigLine,
overlap: nextFigChars.overlap
});
}
}
if (isSpace) {
figWords.push({ fig: figChar, overlap });
outputFigText = newFigChar(height);
}
if (charIndex === len - 1) {
outputFigText = joinFigArray(figWords, height, opts);
}
nextFigChars = {
chars: [],
overlap
};
continue;
}
}
outputFigText = horizontalSmush(outputFigText, figChar, overlap, opts);
}
}
if (figLinesWidth(outputFigText) > 0) {
outputFigLines.push(outputFigText);
}
if (opts.showHardBlanks !== true) {
outputFigLines.forEach(function(outputFigText2) {
len = outputFigText2.length;
for (row = 0;row < len; row++) {
outputFigText2[row] = outputFigText2[row].replace(new RegExp("\\" + opts.hardBlank, "g"), " ");
}
});
}
return outputFigLines;
}
const getHorizontalFittingRules = function(layout, options) {
let props = [
"hLayout",
"hRule1",
"hRule2",
"hRule3",
"hRule4",
"hRule5",
"hRule6"
], params = {}, ii;
if (layout === "default") {
for (ii = 0;ii < props.length; ii++) {
params[props[ii]] = options.fittingRules[props[ii]];
}
} else if (layout === "full") {
params = {
hLayout: FULL_WIDTH,
hRule1: false,
hRule2: false,
hRule3: false,
hRule4: false,
hRule5: false,
hRule6: false
};
} else if (layout === "fitted") {
params = {
hLayout: FITTING,
hRule1: false,
hRule2: false,
hRule3: false,
hRule4: false,
hRule5: false,
hRule6: false
};
} else if (layout === "controlled smushing") {
params = {
hLayout: CONTROLLED_SMUSHING,
hRule1: true,
hRule2: true,
hRule3: true,
hRule4: true,
hRule5: true,
hRule6: true
};
} else if (layout === "universal smushing") {
params = {
hLayout: SMUSHING,
hRule1: false,
hRule2: false,
hRule3: false,
hRule4: false,
hRule5: false,
hRule6: false
};
} else {
return;
}
return params;
};
const getVerticalFittingRules = function(layout, options) {
let props = ["vLayout", "vRule1", "vRule2", "vRule3", "vRule4", "vRule5"], params = {}, ii;
if (layout === "default") {
for (ii = 0;ii < props.length; ii++) {
params[props[ii]] = options.fittingRules[props[ii]];
}
} else if (layout === "full") {
params = {
vLayout: FULL_WIDTH,
vRule1: false,
vRule2: false,
vRule3: false,
vRule4: false,
vRule5: false
};
} else if (layout === "fitted") {
params = {
vLayout: FITTING,
vRule1: false,
vRule2: false,
vRule3: false,
vRule4: false,
vRule5: false
};
} else if (layout === "controlled smushing") {
params = {
vLayout: CONTROLLED_SMUSHING,
vRule1: true,
vRule2: true,
vRule3: true,
vRule4: true,
vRule5: true
};
} else if (layout === "universal smushing") {
params = {
vLayout: SMUSHING,
vRule1: false,
vRule2: false,
vRule3: false,
vRule4: false,
vRule5: false
};
} else {
return;
}
return params;
};
const generateText = function(fontName, options, txt) {
txt = txt.replace(/\r\n/g, `
`).replace(/\r/g, `
`);
let lines = txt.split(`
`);
let figLines = [];
let ii, len, output;
len = lines.length;
for (ii = 0;ii < len; ii++) {
figLines = figLines.concat(generateFigTextLines(lines[ii], figFonts[fontName], options));
}
len = figLines.length;
output = figLines[0];
for (ii = 1;ii < len; ii++) {
output = smushVerticalFigLines(output, figLines[ii], options);
}
return output ? output.join(`
`) : "";
};
function _reworkFontOpts(fontOpts, options) {
let myOpts = JSON.parse(JSON.stringify(fontOpts)), params, prop;
if (typeof options.horizontalLayout !== "undefined") {
params = getHorizontalFittingRules(options.horizontalLayout, fontOpts);
for (prop in params) {
if (params.hasOwnProperty(prop)) {
myOpts.fittingRules[prop] = params[prop];
}
}
}
if (typeof options.verticalLayout !== "undefined") {
params = getVerticalFittingRules(options.verticalLayout, fontOpts);
for (prop in params) {
if (params.hasOwnProperty(prop)) {
myOpts.fittingRules[prop] = params[prop];
}
}
}
myOpts.printDirection = typeof options.printDirection !== "undefined" ? options.printDirection : fontOpts.printDirection;
myOpts.showHardBlanks = options.showHardBlanks || false;
myOpts.width = options.width || -1;
myOpts.whitespaceBreak = options.whitespaceBreak || false;
return myOpts;
}
const me = function(txt, options, next) {
return me.text(txt, options, next);
};
me.text = async function(txt, options, next) {
let fontName = "";
txt = txt + "";
if (typeof arguments[1] === "function") {
next = options;
options = {};
options.font = figDefaults.font;
}
if (typeof options === "string") {
fontName = options;
options = {};
} else {
options = options || {};
fontName = options.font || figDefaults.font;
}
return await new Promise((resolve, reject) => {
me.loadFont(fontName, function(err, fontOpts) {
if (err) {
reject(err);
if (next)
next(err);
return;
}
const generatedTxt = generateText(fontName, _reworkFontOpts(fontOpts, options), txt);
resolve(generatedTxt);
if (next)
next(null, generatedTxt);
});
});
};
me.textSync = function(txt, options) {
let fontName = "";
txt = txt + "";
if (typeof options === "string") {
fontName = options;
options = {};
} else {
options = options || {};
fontName = options.font || figDefaults.font;
}
var fontOpts = _reworkFontOpts(me.loadFontSync(fontName), options);
return generateText(fontName, fontOpts, txt);
};
me.metadata = function(fontName, next) {
fontName = fontName + "";
return new Promise(function(resolve, reject) {
me.loadFont(fontName, function(err, fontOpts) {
if (err) {
if (next)
next(err);
reject(err);
return;
}
if (next) {
next(null, fontOpts, figFonts[fontName].comment);
}
resolve([fontOpts, figFonts[fontName].comment]);
});
});
};
me.defaults = function(opts) {
if (typeof opts === "object" && opts !== null) {
for (var prop in opts) {
if (opts.hasOwnProperty(prop)) {
figDefaults[prop] = opts[prop];
}
}
}
return JSON.parse(JSON.stringify(figDefaults));
};
me.parseFont = function(fontName, data) {
data = data.replace(/\r\n/g, `
`).replace(/\r/g, `
`);
figFonts[fontName] = {};
var lines = data.split(`
`);
var headerData = lines.splice(0, 1)[0].split(" ");
var figFont = figFonts[fontName];
var opts = {};
opts.hardBlank = headerData[0].substr(5, 1);
opts.height = parseInt(headerData[1], 10);
opts.baseline = parseInt(headerData[2], 10);
opts.maxLength = parseInt(headerData[3], 10);
opts.oldLayout = parseInt(headerData[4], 10);
opts.numCommentLines = parseInt(headerData[5], 10);
opts.printDirection = headerData.length >= 6 ? parseInt(headerData[6], 10) : 0;
opts.fullLayout = headerData.length >= 7 ? parseInt(headerData[7], 10) : null;
opts.codeTagCount = headerData.length >= 8 ? parseInt(headerData[8], 10) : null;
opts.fittingRules = getSmushingRules(opts.oldLayout, opts.fullLayout);
figFont.options = opts;
if (opts.hardBlank.length !== 1 || isNaN(opts.height) || isNaN(opts.baseline) || isNaN(opts.maxLength) || isNaN(opts.oldLayout) || isNaN(opts.numCommentLines)) {
throw new Error("FIGlet header contains invalid values.");
}
let charNums = [], ii;
for (ii = 32;ii <= 126; ii++) {
charNums.push(ii);
}
charNums = charNums.concat(196, 214, 220, 228, 246, 252, 223);
if (lines.length < opts.numCommentLines + opts.height * charNums.length) {
throw new Error("FIGlet file is missing data.");
}
let cNum, endCharRegEx, parseError = false;
figFont.comment = lines.splice(0, opts.numCommentLines).join(`
`);
figFont.numChars = 0;
while (lines.length > 0 && figFont.numChars < charNums.length) {
cNum = charNums[figFont.numChars];
figFont[cNum] = lines.splice(0, opts.height);
for (ii = 0;ii < opts.height; ii++) {
if (typeof figFont[cNum][ii] === "undefined") {
figFont[cNum][ii] = "";
} else {
endCharRegEx = new RegExp("\\" + figFont[cNum][ii].substr(figFont[cNum][ii].length - 1, 1) + "+$");
figFont[cNum][ii] = figFont[cNum][ii].replace(endCharRegEx, "");
}
}
figFont.numChars++;
}
while (lines.length > 0) {
cNum = lines.splice(0, 1)[0].split(" ")[0];
if (/^0[xX][0-9a-fA-F]+$/.test(cNum)) {
cNum = parseInt(cNum, 16);
} else if (/^0[0-7]+$/.test(cNum)) {
cNum = parseInt(cNum, 8);
} else if (/^[0-9]+$/.test(cNum)) {
cNum = parseInt(cNum, 10);
} else if (/^-0[xX][0-9a-fA-F]+$/.test(cNum)) {
cNum = parseInt(cNum, 16);
} else {
if (cNum === "") {
break;
}
console.log("Invalid data:" + cNum);
parseError = true;
break;
}
figFont[cNum] = lines.splice(0, opts.height);
for (ii = 0;ii < opts.height; ii++) {
if (typeof figFont[cNum][ii] === "undefined") {
figFont[cNum][ii] = "";
} else {
endCharRegEx = new RegExp("\\" + figFont[cNum][ii].substr(figFont[cNum][ii].length - 1, 1) + "+$");
figFont[cNum][ii] = figFont[cNum][ii].replace(endCharRegEx, "");
}
}
figFont.numChars++;
}
if (parseError === true) {
throw new Error("Error parsing data.");
}
return opts;
};
me.loadFont = function(fontName, next) {
if (figFonts[fontName]) {
if (next) {
next(null, figFonts[fontName].options);
}
return Promise.resolve();
}
if (typeof fetch !== "function") {
console.error("figlet.js requires the fetch API or a fetch polyfill such as https://cdnjs.com/libraries/fetch");
throw new Error("fetch is required for figlet.js to work.");
}
return fetch(figDefaults.fontPath + "/" + fontName + ".flf").then(function(response) {
if (response.ok) {
return response.text();
}
console.log("Unexpected response", response);
throw new Error("Network response was not ok.");
}).then(function(text) {
if (next) {
next(null, me.parseFont(fontName, text));
}
}).catch(next);
};
me.loadFontSync = function(name) {
if (figFonts[name]) {
return figFonts[name].options;
}
throw new Error("synchronous font loading is not implemented for the browser");
};
me.preloadFonts = function(fonts, next) {
let fontData = [];
return fonts.reduce(function(promise, name) {
return promise.then(function() {
return fetch(figDefaults.fontPath + "/" + name + ".flf").then((response) => {
return response.text();
}).then(function(data) {
fontData.push(data);
});
});
}, Promise.resolve()).then(function(res) {
for (var i in fonts) {
if (fonts.hasOwnProperty(i)) {
me.parseFont(fonts[i], fontData[i]);
}
}
if (next)
next();
});
};
me.figFonts = figFonts;
return me;
})();
if (typeof module !== "undefined") {
if (typeof module.exports !== "undefined") {
module.exports = figlet;
}
}
});
// node_modules/figlet/lib/node-figlet.js
var require_node_figlet = __commonJS((exports, module) => {
var __dirname = "/home/runner/work/create-dynamic-app/create-dynamic-app/node_modules/figlet/lib";
var figlet = require_figlet();
var fs = __require("fs");
var path = __require("path");
var fontDir = path.join(__dirname, "/../fonts/");
figlet.loadFont = function(name, next) {
return new Promise(function(resolve, reject) {
if (figlet.figFonts[name]) {
next && next(null, figlet.figFonts[name].options);
resolve(figlet.figFonts[name].options);
return;
}
fs.readFile(path.join(fontDir, name + ".flf"), { encoding: "utf-8" }, function(err, fontData) {
if (err) {
next && next(err);
reject(err);
return;
}
fontData = fontData + "";
try {
var font = figlet.parseFont(name, fontData);
next && next(null, font);
resolve(font);
} catch (error) {
next && next(error);
reject(error);
}
});
});
};
figlet.loadFontSync = function(name) {
if (figlet.figFonts[name]) {
return figlet.figFonts[name].options;
}
var fontData = fs.readFileSync(path.join(fontDir, name + ".flf"), {
encoding: "utf-8"
});
fontData = fontData + "";
return figlet.parseFont(name, fontData);
};
figlet.fonts = function(next) {
return new Promise(function(resolve, reject) {
var fontList = [];
fs.readdir(fontDir, function(err, files) {
if (err) {
next && next(err);
reject(err);
return;
}
files.forEach(function(file) {
if (/\.flf$/.test(file)) {
fontList.push(file.replace(/\.flf$/, ""));
}
});
next && next(null, fontList);
resolve(fontList);
});
});
};
figlet.fontsSync = function() {
var fontList = [];
fs.readdirSync(fontDir).forEach(function(file) {
if (/\.flf$/.test(file)) {
fontList.push(file.replace(/\.flf$/, ""));
}
});
return fontList;
};
module.exports = figlet;
});
// node_modules/yoctocolors-cjs/index.js
var require_yoctocolors_cjs = __commonJS((exports, module) => {
var tty2 = __require("node:tty");
var hasColors = tty2?.WriteStream?.prototype?.hasColors?.() ?? false;
var format = (open, close) => {
if (!hasColors) {
return (input) => input;
}
const openCode = `\x1B[${open}m`;
const closeCode = `\x1B[${close}m`;
return (input) => {
const string = input + "";
let index = string.indexOf(closeCode);
if (index === -1) {
return openCode + string + closeCode;
}
let result = openCode;
let lastIndex = 0;
while (index !== -1) {
result += string.slice(lastIndex, index) + openCode;
lastIndex = index + closeCode.length;
index = string.indexOf(closeCode, lastIndex);
}
result += string.slice(lastIndex) + closeCode;
return result;
};
};
var colors = {};
colors.reset = format(0, 0);
colors.bold = format(1, 22);
colors.dim = format(2, 22);
colors.italic = format(3, 23);
colors.underline = format(4, 24);
colors.overline = format(53, 55);
colors.inverse = format(7, 27);
colors.hidden = format(8, 28);
colors.strikethrough = format(9, 29);
colors.black = format(30, 39);
colors.red = format(31, 39);
colors.green = format(32, 39);
colors.yellow = format(33, 39);
colors.blue = format(34, 39);
colors.magenta = format(35, 39);
colors.cyan = format(36, 39);
colors.white = format(37, 39);
colors.gray = format(90, 39);
colors.bgBlack = format(40, 49);
colors.bgRed = format(41, 49);
colors.bgGreen = format(42, 49);
colors.bgYellow = format(43, 49);
colors.bgBlue = format(44, 49);
colors.bgMagenta = format(45, 49);
colors.bgCyan = format(46, 49);
colors.bgWhite = format(47, 49);
colors.bgGray = format(100, 49);
colors.redBright = format(91, 39);
colors.greenBright = format(92, 39);
colors.yellowBright = format(93, 39);
colors.blueBright = format(94, 39);
colors.magentaBright = format(95, 39);
colors.cyanBright = format(96, 39);
colors.whiteBright = format(97, 39);
colors.bgRedBright = format(101, 49);
colors.bgGreenBright = format(102, 49);
colors.bgYellowBright = format(103, 49);
colors.bgBlueBright = format(104, 49);
colors.bgMagentaBright = format(105, 49);
colors.bgCyanBright = format(106, 49);
colors.bgWhiteBright = format(107, 49);
module.exports = colors;
});
// node_modules/cli-width/index.js
var require_cli_width = __commonJS((exports, module) => {
module.exports = cliWidth;
function normalizeOpts(options) {
const defaultOpts = {
defaultWidth: 0,
output: process.stdout,
tty: __require("tty")
};
if (!options) {
return defaultOpts;
}
Object.keys(defaultOpts).forEach(function(key) {
if (!options[key]) {
options[key] = defaultOpts[key];
}
});
return options;
}
function cliWidth(options) {
const opts = normalizeOpts(options);
if (opts.output.getWindowSize) {
return opts.output.getWindowSize()[0] || opts.defaultWidth;
}
if (opts.tty.getWindowSize) {
return opts.tty.getWindowSize()[1] || opts.defaultWidth;
}
if (opts.output.columns) {
return opts.output.columns;
}
if (process.env.CLI_WIDTH) {
const width = parseInt(process.env.CLI_WIDTH, 10);
if (!isNaN(width) && width !== 0) {
return width;
}
}
return opts.defaultWidth;
}
});
// node_modules/strip-ansi/node_modules/ansi-regex/index.js
var require_ansi_regex = __commonJS((exports, module) => {
module.exports = ({ onlyFirst = false } = {}) => {
const pattern = [
"[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)",
"(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"
].join("|");
return new RegExp(pattern, onlyFirst ? undefined : "g");
};
});
// node_modules/strip-ansi/index.js
var require_strip_ansi = __commonJS((exports, module) => {
var ansiRegex = require_ansi_regex();
module.exports = (string) => typeof string === "string" ? string.replace(ansiRegex(), "") : string;
});
// node_modules/is-fullwidth-code-point/index.js
var require_is_fullwidth_code_point = __commonJS((exports, module) => {
var isFullwidthCodePoint = (codePoint) => {
if (Number.isNaN(codePoint)) {
return false;
}
if (codePoint >= 4352 && (codePoint <= 4447 || codePoint === 9001 || codePoint === 9002 || 11904 <= codePoint && codePoint <= 12871 && codePoint !== 12351 || 12880 <= codePoint && codePoint <= 19903 || 19968 <= codePoint && codePoint <= 42182 || 43360 <= codePoint && codePoint <= 43388 || 44032 <= codePoint && codePoint <= 55203 || 63744 <= codePoint && codePoint <= 64255 || 65040 <= codePoint && codePoint <= 65049 || 65072 <= codePoint && codePoint <= 65131 || 65281 <= codePoint && codePoint <= 65376 || 65504 <= codePoint && codePoint <= 65510 || 110592 <= codePoint && codePoint <= 110593 || 127488 <= codePoint && codePoint <= 127569 || 131072 <= codePoint && codePoint <= 262141)) {
return true;
}
return false;
};
module.exports = isFullwidthCodePoint;
module.exports.default = isFullwidthCodePoint;
});
// node_modules/emoji-regex/index.js
var require_emoji_regex = __commonJS((exports, module) => {
module.exports = function() {
return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\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\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])|\uD83C[\uDF3E\uDF73\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])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\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])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\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\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\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\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\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\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\u