├── .gitignore ├── package.json ├── src ├── foodclub-parser.ts └── test.ts ├── tsconfig.json └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "scraping-example", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "test.ts", 6 | "scripts": { 7 | "start": "ts-node src/test.ts" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "@types/cheerio": "^0.22.18", 14 | "@types/node": "^14.0.1", 15 | "@types/node-fetch": "^2.5.7", 16 | "cheerio": "^1.0.0-rc.3", 17 | "encoding": "^0.1.12", 18 | "node-fetch": "^2.6.0", 19 | "ts-node": "^8.10.1", 20 | "typescript": "^3.9.2" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/foodclub-parser.ts: -------------------------------------------------------------------------------- 1 | interface Ingredient { 2 | amount: string; 3 | unit: string; 4 | name: string; 5 | } 6 | 7 | interface IngredientHeader { 8 | text: string 9 | } 10 | 11 | interface Instruction { 12 | text: string; 13 | isHeader: boolean; 14 | } 15 | 16 | export const foodClubParser = ($: CheerioStatic, url: string) => { 17 | const recipe = { 18 | description: "", 19 | instructions: [] as Instruction[], 20 | name: "", 21 | pictureUrl: "", 22 | servings: "", 23 | source: "", 24 | sourceUrl: url, 25 | // example values for time type: "Cook" | "Prep" | "Marinate" 26 | // default it to "Cook" if none provided by website 27 | times: [] as Array<{ type: string; minutes: number }>, 28 | ingredients: [] as Array, 29 | }; 30 | 31 | recipe.source = $('span[itemprop="author"]')?.text(); 32 | recipe.name = $('span[itemprop="name"]')?.text(); 33 | // etc 34 | 35 | return recipe; 36 | }; 37 | -------------------------------------------------------------------------------- /src/test.ts: -------------------------------------------------------------------------------- 1 | import cheerio from "cheerio"; 2 | import fetch from "node-fetch"; 3 | import { foodClubParser } from "./foodclub-parser"; 4 | 5 | const url = "https://www.foodclub.ru/detail/solyanka-sbornaya-myasnaya/"; 6 | 7 | const test = async () => { 8 | const html = await fetch(url).then((x) => x.textConverted()); 9 | const $ = cheerio.load(html); 10 | 11 | console.log(foodClubParser($, url)); 12 | }; 13 | 14 | test(); 15 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES6", 4 | "module": "CommonJS", 5 | "lib": ["dom", "es6", "es2017", "esnext.asynciterable"], 6 | "sourceMap": true, 7 | "outDir": "./dist", 8 | "moduleResolution": "node", 9 | "removeComments": true, 10 | "noImplicitAny": true, 11 | "strictNullChecks": true, 12 | "strictFunctionTypes": true, 13 | "noImplicitThis": true, 14 | "noUnusedLocals": true, 15 | "noUnusedParameters": true, 16 | "noImplicitReturns": true, 17 | "noFallthroughCasesInSwitch": true, 18 | "allowSyntheticDefaultImports": true, 19 | "esModuleInterop": true, 20 | "emitDecoratorMetadata": true, 21 | "experimentalDecorators": true, 22 | "resolveJsonModule": true, 23 | "baseUrl": "." 24 | }, 25 | "exclude": ["node_modules"], 26 | "include": ["./src/**/*.tsx", "./src/**/*.ts"] 27 | } 28 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/cheerio@^0.22.18": 6 | version "0.22.18" 7 | resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.18.tgz#19018dceae691509901e339d63edf1e935978fe6" 8 | integrity sha512-Fq7R3fINAPSdUEhOyjG4iVxgHrOnqDJbY0/BUuiN0pvD/rfmZWekVZnv+vcs8TtpA2XF50uv50LaE4EnpEL/Hw== 9 | dependencies: 10 | "@types/node" "*" 11 | 12 | "@types/node-fetch@^2.5.7": 13 | version "2.5.7" 14 | resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.7.tgz#20a2afffa882ab04d44ca786449a276f9f6bbf3c" 15 | integrity sha512-o2WVNf5UhWRkxlf6eq+jMZDu7kjgpgJfl4xVNlvryc95O/6F2ld8ztKX+qu+Rjyet93WAWm5LjeX9H5FGkODvw== 16 | dependencies: 17 | "@types/node" "*" 18 | form-data "^3.0.0" 19 | 20 | "@types/node@*", "@types/node@^14.0.1": 21 | version "14.0.1" 22 | resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.1.tgz#5d93e0a099cd0acd5ef3d5bde3c086e1f49ff68c" 23 | integrity sha512-FAYBGwC+W6F9+huFIDtn43cpy7+SzG+atzRiTfdp3inUKL2hXnd4rG8hylJLIh4+hqrQy1P17kvJByE/z825hA== 24 | 25 | arg@^4.1.0: 26 | version "4.1.3" 27 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" 28 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== 29 | 30 | asynckit@^0.4.0: 31 | version "0.4.0" 32 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 33 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 34 | 35 | boolbase@~1.0.0: 36 | version "1.0.0" 37 | resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" 38 | integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= 39 | 40 | buffer-from@^1.0.0: 41 | version "1.1.1" 42 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 43 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 44 | 45 | cheerio@^1.0.0-rc.3: 46 | version "1.0.0-rc.3" 47 | resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.3.tgz#094636d425b2e9c0f4eb91a46c05630c9a1a8bf6" 48 | integrity sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA== 49 | dependencies: 50 | css-select "~1.2.0" 51 | dom-serializer "~0.1.1" 52 | entities "~1.1.1" 53 | htmlparser2 "^3.9.1" 54 | lodash "^4.15.0" 55 | parse5 "^3.0.1" 56 | 57 | combined-stream@^1.0.8: 58 | version "1.0.8" 59 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 60 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 61 | dependencies: 62 | delayed-stream "~1.0.0" 63 | 64 | css-select@~1.2.0: 65 | version "1.2.0" 66 | resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" 67 | integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= 68 | dependencies: 69 | boolbase "~1.0.0" 70 | css-what "2.1" 71 | domutils "1.5.1" 72 | nth-check "~1.0.1" 73 | 74 | css-what@2.1: 75 | version "2.1.3" 76 | resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" 77 | integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== 78 | 79 | delayed-stream@~1.0.0: 80 | version "1.0.0" 81 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 82 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 83 | 84 | diff@^4.0.1: 85 | version "4.0.2" 86 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" 87 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 88 | 89 | dom-serializer@0: 90 | version "0.2.2" 91 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" 92 | integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== 93 | dependencies: 94 | domelementtype "^2.0.1" 95 | entities "^2.0.0" 96 | 97 | dom-serializer@~0.1.1: 98 | version "0.1.1" 99 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" 100 | integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== 101 | dependencies: 102 | domelementtype "^1.3.0" 103 | entities "^1.1.1" 104 | 105 | domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: 106 | version "1.3.1" 107 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" 108 | integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== 109 | 110 | domelementtype@^2.0.1: 111 | version "2.0.1" 112 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" 113 | integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== 114 | 115 | domhandler@^2.3.0: 116 | version "2.4.2" 117 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" 118 | integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== 119 | dependencies: 120 | domelementtype "1" 121 | 122 | domutils@1.5.1: 123 | version "1.5.1" 124 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" 125 | integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= 126 | dependencies: 127 | dom-serializer "0" 128 | domelementtype "1" 129 | 130 | domutils@^1.5.1: 131 | version "1.7.0" 132 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" 133 | integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== 134 | dependencies: 135 | dom-serializer "0" 136 | domelementtype "1" 137 | 138 | encoding@^0.1.12: 139 | version "0.1.12" 140 | resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" 141 | integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= 142 | dependencies: 143 | iconv-lite "~0.4.13" 144 | 145 | entities@^1.1.1, entities@~1.1.1: 146 | version "1.1.2" 147 | resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" 148 | integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== 149 | 150 | entities@^2.0.0: 151 | version "2.0.2" 152 | resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.2.tgz#ac74db0bba8d33808bbf36809c3a5c3683531436" 153 | integrity sha512-dmD3AvJQBUjKpcNkoqr+x+IF0SdRtPz9Vk0uTy4yWqga9ibB6s4v++QFWNohjiUGoMlF552ZvNyXDxz5iW0qmw== 154 | 155 | form-data@^3.0.0: 156 | version "3.0.0" 157 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.0.tgz#31b7e39c85f1355b7139ee0c647cf0de7f83c682" 158 | integrity sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg== 159 | dependencies: 160 | asynckit "^0.4.0" 161 | combined-stream "^1.0.8" 162 | mime-types "^2.1.12" 163 | 164 | htmlparser2@^3.9.1: 165 | version "3.10.1" 166 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" 167 | integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== 168 | dependencies: 169 | domelementtype "^1.3.1" 170 | domhandler "^2.3.0" 171 | domutils "^1.5.1" 172 | entities "^1.1.1" 173 | inherits "^2.0.1" 174 | readable-stream "^3.1.1" 175 | 176 | iconv-lite@~0.4.13: 177 | version "0.4.24" 178 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 179 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 180 | dependencies: 181 | safer-buffer ">= 2.1.2 < 3" 182 | 183 | inherits@^2.0.1, inherits@^2.0.3: 184 | version "2.0.4" 185 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 186 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 187 | 188 | lodash@^4.15.0: 189 | version "4.17.15" 190 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" 191 | integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== 192 | 193 | make-error@^1.1.1: 194 | version "1.3.6" 195 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 196 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 197 | 198 | mime-db@1.44.0: 199 | version "1.44.0" 200 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" 201 | integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== 202 | 203 | mime-types@^2.1.12: 204 | version "2.1.27" 205 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" 206 | integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== 207 | dependencies: 208 | mime-db "1.44.0" 209 | 210 | node-fetch@^2.6.0: 211 | version "2.6.0" 212 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" 213 | integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== 214 | 215 | nth-check@~1.0.1: 216 | version "1.0.2" 217 | resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" 218 | integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== 219 | dependencies: 220 | boolbase "~1.0.0" 221 | 222 | parse5@^3.0.1: 223 | version "3.0.3" 224 | resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" 225 | integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA== 226 | dependencies: 227 | "@types/node" "*" 228 | 229 | readable-stream@^3.1.1: 230 | version "3.6.0" 231 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" 232 | integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== 233 | dependencies: 234 | inherits "^2.0.3" 235 | string_decoder "^1.1.1" 236 | util-deprecate "^1.0.1" 237 | 238 | safe-buffer@~5.2.0: 239 | version "5.2.1" 240 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 241 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 242 | 243 | "safer-buffer@>= 2.1.2 < 3": 244 | version "2.1.2" 245 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 246 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 247 | 248 | source-map-support@^0.5.17: 249 | version "0.5.19" 250 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" 251 | integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== 252 | dependencies: 253 | buffer-from "^1.0.0" 254 | source-map "^0.6.0" 255 | 256 | source-map@^0.6.0: 257 | version "0.6.1" 258 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 259 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 260 | 261 | string_decoder@^1.1.1: 262 | version "1.3.0" 263 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" 264 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== 265 | dependencies: 266 | safe-buffer "~5.2.0" 267 | 268 | ts-node@^8.10.1: 269 | version "8.10.1" 270 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.10.1.tgz#77da0366ff8afbe733596361d2df9a60fc9c9bd3" 271 | integrity sha512-bdNz1L4ekHiJul6SHtZWs1ujEKERJnHs4HxN7rjTyyVOFf3HaJ6sLqe6aPG62XTzAB/63pKRh5jTSWL0D7bsvw== 272 | dependencies: 273 | arg "^4.1.0" 274 | diff "^4.0.1" 275 | make-error "^1.1.1" 276 | source-map-support "^0.5.17" 277 | yn "3.1.1" 278 | 279 | typescript@^3.9.2: 280 | version "3.9.2" 281 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.2.tgz#64e9c8e9be6ea583c54607677dd4680a1cf35db9" 282 | integrity sha512-q2ktq4n/uLuNNShyayit+DTobV2ApPEo/6so68JaD5ojvc/6GClBipedB9zNWYxRSAlZXAe405Rlijzl6qDiSw== 283 | 284 | util-deprecate@^1.0.1: 285 | version "1.0.2" 286 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 287 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 288 | 289 | yn@3.1.1: 290 | version "3.1.1" 291 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" 292 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 293 | --------------------------------------------------------------------------------