UNPKG

@remotion/studio

Version:

APIs for interacting with the Remotion Studio

75 lines (74 loc) 3.13 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 calculateTimeline = ({ sequences, sequenceDuration, }) => { const tracks = []; if (sequences.length === 0) { return [ { sequence: { displayName: '', duration: sequenceDuration, from: 0, id: 'seq', parent: null, type: 'sequence', rootId: '-', showInTimeline: true, nonce: 0, loopDisplay: undefined, stack: null, premountDisplay: null, postmountDisplay: null, }, depth: 0, hash: '-', }, ]; } const sameHashes = {}; const hashesUsedInRoot = {}; const cache = {}; for (let i = 0; i < sequences.length; i++) { const sequence = sequences[i]; if (!hashesUsedInRoot[sequence.rootId]) { hashesUsedInRoot[sequence.rootId] = []; } const actualHash = (0, get_timeline_sequence_hash_1.getTimelineSequenceHash)(sequence, sequences, hashesUsedInRoot, cache); if (!sameHashes[actualHash]) { sameHashes[actualHash] = []; } sameHashes[actualHash].push(sequence.id); const cascadedStart = (0, get_sequence_visible_range_1.getCascadedStart)(sequence, sequences); const visibleStart = (0, get_sequence_visible_range_1.getTimelineVisibleStart)(sequence, sequences); const visibleDuration = (0, get_sequence_visible_range_1.getTimelineVisibleDuration)(sequence, sequences); tracks.push({ sequence: { ...sequence, from: visibleStart, duration: visibleDuration, }, depth: (0, get_timeline_nestedness_1.getTimelineNestedLevel)(sequence, sequences, 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); } } return uniqueTracks.sort((a, b) => { const sortKeyA = (0, get_timeline_sequence_sort_key_1.getTimelineSequenceSequenceSortKey)(a, tracks, sameHashes); const sortKeyB = (0, get_timeline_sequence_sort_key_1.getTimelineSequenceSequenceSortKey)(b, tracks, sameHashes); return sortKeyA.localeCompare(sortKeyB); }); }; exports.calculateTimeline = calculateTimeline;