codigo0/node_modules/use-sidecar/dist/es2019/medium.js
planetazuzu 5d7a6500fe refactor: Fase 1 - Clean Architecture, refactorización modular y eliminación de duplicidades
-  Ticket 1.1: Estructura Clean Architecture en backend
-  Ticket 1.2: Schemas Zod compartidos
-  Ticket 1.3: Refactorización drugs.ts (1362 → 8 archivos modulares)
-  Ticket 1.4: Refactorización procedures.ts (3583 → 6 archivos modulares)
-  Ticket 1.5: Eliminación de duplicidades (~50 líneas)

Cambios principales:
- Creada estructura Clean Architecture en backend/src/
- Schemas Zod compartidos en backend/src/shared/schemas/
- Refactorización modular de drugs y procedures
- Utilidades genéricas en src/utils/ (filter, validation)
- Eliminados scripts obsoletos y documentación antigua
- Corregidos errores: QueryClient, import test-error-handling
- Build verificado y funcionando correctamente
2026-01-25 21:09:47 +01:00

79 lines
2.3 KiB
JavaScript

function ItoI(a) {
return a;
}
function innerCreateMedium(defaults, middleware = ItoI) {
let buffer = [];
let assigned = false;
const medium = {
read() {
if (assigned) {
throw new Error('Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.');
}
if (buffer.length) {
return buffer[buffer.length - 1];
}
return defaults;
},
useMedium(data) {
const item = middleware(data, assigned);
buffer.push(item);
return () => {
buffer = buffer.filter((x) => x !== item);
};
},
assignSyncMedium(cb) {
assigned = true;
while (buffer.length) {
const cbs = buffer;
buffer = [];
cbs.forEach(cb);
}
buffer = {
push: (x) => cb(x),
filter: () => buffer,
};
},
assignMedium(cb) {
assigned = true;
let pendingQueue = [];
if (buffer.length) {
const cbs = buffer;
buffer = [];
cbs.forEach(cb);
pendingQueue = buffer;
}
const executeQueue = () => {
const cbs = pendingQueue;
pendingQueue = [];
cbs.forEach(cb);
};
const cycle = () => Promise.resolve().then(executeQueue);
cycle();
buffer = {
push: (x) => {
pendingQueue.push(x);
cycle();
},
filter: (filter) => {
pendingQueue = pendingQueue.filter(filter);
return buffer;
},
};
},
};
return medium;
}
export function createMedium(defaults, middleware = ItoI) {
return innerCreateMedium(defaults, middleware);
}
// eslint-disable-next-line @typescript-eslint/ban-types
export function createSidecarMedium(options = {}) {
const medium = innerCreateMedium(null);
medium.options = {
async: true,
ssr: false,
...options,
};
return medium;
}