const { test } = require('node:test') const assert = require('node:assert/strict') const fs = require('node:fs') const vm = require('node:vm') const ts = require('typescript') const React = require('react') const { renderToStaticMarkup } = require('react-dom/server') function compile(file, overrides = {}, globals = {}) { const exports = {} vm.runInNewContext(ts.transpileModule(fs.readFileSync(require.resolve(file), 'utf8'), { compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2022, jsx: ts.JsxEmit.ReactJSX } }).outputText, { exports, require: name => overrides[name] ?? require(name), clearTimeout, setTimeout, ...globals }) return exports } const i18n = { t: key => key, useLocaleRender() {} } const block = compile('../src/renderer/src/components/ChatCodeBlock.tsx', { '../i18n': i18n }) const { MarkdownMessage } = compile('../src/renderer/src/components/ChatWidgets.tsx', { '../i18n': i18n, './ChatCodeBlock': block, './chatAttachments': {}, './ChatImageAttachments': {}, './ChatTextContextMenu': {} }) const render = (content, dark = true, extra = {}) => renderToStaticMarkup(React.createElement(MarkdownMessage, { content, dark, ...extra })) for (const dark of [true, false]) { test(`renders numbered/nested/task lists without losing the starting number (${dark})`, () => { const html = render('3. 설정 확인\n - 속도 제한\n - 조향 제한\n4. 결과 확인\n\n- [x] 완료\n- [ ] 대기', dark) assert.match(html, /