Pular para o conteúdo principal

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 de evaluate()
  • Getter e setter de element.textContent / element.innerHTML acessíveis dentro de evaluate()
  • document.getAttribute(sel, attr) / document.setAttribute(sel, attr, val) dentro de evaluate()
  • document.createElement / element.appendChild / element.removeChild dentro de evaluate()

v0.3: Assincronismo & Eventos

  • addEventListener / removeEventListener
  • setTimeout / setInterval / clearTimeout / clearInterval
  • Suporte a Promise dentro do sandbox (drenagem de microtasks + propagação de rejeições não tratadas)
  • Encaminhamento de console.log para o console do RN via opção onConsole
  • 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 atributos data-*)
  • element.style (objeto no estilo CSSStyleDeclaration)
  • document.title
  • Bubbling de eventos real (dispatchEvent percorre 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)