@herb-tools/node 0.7.4 → 0.8.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 (131) hide show
  1. package/binding.gyp +8 -5
  2. package/dist/herb-node.esm.js +6 -6
  3. package/dist/herb-node.esm.js.map +1 -1
  4. package/extension/error_helpers.cpp +67 -9
  5. package/extension/error_helpers.h +4 -2
  6. package/extension/extension_helpers.cpp +20 -31
  7. package/extension/extension_helpers.h +7 -5
  8. package/extension/herb.cpp +10 -42
  9. package/extension/libherb/analyze.c +461 -249
  10. package/extension/libherb/analyze.h +10 -2
  11. package/extension/libherb/analyze_helpers.c +5 -0
  12. package/extension/libherb/analyze_helpers.h +3 -0
  13. package/extension/libherb/analyze_missing_end.c +147 -0
  14. package/extension/libherb/analyze_transform.c +196 -0
  15. package/extension/libherb/analyzed_ruby.c +23 -2
  16. package/extension/libherb/analyzed_ruby.h +4 -2
  17. package/extension/libherb/ast_node.c +14 -17
  18. package/extension/libherb/ast_node.h +4 -4
  19. package/extension/libherb/ast_nodes.c +180 -182
  20. package/extension/libherb/ast_nodes.h +69 -68
  21. package/extension/libherb/ast_pretty_print.c +233 -233
  22. package/extension/libherb/ast_pretty_print.h +3 -3
  23. package/extension/libherb/element_source.c +7 -6
  24. package/extension/libherb/element_source.h +3 -1
  25. package/extension/libherb/errors.c +273 -153
  26. package/extension/libherb/errors.h +43 -27
  27. package/extension/libherb/extract.c +92 -34
  28. package/extension/libherb/extract.h +4 -4
  29. package/extension/libherb/herb.c +37 -49
  30. package/extension/libherb/herb.h +6 -7
  31. package/extension/libherb/html_util.c +34 -96
  32. package/extension/libherb/html_util.h +4 -5
  33. package/extension/libherb/include/analyze.h +10 -2
  34. package/extension/libherb/include/analyze_helpers.h +3 -0
  35. package/extension/libherb/include/analyzed_ruby.h +4 -2
  36. package/extension/libherb/include/ast_node.h +4 -4
  37. package/extension/libherb/include/ast_nodes.h +69 -68
  38. package/extension/libherb/include/ast_pretty_print.h +3 -3
  39. package/extension/libherb/include/element_source.h +3 -1
  40. package/extension/libherb/include/errors.h +43 -27
  41. package/extension/libherb/include/extract.h +4 -4
  42. package/extension/libherb/include/herb.h +6 -7
  43. package/extension/libherb/include/html_util.h +4 -5
  44. package/extension/libherb/include/lexer.h +1 -3
  45. package/extension/libherb/include/lexer_peek_helpers.h +21 -19
  46. package/extension/libherb/include/lexer_struct.h +12 -10
  47. package/extension/libherb/include/location.h +10 -13
  48. package/extension/libherb/include/macros.h +4 -0
  49. package/extension/libherb/include/parser.h +12 -6
  50. package/extension/libherb/include/parser_helpers.h +26 -16
  51. package/extension/libherb/include/position.h +3 -14
  52. package/extension/libherb/include/pretty_print.h +38 -28
  53. package/extension/libherb/include/prism_helpers.h +1 -1
  54. package/extension/libherb/include/range.h +4 -13
  55. package/extension/libherb/include/token.h +5 -11
  56. package/extension/libherb/include/token_struct.h +2 -2
  57. package/extension/libherb/include/utf8.h +3 -2
  58. package/extension/libherb/include/util/hb_arena.h +31 -0
  59. package/extension/libherb/include/util/hb_arena_debug.h +8 -0
  60. package/extension/libherb/include/util/hb_array.h +33 -0
  61. package/extension/libherb/include/util/hb_buffer.h +34 -0
  62. package/extension/libherb/include/util/hb_string.h +29 -0
  63. package/extension/libherb/include/util/hb_system.h +9 -0
  64. package/extension/libherb/include/util.h +3 -14
  65. package/extension/libherb/include/version.h +1 -1
  66. package/extension/libherb/include/visitor.h +1 -1
  67. package/extension/libherb/io.c +7 -4
  68. package/extension/libherb/lexer.c +62 -88
  69. package/extension/libherb/lexer.h +1 -3
  70. package/extension/libherb/lexer_peek_helpers.c +42 -38
  71. package/extension/libherb/lexer_peek_helpers.h +21 -19
  72. package/extension/libherb/lexer_struct.h +12 -10
  73. package/extension/libherb/location.c +9 -37
  74. package/extension/libherb/location.h +10 -13
  75. package/extension/libherb/macros.h +4 -0
  76. package/extension/libherb/main.c +19 -23
  77. package/extension/libherb/parser.c +373 -313
  78. package/extension/libherb/parser.h +12 -6
  79. package/extension/libherb/parser_helpers.c +60 -54
  80. package/extension/libherb/parser_helpers.h +26 -16
  81. package/extension/libherb/parser_match_tags.c +316 -0
  82. package/extension/libherb/position.h +3 -14
  83. package/extension/libherb/pretty_print.c +88 -117
  84. package/extension/libherb/pretty_print.h +38 -28
  85. package/extension/libherb/prism_helpers.c +7 -7
  86. package/extension/libherb/prism_helpers.h +1 -1
  87. package/extension/libherb/range.c +2 -35
  88. package/extension/libherb/range.h +4 -13
  89. package/extension/libherb/token.c +36 -87
  90. package/extension/libherb/token.h +5 -11
  91. package/extension/libherb/token_struct.h +2 -2
  92. package/extension/libherb/utf8.c +4 -4
  93. package/extension/libherb/utf8.h +3 -2
  94. package/extension/libherb/util/hb_arena.c +179 -0
  95. package/extension/libherb/util/hb_arena.h +31 -0
  96. package/extension/libherb/util/hb_arena_debug.c +237 -0
  97. package/extension/libherb/util/hb_arena_debug.h +8 -0
  98. package/extension/libherb/{array.c → util/hb_array.c} +26 -27
  99. package/extension/libherb/util/hb_array.h +33 -0
  100. package/extension/libherb/util/hb_buffer.c +203 -0
  101. package/extension/libherb/util/hb_buffer.h +34 -0
  102. package/extension/libherb/util/hb_string.c +85 -0
  103. package/extension/libherb/util/hb_string.h +29 -0
  104. package/extension/libherb/util/hb_system.c +30 -0
  105. package/extension/libherb/util/hb_system.h +9 -0
  106. package/extension/libherb/util.c +29 -99
  107. package/extension/libherb/util.h +3 -14
  108. package/extension/libherb/version.h +1 -1
  109. package/extension/libherb/visitor.c +55 -55
  110. package/extension/libherb/visitor.h +1 -1
  111. package/extension/nodes.cpp +40 -40
  112. package/extension/nodes.h +2 -2
  113. package/extension/prism/include/prism/ast.h +31 -1
  114. package/extension/prism/include/prism/diagnostic.h +1 -0
  115. package/extension/prism/include/prism/version.h +3 -3
  116. package/extension/prism/src/diagnostic.c +3 -1
  117. package/extension/prism/src/prism.c +130 -71
  118. package/extension/prism/src/util/pm_string.c +6 -8
  119. package/package.json +3 -3
  120. package/extension/libherb/array.h +0 -33
  121. package/extension/libherb/buffer.c +0 -232
  122. package/extension/libherb/buffer.h +0 -39
  123. package/extension/libherb/include/array.h +0 -33
  124. package/extension/libherb/include/buffer.h +0 -39
  125. package/extension/libherb/include/json.h +0 -28
  126. package/extension/libherb/include/memory.h +0 -12
  127. package/extension/libherb/json.c +0 -205
  128. package/extension/libherb/json.h +0 -28
  129. package/extension/libherb/memory.c +0 -53
  130. package/extension/libherb/memory.h +0 -12
  131. package/extension/libherb/position.c +0 -33
package/binding.gyp CHANGED
@@ -11,27 +11,25 @@
11
11
 
12
12
  # Herb main source files
13
13
  "./extension/libherb/analyze_helpers.c",
14
+ "./extension/libherb/analyze_missing_end.c",
15
+ "./extension/libherb/analyze_transform.c",
14
16
  "./extension/libherb/analyze.c",
15
17
  "./extension/libherb/analyzed_ruby.c",
16
- "./extension/libherb/array.c",
17
18
  "./extension/libherb/ast_node.c",
18
19
  "./extension/libherb/ast_nodes.c",
19
20
  "./extension/libherb/ast_pretty_print.c",
20
- "./extension/libherb/buffer.c",
21
21
  "./extension/libherb/element_source.c",
22
22
  "./extension/libherb/errors.c",
23
23
  "./extension/libherb/extract.c",
24
24
  "./extension/libherb/herb.c",
25
25
  "./extension/libherb/html_util.c",
26
26
  "./extension/libherb/io.c",
27
- "./extension/libherb/json.c",
28
27
  "./extension/libherb/lexer_peek_helpers.c",
29
28
  "./extension/libherb/lexer.c",
30
29
  "./extension/libherb/location.c",
31
- "./extension/libherb/memory.c",
32
30
  "./extension/libherb/parser_helpers.c",
31
+ "./extension/libherb/parser_match_tags.c",
33
32
  "./extension/libherb/parser.c",
34
- "./extension/libherb/position.c",
35
33
  "./extension/libherb/pretty_print.c",
36
34
  "./extension/libherb/prism_helpers.c",
37
35
  "./extension/libherb/range.c",
@@ -39,6 +37,11 @@
39
37
  "./extension/libherb/token.c",
40
38
  "./extension/libherb/utf8.c",
41
39
  "./extension/libherb/util.c",
40
+ "./extension/libherb/util/hb_arena.c",
41
+ "./extension/libherb/util/hb_array.c",
42
+ "./extension/libherb/util/hb_buffer.c",
43
+ "./extension/libherb/util/hb_string.c",
44
+ "./extension/libherb/util/hb_system.c",
42
45
  "./extension/libherb/visitor.c",
43
46
 
44
47
  # Prism main source files
@@ -6,7 +6,7 @@ import { createRequire } from 'module';
6
6
  import { fileURLToPath } from 'url';
7
7
 
8
8
  var name = "@herb-tools/node";
9
- var version = "0.7.4";
9
+ var version = "0.8.0";
10
10
  var packageJSON = {
11
11
  name: name,
12
12
  version: version};
@@ -17,12 +17,12 @@ class HerbBackendNode extends HerbBackend {
17
17
  }
18
18
  }
19
19
 
20
- const __filename = fileURLToPath(import.meta.url);
21
- const __dirname = path.dirname(__filename);
22
- const require = createRequire(import.meta.url);
23
- const packagePath = path.resolve(__dirname, "../package.json");
20
+ const __filename$1 = fileURLToPath(import.meta.url);
21
+ const __dirname$1 = path.dirname(__filename$1);
22
+ const require$1 = createRequire(import.meta.url);
23
+ const packagePath = path.resolve(__dirname$1, "../package.json");
24
24
  const libherbPath = binary.find(packagePath);
25
- const libHerbBinary = require(libherbPath);
25
+ const libHerbBinary = require$1(libherbPath);
26
26
  /**
27
27
  * An instance of the `Herb` class using a Node.js backend.
28
28
  * This loads `libherb` in a Node.js C++ native extension.
@@ -1 +1 @@
1
- {"version":3,"file":"herb-node.esm.js","sources":["../src/node-backend.ts","../src/index-esm.mts"],"sourcesContent":["import packageJSON from \"../package.json\" with { type: \"json\" }\n\nimport { HerbBackend } from \"@herb-tools/core\"\n\nexport class HerbBackendNode extends HerbBackend {\n backendVersion(): string {\n return `${packageJSON.name}@${packageJSON.version}`\n }\n}\n","export * from \"@herb-tools/core\"\n\nimport path from \"path\"\nimport binary from \"@mapbox/node-pre-gyp\"\n\nimport { createRequire } from \"module\"\nimport { fileURLToPath } from \"url\"\n\nconst __filename = fileURLToPath(import.meta.url)\nconst __dirname = path.dirname(__filename)\nconst require = createRequire(import.meta.url)\n\nconst packagePath = path.resolve(__dirname, \"../package.json\")\nconst libherbPath = binary.find(packagePath)\n\nconst libHerbBinary = require(libherbPath)\n\nimport { HerbBackendNode } from \"./node-backend.js\"\n\n/**\n * An instance of the `Herb` class using a Node.js backend.\n * This loads `libherb` in a Node.js C++ native extension.\n */\nconst Herb = new HerbBackendNode(\n () => new Promise((resolve, _reject) => resolve(libHerbBinary)),\n)\n\nexport { Herb, HerbBackendNode }\n"],"names":[],"mappings":";;;;;;;;;;;;;AAIM,MAAO,eAAgB,SAAQ,WAAW,CAAA;IAC9C,cAAc,GAAA;QACZ,OAAO,CAAA,EAAG,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,OAAO,CAAA,CAAE;IACrD;AACD;;ACAD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AACjD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;AAC1C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AAE9C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC;AAC9D,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;AAE5C,MAAM,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC;AAI1C;;;AAGG;AACH,MAAM,IAAI,GAAG,IAAI,eAAe,CAC9B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;;;;"}
1
+ {"version":3,"file":"herb-node.esm.js","sources":["../src/node-backend.ts","../src/index-esm.mts"],"sourcesContent":["import packageJSON from \"../package.json\" with { type: \"json\" }\n\nimport { HerbBackend } from \"@herb-tools/core\"\n\nexport class HerbBackendNode extends HerbBackend {\n backendVersion(): string {\n return `${packageJSON.name}@${packageJSON.version}`\n }\n}\n","export * from \"@herb-tools/core\"\n\nimport path from \"path\"\nimport binary from \"@mapbox/node-pre-gyp\"\n\nimport { createRequire } from \"module\"\nimport { fileURLToPath } from \"url\"\n\nconst __filename = fileURLToPath(import.meta.url)\nconst __dirname = path.dirname(__filename)\nconst require = createRequire(import.meta.url)\n\nconst packagePath = path.resolve(__dirname, \"../package.json\")\nconst libherbPath = binary.find(packagePath)\n\nconst libHerbBinary = require(libherbPath)\n\nimport { HerbBackendNode } from \"./node-backend.js\"\n\n/**\n * An instance of the `Herb` class using a Node.js backend.\n * This loads `libherb` in a Node.js C++ native extension.\n */\nconst Herb = new HerbBackendNode(\n () => new Promise((resolve, _reject) => resolve(libHerbBinary)),\n)\n\nexport { Herb, HerbBackendNode }\n"],"names":["__filename","__dirname","require"],"mappings":";;;;;;;;;;;;;AAIM,MAAO,eAAgB,SAAQ,WAAW,CAAA;IAC9C,cAAc,GAAA;QACZ,OAAO,CAAA,EAAG,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,OAAO,CAAA,CAAE;IACrD;AACD;;ACAD,MAAMA,YAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AACjD,MAAMC,WAAS,GAAG,IAAI,CAAC,OAAO,CAACD,YAAU,CAAC;AAC1C,MAAME,SAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AAE9C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAACD,WAAS,EAAE,iBAAiB,CAAC;AAC9D,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;AAE5C,MAAM,aAAa,GAAGC,SAAO,CAAC,WAAW,CAAC;AAI1C;;;AAGG;AACH,MAAM,IAAI,GAAG,IAAI,eAAe,CAC9B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;;;;"}
@@ -1,5 +1,5 @@
1
1
  // NOTE: This file is generated by the templates/template.rb script and should not
2
- // be modified manually. See /Users/marcoroth/Development/herb-release-0.7.4/templates/javascript/packages/node/extension/error_helpers.cpp.erb
2
+ // be modified manually. See /Users/marcoroth/Development/herb-release-0.8.0/templates/javascript/packages/node/extension/error_helpers.cpp.erb
3
3
 
4
4
  #include <node_api.h>
5
5
  #include "error_helpers.h"
@@ -7,16 +7,16 @@
7
7
  #include "nodes.h"
8
8
 
9
9
  extern "C" {
10
- #include "../extension/libherb/include/herb.h"
11
- #include "../extension/libherb/include/token.h"
12
- #include "../extension/libherb/include/array.h"
13
- #include "../extension/libherb/include/errors.h"
14
10
  #include "../extension/libherb/include/ast_node.h"
15
11
  #include "../extension/libherb/include/ast_nodes.h"
12
+ #include "../extension/libherb/include/errors.h"
13
+ #include "../extension/libherb/include/herb.h"
14
+ #include "../extension/libherb/include/token.h"
15
+ #include "../extension/libherb/include/util/hb_array.h"
16
16
  }
17
17
 
18
18
  napi_value ErrorFromCStruct(napi_env env, ERROR_T* error);
19
- napi_value ErrorsArrayFromCArray(napi_env env, array_T* array);
19
+ napi_value ErrorsArrayFromCArray(napi_env env, hb_array_T* array);
20
20
 
21
21
  napi_value UnexpectedErrorFromCStruct(napi_env env, UNEXPECTED_ERROR_T* unexpected_error) {
22
22
  if (!unexpected_error) {
@@ -279,14 +279,66 @@ napi_value RubyParseErrorFromCStruct(napi_env env, RUBY_PARSE_ERROR_T* ruby_pars
279
279
  return result;
280
280
  }
281
281
 
282
+ napi_value ERBControlFlowScopeErrorFromCStruct(napi_env env, ERB_CONTROL_FLOW_SCOPE_ERROR_T* erb_control_flow_scope_error) {
283
+ if (!erb_control_flow_scope_error) {
284
+ napi_value null_value;
285
+ napi_get_null(env, &null_value);
286
+ return null_value;
287
+ }
288
+
289
+ napi_value result;
290
+ napi_create_object(env, &result);
291
+
292
+ napi_value type = CreateString(env, error_type_to_string(&erb_control_flow_scope_error->base));
293
+ napi_set_named_property(env, result, "type", type);
294
+
295
+ napi_value message = CreateString(env, erb_control_flow_scope_error->base.message);
296
+ napi_set_named_property(env, result, "message", message);
297
+
298
+ napi_value location = CreateLocation(env, erb_control_flow_scope_error->base.location);
299
+ napi_set_named_property(env, result, "location", location);
300
+
301
+ napi_value keyword = CreateString(env, erb_control_flow_scope_error->keyword);
302
+ napi_set_named_property(env, result, "keyword", keyword);
303
+
304
+
305
+ return result;
306
+ }
307
+
308
+ napi_value MissingERBEndTagErrorFromCStruct(napi_env env, MISSINGERB_END_TAG_ERROR_T* missingerb_end_tag_error) {
309
+ if (!missingerb_end_tag_error) {
310
+ napi_value null_value;
311
+ napi_get_null(env, &null_value);
312
+ return null_value;
313
+ }
282
314
 
283
- napi_value ErrorsArrayFromCArray(napi_env env, array_T* array) {
315
+ napi_value result;
316
+ napi_create_object(env, &result);
317
+
318
+ napi_value type = CreateString(env, error_type_to_string(&missingerb_end_tag_error->base));
319
+ napi_set_named_property(env, result, "type", type);
320
+
321
+ napi_value message = CreateString(env, missingerb_end_tag_error->base.message);
322
+ napi_set_named_property(env, result, "message", message);
323
+
324
+ napi_value location = CreateLocation(env, missingerb_end_tag_error->base.location);
325
+ napi_set_named_property(env, result, "location", location);
326
+
327
+ napi_value keyword = CreateString(env, missingerb_end_tag_error->keyword);
328
+ napi_set_named_property(env, result, "keyword", keyword);
329
+
330
+
331
+ return result;
332
+ }
333
+
334
+
335
+ napi_value ErrorsArrayFromCArray(napi_env env, hb_array_T* array) {
284
336
  napi_value result;
285
337
  napi_create_array(env, &result);
286
338
 
287
339
  if (array) {
288
- for (size_t i = 0; i < array_size(array); i++) {
289
- ERROR_T* error = (ERROR_T*) array_get(array, i);
340
+ for (size_t i = 0; i < hb_array_size(array); i++) {
341
+ ERROR_T* error = (ERROR_T*) hb_array_get(array, i);
290
342
  if (error) {
291
343
  napi_value js_error = ErrorFromCStruct(env, error);
292
344
  napi_set_element(env, result, i, js_error);
@@ -332,6 +384,12 @@ napi_value ErrorFromCStruct(napi_env env, ERROR_T* error) {
332
384
  case RUBY_PARSE_ERROR:
333
385
  return RubyParseErrorFromCStruct(env, (RUBY_PARSE_ERROR_T*) error);
334
386
  break;
387
+ case ERB_CONTROL_FLOW_SCOPE_ERROR:
388
+ return ERBControlFlowScopeErrorFromCStruct(env, (ERB_CONTROL_FLOW_SCOPE_ERROR_T*) error);
389
+ break;
390
+ case MISSINGERB_END_TAG_ERROR:
391
+ return MissingERBEndTagErrorFromCStruct(env, (MISSINGERB_END_TAG_ERROR_T*) error);
392
+ break;
335
393
  default:
336
394
  napi_value null_value;
337
395
  napi_get_null(env, &null_value);
@@ -1,5 +1,5 @@
1
1
  // NOTE: This file is generated by the templates/template.rb script and should not
2
- // be modified manually. See /Users/marcoroth/Development/herb-release-0.7.4/templates/javascript/packages/node/extension/error_helpers.h.erb
2
+ // be modified manually. See /Users/marcoroth/Development/herb-release-0.8.0/templates/javascript/packages/node/extension/error_helpers.h.erb
3
3
 
4
4
  #ifndef HERB_EXTENSION_ERRORS_H
5
5
  #define HERB_EXTENSION_ERRORS_H
@@ -11,7 +11,7 @@ extern "C" {
11
11
  }
12
12
 
13
13
  napi_value ErrorFromCStruct(napi_env env, ERROR_T* error);
14
- napi_value ErrorsArrayFromCArray(napi_env env, array_T* array);
14
+ napi_value ErrorsArrayFromCArray(napi_env env, hb_array_T* array);
15
15
 
16
16
  napi_value UnexpectedErrorFromCStruct(napi_env env, UNEXPECTED_ERROR_T* unexpected_error);
17
17
  napi_value UnexpectedTokenErrorFromCStruct(napi_env env, UNEXPECTED_TOKEN_ERROR_T* unexpected_token_error);
@@ -22,5 +22,7 @@ napi_value QuotesMismatchErrorFromCStruct(napi_env env, QUOTES_MISMATCH_ERROR_T*
22
22
  napi_value VoidElementClosingTagErrorFromCStruct(napi_env env, VOID_ELEMENT_CLOSING_TAG_ERROR_T* void_element_closing_tag_error);
23
23
  napi_value UnclosedElementErrorFromCStruct(napi_env env, UNCLOSED_ELEMENT_ERROR_T* unclosed_element_error);
24
24
  napi_value RubyParseErrorFromCStruct(napi_env env, RUBY_PARSE_ERROR_T* ruby_parse_error);
25
+ napi_value ERBControlFlowScopeErrorFromCStruct(napi_env env, ERB_CONTROL_FLOW_SCOPE_ERROR_T* erb_control_flow_scope_error);
26
+ napi_value MissingERBEndTagErrorFromCStruct(napi_env env, MISSINGERB_END_TAG_ERROR_T* missingerb_end_tag_error);
25
27
 
26
28
  #endif
@@ -4,15 +4,15 @@
4
4
  #include <string.h>
5
5
 
6
6
  extern "C" {
7
- #include "../extension/libherb/include/array.h"
8
7
  #include "../extension/libherb/include/ast_nodes.h"
9
- #include "../extension/libherb/include/buffer.h"
10
8
  #include "../extension/libherb/include/herb.h"
11
9
  #include "../extension/libherb/include/io.h"
12
10
  #include "../extension/libherb/include/location.h"
13
11
  #include "../extension/libherb/include/position.h"
14
12
  #include "../extension/libherb/include/range.h"
15
13
  #include "../extension/libherb/include/token.h"
14
+ #include "../extension/libherb/include/util/hb_array.h"
15
+ #include "../extension/libherb/include/util/hb_buffer.h"
16
16
  }
17
17
 
18
18
  #include "error_helpers.h"
@@ -46,19 +46,20 @@ napi_value CreateString(napi_env env, const char* str) {
46
46
  return result;
47
47
  }
48
48
 
49
- napi_value CreatePosition(napi_env env, position_T* position) {
50
- if (!position) {
51
- napi_value null_value;
52
- napi_get_null(env, &null_value);
53
- return null_value;
54
- }
49
+ napi_value CreateStringFromHbString(napi_env env, hb_string_T string) {
50
+ napi_value result;
51
+ napi_create_string_utf8(env, string.data, string.length, &result);
52
+ return result;
53
+ }
55
54
 
55
+
56
+ napi_value CreatePosition(napi_env env, position_T position) {
56
57
  napi_value result;
57
58
  napi_create_object(env, &result);
58
59
 
59
60
  napi_value line, column;
60
- napi_create_uint32(env, (uint32_t)position->line, &line);
61
- napi_create_uint32(env, (uint32_t)position->column, &column);
61
+ napi_create_uint32(env, (uint32_t)position.line, &line);
62
+ napi_create_uint32(env, (uint32_t)position.column, &column);
62
63
 
63
64
  napi_set_named_property(env, result, "line", line);
64
65
  napi_set_named_property(env, result, "column", column);
@@ -66,18 +67,12 @@ napi_value CreatePosition(napi_env env, position_T* position) {
66
67
  return result;
67
68
  }
68
69
 
69
- napi_value CreateLocation(napi_env env, location_T* location) {
70
- if (!location) {
71
- napi_value null_value;
72
- napi_get_null(env, &null_value);
73
- return null_value;
74
- }
75
-
70
+ napi_value CreateLocation(napi_env env, location_T location) {
76
71
  napi_value result;
77
72
  napi_create_object(env, &result);
78
73
 
79
- napi_value start = CreatePosition(env, location->start);
80
- napi_value end = CreatePosition(env, location->end);
74
+ napi_value start = CreatePosition(env, location.start);
75
+ napi_value end = CreatePosition(env, location.end);
81
76
 
82
77
  napi_set_named_property(env, result, "start", start);
83
78
  napi_set_named_property(env, result, "end", end);
@@ -85,19 +80,13 @@ napi_value CreateLocation(napi_env env, location_T* location) {
85
80
  return result;
86
81
  }
87
82
 
88
- napi_value CreateRange(napi_env env, range_T* range) {
89
- if (!range) {
90
- napi_value null_value;
91
- napi_get_null(env, &null_value);
92
- return null_value;
93
- }
94
-
83
+ napi_value CreateRange(napi_env env, range_T range) {
95
84
  napi_value result;
96
85
  napi_create_array(env, &result);
97
86
 
98
87
  napi_value from, to;
99
- napi_create_uint32(env, (uint32_t)range->from, &from);
100
- napi_create_uint32(env, (uint32_t)range->to, &to);
88
+ napi_create_uint32(env, (uint32_t)range.from, &from);
89
+ napi_create_uint32(env, (uint32_t)range.to, &to);
101
90
 
102
91
  napi_set_element(env, result, 0, from);
103
92
  napi_set_element(env, result, 1, to);
@@ -154,7 +143,7 @@ napi_value ReadFileToString(napi_env env, const char* file_path) {
154
143
  return result;
155
144
  }
156
145
 
157
- napi_value CreateLexResult(napi_env env, array_T* tokens, napi_value source) {
146
+ napi_value CreateLexResult(napi_env env, hb_array_T* tokens, napi_value source) {
158
147
  napi_value result, tokens_array, errors_array, warnings_array;
159
148
 
160
149
  napi_create_object(env, &result);
@@ -164,8 +153,8 @@ napi_value CreateLexResult(napi_env env, array_T* tokens, napi_value source) {
164
153
 
165
154
  // Add tokens to array
166
155
  if (tokens) {
167
- for (size_t i = 0; i < array_size(tokens); i++) {
168
- token_T* token = (token_T*)array_get(tokens, i);
156
+ for (size_t i = 0; i < hb_array_size(tokens); i++) {
157
+ token_T* token = (token_T*)hb_array_get(tokens, i);
169
158
  if (token) {
170
159
  napi_value token_obj = CreateToken(env, token);
171
160
  napi_set_element(env, tokens_array, i, token_obj);
@@ -4,19 +4,21 @@
4
4
  #include <node_api.h>
5
5
 
6
6
  extern "C" {
7
- #include "../extension/libherb/include/array.h"
8
7
  #include "../extension/libherb/include/ast_nodes.h"
8
+ #include "../extension/libherb/include/util/hb_array.h"
9
+ #include "../extension/libherb/include/util/hb_string.h"
9
10
  }
10
11
 
11
12
  char* CheckString(napi_env env, napi_value value);
12
13
  napi_value CreateString(napi_env env, const char* str);
14
+ napi_value CreateStringFromHbString(napi_env env, hb_string_T string);
13
15
  napi_value ReadFileToString(napi_env env, const char* file_path);
14
- napi_value CreateLexResult(napi_env env, array_T* tokens, napi_value source);
16
+ napi_value CreateLexResult(napi_env env, hb_array_T* tokens, napi_value source);
15
17
  napi_value CreateParseResult(napi_env env, AST_DOCUMENT_NODE_T* root, napi_value source);
16
18
 
17
- napi_value CreateLocation(napi_env env, location_T* location);
19
+ napi_value CreateLocation(napi_env env, location_T location);
18
20
  napi_value CreateToken(napi_env env, token_T* token);
19
- napi_value CreatePosition(napi_env env, position_T* position);
20
- napi_value CreateRange(napi_env env, range_T* range);
21
+ napi_value CreatePosition(napi_env env, position_T position);
22
+ napi_value CreateRange(napi_env env, range_T range);
21
23
 
22
24
  #endif
@@ -1,12 +1,12 @@
1
1
  extern "C" {
2
2
  #include "../extension/libherb/include/analyze.h"
3
- #include "../extension/libherb/include/array.h"
4
3
  #include "../extension/libherb/include/ast_nodes.h"
5
- #include "../extension/libherb/include/buffer.h"
6
4
  #include "../extension/libherb/include/herb.h"
7
5
  #include "../extension/libherb/include/location.h"
8
6
  #include "../extension/libherb/include/range.h"
9
7
  #include "../extension/libherb/include/token.h"
8
+ #include "../extension/libherb/include/util/hb_array.h"
9
+ #include "../extension/libherb/include/util/hb_buffer.h"
10
10
  }
11
11
 
12
12
  #include "error_helpers.h"
@@ -31,7 +31,7 @@ napi_value Herb_lex(napi_env env, napi_callback_info info) {
31
31
  char* string = CheckString(env, args[0]);
32
32
  if (!string) { return nullptr; }
33
33
 
34
- array_T* tokens = herb_lex(string);
34
+ hb_array_T* tokens = herb_lex(string);
35
35
  napi_value result = CreateLexResult(env, tokens, args[0]);
36
36
 
37
37
  herb_free_tokens(&tokens);
@@ -53,7 +53,7 @@ napi_value Herb_lex_file(napi_env env, napi_callback_info info) {
53
53
  char* file_path = CheckString(env, args[0]);
54
54
  if (!file_path) { return nullptr; }
55
55
 
56
- array_T* tokens = herb_lex_file(file_path);
56
+ hb_array_T* tokens = herb_lex_file(file_path);
57
57
  napi_value source_value = ReadFileToString(env, file_path);
58
58
  napi_value result = CreateLexResult(env, tokens, source_value);
59
59
 
@@ -142,37 +142,6 @@ napi_value Herb_parse_file(napi_env env, napi_callback_info info) {
142
142
  return result;
143
143
  }
144
144
 
145
- napi_value Herb_lex_to_json(napi_env env, napi_callback_info info) {
146
- size_t argc = 1;
147
- napi_value args[1];
148
- napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
149
-
150
- if (argc < 1) {
151
- napi_throw_error(env, nullptr, "Wrong number of arguments");
152
- return nullptr;
153
- }
154
-
155
- char* string = CheckString(env, args[0]);
156
- if (!string) { return nullptr; }
157
-
158
- buffer_T output;
159
- if (!buffer_init(&output)) {
160
- free(string);
161
- napi_throw_error(env, nullptr, "Failed to initialize buffer");
162
- return nullptr;
163
- }
164
-
165
- herb_lex_json_to_buffer(string, &output);
166
-
167
- napi_value result;
168
- napi_create_string_utf8(env, output.value, output.length, &result);
169
-
170
- buffer_free(&output);
171
- free(string);
172
-
173
- return result;
174
- }
175
-
176
145
  napi_value Herb_extract_ruby(napi_env env, napi_callback_info info) {
177
146
  size_t argc = 1;
178
147
  napi_value args[1];
@@ -186,8 +155,8 @@ napi_value Herb_extract_ruby(napi_env env, napi_callback_info info) {
186
155
  char* string = CheckString(env, args[0]);
187
156
  if (!string) { return nullptr; }
188
157
 
189
- buffer_T output;
190
- if (!buffer_init(&output)) {
158
+ hb_buffer_T output;
159
+ if (!hb_buffer_init(&output, strlen(string))) {
191
160
  free(string);
192
161
  napi_throw_error(env, nullptr, "Failed to initialize buffer");
193
162
  return nullptr;
@@ -198,7 +167,7 @@ napi_value Herb_extract_ruby(napi_env env, napi_callback_info info) {
198
167
  napi_value result;
199
168
  napi_create_string_utf8(env, output.value, NAPI_AUTO_LENGTH, &result);
200
169
 
201
- buffer_free(&output);
170
+ free(output.value);
202
171
  free(string);
203
172
  return result;
204
173
  }
@@ -216,8 +185,8 @@ napi_value Herb_extract_html(napi_env env, napi_callback_info info) {
216
185
  char* string = CheckString(env, args[0]);
217
186
  if (!string) { return nullptr; }
218
187
 
219
- buffer_T output;
220
- if (!buffer_init(&output)) {
188
+ hb_buffer_T output;
189
+ if (!hb_buffer_init(&output, strlen(string))) {
221
190
  free(string);
222
191
  napi_throw_error(env, nullptr, "Failed to initialize buffer");
223
192
  return nullptr;
@@ -228,7 +197,7 @@ napi_value Herb_extract_html(napi_env env, napi_callback_info info) {
228
197
  napi_value result;
229
198
  napi_create_string_utf8(env, output.value, NAPI_AUTO_LENGTH, &result);
230
199
 
231
- buffer_free(&output);
200
+ free(output.value);
232
201
  free(string);
233
202
  return result;
234
203
  }
@@ -252,7 +221,6 @@ napi_value Init(napi_env env, napi_value exports) {
252
221
  { "lex", nullptr, Herb_lex, nullptr, nullptr, nullptr, napi_default, nullptr },
253
222
  { "parseFile", nullptr, Herb_parse_file, nullptr, nullptr, nullptr, napi_default, nullptr },
254
223
  { "lexFile", nullptr, Herb_lex_file, nullptr, nullptr, nullptr, napi_default, nullptr },
255
- { "lexToJson", nullptr, Herb_lex_to_json, nullptr, nullptr, nullptr, napi_default, nullptr },
256
224
  { "extractRuby", nullptr, Herb_extract_ruby, nullptr, nullptr, nullptr, napi_default, nullptr },
257
225
  { "extractHTML", nullptr, Herb_extract_html, nullptr, nullptr, nullptr, napi_default, nullptr },
258
226
  { "version", nullptr, Herb_version, nullptr, nullptr, nullptr, napi_default, nullptr },