@openuji/speculator 0.1.0

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 (66) hide show
  1. package/README.md +38 -0
  2. package/dist/index.d.ts +6 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +17 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/markdown/index.d.ts +5 -0
  7. package/dist/markdown/index.d.ts.map +1 -0
  8. package/dist/markdown/index.js +70 -0
  9. package/dist/markdown/index.js.map +1 -0
  10. package/dist/markdown/plugins/cite.d.ts +3 -0
  11. package/dist/markdown/plugins/cite.d.ts.map +1 -0
  12. package/dist/markdown/plugins/cite.js +36 -0
  13. package/dist/markdown/plugins/cite.js.map +1 -0
  14. package/dist/markdown/plugins/concept.d.ts +3 -0
  15. package/dist/markdown/plugins/concept.d.ts.map +1 -0
  16. package/dist/markdown/plugins/concept.js +30 -0
  17. package/dist/markdown/plugins/concept.js.map +1 -0
  18. package/dist/markdown/plugins/idl.d.ts +3 -0
  19. package/dist/markdown/plugins/idl.d.ts.map +1 -0
  20. package/dist/markdown/plugins/idl.js +28 -0
  21. package/dist/markdown/plugins/idl.js.map +1 -0
  22. package/dist/pipeline/passes/boilerplate.d.ts +3 -0
  23. package/dist/pipeline/passes/boilerplate.d.ts.map +1 -0
  24. package/dist/pipeline/passes/boilerplate.js +59 -0
  25. package/dist/pipeline/passes/boilerplate.js.map +1 -0
  26. package/dist/pipeline/passes/diagnostics.d.ts +3 -0
  27. package/dist/pipeline/passes/diagnostics.d.ts.map +1 -0
  28. package/dist/pipeline/passes/diagnostics.js +43 -0
  29. package/dist/pipeline/passes/diagnostics.js.map +1 -0
  30. package/dist/pipeline/passes/idl.d.ts +4 -0
  31. package/dist/pipeline/passes/idl.d.ts.map +1 -0
  32. package/dist/pipeline/passes/idl.js +188 -0
  33. package/dist/pipeline/passes/idl.js.map +1 -0
  34. package/dist/pipeline/passes/references.d.ts +3 -0
  35. package/dist/pipeline/passes/references.d.ts.map +1 -0
  36. package/dist/pipeline/passes/references.js +99 -0
  37. package/dist/pipeline/passes/references.js.map +1 -0
  38. package/dist/pipeline/passes/toc.d.ts +3 -0
  39. package/dist/pipeline/passes/toc.d.ts.map +1 -0
  40. package/dist/pipeline/passes/toc.js +30 -0
  41. package/dist/pipeline/passes/toc.js.map +1 -0
  42. package/dist/pipeline/passes/xref.d.ts +3 -0
  43. package/dist/pipeline/passes/xref.d.ts.map +1 -0
  44. package/dist/pipeline/passes/xref.js +132 -0
  45. package/dist/pipeline/passes/xref.js.map +1 -0
  46. package/dist/pipeline/postprocess.d.ts +6 -0
  47. package/dist/pipeline/postprocess.d.ts.map +1 -0
  48. package/dist/pipeline/postprocess.js +26 -0
  49. package/dist/pipeline/postprocess.js.map +1 -0
  50. package/dist/speculator.d.ts +40 -0
  51. package/dist/speculator.d.ts.map +1 -0
  52. package/dist/speculator.js +188 -0
  53. package/dist/speculator.js.map +1 -0
  54. package/dist/types.d.ts +146 -0
  55. package/dist/types.d.ts.map +1 -0
  56. package/dist/types.js +16 -0
  57. package/dist/types.js.map +1 -0
  58. package/dist/utils/file-loader.d.ts +18 -0
  59. package/dist/utils/file-loader.d.ts.map +1 -0
  60. package/dist/utils/file-loader.js +100 -0
  61. package/dist/utils/file-loader.js.map +1 -0
  62. package/dist/utils/strip-ident.d.ts +2 -0
  63. package/dist/utils/strip-ident.d.ts.map +1 -0
  64. package/dist/utils/strip-ident.js +15 -0
  65. package/dist/utils/strip-ident.js.map +1 -0
  66. package/package.json +68 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idl.js","sourceRoot":"","sources":["../../../src/pipeline/passes/idl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { PostprocessOptions } from '@/types';
2
+ export declare function runReferencesPass(root: Element, options: PostprocessOptions): string[];
3
+ //# sourceMappingURL=references.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"references.d.ts","sourceRoot":"","sources":["../../../src/pipeline/passes/references.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAe,MAAM,SAAS,CAAC;AA6C/D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAuDtF"}
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runReferencesPass = runReferencesPass;
4
+ function ensureSection(root, id, title) {
5
+ let section = root.querySelector(`#${id}`);
6
+ if (!section) {
7
+ section = root.ownerDocument.createElement('section');
8
+ section.id = id;
9
+ section.innerHTML = `<h2>${title}</h2>`;
10
+ root.appendChild(section);
11
+ }
12
+ return section;
13
+ }
14
+ function ensureSubsection(parent, id, title) {
15
+ let sec = parent.querySelector(`#${id}`);
16
+ if (!sec) {
17
+ sec = parent.ownerDocument.createElement('section');
18
+ sec.id = id;
19
+ sec.innerHTML = `<h3>${title}</h3><ul></ul>`;
20
+ parent.appendChild(sec);
21
+ }
22
+ return sec;
23
+ }
24
+ function formatEntry(id, e) {
25
+ const parts = [];
26
+ // Label
27
+ parts.push(`<span class="ref-id">[${id}]</span>`);
28
+ // Title
29
+ if (e.href)
30
+ parts.push(`<a href="${e.href}">${e.title || id}</a>`);
31
+ else
32
+ parts.push(`<span class="ref-title">${e.title || id}</span>`);
33
+ // Metadata
34
+ const meta = [];
35
+ if (e.publisher)
36
+ meta.push(e.publisher);
37
+ if (e.status)
38
+ meta.push(e.status);
39
+ if (e.date)
40
+ meta.push(e.date);
41
+ if (meta.length)
42
+ parts.push(`<span class="ref-meta"> — ${meta.join(', ')}</span>`);
43
+ return parts.join(' ');
44
+ }
45
+ function idForRef(id) {
46
+ // stable, predictable
47
+ return `bib-${id.toLowerCase()}`;
48
+ }
49
+ function runReferencesPass(root, options) {
50
+ const warnings = [];
51
+ const biblio = options.biblio?.entries ?? {};
52
+ const cites = Array.from(root.querySelectorAll('a[data-spec]'));
53
+ if (!cites.length)
54
+ return warnings;
55
+ // Classify cites
56
+ const normative = new Set();
57
+ const informative = new Set();
58
+ for (const a of cites) {
59
+ const id = (a.getAttribute('data-spec') || '').trim();
60
+ const norm = (a.getAttribute('data-normative') || 'false') === 'true';
61
+ (norm ? normative : informative).add(id);
62
+ }
63
+ // Prefer Normative: if an id is normative, drop it from informative
64
+ for (const id of normative)
65
+ informative.delete(id);
66
+ // Build/refresh section skeleton
67
+ const refs = ensureSection(root, 'references', 'References');
68
+ const normSec = ensureSubsection(refs, 'normative-references', 'Normative references');
69
+ const infoSec = ensureSubsection(refs, 'informative-references', 'Informative references');
70
+ const renderList = (sec, ids) => {
71
+ const ul = sec.querySelector('ul');
72
+ ul.innerHTML = '';
73
+ Array.from(ids).sort((a, b) => a.localeCompare(b)).forEach(id => {
74
+ const li = root.ownerDocument.createElement('li');
75
+ li.id = idForRef(id);
76
+ const entry = biblio[id];
77
+ if (entry) {
78
+ li.innerHTML = formatEntry(id, entry);
79
+ }
80
+ else {
81
+ li.setAttribute('data-spec', id);
82
+ li.innerHTML = `<span class="ref-id">[${id}]</span> <span class="ref-missing">— unresolved reference</span>`;
83
+ warnings.push(`Unresolved reference: "${id}"`);
84
+ }
85
+ ul.appendChild(li);
86
+ });
87
+ };
88
+ renderList(normSec, normative);
89
+ renderList(infoSec, informative);
90
+ // Link in-text cites to their reference list item
91
+ for (const a of cites) {
92
+ const id = (a.getAttribute('data-spec') || '').trim();
93
+ const targetId = idForRef(id);
94
+ a.setAttribute('href', `#${targetId}`);
95
+ a.setAttribute('data-cite-ref', targetId); // useful for debugging
96
+ }
97
+ return warnings;
98
+ }
99
+ //# sourceMappingURL=references.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"references.js","sourceRoot":"","sources":["../../../src/pipeline/passes/references.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { PostprocessOptions } from '@/types';
2
+ export declare function runTocPass(root: Element, options: PostprocessOptions): void;
3
+ //# sourceMappingURL=toc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toc.d.ts","sourceRoot":"","sources":["../../../src/pipeline/passes/toc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI,CA2B3E"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runTocPass = runTocPass;
4
+ function runTocPass(root, options) {
5
+ const { toc } = options;
6
+ if (toc?.enabled === false)
7
+ return;
8
+ const selector = toc?.selector ?? '#toc';
9
+ const mount = root.querySelector(selector);
10
+ if (!mount)
11
+ return;
12
+ const headings = Array.from(root.querySelectorAll('h2, h3'));
13
+ if (!headings.length)
14
+ return;
15
+ const doc = root.ownerDocument;
16
+ const ol = doc.createElement('ol');
17
+ ol.setAttribute('role', 'list');
18
+ for (const h of headings) {
19
+ if (!h.id)
20
+ continue;
21
+ const li = doc.createElement('li');
22
+ const depth = h.tagName.toLowerCase() === 'h3' ? 2 : 1;
23
+ li.setAttribute('data-depth', String(depth));
24
+ li.innerHTML = `<a href="#${h.id}">${h.textContent || ''}</a>`;
25
+ ol.appendChild(li);
26
+ }
27
+ mount.innerHTML = '';
28
+ mount.appendChild(ol);
29
+ }
30
+ //# sourceMappingURL=toc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toc.js","sourceRoot":"","sources":["../../../src/pipeline/passes/toc.ts"],"names":[],"mappings":";;AAEA,gCA2BC;AA3BD,SAAgB,UAAU,CAAC,IAAa,EAAE,OAA2B;IACnE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IACxB,IAAI,GAAG,EAAE,OAAO,KAAK,KAAK;QAAE,OAAO;IAEnC,MAAM,QAAQ,GAAG,GAAG,EAAE,QAAQ,IAAI,MAAM,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAc,QAAQ,CAAC,CAAC;IACxD,IAAI,CAAC,KAAK;QAAE,OAAO;IAEnB,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAc,QAAQ,CAAC,CAAC,CAAC;IAC1E,IAAI,CAAC,QAAQ,CAAC,MAAM;QAAE,OAAO;IAE7B,MAAM,GAAG,GAAG,IAAI,CAAC,aAAc,CAAC;IAChC,MAAM,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACnC,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEhC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,CAAC,EAAE;YAAE,SAAS;QACpB,MAAM,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAE7C,EAAE,CAAC,SAAS,GAAG,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,WAAW,IAAI,EAAE,MAAM,CAAC;QAC/D,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC;IACrB,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { PostprocessOptions } from '../../types.js';
2
+ export declare function runXrefPass(root: Element, options: PostprocessOptions): string[];
3
+ //# sourceMappingURL=xref.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xref.d.ts","sourceRoot":"","sources":["../../../src/pipeline/passes/xref.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAC,MAAM,gBAAgB,CAAC;AAyFxD,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAqDhF"}
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runXrefPass = runXrefPass;
4
+ function uniqueId(doc, base) {
5
+ let id = base;
6
+ let i = 2;
7
+ while (doc.getElementById(id))
8
+ id = `${base}-${i++}`;
9
+ return id;
10
+ }
11
+ function norm(term) {
12
+ return term.toLowerCase().replace(/\s+/g, ' ').trim();
13
+ }
14
+ function slugify(text) {
15
+ return text.trim().toLowerCase().replace(/[^\w]+/g, '-').replace(/^-+|-+$/g, '');
16
+ }
17
+ function isSuppressed(node, suppressClass) {
18
+ return !!node.closest(`.${suppressClass}`);
19
+ }
20
+ /** Build a local map of terms -> anchors from <dfn> and headings. */
21
+ function buildLocalMap(root) {
22
+ const map = new Map();
23
+ const doc = root.ownerDocument;
24
+ // 1) <dfn> terms (support data-lt="foo|bar,baz")
25
+ const dfns = root.querySelectorAll('dfn');
26
+ dfns.forEach(dfn => {
27
+ const text = (dfn.getAttribute('data-lt') || dfn.textContent || '').trim();
28
+ if (!text)
29
+ return;
30
+ // ensure an id so we can point to it
31
+ if (!dfn.id) {
32
+ // prefer first lt for id
33
+ const first = (text.split(/[|,]/)[0] || dfn.textContent || '').trim();
34
+ dfn.id = slugify(first);
35
+ }
36
+ const href = `#${dfn.id}`;
37
+ const variants = text
38
+ .split(/[|,]/)
39
+ .map(s => s.trim())
40
+ .filter(Boolean);
41
+ for (const v of variants) {
42
+ const key = norm(v);
43
+ if (!map.has(key)) {
44
+ map.set(key, { href, text: v, source: 'dfn' });
45
+ }
46
+ }
47
+ });
48
+ // 2) Headings (h2..h6) as fallback
49
+ const headings = root.querySelectorAll('h2, h3, h4, h5, h6');
50
+ headings.forEach(h => {
51
+ const label = (h.textContent || '').trim();
52
+ if (!label)
53
+ return;
54
+ // Prefer parent section id to avoid duplicate ids on heading + section
55
+ const parentSection = h.closest('section[id]');
56
+ let targetId = null;
57
+ if (parentSection) {
58
+ targetId = parentSection.id;
59
+ }
60
+ else if (h.id) {
61
+ targetId = h.id;
62
+ }
63
+ else {
64
+ const slug = slugify(label);
65
+ // generate a unique id that doesn't collide with anything
66
+ const uid = uniqueId(doc, slug);
67
+ h.id = uid;
68
+ targetId = uid;
69
+ }
70
+ if (!targetId)
71
+ return;
72
+ const key = norm(label);
73
+ if (!map.has(key)) {
74
+ map.set(key, { href: `#${targetId}`, text: label, source: 'heading' });
75
+ }
76
+ });
77
+ return map;
78
+ }
79
+ function runXrefPass(root, options) {
80
+ const suppressClass = options.diagnostics?.suppressClass ?? 'no-link-warnings';
81
+ const warnings = [];
82
+ const localMap = buildLocalMap(root);
83
+ // Make this an **array** to avoid TS/iterability issues
84
+ const xrefAnchors = Array.from(root.querySelectorAll('a[data-xref]'));
85
+ // 1) Resolve concept links locally
86
+ const unresolved = new Map();
87
+ for (const a of xrefAnchors) {
88
+ if (isSuppressed(a, suppressClass))
89
+ continue;
90
+ const term = a.getAttribute('data-xref') || '';
91
+ const key = norm(term);
92
+ const hit = localMap.get(key);
93
+ if (hit) {
94
+ a.setAttribute('href', hit.href);
95
+ // (optional) a.textContent = hit.text;
96
+ }
97
+ else {
98
+ const bucket = unresolved.get(key) || [];
99
+ bucket.push(a);
100
+ unresolved.set(key, bucket);
101
+ }
102
+ }
103
+ // 2) Try external resolver if provided (optional; non-blocking)
104
+ const resolver = options.xref?.resolver;
105
+ if (resolver && unresolved.size) {
106
+ const queries = Array.from(unresolved.keys()).map(term => ({ term }));
107
+ resolver.resolveBatch(queries, options.xref?.specs)
108
+ .then(results => {
109
+ for (const [key, anchors] of unresolved.entries()) {
110
+ const res = results.get(key);
111
+ if (!res)
112
+ continue;
113
+ for (const a of anchors) {
114
+ a.setAttribute('href', res.href);
115
+ if (res.cite)
116
+ a.setAttribute('data-cite', res.cite);
117
+ }
118
+ unresolved.delete(key);
119
+ }
120
+ })
121
+ .catch(err => {
122
+ warnings.push(`Xref resolver failed: ${err instanceof Error ? err.message : String(err)}`);
123
+ });
124
+ }
125
+ // 3) Anything still unresolved at this point: warn
126
+ for (const [key, anchors] of unresolved.entries()) {
127
+ const original = anchors[0].getAttribute('data-xref') || key;
128
+ warnings.push(`Unresolved xref: "${original}"`);
129
+ }
130
+ return warnings;
131
+ }
132
+ //# sourceMappingURL=xref.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xref.js","sourceRoot":"","sources":["../../../src/pipeline/passes/xref.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { PostprocessOptions } from '../types';
2
+ export interface PipelineResult {
3
+ warnings: string[];
4
+ }
5
+ export declare function postprocess(container: Element, options?: PostprocessOptions): Promise<PipelineResult>;
6
+ //# sourceMappingURL=postprocess.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postprocess.d.ts","sourceRoot":"","sources":["../../src/pipeline/postprocess.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAQnD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAsB,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,cAAc,CAAC,CAyB/G"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.postprocess = postprocess;
4
+ const xref_1 = require("./passes/xref");
5
+ const references_1 = require("./passes/references");
6
+ const toc_1 = require("./passes/toc");
7
+ const idl_1 = require("./passes/idl");
8
+ const diagnostics_1 = require("./passes/diagnostics");
9
+ const boilerplate_1 = require("./passes/boilerplate");
10
+ async function postprocess(container, options = {}) {
11
+ const warnings = [];
12
+ // 1) IDL: parse blocks, export anchors, resolve {{ ... }}
13
+ warnings.push(...(0, idl_1.runIdlPass)(container, options));
14
+ // 2) Concepts: resolve [= ... =] locally (and possibly externally in future)
15
+ warnings.push(...(0, xref_1.runXrefPass)(container, options));
16
+ // 3) Build references section skeleton from [[...]] anchors
17
+ warnings.push(...(0, references_1.runReferencesPass)(container, options));
18
+ // 4) Boilerplate (insert after cites/refs so it can mount before/after them)
19
+ (0, boilerplate_1.runBoilerplatePass)(container, options);
20
+ // 5) ToC
21
+ (0, toc_1.runTocPass)(container, options);
22
+ // 6) Diagnostics sweep (duplicates + missing hrefs, etc.)
23
+ warnings.push(...(0, diagnostics_1.runDiagnosticsPass)(container, options.diagnostics));
24
+ return { warnings };
25
+ }
26
+ //# sourceMappingURL=postprocess.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postprocess.js","sourceRoot":"","sources":["../../src/pipeline/postprocess.ts"],"names":[],"mappings":";;AAYA,kCAyBC;AApCD,wCAA4C;AAC5C,oDAAwD;AACxD,sCAA0C;AAC1C,sCAA0C;AAC1C,sDAA0D;AAC1D,sDAA0D;AAMnD,KAAK,UAAU,WAAW,CAAC,SAAkB,EAAE,UAA8B,EAAE;IACpF,MAAM,QAAQ,GAAa,EAAE,CAAC;IAG9B,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAA,gBAAU,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IAEjD,6EAA6E;IAC7E,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAA,kBAAW,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IAElD,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAA,8BAAiB,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IAExD,6EAA6E;IAC7E,IAAA,gCAAkB,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAEvC,SAAS;IACT,IAAA,gBAAU,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAE/B,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAA,gCAAkB,EAAC,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IAIrE,OAAO,EAAE,QAAQ,EAAE,CAAC;AACtB,CAAC"}
@@ -0,0 +1,40 @@
1
+ import type { SpeculatorOptions, ProcessingResult } from './types';
2
+ /**
3
+ * Main Speculator renderer class
4
+ */
5
+ export declare class Speculator {
6
+ private readonly baseUrl;
7
+ private readonly fileLoader;
8
+ private readonly markdownOptions;
9
+ private readonly postprocessOptions;
10
+ constructor(options?: SpeculatorOptions);
11
+ /**
12
+ * Process a single DOM element
13
+ */
14
+ processElement(element: Element): Promise<ProcessingResult>;
15
+ /**
16
+ * Process data-include attribute
17
+ */
18
+ private processDataInclude;
19
+ /**
20
+ * Process data-format attribute
21
+ */
22
+ private processDataFormat;
23
+ /**
24
+ * Process content based on format
25
+ */
26
+ private processContent;
27
+ /**
28
+ * Resolve file path relative to baseUrl
29
+ */
30
+ private resolveFilePath;
31
+ /**
32
+ * Process an entire document
33
+ */
34
+ renderDocument(container: Element): Promise<ProcessingResult>;
35
+ /**
36
+ * Process HTML string and return processed HTML
37
+ */
38
+ renderHTML(html: string): Promise<string>;
39
+ }
40
+ //# sourceMappingURL=speculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speculator.d.ts","sourceRoot":"","sources":["../src/speculator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAKjB,MAAM,SAAS,CAAC;AAKjB;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAuC;IACvE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAmC;gBAE1D,OAAO,GAAE,iBAAsB;IAO3C;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAuCjE;;OAEG;YACW,kBAAkB;IAoChC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAsBzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAWtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACG,cAAc,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAqDnE;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAYhD"}
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Speculator = void 0;
4
+ const markdown_1 = require("./markdown");
5
+ const file_loader_1 = require("./utils/file-loader");
6
+ const types_1 = require("./types");
7
+ const postprocess_1 = require("./pipeline/postprocess");
8
+ const strip_ident_1 = require("./utils/strip-ident");
9
+ /**
10
+ * Main Speculator renderer class
11
+ */
12
+ class Speculator {
13
+ constructor(options = {}) {
14
+ this.baseUrl = options.baseUrl || '';
15
+ this.fileLoader = options.fileLoader || (0, file_loader_1.getDefaultFileLoader)();
16
+ this.markdownOptions = options.markdownOptions || {};
17
+ this.postprocessOptions = options.postprocess || {};
18
+ }
19
+ /**
20
+ * Process a single DOM element
21
+ */
22
+ async processElement(element) {
23
+ const startTime = performance.now();
24
+ const stats = {
25
+ elementsProcessed: 0,
26
+ filesIncluded: 0,
27
+ markdownBlocks: 0,
28
+ processingTime: 0
29
+ };
30
+ const warnings = [];
31
+ const clonedElement = element.cloneNode(true);
32
+ try {
33
+ // Handle data-include attribute
34
+ if (clonedElement.hasAttribute('data-include')) {
35
+ await this.processDataInclude(clonedElement, stats, warnings);
36
+ }
37
+ // Handle data-format attribute
38
+ if (clonedElement.hasAttribute('data-format')) {
39
+ this.processDataFormat(clonedElement, stats, warnings);
40
+ }
41
+ stats.elementsProcessed = 1;
42
+ stats.processingTime = performance.now() - startTime;
43
+ return {
44
+ element: clonedElement,
45
+ warnings,
46
+ stats
47
+ };
48
+ }
49
+ catch (error) {
50
+ throw new types_1.SpeculatorError(`Failed to process element: ${error instanceof Error ? error.message : 'Unknown error'}`, element);
51
+ }
52
+ }
53
+ /**
54
+ * Process data-include attribute
55
+ */
56
+ async processDataInclude(element, stats, warnings) {
57
+ const includePath = element.getAttribute('data-include');
58
+ const includeFormat = (element.getAttribute('data-include-format') || 'text');
59
+ if (!includePath) {
60
+ warnings.push('data-include attribute is empty');
61
+ return;
62
+ }
63
+ try {
64
+ const fullPath = this.resolveFilePath(includePath);
65
+ const content = await this.fileLoader(fullPath);
66
+ const processedContent = this.processContent(content, includeFormat);
67
+ element.innerHTML = processedContent;
68
+ stats.filesIncluded++;
69
+ if (includeFormat === 'markdown') {
70
+ stats.markdownBlocks++;
71
+ }
72
+ }
73
+ catch (error) {
74
+ const errorMsg = `Failed to load: ${includePath}`;
75
+ warnings.push(errorMsg);
76
+ element.innerHTML = `<p class="error">${errorMsg}</p>`;
77
+ throw new types_1.SpeculatorError(errorMsg, element, includePath);
78
+ }
79
+ // Clean up attributes
80
+ element.removeAttribute('data-include');
81
+ element.removeAttribute('data-include-format');
82
+ }
83
+ /**
84
+ * Process data-format attribute
85
+ */
86
+ processDataFormat(element, stats, warnings) {
87
+ const format = element.getAttribute('data-format');
88
+ if (format === 'markdown' && element.innerHTML.trim()) {
89
+ try {
90
+ const markdownContent = (0, strip_ident_1.stripIndent)(element.innerHTML).trim();
91
+ element.innerHTML = this.processContent(markdownContent, format);
92
+ stats.markdownBlocks++;
93
+ }
94
+ catch (error) {
95
+ const errorMsg = `Failed to process markdown: ${error instanceof Error ? error.message : 'Unknown error'}`;
96
+ warnings.push(errorMsg);
97
+ element.innerHTML = `<p class="error">${errorMsg}</p>`;
98
+ }
99
+ }
100
+ element.removeAttribute('data-format');
101
+ }
102
+ /**
103
+ * Process content based on format
104
+ */
105
+ processContent(content, format) {
106
+ switch (format) {
107
+ case 'markdown':
108
+ return (0, markdown_1.parseMarkdown)(content, this.markdownOptions);
109
+ case 'text':
110
+ case 'html':
111
+ default:
112
+ return content;
113
+ }
114
+ }
115
+ /**
116
+ * Resolve file path relative to baseUrl
117
+ */
118
+ resolveFilePath(path) {
119
+ if (path.startsWith('http://') || path.startsWith('https://') || path.startsWith('/')) {
120
+ return path;
121
+ }
122
+ return this.baseUrl ? `${this.baseUrl.replace(/\/$/, '')}/${path}` : path;
123
+ }
124
+ /**
125
+ * Process an entire document
126
+ */
127
+ async renderDocument(container) {
128
+ const startTime = performance.now();
129
+ const sections = container.querySelectorAll('section[data-include], section[data-format], *[data-include], *[data-format]');
130
+ const allStats = {
131
+ elementsProcessed: 0,
132
+ filesIncluded: 0,
133
+ markdownBlocks: 0,
134
+ processingTime: 0
135
+ };
136
+ const allWarnings = [];
137
+ const processedElements = [];
138
+ for (const section of Array.from(sections)) {
139
+ try {
140
+ const result = await this.processElement(section);
141
+ processedElements.push(result.element);
142
+ // Aggregate stats
143
+ allStats.elementsProcessed += result.stats.elementsProcessed;
144
+ allStats.filesIncluded += result.stats.filesIncluded;
145
+ allStats.markdownBlocks += result.stats.markdownBlocks;
146
+ allWarnings.push(...result.warnings);
147
+ }
148
+ catch (error) {
149
+ allWarnings.push(`Failed to process element: ${error instanceof Error ? error.message : 'Unknown error'}`);
150
+ processedElements.push(section); // Keep original on error
151
+ }
152
+ }
153
+ // Replace original sections with processed ones
154
+ sections.forEach((section, index) => {
155
+ if (processedElements[index] && section.parentNode) {
156
+ section.parentNode.replaceChild(processedElements[index], section);
157
+ }
158
+ });
159
+ try {
160
+ const { warnings } = await (0, postprocess_1.postprocess)(container, this.postprocessOptions || {});
161
+ allWarnings.push(...warnings);
162
+ }
163
+ catch (e) {
164
+ allWarnings.push(`Postprocess failed: ${e instanceof Error ? e.message : 'Unknown error'}`);
165
+ }
166
+ allStats.processingTime = performance.now() - startTime;
167
+ return {
168
+ element: container,
169
+ warnings: allWarnings,
170
+ stats: allStats
171
+ };
172
+ }
173
+ /**
174
+ * Process HTML string and return processed HTML
175
+ */
176
+ async renderHTML(html) {
177
+ if (typeof DOMParser === 'undefined') {
178
+ throw new types_1.SpeculatorError('DOMParser not available. This method requires a browser environment or jsdom.');
179
+ }
180
+ const parser = new DOMParser();
181
+ const doc = parser.parseFromString(`<div>${html}</div>`, 'text/html');
182
+ const container = doc.body.firstElementChild;
183
+ await this.renderDocument(container);
184
+ return container.innerHTML;
185
+ }
186
+ }
187
+ exports.Speculator = Speculator;
188
+ //# sourceMappingURL=speculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speculator.js","sourceRoot":"","sources":["../src/speculator.ts"],"names":[],"mappings":"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"}