@remotion/studio
Version:
APIs for interacting with the Remotion Studio
61 lines (60 loc) • 2.85 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.calculateTimeline = void 0;
const get_sequence_visible_range_1 = require("./get-sequence-visible-range");
const get_timeline_nestedness_1 = require("./get-timeline-nestedness");
const get_timeline_sequence_hash_1 = require("./get-timeline-sequence-hash");
const get_timeline_sequence_sort_key_1 = require("./get-timeline-sequence-sort-key");
const sort_by_nonce_history_1 = require("./sort-by-nonce-history");
const calculateTimeline = ({ sequences, }) => {
const sortedSequences = (0, sort_by_nonce_history_1.sortItemsByNonceHistory)(sequences);
const tracks = [];
if (sortedSequences.length === 0) {
return [];
}
const sameHashes = {};
const hashesUsedInRoot = {};
const cache = {};
for (let i = 0; i < sortedSequences.length; i++) {
const sequence = sortedSequences[i];
if (!hashesUsedInRoot[sequence.rootId]) {
hashesUsedInRoot[sequence.rootId] = [];
}
const actualHash = (0, get_timeline_sequence_hash_1.getTimelineSequenceHash)(sequence, sortedSequences, hashesUsedInRoot, cache);
if (!sameHashes[actualHash]) {
sameHashes[actualHash] = [];
}
sameHashes[actualHash].push(sequence.id);
const cascadedStart = (0, get_sequence_visible_range_1.getCascadedStart)(sequence, sortedSequences);
const visibleStart = (0, get_sequence_visible_range_1.getTimelineVisibleStart)(sequence, sortedSequences);
const visibleDuration = (0, get_sequence_visible_range_1.getTimelineVisibleDuration)(sequence, sortedSequences);
tracks.push({
sequence: {
...sequence,
from: visibleStart,
duration: visibleDuration,
},
depth: (0, get_timeline_nestedness_1.getTimelineNestedLevel)(sequence, sortedSequences, 0),
hash: actualHash,
cascadedStart,
cascadedDuration: sequence.duration,
});
}
const uniqueTracks = [];
for (const track of tracks) {
if (!uniqueTracks.find((t) => t.hash === track.hash)) {
const { cascadedDuration, cascadedStart, ...cleanTrack } = track;
uniqueTracks.push(cleanTrack);
}
}
const nonceRanks = new Map();
for (let i = 0; i < tracks.length; i++) {
nonceRanks.set(tracks[i].sequence.id, i);
}
return uniqueTracks.sort((a, b) => {
const sortKeyA = (0, get_timeline_sequence_sort_key_1.getTimelineSequenceSequenceSortKey)(a, tracks, sameHashes, nonceRanks);
const sortKeyB = (0, get_timeline_sequence_sort_key_1.getTimelineSequenceSequenceSortKey)(b, tracks, sameHashes, nonceRanks);
return sortKeyA.localeCompare(sortKeyB);
});
};
exports.calculateTimeline = calculateTimeline;