@apexdevtools/apex-parser 5.0.0-beta.5 → 5.1.0-beta.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 (79) hide show
  1. package/CHANGELOG.md +13 -1
  2. package/README.md +55 -4
  3. package/dist/browser/apex-parser.mjs +64579 -0
  4. package/dist/browser/apex-parser.mjs.map +1 -0
  5. package/dist/browser/apex-parser.umd.js +64784 -0
  6. package/dist/browser/apex-parser.umd.js.map +1 -0
  7. package/dist/cjs/ApexErrorListener.cjs +31 -0
  8. package/dist/cjs/ApexErrorListener.cjs.map +1 -0
  9. package/dist/cjs/ApexParserFactory.cjs +83 -0
  10. package/dist/cjs/ApexParserFactory.cjs.map +1 -0
  11. package/dist/cjs/CaseInsensitiveInputStream.cjs +30 -0
  12. package/dist/cjs/CaseInsensitiveInputStream.cjs.map +1 -0
  13. package/dist/cjs/Check.cjs +172 -0
  14. package/dist/cjs/Check.cjs.map +1 -0
  15. package/dist/cjs/antlr/ApexLexer.cjs +23244 -0
  16. package/dist/cjs/antlr/ApexLexer.cjs.map +1 -0
  17. package/dist/cjs/antlr/ApexParser.cjs +38369 -0
  18. package/dist/cjs/antlr/ApexParser.cjs.map +1 -0
  19. package/dist/cjs/antlr/ApexParserListener.cjs +1915 -0
  20. package/dist/cjs/antlr/ApexParserListener.cjs.map +1 -0
  21. package/dist/cjs/antlr/ApexParserVisitor.cjs +1147 -0
  22. package/dist/cjs/antlr/ApexParserVisitor.cjs.map +1 -0
  23. package/dist/cjs/index.cjs +214 -0
  24. package/dist/cjs/index.cjs.map +1 -0
  25. package/dist/esm/ApexErrorListener.js +27 -0
  26. package/dist/esm/ApexErrorListener.js.map +1 -0
  27. package/dist/esm/ApexParserFactory.js +78 -0
  28. package/dist/esm/ApexParserFactory.js.map +1 -0
  29. package/dist/esm/CaseInsensitiveInputStream.js +28 -0
  30. package/dist/esm/CaseInsensitiveInputStream.js.map +1 -0
  31. package/dist/esm/Check.js +169 -0
  32. package/dist/esm/Check.js.map +1 -0
  33. package/dist/esm/antlr/ApexLexer.js +23240 -0
  34. package/dist/esm/antlr/ApexLexer.js.map +1 -0
  35. package/dist/esm/antlr/ApexParser.js +38179 -0
  36. package/dist/esm/antlr/ApexParser.js.map +1 -0
  37. package/dist/esm/antlr/ApexParserListener.js +1911 -0
  38. package/dist/esm/antlr/ApexParserListener.js.map +1 -0
  39. package/dist/esm/antlr/ApexParserVisitor.js +1143 -0
  40. package/dist/esm/antlr/ApexParserVisitor.js.map +1 -0
  41. package/dist/esm/index.js +9 -0
  42. package/dist/esm/index.js.map +1 -0
  43. package/dist/types/ApexErrorListener.d.cts +26 -0
  44. package/dist/{src → types}/ApexErrorListener.d.ts +4 -3
  45. package/dist/types/ApexParserFactory.d.cts +81 -0
  46. package/dist/{src → types}/ApexParserFactory.d.ts +12 -0
  47. package/dist/types/CaseInsensitiveInputStream.d.ts +14 -0
  48. package/dist/types/Check.d.ts +36 -0
  49. package/dist/types/antlr/ApexLexer.d.cts +275 -0
  50. package/dist/{src → types}/antlr/ApexLexer.d.ts +54 -53
  51. package/dist/types/antlr/ApexParser.d.cts +3126 -0
  52. package/dist/{src → types}/antlr/ApexParser.d.ts +113 -85
  53. package/dist/{src/antlr/ApexParserListener.js → types/antlr/ApexParserListener.d.cts} +568 -366
  54. package/dist/{src → types}/antlr/ApexParserListener.d.ts +22 -0
  55. package/dist/{src/antlr/ApexParserVisitor.js → types/antlr/ApexParserVisitor.d.cts} +379 -185
  56. package/dist/{src → types}/antlr/ApexParserVisitor.d.ts +14 -0
  57. package/dist/types/index.browser.d.cts +8 -0
  58. package/dist/types/index.browser.d.ts +8 -0
  59. package/dist/types/index.d.ts +9 -0
  60. package/package.json +89 -21
  61. package/dist/src/ApexErrorListener.js +0 -61
  62. package/dist/src/ApexErrorListener.js.map +0 -1
  63. package/dist/src/ApexParserFactory.js +0 -116
  64. package/dist/src/ApexParserFactory.js.map +0 -1
  65. package/dist/src/CaseInsensitiveInputStream.js +0 -64
  66. package/dist/src/CaseInsensitiveInputStream.js.map +0 -1
  67. package/dist/src/Check.js +0 -205
  68. package/dist/src/Check.js.map +0 -1
  69. package/dist/src/antlr/ApexLexer.js +0 -1573
  70. package/dist/src/antlr/ApexLexer.js.map +0 -1
  71. package/dist/src/antlr/ApexParser.js +0 -20786
  72. package/dist/src/antlr/ApexParser.js.map +0 -1
  73. package/dist/src/antlr/ApexParserListener.js.map +0 -1
  74. package/dist/src/antlr/ApexParserVisitor.js.map +0 -1
  75. package/dist/src/index.js +0 -37
  76. package/dist/src/index.js.map +0 -1
  77. /package/dist/{src/CaseInsensitiveInputStream.d.ts → types/CaseInsensitiveInputStream.d.cts} +0 -0
  78. /package/dist/{src/Check.d.ts → types/Check.d.cts} +0 -0
  79. /package/dist/{src/index.d.ts → types/index.d.cts} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,6 +1,18 @@
1
1
  # apex-parser - Changelog
2
2
 
3
- ## 5.0.0
3
+ ## 5.1.0-beta.1
4
+
5
+ - Allow functions in `GROUP BY` clause of SOQL queries
6
+ - Support Apex bind variables (`:expr`) in SOSL `WITH DIVISION` clause
7
+ - Support fully-qualified enum values in switch `when` clauses, e.g. `when MyClass.MyEnum.VALUE`
8
+ - `whenLiteral` now matches `qualifiedName` in place of `id`, so bare enum values like `when VALUE` now parse as `WhenLiteral > qualifiedName > id` rather than `WhenLiteral > id` (AST shape change for tree-walking consumers)
9
+ - Support multi-line string literals (Salesforce Summer '26), e.g. `String json = '''<NL>{...}<NL>''';`
10
+ - New `MultilineStringLiteral` token, accepted alongside `StringLiteral` in literal/SOQL/SOSL contexts.
11
+ - Body must start on a new line after the opening `'''`, matching platform behaviour. Malformed forms like `'''abc'''` continue to lex as legacy `StringLiteral` tokens (`''`, `'abc'`, `''`); apex-ls consumes this pattern to surface a targeted diagnostic (apex-ls#443).
12
+ - Fix `npm run check` failing with `ERR_REQUIRE_ESM` on Node 20+ by switching the script from `require()` to dynamic `import()` (the package is `"type": "module"`).
13
+ - Update npm package build output to publish separate ESM, CommonJS, browser, and TypeScript declaration artifacts through the package `exports` map.
14
+
15
+ ## 5.0.0 - 2026-04-21
4
16
 
5
17
  ## General
6
18
 
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # apex-parser
2
2
 
3
- Parser for Salesforce Apex (including Triggers & inline SOQL/SOQL). This is based on an [ANTLR4](https://www.antlr.org/) grammar, see [`antlr/BaseApexParser.g4`](./antlr/BaseApexParser.g4). Currently packaged for Java and JavaScript/TypeScript targets.
3
+ Parser for Salesforce Apex (including triggers and inline SOQL/SOSL). This is based on an [ANTLR4](https://www.antlr.org/) grammar, see [`antlr/BaseApexParser.g4`](./antlr/BaseApexParser.g4). Currently packaged for Java and JavaScript/TypeScript targets.
4
4
 
5
5
  The packages include ANTLR4 generated types plus optional extras for convenience. The TypeScript package exports type aliases for ANTLR types, while both packages have abstractions like `ApexParserFactory` and `ApexErrorListener`. There are minimal examples below and in the test classes.
6
6
 
@@ -19,10 +19,30 @@ The packages include ANTLR4 generated types plus optional extras for convenience
19
19
  ### NPM
20
20
 
21
21
  ```sh
22
- # Optionally install `antlr4` to use runtime types
23
22
  npm i @apexdevtools/apex-parser
24
23
  ```
25
24
 
25
+ The npm package ships multiple JavaScript outputs:
26
+
27
+ - ESM for modern Node and bundlers, selected by `import`.
28
+ - CommonJS for `require`.
29
+ - A browser ESM bundle, selected by browser-aware bundlers.
30
+ - TypeScript declarations for the root package and exported subpaths.
31
+
32
+ These are exposed through the package `exports` map, so most consumers should import from the package name rather than from `dist` paths:
33
+
34
+ ```typescript
35
+ import { ApexParserFactory } from "@apexdevtools/apex-parser";
36
+ ```
37
+
38
+ CommonJS consumers can use `require`:
39
+
40
+ ```javascript
41
+ const { ApexParserFactory } = require("@apexdevtools/apex-parser");
42
+ ```
43
+
44
+ The browser bundle includes the parser APIs, but excludes Node-only file checking helpers such as `check` and `checkProject`.
45
+
26
46
  ## Usage
27
47
 
28
48
  `ApexParser` entry points to access tree:
@@ -35,7 +55,12 @@ npm i @apexdevtools/apex-parser
35
55
  ### Explore Parse Tree (TypeScript)
36
56
 
37
57
  ```typescript
38
- import { ApexParserFactory, ApexParserBaseVisitor } from "@apexdevtools/apex-parser";
58
+ import {
59
+ ApexParserBaseListener,
60
+ ApexParserBaseVisitor,
61
+ ApexParseTreeWalker,
62
+ ApexParserFactory,
63
+ } from "@apexdevtools/apex-parser";
39
64
 
40
65
  const parser = ApexParserFactory.createParser("public class Hello {}");
41
66
 
@@ -57,6 +82,32 @@ const listener = new Listener();
57
82
  ApexParseTreeWalker.DEFAULT.walk(listener, parser.compilationUnit());
58
83
  ```
59
84
 
85
+ ### Capturing syntax errors
86
+
87
+ Lexer errors (e.g. invalid string escape sequences) are only reported to listeners attached to the lexer, while parser errors are only reported to listeners attached to the parser. To capture both from a single listener, use `createLexerAndParser`, which wires the listener to both:
88
+
89
+ ```typescript
90
+ import { ApexParserFactory, ApexErrorListener } from "@apexdevtools/apex-parser";
91
+
92
+ class MyListener extends ApexErrorListener {
93
+ apexSyntaxError(line: number, column: number, msg: string): void {
94
+ console.log(`${line}:${column} ${msg}`);
95
+ }
96
+ }
97
+
98
+ const { parser } = ApexParserFactory.createLexerAndParser(source, new MyListener());
99
+ parser.compilationUnit();
100
+ ```
101
+
102
+ The Java API is equivalent:
103
+
104
+ ```java
105
+ ApexErrorListener listener = new MyListener();
106
+ LexerAndParser pair = ApexParserFactory.createLexerAndParser(
107
+ CharStreams.fromString(source), listener);
108
+ pair.getParser().compilationUnit();
109
+ ```
110
+
60
111
  ### SOSL FIND quoting
61
112
 
62
113
  SOSL FIND uses ' as a quoting character when embedded in Apex, in the API braces are used:
@@ -73,7 +124,7 @@ To parse the API format there is an alternative parser rule, `soslLiteralAlt`, t
73
124
 
74
125
  - JDK 11+ (for ANTLR tool)
75
126
  - Maven
76
- - NodeJS LTS
127
+ - Node.js ^20.19.0, ^22.13.0, or >=24
77
128
 
78
129
  ### Building
79
130