From 23d80ac3b981ed30b0d0f339687d7ba9225c7201 Mon Sep 17 00:00:00 2001 From: Kevin Jones Date: Mon, 14 Nov 2022 20:57:36 +0000 Subject: [PATCH 01/21] Merge changes for adt parser --- README.md | 35 ++++++++++-------- antlr/ApexLexer.g4 | 4 +-- antlr/ApexParser.g4 | 19 ++++++++-- .../nawforce/apexparser/ApexParserTest.java | 36 +++++++++---------- .../nawforce/apexparser/SOSLParserTest.java | 12 +++---- .../apexparser/SyntaxErrorCounter.java | 8 +++-- npm/src/__tests__/ApexVisitorTest.ts | 2 +- package.json | 5 +-- 8 files changed, 73 insertions(+), 48 deletions(-) diff --git a/README.md b/README.md index 2ced0a6..8a05964 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ -apex-parser -=========== +# 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. +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,23 +20,28 @@ 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. + +## 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 verions of this dependency if you use it directly. To avoid issues you can +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 @@ -50,16 +55,18 @@ NPM "apex-parser": "^2.15.0" -### Building +## Building + To build both distributions: npm run build -### History +## History + 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 +85,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..ebc1a09 100644 --- a/antlr/ApexLexer.g4 +++ b/antlr/ApexLexer.g4 @@ -162,6 +162,8 @@ TRACKING : 'tracking'; VIEWSTAT : 'viewstat'; CUSTOM : 'custom'; STANDARD : 'standard'; +DISTANCE : 'distance'; +GEOLOCATION : 'geolocation'; // SOQL Date functions CALENDAR_MONTH : 'calendar_month'; @@ -378,7 +380,6 @@ DIV : '/'; BITAND : '&'; BITOR : '|'; CARET : '^'; -MOD : '%'; MAPTO : '=>'; ADD_ASSIGN : '+='; @@ -388,7 +389,6 @@ DIV_ASSIGN : '/='; AND_ASSIGN : '&='; OR_ASSIGN : '|='; XOR_ASSIGN : '^='; -MOD_ASSIGN : '%='; LSHIFT_ASSIGN : '<<='; RSHIFT_ASSIGN : '>>='; URSHIFT_ASSIGN : '>>>='; diff --git a/antlr/ApexParser.g4 b/antlr/ApexParser.g4 index 339e7d8..2edb195 100644 --- a/antlr/ApexParser.g4 +++ b/antlr/ApexParser.g4 @@ -436,7 +436,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 +460,6 @@ expression | RSHIFT_ASSIGN | URSHIFT_ASSIGN | LSHIFT_ASSIGN - | MOD_ASSIGN ) expression # assignExpression ; @@ -609,6 +608,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 +616,17 @@ soqlFunction | fieldName ; +locationValue + : fieldName + | boundExpression + | GEOLOCATION LPAREN coordinateValue COMMA coordinateValue RPAREN + ; + +coordinateValue + : signedNumber + | boundExpression + ; + typeOf : TYPEOF fieldName whenClause+ elseClause? END; @@ -902,6 +913,8 @@ id | VIEWSTAT | STANDARD | CUSTOM + | DISTANCE + | GEOLOCATION // SOQL date functions | CALENDAR_MONTH | CALENDAR_QUARTER @@ -1086,6 +1099,8 @@ anyId | VIEWSTAT | STANDARD | CUSTOM + | DISTANCE + | GEOLOCATION // SOQL date functions | CALENDAR_MONTH | CALENDAR_QUARTER diff --git a/jvm/src/test/java/com/nawforce/apexparser/ApexParserTest.java b/jvm/src/test/java/com/nawforce/apexparser/ApexParserTest.java index 116b639..5fb7c19 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" + 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/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.json b/package.json index 17c9a21..f94424e 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,9 @@ "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", + "build": "npm run build-npm && npm run build-jvm", + "build-npm": "npm run init-npm && cd npm && npm run build && npm run test && cd ..", + "build-jvm": "npm run init-jvm && cd jvm && mvn package && cd ..", "init-npm": "cp antlr/* npm/antlr && (cd npm; npm ci)", "init-jvm": "cp antlr/* jvm/src/main/antlr4/com/nawforce/apexparser" }, From b51a35b95b2d34bc67183b247006f8ff6dc613df Mon Sep 17 00:00:00 2001 From: Kevin Jones Date: Mon, 14 Nov 2022 23:14:28 +0000 Subject: [PATCH 02/21] Add basic build actions --- .github/workflows/Build11.yml | 31 +++++++++++++++++++++++++++++++ .github/workflows/Build8.yml | 31 +++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 .github/workflows/Build11.yml create mode 100644 .github/workflows/Build8.yml diff --git a/.github/workflows/Build11.yml b/.github/workflows/Build11.yml new file mode 100644 index 0000000..9e8bcd9 --- /dev/null +++ b/.github/workflows/Build11.yml @@ -0,0 +1,31 @@ +name: 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 11 + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: 11 + cache: 'maven' + + - name: Build & Test + run: npm run build diff --git a/.github/workflows/Build8.yml b/.github/workflows/Build8.yml new file mode 100644 index 0000000..dddd508 --- /dev/null +++ b/.github/workflows/Build8.yml @@ -0,0 +1,31 @@ +name: 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 run build From dd4bcfe577389eb6b3a480c8b2874ed0be51d257 Mon Sep 17 00:00:00 2001 From: Kevin Jones Date: Mon, 14 Nov 2022 23:38:13 +0000 Subject: [PATCH 03/21] Fix sed handling in portable way --- npm/package-lock.json | 107 ++++++++++++++++++++++++++++++++++++++++++ npm/package.json | 14 ++++-- npm/patch | 5 ++ 3 files changed, 121 insertions(+), 5 deletions(-) create mode 100644 npm/patch diff --git a/npm/package-lock.json b/npm/package-lock.json index 1abf834..494cf71 100644 --- a/npm/package-lock.json +++ b/npm/package-lock.json @@ -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": { @@ -2851,6 +2852,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", @@ -4238,6 +4248,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", @@ -4606,6 +4625,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", @@ -4800,6 +4831,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", @@ -5256,6 +5320,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" @@ -7610,6 +7675,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", @@ -8672,6 +8743,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", @@ -8947,6 +9024,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", @@ -9074,6 +9160,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", diff --git a/npm/package.json b/npm/package.json index 2596abc..b15554a 100644 --- a/npm/package.json +++ b/npm/package.json @@ -7,12 +7,15 @@ "main": "lib/index.js", "license": "BSD-3-Clause", "scripts": { - "build": "npm run antlr4ts && cp ../README.md . && tsc", - "test": "jest --config jestconfig.json lib", - "antlr4ts": "npm run antlr-build && npm run antlr-patch ", + "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()'" + "antlr-patch": "node patch", + "build": "npm run clean && npm run antlr4ts && cp ../README.md . && tsc", + "check": "node -e 'require(\"./lib/index.js\").check()'", + "clean": "rm -rf lib", + "test": "jest --config jestconfig.json lib", + "test-samples": "jest --config sys.jestconfig.json lib", + "test-snapshot": "npm run test-samples -- --updateSnapshot" }, "files": [ "lib/**/*" @@ -30,6 +33,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": { 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 From e392bbddff8f84d1e747e72279f3fee0635ec236 Mon Sep 17 00:00:00 2001 From: Aaron Hurst Date: Sat, 19 Nov 2022 17:10:49 +0000 Subject: [PATCH 04/21] Match other ApexDoc cases. There are several tests in PMD that expect single-line ApexDoc comments. Also handles case where ApexDoc begins with e.g. /************** Add unit tests. See: https://github.com/SalesforceFoundation/ApexDoc Change-Id: I7ecd7cd9f1f840503b2aadf8e1727aeb65aaed63 --- antlr/ApexLexer.g4 | 2 +- .../nawforce/apexparser/ApexLexerTest.java | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/antlr/ApexLexer.g4 b/antlr/ApexLexer.g4 index ebc1a09..2c7b253 100644 --- a/antlr/ApexLexer.g4 +++ b/antlr/ApexLexer.g4 @@ -434,7 +434,7 @@ WS : [ \t\r\n\u000C]+ -> channel(WHITESPACE_CHANNEL) ; DOC_COMMENT - : '/**' [\r\n] .*? '*/' -> channel(COMMENT_CHANNEL) + : '/**' .*? '*/' -> channel(COMMENT_CHANNEL) ; COMMENT 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()); + } } From 27e269e139d5132fa62829f67599b93da7f85a67 Mon Sep 17 00:00:00 2001 From: Kevin Jones Date: Sun, 20 Nov 2022 11:59:58 +0000 Subject: [PATCH 05/21] Update build actions --- .../workflows/{Build8.yml => Build-Base.yml} | 2 +- .../workflows/{Build11.yml => Build-Next.yml} | 6 ++-- .github/workflows/Build-Windows.yml | 31 +++++++++++++++++++ 3 files changed, 35 insertions(+), 4 deletions(-) rename .github/workflows/{Build8.yml => Build-Base.yml} (94%) rename .github/workflows/{Build11.yml => Build-Next.yml} (83%) create mode 100644 .github/workflows/Build-Windows.yml diff --git a/.github/workflows/Build8.yml b/.github/workflows/Build-Base.yml similarity index 94% rename from .github/workflows/Build8.yml rename to .github/workflows/Build-Base.yml index dddd508..8ac2edb 100644 --- a/.github/workflows/Build8.yml +++ b/.github/workflows/Build-Base.yml @@ -1,4 +1,4 @@ -name: Build +name: Linux Java8/Node14 Build on: push: diff --git a/.github/workflows/Build11.yml b/.github/workflows/Build-Next.yml similarity index 83% rename from .github/workflows/Build11.yml rename to .github/workflows/Build-Next.yml index 9e8bcd9..321c79b 100644 --- a/.github/workflows/Build11.yml +++ b/.github/workflows/Build-Next.yml @@ -1,4 +1,4 @@ -name: Build +name: Linux Java11/Node18 Build on: push: @@ -15,10 +15,10 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Set up Node 14 + - name: Set up Node 18 uses: actions/setup-node@v3 with: - node-version: 14 + node-version: 18 - name: Set up JDK 11 uses: actions/setup-java@v3 diff --git a/.github/workflows/Build-Windows.yml b/.github/workflows/Build-Windows.yml new file mode 100644 index 0000000..3ae3ffb --- /dev/null +++ b/.github/workflows/Build-Windows.yml @@ -0,0 +1,31 @@ +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 run build From 9db59df9508fd7c9290839c8f1a1892f78ef734e Mon Sep 17 00:00:00 2001 From: Kevin Jones Date: Sun, 20 Nov 2022 12:18:33 +0000 Subject: [PATCH 06/21] Use copyfiles to remove cp use in run script --- .gitignore | 1 + package-lock.json | 358 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 11 +- 3 files changed, 364 insertions(+), 6 deletions(-) create mode 100644 .gitignore create mode 100644 package-lock.json 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/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 f94424e..d1ea5e3 100644 --- a/package.json +++ b/package.json @@ -8,14 +8,13 @@ "build": "npm run build-npm && npm run build-jvm", "build-npm": "npm run init-npm && cd npm && npm run build && npm run test && cd ..", "build-jvm": "npm run init-jvm && cd jvm && mvn package && cd ..", - "init-npm": "cp antlr/* npm/antlr && (cd npm; npm ci)", - "init-jvm": "cp antlr/* jvm/src/main/antlr4/com/nawforce/apexparser" - }, - "files": [ - ], - "dependencies": { + "init-npm": "copyfiles \"antlr/*\" npm/antlr && (cd npm; npm ci)", + "init-jvm": "copyfiles \"antlr/*\" jvm/src/main/antlr4/com/nawforce/apexparser" }, + "files": [], + "dependencies": {}, "devDependencies": { + "copyfiles": "2.4.1" }, "engines": { "node": ">=8.0.0" From 94323da3c53dd2cc90173fdd24fc10de06b91553 Mon Sep 17 00:00:00 2001 From: Kevin Jones Date: Sun, 20 Nov 2022 12:26:09 +0000 Subject: [PATCH 07/21] Fix copyfiles --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index d1ea5e3..1816c01 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,8 @@ "build": "npm run build-npm && npm run build-jvm", "build-npm": "npm run init-npm && cd npm && npm run build && npm run test && cd ..", "build-jvm": "npm run init-jvm && cd jvm && mvn package && cd ..", - "init-npm": "copyfiles \"antlr/*\" npm/antlr && (cd npm; npm ci)", - "init-jvm": "copyfiles \"antlr/*\" jvm/src/main/antlr4/com/nawforce/apexparser" + "init-npm": "copyfiles -f \"antlr/*.g4\" npm/antlr && (cd npm; npm ci)", + "init-jvm": "copyfiles -f \"antlr/*.g4\" jvm/src/main/antlr4/com/nawforce/apexparser" }, "files": [], "dependencies": {}, @@ -19,4 +19,4 @@ "engines": { "node": ">=8.0.0" } -} +} \ No newline at end of file From d35dd9422d76b0e58b4bc18ee6877a3470918f9f Mon Sep 17 00:00:00 2001 From: Kevin Jones Date: Sun, 20 Nov 2022 12:35:07 +0000 Subject: [PATCH 08/21] Add missing npm ci --- .github/workflows/Build-Base.yml | 4 +++- .github/workflows/Build-Next.yml | 4 +++- .github/workflows/Build-Windows.yml | 4 +++- package.json | 4 ++-- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/.github/workflows/Build-Base.yml b/.github/workflows/Build-Base.yml index 8ac2edb..42d11ce 100644 --- a/.github/workflows/Build-Base.yml +++ b/.github/workflows/Build-Base.yml @@ -28,4 +28,6 @@ jobs: cache: 'maven' - name: Build & Test - run: npm run build + run: | + npm ci + npm run build diff --git a/.github/workflows/Build-Next.yml b/.github/workflows/Build-Next.yml index 321c79b..913a51d 100644 --- a/.github/workflows/Build-Next.yml +++ b/.github/workflows/Build-Next.yml @@ -28,4 +28,6 @@ jobs: cache: 'maven' - name: Build & Test - run: npm run build + run: | + npm ci + npm run build diff --git a/.github/workflows/Build-Windows.yml b/.github/workflows/Build-Windows.yml index 3ae3ffb..62c31a6 100644 --- a/.github/workflows/Build-Windows.yml +++ b/.github/workflows/Build-Windows.yml @@ -28,4 +28,6 @@ jobs: cache: 'maven' - name: Build & Test - run: npm run build + run: | + npm ci + npm run build diff --git a/package.json b/package.json index 1816c01..e0e3bf1 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,9 @@ "repository": "nawforce/apex-parser", "scripts": { "build": "npm run build-npm && npm run build-jvm", - "build-npm": "npm run init-npm && cd npm && npm run build && npm run test && cd ..", + "build-npm": "npm run init-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 && (cd npm; npm ci)", + "init-npm": "copyfiles -f \"antlr/*.g4\" npm/antlr", "init-jvm": "copyfiles -f \"antlr/*.g4\" jvm/src/main/antlr4/com/nawforce/apexparser" }, "files": [], From 071fecb782fecb118f02fff301641a71b3db1066 Mon Sep 17 00:00:00 2001 From: Kevin Jones Date: Sun, 20 Nov 2022 17:33:14 +0000 Subject: [PATCH 09/21] Remove more sh from npm scripts --- npm/package.json | 7 +++---- package.json | 5 +++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/npm/package.json b/npm/package.json index b15554a..23ecca0 100644 --- a/npm/package.json +++ b/npm/package.json @@ -8,11 +8,10 @@ "license": "BSD-3-Clause", "scripts": { "antlr4ts": "npm run antlr-build && npm run antlr-patch", - "antlr-build": "(cd antlr; antlr4ts -visitor -o ../src ApexLexer.g4 ApexParser.g4)", + "antlr-build": "cd antlr && antlr4ts -visitor -o ../src ApexLexer.g4 ApexParser.g4", "antlr-patch": "node patch", - "build": "npm run clean && npm run antlr4ts && cp ../README.md . && tsc", + "build": "npm run antlr4ts && tsc", "check": "node -e 'require(\"./lib/index.js\").check()'", - "clean": "rm -rf lib", "test": "jest --config jestconfig.json lib", "test-samples": "jest --config sys.jestconfig.json lib", "test-snapshot": "npm run test-samples -- --updateSnapshot" @@ -41,4 +40,4 @@ }, "homepage": "https://github.com/nawforce/apex-parser", "repository": "nawforce/apex-parser" -} +} \ No newline at end of file diff --git a/package.json b/package.json index e0e3bf1..ac200ef 100644 --- a/package.json +++ b/package.json @@ -6,10 +6,11 @@ "repository": "nawforce/apex-parser", "scripts": { "build": "npm run build-npm && npm run build-jvm", - "build-npm": "npm run init-npm && cd npm && npm ci && npm run build && npm run test && cd ..", + "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" + "init-jvm": "copyfiles -f \"antlr/*.g4\" jvm/src/main/antlr4/com/nawforce/apexparser", + "copy-readme-npm": "copyfiles README.md npm" }, "files": [], "dependencies": {}, From 36f184ab5bf27b14bd6d42308c47cba766e41c46 Mon Sep 17 00:00:00 2001 From: Kevin Jones Date: Sun, 20 Nov 2022 17:46:01 +0000 Subject: [PATCH 10/21] Add npm ci to build instructions --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 8a05964..7404d9a 100644 --- a/README.md +++ b/README.md @@ -26,9 +26,7 @@ Prior to 2.12.0 the use of ANTLRInputStream for reading data in CaseInsensitiveS ## 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. +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"; @@ -59,6 +57,7 @@ NPM To build both distributions: + npm ci npm run build ## History From b55e7116df049df70d73589d9aa9843ebb3521e7 Mon Sep 17 00:00:00 2001 From: Kevin Jones Date: Sat, 26 Nov 2022 18:32:28 +0000 Subject: [PATCH 11/21] Merge SOQL & void.class fixes --- antlr/ApexLexer.g4 | 7 +++++++ antlr/ApexParser.g4 | 24 +++++++++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/antlr/ApexLexer.g4 b/antlr/ApexLexer.g4 index 2c7b253..d355152 100644 --- a/antlr/ApexLexer.g4 +++ b/antlr/ApexLexer.g4 @@ -195,30 +195,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; diff --git a/antlr/ApexParser.g4 b/antlr/ApexParser.g4 index 2edb195..7603e9a 100644 --- a/antlr/ApexParser.g4 +++ b/antlr/ApexParser.g4 @@ -436,7 +436,7 @@ expression | expression (INC | DEC) # postOpExpression | (ADD|SUB|INC|DEC) expression # preOpExpression | (TILDE|BANG) expression # negExpression - | expression (MUL|DIV) 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 @@ -469,6 +469,7 @@ primary | SUPER # superPrimary | literal # literalPrimary | typeRef DOT CLASS # typeRefPrimary + | VOID DOT CLASS # voidPrimary | id # idPrimary | soqlLiteral # soqlPrimary | soslLiteral # soslPrimary @@ -746,30 +747,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 @@ -944,30 +952,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 @@ -1130,30 +1145,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 From 342c46b4ee8dea997226dd96a1f5d7faa8636316 Mon Sep 17 00:00:00 2001 From: Kevin Jones Date: Sat, 26 Nov 2022 18:52:08 +0000 Subject: [PATCH 12/21] Up rev to 2.16.0 --- README.md | 5 +++-- jvm/pom.xml | 2 +- npm/package-lock.json | 15 ++++++--------- npm/package.json | 4 ++-- 4 files changed, 12 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 7404d9a..6cd556f 100644 --- a/README.md +++ b/README.md @@ -46,12 +46,12 @@ Maven com.github.nawforce apex-parser - 2.15.0 + 2.16.0 NPM - "apex-parser": "^2.15.0" + "apex-parser": "^2.16.0" ## Building @@ -62,6 +62,7 @@ To build both distributions: ## History + 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 diff --git a/jvm/pom.xml b/jvm/pom.xml index 6a11ff0..cda3d41 100644 --- a/jvm/pom.xml +++ b/jvm/pom.xml @@ -4,7 +4,7 @@ com.github.nawforce apex-parser - 2.15.0 + 2.16.0 jar apex-parser diff --git a/npm/package-lock.json b/npm/package-lock.json index 494cf71..91e709b 100644 --- a/npm/package-lock.json +++ b/npm/package-lock.json @@ -1,12 +1,12 @@ { "name": "apex-parser", - "version": "2.15.0", + "version": "2.16.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "apex-parser", - "version": "2.15.0", + "version": "2.16.0", "license": "BSD-3-Clause", "dependencies": { "antlr4ts": "0.5.0-alpha.4", @@ -6562,8 +6562,7 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} + "dev": true }, "acorn-walk": { "version": "7.2.0", @@ -8249,8 +8248,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "requires": {} + "dev": true }, "jest-regex-util": { "version": "27.5.1", @@ -9633,8 +9631,7 @@ "version": "7.5.7", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", - "dev": true, - "requires": {} + "dev": true }, "xml-name-validator": { "version": "3.0.0", @@ -9682,4 +9679,4 @@ "dev": true } } -} +} \ No newline at end of file diff --git a/npm/package.json b/npm/package.json index 23ecca0..004b5eb 100644 --- a/npm/package.json +++ b/npm/package.json @@ -1,6 +1,6 @@ { "name": "apex-parser", - "version": "2.15.0", + "version": "2.16.0", "author": "Kevin Jones (https://github.com/nawforce)", "bugs": "https://github.com/nawforce/apex-parser/issues", "description": "Javascript parser for Salesforce Apex Language", @@ -40,4 +40,4 @@ }, "homepage": "https://github.com/nawforce/apex-parser", "repository": "nawforce/apex-parser" -} \ No newline at end of file +} From 80b958b3bb8478b5c60c5148ea2588e0d85a578b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 8 Jan 2023 15:25:43 +0000 Subject: [PATCH 13/21] Bump json5 from 2.2.1 to 2.2.3 in /npm Bumps [json5](https://github.com/json5/json5) from 2.2.1 to 2.2.3. - [Release notes](https://github.com/json5/json5/releases) - [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md) - [Commits](https://github.com/json5/json5/compare/v2.2.1...v2.2.3) --- updated-dependencies: - dependency-name: json5 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- npm/package-lock.json | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/npm/package-lock.json b/npm/package-lock.json index 91e709b..c776eff 100644 --- a/npm/package-lock.json +++ b/npm/package-lock.json @@ -4056,9 +4056,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" @@ -6562,7 +6562,8 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true + "dev": true, + "requires": {} }, "acorn-walk": { "version": "7.2.0", @@ -8248,7 +8249,8 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true + "dev": true, + "requires": {} }, "jest-regex-util": { "version": "27.5.1", @@ -8595,9 +8597,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": { @@ -9631,7 +9633,8 @@ "version": "7.5.7", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", - "dev": true + "dev": true, + "requires": {} }, "xml-name-validator": { "version": "3.0.0", @@ -9679,4 +9682,4 @@ "dev": true } } -} \ No newline at end of file +} From 84f603db6e2c14b11588b987448e09d70f58f491 Mon Sep 17 00:00:00 2001 From: Aaron Hurst Date: Mon, 16 Jan 2023 20:08:54 +0000 Subject: [PATCH 14/21] Update grammar to include access-level syntax in SOQL and DML. https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_enforce_usermode.htm Add unit tests. Tested against internal codebase. Change-Id: Ica0ef8de26f1831a2ae5e336e44ec091c240b738 --- antlr/ApexLexer.g4 | 6 ++++ antlr/ApexParser.g4 | 28 +++++++++++++++---- .../nawforce/apexparser/ApexParserTest.java | 24 ++++++++++++++++ 3 files changed, 52 insertions(+), 6 deletions(-) diff --git a/antlr/ApexLexer.g4 b/antlr/ApexLexer.g4 index d355152..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'; diff --git a/antlr/ApexParser.g4 b/antlr/ApexParser.g4 index 7603e9a..830073e 100644 --- a/antlr/ApexParser.g4 +++ b/antlr/ApexParser.g4 @@ -342,28 +342,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 @@ -686,6 +690,8 @@ signedNumber withClause : WITH DATA CATEGORY filteringExpression | WITH SECURITY_ENFORCED + | WITH SYSTEM_MODE + | WITH USER_MODE | WITH logicalExpression; filteringExpression @@ -866,6 +872,9 @@ id | WHEN | WITH | WITHOUT + // DML Keywords + | USER + | SYSTEM // SOQL Values | IntegralCurrencyLiteral // SOQL Specific Keywords @@ -914,6 +923,8 @@ id | BELOW | ABOVE_OR_BELOW | SECURITY_ENFORCED + | USER_MODE + | SYSTEM_MODE | REFERENCE | CUBE | FORMAT @@ -1059,6 +1070,9 @@ anyId | WHILE | WITH | WITHOUT + // DML Keywords + | USER + | SYSTEM // SOQL Values | IntegralCurrencyLiteral // SOQL Specific Keywords @@ -1107,6 +1121,8 @@ anyId | BELOW | ABOVE_OR_BELOW | SECURITY_ENFORCED + | SYSTEM_MODE + | USER_MODE | REFERENCE | CUBE | FORMAT diff --git a/jvm/src/test/java/com/nawforce/apexparser/ApexParserTest.java b/jvm/src/test/java/com/nawforce/apexparser/ApexParserTest.java index 5fb7c19..7497c9a 100644 --- a/jvm/src/test/java/com/nawforce/apexparser/ApexParserTest.java +++ b/jvm/src/test/java/com/nawforce/apexparser/ApexParserTest.java @@ -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()); + } + } } From 75d375d3e0beedb7a0c16f23cf7ed23082047f52 Mon Sep 17 00:00:00 2001 From: Kevin Jones Date: Mon, 23 Jan 2023 16:32:56 +0000 Subject: [PATCH 15/21] Add user/system mode tests for JS --- npm/src/__tests__/ApexParserTest.ts | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) 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) + } +}) From 0d37f6ba29a59c71ff6bd074b78b3dda24dcd157 Mon Sep 17 00:00:00 2001 From: Kevin Jones Date: Sun, 5 Feb 2023 16:54:52 +0000 Subject: [PATCH 16/21] Up rev 2.17.0 --- README.md | 5 +++-- jvm/pom.xml | 2 +- npm/package-lock.json | 4 ++-- npm/package.json | 4 ++-- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 6cd556f..f534bab 100644 --- a/README.md +++ b/README.md @@ -46,12 +46,12 @@ Maven com.github.nawforce apex-parser - 2.16.0 + 2.17.0 NPM - "apex-parser": "^2.16.0" + "apex-parser": "^2.17.0" ## Building @@ -62,6 +62,7 @@ To build both distributions: ## 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 diff --git a/jvm/pom.xml b/jvm/pom.xml index cda3d41..02688a8 100644 --- a/jvm/pom.xml +++ b/jvm/pom.xml @@ -4,7 +4,7 @@ com.github.nawforce apex-parser - 2.16.0 + 2.17.0 jar apex-parser diff --git a/npm/package-lock.json b/npm/package-lock.json index 91e709b..170fdc5 100644 --- a/npm/package-lock.json +++ b/npm/package-lock.json @@ -1,12 +1,12 @@ { "name": "apex-parser", - "version": "2.16.0", + "version": "2.17.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "apex-parser", - "version": "2.16.0", + "version": "2.17.0", "license": "BSD-3-Clause", "dependencies": { "antlr4ts": "0.5.0-alpha.4", diff --git a/npm/package.json b/npm/package.json index 004b5eb..44f3c62 100644 --- a/npm/package.json +++ b/npm/package.json @@ -1,6 +1,6 @@ { "name": "apex-parser", - "version": "2.16.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", @@ -40,4 +40,4 @@ }, "homepage": "https://github.com/nawforce/apex-parser", "repository": "nawforce/apex-parser" -} +} \ No newline at end of file From 2897ff2c42e520abf752506b0a4c9f8878215643 Mon Sep 17 00:00:00 2001 From: "Christian G. Warden" Date: Wed, 29 Nov 2023 10:52:00 -0600 Subject: [PATCH 17/21] Add TYPEOF to Subquery Update grammar to reflect that TYPEOF can be used in subqueries. --- antlr/ApexParser.g4 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/antlr/ApexParser.g4 b/antlr/ApexParser.g4 index 830073e..d8c7627 100644 --- a/antlr/ApexParser.g4 +++ b/antlr/ApexParser.g4 @@ -582,7 +582,9 @@ subFieldList subFieldEntry : fieldName soqlId? - | soqlFunction soqlId?; + | soqlFunction soqlId? + | typeOf + ; soqlFieldsParameter : ALL From 78557d6eb2111feb65c7d6d60a7f0e3b04f410ce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 22 Dec 2023 15:50:05 +0000 Subject: [PATCH 18/21] Bump tough-cookie from 4.0.0 to 4.1.3 in /npm Bumps [tough-cookie](https://github.com/salesforce/tough-cookie) from 4.0.0 to 4.1.3. - [Release notes](https://github.com/salesforce/tough-cookie/releases) - [Changelog](https://github.com/salesforce/tough-cookie/blob/master/CHANGELOG.md) - [Commits](https://github.com/salesforce/tough-cookie/compare/v4.0.0...v4.1.3) --- updated-dependencies: - dependency-name: tough-cookie dependency-type: indirect ... Signed-off-by: dependabot[bot] --- npm/package-lock.json | 74 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 60 insertions(+), 14 deletions(-) diff --git a/npm/package-lock.json b/npm/package-lock.json index 248b67f..a57703a 100644 --- a/npm/package-lock.json +++ b/npm/package-lock.json @@ -4599,6 +4599,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", @@ -4667,6 +4673,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", @@ -5168,14 +5180,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" @@ -5270,9 +5283,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" @@ -5287,6 +5300,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", @@ -9012,6 +9035,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", @@ -9051,6 +9080,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", @@ -9416,14 +9451,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": { @@ -9487,9 +9523,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": { @@ -9501,6 +9537,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", From c3b235e2b452e71bb79e53935d8b6c8349a5ef31 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 22 Dec 2023 15:50:20 +0000 Subject: [PATCH 19/21] Bump @babel/traverse from 7.17.9 to 7.23.6 in /npm Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.17.9 to 7.23.6. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.23.6/packages/babel-traverse) --- updated-dependencies: - dependency-name: "@babel/traverse" dependency-type: indirect ... Signed-off-by: dependabot[bot] --- npm/package-lock.json | 644 ++++++++++++++++++++++++++++++------------ 1 file changed, 469 insertions(+), 175 deletions(-) diff --git a/npm/package-lock.json b/npm/package-lock.json index 248b67f..24be68d 100644 --- a/npm/package-lock.json +++ b/npm/package-lock.json @@ -110,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", @@ -160,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" @@ -249,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" @@ -293,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": { @@ -378,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" @@ -552,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": { @@ -599,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", @@ -619,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": { @@ -961,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": { @@ -5586,22 +5752,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": { @@ -5625,31 +5784,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": { @@ -5693,18 +5849,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": { @@ -5725,13 +5887,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": { @@ -5794,9 +5956,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": { @@ -5917,69 +6079,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" } }, @@ -6249,26 +6526,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": { From 021dcc5103b7abb516bbb0da35b58f0636aa757f Mon Sep 17 00:00:00 2001 From: Kevin Jones Date: Sat, 23 Dec 2023 19:25:19 +0000 Subject: [PATCH 20/21] Add triggerUnit2 for trigger parsing fixes --- antlr/ApexParser.g4 | 23 ++++++ .../nawforce/apexparser/ApexTrigger2Test.java | 77 +++++++++++++++++++ npm/src/__tests__/ApexTrigger2Test.ts | 66 ++++++++++++++++ 3 files changed, 166 insertions(+) create mode 100644 jvm/src/test/java/com/nawforce/apexparser/ApexTrigger2Test.java create mode 100644 npm/src/__tests__/ApexTrigger2Test.ts diff --git a/antlr/ApexParser.g4 b/antlr/ApexParser.g4 index d8c7627..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 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/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 From 6f18ab054aa10e3417d02ccd6fa8f31b3b554c8e Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Fri, 1 Mar 2024 14:25:12 +0100 Subject: [PATCH 21/21] Update README.md - Add archive note --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index f534bab..c8aa3ea 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ +> This repository has been **archived**. The new home for the Apex Parser is https://github.com/apex-dev-tools/apex-parser + +----- + # 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.