14 lines
829 B
TypeScript
14 lines
829 B
TypeScript
import {fault} from '../canvas-core/values.ts';
|
|
import {createImportBudget,type ImportScheduling} from './import-budget.ts';
|
|
/** Share import scheduling while retaining the copy cancellation/error contract. */
|
|
export function createCopyBudget(signal:AbortSignal,options:ImportScheduling={}){
|
|
if(signal.aborted)throw fault('copy_aborted');
|
|
if(options.frameBudgetMs!==undefined&&(!Number.isFinite(options.frameBudgetMs)||options.frameBudgetMs<=0))throw fault('invalid_copy_budget');
|
|
const budget=createImportBudget(signal,options);
|
|
const fail=(error:unknown):never=>{if(signal.aborted)throw fault('copy_aborted');throw error;};
|
|
return Object.freeze({step(units=1):Promise<void>|undefined{
|
|
if(signal.aborted)throw fault('copy_aborted');
|
|
try{return budget.step(units)?.catch(fail);}catch(error){return fail(error);}
|
|
}});
|
|
}
|