@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.
- package/CHANGELOG.md +13 -1
- package/README.md +55 -4
- package/dist/browser/apex-parser.mjs +64579 -0
- package/dist/browser/apex-parser.mjs.map +1 -0
- package/dist/browser/apex-parser.umd.js +64784 -0
- package/dist/browser/apex-parser.umd.js.map +1 -0
- package/dist/cjs/ApexErrorListener.cjs +31 -0
- package/dist/cjs/ApexErrorListener.cjs.map +1 -0
- package/dist/cjs/ApexParserFactory.cjs +83 -0
- package/dist/cjs/ApexParserFactory.cjs.map +1 -0
- package/dist/cjs/CaseInsensitiveInputStream.cjs +30 -0
- package/dist/cjs/CaseInsensitiveInputStream.cjs.map +1 -0
- package/dist/cjs/Check.cjs +172 -0
- package/dist/cjs/Check.cjs.map +1 -0
- package/dist/cjs/antlr/ApexLexer.cjs +23244 -0
- package/dist/cjs/antlr/ApexLexer.cjs.map +1 -0
- package/dist/cjs/antlr/ApexParser.cjs +38369 -0
- package/dist/cjs/antlr/ApexParser.cjs.map +1 -0
- package/dist/cjs/antlr/ApexParserListener.cjs +1915 -0
- package/dist/cjs/antlr/ApexParserListener.cjs.map +1 -0
- package/dist/cjs/antlr/ApexParserVisitor.cjs +1147 -0
- package/dist/cjs/antlr/ApexParserVisitor.cjs.map +1 -0
- package/dist/cjs/index.cjs +214 -0
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/esm/ApexErrorListener.js +27 -0
- package/dist/esm/ApexErrorListener.js.map +1 -0
- package/dist/esm/ApexParserFactory.js +78 -0
- package/dist/esm/ApexParserFactory.js.map +1 -0
- package/dist/esm/CaseInsensitiveInputStream.js +28 -0
- package/dist/esm/CaseInsensitiveInputStream.js.map +1 -0
- package/dist/esm/Check.js +169 -0
- package/dist/esm/Check.js.map +1 -0
- package/dist/esm/antlr/ApexLexer.js +23240 -0
- package/dist/esm/antlr/ApexLexer.js.map +1 -0
- package/dist/esm/antlr/ApexParser.js +38179 -0
- package/dist/esm/antlr/ApexParser.js.map +1 -0
- package/dist/esm/antlr/ApexParserListener.js +1911 -0
- package/dist/esm/antlr/ApexParserListener.js.map +1 -0
- package/dist/esm/antlr/ApexParserVisitor.js +1143 -0
- package/dist/esm/antlr/ApexParserVisitor.js.map +1 -0
- package/dist/esm/index.js +9 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/types/ApexErrorListener.d.cts +26 -0
- package/dist/{src → types}/ApexErrorListener.d.ts +4 -3
- package/dist/types/ApexParserFactory.d.cts +81 -0
- package/dist/{src → types}/ApexParserFactory.d.ts +12 -0
- package/dist/types/CaseInsensitiveInputStream.d.ts +14 -0
- package/dist/types/Check.d.ts +36 -0
- package/dist/types/antlr/ApexLexer.d.cts +275 -0
- package/dist/{src → types}/antlr/ApexLexer.d.ts +54 -53
- package/dist/types/antlr/ApexParser.d.cts +3126 -0
- package/dist/{src → types}/antlr/ApexParser.d.ts +113 -85
- package/dist/{src/antlr/ApexParserListener.js → types/antlr/ApexParserListener.d.cts} +568 -366
- package/dist/{src → types}/antlr/ApexParserListener.d.ts +22 -0
- package/dist/{src/antlr/ApexParserVisitor.js → types/antlr/ApexParserVisitor.d.cts} +379 -185
- package/dist/{src → types}/antlr/ApexParserVisitor.d.ts +14 -0
- package/dist/types/index.browser.d.cts +8 -0
- package/dist/types/index.browser.d.ts +8 -0
- package/dist/types/index.d.ts +9 -0
- package/package.json +89 -21
- package/dist/src/ApexErrorListener.js +0 -61
- package/dist/src/ApexErrorListener.js.map +0 -1
- package/dist/src/ApexParserFactory.js +0 -116
- package/dist/src/ApexParserFactory.js.map +0 -1
- package/dist/src/CaseInsensitiveInputStream.js +0 -64
- package/dist/src/CaseInsensitiveInputStream.js.map +0 -1
- package/dist/src/Check.js +0 -205
- package/dist/src/Check.js.map +0 -1
- package/dist/src/antlr/ApexLexer.js +0 -1573
- package/dist/src/antlr/ApexLexer.js.map +0 -1
- package/dist/src/antlr/ApexParser.js +0 -20786
- package/dist/src/antlr/ApexParser.js.map +0 -1
- package/dist/src/antlr/ApexParserListener.js.map +0 -1
- package/dist/src/antlr/ApexParserVisitor.js.map +0 -1
- package/dist/src/index.js +0 -37
- package/dist/src/index.js.map +0 -1
- /package/dist/{src/CaseInsensitiveInputStream.d.ts → types/CaseInsensitiveInputStream.d.cts} +0 -0
- /package/dist/{src/Check.d.ts → types/Check.d.cts} +0 -0
- /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.
|
|
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
|
|
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 {
|
|
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
|
-
-
|
|
127
|
+
- Node.js ^20.19.0, ^22.13.0, or >=24
|
|
77
128
|
|
|
78
129
|
### Building
|
|
79
130
|
|