@@ -20,12 +20,15 @@ export async function runPipeline(
20
20
onStatus ( { status : 'sourcing' } ) ;
21
21
22
22
// get all documents from the source
23
- let docs : Doc [ ] = await getDocs ( pipeline ) ;
23
+ const docs : Doc [ ] = await getDocs ( pipeline ) ;
24
24
// validate docs
25
25
if ( ! docs ?. length ) {
26
26
throw new Error ( 'At least one document is required!' ) ;
27
27
}
28
28
29
+ // clone docs for execution
30
+ let newDocs : Doc [ ] = structuredClone ( docs ) ;
31
+
29
32
// get all connections to source
30
33
let stepIds = source . connectsTo ;
31
34
// find all connected steps
@@ -37,7 +40,7 @@ export async function runPipeline(
37
40
// if it's a basic doc/result step - process all docs with it
38
41
if ( nextStep . input === 'doc' || nextStep . input === 'result' ) {
39
42
await Promise . all (
40
- docs . map ( ( doc ) =>
43
+ newDocs . map ( ( doc ) =>
41
44
litlytics . runStep ( {
42
45
step : nextStep ! ,
43
46
source,
@@ -47,7 +50,7 @@ export async function runPipeline(
47
50
} )
48
51
)
49
52
) ;
50
- docs = docs . filter ( ( d ) => d !== undefined ) ;
53
+ newDocs = newDocs . filter ( ( d ) => d !== undefined ) ;
51
54
// if it's an aggregate step - only run it once
52
55
} else if (
53
56
nextStep . input === 'aggregate-docs' ||
@@ -66,7 +69,7 @@ export async function runPipeline(
66
69
doc : aggregateResult ,
67
70
allDocs : docs ,
68
71
} ) ) as Doc ;
69
- docs . push ( aggregateResult ) ;
72
+ newDocs . push ( aggregateResult ) ;
70
73
}
71
74
// get next step and continue
72
75
stepIds = nextStep . connectsTo ;
@@ -76,7 +79,7 @@ export async function runPipeline(
76
79
const Output = outputProviders [ pipeline . output . outputType ] ;
77
80
const output = new Output ( pipeline ) ;
78
81
// save result docs
79
- output . saveResults ( docs ) ;
82
+ output . saveResults ( newDocs ) ;
80
83
// process and store final results
81
84
pipeline . results = output . getResult ( ) ;
82
85
break ;
0 commit comments