codigo0/node_modules/micromark-extension-gfm-table/lib/html.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

130 lines
3.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @import {HtmlExtension} from 'micromark-util-types'
*/
const alignment = {
none: '',
left: ' align="left"',
right: ' align="right"',
center: ' align="center"'
};
// To do: micromark@5: use `infer` here, when all events are exposed.
/**
* Create an HTML extension for `micromark` to support GitHub tables when
* serializing to HTML.
*
* @returns {HtmlExtension}
* Extension for `micromark` that can be passed in `htmlExtensions` to
* support GitHub tables when serializing to HTML.
*/
export function gfmTableHtml() {
return {
enter: {
table(token) {
const tableAlign = token._align;
this.lineEndingIfNeeded();
this.tag('<table>');
this.setData('tableAlign', tableAlign);
},
tableBody() {
this.tag('<tbody>');
},
tableData() {
const tableAlign = this.getData('tableAlign');
const tableColumn = this.getData('tableColumn');
const align = alignment[tableAlign[tableColumn]];
if (align === undefined) {
// Capture results to ignore them.
this.buffer();
} else {
this.lineEndingIfNeeded();
this.tag('<td' + align + '>');
}
},
tableHead() {
this.lineEndingIfNeeded();
this.tag('<thead>');
},
tableHeader() {
const tableAlign = this.getData('tableAlign');
const tableColumn = this.getData('tableColumn');
const align = alignment[tableAlign[tableColumn]];
this.lineEndingIfNeeded();
this.tag('<th' + align + '>');
},
tableRow() {
this.setData('tableColumn', 0);
this.lineEndingIfNeeded();
this.tag('<tr>');
}
},
exit: {
// Overwrite the default code text data handler to unescape escaped pipes when
// they are in tables.
codeTextData(token) {
let value = this.sliceSerialize(token);
if (this.getData('tableAlign')) {
value = value.replace(/\\([\\|])/g, replace);
}
this.raw(this.encode(value));
},
table() {
this.setData('tableAlign');
// Note: we dont set `slurpAllLineEndings` anymore, in delimiter rows,
// but we do need to reset it to match a funky newline GH generates for
// list items combined with tables.
this.setData('slurpAllLineEndings');
this.lineEndingIfNeeded();
this.tag('</table>');
},
tableBody() {
this.lineEndingIfNeeded();
this.tag('</tbody>');
},
tableData() {
const tableAlign = this.getData('tableAlign');
const tableColumn = this.getData('tableColumn');
if (tableColumn in tableAlign) {
this.tag('</td>');
this.setData('tableColumn', tableColumn + 1);
} else {
// Stop capturing.
this.resume();
}
},
tableHead() {
this.lineEndingIfNeeded();
this.tag('</thead>');
},
tableHeader() {
const tableColumn = this.getData('tableColumn');
this.tag('</th>');
this.setData('tableColumn', tableColumn + 1);
},
tableRow() {
const tableAlign = this.getData('tableAlign');
let tableColumn = this.getData('tableColumn');
while (tableColumn < tableAlign.length) {
this.lineEndingIfNeeded();
this.tag('<td' + alignment[tableAlign[tableColumn]] + '></td>');
tableColumn++;
}
this.setData('tableColumn', tableColumn);
this.lineEndingIfNeeded();
this.tag('</tr>');
}
}
};
}
/**
* @param {string} $0
* @param {string} $1
* @returns {string}
*/
function replace($0, $1) {
// Pipes work, backslashes dont (but cant escape pipes).
return $1 === '|' ? $1 : $0;
}