@polishd/next 0.2.3-dev.4 → 0.2.3-dev.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/CHANGELOG.md +37 -39
  2. package/README.md +7 -5
  3. package/bin/init.mjs +4 -1
  4. package/dist/ai/actions.d.ts +1 -7
  5. package/dist/ai/actions.d.ts.map +1 -1
  6. package/dist/ai/actions.js +0 -10
  7. package/dist/ai/actions.js.map +1 -1
  8. package/dist/ai/guard.d.ts.map +1 -1
  9. package/dist/ai/guard.js +32 -8
  10. package/dist/ai/guard.js.map +1 -1
  11. package/dist/ai/issues.d.ts +0 -12
  12. package/dist/ai/issues.d.ts.map +1 -1
  13. package/dist/ai/issues.js +2 -16
  14. package/dist/ai/issues.js.map +1 -1
  15. package/dist/ai/types.d.ts +0 -49
  16. package/dist/ai/types.d.ts.map +1 -1
  17. package/dist/dashboard/index.d.ts.map +1 -1
  18. package/dist/dashboard/index.js +2 -4
  19. package/dist/dashboard/index.js.map +1 -1
  20. package/dist/dashboard/issues.d.ts +2 -31
  21. package/dist/dashboard/issues.d.ts.map +1 -1
  22. package/dist/dashboard/issues.js +71 -4
  23. package/dist/dashboard/issues.js.map +1 -1
  24. package/dist/dashboard/snapshot-actions.d.ts +15 -5
  25. package/dist/dashboard/snapshot-actions.d.ts.map +1 -1
  26. package/dist/dashboard/snapshot-actions.js +102 -25
  27. package/dist/dashboard/snapshot-actions.js.map +1 -1
  28. package/dist/dashboard/snapshots.d.ts.map +1 -1
  29. package/dist/dashboard/snapshots.js +71 -8
  30. package/dist/dashboard/snapshots.js.map +1 -1
  31. package/dist/dashboard.css +18 -70
  32. package/dist/server/snapshots.d.ts +37 -6
  33. package/dist/server/snapshots.d.ts.map +1 -1
  34. package/dist/server/snapshots.js +271 -144
  35. package/dist/server/snapshots.js.map +1 -1
  36. package/docs/SETUP.md +10 -0
  37. package/package.json +1 -1
  38. package/dist/ai/fix.d.ts +0 -14
  39. package/dist/ai/fix.d.ts.map +0 -1
  40. package/dist/ai/fix.js +0 -254
  41. package/dist/ai/fix.js.map +0 -1
  42. package/dist/dashboard/issue-list.d.ts +0 -11
  43. package/dist/dashboard/issue-list.d.ts.map +0 -1
  44. package/dist/dashboard/issue-list.js +0 -159
  45. package/dist/dashboard/issue-list.js.map +0 -1
  46. package/dist/dashboard/markdown-parse.d.ts +0 -87
  47. package/dist/dashboard/markdown-parse.d.ts.map +0 -1
  48. package/dist/dashboard/markdown-parse.js +0 -244
  49. package/dist/dashboard/markdown-parse.js.map +0 -1
  50. package/dist/dashboard/markdown.d.ts +0 -5
  51. package/dist/dashboard/markdown.d.ts.map +0 -1
  52. package/dist/dashboard/markdown.js +0 -65
  53. package/dist/dashboard/markdown.js.map +0 -1
@@ -1,244 +0,0 @@
1
- /**
2
- * Polishd — a small GitHub-flavored-markdown parser (pure, no dependencies).
3
- *
4
- * The Issues tab shows issue bodies that are real markdown: polishd writes
5
- * them (`issueBody` in `src/ai/issues.ts` emits headings, bold, code, link
6
- * lists, blockquotes) and humans edit them on GitHub afterwards. Rendering
7
- * that as a raw `<pre>` wastes the structure — but the package's rule is zero
8
- * runtime dependencies, so `react-markdown` and friends are off the table.
9
- *
10
- * This module is the answer: a bounded, hand-written parser for the subset of
11
- * GFM that actually appears in issues — headings, paragraphs, fenced code,
12
- * blockquotes, ordered/unordered/task lists (nested), tables, rules, and the
13
- * inline set (bold, italic, strikethrough, code, links, images, autolinks).
14
- * One GitHub-ism matters: inside a paragraph a single newline is a hard
15
- * break, the way issue comments render. Anything the parser doesn't
16
- * recognize degrades to plain paragraph text — never a crash, never dropped
17
- * content.
18
- *
19
- * Parsing is kept apart from rendering (`markdown.tsx`) so the grammar can be
20
- * pinned down by plain node:test files with no React in sight.
21
- */
22
- /**
23
- * Ordered by precedence for ties at the same index: code spans protect their
24
- * contents from everything else, images must beat links (shared `[` syntax),
25
- * and `**strong**` must beat `*em*`.
26
- */
27
- const INLINE_RULES = [
28
- { re: /`([^`\n]+)`/, make: (m) => ({ kind: "code", text: m[1] }) },
29
- {
30
- re: /!\[([^\]]*)\]\(([^)\s]+)(?:\s+"[^"]*")?\)/,
31
- make: (m) => ({ kind: "image", alt: m[1], src: m[2] }),
32
- },
33
- {
34
- re: /\[([^\]]+)\]\(([^)\s]+)(?:\s+"[^"]*")?\)/,
35
- make: (m) => ({ kind: "link", href: m[2], children: parseInline(m[1]) }),
36
- },
37
- {
38
- re: /\*\*((?:[^*\n]|\*(?!\*))+)\*\*/,
39
- make: (m) => ({ kind: "strong", children: parseInline(m[1]) }),
40
- },
41
- {
42
- re: /__((?:[^_\n]|_(?!_))+)__/,
43
- make: (m) => ({ kind: "strong", children: parseInline(m[1]) }),
44
- },
45
- { re: /\*([^*\n]+)\*/, make: (m) => ({ kind: "em", children: parseInline(m[1]) }) },
46
- {
47
- re: /(?<![A-Za-z0-9_])_([^_\n]+)_(?![A-Za-z0-9_])/,
48
- make: (m) => ({ kind: "em", children: parseInline(m[1]) }),
49
- },
50
- { re: /~~([^~\n]+)~~/, make: (m) => ({ kind: "del", children: parseInline(m[1]) }) },
51
- {
52
- re: /https?:\/\/[^\s<>]*[^\s<>.,;:!?)'"`]/,
53
- make: (m) => ({ kind: "link", href: m[0], children: [{ kind: "text", text: m[0] }] }),
54
- },
55
- ];
56
- /** Plain text, with each newline becoming a hard break (GitHub issue style). */
57
- function pushText(out, text) {
58
- if (!text)
59
- return;
60
- const parts = text.split("\n");
61
- parts.forEach((part, i) => {
62
- if (i > 0)
63
- out.push({ kind: "break" });
64
- if (part)
65
- out.push({ kind: "text", text: part });
66
- });
67
- }
68
- /** Parse one run of inline markdown into a token list. */
69
- export function parseInline(text) {
70
- const out = [];
71
- let rest = text;
72
- while (rest.length > 0) {
73
- let best = null;
74
- for (const rule of INLINE_RULES) {
75
- const m = rule.re.exec(rest);
76
- if (m && (best === null || m.index < best.index)) {
77
- best = { index: m.index, length: m[0].length, node: rule.make(m) };
78
- }
79
- }
80
- if (!best) {
81
- pushText(out, rest);
82
- break;
83
- }
84
- pushText(out, rest.slice(0, best.index));
85
- out.push(best.node);
86
- rest = rest.slice(best.index + best.length);
87
- }
88
- return out;
89
- }
90
- // ── Block parsing ────────────────────────────────────────────────────────────
91
- const HEADING_RE = /^(#{1,6})\s+(.*?)\s*#*\s*$/;
92
- const RULE_RE = /^ {0,3}(?:-{3,}|\*{3,}|_{3,})\s*$/;
93
- const FENCE_RE = /^ {0,3}(```|~~~)\s*(\S*)\s*$/;
94
- const QUOTE_RE = /^ {0,3}>\s?(.*)$/;
95
- const LIST_RE = /^(\s*)(?:([-*+])|(\d{1,9})[.)])\s+(.*)$/;
96
- /** The `| --- | :--: |` row that promotes the line above it to a table header. */
97
- const TABLE_SEP_RE = /^\s*\|?[\s:|-]*-[\s:|-]*\|?\s*$/;
98
- function isBlank(line) {
99
- return line.trim().length === 0;
100
- }
101
- /** Does this line begin a block of its own, ending any open paragraph? */
102
- function startsBlock(line) {
103
- return (HEADING_RE.test(line) ||
104
- RULE_RE.test(line) ||
105
- FENCE_RE.test(line) ||
106
- QUOTE_RE.test(line) ||
107
- LIST_RE.test(line));
108
- }
109
- /** `| a | b |` → ["a", "b"]. Outer pipes optional, cells trimmed. */
110
- function splitCells(line) {
111
- let t = line.trim();
112
- if (t.startsWith("|"))
113
- t = t.slice(1);
114
- if (t.endsWith("|"))
115
- t = t.slice(0, -1);
116
- return t.split("|").map((c) => c.trim());
117
- }
118
- /** Fold rows into (possibly nested) items — deeper indent means a sublist. */
119
- function buildList(rows, pos, level) {
120
- const ordered = rows[pos.i].ordered;
121
- const items = [];
122
- while (pos.i < rows.length) {
123
- const row = rows[pos.i];
124
- if (row.indent < level)
125
- break;
126
- if (row.indent > level) {
127
- const sub = buildList(rows, pos, row.indent);
128
- if (items.length > 0)
129
- items[items.length - 1].sub = sub;
130
- else
131
- items.push({ children: [], sub });
132
- continue;
133
- }
134
- pos.i += 1;
135
- let text = row.text;
136
- let checked;
137
- const task = text.match(/^\[([ xX])\]\s+(.*)$/);
138
- if (task) {
139
- checked = task[1] !== " ";
140
- text = task[2];
141
- }
142
- items.push({ checked, children: parseInline(text) });
143
- }
144
- return { ordered, items };
145
- }
146
- /** Parse a whole markdown document into blocks. */
147
- export function parseMarkdown(md) {
148
- const lines = md.replace(/\r\n?/g, "\n").split("\n");
149
- const blocks = [];
150
- let i = 0;
151
- while (i < lines.length) {
152
- const line = lines[i];
153
- if (isBlank(line)) {
154
- i += 1;
155
- continue;
156
- }
157
- // Fenced code — verbatim until the closing fence (or the end of input).
158
- const fence = line.match(FENCE_RE);
159
- if (fence) {
160
- const marker = fence[1];
161
- const body = [];
162
- i += 1;
163
- while (i < lines.length && !lines[i].trim().startsWith(marker)) {
164
- body.push(lines[i]);
165
- i += 1;
166
- }
167
- i += 1; // past the closing fence, harmless at end of input
168
- blocks.push({ kind: "codeBlock", lang: fence[2], text: body.join("\n") });
169
- continue;
170
- }
171
- const heading = line.match(HEADING_RE);
172
- if (heading) {
173
- blocks.push({
174
- kind: "heading",
175
- level: heading[1].length,
176
- children: parseInline(heading[2]),
177
- });
178
- i += 1;
179
- continue;
180
- }
181
- if (RULE_RE.test(line)) {
182
- blocks.push({ kind: "rule" });
183
- i += 1;
184
- continue;
185
- }
186
- // Blockquote — strip the markers and parse the inside as its own document.
187
- if (QUOTE_RE.test(line)) {
188
- const inner = [];
189
- while (i < lines.length && QUOTE_RE.test(lines[i])) {
190
- inner.push(lines[i].match(QUOTE_RE)[1]);
191
- i += 1;
192
- }
193
- blocks.push({ kind: "quote", children: parseMarkdown(inner.join("\n")) });
194
- continue;
195
- }
196
- // Table — a pipe row whose next line is the `---|---` separator.
197
- if (line.includes("|") && i + 1 < lines.length && TABLE_SEP_RE.test(lines[i + 1]) && lines[i + 1].includes("|")) {
198
- const header = splitCells(line).map(parseInline);
199
- i += 2;
200
- const rows = [];
201
- while (i < lines.length && lines[i].includes("|") && !isBlank(lines[i])) {
202
- rows.push(splitCells(lines[i]).map(parseInline));
203
- i += 1;
204
- }
205
- blocks.push({ kind: "table", header, rows });
206
- continue;
207
- }
208
- // List — collect the run of list lines (plus indented continuations),
209
- // then fold it into a tree by indent.
210
- if (LIST_RE.test(line)) {
211
- const rows = [];
212
- while (i < lines.length) {
213
- const m = lines[i].match(LIST_RE);
214
- if (m) {
215
- rows.push({ indent: m[1].length, ordered: m[3] !== undefined, text: m[4] });
216
- i += 1;
217
- continue;
218
- }
219
- // A deeper-indented plain line continues the previous item's text.
220
- if (rows.length > 0 && /^\s{2,}\S/.test(lines[i])) {
221
- rows[rows.length - 1].text += `\n${lines[i].trim()}`;
222
- i += 1;
223
- continue;
224
- }
225
- break;
226
- }
227
- blocks.push({ kind: "list", list: buildList(rows, { i: 0 }, rows[0].indent) });
228
- continue;
229
- }
230
- // Paragraph — everything up to a blank line or the start of another block.
231
- const para = [line];
232
- i += 1;
233
- while (i < lines.length && !isBlank(lines[i]) && !startsBlock(lines[i])) {
234
- // A `---|---` line would turn the next line into a table header, not us.
235
- if (lines[i].includes("|") && i + 1 < lines.length && TABLE_SEP_RE.test(lines[i + 1]))
236
- break;
237
- para.push(lines[i]);
238
- i += 1;
239
- }
240
- blocks.push({ kind: "paragraph", children: parseInline(para.join("\n")) });
241
- }
242
- return blocks;
243
- }
244
- //# sourceMappingURL=markdown-parse.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"markdown-parse.js","sourceRoot":"","sources":["../../src/dashboard/markdown-parse.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- /** GitHub-flavored markdown → dashboard-styled elements. */
2
- export declare function Markdown({ text }: {
3
- text: string;
4
- }): import("react").JSX.Element;
5
- //# sourceMappingURL=markdown.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/dashboard/markdown.tsx"],"names":[],"mappings":"AA4LA,4DAA4D;AAC5D,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,+BAMlD"}
@@ -1,65 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { parseMarkdown, } from "./markdown-parse";
3
- const codeSpan = "rounded bg-[#1a1a1a] px-1 py-0.5 font-mono text-[0.92em] text-[#ddd]";
4
- function renderInline(nodes) {
5
- return nodes.map((node, i) => {
6
- switch (node.kind) {
7
- case "text":
8
- return node.text;
9
- case "break":
10
- return _jsx("br", {}, i);
11
- case "code":
12
- return (_jsx("code", { className: codeSpan, children: node.text }, i));
13
- case "strong":
14
- return (_jsx("strong", { className: "font-semibold text-[#ddd]", children: renderInline(node.children) }, i));
15
- case "em":
16
- return _jsx("em", { children: renderInline(node.children) }, i);
17
- case "del":
18
- return (_jsx("del", { className: "text-[#777]", children: renderInline(node.children) }, i));
19
- case "link":
20
- return (_jsx("a", { href: node.href, target: "_blank", rel: "noreferrer noopener", className: "break-words text-[#8ab4f8] hover:underline", children: renderInline(node.children) }, i));
21
- case "image":
22
- return (
23
- // Plain <img>, not next/image — screenshots live on arbitrary hosts
24
- // the consumer's image config knows nothing about.
25
- _jsx("img", { src: node.src, alt: node.alt, loading: "lazy", className: "my-1 max-w-full rounded-md border border-[#2e2e2e]" }, i));
26
- }
27
- });
28
- }
29
- function List({ list }) {
30
- const Tag = list.ordered ? "ol" : "ul";
31
- return (_jsx(Tag, { className: `space-y-1 pl-5 ${list.ordered ? "list-decimal" : "list-disc"} marker:text-[#555]`, children: list.items.map((item, i) => (_jsxs("li", { children: [item.checked !== undefined && (_jsx("span", { "aria-hidden": true, className: `mr-1.5 font-mono ${item.checked ? "text-emerald-500" : "text-[#555]"}`, children: item.checked ? "☑" : "☐" })), renderInline(item.children), item.sub && (_jsx("div", { className: "mt-1", children: _jsx(List, { list: item.sub }) }))] }, i))) }));
32
- }
33
- const HEADING_CLS = {
34
- 1: "text-[15px] font-semibold text-white",
35
- 2: "text-[14px] font-semibold text-white",
36
- 3: "text-[13px] font-semibold text-[#ddd]",
37
- 4: "text-[12px] font-semibold text-[#ddd]",
38
- 5: "text-[12px] font-medium text-[#ccc]",
39
- 6: "text-[11px] font-medium uppercase tracking-[0.08em] text-[#888]",
40
- };
41
- function renderBlock(block, key) {
42
- switch (block.kind) {
43
- case "heading": {
44
- const Tag = `h${Math.min(block.level + 2, 6)}`;
45
- return (_jsx(Tag, { className: `pt-1 ${HEADING_CLS[block.level]}`, children: renderInline(block.children) }, key));
46
- }
47
- case "paragraph":
48
- return _jsx("p", { children: renderInline(block.children) }, key);
49
- case "codeBlock":
50
- return (_jsx("pre", { className: "overflow-x-auto rounded-md border border-[#2e2e2e] bg-[#111] px-3 py-2.5 font-mono text-[11px] leading-relaxed text-[#aaa]", children: _jsx("code", { children: block.text }) }, key));
51
- case "quote":
52
- return (_jsx("blockquote", { className: "space-y-2 border-l-2 border-[#2e2e2e] pl-3 text-[#888]", children: block.children.map(renderBlock) }, key));
53
- case "list":
54
- return _jsx(List, { list: block.list }, key);
55
- case "rule":
56
- return _jsx("hr", { className: "border-t border-[#2e2e2e]" }, key);
57
- case "table":
58
- return (_jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "w-full text-left text-[12px]", children: [_jsx("thead", { children: _jsx("tr", { children: block.header.map((cell, i) => (_jsx("th", { className: "border-b border-[#2e2e2e] py-1.5 pr-4 font-medium text-[#ddd]", children: renderInline(cell) }, i))) }) }), _jsx("tbody", { children: block.rows.map((row, r) => (_jsx("tr", { children: row.map((cell, c) => (_jsx("td", { className: "border-b border-[#1f1f1f] py-1.5 pr-4", children: renderInline(cell) }, c))) }, r))) })] }) }, key));
59
- }
60
- }
61
- /** GitHub-flavored markdown → dashboard-styled elements. */
62
- export function Markdown({ text }) {
63
- return (_jsx("div", { className: "space-y-2.5 break-words text-[13px] leading-relaxed text-[#aaa]", children: parseMarkdown(text).map(renderBlock) }));
64
- }
65
- //# sourceMappingURL=markdown.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/dashboard/markdown.tsx"],"names":[],"mappings":"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"}