UNPKG

@eluvio/elv-utils-js

Version:

Utilities for the Eluvio Content Fabric

96 lines (80 loc) 2.64 kB
// Add a stream to an existing variant const R = require('@eluvio/ramda-fork') const {MasterModel} = require('./lib/models/Master') const {VariantModel} = require('./lib/models/Variant') const Utility = require('./lib/Utility') const {ModOpt} = require('./lib/options') const VariantStreamArgs = require('./lib/concerns/VariantStreamArgs') const Edit = require('./lib/concerns/Edit') const ExistObj = require('./lib/concerns/kits/ExistObj') class VariantAddStream extends Utility { static blueprint() { return { concerns: [VariantStreamArgs, ExistObj, Edit], options: [ ModOpt('streamKey', { demand: true, }), ModOpt('file', { demand: true, }), ModOpt('streamIndex', { demand: true, }), ModOpt('label', { demand: true, }) ] } } async body() { const {libraryId, objectId} = await this.concerns.ExistObj.argsProc() const streamOpts = R.pick( [ 'alternateFor', 'channelIndex', 'file', 'label', 'language', 'isDefault', 'mapping', 'multipliers', 'role', 'streamIndex' ], this.args ) const {streamKey, variantKey} = this.args // get production_master metadata const master = await this.concerns.ExistObj.metadata({subtree: '/production_master'}) if(!master.variants[variantKey]) throw Error(`Variant '${variantKey}' not found`) const variant = master.variants[variantKey] const sources = master.sources if(variant.streams[streamKey]) throw Error(`Stream '${streamKey}' already exists in variant '${variantKey}'`) // create and add stream const stream = this.context.concerns.VariantStreamArgs.streamFromOpts(sources, streamOpts) // validate variant.streams[streamKey] = stream VariantModel(variant) MasterModel(master) this.logger.log('Saving changes...') // write metadata back const newHash = await this.concerns.Metadata.write({ commitMessage: `Add stream '${streamKey}' to variant '${variantKey}'`, libraryId, metadata: stream, objectId, subtree: `/production_master/variants/${variantKey}/streams/${streamKey}` }) this.logger.data('version_hash', newHash) this.logger.log(`New version hash: ${newHash}`) } header() { return `Add stream '${this.args.streamKey}' to variant '${this.args.variantKey}' of production master: ${this.args.objectId}` } } if(require.main === module) { Utility.cmdLineInvoke(VariantAddStream) } else { module.exports = VariantAddStream }