tldraw/packages/store/api/api.json

5697 lines
178 KiB
JSON
Raw Normal View History

{
"metadata": {
"toolPackage": "@microsoft/api-extractor",
"toolVersion": "7.35.4",
"schemaVersion": 1011,
"oldestForwardsCompatibleVersion": 1001,
"tsdocConfig": {
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
"noStandardTags": true,
"tagDefinitions": [
{
"tagName": "@alpha",
"syntaxKind": "modifier"
},
{
"tagName": "@beta",
"syntaxKind": "modifier"
},
{
"tagName": "@defaultValue",
"syntaxKind": "block"
},
{
"tagName": "@decorator",
"syntaxKind": "block",
"allowMultiple": true
},
{
"tagName": "@deprecated",
"syntaxKind": "block"
},
{
"tagName": "@eventProperty",
"syntaxKind": "modifier"
},
{
"tagName": "@example",
"syntaxKind": "block",
"allowMultiple": true
},
{
"tagName": "@experimental",
"syntaxKind": "modifier"
},
{
"tagName": "@inheritDoc",
"syntaxKind": "inline"
},
{
"tagName": "@internal",
"syntaxKind": "modifier"
},
{
"tagName": "@label",
"syntaxKind": "inline"
},
{
"tagName": "@link",
"syntaxKind": "inline",
"allowMultiple": true
},
{
"tagName": "@override",
"syntaxKind": "modifier"
},
{
"tagName": "@packageDocumentation",
"syntaxKind": "modifier"
},
{
"tagName": "@param",
"syntaxKind": "block",
"allowMultiple": true
},
{
"tagName": "@privateRemarks",
"syntaxKind": "block"
},
{
"tagName": "@public",
"syntaxKind": "modifier"
},
{
"tagName": "@readonly",
"syntaxKind": "modifier"
},
{
"tagName": "@remarks",
"syntaxKind": "block"
},
{
"tagName": "@returns",
"syntaxKind": "block"
},
{
"tagName": "@sealed",
"syntaxKind": "modifier"
},
{
"tagName": "@see",
"syntaxKind": "block"
},
{
"tagName": "@throws",
"syntaxKind": "block",
"allowMultiple": true
},
{
"tagName": "@typeParam",
"syntaxKind": "block",
"allowMultiple": true
},
{
"tagName": "@virtual",
"syntaxKind": "modifier"
},
{
"tagName": "@betaDocumentation",
"syntaxKind": "modifier"
},
{
"tagName": "@internalRemarks",
"syntaxKind": "block"
},
{
"tagName": "@preapproved",
"syntaxKind": "modifier"
}
],
"supportForTags": {
"@alpha": true,
"@beta": true,
"@defaultValue": true,
"@decorator": true,
"@deprecated": true,
"@eventProperty": true,
"@example": true,
"@experimental": true,
"@inheritDoc": true,
"@internal": true,
"@label": true,
"@link": true,
"@override": true,
"@packageDocumentation": true,
"@param": true,
"@privateRemarks": true,
"@public": true,
"@readonly": true,
"@remarks": true,
"@returns": true,
"@sealed": true,
"@see": true,
"@throws": true,
"@typeParam": true,
"@virtual": true,
"@betaDocumentation": true,
"@internalRemarks": true,
"@preapproved": true
},
"reportUnsupportedHtmlElements": false
}
},
"kind": "Package",
"canonicalReference": "@tldraw/store!",
"docComment": "",
"name": "@tldraw/store",
"preserveMemberOrder": false,
"members": [
{
"kind": "EntryPoint",
"canonicalReference": "@tldraw/store!",
"name": "",
"preserveMemberOrder": false,
"members": [
{
"kind": "TypeAlias",
"canonicalReference": "@tldraw/store!AllRecords:type",
"docComment": "/**\n * Get the type of all records in a record store.\n *\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export type AllRecords<T extends "
},
{
"kind": "Reference",
"text": "Store",
"canonicalReference": "@tldraw/store!Store:class"
},
{
"kind": "Content",
"text": "<any>"
},
{
"kind": "Content",
"text": "> = "
},
{
"kind": "Reference",
"text": "ExtractR",
"canonicalReference": "@tldraw/store!~ExtractR:type"
},
{
"kind": "Content",
"text": "<"
},
{
"kind": "Reference",
"text": "ExtractRecordType",
"canonicalReference": "@tldraw/store!~ExtractRecordType:type"
},
{
"kind": "Content",
"text": "<T>>"
},
{
"kind": "Content",
"text": ";"
}
],
"fileUrlPath": "packages/store/src/lib/type-utils.ts",
"releaseTag": "Public",
"name": "AllRecords",
"typeParameters": [
{
"typeParameterName": "T",
"constraintTokenRange": {
"startIndex": 1,
"endIndex": 3
},
"defaultTypeTokenRange": {
"startIndex": 0,
"endIndex": 0
}
}
],
"typeTokenRange": {
"startIndex": 4,
"endIndex": 8
}
},
{
"kind": "Function",
"canonicalReference": "@tldraw/store!assertIdType:function(1)",
"docComment": "/**\n * Assert whether an id correspond to a record type.\n *\n * @param id - The id to check.\n *\n * @param type - The type of the record.\n *\n * @example\n * ```ts\n * assertIdType(myId, \"shape\")\n * ```\n *\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export declare function assertIdType<R extends "
},
{
"kind": "Reference",
"text": "UnknownRecord",
"canonicalReference": "@tldraw/store!UnknownRecord:type"
},
{
"kind": "Content",
"text": ">(id: "
},
{
"kind": "Content",
"text": "string | undefined"
},
{
"kind": "Content",
"text": ", type: "
},
{
"kind": "Reference",
"text": "RecordType",
"canonicalReference": "@tldraw/store!RecordType:class"
},
{
"kind": "Content",
"text": "<R, any>"
},
{
"kind": "Content",
"text": "): "
},
{
"kind": "Content",
"text": "asserts "
},
{
"kind": "Reference",
"text": "id",
"canonicalReference": "@tldraw/store!~id"
},
{
"kind": "Content",
"text": " is "
},
{
"kind": "Reference",
"text": "IdOf",
"canonicalReference": "@tldraw/store!IdOf:type"
},
{
"kind": "Content",
"text": "<R>"
},
{
"kind": "Content",
"text": ";"
}
],
"fileUrlPath": "packages/store/src/lib/RecordType.ts",
"returnTypeTokenRange": {
"startIndex": 8,
"endIndex": 13
},
"releaseTag": "Public",
"overloadIndex": 1,
"parameters": [
{
"parameterName": "id",
"parameterTypeTokenRange": {
"startIndex": 3,
"endIndex": 4
},
"isOptional": false
},
{
"parameterName": "type",
"parameterTypeTokenRange": {
"startIndex": 5,
"endIndex": 7
},
"isOptional": false
}
],
"typeParameters": [
{
"typeParameterName": "R",
"constraintTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"defaultTypeTokenRange": {
"startIndex": 0,
"endIndex": 0
}
}
],
"name": "assertIdType"
},
{
"kind": "Interface",
"canonicalReference": "@tldraw/store!BaseRecord:interface",
"docComment": "/**\n * The base record that all records must extend.\n *\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export interface BaseRecord<TypeName extends "
},
{
"kind": "Content",
"text": "string"
},
{
"kind": "Content",
"text": ", Id extends "
},
{
"kind": "Reference",
"text": "RecordId",
"canonicalReference": "@tldraw/store!RecordId:type"
},
{
"kind": "Content",
"text": "<"
},
{
"kind": "Reference",
"text": "UnknownRecord",
"canonicalReference": "@tldraw/store!UnknownRecord:type"
},
{
"kind": "Content",
"text": ">"
},
{
"kind": "Content",
"text": "> "
}
],
"fileUrlPath": "packages/store/src/lib/BaseRecord.ts",
"releaseTag": "Public",
"typeParameters": [
{
"typeParameterName": "TypeName",
"constraintTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"defaultTypeTokenRange": {
"startIndex": 0,
"endIndex": 0
}
},
{
"typeParameterName": "Id",
"constraintTokenRange": {
"startIndex": 3,
"endIndex": 7
},
"defaultTypeTokenRange": {
"startIndex": 0,
"endIndex": 0
}
}
],
"name": "BaseRecord",
"preserveMemberOrder": false,
"members": [
{
"kind": "PropertySignature",
"canonicalReference": "@tldraw/store!BaseRecord#id:member",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "readonly id: "
},
{
"kind": "Content",
"text": "Id"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": true,
"isOptional": false,
"releaseTag": "Public",
"name": "id",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
}
},
{
"kind": "PropertySignature",
"canonicalReference": "@tldraw/store!BaseRecord#typeName:member",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "readonly typeName: "
},
{
"kind": "Content",
"text": "TypeName"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": true,
"isOptional": false,
"releaseTag": "Public",
"name": "typeName",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
}
}
],
"extendsTokenRanges": []
},
{
"kind": "TypeAlias",
"canonicalReference": "@tldraw/store!CollectionDiff:type",
"docComment": "/**\n * A diff describing the changes to a collection.\n *\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export type CollectionDiff<T> = "
},
{
"kind": "Content",
"text": "{\n added?: "
},
{
"kind": "Reference",
"text": "Set",
"canonicalReference": "!Set:interface"
},
{
"kind": "Content",
"text": "<T>;\n removed?: "
},
{
"kind": "Reference",
"text": "Set",
"canonicalReference": "!Set:interface"
},
{
"kind": "Content",
"text": "<T>;\n}"
},
{
"kind": "Content",
"text": ";"
}
],
"fileUrlPath": "packages/store/src/lib/Store.ts",
"releaseTag": "Public",
"name": "CollectionDiff",
"typeParameters": [
{
"typeParameterName": "T",
"constraintTokenRange": {
"startIndex": 0,
"endIndex": 0
},
"defaultTypeTokenRange": {
"startIndex": 0,
"endIndex": 0
}
}
],
"typeTokenRange": {
"startIndex": 1,
"endIndex": 6
}
},
{
"kind": "Function",
"canonicalReference": "@tldraw/store!compareRecordVersions:function(1)",
"docComment": "/**\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export declare function compareRecordVersions(a: "
},
{
"kind": "Reference",
"text": "RecordVersion",
"canonicalReference": "@tldraw/store!RecordVersion:type"
},
{
"kind": "Content",
"text": ", b: "
},
{
"kind": "Reference",
"text": "RecordVersion",
"canonicalReference": "@tldraw/store!RecordVersion:type"
},
{
"kind": "Content",
"text": "): "
},
{
"kind": "Content",
"text": "-1 | 0 | 1"
},
{
"kind": "Content",
"text": ";"
}
],
"fileUrlPath": "packages/store/src/lib/migrate.ts",
"returnTypeTokenRange": {
"startIndex": 5,
"endIndex": 6
},
"releaseTag": "Public",
"overloadIndex": 1,
"parameters": [
{
"parameterName": "a",
"parameterTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"isOptional": false
},
{
"parameterName": "b",
"parameterTypeTokenRange": {
"startIndex": 3,
"endIndex": 4
},
"isOptional": false
}
],
"name": "compareRecordVersions"
},
{
"kind": "Variable",
"canonicalReference": "@tldraw/store!compareSchemas:var",
"docComment": "/**\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "compareSchemas: "
},
{
"kind": "Content",
"text": "(a: "
},
{
"kind": "Reference",
"text": "SerializedSchema",
"canonicalReference": "@tldraw/store!SerializedSchema:interface"
},
{
"kind": "Content",
"text": ", b: "
},
{
"kind": "Reference",
"text": "SerializedSchema",
"canonicalReference": "@tldraw/store!SerializedSchema:interface"
},
{
"kind": "Content",
"text": ") => -1 | 0 | 1"
}
],
"fileUrlPath": "packages/store/src/lib/compareSchemas.ts",
"isReadonly": true,
"releaseTag": "Public",
"name": "compareSchemas",
"variableTypeTokenRange": {
"startIndex": 1,
"endIndex": 6
}
},
{
"kind": "TypeAlias",
"canonicalReference": "@tldraw/store!ComputedCache:type",
"docComment": "/**\n * A record store is a collection of records of different types.\n *\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export type ComputedCache<Data, R extends "
},
{
"kind": "Reference",
"text": "UnknownRecord",
"canonicalReference": "@tldraw/store!UnknownRecord:type"
},
{
"kind": "Content",
"text": "> = "
},
{
"kind": "Content",
"text": "{\n get(id: "
},
{
"kind": "Reference",
"text": "IdOf",
"canonicalReference": "@tldraw/store!IdOf:type"
},
{
"kind": "Content",
"text": "<R>): Data | undefined;\n}"
},
{
"kind": "Content",
"text": ";"
}
],
"fileUrlPath": "packages/store/src/lib/Store.ts",
"releaseTag": "Public",
"name": "ComputedCache",
"typeParameters": [
{
"typeParameterName": "Data",
"constraintTokenRange": {
"startIndex": 0,
"endIndex": 0
},
"defaultTypeTokenRange": {
"startIndex": 0,
"endIndex": 0
}
},
{
"typeParameterName": "R",
"constraintTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"defaultTypeTokenRange": {
"startIndex": 0,
"endIndex": 0
}
}
],
"typeTokenRange": {
"startIndex": 3,
"endIndex": 6
}
},
{
"kind": "Function",
"canonicalReference": "@tldraw/store!createRecordType:function(1)",
"docComment": "/**\n * Create a record type.\n *\n * @param typeName - The name of the type to create.\n *\n * @example\n * ```ts\n * const Book = createRecordType<Book>('book')\n * ```\n *\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export declare function createRecordType<R extends "
},
{
"kind": "Reference",
"text": "UnknownRecord",
"canonicalReference": "@tldraw/store!UnknownRecord:type"
},
{
"kind": "Content",
"text": ">(typeName: "
},
{
"kind": "Content",
"text": "R['typeName']"
},
{
"kind": "Content",
"text": ", config: "
},
{
"kind": "Content",
"text": "{\n migrations?: "
},
{
"kind": "Reference",
"text": "Migrations",
"canonicalReference": "@tldraw/store!Migrations:interface"
},
{
"kind": "Content",
"text": ";\n validator?: "
},
{
"kind": "Reference",
"text": "StoreValidator",
"canonicalReference": "@tldraw/store!StoreValidator:type"
},
{
"kind": "Content",
"text": "<R>;\n scope: "
},
{
"kind": "Reference",
"text": "RecordScope",
"canonicalReference": "@tldraw/store!~RecordScope:type"
},
{
"kind": "Content",
"text": ";\n}"
},
{
"kind": "Content",
"text": "): "
},
{
"kind": "Reference",
"text": "RecordType",
"canonicalReference": "@tldraw/store!RecordType:class"
},
{
"kind": "Content",
"text": "<R, keyof "
},
{
"kind": "Reference",
"text": "Omit",
"canonicalReference": "!Omit:type"
},
{
"kind": "Content",
"text": "<R, 'id' | 'typeName'>>"
},
{
"kind": "Content",
"text": ";"
}
],
"fileUrlPath": "packages/store/src/lib/RecordType.ts",
"returnTypeTokenRange": {
"startIndex": 13,
"endIndex": 17
},
"releaseTag": "Public",
"overloadIndex": 1,
"parameters": [
{
"parameterName": "typeName",
"parameterTypeTokenRange": {
"startIndex": 3,
"endIndex": 4
},
"isOptional": false
},
{
"parameterName": "config",
"parameterTypeTokenRange": {
"startIndex": 5,
"endIndex": 12
},
"isOptional": false
}
],
"typeParameters": [
{
"typeParameterName": "R",
"constraintTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"defaultTypeTokenRange": {
"startIndex": 0,
"endIndex": 0
}
}
],
"name": "createRecordType"
},
{
"kind": "Function",
"canonicalReference": "@tldraw/store!defineMigrations:function(1)",
"docComment": "/**\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export declare function defineMigrations<FirstVersion extends "
},
{
"kind": "Reference",
"text": "EMPTY_SYMBOL",
"canonicalReference": "@tldraw/store!~EMPTY_SYMBOL:type"
},
{
"kind": "Content",
"text": " | number"
},
{
"kind": "Content",
"text": " = "
},
{
"kind": "Reference",
"text": "EMPTY_SYMBOL",
"canonicalReference": "@tldraw/store!~EMPTY_SYMBOL:type"
},
{
"kind": "Content",
"text": ", CurrentVersion extends "
},
{
"kind": "Reference",
"text": "EMPTY_SYMBOL",
"canonicalReference": "@tldraw/store!~EMPTY_SYMBOL:type"
},
{
"kind": "Content",
"text": " | "
},
{
"kind": "Reference",
"text": "Exclude",
"canonicalReference": "!Exclude:type"
},
{
"kind": "Content",
"text": "<number, 0>"
},
{
"kind": "Content",
"text": " = "
},
{
"kind": "Reference",
"text": "EMPTY_SYMBOL",
"canonicalReference": "@tldraw/store!~EMPTY_SYMBOL:type"
},
{
"kind": "Content",
"text": ">(opts: "
},
{
"kind": "Content",
"text": "{\n firstVersion?: CurrentVersion extends number ? FirstVersion : never;\n currentVersion?: CurrentVersion;\n migrators?: CurrentVersion extends number ? FirstVersion extends number ? CurrentVersion extends FirstVersion ? {\n [version in "
},
{
"kind": "Reference",
"text": "Exclude",
"canonicalReference": "!Exclude:type"
},
{
"kind": "Content",
"text": "<"
},
{
"kind": "Reference",
"text": "Range",
"canonicalReference": "@tldraw/store!~Range_2:type"
},
{
"kind": "Content",
"text": "<1, CurrentVersion>, 0>]: "
},
{
"kind": "Reference",
"text": "Migration",
"canonicalReference": "@tldraw/store!Migration:type"
},
{
"kind": "Content",
"text": ";\n } : {\n [version in "
},
{
"kind": "Reference",
"text": "Exclude",
"canonicalReference": "!Exclude:type"
},
{
"kind": "Content",
"text": "<"
},
{
"kind": "Reference",
"text": "Range",
"canonicalReference": "@tldraw/store!~Range_2:type"
},
{
"kind": "Content",
"text": "<FirstVersion, CurrentVersion>, FirstVersion>]: "
},
{
"kind": "Reference",
"text": "Migration",
"canonicalReference": "@tldraw/store!Migration:type"
},
{
"kind": "Content",
"text": ";\n } : {\n [version in "
},
{
"kind": "Reference",
"text": "Exclude",
"canonicalReference": "!Exclude:type"
},
{
"kind": "Content",
"text": "<"
},
{
"kind": "Reference",
"text": "Range",
"canonicalReference": "@tldraw/store!~Range_2:type"
},
{
"kind": "Content",
"text": "<1, CurrentVersion>, 0>]: "
},
{
"kind": "Reference",
"text": "Migration",
"canonicalReference": "@tldraw/store!Migration:type"
},
{
"kind": "Content",
"text": ";\n } : never;\n subTypeKey?: string;\n subTypeMigrations?: "
},
{
"kind": "Reference",
"text": "Record",
"canonicalReference": "!Record:type"
},
{
"kind": "Content",
"text": "<string, "
},
{
"kind": "Reference",
"text": "BaseMigrationsInfo",
"canonicalReference": "@tldraw/store!~BaseMigrationsInfo:interface"
},
{
"kind": "Content",
"text": ">;\n}"
},
{
"kind": "Content",
"text": "): "
},
{
"kind": "Reference",
"text": "Migrations",
"canonicalReference": "@tldraw/store!Migrations:interface"
},
{
"kind": "Content",
"text": ";"
}
],
"fileUrlPath": "packages/store/src/lib/migrate.ts",
"returnTypeTokenRange": {
"startIndex": 37,
"endIndex": 38
},
"releaseTag": "Public",
"overloadIndex": 1,
"parameters": [
{
"parameterName": "opts",
"parameterTypeTokenRange": {
"startIndex": 13,
"endIndex": 36
},
"isOptional": false
}
],
"typeParameters": [
{
"typeParameterName": "FirstVersion",
"constraintTokenRange": {
"startIndex": 1,
"endIndex": 3
},
"defaultTypeTokenRange": {
"startIndex": 4,
"endIndex": 5
}
},
{
"typeParameterName": "CurrentVersion",
"constraintTokenRange": {
"startIndex": 6,
"endIndex": 10
},
"defaultTypeTokenRange": {
"startIndex": 11,
"endIndex": 12
}
}
],
"name": "defineMigrations"
},
{
"kind": "Function",
"canonicalReference": "@tldraw/store!devFreeze:function(1)",
"docComment": "/**\n * Freeze an object when in development mode. Copied from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze\n *\n * @param object - The object to freeze.\n *\n * @returns The frozen object when in development mode, or else the object when in other modes.\n *\n * @example\n * ```ts\n * const frozen = devFreeze({ a: 1 })\n * ```\n *\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export declare function devFreeze<T>(object: "
},
{
"kind": "Content",
"text": "T"
},
{
"kind": "Content",
"text": "): "
},
{
"kind": "Content",
"text": "T"
},
{
"kind": "Content",
"text": ";"
}
],
"fileUrlPath": "packages/store/src/lib/devFreeze.ts",
"returnTypeTokenRange": {
"startIndex": 3,
"endIndex": 4
},
"releaseTag": "Public",
"overloadIndex": 1,
"parameters": [
{
"parameterName": "object",
"parameterTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"isOptional": false
}
],
"typeParameters": [
{
"typeParameterName": "T",
"constraintTokenRange": {
"startIndex": 0,
"endIndex": 0
},
"defaultTypeTokenRange": {
"startIndex": 0,
"endIndex": 0
}
}
],
"name": "devFreeze"
},
{
"kind": "Function",
"canonicalReference": "@tldraw/store!getRecordVersion:function(1)",
"docComment": "/**\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export declare function getRecordVersion(record: "
},
{
"kind": "Reference",
"text": "UnknownRecord",
"canonicalReference": "@tldraw/store!UnknownRecord:type"
},
{
"kind": "Content",
"text": ", serializedSchema: "
},
{
"kind": "Reference",
"text": "SerializedSchema",
"canonicalReference": "@tldraw/store!SerializedSchema:interface"
},
{
"kind": "Content",
"text": "): "
},
{
"kind": "Reference",
"text": "RecordVersion",
"canonicalReference": "@tldraw/store!RecordVersion:type"
},
{
"kind": "Content",
"text": ";"
}
],
"fileUrlPath": "packages/store/src/lib/migrate.ts",
"returnTypeTokenRange": {
"startIndex": 5,
"endIndex": 6
},
"releaseTag": "Public",
"overloadIndex": 1,
"parameters": [
{
"parameterName": "record",
"parameterTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"isOptional": false
},
{
"parameterName": "serializedSchema",
"parameterTypeTokenRange": {
"startIndex": 3,
"endIndex": 4
},
"isOptional": false
}
],
"name": "getRecordVersion"
},
{
"kind": "TypeAlias",
"canonicalReference": "@tldraw/store!HistoryEntry:type",
"docComment": "/**\n * An entry containing changes that originated either by user actions or remote changes.\n *\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export type HistoryEntry<R extends "
},
{
"kind": "Reference",
"text": "UnknownRecord",
"canonicalReference": "@tldraw/store!UnknownRecord:type"
},
{
"kind": "Content",
"text": " = "
},
{
"kind": "Reference",
"text": "UnknownRecord",
"canonicalReference": "@tldraw/store!UnknownRecord:type"
},
{
"kind": "Content",
"text": "> = "
},
{
"kind": "Content",
"text": "{\n changes: "
},
{
"kind": "Reference",
"text": "RecordsDiff",
"canonicalReference": "@tldraw/store!RecordsDiff:type"
},
{
"kind": "Content",
"text": "<R>;\n source: "
},
{
"kind": "Reference",
"text": "ChangeSource",
"canonicalReference": "@tldraw/store!~ChangeSource:type"
},
{
"kind": "Content",
"text": ";\n}"
},
{
"kind": "Content",
"text": ";"
}
],
"fileUrlPath": "packages/store/src/lib/Store.ts",
"releaseTag": "Public",
"name": "HistoryEntry",
"typeParameters": [
{
"typeParameterName": "R",
"constraintTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"defaultTypeTokenRange": {
"startIndex": 3,
"endIndex": 4
}
}
],
"typeTokenRange": {
"startIndex": 5,
"endIndex": 10
}
},
{
"kind": "TypeAlias",
"canonicalReference": "@tldraw/store!IdOf:type",
"docComment": "/**\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export type IdOf<R extends "
},
{
"kind": "Reference",
"text": "UnknownRecord",
"canonicalReference": "@tldraw/store!UnknownRecord:type"
},
{
"kind": "Content",
"text": "> = "
},
{
"kind": "Content",
"text": "R['id']"
},
{
"kind": "Content",
"text": ";"
}
],
"fileUrlPath": "packages/store/src/lib/BaseRecord.ts",
"releaseTag": "Public",
"name": "IdOf",
"typeParameters": [
{
"typeParameterName": "R",
"constraintTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"defaultTypeTokenRange": {
"startIndex": 0,
"endIndex": 0
}
}
],
"typeTokenRange": {
"startIndex": 3,
"endIndex": 4
}
},
{
"kind": "Function",
"canonicalReference": "@tldraw/store!migrate:function(1)",
"docComment": "/**\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export declare function migrate<T>({ value, migrations, fromVersion, toVersion, }: "
},
{
"kind": "Content",
"text": "{\n value: unknown;\n migrations: "
},
{
"kind": "Reference",
"text": "Migrations",
"canonicalReference": "@tldraw/store!Migrations:interface"
},
{
"kind": "Content",
"text": ";\n fromVersion: number;\n toVersion: number;\n}"
},
{
"kind": "Content",
"text": "): "
},
{
"kind": "Reference",
"text": "MigrationResult",
"canonicalReference": "@tldraw/store!MigrationResult:type"
},
{
"kind": "Content",
"text": "<T>"
},
{
"kind": "Content",
"text": ";"
}
],
"fileUrlPath": "packages/store/src/lib/migrate.ts",
"returnTypeTokenRange": {
"startIndex": 5,
"endIndex": 7
},
"releaseTag": "Public",
"overloadIndex": 1,
"parameters": [
{
"parameterName": "{ value, migrations, fromVersion, toVersion, }",
"parameterTypeTokenRange": {
"startIndex": 1,
"endIndex": 4
},
"isOptional": false
}
],
"typeParameters": [
{
"typeParameterName": "T",
"constraintTokenRange": {
"startIndex": 0,
"endIndex": 0
},
"defaultTypeTokenRange": {
"startIndex": 0,
"endIndex": 0
}
}
],
"name": "migrate"
},
{
"kind": "Function",
"canonicalReference": "@tldraw/store!migrateRecord:function(1)",
"docComment": "/**\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export declare function migrateRecord<R extends "
},
{
"kind": "Reference",
"text": "UnknownRecord",
"canonicalReference": "@tldraw/store!UnknownRecord:type"
},
{
"kind": "Content",
"text": ">({ record, migrations, fromVersion, toVersion, }: "
},
{
"kind": "Content",
"text": "{\n record: unknown;\n migrations: "
},
{
"kind": "Reference",
"text": "Migrations",
"canonicalReference": "@tldraw/store!Migrations:interface"
},
{
"kind": "Content",
"text": ";\n fromVersion: number;\n toVersion: number;\n}"
},
{
"kind": "Content",
"text": "): "
},
{
"kind": "Reference",
"text": "MigrationResult",
"canonicalReference": "@tldraw/store!MigrationResult:type"
},
{
"kind": "Content",
"text": "<R>"
},
{
"kind": "Content",
"text": ";"
}
],
"fileUrlPath": "packages/store/src/lib/migrate.ts",
"returnTypeTokenRange": {
"startIndex": 7,
"endIndex": 9
},
"releaseTag": "Public",
"overloadIndex": 1,
"parameters": [
{
"parameterName": "{ record, migrations, fromVersion, toVersion, }",
"parameterTypeTokenRange": {
"startIndex": 3,
"endIndex": 6
},
"isOptional": false
}
],
"typeParameters": [
{
"typeParameterName": "R",
"constraintTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"defaultTypeTokenRange": {
"startIndex": 0,
"endIndex": 0
}
}
],
"name": "migrateRecord"
},
{
"kind": "TypeAlias",
"canonicalReference": "@tldraw/store!Migration:type",
"docComment": "/**\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export type Migration<Before = "
},
{
"kind": "Content",
"text": "any"
},
{
"kind": "Content",
"text": ", After = "
},
{
"kind": "Content",
"text": "any"
},
{
"kind": "Content",
"text": "> = "
},
{
"kind": "Content",
"text": "{\n up: (oldState: Before) => After;\n down: (newState: After) => Before;\n}"
},
{
"kind": "Content",
"text": ";"
}
],
"fileUrlPath": "packages/store/src/lib/migrate.ts",
"releaseTag": "Public",
"name": "Migration",
"typeParameters": [
{
"typeParameterName": "Before",
"constraintTokenRange": {
"startIndex": 0,
"endIndex": 0
},
"defaultTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
}
},
{
"typeParameterName": "After",
"constraintTokenRange": {
"startIndex": 0,
"endIndex": 0
},
"defaultTypeTokenRange": {
"startIndex": 3,
"endIndex": 4
}
}
],
"typeTokenRange": {
"startIndex": 5,
"endIndex": 6
}
},
{
"kind": "Enum",
"canonicalReference": "@tldraw/store!MigrationFailureReason:enum",
"docComment": "/**\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export declare enum MigrationFailureReason "
}
],
"fileUrlPath": "packages/store/src/lib/migrate.ts",
"releaseTag": "Public",
"name": "MigrationFailureReason",
"preserveMemberOrder": false,
"members": [
{
"kind": "EnumMember",
"canonicalReference": "@tldraw/store!MigrationFailureReason.IncompatibleSubtype:member",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "IncompatibleSubtype = "
},
{
"kind": "Content",
"text": "\"incompatible-subtype\""
}
],
"initializerTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"releaseTag": "Public",
"name": "IncompatibleSubtype"
},
{
"kind": "EnumMember",
"canonicalReference": "@tldraw/store!MigrationFailureReason.MigrationError:member",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "MigrationError = "
},
{
"kind": "Content",
"text": "\"migration-error\""
}
],
"initializerTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"releaseTag": "Public",
"name": "MigrationError"
},
{
"kind": "EnumMember",
"canonicalReference": "@tldraw/store!MigrationFailureReason.TargetVersionTooNew:member",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "TargetVersionTooNew = "
},
{
"kind": "Content",
"text": "\"target-version-too-new\""
}
],
"initializerTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"releaseTag": "Public",
"name": "TargetVersionTooNew"
},
{
"kind": "EnumMember",
"canonicalReference": "@tldraw/store!MigrationFailureReason.TargetVersionTooOld:member",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "TargetVersionTooOld = "
},
{
"kind": "Content",
"text": "\"target-version-too-old\""
}
],
"initializerTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"releaseTag": "Public",
"name": "TargetVersionTooOld"
},
{
"kind": "EnumMember",
"canonicalReference": "@tldraw/store!MigrationFailureReason.UnknownType:member",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "UnknownType = "
},
{
"kind": "Content",
"text": "\"unknown-type\""
}
],
"initializerTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"releaseTag": "Public",
"name": "UnknownType"
},
{
"kind": "EnumMember",
"canonicalReference": "@tldraw/store!MigrationFailureReason.UnrecognizedSubtype:member",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "UnrecognizedSubtype = "
},
{
"kind": "Content",
"text": "\"unrecognized-subtype\""
}
],
"initializerTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"releaseTag": "Public",
"name": "UnrecognizedSubtype"
}
]
},
{
"kind": "TypeAlias",
"canonicalReference": "@tldraw/store!MigrationResult:type",
"docComment": "/**\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export type MigrationResult<T> = "
},
{
"kind": "Content",
"text": "{\n type: 'error';\n reason: "
},
{
"kind": "Reference",
"text": "MigrationFailureReason",
"canonicalReference": "@tldraw/store!MigrationFailureReason:enum"
},
{
"kind": "Content",
"text": ";\n} | {\n type: 'success';\n value: T;\n}"
},
{
"kind": "Content",
"text": ";"
}
],
"fileUrlPath": "packages/store/src/lib/migrate.ts",
"releaseTag": "Public",
"name": "MigrationResult",
"typeParameters": [
{
"typeParameterName": "T",
"constraintTokenRange": {
"startIndex": 0,
"endIndex": 0
},
"defaultTypeTokenRange": {
"startIndex": 0,
"endIndex": 0
}
}
],
"typeTokenRange": {
"startIndex": 1,
"endIndex": 4
}
},
{
"kind": "Interface",
"canonicalReference": "@tldraw/store!Migrations:interface",
"docComment": "/**\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export interface Migrations extends "
},
{
"kind": "Reference",
"text": "BaseMigrationsInfo",
"canonicalReference": "@tldraw/store!~BaseMigrationsInfo:interface"
},
{
"kind": "Content",
"text": " "
}
],
"fileUrlPath": "packages/store/src/lib/migrate.ts",
"releaseTag": "Public",
"name": "Migrations",
"preserveMemberOrder": false,
"members": [
{
"kind": "PropertySignature",
"canonicalReference": "@tldraw/store!Migrations#subTypeKey:member",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "subTypeKey?: "
},
{
"kind": "Content",
"text": "string"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": false,
"isOptional": true,
"releaseTag": "Public",
"name": "subTypeKey",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
}
},
{
"kind": "PropertySignature",
"canonicalReference": "@tldraw/store!Migrations#subTypeMigrations:member",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "subTypeMigrations?: "
},
{
"kind": "Reference",
"text": "Record",
"canonicalReference": "!Record:type"
},
{
"kind": "Content",
"text": "<string, "
},
{
"kind": "Reference",
"text": "BaseMigrationsInfo",
"canonicalReference": "@tldraw/store!~BaseMigrationsInfo:interface"
},
{
"kind": "Content",
"text": ">"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": false,
"isOptional": true,
"releaseTag": "Public",
"name": "subTypeMigrations",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 5
}
}
],
"extendsTokenRanges": [
{
"startIndex": 1,
"endIndex": 2
}
]
},
{
"kind": "TypeAlias",
"canonicalReference": "@tldraw/store!RecordId:type",
"docComment": "/**\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export type RecordId<R extends "
},
{
"kind": "Reference",
"text": "UnknownRecord",
"canonicalReference": "@tldraw/store!UnknownRecord:type"
},
{
"kind": "Content",
"text": "> = "
},
{
"kind": "Content",
"text": "string & {\n __type__: R;\n}"
},
{
"kind": "Content",
"text": ";"
}
],
"fileUrlPath": "packages/store/src/lib/BaseRecord.ts",
"releaseTag": "Public",
"name": "RecordId",
"typeParameters": [
{
"typeParameterName": "R",
"constraintTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"defaultTypeTokenRange": {
"startIndex": 0,
"endIndex": 0
}
}
],
"typeTokenRange": {
"startIndex": 3,
"endIndex": 4
}
},
{
"kind": "TypeAlias",
"canonicalReference": "@tldraw/store!RecordsDiff:type",
"docComment": "/**\n * A diff describing the changes to a record.\n *\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export type RecordsDiff<R extends "
},
{
"kind": "Reference",
"text": "UnknownRecord",
"canonicalReference": "@tldraw/store!UnknownRecord:type"
},
{
"kind": "Content",
"text": "> = "
},
{
"kind": "Content",
"text": "{\n added: "
},
{
"kind": "Reference",
"text": "Record",
"canonicalReference": "!Record:type"
},
{
"kind": "Content",
"text": "<"
},
{
"kind": "Reference",
"text": "IdOf",
"canonicalReference": "@tldraw/store!IdOf:type"
},
{
"kind": "Content",
"text": "<R>, R>;\n updated: "
},
{
"kind": "Reference",
"text": "Record",
"canonicalReference": "!Record:type"
},
{
"kind": "Content",
"text": "<"
},
{
"kind": "Reference",
"text": "IdOf",
"canonicalReference": "@tldraw/store!IdOf:type"
},
{
"kind": "Content",
"text": "<R>, [from: R, to: R]>;\n removed: "
},
{
"kind": "Reference",
"text": "Record",
"canonicalReference": "!Record:type"
},
{
"kind": "Content",
"text": "<"
},
{
"kind": "Reference",
"text": "IdOf",
"canonicalReference": "@tldraw/store!IdOf:type"
},
{
"kind": "Content",
"text": "<R>, R>;\n}"
},
{
"kind": "Content",
"text": ";"
}
],
"fileUrlPath": "packages/store/src/lib/Store.ts",
"releaseTag": "Public",
"name": "RecordsDiff",
"typeParameters": [
{
"typeParameterName": "R",
"constraintTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"defaultTypeTokenRange": {
"startIndex": 0,
"endIndex": 0
}
}
],
"typeTokenRange": {
"startIndex": 3,
"endIndex": 16
}
},
{
"kind": "Class",
"canonicalReference": "@tldraw/store!RecordType:class",
"docComment": "/**\n * A record type is a type that can be stored in a record store. It is created with `createRecordType`.\n *\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export declare class RecordType<R extends "
},
{
"kind": "Reference",
"text": "UnknownRecord",
"canonicalReference": "@tldraw/store!UnknownRecord:type"
},
{
"kind": "Content",
"text": ", RequiredProperties extends "
},
{
"kind": "Content",
"text": "keyof "
},
{
"kind": "Reference",
"text": "Omit",
"canonicalReference": "!Omit:type"
},
{
"kind": "Content",
"text": "<R, 'id' | 'typeName'>"
},
{
"kind": "Content",
"text": "> "
}
],
"fileUrlPath": "packages/store/src/lib/RecordType.ts",
"releaseTag": "Public",
"typeParameters": [
{
"typeParameterName": "R",
"constraintTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"defaultTypeTokenRange": {
"startIndex": 0,
"endIndex": 0
}
},
{
"typeParameterName": "RequiredProperties",
"constraintTokenRange": {
"startIndex": 3,
"endIndex": 6
},
"defaultTypeTokenRange": {
"startIndex": 0,
"endIndex": 0
}
}
],
"isAbstract": false,
"name": "RecordType",
"preserveMemberOrder": false,
"members": [
{
"kind": "Constructor",
"canonicalReference": "@tldraw/store!RecordType:constructor(1)",
"docComment": "/**\n * Constructs a new instance of the `RecordType` class\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "constructor(\n typeName: "
},
{
"kind": "Content",
"text": "R['typeName']"
},
{
"kind": "Content",
"text": ", config: "
},
{
"kind": "Content",
"text": "{\n readonly createDefaultProperties: () => "
},
{
"kind": "Reference",
"text": "Exclude",
"canonicalReference": "!Exclude:type"
},
{
"kind": "Content",
"text": "<"
},
{
"kind": "Reference",
"text": "OmitMeta",
"canonicalReference": "@tldraw/store!~OmitMeta:type"
},
{
"kind": "Content",
"text": "<R>, RequiredProperties>;\n readonly migrations: "
},
{
"kind": "Reference",
"text": "Migrations",
"canonicalReference": "@tldraw/store!Migrations:interface"
},
{
"kind": "Content",
Faster validations + record reference stability at the same time (#2848) This PR adds a validation mode whereby previous known-to-be-valid values can be used to speed up the validation process itself. At the same time it enables us to do fine-grained equality checking on records much more quickly than by using something like lodash isEqual, and using that we can prevent triggering effects for record updates that don't actually alter any values in the store. Here's some preliminary perf testing of average time spent in `store.put()` during some common interactions | task | before (ms) | after (ms) | | ---- | ---- | ---- | | drawing lines | 0.0403 | 0.0214 | | drawing boxes | 0.0408 | 0.0348 | | translating lines | 0.0352 | 0.0042 | | translating boxes | 0.0051 | 0.0032 | | rotating lines | 0.0312 | 0.0065 | | rotating boxes | 0.0053 | 0.0035 | | brush selecting boxes | 0.0200 | 0.0232 | | traversal with shapes | 0.0130 | 0.0108 | | traversal without shapes | 0.0201 | 0.0173 | **traversal** means moving the camera and pointer around the canvas #### Discussion At the scale of hundredths of a millisecond these .put operations are so fast that even if they became literally instantaneous the change would not be human perceptible. That said, there is an overall marked improvement here. Especially for dealing with draw shapes. These figures are also mostly in line with expectations, aside from a couple of things: - I don't understand why the `brush selecting boxes` task got slower after the change. - I don't understand why the `traversal` tasks are slower than the `translating boxes` task, both before and after. I would expect that .putting shape records would be much slower than .putting pointer/camera records (since the latter have fewer and simpler properties) ### Change Type - [x] `patch` — Bug fix ### Test Plan 1. Add a step-by-step description of how to test your PR here. 2. - [ ] Unit Tests - [ ] End to end tests ### Release Notes - Add a brief release note for your PR here.
2024-02-20 12:35:25 +00:00
"text": ";\n readonly validator?: "
},
{
"kind": "Reference",
"text": "StoreValidator",
"canonicalReference": "@tldraw/store!StoreValidator:type"
},
{
"kind": "Content",
"text": "<R>;\n readonly scope?: "
},
{
"kind": "Reference",
"text": "RecordScope",
"canonicalReference": "@tldraw/store!~RecordScope:type"
},
{
"kind": "Content",
"text": ";\n }"
},
{
"kind": "Content",
"text": ");"
}
],
"releaseTag": "Public",
"isProtected": false,
"overloadIndex": 1,
"parameters": [
{
"parameterName": "typeName",
"parameterTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"isOptional": false
},
{
"parameterName": "config",
"parameterTypeTokenRange": {
"startIndex": 3,
"endIndex": 14
},
"isOptional": false
}
]
},
{
"kind": "Method",
"canonicalReference": "@tldraw/store!RecordType#clone:member(1)",
"docComment": "/**\n * Clone a record of this type.\n *\n * @param record - The record to clone.\n *\n * @returns The cloned record.\n *\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "clone(record: "
},
{
"kind": "Content",
"text": "R"
},
{
"kind": "Content",
"text": "): "
},
{
"kind": "Content",
"text": "R"
},
{
"kind": "Content",
"text": ";"
}
],
"isStatic": false,
"returnTypeTokenRange": {
"startIndex": 3,
"endIndex": 4
},
"releaseTag": "Public",
"isProtected": false,
"overloadIndex": 1,
"parameters": [
{
"parameterName": "record",
"parameterTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"isOptional": false
}
],
"isOptional": false,
"isAbstract": false,
"name": "clone"
},
{
"kind": "Method",
"canonicalReference": "@tldraw/store!RecordType#create:member(1)",
"docComment": "/**\n * Create a new record of this type.\n *\n * @param properties - The properties of the record.\n *\n * @returns The new record.\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "create(properties: "
},
{
"kind": "Reference",
"text": "Pick",
"canonicalReference": "!Pick:type"
},
{
"kind": "Content",
"text": "<R, RequiredProperties> & "
},
{
"kind": "Reference",
"text": "Omit",
"canonicalReference": "!Omit:type"
},
{
"kind": "Content",
"text": "<"
},
{
"kind": "Reference",
"text": "Partial",
"canonicalReference": "!Partial:type"
},
{
"kind": "Content",
"text": "<R>, RequiredProperties>"
},
{
"kind": "Content",
"text": "): "
},
{
"kind": "Content",
"text": "R"
},
{
"kind": "Content",
"text": ";"
}
],
"isStatic": false,
"returnTypeTokenRange": {
"startIndex": 8,
"endIndex": 9
},
"releaseTag": "Public",
"isProtected": false,
"overloadIndex": 1,
"parameters": [
{
"parameterName": "properties",
"parameterTypeTokenRange": {
"startIndex": 1,
"endIndex": 7
},
"isOptional": false
}
],
"isOptional": false,
"isAbstract": false,
"name": "create"
},
{
"kind": "Method",
"canonicalReference": "@tldraw/store!RecordType#createCustomId:member(1)",
"docComment": "/**\n * Create a new ID for this record type based on the given ID.\n *\n * @deprecated\n *\n * - Use `createId` instead.\n *\n * @param id - The ID to base the new ID on.\n *\n * @returns The new ID.\n *\n * @example\n * ```ts\n * const id = recordType.createCustomId('myId')\n * ```\n *\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "createCustomId(id: "
},
{
"kind": "Content",
"text": "string"
},
{
"kind": "Content",
"text": "): "
},
{
"kind": "Reference",
"text": "IdOf",
"canonicalReference": "@tldraw/store!IdOf:type"
},
{
"kind": "Content",
"text": "<R>"
},
{
"kind": "Content",
"text": ";"
}
],
"isStatic": false,
"returnTypeTokenRange": {
"startIndex": 3,
"endIndex": 5
},
"releaseTag": "Public",
"isProtected": false,
"overloadIndex": 1,
"parameters": [
{
"parameterName": "id",
"parameterTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"isOptional": false
}
],
"isOptional": false,
"isAbstract": false,
"name": "createCustomId"
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!RecordType#createDefaultProperties:member",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "readonly createDefaultProperties: "
},
{
"kind": "Content",
"text": "() => "
},
{
"kind": "Reference",
"text": "Exclude",
"canonicalReference": "!Exclude:type"
},
{
"kind": "Content",
"text": "<"
},
{
"kind": "Reference",
"text": "OmitMeta",
"canonicalReference": "@tldraw/store!~OmitMeta:type"
},
{
"kind": "Content",
"text": "<R>, RequiredProperties>"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": true,
"isOptional": false,
"releaseTag": "Public",
"name": "createDefaultProperties",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 6
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Method",
"canonicalReference": "@tldraw/store!RecordType#createId:member(1)",
"docComment": "/**\n * Create a new ID for this record type.\n *\n * @returns The new ID.\n *\n * @example\n * ```ts\n * const id = recordType.createId()\n * ```\n *\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "createId(customUniquePart?: "
},
{
"kind": "Content",
"text": "string"
},
{
"kind": "Content",
"text": "): "
},
{
"kind": "Reference",
"text": "IdOf",
"canonicalReference": "@tldraw/store!IdOf:type"
},
{
"kind": "Content",
"text": "<R>"
},
{
"kind": "Content",
"text": ";"
}
],
"isStatic": false,
"returnTypeTokenRange": {
"startIndex": 3,
"endIndex": 5
},
"releaseTag": "Public",
"isProtected": false,
"overloadIndex": 1,
"parameters": [
{
"parameterName": "customUniquePart",
"parameterTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"isOptional": true
}
],
"isOptional": false,
"isAbstract": false,
"name": "createId"
},
{
"kind": "Method",
"canonicalReference": "@tldraw/store!RecordType#isId:member(1)",
"docComment": "/**\n * Check whether an id is an id of this type.\n *\n * @param id - The id to check.\n *\n * @returns Whether the id is an id of this type.\n *\n * @example\n * ```ts\n * const result = recordType.isIn('someId')\n * ```\n *\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "isId(id?: "
},
{
"kind": "Content",
"text": "string"
},
{
"kind": "Content",
"text": "): "
},
{
"kind": "Reference",
"text": "id",
"canonicalReference": "@tldraw/store!~id"
},
{
"kind": "Content",
"text": " is "
},
{
"kind": "Reference",
"text": "IdOf",
"canonicalReference": "@tldraw/store!IdOf:type"
},
{
"kind": "Content",
"text": "<R>"
},
{
"kind": "Content",
"text": ";"
}
],
"isStatic": false,
"returnTypeTokenRange": {
"startIndex": 3,
"endIndex": 7
},
"releaseTag": "Public",
"isProtected": false,
"overloadIndex": 1,
"parameters": [
{
"parameterName": "id",
"parameterTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"isOptional": true
}
],
"isOptional": false,
"isAbstract": false,
"name": "isId"
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!RecordType#isInstance:member",
"docComment": "/**\n * Check whether a record is an instance of this record type.\n *\n * @param record - The record to check.\n *\n * @returns Whether the record is an instance of this record type.\n *\n * @example\n * ```ts\n * const result = recordType.isInstance(someRecord)\n * ```\n *\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "isInstance: "
},
{
"kind": "Content",
"text": "(record?: "
},
{
"kind": "Reference",
"text": "UnknownRecord",
"canonicalReference": "@tldraw/store!UnknownRecord:type"
},
{
"kind": "Content",
"text": ") => "
},
{
"kind": "Reference",
"text": "record",
"canonicalReference": "@tldraw/store!~record"
},
{
"kind": "Content",
"text": " is R"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": false,
"isOptional": false,
"releaseTag": "Public",
"name": "isInstance",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 6
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!RecordType#migrations:member",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "readonly migrations: "
},
{
"kind": "Reference",
"text": "Migrations",
"canonicalReference": "@tldraw/store!Migrations:interface"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": true,
"isOptional": false,
"releaseTag": "Public",
"name": "migrations",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Method",
"canonicalReference": "@tldraw/store!RecordType#parseId:member(1)",
"docComment": "/**\n * Takes an id like `user:123` and returns the part after the colon `123`\n *\n * @param id - The id\n *\n * @returns \n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "parseId(id: "
},
{
"kind": "Reference",
"text": "IdOf",
"canonicalReference": "@tldraw/store!IdOf:type"
},
{
"kind": "Content",
"text": "<R>"
},
{
"kind": "Content",
"text": "): "
},
{
"kind": "Content",
"text": "string"
},
{
"kind": "Content",
"text": ";"
}
],
"isStatic": false,
"returnTypeTokenRange": {
"startIndex": 4,
"endIndex": 5
},
"releaseTag": "Public",
"isProtected": false,
"overloadIndex": 1,
"parameters": [
{
"parameterName": "id",
"parameterTypeTokenRange": {
"startIndex": 1,
"endIndex": 3
},
"isOptional": false
}
],
"isOptional": false,
"isAbstract": false,
"name": "parseId"
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!RecordType#scope:member",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "readonly scope: "
},
{
"kind": "Reference",
"text": "RecordScope",
"canonicalReference": "@tldraw/store!~RecordScope:type"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": true,
"isOptional": false,
"releaseTag": "Public",
"name": "scope",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!RecordType#typeName:member",
"docComment": "/**\n * The unique type associated with this record.\n *\n * @public @readonly\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "readonly typeName: "
},
{
"kind": "Content",
"text": "R['typeName']"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": true,
"isOptional": false,
"releaseTag": "Public",
"name": "typeName",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Method",
"canonicalReference": "@tldraw/store!RecordType#validate:member(1)",
"docComment": "/**\n * Check that the passed in record passes the validations for this type. Returns its input correctly typed if it does, but throws an error otherwise.\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "validate(record: "
},
{
"kind": "Content",
"text": "unknown"
},
Faster validations + record reference stability at the same time (#2848) This PR adds a validation mode whereby previous known-to-be-valid values can be used to speed up the validation process itself. At the same time it enables us to do fine-grained equality checking on records much more quickly than by using something like lodash isEqual, and using that we can prevent triggering effects for record updates that don't actually alter any values in the store. Here's some preliminary perf testing of average time spent in `store.put()` during some common interactions | task | before (ms) | after (ms) | | ---- | ---- | ---- | | drawing lines | 0.0403 | 0.0214 | | drawing boxes | 0.0408 | 0.0348 | | translating lines | 0.0352 | 0.0042 | | translating boxes | 0.0051 | 0.0032 | | rotating lines | 0.0312 | 0.0065 | | rotating boxes | 0.0053 | 0.0035 | | brush selecting boxes | 0.0200 | 0.0232 | | traversal with shapes | 0.0130 | 0.0108 | | traversal without shapes | 0.0201 | 0.0173 | **traversal** means moving the camera and pointer around the canvas #### Discussion At the scale of hundredths of a millisecond these .put operations are so fast that even if they became literally instantaneous the change would not be human perceptible. That said, there is an overall marked improvement here. Especially for dealing with draw shapes. These figures are also mostly in line with expectations, aside from a couple of things: - I don't understand why the `brush selecting boxes` task got slower after the change. - I don't understand why the `traversal` tasks are slower than the `translating boxes` task, both before and after. I would expect that .putting shape records would be much slower than .putting pointer/camera records (since the latter have fewer and simpler properties) ### Change Type - [x] `patch` — Bug fix ### Test Plan 1. Add a step-by-step description of how to test your PR here. 2. - [ ] Unit Tests - [ ] End to end tests ### Release Notes - Add a brief release note for your PR here.
2024-02-20 12:35:25 +00:00
{
"kind": "Content",
"text": ", recordBefore?: "
},
{
"kind": "Content",
"text": "R"
},
{
"kind": "Content",
"text": "): "
},
{
"kind": "Content",
"text": "R"
},
{
"kind": "Content",
"text": ";"
}
],
"isStatic": false,
"returnTypeTokenRange": {
Faster validations + record reference stability at the same time (#2848) This PR adds a validation mode whereby previous known-to-be-valid values can be used to speed up the validation process itself. At the same time it enables us to do fine-grained equality checking on records much more quickly than by using something like lodash isEqual, and using that we can prevent triggering effects for record updates that don't actually alter any values in the store. Here's some preliminary perf testing of average time spent in `store.put()` during some common interactions | task | before (ms) | after (ms) | | ---- | ---- | ---- | | drawing lines | 0.0403 | 0.0214 | | drawing boxes | 0.0408 | 0.0348 | | translating lines | 0.0352 | 0.0042 | | translating boxes | 0.0051 | 0.0032 | | rotating lines | 0.0312 | 0.0065 | | rotating boxes | 0.0053 | 0.0035 | | brush selecting boxes | 0.0200 | 0.0232 | | traversal with shapes | 0.0130 | 0.0108 | | traversal without shapes | 0.0201 | 0.0173 | **traversal** means moving the camera and pointer around the canvas #### Discussion At the scale of hundredths of a millisecond these .put operations are so fast that even if they became literally instantaneous the change would not be human perceptible. That said, there is an overall marked improvement here. Especially for dealing with draw shapes. These figures are also mostly in line with expectations, aside from a couple of things: - I don't understand why the `brush selecting boxes` task got slower after the change. - I don't understand why the `traversal` tasks are slower than the `translating boxes` task, both before and after. I would expect that .putting shape records would be much slower than .putting pointer/camera records (since the latter have fewer and simpler properties) ### Change Type - [x] `patch` — Bug fix ### Test Plan 1. Add a step-by-step description of how to test your PR here. 2. - [ ] Unit Tests - [ ] End to end tests ### Release Notes - Add a brief release note for your PR here.
2024-02-20 12:35:25 +00:00
"startIndex": 5,
"endIndex": 6
},
"releaseTag": "Public",
"isProtected": false,
"overloadIndex": 1,
"parameters": [
{
"parameterName": "record",
"parameterTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"isOptional": false
Faster validations + record reference stability at the same time (#2848) This PR adds a validation mode whereby previous known-to-be-valid values can be used to speed up the validation process itself. At the same time it enables us to do fine-grained equality checking on records much more quickly than by using something like lodash isEqual, and using that we can prevent triggering effects for record updates that don't actually alter any values in the store. Here's some preliminary perf testing of average time spent in `store.put()` during some common interactions | task | before (ms) | after (ms) | | ---- | ---- | ---- | | drawing lines | 0.0403 | 0.0214 | | drawing boxes | 0.0408 | 0.0348 | | translating lines | 0.0352 | 0.0042 | | translating boxes | 0.0051 | 0.0032 | | rotating lines | 0.0312 | 0.0065 | | rotating boxes | 0.0053 | 0.0035 | | brush selecting boxes | 0.0200 | 0.0232 | | traversal with shapes | 0.0130 | 0.0108 | | traversal without shapes | 0.0201 | 0.0173 | **traversal** means moving the camera and pointer around the canvas #### Discussion At the scale of hundredths of a millisecond these .put operations are so fast that even if they became literally instantaneous the change would not be human perceptible. That said, there is an overall marked improvement here. Especially for dealing with draw shapes. These figures are also mostly in line with expectations, aside from a couple of things: - I don't understand why the `brush selecting boxes` task got slower after the change. - I don't understand why the `traversal` tasks are slower than the `translating boxes` task, both before and after. I would expect that .putting shape records would be much slower than .putting pointer/camera records (since the latter have fewer and simpler properties) ### Change Type - [x] `patch` — Bug fix ### Test Plan 1. Add a step-by-step description of how to test your PR here. 2. - [ ] Unit Tests - [ ] End to end tests ### Release Notes - Add a brief release note for your PR here.
2024-02-20 12:35:25 +00:00
},
{
"parameterName": "recordBefore",
"parameterTypeTokenRange": {
"startIndex": 3,
"endIndex": 4
},
"isOptional": true
}
],
"isOptional": false,
"isAbstract": false,
"name": "validate"
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!RecordType#validator:member",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "readonly validator: "
},
{
"kind": "Reference",
"text": "StoreValidator",
"canonicalReference": "@tldraw/store!StoreValidator:type"
},
{
"kind": "Content",
"text": "<R>"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": true,
"isOptional": false,
"releaseTag": "Public",
"name": "validator",
"propertyTypeTokenRange": {
"startIndex": 1,
Faster validations + record reference stability at the same time (#2848) This PR adds a validation mode whereby previous known-to-be-valid values can be used to speed up the validation process itself. At the same time it enables us to do fine-grained equality checking on records much more quickly than by using something like lodash isEqual, and using that we can prevent triggering effects for record updates that don't actually alter any values in the store. Here's some preliminary perf testing of average time spent in `store.put()` during some common interactions | task | before (ms) | after (ms) | | ---- | ---- | ---- | | drawing lines | 0.0403 | 0.0214 | | drawing boxes | 0.0408 | 0.0348 | | translating lines | 0.0352 | 0.0042 | | translating boxes | 0.0051 | 0.0032 | | rotating lines | 0.0312 | 0.0065 | | rotating boxes | 0.0053 | 0.0035 | | brush selecting boxes | 0.0200 | 0.0232 | | traversal with shapes | 0.0130 | 0.0108 | | traversal without shapes | 0.0201 | 0.0173 | **traversal** means moving the camera and pointer around the canvas #### Discussion At the scale of hundredths of a millisecond these .put operations are so fast that even if they became literally instantaneous the change would not be human perceptible. That said, there is an overall marked improvement here. Especially for dealing with draw shapes. These figures are also mostly in line with expectations, aside from a couple of things: - I don't understand why the `brush selecting boxes` task got slower after the change. - I don't understand why the `traversal` tasks are slower than the `translating boxes` task, both before and after. I would expect that .putting shape records would be much slower than .putting pointer/camera records (since the latter have fewer and simpler properties) ### Change Type - [x] `patch` — Bug fix ### Test Plan 1. Add a step-by-step description of how to test your PR here. 2. - [ ] Unit Tests - [ ] End to end tests ### Release Notes - Add a brief release note for your PR here.
2024-02-20 12:35:25 +00:00
"endIndex": 3
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Method",
"canonicalReference": "@tldraw/store!RecordType#withDefaultProperties:member(1)",
"docComment": "/**\n * Create a new RecordType that has the same type name as this RecordType and includes the given default properties.\n *\n * @param fn - A function that returns the default properties of the new RecordType.\n *\n * @returns The new RecordType.\n *\n * @example\n * ```ts\n * const authorType = createRecordType('author', () => ({ living: true }))\n * const deadAuthorType = authorType.withDefaultProperties({ living: false })\n * ```\n *\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "withDefaultProperties<DefaultProps extends "
},
{
"kind": "Reference",
"text": "Omit",
"canonicalReference": "!Omit:type"
},
{
"kind": "Content",
"text": "<"
},
{
"kind": "Reference",
"text": "Partial",
"canonicalReference": "!Partial:type"
},
{
"kind": "Content",
"text": "<R>, 'id' | 'typeName'>"
},
{
"kind": "Content",
"text": ">(createDefaultProperties: "
},
{
"kind": "Content",
"text": "() => DefaultProps"
},
{
"kind": "Content",
"text": "): "
},
{
"kind": "Reference",
"text": "RecordType",
"canonicalReference": "@tldraw/store!RecordType:class"
},
{
"kind": "Content",
"text": "<R, "
},
{
"kind": "Reference",
"text": "Exclude",
"canonicalReference": "!Exclude:type"
},
{
"kind": "Content",
"text": "<RequiredProperties, keyof DefaultProps>>"
},
{
"kind": "Content",
"text": ";"
}
],
"typeParameters": [
{
"typeParameterName": "DefaultProps",
"constraintTokenRange": {
"startIndex": 1,
"endIndex": 5
},
"defaultTypeTokenRange": {
"startIndex": 0,
"endIndex": 0
}
}
],
"isStatic": false,
"returnTypeTokenRange": {
"startIndex": 8,
"endIndex": 12
},
"releaseTag": "Public",
"isProtected": false,
"overloadIndex": 1,
"parameters": [
{
"parameterName": "createDefaultProperties",
"parameterTypeTokenRange": {
"startIndex": 6,
"endIndex": 7
},
"isOptional": false
}
],
"isOptional": false,
"isAbstract": false,
"name": "withDefaultProperties"
}
],
"implementsTokenRanges": []
},
{
"kind": "TypeAlias",
"canonicalReference": "@tldraw/store!RecordVersion:type",
"docComment": "/**\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export type RecordVersion = "
},
{
"kind": "Content",
"text": "{\n rootVersion: number;\n subTypeVersion?: number;\n}"
},
{
"kind": "Content",
"text": ";"
}
],
"fileUrlPath": "packages/store/src/lib/migrate.ts",
"releaseTag": "Public",
"name": "RecordVersion",
"typeTokenRange": {
"startIndex": 1,
"endIndex": 2
}
},
{
"kind": "Function",
"canonicalReference": "@tldraw/store!reverseRecordsDiff:function(1)",
"docComment": "/**\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export declare function reverseRecordsDiff(diff: "
},
{
"kind": "Reference",
"text": "RecordsDiff",
"canonicalReference": "@tldraw/store!RecordsDiff:type"
},
{
"kind": "Content",
"text": "<any>"
},
{
"kind": "Content",
"text": "): "
},
{
"kind": "Reference",
"text": "RecordsDiff",
"canonicalReference": "@tldraw/store!RecordsDiff:type"
},
{
"kind": "Content",
"text": "<any>"
},
{
"kind": "Content",
"text": ";"
}
],
"fileUrlPath": "packages/store/src/lib/Store.ts",
"returnTypeTokenRange": {
"startIndex": 4,
"endIndex": 6
},
"releaseTag": "Public",
"overloadIndex": 1,
"parameters": [
{
"parameterName": "diff",
"parameterTypeTokenRange": {
"startIndex": 1,
"endIndex": 3
},
"isOptional": false
}
],
"name": "reverseRecordsDiff"
},
{
"kind": "Interface",
"canonicalReference": "@tldraw/store!SerializedSchema:interface",
"docComment": "/**\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export interface SerializedSchema "
}
],
"fileUrlPath": "packages/store/src/lib/StoreSchema.ts",
"releaseTag": "Public",
"name": "SerializedSchema",
"preserveMemberOrder": false,
"members": [
{
"kind": "PropertySignature",
"canonicalReference": "@tldraw/store!SerializedSchema#recordVersions:member",
"docComment": "/**\n * Record versions are the versions for each record type. e.g. adding a new field to a record\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "recordVersions: "
},
{
"kind": "Reference",
"text": "Record",
"canonicalReference": "!Record:type"
},
{
"kind": "Content",
"text": "<string, {\n version: number;\n subTypeVersions: "
},
{
"kind": "Reference",
"text": "Record",
"canonicalReference": "!Record:type"
},
{
"kind": "Content",
"text": "<string, number>;\n subTypeKey: string;\n } | {\n version: number;\n }>"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": false,
"isOptional": false,
"releaseTag": "Public",
"name": "recordVersions",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 5
}
},
{
"kind": "PropertySignature",
"canonicalReference": "@tldraw/store!SerializedSchema#schemaVersion:member",
"docComment": "/**\n * Schema version is the version for this type you're looking at right now\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "schemaVersion: "
},
{
"kind": "Content",
"text": "number"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": false,
"isOptional": false,
"releaseTag": "Public",
"name": "schemaVersion",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
}
},
{
"kind": "PropertySignature",
"canonicalReference": "@tldraw/store!SerializedSchema#storeVersion:member",
"docComment": "/**\n * Store version is the version for the structure of the store. e.g. higher level structure like removing or renaming a record type.\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "storeVersion: "
},
{
"kind": "Content",
"text": "number"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": false,
"isOptional": false,
"releaseTag": "Public",
"name": "storeVersion",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
}
}
],
"extendsTokenRanges": []
},
{
"kind": "TypeAlias",
"canonicalReference": "@tldraw/store!SerializedStore:type",
"docComment": "/**\n * A serialized snapshot of the record store's values.\n *\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export type SerializedStore<R extends "
},
{
"kind": "Reference",
"text": "UnknownRecord",
"canonicalReference": "@tldraw/store!UnknownRecord:type"
},
{
"kind": "Content",
"text": "> = "
},
{
"kind": "Reference",
"text": "Record",
"canonicalReference": "!Record:type"
},
{
"kind": "Content",
"text": "<"
},
{
"kind": "Reference",
"text": "IdOf",
"canonicalReference": "@tldraw/store!IdOf:type"
},
{
"kind": "Content",
"text": "<R>, R>"
},
{
"kind": "Content",
"text": ";"
}
],
"fileUrlPath": "packages/store/src/lib/Store.ts",
"releaseTag": "Public",
"name": "SerializedStore",
"typeParameters": [
{
"typeParameterName": "R",
"constraintTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"defaultTypeTokenRange": {
"startIndex": 0,
"endIndex": 0
}
}
],
"typeTokenRange": {
"startIndex": 3,
"endIndex": 7
}
},
{
"kind": "Function",
"canonicalReference": "@tldraw/store!squashRecordDiffs:function(1)",
"docComment": "/**\n * Squash a collection of diffs into a single diff.\n *\n * @param diffs - An array of diffs to squash.\n *\n * @returns A single diff that represents the squashed diffs.\n *\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export declare function squashRecordDiffs<T extends "
},
{
"kind": "Reference",
"text": "UnknownRecord",
"canonicalReference": "@tldraw/store!UnknownRecord:type"
},
{
"kind": "Content",
"text": ">(diffs: "
},
{
"kind": "Reference",
"text": "RecordsDiff",
"canonicalReference": "@tldraw/store!RecordsDiff:type"
},
{
"kind": "Content",
"text": "<T>[]"
},
{
"kind": "Content",
"text": "): "
},
{
"kind": "Reference",
"text": "RecordsDiff",
"canonicalReference": "@tldraw/store!RecordsDiff:type"
},
{
"kind": "Content",
"text": "<T>"
},
{
"kind": "Content",
"text": ";"
}
],
"fileUrlPath": "packages/store/src/lib/Store.ts",
"returnTypeTokenRange": {
"startIndex": 6,
"endIndex": 8
},
"releaseTag": "Public",
"overloadIndex": 1,
"parameters": [
{
"parameterName": "diffs",
"parameterTypeTokenRange": {
"startIndex": 3,
"endIndex": 5
},
"isOptional": false
}
],
"typeParameters": [
{
"typeParameterName": "T",
"constraintTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"defaultTypeTokenRange": {
"startIndex": 0,
"endIndex": 0
}
}
],
"name": "squashRecordDiffs"
},
{
"kind": "Class",
"canonicalReference": "@tldraw/store!Store:class",
"docComment": "/**\n * A store of records.\n *\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export declare class Store<R extends "
},
{
"kind": "Reference",
"text": "UnknownRecord",
"canonicalReference": "@tldraw/store!UnknownRecord:type"
},
{
"kind": "Content",
"text": " = "
},
{
"kind": "Reference",
"text": "UnknownRecord",
"canonicalReference": "@tldraw/store!UnknownRecord:type"
},
{
"kind": "Content",
"text": ", Props = "
},
{
"kind": "Content",
"text": "unknown"
},
{
"kind": "Content",
"text": "> "
}
],
"fileUrlPath": "packages/store/src/lib/Store.ts",
"releaseTag": "Public",
"typeParameters": [
{
"typeParameterName": "R",
"constraintTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"defaultTypeTokenRange": {
"startIndex": 3,
"endIndex": 4
}
},
{
"typeParameterName": "Props",
"constraintTokenRange": {
"startIndex": 0,
"endIndex": 0
},
"defaultTypeTokenRange": {
"startIndex": 5,
"endIndex": 6
}
}
],
"isAbstract": false,
"name": "Store",
"preserveMemberOrder": false,
"members": [
{
"kind": "Method",
"canonicalReference": "@tldraw/store!Store#_flushHistory:member(1)",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "_flushHistory(): "
},
{
"kind": "Content",
"text": "void"
},
{
"kind": "Content",
"text": ";"
}
],
"isStatic": false,
"returnTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"releaseTag": "Public",
"isProtected": false,
"overloadIndex": 1,
"parameters": [],
"isOptional": false,
"isAbstract": false,
"name": "_flushHistory"
},
{
"kind": "Constructor",
"canonicalReference": "@tldraw/store!Store:constructor(1)",
"docComment": "/**\n * Constructs a new instance of the `Store` class\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "constructor(config: "
},
{
"kind": "Content",
"text": "{\n initialData?: "
},
{
"kind": "Reference",
"text": "SerializedStore",
"canonicalReference": "@tldraw/store!SerializedStore:type"
},
{
"kind": "Content",
"text": "<R>;\n schema: "
},
{
"kind": "Reference",
"text": "StoreSchema",
"canonicalReference": "@tldraw/store!StoreSchema:class"
},
{
"kind": "Content",
"text": "<R, Props>;\n props: Props;\n }"
},
{
"kind": "Content",
"text": ");"
}
],
"releaseTag": "Public",
"isProtected": false,
"overloadIndex": 1,
"parameters": [
{
"parameterName": "config",
"parameterTypeTokenRange": {
"startIndex": 1,
"endIndex": 6
},
"isOptional": false
}
]
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!Store#allRecords:member",
"docComment": "/**\n * Get an array of all values in the store.\n *\n * @returns An array of all values in the store.\n *\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "allRecords: "
},
{
"kind": "Content",
"text": "() => R[]"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": false,
"isOptional": false,
"releaseTag": "Public",
"name": "allRecords",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Method",
"canonicalReference": "@tldraw/store!Store#applyDiff:member(1)",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "applyDiff(diff: "
},
{
"kind": "Reference",
"text": "RecordsDiff",
"canonicalReference": "@tldraw/store!RecordsDiff:type"
},
{
"kind": "Content",
"text": "<R>"
},
{
"kind": "Content",
"text": ", runCallbacks?: "
},
{
"kind": "Content",
"text": "boolean"
},
{
"kind": "Content",
"text": "): "
},
{
"kind": "Content",
"text": "void"
},
{
"kind": "Content",
"text": ";"
}
],
"isStatic": false,
"returnTypeTokenRange": {
"startIndex": 6,
"endIndex": 7
},
"releaseTag": "Public",
"isProtected": false,
"overloadIndex": 1,
"parameters": [
{
"parameterName": "diff",
"parameterTypeTokenRange": {
"startIndex": 1,
"endIndex": 3
},
"isOptional": false
},
{
"parameterName": "runCallbacks",
"parameterTypeTokenRange": {
"startIndex": 4,
"endIndex": 5
},
"isOptional": true
}
],
"isOptional": false,
"isAbstract": false,
"name": "applyDiff"
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!Store#clear:member",
"docComment": "/**\n * Removes all records from the store.\n *\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "clear: "
},
{
"kind": "Content",
"text": "() => void"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": false,
"isOptional": false,
"releaseTag": "Public",
"name": "clear",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!Store#createComputedCache:member",
"docComment": "/**\n * Create a computed cache.\n *\n * @param name - The name of the derivation cache.\n *\n * @param derive - A function used to derive the value of the cache.\n *\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "createComputedCache: "
},
{
"kind": "Content",
"text": "<T, V extends R = R>(name: string, derive: (record: V) => T | undefined, isEqual?: ((a: V, b: V) => boolean) | undefined) => "
},
{
"kind": "Reference",
"text": "ComputedCache",
"canonicalReference": "@tldraw/store!ComputedCache:type"
},
{
"kind": "Content",
"text": "<T, V>"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": false,
"isOptional": false,
"releaseTag": "Public",
"name": "createComputedCache",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 4
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!Store#createSelectedComputedCache:member",
"docComment": "/**\n * Create a computed cache from a selector\n *\n * @param name - The name of the derivation cache.\n *\n * @param selector - A function that returns a subset of the original shape\n *\n * @param derive - A function used to derive the value of the cache.\n *\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "createSelectedComputedCache: "
},
{
"kind": "Content",
"text": "<T, J, V extends R = R>(name: string, selector: (record: V) => T | undefined, derive: (input: T) => J | undefined) => "
},
{
"kind": "Reference",
"text": "ComputedCache",
"canonicalReference": "@tldraw/store!ComputedCache:type"
},
{
"kind": "Content",
"text": "<J, V>"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": false,
"isOptional": false,
"releaseTag": "Public",
"name": "createSelectedComputedCache",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 4
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Method",
"canonicalReference": "@tldraw/store!Store#extractingChanges:member(1)",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "extractingChanges(fn: "
},
{
"kind": "Content",
"text": "() => void"
},
{
"kind": "Content",
"text": "): "
},
{
"kind": "Reference",
"text": "RecordsDiff",
"canonicalReference": "@tldraw/store!RecordsDiff:type"
},
{
"kind": "Content",
"text": "<R>"
},
{
"kind": "Content",
"text": ";"
}
],
"isStatic": false,
"returnTypeTokenRange": {
"startIndex": 3,
"endIndex": 5
},
"releaseTag": "Public",
"isProtected": false,
"overloadIndex": 1,
"parameters": [
{
"parameterName": "fn",
"parameterTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"isOptional": false
}
],
"isOptional": false,
"isAbstract": false,
"name": "extractingChanges"
},
{
"kind": "Method",
"canonicalReference": "@tldraw/store!Store#filterChangesByScope:member(1)",
"docComment": "/**\n * Filters out non-document changes from a diff. Returns null if there are no changes left.\n *\n * @param change - the records diff\n *\n * @returns \n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "filterChangesByScope(change: "
},
{
"kind": "Reference",
"text": "RecordsDiff",
"canonicalReference": "@tldraw/store!RecordsDiff:type"
},
{
"kind": "Content",
"text": "<R>"
},
{
"kind": "Content",
"text": ", scope: "
},
{
"kind": "Reference",
"text": "RecordScope",
"canonicalReference": "@tldraw/store!~RecordScope:type"
},
{
"kind": "Content",
"text": "): "
},
{
"kind": "Content",
"text": "{\n added: { [K in "
},
{
"kind": "Reference",
"text": "IdOf",
"canonicalReference": "@tldraw/store!IdOf:type"
},
{
"kind": "Content",
"text": "<R>]: R; };\n updated: { [K_1 in "
},
{
"kind": "Reference",
"text": "IdOf",
"canonicalReference": "@tldraw/store!IdOf:type"
},
{
"kind": "Content",
"text": "<R>]: [from: R, to: R]; };\n removed: { [K in "
},
{
"kind": "Reference",
"text": "IdOf",
"canonicalReference": "@tldraw/store!IdOf:type"
},
{
"kind": "Content",
"text": "<R>]: R; };\n } | null"
},
{
"kind": "Content",
"text": ";"
}
],
"isStatic": false,
"returnTypeTokenRange": {
"startIndex": 6,
"endIndex": 13
},
"releaseTag": "Public",
"isProtected": false,
"overloadIndex": 1,
"parameters": [
{
"parameterName": "change",
"parameterTypeTokenRange": {
"startIndex": 1,
"endIndex": 3
},
"isOptional": false
},
{
"parameterName": "scope",
"parameterTypeTokenRange": {
"startIndex": 4,
"endIndex": 5
},
"isOptional": false
}
],
"isOptional": false,
"isAbstract": false,
"name": "filterChangesByScope"
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!Store#get:member",
"docComment": "/**\n * Get the value of a store record by its id.\n *\n * @param id - The id of the record to get.\n *\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "get: "
},
{
"kind": "Content",
"text": "<K extends "
},
{
"kind": "Reference",
"text": "IdOf",
"canonicalReference": "@tldraw/store!IdOf:type"
},
{
"kind": "Content",
"text": "<R>>(id: K) => "
},
{
"kind": "Reference",
"text": "RecFromId",
"canonicalReference": "@tldraw/store!~RecFromId:type"
},
{
"kind": "Content",
"text": "<K> | undefined"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": false,
"isOptional": false,
"releaseTag": "Public",
"name": "get",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 6
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!Store#getRecordType:member",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "getRecordType: "
},
{
"kind": "Content",
"text": "<T extends R>(record: R) => T"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": false,
"isOptional": false,
"releaseTag": "Public",
"name": "getRecordType",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Method",
"canonicalReference": "@tldraw/store!Store#getSnapshot:member(1)",
"docComment": "/**\n * Get a serialized snapshot of the store and its schema.\n * ```ts\n * const snapshot = store.getSnapshot()\n * store.loadSnapshot(snapshot)\n * ```\n *\n * @param scope - The scope of records to serialize. Defaults to 'document'.\n *\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "getSnapshot(scope?: "
},
{
"kind": "Content",
"text": "'all' | "
},
{
"kind": "Reference",
"text": "RecordScope",
"canonicalReference": "@tldraw/store!~RecordScope:type"
},
{
"kind": "Content",
"text": "): "
},
{
"kind": "Reference",
"text": "StoreSnapshot",
"canonicalReference": "@tldraw/store!StoreSnapshot:type"
},
{
"kind": "Content",
"text": "<R>"
},
{
"kind": "Content",
"text": ";"
}
],
"isStatic": false,
"returnTypeTokenRange": {
"startIndex": 4,
"endIndex": 6
},
"releaseTag": "Public",
"isProtected": false,
"overloadIndex": 1,
"parameters": [
{
"parameterName": "scope",
"parameterTypeTokenRange": {
"startIndex": 1,
"endIndex": 3
},
"isOptional": true
}
],
"isOptional": false,
"isAbstract": false,
"name": "getSnapshot"
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!Store#has:member",
"docComment": "/**\n * Get whether the record store has a id.\n *\n * @param id - The id of the record to check.\n *\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "has: "
},
{
"kind": "Content",
"text": "<K extends "
},
{
"kind": "Reference",
"text": "IdOf",
"canonicalReference": "@tldraw/store!IdOf:type"
},
{
"kind": "Content",
"text": "<R>>(id: K) => boolean"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": false,
"isOptional": false,
"releaseTag": "Public",
"name": "has",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 4
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!Store#history:member",
"docComment": "/**\n * An atom containing the store's history.\n *\n * @public @readonly\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "readonly history: "
},
{
"kind": "Reference",
"text": "Atom",
"canonicalReference": "@tldraw/state!Atom:interface"
},
{
"kind": "Content",
"text": "<number, "
},
{
"kind": "Reference",
"text": "RecordsDiff",
"canonicalReference": "@tldraw/store!RecordsDiff:type"
},
{
"kind": "Content",
"text": "<R>>"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": true,
"isOptional": false,
"releaseTag": "Public",
"name": "history",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 5
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!Store#id:member",
"docComment": "/**\n * The random id of the store.\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "readonly id: "
},
{
"kind": "Content",
"text": "string"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": true,
"isOptional": false,
"releaseTag": "Public",
"name": "id",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!Store#listen:member",
"docComment": "/**\n * Add a new listener to the store.\n *\n * @param onHistory - The listener to call when the store updates.\n *\n * @param filters - Filters to apply to the listener.\n *\n * @returns A function to remove the listener.\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "listen: "
},
{
"kind": "Content",
"text": "(onHistory: "
},
{
"kind": "Reference",
"text": "StoreListener",
"canonicalReference": "@tldraw/store!StoreListener:type"
},
{
"kind": "Content",
"text": "<R>, filters?: "
},
{
"kind": "Reference",
"text": "Partial",
"canonicalReference": "!Partial:type"
},
{
"kind": "Content",
"text": "<"
},
{
"kind": "Reference",
"text": "StoreListenerFilters",
"canonicalReference": "@tldraw/store!~StoreListenerFilters:type"
},
{
"kind": "Content",
"text": ">) => () => void"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": false,
"isOptional": false,
"releaseTag": "Public",
"name": "listen",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 8
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Method",
"canonicalReference": "@tldraw/store!Store#loadSnapshot:member(1)",
"docComment": "/**\n * Load a serialized snapshot.\n * ```ts\n * const snapshot = store.getSnapshot()\n * store.loadSnapshot(snapshot)\n * ```\n *\n * @param snapshot - The snapshot to load.\n *\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "loadSnapshot(snapshot: "
},
{
"kind": "Reference",
"text": "StoreSnapshot",
"canonicalReference": "@tldraw/store!StoreSnapshot:type"
},
{
"kind": "Content",
"text": "<R>"
},
{
"kind": "Content",
"text": "): "
},
{
"kind": "Content",
"text": "void"
},
{
"kind": "Content",
"text": ";"
}
],
"isStatic": false,
"returnTypeTokenRange": {
"startIndex": 4,
"endIndex": 5
},
"releaseTag": "Public",
"isProtected": false,
"overloadIndex": 1,
"parameters": [
{
"parameterName": "snapshot",
"parameterTypeTokenRange": {
"startIndex": 1,
"endIndex": 3
},
"isOptional": false
}
],
"isOptional": false,
"isAbstract": false,
"name": "loadSnapshot"
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!Store#mergeRemoteChanges:member",
"docComment": "/**\n * Merge changes from a remote source without triggering listeners.\n *\n * @param fn - A function that merges the external changes.\n *\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "mergeRemoteChanges: "
},
{
"kind": "Content",
"text": "(fn: () => void) => void"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": false,
"isOptional": false,
"releaseTag": "Public",
"name": "mergeRemoteChanges",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Method",
"canonicalReference": "@tldraw/store!Store#migrateSnapshot:member(1)",
"docComment": "/**\n * Migrate a serialized snapshot of the store and its schema.\n * ```ts\n * const snapshot = store.getSnapshot()\n * store.migrateSnapshot(snapshot)\n * ```\n *\n * @param snapshot - The snapshot to load.\n *\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "migrateSnapshot(snapshot: "
},
{
"kind": "Reference",
"text": "StoreSnapshot",
"canonicalReference": "@tldraw/store!StoreSnapshot:type"
},
{
"kind": "Content",
"text": "<R>"
},
{
"kind": "Content",
"text": "): "
},
{
"kind": "Reference",
"text": "StoreSnapshot",
"canonicalReference": "@tldraw/store!StoreSnapshot:type"
},
{
"kind": "Content",
"text": "<R>"
},
{
"kind": "Content",
"text": ";"
}
],
"isStatic": false,
"returnTypeTokenRange": {
"startIndex": 4,
"endIndex": 6
},
"releaseTag": "Public",
"isProtected": false,
"overloadIndex": 1,
"parameters": [
{
"parameterName": "snapshot",
"parameterTypeTokenRange": {
"startIndex": 1,
"endIndex": 3
},
"isOptional": false
}
],
"isOptional": false,
"isAbstract": false,
"name": "migrateSnapshot"
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!Store#onAfterChange:member",
"docComment": "/**\n * A callback fired after each record's change.\n *\n * @param prev - The previous value, if any.\n *\n * @param next - The next value.\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "onAfterChange?: "
},
{
"kind": "Content",
"text": "(prev: R, next: R, source: 'remote' | 'user') => void"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": false,
"isOptional": true,
"releaseTag": "Public",
"name": "onAfterChange",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!Store#onAfterCreate:member",
"docComment": "/**\n * A callback fired after a record is created. Use this to perform related updates to other records in the store.\n *\n * @param record - The record to be created\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "onAfterCreate?: "
},
{
"kind": "Content",
"text": "(record: R, source: 'remote' | 'user') => void"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": false,
"isOptional": true,
"releaseTag": "Public",
"name": "onAfterCreate",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!Store#onAfterDelete:member",
"docComment": "/**\n * A callback fired after a record is deleted.\n *\n * @param prev - The record that will be deleted.\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "onAfterDelete?: "
},
{
"kind": "Content",
"text": "(prev: R, source: 'remote' | 'user') => void"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": false,
"isOptional": true,
"releaseTag": "Public",
"name": "onAfterDelete",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!Store#onBeforeChange:member",
"docComment": "/**\n * A callback before after each record's change.\n *\n * @param prev - The previous value, if any.\n *\n * @param next - The next value.\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "onBeforeChange?: "
},
{
"kind": "Content",
"text": "(prev: R, next: R, source: 'remote' | 'user') => R"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": false,
"isOptional": true,
"releaseTag": "Public",
"name": "onBeforeChange",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!Store#onBeforeCreate:member",
"docComment": "/**\n * A callback fired after each record's change.\n *\n * @param prev - The previous value, if any.\n *\n * @param next - The next value.\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "onBeforeCreate?: "
},
{
"kind": "Content",
"text": "(next: R, source: 'remote' | 'user') => R"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": false,
"isOptional": true,
"releaseTag": "Public",
"name": "onBeforeCreate",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!Store#onBeforeDelete:member",
"docComment": "/**\n * A callback fired before a record is deleted.\n *\n * @param prev - The record that will be deleted.\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "onBeforeDelete?: "
},
{
"kind": "Content",
"text": "(prev: R, source: 'remote' | 'user') => false | void"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": false,
"isOptional": true,
"releaseTag": "Public",
"name": "onBeforeDelete",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!Store#props:member",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "readonly props: "
},
{
"kind": "Content",
"text": "Props"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": true,
"isOptional": false,
"releaseTag": "Public",
"name": "props",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!Store#put:member",
"docComment": "/**\n * Add some records to the store. It's an error if they already exist.\n *\n * @param records - The records to add.\n *\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "put: "
},
{
"kind": "Content",
"text": "(records: R[], phaseOverride?: 'initialize') => void"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": false,
"isOptional": false,
"releaseTag": "Public",
"name": "put",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!Store#query:member",
"docComment": "/**\n * A StoreQueries instance for this store.\n *\n * @public @readonly\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "readonly query: "
},
{
"kind": "Reference",
"text": "StoreQueries",
"canonicalReference": "@tldraw/store!~StoreQueries:class"
},
{
"kind": "Content",
"text": "<R>"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": true,
"isOptional": false,
"releaseTag": "Public",
"name": "query",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 3
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!Store#remove:member",
"docComment": "/**\n * Remove some records from the store via their ids.\n *\n * @param ids - The ids of the records to remove.\n *\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "remove: "
},
{
"kind": "Content",
"text": "(ids: "
},
{
"kind": "Reference",
"text": "IdOf",
"canonicalReference": "@tldraw/store!IdOf:type"
},
{
"kind": "Content",
"text": "<R>[]) => void"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": false,
"isOptional": false,
"releaseTag": "Public",
"name": "remove",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 4
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!Store#schema:member",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "readonly schema: "
},
{
"kind": "Reference",
"text": "StoreSchema",
"canonicalReference": "@tldraw/store!StoreSchema:class"
},
{
"kind": "Content",
"text": "<R, Props>"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": true,
"isOptional": false,
"releaseTag": "Public",
"name": "schema",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 3
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!Store#scopedTypes:member",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "readonly scopedTypes: "
},
{
"kind": "Content",
"text": "{\n readonly [K in "
},
{
"kind": "Reference",
"text": "RecordScope",
"canonicalReference": "@tldraw/store!~RecordScope:type"
},
{
"kind": "Content",
"text": "]: "
},
{
"kind": "Reference",
"text": "ReadonlySet",
"canonicalReference": "!ReadonlySet:interface"
},
{
"kind": "Content",
"text": "<R['typeName']>;\n }"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": true,
"isOptional": false,
"releaseTag": "Public",
"name": "scopedTypes",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 6
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!Store#serialize:member",
"docComment": "/**\n * Creates a JSON payload from the record store.\n *\n * @param scope - The scope of records to serialize. Defaults to 'document'.\n *\n * @returns The record store snapshot as a JSON payload.\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "serialize: "
},
{
"kind": "Content",
"text": "(scope?: 'all' | "
},
{
"kind": "Reference",
"text": "RecordScope",
"canonicalReference": "@tldraw/store!~RecordScope:type"
},
{
"kind": "Content",
"text": ") => "
},
{
"kind": "Reference",
"text": "SerializedStore",
"canonicalReference": "@tldraw/store!SerializedStore:type"
},
{
"kind": "Content",
"text": "<R>"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": false,
"isOptional": false,
"releaseTag": "Public",
"name": "serialize",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 6
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!Store#unsafeGetWithoutCapture:member",
"docComment": "/**\n * Get the value of a store record by its id without updating its epoch.\n *\n * @param id - The id of the record to get.\n *\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "unsafeGetWithoutCapture: "
},
{
"kind": "Content",
"text": "<K extends "
},
{
"kind": "Reference",
"text": "IdOf",
"canonicalReference": "@tldraw/store!IdOf:type"
},
{
"kind": "Content",
"text": "<R>>(id: K) => "
},
{
"kind": "Reference",
"text": "RecFromId",
"canonicalReference": "@tldraw/store!~RecFromId:type"
},
{
"kind": "Content",
"text": "<K> | undefined"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": false,
"isOptional": false,
"releaseTag": "Public",
"name": "unsafeGetWithoutCapture",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 6
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!Store#update:member",
"docComment": "/**\n * Update a record. To update multiple records at once, use the `update` method of the `TypedStore` class.\n *\n * @param id - The id of the record to update.\n *\n * @param updater - A function that updates the record.\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "update: "
},
{
"kind": "Content",
"text": "<K extends "
},
{
"kind": "Reference",
"text": "IdOf",
"canonicalReference": "@tldraw/store!IdOf:type"
},
{
"kind": "Content",
"text": "<R>>(id: K, updater: (record: "
},
{
"kind": "Reference",
"text": "RecFromId",
"canonicalReference": "@tldraw/store!~RecFromId:type"
},
{
"kind": "Content",
"text": "<K>) => "
},
{
"kind": "Reference",
"text": "RecFromId",
"canonicalReference": "@tldraw/store!~RecFromId:type"
},
{
"kind": "Content",
"text": "<K>) => void"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": false,
"isOptional": false,
"releaseTag": "Public",
"name": "update",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 8
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Method",
"canonicalReference": "@tldraw/store!Store#validate:member(1)",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "validate(phase: "
},
{
"kind": "Content",
"text": "'createRecord' | 'initialize' | 'tests' | 'updateRecord'"
},
{
"kind": "Content",
"text": "): "
},
{
"kind": "Content",
"text": "void"
},
{
"kind": "Content",
"text": ";"
}
],
"isStatic": false,
"returnTypeTokenRange": {
"startIndex": 3,
"endIndex": 4
},
"releaseTag": "Public",
"isProtected": false,
"overloadIndex": 1,
"parameters": [
{
"parameterName": "phase",
"parameterTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"isOptional": false
}
],
"isOptional": false,
"isAbstract": false,
"name": "validate"
}
],
"implementsTokenRanges": []
},
{
"kind": "TypeAlias",
"canonicalReference": "@tldraw/store!StoreError:type",
"docComment": "/**\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export type StoreError = "
},
{
"kind": "Content",
"text": "{\n error: "
},
{
"kind": "Reference",
"text": "Error",
"canonicalReference": "!Error:interface"
},
{
"kind": "Content",
"text": ";\n phase: 'createRecord' | 'initialize' | 'tests' | 'updateRecord';\n recordBefore?: unknown;\n recordAfter: unknown;\n isExistingValidationIssue: boolean;\n}"
},
{
"kind": "Content",
"text": ";"
}
],
"fileUrlPath": "packages/store/src/lib/Store.ts",
"releaseTag": "Public",
"name": "StoreError",
"typeTokenRange": {
"startIndex": 1,
"endIndex": 4
}
},
{
"kind": "TypeAlias",
"canonicalReference": "@tldraw/store!StoreListener:type",
"docComment": "/**\n * A function that will be called when the history changes.\n *\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export type StoreListener<R extends "
},
{
"kind": "Reference",
"text": "UnknownRecord",
"canonicalReference": "@tldraw/store!UnknownRecord:type"
},
{
"kind": "Content",
"text": "> = "
},
{
"kind": "Content",
"text": "(entry: "
},
{
"kind": "Reference",
"text": "HistoryEntry",
"canonicalReference": "@tldraw/store!HistoryEntry:type"
},
{
"kind": "Content",
"text": "<R>) => void"
},
{
"kind": "Content",
"text": ";"
}
],
"fileUrlPath": "packages/store/src/lib/Store.ts",
"releaseTag": "Public",
"name": "StoreListener",
"typeParameters": [
{
"typeParameterName": "R",
"constraintTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"defaultTypeTokenRange": {
"startIndex": 0,
"endIndex": 0
}
}
],
"typeTokenRange": {
"startIndex": 3,
"endIndex": 6
}
},
{
"kind": "Class",
"canonicalReference": "@tldraw/store!StoreSchema:class",
"docComment": "/**\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export declare class StoreSchema<R extends "
},
{
"kind": "Reference",
"text": "UnknownRecord",
"canonicalReference": "@tldraw/store!UnknownRecord:type"
},
{
"kind": "Content",
"text": ", P = "
},
{
"kind": "Content",
"text": "unknown"
},
{
"kind": "Content",
"text": "> "
}
],
"fileUrlPath": "packages/store/src/lib/StoreSchema.ts",
"releaseTag": "Public",
"typeParameters": [
{
"typeParameterName": "R",
"constraintTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"defaultTypeTokenRange": {
"startIndex": 0,
"endIndex": 0
}
},
{
"typeParameterName": "P",
"constraintTokenRange": {
"startIndex": 0,
"endIndex": 0
},
"defaultTypeTokenRange": {
"startIndex": 3,
"endIndex": 4
}
}
],
"isAbstract": false,
"name": "StoreSchema",
"preserveMemberOrder": false,
"members": [
{
"kind": "Method",
"canonicalReference": "@tldraw/store!StoreSchema.create:member(1)",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "static create<R extends "
},
{
"kind": "Reference",
"text": "UnknownRecord",
"canonicalReference": "@tldraw/store!UnknownRecord:type"
},
{
"kind": "Content",
"text": ", P = "
},
{
"kind": "Content",
"text": "unknown"
},
{
"kind": "Content",
"text": ">(types: "
},
{
"kind": "Content",
"text": "{\n [TypeName in R['typeName']]: {\n createId: any;\n };\n }"
},
{
"kind": "Content",
"text": ", options?: "
},
{
"kind": "Reference",
"text": "StoreSchemaOptions",
"canonicalReference": "@tldraw/store!StoreSchemaOptions:type"
},
{
"kind": "Content",
"text": "<R, P>"
},
{
"kind": "Content",
"text": "): "
},
{
"kind": "Reference",
"text": "StoreSchema",
"canonicalReference": "@tldraw/store!StoreSchema:class"
},
{
"kind": "Content",
"text": "<R, P>"
},
{
"kind": "Content",
"text": ";"
}
],
"typeParameters": [
{
"typeParameterName": "R",
"constraintTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"defaultTypeTokenRange": {
"startIndex": 0,
"endIndex": 0
}
},
{
"typeParameterName": "P",
"constraintTokenRange": {
"startIndex": 0,
"endIndex": 0
},
"defaultTypeTokenRange": {
"startIndex": 3,
"endIndex": 4
}
}
],
"isStatic": true,
"returnTypeTokenRange": {
"startIndex": 10,
"endIndex": 12
},
"releaseTag": "Public",
"isProtected": false,
"overloadIndex": 1,
"parameters": [
{
"parameterName": "types",
"parameterTypeTokenRange": {
"startIndex": 5,
"endIndex": 6
},
"isOptional": false
},
{
"parameterName": "options",
"parameterTypeTokenRange": {
"startIndex": 7,
"endIndex": 9
},
"isOptional": true
}
],
"isOptional": false,
"isAbstract": false,
"name": "create"
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!StoreSchema#currentStoreVersion:member",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "get currentStoreVersion(): "
},
{
"kind": "Content",
"text": "number"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": true,
"isOptional": false,
"releaseTag": "Public",
"name": "currentStoreVersion",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Method",
"canonicalReference": "@tldraw/store!StoreSchema#migratePersistedRecord:member(1)",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "migratePersistedRecord(record: "
},
{
"kind": "Content",
"text": "R"
},
{
"kind": "Content",
"text": ", persistedSchema: "
},
{
"kind": "Reference",
"text": "SerializedSchema",
"canonicalReference": "@tldraw/store!SerializedSchema:interface"
},
{
"kind": "Content",
"text": ", direction?: "
},
{
"kind": "Content",
"text": "'down' | 'up'"
},
{
"kind": "Content",
"text": "): "
},
{
"kind": "Reference",
"text": "MigrationResult",
"canonicalReference": "@tldraw/store!MigrationResult:type"
},
{
"kind": "Content",
"text": "<R>"
},
{
"kind": "Content",
"text": ";"
}
],
"isStatic": false,
"returnTypeTokenRange": {
"startIndex": 7,
"endIndex": 9
},
"releaseTag": "Public",
"isProtected": false,
"overloadIndex": 1,
"parameters": [
{
"parameterName": "record",
"parameterTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"isOptional": false
},
{
"parameterName": "persistedSchema",
"parameterTypeTokenRange": {
"startIndex": 3,
"endIndex": 4
},
"isOptional": false
},
{
"parameterName": "direction",
"parameterTypeTokenRange": {
"startIndex": 5,
"endIndex": 6
},
"isOptional": true
}
],
"isOptional": false,
"isAbstract": false,
"name": "migratePersistedRecord"
},
{
"kind": "Method",
"canonicalReference": "@tldraw/store!StoreSchema#migrateStoreSnapshot:member(1)",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "migrateStoreSnapshot(snapshot: "
},
{
"kind": "Reference",
"text": "StoreSnapshot",
"canonicalReference": "@tldraw/store!StoreSnapshot:type"
},
{
"kind": "Content",
"text": "<R>"
},
{
"kind": "Content",
"text": "): "
},
{
"kind": "Reference",
"text": "MigrationResult",
"canonicalReference": "@tldraw/store!MigrationResult:type"
},
{
"kind": "Content",
"text": "<"
},
{
"kind": "Reference",
"text": "SerializedStore",
"canonicalReference": "@tldraw/store!SerializedStore:type"
},
{
"kind": "Content",
"text": "<R>>"
},
{
"kind": "Content",
"text": ";"
}
],
"isStatic": false,
"returnTypeTokenRange": {
"startIndex": 4,
"endIndex": 8
},
"releaseTag": "Public",
"isProtected": false,
"overloadIndex": 1,
"parameters": [
{
"parameterName": "snapshot",
"parameterTypeTokenRange": {
"startIndex": 1,
"endIndex": 3
},
"isOptional": false
}
],
"isOptional": false,
"isAbstract": false,
"name": "migrateStoreSnapshot"
},
{
"kind": "Method",
"canonicalReference": "@tldraw/store!StoreSchema#serialize:member(1)",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "serialize(): "
},
{
"kind": "Reference",
"text": "SerializedSchema",
"canonicalReference": "@tldraw/store!SerializedSchema:interface"
},
{
"kind": "Content",
"text": ";"
}
],
"isStatic": false,
"returnTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"releaseTag": "Public",
"isProtected": false,
"overloadIndex": 1,
"parameters": [],
"isOptional": false,
"isAbstract": false,
"name": "serialize"
},
{
"kind": "Method",
"canonicalReference": "@tldraw/store!StoreSchema#serializeEarliestVersion:member(1)",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "serializeEarliestVersion(): "
},
{
"kind": "Reference",
"text": "SerializedSchema",
"canonicalReference": "@tldraw/store!SerializedSchema:interface"
},
{
"kind": "Content",
"text": ";"
}
],
"isStatic": false,
"returnTypeTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"releaseTag": "Public",
"isProtected": false,
"overloadIndex": 1,
"parameters": [],
"isOptional": false,
"isAbstract": false,
"name": "serializeEarliestVersion"
},
{
"kind": "Property",
"canonicalReference": "@tldraw/store!StoreSchema#types:member",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "readonly types: "
},
{
"kind": "Content",
"text": "{\n [Record in R as Record['typeName']]: "
},
{
"kind": "Reference",
"text": "RecordType",
"canonicalReference": "@tldraw/store!RecordType:class"
},
{
"kind": "Content",
"text": "<R, any>;\n }"
},
{
"kind": "Content",
"text": ";"
}
],
"isReadonly": true,
"isOptional": false,
"releaseTag": "Public",
"name": "types",
"propertyTypeTokenRange": {
"startIndex": 1,
"endIndex": 4
},
"isStatic": false,
"isProtected": false,
"isAbstract": false
},
{
"kind": "Method",
"canonicalReference": "@tldraw/store!StoreSchema#validateRecord:member(1)",
"docComment": "",
"excerptTokens": [
{
"kind": "Content",
"text": "validateRecord(store: "
},
{
"kind": "Reference",
"text": "Store",
"canonicalReference": "@tldraw/store!Store:class"
},
{
"kind": "Content",
"text": "<R>"
},
{
"kind": "Content",
"text": ", record: "
},
{
"kind": "Content",
"text": "R"
},
{
"kind": "Content",
"text": ", phase: "
},
{
"kind": "Content",
"text": "'createRecord' | 'initialize' | 'tests' | 'updateRecord'"
},
{
"kind": "Content",
"text": ", recordBefore: "
},
{
"kind": "Content",
"text": "null | R"
},
{
"kind": "Content",
"text": "): "
},
{
"kind": "Content",
"text": "R"
},
{
"kind": "Content",
"text": ";"
}
],
"isStatic": false,
"returnTypeTokenRange": {
"startIndex": 10,
"endIndex": 11
},
"releaseTag": "Public",
"isProtected": false,
"overloadIndex": 1,
"parameters": [
{
"parameterName": "store",
"parameterTypeTokenRange": {
"startIndex": 1,
"endIndex": 3
},
"isOptional": false
},
{
"parameterName": "record",
"parameterTypeTokenRange": {
"startIndex": 4,
"endIndex": 5
},
"isOptional": false
},
{
"parameterName": "phase",
"parameterTypeTokenRange": {
"startIndex": 6,
"endIndex": 7
},
"isOptional": false
},
{
"parameterName": "recordBefore",
"parameterTypeTokenRange": {
"startIndex": 8,
"endIndex": 9
},
"isOptional": false
}
],
"isOptional": false,
"isAbstract": false,
"name": "validateRecord"
}
],
"implementsTokenRanges": []
},
{
"kind": "TypeAlias",
"canonicalReference": "@tldraw/store!StoreSchemaOptions:type",
"docComment": "/**\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export type StoreSchemaOptions<R extends "
},
{
"kind": "Reference",
"text": "UnknownRecord",
"canonicalReference": "@tldraw/store!UnknownRecord:type"
},
{
"kind": "Content",
"text": ", P> = "
},
{
"kind": "Content",
"text": "{\n snapshotMigrations?: "
},
{
"kind": "Reference",
"text": "Migrations",
"canonicalReference": "@tldraw/store!Migrations:interface"
},
{
"kind": "Content",
"text": ";\n onValidationFailure?: (data: {\n error: unknown;\n store: "
},
{
"kind": "Reference",
"text": "Store",
"canonicalReference": "@tldraw/store!Store:class"
},
{
"kind": "Content",
"text": "<R>;\n record: R;\n phase: 'createRecord' | 'initialize' | 'tests' | 'updateRecord';\n recordBefore: null | R;\n }) => R;\n createIntegrityChecker?: (store: "
},
{
"kind": "Reference",
"text": "Store",
"canonicalReference": "@tldraw/store!Store:class"
},
{
"kind": "Content",
"text": "<R, P>) => void;\n}"
},
{
"kind": "Content",
"text": ";"
}
],
"fileUrlPath": "packages/store/src/lib/StoreSchema.ts",
"releaseTag": "Public",
"name": "StoreSchemaOptions",
"typeParameters": [
{
"typeParameterName": "R",
"constraintTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"defaultTypeTokenRange": {
"startIndex": 0,
"endIndex": 0
}
},
{
"typeParameterName": "P",
"constraintTokenRange": {
"startIndex": 0,
"endIndex": 0
},
"defaultTypeTokenRange": {
"startIndex": 0,
"endIndex": 0
}
}
],
"typeTokenRange": {
"startIndex": 3,
"endIndex": 10
}
},
{
"kind": "TypeAlias",
"canonicalReference": "@tldraw/store!StoreSnapshot:type",
"docComment": "/**\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export type StoreSnapshot<R extends "
},
{
"kind": "Reference",
"text": "UnknownRecord",
"canonicalReference": "@tldraw/store!UnknownRecord:type"
},
{
"kind": "Content",
"text": "> = "
},
{
"kind": "Content",
"text": "{\n store: "
},
{
"kind": "Reference",
"text": "SerializedStore",
"canonicalReference": "@tldraw/store!SerializedStore:type"
},
{
"kind": "Content",
"text": "<R>;\n schema: "
},
{
"kind": "Reference",
"text": "SerializedSchema",
"canonicalReference": "@tldraw/store!SerializedSchema:interface"
},
{
"kind": "Content",
"text": ";\n}"
},
{
"kind": "Content",
"text": ";"
}
],
"fileUrlPath": "packages/store/src/lib/Store.ts",
"releaseTag": "Public",
"name": "StoreSnapshot",
"typeParameters": [
{
"typeParameterName": "R",
"constraintTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"defaultTypeTokenRange": {
"startIndex": 0,
"endIndex": 0
}
}
],
"typeTokenRange": {
"startIndex": 3,
"endIndex": 8
}
},
{
"kind": "TypeAlias",
"canonicalReference": "@tldraw/store!StoreValidator:type",
"docComment": "/**\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export type StoreValidator<R extends "
},
{
"kind": "Reference",
"text": "UnknownRecord",
"canonicalReference": "@tldraw/store!UnknownRecord:type"
},
{
"kind": "Content",
"text": "> = "
},
{
"kind": "Content",
Faster validations + record reference stability at the same time (#2848) This PR adds a validation mode whereby previous known-to-be-valid values can be used to speed up the validation process itself. At the same time it enables us to do fine-grained equality checking on records much more quickly than by using something like lodash isEqual, and using that we can prevent triggering effects for record updates that don't actually alter any values in the store. Here's some preliminary perf testing of average time spent in `store.put()` during some common interactions | task | before (ms) | after (ms) | | ---- | ---- | ---- | | drawing lines | 0.0403 | 0.0214 | | drawing boxes | 0.0408 | 0.0348 | | translating lines | 0.0352 | 0.0042 | | translating boxes | 0.0051 | 0.0032 | | rotating lines | 0.0312 | 0.0065 | | rotating boxes | 0.0053 | 0.0035 | | brush selecting boxes | 0.0200 | 0.0232 | | traversal with shapes | 0.0130 | 0.0108 | | traversal without shapes | 0.0201 | 0.0173 | **traversal** means moving the camera and pointer around the canvas #### Discussion At the scale of hundredths of a millisecond these .put operations are so fast that even if they became literally instantaneous the change would not be human perceptible. That said, there is an overall marked improvement here. Especially for dealing with draw shapes. These figures are also mostly in line with expectations, aside from a couple of things: - I don't understand why the `brush selecting boxes` task got slower after the change. - I don't understand why the `traversal` tasks are slower than the `translating boxes` task, both before and after. I would expect that .putting shape records would be much slower than .putting pointer/camera records (since the latter have fewer and simpler properties) ### Change Type - [x] `patch` — Bug fix ### Test Plan 1. Add a step-by-step description of how to test your PR here. 2. - [ ] Unit Tests - [ ] End to end tests ### Release Notes - Add a brief release note for your PR here.
2024-02-20 12:35:25 +00:00
"text": "{\n validate: (record: unknown) => R;\n validateUsingKnownGoodVersion?: (knownGoodVersion: R, record: unknown) => R;\n}"
},
{
"kind": "Content",
"text": ";"
}
],
"fileUrlPath": "packages/store/src/lib/Store.ts",
"releaseTag": "Public",
"name": "StoreValidator",
"typeParameters": [
{
"typeParameterName": "R",
"constraintTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"defaultTypeTokenRange": {
"startIndex": 0,
"endIndex": 0
}
}
],
"typeTokenRange": {
"startIndex": 3,
"endIndex": 4
}
},
{
"kind": "TypeAlias",
"canonicalReference": "@tldraw/store!StoreValidators:type",
"docComment": "/**\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export type StoreValidators<R extends "
},
{
"kind": "Reference",
"text": "UnknownRecord",
"canonicalReference": "@tldraw/store!UnknownRecord:type"
},
{
"kind": "Content",
"text": "> = "
},
{
"kind": "Content",
"text": "{\n [K in R['typeName']]: "
},
{
"kind": "Reference",
"text": "StoreValidator",
"canonicalReference": "@tldraw/store!StoreValidator:type"
},
{
"kind": "Content",
"text": "<"
},
{
"kind": "Reference",
"text": "Extract",
"canonicalReference": "!Extract:type"
},
{
"kind": "Content",
"text": "<R, {\n typeName: K;\n }>>;\n}"
},
{
"kind": "Content",
"text": ";"
}
],
"fileUrlPath": "packages/store/src/lib/Store.ts",
"releaseTag": "Public",
"name": "StoreValidators",
"typeParameters": [
{
"typeParameterName": "R",
"constraintTokenRange": {
"startIndex": 1,
"endIndex": 2
},
"defaultTypeTokenRange": {
"startIndex": 0,
"endIndex": 0
}
}
],
"typeTokenRange": {
"startIndex": 3,
"endIndex": 8
}
},
{
"kind": "TypeAlias",
"canonicalReference": "@tldraw/store!UnknownRecord:type",
"docComment": "/**\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "export type UnknownRecord = "
},
{
"kind": "Reference",
"text": "BaseRecord",
"canonicalReference": "@tldraw/store!BaseRecord:interface"
},
{
"kind": "Content",
"text": "<string, "
},
{
"kind": "Reference",
"text": "RecordId",
"canonicalReference": "@tldraw/store!RecordId:type"
},
{
"kind": "Content",
"text": "<"
},
{
"kind": "Reference",
"text": "UnknownRecord",
"canonicalReference": "@tldraw/store!UnknownRecord:type"
},
{
"kind": "Content",
"text": ">>"
},
{
"kind": "Content",
"text": ";"
}
],
"fileUrlPath": "packages/store/src/lib/BaseRecord.ts",
"releaseTag": "Public",
"name": "UnknownRecord",
"typeTokenRange": {
"startIndex": 1,
"endIndex": 7
}
}
]
}
]
}