@@ -9,7 +9,6 @@ import type {
99 TaskOutput ,
1010 ResultItem
1111} from '@/types/apiTypes'
12- import { validateTaskItem } from '@/types/apiTypes'
1312import type { NodeId } from '@/types/comfyWorkflow'
1413import { instanceToPlain , plainToClass } from 'class-transformer'
1514import _ from 'lodash'
@@ -51,18 +50,33 @@ export class ResultItemImpl {
5150}
5251
5352export class TaskItemImpl {
54- taskType : TaskType
55- prompt : TaskPrompt
56- status ?: TaskStatus
57- outputs : TaskOutput
53+ readonly taskType : TaskType
54+ readonly prompt : TaskPrompt
55+ readonly status ?: TaskStatus
56+ readonly outputs : TaskOutput
57+ readonly flatOutputs : ReadonlyArray < ResultItemImpl >
58+
59+ constructor (
60+ taskType : TaskType ,
61+ prompt : TaskPrompt ,
62+ status : TaskStatus | undefined ,
63+ outputs : TaskOutput ,
64+ flatOutputs ?: ReadonlyArray < ResultItemImpl >
65+ ) {
66+ this . taskType = taskType
67+ this . prompt = prompt
68+ this . status = status
69+ this . outputs = outputs
70+ this . flatOutputs = flatOutputs ?? this . calculateFlatOutputs ( )
71+ }
5872
59- get flatOutputs ( ) : ResultItemImpl [ ] {
73+ private calculateFlatOutputs ( ) : ReadonlyArray < ResultItemImpl > {
6074 if ( ! this . outputs ) {
6175 return [ ]
6276 }
6377 return Object . entries ( this . outputs ) . flatMap ( ( [ nodeId , nodeOutputs ] ) =>
6478 Object . entries ( nodeOutputs ) . flatMap ( ( [ mediaType , items ] ) =>
65- ( items as ResultItem [ ] ) . flatMap ( ( item : ResultItem ) =>
79+ ( items as ResultItem [ ] ) . map ( ( item : ResultItem ) =>
6680 plainToClass ( ResultItemImpl , {
6781 ...item ,
6882 nodeId,
@@ -230,22 +244,25 @@ export const useQueueStore = defineStore('queue', {
230244 return [ task ]
231245 }
232246
233- return task . flatOutputs . map ( ( output : ResultItemImpl , i : number ) =>
234- plainToClass ( TaskItemImpl , {
235- ...instanceToPlain ( task ) ,
236- prompt : [
237- task . queueIndex ,
238- `${ task . promptId } -${ i } ` ,
239- task . promptInputs ,
240- task . extraData ,
241- task . outputsToExecute
242- ] ,
243- outputs : {
244- [ output . nodeId ] : {
245- [ output . mediaType ] : [ instanceToPlain ( output ) ]
246- }
247- }
248- } )
247+ return task . flatOutputs . map (
248+ ( output : ResultItemImpl , i : number ) =>
249+ new TaskItemImpl (
250+ task . taskType ,
251+ [
252+ task . queueIndex ,
253+ `${ task . promptId } -${ i } ` ,
254+ task . promptInputs ,
255+ task . extraData ,
256+ task . outputsToExecute
257+ ] ,
258+ task . status ,
259+ {
260+ [ output . nodeId ] : {
261+ [ output . mediaType ] : [ output ]
262+ }
263+ } ,
264+ [ output ]
265+ )
249266 )
250267 } )
251268 } ,
@@ -263,9 +280,15 @@ export const useQueueStore = defineStore('queue', {
263280
264281 const toClassAll = ( tasks : TaskItem [ ] ) : TaskItemImpl [ ] =>
265282 tasks
266- . map ( ( task ) => validateTaskItem ( task ) )
267- . filter ( ( result ) => result . success )
268- . map ( ( result ) => plainToClass ( TaskItemImpl , result . data ) )
283+ . map (
284+ ( task : TaskItem ) =>
285+ new TaskItemImpl (
286+ task . taskType ,
287+ task . prompt ,
288+ task [ 'status' ] ,
289+ task [ 'outputs' ] || { }
290+ )
291+ )
269292 // Desc order to show the latest tasks first
270293 . sort ( ( a , b ) => b . queueIndex - a . queueIndex )
271294
0 commit comments