diff --git a/.github/workflows/Build-Base.yml b/.github/workflows/Build-Base.yml
new file mode 100644
index 0000000..42d11ce
--- /dev/null
+++ b/.github/workflows/Build-Base.yml
@@ -0,0 +1,33 @@
+name: Linux Java8/Node14 Build
+
+on:
+ push:
+ branches: [ master ]
+ pull_request:
+ branches: [ '**' ]
+ workflow_dispatch:
+
+jobs:
+ build:
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Set up Node 14
+ uses: actions/setup-node@v3
+ with:
+ node-version: 14
+
+ - name: Set up JDK 8
+ uses: actions/setup-java@v3
+ with:
+ distribution: 'temurin'
+ java-version: 8
+ cache: 'maven'
+
+ - name: Build & Test
+ run: |
+ npm ci
+ npm run build
diff --git a/.github/workflows/Build-Next.yml b/.github/workflows/Build-Next.yml
new file mode 100644
index 0000000..913a51d
--- /dev/null
+++ b/.github/workflows/Build-Next.yml
@@ -0,0 +1,33 @@
+name: Linux Java11/Node18 Build
+
+on:
+ push:
+ branches: [ master ]
+ pull_request:
+ branches: [ '**' ]
+ workflow_dispatch:
+
+jobs:
+ build:
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Set up Node 18
+ uses: actions/setup-node@v3
+ with:
+ node-version: 18
+
+ - name: Set up JDK 11
+ uses: actions/setup-java@v3
+ with:
+ distribution: 'temurin'
+ java-version: 11
+ cache: 'maven'
+
+ - name: Build & Test
+ run: |
+ npm ci
+ npm run build
diff --git a/.github/workflows/Build-Windows.yml b/.github/workflows/Build-Windows.yml
new file mode 100644
index 0000000..62c31a6
--- /dev/null
+++ b/.github/workflows/Build-Windows.yml
@@ -0,0 +1,33 @@
+name: Windows Build
+
+on:
+ push:
+ branches: [ master ]
+ pull_request:
+ branches: [ '**' ]
+ workflow_dispatch:
+
+jobs:
+ build:
+
+ runs-on: windows-latest
+
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Set up Node 14
+ uses: actions/setup-node@v3
+ with:
+ node-version: 14
+
+ - name: Set up JDK 8
+ uses: actions/setup-java@v3
+ with:
+ distribution: 'temurin'
+ java-version: 8
+ cache: 'maven'
+
+ - name: Build & Test
+ run: |
+ npm ci
+ npm run build
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c2658d7
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+node_modules/
diff --git a/README.md b/README.md
index 2ced0a6..c8aa3ea 100644
--- a/README.md
+++ b/README.md
@@ -1,15 +1,19 @@
-apex-parser
-===========
+> This repository has been **archived**. The new home for the Apex Parser is https://github.com/apex-dev-tools/apex-parser
-Parser for Salesforce Apex (including Triggers & inline SOQL/SOQL). This is based on an [ANTLR4](https://www.antlr.org/) grammar, see antlr/ApexParser.g4.
+-----
+
+# apex-parser
+
+Parser for Salesforce Apex (including Triggers & inline SOQL/SOQL). This is based on an [ANTLR4](https://www.antlr.org/) grammar, see antlr/ApexParser.g4.
There are two builds of the parser available, a NPM module for use with Node and a Maven package for use on JVMs.
-These builds just contain the Parser & Lexer and provides no further support for analysing the generated parse trees beyond what is provided by ANTLR4.
+These builds just contain the Parser & Lexer and provides no further support for analysing the generated parse trees beyond what is provided by ANTLR4.
-As Apex & SOQL/SOQL are case-insenstive languages you need to use the provided CaseInsensitiveInputStream for the parser to function correctly. When parsing Apex, inline SOQL/SOSL is automtaically parsed, but you can also parse SOQL/SOQL directly. You can find some minimal examples in the test classes.
+As Apex & SOQL/SOQL are case-insensitive languages you need to use the provided CaseInsensitiveInputStream for the parser to function correctly. When parsing Apex, inline SOQL/SOSL is automatically parsed, but you can also parse SOQL/SOQL directly. You can find some minimal examples in the test classes.
+
+## Example
-### Example
To parse a class file (NPM version):
let lexer = new ApexLexer(new CaseInsensitiveInputStream("public class Hello {}"))
@@ -20,46 +24,54 @@ To parse a class file (NPM version):
The 'context' is a CompilationUnitContext object which is the root of the parsed representation of the class. You can access the parse tree via functions on it.
-### antlr4ts versions
+## Unicode handling
+
+Prior to 2.12.0 the use of ANTLRInputStream for reading data in CaseInsensitiveStream would result character positions being given for UTF-16. The switch to CharStream input in 2.12.0 for JVM and 2.14.0 for node results in character positions reflecting Unicode code points.
-The npm module uses antlr4ts 0.5.0-alpha.4, this was updated from 0.5.0-alpha.3 in the 2.9.1 version. You should make
-sure that if you are using a matching verions of this dependency if you use it directly. To avoid issues you can
-import 'CommonTokenStream' & 'ParseTreeWalker' from 'apex-parser' instead of from antlr4ts.
+## antlr4ts versions
+
+The npm module uses antlr4ts 0.5.0-alpha.4, this was updated from 0.5.0-alpha.3 in the 2.9.1 version. You should make sure that if you are using a matching versions of this dependency if you use it directly. To avoid issues you can import 'CommonTokenStream' & 'ParseTreeWalker' from 'apex-parser' instead of from antlr4ts.
import { CommonTokenStream} from "apex-parser";
import { ParseTreeWalker } from "apex-parser";
-### SOSL FIND quoting
+## SOSL FIND quoting
+
SOSL FIND uses ' as a quoting character when embedded in Apex, in the API braces are used:
Find {something} RETURNING Account
To parse the API format there is an alternative parser rule, soslLiteralAlt, that you can use instead of soslLiteral. See SOSLParserTest for some examples of how these differ.
-### Packages
+## Packages
Maven
com.github.nawforce
apex-parser
- 2.15.0
+ 2.17.0
NPM
- "apex-parser": "^2.15.0"
+ "apex-parser": "^2.17.0"
+
+## Building
-### Building
To build both distributions:
+ npm ci
npm run build
-### History
+## History
+
+ 2.17.0 - Adds user/system mode on DML and within SOQL queries, thanks to Aaron Hurst.
+ 2.16.0 - Fixes for empty for & while loops, soql date formulas & distance functions, additional parenthesis on when clauses, SOSL find quoting, modulus support (removed), apexdoc newline handling - thanks to Aaron Hurst for most of these ;-)
2.15.0 - Revert 2.14.0 changes.
2.14.0 - Change npm api to replace ANTLRInputStream with CharStream, for Unicode char positions
2.13.0 - Fixes for negative numerics & Currency literals in SOQL
- 2.12.0 - Replace deprecated ANTLRINputStream, DateTime & Currency literals fixes (contrib Aaron Hurst)
+ 2.12.0 - Replace deprecated ANTLRInputStream, DateTime & Currency literals fixes (contrib Aaron Hurst)
2.11.0 - Fix for SOQL UPDATE VIEWSTAT/TRACKING & removal of class type arguments
2.10.0 - Allow type arguments on Classes (non-standard!)
2.9.2 - Generate .d.ts files
@@ -78,6 +90,6 @@ To build both distributions:
2.1.0 - Supports trigger parsing and switch statement parsing syntax was corrected
1.0.0 - Initial version
-### Source & Licenses
+## Source & Licenses
All the source code included uses a 3-clause BSD license. The only third-party component included is the Apex Antlr4 grammar originally from [Tooling-force.com](https://github.com/neowit/tooling-force.com), although this version used is now markedly different from the original.
diff --git a/antlr/ApexLexer.g4 b/antlr/ApexLexer.g4
index e753407..ea2e5b4 100644
--- a/antlr/ApexLexer.g4
+++ b/antlr/ApexLexer.g4
@@ -109,6 +109,10 @@ WITHOUT : 'without';
LIST : 'list';
MAP : 'map';
+// DML keywords
+SYSTEM : 'system';
+USER : 'user';
+
// Soql specific keywords
SELECT : 'select';
COUNT : 'count';
@@ -155,6 +159,8 @@ ABOVE : 'above';
BELOW : 'below';
ABOVE_OR_BELOW : 'above_or_below';
SECURITY_ENFORCED : 'security_enforced';
+SYSTEM_MODE : 'system_mode';
+USER_MODE : 'user_mode';
REFERENCE : 'reference';
CUBE : 'cube';
FORMAT : 'format';
@@ -162,6 +168,8 @@ TRACKING : 'tracking';
VIEWSTAT : 'viewstat';
CUSTOM : 'custom';
STANDARD : 'standard';
+DISTANCE : 'distance';
+GEOLOCATION : 'geolocation';
// SOQL Date functions
CALENDAR_MONTH : 'calendar_month';
@@ -193,30 +201,37 @@ LAST_90_DAYS : 'last_90_days';
NEXT_90_DAYS : 'next_90_days';
LAST_N_DAYS_N : 'last_n_days';
NEXT_N_DAYS_N : 'next_n_days';
+N_DAYS_AGO_N : 'n_days_ago';
NEXT_N_WEEKS_N : 'next_n_weeks';
LAST_N_WEEKS_N : 'last_n_weeks';
+N_WEEKS_AGO_N : 'n_weeks_ago';
NEXT_N_MONTHS_N : 'next_n_months';
LAST_N_MONTHS_N : 'last_n_months';
+N_MONTHS_AGO_N : 'n_months_ago';
THIS_QUARTER : 'this_quarter';
LAST_QUARTER : 'last_quarter';
NEXT_QUARTER : 'next_quarter';
NEXT_N_QUARTERS_N : 'next_n_quarters';
LAST_N_QUARTERS_N : 'last_n_quarters';
+N_QUARTERS_AGO_N : 'n_quarters_ago';
THIS_YEAR : 'this_year';
LAST_YEAR : 'last_year';
NEXT_YEAR : 'next_year';
NEXT_N_YEARS_N : 'next_n_years';
LAST_N_YEARS_N : 'last_n_years';
+N_YEARS_AGO_N : 'n_years_ago';
THIS_FISCAL_QUARTER : 'this_fiscal_quarter';
LAST_FISCAL_QUARTER : 'last_fiscal_quarter';
NEXT_FISCAL_QUARTER : 'next_fiscal_quarter';
NEXT_N_FISCAL_QUARTERS_N : 'next_n_fiscal_quarters';
LAST_N_FISCAL_QUARTERS_N : 'last_n_fiscal_quarters';
+N_FISCAL_QUARTERS_AGO_N : 'n_fiscal_quarters_ago';
THIS_FISCAL_YEAR : 'this_fiscal_year';
LAST_FISCAL_YEAR : 'last_fiscal_year';
NEXT_FISCAL_YEAR : 'next_fiscal_year';
NEXT_N_FISCAL_YEARS_N : 'next_n_fiscal_years';
LAST_N_FISCAL_YEARS_N : 'last_n_fiscal_years';
+N_FISCAL_YEARS_AGO_N : 'n_fiscal_years_ago';
// SOQL Date literal
DateLiteral: Digit Digit Digit Digit '-' Digit Digit '-' Digit Digit;
@@ -378,7 +393,6 @@ DIV : '/';
BITAND : '&';
BITOR : '|';
CARET : '^';
-MOD : '%';
MAPTO : '=>';
ADD_ASSIGN : '+=';
@@ -388,7 +402,6 @@ DIV_ASSIGN : '/=';
AND_ASSIGN : '&=';
OR_ASSIGN : '|=';
XOR_ASSIGN : '^=';
-MOD_ASSIGN : '%=';
LSHIFT_ASSIGN : '<<=';
RSHIFT_ASSIGN : '>>=';
URSHIFT_ASSIGN : '>>>=';
@@ -434,7 +447,7 @@ WS : [ \t\r\n\u000C]+ -> channel(WHITESPACE_CHANNEL)
;
DOC_COMMENT
- : '/**' [\r\n] .*? '*/' -> channel(COMMENT_CHANNEL)
+ : '/**' .*? '*/' -> channel(COMMENT_CHANNEL)
;
COMMENT
diff --git a/antlr/ApexParser.g4 b/antlr/ApexParser.g4
index 339e7d8..73b4427 100644
--- a/antlr/ApexParser.g4
+++ b/antlr/ApexParser.g4
@@ -50,10 +50,24 @@ triggerUnit
: TRIGGER id ON id LPAREN triggerCase (COMMA triggerCase)* RPAREN block EOF
;
+// v2 entry point for Apex trigger files, see README.md for details
+triggerUnit2
+ : TRIGGER id ON id LPAREN triggerCase (COMMA triggerCase)* RPAREN triggerBlock EOF
+ ;
+
triggerCase
: (BEFORE|AFTER) (INSERT|UPDATE|DELETE|UNDELETE)
;
+triggerBlock
+ : LBRACE triggerBlockMember* RBRACE
+ ;
+
+triggerBlockMember
+ : modifier* triggerMemberDeclaration
+ | statement
+ ;
+
// entry point for Apex class files
compilationUnit
: typeDeclaration EOF
@@ -133,6 +147,15 @@ memberDeclaration
| propertyDeclaration
;
+triggerMemberDeclaration
+ : methodDeclaration
+ | fieldDeclaration
+ | interfaceDeclaration
+ | classDeclaration
+ | enumDeclaration
+ | propertyDeclaration
+ ;
+
/* We use rule this even for void methods which cannot have [] after parameters.
This simplifies grammar and we can consider void to be a type, which
renders the [] matching as a context-sensitive issue or a semantic check
@@ -342,28 +365,32 @@ continueStatement
: CONTINUE SEMI
;
+accessLevel
+ : AS (SYSTEM | USER)
+ ;
+
insertStatement
- : INSERT expression SEMI
+ : INSERT accessLevel? expression SEMI
;
updateStatement
- : UPDATE expression SEMI
+ : UPDATE accessLevel? expression SEMI
;
deleteStatement
- : DELETE expression SEMI
+ : DELETE accessLevel? expression SEMI
;
undeleteStatement
- : UNDELETE expression SEMI
+ : UNDELETE accessLevel? expression SEMI
;
upsertStatement
- : UPSERT expression qualifiedName? SEMI
+ : UPSERT accessLevel? expression qualifiedName? SEMI
;
mergeStatement
- : MERGE expression expression SEMI
+ : MERGE accessLevel? expression expression SEMI
;
runAsStatement
@@ -436,7 +463,7 @@ expression
| expression (INC | DEC) # postOpExpression
| (ADD|SUB|INC|DEC) expression # preOpExpression
| (TILDE|BANG) expression # negExpression
- | expression (MUL|DIV|MOD) expression # arth1Expression
+ | expression (MUL|DIV) expression # arth1Expression
| expression (ADD|SUB) expression # arth2Expression
| expression (LT LT | GT GT GT | GT GT) expression # bitExpression
| expression (GT | LT) ASSIGN? expression # cmpExpression
@@ -460,7 +487,6 @@ expression
| RSHIFT_ASSIGN
| URSHIFT_ASSIGN
| LSHIFT_ASSIGN
- | MOD_ASSIGN
)
expression # assignExpression
;
@@ -470,6 +496,7 @@ primary
| SUPER # superPrimary
| literal # literalPrimary
| typeRef DOT CLASS # typeRefPrimary
+ | VOID DOT CLASS # voidPrimary
| id # idPrimary
| soqlLiteral # soqlPrimary
| soslLiteral # soslPrimary
@@ -578,7 +605,9 @@ subFieldList
subFieldEntry
: fieldName soqlId?
- | soqlFunction soqlId?;
+ | soqlFunction soqlId?
+ | typeOf
+ ;
soqlFieldsParameter
: ALL
@@ -609,6 +638,7 @@ soqlFunction
| WEEK_IN_MONTH LPAREN dateFieldName RPAREN
| WEEK_IN_YEAR LPAREN dateFieldName RPAREN
| FIELDS LPAREN soqlFieldsParameter RPAREN
+ | DISTANCE LPAREN locationValue COMMA locationValue COMMA StringLiteral RPAREN
;
dateFieldName
@@ -616,6 +646,17 @@ soqlFunction
| fieldName
;
+locationValue
+ : fieldName
+ | boundExpression
+ | GEOLOCATION LPAREN coordinateValue COMMA coordinateValue RPAREN
+ ;
+
+coordinateValue
+ : signedNumber
+ | boundExpression
+ ;
+
typeOf
: TYPEOF fieldName whenClause+ elseClause? END;
@@ -674,6 +715,8 @@ signedNumber
withClause
: WITH DATA CATEGORY filteringExpression
| WITH SECURITY_ENFORCED
+ | WITH SYSTEM_MODE
+ | WITH USER_MODE
| WITH logicalExpression;
filteringExpression
@@ -735,30 +778,37 @@ dateFormula
| NEXT_90_DAYS
| LAST_N_DAYS_N COLON signedInteger
| NEXT_N_DAYS_N COLON signedInteger
+ | N_DAYS_AGO_N COLON signedInteger
| NEXT_N_WEEKS_N COLON signedInteger
| LAST_N_WEEKS_N COLON signedInteger
+ | N_WEEKS_AGO_N COLON signedInteger
| NEXT_N_MONTHS_N COLON signedInteger
| LAST_N_MONTHS_N COLON signedInteger
+ | N_MONTHS_AGO_N COLON signedInteger
| THIS_QUARTER
| LAST_QUARTER
| NEXT_QUARTER
| NEXT_N_QUARTERS_N COLON signedInteger
| LAST_N_QUARTERS_N COLON signedInteger
+ | N_QUARTERS_AGO_N COLON signedInteger
| THIS_YEAR
| LAST_YEAR
| NEXT_YEAR
| NEXT_N_YEARS_N COLON signedInteger
| LAST_N_YEARS_N COLON signedInteger
+ | N_YEARS_AGO_N COLON signedInteger
| THIS_FISCAL_QUARTER
| LAST_FISCAL_QUARTER
| NEXT_FISCAL_QUARTER
| NEXT_N_FISCAL_QUARTERS_N COLON signedInteger
| LAST_N_FISCAL_QUARTERS_N COLON signedInteger
+ | N_FISCAL_QUARTERS_AGO_N COLON signedInteger
| THIS_FISCAL_YEAR
| LAST_FISCAL_YEAR
| NEXT_FISCAL_YEAR
| NEXT_N_FISCAL_YEARS_N COLON signedInteger
| LAST_N_FISCAL_YEARS_N COLON signedInteger
+ | N_FISCAL_YEARS_AGO_N COLON signedInteger
;
signedInteger
@@ -847,6 +897,9 @@ id
| WHEN
| WITH
| WITHOUT
+ // DML Keywords
+ | USER
+ | SYSTEM
// SOQL Values
| IntegralCurrencyLiteral
// SOQL Specific Keywords
@@ -895,6 +948,8 @@ id
| BELOW
| ABOVE_OR_BELOW
| SECURITY_ENFORCED
+ | USER_MODE
+ | SYSTEM_MODE
| REFERENCE
| CUBE
| FORMAT
@@ -902,6 +957,8 @@ id
| VIEWSTAT
| STANDARD
| CUSTOM
+ | DISTANCE
+ | GEOLOCATION
// SOQL date functions
| CALENDAR_MONTH
| CALENDAR_QUARTER
@@ -931,30 +988,37 @@ id
| NEXT_90_DAYS
| LAST_N_DAYS_N
| NEXT_N_DAYS_N
+ | N_DAYS_AGO_N
| NEXT_N_WEEKS_N
| LAST_N_WEEKS_N
+ | N_WEEKS_AGO_N
| NEXT_N_MONTHS_N
| LAST_N_MONTHS_N
+ | N_MONTHS_AGO_N
| THIS_QUARTER
| LAST_QUARTER
| NEXT_QUARTER
| NEXT_N_QUARTERS_N
| LAST_N_QUARTERS_N
+ | N_QUARTERS_AGO_N
| THIS_YEAR
| LAST_YEAR
| NEXT_YEAR
| NEXT_N_YEARS_N
| LAST_N_YEARS_N
+ | N_YEARS_AGO_N
| THIS_FISCAL_QUARTER
| LAST_FISCAL_QUARTER
| NEXT_FISCAL_QUARTER
| NEXT_N_FISCAL_QUARTERS_N
| LAST_N_FISCAL_QUARTERS_N
+ | N_FISCAL_QUARTERS_AGO_N
| THIS_FISCAL_YEAR
| LAST_FISCAL_YEAR
| NEXT_FISCAL_YEAR
| NEXT_N_FISCAL_YEARS_N
| LAST_N_FISCAL_YEARS_N
+ | N_FISCAL_YEARS_AGO_N
// SOSL Keywords
| FIND
| EMAIL
@@ -1031,6 +1095,9 @@ anyId
| WHILE
| WITH
| WITHOUT
+ // DML Keywords
+ | USER
+ | SYSTEM
// SOQL Values
| IntegralCurrencyLiteral
// SOQL Specific Keywords
@@ -1079,6 +1146,8 @@ anyId
| BELOW
| ABOVE_OR_BELOW
| SECURITY_ENFORCED
+ | SYSTEM_MODE
+ | USER_MODE
| REFERENCE
| CUBE
| FORMAT
@@ -1086,6 +1155,8 @@ anyId
| VIEWSTAT
| STANDARD
| CUSTOM
+ | DISTANCE
+ | GEOLOCATION
// SOQL date functions
| CALENDAR_MONTH
| CALENDAR_QUARTER
@@ -1115,30 +1186,37 @@ anyId
| NEXT_90_DAYS
| LAST_N_DAYS_N
| NEXT_N_DAYS_N
+ | N_DAYS_AGO_N
| NEXT_N_WEEKS_N
| LAST_N_WEEKS_N
+ | N_WEEKS_AGO_N
| NEXT_N_MONTHS_N
| LAST_N_MONTHS_N
+ | N_MONTHS_AGO_N
| THIS_QUARTER
| LAST_QUARTER
| NEXT_QUARTER
| NEXT_N_QUARTERS_N
| LAST_N_QUARTERS_N
+ | N_QUARTERS_AGO_N
| THIS_YEAR
| LAST_YEAR
| NEXT_YEAR
| NEXT_N_YEARS_N
| LAST_N_YEARS_N
+ | N_YEARS_AGO_N
| THIS_FISCAL_QUARTER
| LAST_FISCAL_QUARTER
| NEXT_FISCAL_QUARTER
| NEXT_N_FISCAL_QUARTERS_N
| LAST_N_FISCAL_QUARTERS_N
+ | N_FISCAL_QUARTERS_AGO_N
| THIS_FISCAL_YEAR
| LAST_FISCAL_YEAR
| NEXT_FISCAL_YEAR
| NEXT_N_FISCAL_YEARS_N
| LAST_N_FISCAL_YEARS_N
+ | N_FISCAL_YEARS_AGO_N
// SOSL Keywords
| FIND
| EMAIL
diff --git a/jvm/pom.xml b/jvm/pom.xml
index 6a11ff0..02688a8 100644
--- a/jvm/pom.xml
+++ b/jvm/pom.xml
@@ -4,7 +4,7 @@
com.github.nawforce
apex-parser
- 2.15.0
+ 2.17.0
jar
apex-parser
diff --git a/jvm/src/test/java/com/nawforce/apexparser/ApexLexerTest.java b/jvm/src/test/java/com/nawforce/apexparser/ApexLexerTest.java
index 0145205..036e31f 100644
--- a/jvm/src/test/java/com/nawforce/apexparser/ApexLexerTest.java
+++ b/jvm/src/test/java/com/nawforce/apexparser/ApexLexerTest.java
@@ -38,4 +38,36 @@ void testCaseInsensitivityMixedCase() throws IOException {
CommonTokenStream tokens = new CommonTokenStream(lexer);
assertEquals(2, tokens.getNumberOfOnChannelTokens());
}
+
+ @Test
+ void testMultilineApexDoc() throws IOException {
+ ApexLexer lexer = new ApexLexer(new CaseInsensitiveInputStream(new StringReader("/**\n * ApexDoc\n */\nclass Test {}")));
+ CommonTokenStream tokens = new CommonTokenStream(lexer);
+ tokens.fill();
+ assertEquals(ApexLexer.DOC_COMMENT, tokens.get(0).getType());
+ }
+
+ @Test
+ void testExtraAsterisksApexDoc() throws IOException {
+ ApexLexer lexer = new ApexLexer(new CaseInsensitiveInputStream(new StringReader("/********\n * ApexDoc\n */\nclass Test {}")));
+ CommonTokenStream tokens = new CommonTokenStream(lexer);
+ tokens.fill();
+ assertEquals(ApexLexer.DOC_COMMENT, tokens.get(0).getType());
+ }
+
+ @Test
+ void testSingleLineApexDoc() throws IOException {
+ ApexLexer lexer = new ApexLexer(new CaseInsensitiveInputStream(new StringReader("/** ApexDoc */ class Test {}")));
+ CommonTokenStream tokens = new CommonTokenStream(lexer);
+ tokens.fill();
+ assertEquals(ApexLexer.DOC_COMMENT, tokens.get(0).getType());
+ }
+
+ @Test
+ void testRegularComment() throws IOException {
+ ApexLexer lexer = new ApexLexer(new CaseInsensitiveInputStream(new StringReader("/* regular */ class Test {}")));
+ CommonTokenStream tokens = new CommonTokenStream(lexer);
+ tokens.fill();
+ assertEquals(ApexLexer.COMMENT, tokens.get(0).getType());
+ }
}
diff --git a/jvm/src/test/java/com/nawforce/apexparser/ApexParserTest.java b/jvm/src/test/java/com/nawforce/apexparser/ApexParserTest.java
index 116b639..7497c9a 100644
--- a/jvm/src/test/java/com/nawforce/apexparser/ApexParserTest.java
+++ b/jvm/src/test/java/com/nawforce/apexparser/ApexParserTest.java
@@ -2,7 +2,7 @@
import org.junit.jupiter.api.Test;
-import javafx.util.Pair;
+import java.util.Map;
import static com.nawforce.apexparser.SyntaxErrorCounter.createParser;
import static org.junit.jupiter.api.Assertions.*;
@@ -11,7 +11,7 @@ public class ApexParserTest {
@Test
void testBooleanLiteral() {
- Pair parserAndCounter = createParser("true");
+ Map.Entry parserAndCounter = createParser("true");
ApexParser.LiteralContext context = parserAndCounter.getKey().literal();
assertNotNull(context);
@@ -21,7 +21,7 @@ void testBooleanLiteral() {
@Test
void testExpression() {
- Pair parserAndCounter = createParser("a * 5");
+ Map.Entry parserAndCounter = createParser("a * 5");
ApexParser.ExpressionContext context = parserAndCounter.getKey().expression();
assertTrue(context instanceof ApexParser.Arth1ExpressionContext);
assertEquals(2, ((ApexParser.Arth1ExpressionContext) context).expression().size());
@@ -29,7 +29,7 @@ void testExpression() {
@Test
void testClass() {
- Pair parserAndCounter = createParser("public class Hello {}");
+ Map.Entry parserAndCounter = createParser("public class Hello {}");
ApexParser.CompilationUnitContext context = parserAndCounter.getKey().compilationUnit();
assertNotNull(context);
assertEquals(0, parserAndCounter.getValue().getNumErrors());
@@ -37,7 +37,7 @@ void testClass() {
@Test
void testCaseInsensitivity() {
- Pair parserAndCounter = createParser("Public CLASS Hello {}");
+ Map.Entry parserAndCounter = createParser("Public CLASS Hello {}");
ApexParser.CompilationUnitContext context = parserAndCounter.getKey().compilationUnit();
assertNotNull(context);
assertEquals(0, parserAndCounter.getValue().getNumErrors());
@@ -45,7 +45,7 @@ void testCaseInsensitivity() {
@Test
void testClassWithError() {
- Pair parserAndCounter = createParser("public class Hello {");
+ Map.Entry parserAndCounter = createParser("public class Hello {");
ApexParser.CompilationUnitContext context = parserAndCounter.getKey().compilationUnit();
assertNotNull(context);
assertEquals(1, parserAndCounter.getValue().getNumErrors());
@@ -53,7 +53,7 @@ void testClassWithError() {
@Test
void testClassWithSOQL() {
- Pair parserAndCounter = createParser(
+ Map.Entry parserAndCounter = createParser(
"public class Hello {\n" +
" public void func() {\n" +
" List accounts = [Select Id from Accounts];\n" +
@@ -66,7 +66,7 @@ void testClassWithSOQL() {
@Test
void testTrigger() {
- Pair parserAndCounter = createParser("trigger test on Account (before update, after update) {}");
+ Map.Entry parserAndCounter = createParser("trigger test on Account (before update, after update) {}");
ApexParser.TriggerUnitContext context = parserAndCounter.getKey().triggerUnit();
assertNotNull(context);
assertEquals(0, parserAndCounter.getValue().getNumErrors());
@@ -74,7 +74,7 @@ void testTrigger() {
@Test
void testSOQL() {
- Pair parserAndCounter = createParser("Select Fields(All) from Account");
+ Map.Entry parserAndCounter = createParser("Select Fields(All) from Account");
ApexParser.QueryContext context = parserAndCounter.getKey().query();
assertNotNull(context);
assertEquals(0, parserAndCounter.getValue().getNumErrors());
@@ -82,7 +82,7 @@ void testSOQL() {
@Test
void testCurrencyLiteral() {
- Pair parserAndCounter = createParser(
+ Map.Entry parserAndCounter = createParser(
"SELECT Id FROM Account WHERE Amount > USD100.01 AND Amount < USD200");
ApexParser.QueryContext context = parserAndCounter.getKey().query();
assertNotNull(context);
@@ -91,7 +91,7 @@ void testCurrencyLiteral() {
@Test
void testIdentifiersThatCouldBeCurrencyLiterals() {
- Pair parserAndCounter = createParser(
+ Map.Entry parserAndCounter = createParser(
"USD100.name = 'name';");
ApexParser.StatementContext context = parserAndCounter.getKey().statement();
assertNotNull(context);
@@ -100,7 +100,7 @@ void testIdentifiersThatCouldBeCurrencyLiterals() {
@Test
void testDateTimeLiteral() {
- Pair parserAndCounter = createParser(
+ Map.Entry parserAndCounter = createParser(
"SELECT Name, (SELECT Id FROM Account WHERE createdDate > 2020-01-01T12:00:00Z) FROM Opportunity");
ApexParser.QueryContext context = parserAndCounter.getKey().query();
assertNotNull(context);
@@ -109,7 +109,7 @@ void testDateTimeLiteral() {
@Test
void testNegativeNumericLiteral() {
- Pair parserAndCounter = createParser(
+ Map.Entry parserAndCounter = createParser(
"SELECT Name FROM Opportunity WHERE Value = -100.123");
ApexParser.QueryContext context = parserAndCounter.getKey().query();
assertNotNull(context);
@@ -118,7 +118,7 @@ void testNegativeNumericLiteral() {
@Test
void testLastQuarterKeyword() {
- Pair parserAndCounter = createParser(
+ Map.Entry parserAndCounter = createParser(
"SELECT Id FROM Account WHERE DueDate = LAST_QUARTER");
ApexParser.QueryContext context = parserAndCounter.getKey().query();
assertNotNull(context);
@@ -127,7 +127,7 @@ void testLastQuarterKeyword() {
@Test
void testSemiAllowedAsWhileBody() {
- Pair parserAndCounter = createParser(
+ Map.Entry parserAndCounter = createParser(
"while (x++ < 10 && !(y-- < 0));");
ApexParser.StatementContext context = parserAndCounter.getKey().statement();
assertNotNull(context);
@@ -136,7 +136,7 @@ void testSemiAllowedAsWhileBody() {
@Test
void testSemiAllowedAsForBody() {
- Pair parserAndCounter = createParser(
+ Map.Entry parserAndCounter = createParser(
"for(x=0; x<10; x++);");
ApexParser.StatementContext context = parserAndCounter.getKey().statement();
assertNotNull(context);
@@ -145,7 +145,7 @@ void testSemiAllowedAsForBody() {
@Test
void testSemiDisallowedAsGeneralStatement() {
- Pair parserAndCounter = createParser(
+ Map.Entry parserAndCounter = createParser(
"if (x == 3); else { ; }");
ApexParser.StatementContext context = parserAndCounter.getKey().statement();
assertNotNull(context);
@@ -154,7 +154,7 @@ void testSemiDisallowedAsGeneralStatement() {
@Test
void testWhenLiteralParens() {
- Pair parserAndCounter = createParser(
+ Map.Entry parserAndCounter = createParser(
"switch on (x) { \n" +
" when 1 { return 1; } \n" +
" when ((2)) { return 2; } \n" +
@@ -164,6 +164,30 @@ void testWhenLiteralParens() {
assertNotNull(context);
assertEquals(0, parserAndCounter.getValue().getNumErrors());
}
+
+ @Test
+ void testSoqlModeKeywords() {
+ String [] MODES = new String[] { "USER_MODE", "SYSTEM_MODE" };
+ for (String mode : MODES) {
+ Map.Entry parserAndCounter = createParser(
+ String.format("SELECT Id FROM Account WITH %s", mode));
+ ApexParser.QueryContext context = parserAndCounter.getKey().query();
+ assertNotNull(context);
+ assertEquals(0, parserAndCounter.getValue().getNumErrors());
+ }
+ }
+
+ @Test
+ void testDmlModeKeywords() {
+ String [] MODES = new String[] { "USER", "SYSTEM" };
+ for (String mode : MODES) {
+ Map.Entry parserAndCounter = createParser(
+ String.format("insert as %s contact;", mode));
+ ApexParser.StatementContext context = parserAndCounter.getKey().statement();
+ assertNotNull(context);
+ assertEquals(0, parserAndCounter.getValue().getNumErrors());
+ }
+ }
}
diff --git a/jvm/src/test/java/com/nawforce/apexparser/ApexTrigger2Test.java b/jvm/src/test/java/com/nawforce/apexparser/ApexTrigger2Test.java
new file mode 100644
index 0000000..77b0780
--- /dev/null
+++ b/jvm/src/test/java/com/nawforce/apexparser/ApexTrigger2Test.java
@@ -0,0 +1,77 @@
+package com.nawforce.apexparser;
+
+import org.junit.jupiter.api.Test;
+
+import java.util.Map;
+
+import static com.nawforce.apexparser.SyntaxErrorCounter.createParser;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+public class ApexTrigger2Test {
+
+ @Test
+ void testEmptyTrigger() {
+ Map.Entry parserAndCounter = createParser("trigger test on Account (before update, after update) {}");
+ ApexParser.TriggerUnit2Context context = parserAndCounter.getKey().triggerUnit2();
+ assertNotNull(context);
+ assertEquals(0, parserAndCounter.getValue().getNumErrors());
+ }
+
+ @Test
+ void testTriggerWithStatement() {
+ Map.Entry parserAndCounter = createParser("trigger test on Account (before update, after update) {System.debug('');}");
+ ApexParser.TriggerUnit2Context context = parserAndCounter.getKey().triggerUnit2();
+ assertNotNull(context);
+ assertEquals(0, parserAndCounter.getValue().getNumErrors());
+ }
+
+ @Test
+ void testTriggerWithMethod() {
+ Map.Entry parserAndCounter = createParser("trigger test on Account (before update, after update) {public void func() {}}");
+ ApexParser.TriggerUnit2Context context = parserAndCounter.getKey().triggerUnit2();
+ assertNotNull(context);
+ assertEquals(0, parserAndCounter.getValue().getNumErrors());
+ }
+
+ @Test
+ void testTriggerWithField() {
+ Map.Entry parserAndCounter = createParser("trigger test on Account (before update, after update) {String a;}");
+ ApexParser.TriggerUnit2Context context = parserAndCounter.getKey().triggerUnit2();
+ assertNotNull(context);
+ assertEquals(0, parserAndCounter.getValue().getNumErrors());
+ }
+
+ @Test
+ void testTriggerWithInterface() {
+ Map.Entry parserAndCounter = createParser("trigger test on Account (before update, after update) {interface Foo {}}");
+ ApexParser.TriggerUnit2Context context = parserAndCounter.getKey().triggerUnit2();
+ assertNotNull(context);
+ assertEquals(0, parserAndCounter.getValue().getNumErrors());
+ }
+
+ @Test
+ void testTriggerWithClass() {
+ Map.Entry parserAndCounter = createParser("trigger test on Account (before update, after update) {class Foo {}}");
+ ApexParser.TriggerUnit2Context context = parserAndCounter.getKey().triggerUnit2();
+ assertNotNull(context);
+ assertEquals(0, parserAndCounter.getValue().getNumErrors());
+ }
+
+ @Test
+ void testTriggerWithEnum() {
+ Map.Entry parserAndCounter = createParser("trigger test on Account (before update, after update) {enum Foo {}}");
+ ApexParser.TriggerUnit2Context context = parserAndCounter.getKey().triggerUnit2();
+ assertNotNull(context);
+ assertEquals(0, parserAndCounter.getValue().getNumErrors());
+ }
+
+ @Test
+ void testTriggerWithProperty() {
+ Map.Entry parserAndCounter = createParser("trigger test on Account (before update, after update) { String a {get { return a; } set { a = value; }} }");
+ ApexParser.TriggerUnit2Context context = parserAndCounter.getKey().triggerUnit2();
+ assertNotNull(context);
+ assertEquals(0, parserAndCounter.getValue().getNumErrors());
+ }
+
+}
diff --git a/jvm/src/test/java/com/nawforce/apexparser/SOSLParserTest.java b/jvm/src/test/java/com/nawforce/apexparser/SOSLParserTest.java
index f9e3002..bc762e9 100644
--- a/jvm/src/test/java/com/nawforce/apexparser/SOSLParserTest.java
+++ b/jvm/src/test/java/com/nawforce/apexparser/SOSLParserTest.java
@@ -2,7 +2,7 @@
import org.junit.jupiter.api.Test;
-import javafx.util.Pair;
+import java.util.Map;
import static com.nawforce.apexparser.SyntaxErrorCounter.createParser;
import static org.junit.jupiter.api.Assertions.*;
@@ -10,7 +10,7 @@
public class SOSLParserTest {
@Test
void testBasicQuery() {
- Pair parserAndCounter = createParser("[Find 'something' RETURNING Account]");
+ Map.Entry parserAndCounter = createParser("[Find 'something' RETURNING Account]");
ApexParser.SoslLiteralContext context = parserAndCounter.getKey().soslLiteral();
assertNotNull(context);
assertEquals(0, parserAndCounter.getValue().getNumErrors());
@@ -18,7 +18,7 @@ void testBasicQuery() {
@Test
void testEmbeddedQuote() {
- Pair parserAndCounter = createParser("[Find 'some\\'thing' RETURNING Account]");
+ Map.Entry parserAndCounter = createParser("[Find 'some\\'thing' RETURNING Account]");
ApexParser.SoslLiteralContext context = parserAndCounter.getKey().soslLiteral();
assertNotNull(context);
assertEquals(0, parserAndCounter.getValue().getNumErrors());
@@ -26,7 +26,7 @@ void testEmbeddedQuote() {
@Test
void testBracesFail() {
- Pair parserAndCounter = createParser("[Find {something} RETURNING Account]");
+ Map.Entry parserAndCounter = createParser("[Find {something} RETURNING Account]");
ApexParser.SoslLiteralContext context = parserAndCounter.getKey().soslLiteral();
assertNotNull(context);
assertEquals(1, parserAndCounter.getValue().getNumErrors());
@@ -34,7 +34,7 @@ void testBracesFail() {
@Test
void testBracesOnAltFormat() {
- Pair parserAndCounter = createParser("[Find {something} RETURNING Account]");
+ Map.Entry parserAndCounter = createParser("[Find {something} RETURNING Account]");
ApexParser.SoslLiteralAltContext context = parserAndCounter.getKey().soslLiteralAlt();
assertNotNull(context);
assertEquals(0, parserAndCounter.getValue().getNumErrors());
@@ -42,7 +42,7 @@ void testBracesOnAltFormat() {
@Test
void testQuotesFailOnAltFormat() {
- Pair parserAndCounter = createParser("[Find 'something' RETURNING Account]");
+ Map.Entry parserAndCounter = createParser("[Find 'something' RETURNING Account]");
ApexParser.SoslLiteralAltContext context = parserAndCounter.getKey().soslLiteralAlt();
assertNotNull(context);
assertEquals(1, parserAndCounter.getValue().getNumErrors());
diff --git a/jvm/src/test/java/com/nawforce/apexparser/SyntaxErrorCounter.java b/jvm/src/test/java/com/nawforce/apexparser/SyntaxErrorCounter.java
index 54761ee..e0601f9 100644
--- a/jvm/src/test/java/com/nawforce/apexparser/SyntaxErrorCounter.java
+++ b/jvm/src/test/java/com/nawforce/apexparser/SyntaxErrorCounter.java
@@ -1,8 +1,10 @@
package com.nawforce.apexparser;
-import javafx.util.Pair;
import org.antlr.v4.runtime.*;
+import java.util.AbstractMap;
+import java.util.Map;
+
public class SyntaxErrorCounter extends BaseErrorListener {
private int numErrors = 0;
@@ -21,7 +23,7 @@ public int getNumErrors() {
return this.numErrors;
}
- public static Pair createParser(String input) {
+ public static Map.Entry createParser(String input) {
ApexLexer lexer = new ApexLexer(new CaseInsensitiveInputStream(CharStreams.fromString(input)));
CommonTokenStream tokens = new CommonTokenStream(lexer);
ApexParser parser = new ApexParser(tokens);
@@ -30,6 +32,6 @@ public static Pair createParser(String input) {
SyntaxErrorCounter errorCounter = new SyntaxErrorCounter();
parser.addErrorListener(errorCounter);
- return new Pair<>(parser, errorCounter);
+ return new AbstractMap.SimpleEntry(parser, errorCounter);
}
}
diff --git a/npm/package-lock.json b/npm/package-lock.json
index 1abf834..5d6fc47 100644
--- a/npm/package-lock.json
+++ b/npm/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "apex-parser",
- "version": "2.15.0",
+ "version": "2.17.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "apex-parser",
- "version": "2.15.0",
+ "version": "2.17.0",
"license": "BSD-3-Clause",
"dependencies": {
"antlr4ts": "0.5.0-alpha.4",
@@ -21,6 +21,7 @@
"antlr4ts-cli": "0.5.0-alpha.4",
"eslint": "^7.32.0",
"jest": "^27.0.6",
+ "shx": "^0.3.4",
"typescript": "^4.3.5"
},
"engines": {
@@ -109,28 +110,20 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.17.9",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz",
- "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz",
+ "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.17.0",
- "jsesc": "^2.5.1",
- "source-map": "^0.5.0"
+ "@babel/types": "^7.23.6",
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "@jridgewell/trace-mapping": "^0.3.17",
+ "jsesc": "^2.5.1"
},
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@babel/generator/node_modules/source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/@babel/helper-compilation-targets": {
"version": "7.17.7",
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz",
@@ -159,37 +152,34 @@
}
},
"node_modules/@babel/helper-environment-visitor": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz",
- "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
+ "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
"dev": true,
- "dependencies": {
- "@babel/types": "^7.16.7"
- },
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-function-name": {
- "version": "7.17.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz",
- "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
+ "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
"dev": true,
"dependencies": {
- "@babel/template": "^7.16.7",
- "@babel/types": "^7.17.0"
+ "@babel/template": "^7.22.15",
+ "@babel/types": "^7.23.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-hoist-variables": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz",
- "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==",
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
+ "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.16.7"
+ "@babel/types": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -248,21 +238,30 @@
}
},
"node_modules/@babel/helper-split-export-declaration": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz",
- "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==",
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
+ "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.16.7"
+ "@babel/types": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
}
},
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
+ "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
- "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
+ "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
"dev": true,
"engines": {
"node": ">=6.9.0"
@@ -292,13 +291,13 @@
}
},
"node_modules/@babel/highlight": {
- "version": "7.17.9",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz",
- "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
+ "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
"dev": true,
"dependencies": {
- "@babel/helper-validator-identifier": "^7.16.7",
- "chalk": "^2.0.0",
+ "@babel/helper-validator-identifier": "^7.22.20",
+ "chalk": "^2.4.2",
"js-tokens": "^4.0.0"
},
"engines": {
@@ -377,9 +376,9 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.17.9",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz",
- "integrity": "sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz",
+ "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==",
"dev": true,
"bin": {
"parser": "bin/babel-parser.js"
@@ -551,46 +550,118 @@
}
},
"node_modules/@babel/template": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz",
- "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
+ "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
"dev": true,
"dependencies": {
- "@babel/code-frame": "^7.16.7",
- "@babel/parser": "^7.16.7",
- "@babel/types": "^7.16.7"
+ "@babel/code-frame": "^7.22.13",
+ "@babel/parser": "^7.22.15",
+ "@babel/types": "^7.22.15"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/template/node_modules/@babel/code-frame": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
- "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
+ "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
"dev": true,
"dependencies": {
- "@babel/highlight": "^7.16.7"
+ "@babel/highlight": "^7.23.4",
+ "chalk": "^2.4.2"
},
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@babel/traverse": {
- "version": "7.17.9",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.9.tgz",
- "integrity": "sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw==",
+ "node_modules/@babel/template/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"dependencies": {
- "@babel/code-frame": "^7.16.7",
- "@babel/generator": "^7.17.9",
- "@babel/helper-environment-visitor": "^7.16.7",
- "@babel/helper-function-name": "^7.17.9",
- "@babel/helper-hoist-variables": "^7.16.7",
- "@babel/helper-split-export-declaration": "^7.16.7",
- "@babel/parser": "^7.17.9",
- "@babel/types": "^7.17.0",
- "debug": "^4.1.0",
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/template/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/template/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/@babel/template/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "node_modules/@babel/template/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/@babel/template/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/template/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz",
+ "integrity": "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.23.5",
+ "@babel/generator": "^7.23.6",
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-function-name": "^7.23.0",
+ "@babel/helper-hoist-variables": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/parser": "^7.23.6",
+ "@babel/types": "^7.23.6",
+ "debug": "^4.3.1",
"globals": "^11.1.0"
},
"engines": {
@@ -598,17 +669,68 @@
}
},
"node_modules/@babel/traverse/node_modules/@babel/code-frame": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
- "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
+ "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
"dev": true,
"dependencies": {
- "@babel/highlight": "^7.16.7"
+ "@babel/highlight": "^7.23.4",
+ "chalk": "^2.4.2"
},
"engines": {
"node": ">=6.9.0"
}
},
+ "node_modules/@babel/traverse/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/traverse/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/traverse/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/@babel/traverse/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "node_modules/@babel/traverse/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
"node_modules/@babel/traverse/node_modules/globals": {
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
@@ -618,13 +740,35 @@
"node": ">=4"
}
},
+ "node_modules/@babel/traverse/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/traverse/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/@babel/types": {
- "version": "7.17.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
- "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz",
+ "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==",
"dev": true,
"dependencies": {
- "@babel/helper-validator-identifier": "^7.16.7",
+ "@babel/helper-string-parser": "^7.23.4",
+ "@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
},
"engines": {
@@ -960,29 +1104,52 @@
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
+ "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
"node_modules/@jridgewell/resolve-uri": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz",
- "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
+ "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
"dev": true,
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.4.11",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz",
- "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==",
+ "version": "1.4.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
"dev": true
},
"node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.4",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz",
- "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==",
+ "version": "0.3.20",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
+ "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
"dev": true,
"dependencies": {
- "@jridgewell/resolve-uri": "^3.0.3",
- "@jridgewell/sourcemap-codec": "^1.4.10"
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
}
},
"node_modules/@nodelib/fs.scandir": {
@@ -2851,6 +3018,15 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
+ "node_modules/interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
"node_modules/is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
@@ -4046,9 +4222,9 @@
"dev": true
},
"node_modules/json5": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
- "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"dev": true,
"bin": {
"json5": "lib/cli.js"
@@ -4238,6 +4414,15 @@
"node": "*"
}
},
+ "node_modules/minimist": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
+ "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@@ -4580,6 +4765,12 @@
"node": ">=6"
}
},
+ "node_modules/querystringify": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
+ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
+ "dev": true
+ },
"node_modules/queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -4606,6 +4797,18 @@
"integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
"dev": true
},
+ "node_modules/rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "dev": true,
+ "dependencies": {
+ "resolve": "^1.1.6"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
"node_modules/regexpp": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
@@ -4636,6 +4839,12 @@
"node": ">=0.10.0"
}
},
+ "node_modules/requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
+ "dev": true
+ },
"node_modules/resolve": {
"version": "1.22.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
@@ -4800,6 +5009,39 @@
"node": ">=8"
}
},
+ "node_modules/shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ },
+ "bin": {
+ "shjs": "bin/shjs"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/shx": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.4.tgz",
+ "integrity": "sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.3",
+ "shelljs": "^0.8.5"
+ },
+ "bin": {
+ "shx": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/signal-exit": {
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
@@ -5104,14 +5346,15 @@
}
},
"node_modules/tough-cookie": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
- "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
+ "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
"dev": true,
"dependencies": {
"psl": "^1.1.33",
"punycode": "^2.1.1",
- "universalify": "^0.1.2"
+ "universalify": "^0.2.0",
+ "url-parse": "^1.5.3"
},
"engines": {
"node": ">=6"
@@ -5206,9 +5449,9 @@
}
},
"node_modules/universalify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
+ "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
"dev": true,
"engines": {
"node": ">= 4.0.0"
@@ -5223,6 +5466,16 @@
"punycode": "^2.1.0"
}
},
+ "node_modules/url-parse": {
+ "version": "1.5.10",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
+ "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+ "dev": true,
+ "dependencies": {
+ "querystringify": "^2.1.1",
+ "requires-port": "^1.0.0"
+ }
+ },
"node_modules/v8-compile-cache": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
@@ -5256,6 +5509,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
"integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
+ "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.",
"dev": true,
"dependencies": {
"browser-process-hrtime": "^1.0.0"
@@ -5521,22 +5775,15 @@
}
},
"@babel/generator": {
- "version": "7.17.9",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz",
- "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz",
+ "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==",
"dev": true,
"requires": {
- "@babel/types": "^7.17.0",
- "jsesc": "^2.5.1",
- "source-map": "^0.5.0"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- }
+ "@babel/types": "^7.23.6",
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "@jridgewell/trace-mapping": "^0.3.17",
+ "jsesc": "^2.5.1"
}
},
"@babel/helper-compilation-targets": {
@@ -5560,31 +5807,28 @@
}
},
"@babel/helper-environment-visitor": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz",
- "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.16.7"
- }
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
+ "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
+ "dev": true
},
"@babel/helper-function-name": {
- "version": "7.17.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz",
- "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
+ "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
"dev": true,
"requires": {
- "@babel/template": "^7.16.7",
- "@babel/types": "^7.17.0"
+ "@babel/template": "^7.22.15",
+ "@babel/types": "^7.23.0"
}
},
"@babel/helper-hoist-variables": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz",
- "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==",
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
+ "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
"dev": true,
"requires": {
- "@babel/types": "^7.16.7"
+ "@babel/types": "^7.22.5"
}
},
"@babel/helper-module-imports": {
@@ -5628,18 +5872,24 @@
}
},
"@babel/helper-split-export-declaration": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz",
- "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==",
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
+ "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
"dev": true,
"requires": {
- "@babel/types": "^7.16.7"
+ "@babel/types": "^7.22.5"
}
},
+ "@babel/helper-string-parser": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
+ "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
+ "dev": true
+ },
"@babel/helper-validator-identifier": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
- "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
+ "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
"dev": true
},
"@babel/helper-validator-option": {
@@ -5660,13 +5910,13 @@
}
},
"@babel/highlight": {
- "version": "7.17.9",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz",
- "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
+ "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
"dev": true,
"requires": {
- "@babel/helper-validator-identifier": "^7.16.7",
- "chalk": "^2.0.0",
+ "@babel/helper-validator-identifier": "^7.22.20",
+ "chalk": "^2.4.2",
"js-tokens": "^4.0.0"
},
"dependencies": {
@@ -5729,9 +5979,9 @@
}
},
"@babel/parser": {
- "version": "7.17.9",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz",
- "integrity": "sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz",
+ "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==",
"dev": true
},
"@babel/plugin-syntax-async-generators": {
@@ -5852,69 +6102,184 @@
}
},
"@babel/template": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz",
- "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
+ "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.16.7",
- "@babel/parser": "^7.16.7",
- "@babel/types": "^7.16.7"
+ "@babel/code-frame": "^7.22.13",
+ "@babel/parser": "^7.22.15",
+ "@babel/types": "^7.22.15"
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
- "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
+ "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
"dev": true,
"requires": {
- "@babel/highlight": "^7.16.7"
+ "@babel/highlight": "^7.23.4",
+ "chalk": "^2.4.2"
+ }
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
}
}
}
},
"@babel/traverse": {
- "version": "7.17.9",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.9.tgz",
- "integrity": "sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.16.7",
- "@babel/generator": "^7.17.9",
- "@babel/helper-environment-visitor": "^7.16.7",
- "@babel/helper-function-name": "^7.17.9",
- "@babel/helper-hoist-variables": "^7.16.7",
- "@babel/helper-split-export-declaration": "^7.16.7",
- "@babel/parser": "^7.17.9",
- "@babel/types": "^7.17.0",
- "debug": "^4.1.0",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz",
+ "integrity": "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.23.5",
+ "@babel/generator": "^7.23.6",
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-function-name": "^7.23.0",
+ "@babel/helper-hoist-variables": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/parser": "^7.23.6",
+ "@babel/types": "^7.23.6",
+ "debug": "^4.3.1",
"globals": "^11.1.0"
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
- "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
+ "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
"dev": true,
"requires": {
- "@babel/highlight": "^7.16.7"
+ "@babel/highlight": "^7.23.4",
+ "chalk": "^2.4.2"
+ }
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
}
},
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true
+ },
"globals": {
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
"dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
}
}
},
"@babel/types": {
- "version": "7.17.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
- "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz",
+ "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==",
"dev": true,
"requires": {
- "@babel/helper-validator-identifier": "^7.16.7",
+ "@babel/helper-string-parser": "^7.23.4",
+ "@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
}
},
@@ -6184,26 +6549,43 @@
"chalk": "^4.0.0"
}
},
+ "@jridgewell/gen-mapping": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
+ "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
+ },
"@jridgewell/resolve-uri": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz",
- "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
+ "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
+ "dev": true
+ },
+ "@jridgewell/set-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
"dev": true
},
"@jridgewell/sourcemap-codec": {
- "version": "1.4.11",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz",
- "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==",
+ "version": "1.4.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
"dev": true
},
"@jridgewell/trace-mapping": {
- "version": "0.3.4",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz",
- "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==",
+ "version": "0.3.20",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
+ "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
"dev": true,
"requires": {
- "@jridgewell/resolve-uri": "^3.0.3",
- "@jridgewell/sourcemap-codec": "^1.4.10"
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
}
},
"@nodelib/fs.scandir": {
@@ -7610,6 +7992,12 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
+ "dev": true
+ },
"is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
@@ -8526,9 +8914,9 @@
"dev": true
},
"json5": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
- "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"dev": true
},
"kleur": {
@@ -8672,6 +9060,12 @@
"brace-expansion": "^1.1.7"
}
},
+ "minimist": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
+ "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
+ "dev": true
+ },
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@@ -8935,6 +9329,12 @@
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
"dev": true
},
+ "querystringify": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
+ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
+ "dev": true
+ },
"queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -8947,6 +9347,15 @@
"integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
"dev": true
},
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "dev": true,
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
"regexpp": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
@@ -8965,6 +9374,12 @@
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
"dev": true
},
+ "requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
+ "dev": true
+ },
"resolve": {
"version": "1.22.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
@@ -9074,6 +9489,27 @@
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true
},
+ "shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "shx": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.4.tgz",
+ "integrity": "sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.3",
+ "shelljs": "^0.8.5"
+ }
+ },
"signal-exit": {
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
@@ -9309,14 +9745,15 @@
}
},
"tough-cookie": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
- "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
+ "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
"dev": true,
"requires": {
"psl": "^1.1.33",
"punycode": "^2.1.1",
- "universalify": "^0.1.2"
+ "universalify": "^0.2.0",
+ "url-parse": "^1.5.3"
}
},
"tr46": {
@@ -9380,9 +9817,9 @@
"dev": true
},
"universalify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
+ "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
"dev": true
},
"uri-js": {
@@ -9394,6 +9831,16 @@
"punycode": "^2.1.0"
}
},
+ "url-parse": {
+ "version": "1.5.10",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
+ "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+ "dev": true,
+ "requires": {
+ "querystringify": "^2.1.1",
+ "requires-port": "^1.0.0"
+ }
+ },
"v8-compile-cache": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
diff --git a/npm/package.json b/npm/package.json
index 2596abc..44f3c62 100644
--- a/npm/package.json
+++ b/npm/package.json
@@ -1,18 +1,20 @@
{
"name": "apex-parser",
- "version": "2.15.0",
+ "version": "2.17.0",
"author": "Kevin Jones (https://github.com/nawforce)",
"bugs": "https://github.com/nawforce/apex-parser/issues",
"description": "Javascript parser for Salesforce Apex Language",
"main": "lib/index.js",
"license": "BSD-3-Clause",
"scripts": {
- "build": "npm run antlr4ts && cp ../README.md . && tsc",
+ "antlr4ts": "npm run antlr-build && npm run antlr-patch",
+ "antlr-build": "cd antlr && antlr4ts -visitor -o ../src ApexLexer.g4 ApexParser.g4",
+ "antlr-patch": "node patch",
+ "build": "npm run antlr4ts && tsc",
+ "check": "node -e 'require(\"./lib/index.js\").check()'",
"test": "jest --config jestconfig.json lib",
- "antlr4ts": "npm run antlr-build && npm run antlr-patch ",
- "antlr-build": "(cd antlr; antlr4ts -visitor -o ../src ApexLexer.g4 ApexParser.g4)",
- "antlr-patch": "sed -i '' -e 's/public void clearCache() {.*}//g' src/ApexParser.ts && sed -i '' -e 's/public void clearCache() {.*}//g' src/ApexLexer.ts",
- "check": "node -e require(\"./lib/index.js\").check()'"
+ "test-samples": "jest --config sys.jestconfig.json lib",
+ "test-snapshot": "npm run test-samples -- --updateSnapshot"
},
"files": [
"lib/**/*"
@@ -30,6 +32,7 @@
"antlr4ts-cli": "0.5.0-alpha.4",
"eslint": "^7.32.0",
"jest": "^27.0.6",
+ "shx": "^0.3.4",
"typescript": "^4.3.5"
},
"engines": {
@@ -37,4 +40,4 @@
},
"homepage": "https://github.com/nawforce/apex-parser",
"repository": "nawforce/apex-parser"
-}
+}
\ No newline at end of file
diff --git a/npm/patch b/npm/patch
new file mode 100644
index 0000000..709d246
--- /dev/null
+++ b/npm/patch
@@ -0,0 +1,5 @@
+var shell = require('shelljs');
+
+shell.sed('-i', 'public void clearCache\\(\\) {.*}', '', 'src/ApexLexer.ts');
+shell.sed('-i', 'public void clearCache\\(\\) {.*}', '', 'src/ApexParser.ts');
+console.log('Patched ApexParser.ts & ApexLexer.ts to remove clearCache()');
\ No newline at end of file
diff --git a/npm/src/__tests__/ApexParserTest.ts b/npm/src/__tests__/ApexParserTest.ts
index b2ea89e..52717ac 100644
--- a/npm/src/__tests__/ApexParserTest.ts
+++ b/npm/src/__tests__/ApexParserTest.ts
@@ -193,3 +193,28 @@ test('testWhenLiteralParens', () => {
expect(context).toBeInstanceOf(StatementContext)
expect(errorCounter.getNumErrors()).toEqual(0)
})
+
+test('testSoqlModeKeywords', () => {
+ const MODES = ["USER_MODE", "SYSTEM_MODE"];
+ for (const mode of MODES) {
+ const [parser, errorCounter] = createParser("test.soql",
+ `SELECT Id FROM Account WITH ${mode}`);
+ const context = parser.query()
+
+ expect(context).toBeInstanceOf(QueryContext)
+ expect(errorCounter.getNumErrors()).toEqual(0)
+ }
+})
+
+
+test('testDmlModeKeywords', () => {
+ const MODES = ["USER", "SYSTEM"];
+ for (const mode of MODES) {
+ const [parser, errorCounter] = createParser("test.apex",
+ `insert as ${mode} contact;`);
+ const context = parser.statement()
+
+ expect(context).toBeInstanceOf(StatementContext)
+ expect(errorCounter.getNumErrors()).toEqual(0)
+ }
+})
diff --git a/npm/src/__tests__/ApexTrigger2Test.ts b/npm/src/__tests__/ApexTrigger2Test.ts
new file mode 100644
index 0000000..7fb45a4
--- /dev/null
+++ b/npm/src/__tests__/ApexTrigger2Test.ts
@@ -0,0 +1,66 @@
+import {TriggerUnit2Context} from "../ApexParser";
+import { createParser } from "./SyntaxErrorCounter";
+
+test('Empty Trigger', () => {
+ const [parser, errorCounter] = createParser("test.trigger", "trigger test on Account (before update, after update) {}")
+ const context = parser.triggerUnit2()
+
+ expect(context).toBeInstanceOf(TriggerUnit2Context)
+ expect(errorCounter.getNumErrors()).toEqual(0)
+})
+
+test('Trigger with statement', () => {
+ const [parser, errorCounter] = createParser("test.trigger", "trigger test on Account (before update, after update) {System.debug('');}")
+ const context = parser.triggerUnit2()
+
+ expect(context).toBeInstanceOf(TriggerUnit2Context)
+ expect(errorCounter.getNumErrors()).toEqual(0)
+})
+
+test('Trigger with method', () => {
+ const [parser, errorCounter] = createParser("test.trigger", "trigger test on Account (before update, after update) {public void func() {}}")
+ const context = parser.triggerUnit2()
+
+ expect(context).toBeInstanceOf(TriggerUnit2Context)
+ expect(errorCounter.getNumErrors()).toEqual(0)
+})
+
+test('Trigger with field', () => {
+ const [parser, errorCounter] = createParser("test.trigger", "trigger test on Account (before update, after update) {String a;}")
+ const context = parser.triggerUnit2()
+
+ expect(context).toBeInstanceOf(TriggerUnit2Context)
+ expect(errorCounter.getNumErrors()).toEqual(0)
+})
+
+test('Trigger with interface', () => {
+ const [parser, errorCounter] = createParser("test.trigger", "trigger test on Account (before update, after update) {interface Foo {}}")
+ const context = parser.triggerUnit2()
+
+ expect(context).toBeInstanceOf(TriggerUnit2Context)
+ expect(errorCounter.getNumErrors()).toEqual(0)
+})
+
+test('Trigger with class', () => {
+ const [parser, errorCounter] = createParser("test.trigger", "trigger test on Account (before update, after update) {class Foo {}}")
+ const context = parser.triggerUnit2()
+
+ expect(context).toBeInstanceOf(TriggerUnit2Context)
+ expect(errorCounter.getNumErrors()).toEqual(0)
+})
+
+test('Trigger with enum', () => {
+ const [parser, errorCounter] = createParser("test.trigger", "trigger test on Account (before update, after update) {enum Foo {}}")
+ const context = parser.triggerUnit2()
+
+ expect(context).toBeInstanceOf(TriggerUnit2Context)
+ expect(errorCounter.getNumErrors()).toEqual(0)
+})
+
+test('Trigger with property', () => {
+ const [parser, errorCounter] = createParser("test.trigger", "trigger test on Account (before update, after update) { String a {get { return a; } set { a = value; }} }")
+ const context = parser.triggerUnit2()
+
+ expect(context).toBeInstanceOf(TriggerUnit2Context)
+ expect(errorCounter.getNumErrors()).toEqual(0)
+})
\ No newline at end of file
diff --git a/npm/src/__tests__/ApexVisitorTest.ts b/npm/src/__tests__/ApexVisitorTest.ts
index 3d5748e..759a9cf 100644
--- a/npm/src/__tests__/ApexVisitorTest.ts
+++ b/npm/src/__tests__/ApexVisitorTest.ts
@@ -24,7 +24,7 @@ test('Vistor is visited', () => {
let lexer = new ApexLexer(new CaseInsensitiveInputStream("test.cls", "public class Hello { public void func(){} }"))
let tokens = new CommonTokenStream(lexer);
- let parser = new ApexParser(tokens)
+ const parser = new ApexParser(tokens)
parser.removeErrorListeners()
parser.addErrorListener(new ThrowingErrorListener());
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..d888f52
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,358 @@
+{
+ "name": "apex-parser-init",
+ "version": "0.0.1",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "copyfiles": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-2.4.1.tgz",
+ "integrity": "sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.0.5",
+ "minimatch": "^3.0.3",
+ "mkdirp": "^1.0.4",
+ "noms": "0.0.0",
+ "through2": "^2.0.1",
+ "untildify": "^4.0.0",
+ "yargs": "^16.1.0"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "dev": true
+ },
+ "noms": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz",
+ "integrity": "sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "~1.0.31"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "dev": true
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "untildify": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
+ "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "dev": true
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true
+ },
+ "yargs": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "dev": true,
+ "requires": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "dev": true
+ }
+ }
+}
diff --git a/package.json b/package.json
index 17c9a21..ac200ef 100644
--- a/package.json
+++ b/package.json
@@ -5,18 +5,19 @@
"homepage": "https://github.com/nawforce/apex-parser",
"repository": "nawforce/apex-parser",
"scripts": {
- "build": "npm run init && (cd npm; npm run build) && (cd jvm; mvn package)",
- "init": "npm run init-npm && npm run init-jvm",
- "init-npm": "cp antlr/* npm/antlr && (cd npm; npm ci)",
- "init-jvm": "cp antlr/* jvm/src/main/antlr4/com/nawforce/apexparser"
- },
- "files": [
- ],
- "dependencies": {
+ "build": "npm run build-npm && npm run build-jvm",
+ "build-npm": "npm run init-npm && npm run copy-readme-npm && cd npm && npm ci && npm run build && npm run test && cd ..",
+ "build-jvm": "npm run init-jvm && cd jvm && mvn package && cd ..",
+ "init-npm": "copyfiles -f \"antlr/*.g4\" npm/antlr",
+ "init-jvm": "copyfiles -f \"antlr/*.g4\" jvm/src/main/antlr4/com/nawforce/apexparser",
+ "copy-readme-npm": "copyfiles README.md npm"
},
+ "files": [],
+ "dependencies": {},
"devDependencies": {
+ "copyfiles": "2.4.1"
},
"engines": {
"node": ">=8.0.0"
}
-}
+}
\ No newline at end of file