@herb-tools/node 0.8.9 → 0.9.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 (174) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/binding.gyp +26 -8
  3. package/dist/herb-node.cjs +41 -12
  4. package/dist/herb-node.cjs.map +1 -1
  5. package/dist/herb-node.esm.js +8 -1
  6. package/dist/herb-node.esm.js.map +1 -1
  7. package/dist/types/node-backend.d.ts +3 -1
  8. package/extension/error_helpers.cpp +419 -71
  9. package/extension/error_helpers.h +14 -3
  10. package/extension/extension_helpers.cpp +38 -35
  11. package/extension/extension_helpers.h +2 -2
  12. package/extension/herb.cpp +183 -64
  13. package/extension/libherb/analyze/action_view/attribute_extraction_helpers.c +290 -0
  14. package/extension/libherb/analyze/action_view/attribute_extraction_helpers.h +36 -0
  15. package/extension/libherb/analyze/action_view/content_tag.c +70 -0
  16. package/extension/libherb/analyze/action_view/link_to.c +143 -0
  17. package/extension/libherb/analyze/action_view/registry.c +60 -0
  18. package/extension/libherb/analyze/action_view/tag.c +64 -0
  19. package/extension/libherb/analyze/action_view/tag_helper_handler.h +41 -0
  20. package/extension/libherb/analyze/action_view/tag_helper_node_builders.c +305 -0
  21. package/extension/libherb/analyze/action_view/tag_helper_node_builders.h +70 -0
  22. package/extension/libherb/analyze/action_view/tag_helpers.c +748 -0
  23. package/extension/libherb/analyze/action_view/tag_helpers.h +38 -0
  24. package/extension/libherb/analyze/action_view/turbo_frame_tag.c +88 -0
  25. package/extension/libherb/analyze/analyze.c +882 -0
  26. package/extension/libherb/{include → analyze}/analyze.h +14 -4
  27. package/extension/libherb/{analyzed_ruby.c → analyze/analyzed_ruby.c} +13 -11
  28. package/extension/libherb/{analyzed_ruby.h → analyze/analyzed_ruby.h} +3 -3
  29. package/extension/libherb/analyze/builders.c +343 -0
  30. package/extension/libherb/analyze/builders.h +27 -0
  31. package/extension/libherb/analyze/conditional_elements.c +594 -0
  32. package/extension/libherb/analyze/conditional_elements.h +9 -0
  33. package/extension/libherb/analyze/conditional_open_tags.c +640 -0
  34. package/extension/libherb/analyze/conditional_open_tags.h +9 -0
  35. package/extension/libherb/analyze/control_type.c +250 -0
  36. package/extension/libherb/analyze/control_type.h +14 -0
  37. package/extension/libherb/{analyze_helpers.c → analyze/helpers.c} +79 -31
  38. package/extension/libherb/{analyze_helpers.h → analyze/helpers.h} +22 -17
  39. package/extension/libherb/analyze/invalid_structures.c +193 -0
  40. package/extension/libherb/analyze/invalid_structures.h +11 -0
  41. package/extension/libherb/{analyze_missing_end.c → analyze/missing_end.c} +33 -22
  42. package/extension/libherb/analyze/parse_errors.c +84 -0
  43. package/extension/libherb/analyze/prism_annotate.c +397 -0
  44. package/extension/libherb/analyze/prism_annotate.h +16 -0
  45. package/extension/libherb/{analyze_transform.c → analyze/transform.c} +17 -3
  46. package/extension/libherb/ast_node.c +17 -7
  47. package/extension/libherb/ast_node.h +11 -5
  48. package/extension/libherb/ast_nodes.c +663 -388
  49. package/extension/libherb/ast_nodes.h +118 -39
  50. package/extension/libherb/ast_pretty_print.c +191 -7
  51. package/extension/libherb/ast_pretty_print.h +6 -1
  52. package/extension/libherb/element_source.h +3 -8
  53. package/extension/libherb/errors.c +1100 -507
  54. package/extension/libherb/errors.h +155 -54
  55. package/extension/libherb/extract.c +148 -49
  56. package/extension/libherb/extract.h +21 -5
  57. package/extension/libherb/herb.c +52 -34
  58. package/extension/libherb/herb.h +18 -6
  59. package/extension/libherb/herb_prism_node.h +13 -0
  60. package/extension/libherb/html_util.c +241 -12
  61. package/extension/libherb/html_util.h +7 -2
  62. package/extension/libherb/include/analyze/action_view/attribute_extraction_helpers.h +36 -0
  63. package/extension/libherb/include/analyze/action_view/tag_helper_handler.h +41 -0
  64. package/extension/libherb/include/analyze/action_view/tag_helper_node_builders.h +70 -0
  65. package/extension/libherb/include/analyze/action_view/tag_helpers.h +38 -0
  66. package/extension/libherb/{analyze.h → include/analyze/analyze.h} +14 -4
  67. package/extension/libherb/include/{analyzed_ruby.h → analyze/analyzed_ruby.h} +3 -3
  68. package/extension/libherb/include/analyze/builders.h +27 -0
  69. package/extension/libherb/include/analyze/conditional_elements.h +9 -0
  70. package/extension/libherb/include/analyze/conditional_open_tags.h +9 -0
  71. package/extension/libherb/include/analyze/control_type.h +14 -0
  72. package/extension/libherb/include/{analyze_helpers.h → analyze/helpers.h} +22 -17
  73. package/extension/libherb/include/analyze/invalid_structures.h +11 -0
  74. package/extension/libherb/include/analyze/prism_annotate.h +16 -0
  75. package/extension/libherb/include/ast_node.h +11 -5
  76. package/extension/libherb/include/ast_nodes.h +118 -39
  77. package/extension/libherb/include/ast_pretty_print.h +6 -1
  78. package/extension/libherb/include/element_source.h +3 -8
  79. package/extension/libherb/include/errors.h +155 -54
  80. package/extension/libherb/include/extract.h +21 -5
  81. package/extension/libherb/include/herb.h +18 -6
  82. package/extension/libherb/include/herb_prism_node.h +13 -0
  83. package/extension/libherb/include/html_util.h +7 -2
  84. package/extension/libherb/include/io.h +3 -1
  85. package/extension/libherb/include/lex_helpers.h +29 -0
  86. package/extension/libherb/include/lexer.h +1 -1
  87. package/extension/libherb/include/lexer_peek_helpers.h +87 -13
  88. package/extension/libherb/include/lexer_struct.h +2 -0
  89. package/extension/libherb/include/location.h +2 -1
  90. package/extension/libherb/include/parser.h +27 -2
  91. package/extension/libherb/include/parser_helpers.h +19 -3
  92. package/extension/libherb/include/pretty_print.h +10 -5
  93. package/extension/libherb/include/prism_context.h +45 -0
  94. package/extension/libherb/include/prism_helpers.h +10 -7
  95. package/extension/libherb/include/prism_serialized.h +12 -0
  96. package/extension/libherb/include/token.h +16 -4
  97. package/extension/libherb/include/token_struct.h +10 -3
  98. package/extension/libherb/include/utf8.h +2 -1
  99. package/extension/libherb/include/util/hb_allocator.h +78 -0
  100. package/extension/libherb/include/util/hb_arena.h +6 -1
  101. package/extension/libherb/include/util/hb_arena_debug.h +12 -1
  102. package/extension/libherb/include/util/hb_array.h +7 -3
  103. package/extension/libherb/include/util/hb_buffer.h +6 -4
  104. package/extension/libherb/include/util/hb_foreach.h +79 -0
  105. package/extension/libherb/include/util/hb_narray.h +8 -4
  106. package/extension/libherb/include/util/hb_string.h +56 -9
  107. package/extension/libherb/include/util/string.h +11 -0
  108. package/extension/libherb/include/util.h +6 -3
  109. package/extension/libherb/include/version.h +1 -1
  110. package/extension/libherb/io.c +3 -2
  111. package/extension/libherb/io.h +3 -1
  112. package/extension/libherb/lex_helpers.h +29 -0
  113. package/extension/libherb/lexer.c +42 -30
  114. package/extension/libherb/lexer.h +1 -1
  115. package/extension/libherb/lexer_peek_helpers.c +12 -74
  116. package/extension/libherb/lexer_peek_helpers.h +87 -13
  117. package/extension/libherb/lexer_struct.h +2 -0
  118. package/extension/libherb/location.c +2 -2
  119. package/extension/libherb/location.h +2 -1
  120. package/extension/libherb/main.c +79 -66
  121. package/extension/libherb/parser.c +784 -247
  122. package/extension/libherb/parser.h +27 -2
  123. package/extension/libherb/parser_helpers.c +110 -23
  124. package/extension/libherb/parser_helpers.h +19 -3
  125. package/extension/libherb/parser_match_tags.c +110 -49
  126. package/extension/libherb/pretty_print.c +29 -24
  127. package/extension/libherb/pretty_print.h +10 -5
  128. package/extension/libherb/prism_context.h +45 -0
  129. package/extension/libherb/prism_helpers.c +30 -27
  130. package/extension/libherb/prism_helpers.h +10 -7
  131. package/extension/libherb/prism_serialized.h +12 -0
  132. package/extension/libherb/ruby_parser.c +2 -0
  133. package/extension/libherb/token.c +151 -66
  134. package/extension/libherb/token.h +16 -4
  135. package/extension/libherb/token_matchers.c +0 -1
  136. package/extension/libherb/token_struct.h +10 -3
  137. package/extension/libherb/utf8.c +7 -6
  138. package/extension/libherb/utf8.h +2 -1
  139. package/extension/libherb/util/hb_allocator.c +341 -0
  140. package/extension/libherb/util/hb_allocator.h +78 -0
  141. package/extension/libherb/util/hb_arena.c +81 -56
  142. package/extension/libherb/util/hb_arena.h +6 -1
  143. package/extension/libherb/util/hb_arena_debug.c +32 -17
  144. package/extension/libherb/util/hb_arena_debug.h +12 -1
  145. package/extension/libherb/util/hb_array.c +30 -15
  146. package/extension/libherb/util/hb_array.h +7 -3
  147. package/extension/libherb/util/hb_buffer.c +17 -21
  148. package/extension/libherb/util/hb_buffer.h +6 -4
  149. package/extension/libherb/util/hb_foreach.h +79 -0
  150. package/extension/libherb/util/hb_narray.c +22 -7
  151. package/extension/libherb/util/hb_narray.h +8 -4
  152. package/extension/libherb/util/hb_string.c +49 -35
  153. package/extension/libherb/util/hb_string.h +56 -9
  154. package/extension/libherb/util/string.h +11 -0
  155. package/extension/libherb/util.c +21 -11
  156. package/extension/libherb/util.h +6 -3
  157. package/extension/libherb/version.h +1 -1
  158. package/extension/libherb/visitor.c +48 -1
  159. package/extension/nodes.cpp +451 -6
  160. package/extension/nodes.h +8 -1
  161. package/extension/prism/include/prism/ast.h +4 -4
  162. package/extension/prism/include/prism/version.h +2 -2
  163. package/extension/prism/src/prism.c +1 -1
  164. package/package.json +12 -8
  165. package/src/node-backend.ts +11 -1
  166. package/dist/types/index-cjs.d.cts +0 -1
  167. package/extension/libherb/analyze.c +0 -1594
  168. package/extension/libherb/element_source.c +0 -12
  169. package/extension/libherb/include/util/hb_system.h +0 -9
  170. package/extension/libherb/util/hb_system.c +0 -30
  171. package/extension/libherb/util/hb_system.h +0 -9
  172. package/src/index-cjs.cts +0 -22
  173. /package/dist/types/{index-esm.d.mts → index.d.ts} +0 -0
  174. /package/src/{index-esm.mts → index.ts} +0 -0
@@ -1,16 +1,26 @@
1
1
  #define _POSIX_C_SOURCE 199309L // Enables `clock_gettime()`
2
2
 
3
- #include "include/analyze.h"
4
3
  #include "include/ast_node.h"
5
4
  #include "include/ast_nodes.h"
6
- #include "include/ast_pretty_print.h"
5
+
6
+ #ifndef HERB_EXCLUDE_PRETTYPRINT
7
+ # include "include/ast_pretty_print.h"
8
+ #endif
9
+
7
10
  #include "include/extract.h"
8
11
  #include "include/herb.h"
9
12
  #include "include/io.h"
13
+ #include "include/lex_helpers.h"
14
+ #include "include/macros.h"
10
15
  #include "include/ruby_parser.h"
16
+ #include "include/util/hb_allocator.h"
17
+ #include "include/util/hb_arena.h"
18
+ #include "include/util/hb_arena_debug.h"
11
19
  #include "include/util/hb_buffer.h"
20
+ #include "include/util/string.h"
12
21
 
13
22
  #include <stdio.h>
23
+ #include <stdlib.h>
14
24
  #include <string.h>
15
25
  #include <time.h>
16
26
 
@@ -34,125 +44,128 @@ void print_time_diff(const struct timespec start, const struct timespec end, con
34
44
 
35
45
  int main(const int argc, char* argv[]) {
36
46
  if (argc < 2) {
37
- printf("./herb [command] [options]\n\n");
47
+ puts("./herb [command] [options]\n");
38
48
 
39
- printf("Herb 🌿 Powerful and seamless HTML-aware ERB parsing and tooling.\n\n");
49
+ puts("Herb 🌿 Powerful and seamless HTML-aware ERB toolchain.\n");
40
50
 
41
- printf("./herb lex [file] - Lex a file\n");
42
- printf("./herb parse [file] - Parse a file\n");
43
- printf("./herb ruby [file] - Extract Ruby from a file\n");
44
- printf("./herb html [file] - Extract HTML from a file\n");
45
- printf("./herb prism [file] - Extract Ruby from a file and parse the Ruby source with Prism\n");
51
+ puts("./herb lex [file] - Lex a file");
52
+ puts("./herb parse [file] - Parse a file");
53
+ puts("./herb ruby [file] - Extract Ruby from a file");
54
+ puts("./herb html [file] - Extract HTML from a file");
55
+ puts("./herb prism [file] - Extract Ruby from a file and parse the Ruby source with Prism");
46
56
 
47
- return 1;
57
+ return EXIT_FAILURE;
48
58
  }
49
59
 
50
60
  if (argc < 3) {
51
- printf("Please specify input file.\n");
52
- return 1;
61
+ puts("Please specify input file.");
62
+ return EXIT_FAILURE;
53
63
  }
54
64
 
55
- hb_buffer_T output;
65
+ hb_allocator_T malloc_allocator = hb_allocator_with_malloc();
66
+ char* source = herb_read_file(argv[2], &malloc_allocator);
56
67
 
57
- if (!hb_buffer_init(&output, 4096)) { return 1; }
68
+ hb_allocator_T allocator;
69
+ if (!hb_allocator_init(&allocator, HB_ALLOCATOR_ARENA)) {
70
+ fprintf(stderr, "Failed to initialize allocator\n");
71
+ hb_allocator_dealloc(&malloc_allocator, source);
72
+ return EXIT_FAILURE;
73
+ }
58
74
 
59
- char* source = herb_read_file(argv[2]);
75
+ hb_buffer_T output;
76
+ if (!hb_buffer_init(&output, 4096, &allocator)) { return 1; }
60
77
 
61
78
  struct timespec start, end;
62
79
  clock_gettime(CLOCK_MONOTONIC, &start);
63
80
 
64
- if (strcmp(argv[1], "visit") == 0) {
65
- AST_DOCUMENT_NODE_T* root = herb_parse(source, NULL);
66
- clock_gettime(CLOCK_MONOTONIC, &end);
67
-
68
- herb_analyze_parse_tree(root, source);
69
-
70
- ast_pretty_print_node((AST_NODE_T*) root, 0, 0, &output);
71
- printf("%s\n", output.value);
72
-
73
- print_time_diff(start, end, "visiting");
81
+ int silent = 0;
82
+ if (argc > 3 && string_equals(argv[3], "--silent")) { silent = 1; }
74
83
 
75
- ast_node_free((AST_NODE_T*) root);
76
- free(output.value);
77
- free(source);
78
-
79
- return 0;
80
- }
81
-
82
- if (strcmp(argv[1], "lex") == 0) {
83
- herb_lex_to_buffer(source, &output);
84
+ if (string_equals(argv[1], "lex")) {
85
+ herb_lex_to_buffer(source, &output, &allocator);
84
86
  clock_gettime(CLOCK_MONOTONIC, &end);
85
87
 
86
- printf("%s\n", output.value);
88
+ if (!silent) { hb_arena_print_stats((hb_arena_T*) allocator.context); }
89
+
90
+ puts(output.value);
87
91
  print_time_diff(start, end, "lexing");
88
92
 
89
- free(output.value);
90
- free(source);
93
+ hb_buffer_free(&output);
94
+ hb_allocator_destroy(&allocator);
95
+ hb_allocator_dealloc(&malloc_allocator, source);
91
96
 
92
- return 0;
97
+ return EXIT_SUCCESS;
93
98
  }
94
99
 
95
- if (strcmp(argv[1], "parse") == 0) {
96
- AST_DOCUMENT_NODE_T* root = herb_parse(source, NULL);
97
-
98
- herb_analyze_parse_tree(root, source);
100
+ if (string_equals(argv[1], "parse")) {
101
+ AST_DOCUMENT_NODE_T* root = herb_parse(source, NULL, &allocator);
99
102
 
100
103
  clock_gettime(CLOCK_MONOTONIC, &end);
101
104
 
102
- int silent = 0;
103
- if (argc > 3 && strcmp(argv[3], "--silent") == 0) { silent = 1; }
104
-
105
105
  if (!silent) {
106
+ hb_arena_print_stats((hb_arena_T*) allocator.context);
107
+
108
+ #ifndef HERB_EXCLUDE_PRETTYPRINT
106
109
  ast_pretty_print_node((AST_NODE_T*) root, 0, 0, &output);
107
- printf("%s\n", output.value);
110
+ puts(output.value);
111
+ #endif
108
112
 
109
113
  print_time_diff(start, end, "parsing");
110
114
  }
111
115
 
112
- ast_node_free((AST_NODE_T*) root);
113
- free(output.value);
114
- free(source);
116
+ ast_node_free((AST_NODE_T*) root, &allocator);
115
117
 
116
- return 0;
118
+ hb_buffer_free(&output);
119
+ hb_allocator_destroy(&allocator);
120
+ hb_allocator_dealloc(&malloc_allocator, source);
121
+
122
+ return EXIT_SUCCESS;
117
123
  }
118
124
 
119
- if (strcmp(argv[1], "ruby") == 0) {
120
- herb_extract_ruby_to_buffer(source, &output);
125
+ if (string_equals(argv[1], "ruby")) {
126
+ herb_extract_ruby_to_buffer(source, &output, &allocator);
121
127
  clock_gettime(CLOCK_MONOTONIC, &end);
122
128
 
123
- printf("%s\n", output.value);
129
+ puts(output.value);
124
130
  print_time_diff(start, end, "extracting Ruby");
125
131
 
126
- free(output.value);
127
- free(source);
132
+ hb_buffer_free(&output);
133
+ hb_allocator_destroy(&allocator);
134
+ hb_allocator_dealloc(&malloc_allocator, source);
128
135
 
129
- return 0;
136
+ return EXIT_SUCCESS;
130
137
  }
131
138
 
132
- if (strcmp(argv[1], "html") == 0) {
133
- herb_extract_html_to_buffer(source, &output);
139
+ if (string_equals(argv[1], "html")) {
140
+ herb_extract_html_to_buffer(source, &output, &allocator);
134
141
  clock_gettime(CLOCK_MONOTONIC, &end);
135
142
 
136
- printf("%s\n", output.value);
143
+ puts(output.value);
137
144
  print_time_diff(start, end, "extracting HTML");
138
145
 
139
- free(output.value);
140
- free(source);
146
+ hb_buffer_free(&output);
147
+ hb_allocator_destroy(&allocator);
148
+ hb_allocator_dealloc(&malloc_allocator, source);
141
149
 
142
- return 0;
150
+ return EXIT_SUCCESS;
143
151
  }
144
152
 
145
- if (strcmp(argv[1], "prism") == 0) {
153
+ if (string_equals(argv[1], "prism")) {
146
154
  printf("HTML+ERB File: \n%s\n", source);
147
155
 
148
- char* ruby_source = herb_extract(source, HERB_EXTRACT_LANGUAGE_RUBY);
156
+ char* ruby_source = herb_extract(source, HERB_EXTRACT_LANGUAGE_RUBY, &allocator);
149
157
  printf("Extracted Ruby: \n%s\n", ruby_source);
150
158
 
151
159
  herb_parse_ruby_to_stdout(ruby_source);
152
160
 
153
- return 0;
161
+ hb_allocator_dealloc(&allocator, ruby_source);
162
+ hb_buffer_free(&output);
163
+ hb_allocator_destroy(&allocator);
164
+ hb_allocator_dealloc(&malloc_allocator, source);
165
+
166
+ return EXIT_SUCCESS;
154
167
  }
155
168
 
156
169
  printf("Unknown Command: %s\n", argv[1]);
157
- return 1;
170
+ return EXIT_FAILURE;
158
171
  }