11import  {  ExpectedPackage ,  Time  }  from  '@sofie-automation/blueprints-integration' 
2- import  {  protectString ,   unprotectString  }  from  '../protectedString.js' 
3- import  {  getHash ,  assertNever  }  from  '../lib.js' 
2+ import  {  protectString  }  from  '../protectedString.js' 
3+ import  {  getHash ,  hashObj  }  from  '../lib.js' 
44import  { 
55	AdLibActionId , 
66	BucketAdLibActionId , 
@@ -51,33 +51,43 @@ export interface ExpectedPackageDB {
5151
5252	created : Time 
5353
54- 	package : ReadonlyDeep < ExpectedPackage . Any > 
54+ 	package : ReadonlyDeep < Omit < ExpectedPackage . Base ,   'listenToPackageInfoUpdates' > > 
5555
56- 	// HACK: This should be ExpectedPackageIngestSource[], but for the first iteration this is limited to a single source 
57- 	ingestSources : [ ExpectedPackageIngestSource ] 
56+ 	/** 
57+ 	 * The ingest sources that generated this package. 
58+ 	 */ 
59+ 	ingestSources : ExpectedPackageIngestSource [ ] 
5860
5961	// playoutSources: { 
6062	// 	/** Any playout PieceInstance. This is limited to the current and next partInstances */ 
6163	// 	pieceInstanceIds: PieceInstanceId[] 
6264	// } 
6365} 
6466
65- export  interface  ExpectedPackageIngestSourceBucketPiece  { 
67+ export  interface  ExpectedPackageIngestSourceBase  { 
68+ 	/** The id of the package as known by the blueprints */ 
69+ 	blueprintPackageId : string 
70+ 
71+ 	/** Whether the blueprints are listening for updates to packageInfos for this package */ 
72+ 	listenToPackageInfoUpdates : boolean  |  undefined 
73+ } 
74+ 
75+ export  interface  ExpectedPackageIngestSourceBucketAdlibPiece  extends  ExpectedPackageIngestSourceBase  { 
6676	fromPieceType : ExpectedPackageDBType . BUCKET_ADLIB 
6777	/** The Bucket adlib this package belongs to */ 
6878	pieceId : BucketAdLibId 
6979	/** The `externalId` of the Bucket adlib this package belongs to */ 
7080	pieceExternalId : string 
7181} 
72- export  interface  ExpectedPackageIngestSourceBucketAdlibAction  { 
82+ export  interface  ExpectedPackageIngestSourceBucketAdlibAction  extends   ExpectedPackageIngestSourceBase   { 
7383	fromPieceType : ExpectedPackageDBType . BUCKET_ADLIB_ACTION 
7484	/** The Bucket adlib-action this package belongs to */ 
7585	pieceId : BucketAdLibActionId 
7686	/** The `externalId` of the Bucket adlib-action this package belongs to */ 
7787	pieceExternalId : string 
7888} 
7989
80- export  interface  ExpectedPackageIngestSourcePiece  { 
90+ export  interface  ExpectedPackageIngestSourcePiece  extends   ExpectedPackageIngestSourceBase   { 
8191	fromPieceType : ExpectedPackageDBType . PIECE  |  ExpectedPackageDBType . ADLIB_PIECE 
8292	/** The Piece this package belongs to */ 
8393	pieceId : PieceId 
@@ -86,7 +96,7 @@ export interface ExpectedPackageIngestSourcePiece {
8696	/** The Segment this package belongs to */ 
8797	segmentId : SegmentId 
8898} 
89- export  interface  ExpectedPackageIngestSourceAdlibAction  { 
99+ export  interface  ExpectedPackageIngestSourceAdlibAction  extends   ExpectedPackageIngestSourceBase   { 
90100	fromPieceType : ExpectedPackageDBType . ADLIB_ACTION 
91101	/** The Piece this package belongs to */ 
92102	pieceId : AdLibActionId 
@@ -95,29 +105,29 @@ export interface ExpectedPackageIngestSourceAdlibAction {
95105	/** The Segment this package belongs to */ 
96106	segmentId : SegmentId 
97107} 
98- export  interface  ExpectedPackageIngestSourceBaselineAdlibPiece  { 
108+ export  interface  ExpectedPackageIngestSourceBaselineAdlibPiece  extends   ExpectedPackageIngestSourceBase   { 
99109	fromPieceType : ExpectedPackageDBType . BASELINE_ADLIB_PIECE 
100110	/** The Piece this package belongs to */ 
101111	pieceId : PieceId 
102112} 
103- export  interface  ExpectedPackageIngestSourceBaselineAdlibAction  { 
113+ export  interface  ExpectedPackageIngestSourceBaselineAdlibAction  extends   ExpectedPackageIngestSourceBase   { 
104114	fromPieceType : ExpectedPackageDBType . BASELINE_ADLIB_ACTION 
105115	/** The Piece this package belongs to */ 
106116	pieceId : RundownBaselineAdLibActionId 
107117} 
108- export  interface  ExpectedPackageIngestSourceBaselineObjects  { 
118+ export  interface  ExpectedPackageIngestSourceBaselineObjects  extends   ExpectedPackageIngestSourceBase   { 
109119	fromPieceType : ExpectedPackageDBType . RUNDOWN_BASELINE_OBJECTS 
110120} 
111121
112- export  interface  ExpectedPackageIngestSourceStudioBaseline  { 
122+ export  interface  ExpectedPackageIngestSourceStudioBaseline  extends   ExpectedPackageIngestSourceBase   { 
113123	// Future: Technically this is a playout source, but for now it needs to be treated as an ingest source 
114124	fromPieceType : ExpectedPackageDBType . STUDIO_BASELINE_OBJECTS 
115125} 
116126
117127export  type  ExpectedPackageIngestSourcePart  =  ExpectedPackageIngestSourcePiece  |  ExpectedPackageIngestSourceAdlibAction 
118128
119129export  type  ExpectedPackageIngestSourceBucket  = 
120- 	|  ExpectedPackageIngestSourceBucketPiece 
130+ 	|  ExpectedPackageIngestSourceBucketAdlibPiece 
121131	|  ExpectedPackageIngestSourceBucketAdlibAction 
122132
123133export  type  ExpectedPackageIngestSourceRundownBaseline  = 
@@ -145,56 +155,21 @@ export function getExpectedPackageIdForPieceInstance(
145155} 
146156
147157/** 
148-  * Generate the temporary  expectedPackageId for the given package . 
149-  * Note:  This will soon be replaced with a new flow based on the contentVersionHash once shared ownership is implemented . 
158+  * Generate the expectedPackageId for the given expectedPackage . 
159+  * This is a stable id derived from the package and its parent. This document is expected to be owned by multiple sources . 
150160 */ 
151- export  function  getExpectedPackageIdFromIngestSource ( 
161+ export  function  getExpectedPackageIdNew ( 
152162	/** Preferably a RundownId or BucketId, but StudioId is allowed when not owned by a rundown or bucket */ 
153163	parentId : RundownId  |  StudioId  |  BucketId , 
154- 	source : ExpectedPackageIngestSource , 
155164	/** The locally unique id of the expectedPackage */ 
156- 	localExpectedPackageId :  ExpectedPackage . Base [ '_id' ] 
165+ 	expectedPackage :  ReadonlyDeep < Omit < ExpectedPackage . Base ,   'listenToPackageInfoUpdates' > > 
157166) : ExpectedPackageId  { 
158- 	let  ownerId : string 
159- 	const  ownerPieceType  =  source . fromPieceType 
160- 	switch  ( source . fromPieceType )  { 
161- 		case  ExpectedPackageDBType . PIECE :
162- 		case  ExpectedPackageDBType . ADLIB_PIECE :
163- 		case  ExpectedPackageDBType . ADLIB_ACTION :
164- 		case  ExpectedPackageDBType . BASELINE_ADLIB_PIECE :
165- 		case  ExpectedPackageDBType . BASELINE_ADLIB_ACTION :
166- 			ownerId  =  unprotectString ( source . pieceId ) 
167- 			break 
168- 		case  ExpectedPackageDBType . RUNDOWN_BASELINE_OBJECTS :
169- 			ownerId  =  'rundownBaselineObjects' 
170- 			break 
171- 		case  ExpectedPackageDBType . STUDIO_BASELINE_OBJECTS :
172- 			ownerId  =  'studioBaseline' 
173- 			break 
174- 		case  ExpectedPackageDBType . BUCKET_ADLIB :
175- 		case  ExpectedPackageDBType . BUCKET_ADLIB_ACTION :
176- 			ownerId  =  unprotectString ( source . pieceId ) 
177- 			break 
178- 
179- 		default :
180- 			assertNever ( source ) 
181- 			throw  new  Error ( `Unknown fromPieceType "${ ownerPieceType }  ) 
182- 	} 
183- 	return  protectString ( `${ parentId } ${ ownerId } ${ getHash ( localExpectedPackageId ) }  ) 
167+ 	// This may be too agressive, but we don't know how to merge some of the properties 
168+ 	const  objHash  =  hashObj ( { 
169+ 		...expectedPackage , 
170+ 		_id : '' ,  // Ignore the _id, this is not guaranteed to be stable 
171+ 		listenToPackageInfoUpdates : false ,  // Not relevant for the hash 
172+ 	}  satisfies  ReadonlyDeep < ExpectedPackage . Base > ) 
173+ 
174+ 	return  protectString ( `${ parentId } ${ getHash ( objHash ) }  ) 
184175} 
185- 
186- // Future implementation of id generation, once shared ownership is implemented 
187- // export function getExpectedPackageIdNew( 
188- // 	/** _id of the rundown*/ 
189- // 	rundownId: RundownId, 
190- // 	/** The locally unique id of the expectedPackage */ 
191- // 	expectedPackage: ReadonlyDeep<ExpectedPackage.Any> 
192- // ): ExpectedPackageId { 
193- // 	// This may be too agressive, but we don't know how to merge some of the properties 
194- // 	const objHash = hashObj({ 
195- // 		...expectedPackage, 
196- // 		listenToPackageInfoUpdates: false, // Not relevant for the hash 
197- // 	} satisfies ReadonlyDeep<ExpectedPackage.Any>) 
198- 
199- // 	return protectString(`${rundownId}_${getHash(objHash)}`) 
200- // } 
0 commit comments