@herb-tools/node 0.1.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/CHANGELOG.md +3 -0
  2. package/README.md +9 -0
  3. package/binding.gyp +98 -0
  4. package/dist/herb-node.cjs +20 -0
  5. package/dist/herb-node.cjs.map +1 -0
  6. package/dist/herb-node.esm.js +33 -0
  7. package/dist/herb-node.esm.js.map +1 -0
  8. package/dist/types/index-cjs.d.cts +1 -0
  9. package/dist/types/index-esm.d.mts +8 -0
  10. package/dist/types/node-backend.d.ts +4 -0
  11. package/dist/types/util.d.ts +2 -0
  12. package/extension/error_helpers.cpp +340 -0
  13. package/extension/error_helpers.h +26 -0
  14. package/extension/extension_helpers.cpp +206 -0
  15. package/extension/extension_helpers.h +22 -0
  16. package/extension/herb.cpp +232 -0
  17. package/extension/libherb/analyze.c +989 -0
  18. package/extension/libherb/analyze_helpers.c +241 -0
  19. package/extension/libherb/analyzed_ruby.c +35 -0
  20. package/extension/libherb/array.c +137 -0
  21. package/extension/libherb/ast_node.c +81 -0
  22. package/extension/libherb/ast_nodes.c +866 -0
  23. package/extension/libherb/ast_pretty_print.c +588 -0
  24. package/extension/libherb/buffer.c +199 -0
  25. package/extension/libherb/errors.c +740 -0
  26. package/extension/libherb/extract.c +110 -0
  27. package/extension/libherb/herb.c +103 -0
  28. package/extension/libherb/html_util.c +143 -0
  29. package/extension/libherb/include/analyze.h +36 -0
  30. package/extension/libherb/include/analyze_helpers.h +43 -0
  31. package/extension/libherb/include/analyzed_ruby.h +33 -0
  32. package/extension/libherb/include/array.h +33 -0
  33. package/extension/libherb/include/ast_node.h +35 -0
  34. package/extension/libherb/include/ast_nodes.h +303 -0
  35. package/extension/libherb/include/ast_pretty_print.h +17 -0
  36. package/extension/libherb/include/buffer.h +36 -0
  37. package/extension/libherb/include/errors.h +125 -0
  38. package/extension/libherb/include/extract.h +20 -0
  39. package/extension/libherb/include/herb.h +32 -0
  40. package/extension/libherb/include/html_util.h +13 -0
  41. package/extension/libherb/include/io.h +9 -0
  42. package/extension/libherb/include/json.h +28 -0
  43. package/extension/libherb/include/lexer.h +13 -0
  44. package/extension/libherb/include/lexer_peek_helpers.h +23 -0
  45. package/extension/libherb/include/lexer_struct.h +32 -0
  46. package/extension/libherb/include/location.h +25 -0
  47. package/extension/libherb/include/macros.h +10 -0
  48. package/extension/libherb/include/memory.h +12 -0
  49. package/extension/libherb/include/parser.h +22 -0
  50. package/extension/libherb/include/parser_helpers.h +33 -0
  51. package/extension/libherb/include/position.h +22 -0
  52. package/extension/libherb/include/pretty_print.h +53 -0
  53. package/extension/libherb/include/prism_helpers.h +18 -0
  54. package/extension/libherb/include/range.h +23 -0
  55. package/extension/libherb/include/ruby_parser.h +6 -0
  56. package/extension/libherb/include/token.h +25 -0
  57. package/extension/libherb/include/token_matchers.h +21 -0
  58. package/extension/libherb/include/token_struct.h +51 -0
  59. package/extension/libherb/include/util.h +25 -0
  60. package/extension/libherb/include/version.h +6 -0
  61. package/extension/libherb/include/visitor.h +11 -0
  62. package/extension/libherb/io.c +30 -0
  63. package/extension/libherb/json.c +205 -0
  64. package/extension/libherb/lexer.c +284 -0
  65. package/extension/libherb/lexer_peek_helpers.c +59 -0
  66. package/extension/libherb/location.c +41 -0
  67. package/extension/libherb/main.c +162 -0
  68. package/extension/libherb/memory.c +53 -0
  69. package/extension/libherb/parser.c +704 -0
  70. package/extension/libherb/parser_helpers.c +161 -0
  71. package/extension/libherb/position.c +33 -0
  72. package/extension/libherb/pretty_print.c +242 -0
  73. package/extension/libherb/prism_helpers.c +50 -0
  74. package/extension/libherb/range.c +38 -0
  75. package/extension/libherb/ruby_parser.c +47 -0
  76. package/extension/libherb/token.c +194 -0
  77. package/extension/libherb/token_matchers.c +32 -0
  78. package/extension/libherb/util.c +128 -0
  79. package/extension/libherb/visitor.c +321 -0
  80. package/extension/nodes.cpp +1060 -0
  81. package/extension/nodes.h +44 -0
  82. package/extension/prism/include/prism/ast.h +7964 -0
  83. package/extension/prism/include/prism/defines.h +260 -0
  84. package/extension/prism/include/prism/diagnostic.h +451 -0
  85. package/extension/prism/include/prism/encoding.h +283 -0
  86. package/extension/prism/include/prism/node.h +129 -0
  87. package/extension/prism/include/prism/options.h +442 -0
  88. package/extension/prism/include/prism/pack.h +163 -0
  89. package/extension/prism/include/prism/parser.h +933 -0
  90. package/extension/prism/include/prism/prettyprint.h +34 -0
  91. package/extension/prism/include/prism/regexp.h +43 -0
  92. package/extension/prism/include/prism/static_literals.h +121 -0
  93. package/extension/prism/include/prism/util/pm_buffer.h +228 -0
  94. package/extension/prism/include/prism/util/pm_char.h +204 -0
  95. package/extension/prism/include/prism/util/pm_constant_pool.h +218 -0
  96. package/extension/prism/include/prism/util/pm_integer.h +126 -0
  97. package/extension/prism/include/prism/util/pm_list.h +97 -0
  98. package/extension/prism/include/prism/util/pm_memchr.h +29 -0
  99. package/extension/prism/include/prism/util/pm_newline_list.h +113 -0
  100. package/extension/prism/include/prism/util/pm_string.h +190 -0
  101. package/extension/prism/include/prism/util/pm_strncasecmp.h +32 -0
  102. package/extension/prism/include/prism/util/pm_strpbrk.h +46 -0
  103. package/extension/prism/include/prism/version.h +29 -0
  104. package/extension/prism/include/prism.h +383 -0
  105. package/extension/prism/src/diagnostic.c +842 -0
  106. package/extension/prism/src/encoding.c +5235 -0
  107. package/extension/prism/src/node.c +8674 -0
  108. package/extension/prism/src/options.c +328 -0
  109. package/extension/prism/src/pack.c +509 -0
  110. package/extension/prism/src/prettyprint.c +8939 -0
  111. package/extension/prism/src/prism.c +23184 -0
  112. package/extension/prism/src/regexp.c +790 -0
  113. package/extension/prism/src/serialize.c +2266 -0
  114. package/extension/prism/src/static_literals.c +617 -0
  115. package/extension/prism/src/token_type.c +701 -0
  116. package/extension/prism/src/util/pm_buffer.c +357 -0
  117. package/extension/prism/src/util/pm_char.c +318 -0
  118. package/extension/prism/src/util/pm_constant_pool.c +342 -0
  119. package/extension/prism/src/util/pm_integer.c +670 -0
  120. package/extension/prism/src/util/pm_list.c +49 -0
  121. package/extension/prism/src/util/pm_memchr.c +35 -0
  122. package/extension/prism/src/util/pm_newline_list.c +125 -0
  123. package/extension/prism/src/util/pm_string.c +383 -0
  124. package/extension/prism/src/util/pm_strncasecmp.c +36 -0
  125. package/extension/prism/src/util/pm_strpbrk.c +206 -0
  126. package/package.json +74 -0
  127. package/src/index-cjs.cts +22 -0
  128. package/src/index-esm.mts +28 -0
  129. package/src/node-backend.ts +9 -0
  130. package/src/types/global.d.ts +18 -0
  131. package/src/util.ts +35 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,3 @@
1
+ ## 0.1.0 (2025-04-15)
2
+
3
+ This was a version bump only for @herb-tools/node to align it with other projects, there were no code changes.
package/README.md ADDED
@@ -0,0 +1,9 @@
1
+ # `@herb-tools/node`
2
+
3
+ ## Building
4
+
5
+ Run `nx build node` to build the library.
6
+
7
+ ## Running unit tests
8
+
9
+ Run `nx test node` to execute the unit tests via [Vitest](https://vitest.dev/).
package/binding.gyp ADDED
@@ -0,0 +1,98 @@
1
+ {
2
+ "targets": [
3
+ {
4
+ "target_name": "<(module_name)",
5
+ "product_dir": "<(module_path)",
6
+ "sources": [
7
+ "./extension/error_helpers.cpp",
8
+ "./extension/extension_helpers.cpp",
9
+ "./extension/herb.cpp",
10
+ "./extension/nodes.cpp",
11
+
12
+ # Herb main source files
13
+ "./extension/libherb/analyze_helpers.c",
14
+ "./extension/libherb/analyze.c",
15
+ "./extension/libherb/analyzed_ruby.c",
16
+ "./extension/libherb/array.c",
17
+ "./extension/libherb/ast_node.c",
18
+ "./extension/libherb/ast_nodes.c",
19
+ "./extension/libherb/ast_pretty_print.c",
20
+ "./extension/libherb/buffer.c",
21
+ "./extension/libherb/errors.c",
22
+ "./extension/libherb/extract.c",
23
+ "./extension/libherb/herb.c",
24
+ "./extension/libherb/html_util.c",
25
+ "./extension/libherb/io.c",
26
+ "./extension/libherb/json.c",
27
+ "./extension/libherb/lexer_peek_helpers.c",
28
+ "./extension/libherb/lexer.c",
29
+ "./extension/libherb/location.c",
30
+ "./extension/libherb/memory.c",
31
+ "./extension/libherb/parser_helpers.c",
32
+ "./extension/libherb/parser.c",
33
+ "./extension/libherb/position.c",
34
+ "./extension/libherb/pretty_print.c",
35
+ "./extension/libherb/prism_helpers.c",
36
+ "./extension/libherb/range.c",
37
+ "./extension/libherb/token_matchers.c",
38
+ "./extension/libherb/token.c",
39
+ "./extension/libherb/util.c",
40
+ "./extension/libherb/visitor.c",
41
+
42
+ # Prism main source files
43
+ "./extension/prism/src/diagnostic.c",
44
+ "./extension/prism/src/encoding.c",
45
+ "./extension/prism/src/node.c",
46
+ "./extension/prism/src/options.c",
47
+ "./extension/prism/src/pack.c",
48
+ "./extension/prism/src/prettyprint.c",
49
+ "./extension/prism/src/prism.c",
50
+ "./extension/prism/src/regexp.c",
51
+ "./extension/prism/src/serialize.c",
52
+ "./extension/prism/src/static_literals.c",
53
+ "./extension/prism/src/token_type.c",
54
+
55
+ # Prism util source files
56
+ "./extension/prism/src/util/pm_buffer.c",
57
+ "./extension/prism/src/util/pm_char.c",
58
+ "./extension/prism/src/util/pm_constant_pool.c",
59
+ "./extension/prism/src/util/pm_integer.c",
60
+ "./extension/prism/src/util/pm_list.c",
61
+ "./extension/prism/src/util/pm_memchr.c",
62
+ "./extension/prism/src/util/pm_newline_list.c",
63
+ "./extension/prism/src/util/pm_string.c",
64
+ "./extension/prism/src/util/pm_strncasecmp.c",
65
+ "./extension/prism/src/util/pm_strpbrk.c"
66
+ ],
67
+ "include_dirs": [
68
+ "<!@(node -p \"require('node-addon-api').include\")",
69
+ "./extension/libherb",
70
+ "./extension/libherb/include",
71
+ "./extension/prism/include",
72
+ "./extension/prism/src",
73
+ "./extension/prism/src/util"
74
+ ],
75
+ "dependencies": [
76
+ "<!(node -p \"require('node-addon-api').gyp\")"
77
+ ],
78
+ "defines": [
79
+ "PRISM_EXPORT_SYMBOLS=static",
80
+ "PRISM_STATIC=1"
81
+ ],
82
+ "cflags": [
83
+ "-Wall",
84
+ "-Wextra"
85
+ ],
86
+ "xcode_settings": {
87
+ "GCC_ENABLE_CPP_EXCEPTIONS": "YES",
88
+ "CLANG_CXX_LIBRARY": "libc++",
89
+ "MACOSX_DEPLOYMENT_TARGET": "10.15"
90
+ },
91
+ "msvs_settings": {
92
+ "VCCLCompilerTool": {
93
+ "ExceptionHandling": 1
94
+ }
95
+ }
96
+ }
97
+ ]
98
+ }
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const path = require("path");
5
+ const binary = require("@mapbox/node-pre-gyp");
6
+ const { Visitor } = require("@herb-tools/core");
7
+ const { HerbBackendNode } = require("./node-backend.js");
8
+ const packagePath = path.resolve(__dirname, "../package.json");
9
+ const libherbPath = binary.find(packagePath);
10
+ const libHerbBinary = require(libherbPath);
11
+ /**
12
+ * An instance of the `Herb` class using a Node.js backend.
13
+ * This loads `libherb` in a Node.js C++ native extension.
14
+ */
15
+ const Herb = new HerbBackendNode(new Promise((resolve, _reject) => resolve(libHerbBinary)));
16
+ module.exports = {
17
+ Herb: Herb,
18
+ Visitor: Visitor,
19
+ };
20
+ //# sourceMappingURL=herb-node.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"herb-node.cjs","sources":["../src/index-cjs.cts"],"sourcesContent":["const path = require(\"path\")\nconst binary = require(\"@mapbox/node-pre-gyp\")\n\nconst { Visitor } = require(\"@herb-tools/core\")\nconst { HerbBackendNode } = require(\"./node-backend.js\")\n\nconst packagePath = path.resolve(__dirname, \"../package.json\")\nconst libherbPath = binary.find(packagePath)\nconst libHerbBinary = require(libherbPath)\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\nmodule.exports = {\n Herb: Herb,\n Visitor: Visitor,\n}\n"],"names":[],"mappings":";;;AAAA,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;AAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;AAE9C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC/C,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC;AAExD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC;AAC9D,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;AAC5C,MAAM,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC;AAE1C;;;AAGG;AACH,MAAM,IAAI,GAAG,IAAI,eAAe,CAC9B,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC,CAC1D;AAED,MAAM,CAAC,OAAO,GAAG;AACf,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,OAAO,EAAE,OAAO;CACjB;;"}
@@ -0,0 +1,33 @@
1
+ import { HerbBackend } from '@herb-tools/core';
2
+ export * from '@herb-tools/core';
3
+ import path from 'path';
4
+ import binary from '@mapbox/node-pre-gyp';
5
+ import { createRequire } from 'module';
6
+ import { fileURLToPath } from 'url';
7
+
8
+ var name = "@herb-tools/node";
9
+ var version = "0.1.0";
10
+ var packageJSON = {
11
+ name: name,
12
+ version: version};
13
+
14
+ class HerbBackendNode extends HerbBackend {
15
+ backendVersion() {
16
+ return `${packageJSON.name}@${packageJSON.version}`;
17
+ }
18
+ }
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");
24
+ const libherbPath = binary.find(packagePath);
25
+ const libHerbBinary = require(libherbPath);
26
+ /**
27
+ * An instance of the `Herb` class using a Node.js backend.
28
+ * This loads `libherb` in a Node.js C++ native extension.
29
+ */
30
+ const Herb = new HerbBackendNode(() => new Promise((resolve, _reject) => resolve(libHerbBinary)));
31
+
32
+ export { Herb, HerbBackendNode };
33
+ //# sourceMappingURL=herb-node.esm.js.map
@@ -0,0 +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;;AAEtD;;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;AACG,MAAA,IAAI,GAAG,IAAI,eAAe,CAC9B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;;;;"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ export * from "@herb-tools/core";
2
+ import { HerbBackendNode } from "./node-backend.js";
3
+ /**
4
+ * An instance of the `Herb` class using a Node.js backend.
5
+ * This loads `libherb` in a Node.js C++ native extension.
6
+ */
7
+ declare const Herb: HerbBackendNode;
8
+ export { Herb, HerbBackendNode };
@@ -0,0 +1,4 @@
1
+ import { HerbBackend } from "@herb-tools/core";
2
+ export declare class HerbBackendNode extends HerbBackend {
3
+ backendVersion(): string;
4
+ }
@@ -0,0 +1,2 @@
1
+ export declare function ensureFile(object: any): Promise<string>;
2
+ export declare function resolvePath(relativePath: string): string;
@@ -0,0 +1,340 @@
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/templates/javascript/packages/node/extension/error_helpers.cpp.erb
3
+
4
+ #include <node_api.h>
5
+ #include "error_helpers.h"
6
+ #include "extension_helpers.h"
7
+ #include "nodes.h"
8
+
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
+ #include "../extension/libherb/include/ast_node.h"
15
+ #include "../extension/libherb/include/ast_nodes.h"
16
+ }
17
+
18
+ napi_value ErrorFromCStruct(napi_env env, ERROR_T* error);
19
+ napi_value ErrorsArrayFromCArray(napi_env env, array_T* array);
20
+
21
+ napi_value UnexpectedErrorFromCStruct(napi_env env, UNEXPECTED_ERROR_T* unexpected_error) {
22
+ if (!unexpected_error) {
23
+ napi_value null_value;
24
+ napi_get_null(env, &null_value);
25
+ return null_value;
26
+ }
27
+
28
+ napi_value result;
29
+ napi_create_object(env, &result);
30
+
31
+ napi_value type = CreateString(env, error_type_to_string(&unexpected_error->base));
32
+ napi_set_named_property(env, result, "type", type);
33
+
34
+ napi_value message = CreateString(env, unexpected_error->base.message);
35
+ napi_set_named_property(env, result, "message", message);
36
+
37
+ napi_value location = CreateLocation(env, unexpected_error->base.location);
38
+ napi_set_named_property(env, result, "location", location);
39
+
40
+ napi_value description = CreateString(env, unexpected_error->description);
41
+ napi_set_named_property(env, result, "description", description);
42
+
43
+ napi_value expected = CreateString(env, unexpected_error->expected);
44
+ napi_set_named_property(env, result, "expected", expected);
45
+
46
+ napi_value found = CreateString(env, unexpected_error->found);
47
+ napi_set_named_property(env, result, "found", found);
48
+
49
+
50
+ return result;
51
+ }
52
+
53
+ napi_value UnexpectedTokenErrorFromCStruct(napi_env env, UNEXPECTED_TOKEN_ERROR_T* unexpected_token_error) {
54
+ if (!unexpected_token_error) {
55
+ napi_value null_value;
56
+ napi_get_null(env, &null_value);
57
+ return null_value;
58
+ }
59
+
60
+ napi_value result;
61
+ napi_create_object(env, &result);
62
+
63
+ napi_value type = CreateString(env, error_type_to_string(&unexpected_token_error->base));
64
+ napi_set_named_property(env, result, "type", type);
65
+
66
+ napi_value message = CreateString(env, unexpected_token_error->base.message);
67
+ napi_set_named_property(env, result, "message", message);
68
+
69
+ napi_value location = CreateLocation(env, unexpected_token_error->base.location);
70
+ napi_set_named_property(env, result, "location", location);
71
+
72
+ napi_value expected_type = CreateString(env, token_type_to_string(unexpected_token_error->expected_type));
73
+ napi_set_named_property(env, result, "expected_type", expected_type);
74
+
75
+ napi_value found = CreateToken(env, unexpected_token_error->found);
76
+ napi_set_named_property(env, result, "found", found);
77
+
78
+
79
+ return result;
80
+ }
81
+
82
+ napi_value MissingOpeningTagErrorFromCStruct(napi_env env, MISSING_OPENING_TAG_ERROR_T* missing_opening_tag_error) {
83
+ if (!missing_opening_tag_error) {
84
+ napi_value null_value;
85
+ napi_get_null(env, &null_value);
86
+ return null_value;
87
+ }
88
+
89
+ napi_value result;
90
+ napi_create_object(env, &result);
91
+
92
+ napi_value type = CreateString(env, error_type_to_string(&missing_opening_tag_error->base));
93
+ napi_set_named_property(env, result, "type", type);
94
+
95
+ napi_value message = CreateString(env, missing_opening_tag_error->base.message);
96
+ napi_set_named_property(env, result, "message", message);
97
+
98
+ napi_value location = CreateLocation(env, missing_opening_tag_error->base.location);
99
+ napi_set_named_property(env, result, "location", location);
100
+
101
+ napi_value closing_tag = CreateToken(env, missing_opening_tag_error->closing_tag);
102
+ napi_set_named_property(env, result, "closing_tag", closing_tag);
103
+
104
+
105
+ return result;
106
+ }
107
+
108
+ napi_value MissingClosingTagErrorFromCStruct(napi_env env, MISSING_CLOSING_TAG_ERROR_T* missing_closing_tag_error) {
109
+ if (!missing_closing_tag_error) {
110
+ napi_value null_value;
111
+ napi_get_null(env, &null_value);
112
+ return null_value;
113
+ }
114
+
115
+ napi_value result;
116
+ napi_create_object(env, &result);
117
+
118
+ napi_value type = CreateString(env, error_type_to_string(&missing_closing_tag_error->base));
119
+ napi_set_named_property(env, result, "type", type);
120
+
121
+ napi_value message = CreateString(env, missing_closing_tag_error->base.message);
122
+ napi_set_named_property(env, result, "message", message);
123
+
124
+ napi_value location = CreateLocation(env, missing_closing_tag_error->base.location);
125
+ napi_set_named_property(env, result, "location", location);
126
+
127
+ napi_value opening_tag = CreateToken(env, missing_closing_tag_error->opening_tag);
128
+ napi_set_named_property(env, result, "opening_tag", opening_tag);
129
+
130
+
131
+ return result;
132
+ }
133
+
134
+ napi_value TagNamesMismatchErrorFromCStruct(napi_env env, TAG_NAMES_MISMATCH_ERROR_T* tag_names_mismatch_error) {
135
+ if (!tag_names_mismatch_error) {
136
+ napi_value null_value;
137
+ napi_get_null(env, &null_value);
138
+ return null_value;
139
+ }
140
+
141
+ napi_value result;
142
+ napi_create_object(env, &result);
143
+
144
+ napi_value type = CreateString(env, error_type_to_string(&tag_names_mismatch_error->base));
145
+ napi_set_named_property(env, result, "type", type);
146
+
147
+ napi_value message = CreateString(env, tag_names_mismatch_error->base.message);
148
+ napi_set_named_property(env, result, "message", message);
149
+
150
+ napi_value location = CreateLocation(env, tag_names_mismatch_error->base.location);
151
+ napi_set_named_property(env, result, "location", location);
152
+
153
+ napi_value opening_tag = CreateToken(env, tag_names_mismatch_error->opening_tag);
154
+ napi_set_named_property(env, result, "opening_tag", opening_tag);
155
+
156
+ napi_value closing_tag = CreateToken(env, tag_names_mismatch_error->closing_tag);
157
+ napi_set_named_property(env, result, "closing_tag", closing_tag);
158
+
159
+
160
+ return result;
161
+ }
162
+
163
+ napi_value QuotesMismatchErrorFromCStruct(napi_env env, QUOTES_MISMATCH_ERROR_T* quotes_mismatch_error) {
164
+ if (!quotes_mismatch_error) {
165
+ napi_value null_value;
166
+ napi_get_null(env, &null_value);
167
+ return null_value;
168
+ }
169
+
170
+ napi_value result;
171
+ napi_create_object(env, &result);
172
+
173
+ napi_value type = CreateString(env, error_type_to_string(&quotes_mismatch_error->base));
174
+ napi_set_named_property(env, result, "type", type);
175
+
176
+ napi_value message = CreateString(env, quotes_mismatch_error->base.message);
177
+ napi_set_named_property(env, result, "message", message);
178
+
179
+ napi_value location = CreateLocation(env, quotes_mismatch_error->base.location);
180
+ napi_set_named_property(env, result, "location", location);
181
+
182
+ napi_value opening_quote = CreateToken(env, quotes_mismatch_error->opening_quote);
183
+ napi_set_named_property(env, result, "opening_quote", opening_quote);
184
+
185
+ napi_value closing_quote = CreateToken(env, quotes_mismatch_error->closing_quote);
186
+ napi_set_named_property(env, result, "closing_quote", closing_quote);
187
+
188
+
189
+ return result;
190
+ }
191
+
192
+ napi_value VoidElementClosingTagErrorFromCStruct(napi_env env, VOID_ELEMENT_CLOSING_TAG_ERROR_T* void_element_closing_tag_error) {
193
+ if (!void_element_closing_tag_error) {
194
+ napi_value null_value;
195
+ napi_get_null(env, &null_value);
196
+ return null_value;
197
+ }
198
+
199
+ napi_value result;
200
+ napi_create_object(env, &result);
201
+
202
+ napi_value type = CreateString(env, error_type_to_string(&void_element_closing_tag_error->base));
203
+ napi_set_named_property(env, result, "type", type);
204
+
205
+ napi_value message = CreateString(env, void_element_closing_tag_error->base.message);
206
+ napi_set_named_property(env, result, "message", message);
207
+
208
+ napi_value location = CreateLocation(env, void_element_closing_tag_error->base.location);
209
+ napi_set_named_property(env, result, "location", location);
210
+
211
+ napi_value tag_name = CreateToken(env, void_element_closing_tag_error->tag_name);
212
+ napi_set_named_property(env, result, "tag_name", tag_name);
213
+
214
+ napi_value expected = CreateString(env, void_element_closing_tag_error->expected);
215
+ napi_set_named_property(env, result, "expected", expected);
216
+
217
+ napi_value found = CreateString(env, void_element_closing_tag_error->found);
218
+ napi_set_named_property(env, result, "found", found);
219
+
220
+
221
+ return result;
222
+ }
223
+
224
+ napi_value UnclosedElementErrorFromCStruct(napi_env env, UNCLOSED_ELEMENT_ERROR_T* unclosed_element_error) {
225
+ if (!unclosed_element_error) {
226
+ napi_value null_value;
227
+ napi_get_null(env, &null_value);
228
+ return null_value;
229
+ }
230
+
231
+ napi_value result;
232
+ napi_create_object(env, &result);
233
+
234
+ napi_value type = CreateString(env, error_type_to_string(&unclosed_element_error->base));
235
+ napi_set_named_property(env, result, "type", type);
236
+
237
+ napi_value message = CreateString(env, unclosed_element_error->base.message);
238
+ napi_set_named_property(env, result, "message", message);
239
+
240
+ napi_value location = CreateLocation(env, unclosed_element_error->base.location);
241
+ napi_set_named_property(env, result, "location", location);
242
+
243
+ napi_value opening_tag = CreateToken(env, unclosed_element_error->opening_tag);
244
+ napi_set_named_property(env, result, "opening_tag", opening_tag);
245
+
246
+
247
+ return result;
248
+ }
249
+
250
+ napi_value RubyParseErrorFromCStruct(napi_env env, RUBY_PARSE_ERROR_T* ruby_parse_error) {
251
+ if (!ruby_parse_error) {
252
+ napi_value null_value;
253
+ napi_get_null(env, &null_value);
254
+ return null_value;
255
+ }
256
+
257
+ napi_value result;
258
+ napi_create_object(env, &result);
259
+
260
+ napi_value type = CreateString(env, error_type_to_string(&ruby_parse_error->base));
261
+ napi_set_named_property(env, result, "type", type);
262
+
263
+ napi_value message = CreateString(env, ruby_parse_error->base.message);
264
+ napi_set_named_property(env, result, "message", message);
265
+
266
+ napi_value location = CreateLocation(env, ruby_parse_error->base.location);
267
+ napi_set_named_property(env, result, "location", location);
268
+
269
+ napi_value error_message = CreateString(env, ruby_parse_error->error_message);
270
+ napi_set_named_property(env, result, "error_message", error_message);
271
+
272
+ napi_value diagnostic_id = CreateString(env, ruby_parse_error->diagnostic_id);
273
+ napi_set_named_property(env, result, "diagnostic_id", diagnostic_id);
274
+
275
+ napi_value level = CreateString(env, ruby_parse_error->level);
276
+ napi_set_named_property(env, result, "level", level);
277
+
278
+
279
+ return result;
280
+ }
281
+
282
+
283
+ napi_value ErrorsArrayFromCArray(napi_env env, array_T* array) {
284
+ napi_value result;
285
+ napi_create_array(env, &result);
286
+
287
+ if (array) {
288
+ for (size_t i = 0; i < array_size(array); i++) {
289
+ ERROR_T* error = (ERROR_T*) array_get(array, i);
290
+ if (error) {
291
+ napi_value js_error = ErrorFromCStruct(env, error);
292
+ napi_set_element(env, result, i, js_error);
293
+ }
294
+ }
295
+ }
296
+
297
+ return result;
298
+ }
299
+
300
+ napi_value ErrorFromCStruct(napi_env env, ERROR_T* error) {
301
+ if (!error) {
302
+ napi_value null_value;
303
+ napi_get_null(env, &null_value);
304
+ return null_value;
305
+ }
306
+
307
+ switch (error->type) {
308
+ case UNEXPECTED_ERROR:
309
+ return UnexpectedErrorFromCStruct(env, (UNEXPECTED_ERROR_T*) error);
310
+ break;
311
+ case UNEXPECTED_TOKEN_ERROR:
312
+ return UnexpectedTokenErrorFromCStruct(env, (UNEXPECTED_TOKEN_ERROR_T*) error);
313
+ break;
314
+ case MISSING_OPENING_TAG_ERROR:
315
+ return MissingOpeningTagErrorFromCStruct(env, (MISSING_OPENING_TAG_ERROR_T*) error);
316
+ break;
317
+ case MISSING_CLOSING_TAG_ERROR:
318
+ return MissingClosingTagErrorFromCStruct(env, (MISSING_CLOSING_TAG_ERROR_T*) error);
319
+ break;
320
+ case TAG_NAMES_MISMATCH_ERROR:
321
+ return TagNamesMismatchErrorFromCStruct(env, (TAG_NAMES_MISMATCH_ERROR_T*) error);
322
+ break;
323
+ case QUOTES_MISMATCH_ERROR:
324
+ return QuotesMismatchErrorFromCStruct(env, (QUOTES_MISMATCH_ERROR_T*) error);
325
+ break;
326
+ case VOID_ELEMENT_CLOSING_TAG_ERROR:
327
+ return VoidElementClosingTagErrorFromCStruct(env, (VOID_ELEMENT_CLOSING_TAG_ERROR_T*) error);
328
+ break;
329
+ case UNCLOSED_ELEMENT_ERROR:
330
+ return UnclosedElementErrorFromCStruct(env, (UNCLOSED_ELEMENT_ERROR_T*) error);
331
+ break;
332
+ case RUBY_PARSE_ERROR:
333
+ return RubyParseErrorFromCStruct(env, (RUBY_PARSE_ERROR_T*) error);
334
+ break;
335
+ default:
336
+ napi_value null_value;
337
+ napi_get_null(env, &null_value);
338
+ return null_value;
339
+ }
340
+ }
@@ -0,0 +1,26 @@
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/templates/javascript/packages/node/extension/error_helpers.h.erb
3
+
4
+ #ifndef HERB_EXTENSION_ERRORS_H
5
+ #define HERB_EXTENSION_ERRORS_H
6
+
7
+ #include <node_api.h>
8
+
9
+ extern "C" {
10
+ #include "../extension/libherb/include/herb.h"
11
+ }
12
+
13
+ napi_value ErrorFromCStruct(napi_env env, ERROR_T* error);
14
+ napi_value ErrorsArrayFromCArray(napi_env env, array_T* array);
15
+
16
+ napi_value UnexpectedErrorFromCStruct(napi_env env, UNEXPECTED_ERROR_T* unexpected_error);
17
+ napi_value UnexpectedTokenErrorFromCStruct(napi_env env, UNEXPECTED_TOKEN_ERROR_T* unexpected_token_error);
18
+ napi_value MissingOpeningTagErrorFromCStruct(napi_env env, MISSING_OPENING_TAG_ERROR_T* missing_opening_tag_error);
19
+ napi_value MissingClosingTagErrorFromCStruct(napi_env env, MISSING_CLOSING_TAG_ERROR_T* missing_closing_tag_error);
20
+ napi_value TagNamesMismatchErrorFromCStruct(napi_env env, TAG_NAMES_MISMATCH_ERROR_T* tag_names_mismatch_error);
21
+ napi_value QuotesMismatchErrorFromCStruct(napi_env env, QUOTES_MISMATCH_ERROR_T* quotes_mismatch_error);
22
+ napi_value VoidElementClosingTagErrorFromCStruct(napi_env env, VOID_ELEMENT_CLOSING_TAG_ERROR_T* void_element_closing_tag_error);
23
+ napi_value UnclosedElementErrorFromCStruct(napi_env env, UNCLOSED_ELEMENT_ERROR_T* unclosed_element_error);
24
+ napi_value RubyParseErrorFromCStruct(napi_env env, RUBY_PARSE_ERROR_T* ruby_parse_error);
25
+
26
+ #endif