From 9c4820abce30084465600981dd62fc742e9d6503 Mon Sep 17 00:00:00 2001 From: Bogdan Popa Date: Sat, 4 Nov 2023 23:52:47 +0200 Subject: [PATCH] core,script: ensure that output is captured during script setup --- core/script.rkt | 45 +++++++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/core/script.rkt b/core/script.rkt index 8eba6bb..ebcb653 100644 --- a/core/script.rkt +++ b/core/script.rkt @@ -154,7 +154,20 @@ (define-rpc (apply-script [_ script : String] [to-records records : (Listof IteratorRecord)] [in-workspace id : UVarint] : ApplyResult) - (define script-tbl (make-script 'apply-script script)) + (define output + (open-output-bytes)) + (define-values (result items) + (parameterize ([current-output-port output] + [current-error-port output]) + (do-apply-script script records))) + (ApplyResult + (reverse items) + (get-output-bytes output) + (->ReduceResult result))) + +(define (do-apply-script script records) + (define script-tbl + (make-script 'apply-script script)) (define transform-proc (table-ref script-tbl #"transform")) (unless (procedure? transform-proc) (error 'apply-script "script.transform is not a procedure")) @@ -179,25 +192,17 @@ (cond [(nil? render-proc) s] [else (render-proc s)])) - (define output (open-output-bytes)) - (define-values (result items) - (parameterize ([current-output-port output] - [current-error-port output]) - (define-values (state items) - (for*/fold ([s nil] [items null]) - ([r (in-list records)] - [t (in-value (transform r))] - #:unless (nil? t)) - (define item - (IteratorResult.transformed (table->IteratorRecord t) r)) - (values - (reduce t s) - (cons item items)))) - (values (render state) items))) - (ApplyResult - (reverse items) - (get-output-bytes output) - (->ReduceResult result))) + (define-values (state items) + (for*/fold ([s nil] [items null]) + ([r (in-list records)] + [t (in-value (transform r))] + #:unless (nil? t)) + (define item + (IteratorResult.transformed (table->IteratorRecord t) r)) + (values + (reduce t s) + (cons item items)))) + (values (render state) items)) (define-rpc (deactivate-script [for-topic topic : String] [in-workspace id : UVarint])