@herb-tools/core 0.3.1 → 0.4.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.
package/src/nodes.ts CHANGED
@@ -24,38 +24,6 @@ export interface BaseNodeProps {
24
24
  errors: HerbError[]
25
25
  }
26
26
 
27
- export type NodeType =
28
- | "AST_DOCUMENT_NODE"
29
- | "AST_LITERAL_NODE"
30
- | "AST_HTML_OPEN_TAG_NODE"
31
- | "AST_HTML_CLOSE_TAG_NODE"
32
- | "AST_HTML_SELF_CLOSE_TAG_NODE"
33
- | "AST_HTML_ELEMENT_NODE"
34
- | "AST_HTML_ATTRIBUTE_VALUE_NODE"
35
- | "AST_HTML_ATTRIBUTE_NAME_NODE"
36
- | "AST_HTML_ATTRIBUTE_NODE"
37
- | "AST_HTML_TEXT_NODE"
38
- | "AST_HTML_COMMENT_NODE"
39
- | "AST_HTML_DOCTYPE_NODE"
40
- | "AST_WHITESPACE_NODE"
41
- | "AST_ERB_CONTENT_NODE"
42
- | "AST_ERB_END_NODE"
43
- | "AST_ERB_ELSE_NODE"
44
- | "AST_ERB_IF_NODE"
45
- | "AST_ERB_BLOCK_NODE"
46
- | "AST_ERB_WHEN_NODE"
47
- | "AST_ERB_CASE_NODE"
48
- | "AST_ERB_CASE_MATCH_NODE"
49
- | "AST_ERB_WHILE_NODE"
50
- | "AST_ERB_UNTIL_NODE"
51
- | "AST_ERB_FOR_NODE"
52
- | "AST_ERB_RESCUE_NODE"
53
- | "AST_ERB_ENSURE_NODE"
54
- | "AST_ERB_BEGIN_NODE"
55
- | "AST_ERB_UNLESS_NODE"
56
- | "AST_ERB_YIELD_NODE"
57
- | "AST_ERB_IN_NODE"
58
-
59
27
  export abstract class Node implements BaseNodeProps {
60
28
  readonly type: NodeType
61
29
  readonly location: Location
@@ -2910,3 +2878,81 @@ export function fromSerializedNode(node: SerializedNode): Node {
2910
2878
  throw new Error(`Unknown node type: ${node.type}`);
2911
2879
  }
2912
2880
  }
2881
+
2882
+ export type NodeType =
2883
+ | "AST_DOCUMENT_NODE"
2884
+ | "AST_LITERAL_NODE"
2885
+ | "AST_HTML_OPEN_TAG_NODE"
2886
+ | "AST_HTML_CLOSE_TAG_NODE"
2887
+ | "AST_HTML_SELF_CLOSE_TAG_NODE"
2888
+ | "AST_HTML_ELEMENT_NODE"
2889
+ | "AST_HTML_ATTRIBUTE_VALUE_NODE"
2890
+ | "AST_HTML_ATTRIBUTE_NAME_NODE"
2891
+ | "AST_HTML_ATTRIBUTE_NODE"
2892
+ | "AST_HTML_TEXT_NODE"
2893
+ | "AST_HTML_COMMENT_NODE"
2894
+ | "AST_HTML_DOCTYPE_NODE"
2895
+ | "AST_WHITESPACE_NODE"
2896
+ | "AST_ERB_CONTENT_NODE"
2897
+ | "AST_ERB_END_NODE"
2898
+ | "AST_ERB_ELSE_NODE"
2899
+ | "AST_ERB_IF_NODE"
2900
+ | "AST_ERB_BLOCK_NODE"
2901
+ | "AST_ERB_WHEN_NODE"
2902
+ | "AST_ERB_CASE_NODE"
2903
+ | "AST_ERB_CASE_MATCH_NODE"
2904
+ | "AST_ERB_WHILE_NODE"
2905
+ | "AST_ERB_UNTIL_NODE"
2906
+ | "AST_ERB_FOR_NODE"
2907
+ | "AST_ERB_RESCUE_NODE"
2908
+ | "AST_ERB_ENSURE_NODE"
2909
+ | "AST_ERB_BEGIN_NODE"
2910
+ | "AST_ERB_UNLESS_NODE"
2911
+ | "AST_ERB_YIELD_NODE"
2912
+ | "AST_ERB_IN_NODE"
2913
+
2914
+ export type ERBNodeType = Extract<NodeType, `AST_ERB_${string}`>;
2915
+
2916
+ export type ERBNode =
2917
+ | ERBContentNode
2918
+ | ERBEndNode
2919
+ | ERBElseNode
2920
+ | ERBIfNode
2921
+ | ERBBlockNode
2922
+ | ERBWhenNode
2923
+ | ERBCaseNode
2924
+ | ERBCaseMatchNode
2925
+ | ERBWhileNode
2926
+ | ERBUntilNode
2927
+ | ERBForNode
2928
+ | ERBRescueNode
2929
+ | ERBEnsureNode
2930
+ | ERBBeginNode
2931
+ | ERBUnlessNode
2932
+ | ERBYieldNode
2933
+ | ERBInNode
2934
+
2935
+ export const ERBNodeClasses = [
2936
+ ERBContentNode,
2937
+ ERBEndNode,
2938
+ ERBElseNode,
2939
+ ERBIfNode,
2940
+ ERBBlockNode,
2941
+ ERBWhenNode,
2942
+ ERBCaseNode,
2943
+ ERBCaseMatchNode,
2944
+ ERBWhileNode,
2945
+ ERBUntilNode,
2946
+ ERBForNode,
2947
+ ERBRescueNode,
2948
+ ERBEnsureNode,
2949
+ ERBBeginNode,
2950
+ ERBUnlessNode,
2951
+ ERBYieldNode,
2952
+ ERBInNode,
2953
+ ]
2954
+
2955
+ export function isERBNode(node: Node): node is ERBNode {
2956
+
2957
+ return node.constructor.name.startsWith("ERB")
2958
+ }
@@ -61,8 +61,8 @@ export class ParseResult extends Result {
61
61
  * @returns `true` if there are errors, otherwise `false`.
62
62
  */
63
63
  get failed(): boolean {
64
- // TODO: this should probably be recursive as noted in the Ruby version
65
- return this.errors.length > 0 || this.value.errors.length > 0
64
+ // Consider errors on this result and recursively in the document tree
65
+ return this.recursiveErrors().length > 0
66
66
  }
67
67
 
68
68
  /**
@@ -70,7 +70,7 @@ export class ParseResult extends Result {
70
70
  * @returns `true` if there are no errors, otherwise `false`.
71
71
  */
72
72
  get successful(): boolean {
73
- return this.errors.length === 0
73
+ return !this.failed
74
74
  }
75
75
 
76
76
  /**
package/src/token-list.ts CHANGED
@@ -19,6 +19,10 @@ export class TokenList implements Iterable<Token> {
19
19
  return this.list.length
20
20
  }
21
21
 
22
+ get tokens(): Token[] {
23
+ return this.list
24
+ }
25
+
22
26
  [Symbol.iterator](): Iterator<Token> {
23
27
  return this.list[Symbol.iterator]()
24
28
  }