- web/: Vue 3 + Vite + UnoCSS + Pinia, dark tactical theme (amber/#0d1117) - AppNav, ListingCard, SearchView with filters/sort, composables (useSnipeMode, useKonamiCode, useMotion), Pinia search store - Steal shimmer, auction countdown, Snipe Mode easter egg all native in Vue - docker/web/: nginx + multi-stage Dockerfile (node build → nginx serve) - compose.yml: api (8510) + web (8509) services - Dockerfile CMD updated to uvicorn for upcoming FastAPI layer - Clean build: 0 TS errors, 380 modules
14 lines
590 B
JavaScript
14 lines
590 B
JavaScript
export default function ansiRegex({onlyFirst = false} = {}) {
|
|
// Valid string terminator sequences are BEL, ESC\, and 0x9c
|
|
const ST = '(?:\\u0007|\\u001B\\u005C|\\u009C)';
|
|
|
|
// OSC sequences only: ESC ] ... ST (non-greedy until the first ST)
|
|
const osc = `(?:\\u001B\\][\\s\\S]*?${ST})`;
|
|
|
|
// CSI and related: ESC/C1, optional intermediates, optional params (supports ; and :) then final byte
|
|
const csi = '[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]';
|
|
|
|
const pattern = `${osc}|${csi}`;
|
|
|
|
return new RegExp(pattern, onlyFirst ? undefined : 'g');
|
|
}
|