@openuji/speculator 0.7.3 → 0.7.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 (90) hide show
  1. package/README.md +1 -1
  2. package/dist/parse/html/SpecStatementHtmlParser.d.ts +4 -1
  3. package/dist/parse/html/SpecStatementHtmlParser.d.ts.map +1 -1
  4. package/dist/parse/html/SpecStatementHtmlParser.js +45 -26
  5. package/dist/parse/html/SpecStatementHtmlParser.js.map +1 -1
  6. package/dist/parse/html/VocabHtmlParser.d.ts +12 -0
  7. package/dist/parse/html/VocabHtmlParser.d.ts.map +1 -0
  8. package/dist/parse/html/VocabHtmlParser.js +1156 -0
  9. package/dist/parse/html/VocabHtmlParser.js.map +1 -0
  10. package/dist/parse/html/parser.d.ts.map +1 -1
  11. package/dist/parse/html/parser.js +42 -29
  12. package/dist/parse/html/parser.js.map +1 -1
  13. package/dist/parse/index.d.ts +1 -0
  14. package/dist/parse/index.d.ts.map +1 -1
  15. package/dist/parse/index.js +2 -0
  16. package/dist/parse/index.js.map +1 -1
  17. package/dist/parse/markdown/HeadingsMarkdownParser.d.ts.map +1 -1
  18. package/dist/parse/markdown/HeadingsMarkdownParser.js +5 -31
  19. package/dist/parse/markdown/HeadingsMarkdownParser.js.map +1 -1
  20. package/dist/parse/markdown/HtmlBlockMarkdownParser.d.ts.map +1 -1
  21. package/dist/parse/markdown/HtmlBlockMarkdownParser.js +2 -1
  22. package/dist/parse/markdown/HtmlBlockMarkdownParser.js.map +1 -1
  23. package/dist/parse/markdown/MdxJsxMarkdownParser.d.ts +8 -0
  24. package/dist/parse/markdown/MdxJsxMarkdownParser.d.ts.map +1 -0
  25. package/dist/parse/markdown/MdxJsxMarkdownParser.js +61 -0
  26. package/dist/parse/markdown/MdxJsxMarkdownParser.js.map +1 -0
  27. package/dist/parse/markdown/MdxMarkdownParser.d.ts +13 -0
  28. package/dist/parse/markdown/MdxMarkdownParser.d.ts.map +1 -0
  29. package/dist/parse/markdown/MdxMarkdownParser.js +310 -0
  30. package/dist/parse/markdown/MdxMarkdownParser.js.map +1 -0
  31. package/dist/parse/markdown/parser.d.ts.map +1 -1
  32. package/dist/parse/markdown/parser.js +59 -13
  33. package/dist/parse/markdown/parser.js.map +1 -1
  34. package/dist/parse/markdown/plugins.d.ts +26 -0
  35. package/dist/parse/markdown/plugins.d.ts.map +1 -0
  36. package/dist/parse/markdown/plugins.js +83 -0
  37. package/dist/parse/markdown/plugins.js.map +1 -0
  38. package/dist/parse/markdown/remark-mdx-jsx-only.d.ts +10 -0
  39. package/dist/parse/markdown/remark-mdx-jsx-only.d.ts.map +1 -0
  40. package/dist/parse/markdown/remark-mdx-jsx-only.js +26 -0
  41. package/dist/parse/markdown/remark-mdx-jsx-only.js.map +1 -0
  42. package/dist/parse/parsers.d.ts +2 -2
  43. package/dist/parse/parsers.d.ts.map +1 -1
  44. package/dist/parse/parsers.js +6 -6
  45. package/dist/parse/parsers.js.map +1 -1
  46. package/dist/parse/pipeline.d.ts.map +1 -1
  47. package/dist/parse/pipeline.js +8 -2
  48. package/dist/parse/pipeline.js.map +1 -1
  49. package/dist/parse/utils/hast-utils.d.ts.map +1 -1
  50. package/dist/parse/utils/hast-utils.js +127 -19
  51. package/dist/parse/utils/hast-utils.js.map +1 -1
  52. package/dist/parse/utils/html-element-utils.d.ts +9 -0
  53. package/dist/parse/utils/html-element-utils.d.ts.map +1 -0
  54. package/dist/parse/utils/html-element-utils.js +88 -0
  55. package/dist/parse/utils/html-element-utils.js.map +1 -0
  56. package/dist/parse/utils/markdown-utils.d.ts +24 -0
  57. package/dist/parse/utils/markdown-utils.d.ts.map +1 -1
  58. package/dist/parse/utils/markdown-utils.js +106 -0
  59. package/dist/parse/utils/markdown-utils.js.map +1 -1
  60. package/dist/parse/utils/normative.js +3 -3
  61. package/dist/parse/utils/normative.js.map +1 -1
  62. package/dist/postprocess/index.d.ts +1 -0
  63. package/dist/postprocess/index.d.ts.map +1 -1
  64. package/dist/postprocess/index.js +3 -0
  65. package/dist/postprocess/index.js.map +1 -1
  66. package/dist/postprocess/plugins/statement-distribute.d.ts +13 -0
  67. package/dist/postprocess/plugins/statement-distribute.d.ts.map +1 -0
  68. package/dist/postprocess/plugins/statement-distribute.js +150 -0
  69. package/dist/postprocess/plugins/statement-distribute.js.map +1 -0
  70. package/dist/postprocess/plugins/statement-index.d.ts.map +1 -1
  71. package/dist/postprocess/plugins/statement-index.js +20 -17
  72. package/dist/postprocess/plugins/statement-index.js.map +1 -1
  73. package/dist/postprocess/plugins/statementsJsonLd-compute.d.ts.map +1 -1
  74. package/dist/postprocess/plugins/statementsJsonLd-compute.js +1 -0
  75. package/dist/postprocess/plugins/statementsJsonLd-compute.js.map +1 -1
  76. package/dist/postprocess/walk-ast.d.ts +7 -15
  77. package/dist/postprocess/walk-ast.d.ts.map +1 -1
  78. package/dist/postprocess/walk-ast.js +49 -57
  79. package/dist/postprocess/walk-ast.js.map +1 -1
  80. package/dist/preprocess/include/resolver.d.ts.map +1 -1
  81. package/dist/preprocess/include/resolver.js +53 -3
  82. package/dist/preprocess/include/resolver.js.map +1 -1
  83. package/dist/preprocess/types.d.ts +8 -0
  84. package/dist/preprocess/types.d.ts.map +1 -1
  85. package/dist/types/ast.generated.d.ts +65 -5
  86. package/dist/types/ast.generated.d.ts.map +1 -1
  87. package/dist/types/ast.generated.js +4 -4
  88. package/dist/types/ast.generated.js.map +1 -1
  89. package/package.json +10 -1
  90. package/schema/spec-ast.schema.json +193 -4
package/README.md CHANGED
@@ -35,7 +35,7 @@ A plugin-based pipeline that refines the AST:
35
35
 
36
36
  ## 💎 Schema-Central Design
37
37
 
38
- The **Speculator AST JSON Schema** is the single source of truth. All pipeline outputs are validated against this schema, ensuring that downstream tools (like `@openuji/render-respec`) can rely on a stable, typed data model.
38
+ The **Speculator AST JSON Schema** is the single source of truth. All pipeline outputs are validated against this schema, ensuring that downstream tools can rely on a stable, typed data model.
39
39
 
40
40
  ### Core Node Types
41
41
 
@@ -2,7 +2,10 @@
2
2
  * Spec Statement HTML Parser
3
3
  *
4
4
  * Handles <spec-statement> custom elements.
5
- * Auto-detects RFC 2119 keywords and generates stable IDs.
5
+ * Reads attributes and delegates child parsing to the context.
6
+ * Works for both pure HTML and markdown inputs — like <dfn>.
7
+ * Distribution of normative properties to list items / table rows
8
+ * is handled by the statement-distribute postprocessing plugin.
6
9
  */
7
10
  import type { HtmlParserModule } from '#src/parse/registry';
8
11
  export declare const SpecStatementHtmlParser: HtmlParserModule;
@@ -1 +1 @@
1
- {"version":3,"file":"SpecStatementHtmlParser.d.ts","sourceRoot":"","sources":["../../../src/parse/html/SpecStatementHtmlParser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAyD,MAAM,qBAAqB,CAAC;AAMnH,eAAO,MAAM,uBAAuB,EAAE,gBAYrC,CAAC"}
1
+ {"version":3,"file":"SpecStatementHtmlParser.d.ts","sourceRoot":"","sources":["../../../src/parse/html/SpecStatementHtmlParser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAyD,MAAM,qBAAqB,CAAC;AAKnH,eAAO,MAAM,uBAAuB,EAAE,gBAYrC,CAAC"}
@@ -2,7 +2,10 @@
2
2
  * Spec Statement HTML Parser
3
3
  *
4
4
  * Handles <spec-statement> custom elements.
5
- * Auto-detects RFC 2119 keywords and generates stable IDs.
5
+ * Reads attributes and delegates child parsing to the context.
6
+ * Works for both pure HTML and markdown inputs — like <dfn>.
7
+ * Distribution of normative properties to list items / table rows
8
+ * is handled by the statement-distribute postprocessing plugin.
6
9
  */
7
10
  import { slugify, toPlainText } from '#src/parse/normalize';
8
11
  import { inferLevel } from '#src/parse/utils/normative';
@@ -19,34 +22,50 @@ export const SpecStatementHtmlParser = {
19
22
  };
20
23
  function parseNode(element, ctx) {
21
24
  const sourcePos = ctx.createSourcePos(element);
22
- const children = ctx.transformInlineChildren(element.children);
23
- // Extract plain text for contentText from children (strips markup, preserves casing)
24
- const rawText = toPlainText(children).trim().replace(/\s+/g, ' ');
25
- const contentText = rawText;
26
- // Determine level (use lowercase for keyword matching)
25
+ const allChildren = ctx.transformBlockChildren(element.children);
26
+ const rawText = toPlainText(allChildren).trim().replace(/\s+/g, ' ');
27
+ const level = getLevel(element, rawText, ctx);
28
+ const { id, tempId } = getId(element, rawText, ctx);
29
+ const dataCopConcept = ctx.getAttr(element, 'data-cop-concept');
30
+ const dataIdPattern = ctx.getAttr(element, 'data-id-pattern');
31
+ const isInline = allChildren.length === 1 && allChildren[0].type === 'paragraph';
32
+ if (isInline) {
33
+ return {
34
+ type: 'specStatement',
35
+ id,
36
+ tempId,
37
+ level: level,
38
+ dataCopConcept,
39
+ dataIdPattern,
40
+ contentText: rawText,
41
+ children: allChildren[0].children,
42
+ sourcePos,
43
+ };
44
+ }
45
+ else {
46
+ return {
47
+ type: 'specStatementGroup',
48
+ id,
49
+ level: level,
50
+ dataCopConcept,
51
+ dataIdPattern,
52
+ children: allChildren,
53
+ sourcePos,
54
+ };
55
+ }
56
+ }
57
+ function getLevel(element, text, ctx) {
27
58
  let level = (ctx.getAttr(element, 'level') || '').toUpperCase().replace(/\s+/g, ' ');
28
59
  if (!level) {
29
- level = inferLevel(rawText);
60
+ level = inferLevel(text);
30
61
  }
31
- // Determine ID
62
+ return level;
63
+ }
64
+ function getId(element, text, ctx) {
32
65
  const explicitId = ctx.getAttr(element, 'id');
33
- const about = ctx.getAttr(element, 'about');
34
- const dataCopConcept = ctx.getAttr(element, 'data-cop-concept');
35
- const id = explicitId;
36
- let tempId = undefined;
37
- if (!id) {
38
- tempId = about ? (about.startsWith('#') ? about.slice(1) : slugify(about)) : slugify(contentText);
39
- }
40
- const node = {
41
- type: 'specStatement',
42
- id,
43
- tempId,
44
- level: level,
45
- dataCopConcept,
46
- contentText,
47
- children,
48
- sourcePos,
49
- };
50
- return node;
66
+ if (explicitId)
67
+ return { id: explicitId };
68
+ const tempId = slugify(text);
69
+ return { tempId };
51
70
  }
52
71
  //# sourceMappingURL=SpecStatementHtmlParser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SpecStatementHtmlParser.js","sourceRoot":"","sources":["../../../src/parse/html/SpecStatementHtmlParser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAGxD,MAAM,CAAC,MAAM,uBAAuB,GAAqB;IACrD,IAAI,EAAE,yBAAyB;IAC/B,OAAO,EAAE,CAAC,gBAAgB,CAAC;IAC3B,KAAK,EAAE,CAAC;IAER,WAAW,CAAC,IAAa,EAAE,GAAiB;QACxC,OAAO,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,YAAY,CAAC,IAAa,EAAE,GAAiB;QACzC,OAAO,SAAS,CAAC,IAAI,EAAE,GAAG,CAAsB,CAAC;IACrD,CAAC;CACJ,CAAC;AAEF,SAAS,SAAS,CAAC,OAAgB,EAAE,GAAiB;IAClD,MAAM,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,GAAG,CAAC,uBAAuB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE/D,qFAAqF;IACrF,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClE,MAAM,WAAW,GAAG,OAAO,CAAC;IAE5B,uDAAuD;IACvD,IAAI,KAAK,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrF,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,eAAe;IACf,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5C,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;IAEhE,MAAM,EAAE,GAAuB,UAAU,CAAC;IAC1C,IAAI,MAAM,GAAuB,SAAS,CAAC;IAE3C,IAAI,CAAC,EAAE,EAAE,CAAC;QACN,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACtG,CAAC;IAED,MAAM,IAAI,GAAuB;QAC7B,IAAI,EAAE,eAAe;QACrB,EAAE;QACF,MAAM;QACN,KAAK,EAAE,KAAoC;QAC3C,cAAc;QACd,WAAW;QACX,QAAQ;QACR,SAAS;KACZ,CAAC;IAEF,OAAO,IAAI,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"SpecStatementHtmlParser.js","sourceRoot":"","sources":["../../../src/parse/html/SpecStatementHtmlParser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAExD,MAAM,CAAC,MAAM,uBAAuB,GAAqB;IACrD,IAAI,EAAE,yBAAyB;IAC/B,OAAO,EAAE,CAAC,gBAAgB,CAAC;IAC3B,KAAK,EAAE,CAAC;IAER,WAAW,CAAC,IAAa,EAAE,GAAiB;QACxC,OAAO,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,YAAY,CAAC,IAAa,EAAE,GAAiB;QACzC,OAAO,SAAS,CAAC,IAAI,EAAE,GAAG,CAAsB,CAAC;IACrD,CAAC;CACJ,CAAC;AAEF,SAAS,SAAS,CAAC,OAAgB,EAAE,GAAiB;IAClD,MAAM,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAE/C,MAAM,WAAW,GAAG,GAAG,CAAC,sBAAsB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEjE,MAAM,OAAO,GAAG,WAAW,CAAC,WAA4C,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtG,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAC9C,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACpD,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;IAChE,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IAE9D,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC;IAEjF,IAAI,QAAQ,EAAE,CAAC;QACX,OAAO;YACH,IAAI,EAAE,eAAe;YACrB,EAAE;YACF,MAAM;YACN,KAAK,EAAE,KAAoC;YAC3C,cAAc;YACd,aAAa;YACb,WAAW,EAAE,OAAO;YACpB,QAAQ,EAAG,WAAW,CAAC,CAAC,CAAuC,CAAC,QAAQ;YACxE,SAAS;SACZ,CAAC;IACN,CAAC;SAAM,CAAC;QACJ,OAAO;YACH,IAAI,EAAE,oBAAoB;YAC1B,EAAE;YACF,KAAK,EAAE,KAAoC;YAC3C,cAAc;YACd,aAAa;YACb,QAAQ,EAAE,WAAsB;YAChC,SAAS;SACZ,CAAC;IACN,CAAC;AACL,CAAC;AAED,SAAS,QAAQ,CAAC,OAAgB,EAAE,IAAY,EAAE,GAAiB;IAC/D,IAAI,KAAK,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrF,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,KAAK,CAAC,OAAgB,EAAE,IAAY,EAAE,GAAiB;IAC5D,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAE9C,IAAI,UAAU;QAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;IAE1C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;AACtB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Vocab HTML Parser
3
+ *
4
+ * Handles <spec-vocab> custom elements.
5
+ * Reads pre-loaded sibling metadata from `unit.sideFiles` (populated at preprocess time)
6
+ * to generate normative prose (Tables, Statements) from vocabulary files.
7
+ *
8
+ * This parser is fully isomorphic — it does NOT access the filesystem directly.
9
+ */
10
+ import type { HtmlParserModule } from '#src/parse/registry';
11
+ export declare const VocabHtmlParser: HtmlParserModule;
12
+ //# sourceMappingURL=VocabHtmlParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VocabHtmlParser.d.ts","sourceRoot":"","sources":["../../../src/parse/html/VocabHtmlParser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAoC,MAAM,qBAAqB,CAAC;AA+D9F,eAAO,MAAM,eAAe,EAAE,gBAgC7B,CAAC"}