mirror of
https://github.com/logseq/logseq.git
synced 2026-04-24 14:14:55 +00:00
enhance(db): use wasm-based sqlite storage
This commit is contained in:
18
deps/persist-db/package.json
vendored
18
deps/persist-db/package.json
vendored
@@ -1,18 +0,0 @@
|
||||
{
|
||||
"name": "persist-db",
|
||||
"version": "1.0.0",
|
||||
"main": "./src/index.js",
|
||||
"private": true,
|
||||
"license": "AGPL-3.0",
|
||||
"scripts": {
|
||||
"build": "webpack"
|
||||
},
|
||||
"dependencies": {
|
||||
"comlink": "^4.4.1",
|
||||
"wa-sqlite": "../../vendor/wa-sqlite"
|
||||
},
|
||||
"devDependencies": {
|
||||
"webpack": "^5.88.2",
|
||||
"webpack-cli": "^5.1.4"
|
||||
}
|
||||
}
|
||||
371
deps/persist-db/src/index.js
vendored
371
deps/persist-db/src/index.js
vendored
@@ -1,371 +0,0 @@
|
||||
import SQLiteModuleFactory from 'wa-sqlite/dist/wa-sqlite-async.mjs';
|
||||
import * as SQLite from 'wa-sqlite/src/sqlite-api.js';
|
||||
// import { OriginPrivateFileSystemVFS } from 'wa-sqlite/src/examples/OriginPrivateFileSystemVFS.js';
|
||||
|
||||
import { IDBBatchAtomicVFS } from 'wa-sqlite/src/examples/IDBBatchAtomicVFS.js';
|
||||
import * as Comlink from 'comlink';
|
||||
|
||||
|
||||
let sqlite3;
|
||||
let dbMap = {};
|
||||
const idbName = "logseq-VFS";
|
||||
|
||||
class AsyncLock {
|
||||
constructor() {
|
||||
this.disable = (_) => { }
|
||||
this.promise = Promise.resolve()
|
||||
}
|
||||
enable() {
|
||||
this.promise = new Promise(resolve => this.disable = resolve)
|
||||
}
|
||||
}
|
||||
|
||||
const lock = new AsyncLock()
|
||||
|
||||
// uuid, type, page_uuid, page_journal_day, name, content,datoms, created_at, updated_at
|
||||
const rowToBlock = (row) => {
|
||||
return {
|
||||
uuid: row[0],
|
||||
type: row[1],
|
||||
page_uuid: row[2],
|
||||
page_journal_day: row[3],
|
||||
name: row[4],
|
||||
content: row[5],
|
||||
datoms: row[6],
|
||||
created_at: row[7],
|
||||
updated_at: row[8]
|
||||
}
|
||||
}
|
||||
|
||||
const SQLiteDB = {
|
||||
inc() {
|
||||
return 233;
|
||||
},
|
||||
async listDB() {
|
||||
return new Promise((resolve, reject) => {
|
||||
const request = indexedDB.open(idbName);
|
||||
request.onerror = reject;
|
||||
request.onsuccess = (ev) => {
|
||||
const db = ev.target.result;
|
||||
const transaction = db.transaction(["blocks"], "readonly");
|
||||
const objectStore = transaction.objectStore("blocks");
|
||||
const request = objectStore.getAllKeys();
|
||||
request.onsuccess = () => {
|
||||
db.close();
|
||||
const dbNames = [];
|
||||
for (const key of request.result) {
|
||||
if (dbNames.findIndex(dbName => dbName === key[0]) === -1) {
|
||||
dbNames.push(key[0]);
|
||||
}
|
||||
}
|
||||
resolve(dbNames.map(dbName => dbName.replace(/^\//, "")));
|
||||
};
|
||||
request.onerror = reject;
|
||||
};
|
||||
});
|
||||
},
|
||||
async unsafeUnlinkDB(dbName) {
|
||||
const dbKey = "/" + dbName;
|
||||
console.log("[worker] deleting", dbName);
|
||||
const db = dbMap[dbName];
|
||||
if (db) {
|
||||
await sqlite3.close_v2(db);
|
||||
delete dbMap[dbName];
|
||||
}
|
||||
return new Promise((resolve, reject) => {
|
||||
const request = indexedDB.open(idbName);
|
||||
request.onerror = reject;
|
||||
request.onsuccess = (ev) => {
|
||||
const db = ev.target.result;
|
||||
const transaction = db.transaction(["blocks"], "readwrite");
|
||||
const objectStore = transaction.objectStore("blocks");
|
||||
const request = objectStore.openCursor();
|
||||
request.onsuccess = (event) => {
|
||||
const cursor = event.target.result;
|
||||
if (cursor) {
|
||||
if (cursor.key[0] === (dbKey)) {
|
||||
cursor.delete();
|
||||
}
|
||||
cursor.continue();
|
||||
} else {
|
||||
db.close();
|
||||
resolve();
|
||||
}
|
||||
};
|
||||
request.onerror = reject;
|
||||
};
|
||||
});
|
||||
},
|
||||
async init() {
|
||||
console.log("[worker] calling init");
|
||||
if (typeof sqlite3 === "undefined") {
|
||||
const module = await SQLiteModuleFactory();
|
||||
sqlite3 = SQLite.Factory(module);
|
||||
// OPFS is not supported in shared worker
|
||||
// const vfs = new OriginPrivateFileSystemVFS();
|
||||
const vfs = new IDBBatchAtomicVFS("logseq-VFS");
|
||||
await vfs.isReady;
|
||||
sqlite3.vfs_register(vfs, true);
|
||||
console.log("[worker] SQLite vfs init ok")
|
||||
}
|
||||
},
|
||||
// aka. newDB and openDB
|
||||
// :db-new
|
||||
async newDB(dbName) {
|
||||
console.log("[worker] SQLite newDB", dbName);
|
||||
let db = dbMap[dbName];
|
||||
if (db) {
|
||||
return db;
|
||||
}
|
||||
db = await sqlite3.open_v2(dbName ?? 'demo');
|
||||
// create-blocks-table!
|
||||
const str = sqlite3.str_new(db, `CREATE TABLE IF NOT EXISTS blocks (
|
||||
uuid TEXT PRIMARY KEY NOT NULL,
|
||||
type INTEGER NOT NULL,
|
||||
page_uuid TEXT,
|
||||
page_journal_day INTEGER,
|
||||
name TEXT UNIQUE,
|
||||
content TEXT,
|
||||
datoms TEXT,
|
||||
created_at INTEGER NOT NULL,
|
||||
updated_at INTEGER NOT NULL
|
||||
)`);
|
||||
let prepared = await sqlite3.prepare_v2(db, sqlite3.str_value(str));
|
||||
console.log("debug 1 stmt", prepared);
|
||||
const rc = await sqlite3.step(prepared.stmt);
|
||||
sqlite3.str_finish(str);
|
||||
sqlite3.finalize(prepared.stmt);
|
||||
// 101, done
|
||||
|
||||
console.log("debug 2 rc", rc);
|
||||
console.log("[worker] SQLite newDB create table", rc);
|
||||
|
||||
const idxSqlStr = sqlite3.str_new(db, `CREATE INDEX IF NOT EXISTS block_type ON blocks(type)`)
|
||||
prepared = await sqlite3.prepare_v2(db, sqlite3.str_value(idxSqlStr));
|
||||
const idxRc = await sqlite3.step(prepared.stmt);
|
||||
sqlite3.str_finish(idxSqlStr);
|
||||
sqlite3.finalize(prepared.stmt);
|
||||
|
||||
dbMap[dbName] = db;
|
||||
return;
|
||||
},
|
||||
|
||||
async deleteBlocks(dbName, uuids = []) {
|
||||
const db = dbMap[dbName];
|
||||
if (!db) {
|
||||
await this.newDB(dbName);
|
||||
}
|
||||
if (db && uuids.length > 0) {
|
||||
const sql = sqlite3.str_new(db, "DELETE from blocks WHERE uuid IN (");
|
||||
sqlite3.str_appendall(sql, uuids.map(_ => "?").join(","));
|
||||
sqlite3.str_appendall(sql, ")");
|
||||
const prepared = await sqlite3.prepare_v2(db, sqlite3.str_value(sql));
|
||||
|
||||
sqlite3.reset(prepared.stmt);
|
||||
sqlite3.bind_collection(prepared.stmt, uuids);
|
||||
|
||||
const rows = [];
|
||||
while (await sqlite3.step(prepared.stmt) === SQLite.SQLITE_ROW) {
|
||||
const row = sqlite3.row(prepared.stmt);
|
||||
rows.push(row);
|
||||
}
|
||||
sqlite3.str_finish(sql);
|
||||
sqlite3.finalize(prepared.stmt);
|
||||
return rows;
|
||||
}
|
||||
},
|
||||
|
||||
async upsertBlocks(dbName, blocks) {
|
||||
console.log("[worker] inserting blocks ", blocks);
|
||||
let db = dbMap[dbName];
|
||||
if (!db) {
|
||||
await this.newDB(dbName);
|
||||
db = dbMap[dbName];
|
||||
}
|
||||
|
||||
await lock.promise;
|
||||
lock.enable();
|
||||
|
||||
const before = await sqlite3.changes(db);
|
||||
|
||||
let rc;
|
||||
try {
|
||||
rc = await sqlite3.exec(db, "BEGIN"); // todo check rc
|
||||
console.log("begin transaction", rc);
|
||||
} catch (e) {
|
||||
console.error("begin transaction error", e);
|
||||
lock.disable();
|
||||
throw e;
|
||||
}
|
||||
|
||||
const str = sqlite3.str_new(db, `
|
||||
INSERT INTO blocks (uuid, type, page_uuid, page_journal_day, name, content,datoms, created_at, updated_at)
|
||||
VALUES (@uuid, @type, @page_uuid, @page_journal_day, @name, @content, @datoms, @created_at, @updated_at)
|
||||
ON CONFLICT (uuid)
|
||||
DO UPDATE
|
||||
SET (type, page_uuid, page_journal_day, name, content, datoms, created_at, updated_at)
|
||||
= (@type, @page_uuid, @page_journal_day, @name, @content, @datoms, @created_at, @updated_at)
|
||||
`);
|
||||
const prepared = await sqlite3.prepare_v2(db, sqlite3.str_value(str));
|
||||
for (const block of blocks) {
|
||||
console.log("upsert block", block);
|
||||
await sqlite3.reset(prepared.stmt);
|
||||
sqlite3.bind_collection(prepared.stmt, block);
|
||||
try {
|
||||
rc = await sqlite3.step(prepared.stmt);
|
||||
console.log("upsert block step rc", rc);
|
||||
} catch (e) {
|
||||
console.error("upsert block error", e);
|
||||
|
||||
await sqlite3.exec(db, "ROLLBACK");
|
||||
lock.disable();
|
||||
}
|
||||
}
|
||||
|
||||
rc = await sqlite3.exec(db, "COMMIT");
|
||||
console.log("commit transaction", rc);
|
||||
|
||||
const after = await sqlite3.changes(db);
|
||||
console.log(`[worker] SQLite upsertBlocks: ${before} -> ${after}`);
|
||||
|
||||
lock.disable();
|
||||
return after - before;
|
||||
},
|
||||
|
||||
async fetchAllPages(dbName) {
|
||||
console.log("fetch all pages");
|
||||
let db = dbMap[dbName];
|
||||
if (!db) {
|
||||
await this.newDB(dbName);
|
||||
db = dbMap[dbName];
|
||||
}
|
||||
const sql = sqlite3.str_new(db, "SELECT * FROM blocks WHERE type = 2");
|
||||
const prepared = await sqlite3.prepare_v2(db, sqlite3.str_value(sql));
|
||||
const allPages = [];
|
||||
while (await sqlite3.step(prepared.stmt) === SQLite.SQLITE_ROW) {
|
||||
const row = sqlite3.row(prepared.stmt);
|
||||
allPages.push(row);
|
||||
}
|
||||
sqlite3.str_finish(sql);
|
||||
sqlite3.finalize(prepared.stmt);
|
||||
console.log("all pages", allPages);
|
||||
// uuid, type, page_uuid, page_journal_day, name, content,datoms, created_at, updated_at
|
||||
return allPages.map(rowToBlock);
|
||||
},
|
||||
|
||||
async fetchAllBlocks(dbName) {
|
||||
console.log("fetch all blocks");
|
||||
let db = dbMap[dbName];
|
||||
if (!db) {
|
||||
await this.newDB(dbName);
|
||||
db = dbMap[dbName];
|
||||
}
|
||||
const sql = sqlite3.str_new(db, "SELECT uuid, page_uuid FROM blocks WHERE type = 1");
|
||||
const prepared = await sqlite3.prepare_v2(db, sqlite3.str_value(sql));
|
||||
const rows = [];
|
||||
while (await sqlite3.step(prepared.stmt) === SQLite.SQLITE_ROW) {
|
||||
const row = sqlite3.row(prepared.stmt);
|
||||
rows.push(row);
|
||||
}
|
||||
sqlite3.str_finish(sql);
|
||||
sqlite3.finalize(prepared.stmt);
|
||||
console.log("all blocks", rows);
|
||||
|
||||
return rows.map(row => {
|
||||
return { uuid: row[0], page_uuid: row[1] }
|
||||
});
|
||||
},
|
||||
|
||||
async fetchRecentJournalBlocks(dbName) {
|
||||
let db = dbMap[dbName];
|
||||
if (!db) {
|
||||
await this.newDB(dbName);
|
||||
db = dbMap[dbName];
|
||||
}
|
||||
let sql = sqlite3.str_new(db, "SELECT uuid FROM blocks WHERE type = 2 ORDER BY page_journal_day DESC LIMIT 3");
|
||||
let prepared = await sqlite3.prepare_v2(db, sqlite3.str_value(sql));
|
||||
const rows = [];
|
||||
while (await sqlite3.step(prepared.stmt) === SQLite.SQLITE_ROW) {
|
||||
const row = sqlite3.row(prepared.stmt);
|
||||
rows.push(row);
|
||||
}
|
||||
sqlite3.str_finish(sql);
|
||||
sqlite3.finalize(prepared.stmt);
|
||||
const recentJournalIds = rows.map(row => row[0]);
|
||||
console.log("recent journal blocks", rows, recentJournalIds);
|
||||
|
||||
if (recentJournalIds.length === 0) {
|
||||
return [];
|
||||
}
|
||||
|
||||
sql = "SELECT * FROM blocks WHERE type = 1 AND page_uuid IN (";
|
||||
// join recentJournalIds
|
||||
sql += recentJournalIds.map(_ => "?").join(",");
|
||||
sql += ")";
|
||||
sql = sqlite3.str_new(db, sql);
|
||||
prepared = await sqlite3.prepare_v2(db, sqlite3.str_value(sql));
|
||||
sqlite3.reset(prepared.stmt);
|
||||
sqlite3.bind_collection(prepared.stmt, recentJournalIds);
|
||||
|
||||
const blocks = [];
|
||||
while (await sqlite3.step(prepared.stmt) === SQLite.SQLITE_ROW) {
|
||||
const row = sqlite3.row(prepared.stmt);
|
||||
blocks.push(row);
|
||||
}
|
||||
sqlite3.str_finish(sql);
|
||||
sqlite3.finalize(prepared.stmt);
|
||||
console.log("recent journal blocks", blocks);
|
||||
|
||||
return blocks.map(rowToBlock);
|
||||
},
|
||||
|
||||
async fetchInitData(dbName) {
|
||||
let db = dbMap[dbName];
|
||||
if (!db) {
|
||||
await this.newDB(dbName);
|
||||
db = dbMap[dbName];
|
||||
}
|
||||
// all required types
|
||||
const sql = sqlite3.str_new(db, "SELECT * FROM blocks WHERE type IN (3, 4, 5, 6)");
|
||||
const prepared = await sqlite3.prepare_v2(db, sqlite3.str_value(sql));
|
||||
const rows = [];
|
||||
while (await sqlite3.step(prepared.stmt) === SQLite.SQLITE_ROW) {
|
||||
const row = sqlite3.row(prepared.stmt);
|
||||
rows.push(row);
|
||||
}
|
||||
sqlite3.str_finish(sql);
|
||||
sqlite3.finalize(prepared.stmt);
|
||||
console.log("all required types", rows);
|
||||
return rows.map(rowToBlock);
|
||||
},
|
||||
|
||||
async fetchBlocksExcluding(dbName, excludeUUIDs) {
|
||||
let db = dbMap[dbName];
|
||||
if (!db) {
|
||||
await this.newDB(dbName);
|
||||
db = dbMap[dbName];
|
||||
}
|
||||
const sql = sqlite3.str_new(db, "SELECT * FROM blocks WHERE TYPE = 1 AND uuid NOT IN (");
|
||||
sqlite3.str_appendall(sql, excludeUUIDs.map(_ => "?").join(","));
|
||||
sqlite3.str_appendall(sql, ")");
|
||||
const prepared = await sqlite3.prepare_v2(db, sqlite3.str_value(sql));
|
||||
sqlite3.reset(prepared.stmt);
|
||||
sqlite3.bind_collection(prepared.stmt, excludeUUIDs);
|
||||
|
||||
const blocks = [];
|
||||
while (await sqlite3.step(prepared.stmt) === SQLite.SQLITE_ROW) {
|
||||
const row = sqlite3.row(prepared.stmt);
|
||||
blocks.push(row);
|
||||
}
|
||||
sqlite3.str_finish(sql);
|
||||
sqlite3.finalize(prepared.stmt);
|
||||
console.log("fetch blocks", blocks);
|
||||
|
||||
return blocks.map(rowToBlock);
|
||||
},
|
||||
};
|
||||
|
||||
onconnect = function (event) {
|
||||
const port = event.ports[0];
|
||||
Comlink.expose(SQLiteDB, port);
|
||||
};
|
||||
13
deps/persist-db/webpack.config.js
vendored
13
deps/persist-db/webpack.config.js
vendored
@@ -1,13 +0,0 @@
|
||||
const path = require('path');
|
||||
|
||||
module.exports = {
|
||||
entry: './src/index.js',
|
||||
target: ['webworker', 'es6'],
|
||||
mode: 'production',
|
||||
output: {
|
||||
filename: 'persist-db-worker.js',
|
||||
path: path.resolve(__dirname, 'dist'),
|
||||
clean: true,
|
||||
},
|
||||
devtool: 'source-map',
|
||||
};
|
||||
804
deps/persist-db/yarn.lock
vendored
804
deps/persist-db/yarn.lock
vendored
@@ -1,804 +0,0 @@
|
||||
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@discoveryjs/json-ext@^0.5.0":
|
||||
version "0.5.7"
|
||||
resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70"
|
||||
integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==
|
||||
|
||||
"@jridgewell/gen-mapping@^0.3.0":
|
||||
version "0.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098"
|
||||
integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==
|
||||
dependencies:
|
||||
"@jridgewell/set-array" "^1.0.1"
|
||||
"@jridgewell/sourcemap-codec" "^1.4.10"
|
||||
"@jridgewell/trace-mapping" "^0.3.9"
|
||||
|
||||
"@jridgewell/resolve-uri@3.1.0":
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
|
||||
integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
|
||||
|
||||
"@jridgewell/set-array@^1.0.1":
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
|
||||
integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
|
||||
|
||||
"@jridgewell/source-map@^0.3.3":
|
||||
version "0.3.5"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91"
|
||||
integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==
|
||||
dependencies:
|
||||
"@jridgewell/gen-mapping" "^0.3.0"
|
||||
"@jridgewell/trace-mapping" "^0.3.9"
|
||||
|
||||
"@jridgewell/sourcemap-codec@1.4.14":
|
||||
version "1.4.14"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
|
||||
integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
|
||||
|
||||
"@jridgewell/sourcemap-codec@^1.4.10":
|
||||
version "1.4.15"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
|
||||
integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
|
||||
|
||||
"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9":
|
||||
version "0.3.18"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6"
|
||||
integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==
|
||||
dependencies:
|
||||
"@jridgewell/resolve-uri" "3.1.0"
|
||||
"@jridgewell/sourcemap-codec" "1.4.14"
|
||||
|
||||
"@types/eslint-scope@^3.7.3":
|
||||
version "3.7.4"
|
||||
resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16"
|
||||
integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==
|
||||
dependencies:
|
||||
"@types/eslint" "*"
|
||||
"@types/estree" "*"
|
||||
|
||||
"@types/eslint@*":
|
||||
version "8.44.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.0.tgz#55818eabb376e2272f77fbf5c96c43137c3c1e53"
|
||||
integrity sha512-gsF+c/0XOguWgaOgvFs+xnnRqt9GwgTvIks36WpE6ueeI4KCEHHd8K/CKHqhOqrJKsYH8m27kRzQEvWXAwXUTw==
|
||||
dependencies:
|
||||
"@types/estree" "*"
|
||||
"@types/json-schema" "*"
|
||||
|
||||
"@types/estree@*", "@types/estree@^1.0.0":
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194"
|
||||
integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==
|
||||
|
||||
"@types/json-schema@*", "@types/json-schema@^7.0.8":
|
||||
version "7.0.12"
|
||||
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb"
|
||||
integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==
|
||||
|
||||
"@types/node@*":
|
||||
version "20.4.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.2.tgz#129cc9ae69f93824f92fac653eebfb4812ab4af9"
|
||||
integrity sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw==
|
||||
|
||||
"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5":
|
||||
version "1.11.6"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24"
|
||||
integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==
|
||||
dependencies:
|
||||
"@webassemblyjs/helper-numbers" "1.11.6"
|
||||
"@webassemblyjs/helper-wasm-bytecode" "1.11.6"
|
||||
|
||||
"@webassemblyjs/floating-point-hex-parser@1.11.6":
|
||||
version "1.11.6"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431"
|
||||
integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==
|
||||
|
||||
"@webassemblyjs/helper-api-error@1.11.6":
|
||||
version "1.11.6"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768"
|
||||
integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==
|
||||
|
||||
"@webassemblyjs/helper-buffer@1.11.6":
|
||||
version "1.11.6"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093"
|
||||
integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==
|
||||
|
||||
"@webassemblyjs/helper-numbers@1.11.6":
|
||||
version "1.11.6"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5"
|
||||
integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==
|
||||
dependencies:
|
||||
"@webassemblyjs/floating-point-hex-parser" "1.11.6"
|
||||
"@webassemblyjs/helper-api-error" "1.11.6"
|
||||
"@xtuc/long" "4.2.2"
|
||||
|
||||
"@webassemblyjs/helper-wasm-bytecode@1.11.6":
|
||||
version "1.11.6"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9"
|
||||
integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==
|
||||
|
||||
"@webassemblyjs/helper-wasm-section@1.11.6":
|
||||
version "1.11.6"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577"
|
||||
integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==
|
||||
dependencies:
|
||||
"@webassemblyjs/ast" "1.11.6"
|
||||
"@webassemblyjs/helper-buffer" "1.11.6"
|
||||
"@webassemblyjs/helper-wasm-bytecode" "1.11.6"
|
||||
"@webassemblyjs/wasm-gen" "1.11.6"
|
||||
|
||||
"@webassemblyjs/ieee754@1.11.6":
|
||||
version "1.11.6"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a"
|
||||
integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==
|
||||
dependencies:
|
||||
"@xtuc/ieee754" "^1.2.0"
|
||||
|
||||
"@webassemblyjs/leb128@1.11.6":
|
||||
version "1.11.6"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7"
|
||||
integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==
|
||||
dependencies:
|
||||
"@xtuc/long" "4.2.2"
|
||||
|
||||
"@webassemblyjs/utf8@1.11.6":
|
||||
version "1.11.6"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a"
|
||||
integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==
|
||||
|
||||
"@webassemblyjs/wasm-edit@^1.11.5":
|
||||
version "1.11.6"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab"
|
||||
integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==
|
||||
dependencies:
|
||||
"@webassemblyjs/ast" "1.11.6"
|
||||
"@webassemblyjs/helper-buffer" "1.11.6"
|
||||
"@webassemblyjs/helper-wasm-bytecode" "1.11.6"
|
||||
"@webassemblyjs/helper-wasm-section" "1.11.6"
|
||||
"@webassemblyjs/wasm-gen" "1.11.6"
|
||||
"@webassemblyjs/wasm-opt" "1.11.6"
|
||||
"@webassemblyjs/wasm-parser" "1.11.6"
|
||||
"@webassemblyjs/wast-printer" "1.11.6"
|
||||
|
||||
"@webassemblyjs/wasm-gen@1.11.6":
|
||||
version "1.11.6"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268"
|
||||
integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==
|
||||
dependencies:
|
||||
"@webassemblyjs/ast" "1.11.6"
|
||||
"@webassemblyjs/helper-wasm-bytecode" "1.11.6"
|
||||
"@webassemblyjs/ieee754" "1.11.6"
|
||||
"@webassemblyjs/leb128" "1.11.6"
|
||||
"@webassemblyjs/utf8" "1.11.6"
|
||||
|
||||
"@webassemblyjs/wasm-opt@1.11.6":
|
||||
version "1.11.6"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2"
|
||||
integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==
|
||||
dependencies:
|
||||
"@webassemblyjs/ast" "1.11.6"
|
||||
"@webassemblyjs/helper-buffer" "1.11.6"
|
||||
"@webassemblyjs/wasm-gen" "1.11.6"
|
||||
"@webassemblyjs/wasm-parser" "1.11.6"
|
||||
|
||||
"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5":
|
||||
version "1.11.6"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1"
|
||||
integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==
|
||||
dependencies:
|
||||
"@webassemblyjs/ast" "1.11.6"
|
||||
"@webassemblyjs/helper-api-error" "1.11.6"
|
||||
"@webassemblyjs/helper-wasm-bytecode" "1.11.6"
|
||||
"@webassemblyjs/ieee754" "1.11.6"
|
||||
"@webassemblyjs/leb128" "1.11.6"
|
||||
"@webassemblyjs/utf8" "1.11.6"
|
||||
|
||||
"@webassemblyjs/wast-printer@1.11.6":
|
||||
version "1.11.6"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20"
|
||||
integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==
|
||||
dependencies:
|
||||
"@webassemblyjs/ast" "1.11.6"
|
||||
"@xtuc/long" "4.2.2"
|
||||
|
||||
"@webpack-cli/configtest@^2.1.1":
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.1.1.tgz#3b2f852e91dac6e3b85fb2a314fb8bef46d94646"
|
||||
integrity sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==
|
||||
|
||||
"@webpack-cli/info@^2.0.2":
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.2.tgz#cc3fbf22efeb88ff62310cf885c5b09f44ae0fdd"
|
||||
integrity sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==
|
||||
|
||||
"@webpack-cli/serve@^2.0.5":
|
||||
version "2.0.5"
|
||||
resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e"
|
||||
integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==
|
||||
|
||||
"@xtuc/ieee754@^1.2.0":
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
|
||||
integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
|
||||
|
||||
"@xtuc/long@4.2.2":
|
||||
version "4.2.2"
|
||||
resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
|
||||
integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
|
||||
|
||||
acorn-import-assertions@^1.9.0:
|
||||
version "1.9.0"
|
||||
resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac"
|
||||
integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==
|
||||
|
||||
acorn@^8.7.1, acorn@^8.8.2:
|
||||
version "8.10.0"
|
||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5"
|
||||
integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==
|
||||
|
||||
ajv-keywords@^3.5.2:
|
||||
version "3.5.2"
|
||||
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
|
||||
integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
|
||||
|
||||
ajv@^6.12.5:
|
||||
version "6.12.6"
|
||||
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
|
||||
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
|
||||
dependencies:
|
||||
fast-deep-equal "^3.1.1"
|
||||
fast-json-stable-stringify "^2.0.0"
|
||||
json-schema-traverse "^0.4.1"
|
||||
uri-js "^4.2.2"
|
||||
|
||||
browserslist@^4.14.5:
|
||||
version "4.21.9"
|
||||
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635"
|
||||
integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==
|
||||
dependencies:
|
||||
caniuse-lite "^1.0.30001503"
|
||||
electron-to-chromium "^1.4.431"
|
||||
node-releases "^2.0.12"
|
||||
update-browserslist-db "^1.0.11"
|
||||
|
||||
buffer-from@^1.0.0:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
|
||||
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
|
||||
|
||||
caniuse-lite@^1.0.30001503:
|
||||
version "1.0.30001517"
|
||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz#90fabae294215c3495807eb24fc809e11dc2f0a8"
|
||||
integrity sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==
|
||||
|
||||
chrome-trace-event@^1.0.2:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac"
|
||||
integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==
|
||||
|
||||
clone-deep@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"
|
||||
integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==
|
||||
dependencies:
|
||||
is-plain-object "^2.0.4"
|
||||
kind-of "^6.0.2"
|
||||
shallow-clone "^3.0.0"
|
||||
|
||||
colorette@^2.0.14:
|
||||
version "2.0.20"
|
||||
resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a"
|
||||
integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==
|
||||
|
||||
comlink@^4.4.1:
|
||||
version "4.4.1"
|
||||
resolved "https://registry.yarnpkg.com/comlink/-/comlink-4.4.1.tgz#e568b8e86410b809e8600eb2cf40c189371ef981"
|
||||
integrity sha512-+1dlx0aY5Jo1vHy/tSsIGpSkN4tS9rZSW8FIhG0JH/crs9wwweswIo/POr451r7bZww3hFbPAKnTpimzL/mm4Q==
|
||||
|
||||
commander@^10.0.1:
|
||||
version "10.0.1"
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06"
|
||||
integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==
|
||||
|
||||
commander@^2.20.0:
|
||||
version "2.20.3"
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
|
||||
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
|
||||
|
||||
cross-spawn@^7.0.3:
|
||||
version "7.0.3"
|
||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
|
||||
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
|
||||
dependencies:
|
||||
path-key "^3.1.0"
|
||||
shebang-command "^2.0.0"
|
||||
which "^2.0.1"
|
||||
|
||||
electron-to-chromium@^1.4.431:
|
||||
version "1.4.467"
|
||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.467.tgz#b0660bf644baff7eedea33b8c742fb53ec60e3c2"
|
||||
integrity sha512-2qI70O+rR4poYeF2grcuS/bCps5KJh6y1jtZMDDEteyKJQrzLOEhFyXCLcHW6DTBjKjWkk26JhWoAi+Ux9A0fg==
|
||||
|
||||
enhanced-resolve@^5.15.0:
|
||||
version "5.15.0"
|
||||
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35"
|
||||
integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==
|
||||
dependencies:
|
||||
graceful-fs "^4.2.4"
|
||||
tapable "^2.2.0"
|
||||
|
||||
envinfo@^7.7.3:
|
||||
version "7.10.0"
|
||||
resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.10.0.tgz#55146e3909cc5fe63c22da63fb15b05aeac35b13"
|
||||
integrity sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==
|
||||
|
||||
es-module-lexer@^1.2.1:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.3.0.tgz#6be9c9e0b4543a60cd166ff6f8b4e9dae0b0c16f"
|
||||
integrity sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==
|
||||
|
||||
escalade@^3.1.1:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
|
||||
integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
|
||||
|
||||
eslint-scope@5.1.1:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
|
||||
integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
|
||||
dependencies:
|
||||
esrecurse "^4.3.0"
|
||||
estraverse "^4.1.1"
|
||||
|
||||
esrecurse@^4.3.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
|
||||
integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
|
||||
dependencies:
|
||||
estraverse "^5.2.0"
|
||||
|
||||
estraverse@^4.1.1:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
|
||||
integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
|
||||
|
||||
estraverse@^5.2.0:
|
||||
version "5.3.0"
|
||||
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
|
||||
integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
|
||||
|
||||
events@^3.2.0:
|
||||
version "3.3.0"
|
||||
resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
|
||||
integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
|
||||
|
||||
fast-deep-equal@^3.1.1:
|
||||
version "3.1.3"
|
||||
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
|
||||
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
|
||||
|
||||
fast-json-stable-stringify@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
|
||||
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
|
||||
|
||||
fastest-levenshtein@^1.0.12:
|
||||
version "1.0.16"
|
||||
resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5"
|
||||
integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==
|
||||
|
||||
find-up@^4.0.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
|
||||
integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
|
||||
dependencies:
|
||||
locate-path "^5.0.0"
|
||||
path-exists "^4.0.0"
|
||||
|
||||
function-bind@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
|
||||
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
|
||||
|
||||
glob-to-regexp@^0.4.1:
|
||||
version "0.4.1"
|
||||
resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
|
||||
integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
|
||||
|
||||
graceful-fs@^4.1.2, graceful-fs@^4.2.4, graceful-fs@^4.2.9:
|
||||
version "4.2.11"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
|
||||
integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
|
||||
|
||||
has-flag@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
|
||||
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
|
||||
|
||||
has@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
|
||||
integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
|
||||
dependencies:
|
||||
function-bind "^1.1.1"
|
||||
|
||||
import-local@^3.0.2:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4"
|
||||
integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==
|
||||
dependencies:
|
||||
pkg-dir "^4.2.0"
|
||||
resolve-cwd "^3.0.0"
|
||||
|
||||
interpret@^3.1.1:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4"
|
||||
integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==
|
||||
|
||||
is-core-module@^2.11.0:
|
||||
version "2.12.1"
|
||||
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd"
|
||||
integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==
|
||||
dependencies:
|
||||
has "^1.0.3"
|
||||
|
||||
is-plain-object@^2.0.4:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
|
||||
integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
|
||||
dependencies:
|
||||
isobject "^3.0.1"
|
||||
|
||||
isexe@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
||||
integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
|
||||
|
||||
isobject@^3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
|
||||
integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==
|
||||
|
||||
jest-worker@^27.4.5:
|
||||
version "27.5.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0"
|
||||
integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
merge-stream "^2.0.0"
|
||||
supports-color "^8.0.0"
|
||||
|
||||
json-parse-even-better-errors@^2.3.1:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
|
||||
integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
|
||||
|
||||
json-schema-traverse@^0.4.1:
|
||||
version "0.4.1"
|
||||
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
|
||||
integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
|
||||
|
||||
kind-of@^6.0.2:
|
||||
version "6.0.3"
|
||||
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
|
||||
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
|
||||
|
||||
loader-runner@^4.2.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1"
|
||||
integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==
|
||||
|
||||
locate-path@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
|
||||
integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
|
||||
dependencies:
|
||||
p-locate "^4.1.0"
|
||||
|
||||
merge-stream@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
|
||||
integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
|
||||
|
||||
mime-db@1.52.0:
|
||||
version "1.52.0"
|
||||
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
|
||||
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
|
||||
|
||||
mime-types@^2.1.27:
|
||||
version "2.1.35"
|
||||
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
|
||||
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
|
||||
dependencies:
|
||||
mime-db "1.52.0"
|
||||
|
||||
neo-async@^2.6.2:
|
||||
version "2.6.2"
|
||||
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
|
||||
integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
|
||||
|
||||
node-releases@^2.0.12:
|
||||
version "2.0.13"
|
||||
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d"
|
||||
integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==
|
||||
|
||||
p-limit@^2.2.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
|
||||
integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
|
||||
dependencies:
|
||||
p-try "^2.0.0"
|
||||
|
||||
p-locate@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
|
||||
integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
|
||||
dependencies:
|
||||
p-limit "^2.2.0"
|
||||
|
||||
p-try@^2.0.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
|
||||
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
|
||||
|
||||
path-exists@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
|
||||
integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
|
||||
|
||||
path-key@^3.1.0:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
|
||||
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
|
||||
|
||||
path-parse@^1.0.7:
|
||||
version "1.0.7"
|
||||
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
|
||||
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
|
||||
|
||||
picocolors@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
|
||||
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
|
||||
|
||||
pkg-dir@^4.2.0:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
|
||||
integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
|
||||
dependencies:
|
||||
find-up "^4.0.0"
|
||||
|
||||
punycode@^2.1.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f"
|
||||
integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==
|
||||
|
||||
randombytes@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
|
||||
integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
|
||||
dependencies:
|
||||
safe-buffer "^5.1.0"
|
||||
|
||||
rechoir@^0.8.0:
|
||||
version "0.8.0"
|
||||
resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22"
|
||||
integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==
|
||||
dependencies:
|
||||
resolve "^1.20.0"
|
||||
|
||||
resolve-cwd@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
|
||||
integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
|
||||
dependencies:
|
||||
resolve-from "^5.0.0"
|
||||
|
||||
resolve-from@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
|
||||
integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
|
||||
|
||||
resolve@^1.20.0:
|
||||
version "1.22.2"
|
||||
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f"
|
||||
integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==
|
||||
dependencies:
|
||||
is-core-module "^2.11.0"
|
||||
path-parse "^1.0.7"
|
||||
supports-preserve-symlinks-flag "^1.0.0"
|
||||
|
||||
safe-buffer@^5.1.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==
|
||||
|
||||
schema-utils@^3.1.1, schema-utils@^3.2.0:
|
||||
version "3.3.0"
|
||||
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe"
|
||||
integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==
|
||||
dependencies:
|
||||
"@types/json-schema" "^7.0.8"
|
||||
ajv "^6.12.5"
|
||||
ajv-keywords "^3.5.2"
|
||||
|
||||
serialize-javascript@^6.0.1:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c"
|
||||
integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==
|
||||
dependencies:
|
||||
randombytes "^2.1.0"
|
||||
|
||||
shallow-clone@^3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"
|
||||
integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==
|
||||
dependencies:
|
||||
kind-of "^6.0.2"
|
||||
|
||||
shebang-command@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
|
||||
integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
|
||||
dependencies:
|
||||
shebang-regex "^3.0.0"
|
||||
|
||||
shebang-regex@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
|
||||
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
|
||||
|
||||
source-map-support@~0.5.20:
|
||||
version "0.5.21"
|
||||
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
|
||||
integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
|
||||
dependencies:
|
||||
buffer-from "^1.0.0"
|
||||
source-map "^0.6.0"
|
||||
|
||||
source-map@^0.6.0:
|
||||
version "0.6.1"
|
||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
|
||||
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
|
||||
|
||||
supports-color@^8.0.0:
|
||||
version "8.1.1"
|
||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
|
||||
integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
|
||||
dependencies:
|
||||
has-flag "^4.0.0"
|
||||
|
||||
supports-preserve-symlinks-flag@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
|
||||
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
|
||||
|
||||
tapable@^2.1.1, tapable@^2.2.0:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
|
||||
integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
|
||||
|
||||
terser-webpack-plugin@^5.3.7:
|
||||
version "5.3.9"
|
||||
resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1"
|
||||
integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==
|
||||
dependencies:
|
||||
"@jridgewell/trace-mapping" "^0.3.17"
|
||||
jest-worker "^27.4.5"
|
||||
schema-utils "^3.1.1"
|
||||
serialize-javascript "^6.0.1"
|
||||
terser "^5.16.8"
|
||||
|
||||
terser@^5.16.8:
|
||||
version "5.19.1"
|
||||
resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.1.tgz#dbd7231f224a9e2401d0f0959542ed74d76d340b"
|
||||
integrity sha512-27hxBUVdV6GoNg1pKQ7Z5cbR6V9txPVyBA+FQw3BaZ1Wuzvztce5p156DaP0NVZNrMZZ+6iG9Syf7WgMNKDg2Q==
|
||||
dependencies:
|
||||
"@jridgewell/source-map" "^0.3.3"
|
||||
acorn "^8.8.2"
|
||||
commander "^2.20.0"
|
||||
source-map-support "~0.5.20"
|
||||
|
||||
update-browserslist-db@^1.0.11:
|
||||
version "1.0.11"
|
||||
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940"
|
||||
integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==
|
||||
dependencies:
|
||||
escalade "^3.1.1"
|
||||
picocolors "^1.0.0"
|
||||
|
||||
uri-js@^4.2.2:
|
||||
version "4.4.1"
|
||||
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
|
||||
integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
|
||||
dependencies:
|
||||
punycode "^2.1.0"
|
||||
|
||||
"wa-sqlite@link:../../../../../wa-sqlite":
|
||||
version "0.0.0"
|
||||
uid ""
|
||||
|
||||
watchpack@^2.4.0:
|
||||
version "2.4.0"
|
||||
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d"
|
||||
integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==
|
||||
dependencies:
|
||||
glob-to-regexp "^0.4.1"
|
||||
graceful-fs "^4.1.2"
|
||||
|
||||
webpack-cli@^5.1.4:
|
||||
version "5.1.4"
|
||||
resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.4.tgz#c8e046ba7eaae4911d7e71e2b25b776fcc35759b"
|
||||
integrity sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==
|
||||
dependencies:
|
||||
"@discoveryjs/json-ext" "^0.5.0"
|
||||
"@webpack-cli/configtest" "^2.1.1"
|
||||
"@webpack-cli/info" "^2.0.2"
|
||||
"@webpack-cli/serve" "^2.0.5"
|
||||
colorette "^2.0.14"
|
||||
commander "^10.0.1"
|
||||
cross-spawn "^7.0.3"
|
||||
envinfo "^7.7.3"
|
||||
fastest-levenshtein "^1.0.12"
|
||||
import-local "^3.0.2"
|
||||
interpret "^3.1.1"
|
||||
rechoir "^0.8.0"
|
||||
webpack-merge "^5.7.3"
|
||||
|
||||
webpack-merge@^5.7.3:
|
||||
version "5.9.0"
|
||||
resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.9.0.tgz#dc160a1c4cf512ceca515cc231669e9ddb133826"
|
||||
integrity sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==
|
||||
dependencies:
|
||||
clone-deep "^4.0.1"
|
||||
wildcard "^2.0.0"
|
||||
|
||||
webpack-sources@^3.2.3:
|
||||
version "3.2.3"
|
||||
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde"
|
||||
integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
|
||||
|
||||
webpack@^5.88.2:
|
||||
version "5.88.2"
|
||||
resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.88.2.tgz#f62b4b842f1c6ff580f3fcb2ed4f0b579f4c210e"
|
||||
integrity sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==
|
||||
dependencies:
|
||||
"@types/eslint-scope" "^3.7.3"
|
||||
"@types/estree" "^1.0.0"
|
||||
"@webassemblyjs/ast" "^1.11.5"
|
||||
"@webassemblyjs/wasm-edit" "^1.11.5"
|
||||
"@webassemblyjs/wasm-parser" "^1.11.5"
|
||||
acorn "^8.7.1"
|
||||
acorn-import-assertions "^1.9.0"
|
||||
browserslist "^4.14.5"
|
||||
chrome-trace-event "^1.0.2"
|
||||
enhanced-resolve "^5.15.0"
|
||||
es-module-lexer "^1.2.1"
|
||||
eslint-scope "5.1.1"
|
||||
events "^3.2.0"
|
||||
glob-to-regexp "^0.4.1"
|
||||
graceful-fs "^4.2.9"
|
||||
json-parse-even-better-errors "^2.3.1"
|
||||
loader-runner "^4.2.0"
|
||||
mime-types "^2.1.27"
|
||||
neo-async "^2.6.2"
|
||||
schema-utils "^3.2.0"
|
||||
tapable "^2.1.1"
|
||||
terser-webpack-plugin "^5.3.7"
|
||||
watchpack "^2.4.0"
|
||||
webpack-sources "^3.2.3"
|
||||
|
||||
which@^2.0.1:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
|
||||
integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
|
||||
dependencies:
|
||||
isexe "^2.0.0"
|
||||
|
||||
wildcard@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67"
|
||||
integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==
|
||||
@@ -64,7 +64,8 @@ const common = {
|
||||
'node_modules/marked/marked.min.js',
|
||||
'node_modules/@highlightjs/cdn-assets/highlight.min.js',
|
||||
'node_modules/@isomorphic-git/lightning-fs/dist/lightning-fs.min.js',
|
||||
'packages/amplify/dist/amplify.js'
|
||||
'packages/amplify/dist/amplify.js',
|
||||
'node_modules/@logseq/sqlite/logseq_sqlite_bg.wasm',
|
||||
]).pipe(gulp.dest(path.join(outputPath, 'js'))),
|
||||
() => gulp.src([
|
||||
'node_modules/pdfjs-dist/build/pdf.js',
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
"postcss-import-ext-glob": "2.0.1",
|
||||
"postcss-nested": "6.0.0",
|
||||
"purgecss": "4.0.2",
|
||||
"shadow-cljs": "2.17.5",
|
||||
"shadow-cljs": "2.26.0",
|
||||
"stylelint": "^13.8.0",
|
||||
"stylelint-config-standard": "^20.0.0",
|
||||
"tailwindcss": "3.3.5",
|
||||
@@ -101,6 +101,7 @@
|
||||
"@logseq/capacitor-file-sync": "5.0.1",
|
||||
"@logseq/diff-merge": "0.2.2",
|
||||
"@logseq/react-tweet-embed": "1.3.1-1",
|
||||
"@logseq/sqlite": "=0.1.3",
|
||||
"@radix-ui/colors": "^0.1.8",
|
||||
"@sentry/react": "^6.18.2",
|
||||
"@sentry/tracing": "^6.18.2",
|
||||
|
||||
@@ -52,6 +52,7 @@ const portal = new MagicPortal(worker);
|
||||
<script defer src="./js/marked.min.js"></script>
|
||||
<script defer src="./js/html2canvas.min.js"></script>
|
||||
<script defer src="./js/lsplugin.core.js"></script>
|
||||
<script defer src="./js/shared.js"></script>
|
||||
<script defer src="./js/main.js"></script>
|
||||
<script defer src="./js/amplify.js"></script>
|
||||
<script defer src="./js/tabler.min.js"></script>
|
||||
|
||||
Binary file not shown.
File diff suppressed because one or more lines are too long
@@ -1,5 +0,0 @@
|
||||
/**
|
||||
* @license
|
||||
* Copyright 2019 Google LLC
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
File diff suppressed because one or more lines are too long
@@ -11,8 +11,11 @@
|
||||
{:app {:target :browser
|
||||
:module-loader true
|
||||
:js-options {:ignore-asset-requires true} ;; handle `require(xxx.css)`
|
||||
:modules {:main
|
||||
{:init-fn frontend.core/init}
|
||||
:modules {:shared
|
||||
{:entries []}
|
||||
:main
|
||||
{:init-fn frontend.core/init
|
||||
:depends-on #{:shared}}
|
||||
:code-editor
|
||||
{:entries [frontend.extensions.code]
|
||||
:depends-on #{:main}}
|
||||
@@ -21,8 +24,12 @@
|
||||
:depends-on #{:main}}
|
||||
:tldraw
|
||||
{:entries [frontend.extensions.tldraw]
|
||||
:depends-on #{:main}}}
|
||||
|
||||
:depends-on #{:main}}
|
||||
:db-worker
|
||||
{:init-fn frontend.db-worker/init
|
||||
:depends-on #{:shared}
|
||||
:web-worker true}}
|
||||
|
||||
:output-dir "./static/js"
|
||||
:asset-path "/static/js"
|
||||
:release {:asset-path "https://asset.logseq.com/static/js"}
|
||||
@@ -97,7 +104,7 @@
|
||||
:tldraw
|
||||
{:entries [frontend.extensions.tldraw]
|
||||
:depends-on #{:main}}}
|
||||
|
||||
|
||||
:output-dir "./static/js/publishing"
|
||||
:asset-path "static/js"
|
||||
:closure-defines {frontend.config/PUBLISHING true
|
||||
@@ -111,4 +118,4 @@
|
||||
:devtools {:before-load frontend.core/stop
|
||||
:after-load frontend.core/start
|
||||
:preloads [devtools.preload]}}}}
|
||||
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
[frontend.routes :as routes]
|
||||
[frontend.spec]
|
||||
[frontend.log]
|
||||
[frontend.persist-db.browser :as browser-persist-db]
|
||||
[reitit.frontend :as rf]
|
||||
[reitit.frontend.easy :as rfe]
|
||||
[logseq.api]
|
||||
@@ -67,5 +68,6 @@
|
||||
;; this is controlled by :before-load in the config
|
||||
(handler/stop!)
|
||||
(when config/dev?
|
||||
(sync/<sync-stop))
|
||||
(sync/<sync-stop)
|
||||
(browser-persist-db/dev-stop!))
|
||||
(js/console.log "stop"))
|
||||
|
||||
83
src/main/frontend/db_worker.cljs
Normal file
83
src/main/frontend/db_worker.cljs
Normal file
@@ -0,0 +1,83 @@
|
||||
(ns frontend.db-worker
|
||||
(:require ["@logseq/sqlite" :as sqlite-db :default wasm-bindgen-init]
|
||||
["comlink" :as Comlink]
|
||||
[promesa.core :as p]
|
||||
[shadow.cljs.modern :refer [defclass]]))
|
||||
|
||||
(def *inited (atom false))
|
||||
|
||||
(defclass SQLiteDB
|
||||
(extends js/Object)
|
||||
|
||||
(constructor
|
||||
[this]
|
||||
(super))
|
||||
|
||||
Object
|
||||
(inited
|
||||
[_this]
|
||||
(boolean @*inited))
|
||||
|
||||
;; dev-only, close all db connections and db files
|
||||
(unsafeDevCloseAll
|
||||
[_this]
|
||||
(.dev_close sqlite-db))
|
||||
|
||||
(getVersion
|
||||
[_this]
|
||||
(.get_version sqlite-db))
|
||||
|
||||
(supportOPFS
|
||||
[_this]
|
||||
(.has_opfs_support sqlite-db))
|
||||
|
||||
(listDB
|
||||
[_this]
|
||||
(.list_db sqlite-db))
|
||||
|
||||
(newDB
|
||||
[_this repo]
|
||||
(.new_db sqlite-db repo))
|
||||
|
||||
(deleteBlocks
|
||||
[_this repo uuids]
|
||||
(when (seq uuids)
|
||||
(.delete_blocks sqlite-db repo uuids)))
|
||||
|
||||
(upsertBlocks
|
||||
[_this repo blocks]
|
||||
(.upsert_blocks sqlite-db repo blocks))
|
||||
|
||||
(fetchAllPages
|
||||
[_this repo]
|
||||
(.fetch_all_pages sqlite-db repo))
|
||||
|
||||
;; fetch all blocks, return block id and page id
|
||||
(fetchAllBlocks
|
||||
[_this repo]
|
||||
(.fetch_all_blocks sqlite-db repo))
|
||||
|
||||
(fetchRecentJournals
|
||||
[_this repo]
|
||||
(.fetch_recent_journals sqlite-db repo))
|
||||
|
||||
(fetchInitData
|
||||
[_this repo]
|
||||
(.fetch_init_data sqlite-db repo))
|
||||
|
||||
(fetchBlocksExcluding
|
||||
[_this repo excluding-uuids]
|
||||
(.fetch_blocks_excluding sqlite-db repo excluding-uuids)))
|
||||
|
||||
(defn init
|
||||
"web worker entry"
|
||||
[]
|
||||
(p/let [current-url (js/URL. "/static/js/logseq_sqlite_bg.wasm" (.. js/location -href))
|
||||
^js obj (SQLiteDB.) ;; call this
|
||||
_ (Comlink/expose obj) ;; expose as early as possible
|
||||
_ (wasm-bindgen-init current-url) ;; init wasm
|
||||
_ (.init sqlite-db)]
|
||||
(prn ::init-ok
|
||||
:has-opfs-support (.has_opfs_support sqlite-db)
|
||||
:sqlite-version (.get_version sqlite-db))
|
||||
(reset! *inited true)))
|
||||
@@ -1,46 +1,62 @@
|
||||
(ns frontend.persist-db.browser
|
||||
"Browser db persist"
|
||||
"Browser db persist support, using @logseq/sqlite.
|
||||
|
||||
This interface uses clj data format as input."
|
||||
(:require ["comlink" :as Comlink]
|
||||
[cljs-time.coerce :as tc]
|
||||
[cljs-time.core :as t]
|
||||
[cljs.core.async.interop :refer [p->c]]
|
||||
[clojure.core.async :as async :refer [<! chan go go-loop]]
|
||||
[frontend.persist-db.protocol :as protocol]
|
||||
[promesa.core :as p]))
|
||||
[promesa.core :as p]
|
||||
[frontend.util :as util]))
|
||||
|
||||
(defonce *worker (atom nil))
|
||||
(defonce *sqlite (atom nil))
|
||||
(defonce *inited (atom false))
|
||||
|
||||
(defonce db-upsert-chan (chan 10))
|
||||
|
||||
(defn- ensure-sqlite-init []
|
||||
(if (nil? @*worker)
|
||||
(js/Promise. (fn [resolve _reject]
|
||||
(let [worker (try
|
||||
(js/SharedWorker. "/static/js/ls-wa-sqlite/persist-db-worker.js")
|
||||
(catch js/Error e
|
||||
(js/console.error "worker error", e)
|
||||
nil))
|
||||
_ (reset! *worker worker)
|
||||
^js sqlite (Comlink/wrap (.-port worker))
|
||||
_ (reset! *sqlite sqlite)]
|
||||
(-> (.init sqlite)
|
||||
(p/then (fn []
|
||||
(js/console.log "sqlite init done")
|
||||
(resolve @*sqlite)))
|
||||
(p/then (fn []
|
||||
(go-loop []
|
||||
(let [[repo ret-ch deleted-uuids upsert-blocks] (<! db-upsert-chan)
|
||||
delete-rc (when (seq deleted-uuids)
|
||||
(<! (p->c (.deleteBlocks sqlite repo (clj->js (map str deleted-uuids))))))
|
||||
upsert-rc (<! (p->c (.upsertBlocks sqlite repo (clj->js upsert-blocks))))]
|
||||
(async/put! ret-ch [delete-rc upsert-rc])
|
||||
(prn :db-upsert-chan :delete delete-rc :upsert upsert-rc))
|
||||
(recur))
|
||||
(prn ::done)))
|
||||
(p/catch (fn [e]
|
||||
(js/console.error "init error", e)))))))
|
||||
(p/resolved @*sqlite)))
|
||||
(when-not (util/electron?)
|
||||
(let [worker (try
|
||||
(js/Worker. "/static/js/db-worker.js")
|
||||
(catch js/Error e
|
||||
(js/console.error "worker error", e)
|
||||
nil))
|
||||
^js sqlite (Comlink/wrap worker)]
|
||||
(reset! *worker worker)
|
||||
(reset! *sqlite sqlite)))
|
||||
|
||||
|
||||
(defn- ensure-sqlite-init
|
||||
[]
|
||||
(if @*inited
|
||||
(p/resolved @*sqlite)
|
||||
(js/Promise. (fn [resolve reject]
|
||||
(let [timer (atom nil)
|
||||
timer' (js/setInterval (fn []
|
||||
(p/let [inited (.inited ^js @*sqlite)]
|
||||
(when inited
|
||||
(p/let [version (.getVersion ^js @*sqlite)
|
||||
support (.supportOPFS ^js @*sqlite)]
|
||||
(prn :init-sqlite version :opfs-support support))
|
||||
(js/clearInterval @timer)
|
||||
(reset! *inited true)
|
||||
(resolve @*sqlite))))
|
||||
1000)
|
||||
_ (reset! timer timer')]
|
||||
(js/setTimeout (fn []
|
||||
(js/clearInterval timer)
|
||||
(reject nil)) ;; cannot init
|
||||
(js/console.error "SQLite worker is not ready after 100s")
|
||||
100000))))))
|
||||
|
||||
(defn dev-stop!
|
||||
"For dev env only, stop opfs backend, close all sqlite connections and OPFS sync access handles."
|
||||
[]
|
||||
(println "[persis-db] Dev: close all sqlite connections")
|
||||
(when-not (util/electron?)
|
||||
(when @*sqlite
|
||||
(.unsafeDevCloseAll ^js @*sqlite))))
|
||||
|
||||
(defn- type-of-block
|
||||
"
|
||||
@@ -73,15 +89,15 @@
|
||||
@uuid, @type, @page_uuid, @page_journal_day, @name, @content, @datoms, @created_at, @updated_at
|
||||
"
|
||||
[b]
|
||||
[(str (:block/uuid b))
|
||||
(type-of-block b)
|
||||
(str (:page_uuid b))
|
||||
(:block/journal-day b)
|
||||
(or (:file/path b) (:block/name b))
|
||||
(or (:file/content b) (:block/content b))
|
||||
(:datoms b)
|
||||
(or (:block/created-at b) (time-ms))
|
||||
(or (:block/updated-at b) (time-ms))])
|
||||
{:uuid (str (:block/uuid b))
|
||||
:type (type-of-block b)
|
||||
:page_uuid (str (:page_uuid b))
|
||||
:page_journal_day (:block/journal-day b)
|
||||
:name (or (:file/path b) (:block/name b))
|
||||
:content (or (:file/content b) (:block/content b))
|
||||
:datoms (:datoms b)
|
||||
:created_at (or (:block/created-at b) (time-ms))
|
||||
:updated_at (or (:block/updated-at b) (time-ms))})
|
||||
|
||||
(defrecord InBrowser []
|
||||
protocol/PersistentDB
|
||||
@@ -91,27 +107,26 @@
|
||||
(.newDB sqlite repo)))
|
||||
|
||||
(<list-db [_this]
|
||||
(p/let [^js sqlite (ensure-sqlite-init)
|
||||
dbs (.listDB sqlite)]
|
||||
(js/console.log "list DBs:" dbs)
|
||||
dbs))
|
||||
(p/let [^js sqlite (ensure-sqlite-init)]
|
||||
(.listDB sqlite)))
|
||||
|
||||
(<unsafe-delete [_this repo]
|
||||
(p/let [^js sqlite (ensure-sqlite-init)]
|
||||
(.unsafeUnlinkDB sqlite repo)))
|
||||
|
||||
(<transact-data [_this repo upsert-blocks deleted-uuids]
|
||||
(go
|
||||
(let [_ (<! (p->c (ensure-sqlite-init)))
|
||||
upsert-blocks (map ds->sqlite-block upsert-blocks)
|
||||
ch (chan)
|
||||
_ (async/put! db-upsert-chan [repo ch deleted-uuids upsert-blocks])]
|
||||
(<! ch))))
|
||||
(p->c (p/let [^js sqlite (ensure-sqlite-init)
|
||||
deleted (clj->js (map str deleted-uuids))
|
||||
_ (when (seq deleted)
|
||||
(.deleteBlocks sqlite repo deleted))
|
||||
upsert-blocks (clj->js (map ds->sqlite-block upsert-blocks))]
|
||||
(.upsertBlocks sqlite repo upsert-blocks))))
|
||||
|
||||
(<fetch-initital-data [_this repo _opts]
|
||||
(prn ::fetch-initial repo)
|
||||
(p/let [^js sqlite (ensure-sqlite-init)
|
||||
all-pages (.fetchAllPages sqlite repo)
|
||||
all-blocks (.fetchAllBlocks sqlite repo)
|
||||
journal-blocks (.fetchRecentJournalBlocks sqlite repo)
|
||||
journal-blocks (.fetchRecentJournals sqlite repo)
|
||||
init-data (.fetchInitData sqlite repo)]
|
||||
|
||||
#js {:all-blocks all-blocks
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
(prn ::new repo)
|
||||
(ipc/ipc :db-new repo))
|
||||
(<list-db [_this]
|
||||
(js/console.warn "TODO: list-db for electron not implemented")
|
||||
(js/console.warn "TODO: list-db for electron is not implemented")
|
||||
[])
|
||||
(<unsafe-delete [_this _repo]
|
||||
(js/console.warn "TODO: delete")
|
||||
|
||||
23
yarn.lock
23
yarn.lock
@@ -552,6 +552,11 @@
|
||||
resolved "https://registry.yarnpkg.com/@logseq/react-tweet-embed/-/react-tweet-embed-1.3.1-1.tgz#119d22be8234de006fc35c3fa2a36f85634c5be6"
|
||||
integrity sha512-9O0oHs5depCvh6ZQvwtl1xb7B80YG5rUfY10uSUat5itOlcE3IWaYYpe6p/tcHErqHWnWgkXHitAB9M29FMbQg==
|
||||
|
||||
"@logseq/sqlite@=0.1.3":
|
||||
version "0.1.3"
|
||||
resolved "https://registry.yarnpkg.com/@logseq/sqlite/-/sqlite-0.1.3.tgz#b1213b680d3caf776652a5059abf9a0731d4cd7b"
|
||||
integrity sha512-7NOFsDt1MqQvBB5p9bRLgCKLMlVJ2coeXEShQS+G7NsIKQ+lIzv7X4bu+69qTdAeeK2+jAVTZjbBX58r8TRgHQ==
|
||||
|
||||
"@mapbox/node-pre-gyp@^1.0.0":
|
||||
version "1.0.11"
|
||||
resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz#417db42b7f5323d79e93b34a6d7a2a12c0df43fa"
|
||||
@@ -6991,19 +6996,19 @@ sha.js@^2.4.0, sha.js@^2.4.8:
|
||||
inherits "^2.0.1"
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
shadow-cljs-jar@1.3.2:
|
||||
version "1.3.2"
|
||||
resolved "https://registry.yarnpkg.com/shadow-cljs-jar/-/shadow-cljs-jar-1.3.2.tgz#97273afe1747b6a2311917c1c88d9e243c81957b"
|
||||
integrity sha512-XmeffAZHv8z7451kzeq9oKh8fh278Ak+UIOGGrapyqrFBB773xN8vMQ3O7J7TYLnb9BUwcqadKkmgaq7q6fhZg==
|
||||
shadow-cljs-jar@1.3.4:
|
||||
version "1.3.4"
|
||||
resolved "https://registry.yarnpkg.com/shadow-cljs-jar/-/shadow-cljs-jar-1.3.4.tgz#0939d91c468b4bc5eab5a958f79e7ef5696fdf62"
|
||||
integrity sha512-cZB2pzVXBnhpJ6PQdsjO+j/MksR28mv4QD/hP/2y1fsIa9Z9RutYgh3N34FZ8Ktl4puAXaIGlct+gMCJ5BmwmA==
|
||||
|
||||
shadow-cljs@2.17.5:
|
||||
version "2.17.5"
|
||||
resolved "https://registry.yarnpkg.com/shadow-cljs/-/shadow-cljs-2.17.5.tgz#ed2fa8b06ea62cb310f069b70314e555f5bf9d50"
|
||||
integrity sha512-Xvev4OLxGkjxC5mT5jHZDpJuAKzSHn7bGa4RPBm+Jp2gBz4iNkNDNPDvkyqt0r9RD0SWaYJF8zGyxi5c18yJBw==
|
||||
shadow-cljs@2.26.0:
|
||||
version "2.26.0"
|
||||
resolved "https://registry.yarnpkg.com/shadow-cljs/-/shadow-cljs-2.26.0.tgz#2a40d32f00da9bdd562ae634fe44ab2fbd0a073f"
|
||||
integrity sha512-/GkAXhTMGG3rnoRORN5U+1nQfQD2AESb9+fnV8Cu2SxQ+wEoXhtoBnsa1GexFQ8+80Wz/s7rFf0PvTXkuM7lJQ==
|
||||
dependencies:
|
||||
node-libs-browser "^2.2.1"
|
||||
readline-sync "^1.4.7"
|
||||
shadow-cljs-jar "1.3.2"
|
||||
shadow-cljs-jar "1.3.4"
|
||||
source-map-support "^0.4.15"
|
||||
which "^1.3.1"
|
||||
ws "^7.4.6"
|
||||
|
||||
Reference in New Issue
Block a user