@zuplo/cli 6.70.70 → 6.70.71

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/node_modules/@types/node/README.md +1 -1
  2. package/node_modules/@types/node/http2.d.ts +1 -0
  3. package/node_modules/@types/node/package.json +2 -2
  4. package/node_modules/@zuplo/core/package.json +1 -1
  5. package/node_modules/@zuplo/graphql/package.json +1 -1
  6. package/node_modules/@zuplo/openapi-tools/package.json +1 -1
  7. package/node_modules/@zuplo/otel/package.json +1 -1
  8. package/node_modules/@zuplo/runtime/out/esm/{chunk-GEVKFSKR.js → chunk-AZIRK6TC.js} +1 -1
  9. package/node_modules/@zuplo/runtime/out/esm/{chunk-GEVKFSKR.js.map → chunk-AZIRK6TC.js.map} +1 -1
  10. package/node_modules/@zuplo/runtime/out/esm/{chunk-MJPI3GFA.js → chunk-E7U425SB.js} +72 -72
  11. package/node_modules/@zuplo/runtime/out/esm/chunk-E7U425SB.js.map +1 -0
  12. package/node_modules/@zuplo/runtime/out/esm/index.js +1 -1
  13. package/node_modules/@zuplo/runtime/out/esm/index.js.map +1 -1
  14. package/node_modules/@zuplo/runtime/out/esm/mcp-gateway/index.js +7 -7
  15. package/node_modules/@zuplo/runtime/out/esm/mcp-gateway/index.js.map +1 -1
  16. package/node_modules/@zuplo/runtime/out/esm/mocks/index.js +1 -1
  17. package/node_modules/@zuplo/runtime/out/types/index.d.ts +61 -0
  18. package/node_modules/@zuplo/runtime/package.json +1 -1
  19. package/node_modules/acorn/CHANGELOG.md +14 -0
  20. package/node_modules/acorn/README.md +3 -0
  21. package/node_modules/acorn/dist/acorn.d.mts +6 -0
  22. package/node_modules/acorn/dist/acorn.d.ts +6 -0
  23. package/node_modules/acorn/dist/acorn.js +87 -49
  24. package/node_modules/acorn/dist/acorn.mjs +87 -49
  25. package/node_modules/acorn/package.json +2 -2
  26. package/node_modules/protobufjs/dist/light/protobuf.js +145 -188
  27. package/node_modules/protobufjs/dist/light/protobuf.js.map +1 -1
  28. package/node_modules/protobufjs/dist/light/protobuf.min.js +3 -3
  29. package/node_modules/protobufjs/dist/light/protobuf.min.js.map +1 -1
  30. package/node_modules/protobufjs/dist/minimal/protobuf.js +33 -76
  31. package/node_modules/protobufjs/dist/minimal/protobuf.js.map +1 -1
  32. package/node_modules/protobufjs/dist/minimal/protobuf.min.js +3 -3
  33. package/node_modules/protobufjs/dist/minimal/protobuf.min.js.map +1 -1
  34. package/node_modules/protobufjs/dist/protobuf.js +165 -208
  35. package/node_modules/protobufjs/dist/protobuf.js.map +1 -1
  36. package/node_modules/protobufjs/dist/protobuf.min.js +3 -3
  37. package/node_modules/protobufjs/dist/protobuf.min.js.map +1 -1
  38. package/node_modules/protobufjs/index.d.ts +0 -8
  39. package/node_modules/protobufjs/package.json +2 -3
  40. package/node_modules/protobufjs/src/util/minimal.js +0 -3
  41. package/package.json +6 -6
  42. package/node_modules/@protobufjs/inquire/CHANGELOG.md +0 -8
  43. package/node_modules/@protobufjs/inquire/LICENSE +0 -26
  44. package/node_modules/@protobufjs/inquire/README.md +0 -13
  45. package/node_modules/@protobufjs/inquire/index.d.ts +0 -10
  46. package/node_modules/@protobufjs/inquire/index.js +0 -38
  47. package/node_modules/@protobufjs/inquire/package.json +0 -21
  48. package/node_modules/@protobufjs/inquire/tests/data/array.js +0 -1
  49. package/node_modules/@protobufjs/inquire/tests/data/emptyArray.js +0 -1
  50. package/node_modules/@protobufjs/inquire/tests/data/emptyObject.js +0 -1
  51. package/node_modules/@protobufjs/inquire/tests/data/object.js +0 -1
  52. package/node_modules/@protobufjs/inquire/tests/index.js +0 -20
  53. package/node_modules/@zuplo/runtime/out/esm/chunk-MJPI3GFA.js.map +0 -1
  54. /package/node_modules/@zuplo/runtime/out/esm/{chunk-MJPI3GFA.js.LEGAL.txt → chunk-E7U425SB.js.LEGAL.txt} +0 -0
@@ -22,5 +22,5 @@
22
22
  * DEALINGS IN THE SOFTWARE.
23
23
  *--------------------------------------------------------------------------------------------*/
24
24
 
25
- import{b as l}from"../chunk-GEVKFSKR.js";import{a as o,da as n}from"../chunk-ZIKV2LUM.js";function g(u={request:new Request("https://api.example.com")}){let e=[];function t(i){e.push(Promise.resolve(i))}return o(t,"waitUntil"),{context:new s({event:{waitUntil:t},route:u.route}),invokeResponse:o(async()=>{await Promise.all(e)},"invokeResponse")}}o(g,"createMockContext");var p={path:"/",methods:["GET"],handler:{module:{},export:"default"},raw:o(()=>({}),"raw")},s=class extends EventTarget{static{o(this,"MockZuploContext")}#e;contextId;requestId;log;route;custom;incomingRequestProperties;parentContext;analyticsContext;constructor({event:e,route:t=p,parentContext:r}){super(),this.requestId=crypto.randomUUID(),this.contextId=crypto.randomUUID(),this.log={info:n.console.info,log:n.console.log,debug:n.console.debug,warn:n.console.warn,error:n.console.error,setLogProperties:o(()=>{},"setLogProperties")},this.custom={},this.route=t,this.incomingRequestProperties={asn:1234,asOrganization:"ORGANIZATION",city:"Seattle",region:"Washington",regionCode:"WA",colo:"SEA",continent:"NA",country:"US",postalCode:"98004",metroCode:"SEA",latitude:void 0,longitude:void 0,timezone:void 0,httpProtocol:void 0,clientCert:void 0,clientMtlsVerificationStatus:void 0,clientMtlsVerificationReason:void 0,clientCertFingerprintSha256:void 0,clientCertNotBefore:void 0,clientCertNotAfter:void 0,clientCertIssuerDn:void 0,clientCertSubjectDn:void 0},this.parentContext=r,this.#e=e,this.analyticsContext=new l(this.requestId)}waitUntil(e){this.#e.waitUntil(e)}invokeInboundPolicy(e,t){throw new Error("Not implemented")}invokeOutboundPolicy(e,t,r){throw new Error("Not implemented")}invokeRoute(e,t){throw new Error("Not implemented")}addResponseSendingHook(e){throw new Error("Not implemented")}addResponseSendingFinalHook(e){throw new Error("Not implemented")}addEventListener(e,t,r){let d=o(i=>{try{typeof t=="function"?t(i):t.handleEvent(i)}catch(a){throw this.log.error(`Error invoking event ${e}. See following logs for details.`),a}},"wrapped");super.addEventListener(e,d,r)}};export{s as MockZuploContext,g as createMockContext};
25
+ import{b as l}from"../chunk-AZIRK6TC.js";import{a as o,da as n}from"../chunk-ZIKV2LUM.js";function g(u={request:new Request("https://api.example.com")}){let e=[];function t(i){e.push(Promise.resolve(i))}return o(t,"waitUntil"),{context:new s({event:{waitUntil:t},route:u.route}),invokeResponse:o(async()=>{await Promise.all(e)},"invokeResponse")}}o(g,"createMockContext");var p={path:"/",methods:["GET"],handler:{module:{},export:"default"},raw:o(()=>({}),"raw")},s=class extends EventTarget{static{o(this,"MockZuploContext")}#e;contextId;requestId;log;route;custom;incomingRequestProperties;parentContext;analyticsContext;constructor({event:e,route:t=p,parentContext:r}){super(),this.requestId=crypto.randomUUID(),this.contextId=crypto.randomUUID(),this.log={info:n.console.info,log:n.console.log,debug:n.console.debug,warn:n.console.warn,error:n.console.error,setLogProperties:o(()=>{},"setLogProperties")},this.custom={},this.route=t,this.incomingRequestProperties={asn:1234,asOrganization:"ORGANIZATION",city:"Seattle",region:"Washington",regionCode:"WA",colo:"SEA",continent:"NA",country:"US",postalCode:"98004",metroCode:"SEA",latitude:void 0,longitude:void 0,timezone:void 0,httpProtocol:void 0,clientCert:void 0,clientMtlsVerificationStatus:void 0,clientMtlsVerificationReason:void 0,clientCertFingerprintSha256:void 0,clientCertNotBefore:void 0,clientCertNotAfter:void 0,clientCertIssuerDn:void 0,clientCertSubjectDn:void 0},this.parentContext=r,this.#e=e,this.analyticsContext=new l(this.requestId)}waitUntil(e){this.#e.waitUntil(e)}invokeInboundPolicy(e,t){throw new Error("Not implemented")}invokeOutboundPolicy(e,t,r){throw new Error("Not implemented")}invokeRoute(e,t){throw new Error("Not implemented")}addResponseSendingHook(e){throw new Error("Not implemented")}addResponseSendingFinalHook(e){throw new Error("Not implemented")}addEventListener(e,t,r){let d=o(i=>{try{typeof t=="function"?t(i):t.handleEvent(i)}catch(a){throw this.log.error(`Error invoking event ${e}. See following logs for details.`),a}},"wrapped");super.addEventListener(e,d,r)}};export{s as MockZuploContext,g as createMockContext};
26
26
  //# sourceMappingURL=index.js.map
@@ -3582,6 +3582,67 @@ export declare class GoogleCloudLoggingPlugin extends LogPlugin {
3582
3582
  /* Excluded from this release type: getTransport */
3583
3583
  }
3584
3584
 
3585
+ /**
3586
+ * Reports GraphQL errors returned in response bodies to Zuplo's GraphQL
3587
+ * analytics. GraphQL servers following the standard Apollo / graphql-yoga
3588
+ * pattern return `200 OK` with an `errors[]` array in the body when an
3589
+ * operation fails, which HTTP-level analytics alone report as a success —
3590
+ * add this policy to a GraphQL route and failed operations show up as
3591
+ * failures on the GraphQL dashboard, classified by error type.
3592
+ *
3593
+ * Each error in `errors[]` is classified from its `extensions.code`
3594
+ * following the Apollo Server conventions (`GRAPHQL_PARSE_FAILED` →
3595
+ * `syntax`, `GRAPHQL_VALIDATION_FAILED` → `validation`, `UNAUTHENTICATED` /
3596
+ * `FORBIDDEN` → `auth`, timeout codes → `timeout`); custom codes can be
3597
+ * mapped with `errorCodeClassification`, and anything unrecognized falls
3598
+ * back to `defaultErrorClass` (`resolver`). Optionally set `logErrors` to
3599
+ * also write a structured warning per errored response. Bodies larger
3600
+ * than `maxResponseBytes` (default 5 MiB) are not inspected.
3601
+ *
3602
+ * The response always passes through unchanged — the body is read from a
3603
+ * clone, and any internal failure is swallowed so reporting can never
3604
+ * break the request. The route must be marked `x-graphql: true` in
3605
+ * `routes.oas.json` (which enables GraphQL analytics for the route);
3606
+ * without the marker the policy logs a warning and does nothing.
3607
+ *
3608
+ * @title GraphQL Analytics
3609
+ * @product api-gateway
3610
+ * @beta
3611
+ * @public
3612
+ * @param response - The outgoing Response from the handler
3613
+ * @param request - The original incoming Request
3614
+ * @param context - The current context of the Request
3615
+ * @param options - The configuration options for the policy
3616
+ * @param policyName - The name of the policy as set in policies.json
3617
+ * @returns A Response
3618
+ */
3619
+ export declare const GraphqlAnalyticsOutboundPolicy: OutboundPolicyHandler<GraphqlAnalyticsOutboundPolicyOptions>;
3620
+
3621
+ /**
3622
+ * The options for the GraphQL Analytics outbound policy. Reads GraphQL `errors[]` from the response body and reports them to Zuplo's GraphQL analytics.
3623
+ * @public
3624
+ */
3625
+ export declare interface GraphqlAnalyticsOutboundPolicyOptions {
3626
+ /**
3627
+ * Additional `extensions.code` → error-class mappings for codes your GraphQL server emits. Entries are merged over (and win against) the built-in Apollo-convention map (`GRAPHQL_PARSE_FAILED` → `syntax`, `GRAPHQL_VALIDATION_FAILED` / `BAD_USER_INPUT` → `validation`, `UNAUTHENTICATED` / `FORBIDDEN` → `auth`, timeout codes → `timeout`, `INTERNAL_SERVER_ERROR` → `resolver`). Keys are matched case-sensitively; built-in codes are matched case-insensitively.
3628
+ */
3629
+ errorCodeClassification?: {
3630
+ [k: string]: "syntax" | "validation" | "auth" | "timeout" | "resolver";
3631
+ };
3632
+ /**
3633
+ * The error class reported for a GraphQL error whose `extensions.code` is missing or not in the classification map.
3634
+ */
3635
+ defaultErrorClass?: "syntax" | "validation" | "auth" | "timeout" | "resolver";
3636
+ /**
3637
+ * When `true`, also write a structured warning to the request log (message, `extensions.code`, and path of each error — capped at the first 10) whenever a response contains GraphQL errors.
3638
+ */
3639
+ logErrors?: boolean;
3640
+ /**
3641
+ * Maximum response body size in bytes the policy will inspect. Larger bodies — by `Content-Length`, or measured while reading when the header is absent — pass through without being scanned, so their GraphQL errors (if any) go unreported. The default is 5 MiB.
3642
+ */
3643
+ maxResponseBytes?: number;
3644
+ }
3645
+
3585
3646
  /**
3586
3647
  * The main request handler for the Zuplo runtime. This class initializes the gateway
3587
3648
  * and handles all incoming HTTP requests through the configured pipeline.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@zuplo/runtime",
3
3
  "type": "module",
4
- "version": "6.70.70",
4
+ "version": "6.70.71",
5
5
  "repository": "https://github.com/zuplo/zuplo",
6
6
  "author": "Zuplo, Inc.",
7
7
  "exports": {
@@ -1,3 +1,17 @@
1
+ ## 8.17.0 (2026-06-11)
2
+
3
+ ### New features
4
+
5
+ The new `strict` option can be used to start script sources in strict mode.
6
+
7
+ ### Bug fixes
8
+
9
+ Fix a number of corner case bugs when `using` or `await using` appear in `for` loop specs.
10
+
11
+ Disallow `new super()` expressions.
12
+
13
+ Don't allow the conditional in a ternary expression to be a (naked) arrow function.
14
+
1
15
  ## 8.16.0 (2026-02-19)
2
16
 
3
17
  ### New features
@@ -86,6 +86,9 @@ required):
86
86
  will be valid, even if `ecmaVersion` is less than 6. If set to `"commonjs"`,
87
87
  it is the same as `"script"` except that the top-level scope behaves like a function.
88
88
 
89
+ - **strict**: When set to true, enable strict parsing mode even if
90
+ `sourceType` is `"script"`.
91
+
89
92
  - **onInsertedSemicolon**: If given a callback, that callback will be
90
93
  called whenever a missing semicolon is inserted by the parser. The
91
94
  callback will be given the character offset of the point where the
@@ -619,6 +619,12 @@ export interface Options {
619
619
  */
620
620
  sourceType?: "script" | "module" | "commonjs"
621
621
 
622
+ /**
623
+ * When set to true, enable strict parsing mode even if `sourceType`
624
+ * is `"script"`.
625
+ */
626
+ strict?: boolean
627
+
622
628
  /**
623
629
  * a callback that will be called when a semicolon is automatically inserted.
624
630
  * @param lastTokEnd the position of the comma as an offset
@@ -619,6 +619,12 @@ export interface Options {
619
619
  */
620
620
  sourceType?: "script" | "module" | "commonjs"
621
621
 
622
+ /**
623
+ * When set to true, enable strict parsing mode even if `sourceType`
624
+ * is `"script"`.
625
+ */
626
+ strict?: boolean
627
+
622
628
  /**
623
629
  * a callback that will be called when a semicolon is automatically inserted.
624
630
  * @param lastTokEnd the position of the comma as an offset
@@ -342,6 +342,9 @@
342
342
  // Can be either `"script"`, `"module"` or `"commonjs"`. This influences global
343
343
  // strict mode and parsing of `import` and `export` declarations.
344
344
  sourceType: "script",
345
+ // When set to true, enable strict parsing mode even if `sourceType`
346
+ // is `"script"`.
347
+ strict: false,
345
348
  // `onInsertedSemicolon` can be a callback that will be called when
346
349
  // a semicolon is automatically inserted. It will be passed the
347
350
  // position of the inserted semicolon as an offset, and if
@@ -568,7 +571,7 @@
568
571
 
569
572
  // Figure out if it's a module code.
570
573
  this.inModule = options.sourceType === "module";
571
- this.strict = this.inModule || this.strictDirective(this.pos);
574
+ this.strict = this.inModule || options.strict === true || this.strictDirective(this.pos);
572
575
 
573
576
  // Used to signify the start of a potential arrow function
574
577
  this.potentialArrowAt = -1;
@@ -606,9 +609,11 @@
606
609
  var prototypeAccessors = { inFunction: { configurable: true },inGenerator: { configurable: true },inAsync: { configurable: true },canAwait: { configurable: true },allowReturn: { configurable: true },allowSuper: { configurable: true },allowDirectSuper: { configurable: true },treatFunctionsAsVar: { configurable: true },allowNewDotTarget: { configurable: true },allowUsing: { configurable: true },inClassStaticBlock: { configurable: true } };
607
610
 
608
611
  Parser.prototype.parse = function parse () {
612
+ var this$1$1 = this;
613
+
609
614
  var node = this.options.program || this.startNode();
610
615
  this.nextToken();
611
- return this.parseTopLevel(node)
616
+ return this.catchStackOverflow(function () { return this$1$1.parseTopLevel(node); })
612
617
  };
613
618
 
614
619
  prototypeAccessors.inFunction.get = function () { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 };
@@ -747,6 +752,17 @@
747
752
  return true
748
753
  };
749
754
 
755
+ pp$9.catchStackOverflow = function(f) {
756
+ try {
757
+ return f()
758
+ } catch (e) {
759
+ if (e instanceof Error && (/\bstack\b.*\b(exceeded|overflow)\b/i.test(e.message) || /\btoo much recursion\b/i.test(e.message)))
760
+ { this.raise(this.start, "Not enough stack space to parse input"); }
761
+ else
762
+ { throw e }
763
+ }
764
+ };
765
+
750
766
  // Asserts that following token is given contextual keyword.
751
767
 
752
768
  pp$9.expectContextual = function(name) {
@@ -850,10 +866,10 @@
850
866
  // to its body instead of creating a new node.
851
867
 
852
868
  pp$8.parseTopLevel = function(node) {
853
- var exports = Object.create(null);
869
+ var exports$1 = Object.create(null);
854
870
  if (!node.body) { node.body = []; }
855
871
  while (this.type !== types$1.eof) {
856
- var stmt = this.parseStatement(null, true, exports);
872
+ var stmt = this.parseStatement(null, true, exports$1);
857
873
  node.body.push(stmt);
858
874
  }
859
875
  if (this.inModule)
@@ -942,7 +958,18 @@
942
958
  while (isIdentifierChar(ch = this.fullCharCodeAt(next)))
943
959
  if (ch === 92) { return true }
944
960
  var id = this.input.slice(idStart, next);
945
- if (keywordRelationalOperator.test(id) || isFor && id === "of") { return false }
961
+ if (keywordRelationalOperator.test(id)) { return false }
962
+ if (isFor && !isAwaitUsing && id === "of") {
963
+ // Look ahead for using declaration with initializer, i.e., `for (using of = ...)`
964
+ skipWhiteSpace.lastIndex = next;
965
+ var skipAfterOf = skipWhiteSpace.exec(this.input);
966
+ next = next + skipAfterOf[0].length;
967
+ if (this.input.charCodeAt(next) !== 61 /* '=' */ ||
968
+ // Check for ==, === and => operators
969
+ (ch = this.input.charCodeAt(next + 1)) === 61 /* '=' */ || ch === 62 /* '>' */) {
970
+ return false
971
+ }
972
+ }
946
973
  return true
947
974
  };
948
975
 
@@ -961,7 +988,7 @@
961
988
  // `if (foo) /blah/.exec(foo)`, where looking at the previous token
962
989
  // does not help.
963
990
 
964
- pp$8.parseStatement = function(context, topLevel, exports) {
991
+ pp$8.parseStatement = function(context, topLevel, exports$1) {
965
992
  var starttype = this.type, node = this.startNode(), kind;
966
993
 
967
994
  if (this.isLet(context)) {
@@ -1016,7 +1043,7 @@
1016
1043
  if (!this.inModule)
1017
1044
  { this.raise(this.start, "'import' and 'export' may appear only with 'sourceType: module'"); }
1018
1045
  }
1019
- return starttype === types$1._import ? this.parseImport(node) : this.parseExport(node, exports)
1046
+ return starttype === types$1._import ? this.parseImport(node) : this.parseExport(node, exports$1)
1020
1047
 
1021
1048
  // If the statement does not start with a statement keyword or a
1022
1049
  // brace, it's an ExpressionStatement or LabeledStatement. We
@@ -1035,6 +1062,10 @@
1035
1062
  if (!this.allowUsing) {
1036
1063
  this.raise(this.start, "Using declaration cannot appear in the top level when source type is `script` or in the bare case statement");
1037
1064
  }
1065
+ if (context) {
1066
+ // Cases like `for (;;) using x = ...;`, `if (true) await using x = ...;`, etc. are not allowed.
1067
+ this.raise(this.start, "Using declaration is not allowed in single-statement positions");
1068
+ }
1038
1069
  if (usingKind === "await using") {
1039
1070
  if (!this.canAwait) {
1040
1071
  this.raise(this.start, "Await using cannot appear outside of async function");
@@ -1168,11 +1199,12 @@
1168
1199
  // Helper method to parse for loop after variable initialization
1169
1200
  pp$8.parseForAfterInit = function(node, init, awaitAt) {
1170
1201
  if ((this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual("of"))) && init.declarations.length === 1) {
1171
- if (this.options.ecmaVersion >= 9) {
1172
- if (this.type === types$1._in) {
1173
- if (awaitAt > -1) { this.unexpected(awaitAt); }
1174
- } else { node.await = awaitAt > -1; }
1175
- }
1202
+ if (this.type === types$1._in) {
1203
+ if ((init.kind === "using" || init.kind === "await using") && !init.declarations[0].init) {
1204
+ this.raise(this.start, "Using declaration is not allowed in for-in loops");
1205
+ }
1206
+ if (this.options.ecmaVersion >= 9 && awaitAt > -1) { this.unexpected(awaitAt); }
1207
+ } else if (this.options.ecmaVersion >= 9) { node.await = awaitAt > -1; }
1176
1208
  return this.parseForIn(node, init)
1177
1209
  }
1178
1210
  if (awaitAt > -1) { this.unexpected(awaitAt); }
@@ -1777,11 +1809,11 @@
1777
1809
 
1778
1810
  // Parses module export declaration.
1779
1811
 
1780
- pp$8.parseExportAllDeclaration = function(node, exports) {
1812
+ pp$8.parseExportAllDeclaration = function(node, exports$1) {
1781
1813
  if (this.options.ecmaVersion >= 11) {
1782
1814
  if (this.eatContextual("as")) {
1783
1815
  node.exported = this.parseModuleExportName();
1784
- this.checkExport(exports, node.exported, this.lastTokStart);
1816
+ this.checkExport(exports$1, node.exported, this.lastTokStart);
1785
1817
  } else {
1786
1818
  node.exported = null;
1787
1819
  }
@@ -1795,14 +1827,14 @@
1795
1827
  return this.finishNode(node, "ExportAllDeclaration")
1796
1828
  };
1797
1829
 
1798
- pp$8.parseExport = function(node, exports) {
1830
+ pp$8.parseExport = function(node, exports$1) {
1799
1831
  this.next();
1800
1832
  // export * from '...'
1801
1833
  if (this.eat(types$1.star)) {
1802
- return this.parseExportAllDeclaration(node, exports)
1834
+ return this.parseExportAllDeclaration(node, exports$1)
1803
1835
  }
1804
1836
  if (this.eat(types$1._default)) { // export default ...
1805
- this.checkExport(exports, "default", this.lastTokStart);
1837
+ this.checkExport(exports$1, "default", this.lastTokStart);
1806
1838
  node.declaration = this.parseExportDefaultDeclaration();
1807
1839
  return this.finishNode(node, "ExportDefaultDeclaration")
1808
1840
  }
@@ -1810,16 +1842,16 @@
1810
1842
  if (this.shouldParseExportStatement()) {
1811
1843
  node.declaration = this.parseExportDeclaration(node);
1812
1844
  if (node.declaration.type === "VariableDeclaration")
1813
- { this.checkVariableExport(exports, node.declaration.declarations); }
1845
+ { this.checkVariableExport(exports$1, node.declaration.declarations); }
1814
1846
  else
1815
- { this.checkExport(exports, node.declaration.id, node.declaration.id.start); }
1847
+ { this.checkExport(exports$1, node.declaration.id, node.declaration.id.start); }
1816
1848
  node.specifiers = [];
1817
1849
  node.source = null;
1818
1850
  if (this.options.ecmaVersion >= 16)
1819
1851
  { node.attributes = []; }
1820
1852
  } else { // export { x, y as z } [from '...']
1821
1853
  node.declaration = null;
1822
- node.specifiers = this.parseExportSpecifiers(exports);
1854
+ node.specifiers = this.parseExportSpecifiers(exports$1);
1823
1855
  if (this.eatContextual("from")) {
1824
1856
  if (this.type !== types$1.string) { this.unexpected(); }
1825
1857
  node.source = this.parseExprAtom();
@@ -1869,47 +1901,47 @@
1869
1901
  }
1870
1902
  };
1871
1903
 
1872
- pp$8.checkExport = function(exports, name, pos) {
1873
- if (!exports) { return }
1904
+ pp$8.checkExport = function(exports$1, name, pos) {
1905
+ if (!exports$1) { return }
1874
1906
  if (typeof name !== "string")
1875
1907
  { name = name.type === "Identifier" ? name.name : name.value; }
1876
- if (hasOwn(exports, name))
1908
+ if (hasOwn(exports$1, name))
1877
1909
  { this.raiseRecoverable(pos, "Duplicate export '" + name + "'"); }
1878
- exports[name] = true;
1910
+ exports$1[name] = true;
1879
1911
  };
1880
1912
 
1881
- pp$8.checkPatternExport = function(exports, pat) {
1913
+ pp$8.checkPatternExport = function(exports$1, pat) {
1882
1914
  var type = pat.type;
1883
1915
  if (type === "Identifier")
1884
- { this.checkExport(exports, pat, pat.start); }
1916
+ { this.checkExport(exports$1, pat, pat.start); }
1885
1917
  else if (type === "ObjectPattern")
1886
1918
  { for (var i = 0, list = pat.properties; i < list.length; i += 1)
1887
1919
  {
1888
1920
  var prop = list[i];
1889
1921
 
1890
- this.checkPatternExport(exports, prop);
1922
+ this.checkPatternExport(exports$1, prop);
1891
1923
  } }
1892
1924
  else if (type === "ArrayPattern")
1893
1925
  { for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) {
1894
1926
  var elt = list$1[i$1];
1895
1927
 
1896
- if (elt) { this.checkPatternExport(exports, elt); }
1928
+ if (elt) { this.checkPatternExport(exports$1, elt); }
1897
1929
  } }
1898
1930
  else if (type === "Property")
1899
- { this.checkPatternExport(exports, pat.value); }
1931
+ { this.checkPatternExport(exports$1, pat.value); }
1900
1932
  else if (type === "AssignmentPattern")
1901
- { this.checkPatternExport(exports, pat.left); }
1933
+ { this.checkPatternExport(exports$1, pat.left); }
1902
1934
  else if (type === "RestElement")
1903
- { this.checkPatternExport(exports, pat.argument); }
1935
+ { this.checkPatternExport(exports$1, pat.argument); }
1904
1936
  };
1905
1937
 
1906
- pp$8.checkVariableExport = function(exports, decls) {
1907
- if (!exports) { return }
1938
+ pp$8.checkVariableExport = function(exports$1, decls) {
1939
+ if (!exports$1) { return }
1908
1940
  for (var i = 0, list = decls; i < list.length; i += 1)
1909
1941
  {
1910
1942
  var decl = list[i];
1911
1943
 
1912
- this.checkPatternExport(exports, decl.id);
1944
+ this.checkPatternExport(exports$1, decl.id);
1913
1945
  }
1914
1946
  };
1915
1947
 
@@ -1924,13 +1956,13 @@
1924
1956
 
1925
1957
  // Parses a comma-separated list of module exports.
1926
1958
 
1927
- pp$8.parseExportSpecifier = function(exports) {
1959
+ pp$8.parseExportSpecifier = function(exports$1) {
1928
1960
  var node = this.startNode();
1929
1961
  node.local = this.parseModuleExportName();
1930
1962
 
1931
1963
  node.exported = this.eatContextual("as") ? this.parseModuleExportName() : node.local;
1932
1964
  this.checkExport(
1933
- exports,
1965
+ exports$1,
1934
1966
  node.exported,
1935
1967
  node.exported.start
1936
1968
  );
@@ -1938,7 +1970,7 @@
1938
1970
  return this.finishNode(node, "ExportSpecifier")
1939
1971
  };
1940
1972
 
1941
- pp$8.parseExportSpecifiers = function(exports) {
1973
+ pp$8.parseExportSpecifiers = function(exports$1) {
1942
1974
  var nodes = [], first = true;
1943
1975
  // export { x, y as z } [from '...']
1944
1976
  this.expect(types$1.braceL);
@@ -1948,7 +1980,7 @@
1948
1980
  if (this.afterTrailingComma(types$1.braceR)) { break }
1949
1981
  } else { first = false; }
1950
1982
 
1951
- nodes.push(this.parseExportSpecifier(exports));
1983
+ nodes.push(this.parseExportSpecifier(exports$1));
1952
1984
  }
1953
1985
  return nodes
1954
1986
  };
@@ -2679,15 +2711,19 @@
2679
2711
  // delayed syntax error at correct position).
2680
2712
 
2681
2713
  pp$5.parseExpression = function(forInit, refDestructuringErrors) {
2682
- var startPos = this.start, startLoc = this.startLoc;
2683
- var expr = this.parseMaybeAssign(forInit, refDestructuringErrors);
2684
- if (this.type === types$1.comma) {
2685
- var node = this.startNodeAt(startPos, startLoc);
2686
- node.expressions = [expr];
2687
- while (this.eat(types$1.comma)) { node.expressions.push(this.parseMaybeAssign(forInit, refDestructuringErrors)); }
2688
- return this.finishNode(node, "SequenceExpression")
2689
- }
2690
- return expr
2714
+ var this$1$1 = this;
2715
+
2716
+ return this.catchStackOverflow(function () {
2717
+ var startPos = this$1$1.start, startLoc = this$1$1.startLoc;
2718
+ var expr = this$1$1.parseMaybeAssign(forInit, refDestructuringErrors);
2719
+ if (this$1$1.type === types$1.comma) {
2720
+ var node = this$1$1.startNodeAt(startPos, startLoc);
2721
+ node.expressions = [expr];
2722
+ while (this$1$1.eat(types$1.comma)) { node.expressions.push(this$1$1.parseMaybeAssign(forInit, refDestructuringErrors)); }
2723
+ return this$1$1.finishNode(node, "SequenceExpression")
2724
+ }
2725
+ return expr
2726
+ })
2691
2727
  };
2692
2728
 
2693
2729
  // Parse an assignment expression. This includes applications of
@@ -2752,7 +2788,7 @@
2752
2788
  var startPos = this.start, startLoc = this.startLoc;
2753
2789
  var expr = this.parseExprOps(forInit, refDestructuringErrors);
2754
2790
  if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }
2755
- if (this.eat(types$1.question)) {
2791
+ if (!(expr.type === "ArrowFunctionExpression" && expr.start === startPos) && this.eat(types$1.question)) {
2756
2792
  var node = this.startNodeAt(startPos, startLoc);
2757
2793
  node.test = expr;
2758
2794
  node.consequent = this.parseMaybeAssign();
@@ -3304,6 +3340,8 @@
3304
3340
  }
3305
3341
  var startPos = this.start, startLoc = this.startLoc;
3306
3342
  node.callee = this.parseSubscripts(this.parseExprAtom(null, false, true), startPos, startLoc, true, false);
3343
+ if (node.callee.type === "Super")
3344
+ { this.raiseRecoverable(startPos, "Invalid use of 'super'"); }
3307
3345
  if (this.eat(types$1.parenL)) { node.arguments = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false); }
3308
3346
  else { node.arguments = empty; }
3309
3347
  return this.finishNode(node, "NewExpression")
@@ -6220,7 +6258,7 @@
6220
6258
  // [ghbt]: https://github.com/acornjs/acorn/issues
6221
6259
 
6222
6260
 
6223
- var version = "8.16.0";
6261
+ var version = "8.17.0";
6224
6262
 
6225
6263
  Parser.acorn = {
6226
6264
  Parser: Parser,