@herb-tools/core 0.8.10 → 0.9.1

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 (39) hide show
  1. package/dist/herb-core.browser.js +22728 -320
  2. package/dist/herb-core.browser.js.map +1 -1
  3. package/dist/herb-core.cjs +22815 -321
  4. package/dist/herb-core.cjs.map +1 -1
  5. package/dist/herb-core.esm.js +22728 -320
  6. package/dist/herb-core.esm.js.map +1 -1
  7. package/dist/herb-core.umd.js +22815 -321
  8. package/dist/herb-core.umd.js.map +1 -1
  9. package/dist/types/ast-utils.d.ts +185 -4
  10. package/dist/types/backend.d.ts +6 -6
  11. package/dist/types/diagnostic.d.ts +6 -0
  12. package/dist/types/errors.d.ts +390 -25
  13. package/dist/types/extract-ruby-options.d.ts +6 -0
  14. package/dist/types/herb-backend.d.ts +15 -7
  15. package/dist/types/index.d.ts +2 -0
  16. package/dist/types/node-type-guards.d.ts +113 -32
  17. package/dist/types/nodes.d.ts +465 -49
  18. package/dist/types/parse-result.d.ts +7 -1
  19. package/dist/types/parser-options.d.ts +33 -2
  20. package/dist/types/prism/index.d.ts +28 -0
  21. package/dist/types/prism/inspect.d.ts +3 -0
  22. package/dist/types/util.d.ts +0 -1
  23. package/dist/types/visitor.d.ts +19 -1
  24. package/package.json +4 -1
  25. package/src/ast-utils.ts +564 -8
  26. package/src/backend.ts +7 -7
  27. package/src/diagnostic.ts +7 -0
  28. package/src/errors.ts +1221 -76
  29. package/src/extract-ruby-options.ts +11 -0
  30. package/src/herb-backend.ts +30 -15
  31. package/src/index.ts +2 -0
  32. package/src/node-type-guards.ts +281 -33
  33. package/src/nodes.ts +1309 -100
  34. package/src/parse-result.ts +11 -0
  35. package/src/parser-options.ts +62 -2
  36. package/src/prism/index.ts +44 -0
  37. package/src/prism/inspect.ts +118 -0
  38. package/src/util.ts +0 -12
  39. package/src/visitor.ts +66 -1
@@ -1,7 +1,7 @@
1
1
  import type { Node, NodeType, ERBNode } from "./nodes.js";
2
2
  import { Token } from "./token.js";
3
3
  import { ParseResult } from "./parse-result.js";
4
- import { DocumentNode, LiteralNode, HTMLOpenTagNode, HTMLCloseTagNode, HTMLElementNode, HTMLAttributeValueNode, HTMLAttributeNameNode, HTMLAttributeNode, HTMLTextNode, HTMLCommentNode, HTMLDoctypeNode, XMLDeclarationNode, CDATANode, WhitespaceNode, ERBContentNode, ERBEndNode, ERBElseNode, ERBIfNode, ERBBlockNode, ERBWhenNode, ERBCaseNode, ERBCaseMatchNode, ERBWhileNode, ERBUntilNode, ERBForNode, ERBRescueNode, ERBEnsureNode, ERBBeginNode, ERBUnlessNode, ERBYieldNode, ERBInNode } from "./nodes.js";
4
+ import { DocumentNode, LiteralNode, HTMLOpenTagNode, HTMLConditionalOpenTagNode, HTMLCloseTagNode, HTMLOmittedCloseTagNode, HTMLVirtualCloseTagNode, HTMLElementNode, HTMLConditionalElementNode, HTMLAttributeValueNode, HTMLAttributeNameNode, HTMLAttributeNode, RubyLiteralNode, RubyHTMLAttributesSplatNode, ERBOpenTagNode, HTMLTextNode, HTMLCommentNode, HTMLDoctypeNode, XMLDeclarationNode, CDATANode, WhitespaceNode, ERBContentNode, ERBEndNode, ERBElseNode, ERBIfNode, ERBBlockNode, ERBWhenNode, ERBCaseNode, ERBCaseMatchNode, ERBWhileNode, ERBUntilNode, ERBForNode, ERBRescueNode, ERBEnsureNode, ERBBeginNode, ERBUnlessNode, RubyRenderLocalNode, ERBRenderNode, ERBYieldNode, ERBInNode } from "./nodes.js";
5
5
  /**
6
6
  * Type guard functions for AST nodes.
7
7
  * These functions provide type checking by combining both instanceof
@@ -11,127 +11,163 @@ import { DocumentNode, LiteralNode, HTMLOpenTagNode, HTMLCloseTagNode, HTMLEleme
11
11
  /**
12
12
  * Checks if a node is a DocumentNode
13
13
  */
14
- export declare function isDocumentNode(node: Node): node is DocumentNode;
14
+ export declare function isDocumentNode(node: Node | null | undefined): node is DocumentNode;
15
15
  /**
16
16
  * Checks if a node is a LiteralNode
17
17
  */
18
- export declare function isLiteralNode(node: Node): node is LiteralNode;
18
+ export declare function isLiteralNode(node: Node | null | undefined): node is LiteralNode;
19
19
  /**
20
20
  * Checks if a node is a HTMLOpenTagNode
21
21
  */
22
- export declare function isHTMLOpenTagNode(node: Node): node is HTMLOpenTagNode;
22
+ export declare function isHTMLOpenTagNode(node: Node | null | undefined): node is HTMLOpenTagNode;
23
+ /**
24
+ * Checks if a node is a HTMLConditionalOpenTagNode
25
+ */
26
+ export declare function isHTMLConditionalOpenTagNode(node: Node | null | undefined): node is HTMLConditionalOpenTagNode;
23
27
  /**
24
28
  * Checks if a node is a HTMLCloseTagNode
25
29
  */
26
- export declare function isHTMLCloseTagNode(node: Node): node is HTMLCloseTagNode;
30
+ export declare function isHTMLCloseTagNode(node: Node | null | undefined): node is HTMLCloseTagNode;
31
+ /**
32
+ * Checks if a node is a HTMLOmittedCloseTagNode
33
+ */
34
+ export declare function isHTMLOmittedCloseTagNode(node: Node | null | undefined): node is HTMLOmittedCloseTagNode;
35
+ /**
36
+ * Checks if a node is a HTMLVirtualCloseTagNode
37
+ */
38
+ export declare function isHTMLVirtualCloseTagNode(node: Node | null | undefined): node is HTMLVirtualCloseTagNode;
27
39
  /**
28
40
  * Checks if a node is a HTMLElementNode
29
41
  */
30
- export declare function isHTMLElementNode(node: Node): node is HTMLElementNode;
42
+ export declare function isHTMLElementNode(node: Node | null | undefined): node is HTMLElementNode;
43
+ /**
44
+ * Checks if a node is a HTMLConditionalElementNode
45
+ */
46
+ export declare function isHTMLConditionalElementNode(node: Node | null | undefined): node is HTMLConditionalElementNode;
31
47
  /**
32
48
  * Checks if a node is a HTMLAttributeValueNode
33
49
  */
34
- export declare function isHTMLAttributeValueNode(node: Node): node is HTMLAttributeValueNode;
50
+ export declare function isHTMLAttributeValueNode(node: Node | null | undefined): node is HTMLAttributeValueNode;
35
51
  /**
36
52
  * Checks if a node is a HTMLAttributeNameNode
37
53
  */
38
- export declare function isHTMLAttributeNameNode(node: Node): node is HTMLAttributeNameNode;
54
+ export declare function isHTMLAttributeNameNode(node: Node | null | undefined): node is HTMLAttributeNameNode;
39
55
  /**
40
56
  * Checks if a node is a HTMLAttributeNode
41
57
  */
42
- export declare function isHTMLAttributeNode(node: Node): node is HTMLAttributeNode;
58
+ export declare function isHTMLAttributeNode(node: Node | null | undefined): node is HTMLAttributeNode;
59
+ /**
60
+ * Checks if a node is a RubyLiteralNode
61
+ */
62
+ export declare function isRubyLiteralNode(node: Node | null | undefined): node is RubyLiteralNode;
63
+ /**
64
+ * Checks if a node is a RubyHTMLAttributesSplatNode
65
+ */
66
+ export declare function isRubyHTMLAttributesSplatNode(node: Node | null | undefined): node is RubyHTMLAttributesSplatNode;
67
+ /**
68
+ * Checks if a node is a ERBOpenTagNode
69
+ */
70
+ export declare function isERBOpenTagNode(node: Node | null | undefined): node is ERBOpenTagNode;
43
71
  /**
44
72
  * Checks if a node is a HTMLTextNode
45
73
  */
46
- export declare function isHTMLTextNode(node: Node): node is HTMLTextNode;
74
+ export declare function isHTMLTextNode(node: Node | null | undefined): node is HTMLTextNode;
47
75
  /**
48
76
  * Checks if a node is a HTMLCommentNode
49
77
  */
50
- export declare function isHTMLCommentNode(node: Node): node is HTMLCommentNode;
78
+ export declare function isHTMLCommentNode(node: Node | null | undefined): node is HTMLCommentNode;
51
79
  /**
52
80
  * Checks if a node is a HTMLDoctypeNode
53
81
  */
54
- export declare function isHTMLDoctypeNode(node: Node): node is HTMLDoctypeNode;
82
+ export declare function isHTMLDoctypeNode(node: Node | null | undefined): node is HTMLDoctypeNode;
55
83
  /**
56
84
  * Checks if a node is a XMLDeclarationNode
57
85
  */
58
- export declare function isXMLDeclarationNode(node: Node): node is XMLDeclarationNode;
86
+ export declare function isXMLDeclarationNode(node: Node | null | undefined): node is XMLDeclarationNode;
59
87
  /**
60
88
  * Checks if a node is a CDATANode
61
89
  */
62
- export declare function isCDATANode(node: Node): node is CDATANode;
90
+ export declare function isCDATANode(node: Node | null | undefined): node is CDATANode;
63
91
  /**
64
92
  * Checks if a node is a WhitespaceNode
65
93
  */
66
- export declare function isWhitespaceNode(node: Node): node is WhitespaceNode;
94
+ export declare function isWhitespaceNode(node: Node | null | undefined): node is WhitespaceNode;
67
95
  /**
68
96
  * Checks if a node is a ERBContentNode
69
97
  */
70
- export declare function isERBContentNode(node: Node): node is ERBContentNode;
98
+ export declare function isERBContentNode(node: Node | null | undefined): node is ERBContentNode;
71
99
  /**
72
100
  * Checks if a node is a ERBEndNode
73
101
  */
74
- export declare function isERBEndNode(node: Node): node is ERBEndNode;
102
+ export declare function isERBEndNode(node: Node | null | undefined): node is ERBEndNode;
75
103
  /**
76
104
  * Checks if a node is a ERBElseNode
77
105
  */
78
- export declare function isERBElseNode(node: Node): node is ERBElseNode;
106
+ export declare function isERBElseNode(node: Node | null | undefined): node is ERBElseNode;
79
107
  /**
80
108
  * Checks if a node is a ERBIfNode
81
109
  */
82
- export declare function isERBIfNode(node: Node): node is ERBIfNode;
110
+ export declare function isERBIfNode(node: Node | null | undefined): node is ERBIfNode;
83
111
  /**
84
112
  * Checks if a node is a ERBBlockNode
85
113
  */
86
- export declare function isERBBlockNode(node: Node): node is ERBBlockNode;
114
+ export declare function isERBBlockNode(node: Node | null | undefined): node is ERBBlockNode;
87
115
  /**
88
116
  * Checks if a node is a ERBWhenNode
89
117
  */
90
- export declare function isERBWhenNode(node: Node): node is ERBWhenNode;
118
+ export declare function isERBWhenNode(node: Node | null | undefined): node is ERBWhenNode;
91
119
  /**
92
120
  * Checks if a node is a ERBCaseNode
93
121
  */
94
- export declare function isERBCaseNode(node: Node): node is ERBCaseNode;
122
+ export declare function isERBCaseNode(node: Node | null | undefined): node is ERBCaseNode;
95
123
  /**
96
124
  * Checks if a node is a ERBCaseMatchNode
97
125
  */
98
- export declare function isERBCaseMatchNode(node: Node): node is ERBCaseMatchNode;
126
+ export declare function isERBCaseMatchNode(node: Node | null | undefined): node is ERBCaseMatchNode;
99
127
  /**
100
128
  * Checks if a node is a ERBWhileNode
101
129
  */
102
- export declare function isERBWhileNode(node: Node): node is ERBWhileNode;
130
+ export declare function isERBWhileNode(node: Node | null | undefined): node is ERBWhileNode;
103
131
  /**
104
132
  * Checks if a node is a ERBUntilNode
105
133
  */
106
- export declare function isERBUntilNode(node: Node): node is ERBUntilNode;
134
+ export declare function isERBUntilNode(node: Node | null | undefined): node is ERBUntilNode;
107
135
  /**
108
136
  * Checks if a node is a ERBForNode
109
137
  */
110
- export declare function isERBForNode(node: Node): node is ERBForNode;
138
+ export declare function isERBForNode(node: Node | null | undefined): node is ERBForNode;
111
139
  /**
112
140
  * Checks if a node is a ERBRescueNode
113
141
  */
114
- export declare function isERBRescueNode(node: Node): node is ERBRescueNode;
142
+ export declare function isERBRescueNode(node: Node | null | undefined): node is ERBRescueNode;
115
143
  /**
116
144
  * Checks if a node is a ERBEnsureNode
117
145
  */
118
- export declare function isERBEnsureNode(node: Node): node is ERBEnsureNode;
146
+ export declare function isERBEnsureNode(node: Node | null | undefined): node is ERBEnsureNode;
119
147
  /**
120
148
  * Checks if a node is a ERBBeginNode
121
149
  */
122
- export declare function isERBBeginNode(node: Node): node is ERBBeginNode;
150
+ export declare function isERBBeginNode(node: Node | null | undefined): node is ERBBeginNode;
123
151
  /**
124
152
  * Checks if a node is a ERBUnlessNode
125
153
  */
126
- export declare function isERBUnlessNode(node: Node): node is ERBUnlessNode;
154
+ export declare function isERBUnlessNode(node: Node | null | undefined): node is ERBUnlessNode;
155
+ /**
156
+ * Checks if a node is a RubyRenderLocalNode
157
+ */
158
+ export declare function isRubyRenderLocalNode(node: Node | null | undefined): node is RubyRenderLocalNode;
159
+ /**
160
+ * Checks if a node is a ERBRenderNode
161
+ */
162
+ export declare function isERBRenderNode(node: Node | null | undefined): node is ERBRenderNode;
127
163
  /**
128
164
  * Checks if a node is a ERBYieldNode
129
165
  */
130
- export declare function isERBYieldNode(node: Node): node is ERBYieldNode;
166
+ export declare function isERBYieldNode(node: Node | null | undefined): node is ERBYieldNode;
131
167
  /**
132
168
  * Checks if a node is a ERBInNode
133
169
  */
134
- export declare function isERBInNode(node: Node): node is ERBInNode;
170
+ export declare function isERBInNode(node: Node | null | undefined): node is ERBInNode;
135
171
  /**
136
172
  * Convenience type guards for common node categories
137
173
  */
@@ -169,11 +205,18 @@ type NodeTypeToClass = {
169
205
  "AST_DOCUMENT_NODE": DocumentNode;
170
206
  "AST_LITERAL_NODE": LiteralNode;
171
207
  "AST_HTML_OPEN_TAG_NODE": HTMLOpenTagNode;
208
+ "AST_HTML_CONDITIONAL_OPEN_TAG_NODE": HTMLConditionalOpenTagNode;
172
209
  "AST_HTML_CLOSE_TAG_NODE": HTMLCloseTagNode;
210
+ "AST_HTML_OMITTED_CLOSE_TAG_NODE": HTMLOmittedCloseTagNode;
211
+ "AST_HTML_VIRTUAL_CLOSE_TAG_NODE": HTMLVirtualCloseTagNode;
173
212
  "AST_HTML_ELEMENT_NODE": HTMLElementNode;
213
+ "AST_HTML_CONDITIONAL_ELEMENT_NODE": HTMLConditionalElementNode;
174
214
  "AST_HTML_ATTRIBUTE_VALUE_NODE": HTMLAttributeValueNode;
175
215
  "AST_HTML_ATTRIBUTE_NAME_NODE": HTMLAttributeNameNode;
176
216
  "AST_HTML_ATTRIBUTE_NODE": HTMLAttributeNode;
217
+ "AST_RUBY_LITERAL_NODE": RubyLiteralNode;
218
+ "AST_RUBY_HTML_ATTRIBUTES_SPLAT_NODE": RubyHTMLAttributesSplatNode;
219
+ "AST_ERB_OPEN_TAG_NODE": ERBOpenTagNode;
177
220
  "AST_HTML_TEXT_NODE": HTMLTextNode;
178
221
  "AST_HTML_COMMENT_NODE": HTMLCommentNode;
179
222
  "AST_HTML_DOCTYPE_NODE": HTMLDoctypeNode;
@@ -195,6 +238,8 @@ type NodeTypeToClass = {
195
238
  "AST_ERB_ENSURE_NODE": ERBEnsureNode;
196
239
  "AST_ERB_BEGIN_NODE": ERBBeginNode;
197
240
  "AST_ERB_UNLESS_NODE": ERBUnlessNode;
241
+ "AST_RUBY_RENDER_LOCAL_NODE": RubyRenderLocalNode;
242
+ "AST_ERB_RENDER_NODE": ERBRenderNode;
198
243
  "AST_ERB_YIELD_NODE": ERBYieldNode;
199
244
  "AST_ERB_IN_NODE": ERBInNode;
200
245
  };
@@ -319,14 +364,30 @@ export declare function filterLiteralNodes(nodes: Node[]): LiteralNode[];
319
364
  * Filters an array of nodes to only include HTMLOpenTagNode nodes
320
365
  */
321
366
  export declare function filterHTMLOpenTagNodes(nodes: Node[]): HTMLOpenTagNode[];
367
+ /**
368
+ * Filters an array of nodes to only include HTMLConditionalOpenTagNode nodes
369
+ */
370
+ export declare function filterHTMLConditionalOpenTagNodes(nodes: Node[]): HTMLConditionalOpenTagNode[];
322
371
  /**
323
372
  * Filters an array of nodes to only include HTMLCloseTagNode nodes
324
373
  */
325
374
  export declare function filterHTMLCloseTagNodes(nodes: Node[]): HTMLCloseTagNode[];
375
+ /**
376
+ * Filters an array of nodes to only include HTMLOmittedCloseTagNode nodes
377
+ */
378
+ export declare function filterHTMLOmittedCloseTagNodes(nodes: Node[]): HTMLOmittedCloseTagNode[];
379
+ /**
380
+ * Filters an array of nodes to only include HTMLVirtualCloseTagNode nodes
381
+ */
382
+ export declare function filterHTMLVirtualCloseTagNodes(nodes: Node[]): HTMLVirtualCloseTagNode[];
326
383
  /**
327
384
  * Filters an array of nodes to only include HTMLElementNode nodes
328
385
  */
329
386
  export declare function filterHTMLElementNodes(nodes: Node[]): HTMLElementNode[];
387
+ /**
388
+ * Filters an array of nodes to only include HTMLConditionalElementNode nodes
389
+ */
390
+ export declare function filterHTMLConditionalElementNodes(nodes: Node[]): HTMLConditionalElementNode[];
330
391
  /**
331
392
  * Filters an array of nodes to only include HTMLAttributeValueNode nodes
332
393
  */
@@ -339,6 +400,18 @@ export declare function filterHTMLAttributeNameNodes(nodes: Node[]): HTMLAttribu
339
400
  * Filters an array of nodes to only include HTMLAttributeNode nodes
340
401
  */
341
402
  export declare function filterHTMLAttributeNodes(nodes: Node[]): HTMLAttributeNode[];
403
+ /**
404
+ * Filters an array of nodes to only include RubyLiteralNode nodes
405
+ */
406
+ export declare function filterRubyLiteralNodes(nodes: Node[]): RubyLiteralNode[];
407
+ /**
408
+ * Filters an array of nodes to only include RubyHTMLAttributesSplatNode nodes
409
+ */
410
+ export declare function filterRubyHTMLAttributesSplatNodes(nodes: Node[]): RubyHTMLAttributesSplatNode[];
411
+ /**
412
+ * Filters an array of nodes to only include ERBOpenTagNode nodes
413
+ */
414
+ export declare function filterERBOpenTagNodes(nodes: Node[]): ERBOpenTagNode[];
342
415
  /**
343
416
  * Filters an array of nodes to only include HTMLTextNode nodes
344
417
  */
@@ -423,6 +496,14 @@ export declare function filterERBBeginNodes(nodes: Node[]): ERBBeginNode[];
423
496
  * Filters an array of nodes to only include ERBUnlessNode nodes
424
497
  */
425
498
  export declare function filterERBUnlessNodes(nodes: Node[]): ERBUnlessNode[];
499
+ /**
500
+ * Filters an array of nodes to only include RubyRenderLocalNode nodes
501
+ */
502
+ export declare function filterRubyRenderLocalNodes(nodes: Node[]): RubyRenderLocalNode[];
503
+ /**
504
+ * Filters an array of nodes to only include ERBRenderNode nodes
505
+ */
506
+ export declare function filterERBRenderNodes(nodes: Node[]): ERBRenderNode[];
426
507
  /**
427
508
  * Filters an array of nodes to only include ERBYieldNode nodes
428
509
  */