feat: speed up admin clone import and enable Cache Components
- Clone import: defer FurnitureData.json writes and append all entries in a single batched write instead of one read-modify-write per item, removing the main serialization bottleneck for large batches. - Clone import: raise SSE batch concurrency cap from 5 to 10 and bump the clone client/route default from 2 to 6. - Add a flush hook to runSseBatch so callers can batch deferred work before batch_complete is emitted, and surface flush errors as an error event. - Enable Next.js Cache Components (instant: false opt-out) and silence the related build warnings in next.config.ts. - Switch isomorphic-dompurify to dompurify and refresh dependencies.
This commit is contained in:
1 parent
ac9b3e3cb5
commit
dc8fb8a6ed
254 files changed
+910
-551
No files matched your search
@@ -17,6 +17,13 @@ export interface RunSseBatchOptions<T> {
|
||||
index: number,
|
||||
report: (status: string) => void,
|
||||
) => Promise<SseWorkerResult>;
|
||||
/**
|
||||
* Optional finalizer run once after every item settles, before
|
||||
* batch_complete is emitted. Lets callers flush deferred work (e.g. a single
|
||||
* FurnitureData.json write) instead of doing it per item. Failures are
|
||||
* surfaced as an `error` event without aborting the stream.
|
||||
*/
|
||||
flush?: () => Promise<void>;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -25,8 +32,8 @@ export interface RunSseBatchOptions<T> {
|
||||
* Stops starting new chunks when `signal` aborts or the client cancels the stream.
|
||||
*/
|
||||
export function runSseBatch<T>(opts: RunSseBatchOptions<T>): Response {
|
||||
const { items, labelOf, worker, signal } = opts;
|
||||
const concurrency = Math.min(Math.max(opts.concurrency || 3, 1), 5);
|
||||
const { items, labelOf, worker, signal, flush } = opts;
|
||||
const concurrency = Math.min(Math.max(opts.concurrency || 3, 1), 10);
|
||||
const encoder = new TextEncoder();
|
||||
const ac = new AbortController();
|
||||
|
||||
@@ -113,6 +120,17 @@ export function runSseBatch<T>(opts: RunSseBatchOptions<T>): Response {
|
||||
);
|
||||
}
|
||||
|
||||
if (flush) {
|
||||
try {
|
||||
await flush();
|
||||
} catch (err) {
|
||||
send({
|
||||
type: "error",
|
||||
message: (err as Error).message,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (!ac.signal.aborted) {
|
||||
send({
|
||||
type: "batch_complete",
|
||||
|
||||
Reference in new issue
Block a user