Files

19 lines
1.2 KiB
JavaScript

import { readFileSync } from "node:fs";
import { createRequire } from "node:module";
const Q = process.argv[2];
const { JSDOM } = createRequire(`${Q}/h-jsdom/`)("jsdom");
const dom = new JSDOM('<!doctype html><div id="e"></div>', { runScripts: "outside-only", pretendToBeVisual: true });
dom.window.eval(readFileSync(process.argv[3], "utf8"));
const P = dom.window.__q154;
const doc = P.defaultMarkdownParser.parse("# Title\n\n- one\n- two\n\nsee [x](http://a.test) and `code`\n");
const view = new P.EditorView(dom.window.document.getElementById("e"), { state: P.EditorState.create({ doc, plugins: [P.history(), P.keymap(P.baseKeymap)] }) });
console.log("view html:", view.dom.innerHTML.replace(/\s+/g, " ").slice(0, 220));
console.log("serialised:", JSON.stringify(P.defaultMarkdownSerializer.serialize(view.state.doc)));
// paste-style parse: hostile HTML through the clipboard parser path
const hostile = '<p onclick="x()">hi<script>alert(1)</script><img src=x onerror="alert(2)"><a href="javascript:alert(3)">l</a></p>';
const slice = view.someProp ? null : null;
const { DOMParser } = dom.window;
const div = dom.window.document.implementation.createHTMLDocument("t").body; div.innerHTML = hostile;
const pm = P.Schema;
console.log("built bundle runs; ok");