atem-state
Advanced tools
Comparing version 0.10.0-nightly-20200602-164052-6e62fea.0 to 0.10.0-nightly-20200817-095335-95ec90c.0
@@ -9,4 +9,6 @@ import { Commands, Enums } from 'atem-connection'; | ||
getState(): StateObject; | ||
diffState(newState: StateObject): Array<Commands.AbstractCommand>; | ||
diffStates(oldState: StateObject, newState: StateObject): Array<Commands.AbstractCommand>; | ||
diffState(newState: StateObject): Array<Commands.ISerializableCommand>; | ||
/** Deprecated */ | ||
diffStates(oldState: StateObject, newState: StateObject): Array<Commands.ISerializableCommand>; | ||
static diffStates(version: Enums.ProtocolVersion, oldState: StateObject, newState: StateObject): Array<Commands.ISerializableCommand>; | ||
} |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.AtemState = void 0; | ||
const atem_connection_1 = require("atem-connection"); | ||
const _1 = require("."); | ||
const Resolvers = require("./resolvers"); | ||
@@ -10,3 +8,3 @@ class AtemState { | ||
this.version = atem_connection_1.Enums.ProtocolVersion.V7_2; | ||
this._state = new _1.State(); | ||
this._state = atem_connection_1.AtemStateUtil.Create(); | ||
} | ||
@@ -20,7 +18,11 @@ setState(state) { | ||
diffState(newState) { | ||
return this.diffStates(this._state, newState); | ||
return AtemState.diffStates(this.version, this._state, newState); | ||
} | ||
/** Deprecated */ | ||
diffStates(oldState, newState) { | ||
return AtemState.diffStates(this.version, oldState, newState); | ||
} | ||
static diffStates(version, oldState, newState) { | ||
let commands = []; | ||
commands = commands.concat(Resolvers.videoState(oldState, newState, this.version)); | ||
commands.push(...Resolvers.videoState(oldState, newState, version)); | ||
return commands; | ||
@@ -27,0 +29,0 @@ } |
@@ -1,6 +0,2 @@ | ||
import { VideoState } from 'atem-connection'; | ||
import * as USK from 'atem-connection/dist/state/video/upstreamKeyers'; | ||
import * as DSK from 'atem-connection/dist/state/video/downstreamKeyers'; | ||
import { AudioChannel } from 'atem-connection/dist/state/audio'; | ||
import { MacroPlayerState } from 'atem-connection/dist/state/macro'; | ||
import { VideoState, AudioState } from 'atem-connection'; | ||
import { MediaPlayer, MediaPlayerSource } from 'atem-connection/dist/state/media'; | ||
@@ -12,4 +8,4 @@ export declare namespace Defaults { | ||
const MediaPlayer: MediaPlayer & MediaPlayerSource; | ||
const MacroPlayer: MacroPlayerState; | ||
const DownStreamKeyer: DSK.DownstreamKeyer; | ||
const DownstreamerKeyerSources: Readonly<VideoState.DSK.DownstreamKeyerSources>; | ||
const DownstreamerKeyerProperties: Readonly<VideoState.DSK.DownstreamKeyerProperties>; | ||
const DipTransitionSettings: VideoState.DipTransitionSettings; | ||
@@ -20,14 +16,15 @@ const DVETransitionSettings: VideoState.DVETransitionSettings; | ||
const WipeTransitionSettings: VideoState.WipeTransitionSettings; | ||
const TransitionProperties: Partial<VideoState.TransitionProperties>; | ||
const TransitionSettings: VideoState.TransitionSettings; | ||
const MixEffect: Partial<VideoState.MixEffect>; | ||
function UpstreamKeyer(id: number): USK.UpstreamKeyer; | ||
function flyKeyframe(id: number): USK.UpstreamKeyerFlyKeyframe; | ||
const SuperSourceBox: VideoState.SuperSourceBox; | ||
const SuperSourceProperties: VideoState.SuperSourceProperties; | ||
const SuperSourceBorder: VideoState.SuperSourceBorder; | ||
const UpstreamKeyerPatternSettings: VideoState.USK.UpstreamKeyerPatternSettings; | ||
const UpstreamKeyerLumaSettings: VideoState.USK.UpstreamKeyerLumaSettings; | ||
const UpstreamKeyerChromaSettings: VideoState.USK.UpstreamKeyerChromaSettings; | ||
const UpstreamKeyerDVESettings: VideoState.USK.UpstreamKeyerDVESettings; | ||
function flyKeyframe(id: number): VideoState.USK.UpstreamKeyerFlyKeyframe; | ||
const SuperSourceBox: VideoState.SuperSource.SuperSourceBox; | ||
const SuperSourceProperties: VideoState.SuperSource.SuperSourceProperties; | ||
const SuperSourceBorder: VideoState.SuperSource.SuperSourceBorder; | ||
} | ||
namespace Audio { | ||
const Channel: AudioChannel; | ||
const Channel: AudioState.AudioChannel; | ||
const Master: AudioState.AudioMasterChannel; | ||
} | ||
} |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.Defaults = void 0; | ||
const atem_connection_1 = require("atem-connection"); | ||
@@ -20,31 +19,25 @@ var Defaults; | ||
}; | ||
Video.MacroPlayer = { | ||
macroIndex: 0, | ||
isRunning: false, | ||
isWaiting: false, | ||
loop: false | ||
// export const MacroPlayer: MacroPlayerState = { | ||
// macroIndex: 0, | ||
// isRunning: false, | ||
// isWaiting: false, | ||
// loop: false | ||
// } | ||
Video.DownstreamerKeyerSources = { | ||
fillSource: Video.defaultInput, | ||
cutSource: Video.defaultInput | ||
}; | ||
Video.DownStreamKeyer = { | ||
onAir: false, | ||
inTransition: false, | ||
isAuto: false, | ||
remainingFrames: Video.defaultRate, | ||
sources: { | ||
fillSource: Video.defaultInput, | ||
cutSource: Video.defaultInput | ||
}, | ||
properties: { | ||
tie: false, | ||
rate: Video.defaultRate, | ||
preMultiply: false, | ||
clip: 0, | ||
gain: 0, | ||
invert: false, | ||
mask: { | ||
enabled: false, | ||
top: 0, | ||
bottom: 0, | ||
left: 0, | ||
right: 0 | ||
} | ||
Video.DownstreamerKeyerProperties = { | ||
preMultiply: false, | ||
clip: 0, | ||
gain: 0, | ||
invert: false, | ||
tie: false, | ||
rate: 25, | ||
mask: { | ||
enabled: false, | ||
top: 0, | ||
bottom: 0, | ||
left: 0, | ||
right: 0 | ||
} | ||
@@ -96,105 +89,56 @@ }; | ||
}; | ||
Video.TransitionProperties = { | ||
style: atem_connection_1.Enums.TransitionStyle.MIX, | ||
selection: 1 | ||
// export const TransitionProperties: Omit<VideoState.TransitionProperties, 'nextStyle' | 'nextSelection'> = { | ||
// style: Enums.TransitionStyle.MIX, | ||
// selection: 1 | ||
// } | ||
Video.UpstreamKeyerPatternSettings = { | ||
style: atem_connection_1.Enums.Pattern.LeftToRightBar, | ||
size: 0, | ||
symmetry: 5000, | ||
softness: 0, | ||
positionX: 500, | ||
positionY: 500, | ||
invert: false | ||
}; | ||
Video.TransitionSettings = { | ||
dip: Video.DipTransitionSettings, | ||
DVE: Video.DVETransitionSettings, | ||
mix: Video.MixTransitionSettings, | ||
stinger: Video.StingerTransitionSettings, | ||
wipe: Video.WipeTransitionSettings | ||
Video.UpstreamKeyerLumaSettings = { | ||
preMultiplied: false, | ||
clip: 0, | ||
gain: 0, | ||
invert: false | ||
}; | ||
Video.MixEffect = { | ||
programInput: Video.defaultInput, | ||
previewInput: Video.defaultInput, | ||
inTransition: false, | ||
transitionPreview: false, | ||
transitionPosition: 0, | ||
fadeToBlack: { | ||
isFullyBlack: false, | ||
remainingFrames: 0, | ||
rate: Video.defaultRate, | ||
inTransition: false | ||
}, | ||
transitionProperties: Video.TransitionProperties, | ||
transitionSettings: Video.TransitionSettings, | ||
upstreamKeyers: [] | ||
Video.UpstreamKeyerChromaSettings = { | ||
hue: 0, | ||
gain: 0, | ||
ySuppress: 0, | ||
lift: 0, | ||
narrow: false | ||
}; | ||
function UpstreamKeyer(id) { | ||
return { | ||
upstreamKeyerId: id, | ||
mixEffectKeyType: atem_connection_1.Enums.MixEffectKeyType.Luma, | ||
flyEnabled: false, | ||
fillSource: 0, | ||
cutSource: 0, | ||
maskEnabled: false, | ||
maskTop: 0, | ||
maskBottom: 0, | ||
maskLeft: 0, | ||
maskRight: 0, | ||
onAir: false, | ||
dveSettings: { | ||
borderEnabled: false, | ||
shadowEnabled: false, | ||
borderBevel: atem_connection_1.Enums.BorderBevel.None, | ||
rate: 1, | ||
sizeX: 0, | ||
sizeY: 0, | ||
positionX: 0, | ||
positionY: 0, | ||
rotation: 0, | ||
borderOuterWidth: 0, | ||
borderInnerWidth: 0, | ||
borderOuterSoftness: 0, | ||
borderInnerSoftness: 0, | ||
borderBevelSoftness: 0, | ||
borderBevelPosition: 0, | ||
borderOpacity: 0, | ||
borderHue: 0, | ||
borderSaturation: 0, | ||
borderLuma: 0, | ||
lightSourceDirection: 0, | ||
lightSourceAltitude: 0, | ||
maskEnabled: false, | ||
maskTop: 0, | ||
maskBottom: 0, | ||
maskLeft: 0, | ||
maskRight: 0 | ||
}, | ||
chromaSettings: { | ||
hue: 0, | ||
gain: 0, | ||
ySuppress: 0, | ||
lift: 0, | ||
narrow: false | ||
}, | ||
lumaSettings: { | ||
preMultiplied: false, | ||
clip: 0, | ||
gain: 0, | ||
invert: false | ||
}, | ||
patternSettings: { | ||
style: atem_connection_1.Enums.Pattern.LeftToRightBar, | ||
size: 0, | ||
symmetry: 5000, | ||
softness: 0, | ||
positionX: 500, | ||
positionY: 500, | ||
invert: false | ||
}, | ||
flyKeyframes: [ | ||
flyKeyframe(0), | ||
flyKeyframe(1) | ||
], | ||
flyProperties: { | ||
isASet: false, | ||
isBSet: false, | ||
isAtKeyFrame: atem_connection_1.Enums.IsAtKeyFrame.None, | ||
runToInfiniteIndex: 0 | ||
} | ||
}; | ||
} | ||
Video.UpstreamKeyer = UpstreamKeyer; | ||
Video.UpstreamKeyerDVESettings = { | ||
borderEnabled: false, | ||
shadowEnabled: false, | ||
borderBevel: atem_connection_1.Enums.BorderBevel.None, | ||
rate: 1, | ||
sizeX: 0, | ||
sizeY: 0, | ||
positionX: 0, | ||
positionY: 0, | ||
rotation: 0, | ||
borderOuterWidth: 0, | ||
borderInnerWidth: 0, | ||
borderOuterSoftness: 0, | ||
borderInnerSoftness: 0, | ||
borderBevelSoftness: 0, | ||
borderBevelPosition: 0, | ||
borderOpacity: 0, | ||
borderHue: 0, | ||
borderSaturation: 0, | ||
borderLuma: 0, | ||
lightSourceDirection: 0, | ||
lightSourceAltitude: 0, | ||
maskEnabled: false, | ||
maskTop: 0, | ||
maskBottom: 0, | ||
maskLeft: 0, | ||
maskRight: 0 | ||
}; | ||
function flyKeyframe(id) { | ||
@@ -220,3 +164,3 @@ return { | ||
lightSourceAltitude: 0, | ||
maskEnabled: false, | ||
// maskEnabled: false, | ||
maskTop: 0, | ||
@@ -273,6 +217,13 @@ maskBottom: 0, | ||
gain: 0, | ||
balance: 0 | ||
balance: 0, | ||
supportsRcaToXlrEnabled: false, | ||
rcaToXlrEnabled: false | ||
}; | ||
Audio.Master = { | ||
gain: 0, | ||
balance: 0, | ||
followFadeToBlack: false | ||
}; | ||
})(Audio = Defaults.Audio || (Defaults.Audio = {})); | ||
})(Defaults = exports.Defaults || (exports.Defaults = {})); | ||
//# sourceMappingURL=defaults.js.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.Enums = void 0; | ||
var Enums; | ||
@@ -5,0 +4,0 @@ (function (Enums) { |
@@ -5,1 +5,4 @@ export * from './atemState'; | ||
export * from './state'; | ||
import * as AtemConnection from 'atem-connection'; | ||
export { AtemConnection }; | ||
export { Commands, Enums as AtemEnums } from 'atem-connection'; |
@@ -7,3 +7,8 @@ "use strict"; | ||
tslib_1.__exportStar(require("./enums"), exports); | ||
tslib_1.__exportStar(require("./state"), exports); | ||
// Re-export atem-connection as the version is pinned, and so that users can easily use the same version | ||
const AtemConnection = require("atem-connection"); | ||
exports.AtemConnection = AtemConnection; | ||
var atem_connection_1 = require("atem-connection"); | ||
exports.Commands = atem_connection_1.Commands; | ||
exports.AtemEnums = atem_connection_1.Enums; | ||
//# sourceMappingURL=index.js.map |
import { Commands } from 'atem-connection'; | ||
import { State as StateObject } from '../'; | ||
export declare function resolveAudioState(oldState: StateObject, newState: StateObject): Array<Commands.AbstractCommand>; | ||
export declare function resolveAudioMixerInputsState(oldState: StateObject, newState: StateObject): Array<Commands.AbstractCommand>; | ||
export declare function resolveAudioState(oldState: StateObject, newState: StateObject): Array<Commands.ISerializableCommand>; | ||
export declare function resolveAudioMixerInputsState(oldState: StateObject, newState: StateObject): Array<Commands.ISerializableCommand>; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.resolveAudioMixerInputsState = exports.resolveAudioState = void 0; | ||
const atem_connection_1 = require("atem-connection"); | ||
const util_1 = require("../util"); | ||
const defaults_1 = require("../defaults"); | ||
function resolveAudioState(oldState, newState) { | ||
let commands = []; | ||
const commands = []; | ||
if (!newState.audio) | ||
return commands; | ||
commands = commands.concat(resolveAudioMixerInputsState(oldState, newState)); | ||
const oldMaster = oldState.audio.master; | ||
const newMaster = newState.audio.master; | ||
const props = util_1.compareProps(oldMaster, newMaster, ['gain', 'balance', 'followFadeToBlack']); | ||
if (Object.keys(props).length > 0) { | ||
commands.push(...resolveAudioMixerInputsState(oldState, newState)); | ||
if (oldState.audio.master || newState.audio.master) { | ||
const oldMaster = oldState.audio.master || defaults_1.Defaults.Audio.Master; | ||
const newMaster = newState.audio.master || defaults_1.Defaults.Audio.Master; | ||
const props = util_1.diffObject(oldMaster, newMaster); | ||
const command = new atem_connection_1.Commands.AudioMixerMasterCommand(); | ||
command.updateProps(props); | ||
commands.push(command); | ||
if (command.updateProps(props)) { | ||
commands.push(command); | ||
} | ||
} | ||
@@ -23,21 +24,9 @@ return commands; | ||
function resolveAudioMixerInputsState(oldState, newState) { | ||
let commands = []; | ||
if (!newState.audio || !newState.audio.channels) | ||
return commands; | ||
for (const index in newState.audio.channels) { | ||
const oldChannel = oldState.audio.channels[index]; | ||
const newChannel = newState.audio.channels[index]; | ||
let props = {}; | ||
if (!newChannel) | ||
continue; | ||
if (!oldChannel) { | ||
props = newChannel; | ||
} | ||
else { | ||
props = util_1.compareProps(oldChannel, newChannel, ['gain', 'mixOption', 'balance']); | ||
} | ||
if (Object.keys(props).length > 0) { | ||
const command = new atem_connection_1.Commands.AudioMixerInputCommand(); | ||
command.index = Number(index); | ||
command.updateProps(props); | ||
const commands = []; | ||
for (const index of util_1.getAllKeysNumber(oldState.audio.channels, newState.audio.channels)) { | ||
const oldChannel = oldState.audio.channels[index] || defaults_1.Defaults.Audio.Channel; | ||
const newChannel = newState.audio.channels[index] || defaults_1.Defaults.Audio.Channel; | ||
const props = util_1.diffObject(oldChannel, newChannel); | ||
const command = new atem_connection_1.Commands.AudioMixerInputCommand(index); | ||
if (command.updateProps(props)) { | ||
commands.push(command); | ||
@@ -44,0 +33,0 @@ } |
@@ -1,5 +0,5 @@ | ||
import { Commands as AtemCommands } from 'atem-connection'; | ||
import { Commands as AtemCommands, VideoState } from 'atem-connection'; | ||
import { State as StateObject } from '../'; | ||
export declare function resolveDownstreamKeyerState(oldState: StateObject, newState: StateObject): Array<AtemCommands.AbstractCommand>; | ||
export declare function resolveDownstreamKeyerPropertiesState(oldState: StateObject, newState: StateObject): Array<AtemCommands.AbstractCommand>; | ||
export declare function resolveDownstreamKeyerMaskState(oldState: StateObject, newState: StateObject): Array<AtemCommands.AbstractCommand>; | ||
export declare function resolveDownstreamKeyerState(oldState: StateObject, newState: StateObject): Array<AtemCommands.ISerializableCommand>; | ||
export declare function resolveDownstreamKeyerPropertiesState(index: number, oldDsk: VideoState.DSK.DownstreamKeyer, newDsk: VideoState.DSK.DownstreamKeyer): Array<AtemCommands.ISerializableCommand>; | ||
export declare function resolveDownstreamKeyerMaskState(index: number, oldDsk: VideoState.DSK.DownstreamKeyer, newDsk: VideoState.DSK.DownstreamKeyer): Array<AtemCommands.ISerializableCommand>; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.resolveDownstreamKeyerMaskState = exports.resolveDownstreamKeyerPropertiesState = exports.resolveDownstreamKeyerState = void 0; | ||
const atem_connection_1 = require("atem-connection"); | ||
const __1 = require("../"); | ||
const util_1 = require("../util"); | ||
function resolveDownstreamKeyerState(oldState, newState) { | ||
let commands = []; | ||
commands = commands.concat(resolveDownstreamKeyerMaskState(oldState, newState)); | ||
commands = commands.concat(resolveDownstreamKeyerPropertiesState(oldState, newState)); | ||
for (const index in newState.video.downstreamKeyers) { | ||
const oldDsk = oldState.video.downstreamKeyers[index]; | ||
const newDsk = newState.video.downstreamKeyers[index]; | ||
if (oldDsk.sources.fillSource !== newDsk.sources.fillSource) { | ||
const command = new atem_connection_1.Commands.DownstreamKeyFillSourceCommand(); | ||
command.downstreamKeyerId = Number(index); | ||
command.updateProps({ input: newDsk.sources.fillSource }); | ||
commands.push(command); | ||
const commands = []; | ||
for (const index of util_1.getAllKeysNumber(oldState.video.downstreamKeyers, newState.video.downstreamKeyers)) { | ||
const oldDsk = atem_connection_1.AtemStateUtil.getDownstreamKeyer(oldState, index, true); | ||
const newDsk = atem_connection_1.AtemStateUtil.getDownstreamKeyer(newState, index, true); | ||
commands.push(...resolveDownstreamKeyerPropertiesState(index, oldDsk, newDsk)); | ||
commands.push(...resolveDownstreamKeyerMaskState(index, oldDsk, newDsk)); | ||
const oldSources = oldDsk.sources || __1.Defaults.Video.DownstreamerKeyerSources; | ||
const newSources = newDsk.sources || __1.Defaults.Video.DownstreamerKeyerSources; | ||
if (oldSources.fillSource !== newSources.fillSource) { | ||
commands.push(new atem_connection_1.Commands.DownstreamKeyFillSourceCommand(index, newSources.fillSource)); | ||
} | ||
if (oldDsk.sources.cutSource !== newDsk.sources.cutSource) { | ||
const command = new atem_connection_1.Commands.DownstreamKeyCutSourceCommand(); | ||
command.downstreamKeyerId = Number(index); | ||
command.updateProps({ input: newDsk.sources.cutSource }); | ||
commands.push(command); | ||
if (oldSources.cutSource !== newSources.cutSource) { | ||
commands.push(new atem_connection_1.Commands.DownstreamKeyCutSourceCommand(index, newSources.cutSource)); | ||
} | ||
if (!oldDsk.isAuto && newDsk.isAuto) { | ||
const command = new atem_connection_1.Commands.DownstreamKeyAutoCommand(); | ||
command.downstreamKeyerId = Number(index); | ||
commands.push(command); | ||
commands.push(new atem_connection_1.Commands.DownstreamKeyAutoCommand(index)); | ||
} | ||
else if (oldDsk.onAir !== newDsk.onAir) { | ||
const command = new atem_connection_1.Commands.DownstreamKeyOnAirCommand(); | ||
command.downstreamKeyerId = Number(index); | ||
command.properties = { onAir: newDsk.onAir }; | ||
commands.push(command); | ||
commands.push(new atem_connection_1.Commands.DownstreamKeyOnAirCommand(index, newDsk.onAir)); | ||
} | ||
@@ -39,62 +31,32 @@ } | ||
exports.resolveDownstreamKeyerState = resolveDownstreamKeyerState; | ||
function resolveDownstreamKeyerPropertiesState(oldState, newState) { | ||
function resolveDownstreamKeyerPropertiesState(index, oldDsk, newDsk) { | ||
const commands = []; | ||
for (const index in newState.video.downstreamKeyers) { | ||
const oldProps = oldState.video.downstreamKeyers[index].properties; | ||
const newProps = newState.video.downstreamKeyers[index].properties; | ||
const dskIndex = Number(index); | ||
const props = {}; | ||
if (oldProps.clip !== newProps.clip) { | ||
props.clip = newProps.clip; | ||
} | ||
if (oldProps.gain !== newProps.gain) { | ||
props.gain = newProps.gain; | ||
} | ||
if (oldProps.invert !== newProps.invert) { | ||
props.invert = newProps.invert; | ||
} | ||
if (oldProps.preMultiply !== newProps.preMultiply) { | ||
props.preMultiply = newProps.preMultiply; | ||
} | ||
if (Object.keys(props).length > 0) { | ||
const command = new atem_connection_1.Commands.DownstreamKeyGeneralCommand(); | ||
command.downstreamKeyerId = dskIndex; | ||
command.updateProps(props); | ||
commands.push(command); | ||
} | ||
if (oldProps.rate !== newProps.rate) { | ||
const command = new atem_connection_1.Commands.DownstreamKeyRateCommand(); | ||
command.downstreamKeyerId = dskIndex; | ||
command.updateProps({ rate: newProps.rate }); | ||
commands.push(command); | ||
} | ||
if (oldProps.tie !== newProps.tie) { | ||
const command = new atem_connection_1.Commands.DownstreamKeyTieCommand(); | ||
command.downstreamKeyerId = dskIndex; | ||
command.updateProps({ tie: newProps.tie }); | ||
commands.push(command); | ||
} | ||
if (!oldDsk.properties && !newDsk.properties) | ||
return commands; | ||
const oldProps = oldDsk.properties || __1.Defaults.Video.DownstreamerKeyerProperties; | ||
const newProps = newDsk.properties || __1.Defaults.Video.DownstreamerKeyerProperties; | ||
const props = util_1.diffObject(oldProps, newProps); | ||
const command = new atem_connection_1.Commands.DownstreamKeyGeneralCommand(index); | ||
if (command.updateProps(props)) { | ||
commands.push(command); | ||
} | ||
if (oldProps.rate !== newProps.rate) { | ||
commands.push(new atem_connection_1.Commands.DownstreamKeyRateCommand(index, newProps.rate)); | ||
} | ||
if (oldProps.tie !== newProps.tie) { | ||
commands.push(new atem_connection_1.Commands.DownstreamKeyTieCommand(index, newProps.tie)); | ||
} | ||
return commands; | ||
} | ||
exports.resolveDownstreamKeyerPropertiesState = resolveDownstreamKeyerPropertiesState; | ||
function resolveDownstreamKeyerMaskState(oldState, newState) { | ||
function resolveDownstreamKeyerMaskState(index, oldDsk, newDsk) { | ||
const commands = []; | ||
for (const index in newState.video.downstreamKeyers) { | ||
const oldProps = oldState.video.downstreamKeyers[index].properties.mask; | ||
const newProps = newState.video.downstreamKeyers[index].properties.mask; | ||
const dskIndex = Number(index); | ||
const props = {}; | ||
for (let key in newProps) { | ||
const typedKey = key; | ||
if (newProps[typedKey] !== oldProps[typedKey]) { | ||
props[typedKey] = newProps[typedKey]; | ||
} | ||
} | ||
if (Object.keys(props).length > 0) { | ||
const command = new atem_connection_1.Commands.DownstreamKeyMaskCommand(); | ||
command.downstreamKeyerId = dskIndex; | ||
command.updateProps(props); | ||
commands.push(command); | ||
} | ||
if (!oldDsk.properties && !newDsk.properties) | ||
return commands; | ||
const oldProps = oldDsk.properties || __1.Defaults.Video.DownstreamerKeyerProperties; | ||
const newProps = newDsk.properties || __1.Defaults.Video.DownstreamerKeyerProperties; | ||
const props = util_1.diffObject(oldProps.mask, newProps.mask); | ||
const command = new atem_connection_1.Commands.DownstreamKeyMaskCommand(index); | ||
if (command.updateProps(props)) { | ||
commands.push(command); | ||
} | ||
@@ -101,0 +63,0 @@ return commands; |
import { Commands as AtemCommands, Enums } from 'atem-connection'; | ||
import { State as StateObject } from '../'; | ||
export declare function videoState(oldState: StateObject, newState: StateObject, version: Enums.ProtocolVersion): Array<AtemCommands.AbstractCommand>; | ||
export declare function videoState(oldState: StateObject, newState: StateObject, version: Enums.ProtocolVersion): Array<AtemCommands.ISerializableCommand>; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.videoState = void 0; | ||
const atem_connection_1 = require("atem-connection"); | ||
@@ -10,18 +9,18 @@ const mixEffect_1 = require("./mixEffect"); | ||
const macro_1 = require("./macro"); | ||
const util_1 = require("../util"); | ||
const media_1 = require("./media"); | ||
function videoState(oldState, newState, version) { | ||
let commands = []; | ||
commands = commands.concat(mixEffect_1.resolveMixEffectsState(oldState, newState)); | ||
commands = commands.concat(macro_1.resolveMacroPlayerState(oldState, newState)); | ||
commands = commands.concat(downstreamKeyer_1.resolveDownstreamKeyerState(oldState, newState)); | ||
commands = commands.concat(supersource_1.resolveSuperSourceState(oldState, newState, version)); | ||
commands = commands.concat(audio_1.resolveAudioState(oldState, newState)); | ||
commands = commands.concat(media_1.resolveMediaPlayerState(oldState, newState)); | ||
const commands = []; | ||
commands.push(...mixEffect_1.resolveMixEffectsState(oldState, newState)); | ||
commands.push(...macro_1.resolveMacroPlayerState(oldState, newState)); | ||
commands.push(...downstreamKeyer_1.resolveDownstreamKeyerState(oldState, newState)); | ||
commands.push(...supersource_1.resolveSuperSourceState(oldState, newState, version)); | ||
commands.push(...audio_1.resolveAudioState(oldState, newState)); | ||
commands.push(...media_1.resolveMediaPlayerState(oldState, newState)); | ||
// resolve auxilliaries: | ||
for (const index in newState.video.auxilliaries) { | ||
if (oldState.video.auxilliaries[index] !== newState.video.auxilliaries[index]) { | ||
const command = new atem_connection_1.Commands.AuxSourceCommand(); | ||
command.auxBus = Number(index); | ||
command.updateProps({ source: newState.video.auxilliaries[index] }); | ||
commands.push(command); | ||
for (const index of util_1.getAllKeysNumber(oldState.video.auxilliaries, newState.video.auxilliaries)) { | ||
const oldSource = oldState.video.auxilliaries[index] || 0; | ||
const newSource = newState.video.auxilliaries[index] || 0; | ||
if (oldSource !== newSource) { | ||
commands.push(new atem_connection_1.Commands.AuxSourceCommand(index, newSource)); | ||
} | ||
@@ -28,0 +27,0 @@ } |
import { Commands as AtemCommands } from 'atem-connection'; | ||
import { State as StateObject } from '../'; | ||
export declare function resolveMacroPlayerState(oldState: StateObject, newState: StateObject): Array<AtemCommands.AbstractCommand>; | ||
export declare function resolveMacroPlayerState(oldState: StateObject, newState: StateObject): Array<AtemCommands.ISerializableCommand>; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.resolveMacroPlayerState = void 0; | ||
const atem_connection_1 = require("atem-connection"); | ||
function resolveMacroPlayerState(oldState, newState) { | ||
const commands = []; | ||
if (!newState.macro) | ||
return commands; | ||
const newPlayer = newState.macro.macroPlayer; | ||
@@ -13,6 +10,3 @@ const oldPlayer = oldState.macro.macroPlayer; | ||
if (newPlayer && newPlayer.isRunning && (!oldPlayer || !oldPlayer.isRunning || oldPlayer.macroIndex !== newPlayer.macroIndex)) { | ||
const command = new atem_connection_1.Commands.MacroActionCommand(); | ||
command.index = newPlayer.macroIndex; | ||
command.updateProps({ action: atem_connection_1.Enums.MacroAction.Run }); | ||
commands.push(command); | ||
commands.push(new atem_connection_1.Commands.MacroActionCommand(newPlayer.macroIndex, atem_connection_1.Enums.MacroAction.Run)); | ||
// TODO - cancel anything running? | ||
@@ -19,0 +13,0 @@ } |
import { Commands as AtemCommands } from 'atem-connection'; | ||
import { State as StateObject } from '../'; | ||
export declare function resolveMediaPlayerState(oldState: StateObject, newState: StateObject): Array<AtemCommands.AbstractCommand>; | ||
export declare function resolveMediaPlayerState(oldState: StateObject, newState: StateObject): Array<AtemCommands.ISerializableCommand>; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.resolveMediaPlayerState = void 0; | ||
const atem_connection_1 = require("atem-connection"); | ||
@@ -8,21 +7,15 @@ const util_1 = require("../util"); | ||
const commands = []; | ||
if (newState.media && newState.media.players) { | ||
for (const index in newState.media.players) { | ||
const newPlayer = newState.media.players[index]; | ||
const oldPlayer = oldState.media.players[index]; | ||
const props = util_1.diffObject(oldPlayer, newPlayer); | ||
if (props) { | ||
const command = new atem_connection_1.Commands.MediaPlayerStatusCommand(); | ||
command.mediaPlayerId = Number(index); | ||
command.updateProps(props); | ||
commands.push(command); | ||
} | ||
const srcProps = util_1.diffObject(oldPlayer, newPlayer); | ||
if (srcProps) { | ||
const command = new atem_connection_1.Commands.MediaPlayerSourceCommand(); | ||
command.mediaPlayerId = Number(index); | ||
command.updateProps(srcProps); | ||
commands.push(command); | ||
} | ||
for (const index of util_1.getAllKeysNumber(oldState.media.players, newState.media.players)) { | ||
const newPlayer = atem_connection_1.AtemStateUtil.getMediaPlayer(newState, index, true); | ||
const oldPlayer = atem_connection_1.AtemStateUtil.getMediaPlayer(oldState, index, true); | ||
const props = util_1.diffObject(oldPlayer, newPlayer); | ||
const command = new atem_connection_1.Commands.MediaPlayerStatusCommand(index); | ||
if (command.updateProps(props)) { | ||
commands.push(command); | ||
} | ||
const srcProps = util_1.diffObject(oldPlayer, newPlayer); | ||
const srcCommand = new atem_connection_1.Commands.MediaPlayerSourceCommand(index); | ||
if (srcCommand.updateProps(srcProps)) { | ||
commands.push(srcCommand); | ||
} | ||
} | ||
@@ -29,0 +22,0 @@ return commands; |
@@ -1,5 +0,6 @@ | ||
import { Commands as AtemCommands } from 'atem-connection'; | ||
import { Commands as AtemCommands, VideoState } from 'atem-connection'; | ||
import { State as StateObject } from '../'; | ||
export declare function resolveMixEffectsState(oldState: StateObject, newState: StateObject): Array<AtemCommands.AbstractCommand>; | ||
export declare function resolveTransitionPropertiesState(oldState: StateObject, newState: StateObject): Array<AtemCommands.AbstractCommand>; | ||
export declare function resolveTransitionSettingsState(oldState: StateObject, newState: StateObject): Array<AtemCommands.AbstractCommand>; | ||
import { ExtendedMixEffect } from '../state'; | ||
export declare function resolveMixEffectsState(oldState: StateObject, newState: StateObject): Array<AtemCommands.ISerializableCommand>; | ||
export declare function resolveTransitionPropertiesState(mixEffectId: number, oldMixEffect: VideoState.MixEffect | ExtendedMixEffect, newMixEffect: VideoState.MixEffect | ExtendedMixEffect): Array<AtemCommands.ISerializableCommand>; | ||
export declare function resolveTransitionSettingsState(mixEffectId: number, oldMixEffect: VideoState.MixEffect | ExtendedMixEffect, newMixEffect: VideoState.MixEffect | ExtendedMixEffect): Array<AtemCommands.ISerializableCommand>; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.resolveTransitionSettingsState = exports.resolveTransitionPropertiesState = exports.resolveMixEffectsState = void 0; | ||
const atem_connection_1 = require("atem-connection"); | ||
@@ -9,51 +8,31 @@ const __1 = require("../"); | ||
function resolveMixEffectsState(oldState, newState) { | ||
let commands = []; | ||
commands = commands.concat(resolveTransitionPropertiesState(oldState, newState)); | ||
commands = commands.concat(resolveTransitionSettingsState(oldState, newState)); | ||
commands = commands.concat(upstreamKeyers_1.resolveUpstreamKeyerState(oldState, newState)); | ||
for (const mixEffectId in oldState.video.ME) { | ||
if (!oldState.video.ME[mixEffectId] || !newState.video.ME[mixEffectId]) { | ||
continue; | ||
} | ||
const oldMixEffect = oldState.video.ME[mixEffectId]; | ||
const newMixEffect = newState.video.ME[mixEffectId]; | ||
if (!oldMixEffect || !newMixEffect) | ||
continue; | ||
let oldMEInput = oldMixEffect.input; | ||
if (typeof oldMEInput === 'undefined') | ||
oldMEInput = oldMixEffect.programInput; | ||
if (typeof newMixEffect.input !== 'undefined' && typeof newMixEffect.transition !== 'undefined') { | ||
const commands = []; | ||
for (const mixEffectId of util_1.getAllKeysNumber(oldState.video.mixEffects, newState.video.mixEffects)) { | ||
const oldMixEffect = atem_connection_1.AtemStateUtil.getMixEffect(oldState, mixEffectId, true); | ||
const newMixEffect = atem_connection_1.AtemStateUtil.getMixEffect(newState, mixEffectId, true); | ||
commands.push(...resolveTransitionPropertiesState(mixEffectId, oldMixEffect, newMixEffect)); | ||
commands.push(...resolveTransitionSettingsState(mixEffectId, oldMixEffect, newMixEffect)); | ||
commands.push(...upstreamKeyers_1.resolveUpstreamKeyerState(mixEffectId, oldMixEffect, newMixEffect)); | ||
const oldMEInput = 'input' in oldMixEffect ? oldMixEffect.input : oldMixEffect.programInput; | ||
const oldMeTransition = 'transition' in oldMixEffect ? oldMixEffect.transition : oldMixEffect.transitionProperties.style; | ||
if ('input' in newMixEffect && 'transition' in newMixEffect) { | ||
if (newMixEffect.input !== oldMEInput || newMixEffect.transition === __1.Enums.TransitionStyle.DUMMY) { | ||
const command = new atem_connection_1.Commands.PreviewInputCommand(); | ||
command.mixEffect = Number(mixEffectId); | ||
command.updateProps({ source: newMixEffect.input }); | ||
commands.push(command); | ||
commands.push(new atem_connection_1.Commands.PreviewInputCommand(mixEffectId, newMixEffect.input)); | ||
if (newMixEffect.transition === __1.Enums.TransitionStyle.CUT) { | ||
const command = new atem_connection_1.Commands.CutCommand(); | ||
command.mixEffect = Number(mixEffectId); | ||
commands.push(command); | ||
commands.push(new atem_connection_1.Commands.CutCommand(mixEffectId)); | ||
} | ||
else if (newMixEffect.transition !== __1.Enums.TransitionStyle.DUMMY) { | ||
if (newMixEffect.transition !== (oldMixEffect.transition || oldMixEffect.transitionProperties.style)) { // set style before auto transition command | ||
const command = new atem_connection_1.Commands.TransitionPropertiesCommand(); | ||
command.mixEffect = Number(mixEffectId); | ||
command.updateProps({ style: newMixEffect.transition }); | ||
if (newMixEffect.transition !== oldMeTransition) { // set style before auto transition command | ||
const command = new atem_connection_1.Commands.TransitionPropertiesCommand(mixEffectId); | ||
command.updateProps({ nextStyle: newMixEffect.transition }); | ||
commands.push(command); | ||
} | ||
const resetCommand = new atem_connection_1.Commands.TransitionPositionCommand(); | ||
resetCommand.mixEffect = Number(mixEffectId); | ||
resetCommand.updateProps({ handlePosition: 0 }); | ||
commands.push(resetCommand); | ||
const command = new atem_connection_1.Commands.AutoTransitionCommand(); | ||
command.mixEffect = Number(mixEffectId); | ||
commands.push(command); | ||
commands.push(new atem_connection_1.Commands.TransitionPositionCommand(mixEffectId, 0)); | ||
commands.push(new atem_connection_1.Commands.AutoTransitionCommand(mixEffectId)); | ||
} | ||
} | ||
} | ||
else { | ||
else if ('previewInput' in oldMixEffect && 'previewInput' in newMixEffect) { | ||
if (oldMixEffect.previewInput !== newMixEffect.previewInput) { | ||
const command = new atem_connection_1.Commands.PreviewInputCommand(); | ||
command.mixEffect = Number(mixEffectId); | ||
command.updateProps({ source: newMixEffect.previewInput }); | ||
commands.push(command); | ||
commands.push(new atem_connection_1.Commands.PreviewInputCommand(mixEffectId, newMixEffect.previewInput)); | ||
} | ||
@@ -65,31 +44,13 @@ if (oldMEInput !== newMixEffect.programInput) { | ||
// Upstream Keyer is set for next transition | ||
const command = new atem_connection_1.Commands.ProgramInputCommand(); | ||
command.mixEffect = Number(mixEffectId); | ||
command.updateProps({ source: newMixEffect.programInput }); | ||
commands.push(command); | ||
commands.push(new atem_connection_1.Commands.ProgramInputCommand(mixEffectId, newMixEffect.programInput)); | ||
} | ||
} | ||
if (newMixEffect.inTransition && oldMixEffect.transitionPosition !== newMixEffect.transitionPosition) { | ||
const command = new atem_connection_1.Commands.TransitionPositionCommand(); | ||
command.mixEffect = Number(mixEffectId); | ||
command.updateProps({ | ||
handlePosition: newMixEffect.transitionPosition | ||
}); | ||
commands.push(command); | ||
if (newMixEffect.transitionPosition.inTransition && oldMixEffect.transitionPosition.handlePosition !== newMixEffect.transitionPosition.handlePosition) { | ||
commands.push(new atem_connection_1.Commands.TransitionPositionCommand(mixEffectId, newMixEffect.transitionPosition.handlePosition)); | ||
} | ||
if (oldMixEffect.inTransition && !newMixEffect.inTransition) { | ||
const command = new atem_connection_1.Commands.TransitionPositionCommand(); | ||
command.mixEffect = Number(mixEffectId); | ||
command.updateProps({ | ||
handlePosition: 10000 // finish transition | ||
}); | ||
commands.push(command); | ||
if (oldMixEffect.transitionPosition.inTransition && !newMixEffect.transitionPosition.inTransition) { | ||
commands.push(new atem_connection_1.Commands.TransitionPositionCommand(mixEffectId, 10000)); // finish transition | ||
} | ||
if (oldMixEffect.transitionPreview !== newMixEffect.transitionPreview) { | ||
const command = new atem_connection_1.Commands.PreviewTransitionCommand(); | ||
command.mixEffect = Number(mixEffectId); | ||
command.updateProps({ | ||
preview: newMixEffect.transitionPreview | ||
}); | ||
commands.push(command); | ||
commands.push(new atem_connection_1.Commands.PreviewTransitionCommand(mixEffectId, newMixEffect.transitionPreview)); | ||
} | ||
@@ -101,23 +62,10 @@ // @todo: fadeToBlack | ||
exports.resolveMixEffectsState = resolveMixEffectsState; | ||
function resolveTransitionPropertiesState(oldState, newState) { | ||
function resolveTransitionPropertiesState(mixEffectId, oldMixEffect, newMixEffect) { | ||
const commands = []; | ||
for (const mixEffectId in oldState.video.ME) { | ||
if (!oldState.video.ME[mixEffectId] || !newState.video.ME[mixEffectId]) { | ||
continue; | ||
} | ||
const oldTransitionProperties = oldState.video.ME[mixEffectId].transitionProperties; | ||
const newTransitionProperties = newState.video.ME[mixEffectId].transitionProperties; | ||
let props = {}; | ||
if (oldTransitionProperties.selection !== newTransitionProperties.selection) { | ||
props.selection = newTransitionProperties.selection; | ||
} | ||
if (oldTransitionProperties.style !== newTransitionProperties.style) { | ||
props.style = newTransitionProperties.style; | ||
} | ||
if (typeof props.selection !== 'undefined' || typeof props.style !== 'undefined') { | ||
const command = new atem_connection_1.Commands.TransitionPropertiesCommand(); | ||
command.mixEffect = Number(mixEffectId); | ||
command.updateProps(props); | ||
commands.push(command); | ||
} | ||
const oldTransitionProperties = oldMixEffect.transitionProperties; | ||
const newTransitionProperties = newMixEffect.transitionProperties; | ||
const props = util_1.diffObject(oldTransitionProperties, newTransitionProperties); | ||
const command = new atem_connection_1.Commands.TransitionPropertiesCommand(mixEffectId); | ||
if (command.updateProps(props)) { | ||
commands.push(command); | ||
} | ||
@@ -127,55 +75,40 @@ return commands; | ||
exports.resolveTransitionPropertiesState = resolveTransitionPropertiesState; | ||
function resolveTransitionSettingsState(oldState, newState) { | ||
function resolveTransitionSettingsState(mixEffectId, oldMixEffect, newMixEffect) { | ||
const commands = []; | ||
for (const mixEffectId in oldState.video.ME) { | ||
if (!oldState.video.ME[mixEffectId] || !newState.video.ME[mixEffectId]) { | ||
continue; | ||
const oldTransitionSettings = oldMixEffect.transitionSettings; | ||
const newTransitionSettings = newMixEffect.transitionSettings; | ||
if (newTransitionSettings.dip || oldTransitionSettings.dip) { | ||
const dipProperties = util_1.diffObject(oldTransitionSettings.dip || __1.Defaults.Video.DipTransitionSettings, newTransitionSettings.dip || __1.Defaults.Video.DipTransitionSettings); | ||
const command = new atem_connection_1.Commands.TransitionDipCommand(mixEffectId); | ||
if (command.updateProps(dipProperties)) { | ||
commands.push(command); | ||
} | ||
const oldTransitionSettings = oldState.video.ME[mixEffectId].transitionSettings; | ||
const newTransitionSettings = newState.video.ME[mixEffectId].transitionSettings; | ||
if (newTransitionSettings.dip) { | ||
const dipProperties = util_1.diffObject(oldTransitionSettings.dip, newTransitionSettings.dip); | ||
if (dipProperties) { | ||
let command = new atem_connection_1.Commands.TransitionDipCommand(); | ||
command.mixEffect = Number(mixEffectId); | ||
command.updateProps(dipProperties); | ||
commands.push(command); | ||
} | ||
} | ||
if (newTransitionSettings.DVE || oldTransitionSettings.DVE) { | ||
const dveProperties = util_1.diffObject(oldTransitionSettings.DVE || __1.Defaults.Video.DVETransitionSettings, newTransitionSettings.DVE || __1.Defaults.Video.DVETransitionSettings); | ||
const command = new atem_connection_1.Commands.TransitionDVECommand(mixEffectId); | ||
if (command.updateProps(dveProperties)) { | ||
commands.push(command); | ||
} | ||
if (newTransitionSettings.DVE) { | ||
const dveProperties = util_1.diffObject(oldTransitionSettings.DVE, newTransitionSettings.DVE); | ||
if (dveProperties) { | ||
let command = new atem_connection_1.Commands.TransitionDVECommand(); | ||
command.mixEffect = Number(mixEffectId); | ||
command.updateProps(dveProperties); | ||
commands.push(command); | ||
} | ||
} | ||
if (newTransitionSettings.mix || oldTransitionSettings.mix) { | ||
const oldProps = oldTransitionSettings.mix || __1.Defaults.Video.MixTransitionSettings; | ||
const newProps = newTransitionSettings.mix || __1.Defaults.Video.MixTransitionSettings; | ||
if (oldProps.rate !== newProps.rate) { | ||
commands.push(new atem_connection_1.Commands.TransitionMixCommand(mixEffectId, newProps.rate)); | ||
} | ||
if (newTransitionSettings.mix) { | ||
const mixProperties = util_1.diffObject(oldTransitionSettings.mix, newTransitionSettings.mix); | ||
if (mixProperties) { | ||
let command = new atem_connection_1.Commands.TransitionMixCommand(); | ||
command.mixEffect = Number(mixEffectId); | ||
command.updateProps(mixProperties); | ||
commands.push(command); | ||
} | ||
} | ||
if (newTransitionSettings.stinger || oldTransitionSettings.stinger) { | ||
const stingerProperties = util_1.diffObject(oldTransitionSettings.stinger || __1.Defaults.Video.StingerTransitionSettings, newTransitionSettings.stinger || __1.Defaults.Video.StingerTransitionSettings); | ||
const command = new atem_connection_1.Commands.TransitionStingerCommand(mixEffectId); | ||
if (command.updateProps(stingerProperties)) { | ||
commands.push(command); | ||
} | ||
if (newTransitionSettings.stinger) { | ||
const stingerProperties = util_1.diffObject(oldTransitionSettings.stinger, newTransitionSettings.stinger); | ||
if (stingerProperties) { | ||
let command = new atem_connection_1.Commands.TransitionStingerCommand(); | ||
command.mixEffect = Number(mixEffectId); | ||
command.updateProps(stingerProperties); | ||
commands.push(command); | ||
} | ||
} | ||
if (newTransitionSettings.wipe || oldTransitionSettings.wipe) { | ||
const wipeProperties = util_1.diffObject(oldTransitionSettings.wipe || __1.Defaults.Video.WipeTransitionSettings, newTransitionSettings.wipe || __1.Defaults.Video.WipeTransitionSettings); | ||
const command = new atem_connection_1.Commands.TransitionWipeCommand(mixEffectId); | ||
if (command.updateProps(wipeProperties)) { | ||
commands.push(command); | ||
} | ||
if (newTransitionSettings.wipe) { | ||
const wipeProperties = util_1.diffObject(oldTransitionSettings.wipe, newTransitionSettings.wipe); | ||
if (wipeProperties) { | ||
let command = new atem_connection_1.Commands.TransitionWipeCommand(); | ||
command.mixEffect = Number(mixEffectId); | ||
command.updateProps(wipeProperties); | ||
commands.push(command); | ||
} | ||
} | ||
} | ||
@@ -182,0 +115,0 @@ return commands; |
import { Commands as AtemCommands, Enums } from 'atem-connection'; | ||
import { State as StateObject } from '..'; | ||
export declare function resolveSuperSourceState(oldState: StateObject, newState: StateObject, version: Enums.ProtocolVersion): Array<AtemCommands.AbstractCommand>; | ||
export declare function resolveSuperSourceBoxState(oldState: StateObject, newState: StateObject, version: Enums.ProtocolVersion): Array<AtemCommands.AbstractCommand>; | ||
export declare function resolveSuperSourcePropertiesState(oldState: StateObject, newState: StateObject): Array<AtemCommands.AbstractCommand>; | ||
export declare function resolveSuperSourcePropertiesV8State(oldState: StateObject, newState: StateObject): Array<AtemCommands.AbstractCommand>; | ||
export declare function resolveSuperSourceBorderV8State(oldState: StateObject, newState: StateObject): Array<AtemCommands.AbstractCommand>; | ||
export declare function resolveSuperSourceState(oldState: StateObject, newState: StateObject, version: Enums.ProtocolVersion): Array<AtemCommands.ISerializableCommand>; | ||
export declare function resolveSuperSourceBoxState(oldState: StateObject, newState: StateObject, version: Enums.ProtocolVersion): Array<AtemCommands.ISerializableCommand>; | ||
export declare function resolveSuperSourcePropertiesState(oldState: StateObject, newState: StateObject): Array<AtemCommands.ISerializableCommand>; | ||
export declare function resolveSuperSourcePropertiesV8State(oldState: StateObject, newState: StateObject): Array<AtemCommands.ISerializableCommand>; | ||
export declare function resolveSuperSourceBorderV8State(oldState: StateObject, newState: StateObject): Array<AtemCommands.ISerializableCommand>; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.resolveSuperSourceBorderV8State = exports.resolveSuperSourcePropertiesV8State = exports.resolveSuperSourcePropertiesState = exports.resolveSuperSourceBoxState = exports.resolveSuperSourceState = void 0; | ||
const atem_connection_1 = require("atem-connection"); | ||
const util_1 = require("../util"); | ||
const defaults_1 = require("../defaults"); | ||
function resolveSuperSourceState(oldState, newState, version) { | ||
let commands = []; | ||
if (!newState.video.superSources) | ||
return commands; | ||
const commands = []; | ||
if (version < atem_connection_1.Enums.ProtocolVersion.V8_0) { | ||
commands = commands.concat(resolveSuperSourceBoxState(oldState, newState, version), resolveSuperSourcePropertiesState(oldState, newState)); | ||
commands.push(...resolveSuperSourceBoxState(oldState, newState, version)); | ||
commands.push(...resolveSuperSourcePropertiesState(oldState, newState)); | ||
} | ||
else { | ||
commands = commands.concat(resolveSuperSourceBoxState(oldState, newState, version), resolveSuperSourcePropertiesV8State(oldState, newState), resolveSuperSourceBorderV8State(oldState, newState)); | ||
commands.push(...resolveSuperSourceBoxState(oldState, newState, version)); | ||
commands.push(...resolveSuperSourcePropertiesV8State(oldState, newState)); | ||
commands.push(...resolveSuperSourceBorderV8State(oldState, newState)); | ||
} | ||
@@ -20,22 +22,13 @@ return commands; | ||
const commands = []; | ||
for (const ssrc in newState.video.superSources) { | ||
if (version < atem_connection_1.Enums.ProtocolVersion.V8_0 && ssrc !== '0') { | ||
for (const ssrc of util_1.getAllKeysNumber(oldState.video.superSources, newState.video.superSources).sort()) { | ||
if (version < atem_connection_1.Enums.ProtocolVersion.V8_0 && ssrc !== 0) { | ||
// 8.0 added support for multiple ssrc. So only run for the first | ||
continue; | ||
} | ||
for (const index in newState.video.superSources[ssrc].boxes) { | ||
const newBox = newState.video.superSources[ssrc].boxes[index] || {}; | ||
const oldBox = oldState.video.superSources[ssrc].boxes[index] || {}; | ||
const props = {}; | ||
for (let key in newBox) { | ||
const typedKey = key; | ||
if (newBox[typedKey] !== oldBox[typedKey]) { | ||
props[typedKey] = newBox[typedKey]; | ||
} | ||
} | ||
if (Object.keys(props).length > 0) { | ||
const command = new atem_connection_1.Commands.SuperSourceBoxParametersCommand(); | ||
command.ssrcId = Number(ssrc); | ||
command.boxId = Number(index); | ||
command.updateProps(props); | ||
const newSSrc = atem_connection_1.AtemStateUtil.getSuperSource(newState, ssrc, true); | ||
const oldSSrc = atem_connection_1.AtemStateUtil.getSuperSource(oldState, ssrc, true); | ||
for (const index in newSSrc.boxes) { | ||
const props = util_1.diffObject(oldSSrc.boxes[index] || defaults_1.Defaults.Video.SuperSourceBox, newSSrc.boxes[index] || defaults_1.Defaults.Video.SuperSourceBox); | ||
const command = new atem_connection_1.Commands.SuperSourceBoxParametersCommand(ssrc, Number(index)); | ||
if (command.updateProps(props)) { | ||
commands.push(command); | ||
@@ -50,23 +43,18 @@ } | ||
const commands = []; | ||
if (newState.video.superSources[0]) { | ||
const newSsProperties = { | ||
...newState.video.superSources[0].properties, | ||
...newState.video.superSources[0].border | ||
}; | ||
const oldSsProperties = { | ||
...oldState.video.superSources[0].properties, | ||
...oldState.video.superSources[0].border | ||
}; | ||
const props = {}; | ||
for (let key in newSsProperties) { | ||
const typedKey = key; | ||
if (newSsProperties[typedKey] !== oldSsProperties[typedKey]) { | ||
props[typedKey] = newSsProperties[typedKey]; | ||
} | ||
} | ||
if (Object.keys(props).length > 0) { | ||
const command = new atem_connection_1.Commands.SuperSourcePropertiesCommand(); | ||
command.updateProps(props); | ||
commands.push(command); | ||
} | ||
if (!newState.video.superSources[0] && !oldState.video.superSources[0]) | ||
return commands; | ||
const newSSrc = atem_connection_1.AtemStateUtil.getSuperSource(newState, 0, true); | ||
const oldSSrc = atem_connection_1.AtemStateUtil.getSuperSource(oldState, 0, true); | ||
const newSsProperties = { | ||
...newSSrc.properties, | ||
...newSSrc.border | ||
}; | ||
const oldSsProperties = { | ||
...oldSSrc.properties, | ||
...oldSSrc.border | ||
}; | ||
const props = util_1.diffObject(oldSsProperties, newSsProperties); | ||
const command = new atem_connection_1.Commands.SuperSourcePropertiesCommand(); | ||
if (command.updateProps(props)) { | ||
commands.push(command); | ||
} | ||
@@ -78,16 +66,8 @@ return commands; | ||
const commands = []; | ||
for (const ssrc in newState.video.superSources) { | ||
const newSsProperties = newState.video.superSources[ssrc].properties; | ||
const oldSsProperties = oldState.video.superSources[ssrc].properties; | ||
const props = {}; | ||
for (let key in newSsProperties) { | ||
const typedKey = key; | ||
if (newSsProperties[typedKey] !== oldSsProperties[typedKey]) { | ||
props[typedKey] = newSsProperties[typedKey]; | ||
} | ||
} | ||
if (Object.keys(props).length > 0) { | ||
const command = new atem_connection_1.Commands.SuperSourcePropertiesV8Command(); | ||
command.ssrcId = Number(ssrc); | ||
command.updateProps(props); | ||
for (const ssrc of util_1.getAllKeysNumber(oldState.video.superSources, newState.video.superSources).sort()) { | ||
const newSSrc = atem_connection_1.AtemStateUtil.getSuperSource(newState, ssrc, true); | ||
const oldSSrc = atem_connection_1.AtemStateUtil.getSuperSource(oldState, ssrc, true); | ||
const props = util_1.diffObject(oldSSrc.properties || defaults_1.Defaults.Video.SuperSourceProperties, newSSrc.properties || defaults_1.Defaults.Video.SuperSourceProperties); | ||
const command = new atem_connection_1.Commands.SuperSourcePropertiesV8Command(ssrc); | ||
if (command.updateProps(props)) { | ||
commands.push(command); | ||
@@ -101,16 +81,8 @@ } | ||
const commands = []; | ||
for (const ssrc in newState.video.superSources) { | ||
const newSsProperties = newState.video.superSources[ssrc].border; | ||
const oldSsProperties = oldState.video.superSources[ssrc].border; | ||
const props = {}; | ||
for (let key in newSsProperties) { | ||
const typedKey = key; | ||
if (newSsProperties[typedKey] !== oldSsProperties[typedKey]) { | ||
props[typedKey] = newSsProperties[typedKey]; | ||
} | ||
} | ||
if (Object.keys(props).length > 0) { | ||
const command = new atem_connection_1.Commands.SuperSourceBorderCommand(); | ||
command.ssrcId = Number(ssrc); | ||
command.updateProps(props); | ||
for (const ssrc of util_1.getAllKeysNumber(oldState.video.superSources, newState.video.superSources).sort()) { | ||
const newSSrc = atem_connection_1.AtemStateUtil.getSuperSource(newState, ssrc, true); | ||
const oldSSrc = atem_connection_1.AtemStateUtil.getSuperSource(oldState, ssrc, true); | ||
const props = util_1.diffObject(oldSSrc.border || defaults_1.Defaults.Video.SuperSourceBorder, newSSrc.border || defaults_1.Defaults.Video.SuperSourceBorder); | ||
const command = new atem_connection_1.Commands.SuperSourceBorderCommand(ssrc); | ||
if (command.updateProps(props)) { | ||
commands.push(command); | ||
@@ -117,0 +89,0 @@ } |
@@ -1,3 +0,2 @@ | ||
import { Commands as AtemCommands } from 'atem-connection'; | ||
import { State as StateObject } from '../../'; | ||
export declare function resolveChromaKeyerState(oldState: StateObject, newState: StateObject): Array<AtemCommands.AbstractCommand>; | ||
import { Commands as AtemCommands, VideoState } from 'atem-connection'; | ||
export declare function resolveChromaKeyerState(mixEffectId: number, upstreamKeyerId: number, oldKeyer: VideoState.USK.UpstreamKeyer, newKeyer: VideoState.USK.UpstreamKeyer): Array<AtemCommands.ISerializableCommand>; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.resolveChromaKeyerState = void 0; | ||
const atem_connection_1 = require("atem-connection"); | ||
function resolveChromaKeyerState(oldState, newState) { | ||
let commands = []; | ||
for (const mixEffectId in oldState.video.ME) { | ||
if (!newState.video.ME[mixEffectId]) | ||
continue; | ||
for (const upstreamKeyerId in oldState.video.ME[mixEffectId].upstreamKeyers) { | ||
const oldKeyer = oldState.video.ME[mixEffectId].upstreamKeyers[upstreamKeyerId]; | ||
const newKeyer = newState.video.ME[mixEffectId].upstreamKeyers[upstreamKeyerId]; | ||
if (!oldKeyer || !newKeyer) { | ||
continue; | ||
} | ||
const oldChromaKeyer = oldKeyer.chromaSettings; | ||
const newChromaKeyer = newKeyer.chromaSettings; | ||
if (!oldChromaKeyer || !newChromaKeyer) { | ||
continue; | ||
} | ||
const props = {}; | ||
for (const key in atem_connection_1.Commands.MixEffectKeyChromaCommand.MaskFlags) { | ||
const typedKey = key; | ||
if (oldChromaKeyer[typedKey] !== newChromaKeyer[typedKey]) { | ||
props[typedKey] = newChromaKeyer[typedKey]; | ||
} | ||
} | ||
if (Object.keys(props).length > 0) { | ||
const command = new atem_connection_1.Commands.MixEffectKeyChromaCommand(); | ||
command.upstreamKeyerId = Number(upstreamKeyerId); | ||
command.mixEffect = Number(mixEffectId); | ||
command.updateProps(props); | ||
commands.push(command); | ||
} | ||
} | ||
const util_1 = require("../../util"); | ||
const __1 = require("../.."); | ||
function resolveChromaKeyerState(mixEffectId, upstreamKeyerId, oldKeyer, newKeyer) { | ||
const commands = []; | ||
if (!oldKeyer.chromaSettings && !newKeyer.chromaSettings) | ||
return commands; | ||
const oldChromaKeyer = oldKeyer.chromaSettings || __1.Defaults.Video.UpstreamKeyerChromaSettings; | ||
const newChromaKeyer = newKeyer.chromaSettings || __1.Defaults.Video.UpstreamKeyerChromaSettings; | ||
const props = util_1.diffObject(oldChromaKeyer, newChromaKeyer); | ||
const command = new atem_connection_1.Commands.MixEffectKeyChromaCommand(mixEffectId, upstreamKeyerId); | ||
if (command.updateProps(props)) { | ||
commands.push(command); | ||
} | ||
@@ -37,0 +17,0 @@ return commands; |
@@ -1,3 +0,2 @@ | ||
import { Commands as AtemCommands } from 'atem-connection'; | ||
import { State as StateObject } from '../../'; | ||
export declare function resolveDVEKeyerState(oldState: StateObject, newState: StateObject): Array<AtemCommands.AbstractCommand>; | ||
import { Commands as AtemCommands, VideoState } from 'atem-connection'; | ||
export declare function resolveDVEKeyerState(mixEffectId: number, upstreamKeyerId: number, oldKeyer: VideoState.USK.UpstreamKeyer, newKeyer: VideoState.USK.UpstreamKeyer): Array<AtemCommands.ISerializableCommand>; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.resolveDVEKeyerState = void 0; | ||
const atem_connection_1 = require("atem-connection"); | ||
function resolveDVEKeyerState(oldState, newState) { | ||
const util_1 = require("../../util"); | ||
const __1 = require("../.."); | ||
function resolveDVEKeyerState(mixEffectId, upstreamKeyerId, oldKeyer, newKeyer) { | ||
let commands = []; | ||
for (const mixEffectId in oldState.video.ME) { | ||
if (!newState.video.ME[mixEffectId]) | ||
continue; | ||
for (const upstreamKeyerId in oldState.video.ME[mixEffectId].upstreamKeyers) { | ||
const oldKeyer = oldState.video.ME[mixEffectId].upstreamKeyers[upstreamKeyerId]; | ||
const newKeyer = newState.video.ME[mixEffectId].upstreamKeyers[upstreamKeyerId]; | ||
if (!oldKeyer || !newKeyer) { | ||
continue; | ||
} | ||
const oldDVEKeyer = oldKeyer.dveSettings; | ||
const newDVEKeyer = newKeyer.dveSettings; | ||
if (!oldDVEKeyer || !newDVEKeyer) { | ||
continue; | ||
} | ||
const props = {}; | ||
for (const key in atem_connection_1.Commands.MixEffectKeyDVECommand.MaskFlags) { | ||
const typedKey = key; | ||
if (oldDVEKeyer[typedKey] !== newDVEKeyer[typedKey]) { | ||
props[typedKey] = newDVEKeyer[typedKey]; | ||
} | ||
} | ||
if (Object.keys(props).length > 0) { | ||
const command = new atem_connection_1.Commands.MixEffectKeyDVECommand(); | ||
command.upstreamKeyerId = Number(upstreamKeyerId); | ||
command.mixEffect = Number(mixEffectId); | ||
command.updateProps(props); | ||
commands.push(command); | ||
} | ||
} | ||
if (!oldKeyer.dveSettings && !newKeyer.dveSettings) | ||
return commands; | ||
const oldDVEKeyer = oldKeyer.dveSettings || __1.Defaults.Video.UpstreamKeyerDVESettings; | ||
const newDVEKeyer = newKeyer.dveSettings || __1.Defaults.Video.UpstreamKeyerDVESettings; | ||
const props = util_1.diffObject(oldDVEKeyer, newDVEKeyer); | ||
const command = new atem_connection_1.Commands.MixEffectKeyDVECommand(mixEffectId, upstreamKeyerId); | ||
if (command.updateProps(props)) { | ||
commands.push(command); | ||
} | ||
@@ -37,0 +17,0 @@ return commands; |
@@ -1,4 +0,4 @@ | ||
import { Commands as AtemCommands } from 'atem-connection'; | ||
import { State as StateObject } from '../../'; | ||
export declare function resolveUpstreamKeyerState(oldState: StateObject, newState: StateObject): Array<AtemCommands.AbstractCommand>; | ||
export declare function resolveUpstreamKeyerMaskState(oldState: StateObject, newState: StateObject): Array<AtemCommands.AbstractCommand>; | ||
import { Commands as AtemCommands, VideoState } from 'atem-connection'; | ||
import { MixEffect } from '../../state'; | ||
export declare function resolveUpstreamKeyerState(mixEffectId: number, oldMixEffect: MixEffect, newMixEffect: MixEffect): Array<AtemCommands.ISerializableCommand>; | ||
export declare function resolveUpstreamKeyerMaskState(mixEffectId: number, upstreamKeyerId: number, oldKeyer: VideoState.USK.UpstreamKeyer, newKeyer: VideoState.USK.UpstreamKeyer): Array<AtemCommands.ISerializableCommand>; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.resolveUpstreamKeyerMaskState = exports.resolveUpstreamKeyerState = void 0; | ||
const atem_connection_1 = require("atem-connection"); | ||
@@ -9,56 +8,27 @@ const dveKeyer_1 = require("./dveKeyer"); | ||
const patternKeyer_1 = require("./patternKeyer"); | ||
function resolveUpstreamKeyerState(oldState, newState) { | ||
let commands = []; | ||
commands = commands.concat(resolveUpstreamKeyerMaskState(oldState, newState)); | ||
commands = commands.concat(dveKeyer_1.resolveDVEKeyerState(oldState, newState)); | ||
commands = commands.concat(chromaKeyer_1.resolveChromaKeyerState(oldState, newState)); | ||
commands = commands.concat(lumaKeyer_1.resolveLumaKeyerState(oldState, newState)); | ||
commands = commands.concat(patternKeyer_1.resolvePatternKeyerState(oldState, newState)); | ||
for (const mixEffectId in oldState.video.ME) { | ||
if (!newState.video.ME[mixEffectId]) | ||
continue; | ||
for (const upstreamKeyerId in oldState.video.ME[mixEffectId].upstreamKeyers) { | ||
const oldKeyer = oldState.video.ME[mixEffectId].upstreamKeyers[upstreamKeyerId]; | ||
const newKeyer = newState.video.ME[mixEffectId].upstreamKeyers[upstreamKeyerId]; | ||
if (!oldKeyer || !newKeyer) { | ||
continue; | ||
} | ||
if (oldKeyer.fillSource !== newKeyer.fillSource) { | ||
const command = new atem_connection_1.Commands.MixEffectKeyFillSourceSetCommand(); | ||
command.upstreamKeyerId = Number(upstreamKeyerId); | ||
command.mixEffect = Number(mixEffectId); | ||
command.updateProps({ | ||
fillSource: newKeyer.fillSource | ||
}); | ||
commands.push(command); | ||
} | ||
if (oldKeyer.cutSource !== newKeyer.cutSource) { | ||
const command = new atem_connection_1.Commands.MixEffectKeyCutSourceSetCommand(); | ||
command.upstreamKeyerId = Number(upstreamKeyerId); | ||
command.mixEffect = Number(mixEffectId); | ||
command.updateProps({ | ||
cutSource: newKeyer.cutSource | ||
}); | ||
commands.push(command); | ||
} | ||
if (oldKeyer.mixEffectKeyType !== newKeyer.mixEffectKeyType || oldKeyer.flyEnabled !== newKeyer.flyEnabled) { | ||
const command = new atem_connection_1.Commands.MixEffectKeyTypeSetCommand(); | ||
command.upstreamKeyerId = Number(upstreamKeyerId); | ||
command.mixEffect = Number(mixEffectId); | ||
if (oldKeyer.mixEffectKeyType !== newKeyer.mixEffectKeyType) | ||
command.updateProps({ keyType: newKeyer.mixEffectKeyType }); | ||
if (oldKeyer.flyEnabled !== newKeyer.flyEnabled) | ||
command.updateProps({ flyEnabled: newKeyer.flyEnabled }); | ||
commands.push(command); | ||
} | ||
if (oldKeyer.onAir !== newKeyer.onAir) { | ||
const command = new atem_connection_1.Commands.MixEffectKeyOnAirCommand(); | ||
command.upstreamKeyerId = Number(upstreamKeyerId); | ||
command.mixEffect = Number(mixEffectId); | ||
command.updateProps({ | ||
onAir: newKeyer.onAir | ||
}); | ||
commands.push(command); | ||
} | ||
const util_1 = require("../../util"); | ||
function resolveUpstreamKeyerState(mixEffectId, oldMixEffect, newMixEffect) { | ||
const commands = []; | ||
for (const upstreamKeyerId of util_1.getAllKeysNumber(oldMixEffect.upstreamKeyers, newMixEffect.upstreamKeyers)) { | ||
const oldKeyer = atem_connection_1.AtemStateUtil.getUpstreamKeyer(oldMixEffect, upstreamKeyerId, true); | ||
const newKeyer = atem_connection_1.AtemStateUtil.getUpstreamKeyer(newMixEffect, upstreamKeyerId, true); | ||
commands.push(...resolveUpstreamKeyerMaskState(mixEffectId, upstreamKeyerId, oldKeyer, newKeyer)); | ||
commands.push(...dveKeyer_1.resolveDVEKeyerState(mixEffectId, upstreamKeyerId, oldKeyer, newKeyer)); | ||
commands.push(...chromaKeyer_1.resolveChromaKeyerState(mixEffectId, upstreamKeyerId, oldKeyer, newKeyer)); | ||
commands.push(...lumaKeyer_1.resolveLumaKeyerState(mixEffectId, upstreamKeyerId, oldKeyer, newKeyer)); | ||
commands.push(...patternKeyer_1.resolvePatternKeyerState(mixEffectId, upstreamKeyerId, oldKeyer, newKeyer)); | ||
if (oldKeyer.fillSource !== newKeyer.fillSource) { | ||
commands.push(new atem_connection_1.Commands.MixEffectKeyFillSourceSetCommand(mixEffectId, upstreamKeyerId, newKeyer.fillSource)); | ||
} | ||
if (oldKeyer.cutSource !== newKeyer.cutSource) { | ||
commands.push(new atem_connection_1.Commands.MixEffectKeyCutSourceSetCommand(mixEffectId, upstreamKeyerId, newKeyer.cutSource)); | ||
} | ||
const typeProps = util_1.diffObject(oldKeyer, newKeyer); | ||
const command = new atem_connection_1.Commands.MixEffectKeyTypeSetCommand(mixEffectId, upstreamKeyerId); | ||
if (command.updateProps(typeProps)) { | ||
commands.push(command); | ||
} | ||
if (oldKeyer.onAir !== newKeyer.onAir) { | ||
commands.push(new atem_connection_1.Commands.MixEffectKeyOnAirCommand(mixEffectId, upstreamKeyerId, newKeyer.onAir)); | ||
} | ||
} | ||
@@ -68,32 +38,8 @@ return commands; | ||
exports.resolveUpstreamKeyerState = resolveUpstreamKeyerState; | ||
function resolveUpstreamKeyerMaskState(oldState, newState) { | ||
let commands = []; | ||
for (const mixEffectId in oldState.video.ME) { | ||
if (!newState.video.ME[mixEffectId]) | ||
continue; | ||
for (const upstreamKeyerId in oldState.video.ME[mixEffectId].upstreamKeyers) { | ||
const oldKeyer = oldState.video.ME[mixEffectId].upstreamKeyers[upstreamKeyerId]; | ||
const newKeyer = newState.video.ME[mixEffectId].upstreamKeyers[upstreamKeyerId]; | ||
if (!oldKeyer || !newKeyer) { | ||
continue; | ||
} | ||
const props = {}; | ||
if (oldKeyer.maskEnabled !== newKeyer.maskEnabled) | ||
props.maskEnabled = newKeyer.maskEnabled; | ||
if (oldKeyer.maskLeft !== newKeyer.maskLeft) | ||
props.maskLeft = newKeyer.maskLeft; | ||
if (oldKeyer.maskRight !== newKeyer.maskRight) | ||
props.maskRight = newKeyer.maskRight; | ||
if (oldKeyer.maskTop !== newKeyer.maskTop) | ||
props.maskTop = newKeyer.maskTop; | ||
if (oldKeyer.maskBottom !== newKeyer.maskBottom) | ||
props.maskBottom = newKeyer.maskBottom; | ||
if (Object.keys(props).length > 0) { | ||
const command = new atem_connection_1.Commands.MixEffectKeyMaskSetCommand(); | ||
command.upstreamKeyerId = Number(upstreamKeyerId); | ||
command.mixEffect = Number(mixEffectId); | ||
command.updateProps(props); | ||
commands.push(command); | ||
} | ||
} | ||
function resolveUpstreamKeyerMaskState(mixEffectId, upstreamKeyerId, oldKeyer, newKeyer) { | ||
const commands = []; | ||
const props = util_1.diffObject(oldKeyer.maskSettings, newKeyer.maskSettings); | ||
const command = new atem_connection_1.Commands.MixEffectKeyMaskSetCommand(mixEffectId, upstreamKeyerId); | ||
if (command.updateProps(props)) { | ||
commands.push(command); | ||
} | ||
@@ -100,0 +46,0 @@ return commands; |
@@ -1,3 +0,2 @@ | ||
import { Commands as AtemCommands } from 'atem-connection'; | ||
import { State as StateObject } from '../../'; | ||
export declare function resolveLumaKeyerState(oldState: StateObject, newState: StateObject): Array<AtemCommands.AbstractCommand>; | ||
import { Commands as AtemCommands, VideoState } from 'atem-connection'; | ||
export declare function resolveLumaKeyerState(mixEffectId: number, upstreamKeyerId: number, oldKeyer: VideoState.USK.UpstreamKeyer, newKeyer: VideoState.USK.UpstreamKeyer): Array<AtemCommands.ISerializableCommand>; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.resolveLumaKeyerState = void 0; | ||
const atem_connection_1 = require("atem-connection"); | ||
function resolveLumaKeyerState(oldState, newState) { | ||
let commands = []; | ||
for (const mixEffectId in oldState.video.ME) { | ||
if (!newState.video.ME[mixEffectId]) | ||
continue; | ||
for (const upstreamKeyerId in oldState.video.ME[mixEffectId].upstreamKeyers) { | ||
const oldKeyer = oldState.video.ME[mixEffectId].upstreamKeyers[upstreamKeyerId]; | ||
const newKeyer = newState.video.ME[mixEffectId].upstreamKeyers[upstreamKeyerId]; | ||
if (!oldKeyer || !newKeyer) { | ||
continue; | ||
} | ||
const oldLumaKeyer = oldKeyer.lumaSettings; | ||
const newLumaKeyer = newKeyer.lumaSettings; | ||
if (!oldLumaKeyer || !newLumaKeyer) { | ||
continue; | ||
} | ||
const props = {}; | ||
for (const key in atem_connection_1.Commands.MixEffectKeyLumaCommand.MaskFlags) { | ||
const typedKey = key; | ||
if (oldLumaKeyer[typedKey] !== newLumaKeyer[typedKey]) { | ||
props[typedKey] = newLumaKeyer[typedKey]; | ||
} | ||
} | ||
if (Object.keys(props).length > 0) { | ||
const command = new atem_connection_1.Commands.MixEffectKeyLumaCommand(); | ||
command.upstreamKeyerId = Number(upstreamKeyerId); | ||
command.mixEffect = Number(mixEffectId); | ||
command.updateProps(props); | ||
commands.push(command); | ||
} | ||
} | ||
const util_1 = require("../../util"); | ||
const __1 = require("../.."); | ||
function resolveLumaKeyerState(mixEffectId, upstreamKeyerId, oldKeyer, newKeyer) { | ||
const commands = []; | ||
if (!oldKeyer.lumaSettings && !newKeyer.lumaSettings) | ||
return commands; | ||
const oldLumaKeyer = oldKeyer.lumaSettings || __1.Defaults.Video.UpstreamKeyerLumaSettings; | ||
const newLumaKeyer = newKeyer.lumaSettings || __1.Defaults.Video.UpstreamKeyerLumaSettings; | ||
const props = util_1.diffObject(oldLumaKeyer, newLumaKeyer); | ||
const command = new atem_connection_1.Commands.MixEffectKeyLumaCommand(mixEffectId, upstreamKeyerId); | ||
if (command.updateProps(props)) { | ||
commands.push(command); | ||
} | ||
@@ -37,0 +17,0 @@ return commands; |
@@ -1,3 +0,2 @@ | ||
import { Commands as AtemCommands } from 'atem-connection'; | ||
import { State as StateObject } from '../../'; | ||
export declare function resolvePatternKeyerState(oldState: StateObject, newState: StateObject): Array<AtemCommands.AbstractCommand>; | ||
import { Commands as AtemCommands, VideoState } from 'atem-connection'; | ||
export declare function resolvePatternKeyerState(mixEffectId: number, upstreamKeyerId: number, oldKeyer: VideoState.USK.UpstreamKeyer, newKeyer: VideoState.USK.UpstreamKeyer): Array<AtemCommands.ISerializableCommand>; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.resolvePatternKeyerState = void 0; | ||
const atem_connection_1 = require("atem-connection"); | ||
function resolvePatternKeyerState(oldState, newState) { | ||
let commands = []; | ||
for (const mixEffectId in oldState.video.ME) { | ||
if (!newState.video.ME[mixEffectId]) | ||
continue; | ||
for (const upstreamKeyerId in oldState.video.ME[mixEffectId].upstreamKeyers) { | ||
const oldKeyer = oldState.video.ME[mixEffectId].upstreamKeyers[upstreamKeyerId]; | ||
const newKeyer = newState.video.ME[mixEffectId].upstreamKeyers[upstreamKeyerId]; | ||
if (!oldKeyer || !newKeyer) { | ||
continue; | ||
} | ||
const oldPatternKeyer = oldKeyer.patternSettings; | ||
const newPatternKeyer = newKeyer.patternSettings; | ||
if (!oldPatternKeyer || !newPatternKeyer) { | ||
continue; | ||
} | ||
const props = {}; | ||
for (const key in atem_connection_1.Commands.MixEffectKeyPatternCommand.MaskFlags) { | ||
const typedKey = key; | ||
if (oldPatternKeyer[typedKey] !== newPatternKeyer[typedKey]) { | ||
props[typedKey] = newPatternKeyer[typedKey]; | ||
} | ||
} | ||
if (oldPatternKeyer.style !== newPatternKeyer.style) { | ||
props.positionX = newPatternKeyer.positionX; | ||
props.positionY = newPatternKeyer.positionY; | ||
props.symmetry = newPatternKeyer.symmetry; | ||
} | ||
if (Object.keys(props).length > 0) { | ||
const command = new atem_connection_1.Commands.MixEffectKeyPatternCommand(); | ||
command.upstreamKeyerId = Number(upstreamKeyerId); | ||
command.mixEffect = Number(mixEffectId); | ||
command.updateProps(props); | ||
commands.push(command); | ||
} | ||
} | ||
const util_1 = require("../../util"); | ||
const __1 = require("../.."); | ||
function resolvePatternKeyerState(mixEffectId, upstreamKeyerId, oldKeyer, newKeyer) { | ||
const commands = []; | ||
if (!oldKeyer.patternSettings && !newKeyer.patternSettings) | ||
return commands; | ||
const oldPatternKeyer = oldKeyer.patternSettings || __1.Defaults.Video.UpstreamKeyerPatternSettings; | ||
const newPatternKeyer = newKeyer.patternSettings || __1.Defaults.Video.UpstreamKeyerPatternSettings; | ||
const props = util_1.diffObject(oldPatternKeyer, newPatternKeyer); | ||
if (props && oldPatternKeyer.style !== newPatternKeyer.style) { | ||
// These can be reset when changing pattern, so enforce they are what we expect | ||
props.positionX = newPatternKeyer.positionX; | ||
props.positionY = newPatternKeyer.positionY; | ||
props.symmetry = newPatternKeyer.symmetry; | ||
} | ||
const command = new atem_connection_1.Commands.MixEffectKeyPatternCommand(mixEffectId, upstreamKeyerId); | ||
if (command.updateProps(props)) { | ||
commands.push(command); | ||
} | ||
return commands; | ||
@@ -43,0 +24,0 @@ } |
import { AtemState, VideoState } from 'atem-connection'; | ||
import { Enums } from './enums'; | ||
export declare class AtemVideoState extends VideoState.AtemVideoState { | ||
ME: { | ||
[index: string]: MixEffect; | ||
}; | ||
export interface AtemVideoState extends Omit<VideoState.AtemVideoState, 'mixEffects'> { | ||
mixEffects: Array<MixEffect | undefined>; | ||
} | ||
export interface MixEffect extends VideoState.MixEffect { | ||
input?: number; | ||
transition?: Enums.TransitionStyle; | ||
export declare type MixEffect = VideoState.MixEffect | ExtendedMixEffect; | ||
export interface ExtendedMixEffect extends Omit<VideoState.MixEffect, 'programInput' | 'previewInput'> { | ||
input: number; | ||
transition: Enums.TransitionStyle; | ||
} | ||
export declare class State extends AtemState { | ||
export interface State extends Omit<AtemState, 'video'> { | ||
video: AtemVideoState; | ||
} |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.State = exports.AtemVideoState = void 0; | ||
const atem_connection_1 = require("atem-connection"); | ||
class AtemVideoState extends atem_connection_1.VideoState.AtemVideoState { | ||
constructor() { | ||
super(...arguments); | ||
this.ME = {}; | ||
} | ||
} | ||
exports.AtemVideoState = AtemVideoState; | ||
class State extends atem_connection_1.AtemState { | ||
constructor() { | ||
super(...arguments); | ||
this.video = new AtemVideoState(); | ||
} | ||
} | ||
exports.State = State; | ||
//# sourceMappingURL=state.js.map |
@@ -1,2 +0,12 @@ | ||
export declare function compareProps<T>(oldProps: T, newProps: T, props: Array<keyof T>): Partial<T>; | ||
export declare function diffObject<T>(oldObj: T, newObj: T): Partial<T> | undefined; | ||
export declare function diffObject<T>(oldObj: T, newObj: T): Partial<T>; | ||
export declare function getAllKeysString<V>(oldObj: { | ||
[key: string]: V; | ||
}, newObj: { | ||
[key: string]: V; | ||
}): string[]; | ||
export declare function getAllKeysNumber<V>(oldObj: { | ||
[key: number]: V; | ||
} | Array<V>, newObj: { | ||
[key: number]: V; | ||
} | Array<V>): number[]; | ||
export declare function jsonClone<T>(src: T): T; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.diffObject = exports.compareProps = void 0; | ||
function compareProps(oldProps, newProps, props) { | ||
const changedProps = {}; | ||
for (let key of props) { | ||
if ((newProps)[key] !== (oldProps)[key]) { | ||
(changedProps)[key] = (newProps)[key]; | ||
} | ||
} | ||
return changedProps; | ||
} | ||
exports.compareProps = compareProps; | ||
function diffObject(oldObj, newObj) { | ||
const diff = {}; | ||
let hasData = false; | ||
for (let key in newObj) { | ||
@@ -21,8 +9,26 @@ const typedKey = key; | ||
diff[typedKey] = newObj[typedKey]; | ||
hasData = true; | ||
} | ||
} | ||
return hasData ? diff : undefined; | ||
return diff; | ||
} | ||
exports.diffObject = diffObject; | ||
function keyIsValid(key, oldObj, newObj) { | ||
const oldVal = oldObj[key]; | ||
const newVal = newObj[key]; | ||
return (oldVal !== undefined && oldVal !== null) || (newVal !== undefined && newVal !== null); | ||
} | ||
function getAllKeysString(oldObj, newObj) { | ||
const rawKeys = Object.keys(oldObj).concat(Object.keys(newObj)); | ||
return rawKeys.filter((v, i) => keyIsValid(v, oldObj, newObj) && rawKeys.indexOf(v) === i); | ||
} | ||
exports.getAllKeysString = getAllKeysString; | ||
function getAllKeysNumber(oldObj, newObj) { | ||
const rawKeys = Object.keys(oldObj).concat(Object.keys(newObj)); | ||
return rawKeys.filter((v, i) => keyIsValid(v, oldObj, newObj) && rawKeys.indexOf(v) === i).map(v => parseInt(v, 10)); | ||
} | ||
exports.getAllKeysNumber = getAllKeysNumber; | ||
function jsonClone(src) { | ||
return JSON.parse(JSON.stringify(src)); | ||
} | ||
exports.jsonClone = jsonClone; | ||
//# sourceMappingURL=util.js.map |
244
package.json
{ | ||
"name": "atem-state", | ||
"version": "0.10.0-nightly-20200602-164052-6e62fea.0", | ||
"description": "Typescript Node.js library for comparing ATEM states", | ||
"main": "dist/index.js", | ||
"typings": "dist/index.d.ts", | ||
"license": "MIT", | ||
"repository": { | ||
"type": "git", | ||
"url": "git+https://github.com/nrkno/tv-automation-atem-state" | ||
}, | ||
"bugs": { | ||
"url": "https://github.com/nrkno/tv-automation-atem-state/issues" | ||
}, | ||
"homepage": "https://github.com/nrkno/tv-automation-atem-state#readme", | ||
"author": { | ||
"name": "Balte de Wit", | ||
"email": "balte@superfly.tv", | ||
"url": "http://superfly.tv" | ||
}, | ||
"contributors": [ | ||
{ | ||
"name": "Julian Waller", | ||
"email": "julian@superfly.tv" | ||
}, | ||
{ | ||
"name": "Johan Nyman", | ||
"email": "johan@superfly.tv" | ||
} | ||
], | ||
"scripts": { | ||
"info": "npm-scripts-info", | ||
"build": "trash dist && yarn build:main", | ||
"build:main": "tsc -p tsconfig.build.json", | ||
"lint": "tslint --project tsconfig.json --config tslint.json", | ||
"unit": "jest --forceExit", | ||
"test": "yarn lint && yarn unit", | ||
"test:integration": "yarn lint && jest --config=jest-integration.config.js", | ||
"watch": "jest --watch", | ||
"cov": "jest --coverage; open-cli coverage/lcov-report/index.html", | ||
"cov-open": "open-cli coverage/lcov-report/index.html", | ||
"send-coverage": "codecov", | ||
"docs": "yarn docs:html && open-cli docs/index.html", | ||
"docs:test": "yarn docs:html", | ||
"docs:html": "typedoc src/index.ts --excludePrivate --mode file --theme minimal --out docs", | ||
"docs:json": "typedoc --mode file --json docs/typedoc.json src/index.ts", | ||
"docs:publish": "yarn docs:html && gh-pages -d docs", | ||
"changelog": "standard-version", | ||
"release": "yarn reset && yarn test && yarn docs:publish && yarn changelog", | ||
"reset": "git clean -dfx && git reset --hard && yarn", | ||
"validate:dependencies": "yarn audit --groups dependencies && yarn license-validate", | ||
"validate:dev-dependencies": "yarn audit --groups devDependencies", | ||
"license-validate": "node-license-validator -p -d --allow-licenses MIT BSD 0BSD BSD-3-Clause ISC Apache" | ||
}, | ||
"scripts-info": { | ||
"info": "Display information about the scripts", | ||
"build": "(Trash and re)build the library", | ||
"build:main": "Builds main build command without trash.", | ||
"lint": "Lint all typescript source files", | ||
"unit": "Build the library and run unit tests", | ||
"test": "Lint, build, and test the library", | ||
"test:integration": "Integration tests. Work in progress", | ||
"watch": "Watch source files, rebuild library on changes, rerun relevant tests", | ||
"cov": "Run tests, generate the HTML coverage report, and open it in a browser", | ||
"cov-open": "Open current test coverage", | ||
"send-coverage": "send coverage to codecov", | ||
"docs": "Generate HTML API documentation and open it in a browser", | ||
"docs:test": "Running the docs generation for testing.", | ||
"docs:html": "Generate HTML documentation", | ||
"docs:json": "Generate API documentation in typedoc JSON format", | ||
"docs:publish": "Generate HTML API documentation and push it to GitHub Pages", | ||
"changelog": "Bump package.json version, update CHANGELOG.md, tag a release", | ||
"release": "Clean, build, test, publish docs, and prepare release (a one-step publish process). Updates versions and creates git commits.", | ||
"reset": "Delete all untracked files and reset the repo to the last commit", | ||
"validate:dependencies": "Scan dependencies for vulnerabilities and check licenses", | ||
"license-validate": "Validate licenses for dependencies." | ||
}, | ||
"engines": { | ||
"node": ">=10.10" | ||
}, | ||
"files": [ | ||
"/dist", | ||
"/CHANGELOG.md", | ||
"/README.md", | ||
"/LICENSE" | ||
], | ||
"devDependencies": { | ||
"@types/jest": "^24.0.11", | ||
"@types/lodash": "^4.14.137", | ||
"@types/node": "^12.11.2", | ||
"codecov": "^3.5.0", | ||
"gh-pages": "^2.1.1", | ||
"jest": "^24.9.0", | ||
"jest-haste-map": "^24.0.0", | ||
"jest-resolve": "^24.1.0", | ||
"mkdirp": "^0.5.1", | ||
"node-license-validator": "^1.3.0", | ||
"npm-scripts-info": "0.3.9", | ||
"open-cli": "^6", | ||
"sleep-ms": "^2.0.1", | ||
"standard-version": "^8", | ||
"trash-cli": "^3.0.0", | ||
"ts-jest": "^24.0.0", | ||
"tslint": "^5.18.0", | ||
"tslint-config-standard": "8.0.1", | ||
"typedoc": "^0.15.0", | ||
"typescript": "^3.5.3" | ||
}, | ||
"keywords": [ | ||
"typescript", | ||
"javascript", | ||
"open", | ||
"source" | ||
], | ||
"dependencies": { | ||
"atem-connection": "1.1.0", | ||
"tslib": "^1.13" | ||
}, | ||
"standard-version": { | ||
"message": "chore(release): %s [skip ci]", | ||
"tagPrefix": "" | ||
} | ||
"name": "atem-state", | ||
"version": "0.10.0-nightly-20200817-095335-95ec90c.0", | ||
"description": "Typescript Node.js library for comparing ATEM states", | ||
"main": "dist/index.js", | ||
"typings": "dist/index.d.ts", | ||
"license": "MIT", | ||
"repository": { | ||
"type": "git", | ||
"url": "git+https://github.com/nrkno/tv-automation-atem-state" | ||
}, | ||
"bugs": { | ||
"url": "https://github.com/nrkno/tv-automation-atem-state/issues" | ||
}, | ||
"homepage": "https://github.com/nrkno/tv-automation-atem-state#readme", | ||
"author": { | ||
"name": "Balte de Wit", | ||
"email": "balte@superfly.tv", | ||
"url": "http://superfly.tv" | ||
}, | ||
"contributors": [ | ||
{ | ||
"name": "Julian Waller", | ||
"email": "julian@superfly.tv" | ||
}, | ||
{ | ||
"name": "Johan Nyman", | ||
"email": "johan@superfly.tv" | ||
} | ||
], | ||
"scripts": { | ||
"info": "npm-scripts-info", | ||
"build": "trash dist && yarn build:main", | ||
"build:main": "tsc -p tsconfig.build.json", | ||
"lint": "tslint --project tsconfig.json --config tslint.json", | ||
"unit": "jest --forceExit", | ||
"test": "yarn lint && yarn unit", | ||
"test:integration": "yarn lint && jest --config=jest-integration.config.js", | ||
"watch": "jest --watch", | ||
"cov": "jest --coverage; open-cli coverage/lcov-report/index.html", | ||
"cov-open": "open-cli coverage/lcov-report/index.html", | ||
"send-coverage": "codecov", | ||
"docs": "yarn docs:html && open-cli docs/index.html", | ||
"docs:test": "yarn docs:html", | ||
"docs:html": "typedoc src/index.ts --excludePrivate --mode file --theme minimal --out docs", | ||
"docs:json": "typedoc --mode file --json docs/typedoc.json src/index.ts", | ||
"docs:publish": "yarn docs:html && gh-pages -d docs", | ||
"changelog": "standard-version", | ||
"release": "yarn reset && yarn test && yarn docs:publish && yarn changelog", | ||
"reset": "git clean -dfx && git reset --hard && yarn", | ||
"validate:dependencies": "yarn audit --groups dependencies && yarn license-validate", | ||
"validate:dev-dependencies": "yarn audit --groups devDependencies", | ||
"license-validate": "node-license-validator -p -d --allow-licenses MIT BSD 0BSD BSD-3-Clause ISC Apache" | ||
}, | ||
"scripts-info": { | ||
"info": "Display information about the scripts", | ||
"build": "(Trash and re)build the library", | ||
"build:main": "Builds main build command without trash.", | ||
"lint": "Lint all typescript source files", | ||
"unit": "Build the library and run unit tests", | ||
"test": "Lint, build, and test the library", | ||
"test:integration": "Integration tests. Work in progress", | ||
"watch": "Watch source files, rebuild library on changes, rerun relevant tests", | ||
"cov": "Run tests, generate the HTML coverage report, and open it in a browser", | ||
"cov-open": "Open current test coverage", | ||
"send-coverage": "send coverage to codecov", | ||
"docs": "Generate HTML API documentation and open it in a browser", | ||
"docs:test": "Running the docs generation for testing.", | ||
"docs:html": "Generate HTML documentation", | ||
"docs:json": "Generate API documentation in typedoc JSON format", | ||
"docs:publish": "Generate HTML API documentation and push it to GitHub Pages", | ||
"changelog": "Bump package.json version, update CHANGELOG.md, tag a release", | ||
"release": "Clean, build, test, publish docs, and prepare release (a one-step publish process). Updates versions and creates git commits.", | ||
"reset": "Delete all untracked files and reset the repo to the last commit", | ||
"validate:dependencies": "Scan dependencies for vulnerabilities and check licenses", | ||
"license-validate": "Validate licenses for dependencies." | ||
}, | ||
"engines": { | ||
"node": ">=10.10" | ||
}, | ||
"files": [ | ||
"/dist", | ||
"/CHANGELOG.md", | ||
"/README.md", | ||
"/LICENSE" | ||
], | ||
"devDependencies": { | ||
"@types/jest": "^24.0.11", | ||
"@types/lodash": "^4.14.137", | ||
"@types/node": "^12.11.2", | ||
"@types/underscore": "^1.9.3", | ||
"codecov": "^3.5.0", | ||
"gh-pages": "^2.1.1", | ||
"jest": "^24.9.0", | ||
"jest-haste-map": "^24.0.0", | ||
"jest-resolve": "^24.1.0", | ||
"mkdirp": "^0.5.1", | ||
"node-license-validator": "^1.3.0", | ||
"npm-scripts-info": "0.3.9", | ||
"open-cli": "^6", | ||
"sleep-ms": "^2.0.1", | ||
"standard-version": "^8", | ||
"trash-cli": "^3.0.0", | ||
"ts-jest": "^24.0.0", | ||
"tslint": "^5.18.0", | ||
"tslint-config-standard": "8.0.1", | ||
"typedoc": "^0.15.0", | ||
"typescript": "~3.6.4" | ||
}, | ||
"keywords": [ | ||
"typescript", | ||
"javascript", | ||
"open", | ||
"source" | ||
], | ||
"dependencies": { | ||
"atem-connection": "2.0.0-nightly-20200812-123955-e5e57e7.0", | ||
"tslib": "^1.13", | ||
"underscore": "^1.9.1" | ||
}, | ||
"standard-version": { | ||
"message": "chore(release): %s [skip ci]", | ||
"tagPrefix": "" | ||
} | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
92524
3
21
938
+ Addedunderscore@^1.9.1
+ Addedatem-connection@2.0.0-nightly-20200812-123955-e5e57e7.0(transitive)
+ Addedcallsites@3.1.0(transitive)
+ Addedeventemitter3@4.0.7(transitive)
+ Addedis-running@2.1.0(transitive)
+ Addedthreadedclass@0.8.0-nightly-20200626-190313-597bdf9.0(transitive)
+ Addedunderscore@1.13.7(transitive)
- Removed@types/retry@0.12.0(transitive)
- Removedatem-connection@1.1.0(transitive)
- Removedp-retry@4.6.2(transitive)
- Removedretry@0.13.1(transitive)
Updatedatem-connection@2.0.0-nightly-20200812-123955-e5e57e7.0