UNPKG

@tldraw/tlschema

Version:

tldraw infinite canvas SDK (schema).

86 lines (85 loc) 2.63 kB
import { createMigrationSequence, createRecordType } from "@tldraw/store"; import { assert, mapObjectMapValues, uniqueId } from "@tldraw/utils"; function createCustomRecordType(typeName, config) { return createRecordType(typeName, { scope: config.scope, validator: config.validator }).withDefaultProperties(config.createDefaultProperties ?? (() => ({}))); } function processCustomRecordMigrations(records) { const result = []; for (const [typeName, config] of Object.entries(records)) { const sequenceId = `com.tldraw.${typeName}`; const { migrations } = config; if (!migrations) { result.push( createMigrationSequence({ sequenceId, retroactive: true, sequence: [] }) ); } else if ("sequenceId" in migrations) { assert( sequenceId === migrations.sequenceId, `sequenceId mismatch for ${typeName} custom record migrations. Expected '${sequenceId}', got '${migrations.sequenceId}'` ); result.push(migrations); } else if ("sequence" in migrations) { result.push( createMigrationSequence({ sequenceId, retroactive: true, sequence: migrations.sequence.map((m) => { if (!("id" in m)) return m; return { id: m.id, dependsOn: m.dependsOn, scope: "record", filter: (r) => r.typeName === typeName, up: (record) => { const result2 = m.up(record); if (result2) return result2; }, down: typeof m.down === "function" ? (record) => { const result2 = m.down(record); if (result2) return result2; } : void 0 }; }) }) ); } } return result; } function createCustomRecordMigrationIds(recordType, ids) { return mapObjectMapValues(ids, (_k, v) => `com.tldraw.${recordType}/${v}`); } function createCustomRecordMigrationSequence(migrations) { return migrations; } function createCustomRecordId(typeName, id) { return `${typeName}:${id ?? uniqueId()}`; } function isCustomRecordId(typeName, id) { if (!id) return false; return id.startsWith(`${typeName}:`); } function isCustomRecord(typeName, record) { if (!record) return false; return record.typeName === typeName; } export { createCustomRecordId, createCustomRecordMigrationIds, createCustomRecordMigrationSequence, createCustomRecordType, isCustomRecord, isCustomRecordId, processCustomRecordMigrations }; //# sourceMappingURL=TLCustomRecord.mjs.map