refactor: remove y-indexeddb (#1771)

This commit is contained in:
Himself65 2023-04-02 02:57:50 -05:00 committed by GitHub
parent f5574c68fe
commit ed8f07f102
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 918 additions and 35 deletions

View File

@ -1,13 +0,0 @@
diff --git a/src/y-indexeddb.js b/src/y-indexeddb.js
index 68b7b1b2f71239fbd0c89e50a94931965661d651..186b35323e256808b2535c02d9a4830794a1649d 100644
--- a/src/y-indexeddb.js
+++ b/src/y-indexeddb.js
@@ -95,7 +95,7 @@ export class IndexeddbPersistence extends Observable {
* @param {any} origin
*/
this._storeUpdate = (update, origin) => {
- if (this.db && origin !== this) {
+ if (this.db && !(origin instanceof IndexeddbPersistence)) {
const [updatesStore] = idb.transact(/** @type {IDBDatabase} */ (this.db), [updatesStoreName])
idb.addAutoKey(updatesStore, update)
if (++this._dbsize >= PREFERRED_TRIM_SIZE) {

View File

@ -75,8 +75,5 @@
"vitest": "^0.29.8",
"vitest-fetch-mock": "^0.2.2"
},
"packageManager": "yarn@3.5.0",
"resolutions": {
"y-indexeddb@^9.0.9": "patch:y-indexeddb@npm%3A9.0.9#./.yarn/patches/y-indexeddb-npm-9.0.9-6bd9b26461.patch"
}
"packageManager": "yarn@3.5.0"
}

View File

@ -19,6 +19,7 @@
"@affine/env": "workspace:*",
"@blocksuite/blocks": "0.5.0-20230326033652-70ca43c",
"@blocksuite/store": "0.5.0-20230326033652-70ca43c",
"@toeverything/y-indexeddb": "workspace:*",
"firebase": "^9.19.1",
"jotai": "^2.0.3",
"js-base64": "^3.7.5",

View File

@ -1,6 +1,6 @@
import { nanoid, Workspace as BlockSuiteWorkspace } from '@blocksuite/store';
import { createIndexedDBProvider } from '@toeverything/y-indexeddb';
import { createJSONStorage } from 'jotai/utils';
import { IndexeddbPersistence } from 'y-indexeddb';
import { z } from 'zod';
import { createLocalProviders } from '../providers';
@ -47,9 +47,10 @@ export const CRUD: WorkspaceCRUD<WorkspaceFlavour.LOCAL> = {
(_: string) => undefined
);
BlockSuiteWorkspace.Y.applyUpdateV2(blockSuiteWorkspace.doc, binary);
const persistence = new IndexeddbPersistence(id, blockSuiteWorkspace.doc);
const persistence = createIndexedDBProvider(id, blockSuiteWorkspace.doc);
persistence.connect();
await persistence.whenSynced.then(() => {
persistence.destroy();
persistence.disconnect();
});
storage.setItem(kStoreKey, [...data, id]);
console.log('create', id, storage.getItem(kStoreKey));

View File

@ -0,0 +1,36 @@
{
"name": "@toeverything/y-indexeddb",
"type": "module",
"scripts": {
"build": "vite build"
},
"files": [
"dist"
],
"exports": {
".": "./src/index.ts"
},
"publishConfig": {
"main": "dist/index.umd.cjs",
"module": "dist/index.js",
"exports": {
".": {
"types": "./dist/index.d.ts",
"import": "./dist/index.js",
"require": "./dist/index.umd.cjs"
}
}
},
"dependencies": {
"idb": "^7.1.1"
},
"devDependencies": {
"@blocksuite/blocks": "0.5.0-20230324040005-14417c2",
"@blocksuite/store": "0.5.0-20230324040005-14417c2",
"vite": "^4.2.1",
"vite-plugin-dts": "^2.1.0"
},
"peerDependencies": {
"yjs": "^13.5.51"
}
}

View File

@ -0,0 +1,148 @@
/**
* @vitest-environment happy-dom
*/
import 'fake-indexeddb/auto';
import { __unstableSchemas, AffineSchemas } from '@blocksuite/blocks/models';
import { assertExists, uuidv4, Workspace } from '@blocksuite/store';
import { openDB } from 'idb';
import { beforeEach, describe, expect, test, vi } from 'vitest';
import type { WorkspacePersist } from '../index';
import { createIndexedDBProvider, dbVersion, setMergeCount } from '../index';
async function getUpdates(id: string): Promise<ArrayBuffer[]> {
const db = await openDB('affine-local', dbVersion);
const store = await db
.transaction('workspace', 'readonly')
.objectStore('workspace');
const data = (await store.get(id)) as WorkspacePersist | undefined;
assertExists(data, 'data should not be undefined');
expect(data.id).toBe(id);
return data.updates.map(({ update }) => update);
}
let id: string;
let workspace: Workspace;
beforeEach(() => {
id = uuidv4();
workspace = new Workspace({
id,
isSSR: true,
});
workspace.register(AffineSchemas).register(__unstableSchemas);
});
describe('indexeddb provider', () => {
test('connect', async () => {
const provider = createIndexedDBProvider(workspace.id, workspace.doc);
provider.connect();
await provider.whenSynced;
const db = await openDB('affine-local', dbVersion);
{
const store = await db
.transaction('workspace', 'readonly')
.objectStore('workspace');
const data = await store.get(id);
expect(data).toEqual({
id,
updates: [],
});
const page = workspace.createPage('page0');
const pageBlockId = page.addBlock('affine:page', { title: '' });
const frameId = page.addBlock('affine:frame', {}, pageBlockId);
page.addBlock('affine:paragraph', {}, frameId);
}
await new Promise(resolve => setTimeout(resolve, 1000));
{
const store = await db
.transaction('workspace', 'readonly')
.objectStore('workspace');
const data = (await store.get(id)) as WorkspacePersist | undefined;
assertExists(data);
expect(data.id).toBe(id);
const testWorkspace = new Workspace({
id: 'test',
})
.register(AffineSchemas)
.register(__unstableSchemas);
data.updates.forEach(({ update }) => {
Workspace.Y.applyUpdate(testWorkspace.doc, update);
});
const binary = Workspace.Y.encodeStateAsUpdate(testWorkspace.doc);
expect(binary).toEqual(Workspace.Y.encodeStateAsUpdate(workspace.doc));
}
const secondWorkspace = new Workspace({
id,
})
.register(AffineSchemas)
.register(__unstableSchemas);
const provider2 = createIndexedDBProvider(
secondWorkspace.id,
secondWorkspace.doc
);
provider2.connect();
await provider2.whenSynced;
expect(Workspace.Y.encodeStateAsUpdate(secondWorkspace.doc)).toEqual(
Workspace.Y.encodeStateAsUpdate(workspace.doc)
);
});
test('disconnect suddenly', async () => {
const provider = createIndexedDBProvider(workspace.id, workspace.doc);
const fn = vi.fn();
provider.connect();
provider.disconnect();
expect(fn).toBeCalledTimes(0);
await provider.whenSynced.catch(fn);
expect(fn).toBeCalledTimes(1);
});
test('connect and disconnect', async () => {
const provider = createIndexedDBProvider(workspace.id, workspace.doc);
provider.connect();
const p1 = provider.whenSynced;
await provider.whenSynced;
provider.disconnect();
{
const page = workspace.createPage('page0');
const pageBlockId = page.addBlock('affine:page', { title: '' });
const frameId = page.addBlock('affine:frame', {}, pageBlockId);
page.addBlock('affine:paragraph', {}, frameId);
}
{
const updates = await getUpdates(workspace.id);
expect(updates).toEqual([]);
}
provider.connect();
const p2 = provider.whenSynced;
await provider.whenSynced;
{
const updates = await getUpdates(workspace.id);
expect(updates).not.toEqual([]);
}
provider.disconnect();
expect(p1).not.toBe(p2);
});
test('merge', async () => {
setMergeCount(5);
const provider = createIndexedDBProvider(workspace.id, workspace.doc);
provider.connect();
{
const page = workspace.createPage('page0');
const pageBlockId = page.addBlock('affine:page', { title: '' });
const frameId = page.addBlock('affine:frame', {}, pageBlockId);
for (let i = 0; i < 100; i++) {
page.addBlock('affine:paragraph', {}, frameId);
}
}
await provider.whenSynced;
{
const updates = await getUpdates(id);
expect(updates.length).lessThanOrEqual(5);
}
});
});

View File

@ -0,0 +1,249 @@
import { openDB } from 'idb';
import type { DBSchema, IDBPDatabase } from 'idb/build/entry';
import {
applyUpdate,
diffUpdate,
Doc,
encodeStateAsUpdate,
mergeUpdates,
} from 'yjs';
const indexeddbOrigin = Symbol('indexeddb-provider-origin');
let mergeCount = 500;
export class EarlyDisconnectError extends Error {
constructor() {
super('Early disconnect');
}
}
export function setMergeCount(count: number) {
mergeCount = count;
}
export const dbVersion = 1;
export function upgradeDB(db: IDBPDatabase<BlockSuiteBinaryDB>) {
db.createObjectStore('workspace', { keyPath: 'id' });
db.createObjectStore('milestone', { keyPath: 'id' });
}
export interface IndexedDBProvider {
connect: () => void;
disconnect: () => void;
cleanup: () => void;
whenSynced: Promise<void>;
}
export type UpdateMessage = {
timestamp: number;
update: Uint8Array;
};
export type WorkspacePersist = {
id: string;
updates: UpdateMessage[];
};
export type WorkspaceMilestone = {
id: string;
milestone: Record<string, Uint8Array>;
};
export interface BlockSuiteBinaryDB extends DBSchema {
workspace: {
key: string;
value: WorkspacePersist;
};
milestone: {
key: string;
value: WorkspaceMilestone;
};
}
export interface OldYjsDB extends DBSchema {
updates: {
key: number;
value: Uint8Array;
};
}
export const createIndexedDBProvider = (
id: string,
doc: Doc,
dbName = 'affine-local'
): IndexedDBProvider => {
let allDb: IDBDatabaseInfo[];
let resolve: () => void;
let reject: (reason?: unknown) => void;
let early = true;
let connect = false;
let destroy = false;
async function handleUpdate(update: Uint8Array, origin: unknown) {
const db = await dbPromise;
if (!connect) {
return;
}
if (origin === indexeddbOrigin) {
return;
}
const store = db
.transaction('workspace', 'readwrite')
.objectStore('workspace');
let data = await store.get(id);
if (!data) {
data = {
id,
updates: [],
};
}
data.updates.push({
timestamp: Date.now(),
update,
});
if (data.updates.length > mergeCount) {
const updates = data.updates.map(({ update }) => update);
const doc = new Doc();
doc.transact(() => {
updates.forEach(update => {
applyUpdate(doc, update, indexeddbOrigin);
});
}, indexeddbOrigin);
const update = encodeStateAsUpdate(doc);
data = {
id,
updates: [
{
timestamp: Date.now(),
update,
},
],
};
await store.put(data);
} else {
await store.put(data);
}
}
const dbPromise = openDB<BlockSuiteBinaryDB>(dbName, dbVersion, {
upgrade: upgradeDB,
});
const handleDestroy = async () => {
connect = true;
destroy = true;
const db = await dbPromise;
db.close();
};
const apis = {
connect: async () => {
apis.whenSynced = new Promise<void>((_resolve, _reject) => {
early = true;
resolve = _resolve;
reject = _reject;
});
connect = true;
doc.on('update', handleUpdate);
doc.on('destroy', handleDestroy);
// only run promise below, otherwise the logic is incorrect
const db = await dbPromise;
if (!allDb) {
allDb = await indexedDB.databases();
// run the migration
await Promise.all(
allDb.map(meta => {
if (meta.name && meta.version === 1) {
const name = meta.name;
const version = meta.version;
return openDB<IDBPDatabase<OldYjsDB>>(name, version).then(
async oldDB => {
if (!oldDB.objectStoreNames.contains('updates')) {
return;
}
const t = oldDB
.transaction('updates', 'readonly')
.objectStore('updates');
const updates = await t.getAll();
if (
!Array.isArray(updates) ||
!updates.every(update => update instanceof Uint8Array)
) {
return;
}
const update = mergeUpdates(updates);
const workspaceTransaction = db
.transaction('workspace', 'readwrite')
.objectStore('workspace');
const data = await workspaceTransaction.get(name);
if (!data) {
console.log('upgrading the database');
await workspaceTransaction.put({
id: name,
updates: [
{
timestamp: Date.now(),
update,
},
],
});
}
}
);
}
})
);
}
const store = db
.transaction('workspace', 'readwrite')
.objectStore('workspace');
const data = await store.get(id);
if (!connect) {
return;
}
if (!data) {
await db.put('workspace', {
id,
updates: [],
});
} else {
const updates = data.updates.map(({ update }) => update);
const update = mergeUpdates(updates);
const newUpdate = diffUpdate(encodeStateAsUpdate(doc), update);
await store.put({
...data,
updates: [
...data.updates,
{
timestamp: Date.now(),
update: newUpdate,
},
],
});
doc.transact(() => {
updates.forEach(update => {
applyUpdate(doc, update);
});
}, indexeddbOrigin);
}
early = false;
resolve();
},
disconnect() {
connect = false;
if (early) {
reject(new EarlyDisconnectError());
}
doc.off('update', handleUpdate);
doc.off('destroy', handleDestroy);
},
cleanup() {
destroy = true;
// todo
},
whenSynced: Promise.resolve(),
};
return apis;
};

View File

@ -0,0 +1,9 @@
{
"extends": "../../tsconfig.json",
"include": ["./src"],
"references": [
{
"path": "./tsconfig.node.json"
}
]
}

View File

@ -0,0 +1,9 @@
{
"compilerOptions": {
"composite": true,
"module": "ESNext",
"moduleResolution": "Node",
"allowSyntheticDefaultImports": true
},
"include": ["vite.config.ts"]
}

View File

@ -0,0 +1,25 @@
import { resolve } from 'node:path';
import { fileURLToPath } from 'url';
import { defineConfig } from 'vite';
import dts from 'vite-plugin-dts';
const __dirname = fileURLToPath(new URL('.', import.meta.url));
export default defineConfig({
build: {
terserOptions: {
ecma: 2020,
},
sourcemap: true,
lib: {
entry: resolve(__dirname, 'src/index.ts'),
fileName: 'index',
name: 'BlockSuiteIndexedDBProvider',
},
rollupOptions: {
external: ['idb', '@blocksuite/store'],
},
},
plugins: [dts()],
});

View File

@ -27,7 +27,8 @@
"@affine/env/*": ["./packages/env/src/*"],
"@affine/utils": ["./packages/utils"],
"@affine/workspace/*": ["./packages/workspace/src/*"],
"@affine-test/fixtures/*": ["./tests/fixtures/*"]
"@affine-test/fixtures/*": ["./tests/fixtures/*"],
"@toeverything/y-indexeddb": ["./packages/y-indexeddb/src"]
}
},
"references": [

448
yarn.lock
View File

@ -245,6 +245,7 @@ __metadata:
"@affine/env": "workspace:*"
"@blocksuite/blocks": 0.5.0-20230326033652-70ca43c
"@blocksuite/store": 0.5.0-20230326033652-70ca43c
"@toeverything/y-indexeddb": "workspace:*"
"@types/ws": ^8.5.4
firebase: ^9.19.1
jotai: ^2.0.3
@ -608,7 +609,7 @@ __metadata:
languageName: node
linkType: hard
"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.21.4, @babel/parser@npm:~7.21.2":
"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.15, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.21.4, @babel/parser@npm:~7.21.2":
version: 7.21.4
resolution: "@babel/parser@npm:7.21.4"
bin:
@ -1852,6 +1853,26 @@ __metadata:
languageName: node
linkType: hard
"@blocksuite/blocks@npm:0.5.0-20230324040005-14417c2":
version: 0.5.0-20230324040005-14417c2
resolution: "@blocksuite/blocks@npm:0.5.0-20230324040005-14417c2"
dependencies:
"@blocksuite/global": 0.5.0-20230324040005-14417c2
"@blocksuite/phasor": 0.5.0-20230324040005-14417c2
"@blocksuite/virgo": 0.5.0-20230324040005-14417c2
"@popperjs/core": ^2.11.6
hotkeys-js: ^3.10.1
lit: ^2.6.1
marked: ^4.2.12
shiki: ^0.14.1
turndown: ^7.1.1
zod: ^3.21.4
peerDependencies:
"@blocksuite/store": 0.5.0-20230324040005-14417c2
checksum: f339b15fd060f9756420c5a47390b746610503486aedd62d6850d4626e6757b9a4e34e07a6f7738e96beb0381d086cf12f434b4aca44f89b02aa24db5e220bcc
languageName: node
linkType: hard
"@blocksuite/blocks@npm:0.5.0-20230326033652-70ca43c":
version: 0.5.0-20230326033652-70ca43c
resolution: "@blocksuite/blocks@npm:0.5.0-20230326033652-70ca43c"
@ -1887,6 +1908,21 @@ __metadata:
languageName: node
linkType: hard
"@blocksuite/global@npm:0.5.0-20230324040005-14417c2":
version: 0.5.0-20230324040005-14417c2
resolution: "@blocksuite/global@npm:0.5.0-20230324040005-14417c2"
dependencies:
ansi-colors: ^4.1.3
zod: ^3.21.4
peerDependencies:
lit: ^2.6
peerDependenciesMeta:
lit:
optional: true
checksum: 9fab3db0843d5040739a0dade33beccb272e51202801619ea6e218c87d983163652cf1233dad57de88f57d41919ddb363922ac9cf15bb14a625227e3f886122b
languageName: node
linkType: hard
"@blocksuite/global@npm:0.5.0-20230326033652-70ca43c":
version: 0.5.0-20230326033652-70ca43c
resolution: "@blocksuite/global@npm:0.5.0-20230326033652-70ca43c"
@ -1912,6 +1948,20 @@ __metadata:
languageName: node
linkType: hard
"@blocksuite/phasor@npm:0.5.0-20230324040005-14417c2":
version: 0.5.0-20230324040005-14417c2
resolution: "@blocksuite/phasor@npm:0.5.0-20230324040005-14417c2"
dependencies:
"@blocksuite/global": 0.5.0-20230324040005-14417c2
fractional-indexing: ^3.2.0
perfect-freehand: ^1.2.0
peerDependencies:
nanoid: ^4
yjs: ^13
checksum: 464e62c9da3f63f22a4d426964c1a522f46c8b4f3fe552256c6a0a06517e0bf8a34c14548e54f94fc5f72b40d9d47ae0ba1cbeeacc24d924cdad5be15caec711
languageName: node
linkType: hard
"@blocksuite/phasor@npm:0.5.0-20230326033652-70ca43c":
version: 0.5.0-20230326033652-70ca43c
resolution: "@blocksuite/phasor@npm:0.5.0-20230326033652-70ca43c"
@ -1926,6 +1976,29 @@ __metadata:
languageName: node
linkType: hard
"@blocksuite/store@npm:0.5.0-20230324040005-14417c2":
version: 0.5.0-20230324040005-14417c2
resolution: "@blocksuite/store@npm:0.5.0-20230324040005-14417c2"
dependencies:
"@blocksuite/global": 0.5.0-20230324040005-14417c2
"@blocksuite/virgo": 0.5.0-20230324040005-14417c2
"@types/flexsearch": ^0.7.3
buffer: ^6.0.3
flexsearch: 0.7.21
idb-keyval: ^6.2.0
ky: ^0.33.3
lib0: ^0.2.68
merge: ^2.1.1
nanoid: ^4.0.1
y-protocols: ^1.0.5
y-webrtc: ^10.2.5
zod: ^3.21.4
peerDependencies:
yjs: ^13
checksum: 8c483db2df8b5a3528c538191d3ba26793bc85c529d9911a29f29748af29a93d7c6cd6494e9a23869bbb4414b6f3dd041abcc0c5298a46da103c3e46b8419bfa
languageName: node
linkType: hard
"@blocksuite/store@npm:0.5.0-20230326033652-70ca43c":
version: 0.5.0-20230326033652-70ca43c
resolution: "@blocksuite/store@npm:0.5.0-20230326033652-70ca43c"
@ -1949,6 +2022,19 @@ __metadata:
languageName: node
linkType: hard
"@blocksuite/virgo@npm:0.5.0-20230324040005-14417c2":
version: 0.5.0-20230324040005-14417c2
resolution: "@blocksuite/virgo@npm:0.5.0-20230324040005-14417c2"
dependencies:
"@blocksuite/global": 0.5.0-20230324040005-14417c2
zod: ^3.21.4
peerDependencies:
lit: ^2
yjs: ^13
checksum: 318abaa9c44feeb0d9be98317ccf7aac3c5d884d31325799d23aae072b11b0e4dfbd51b0a52056f6c0b87f5bc822eaabdb38c3936b3597040f3a9de9c36a76c7
languageName: node
linkType: hard
"@blocksuite/virgo@npm:0.5.0-20230326033652-70ca43c":
version: 0.5.0-20230326033652-70ca43c
resolution: "@blocksuite/virgo@npm:0.5.0-20230326033652-70ca43c"
@ -3475,6 +3561,58 @@ __metadata:
languageName: node
linkType: hard
"@microsoft/api-extractor-model@npm:7.26.4":
version: 7.26.4
resolution: "@microsoft/api-extractor-model@npm:7.26.4"
dependencies:
"@microsoft/tsdoc": 0.14.2
"@microsoft/tsdoc-config": ~0.16.1
"@rushstack/node-core-library": 3.55.2
checksum: 0b27f9b248396422f3044f2472d86c111a6a4d34b4fd2c67d9995e96e5b144ec41ac35dbf2a005f144766814b824518bc42b424d93e3075d3dc1b17c2f8791d6
languageName: node
linkType: hard
"@microsoft/api-extractor@npm:^7.33.5":
version: 7.34.4
resolution: "@microsoft/api-extractor@npm:7.34.4"
dependencies:
"@microsoft/api-extractor-model": 7.26.4
"@microsoft/tsdoc": 0.14.2
"@microsoft/tsdoc-config": ~0.16.1
"@rushstack/node-core-library": 3.55.2
"@rushstack/rig-package": 0.3.18
"@rushstack/ts-command-line": 4.13.2
colors: ~1.2.1
lodash: ~4.17.15
resolve: ~1.22.1
semver: ~7.3.0
source-map: ~0.6.1
typescript: ~4.8.4
bin:
api-extractor: bin/api-extractor
checksum: 855a04237e30f425553aab661b77bc0cbeb493510d769691d713e5bfdf02439fa7bc2076750271d154237f8c9d4451b209f30724c9ee2a2c4ea307c5db093d42
languageName: node
linkType: hard
"@microsoft/tsdoc-config@npm:~0.16.1":
version: 0.16.2
resolution: "@microsoft/tsdoc-config@npm:0.16.2"
dependencies:
"@microsoft/tsdoc": 0.14.2
ajv: ~6.12.6
jju: ~1.4.0
resolve: ~1.19.0
checksum: 12b0d703154076bcaac75ca42e804e4fc292672396441e54346d7eadd0d6b57f90980eda2b1bab89b224af86da34a2389f9054002e282011e795ca5919a4386f
languageName: node
linkType: hard
"@microsoft/tsdoc@npm:0.14.2":
version: 0.14.2
resolution: "@microsoft/tsdoc@npm:0.14.2"
checksum: b167c89e916ba73ee20b9c9d5dba6aa3a0de25ed3d50050e8a344dca7cd43cb2e1059bd515c820369b6e708901dd3fda476a42bc643ca74a35671ce77f724a3a
languageName: node
linkType: hard
"@mswjs/cookies@npm:^0.2.2":
version: 0.2.2
resolution: "@mswjs/cookies@npm:0.2.2"
@ -4337,7 +4475,7 @@ __metadata:
languageName: node
linkType: hard
"@rollup/pluginutils@npm:^5.0.1":
"@rollup/pluginutils@npm:^5.0.1, @rollup/pluginutils@npm:^5.0.2":
version: 5.0.2
resolution: "@rollup/pluginutils@npm:5.0.2"
dependencies:
@ -4360,6 +4498,48 @@ __metadata:
languageName: node
linkType: hard
"@rushstack/node-core-library@npm:3.55.2, @rushstack/node-core-library@npm:^3.53.2":
version: 3.55.2
resolution: "@rushstack/node-core-library@npm:3.55.2"
dependencies:
colors: ~1.2.1
fs-extra: ~7.0.1
import-lazy: ~4.0.0
jju: ~1.4.0
resolve: ~1.22.1
semver: ~7.3.0
z-schema: ~5.0.2
peerDependencies:
"@types/node": "*"
peerDependenciesMeta:
"@types/node":
optional: true
checksum: b6b289315cd6a3544471f534405479b7c80f3906b7506590d5eb83a605a0a5b65861bf678f3e6c2277c8db116b8e05f8e7b6864fdc75e0f1514c9ff224b83fe6
languageName: node
linkType: hard
"@rushstack/rig-package@npm:0.3.18":
version: 0.3.18
resolution: "@rushstack/rig-package@npm:0.3.18"
dependencies:
resolve: ~1.22.1
strip-json-comments: ~3.1.1
checksum: 41e719fb14d99e0f79093523fede051dba2be5f53d63d5ae45c2ea1b8448e298e0303d8453be3f9ac5e8bb99e3dcf3ddbe4cc59d9be5eddb914286acbdd0a2f3
languageName: node
linkType: hard
"@rushstack/ts-command-line@npm:4.13.2":
version: 4.13.2
resolution: "@rushstack/ts-command-line@npm:4.13.2"
dependencies:
"@types/argparse": 1.0.38
argparse: ~1.0.9
colors: ~1.2.1
string-argv: ~0.3.1
checksum: 3938e533e08d5cf4007a651d1aab658a7a60d6136a56414e2370b64434657a5d5a9eff442da4ddc260d5e6dc90f82428de64dbcfa1285e9ae176629f7fcd821d
languageName: node
linkType: hard
"@sentry-internal/tracing@npm:7.46.0":
version: 7.46.0
resolution: "@sentry-internal/tracing@npm:7.46.0"
@ -5968,6 +6148,20 @@ __metadata:
languageName: node
linkType: hard
"@toeverything/y-indexeddb@workspace:*, @toeverything/y-indexeddb@workspace:packages/y-indexeddb":
version: 0.0.0-use.local
resolution: "@toeverything/y-indexeddb@workspace:packages/y-indexeddb"
dependencies:
"@blocksuite/blocks": 0.5.0-20230324040005-14417c2
"@blocksuite/store": 0.5.0-20230324040005-14417c2
idb: ^7.1.1
vite: ^4.2.1
vite-plugin-dts: ^2.1.0
peerDependencies:
yjs: ^13.5.51
languageName: unknown
linkType: soft
"@tootallnate/once@npm:2":
version: 2.0.0
resolution: "@tootallnate/once@npm:2.0.0"
@ -5975,6 +6169,18 @@ __metadata:
languageName: node
linkType: hard
"@ts-morph/common@npm:~0.18.0":
version: 0.18.1
resolution: "@ts-morph/common@npm:0.18.1"
dependencies:
fast-glob: ^3.2.12
minimatch: ^5.1.0
mkdirp: ^1.0.4
path-browserify: ^1.0.1
checksum: 848fff5f7a6428d7c2f055de20cf8df864a967aac0cc03adc558d853442085a8fd9dec70429da24d67d263794b315edb0791c46d23ad9ae513251a7702df8031
languageName: node
linkType: hard
"@tsconfig/node10@npm:^1.0.7":
version: 1.0.9
resolution: "@tsconfig/node10@npm:1.0.9"
@ -6003,6 +6209,13 @@ __metadata:
languageName: node
linkType: hard
"@types/argparse@npm:1.0.38":
version: 1.0.38
resolution: "@types/argparse@npm:1.0.38"
checksum: 26ed7e3f1e3595efdb883a852f5205f971b798e4c28b7e30a32c5298eee596e8b45834ce831f014d250b9730819ab05acff5b31229666d3af4ba465b4697d0eb
languageName: node
linkType: hard
"@types/aria-query@npm:^5.0.1":
version: 5.0.1
resolution: "@types/aria-query@npm:5.0.1"
@ -7210,7 +7423,7 @@ __metadata:
languageName: node
linkType: hard
"ajv@npm:^6.10.0, ajv@npm:^6.12.4, ajv@npm:^6.12.5":
"ajv@npm:^6.10.0, ajv@npm:^6.12.4, ajv@npm:^6.12.5, ajv@npm:~6.12.6":
version: 6.12.6
resolution: "ajv@npm:6.12.6"
dependencies:
@ -7409,7 +7622,7 @@ __metadata:
languageName: node
linkType: hard
"argparse@npm:^1.0.7":
"argparse@npm:^1.0.7, argparse@npm:~1.0.9":
version: 1.0.10
resolution: "argparse@npm:1.0.10"
dependencies:
@ -8546,6 +8759,13 @@ __metadata:
languageName: node
linkType: hard
"code-block-writer@npm:^11.0.3":
version: 11.0.3
resolution: "code-block-writer@npm:11.0.3"
checksum: f0a2605f19963d7087267c9b0fd0b05a6638a50e7b29b70f97aa01a514f59475b0626f8aa092188df853ee6d96745426dfa132d6a677795df462c6ce32c21639
languageName: node
linkType: hard
"collect-v8-coverage@npm:^1.0.0":
version: 1.0.1
resolution: "collect-v8-coverage@npm:1.0.1"
@ -8601,6 +8821,13 @@ __metadata:
languageName: node
linkType: hard
"colors@npm:~1.2.1":
version: 1.2.5
resolution: "colors@npm:1.2.5"
checksum: b6e23de735f68b72d5cdf6fd854ca43d1b66d82dcf54bda0b788083b910164a040f2c4edf23c670d36a7a2d8f1b7d6e62e3292703e4642691e6ccaa1c62d8f74
languageName: node
linkType: hard
"combined-stream@npm:^1.0.8":
version: 1.0.8
resolution: "combined-stream@npm:1.0.8"
@ -8652,7 +8879,7 @@ __metadata:
languageName: node
linkType: hard
"commander@npm:^9.0.0":
"commander@npm:^9.0.0, commander@npm:^9.4.1":
version: 9.5.0
resolution: "commander@npm:9.5.0"
checksum: c7a3e27aa59e913b54a1bafd366b88650bc41d6651f0cbe258d4ff09d43d6a7394232a4dadd0bf518b3e696fdf595db1028a0d82c785b88bd61f8a440cecfade
@ -10919,6 +11146,17 @@ __metadata:
languageName: node
linkType: hard
"fs-extra@npm:^10.1.0":
version: 10.1.0
resolution: "fs-extra@npm:10.1.0"
dependencies:
graceful-fs: ^4.2.0
jsonfile: ^6.0.1
universalify: ^2.0.0
checksum: dc94ab37096f813cc3ca12f0f1b5ad6744dfed9ed21e953d72530d103cea193c2f81584a39e9dee1bea36de5ee66805678c0dddc048e8af1427ac19c00fffc50
languageName: node
linkType: hard
"fs-extra@npm:^11.1.0":
version: 11.1.1
resolution: "fs-extra@npm:11.1.1"
@ -10930,6 +11168,17 @@ __metadata:
languageName: node
linkType: hard
"fs-extra@npm:~7.0.1":
version: 7.0.1
resolution: "fs-extra@npm:7.0.1"
dependencies:
graceful-fs: ^4.1.2
jsonfile: ^4.0.0
universalify: ^0.1.0
checksum: 141b9dccb23b66a66cefdd81f4cda959ff89282b1d721b98cea19ba08db3dcbe6f862f28841f3cf24bb299e0b7e6c42303908f65093cb7e201708e86ea5a8dcf
languageName: node
linkType: hard
"fs-minipass@npm:^2.0.0, fs-minipass@npm:^2.1.0":
version: 2.1.0
resolution: "fs-minipass@npm:2.1.0"
@ -11776,6 +12025,13 @@ __metadata:
languageName: node
linkType: hard
"idb@npm:^7.1.1":
version: 7.1.1
resolution: "idb@npm:7.1.1"
checksum: 1973c28d53c784b177bdef9f527ec89ec239ec7cf5fcbd987dae75a16c03f5b7dfcc8c6d3285716fd0309dd57739805390bd9f98ce23b1b7d8849a3b52de8d56
languageName: node
linkType: hard
"ieee754@npm:^1.1.13, ieee754@npm:^1.2.1":
version: 1.2.1
resolution: "ieee754@npm:1.2.1"
@ -11814,6 +12070,13 @@ __metadata:
languageName: node
linkType: hard
"import-lazy@npm:~4.0.0":
version: 4.0.0
resolution: "import-lazy@npm:4.0.0"
checksum: 22f5e51702134aef78890156738454f620e5fe7044b204ebc057c614888a1dd6fdf2ede0fdcca44d5c173fd64f65c985f19a51775b06967ef58cc3d26898df07
languageName: node
linkType: hard
"import-local@npm:^3.0.2":
version: 3.1.0
resolution: "import-local@npm:3.1.0"
@ -12005,7 +12268,7 @@ __metadata:
languageName: node
linkType: hard
"is-core-module@npm:^2.11.0, is-core-module@npm:^2.9.0":
"is-core-module@npm:^2.1.0, is-core-module@npm:^2.11.0, is-core-module@npm:^2.9.0":
version: 2.11.0
resolution: "is-core-module@npm:2.11.0"
dependencies:
@ -13187,6 +13450,13 @@ __metadata:
languageName: node
linkType: hard
"jju@npm:~1.4.0":
version: 1.4.0
resolution: "jju@npm:1.4.0"
checksum: 3790481bd2b7827dd6336e6e3dc2dcc6d425679ba7ebde7b679f61dceb4457ea0cda330972494de608571f4973c6dfb5f70fab6f3c5037dbab19ac449a60424f
languageName: node
linkType: hard
"joi@npm:^17.3.0":
version: 17.9.1
resolution: "joi@npm:17.9.1"
@ -13398,6 +13668,18 @@ __metadata:
languageName: node
linkType: hard
"jsonfile@npm:^4.0.0":
version: 4.0.0
resolution: "jsonfile@npm:4.0.0"
dependencies:
graceful-fs: ^4.1.6
dependenciesMeta:
graceful-fs:
optional: true
checksum: 6447d6224f0d31623eef9b51185af03ac328a7553efcee30fa423d98a9e276ca08db87d71e17f2310b0263fd3ffa6c2a90a6308367f661dc21580f9469897c9e
languageName: node
linkType: hard
"jsonfile@npm:^6.0.1":
version: 6.1.0
resolution: "jsonfile@npm:6.1.0"
@ -13444,6 +13726,13 @@ __metadata:
languageName: node
linkType: hard
"kolorist@npm:^1.6.0":
version: 1.7.0
resolution: "kolorist@npm:1.7.0"
checksum: 0eb64d22a204be11ddd7d2017525bf2603de38b15c571f79d6f0c5f1c869b8adfd40c3aa71c12e0cfe5496c25b2bbe891267cbc11f5b3fbc858d74ae79bac293
languageName: node
linkType: hard
"ky@npm:^0.33.3":
version: 0.33.3
resolution: "ky@npm:0.33.3"
@ -13698,6 +13987,20 @@ __metadata:
languageName: node
linkType: hard
"lodash.get@npm:^4.4.2":
version: 4.4.2
resolution: "lodash.get@npm:4.4.2"
checksum: e403047ddb03181c9d0e92df9556570e2b67e0f0a930fcbbbd779370972368f5568e914f913e93f3b08f6d492abc71e14d4e9b7a18916c31fa04bd2306efe545
languageName: node
linkType: hard
"lodash.isequal@npm:^4.5.0":
version: 4.5.0
resolution: "lodash.isequal@npm:4.5.0"
checksum: da27515dc5230eb1140ba65ff8de3613649620e8656b19a6270afe4866b7bd461d9ba2ac8a48dcc57f7adac4ee80e1de9f965d89d4d81a0ad52bb3eec2609644
languageName: node
linkType: hard
"lodash.merge@npm:^4.6.2":
version: 4.6.2
resolution: "lodash.merge@npm:4.6.2"
@ -13712,7 +14015,7 @@ __metadata:
languageName: node
linkType: hard
"lodash@npm:^4.17.15, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.7.0":
"lodash@npm:^4.17.15, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.7.0, lodash@npm:~4.17.15":
version: 4.17.21
resolution: "lodash@npm:4.17.21"
checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7
@ -13857,6 +14160,15 @@ __metadata:
languageName: node
linkType: hard
"magic-string@npm:^0.29.0":
version: 0.29.0
resolution: "magic-string@npm:0.29.0"
dependencies:
"@jridgewell/sourcemap-codec": ^1.4.13
checksum: 19e5398fcfc44804917127c72ad622c68a19a0a10cbdb8d4f9f9417584a087fe9e117140bfb2463d86743cf1ed9cf4182ae0b0ad1a7536f7fdda257ee4449ffb
languageName: node
linkType: hard
"make-dir@npm:^2.0.0, make-dir@npm:^2.1.0":
version: 2.1.0
resolution: "make-dir@npm:2.1.0"
@ -14144,7 +14456,7 @@ __metadata:
languageName: node
linkType: hard
"minimatch@npm:^5.0.1":
"minimatch@npm:^5.0.1, minimatch@npm:^5.1.0":
version: 5.1.6
resolution: "minimatch@npm:5.1.6"
dependencies:
@ -15145,6 +15457,13 @@ __metadata:
languageName: node
linkType: hard
"path-browserify@npm:^1.0.1":
version: 1.0.1
resolution: "path-browserify@npm:1.0.1"
checksum: c6d7fa376423fe35b95b2d67990060c3ee304fc815ff0a2dc1c6c3cfaff2bd0d572ee67e18f19d0ea3bbe32e8add2a05021132ac40509416459fffee35200699
languageName: node
linkType: hard
"path-exists@npm:^3.0.0":
version: 3.0.0
resolution: "path-exists@npm:3.0.0"
@ -15187,7 +15506,7 @@ __metadata:
languageName: node
linkType: hard
"path-parse@npm:^1.0.7":
"path-parse@npm:^1.0.6, path-parse@npm:^1.0.7":
version: 1.0.7
resolution: "path-parse@npm:1.0.7"
checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a
@ -16353,7 +16672,7 @@ __metadata:
languageName: node
linkType: hard
"resolve@npm:^1.1.6, resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1":
"resolve@npm:^1.1.6, resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:~1.22.1":
version: 1.22.1
resolution: "resolve@npm:1.22.1"
dependencies:
@ -16379,7 +16698,17 @@ __metadata:
languageName: node
linkType: hard
"resolve@patch:resolve@^1.1.6#~builtin<compat/resolve>, resolve@patch:resolve@^1.10.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.14.2#~builtin<compat/resolve>, resolve@patch:resolve@^1.17.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.19.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.20.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.22.1#~builtin<compat/resolve>":
"resolve@npm:~1.19.0":
version: 1.19.0
resolution: "resolve@npm:1.19.0"
dependencies:
is-core-module: ^2.1.0
path-parse: ^1.0.6
checksum: a05b356e47b85ad3613d9e2a39a824f3c27f4fcad9c9ff6c7cc71a2e314c5904a90ab37481ad0069d03cab9eaaac6eb68aca1bc3355fdb05f1045cd50e2aacea
languageName: node
linkType: hard
"resolve@patch:resolve@^1.1.6#~builtin<compat/resolve>, resolve@patch:resolve@^1.10.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.14.2#~builtin<compat/resolve>, resolve@patch:resolve@^1.17.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.19.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.20.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.22.1#~builtin<compat/resolve>, resolve@patch:resolve@~1.22.1#~builtin<compat/resolve>":
version: 1.22.1
resolution: "resolve@patch:resolve@npm%3A1.22.1#~builtin<compat/resolve>::version=1.22.1&hash=c3c19d"
dependencies:
@ -16405,6 +16734,16 @@ __metadata:
languageName: node
linkType: hard
"resolve@patch:resolve@~1.19.0#~builtin<compat/resolve>":
version: 1.19.0
resolution: "resolve@patch:resolve@npm%3A1.19.0#~builtin<compat/resolve>::version=1.19.0&hash=c3c19d"
dependencies:
is-core-module: ^2.1.0
path-parse: ^1.0.6
checksum: 2443b94d347e6946c87c85faf13071f605e609e0b54784829b0ed2b917d050bfc1cbaf4ecc6453f224cfa7d0c5dcd97cbb273454cd210bee68e4af15c1a5abc9
languageName: node
linkType: hard
"responselike@npm:^3.0.0":
version: 3.0.0
resolution: "responselike@npm:3.0.0"
@ -16635,7 +16974,7 @@ __metadata:
languageName: node
linkType: hard
"semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8":
"semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:~7.3.0":
version: 7.3.8
resolution: "semver@npm:7.3.8"
dependencies:
@ -17247,7 +17586,7 @@ __metadata:
languageName: node
linkType: hard
"string-argv@npm:^0.3.1":
"string-argv@npm:^0.3.1, string-argv@npm:~0.3.1":
version: 0.3.1
resolution: "string-argv@npm:0.3.1"
checksum: efbd0289b599bee808ce80820dfe49c9635610715429c6b7cc50750f0437e3c2f697c81e5c390208c13b5d5d12d904a1546172a88579f6ee5cbaaaa4dc9ec5cf
@ -17425,7 +17764,7 @@ __metadata:
languageName: node
linkType: hard
"strip-json-comments@npm:^3.0.1, strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1":
"strip-json-comments@npm:^3.0.1, strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1, strip-json-comments@npm:~3.1.1":
version: 3.1.1
resolution: "strip-json-comments@npm:3.1.1"
checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443
@ -17898,6 +18237,16 @@ __metadata:
languageName: node
linkType: hard
"ts-morph@npm:17.0.1":
version: 17.0.1
resolution: "ts-morph@npm:17.0.1"
dependencies:
"@ts-morph/common": ~0.18.0
code-block-writer: ^11.0.3
checksum: 4748ab45d0fb0be235f69399ea217cf1c5984ad2ef3ff9eba5a417571f73098c6f1f765fc011eaadc48179471b977f1e44f72eb993932e5c74c5031ab6c60f3a
languageName: node
linkType: hard
"ts-node@npm:^10.9.1":
version: 10.9.1
resolution: "ts-node@npm:10.9.1"
@ -18131,6 +18480,16 @@ __metadata:
languageName: node
linkType: hard
"typescript@npm:~4.8.4":
version: 4.8.4
resolution: "typescript@npm:4.8.4"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: 3e4f061658e0c8f36c820802fa809e0fd812b85687a9a2f5430bc3d0368e37d1c9605c3ce9b39df9a05af2ece67b1d844f9f6ea8ff42819f13bcb80f85629af0
languageName: node
linkType: hard
"typescript@patch:typescript@^5.0.3#~builtin<compat/typescript>":
version: 5.0.3
resolution: "typescript@patch:typescript@npm%3A5.0.3#~builtin<compat/typescript>::version=5.0.3&hash=85af82"
@ -18141,6 +18500,16 @@ __metadata:
languageName: node
linkType: hard
"typescript@patch:typescript@~4.8.4#~builtin<compat/typescript>":
version: 4.8.4
resolution: "typescript@patch:typescript@npm%3A4.8.4#~builtin<compat/typescript>::version=4.8.4&hash=1a91c8"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: c981e82b77a5acdcc4e69af9c56cdecf5b934a87a08e7b52120596701e389a878b8e3f860e73ffb287bf649cc47a8c741262ce058148f71de4cdd88bb9c75153
languageName: node
linkType: hard
"typeson-registry@npm:^1.0.0-alpha.20":
version: 1.0.0-alpha.39
resolution: "typeson-registry@npm:1.0.0-alpha.39"
@ -18298,6 +18667,13 @@ __metadata:
languageName: node
linkType: hard
"universalify@npm:^0.1.0":
version: 0.1.2
resolution: "universalify@npm:0.1.2"
checksum: 40cdc60f6e61070fe658ca36016a8f4ec216b29bf04a55dce14e3710cc84c7448538ef4dad3728d0bfe29975ccd7bfb5f414c45e7b78883567fb31b246f02dff
languageName: node
linkType: hard
"universalify@npm:^2.0.0":
version: 2.0.0
resolution: "universalify@npm:2.0.0"
@ -18496,6 +18872,13 @@ __metadata:
languageName: node
linkType: hard
"validator@npm:^13.7.0":
version: 13.9.0
resolution: "validator@npm:13.9.0"
checksum: e2c936f041f61faa42bafd17c6faddf939498666cd82e88d733621c286893730b008959f4cb12ab3e236148a4f3805c30b85e3dcf5e0efd8b0cbcd36c02bfc0c
languageName: node
linkType: hard
"vary@npm:~1.1.2":
version: 1.1.2
resolution: "vary@npm:1.1.2"
@ -18519,6 +18902,26 @@ __metadata:
languageName: node
linkType: hard
"vite-plugin-dts@npm:^2.1.0":
version: 2.1.0
resolution: "vite-plugin-dts@npm:2.1.0"
dependencies:
"@babel/parser": ^7.20.15
"@microsoft/api-extractor": ^7.33.5
"@rollup/pluginutils": ^5.0.2
"@rushstack/node-core-library": ^3.53.2
debug: ^4.3.4
fast-glob: ^3.2.12
fs-extra: ^10.1.0
kolorist: ^1.6.0
magic-string: ^0.29.0
ts-morph: 17.0.1
peerDependencies:
vite: ">=2.9.0"
checksum: 6c51b6de986e622a8ec271b68dcbfac55ab0ba65ca3b74e19e3088ff931913e5bb5c6d15e77525ca0bc11a6c87497f4529132cd0ad6c5970e8794f809cfa9cb8
languageName: node
linkType: hard
"vite-plugin-istanbul@npm:^4.0.1":
version: 4.0.1
resolution: "vite-plugin-istanbul@npm:4.0.1"
@ -19341,6 +19744,23 @@ __metadata:
languageName: node
linkType: hard
"z-schema@npm:~5.0.2":
version: 5.0.5
resolution: "z-schema@npm:5.0.5"
dependencies:
commander: ^9.4.1
lodash.get: ^4.4.2
lodash.isequal: ^4.5.0
validator: ^13.7.0
dependenciesMeta:
commander:
optional: true
bin:
z-schema: bin/z-schema
checksum: 8a1d66817ae4384dc3f63311f0cccaadd95cc9640eaade5fd3fbf91aa80d6bb82fb95d9b9171fa82ac371a0155b32b7f5f77bbe84dabaca611b66f74c628f0b8
languageName: node
linkType: hard
"zod@npm:^3.21.4":
version: 3.21.4
resolution: "zod@npm:3.21.4"