BlockSuite API Documentation / @blocksuite/store
@blocksuite/store
Extension
abstract Extension
Understanding Extensions
Extensions provide a way to extend the functionality of a system using dependency injection. They allow you to register services, implementations, and factories in the DI container, which can then be retrieved and used by different parts of the application.
Extensions are particularly useful for:
- Registering different implementations for different types
- Creating pluggable architecture where components can be added or removed
- Managing dependencies between different parts of the application
Usage Example: Fruit Processing System
Let's consider a fruit processing system where different types of fruits need different processing methods. We'll show how to implement this using extensions.
Step 1: Define the interfaces
interface FruitProcessor {
process(fruit: Fruit): void;
}
interface Fruit {
type: string;
// other properties
}Step 2: Create a service identifier
import { createIdentifier } from '@blocksuite/global/di';
const FruitProcessorProvider = createIdentifier<FruitProcessor>('fruit-processor-provider');Step 3: Create implementations
class AppleProcessor implements FruitProcessor {
process(fruit: Fruit): void {
console.log('Slicing apple');
// Apple-specific processing
}
}
class BananaProcessor implements FruitProcessor {
process(fruit: Fruit): void {
console.log('Peeling banana');
// Banana-specific processing
}
}Step 4: Create an extension factory
const FruitProcessorExtension = (
fruitType: string,
implementation: new () => FruitProcessor
): ExtensionType => {
return {
setup: di => {
di.addImpl(FruitProcessorProvider(fruitType), implementation);
}
};
};Step 5: Create concrete extensions
export const AppleProcessorExtension = FruitProcessorExtension('apple', AppleProcessor);
export const BananaProcessorExtension = FruitProcessorExtension('banana', BananaProcessor);Step 6: Use the extensions
import { Container } from '@blocksuite/global/di';
class FruitProcessingSystem {
provider: ServiceProvider;
constructor(extensions: ExtensionType[]) {
const container = new Container();
// Set up all extensions
extensions.forEach(ext => ext.setup(container));
// Create a provider from the container
this.provider = container.provider();
}
processFruit(fruit: Fruit) {
// Get the appropriate processor based on fruit type
const processor = this.provider.get(FruitProcessorProvider(fruit.type));
// Process the fruit
processor.process(fruit);
}
}
// Initialize the system with extensions
const system = new FruitProcessingSystem([
AppleProcessorExtension,
BananaProcessorExtension
]);
// Use the system
system.processFruit({ type: 'apple' }); // Output: Slicing apple
system.processFruit({ type: 'banana' }); // Output: Peeling bananaNote: We deliberately used a non-block specific example here. In BlockSuite, the extension pattern can be applied to any entity that can be configured by third parties, not just blocks. This includes different tools in the whiteboard, different column types in database blocks, and many other extensible components. The pattern remains the same regardless of what you're extending.
Extended by
StoreExtensionBaseToolGfxExtensionInteractivityExtensionSurfaceMiddlewareBuilderBlockServiceLifeCycleWatcherEdgelessClipboardConfigEdgelessCRUDExtensionOverlayBlockLayoutHandlerExtensionSlashMenuExtension
Constructors
Constructor
new Extension():
Extension
Returns
Methods
setup()
staticsetup(_di):void
Parameters
_di
Container
Returns
void
HistoryExtension
Store extensions are used to extend the store. They should be registered to the store. And they should be able to run in a none-dom environment.
Extends
Constructors
Constructor
new HistoryExtension(
store):HistoryExtension
Parameters
store
Returns
Overrides
Properties
onUpdated
readonlyonUpdated:Subject<void>
key
readonlystatickey:"history"='history'
The key of the store extension. You must override this property with a unique string.
Overrides
Accessors
canRedo
Get Signature
get canRedo():
boolean
Returns
boolean
canRedo$
Get Signature
get canRedo$():
Signal<boolean>
Returns
Signal<boolean>
canUndo
Get Signature
get canUndo():
boolean
Returns
boolean
canUndo$
Get Signature
get canUndo$():
Signal<boolean>
Returns
Signal<boolean>
undoManager
Get Signature
get undoManager():
UndoManager
Returns
UndoManager
Methods
disposed()
disposed():
void
Lifecycle hook when the yjs document is disposed.
Returns
void
Overrides
loaded()
loaded():
void
Lifecycle hook when the yjs document is loaded.
Returns
void
Overrides
StoreExtension
Store extensions are used to extend the store. They should be registered to the store. And they should be able to run in a none-dom environment.
Extends
Extended by
Constructors
Constructor
new StoreExtension(
store):StoreExtension
Parameters
store
Returns
Overrides
Properties
store
readonlystore:Store
[storeExtensionSymbol]
readonlystatic[storeExtensionSymbol]:true=true
key
readonlystatickey:string
The key of the store extension. You must override this property with a unique string.
Methods
disposed()
disposed():
void
Lifecycle hook when the yjs document is disposed.
Returns
void
loaded()
loaded():
void
Lifecycle hook when the yjs document is loaded.
Returns
void
setup()
staticsetup(di):void
Parameters
di
Container
Returns
void
Overrides
StoreSelectionExtension
Store extensions are used to extend the store. They should be registered to the store. And they should be able to run in a none-dom environment.
Extends
Constructors
Properties
slots
slots:
object
changed
changed:
Subject<BaseSelection[]>
remoteChanged
remoteChanged:
Subject<Map<number,BaseSelection[]>>
key
readonlystatickey:"selection"='selection'
The key of the store extension. You must override this property with a unique string.
Overrides
Accessors
remoteSelections
Get Signature
get remoteSelections():
Map<number,BaseSelection[]>
Returns
Map<number, BaseSelection[]>
value
Get Signature
get value():
BaseSelection[]
Returns
Methods
clear()
clear(
types?):void
Parameters
types?
string[]
Returns
void
clearRemote()
clearRemote():
void
Returns
void
create()
create<
T>(Type, ...args):InstanceType<T>
Type Parameters
T
T extends SelectionConstructor<BaseSelection>
Parameters
Type
T
args
...ConstructorParameters<T>
Returns
InstanceType<T>
disposed()
disposed():
void
Lifecycle hook when the yjs document is disposed.
Returns
void
Overrides
filter()
filter<
T>(type):InstanceType<T>[]
Type Parameters
T
T extends SelectionConstructor<BaseSelection>
Parameters
type
T
Returns
InstanceType<T>[]
filter$()
filter$<
T>(type):ReadonlySignal<InstanceType<T>[]>
Type Parameters
T
T extends SelectionConstructor<BaseSelection>
Parameters
type
T
Returns
ReadonlySignal<InstanceType<T>[]>
find()
find<
T>(type):InstanceType<T> |undefined
Type Parameters
T
T extends SelectionConstructor<BaseSelection>
Parameters
type
T
Returns
InstanceType<T> | undefined
find$()
find$<
T>(type):ReadonlySignal<InstanceType<T> |undefined>
Type Parameters
T
T extends SelectionConstructor<BaseSelection>
Parameters
type
T
Returns
ReadonlySignal<InstanceType<T> | undefined>
fromJSON()
fromJSON(
json):void
Parameters
json
Record<string, unknown>[]
Returns
void
getGroup()
getGroup(
group):BaseSelection[]
Parameters
group
string
Returns
loaded()
loaded():
void
Lifecycle hook when the yjs document is loaded.
Returns
void
Overrides
set()
set(
selections):void
Parameters
selections
Returns
void
setGroup()
setGroup(
group,selections):void
Parameters
group
string
selections
Returns
void
update()
update(
fn):void
Parameters
fn
(currentSelections) => BaseSelection[]
Returns
void
Other
AssetsManager
Constructors
Constructor
new AssetsManager(
options):AssetsManager
Parameters
options
AssetsManagerConfig
Returns
Properties
uploadingAssetsMap
readonlyuploadingAssetsMap:Map<string, {abortController?:AbortController;blob:Blob;mapInto: (blobId) =>Partial<BlockProps>; }>
Methods
cleanup()
cleanup():
void
Returns
void
getAssets()
getAssets():
Map<string,Blob>
Returns
Map<string, Blob>
getPathBlobIdMap()
getPathBlobIdMap():
Map<string,string>
Returns
Map<string, string>
isEmpty()
isEmpty():
boolean
Returns
boolean
readFromBlob()
readFromBlob(
blobId):Promise<void>
Parameters
blobId
string
Returns
Promise<void>
writeToBlob()
writeToBlob(
blobId):Promise<void>
Parameters
blobId
string
Returns
Promise<void>
ASTWalker<ONode, TNode>
Type Parameters
ONode
ONode extends object
TNode
TNode extends object | never
Constructors
Constructor
new ASTWalker<
ONode,TNode>():ASTWalker<ONode,TNode>
Returns
ASTWalker<ONode, TNode>
Methods
setEnter()
setEnter(
fn):void
Parameters
fn
WalkerFn<ONode, TNode>
Returns
void
setLeave()
setLeave(
fn):void
Parameters
fn
WalkerFn<ONode, TNode>
Returns
void
setONodeTypeGuard()
setONodeTypeGuard(
fn):void
Parameters
fn
(node) => node is ONode
Returns
void
walk()
walk(
oNode,tNode):Promise<TNode>
Parameters
oNode
ONode
tNode
TNode
Returns
Promise<TNode>
walkONode()
walkONode(
oNode):Promise<void>
Parameters
oNode
ONode
Returns
Promise<void>
ASTWalkerContext<TNode>
Type Parameters
TNode
TNode extends object
Constructors
Constructor
new ASTWalkerContext<
TNode>():ASTWalkerContext<TNode>
Returns
ASTWalkerContext<TNode>
Properties
_skip
_skip:
boolean=false
_skipChildrenNum
_skipChildrenNum:
number=0
Accessors
stack
Get Signature
get stack():
object[]
Returns
object[]
Methods
cleanGlobalContextStack()
cleanGlobalContextStack(
key):void
Parameters
key
string
Returns
void
closeNode()
closeNode():
ASTWalkerContext<TNode>
Returns
ASTWalkerContext<TNode>
currentNode()
currentNode():
TNode
Returns
TNode
getGlobalContext()
getGlobalContext(
key):unknown
Parameters
key
string
Returns
unknown
getGlobalContextStack()
getGlobalContextStack<
StackElement>(key):StackElement[]
Type Parameters
StackElement
StackElement
Parameters
key
string
Returns
StackElement[]
getNodeContext()
getNodeContext(
key):unknown
Parameters
key
string
Returns
unknown
getPreviousNodeContext()
getPreviousNodeContext(
key):unknown
Parameters
key
string
Returns
unknown
openNode()
openNode(
node,parentProp?):ASTWalkerContext<TNode>
Parameters
node
TNode
parentProp?
Keyof<TNode>
Returns
ASTWalkerContext<TNode>
previousNode()
previousNode():
TNode
Returns
TNode
pushGlobalContextStack()
pushGlobalContextStack<
StackElement>(key,value):void
Type Parameters
StackElement
StackElement
Parameters
key
string
value
StackElement
Returns
void
setDefaultProp()
setDefaultProp(
parentProp):void
Parameters
parentProp
Keyof<TNode>
Returns
void
setGlobalContext()
setGlobalContext(
key,value):ASTWalkerContext<TNode>
Parameters
key
string
value
unknown
Returns
ASTWalkerContext<TNode>
setGlobalContextStack()
setGlobalContextStack<
StackElement>(key,value):void
Type Parameters
StackElement
StackElement
Parameters
key
string
value
StackElement[]
Returns
void
setNodeContext()
setNodeContext(
key,value):ASTWalkerContext<TNode>
Parameters
key
string
value
unknown
Returns
ASTWalkerContext<TNode>
skipAllChildren()
skipAllChildren():
void
Returns
void
skipChildren()
skipChildren(
num):void
Parameters
num
number = 1
Returns
void
AwarenessStore
Constructors
Constructor
new AwarenessStore(
awareness):AwarenessStore
Parameters
awareness
Awareness
Returns
Properties
awareness
readonlyawareness:Awareness
Methods
destroy()
destroy():
void
Returns
void
getLocalSelection()
getLocalSelection(
selectionManagerId): readonlyRecord<string,unknown>[]
Parameters
selectionManagerId
string
Returns
readonly Record<string, unknown>[]
getLocalState()
getLocalState():
RawAwarenessState
Returns
getStates()
getStates():
Map<number,RawAwarenessState>
Returns
Map<number, RawAwarenessState>
setLocalSelection()
setLocalSelection(
selectionManagerId,selection):void
Parameters
selectionManagerId
string
selection
UserSelection
Returns
void
setLocalState()
setLocalState(
state):void
Parameters
state
Returns
void
setLocalStateField()
setLocalStateField<
Field>(field,value):void
Type Parameters
Field
Field extends keyof RawAwarenessState
Parameters
field
Field
value
RawAwarenessState[Field]
Returns
void
abstract BaseAdapter<AdapterTarget>
Type Parameters
AdapterTarget
AdapterTarget = unknown
Constructors
Constructor
new BaseAdapter<
AdapterTarget>(job,provider):BaseAdapter<AdapterTarget>
Parameters
job
provider
ServiceProvider
Returns
BaseAdapter<AdapterTarget>
Properties
job
job:
Transformer
provider
readonlyprovider:ServiceProvider
Accessors
configs
Get Signature
get configs():
Map<string,string>
Returns
Map<string, string>
Methods
fromBlock()
fromBlock(
model):Promise<FromBlockSnapshotResult<AdapterTarget> |undefined>
Parameters
model
BlockModel<object> | DraftModel
Returns
Promise<FromBlockSnapshotResult<AdapterTarget> | undefined>
fromBlockSnapshot()
abstractfromBlockSnapshot(payload):FromBlockSnapshotResult<AdapterTarget> |Promise<FromBlockSnapshotResult<AdapterTarget>>
Parameters
payload
Returns
FromBlockSnapshotResult<AdapterTarget> | Promise<FromBlockSnapshotResult<AdapterTarget>>
fromDoc()
fromDoc(
doc):Promise<FromDocSnapshotResult<AdapterTarget> |undefined>
Parameters
doc
Returns
Promise<FromDocSnapshotResult<AdapterTarget> | undefined>
fromDocSnapshot()
abstractfromDocSnapshot(payload):FromDocSnapshotResult<AdapterTarget> |Promise<FromDocSnapshotResult<AdapterTarget>>
Parameters
payload
Returns
FromDocSnapshotResult<AdapterTarget> | Promise<FromDocSnapshotResult<AdapterTarget>>
fromSlice()
fromSlice(
slice):Promise<FromSliceSnapshotResult<AdapterTarget> |undefined>
Parameters
slice
Returns
Promise<FromSliceSnapshotResult<AdapterTarget> | undefined>
fromSliceSnapshot()
abstractfromSliceSnapshot(payload):FromSliceSnapshotResult<AdapterTarget> |Promise<FromSliceSnapshotResult<AdapterTarget>>
Parameters
payload
Returns
FromSliceSnapshotResult<AdapterTarget> | Promise<FromSliceSnapshotResult<AdapterTarget>>
toBlock()
toBlock(
payload,doc,parent?,index?):Promise<BlockModel<object> |undefined>
Parameters
payload
ToBlockSnapshotPayload<AdapterTarget>
doc
parent?
string
index?
number
Returns
Promise<BlockModel<object> | undefined>
toBlockSnapshot()
abstracttoBlockSnapshot(payload):BlockSnapshot|Promise<BlockSnapshot>
Parameters
payload
ToBlockSnapshotPayload<AdapterTarget>
Returns
BlockSnapshot | Promise<BlockSnapshot>
toDoc()
toDoc(
payload):Promise<Store|undefined>
Parameters
payload
ToDocSnapshotPayload<AdapterTarget>
Returns
Promise<Store | undefined>
toDocSnapshot()
abstracttoDocSnapshot(payload):DocSnapshot|Promise<DocSnapshot>
Parameters
payload
ToDocSnapshotPayload<AdapterTarget>
Returns
DocSnapshot | Promise<DocSnapshot>
toSlice()
toSlice(
payload,doc,parent?,index?):Promise<Slice|undefined>
Parameters
payload
ToSliceSnapshotPayload<AdapterTarget>
doc
parent?
string
index?
number
Returns
Promise<Slice | undefined>
toSliceSnapshot()
abstracttoSliceSnapshot(payload):SliceSnapshot|Promise<SliceSnapshot|null> |null
Parameters
payload
ToSliceSnapshotPayload<AdapterTarget>
Returns
SliceSnapshot | Promise<SliceSnapshot | null> | null
BaseBlockTransformer<Props>
Extended by
Type Parameters
Props
Props extends object = object
Constructors
Constructor
new BaseBlockTransformer<
Props>(transformerConfigs):BaseBlockTransformer<Props>
Parameters
transformerConfigs
Map<string, unknown>
Returns
BaseBlockTransformer<Props>
Properties
_internal
protected_internal:InternalPrimitives=internalPrimitives
transformerConfigs
readonlytransformerConfigs:Map<string,unknown>
Methods
_propsFromSnapshot()
protected_propsFromSnapshot(propsJson):Props
Parameters
propsJson
Record<string, unknown>
Returns
Props
_propsToSnapshot()
protected_propsToSnapshot(model):object
Parameters
model
BlockModel<object> | DraftModel
Returns
object
fromSnapshot()
fromSnapshot(
__namedParameters):SnapshotNode<Props> |Promise<SnapshotNode<Props>>
Parameters
__namedParameters
Returns
SnapshotNode<Props> | Promise<SnapshotNode<Props>>
toSnapshot()
toSnapshot(
__namedParameters):BlockSnapshotLeaf
Parameters
__namedParameters
ToSnapshotPayload<Props>
Returns
abstract BaseSelection
Extended by
BlockSelectionCursorSelectionSurfaceSelectionTextSelectionDatabaseSelectionImageSelectionTableSelection
Constructors
Constructor
new BaseSelection(
__namedParameters):BaseSelection
Parameters
__namedParameters
Returns
Properties
blockId
readonlyblockId:string
group
readonlystaticgroup:string
recoverable
readonlystaticrecoverable:boolean=false
type
readonlystatictype:string
Accessors
group
Get Signature
get group():
string
Returns
string
type
Get Signature
get type():
string
Returns
string
Methods
equals()
abstractequals(other):boolean
Parameters
other
Returns
boolean
is()
is<
T>(type):this is T extends SelectionConstructor<U> ? U : never
Type Parameters
T
T extends SelectionConstructor<BaseSelection>
Parameters
type
T
Returns
this is T extends SelectionConstructor<U> ? U : never
toJSON()
abstracttoJSON():Record<string,unknown>
Returns
Record<string, unknown>
fromJSON()
staticfromJSON(_):BaseSelection
Parameters
_
Record<string, unknown>
Returns
Block
Constructors
Constructor
new Block(
schema,yBlock,doc?,options?):Block
Parameters
schema
yBlock
doc?
options?
BlockOptions = {}
Returns
Properties
blockViewType
blockViewType:
BlockViewType='display'
doc?
readonlyoptionaldoc:Store
options
readonlyoptions:BlockOptions={}
schema
readonlyschema:Schema
yBlock
readonlyyBlock:YBlock
Accessors
flavour
Get Signature
get flavour():
string
Returns
string
id
Get Signature
get id():
string
Returns
string
model
Get Signature
get model():
BlockModel<object>
Returns
BlockModel<object>
pop
Get Signature
get pop(): (
prop) =>void| (prop) =>void
Returns
(prop) => void | (prop) => void
stash
Get Signature
get stash(): (
prop) =>void| (prop) =>void
Returns
(prop) => void | (prop) => void
version
Get Signature
get version():
number
Returns
number
BlockModel<Props>
Extended by
CalloutBlockModelCodeBlockModelDatabaseBlockModelDividerBlockModelListBlockModelParagraphBlockModelRootBlockModelSurfaceRefBlockModelTableBlockModelGfxBlockElementModelSurfaceBlockModelDataViewBlockModel
Type Parameters
Props
Props extends object = object
Constructors
Constructor
new BlockModel<
Props>():BlockModel<Props>
Returns
BlockModel<Props>
Properties
_props
_props:
SignaledProps<Props>
[modelLabel]
[modelLabel]:
Props
childMap
childMap:
ReadonlySignal<Map<string,number>>
created
created:
Subject<void>
deleted
deleted:
Subject<void>
id
id:
string
keys
keys:
string[]
pop()
pop: (
prop) =>void
Parameters
prop
keyof Props & string
Returns
void
propsUpdated
propsUpdated:
Subject<{key:string; }>
schema
schema:
object
model
model:
object
model.children?
optionalmodel.children:string[] =ContentSchema
model.flavour
model.flavour:
string=FlavourSchema
model.isFlatData?
optionalmodel.isFlatData:boolean
model.parent?
optionalmodel.parent:string[] =ParentSchema
model.props()?
optionalmodel.props: (...args) =>Record<string,any>
Parameters
args
...[InternalPrimitives, ...unknown[]]
Returns
Record<string, any>
model.role
model.role:
string=RoleSchema
model.toModel()?
optionalmodel.toModel: (...args) =>BlockModel<object>
Parameters
args
...unknown[]
Returns
BlockModel<object>
transformer()?
optionaltransformer: (...args) =>BaseBlockTransformer<object>
Parameters
args
...[Map<string, unknown>, ...unknown[]]
Returns
BaseBlockTransformer<object>
version
version:
number
stash()
stash: (
prop) =>void
Parameters
prop
keyof Props & string
Returns
void
yBlock
yBlock:
YBlock
Accessors
children
Get Signature
get children():
BlockModel<object>[]
Returns
BlockModel<object>[]
flavour
Get Signature
get flavour():
string
Returns
string
parent
Get Signature
get parent():
BlockModel<object> |null
Returns
BlockModel<object> | null
props
Get Signature
get props():
SignaledProps<Props>
Returns
SignaledProps<Props>
role
Get Signature
get role():
string
Returns
string
store
Get Signature
get store():
Store
Returns
Set Signature
set store(
doc):void
Parameters
doc
Returns
void
text
Get Signature
get text():
Text<{bold?:true|null;code?:true|null;italic?:true|null;link?:string|null;strike?:true|null;underline?:true|null; }> |undefined
Returns
Text<{ bold?: true | null; code?: true | null; italic?: true | null; link?: string | null; strike?: true | null; underline?: true | null; }> | undefined
Set Signature
set text(
text):void
Parameters
text
Returns
void
version
Get Signature
get version():
number
Returns
number
Methods
[dispose]()
[dispose]():
void
Returns
void
dispose()
dispose():
void
Returns
void
firstChild()
firstChild():
BlockModel<object> |null
Returns
BlockModel<object> | null
isEmpty()
isEmpty():
boolean
Returns
boolean
lastChild()
lastChild():
BlockModel<object> |null
Returns
BlockModel<object> | null
ReactiveFlatYMap
Extends
BaseReactiveYData<UnRecord,YMap<unknown>>
Constructors
Constructor
new ReactiveFlatYMap(
_ySource,_onDispose,_onChange?,defaultProps?):ReactiveFlatYMap
Parameters
_ySource
YMap<unknown>
_onDispose
Subject<void>
_onChange?
OnChange
defaultProps?
Record<string, unknown>
Returns
Overrides
BaseReactiveYData< UnRecord, YMap<unknown> >.constructor
Properties
_options?
protectedreadonlyoptional_options:ProxyOptions<UnRecord>
Overrides
BaseReactiveYData._options
_proxy
protectedreadonly_proxy:UnRecord
Overrides
BaseReactiveYData._proxy
_source
protectedreadonly_source:UnRecord
Overrides
BaseReactiveYData._source
Accessors
Methods
pop()
pop(
prop):void
Parameters
prop
string
Returns
void
Overrides
BaseReactiveYData.pop
stash()
stash(
prop):void
Parameters
prop
string
Returns
void
Overrides
BaseReactiveYData.stash
ReactiveYArray
Extends
BaseReactiveYData<unknown[],YArray<unknown>>
Constructors
Constructor
new ReactiveYArray(
_source,_ySource,_options):ReactiveYArray
Parameters
_source
unknown[]
_ySource
YArray<unknown>
_options
ProxyOptions<unknown[]>
Returns
Overrides
BaseReactiveYData< unknown[], YArray<unknown> >.constructor
Properties
_proxy
protectedreadonly_proxy:unknown[]
Overrides
BaseReactiveYData._proxy
Accessors
Methods
_getProxy()
protected_getProxy():unknown[]
Returns
unknown[]
pop()
pop(
prop):void
Parameters
prop
number
Returns
void
Overrides
BaseReactiveYData.pop
stash()
stash(
prop):void
Parameters
prop
number
Returns
void
Overrides
BaseReactiveYData.stash
ReactiveYMap
Extends
BaseReactiveYData<UnRecord,YMap<unknown>>
Constructors
Constructor
new ReactiveYMap(
_source,_ySource,_options):ReactiveYMap
Parameters
_source
_ySource
YMap<unknown>
_options
Returns
Overrides
BaseReactiveYData<UnRecord, YMap<unknown>>.constructor
Properties
_proxy
protectedreadonly_proxy:UnRecord
Overrides
BaseReactiveYData._proxy
Accessors
Methods
_getProxy()
protected_getProxy():UnRecord
Returns
pop()
pop(
prop):void
Parameters
prop
string
Returns
void
Overrides
BaseReactiveYData.pop
stash()
stash(
prop):void
Parameters
prop
string
Returns
void
Overrides
BaseReactiveYData.stash
Schema
Represents a schema manager for block flavours and their relationships. Provides methods to register, validate, and query block schemas.
Constructors
Constructor
new Schema():
Schema
Returns
Properties
flavourSchemaMap
readonlyflavourSchemaMap:Map<string, {model: {children?:string[];flavour:string;isFlatData?:boolean;parent?:string[];props?: (...args) =>Record<string,any>;role:string;toModel?: (...args) =>BlockModel<object>; };transformer?: (...args) =>BaseBlockTransformer<object>;version:number; }>
A map storing block flavour names to their corresponding schema definitions.
Accessors
versions
Get Signature
get versions():
object
Returns an object mapping each registered flavour to its version number.
Returns
object
Methods
get()
get(
flavour): {model: {children?:string[];flavour:string;isFlatData?:boolean;parent?:string[];props?: (...args) =>Record<string,any>;role:string;toModel?: (...args) =>BlockModel<object>; };transformer?: (...args) =>BaseBlockTransformer<object>;version:number; } |undefined
Retrieves the schema for a given block flavour.
Parameters
flavour
string
The block flavour name.
Returns
{ model: { children?: string[]; flavour: string; isFlatData?: boolean; parent?: string[]; props?: (...args) => Record<string, any>; role: string; toModel?: (...args) => BlockModel<object>; }; transformer?: (...args) => BaseBlockTransformer<object>; version: number; } | undefined
The corresponding BlockSchemaType or undefined if not found.
isValid()
isValid(
child,parent):boolean
Checks if the child flavour is valid under the parent flavour.
Parameters
child
string
The child block flavour name.
parent
string
The parent block flavour name.
Returns
boolean
True if the relationship is valid, false otherwise.
register()
register(
blockSchema):Schema
Registers an array of block schemas into the schema manager.
Parameters
blockSchema
object[]
An array of block schema definitions to register.
Returns
The Schema instance (for chaining).
safeValidate()
safeValidate(
flavour,parentFlavour?,childFlavours?):boolean
Safely validates the schema relationship for a given flavour, parent, and children. Returns true if valid, false otherwise (does not throw).
Parameters
flavour
string
The block flavour to validate.
parentFlavour?
string
The parent block flavour (optional).
childFlavours?
string[]
The child block flavours (optional).
Returns
boolean
True if the schema relationship is valid, false otherwise.
toJSON()
toJSON():
object
Serializes the schema map to a plain object for JSON output.
Returns
object
An object mapping each flavour to its role, parent, and children.
validate()
validate(
flavour,parentFlavour?,childFlavours?):void
Validates the schema relationship for a given flavour, parent, and children. Throws SchemaValidateError if invalid.
Parameters
flavour
string
The block flavour to validate.
parentFlavour?
string
The parent block flavour (optional).
childFlavours?
string[]
The child block flavours (optional).
Returns
void
Throws
If the schema relationship is invalid.
validateSchema()
validateSchema(
child,parent):void
Validates the relationship between a child and parent schema. Throws if the relationship is invalid.
Parameters
child
The child block schema.
model
{ children?: string[]; flavour: string; isFlatData?: boolean; parent?: string[]; props?: (...args) => Record<string, any>; role: string; toModel?: (...args) => BlockModel<object>; } = ...
model.children?
string[] = ContentSchema
model.flavour
string = FlavourSchema
model.isFlatData?
boolean = ...
model.parent?
string[] = ParentSchema
model.props?
(...args) => Record<string, any> = ...
model.role
string = RoleSchema
model.toModel?
(...args) => BlockModel<object> = ...
transformer?
(...args) => BaseBlockTransformer<object> = ...
version
number = ...
parent
The parent block schema.
model
{ children?: string[]; flavour: string; isFlatData?: boolean; parent?: string[]; props?: (...args) => Record<string, any>; role: string; toModel?: (...args) => BlockModel<object>; } = ...
model.children?
string[] = ContentSchema
model.flavour
string = FlavourSchema
model.isFlatData?
boolean = ...
model.parent?
string[] = ParentSchema
model.props?
(...args) => Record<string, any> = ...
model.role
string = RoleSchema
model.toModel?
(...args) => BlockModel<object> = ...
transformer?
(...args) => BaseBlockTransformer<object> = ...
version
number = ...
Returns
void
Throws
If the relationship is invalid.
Slice
Constructors
Constructor
new Slice(
data):Slice
Parameters
data
SliceData
Returns
Properties
data
readonlydata:SliceData
Accessors
content
Get Signature
get content():
DraftModel[]
Returns
docId
Get Signature
get docId():
string
Returns
string
workspaceId
Get Signature
get workspaceId():
string
Returns
string
Methods
fromModels()
staticfromModels(doc,models):Slice
Parameters
doc
models
BlockModel<object>[] | DraftModel[]
Returns
StoreContainer
Constructors
Constructor
new StoreContainer(
doc):StoreContainer
Parameters
doc
Returns
Properties
doc
readonlydoc:Doc
Methods
getStore()
getStore(
__namedParameters):Store
Parameters
__namedParameters
GetStoreOptions = {}
Returns
removeStore()
removeStore(
__namedParameters):void
Parameters
__namedParameters
Returns
void
Transformer
Constructors
Constructor
new Transformer(
__namedParameters):Transformer
Parameters
__namedParameters
Returns
Accessors
adapterConfigs
Get Signature
get adapterConfigs():
Map<string,string>
Returns
Map<string, string>
assets
Get Signature
get assets():
Map<string,Blob>
Returns
Map<string, Blob>
assetsManager
Get Signature
get assetsManager():
AssetsManager
Returns
docCRUD
Get Signature
get docCRUD():
DocCRUD
Returns
schema
Get Signature
get schema():
Schema
Returns
Methods
[dispose]()
[dispose]():
void
Returns
void
blockToSnapshot()
blockToSnapshot(
model):BlockSnapshot|undefined
Parameters
model
BlockModel<object> | DraftModel
Returns
BlockSnapshot | undefined
docToSnapshot()
docToSnapshot(
doc):DocSnapshot|undefined
Parameters
doc
Returns
DocSnapshot | undefined
reset()
reset():
void
Returns
void
sliceToSnapshot()
sliceToSnapshot(
slice):SliceSnapshot|undefined
Parameters
slice
Returns
SliceSnapshot | undefined
snapshotToBlock()
snapshotToBlock(
snapshot,doc,parent?,index?):Promise<BlockModel<object> |undefined>
Parameters
snapshot
doc
parent?
string
index?
number
Returns
Promise<BlockModel<object> | undefined>
snapshotToDoc()
snapshotToDoc(
snapshot):Promise<Store|undefined>
Parameters
snapshot
Returns
Promise<Store | undefined>
snapshotToModelData()
snapshotToModelData(
snapshot):Promise<SnapshotNode<object> |undefined>
Parameters
snapshot
Returns
Promise<SnapshotNode<object> | undefined>
snapshotToSlice()
snapshotToSlice(
snapshot,doc,parent?,index?):Promise<Slice|undefined>
Parameters
snapshot
doc
parent?
string
index?
number
Returns
Promise<Slice | undefined>
walk()
walk(
snapshot,callback):void
Parameters
snapshot
callback
(block) => void
Returns
void
AwarenessEvent
Properties
id
id:
number
state?
optionalstate:RawAwarenessState
type
type:
"add"|"update"|"remove"
BlobCRUD
Properties
delete()
delete: (
key) =>void|Promise<void>
Parameters
key
string
Returns
void | Promise<void>
get()
get: (
key) =>Blob|Promise<Blob|null> |null
Parameters
key
string
Returns
Blob | Promise<Blob | null> | null
list()
list: () =>
string[] |Promise<string[]>
Returns
string[] | Promise<string[]>
set()
set: (
key,value) =>string|Promise<string>
Parameters
key
string
value
Blob
Returns
string | Promise<string>
Doc
Properties
id
readonlyid:string
Accessors
awarenessStore
Get Signature
get awarenessStore():
AwarenessStore
Returns
loaded
Get Signature
get loaded():
boolean
Returns
boolean
meta
Get Signature
get meta():
DocMeta|undefined
Returns
DocMeta | undefined
ready
Get Signature
get ready():
boolean
Returns
boolean
rootDoc
Get Signature
get rootDoc():
Doc
Returns
Doc
spaceDoc
Get Signature
get spaceDoc():
Doc
Returns
Doc
workspace
Get Signature
get workspace():
Workspace
Returns
yBlocks
Get Signature
get yBlocks():
YMap<YBlock>
Returns
YMap<YBlock>
Methods
clear()
clear():
void
Returns
void
dispose()
dispose():
void
Returns
void
getStore()
getStore(
options?):Store
Parameters
options?
Returns
load()
load(
initFn?):void
Parameters
initFn?
() => void
Returns
void
remove()
remove():
void
Returns
void
removeStore()
removeStore(
options):void
Parameters
options
Returns
void
DocCRUD
Properties
create()
create: (
id) =>Store
Parameters
id
string
Returns
delete()
delete: (
id) =>void
Parameters
id
string
Returns
void
get()
get: (
id) =>Store|null
Parameters
id
string
Returns
Store | null
DocMeta
Properties
createDate
createDate:
number
favorite?
optionalfavorite:boolean
id
id:
string
tags
tags:
string[]
title
title:
string
trash?
optionaltrash:boolean
updatedDate?
optionalupdatedDate:number
ExtensionType
Methods
setup()
setup(
di):void
Parameters
di
Container
Returns
void
InternalPrimitives
Properties
Boxed()
Boxed: <
T>(input) =>Boxed<T>
Type Parameters
T
T
Parameters
input
T
Returns
Boxed<T>
Text()
Text: (
input?) =>Text
Parameters
input?
string | YText
Returns
OptionalAttributes
Properties
attributes?
optionalattributes:Record<string,any>
SelectionConstructor<T>
Type Parameters
T
T extends BaseSelection = BaseSelection
Constructors
Constructor
new SelectionConstructor(...
args):T
Parameters
args
...any[]
Returns
T
Properties
group
group:
string
type
type:
string
Methods
fromJSON()
fromJSON(
json):T
Parameters
json
Record<string, unknown>
Returns
T
StackItem
Properties
meta
meta:
Map<"selection-state",unknown>
UserInfo
Properties
name
name:
string
Workspace
Properties
blobSync
readonlyblobSync:BlobEngine
id
readonlyid:string
idGenerator
readonlyidGenerator:IdGenerator
meta
readonlymeta:WorkspaceMeta
onLoadAwareness()?
readonlyoptionalonLoadAwareness: (awareness) =>void
Parameters
awareness
Awareness
Returns
void
onLoadDoc()?
readonlyoptionalonLoadDoc: (doc) =>void
Parameters
doc
Doc
Returns
void
slots
slots:
object
docListUpdated
docListUpdated:
Subject<void>
Accessors
doc
Get Signature
get doc():
Doc
Returns
Doc
docs
Get Signature
get docs():
Map<string,Doc>
Returns
Map<string, Doc>
Methods
createDoc()
createDoc(
docId?):Doc
Parameters
docId?
string
Returns
dispose()
dispose():
void
Returns
void
getDoc()
getDoc(
docId):Doc|null
Parameters
docId
string
Returns
Doc | null
removeDoc()
removeDoc(
docId):void
Parameters
docId
string
Returns
void
WorkspaceMeta
Properties
docMetaAdded
docMetaAdded:
Subject<string>
docMetaRemoved
docMetaRemoved:
Subject<string>
docMetaUpdated
docMetaUpdated:
Subject<void>
Accessors
docMetas
Get Signature
get docMetas():
DocMeta[]
Returns
DocMeta[]
docs
Get Signature
get docs():
unknown[] |undefined
Returns
unknown[] | undefined
properties
Get Signature
get properties():
DocsPropertiesMeta
Returns
Methods
addDocMeta()
addDocMeta(
props,index?):void
Parameters
props
index?
number
Returns
void
getDocMeta()
getDocMeta(
id):DocMeta|undefined
Parameters
id
string
Returns
DocMeta | undefined
initialize()
initialize():
void
Returns
void
removeDocMeta()
removeDocMeta(
id):void
Parameters
id
string
Returns
void
setDocMeta()
setDocMeta(
id,props):void
Parameters
id
string
props
Partial<DocMeta>
Returns
void
setProperties()
setProperties(
meta):void
Parameters
meta
Returns
void
AfterExportPayload
AfterExportPayload = {
index?:number;model:DraftModel;parent?:string;snapshot:BlockSnapshot;type:"block"; } | {page:Store;snapshot:DocSnapshot;type:"page"; } | {slice:Slice;snapshot:SliceSnapshot;type:"slice"; } | {snapshot:CollectionInfoSnapshot;type:"info"; }
AfterImportBlockPayload
AfterImportBlockPayload =
object
Properties
index?
optionalindex:number
model
model:
BlockModel
parent?
optionalparent:string
snapshot
snapshot:
BlockSnapshot
type
type:
"block"
AfterImportPayload
AfterImportPayload =
AfterImportBlockPayload| {page:Store;snapshot:DocSnapshot;type:"page"; } | {slice:Slice;snapshot:SliceSnapshot;type:"slice"; } | {snapshot:CollectionInfoSnapshot;type:"info"; }
BaseSelectionOptions
BaseSelectionOptions =
object
Properties
blockId
blockId:
string
BaseTextAttributes
BaseTextAttributes =
z.infer<typeofbaseTextAttributes>
BeforeExportPayload
BeforeExportPayload = {
model:DraftModel;type:"block"; } | {page:Store;type:"page"; } | {slice:Slice;type:"slice"; } | {type:"info"; }
BeforeImportBlockPayload
BeforeImportBlockPayload =
object
Properties
index?
optionalindex:number
parent?
optionalparent:string
snapshot
snapshot:
BlockSnapshot
type
type:
"block"
BeforeImportPayload
BeforeImportPayload =
BeforeImportBlockPayload| {snapshot:SliceSnapshot;type:"slice"; } | {snapshot:DocSnapshot;type:"page"; } | {snapshot:CollectionInfoSnapshot;type:"info"; }
BlockOptions
BlockOptions =
object
Properties
onChange()?
optionalonChange: (block,key,isLocal) =>void
Parameters
block
key
string
isLocal
boolean
Returns
void
BlockProps
BlockProps =
BlockSysProps&Record<string,unknown>
BlockSchemaType
BlockSchemaType =
z.infer<typeofBlockSchema>
BlockSnapshot
BlockSnapshot =
object
Properties
children
children:
BlockSnapshot[]
flavour
flavour:
string
id
id:
string
props
props:
Record<string,unknown>
type
type:
"block"
version?
optionalversion:number
BlockSnapshotLeaf
BlockSnapshotLeaf =
Pick<BlockSnapshot,"id"|"flavour"|"props"|"version">
BlockSysProps
BlockSysProps =
object
Properties
children?
optionalchildren:BlockModel[]
flavour
flavour:
string
id
id:
string
BlockViewType
BlockViewType =
"bypass"|"display"|"hidden"
CollectionInfoSnapshot
CollectionInfoSnapshot =
object
Properties
id
id:
string
properties
properties:
DocsPropertiesMeta
type
type:
"info"
DeltaInsert<TextAttributes>
DeltaInsert<
TextAttributes> =object
Type Parameters
TextAttributes
TextAttributes extends BaseTextAttributes = BaseTextAttributes
Properties
attributes?
optionalattributes:TextAttributes
insert
insert:
string
DeltaOperation
DeltaOperation =
object&OptionalAttributes
Type Declaration
delete?
optionaldelete:number
insert?
optionalinsert:string
retain?
optionalretain:number
DocSnapshot
DocSnapshot =
object
Properties
blocks
blocks:
BlockSnapshot
meta
meta:
DocMeta
type
type:
"page"
DocsPropertiesMeta
DocsPropertiesMeta =
object
Properties
tags?
optionaltags:object
options
options:
Tag[]
DraftModel<Model>
DraftModel<
Model> =Pick<Model,PropsInDraft> &object
Type Declaration
[draftModelSymbol]
[draftModelSymbol]:
true
children
children:
DraftModel[]
props
props:
ModelProps<Model>
Type Parameters
Model
Model extends BlockModel = BlockModel
FromBlockSnapshotPayload
FromBlockSnapshotPayload =
object
Properties
assets?
optionalassets:AssetsManager
snapshot
snapshot:
BlockSnapshot
FromBlockSnapshotResult<Target>
FromBlockSnapshotResult<
Target> =object
Type Parameters
Target
Target
Properties
assetsIds
assetsIds:
string[]
file
file:
Target
FromDocSnapshotPayload
FromDocSnapshotPayload =
object
Properties
assets?
optionalassets:AssetsManager
snapshot
snapshot:
DocSnapshot
FromDocSnapshotResult<Target>
FromDocSnapshotResult<
Target> =object
Type Parameters
Target
Target
Properties
assetsIds
assetsIds:
string[]
file
file:
Target
FromSliceSnapshotPayload
FromSliceSnapshotPayload =
object
Properties
assets?
optionalassets:AssetsManager
snapshot
snapshot:
SliceSnapshot
FromSliceSnapshotResult<Target>
FromSliceSnapshotResult<
Target> =object
Type Parameters
Target
Target
Properties
assetsIds
assetsIds:
string[]
file
file:
Target
FromSnapshotPayload
FromSnapshotPayload =
object
Properties
assets
assets:
AssetsManager
children
children:
BlockSnapshot[]
json
json:
BlockSnapshotLeaf
GetStoreOptions
GetStoreOptions =
Omit<StoreOptions,"schema"|"doc">
IdGenerator()
IdGenerator = () =>
string
Returns
string
Native2Y<T>
Native2Y<
T> =TextendsRecord<string, infer U> ?YMap<U> :Textends infer U[] ?YArray<U> :T
Type Parameters
T
T
NodeProps<Node>
NodeProps<
Node> =object
Type Parameters
Node
Node extends object
Properties
index
index:
number|null
next?
optionalnext:Node|null
node
node:
Node
parent
parent:
NodeProps<Node> |null
prop
prop:
Keyof<Node> |null
OnBoxedChange()
OnBoxedChange = (
data,isLocal) =>void
Parameters
data
unknown
isLocal
boolean
Returns
void
OnTextChange()
OnTextChange = (
data,isLocal) =>void
Parameters
data
Y.Text
isLocal
boolean
Returns
void
PropsGetter()<Props>
PropsGetter<
Props> = (internalPrimitives) =>Props
Type Parameters
Props
Props
Parameters
internalPrimitives
Returns
Props
PropsOfModel<T>
PropsOfModel<
T> =TextendsBlockModel<infer P> ?P:never
Type Parameters
T
T
ProxyOptions<T>
ProxyOptions<
T> =object
Type Parameters
T
T
Properties
onChange()?
optionalonChange: (data,isLocal) =>void
Parameters
data
T
isLocal
boolean
Returns
void
Query
Query =
object
Properties
match
match:
QueryMatch[]
mode
mode:
QueryMode
QueryMatch
QueryMatch =
object
Properties
flavour?
optionalflavour:string
id?
optionalid:string
props?
optionalprops:Record<string,unknown>
viewType
viewType:
BlockViewType
RawAwarenessState
RawAwarenessState =
object
Properties
color?
optionalcolor:string
selectionV2
selectionV2:
Record<string,UserSelection>
user?
optionaluser:UserInfo
RemoveStoreOptions
RemoveStoreOptions =
Pick<StoreOptions,"query"|"id"|"readonly">
RoleType
RoleType =
"root"|"content"|string
SliceSnapshot
SliceSnapshot =
object
Properties
content
content:
BlockSnapshot[]
pageId
pageId:
string
type
type:
"slice"
workspaceId
workspaceId:
string
SnapshotNode<Props>
SnapshotNode<
Props> =object
Type Parameters
Props
Props extends object
Properties
flavour
flavour:
string
id
id:
string
props
props:
Props
version
version:
number
StoreOptions
StoreOptions =
object
Properties
doc
doc:
Doc
extensions?
optionalextensions:ExtensionType[]
id?
optionalid:string
provider?
optionalprovider:ServiceProvider
query?
optionalquery:Query
readonly?
optionalreadonly:boolean
SubdocEvent
SubdocEvent =
object
Properties
added
added:
Set<YDoc>
loaded
loaded:
Set<YDoc>
removed
removed:
Set<YDoc>
Tag
Tag =
object
Properties
color
color:
string
id
id:
string
value
value:
string
ToBlockSnapshotPayload<Target>
ToBlockSnapshotPayload<
Target> =object
Type Parameters
Target
Target
Properties
assets?
optionalassets:AssetsManager
file
file:
Target
ToDocSnapshotPayload<Target>
ToDocSnapshotPayload<
Target> =object
Type Parameters
Target
Target
Properties
assets?
optionalassets:AssetsManager
file
file:
Target
ToSliceSnapshotPayload<Target>
ToSliceSnapshotPayload<
Target> =object
Type Parameters
Target
Target
Properties
assets?
optionalassets:AssetsManager
file
file:
Target
ToSnapshotPayload<Props>
ToSnapshotPayload<
Props> =object
Type Parameters
Props
Props extends object
Properties
assets
assets:
AssetsManager
model
model:
DraftModel<BlockModel<Props>> |BlockModel<Props>
TransformerMiddleware()
TransformerMiddleware = (
options) =>void|TransformerMiddlewareCleanup
Parameters
options
TransformerMiddlewareOptions
Returns
void | TransformerMiddlewareCleanup
TransformerOptions
TransformerOptions =
object
Properties
blobCRUD
blobCRUD:
BlobCRUD
docCRUD
docCRUD:
DocCRUD
middlewares?
optionalmiddlewares:TransformerMiddleware[]
schema
schema:
Schema
TransformerSlots
TransformerSlots =
object
Properties
afterExport
afterExport:
Subject<AfterExportPayload>
afterImport
afterImport:
Subject<AfterImportPayload>
beforeExport
beforeExport:
Subject<BeforeExportPayload>
beforeImport
beforeImport:
Subject<BeforeImportPayload>
TransformOptions
TransformOptions =
object
Properties
deep?
optionaldeep:boolean
transform()?
optionaltransform: (value,origin) =>unknown
Parameters
value
unknown
origin
unknown
Returns
unknown
UnRecord
UnRecord =
Record<string,unknown>
YBlock
YBlock =
Y.Map<unknown> &object
Type Declaration
get()
Call Signature
get(
prop):string
Parameters
prop
"sys:id" | "sys:flavour"
Returns
string
Call Signature
get(
prop):YArray<string>
Parameters
prop
"sys:children"
Returns
YArray<string>
Call Signature
get<
T>(prop):T
Type Parameters
T
T = unknown
Parameters
prop
string
Returns
T
baseTextAttributes
constbaseTextAttributes:ZodObject<{bold:ZodCatch<ZodNullable<ZodOptional<ZodLiteral<true>>>>;code:ZodCatch<ZodNullable<ZodOptional<ZodLiteral<true>>>>;italic:ZodCatch<ZodNullable<ZodOptional<ZodLiteral<true>>>>;link:ZodCatch<ZodNullable<ZodOptional<ZodString>>>;strike:ZodCatch<ZodNullable<ZodOptional<ZodLiteral<true>>>>;underline:ZodCatch<ZodNullable<ZodOptional<ZodLiteral<true>>>>; },"strip",ZodTypeAny, {bold?:true|null;code?:true|null;italic?:true|null;link?:string|null;strike?:true|null;underline?:true|null; }, {bold?:unknown;code?:unknown;italic?:unknown;link?:unknown;strike?:unknown;underline?:unknown; }>
BlockSchema
constBlockSchema:ZodObject<{model:ZodObject<{children:ZodOptional<ZodArray<ZodString,"many">>;flavour:ZodString;isFlatData:ZodOptional<ZodBoolean>;parent:ZodOptional<ZodArray<ZodString,"many">>;props:ZodOptional<ZodFunction<ZodTuple<[ZodType<InternalPrimitives,ZodTypeDef,InternalPrimitives>],ZodUnknown>,ZodRecord<ZodString,ZodAny>>>;role:ZodString;toModel:ZodOptional<ZodFunction<ZodTuple<[],ZodUnknown>,ZodType<BlockModel<object>,ZodTypeDef,BlockModel<object>>>>; },"strip",ZodTypeAny, {children?:string[];flavour:string;isFlatData?:boolean;parent?:string[];props?: (...args) =>Record<string,any>;role:string;toModel?: (...args) =>BlockModel<object>; }, {children?:string[];flavour:string;isFlatData?:boolean;parent?:string[];props?: (...args) =>Record<string,any>;role:string;toModel?: (...args) =>BlockModel<object>; }>;transformer:ZodOptional<ZodFunction<ZodTuple<[ZodType<Map<string,unknown>,ZodTypeDef,Map<string,unknown>>],ZodUnknown>,ZodType<BaseBlockTransformer<object>,ZodTypeDef,BaseBlockTransformer<object>>>>;version:ZodNumber; },"strip",ZodTypeAny, {model: {children?:string[];flavour:string;isFlatData?:boolean;parent?:string[];props?: (...args) =>Record<string,any>;role:string;toModel?: (...args) =>BlockModel<object>; };transformer?: (...args) =>BaseBlockTransformer<object>;version:number; }, {model: {children?:string[];flavour:string;isFlatData?:boolean;parent?:string[];props?: (...args) =>Record<string,any>;role:string;toModel?: (...args) =>BlockModel<object>; };transformer?: (...args) =>BaseBlockTransformer<object>;version:number; }>
BlockSchemaIdentifier
constBlockSchemaIdentifier:ServiceIdentifier<{model: {children?:string[];flavour:string;isFlatData?:boolean;parent?:string[];props?: (...args) =>Record<string,any>;role:string;toModel?: (...args) =>BlockModel<object>; };transformer?: (...args) =>BaseBlockTransformer<object>;version:number; }> & <U>(variant) =>ServiceIdentifier<U>
BlockSnapshotSchema
constBlockSnapshotSchema:z.ZodType<BlockSnapshot>
DocIdentifier
constDocIdentifier:ServiceIdentifier<Doc> & <U>(variant) =>ServiceIdentifier<U>
DocSnapshotSchema
constDocSnapshotSchema:z.ZodType<DocSnapshot>
extMimeMap
constextMimeMap:Map<string,string>
internalPrimitives
constinternalPrimitives:InternalPrimitives
mimeExtMap
constmimeExtMap:Map<string,string>
nanoid
constnanoid:IdGenerator
SelectionIdentifier
constSelectionIdentifier:ServiceIdentifier<SelectionConstructor<BaseSelection>> & <U>(variant) =>ServiceIdentifier<U>
SliceSnapshotSchema
constSliceSnapshotSchema:z.ZodType<SliceSnapshot>
StoreExtensionIdentifier
constStoreExtensionIdentifier:ServiceIdentifier<StoreExtension> & <U>(variant) =>ServiceIdentifier<U>
storeExtensionSymbol
conststoreExtensionSymbol: typeofstoreExtensionSymbol
StoreIdentifier
constStoreIdentifier:ServiceIdentifier<Store> & <U>(variant) =>ServiceIdentifier<U>
uuidv4
constuuidv4:IdGenerator
BlockSchemaExtension()
BlockSchemaExtension(
blockSchema):ExtensionType
Parameters
blockSchema
model
{ children?: string[]; flavour: string; isFlatData?: boolean; parent?: string[]; props?: (...args) => Record<string, any>; role: string; toModel?: (...args) => BlockModel<object>; } = ...
model.children?
string[] = ContentSchema
model.flavour
string = FlavourSchema
model.isFlatData?
boolean = ...
model.parent?
string[] = ParentSchema
model.props?
(...args) => Record<string, any> = ...
model.role
string = RoleSchema
model.toModel?
(...args) => BlockModel<object> = ...
transformer?
(...args) => BaseBlockTransformer<object> = ...
version
number = ...
Returns
createYProxy()
createYProxy<
Data>(yAbstract,options):Data
Type Parameters
Data
Data
Parameters
yAbstract
unknown
options
ProxyOptions<Data> = {}
Returns
Data
defineBlockSchema()
defineBlockSchema<
Flavour,Role,Props,Metadata,Model,Transformer>(options):object
Type Parameters
Flavour
Flavour extends string
Role
Role extends string
Props
Props extends object
Metadata
Metadata extends Readonly<{ children?: string[]; isFlatData?: boolean; parent?: string[]; role: Role; version: number; }>
Model
Model extends BlockModel<Props>
Transformer
Transformer extends BaseBlockTransformer<Props>
Parameters
options
flavour
Flavour
metadata
Metadata
props?
(internalPrimitives) => Props
toModel?
() => Model
transformer?
(transformerConfig) => Transformer
Returns
object
model
model:
object&Metadata
Type Declaration
flavour
flavour:
Flavour
props
props:
PropsGetter<Props>
transformer()?
optionaltransformer: (transformerConfig) =>Transformer
Parameters
transformerConfig
Map<string, unknown>
Returns
Transformer
version
version:
number
fromJSON()
fromJSON(
value):unknown
Parameters
value
unknown
Returns
unknown
getAssetName()
getAssetName(
assets,blobId):string
Parameters
assets
Map<string, Blob>
blobId
string
Returns
string
isPureObject()
isPureObject(
value):value is object
Parameters
value
unknown
Returns
value is object
isStoreExtensionConstructor()
isStoreExtensionConstructor(
extension):extension is typeof StoreExtension
Parameters
extension
object
Returns
extension is typeof StoreExtension
native2Y()
native2Y<
T>(value,__namedParameters):Native2Y<T>
Type Parameters
T
T
Parameters
value
T
__namedParameters
TransformOptions = {}
Returns
Native2Y<T>
popProp()
Call Signature
popProp(
yMap,prop):void
Parameters
yMap
YMap<unknown>
prop
string
Returns
void
Call Signature
popProp(
yMap,prop):void
Parameters
yMap
YArray<unknown>
prop
number
Returns
void
runQuery()
runQuery(
query,block):void
Parameters
query
block
Returns
void
SelectionExtension()
SelectionExtension(
selectionCtor):ExtensionType
Parameters
selectionCtor
Returns
stashProp()
Call Signature
stashProp(
yMap,prop):void
Parameters
yMap
YMap<unknown>
prop
string
Returns
void
Call Signature
stashProp(
yMap,prop):void
Parameters
yMap
YArray<unknown>
prop
number
Returns
void
toDraftModel()
toDraftModel<
Model>(origin):DraftModel<Model>
Type Parameters
Model
Model extends BlockModel<object> = BlockModel<object>
Parameters
origin
Model
Returns
DraftModel<Model>
toJSON()
toJSON(
value):unknown
Parameters
value
unknown
Returns
unknown
wrapFakeNote()
wrapFakeNote(
snapshot):void
Parameters
snapshot
Returns
void
y2Native()
y2Native(
yAbstract,__namedParameters):unknown
Parameters
yAbstract
unknown
__namedParameters
TransformOptions = {}
Returns
unknown
Reactive
Boxed<Value>
Boxed is to store raw data in Yjs. By default, store will try to convert a object to a Y.Map. If you want to store a raw object for you want to manipulate the Y.Map directly, you can use Boxed.
NOTE
Please notice that the data will be stored in Y.Map anyway so it can not hold data structure like function.
Example
const boxedObject = new Boxed({ a: 1, b: 2 });
const boxedYMap = new Boxed(new Y.Map());
boxedObject.getValue().a; // 1
boxedYMap.getValue().set('a', 1);
boxedObject.setValue({ foo: 'bar' });Type Param
The type of the value stored in the Boxed.
Type Parameters
Value
Value = unknown
Constructors
Constructor
new Boxed<
Value>(value):Boxed<Value>
Parameters
value
Value
Returns
Boxed<Value>
Methods
getValue()
getValue():
Value|undefined
Get the current value of the Boxed.
Returns
Value | undefined
setValue()
setValue(
value):Value
Replace the current value of the Boxed.
Parameters
value
Value
The new value to set.
Returns
Value
from()
staticfrom<Value>(map):Boxed<Value>
Create a Boxed from a Y.Map. It is useful when you sync a Y.Map from remote.
Type Parameters
Value
Value
The type of the value.
Parameters
map
YMap<unknown>
Returns
Boxed<Value>
Example
const doc1 = new Y.Doc();
const doc2 = new Y.Doc();
keepSynced(doc1, doc2);
const data1 = doc1.getMap('data');
const boxed1 = new Boxed({ a: 1, b: 2 });
data1.set('boxed', boxed1.yMap);
const data2 = doc2.getMap('data');
const boxed2 = Boxed.from<{ a: number; b: number }>(data2.get('boxed'));is()
staticis(value):value is Boxed<unknown>
Check if a value is a Boxed.
Parameters
value
unknown
Returns
value is Boxed<unknown>
Example
const doc = new Y.Doc();
const data = doc.getMap('data');
const boxed = new Boxed({ a: 1, b: 2 });
Boxed.is(boxed); // true
data.set('boxed', boxed.yMap);
Boxed.is(data.get('boxed)); // trueText<TextAttributes>
Text is an abstraction of Y.Text. It provides useful methods to manipulate the text content.
Example
const text = new Text('Hello, world!');
text.insert(' blocksuite', 7);
text.delete(7, 1);
text.format(7, 1, { bold: true });
text.join(new Text(' blocksuite'));
text.split(7, 1);Text delta is a format from Y.js.
Type Parameters
TextAttributes
TextAttributes extends BaseTextAttributes = BaseTextAttributes
Constructors
Constructor
new Text<
TextAttributes>(input?):Text<TextAttributes>
Parameters
input?
The input can be a string, a Y.Text instance, or an array of DeltaInsert.
string | YText | DeltaInsert<TextAttributes>[]
Returns
Text<TextAttributes>
Accessors
deltas$
Get Signature
get deltas$():
Signal<DeltaOperation[]>
Get the text delta as a signal.
Returns
Signal<DeltaOperation[]>
length
Get Signature
get length():
number
Returns
number
yText
Get Signature
get yText():
YText
Returns
YText
Methods
applyDelta()
applyDelta(
delta):void
Apply a delta to the text.
Parameters
delta
The delta to apply.
Returns
void
Example
const text = new Text('Hello, world!');
text.applyDelta([{insert: ' blocksuite', attributes: { bold: true }}]);clear()
clear():
void
Clear the text content.
Returns
void
clone()
clone():
Text<{bold?:true|null;code?:true|null;italic?:true|null;link?:string|null;strike?:true|null;underline?:true|null; }>
Clone the text to a new Text instance.
Returns
Text<{ bold?: true | null; code?: true | null; italic?: true | null; link?: string | null; strike?: true | null; underline?: true | null; }>
A new Text instance.
delete()
delete(
index,length):void
Delete the text content.
Parameters
index
number
The index to delete.
length
number
The length to delete.
Returns
void
format()
format(
index,length,format):void
Format the text content.
Parameters
index
number
The index to format.
length
number
The length to format.
format
Record<string, unknown>
The format to apply.
Returns
void
Example
const text = new Text('Hello, world!');
text.format(7, 1, { bold: true });insert()
insert(
content,index,attributes?):void
Insert content at the specified index.
Parameters
content
string
The content to insert.
index
number
The index to insert.
attributes?
Record<string, unknown>
Returns
void
Example
const text = new Text('Hello, world!');
text.insert(' blocksuite', 7);join()
join(
other):void
Join current text with another text.
Parameters
other
The other text to join.
Returns
void
Example
const text = new Text('Hello, world!');
const other = new Text(' blocksuite');
text.join(other);replace()
replace(
index,length,content,attributes?):void
Replace the text content with a new content.
Parameters
index
number
The index to replace.
length
number
The length to replace.
content
string
The content to replace.
attributes?
Record<string, unknown>
The attributes to replace.
Returns
void
Example
const text = new Text('Hello, world!');
text.replace(7, 1, ' blocksuite');sliceToDelta()
sliceToDelta(
begin,end?):DeltaOperation[]
Slice the text to a delta.
Parameters
begin
number
The begin index.
end?
number
The end index.
Returns
The delta of the sliced text.
split()
split(
index,length):Text
Split the text into another Text.
Parameters
index
number
The index to split.
length
number = 0
The length to split.
Returns
The right part of the text.
Example
const text = new Text('Hello, world!');
text.split(7, 1);NOTE: The string included in [index, index + length) will be deleted.
Here are three cases for point position(index + length):
[{insert: 'abc', ...}, {insert: 'def', ...}, {insert: 'ghi', ...}]
1. abc|de|fghi
left: [{insert: 'abc', ...}]
right: [{insert: 'f', ...}, {insert: 'ghi', ...}]
2. abc|def|ghi
left: [{insert: 'abc', ...}]
right: [{insert: 'ghi', ...}]
3. abc|defg|hi
left: [{insert: 'abc', ...}]
right: [{insert: 'hi', ...}]toDelta()
toDelta():
DeltaOperation[]
Get the text delta.
Returns
The delta of the text.
toString()
toString():
string
Get the text content as a string. In most cases, you should not use this method. It will lose the delta attributes information.
Returns
string
The text content.
Store
Store
Core store class that manages blocks and their lifecycle in BlockSuite
Remarks
The Store class is responsible for managing the lifecycle of blocks, handling transactions, and maintaining the block tree structure. A store is a piece of data created from one or a part of a Y.Doc.
Block CRUD
blockSize
Get Signature
get blockSize():
number
Get the number of blocks in the store
Returns
number
isEmpty
Get Signature
get isEmpty():
boolean
Check if there are no blocks in the store.
Returns
boolean
isEmpty$
Get Signature
get isEmpty$():
ReadonlySignal<boolean>
Get the signal for the empty state of the store.
Returns
ReadonlySignal<boolean>
readonly
Get Signature
get readonly():
boolean
Check if the store is readonly.
Returns
boolean
Set Signature
set readonly(
value):void
Set the readonly state of the store.
Parameters
value
boolean
Returns
void
readonly$
Get Signature
get readonly$():
Signal<boolean>
Get the signal for the readonly state of the store.
Returns
Signal<boolean>
root
Get Signature
get root():
BlockModel<object> |null
Get the root block of the store.
Returns
BlockModel<object> | null
addBlock()
addBlock<
T>(flavour,blockProps,parent?,parentIndex?):string
Creates and adds a new block to the store
Type Parameters
T
T extends BlockModel<object> = BlockModel<object>
Parameters
flavour
string
The block's flavour (type)
blockProps
Partial<BlockProps | PropsOfModel<T> & BlockSysProps> = {}
Optional properties for the new block
parent?
Optional parent block or parent block ID
string | BlockModel<object> | null
parentIndex?
number
Optional index position in parent's children
Returns
string
The ID of the newly created block
Throws
When store is in readonly mode
addBlocks()
addBlocks(
blocks,parent?,parentIndex?):string[]
Add multiple blocks to the store
Parameters
blocks
object[]
Array of blocks to add
parent?
Optional parent block or parent block ID
string | BlockModel<object> | null
parentIndex?
number
Optional index position in parent's children
Returns
string[]
Array of IDs of the newly created blocks
addSiblingBlocks()
addSiblingBlocks(
targetModel,props,placement):string[]
Add sibling blocks to the store
Parameters
targetModel
The target block model
props
Partial<BlockProps>[]
Array of block properties
placement
Optional position to place the new blocks ('after' or 'before')
"after" | "before"
Returns
string[]
Array of IDs of the newly created blocks
deleteBlock()
deleteBlock(
model,options):void
Delete a block from the store
Parameters
model
The block model or block ID to delete
string | BlockModel<object>
options
Optional options for the deletion
bringChildrenTo?
BlockModel<object>
Optional block model to bring children to
deleteChildren?
boolean
Optional flag to delete children
Returns
void
getAllModels()
getAllModels():
BlockModel<object>[]
Get all models in the store
Returns
BlockModel<object>[]
Array of all models
getBlock()
getBlock(
id):Block|undefined
Gets a block by its ID
Parameters
id
string
The block's ID
Returns
Block | undefined
The block instance if found, undefined otherwise
getBlock$()
getBlock$(
id):Block|undefined
Gets a block by its ID
Parameters
id
string
The block's ID
Returns
Block | undefined
The block instance in signal if found, undefined otherwise
getBlocksByFlavour()
getBlocksByFlavour(
blockFlavour):Block[]
Gets all blocks of specified flavour(s)
Parameters
blockFlavour
Single flavour or array of flavours to filter by
string | string[]
Returns
Block[]
Array of matching blocks
getModelById()
getModelById<
Model>(id):Model|null
Get a model by its ID
Type Parameters
Model
Model extends BlockModel<object> = BlockModel<object>
Parameters
id
string
The model's ID
Returns
Model | null
The model instance if found, null otherwise
getModelsByFlavour()
getModelsByFlavour(
blockFlavour):BlockModel<object>[]
Get all models of specified flavour(s)
Parameters
blockFlavour
Single flavour or array of flavours to filter by
string | string[]
Returns
BlockModel<object>[]
Array of matching models
getNext()
getNext(
block):BlockModel<object> |null
Get the next sibling block of a given block
Parameters
block
Block model or block ID to find next sibling for
string | BlockModel<object>
Returns
BlockModel<object> | null
The next sibling block model if found, null otherwise
getNexts()
getNexts(
block):BlockModel<object>[]
Get all next sibling blocks of a given block
Parameters
block
Block model or block ID to find next siblings for
string | BlockModel<object>
Returns
BlockModel<object>[]
Array of next sibling blocks if found, empty array otherwise
getParent()
getParent(
target):BlockModel<object> |null
Gets the parent block of a given block
Parameters
target
Block model or block ID to find parent for
string | BlockModel<object>
Returns
BlockModel<object> | null
The parent block model if found, null otherwise
getPrev()
getPrev(
block):BlockModel<object> |null
Get the previous sibling block of a given block
Parameters
block
Block model or block ID to find previous sibling for
string | BlockModel<object>
Returns
BlockModel<object> | null
The previous sibling block model if found, null otherwise
getPrevs()
getPrevs(
block):BlockModel<object>[]
Get all previous sibling blocks of a given block
Parameters
block
Block model or block ID to find previous siblings for
string | BlockModel<object>
Returns
BlockModel<object>[]
Array of previous sibling blocks if found, empty array otherwise
hasBlock()
hasBlock(
id):boolean
Check if a block exists by its ID
Parameters
id
string
The block's ID
Returns
boolean
True if the block exists, false otherwise
moveBlocks()
moveBlocks(
blocksToMove,newParent,targetSibling,shouldInsertBeforeSibling):void
Move blocks to a new parent block
Parameters
blocksToMove
BlockModel<object>[]
Array of block models to move
newParent
The new parent block model
targetSibling
Optional target sibling block model
BlockModel<object> | null
shouldInsertBeforeSibling
boolean = true
Optional flag to insert before sibling
Returns
void
updateBlock()
updateBlock<
T>(modelOrId,callBackOrProps):void
Updates a block's properties or executes a callback in a transaction
Type Parameters
T
T extends BlockModel<object> = BlockModel<object>
Parameters
modelOrId
The block model or block ID to update
string | T
callBackOrProps
Either a callback function to execute or properties to update
() => void | Partial<BlockProps | PropsOfModel<T> & BlockSysProps>
Returns
void
Throws
When the block is not found or schema validation fails
Extension
get
Get Signature
get get(): <
T>(identifier,options?) =>T
Get an extension instance from the store
Example
const extension = store.get(SomeExtension);Returns
The extension instance
<
T>(identifier,options?):T
Type Parameters
T
T
Parameters
identifier
GeneralServiceIdentifier<T>
options?
ResolveOptions
Returns
T
getOptional
Get Signature
get getOptional(): <
T>(identifier,options?) =>T|null
Optional get an extension instance from the store. The major difference between get and getOptional is that getOptional will not throw an error if the extension is not found.
Example
const extension = store.getOptional(SomeExtension);Returns
The extension instance
<
T>(identifier,options?):T|null
Type Parameters
T
T
Parameters
identifier
GeneralServiceIdentifier<T>
options?
ResolveOptions
Returns
T | null
provider
Get Signature
get provider():
ServiceProvider
Get the di provider for current store.
Returns
ServiceProvider
History
canRedo
Get Signature
get canRedo():
boolean
Check if the store can redo
Returns
boolean
canUndo
Get Signature
get canUndo():
boolean
Check if the store can undo
Returns
boolean
history
Get Signature
get history():
HistoryExtension
Get the Y.UndoManager instance for current store.
Returns
captureSync()
captureSync():
void
Force the following history to be captured into a new stack.
Returns
void
Example
op1();
op2();
store.captureSync();
op3();
store.undo(); // undo op3
store.undo(); // undo op1, op2redo()
redo():
void
Redo the last undone transaction.
Returns
void
resetHistory()
resetHistory():
void
Reset the history of the store.
Returns
void
transact()
transact(
fn,shouldTransact):void
Execute a transaction.
Parameters
fn
() => void
shouldTransact
boolean = ...
Returns
void
Example
store.transact(() => {
op1();
op2();
});undo()
undo():
void
Undo the last transaction.
Returns
void
withoutTransact()
withoutTransact(
fn):void
Execute a transaction without capturing the history.
Parameters
fn
() => void
Returns
void
Example
store.withoutTransact(() => {
op1();
op2();
});Other
awarenessStore
Get Signature
get awarenessStore():
AwarenessStore
Get the AwarenessStore instance for current store
Returns
blobSync
Get Signature
get blobSync():
BlobEngine
Get the BlobEngine instance for current store.
Returns
doc
Get Signature
get doc():
Doc
Get the Doc instance for current store.
Returns
schema
Get Signature
get schema():
Schema
Get the Schema instance of the store.
Returns
workspace
Get Signature
get workspace():
Workspace
Get the Workspace instance for current store.
Returns
Store Lifecycle
disposableGroup
disposableGroup:
DisposableGroup
Group of disposable resources managed by the store
slots
readonlyslots:StoreSlots
Slots for receiving events from the store. All events are rxjs Subjects, you can subscribe to them like this:
store.slots.ready.subscribe(() => {
console.log('store is ready');
});You can also use rxjs operators to handle the events.
id
Get Signature
get id():
string
Get the id of the store.
Returns
string
loaded
Get Signature
get loaded():
boolean
Check if the store is loaded.
Returns
boolean
ready
Get Signature
get ready():
boolean
Check if the store is ready. Which means the Y.Doc is loaded and the root block is added.
Returns
boolean
dispose()
dispose():
void
Disposes the store and releases all resources
Returns
void
load()
load(
initFn?):Store
Initializes and loads the store
Parameters
initFn?
() => void
Optional initialization function
Returns
The store instance
Transformer
getTransformer()
getTransformer(
middlewares):Transformer
Creates a new transformer instance for the store
Parameters
middlewares
TransformerMiddleware[] = []
Optional array of transformer middlewares
Returns
A new Transformer instance
StoreSlots
Slots for receiving events from the store. All events are rxjs Subjects, you can subscribe to them like this:
store.slots.ready.subscribe(() => {
console.log('store is ready');
});You can also use rxjs operators to handle the events.
Properties
blockUpdated
blockUpdated:
Subject<StoreBlockUpdatedPayloads>
This fires when a block is updated via API call or has just been updated from existing ydoc.
The payload can have three types:
- add: When a new block is added
- delete: When a block is removed
- update: When a block's properties are modified
ready
ready:
Subject<void>
This fires after doc.load is called. The Y.Doc is fully loaded and ready to use.
rootAdded
rootAdded:
Subject<string>
This fires when the root block is added via API call or has just been initialized from existing ydoc. useful for internal block UI components to start subscribing following up events. Note that at this moment, the whole block tree may not be fully initialized yet.
rootDeleted
rootDeleted:
Subject<string>
This fires when the root block is deleted via API call or has just been removed from existing ydoc. In most cases, you don't need to subscribe to this event.