Mirror: Modular GraphQL.js import paths without the hassle.

Compare changes

Choose any two refs to compare.

+26
.github/workflows/mirror.yml
··· 1 + # Mirrors to https://tangled.sh/@kitten.sh (knot.kitten.sh) 2 + name: Mirror (Git Backup) 3 + on: 4 + push: 5 + branches: 6 + - main 7 + jobs: 8 + mirror: 9 + runs-on: ubuntu-latest 10 + steps: 11 + - name: Checkout repository 12 + uses: actions/checkout@v4 13 + with: 14 + fetch-depth: 0 15 + fetch-tags: true 16 + - name: Mirror 17 + env: 18 + MIRROR_SSH_KEY: ${{ secrets.MIRROR_SSH_KEY }} 19 + GIT_SSH_COMMAND: 'ssh -o StrictHostKeyChecking=yes' 20 + run: | 21 + mkdir -p ~/.ssh 22 + echo "$MIRROR_SSH_KEY" > ~/.ssh/id_rsa 23 + chmod 600 ~/.ssh/id_rsa 24 + ssh-keyscan -H knot.kitten.sh >> ~/.ssh/known_hosts 25 + git remote add mirror "git@knot.kitten.sh:kitten.sh/${GITHUB_REPOSITORY#*/}" 26 + git push --mirror mirror
+3
README.md
··· 3 3 A small transform plugin to cherry-pick GraphQL modules so you don’t have to. 4 4 Basically [babel-plugin-lodash](https://github.com/lodash/babel-plugin-lodash) for [graphql](https://github.com/graphql/graphql-js). 5 5 6 + This automatically finds the most specific import from the graphql module's files and folders that works 7 + across GraphQL.js v14, v15, and v16. 8 + 6 9 ## Getting Started 7 10 8 11 ```sh
-10
import-map-overrides.json
··· 1 - { 2 - "visitWithTypeInfo": { 3 - "local": "visitWithTypeInfo", 4 - "from": "graphql" 5 - }, 6 - "executeSync": { 7 - "local": "executeSync", 8 - "from": "graphql" 9 - } 10 - }
+14 -5
index.js
··· 5 5 } 6 6 7 7 const importMap = require('./import-map.json'); 8 - const importMapOverrides = require('./import-map-overrides.json'); 8 + const indexRe = /[\\/]index$/; 9 9 const PKG_NAME = 'graphql'; 10 10 11 11 return { ··· 20 20 const imported = specifier.imported.name; 21 21 22 22 let declaration = importMap[imported]; 23 - if (importMapOverrides[imported]) { 24 - declaration = importMapOverrides[imported]; 23 + if (!declaration) { 24 + console.warn( 25 + `The export "${imported}" could not be found. It may not be known, or may not be available consistently between graphql@14|15|16.\n` + 26 + 'Try using an alternative method or check whether this method is present in the provided range of graphql major releases.' 27 + ); 25 28 } 26 29 27 - const from = declaration ? declaration.from : PKG_NAME; 30 + let from = declaration ? declaration.from : PKG_NAME; 28 31 if (!acc[from]) { 29 - acc[from] = t.importDeclaration([], t.stringLiteral(from + extension)); 32 + if (from !== PKG_NAME && extension) { 33 + from += extension; 34 + } else if (from !== PKG_NAME && from.endsWith('')) { 35 + from = from.replace(indexRe, ''); 36 + } 37 + 38 + acc[from] = t.importDeclaration([], t.stringLiteral(from)); 30 39 } 31 40 32 41 const localName = specifier.local.name;
+17 -7
package.json
··· 1 1 { 2 2 "name": "babel-plugin-modular-graphql", 3 3 "description": "Modular GraphQL.js import paths without the hassle", 4 - "version": "1.0.0", 4 + "version": "1.1.0", 5 5 "main": "index.js", 6 6 "author": "Phil Pluckthun <phil@kitten.sh>", 7 7 "license": "MIT", ··· 24 24 "modular", 25 25 "tree-shaking" 26 26 ], 27 + "peerDependencies": { 28 + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0" 29 + }, 30 + "peerDependenciesMeta": { 31 + "graphql": { 32 + "optional": true 33 + } 34 + }, 27 35 "devDependencies": { 28 - "@rollup/plugin-node-resolve": "^10.0.0", 29 - "graphql": "^15.4.0", 30 - "husky": "^4.3.0", 31 - "lint-staged": "^10.5.0", 32 - "prettier": "^2.1.2", 33 - "rollup": "^2.32.1" 36 + "@rollup/plugin-node-resolve": "^13.1.1", 37 + "graphql-14": "npm:graphql@^14.5.8", 38 + "graphql-15": "npm:graphql@^16.1.0", 39 + "graphql-16": "npm:graphql@^15.8.0", 40 + "husky-v4": "^4.3.0", 41 + "lint-staged": "^12.1.2", 42 + "prettier": "^2.5.1", 43 + "rollup": "^2.61.1" 34 44 }, 35 45 "lint-staged": { 36 46 "*.{json,js}": [
+116 -89
scripts/generate-import-map.js
··· 3 3 4 4 const { rollup } = require('rollup'); 5 5 6 - const cwd = process.cwd(); 7 - const basepath = path.resolve(cwd, 'node_modules/graphql/'); 6 + /** Generates a map of exports from a given graphql package to list of import locations. */ 7 + async function traceImports(moduleName) { 8 + const basepath = path.resolve(process.cwd(), 'node_modules/', moduleName); 9 + const exportMap = {}; 8 10 9 - function generateImportMapPlugin(opts = {}) { 10 - const maxDepth = opts.maxDepth || 2; 11 - const filename = opts.filename || 'import-map.json'; 12 - const map = new Map(); 13 - 14 - const resolveFile = (from, to) => { 15 - return path.join(from, to); 11 + const resolveFile = (to, relative = '.') => { 12 + const dirname = path.join('graphql/', relative, path.dirname(to)); 13 + const filename = path.basename(to, '.mjs'); 14 + return path.join(dirname, filename); 16 15 }; 17 16 18 - const resolveFromMap = (id, name, depth = 0) => { 19 - const exports = map.get(id); 20 - if (!exports || !exports.has(name)) return null; 17 + const bundle = await rollup({ 18 + // This contains all top-level "sub-modules" of graphql too, since not all exports of 19 + // them may be exposed in the main index.mjs file. 20 + input: { 21 + graphql: path.join(basepath, 'index.mjs'), 22 + 'graphql/error': path.join(basepath, 'error/index.mjs'), 23 + 'graphql/execution': path.join(basepath, 'execution/index.mjs'), 24 + 'graphql/language': path.join(basepath, 'language/index.mjs'), 25 + 'graphql/subscription': path.join(basepath, 'subscription/index.mjs'), 26 + 'graphql/type': path.join(basepath, 'type/index.mjs'), 27 + 'graphql/utilities': path.join(basepath, 'utilities/index.mjs'), 28 + 'graphql/validation': path.join(basepath, 'validation/index.mjs'), 29 + }, 30 + external: (id) => !/^\.{0,2}\//.test(id), 31 + preserveModules: true, 32 + plugins: [ 33 + require('@rollup/plugin-node-resolve').nodeResolve(), 34 + { 35 + transform(code, id) { 36 + const relative = path.relative(basepath, id); 37 + const dirname = path.dirname(relative); 38 + const exports = {}; 21 39 22 - const declaration = exports.get(name); 23 - if (depth >= maxDepth || declaration.from === id) { 24 - return declaration; 25 - } 40 + this.parse(code) 41 + .body.filter((x) => x.type === 'ExportNamedDeclaration') 42 + .forEach((node) => { 43 + const from = node.source 44 + ? resolveFile(node.source.value, dirname) 45 + : resolveFile(relative); 26 46 27 - return resolveFromMap(declaration.from, declaration.local, depth + 1) || declaration; 28 - }; 29 - 30 - return { 31 - name: 'generate-import-map', 32 - transform(code, id) { 33 - const relative = path.relative(basepath, id); 34 - const dirname = path.dirname(relative); 35 - const exports = new Map(); 36 - 37 - this.parse(code) 38 - .body.filter((x) => x.type === 'ExportNamedDeclaration') 39 - .forEach((node) => { 40 - const source = node.source ? resolveFile(dirname, node.source.value) : relative; 47 + node.specifiers.forEach((specifier) => { 48 + const { name: local } = specifier.exported; 49 + exports[local] = { local, from }; 50 + }); 41 51 42 - node.specifiers.forEach((specifier) => { 43 - exports.set(specifier.exported.name, { 44 - local: specifier.local.name, 45 - from: source, 46 - }); 47 - }); 48 - 49 - if (node.declaration) { 50 - (node.declaration.declarations || [node.declaration]).forEach((declaration) => { 51 - if (declaration && declaration.id) { 52 - const { name } = declaration.id; 53 - exports.set(declaration.id.name, { 54 - local: name, 55 - from: source, 52 + if (node.declaration) { 53 + (node.declaration.declarations || [node.declaration]).forEach((declaration) => { 54 + if (declaration && declaration.id) { 55 + const { name: local } = declaration.id; 56 + exports[local] = { local, from }; 57 + } 56 58 }); 57 59 } 58 60 }); 59 - } 60 - }); 61 + 62 + exportMap[resolveFile(relative)] = exports; 63 + return null; 64 + }, 65 + }, 66 + ], 67 + }); 68 + 69 + await bundle.generate({}); 70 + return exportMap; 71 + } 61 72 62 - map.set(relative, exports); 63 - return null; 64 - }, 65 - renderChunk(_code, chunk) { 66 - const id = chunk.facadeModuleId; 67 - const relative = path.relative(basepath, id); 73 + function isDeclarationEqual(a, b) { 74 + return a.local === b.local && a.from === b.from; 75 + } 68 76 69 - if (chunk.isEntry) { 70 - const importMap = chunk.exports.reduce((acc, name) => { 71 - const declaration = resolveFromMap(relative, name); 72 - if (declaration) { 73 - const dirname = path.join('graphql/', path.dirname(declaration.from)); 74 - const filename = path.basename(declaration.from, '.mjs'); 77 + function mergeTraces(traces) { 78 + const trace = {}; 75 79 76 - acc[name] = { 77 - local: declaration.local, 78 - from: path.join(dirname, filename), 79 - }; 80 - } 80 + // Iterate over all known filenames in all traces 81 + const ids = new Set( 82 + traces.map((trace) => Object.keys(trace)).reduce((acc, names) => acc.concat(names), []) 83 + ); 84 + for (const id of ids) { 85 + // Each file must exist in all traces 86 + if (!traces.every((trace) => !!trace[id])) continue; 81 87 82 - return acc; 83 - }, {}); 88 + const exports = {}; 84 89 85 - this.emitFile({ 86 - type: 'asset', 87 - filename, 88 - name: filename, 89 - source: JSON.stringify(importMap, null, 2), 90 - }); 90 + // Iterate over all known exports in each trace's set of exports for this file 91 + const exportNames = new Set( 92 + traces.map((trace) => Object.keys(trace[id])).reduce((acc, names) => acc.concat(names), []) 93 + ); 94 + for (const name of exportNames) { 95 + // Each export must exist in all traces 96 + if (traces.every((trace) => !!trace[id][name])) { 97 + // Collect known declarations and deduplicate 98 + exports[name] = traces 99 + .map((trace) => trace[id][name]) 100 + .filter((val, index, all) => { 101 + const firstIndex = all.findIndex((item) => isDeclarationEqual(item, val)); 102 + return firstIndex === index; 103 + }); 91 104 } 92 - }, 105 + } 106 + 107 + if (Object.keys(exports).length) trace[id] = exports; 108 + } 109 + 110 + // For a given declaration, find the first deepest one that works for the trace 111 + // NOTE: This doesn't find the absolute deepest one, since it assumes that each 112 + // export only has one functional trace 113 + const resolveDeclaration = (declaration) => { 114 + const declarations = trace[declaration.from]; 115 + if (!declarations || !declarations[declaration.local]) return null; 116 + for (const childDeclaration of declarations[declaration.local]) { 117 + if (childDeclaration.from === declaration.from) continue; 118 + const resolved = resolveDeclaration(childDeclaration); 119 + if (resolved && resolved.from !== declaration.from) return resolved; 120 + } 121 + 122 + return declaration; 93 123 }; 124 + 125 + // Resolve all known (and consistent) exports to a common, deepest declaration 126 + const ROOT_MODULE = 'graphql/index'; 127 + for (const local in trace[ROOT_MODULE]) 128 + exports[local] = resolveDeclaration({ local, from: ROOT_MODULE }); 129 + return exports; 94 130 } 95 131 96 132 (async () => { 97 - const bundle = await rollup({ 98 - input: path.join(basepath, 'index.mjs'), 99 - external: (id) => !/^\.{0,2}\//.test(id), 100 - preserveModules: true, 101 - plugins: [ 102 - require('@rollup/plugin-node-resolve').nodeResolve(), 103 - generateImportMapPlugin({ 104 - filename: 'import-map.json', 105 - }), 106 - ], 107 - }); 133 + const traces = await Promise.all([ 134 + traceImports('graphql-14'), 135 + traceImports('graphql-15'), 136 + traceImports('graphql-16'), 137 + ]); 108 138 109 - const { output } = await bundle.generate({}); 139 + const trace = mergeTraces(traces); 110 140 111 - fs.writeFileSync( 112 - path.resolve(cwd, 'import-map.json'), 113 - output.find((asset) => asset.type === 'asset').source 114 - ); 141 + fs.writeFileSync('import-map.json', JSON.stringify(trace, null, 2)); 115 142 })().catch((err) => { 116 - console.error(`${err.name}: ${err.message}`); 143 + console.error(`${err.name}: ${err.stack}`); 117 144 process.exit(1); 118 145 });
+253 -223
yarn.lock
··· 23 23 chalk "^2.0.0" 24 24 js-tokens "^4.0.0" 25 25 26 - "@rollup/plugin-node-resolve@^10.0.0": 27 - version "10.0.0" 28 - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-10.0.0.tgz#44064a2b98df7530e66acf8941ff262fc9b4ead8" 29 - integrity sha512-sNijGta8fqzwA1VwUEtTvWCx2E7qC70NMsDh4ZG13byAXYigBNZMxALhKUSycBks5gupJdq0lFrKumFrRZ8H3A== 26 + "@rollup/plugin-node-resolve@^13.1.1": 27 + version "13.1.1" 28 + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.1.1.tgz#d38ba06e7b181ab4df64c75409b43d9bdc95ae34" 29 + integrity sha512-6QKtRevXLrmEig9UiMYt2fSvee9TyltGRfw+qSs6xjUnxwjOzTOqy+/Lpxsgjb8mJn1EQNbCDAvt89O4uzL5kw== 30 30 dependencies: 31 31 "@rollup/pluginutils" "^3.1.0" 32 32 "@types/resolve" "1.17.1" 33 33 builtin-modules "^3.1.0" 34 34 deepmerge "^4.2.2" 35 35 is-module "^1.0.0" 36 - resolve "^1.17.0" 36 + resolve "^1.19.0" 37 37 38 38 "@rollup/pluginutils@^3.1.0": 39 39 version "3.1.0" ··· 90 90 version "5.0.0" 91 91 resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" 92 92 integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== 93 + 94 + ansi-regex@^6.0.1: 95 + version "6.0.1" 96 + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" 97 + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== 93 98 94 99 ansi-styles@^3.2.1: 95 100 version "3.2.1" ··· 105 110 dependencies: 106 111 color-convert "^2.0.1" 107 112 113 + ansi-styles@^6.0.0: 114 + version "6.1.0" 115 + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.1.0.tgz#87313c102b8118abd57371afab34618bf7350ed3" 116 + integrity sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ== 117 + 108 118 astral-regex@^2.0.0: 109 119 version "2.0.0" 110 120 resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" ··· 136 146 escape-string-regexp "^1.0.5" 137 147 supports-color "^5.3.0" 138 148 139 - chalk@^4.0.0, chalk@^4.1.0: 149 + chalk@^4.0.0: 140 150 version "4.1.0" 141 151 resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" 142 152 integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== ··· 168 178 dependencies: 169 179 slice-ansi "^3.0.0" 170 180 string-width "^4.2.0" 181 + 182 + cli-truncate@^3.1.0: 183 + version "3.1.0" 184 + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" 185 + integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== 186 + dependencies: 187 + slice-ansi "^5.0.0" 188 + string-width "^5.0.0" 171 189 172 190 color-convert@^1.9.0: 173 191 version "1.9.3" ··· 193 211 resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 194 212 integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 195 213 196 - commander@^6.0.0: 197 - version "6.2.0" 198 - resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.0.tgz#b990bfb8ac030aedc6d11bc04d1488ffef56db75" 199 - integrity sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q== 214 + colorette@^2.0.16: 215 + version "2.0.16" 216 + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" 217 + integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== 218 + 219 + commander@^8.3.0: 220 + version "8.3.0" 221 + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" 222 + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== 200 223 201 224 compare-versions@^3.6.0: 202 225 version "3.6.0" ··· 214 237 path-type "^4.0.0" 215 238 yaml "^1.10.0" 216 239 217 - cross-spawn@^7.0.0: 240 + cross-spawn@^7.0.3: 218 241 version "7.0.3" 219 242 resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 220 243 integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== ··· 223 246 shebang-command "^2.0.0" 224 247 which "^2.0.1" 225 248 226 - debug@^4.1.1: 227 - version "4.2.0" 228 - resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" 229 - integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== 249 + debug@^4.3.2: 250 + version "4.3.3" 251 + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" 252 + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== 230 253 dependencies: 231 254 ms "2.1.2" 232 - 233 - dedent@^0.7.0: 234 - version "0.7.0" 235 - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" 236 - integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= 237 255 238 256 deepmerge@^4.2.2: 239 257 version "4.2.2" ··· 245 263 resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 246 264 integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 247 265 248 - end-of-stream@^1.1.0: 249 - version "1.4.4" 250 - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" 251 - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 252 - dependencies: 253 - once "^1.4.0" 266 + emoji-regex@^9.2.2: 267 + version "9.2.2" 268 + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" 269 + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== 254 270 255 271 enquirer@^2.3.6: 256 272 version "2.3.6" ··· 276 292 resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" 277 293 integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== 278 294 279 - execa@^4.0.3: 280 - version "4.1.0" 281 - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" 282 - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== 295 + execa@^5.1.1: 296 + version "5.1.1" 297 + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" 298 + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== 283 299 dependencies: 284 - cross-spawn "^7.0.0" 285 - get-stream "^5.0.0" 286 - human-signals "^1.1.1" 300 + cross-spawn "^7.0.3" 301 + get-stream "^6.0.0" 302 + human-signals "^2.1.0" 287 303 is-stream "^2.0.0" 288 304 merge-stream "^2.0.0" 289 - npm-run-path "^4.0.0" 290 - onetime "^5.1.0" 291 - signal-exit "^3.0.2" 305 + npm-run-path "^4.0.1" 306 + onetime "^5.1.2" 307 + signal-exit "^3.0.3" 292 308 strip-final-newline "^2.0.0" 293 309 294 - figures@^3.2.0: 295 - version "3.2.0" 296 - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" 297 - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== 298 - dependencies: 299 - escape-string-regexp "^1.0.5" 300 - 301 310 fill-range@^7.0.1: 302 311 version "7.0.1" 303 312 resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" ··· 305 314 dependencies: 306 315 to-regex-range "^5.0.1" 307 316 308 - find-up@^4.0.0: 309 - version "4.1.0" 310 - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" 311 - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 317 + find-up@^5.0.0: 318 + version "5.0.0" 319 + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 320 + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 312 321 dependencies: 313 - locate-path "^5.0.0" 322 + locate-path "^6.0.0" 314 323 path-exists "^4.0.0" 315 324 316 - find-versions@^3.2.0: 317 - version "3.2.0" 318 - resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-3.2.0.tgz#10297f98030a786829681690545ef659ed1d254e" 319 - integrity sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww== 325 + find-versions@^4.0.0: 326 + version "4.0.0" 327 + resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-4.0.0.tgz#3c57e573bf97769b8cb8df16934b627915da4965" 328 + integrity sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ== 320 329 dependencies: 321 - semver-regex "^2.0.0" 330 + semver-regex "^3.1.2" 322 331 323 - fsevents@~2.1.2: 324 - version "2.1.3" 325 - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" 326 - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== 332 + fsevents@~2.3.2: 333 + version "2.3.2" 334 + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 335 + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 327 336 328 337 function-bind@^1.1.1: 329 338 version "1.1.1" 330 339 resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 331 340 integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 332 341 333 - get-own-enumerable-property-symbols@^3.0.0: 334 - version "3.0.2" 335 - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" 336 - integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== 342 + get-stream@^6.0.0: 343 + version "6.0.1" 344 + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" 345 + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== 337 346 338 - get-stream@^5.0.0: 339 - version "5.2.0" 340 - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" 341 - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== 347 + "graphql-14@npm:graphql@^14.5.8": 348 + version "14.7.0" 349 + resolved "https://registry.yarnpkg.com/graphql/-/graphql-14.7.0.tgz#7fa79a80a69be4a31c27dda824dc04dac2035a72" 350 + integrity sha512-l0xWZpoPKpppFzMfvVyFmp9vLN7w/ZZJPefUicMCepfJeQ8sMcztloGYY9DfjVPo6tIUDzU5Hw3MUbIjj9AVVA== 342 351 dependencies: 343 - pump "^3.0.0" 352 + iterall "^1.2.2" 344 353 345 - graphql@^15.4.0: 346 - version "15.4.0" 347 - resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.4.0.tgz#e459dea1150da5a106486ba7276518b5295a4347" 348 - integrity sha512-EB3zgGchcabbsU9cFe1j+yxdzKQKAbGUWRb13DsrsMN1yyfmmIq+2+L5MqVWcDCE4V89R5AyUOi7sMOGxdsYtA== 354 + "graphql-15@npm:graphql@^16.1.0": 355 + version "16.1.0" 356 + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.1.0.tgz#83bebeae6e119766d04966f09de9305be7fd44e5" 357 + integrity sha512-+PIjmhqGHMIxtnlEirRXDHIzs0cAHAozKG5M2w2N4TnS8VzCxO3bbv1AW9UTeycBfl2QsPduxcVrBvANFKQhiw== 358 + 359 + "graphql-16@npm:graphql@^15.8.0": 360 + version "15.8.0" 361 + resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.8.0.tgz#33410e96b012fa3bdb1091cc99a94769db212b38" 362 + integrity sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw== 349 363 350 364 has-flag@^3.0.0: 351 365 version "3.0.0" ··· 364 378 dependencies: 365 379 function-bind "^1.1.1" 366 380 367 - human-signals@^1.1.1: 368 - version "1.1.1" 369 - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" 370 - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== 381 + human-signals@^2.1.0: 382 + version "2.1.0" 383 + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" 384 + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== 371 385 372 - husky@^4.3.0: 373 - version "4.3.0" 374 - resolved "https://registry.yarnpkg.com/husky/-/husky-4.3.0.tgz#0b2ec1d66424e9219d359e26a51c58ec5278f0de" 375 - integrity sha512-tTMeLCLqSBqnflBZnlVDhpaIMucSGaYyX6855jM4AguGeWCeSzNdb1mfyWduTZ3pe3SJVvVWGL0jO1iKZVPfTA== 386 + husky-v4@^4.3.0: 387 + version "4.3.8" 388 + resolved "https://registry.yarnpkg.com/husky-v4/-/husky-v4-4.3.8.tgz#af3be56a8b62b941371b5190e265f76dd1af2e57" 389 + integrity sha512-M7A9u/t6BnT/qbDzKb7SdXhr8qLTGTkqZL6YLDDM20jfCdmpIMEuO384LvYXSBcgv50oIgNWI/IaO3g4A4ShjA== 376 390 dependencies: 377 391 chalk "^4.0.0" 378 392 ci-info "^2.0.0" 379 393 compare-versions "^3.6.0" 380 394 cosmiconfig "^7.0.0" 381 - find-versions "^3.2.0" 395 + find-versions "^4.0.0" 382 396 opencollective-postinstall "^2.0.2" 383 - pkg-dir "^4.2.0" 397 + pkg-dir "^5.0.0" 384 398 please-upgrade-node "^3.2.0" 385 399 slash "^3.0.0" 386 400 which-pm-runs "^1.0.0" ··· 403 417 resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 404 418 integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= 405 419 406 - is-core-module@^2.0.0: 407 - version "2.0.0" 408 - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.0.0.tgz#58531b70aed1db7c0e8d4eb1a0a2d1ddd64bd12d" 409 - integrity sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw== 420 + is-core-module@^2.2.0: 421 + version "2.8.0" 422 + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548" 423 + integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw== 410 424 dependencies: 411 425 has "^1.0.3" 412 426 ··· 414 428 version "3.0.0" 415 429 resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 416 430 integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 431 + 432 + is-fullwidth-code-point@^4.0.0: 433 + version "4.0.0" 434 + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" 435 + integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== 417 436 418 437 is-module@^1.0.0: 419 438 version "1.0.0" ··· 425 444 resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 426 445 integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 427 446 428 - is-obj@^1.0.1: 429 - version "1.0.1" 430 - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" 431 - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= 432 - 433 - is-regexp@^1.0.0: 434 - version "1.0.0" 435 - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" 436 - integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= 437 - 438 447 is-stream@^2.0.0: 439 448 version "2.0.0" 440 449 resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" ··· 444 453 version "2.0.0" 445 454 resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 446 455 integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 456 + 457 + iterall@^1.2.2: 458 + version "1.3.0" 459 + resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea" 460 + integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg== 447 461 448 462 js-tokens@^4.0.0: 449 463 version "4.0.0" ··· 455 469 resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" 456 470 integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== 457 471 472 + lilconfig@2.0.4: 473 + version "2.0.4" 474 + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.4.tgz#f4507d043d7058b380b6a8f5cb7bcd4b34cee082" 475 + integrity sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA== 476 + 458 477 lines-and-columns@^1.1.6: 459 478 version "1.1.6" 460 479 resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" 461 480 integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= 462 481 463 - lint-staged@^10.5.0: 464 - version "10.5.0" 465 - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.5.0.tgz#c923c2447a84c595874f3de696778736227e7a7a" 466 - integrity sha512-gjC9+HGkBubOF+Yyoj9pd52Qfm/kYB+dRX1UOgWjHKvSDYl+VHkZXlBMlqSZa2cH3Kp5/uNL480sV6e2dTgXSg== 482 + lint-staged@^12.1.2: 483 + version "12.1.2" 484 + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-12.1.2.tgz#90c571927e1371fc133e720671dd7989eab53f74" 485 + integrity sha512-bSMcQVqMW98HLLLR2c2tZ+vnDCnx4fd+0QJBQgN/4XkdspGRPc8DGp7UuOEBe1ApCfJ+wXXumYnJmU+wDo7j9A== 467 486 dependencies: 468 - chalk "^4.1.0" 469 - cli-truncate "^2.1.0" 470 - commander "^6.0.0" 471 - cosmiconfig "^7.0.0" 472 - debug "^4.1.1" 473 - dedent "^0.7.0" 487 + cli-truncate "^3.1.0" 488 + colorette "^2.0.16" 489 + commander "^8.3.0" 490 + debug "^4.3.2" 474 491 enquirer "^2.3.6" 475 - execa "^4.0.3" 476 - listr2 "^2.6.0" 477 - log-symbols "^4.0.0" 478 - micromatch "^4.0.2" 492 + execa "^5.1.1" 493 + lilconfig "2.0.4" 494 + listr2 "^3.13.3" 495 + micromatch "^4.0.4" 479 496 normalize-path "^3.0.0" 480 - please-upgrade-node "^3.2.0" 481 - string-argv "0.3.1" 482 - stringify-object "^3.3.0" 497 + object-inspect "^1.11.0" 498 + string-argv "^0.3.1" 499 + supports-color "^9.0.2" 500 + yaml "^1.10.2" 483 501 484 - listr2@^2.6.0: 485 - version "2.6.2" 486 - resolved "https://registry.yarnpkg.com/listr2/-/listr2-2.6.2.tgz#4912eb01e1e2dd72ec37f3895a56bf2622d6f36a" 487 - integrity sha512-6x6pKEMs8DSIpA/tixiYY2m/GcbgMplMVmhQAaLFxEtNSKLeWTGjtmU57xvv6QCm2XcqzyNXL/cTSVf4IChCRA== 502 + listr2@^3.13.3: 503 + version "3.13.5" 504 + resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.13.5.tgz#105a813f2eb2329c4aae27373a281d610ee4985f" 505 + integrity sha512-3n8heFQDSk+NcwBn3CgxEibZGaRzx+pC64n3YjpMD1qguV4nWus3Al+Oo3KooqFKTQEJ1v7MmnbnyyNspgx3NA== 488 506 dependencies: 489 - chalk "^4.1.0" 490 507 cli-truncate "^2.1.0" 491 - figures "^3.2.0" 492 - indent-string "^4.0.0" 508 + colorette "^2.0.16" 493 509 log-update "^4.0.0" 494 510 p-map "^4.0.0" 495 - rxjs "^6.6.2" 511 + rfdc "^1.3.0" 512 + rxjs "^7.4.0" 496 513 through "^2.3.8" 514 + wrap-ansi "^7.0.0" 497 515 498 - locate-path@^5.0.0: 499 - version "5.0.0" 500 - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" 501 - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 502 - dependencies: 503 - p-locate "^4.1.0" 504 - 505 - log-symbols@^4.0.0: 506 - version "4.0.0" 507 - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" 508 - integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== 516 + locate-path@^6.0.0: 517 + version "6.0.0" 518 + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 519 + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 509 520 dependencies: 510 - chalk "^4.0.0" 521 + p-locate "^5.0.0" 511 522 512 523 log-update@^4.0.0: 513 524 version "4.0.0" ··· 524 535 resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 525 536 integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 526 537 527 - micromatch@^4.0.2: 528 - version "4.0.2" 529 - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" 530 - integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== 538 + micromatch@^4.0.4: 539 + version "4.0.4" 540 + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" 541 + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== 531 542 dependencies: 532 543 braces "^3.0.1" 533 - picomatch "^2.0.5" 544 + picomatch "^2.2.3" 534 545 535 546 mimic-fn@^2.1.0: 536 547 version "2.1.0" ··· 547 558 resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 548 559 integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 549 560 550 - npm-run-path@^4.0.0: 561 + npm-run-path@^4.0.1: 551 562 version "4.0.1" 552 563 resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" 553 564 integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== 554 565 dependencies: 555 566 path-key "^3.0.0" 556 567 557 - once@^1.3.1, once@^1.4.0: 558 - version "1.4.0" 559 - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 560 - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 561 - dependencies: 562 - wrappy "1" 568 + object-inspect@^1.11.0: 569 + version "1.11.1" 570 + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.1.tgz#d4bd7d7de54b9a75599f59a00bd698c1f1c6549b" 571 + integrity sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA== 563 572 564 - onetime@^5.1.0: 573 + onetime@^5.1.0, onetime@^5.1.2: 565 574 version "5.1.2" 566 575 resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" 567 576 integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== ··· 573 582 resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" 574 583 integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q== 575 584 576 - p-limit@^2.2.0: 577 - version "2.3.0" 578 - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 579 - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 585 + p-limit@^3.0.2: 586 + version "3.1.0" 587 + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 588 + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 580 589 dependencies: 581 - p-try "^2.0.0" 590 + yocto-queue "^0.1.0" 582 591 583 - p-locate@^4.1.0: 584 - version "4.1.0" 585 - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" 586 - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 592 + p-locate@^5.0.0: 593 + version "5.0.0" 594 + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 595 + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 587 596 dependencies: 588 - p-limit "^2.2.0" 597 + p-limit "^3.0.2" 589 598 590 599 p-map@^4.0.0: 591 600 version "4.0.0" ··· 593 602 integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== 594 603 dependencies: 595 604 aggregate-error "^3.0.0" 596 - 597 - p-try@^2.0.0: 598 - version "2.2.0" 599 - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 600 - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 601 605 602 606 parent-module@^1.0.0: 603 607 version "1.0.1" ··· 636 640 resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 637 641 integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 638 642 639 - picomatch@^2.0.5, picomatch@^2.2.2: 640 - version "2.2.2" 641 - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" 642 - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== 643 + picomatch@^2.2.2, picomatch@^2.2.3: 644 + version "2.3.0" 645 + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" 646 + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== 643 647 644 - pkg-dir@^4.2.0: 645 - version "4.2.0" 646 - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" 647 - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== 648 + pkg-dir@^5.0.0: 649 + version "5.0.0" 650 + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-5.0.0.tgz#a02d6aebe6ba133a928f74aec20bafdfe6b8e760" 651 + integrity sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA== 648 652 dependencies: 649 - find-up "^4.0.0" 653 + find-up "^5.0.0" 650 654 651 655 please-upgrade-node@^3.2.0: 652 656 version "3.2.0" ··· 655 659 dependencies: 656 660 semver-compare "^1.0.0" 657 661 658 - prettier@^2.1.2: 659 - version "2.1.2" 660 - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.1.2.tgz#3050700dae2e4c8b67c4c3f666cdb8af405e1ce5" 661 - integrity sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg== 662 - 663 - pump@^3.0.0: 664 - version "3.0.0" 665 - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 666 - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 667 - dependencies: 668 - end-of-stream "^1.1.0" 669 - once "^1.3.1" 662 + prettier@^2.5.1: 663 + version "2.5.1" 664 + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" 665 + integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== 670 666 671 667 resolve-from@^4.0.0: 672 668 version "4.0.0" 673 669 resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 674 670 integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 675 671 676 - resolve@^1.17.0: 677 - version "1.18.1" 678 - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.18.1.tgz#018fcb2c5b207d2a6424aee361c5a266da8f4130" 679 - integrity sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA== 672 + resolve@^1.19.0: 673 + version "1.20.0" 674 + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" 675 + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== 680 676 dependencies: 681 - is-core-module "^2.0.0" 677 + is-core-module "^2.2.0" 682 678 path-parse "^1.0.6" 683 679 684 680 restore-cursor@^3.1.0: ··· 689 685 onetime "^5.1.0" 690 686 signal-exit "^3.0.2" 691 687 692 - rollup@^2.32.1: 693 - version "2.32.1" 694 - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.32.1.tgz#625a92c54f5b4d28ada12d618641491d4dbb548c" 695 - integrity sha512-Op2vWTpvK7t6/Qnm1TTh7VjEZZkN8RWgf0DHbkKzQBwNf748YhXbozHVefqpPp/Fuyk/PQPAnYsBxAEtlMvpUw== 688 + rfdc@^1.3.0: 689 + version "1.3.0" 690 + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" 691 + integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== 692 + 693 + rollup@^2.61.1: 694 + version "2.61.1" 695 + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.61.1.tgz#1a5491f84543cf9e4caf6c61222d9a3f8f2ba454" 696 + integrity sha512-BbTXlEvB8d+XFbK/7E5doIcRtxWPRiqr0eb5vQ0+2paMM04Ye4PZY5nHOQef2ix24l/L0SpLd5hwcH15QHPdvA== 696 697 optionalDependencies: 697 - fsevents "~2.1.2" 698 + fsevents "~2.3.2" 698 699 699 - rxjs@^6.6.2: 700 - version "6.6.3" 701 - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" 702 - integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== 700 + rxjs@^7.4.0: 701 + version "7.4.0" 702 + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.4.0.tgz#a12a44d7eebf016f5ff2441b87f28c9a51cebc68" 703 + integrity sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w== 703 704 dependencies: 704 - tslib "^1.9.0" 705 + tslib "~2.1.0" 705 706 706 707 semver-compare@^1.0.0: 707 708 version "1.0.0" 708 709 resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" 709 710 integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= 710 711 711 - semver-regex@^2.0.0: 712 - version "2.0.0" 713 - resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338" 714 - integrity sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw== 712 + semver-regex@^3.1.2: 713 + version "3.1.3" 714 + resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-3.1.3.tgz#b2bcc6f97f63269f286994e297e229b6245d0dc3" 715 + integrity sha512-Aqi54Mk9uYTjVexLnR67rTyBusmwd04cLkHy9hNvk3+G3nT2Oyg7E0l4XVbOaNwIvQ3hHeYxGcyEy+mKreyBFQ== 715 716 716 717 shebang-command@^2.0.0: 717 718 version "2.0.0" ··· 725 726 resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 726 727 integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 727 728 728 - signal-exit@^3.0.2: 729 - version "3.0.3" 730 - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" 731 - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== 729 + signal-exit@^3.0.2, signal-exit@^3.0.3: 730 + version "3.0.6" 731 + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" 732 + integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== 732 733 733 734 slash@^3.0.0: 734 735 version "3.0.0" ··· 753 754 astral-regex "^2.0.0" 754 755 is-fullwidth-code-point "^3.0.0" 755 756 756 - string-argv@0.3.1: 757 + slice-ansi@^5.0.0: 758 + version "5.0.0" 759 + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" 760 + integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== 761 + dependencies: 762 + ansi-styles "^6.0.0" 763 + is-fullwidth-code-point "^4.0.0" 764 + 765 + string-argv@^0.3.1: 757 766 version "0.3.1" 758 767 resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" 759 768 integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== ··· 767 776 is-fullwidth-code-point "^3.0.0" 768 777 strip-ansi "^6.0.0" 769 778 770 - stringify-object@^3.3.0: 771 - version "3.3.0" 772 - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" 773 - integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== 779 + string-width@^5.0.0: 780 + version "5.0.1" 781 + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.0.1.tgz#0d8158335a6cfd8eb95da9b6b262ce314a036ffd" 782 + integrity sha512-5ohWO/M4//8lErlUUtrFy3b11GtNOuMOU0ysKCDXFcfXuuvUXu95akgj/i8ofmaGdN0hCqyl6uu9i8dS/mQp5g== 774 783 dependencies: 775 - get-own-enumerable-property-symbols "^3.0.0" 776 - is-obj "^1.0.1" 777 - is-regexp "^1.0.0" 784 + emoji-regex "^9.2.2" 785 + is-fullwidth-code-point "^4.0.0" 786 + strip-ansi "^7.0.1" 778 787 779 788 strip-ansi@^6.0.0: 780 789 version "6.0.0" ··· 783 792 dependencies: 784 793 ansi-regex "^5.0.0" 785 794 795 + strip-ansi@^7.0.1: 796 + version "7.0.1" 797 + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" 798 + integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== 799 + dependencies: 800 + ansi-regex "^6.0.1" 801 + 786 802 strip-final-newline@^2.0.0: 787 803 version "2.0.0" 788 804 resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" ··· 802 818 dependencies: 803 819 has-flag "^4.0.0" 804 820 821 + supports-color@^9.0.2: 822 + version "9.2.1" 823 + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.2.1.tgz#599dc9d45acf74c6176e0d880bab1d7d718fe891" 824 + integrity sha512-Obv7ycoCTG51N7y175StI9BlAXrmgZrFhZOb0/PyjHBher/NmsdBgbbQ1Inhq+gIhz6+7Gb+jWF2Vqi7Mf1xnQ== 825 + 805 826 through@^2.3.8: 806 827 version "2.3.8" 807 828 resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" ··· 814 835 dependencies: 815 836 is-number "^7.0.0" 816 837 817 - tslib@^1.9.0: 818 - version "1.14.1" 819 - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 820 - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 838 + tslib@~2.1.0: 839 + version "2.1.0" 840 + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" 841 + integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== 821 842 822 843 type-fest@^0.11.0: 823 844 version "0.11.0" ··· 845 866 string-width "^4.1.0" 846 867 strip-ansi "^6.0.0" 847 868 848 - wrappy@1: 849 - version "1.0.2" 850 - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 851 - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 869 + wrap-ansi@^7.0.0: 870 + version "7.0.0" 871 + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 872 + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 873 + dependencies: 874 + ansi-styles "^4.0.0" 875 + string-width "^4.1.0" 876 + strip-ansi "^6.0.0" 877 + 878 + yaml@^1.10.0, yaml@^1.10.2: 879 + version "1.10.2" 880 + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" 881 + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== 852 882 853 - yaml@^1.10.0: 854 - version "1.10.0" 855 - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" 856 - integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== 883 + yocto-queue@^0.1.0: 884 + version "0.1.0" 885 + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 886 + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==