UNPKG

@remotion/studio

Version:

APIs for interacting with the Remotion Studio

61 lines (60 loc) 2.85 kB
"use strict"; 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;