@tldraw/tlschema
Version:
A tiny little drawing app (schema).
89 lines (88 loc) • 2.56 kB
JavaScript
import {
RecordType,
createMigrationSequence
} from "@tldraw/store";
import { assert } from "@tldraw/utils";
function processPropsMigrations(typeName, records) {
const result = [];
for (const [subType, { migrations }] of Object.entries(records)) {
const sequenceId = `com.tldraw.${typeName}.${subType}`;
if (!migrations) {
result.push(
createMigrationSequence({
sequenceId,
retroactive: false,
sequence: []
})
);
} else if ("sequenceId" in migrations) {
assert(
sequenceId === migrations.sequenceId,
`sequenceId mismatch for ${subType} ${RecordType} migrations. Expected '${sequenceId}', got '${migrations.sequenceId}'`
);
result.push(migrations);
} else if ("sequence" in migrations) {
result.push(
createMigrationSequence({
sequenceId,
retroactive: false,
sequence: migrations.sequence.map(
(m) => "id" in m ? createPropsMigration(typeName, subType, m) : m
)
})
);
} else {
result.push(
createMigrationSequence({
sequenceId,
retroactive: false,
sequence: Object.keys(migrations.migrators).map((k) => Number(k)).sort((a, b) => a - b).map(
(version) => ({
id: `${sequenceId}/${version}`,
scope: "record",
filter: (r) => r.typeName === typeName && r.type === subType,
up: (record) => {
const result2 = migrations.migrators[version].up(record);
if (result2) {
return result2;
}
},
down: (record) => {
const result2 = migrations.migrators[version].down(record);
if (result2) {
return result2;
}
}
})
)
})
);
}
}
return result;
}
function createPropsMigration(typeName, subType, m) {
return {
id: m.id,
dependsOn: m.dependsOn,
scope: "record",
filter: (r) => r.typeName === typeName && r.type === subType,
up: (record) => {
const result = m.up(record.props);
if (result) {
record.props = result;
}
},
down: typeof m.down === "function" ? (record) => {
const result = m.down(record.props);
if (result) {
record.props = result;
}
} : void 0
};
}
export {
createPropsMigration,
processPropsMigrations
};
//# sourceMappingURL=recordsWithProps.mjs.map