Roadmap
v0.1: MVP
- Spec Nitro + API TypeScript (
JSDOM.create,evaluate,serialize,dispose) - Estrutura C++ (
HybridHtmlSandbox,LexborDocument,QuickJSRuntime,DOMBindings) - Integração com Lexbor: parsing real de HTML e consultas de DOM
- Integração com QuickJS: execução real de JS
- Suporte a iOS
- Suporte a Android
v0.2: DOM real dentro do evaluate()
- Conectar o parsing real de HTML do Lexbor para que
evaluate()veja um DOM vivo - Conectar a execução de JS do QuickJS para que scripts rodem dentro do sandbox
-
document.querySelector(sel)/document.querySelectorAll(sel)retornam objetos de elemento reais dentro deevaluate() - Getter e setter de
element.textContent/element.innerHTMLacessíveis dentro deevaluate() -
document.getAttribute(sel, attr)/document.setAttribute(sel, attr, val)dentro deevaluate() -
document.createElement/element.appendChild/element.removeChilddentro deevaluate()
v0.3: Assincronismo & Eventos
-
addEventListener/removeEventListener -
setTimeout/setInterval/clearTimeout/clearInterval - Suporte a
Promisedentro do sandbox (drenagem de microtasks + propagação de rejeições não tratadas) - Encaminhamento de
console.logpara o console do RN via opçãoonConsole -
dispatchEvent(new Event('type'))dispara para os listeners registrados -
evaluate()drena completamente o event loop antes de retornar
v0.4: Rede & Armazenamento
-
fetch(conectado à stack de rede do RN) - Stubs de
localStorage/sessionStorage - Stub de
XMLHttpRequest
v0.5: Compatibilidade com jsdom
- Auditoria completa de paridade com a API do jsdom
-
window.location -
MutationObserver -
window.alert/window.confirm/window.prompt -
CustomEvent
v0.6: API de Node & Style
Lacunas identificadas pela auditoria de paridade v0.5 com o jsdom, priorizadas pela frequência com que scripts HTML/JS embutidos do mundo real as utilizam.
- Travessia genérica de Node (
childNodes,nodeType,nodeName,nodeValue,firstChild/lastChild/nextSibling/previousSibling,parentNode) -
document.getElementsByClassName/document.getElementsByTagName -
element.cloneNode() -
element.dataset(espelha os atributosdata-*) -
element.style(objeto no estiloCSSStyleDeclaration) -
document.title - Bubbling de eventos real (
dispatchEventpercorre os ancestrais;stopPropagation()/preventDefault()têm efeito)
v0.7: Identidade de Node & Ergonomia de DOM
Lacunas identificadas comparando com o jsdom para scripts embutidos do mundo real: identidade estável de node mais os métodos de travessia/mutação que esses scripts mais utilizam. APIs dependentes de layout (
getComputedStyle,getBoundingClientRect, CSSOM completo) estão fora de escopo, já que não há renderização para sustentá-las.
- Identidade estável de node (
el.firstChild === el.firstChild) via um cache de wrappers por runtime -
node.contains(other) -
element.closest(selector) -
node.replaceChild(newChild, oldChild) -
node.before(...nodes)/after(...nodes)/replaceWith(...nodes) -
element.append(...nodes)/prepend(...nodes) -
element.insertAdjacentHTML(position, html)
v0.8: Enumeração de Atributos & Comparação de Nodes
-
document.createComment()/document.createDocumentFragment() -
element.getAttributeNames() -
element.attributes(array snapshot de{name, value}) -
element.toggleAttribute(name, force?) -
node.isSameNode(other)/node.isEqualNode(other)