From 7c49cd2bc98f337a00e7ff0fc701994f791ceb30 Mon Sep 17 00:00:00 2001 From: Hamcha Date: Mon, 2 Sep 2019 17:49:41 +0200 Subject: [PATCH] Initial commit --- .gitignore | 1 + README.md | 6 ++ encoded.ts | 11 +++ genurls.ts | 57 ++++++++++++ index.ts | 63 +++++++++++++ mtgdesign.ts | 244 ++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 16 ++++ yarn.lock | 246 +++++++++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 644 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 encoded.ts create mode 100644 genurls.ts create mode 100644 index.ts create mode 100644 mtgdesign.ts create mode 100644 package.json create mode 100644 yarn.lock diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b512c09 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..bde5d21 --- /dev/null +++ b/README.md @@ -0,0 +1,6 @@ +# Magic Encoding Toolkit + +```sh +yarn install +yarn genurl -i file.json +``` diff --git a/encoded.ts b/encoded.ts new file mode 100644 index 0000000..5d6754f --- /dev/null +++ b/encoded.ts @@ -0,0 +1,11 @@ +export interface ECard { + text: string; + cost?: string; + name: string; + types: string[]; + supertypes?: string[]; + loyalty?: string; + subtypes?: string[]; + pt?: string; + rarity: string; +} diff --git a/genurls.ts b/genurls.ts new file mode 100644 index 0000000..42a628d --- /dev/null +++ b/genurls.ts @@ -0,0 +1,57 @@ +import { readFileSync } from "fs"; +import { ECard } from "./encoded"; +import { MDCard, getCardData } from "./mtgdesign"; + +function capitalize(str: string): string { + return str.toUpperCase().substr(0, 1) + str.substr(1); +} + +interface CardInfo { + set: string; + total: number; + num: number; +} + +function convertCard(data: ECard, info: CardInfo): MDCard { + const centered = false; // Center if not much text + let power = ""; + let toughness = ""; + if (data.pt) { + [power, toughness] = data.pt.split("/"); + } + return { + "card-number": `${info.num}`, + "card-total": `${info.total}`, + "card-set": `${info.set}`, + language: "EN", + "card-title": data.name, + "mana-cost": data.cost ? data.cost : "", + "super-type": data.supertypes + ? data.supertypes.map(capitalize).join(" ") + : "", + type: capitalize(data.types[0]), + "sub-type": data.subtypes ? data.subtypes.map(capitalize).join(" ") : "", + "text-size": "38", + rarity: data.rarity.toUpperCase()[0], + power, + toughness, + loyalty: data.loyalty ? data.loyalty : "", + centered, + "rules-text": data.text.replace(/@/gi, "~"), + "flavor-text": "" + }; +} + +export function readCardFile(input): ECard[] { + const lines = readFileSync(input) + .toString() + .split("\n"); + return lines + .filter(x => x.trim().length > 0) + .map(line => JSON.parse(line.trim())); +} + +export function toURL(data: ECard, info: CardInfo): string { + const mdcard = convertCard(data, info); + return getCardData(mdcard); +} diff --git a/index.ts b/index.ts new file mode 100644 index 0000000..ebae9c2 --- /dev/null +++ b/index.ts @@ -0,0 +1,63 @@ +import * as yargs from "yargs"; +import { readCardFile, toURL } from "./genurls"; +import { existsSync, readFileSync } from "fs"; + +yargs + .scriptName("mtgetk") + .usage("$0 [args]") + .command( + "genurl", + "Generate card images", + yargs => + yargs + .positional("input", { + type: "string", + alias: "i", + default: "in.json", + describe: "Input JSON file generated by decode.py" + }) + .positional("cookie", { + type: "string", + alias: "c", + default: "cookie.txt", + describe: + "File contaning cookie data (required for requesting images)" + }) + .positional("only-url", { + type: "boolean", + alias: "u", + default: false, + describe: "Only generate URLs" + }), + argv => { + let generateImages = !argv["only-url"]; + let cookie = ""; + if (generateImages) { + if (!existsSync(argv.cookie)) { + console.warn( + "Cookie file not specified or invalid, will generate URLs instead of images" + ); + generateImages = false; + } else { + const cookieFile = readFileSync(argv.cookie); + cookie = cookieFile.toString(); + } + } else { + console.warn("Not generating images"); + } + const cards = readCardFile(argv.input); + console.log(`Loaded ${cards.length} cards`); + const urls = cards.map((c, i) => + toURL(c, { + set: "RNG", + num: i, + total: cards.length + }) + ); + if (generateImages) { + //TODO + } else { + urls.forEach((u, i) => console.log(`${cards[i].name}:\n${u}\n`)); + } + } + ).argv; diff --git a/mtgdesign.ts b/mtgdesign.ts new file mode 100644 index 0000000..f455359 --- /dev/null +++ b/mtgdesign.ts @@ -0,0 +1,244 @@ +export interface MDCard { + "card-number": string; + "card-total": string; + "card-set": string; + language: string; + "card-title": string; + "mana-cost": string; + "super-type": string; + type: string; + "sub-type": string; + "text-size": string; + rarity: string; + artist?: string; + power?: string; + toughness?: string; + loyalty?: string; + artwork?: string; + designer?: string; + "card-template"?: string; + "card-border"?: string; + "card-overlay"?: string; + "land-overlay"?: string; + watermark?: string; + "pt-color"?: string; + "card-layout"?: string; + "color-indicator"?: string; + "set-symbol"?: string; + centered?: boolean; + "large-size"?: boolean; + shiftrulestext?: boolean; + colorshifted?: boolean; + foil?: boolean; + lighten?: boolean; + "rules-text": string; + "flavor-text": string; +} + +const urlbase = "https://mtg.design/render?"; + +export function getCardData(data: MDCard) { + var card = ""; + + var manaCost = data["mana-cost"] + .toUpperCase() + .replace(/([\d\w])\/([\d\w])/g, "<$1/$2>") + .replace(/(\d\d+)/g, "{$1}") + .replace(/(\w)(?!\/)/g, "{$1}") + .replace(/\{(\w)\}\>/g, "$1>") + .replace(/\{(\d)\}\{(\d)\}/g, "$1$2") + .replace(/\/g, "}"); + + var identity, + border, + frame, + color = 0; + + if (/W/.test(manaCost)) color += 1; + if (/U/.test(manaCost)) color += 2; + if (/B/.test(manaCost)) color += 4; + if (/R/.test(manaCost)) color += 8; + if (/G/.test(manaCost)) color += 16; + + switch (color) { + case 0: + border = "C"; + frame = "C"; + break; + case 1: + border = "W"; + frame = "W"; + break; + case 2: + border = "U"; + frame = "U"; + break; + case 4: + border = "B"; + frame = "B"; + break; + case 8: + border = "R"; + frame = "R"; + break; + case 16: + border = "G"; + frame = "G"; + break; + + case 3: + border = "WU"; + frame = "Gld"; + if (/[WUBRG]\/[WUBRG]/.test(manaCost)) frame = border; + break; + case 5: + border = "WB"; + frame = "Gld"; + if (/[WUBRG]\/[WUBRG]/.test(manaCost)) frame = border; + break; + case 6: + border = "UB"; + frame = "Gld"; + if (/[WUBRG]\/[WUBRG]/.test(manaCost)) frame = border; + break; + case 9: + border = "RW"; + frame = "Gld"; + if (/[WUBRG]\/[WUBRG]/.test(manaCost)) frame = border; + break; + case 10: + border = "UR"; + frame = "Gld"; + if (/[WUBRG]\/[WUBRG]/.test(manaCost)) frame = border; + break; + case 12: + border = "BR"; + frame = "Gld"; + if (/[WUBRG]\/[WUBRG]/.test(manaCost)) frame = border; + break; + case 17: + border = "GW"; + frame = "Gld"; + if (/[WUBRG]\/[WUBRG]/.test(manaCost)) frame = border; + break; + case 18: + border = "GU"; + frame = "Gld"; + if (/[WUBRG]\/[WUBRG]/.test(manaCost)) frame = border; + break; + case 20: + border = "BG"; + frame = "Gld"; + if (/[WUBRG]\/[WUBRG]/.test(manaCost)) frame = border; + break; + case 24: + border = "RG"; + frame = "Gld"; + if (/[WUBRG]\/[WUBRG]/.test(manaCost)) frame = border; + break; + + case 7: + case 11: + case 13: + case 14: + case 15: + case 19: + case 21: + case 22: + case 23: + case 25: + case 26: + case 27: + case 28: + case 29: + case 30: + case 31: + border = "Gld"; + frame = "Gld"; + } + + var key = [ + "card-number", + "card-total", + "card-set", + "language", + "card-title", + "mana-cost", + "super-type", + "type", + "sub-type", + "text-size", + "rarity", + "artist", + "power", + "toughness", + "loyalty", + "artwork", + "designer", + "card-template", + "card-border", + "card-overlay", + "land-overlay", + "watermark", + "pt-color", + "card-layout", + "color-indicator", + "set-symbol" + ]; + var toggle = [ + "centered", + "large-size", + "shiftrulestext", + "colorshifted", + "foil", + "lighten" + ]; + + for (var i = 0; i < key.length; i++) { + var value = data[key[i]]; + if (value) { + card += + "&" + key[i] + "=" + encodeURIComponent(value.replace(/\s+$/, "")); + } + } + for (var i = 0; i < toggle.length; i++) { + var value = data[toggle[i]] == true; + if (value) { + card += "&" + toggle[i] + "=true"; + } + } + + if (data.type == "Planeswalker") { + card += "&pw-size=" + data["pw-size"]; + //TODO Proper pw + card += + "&rules-text=" + + data["loyalty-ability-1"] + + ": " + + encodeURIComponent(data["rules-text"] + " "); + /* + for (var i = 2; i <= $("#pw-size").val(); i++) { + card += + "&pw-text" + + i + + "=" + + $("#loyalty-ability-" + i).val() + + ": " + + encodeURIComponent($("#planeswalker-text-" + i).val() + " "); + } + */ + } else { + card += "&rules-text=" + encodeURIComponent(data["rules-text"]); + card += "&flavor-text=" + encodeURIComponent(data["flavor-text"]); + } + + card += + "&card-template=" + + encodeURIComponent(frame) + + "&card-accent=" + + encodeURIComponent(border); + card += "&edit=false"; + + return urlbase + card.substring(1); +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..ba84ccd --- /dev/null +++ b/package.json @@ -0,0 +1,16 @@ +{ + "name": "mtgetk", + "version": "1.0.0", + "main": "index.js", + "license": "MIT", + "dependencies": { + "@types/node": "^12.7.3", + "@types/yargs": "^13.0.2", + "ts-node": "^8.3.0", + "typescript": "^3.6.2", + "yargs": "^14.0.0" + }, + "scripts": { + "genurl": "ts-node index.ts genurl" + } +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..6ef1005 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,246 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@types/node@^12.7.3": + version "12.7.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.3.tgz#27b3f40addaf2f580459fdb405222685542f907a" + integrity sha512-3SiLAIBkDWDg6vFo0+5YJyHPWU9uwu40Qe+v+0MH8wRKYBimHvvAOyk3EzMrD/TrIlLYfXrqDqrg913PynrMJQ== + +"@types/yargs-parser@*": + version "13.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.0.0.tgz#453743c5bbf9f1bed61d959baab5b06be029b2d0" + integrity sha512-wBlsw+8n21e6eTd4yVv8YD/E3xq0O6nNnJIquutAsFGE7EyMKz7W6RNT6BRu1SmdgmlCZ9tb0X+j+D6HGr8pZw== + +"@types/yargs@^13.0.2": + version "13.0.2" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.2.tgz#a64674fc0149574ecd90ba746e932b5a5f7b3653" + integrity sha512-lwwgizwk/bIIU+3ELORkyuOgDjCh7zuWDFqRtPPhhVgq9N1F7CvLNKg1TX4f2duwtKQ0p044Au9r1PLIXHrIzQ== + dependencies: + "@types/yargs-parser" "*" + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-styles@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +arg@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.1.tgz#485f8e7c390ce4c5f78257dbea80d4be11feda4c" + integrity sha512-SlmP3fEA88MBv0PypnXZ8ZfJhwmDeIE3SP71j37AiXQBXYosPV0x6uISAaHYSlSVhmHOVkomen0tbGk6Anlebw== + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +diff@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" + integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q== + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +make-error@^1.1.1: + version "1.3.5" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" + integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== + +p-limit@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" + integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== + dependencies: + p-try "^2.0.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +source-map-support@^0.5.6: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +ts-node@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.3.0.tgz#e4059618411371924a1fb5f3b125915f324efb57" + integrity sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ== + dependencies: + arg "^4.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.6" + yn "^3.0.0" + +typescript@^3.6.2: + version "3.6.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.6.2.tgz#105b0f1934119dde543ac8eb71af3a91009efe54" + integrity sha512-lmQ4L+J6mnu3xweP8+rOrUwzmN+MRAj7TgtJtDaXE5PMyX2kCrklhg3rvOsOIfNeAWMQWO2F1GPc1kMD2vLAfw== + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yargs-parser@^13.1.1: + version "13.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" + integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.0.0.tgz#ba4cacc802b3c0b3e36a9e791723763d57a85066" + integrity sha512-ssa5JuRjMeZEUjg7bEL99AwpitxU/zWGAGpdj0di41pOEmJti8NR6kyUIJBkR78DTYNPZOU08luUo0GTHuB+ow== + dependencies: + cliui "^5.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.1" + +yn@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==