├── .gitignore ├── LICENSE ├── README.md ├── assets └── data.csv ├── package.json ├── src └── generate-json.ts ├── tsconfig.json ├── tslint.json └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | .pnpm-debug.log* 9 | 10 | # Diagnostic reports (https://nodejs.org/api/report.html) 11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 12 | 13 | # Runtime data 14 | pids 15 | *.pid 16 | *.seed 17 | *.pid.lock 18 | 19 | # Directory for instrumented libs generated by jscoverage/JSCover 20 | lib-cov 21 | 22 | # Coverage directory used by tools like istanbul 23 | coverage 24 | *.lcov 25 | 26 | # nyc test coverage 27 | .nyc_output 28 | 29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 30 | .grunt 31 | 32 | # Bower dependency directory (https://bower.io/) 33 | bower_components 34 | 35 | # node-waf configuration 36 | .lock-wscript 37 | 38 | # Compiled binary addons (https://nodejs.org/api/addons.html) 39 | build/Release 40 | 41 | # Dependency directories 42 | node_modules/ 43 | jspm_packages/ 44 | 45 | # Snowpack dependency directory (https://snowpack.dev/) 46 | web_modules/ 47 | 48 | # TypeScript cache 49 | *.tsbuildinfo 50 | 51 | # Optional npm cache directory 52 | .npm 53 | 54 | # Optional eslint cache 55 | .eslintcache 56 | 57 | # Microbundle cache 58 | .rpt2_cache/ 59 | .rts2_cache_cjs/ 60 | .rts2_cache_es/ 61 | .rts2_cache_umd/ 62 | 63 | # Optional REPL history 64 | .node_repl_history 65 | 66 | # Output of 'npm pack' 67 | *.tgz 68 | 69 | # Yarn Integrity file 70 | .yarn-integrity 71 | 72 | # dotenv environment variables file 73 | .env 74 | .env.test 75 | .env.production 76 | 77 | # parcel-bundler cache (https://parceljs.org/) 78 | .cache 79 | .parcel-cache 80 | 81 | # Next.js build output 82 | .next 83 | out 84 | 85 | # Nuxt.js build / generate output 86 | .nuxt 87 | dist 88 | 89 | # Gatsby files 90 | .cache/ 91 | # Comment in the public line in if your project uses Gatsby and not Next.js 92 | # https://nextjs.org/blog/next-9-1#public-directory-support 93 | # public 94 | 95 | # vuepress build output 96 | .vuepress/dist 97 | 98 | # Serverless directories 99 | .serverless/ 100 | 101 | # FuseBox cache 102 | .fusebox/ 103 | 104 | # DynamoDB Local files 105 | .dynamodb/ 106 | 107 | # TernJS port file 108 | .tern-port 109 | 110 | # Stores VSCode versions used for testing VSCode extensions 111 | .vscode-test 112 | 113 | # yarn v2 114 | .yarn/cache 115 | .yarn/unplugged 116 | .yarn/build-state.yml 117 | .yarn/install-state.gz 118 | .pnp.* 119 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Thug DAO 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Convert CSV to JSON metadata files 2 | 3 | This script generates JSON metadata files for use with [Metaplex Candy Machine](https://github.com/metaplex-foundation/metaplex/tree/master/js/packages/cli) cli. 4 | 5 | ## How to use 6 | 7 | Edit file `src/generate-json.ts` line 18-50 inserting detailes specific for your collection, like art name, descrioption, collection url, creator address. 8 | 9 | Replace `assets/data.csv` with your specific CSV file with structure similar to this with first column art index and the rest art attributes (traits) 10 | 11 | | Art Index | Attribute A | Attribute B | Attribute C | 12 | | --------- | ----------- | ----------- | ----------- | 13 | | 0 | Black | Yes | C00 | 14 | | 1 | White | Yes | C01 | 15 | | 2 | Red | No | C02 | 16 | 17 | Run the script 18 | 19 | ``` 20 | yarn 21 | yarn start 22 | ``` 23 | 24 | JSON metadata file will be genrated for each row with name `[index].json` within `assets` folder. 25 | -------------------------------------------------------------------------------- /assets/data.csv: -------------------------------------------------------------------------------- 1 | Name,Background Color,Head Color,Neck Color 2 | 0000,palegreen,lightblue,lightslategray 3 | 0001,coral,lightgoldenrodyellow,gray 4 | 0002,coral,wheat,darkseagreen 5 | 0003,khaki,silver,lightslategray 6 | 0004,palegreen,silver,darkkhaki 7 | 0005,aquamarine,paleturquoise,cadetblue 8 | 0006,khaki,ivory,gray 9 | 0007,thistle,wheat,slategray 10 | 0008,khaki,lightcyan,lightcyan 11 | 0009,thistle,lightsteelblue,dimgray 12 | 0010,thistle,lightsteelblue,dimgray 13 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "generate-candy-machine-json", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "type": "module", 6 | "license": "MIT", 7 | "scripts": { 8 | "start": "tsc && node dist/generate-json.js", 9 | "test": "echo \"Error: no test specified\" && exit 1" 10 | }, 11 | "dependencies": { 12 | "@types/node": "^16.9.1", 13 | "csv-parser": "^3.0.0", 14 | "tslint": "^6.1.3", 15 | "typescript": "^4.4.2" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/generate-json.ts: -------------------------------------------------------------------------------- 1 | import * as fs from "fs"; 2 | import path, { dirname } from "path"; 3 | import { fileURLToPath } from "url"; 4 | import csv from "csv-parser"; 5 | 6 | const __filename = fileURLToPath(import.meta.url); 7 | const __dirname = dirname(__filename); 8 | const results = []; 9 | 10 | type Attribute = { 11 | trait_type: string; 12 | value: string; 13 | }; 14 | 15 | 16 | const assetsPath = "../assets"; 17 | const dataFilePath = "data.csv"; 18 | const creatorAddress = "SOL1234567890ABCDEFGHIGHKLMNOPQSTUVWXYZ"; 19 | 20 | const getNftName = (name: string) => `ART #${name}`; 21 | const getMetadata = (name: string, attributes: Attribute[]) => ({ 22 | name: getNftName(name), 23 | symbol: "", 24 | description: "You hold in your possession an awesome art.", 25 | seller_fee_basis_points: 500, 26 | // "image.png" will be replaced with actual URL by metaplex cli 27 | image: "image.png", 28 | external_url: "https://solflare.com", 29 | animation_url: "", 30 | collection: { 31 | name: "Solflare X NFT", 32 | family: "Solflare", 33 | }, 34 | properties: { 35 | files: [ 36 | { 37 | // "image.png" will be replaced with actual URL by metaplex cli 38 | uri: "image.png", 39 | type: "image/png", 40 | }, 41 | ], 42 | category: "image", 43 | creators: [ 44 | { 45 | address: creatorAddress, 46 | share: 100, 47 | }, 48 | ], 49 | }, 50 | attributes, 51 | }); 52 | 53 | const getAttributes = (props) => { 54 | // map attributes to the proper key/value objects 55 | const attrs = Object.keys(props).map((key) => { 56 | return { 57 | trait_type: key, 58 | value: props[key], 59 | }; 60 | }); 61 | 62 | return attrs; 63 | }; 64 | 65 | const iterateOverItems = async () => { 66 | for (const row of results) { 67 | try { 68 | // get separately name and props 69 | const { Name: name, ...props } = row; 70 | // console.log("name", name); 71 | const nameByNumber = Number.parseInt(name); 72 | const attributes = getAttributes(props); 73 | 74 | const metadata = getMetadata(name, attributes); 75 | const metadataString = JSON.stringify(metadata); 76 | 77 | const fileName = `${nameByNumber}.json`; 78 | const filePath = path.resolve(__dirname, assetsPath, fileName); 79 | fs.writeFileSync(filePath, metadataString); 80 | 81 | console.log(`metadata for ${nameByNumber} done!`); 82 | } catch (e) { 83 | // Catch anything bad that happens 84 | console.error("We've thrown! Whoops!", e); 85 | } 86 | } 87 | }; 88 | 89 | const readCsv = async () => { 90 | fs.createReadStream(path.resolve(__dirname, assetsPath, dataFilePath)) 91 | .pipe(csv()) 92 | .on("data", (data) => results.push(data)) 93 | .on("end", () => { 94 | // console.log(results); 95 | // { 96 | // Name: '0000', 97 | // 'Background Color': 'palegreen', 98 | // 'Head Color': 'lightblue', 99 | // 'Neck Color': 'lightslategray', 100 | // ... 101 | // }, 102 | iterateOverItems(); 103 | }); 104 | }; 105 | 106 | const main = async () => { 107 | try { 108 | await readCsv(); 109 | } catch (error) { 110 | console.log("Script failed with error: ", error.message); 111 | } 112 | }; 113 | 114 | main(); 115 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "es2020", 4 | "esModuleInterop": true, 5 | "target": "es6", 6 | "moduleResolution": "node", 7 | "sourceMap": true, 8 | "outDir": "dist" 9 | }, 10 | "lib": ["es2015"] 11 | } 12 | -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "defaultSeverity": "error", 3 | "extends": [ 4 | "tslint:recommended" 5 | ], 6 | "jsRules": {}, 7 | "rules": {}, 8 | "rulesDirectory": [] 9 | } -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.0.0": 6 | version "7.14.5" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" 8 | integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== 9 | dependencies: 10 | "@babel/highlight" "^7.14.5" 11 | 12 | "@babel/helper-validator-identifier@^7.14.5": 13 | version "7.14.9" 14 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48" 15 | integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g== 16 | 17 | "@babel/highlight@^7.14.5": 18 | version "7.14.5" 19 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" 20 | integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== 21 | dependencies: 22 | "@babel/helper-validator-identifier" "^7.14.5" 23 | chalk "^2.0.0" 24 | js-tokens "^4.0.0" 25 | 26 | "@types/node@^16.9.1": 27 | version "16.9.1" 28 | resolved "https://registry.yarnpkg.com/@types/node/-/node-16.9.1.tgz#0611b37db4246c937feef529ddcc018cf8e35708" 29 | integrity sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g== 30 | 31 | ansi-styles@^3.2.1: 32 | version "3.2.1" 33 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 34 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 35 | dependencies: 36 | color-convert "^1.9.0" 37 | 38 | argparse@^1.0.7: 39 | version "1.0.10" 40 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 41 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 42 | dependencies: 43 | sprintf-js "~1.0.2" 44 | 45 | balanced-match@^1.0.0: 46 | version "1.0.2" 47 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 48 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 49 | 50 | brace-expansion@^1.1.7: 51 | version "1.1.11" 52 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 53 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 54 | dependencies: 55 | balanced-match "^1.0.0" 56 | concat-map "0.0.1" 57 | 58 | builtin-modules@^1.1.1: 59 | version "1.1.1" 60 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" 61 | integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= 62 | 63 | chalk@^2.0.0, chalk@^2.3.0: 64 | version "2.4.2" 65 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 66 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 67 | dependencies: 68 | ansi-styles "^3.2.1" 69 | escape-string-regexp "^1.0.5" 70 | supports-color "^5.3.0" 71 | 72 | color-convert@^1.9.0: 73 | version "1.9.3" 74 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 75 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 76 | dependencies: 77 | color-name "1.1.3" 78 | 79 | color-name@1.1.3: 80 | version "1.1.3" 81 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 82 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 83 | 84 | commander@^2.12.1: 85 | version "2.20.3" 86 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 87 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 88 | 89 | concat-map@0.0.1: 90 | version "0.0.1" 91 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 92 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 93 | 94 | csv-parser@^3.0.0: 95 | version "3.0.0" 96 | resolved "https://registry.yarnpkg.com/csv-parser/-/csv-parser-3.0.0.tgz#b88a6256d79e090a97a1b56451f9327b01d710e7" 97 | integrity sha512-s6OYSXAK3IdKqYO33y09jhypG/bSDHPuyCme/IdEHfWpLf/jKcpitVFyOC6UemgGk8v7Q5u2XE0vvwmanxhGlQ== 98 | dependencies: 99 | minimist "^1.2.0" 100 | 101 | diff@^4.0.1: 102 | version "4.0.2" 103 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" 104 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 105 | 106 | escape-string-regexp@^1.0.5: 107 | version "1.0.5" 108 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 109 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 110 | 111 | esprima@^4.0.0: 112 | version "4.0.1" 113 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 114 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 115 | 116 | fs.realpath@^1.0.0: 117 | version "1.0.0" 118 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 119 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 120 | 121 | function-bind@^1.1.1: 122 | version "1.1.1" 123 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 124 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 125 | 126 | glob@^7.1.1: 127 | version "7.1.7" 128 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" 129 | integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== 130 | dependencies: 131 | fs.realpath "^1.0.0" 132 | inflight "^1.0.4" 133 | inherits "2" 134 | minimatch "^3.0.4" 135 | once "^1.3.0" 136 | path-is-absolute "^1.0.0" 137 | 138 | has-flag@^3.0.0: 139 | version "3.0.0" 140 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 141 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 142 | 143 | has@^1.0.3: 144 | version "1.0.3" 145 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 146 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 147 | dependencies: 148 | function-bind "^1.1.1" 149 | 150 | inflight@^1.0.4: 151 | version "1.0.6" 152 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 153 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 154 | dependencies: 155 | once "^1.3.0" 156 | wrappy "1" 157 | 158 | inherits@2: 159 | version "2.0.4" 160 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 161 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 162 | 163 | is-core-module@^2.2.0: 164 | version "2.6.0" 165 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.6.0.tgz#d7553b2526fe59b92ba3e40c8df757ec8a709e19" 166 | integrity sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ== 167 | dependencies: 168 | has "^1.0.3" 169 | 170 | js-tokens@^4.0.0: 171 | version "4.0.0" 172 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 173 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 174 | 175 | js-yaml@^3.13.1: 176 | version "3.14.1" 177 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" 178 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== 179 | dependencies: 180 | argparse "^1.0.7" 181 | esprima "^4.0.0" 182 | 183 | minimatch@^3.0.4: 184 | version "3.0.4" 185 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 186 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 187 | dependencies: 188 | brace-expansion "^1.1.7" 189 | 190 | minimist@^1.2.0, minimist@^1.2.5: 191 | version "1.2.5" 192 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 193 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 194 | 195 | mkdirp@^0.5.3: 196 | version "0.5.5" 197 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" 198 | integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== 199 | dependencies: 200 | minimist "^1.2.5" 201 | 202 | once@^1.3.0: 203 | version "1.4.0" 204 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 205 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 206 | dependencies: 207 | wrappy "1" 208 | 209 | path-is-absolute@^1.0.0: 210 | version "1.0.1" 211 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 212 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 213 | 214 | path-parse@^1.0.6: 215 | version "1.0.7" 216 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 217 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 218 | 219 | resolve@^1.3.2: 220 | version "1.20.0" 221 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" 222 | integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== 223 | dependencies: 224 | is-core-module "^2.2.0" 225 | path-parse "^1.0.6" 226 | 227 | semver@^5.3.0: 228 | version "5.7.1" 229 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 230 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 231 | 232 | sprintf-js@~1.0.2: 233 | version "1.0.3" 234 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 235 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 236 | 237 | supports-color@^5.3.0: 238 | version "5.5.0" 239 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 240 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 241 | dependencies: 242 | has-flag "^3.0.0" 243 | 244 | tslib@^1.13.0, tslib@^1.8.1: 245 | version "1.14.1" 246 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 247 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 248 | 249 | tslint@^6.1.3: 250 | version "6.1.3" 251 | resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.1.3.tgz#5c23b2eccc32487d5523bd3a470e9aa31789d904" 252 | integrity sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg== 253 | dependencies: 254 | "@babel/code-frame" "^7.0.0" 255 | builtin-modules "^1.1.1" 256 | chalk "^2.3.0" 257 | commander "^2.12.1" 258 | diff "^4.0.1" 259 | glob "^7.1.1" 260 | js-yaml "^3.13.1" 261 | minimatch "^3.0.4" 262 | mkdirp "^0.5.3" 263 | resolve "^1.3.2" 264 | semver "^5.3.0" 265 | tslib "^1.13.0" 266 | tsutils "^2.29.0" 267 | 268 | tsutils@^2.29.0: 269 | version "2.29.0" 270 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" 271 | integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== 272 | dependencies: 273 | tslib "^1.8.1" 274 | 275 | typescript@^4.4.2: 276 | version "4.4.2" 277 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.2.tgz#6d618640d430e3569a1dfb44f7d7e600ced3ee86" 278 | integrity sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ== 279 | 280 | wrappy@1: 281 | version "1.0.2" 282 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 283 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 284 | --------------------------------------------------------------------------------