@tldraw/tlschema
Version:
tldraw infinite canvas SDK (schema).
86 lines (85 loc) • 2.63 kB
JavaScript
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