Thomas 3 gadi atpakaļ
vecāks
revīzija
8198ef2ff5
6 mainītis faili ar 304 papildinājumiem un 2 dzēšanām
  1. 128 0
      GoToNeo4j.js
  2. 82 0
      GoToNeo4j.ts
  3. 1 1
      index.js
  4. 13 0
      node_modules/.yarn-integrity
  5. 2 1
      package.json
  6. 78 0
      yarn.lock

+ 128 - 0
GoToNeo4j.js

@@ -0,0 +1,128 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    var desc = Object.getOwnPropertyDescriptor(m, k);
+    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+      desc = { enumerable: true, get: function() { return m[k]; } };
+    }
+    Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+};
+var __asyncValues = (this && this.__asyncValues) || function (o) {
+    if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
+    var m = o[Symbol.asyncIterator], i;
+    return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
+    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
+    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const fs_1 = __importDefault(require("fs"));
+const readline_1 = __importDefault(require("readline"));
+const neo4j = __importStar(require("neo4j-driver"));
+const line$ = (path) => readline_1.default.createInterface({
+    input: fs_1.default.createReadStream(path),
+    crlfDelay: Infinity
+});
+const templateGTnode = (args) => {
+    let tmp = 'CREATE (gt:GoTerm {';
+    Object.keys(args).forEach((dd, ii) => {
+        const delim = ii === 0 ? '' : ', ';
+        tmp += `${delim}${dd}: "${args[dd].replace(/"/g, '')}"`;
+    });
+    tmp += '})';
+    return tmp;
+};
+const templateEdge = (from, to) => {
+    return `MATCH (from:GoTerm {id: '${from}'})
+    MATCH (to:GoTerm {id: '${to}'})
+    CREATE (from)-[rel:is_a]->(to)`;
+};
+const insert = (oboPath) => __awaiter(void 0, void 0, void 0, function* () {
+    var e_1, _a;
+    let delim = false;
+    const results = [];
+    const vertexes = [];
+    const edges = [];
+    let result = {};
+    try {
+        for (var _b = __asyncValues(line$(oboPath)), _c; _c = yield _b.next(), !_c.done;) {
+            const line = _c.value;
+            if (line === '[Term]') {
+                delim = true;
+            }
+            else if (line === '' && delim) {
+                delim = false;
+                vertexes.push(templateGTnode(result));
+                if (result === null || result === void 0 ? void 0 : result.is_a) {
+                    if (/^GO:[0-9]*/.test(result.is_a)) {
+                        edges.push(templateEdge(result.id, result.is_a.match(/^GO:[0-9]*/)[0]));
+                    }
+                }
+                result = {};
+                results.push(result);
+            }
+            else if (delim)
+                result[line.split(': ')[0]] = line.split(': ')[1].replace("\"", "");
+        }
+    }
+    catch (e_1_1) { e_1 = { error: e_1_1 }; }
+    finally {
+        try {
+            if (_c && !_c.done && (_a = _b.return)) yield _a.call(_b);
+        }
+        finally { if (e_1) throw e_1.error; }
+    }
+    return { vertexes, edges };
+});
+const runNeo = (session, sql) => {
+    return new Promise((resolve, reject) => {
+        try {
+            session.run(sql).then((result) => resolve(result)).catch((err) => reject(err));
+        }
+        catch (error) {
+            reject(error);
+        }
+    });
+};
+(() => __awaiter(void 0, void 0, void 0, function* () {
+    const oboPath = '/home/thomas/NGS/ref/GO/go-basic.obo';
+    var driver = neo4j.driver('neo4j://localhost', neo4j.auth.basic('neo4j', '123456'));
+    var session = driver.session();
+    console.log(session);
+    const rr = yield insert(oboPath);
+    // const rr = await getGOterms('GO:0008150', oboPath)
+    console.log(rr.edges[0]);
+    for (const v of rr.vertexes) {
+        yield runNeo(session, v);
+    }
+    for (const e of rr.edges) {
+        yield runNeo(session, e);
+    }
+    yield driver.close();
+}))();

+ 82 - 0
GoToNeo4j.ts

@@ -0,0 +1,82 @@
+
+import fs from 'fs'
+import readline from 'readline'
+import * as neo4j from 'neo4j-driver'
+
+const line$ = (path: string) => readline.createInterface({
+    input: fs.createReadStream(path),
+    crlfDelay: Infinity
+})
+
+const templateGTnode = (args:any) => {
+    let tmp = 'CREATE (gt:GoTerm {'
+    Object.keys(args).forEach((dd:any,ii:number) => {
+        const delim = ii === 0 ? '' : ', '
+        tmp += `${delim}${dd}: "${args[dd].replace(/"/g,'')}"`
+    })
+    tmp += '})'
+    return tmp
+}
+
+const templateEdge = (from:string, to:string) => {
+    return `MATCH (from:GoTerm {id: '${from}'})
+    MATCH (to:GoTerm {id: '${to}'})
+    CREATE (from)-[rel:is_a]->(to)`
+}
+
+const readObo = async (oboPath:string) => {
+    let delim = false
+    const vertexes = []
+    const edges = []
+    let result = {} as {[key:string]: any}
+    for await (const line of line$(oboPath)) {
+        if (line === '[Term]') {
+            delim = true
+        } else if (line === '' && delim) {
+            delim = false
+            vertexes.push(templateGTnode(result))
+            if(result?.is_a) {
+                if (/^GO:[0-9]*/.test(result.is_a)) {
+                    edges.push(templateEdge(result.id, result.is_a.match(/^GO:[0-9]*/)[0]))
+                }
+            }
+            result = {}
+        }
+        else if (delim) result[line.split(': ')[0]] = line.split(': ')[1].replace("\"","")
+    }
+    return {vertexes, edges}
+}
+
+const runNeo = (session:any, sql:string) => {
+    return new Promise<void>((resolve, reject) => {
+        try {
+            session.run(sql).then((result:any) => resolve(result)).catch((err:any) => reject(err))
+        } catch (error) {
+            reject(error)
+        }
+    })
+}
+
+(async()=>{
+    const oboPath   = '/home/thomas/NGS/ref/GO/go-basic.obo'
+    var driver = neo4j.driver(
+        'neo4j://localhost',
+        neo4j.auth.basic('neo4j', '123456')
+    )
+    var session = driver.session()
+
+    // OBO
+    /*
+    const rr = await readObo(oboPath)
+    for (const v of rr.vertexes) {
+        console.log('Inserting OBO vertexes...');
+        await runNeo(session, v)
+    }
+    for (const e of rr.edges) {
+        console.log('Inserting OBO edges...');
+        await runNeo(session, e)
+    }
+    */
+   
+    await driver.close()
+})()

+ 1 - 1
index.js

@@ -171,7 +171,7 @@ const getAllSymbols = (symbols, qualifier, goaPath, oboPath) => __awaiter(void 0
     const allIDs = yield getN([...new Set(allGoa.map((e) => e.GO_Term))], qualifier, goaPath, oboPath);
     return allIDs.map((e) => {
         const observedGenes = symbols.filter((ee) => e.genes.includes(ee));
-        const observedGenesNotIn = symbols.filter((ee) => !e.genes.includes(ee));
+        // const observedGenesNotIn = symbols.filter((ee:string)=> !e.genes.includes(ee))
         // const allIn = Object.keys(allGenes).filter((ee:any)=>)
         const diff = e.genes.length - observedGenes.length;
         return Object.assign({ n: observedGenes.length, prop: observedGenes.length / e.genes.length, chi2test: (0, stats_1.chi2test)([[observedGenes.length,

+ 13 - 0
node_modules/.yarn-integrity

@@ -9,9 +9,11 @@
     "@stdlib/stats@^0.0.13",
     "@types/node@^17.0.21",
     "fishers-exact-test@^1.0.5",
+    "neo4j-driver@^4.4.5",
     "typescript@^4.6.2"
   ],
   "lockfileEntries": {
+    "@babel/runtime@^7.5.5": "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72",
     "@stdlib/array@^0.0.x": "https://registry.yarnpkg.com/@stdlib/array/-/array-0.0.12.tgz#12f40ab95bb36d424cdad991f29fc3cb491ee29e",
     "@stdlib/assert@^0.0.x": "https://registry.yarnpkg.com/@stdlib/assert/-/assert-0.0.12.tgz#1648c9016e5041291f55a6464abcc4069c5103ce",
     "@stdlib/bigint@^0.0.x": "https://registry.yarnpkg.com/@stdlib/bigint/-/bigint-0.0.11.tgz#c416a1d727001c55f4897e6424124199d638f2fd",
@@ -39,19 +41,30 @@
     "@stdlib/types@^0.0.x": "https://registry.yarnpkg.com/@stdlib/types/-/types-0.0.14.tgz#02d3aab7a9bfaeb86e34ab749772ea22f7b2f7e0",
     "@stdlib/utils@^0.0.x": "https://registry.yarnpkg.com/@stdlib/utils/-/utils-0.0.12.tgz#670de5a7b253f04f11a4cba38f790e82393bcb46",
     "@types/node@^17.0.21": "https://registry.yarnpkg.com/@types/node/-/node-17.0.21.tgz#864b987c0c68d07b4345845c3e63b75edd143644",
+    "base64-js@^1.3.1": "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a",
     "big.js@^6.1.1": "https://registry.yarnpkg.com/big.js/-/big.js-6.1.1.tgz#63b35b19dc9775c94991ee5db7694880655d5537",
+    "buffer@^6.0.3": "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6",
     "core-util-is@~1.0.0": "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85",
     "debug@^2.6.9": "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f",
     "fishers-exact-test@^1.0.5": "https://registry.yarnpkg.com/fishers-exact-test/-/fishers-exact-test-1.0.5.tgz#6556ebf4d4c07b8b3363d9f580c62d21f6eb3baf",
+    "ieee754@^1.2.1": "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352",
     "inherits@~2.0.3": "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c",
     "isarray@~1.0.0": "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11",
     "minimist@^1.2.0": "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44",
     "ms@2.0.0": "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8",
+    "neo4j-driver-bolt-connection@^4.4.5": "https://registry.yarnpkg.com/neo4j-driver-bolt-connection/-/neo4j-driver-bolt-connection-4.4.5.tgz#9f8853c1e117fab15834df367338d7515a58372f",
+    "neo4j-driver-core@^4.4.5": "https://registry.yarnpkg.com/neo4j-driver-core/-/neo4j-driver-core-4.4.5.tgz#5b1e1c7fb9cc0cd323ca33639f1ae8bacfabb949",
+    "neo4j-driver@^4.4.5": "https://registry.yarnpkg.com/neo4j-driver/-/neo4j-driver-4.4.5.tgz#136b7517e2f82a7d5dd7ef249d53037f6faa1f51",
     "process-nextick-args@~2.0.0": "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2",
     "readable-stream@^2.1.4": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57",
+    "regenerator-runtime@^0.13.4": "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52",
+    "rxjs@^6.6.3": "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9",
     "safe-buffer@~5.1.0": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d",
     "safe-buffer@~5.1.1": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d",
+    "safe-buffer@~5.2.0": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6",
+    "string_decoder@^1.3.0": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e",
     "string_decoder@~1.1.1": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8",
+    "tslib@^1.9.0": "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00",
     "typescript@^4.6.2": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz",
     "util-deprecate@~1.0.1": "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
   },

+ 2 - 1
package.json

@@ -16,6 +16,7 @@
   },
   "dependencies": {
     "@stdlib/stats": "^0.0.13",
-    "fishers-exact-test": "^1.0.5"
+    "fishers-exact-test": "^1.0.5",
+    "neo4j-driver": "^4.4.5"
   }
 }

+ 78 - 0
yarn.lock

@@ -2,6 +2,13 @@
 # yarn lockfile v1
 
 
+"@babel/runtime@^7.5.5":
+  version "7.17.9"
+  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72"
+  integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==
+  dependencies:
+    regenerator-runtime "^0.13.4"
+
 "@stdlib/array@^0.0.x":
   version "0.0.12"
   resolved "https://registry.yarnpkg.com/@stdlib/array/-/array-0.0.12.tgz#12f40ab95bb36d424cdad991f29fc3cb491ee29e"
@@ -336,11 +343,24 @@
   resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.21.tgz#864b987c0c68d07b4345845c3e63b75edd143644"
   integrity sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==
 
+base64-js@^1.3.1:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+  integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+
 big.js@^6.1.1:
   version "6.1.1"
   resolved "https://registry.yarnpkg.com/big.js/-/big.js-6.1.1.tgz#63b35b19dc9775c94991ee5db7694880655d5537"
   integrity sha512-1vObw81a8ylZO5ePrtMay0n018TcftpTA5HFKDaSuiUDBo8biRBtjIobw60OpwuvrGk+FsxKamqN4cnmj/eXdg==
 
+buffer@^6.0.3:
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6"
+  integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==
+  dependencies:
+    base64-js "^1.3.1"
+    ieee754 "^1.2.1"
+
 core-util-is@~1.0.0:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
@@ -360,6 +380,11 @@ fishers-exact-test@^1.0.5:
   dependencies:
     big.js "^6.1.1"
 
+ieee754@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+  integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
+
 inherits@~2.0.3:
   version "2.0.4"
   resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
@@ -380,6 +405,30 @@ ms@2.0.0:
   resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
   integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
 
+neo4j-driver-bolt-connection@^4.4.5:
+  version "4.4.5"
+  resolved "https://registry.yarnpkg.com/neo4j-driver-bolt-connection/-/neo4j-driver-bolt-connection-4.4.5.tgz#9f8853c1e117fab15834df367338d7515a58372f"
+  integrity sha512-CMRc4LXle20AesrqZzhDsHTgNnHqEwF7rYvNiDKC40gA2F6QrKcp+4tg17dhrptWd5C2mOWaP4WoytZt8tMlAA==
+  dependencies:
+    buffer "^6.0.3"
+    neo4j-driver-core "^4.4.5"
+    string_decoder "^1.3.0"
+
+neo4j-driver-core@^4.4.5:
+  version "4.4.5"
+  resolved "https://registry.yarnpkg.com/neo4j-driver-core/-/neo4j-driver-core-4.4.5.tgz#5b1e1c7fb9cc0cd323ca33639f1ae8bacfabb949"
+  integrity sha512-gG22aP7pSDtrP6+fVODd0X6oufRl05M0Z5Q5DT9KSXYJxVCB1rlRiIjORX6rX2M0n2tX5n8XZjeh+io7mhDRsQ==
+
+neo4j-driver@^4.4.5:
+  version "4.4.5"
+  resolved "https://registry.yarnpkg.com/neo4j-driver/-/neo4j-driver-4.4.5.tgz#136b7517e2f82a7d5dd7ef249d53037f6faa1f51"
+  integrity sha512-oY510+rE6Cu8hAYaELc0/0XkVCKvdo5ZkKvQT+gbfBFiD9SPoVGYdSkCzIAhH9+0Tpwu1OQIASQpnnz8J28R/A==
+  dependencies:
+    "@babel/runtime" "^7.5.5"
+    neo4j-driver-bolt-connection "^4.4.5"
+    neo4j-driver-core "^4.4.5"
+    rxjs "^6.6.3"
+
 process-nextick-args@~2.0.0:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
@@ -398,11 +447,35 @@ readable-stream@^2.1.4:
     string_decoder "~1.1.1"
     util-deprecate "~1.0.1"
 
+regenerator-runtime@^0.13.4:
+  version "0.13.9"
+  resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52"
+  integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==
+
+rxjs@^6.6.3:
+  version "6.6.7"
+  resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9"
+  integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==
+  dependencies:
+    tslib "^1.9.0"
+
 safe-buffer@~5.1.0, safe-buffer@~5.1.1:
   version "5.1.2"
   resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
   integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
 
+safe-buffer@~5.2.0:
+  version "5.2.1"
+  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+  integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
+string_decoder@^1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+  integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+  dependencies:
+    safe-buffer "~5.2.0"
+
 string_decoder@~1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
@@ -410,6 +483,11 @@ string_decoder@~1.1.1:
   dependencies:
     safe-buffer "~5.1.0"
 
+tslib@^1.9.0:
+  version "1.14.1"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
+  integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
+
 typescript@^4.6.2:
   version "4.6.2"
   resolved "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz"