@timber-js/app 0.1.0

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 (310) hide show
  1. package/bin/timber.mjs +5 -0
  2. package/dist/_chunks/error-boundary-dj-WO5uq.js +121 -0
  3. package/dist/_chunks/error-boundary-dj-WO5uq.js.map +1 -0
  4. package/dist/_chunks/format-DNt20Kt8.js +163 -0
  5. package/dist/_chunks/format-DNt20Kt8.js.map +1 -0
  6. package/dist/_chunks/interception-DIaZN1bF.js +669 -0
  7. package/dist/_chunks/interception-DIaZN1bF.js.map +1 -0
  8. package/dist/_chunks/metadata-routes-BDnswgRO.js +141 -0
  9. package/dist/_chunks/metadata-routes-BDnswgRO.js.map +1 -0
  10. package/dist/_chunks/registry-DUIpYD_x.js +20 -0
  11. package/dist/_chunks/registry-DUIpYD_x.js.map +1 -0
  12. package/dist/_chunks/request-context-D6XHINkR.js +330 -0
  13. package/dist/_chunks/request-context-D6XHINkR.js.map +1 -0
  14. package/dist/_chunks/tracing-BtOwb8O6.js +174 -0
  15. package/dist/_chunks/tracing-BtOwb8O6.js.map +1 -0
  16. package/dist/_chunks/use-cookie-8ZlA0rr3.js +125 -0
  17. package/dist/_chunks/use-cookie-8ZlA0rr3.js.map +1 -0
  18. package/dist/adapters/cloudflare.d.ts +92 -0
  19. package/dist/adapters/cloudflare.d.ts.map +1 -0
  20. package/dist/adapters/cloudflare.js +188 -0
  21. package/dist/adapters/cloudflare.js.map +1 -0
  22. package/dist/adapters/nitro.d.ts +72 -0
  23. package/dist/adapters/nitro.d.ts.map +1 -0
  24. package/dist/adapters/nitro.js +217 -0
  25. package/dist/adapters/nitro.js.map +1 -0
  26. package/dist/adapters/types.d.ts +53 -0
  27. package/dist/adapters/types.d.ts.map +1 -0
  28. package/dist/cache/index.d.ts +52 -0
  29. package/dist/cache/index.d.ts.map +1 -0
  30. package/dist/cache/index.js +283 -0
  31. package/dist/cache/index.js.map +1 -0
  32. package/dist/cache/redis-handler.d.ts +45 -0
  33. package/dist/cache/redis-handler.d.ts.map +1 -0
  34. package/dist/cache/register-cached-function.d.ts +17 -0
  35. package/dist/cache/register-cached-function.d.ts.map +1 -0
  36. package/dist/cache/singleflight.d.ts +11 -0
  37. package/dist/cache/singleflight.d.ts.map +1 -0
  38. package/dist/cache/stable-stringify.d.ts +7 -0
  39. package/dist/cache/stable-stringify.d.ts.map +1 -0
  40. package/dist/cache/timber-cache.d.ts +21 -0
  41. package/dist/cache/timber-cache.d.ts.map +1 -0
  42. package/dist/cli.d.ts +44 -0
  43. package/dist/cli.d.ts.map +1 -0
  44. package/dist/cli.js +135 -0
  45. package/dist/cli.js.map +1 -0
  46. package/dist/client/browser-entry.d.ts +22 -0
  47. package/dist/client/browser-entry.d.ts.map +1 -0
  48. package/dist/client/error-boundary.d.ts +42 -0
  49. package/dist/client/error-boundary.d.ts.map +1 -0
  50. package/dist/client/form.d.ts +115 -0
  51. package/dist/client/form.d.ts.map +1 -0
  52. package/dist/client/head.d.ts +16 -0
  53. package/dist/client/head.d.ts.map +1 -0
  54. package/dist/client/history.d.ts +29 -0
  55. package/dist/client/history.d.ts.map +1 -0
  56. package/dist/client/index.d.ts +32 -0
  57. package/dist/client/index.d.ts.map +1 -0
  58. package/dist/client/index.js +1218 -0
  59. package/dist/client/index.js.map +1 -0
  60. package/dist/client/link-navigate-interceptor.d.ts +28 -0
  61. package/dist/client/link-navigate-interceptor.d.ts.map +1 -0
  62. package/dist/client/link-status-provider.d.ts +11 -0
  63. package/dist/client/link-status-provider.d.ts.map +1 -0
  64. package/dist/client/link.d.ts +119 -0
  65. package/dist/client/link.d.ts.map +1 -0
  66. package/dist/client/nuqs-adapter.d.ts +11 -0
  67. package/dist/client/nuqs-adapter.d.ts.map +1 -0
  68. package/dist/client/router-ref.d.ts +11 -0
  69. package/dist/client/router-ref.d.ts.map +1 -0
  70. package/dist/client/router.d.ts +85 -0
  71. package/dist/client/router.d.ts.map +1 -0
  72. package/dist/client/segment-cache.d.ts +88 -0
  73. package/dist/client/segment-cache.d.ts.map +1 -0
  74. package/dist/client/segment-context.d.ts +32 -0
  75. package/dist/client/segment-context.d.ts.map +1 -0
  76. package/dist/client/ssr-data.d.ts +64 -0
  77. package/dist/client/ssr-data.d.ts.map +1 -0
  78. package/dist/client/types.d.ts +5 -0
  79. package/dist/client/types.d.ts.map +1 -0
  80. package/dist/client/unload-guard.d.ts +18 -0
  81. package/dist/client/unload-guard.d.ts.map +1 -0
  82. package/dist/client/use-cookie.d.ts +37 -0
  83. package/dist/client/use-cookie.d.ts.map +1 -0
  84. package/dist/client/use-link-status.d.ts +35 -0
  85. package/dist/client/use-link-status.d.ts.map +1 -0
  86. package/dist/client/use-navigation-pending.d.ts +26 -0
  87. package/dist/client/use-navigation-pending.d.ts.map +1 -0
  88. package/dist/client/use-params.d.ts +50 -0
  89. package/dist/client/use-params.d.ts.map +1 -0
  90. package/dist/client/use-pathname.d.ts +20 -0
  91. package/dist/client/use-pathname.d.ts.map +1 -0
  92. package/dist/client/use-query-states.d.ts +36 -0
  93. package/dist/client/use-query-states.d.ts.map +1 -0
  94. package/dist/client/use-router.d.ts +39 -0
  95. package/dist/client/use-router.d.ts.map +1 -0
  96. package/dist/client/use-search-params.d.ts +24 -0
  97. package/dist/client/use-search-params.d.ts.map +1 -0
  98. package/dist/client/use-selected-layout-segment.d.ts +68 -0
  99. package/dist/client/use-selected-layout-segment.d.ts.map +1 -0
  100. package/dist/content/index.d.ts +11 -0
  101. package/dist/content/index.d.ts.map +1 -0
  102. package/dist/content/index.js +2 -0
  103. package/dist/cookies/define-cookie.d.ts +61 -0
  104. package/dist/cookies/define-cookie.d.ts.map +1 -0
  105. package/dist/cookies/index.d.ts +3 -0
  106. package/dist/cookies/index.d.ts.map +1 -0
  107. package/dist/cookies/index.js +82 -0
  108. package/dist/cookies/index.js.map +1 -0
  109. package/dist/fonts/ast.d.ts +38 -0
  110. package/dist/fonts/ast.d.ts.map +1 -0
  111. package/dist/fonts/css.d.ts +43 -0
  112. package/dist/fonts/css.d.ts.map +1 -0
  113. package/dist/fonts/fallbacks.d.ts +36 -0
  114. package/dist/fonts/fallbacks.d.ts.map +1 -0
  115. package/dist/fonts/google.d.ts +122 -0
  116. package/dist/fonts/google.d.ts.map +1 -0
  117. package/dist/fonts/local.d.ts +76 -0
  118. package/dist/fonts/local.d.ts.map +1 -0
  119. package/dist/fonts/types.d.ts +85 -0
  120. package/dist/fonts/types.d.ts.map +1 -0
  121. package/dist/index.d.ts +150 -0
  122. package/dist/index.d.ts.map +1 -0
  123. package/dist/index.js +14701 -0
  124. package/dist/index.js.map +1 -0
  125. package/dist/plugins/adapter-build.d.ts +18 -0
  126. package/dist/plugins/adapter-build.d.ts.map +1 -0
  127. package/dist/plugins/build-manifest.d.ts +79 -0
  128. package/dist/plugins/build-manifest.d.ts.map +1 -0
  129. package/dist/plugins/build-report.d.ts +63 -0
  130. package/dist/plugins/build-report.d.ts.map +1 -0
  131. package/dist/plugins/cache-transform.d.ts +36 -0
  132. package/dist/plugins/cache-transform.d.ts.map +1 -0
  133. package/dist/plugins/chunks.d.ts +45 -0
  134. package/dist/plugins/chunks.d.ts.map +1 -0
  135. package/dist/plugins/content.d.ts +19 -0
  136. package/dist/plugins/content.d.ts.map +1 -0
  137. package/dist/plugins/dev-error-overlay.d.ts +60 -0
  138. package/dist/plugins/dev-error-overlay.d.ts.map +1 -0
  139. package/dist/plugins/dev-logs.d.ts +46 -0
  140. package/dist/plugins/dev-logs.d.ts.map +1 -0
  141. package/dist/plugins/dev-server.d.ts +22 -0
  142. package/dist/plugins/dev-server.d.ts.map +1 -0
  143. package/dist/plugins/dynamic-transform.d.ts +72 -0
  144. package/dist/plugins/dynamic-transform.d.ts.map +1 -0
  145. package/dist/plugins/entries.d.ts +21 -0
  146. package/dist/plugins/entries.d.ts.map +1 -0
  147. package/dist/plugins/fonts.d.ts +77 -0
  148. package/dist/plugins/fonts.d.ts.map +1 -0
  149. package/dist/plugins/mdx.d.ts +21 -0
  150. package/dist/plugins/mdx.d.ts.map +1 -0
  151. package/dist/plugins/react-prod.d.ts +18 -0
  152. package/dist/plugins/react-prod.d.ts.map +1 -0
  153. package/dist/plugins/routing.d.ts +13 -0
  154. package/dist/plugins/routing.d.ts.map +1 -0
  155. package/dist/plugins/server-action-exports.d.ts +26 -0
  156. package/dist/plugins/server-action-exports.d.ts.map +1 -0
  157. package/dist/plugins/server-bundle.d.ts +15 -0
  158. package/dist/plugins/server-bundle.d.ts.map +1 -0
  159. package/dist/plugins/shims.d.ts +18 -0
  160. package/dist/plugins/shims.d.ts.map +1 -0
  161. package/dist/plugins/static-build.d.ts +55 -0
  162. package/dist/plugins/static-build.d.ts.map +1 -0
  163. package/dist/routing/codegen.d.ts +29 -0
  164. package/dist/routing/codegen.d.ts.map +1 -0
  165. package/dist/routing/index.d.ts +8 -0
  166. package/dist/routing/index.d.ts.map +1 -0
  167. package/dist/routing/index.js +2 -0
  168. package/dist/routing/interception.d.ts +46 -0
  169. package/dist/routing/interception.d.ts.map +1 -0
  170. package/dist/routing/scanner.d.ts +28 -0
  171. package/dist/routing/scanner.d.ts.map +1 -0
  172. package/dist/routing/status-file-lint.d.ts +33 -0
  173. package/dist/routing/status-file-lint.d.ts.map +1 -0
  174. package/dist/routing/types.d.ts +81 -0
  175. package/dist/routing/types.d.ts.map +1 -0
  176. package/dist/search-params/analyze.d.ts +54 -0
  177. package/dist/search-params/analyze.d.ts.map +1 -0
  178. package/dist/search-params/codecs.d.ts +53 -0
  179. package/dist/search-params/codecs.d.ts.map +1 -0
  180. package/dist/search-params/create.d.ts +106 -0
  181. package/dist/search-params/create.d.ts.map +1 -0
  182. package/dist/search-params/index.d.ts +7 -0
  183. package/dist/search-params/index.d.ts.map +1 -0
  184. package/dist/search-params/index.js +300 -0
  185. package/dist/search-params/index.js.map +1 -0
  186. package/dist/search-params/registry.d.ts +20 -0
  187. package/dist/search-params/registry.d.ts.map +1 -0
  188. package/dist/server/access-gate.d.ts +42 -0
  189. package/dist/server/access-gate.d.ts.map +1 -0
  190. package/dist/server/action-client.d.ts +190 -0
  191. package/dist/server/action-client.d.ts.map +1 -0
  192. package/dist/server/action-handler.d.ts +48 -0
  193. package/dist/server/action-handler.d.ts.map +1 -0
  194. package/dist/server/actions.d.ts +108 -0
  195. package/dist/server/actions.d.ts.map +1 -0
  196. package/dist/server/asset-headers.d.ts +42 -0
  197. package/dist/server/asset-headers.d.ts.map +1 -0
  198. package/dist/server/body-limits.d.ts +30 -0
  199. package/dist/server/body-limits.d.ts.map +1 -0
  200. package/dist/server/build-manifest.d.ts +120 -0
  201. package/dist/server/build-manifest.d.ts.map +1 -0
  202. package/dist/server/canonicalize.d.ts +30 -0
  203. package/dist/server/canonicalize.d.ts.map +1 -0
  204. package/dist/server/client-module-map.d.ts +47 -0
  205. package/dist/server/client-module-map.d.ts.map +1 -0
  206. package/dist/server/csrf.d.ts +34 -0
  207. package/dist/server/csrf.d.ts.map +1 -0
  208. package/dist/server/deny-renderer.d.ts +49 -0
  209. package/dist/server/deny-renderer.d.ts.map +1 -0
  210. package/dist/server/dev-logger.d.ts +44 -0
  211. package/dist/server/dev-logger.d.ts.map +1 -0
  212. package/dist/server/dev-span-processor.d.ts +29 -0
  213. package/dist/server/dev-span-processor.d.ts.map +1 -0
  214. package/dist/server/dev-warnings.d.ts +129 -0
  215. package/dist/server/dev-warnings.d.ts.map +1 -0
  216. package/dist/server/early-hints-sender.d.ts +38 -0
  217. package/dist/server/early-hints-sender.d.ts.map +1 -0
  218. package/dist/server/early-hints.d.ts +83 -0
  219. package/dist/server/early-hints.d.ts.map +1 -0
  220. package/dist/server/error-boundary-wrapper.d.ts +17 -0
  221. package/dist/server/error-boundary-wrapper.d.ts.map +1 -0
  222. package/dist/server/error-formatter.d.ts +17 -0
  223. package/dist/server/error-formatter.d.ts.map +1 -0
  224. package/dist/server/flush.d.ts +74 -0
  225. package/dist/server/flush.d.ts.map +1 -0
  226. package/dist/server/form-data.d.ts +60 -0
  227. package/dist/server/form-data.d.ts.map +1 -0
  228. package/dist/server/form-flash.d.ts +78 -0
  229. package/dist/server/form-flash.d.ts.map +1 -0
  230. package/dist/server/html-injectors.d.ts +101 -0
  231. package/dist/server/html-injectors.d.ts.map +1 -0
  232. package/dist/server/index.d.ts +54 -0
  233. package/dist/server/index.d.ts.map +1 -0
  234. package/dist/server/index.js +2925 -0
  235. package/dist/server/index.js.map +1 -0
  236. package/dist/server/instrumentation.d.ts +61 -0
  237. package/dist/server/instrumentation.d.ts.map +1 -0
  238. package/dist/server/logger.d.ts +83 -0
  239. package/dist/server/logger.d.ts.map +1 -0
  240. package/dist/server/manifest-status-resolver.d.ts +58 -0
  241. package/dist/server/manifest-status-resolver.d.ts.map +1 -0
  242. package/dist/server/metadata-render.d.ts +20 -0
  243. package/dist/server/metadata-render.d.ts.map +1 -0
  244. package/dist/server/metadata-routes.d.ts +67 -0
  245. package/dist/server/metadata-routes.d.ts.map +1 -0
  246. package/dist/server/metadata.d.ts +67 -0
  247. package/dist/server/metadata.d.ts.map +1 -0
  248. package/dist/server/middleware-runner.d.ts +21 -0
  249. package/dist/server/middleware-runner.d.ts.map +1 -0
  250. package/dist/server/nuqs-ssr-provider.d.ts +28 -0
  251. package/dist/server/nuqs-ssr-provider.d.ts.map +1 -0
  252. package/dist/server/pipeline.d.ts +81 -0
  253. package/dist/server/pipeline.d.ts.map +1 -0
  254. package/dist/server/prerender.d.ts +77 -0
  255. package/dist/server/prerender.d.ts.map +1 -0
  256. package/dist/server/primitives.d.ts +131 -0
  257. package/dist/server/primitives.d.ts.map +1 -0
  258. package/dist/server/proxy.d.ts +23 -0
  259. package/dist/server/proxy.d.ts.map +1 -0
  260. package/dist/server/request-context.d.ts +175 -0
  261. package/dist/server/request-context.d.ts.map +1 -0
  262. package/dist/server/route-element-builder.d.ts +66 -0
  263. package/dist/server/route-element-builder.d.ts.map +1 -0
  264. package/dist/server/route-handler.d.ts +35 -0
  265. package/dist/server/route-handler.d.ts.map +1 -0
  266. package/dist/server/route-matcher.d.ts +78 -0
  267. package/dist/server/route-matcher.d.ts.map +1 -0
  268. package/dist/server/rsc-entry/api-handler.d.ts +11 -0
  269. package/dist/server/rsc-entry/api-handler.d.ts.map +1 -0
  270. package/dist/server/rsc-entry/error-renderer.d.ts +30 -0
  271. package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -0
  272. package/dist/server/rsc-entry/helpers.d.ts +73 -0
  273. package/dist/server/rsc-entry/helpers.d.ts.map +1 -0
  274. package/dist/server/rsc-entry/index.d.ts +11 -0
  275. package/dist/server/rsc-entry/index.d.ts.map +1 -0
  276. package/dist/server/rsc-entry/ssr-bridge.d.ts +6 -0
  277. package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -0
  278. package/dist/server/slot-resolver.d.ts +34 -0
  279. package/dist/server/slot-resolver.d.ts.map +1 -0
  280. package/dist/server/ssr-entry.d.ts +73 -0
  281. package/dist/server/ssr-entry.d.ts.map +1 -0
  282. package/dist/server/ssr-render.d.ts +67 -0
  283. package/dist/server/ssr-render.d.ts.map +1 -0
  284. package/dist/server/status-code-resolver.d.ts +77 -0
  285. package/dist/server/status-code-resolver.d.ts.map +1 -0
  286. package/dist/server/tracing.d.ts +99 -0
  287. package/dist/server/tracing.d.ts.map +1 -0
  288. package/dist/server/tree-builder.d.ts +116 -0
  289. package/dist/server/tree-builder.d.ts.map +1 -0
  290. package/dist/server/types.d.ts +231 -0
  291. package/dist/server/types.d.ts.map +1 -0
  292. package/dist/shims/font-google.d.ts +41 -0
  293. package/dist/shims/font-google.d.ts.map +1 -0
  294. package/dist/shims/headers.d.ts +11 -0
  295. package/dist/shims/headers.d.ts.map +1 -0
  296. package/dist/shims/image.d.ts +328 -0
  297. package/dist/shims/image.d.ts.map +1 -0
  298. package/dist/shims/link.d.ts +9 -0
  299. package/dist/shims/link.d.ts.map +1 -0
  300. package/dist/shims/navigation-client.d.ts +25 -0
  301. package/dist/shims/navigation-client.d.ts.map +1 -0
  302. package/dist/shims/navigation.d.ts +25 -0
  303. package/dist/shims/navigation.d.ts.map +1 -0
  304. package/dist/utils/directive-parser.d.ts +70 -0
  305. package/dist/utils/directive-parser.d.ts.map +1 -0
  306. package/dist/utils/format.d.ts +6 -0
  307. package/dist/utils/format.d.ts.map +1 -0
  308. package/dist/utils/startup-timer.d.ts +34 -0
  309. package/dist/utils/startup-timer.d.ts.map +1 -0
  310. package/package.json +140 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["exports"],"sources":["../../../node_modules/.pnpm/acorn@8.16.0/node_modules/acorn/dist/acorn.mjs","../../../node_modules/.pnpm/acorn-jsx@5.3.2_acorn@8.16.0/node_modules/acorn-jsx/xhtml.js","../../../node_modules/.pnpm/acorn@8.16.0/node_modules/acorn/dist/acorn.js","../../../node_modules/.pnpm/acorn-jsx@5.3.2_acorn@8.16.0/node_modules/acorn-jsx/index.js","../src/utils/directive-parser.ts","../src/plugins/cache-transform.ts","../src/plugins/content.ts","../src/plugins/dev-error-overlay.ts","../src/plugins/dev-server.ts","../src/plugins/entries.ts","../src/plugins/mdx.ts","../src/routing/status-file-lint.ts","../src/plugins/routing.ts","../src/plugins/shims.ts","../src/fonts/fallbacks.ts","../src/fonts/ast.ts","../src/fonts/local.ts","../src/fonts/google.ts","../src/plugins/fonts.ts","../src/plugins/static-build.ts","../src/plugins/dynamic-transform.ts","../src/plugins/server-action-exports.ts","../src/plugins/build-manifest.ts","../src/plugins/dev-logs.ts","../src/plugins/react-prod.ts","../src/plugins/chunks.ts","../src/plugins/server-bundle.ts","../src/plugins/adapter-build.ts","../src/plugins/build-report.ts","../src/utils/startup-timer.ts","../src/index.ts"],"sourcesContent":["// This file was generated. Do not modify manually!\nvar astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 7, 9, 32, 4, 318, 1, 78, 5, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 68, 8, 2, 0, 3, 0, 2, 3, 2, 4, 2, 0, 15, 1, 83, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 7, 19, 58, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 199, 7, 137, 9, 54, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 55, 9, 266, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 10, 5350, 0, 7, 14, 11465, 27, 2343, 9, 87, 9, 39, 4, 60, 6, 26, 9, 535, 9, 470, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4178, 9, 519, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 245, 1, 2, 9, 233, 0, 3, 0, 8, 1, 6, 0, 475, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];\n\n// This file was generated. Do not modify manually!\nvar astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 4, 51, 13, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 7, 25, 39, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 39, 27, 10, 22, 251, 41, 7, 1, 17, 5, 57, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 31, 9, 2, 0, 3, 0, 2, 37, 2, 0, 26, 0, 2, 0, 45, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 200, 32, 32, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 24, 43, 261, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 26, 3994, 6, 582, 6842, 29, 1763, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 433, 44, 212, 63, 33, 24, 3, 24, 45, 74, 6, 0, 67, 12, 65, 1, 2, 0, 15, 4, 10, 7381, 42, 31, 98, 114, 8702, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 229, 29, 3, 0, 208, 30, 2, 2, 2, 1, 2, 6, 3, 4, 10, 1, 225, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4381, 3, 5773, 3, 7472, 16, 621, 2467, 541, 1507, 4938, 6, 8489];\n\n// This file was generated. Do not modify manually!\nvar nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0897-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1add\\u1ae0-\\u1aeb\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\u30fb\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\\uff65\";\n\n// This file was generated. Do not modify manually!\nvar nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u0870-\\u0887\\u0889-\\u088f\\u08a0-\\u08c9\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c5c\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdc-\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c8a\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7dc\\ua7f1-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab69\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n\n// These are a run-length and offset encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range.\n\n// Reserved word lists for various dialects of the language\n\nvar reservedWords = {\n 3: \"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\",\n 5: \"class enum extends super const export import\",\n 6: \"enum\",\n strict: \"implements interface let package private protected public static yield\",\n strictBind: \"eval arguments\"\n};\n\n// And the keywords\n\nvar ecma5AndLessKeywords = \"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\";\n\nvar keywords$1 = {\n 5: ecma5AndLessKeywords,\n \"5module\": ecma5AndLessKeywords + \" export import\",\n 6: ecma5AndLessKeywords + \" const class extends export import super\"\n};\n\nvar keywordRelationalOperator = /^in(stanceof)?$/;\n\n// ## Character categories\n\nvar nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\nvar nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\n\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction isInAstralSet(code, set) {\n var pos = 0x10000;\n for (var i = 0; i < set.length; i += 2) {\n pos += set[i];\n if (pos > code) { return false }\n pos += set[i + 1];\n if (pos >= code) { return true }\n }\n return false\n}\n\n// Test whether a given character code starts an identifier.\n\nfunction isIdentifierStart(code, astral) {\n if (code < 65) { return code === 36 }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes)\n}\n\n// Test whether a given character is part of an identifier.\n\nfunction isIdentifierChar(code, astral) {\n if (code < 48) { return code === 36 }\n if (code < 58) { return true }\n if (code < 65) { return false }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes)\n}\n\n// ## Token types\n\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n\n// The `beforeExpr` property is used to disambiguate between regular\n// expressions and divisions. It is set on all token types that can\n// be followed by an expression (thus, a slash after them would be a\n// regular expression).\n//\n// The `startsExpr` property is used to check if the token ends a\n// `yield` expression. It is set on all token types that either can\n// directly start an expression (like a quotation mark) or can\n// continue an expression (like the body of a string).\n//\n// `isLoop` marks a keyword as starting a loop, which is important\n// to know when parsing a label, in order to allow or disallow\n// continue jumps to that label.\n\nvar TokenType = function TokenType(label, conf) {\n if ( conf === void 0 ) conf = {};\n\n this.label = label;\n this.keyword = conf.keyword;\n this.beforeExpr = !!conf.beforeExpr;\n this.startsExpr = !!conf.startsExpr;\n this.isLoop = !!conf.isLoop;\n this.isAssign = !!conf.isAssign;\n this.prefix = !!conf.prefix;\n this.postfix = !!conf.postfix;\n this.binop = conf.binop || null;\n this.updateContext = null;\n};\n\nfunction binop(name, prec) {\n return new TokenType(name, {beforeExpr: true, binop: prec})\n}\nvar beforeExpr = {beforeExpr: true}, startsExpr = {startsExpr: true};\n\n// Map keyword names to token types.\n\nvar keywords = {};\n\n// Succinct definitions of keyword token types\nfunction kw(name, options) {\n if ( options === void 0 ) options = {};\n\n options.keyword = name;\n return keywords[name] = new TokenType(name, options)\n}\n\nvar types$1 = {\n num: new TokenType(\"num\", startsExpr),\n regexp: new TokenType(\"regexp\", startsExpr),\n string: new TokenType(\"string\", startsExpr),\n name: new TokenType(\"name\", startsExpr),\n privateId: new TokenType(\"privateId\", startsExpr),\n eof: new TokenType(\"eof\"),\n\n // Punctuation token types.\n bracketL: new TokenType(\"[\", {beforeExpr: true, startsExpr: true}),\n bracketR: new TokenType(\"]\"),\n braceL: new TokenType(\"{\", {beforeExpr: true, startsExpr: true}),\n braceR: new TokenType(\"}\"),\n parenL: new TokenType(\"(\", {beforeExpr: true, startsExpr: true}),\n parenR: new TokenType(\")\"),\n comma: new TokenType(\",\", beforeExpr),\n semi: new TokenType(\";\", beforeExpr),\n colon: new TokenType(\":\", beforeExpr),\n dot: new TokenType(\".\"),\n question: new TokenType(\"?\", beforeExpr),\n questionDot: new TokenType(\"?.\"),\n arrow: new TokenType(\"=>\", beforeExpr),\n template: new TokenType(\"template\"),\n invalidTemplate: new TokenType(\"invalidTemplate\"),\n ellipsis: new TokenType(\"...\", beforeExpr),\n backQuote: new TokenType(\"`\", startsExpr),\n dollarBraceL: new TokenType(\"${\", {beforeExpr: true, startsExpr: true}),\n\n // Operators. These carry several kinds of properties to help the\n // parser use them properly (the presence of these properties is\n // what categorizes them as operators).\n //\n // `binop`, when present, specifies that this operator is a binary\n // operator, and will refer to its precedence.\n //\n // `prefix` and `postfix` mark the operator as a prefix or postfix\n // unary operator.\n //\n // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n // binary operators with a very low precedence, that should result\n // in AssignmentExpression nodes.\n\n eq: new TokenType(\"=\", {beforeExpr: true, isAssign: true}),\n assign: new TokenType(\"_=\", {beforeExpr: true, isAssign: true}),\n incDec: new TokenType(\"++/--\", {prefix: true, postfix: true, startsExpr: true}),\n prefix: new TokenType(\"!/~\", {beforeExpr: true, prefix: true, startsExpr: true}),\n logicalOR: binop(\"||\", 1),\n logicalAND: binop(\"&&\", 2),\n bitwiseOR: binop(\"|\", 3),\n bitwiseXOR: binop(\"^\", 4),\n bitwiseAND: binop(\"&\", 5),\n equality: binop(\"==/!=/===/!==\", 6),\n relational: binop(\"</>/<=/>=\", 7),\n bitShift: binop(\"<</>>/>>>\", 8),\n plusMin: new TokenType(\"+/-\", {beforeExpr: true, binop: 9, prefix: true, startsExpr: true}),\n modulo: binop(\"%\", 10),\n star: binop(\"*\", 10),\n slash: binop(\"/\", 10),\n starstar: new TokenType(\"**\", {beforeExpr: true}),\n coalesce: binop(\"??\", 1),\n\n // Keyword token types.\n _break: kw(\"break\"),\n _case: kw(\"case\", beforeExpr),\n _catch: kw(\"catch\"),\n _continue: kw(\"continue\"),\n _debugger: kw(\"debugger\"),\n _default: kw(\"default\", beforeExpr),\n _do: kw(\"do\", {isLoop: true, beforeExpr: true}),\n _else: kw(\"else\", beforeExpr),\n _finally: kw(\"finally\"),\n _for: kw(\"for\", {isLoop: true}),\n _function: kw(\"function\", startsExpr),\n _if: kw(\"if\"),\n _return: kw(\"return\", beforeExpr),\n _switch: kw(\"switch\"),\n _throw: kw(\"throw\", beforeExpr),\n _try: kw(\"try\"),\n _var: kw(\"var\"),\n _const: kw(\"const\"),\n _while: kw(\"while\", {isLoop: true}),\n _with: kw(\"with\"),\n _new: kw(\"new\", {beforeExpr: true, startsExpr: true}),\n _this: kw(\"this\", startsExpr),\n _super: kw(\"super\", startsExpr),\n _class: kw(\"class\", startsExpr),\n _extends: kw(\"extends\", beforeExpr),\n _export: kw(\"export\"),\n _import: kw(\"import\", startsExpr),\n _null: kw(\"null\", startsExpr),\n _true: kw(\"true\", startsExpr),\n _false: kw(\"false\", startsExpr),\n _in: kw(\"in\", {beforeExpr: true, binop: 7}),\n _instanceof: kw(\"instanceof\", {beforeExpr: true, binop: 7}),\n _typeof: kw(\"typeof\", {beforeExpr: true, prefix: true, startsExpr: true}),\n _void: kw(\"void\", {beforeExpr: true, prefix: true, startsExpr: true}),\n _delete: kw(\"delete\", {beforeExpr: true, prefix: true, startsExpr: true})\n};\n\n// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\n\nvar lineBreak = /\\r\\n?|\\n|\\u2028|\\u2029/;\nvar lineBreakG = new RegExp(lineBreak.source, \"g\");\n\nfunction isNewLine(code) {\n return code === 10 || code === 13 || code === 0x2028 || code === 0x2029\n}\n\nfunction nextLineBreak(code, from, end) {\n if ( end === void 0 ) end = code.length;\n\n for (var i = from; i < end; i++) {\n var next = code.charCodeAt(i);\n if (isNewLine(next))\n { return i < end - 1 && next === 13 && code.charCodeAt(i + 1) === 10 ? i + 2 : i + 1 }\n }\n return -1\n}\n\nvar nonASCIIwhitespace = /[\\u1680\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n\nvar skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\nvar ref = Object.prototype;\nvar hasOwnProperty = ref.hasOwnProperty;\nvar toString = ref.toString;\n\nvar hasOwn = Object.hasOwn || (function (obj, propName) { return (\n hasOwnProperty.call(obj, propName)\n); });\n\nvar isArray = Array.isArray || (function (obj) { return (\n toString.call(obj) === \"[object Array]\"\n); });\n\nvar regexpCache = Object.create(null);\n\nfunction wordsRegexp(words) {\n return regexpCache[words] || (regexpCache[words] = new RegExp(\"^(?:\" + words.replace(/ /g, \"|\") + \")$\"))\n}\n\nfunction codePointToString(code) {\n // UTF-16 Decoding\n if (code <= 0xFFFF) { return String.fromCharCode(code) }\n code -= 0x10000;\n return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00)\n}\n\nvar loneSurrogate = /(?:[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/;\n\n// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\n\nvar Position = function Position(line, col) {\n this.line = line;\n this.column = col;\n};\n\nPosition.prototype.offset = function offset (n) {\n return new Position(this.line, this.column + n)\n};\n\nvar SourceLocation = function SourceLocation(p, start, end) {\n this.start = start;\n this.end = end;\n if (p.sourceFile !== null) { this.source = p.sourceFile; }\n};\n\n// The `getLineInfo` function is mostly useful when the\n// `locations` option is off (for performance reasons) and you\n// want to find the line/column position for a given character\n// offset. `input` should be the code string that the offset refers\n// into.\n\nfunction getLineInfo(input, offset) {\n for (var line = 1, cur = 0;;) {\n var nextBreak = nextLineBreak(input, cur, offset);\n if (nextBreak < 0) { return new Position(line, offset - cur) }\n ++line;\n cur = nextBreak;\n }\n}\n\n// A second argument must be given to configure the parser process.\n// These options are recognized (only `ecmaVersion` is required):\n\nvar defaultOptions = {\n // `ecmaVersion` indicates the ECMAScript version to parse. Must be\n // either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10\n // (2019), 11 (2020), 12 (2021), 13 (2022), 14 (2023), or `\"latest\"`\n // (the latest version the library supports). This influences\n // support for strict mode, the set of reserved words, and support\n // for new syntax features.\n ecmaVersion: null,\n // `sourceType` indicates the mode the code should be parsed in.\n // Can be either `\"script\"`, `\"module\"` or `\"commonjs\"`. This influences global\n // strict mode and parsing of `import` and `export` declarations.\n sourceType: \"script\",\n // `onInsertedSemicolon` can be a callback that will be called when\n // a semicolon is automatically inserted. It will be passed the\n // position of the inserted semicolon as an offset, and if\n // `locations` is enabled, it is given the location as a `{line,\n // column}` object as second argument.\n onInsertedSemicolon: null,\n // `onTrailingComma` is similar to `onInsertedSemicolon`, but for\n // trailing commas.\n onTrailingComma: null,\n // By default, reserved words are only enforced if ecmaVersion >= 5.\n // Set `allowReserved` to a boolean value to explicitly turn this on\n // an off. When this option has the value \"never\", reserved words\n // and keywords can also not be used as property names.\n allowReserved: null,\n // When enabled, a return at the top level is not considered an\n // error.\n allowReturnOutsideFunction: false,\n // When enabled, import/export statements are not constrained to\n // appearing at the top of the program, and an import.meta expression\n // in a script isn't considered an error.\n allowImportExportEverywhere: false,\n // By default, await identifiers are allowed to appear at the top-level scope only if ecmaVersion >= 2022.\n // When enabled, await identifiers are allowed to appear at the top-level scope,\n // but they are still not allowed in non-async functions.\n allowAwaitOutsideFunction: null,\n // When enabled, super identifiers are not constrained to\n // appearing in methods and do not raise an error when they appear elsewhere.\n allowSuperOutsideMethod: null,\n // When enabled, hashbang directive in the beginning of file is\n // allowed and treated as a line comment. Enabled by default when\n // `ecmaVersion` >= 2023.\n allowHashBang: false,\n // By default, the parser will verify that private properties are\n // only used in places where they are valid and have been declared.\n // Set this to false to turn such checks off.\n checkPrivateFields: true,\n // When `locations` is on, `loc` properties holding objects with\n // `start` and `end` properties in `{line, column}` form (with\n // line being 1-based and column 0-based) will be attached to the\n // nodes.\n locations: false,\n // A function can be passed as `onToken` option, which will\n // cause Acorn to call that function with object in the same\n // format as tokens returned from `tokenizer().getToken()`. Note\n // that you are not allowed to call the parser from the\n // callback—that will corrupt its internal state.\n onToken: null,\n // A function can be passed as `onComment` option, which will\n // cause Acorn to call that function with `(block, text, start,\n // end)` parameters whenever a comment is skipped. `block` is a\n // boolean indicating whether this is a block (`/* */`) comment,\n // `text` is the content of the comment, and `start` and `end` are\n // character offsets that denote the start and end of the comment.\n // When the `locations` option is on, two more parameters are\n // passed, the full `{line, column}` locations of the start and\n // end of the comments. Note that you are not allowed to call the\n // parser from the callback—that will corrupt its internal state.\n // When this option has an array as value, objects representing the\n // comments are pushed to it.\n onComment: null,\n // Nodes have their start and end characters offsets recorded in\n // `start` and `end` properties (directly on the node, rather than\n // the `loc` object, which holds line/column data. To also add a\n // [semi-standardized][range] `range` property holding a `[start,\n // end]` array with the same numbers, set the `ranges` option to\n // `true`.\n //\n // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n ranges: false,\n // It is possible to parse multiple files into a single AST by\n // passing the tree produced by parsing the first file as\n // `program` option in subsequent parses. This will add the\n // toplevel forms of the parsed file to the `Program` (top) node\n // of an existing parse tree.\n program: null,\n // When `locations` is on, you can pass this to record the source\n // file in every node's `loc` object.\n sourceFile: null,\n // This value, if given, is stored in every node, whether\n // `locations` is on or off.\n directSourceFile: null,\n // When enabled, parenthesized expressions are represented by\n // (non-standard) ParenthesizedExpression nodes\n preserveParens: false\n};\n\n// Interpret and default an options object\n\nvar warnedAboutEcmaVersion = false;\n\nfunction getOptions(opts) {\n var options = {};\n\n for (var opt in defaultOptions)\n { options[opt] = opts && hasOwn(opts, opt) ? opts[opt] : defaultOptions[opt]; }\n\n if (options.ecmaVersion === \"latest\") {\n options.ecmaVersion = 1e8;\n } else if (options.ecmaVersion == null) {\n if (!warnedAboutEcmaVersion && typeof console === \"object\" && console.warn) {\n warnedAboutEcmaVersion = true;\n console.warn(\"Since Acorn 8.0.0, options.ecmaVersion is required.\\nDefaulting to 2020, but this will stop working in the future.\");\n }\n options.ecmaVersion = 11;\n } else if (options.ecmaVersion >= 2015) {\n options.ecmaVersion -= 2009;\n }\n\n if (options.allowReserved == null)\n { options.allowReserved = options.ecmaVersion < 5; }\n\n if (!opts || opts.allowHashBang == null)\n { options.allowHashBang = options.ecmaVersion >= 14; }\n\n if (isArray(options.onToken)) {\n var tokens = options.onToken;\n options.onToken = function (token) { return tokens.push(token); };\n }\n if (isArray(options.onComment))\n { options.onComment = pushComment(options, options.onComment); }\n\n if (options.sourceType === \"commonjs\" && options.allowAwaitOutsideFunction)\n { throw new Error(\"Cannot use allowAwaitOutsideFunction with sourceType: commonjs\") }\n\n return options\n}\n\nfunction pushComment(options, array) {\n return function(block, text, start, end, startLoc, endLoc) {\n var comment = {\n type: block ? \"Block\" : \"Line\",\n value: text,\n start: start,\n end: end\n };\n if (options.locations)\n { comment.loc = new SourceLocation(this, startLoc, endLoc); }\n if (options.ranges)\n { comment.range = [start, end]; }\n array.push(comment);\n }\n}\n\n// Each scope gets a bitset that may contain these flags\nvar\n SCOPE_TOP = 1,\n SCOPE_FUNCTION = 2,\n SCOPE_ASYNC = 4,\n SCOPE_GENERATOR = 8,\n SCOPE_ARROW = 16,\n SCOPE_SIMPLE_CATCH = 32,\n SCOPE_SUPER = 64,\n SCOPE_DIRECT_SUPER = 128,\n SCOPE_CLASS_STATIC_BLOCK = 256,\n SCOPE_CLASS_FIELD_INIT = 512,\n SCOPE_SWITCH = 1024,\n SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK;\n\nfunction functionFlags(async, generator) {\n return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0)\n}\n\n// Used in checkLVal* and declareName to determine the type of a binding\nvar\n BIND_NONE = 0, // Not a binding\n BIND_VAR = 1, // Var-style binding\n BIND_LEXICAL = 2, // Let- or const-style binding\n BIND_FUNCTION = 3, // Function declaration\n BIND_SIMPLE_CATCH = 4, // Simple (identifier pattern) catch binding\n BIND_OUTSIDE = 5; // Special case for function names as bound inside the function\n\nvar Parser = function Parser(options, input, startPos) {\n this.options = options = getOptions(options);\n this.sourceFile = options.sourceFile;\n this.keywords = wordsRegexp(keywords$1[options.ecmaVersion >= 6 ? 6 : options.sourceType === \"module\" ? \"5module\" : 5]);\n var reserved = \"\";\n if (options.allowReserved !== true) {\n reserved = reservedWords[options.ecmaVersion >= 6 ? 6 : options.ecmaVersion === 5 ? 5 : 3];\n if (options.sourceType === \"module\") { reserved += \" await\"; }\n }\n this.reservedWords = wordsRegexp(reserved);\n var reservedStrict = (reserved ? reserved + \" \" : \"\") + reservedWords.strict;\n this.reservedWordsStrict = wordsRegexp(reservedStrict);\n this.reservedWordsStrictBind = wordsRegexp(reservedStrict + \" \" + reservedWords.strictBind);\n this.input = String(input);\n\n // Used to signal to callers of `readWord1` whether the word\n // contained any escape sequences. This is needed because words with\n // escape sequences must not be interpreted as keywords.\n this.containsEsc = false;\n\n // Set up token state\n\n // The current position of the tokenizer in the input.\n if (startPos) {\n this.pos = startPos;\n this.lineStart = this.input.lastIndexOf(\"\\n\", startPos - 1) + 1;\n this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length;\n } else {\n this.pos = this.lineStart = 0;\n this.curLine = 1;\n }\n\n // Properties of the current token:\n // Its type\n this.type = types$1.eof;\n // For tokens that include more information than their type, the value\n this.value = null;\n // Its start and end offset\n this.start = this.end = this.pos;\n // And, if locations are used, the {line, column} object\n // corresponding to those offsets\n this.startLoc = this.endLoc = this.curPosition();\n\n // Position information for the previous token\n this.lastTokEndLoc = this.lastTokStartLoc = null;\n this.lastTokStart = this.lastTokEnd = this.pos;\n\n // The context stack is used to superficially track syntactic\n // context to predict whether a regular expression is allowed in a\n // given position.\n this.context = this.initialContext();\n this.exprAllowed = true;\n\n // Figure out if it's a module code.\n this.inModule = options.sourceType === \"module\";\n this.strict = this.inModule || this.strictDirective(this.pos);\n\n // Used to signify the start of a potential arrow function\n this.potentialArrowAt = -1;\n this.potentialArrowInForAwait = false;\n\n // Positions to delayed-check that yield/await does not exist in default parameters.\n this.yieldPos = this.awaitPos = this.awaitIdentPos = 0;\n // Labels in scope.\n this.labels = [];\n // Thus-far undefined exports.\n this.undefinedExports = Object.create(null);\n\n // If enabled, skip leading hashbang line.\n if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === \"#!\")\n { this.skipLineComment(2); }\n\n // Scope tracking for duplicate variable names (see scope.js)\n this.scopeStack = [];\n this.enterScope(\n this.options.sourceType === \"commonjs\"\n // In commonjs, the top-level scope behaves like a function scope\n ? SCOPE_FUNCTION\n : SCOPE_TOP\n );\n\n // For RegExp validation\n this.regexpState = null;\n\n // The stack of private names.\n // Each element has two properties: 'declared' and 'used'.\n // When it exited from the outermost class definition, all used private names must be declared.\n this.privateNameStack = [];\n};\n\nvar 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 } };\n\nParser.prototype.parse = function parse () {\n var node = this.options.program || this.startNode();\n this.nextToken();\n return this.parseTopLevel(node)\n};\n\nprototypeAccessors.inFunction.get = function () { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 };\n\nprototypeAccessors.inGenerator.get = function () { return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 };\n\nprototypeAccessors.inAsync.get = function () { return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 };\n\nprototypeAccessors.canAwait.get = function () {\n for (var i = this.scopeStack.length - 1; i >= 0; i--) {\n var ref = this.scopeStack[i];\n var flags = ref.flags;\n if (flags & (SCOPE_CLASS_STATIC_BLOCK | SCOPE_CLASS_FIELD_INIT)) { return false }\n if (flags & SCOPE_FUNCTION) { return (flags & SCOPE_ASYNC) > 0 }\n }\n return (this.inModule && this.options.ecmaVersion >= 13) || this.options.allowAwaitOutsideFunction\n};\n\nprototypeAccessors.allowReturn.get = function () {\n if (this.inFunction) { return true }\n if (this.options.allowReturnOutsideFunction && this.currentVarScope().flags & SCOPE_TOP) { return true }\n return false\n};\n\nprototypeAccessors.allowSuper.get = function () {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n return (flags & SCOPE_SUPER) > 0 || this.options.allowSuperOutsideMethod\n};\n\nprototypeAccessors.allowDirectSuper.get = function () { return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0 };\n\nprototypeAccessors.treatFunctionsAsVar.get = function () { return this.treatFunctionsAsVarInScope(this.currentScope()) };\n\nprototypeAccessors.allowNewDotTarget.get = function () {\n for (var i = this.scopeStack.length - 1; i >= 0; i--) {\n var ref = this.scopeStack[i];\n var flags = ref.flags;\n if (flags & (SCOPE_CLASS_STATIC_BLOCK | SCOPE_CLASS_FIELD_INIT) ||\n ((flags & SCOPE_FUNCTION) && !(flags & SCOPE_ARROW))) { return true }\n }\n return false\n};\n\nprototypeAccessors.allowUsing.get = function () {\n var ref = this.currentScope();\n var flags = ref.flags;\n if (flags & SCOPE_SWITCH) { return false }\n if (!this.inModule && flags & SCOPE_TOP) { return false }\n return true\n};\n\nprototypeAccessors.inClassStaticBlock.get = function () {\n return (this.currentVarScope().flags & SCOPE_CLASS_STATIC_BLOCK) > 0\n};\n\nParser.extend = function extend () {\n var plugins = [], len = arguments.length;\n while ( len-- ) plugins[ len ] = arguments[ len ];\n\n var cls = this;\n for (var i = 0; i < plugins.length; i++) { cls = plugins[i](cls); }\n return cls\n};\n\nParser.parse = function parse (input, options) {\n return new this(options, input).parse()\n};\n\nParser.parseExpressionAt = function parseExpressionAt (input, pos, options) {\n var parser = new this(options, input, pos);\n parser.nextToken();\n return parser.parseExpression()\n};\n\nParser.tokenizer = function tokenizer (input, options) {\n return new this(options, input)\n};\n\nObject.defineProperties( Parser.prototype, prototypeAccessors );\n\nvar pp$9 = Parser.prototype;\n\n// ## Parser utilities\n\nvar literal = /^(?:'((?:\\\\[^]|[^'\\\\])*?)'|\"((?:\\\\[^]|[^\"\\\\])*?)\")/;\npp$9.strictDirective = function(start) {\n if (this.options.ecmaVersion < 5) { return false }\n for (;;) {\n // Try to find string literal.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n var match = literal.exec(this.input.slice(start));\n if (!match) { return false }\n if ((match[1] || match[2]) === \"use strict\") {\n skipWhiteSpace.lastIndex = start + match[0].length;\n var spaceAfter = skipWhiteSpace.exec(this.input), end = spaceAfter.index + spaceAfter[0].length;\n var next = this.input.charAt(end);\n return next === \";\" || next === \"}\" ||\n (lineBreak.test(spaceAfter[0]) &&\n !(/[(`.[+\\-/*%<>=,?^&]/.test(next) || next === \"!\" && this.input.charAt(end + 1) === \"=\"))\n }\n start += match[0].length;\n\n // Skip semicolon, if any.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n if (this.input[start] === \";\")\n { start++; }\n }\n};\n\n// Predicate that tests whether the next token is of the given\n// type, and if yes, consumes it as a side effect.\n\npp$9.eat = function(type) {\n if (this.type === type) {\n this.next();\n return true\n } else {\n return false\n }\n};\n\n// Tests whether parsed token is a contextual keyword.\n\npp$9.isContextual = function(name) {\n return this.type === types$1.name && this.value === name && !this.containsEsc\n};\n\n// Consumes contextual keyword if possible.\n\npp$9.eatContextual = function(name) {\n if (!this.isContextual(name)) { return false }\n this.next();\n return true\n};\n\n// Asserts that following token is given contextual keyword.\n\npp$9.expectContextual = function(name) {\n if (!this.eatContextual(name)) { this.unexpected(); }\n};\n\n// Test whether a semicolon can be inserted at the current position.\n\npp$9.canInsertSemicolon = function() {\n return this.type === types$1.eof ||\n this.type === types$1.braceR ||\n lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n};\n\npp$9.insertSemicolon = function() {\n if (this.canInsertSemicolon()) {\n if (this.options.onInsertedSemicolon)\n { this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc); }\n return true\n }\n};\n\n// Consume a semicolon, or, failing that, see if we are allowed to\n// pretend that there is a semicolon at this position.\n\npp$9.semicolon = function() {\n if (!this.eat(types$1.semi) && !this.insertSemicolon()) { this.unexpected(); }\n};\n\npp$9.afterTrailingComma = function(tokType, notNext) {\n if (this.type === tokType) {\n if (this.options.onTrailingComma)\n { this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc); }\n if (!notNext)\n { this.next(); }\n return true\n }\n};\n\n// Expect a token of a given type. If found, consume it, otherwise,\n// raise an unexpected token error.\n\npp$9.expect = function(type) {\n this.eat(type) || this.unexpected();\n};\n\n// Raise an unexpected token error.\n\npp$9.unexpected = function(pos) {\n this.raise(pos != null ? pos : this.start, \"Unexpected token\");\n};\n\nvar DestructuringErrors = function DestructuringErrors() {\n this.shorthandAssign =\n this.trailingComma =\n this.parenthesizedAssign =\n this.parenthesizedBind =\n this.doubleProto =\n -1;\n};\n\npp$9.checkPatternErrors = function(refDestructuringErrors, isAssign) {\n if (!refDestructuringErrors) { return }\n if (refDestructuringErrors.trailingComma > -1)\n { this.raiseRecoverable(refDestructuringErrors.trailingComma, \"Comma is not permitted after the rest element\"); }\n var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind;\n if (parens > -1) { this.raiseRecoverable(parens, isAssign ? \"Assigning to rvalue\" : \"Parenthesized pattern\"); }\n};\n\npp$9.checkExpressionErrors = function(refDestructuringErrors, andThrow) {\n if (!refDestructuringErrors) { return false }\n var shorthandAssign = refDestructuringErrors.shorthandAssign;\n var doubleProto = refDestructuringErrors.doubleProto;\n if (!andThrow) { return shorthandAssign >= 0 || doubleProto >= 0 }\n if (shorthandAssign >= 0)\n { this.raise(shorthandAssign, \"Shorthand property assignments are valid only in destructuring patterns\"); }\n if (doubleProto >= 0)\n { this.raiseRecoverable(doubleProto, \"Redefinition of __proto__ property\"); }\n};\n\npp$9.checkYieldAwaitInDefaultParams = function() {\n if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos))\n { this.raise(this.yieldPos, \"Yield expression cannot be a default value\"); }\n if (this.awaitPos)\n { this.raise(this.awaitPos, \"Await expression cannot be a default value\"); }\n};\n\npp$9.isSimpleAssignTarget = function(expr) {\n if (expr.type === \"ParenthesizedExpression\")\n { return this.isSimpleAssignTarget(expr.expression) }\n return expr.type === \"Identifier\" || expr.type === \"MemberExpression\"\n};\n\nvar pp$8 = Parser.prototype;\n\n// ### Statement parsing\n\n// Parse a program. Initializes the parser, reads any number of\n// statements, and wraps them in a Program node. Optionally takes a\n// `program` argument. If present, the statements will be appended\n// to its body instead of creating a new node.\n\npp$8.parseTopLevel = function(node) {\n var exports = Object.create(null);\n if (!node.body) { node.body = []; }\n while (this.type !== types$1.eof) {\n var stmt = this.parseStatement(null, true, exports);\n node.body.push(stmt);\n }\n if (this.inModule)\n { for (var i = 0, list = Object.keys(this.undefinedExports); i < list.length; i += 1)\n {\n var name = list[i];\n\n this.raiseRecoverable(this.undefinedExports[name].start, (\"Export '\" + name + \"' is not defined\"));\n } }\n this.adaptDirectivePrologue(node.body);\n this.next();\n node.sourceType = this.options.sourceType === \"commonjs\" ? \"script\" : this.options.sourceType;\n return this.finishNode(node, \"Program\")\n};\n\nvar loopLabel = {kind: \"loop\"}, switchLabel = {kind: \"switch\"};\n\npp$8.isLet = function(context) {\n if (this.options.ecmaVersion < 6 || !this.isContextual(\"let\")) { return false }\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.fullCharCodeAt(next);\n // For ambiguous cases, determine if a LexicalDeclaration (or only a\n // Statement) is allowed here. If context is not empty then only a Statement\n // is allowed. However, `let [` is an explicit negative lookahead for\n // ExpressionStatement, so special-case it first.\n if (nextCh === 91 || nextCh === 92) { return true } // '[', '\\'\n if (context) { return false }\n\n if (nextCh === 123) { return true } // '{'\n if (isIdentifierStart(nextCh)) {\n var start = next;\n do { next += nextCh <= 0xffff ? 1 : 2; }\n while (isIdentifierChar(nextCh = this.fullCharCodeAt(next)))\n if (nextCh === 92) { return true }\n var ident = this.input.slice(start, next);\n if (!keywordRelationalOperator.test(ident)) { return true }\n }\n return false\n};\n\n// check 'async [no LineTerminator here] function'\n// - 'async /*foo*/ function' is OK.\n// - 'async /*\\n*/ function' is invalid.\npp$8.isAsyncFunction = function() {\n if (this.options.ecmaVersion < 8 || !this.isContextual(\"async\"))\n { return false }\n\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, after;\n return !lineBreak.test(this.input.slice(this.pos, next)) &&\n this.input.slice(next, next + 8) === \"function\" &&\n (next + 8 === this.input.length ||\n !(isIdentifierChar(after = this.fullCharCodeAt(next + 8)) || after === 92 /* '\\' */))\n};\n\npp$8.isUsingKeyword = function(isAwaitUsing, isFor) {\n if (this.options.ecmaVersion < 17 || !this.isContextual(isAwaitUsing ? \"await\" : \"using\"))\n { return false }\n\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length;\n\n if (lineBreak.test(this.input.slice(this.pos, next))) { return false }\n\n if (isAwaitUsing) {\n var usingEndPos = next + 5 /* using */, after;\n if (this.input.slice(next, usingEndPos) !== \"using\" ||\n usingEndPos === this.input.length ||\n isIdentifierChar(after = this.fullCharCodeAt(usingEndPos)) ||\n after === 92 /* '\\' */\n ) { return false }\n\n skipWhiteSpace.lastIndex = usingEndPos;\n var skipAfterUsing = skipWhiteSpace.exec(this.input);\n next = usingEndPos + skipAfterUsing[0].length;\n if (skipAfterUsing && lineBreak.test(this.input.slice(usingEndPos, next))) { return false }\n }\n\n var ch = this.fullCharCodeAt(next);\n if (!isIdentifierStart(ch) && ch !== 92 /* '\\' */) { return false }\n var idStart = next;\n do { next += ch <= 0xffff ? 1 : 2; }\n while (isIdentifierChar(ch = this.fullCharCodeAt(next)))\n if (ch === 92) { return true }\n var id = this.input.slice(idStart, next);\n if (keywordRelationalOperator.test(id) || isFor && id === \"of\") { return false }\n return true\n};\n\npp$8.isAwaitUsing = function(isFor) {\n return this.isUsingKeyword(true, isFor)\n};\n\npp$8.isUsing = function(isFor) {\n return this.isUsingKeyword(false, isFor)\n};\n\n// Parse a single statement.\n//\n// If expecting a statement and finding a slash operator, parse a\n// regular expression literal. This is to handle cases like\n// `if (foo) /blah/.exec(foo)`, where looking at the previous token\n// does not help.\n\npp$8.parseStatement = function(context, topLevel, exports) {\n var starttype = this.type, node = this.startNode(), kind;\n\n if (this.isLet(context)) {\n starttype = types$1._var;\n kind = \"let\";\n }\n\n // Most types of statements are recognized by the keyword they\n // start with. Many are trivial to parse, some require a bit of\n // complexity.\n\n switch (starttype) {\n case types$1._break: case types$1._continue: return this.parseBreakContinueStatement(node, starttype.keyword)\n case types$1._debugger: return this.parseDebuggerStatement(node)\n case types$1._do: return this.parseDoStatement(node)\n case types$1._for: return this.parseForStatement(node)\n case types$1._function:\n // Function as sole body of either an if statement or a labeled statement\n // works, but not when it is part of a labeled statement that is the sole\n // body of an if statement.\n if ((context && (this.strict || context !== \"if\" && context !== \"label\")) && this.options.ecmaVersion >= 6) { this.unexpected(); }\n return this.parseFunctionStatement(node, false, !context)\n case types$1._class:\n if (context) { this.unexpected(); }\n return this.parseClass(node, true)\n case types$1._if: return this.parseIfStatement(node)\n case types$1._return: return this.parseReturnStatement(node)\n case types$1._switch: return this.parseSwitchStatement(node)\n case types$1._throw: return this.parseThrowStatement(node)\n case types$1._try: return this.parseTryStatement(node)\n case types$1._const: case types$1._var:\n kind = kind || this.value;\n if (context && kind !== \"var\") { this.unexpected(); }\n return this.parseVarStatement(node, kind)\n case types$1._while: return this.parseWhileStatement(node)\n case types$1._with: return this.parseWithStatement(node)\n case types$1.braceL: return this.parseBlock(true, node)\n case types$1.semi: return this.parseEmptyStatement(node)\n case types$1._export:\n case types$1._import:\n if (this.options.ecmaVersion > 10 && starttype === types$1._import) {\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n if (nextCh === 40 || nextCh === 46) // '(' or '.'\n { return this.parseExpressionStatement(node, this.parseExpression()) }\n }\n\n if (!this.options.allowImportExportEverywhere) {\n if (!topLevel)\n { this.raise(this.start, \"'import' and 'export' may only appear at the top level\"); }\n if (!this.inModule)\n { this.raise(this.start, \"'import' and 'export' may appear only with 'sourceType: module'\"); }\n }\n return starttype === types$1._import ? this.parseImport(node) : this.parseExport(node, exports)\n\n // If the statement does not start with a statement keyword or a\n // brace, it's an ExpressionStatement or LabeledStatement. We\n // simply start parsing an expression, and afterwards, if the\n // next token is a colon and the expression was a simple\n // Identifier node, we switch to interpreting it as a label.\n default:\n if (this.isAsyncFunction()) {\n if (context) { this.unexpected(); }\n this.next();\n return this.parseFunctionStatement(node, true, !context)\n }\n\n var usingKind = this.isAwaitUsing(false) ? \"await using\" : this.isUsing(false) ? \"using\" : null;\n if (usingKind) {\n if (!this.allowUsing) {\n this.raise(this.start, \"Using declaration cannot appear in the top level when source type is `script` or in the bare case statement\");\n }\n if (usingKind === \"await using\") {\n if (!this.canAwait) {\n this.raise(this.start, \"Await using cannot appear outside of async function\");\n }\n this.next();\n }\n this.next();\n this.parseVar(node, false, usingKind);\n this.semicolon();\n return this.finishNode(node, \"VariableDeclaration\")\n }\n\n var maybeName = this.value, expr = this.parseExpression();\n if (starttype === types$1.name && expr.type === \"Identifier\" && this.eat(types$1.colon))\n { return this.parseLabeledStatement(node, maybeName, expr, context) }\n else { return this.parseExpressionStatement(node, expr) }\n }\n};\n\npp$8.parseBreakContinueStatement = function(node, keyword) {\n var isBreak = keyword === \"break\";\n this.next();\n if (this.eat(types$1.semi) || this.insertSemicolon()) { node.label = null; }\n else if (this.type !== types$1.name) { this.unexpected(); }\n else {\n node.label = this.parseIdent();\n this.semicolon();\n }\n\n // Verify that there is an actual destination to break or\n // continue to.\n var i = 0;\n for (; i < this.labels.length; ++i) {\n var lab = this.labels[i];\n if (node.label == null || lab.name === node.label.name) {\n if (lab.kind != null && (isBreak || lab.kind === \"loop\")) { break }\n if (node.label && isBreak) { break }\n }\n }\n if (i === this.labels.length) { this.raise(node.start, \"Unsyntactic \" + keyword); }\n return this.finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\")\n};\n\npp$8.parseDebuggerStatement = function(node) {\n this.next();\n this.semicolon();\n return this.finishNode(node, \"DebuggerStatement\")\n};\n\npp$8.parseDoStatement = function(node) {\n this.next();\n this.labels.push(loopLabel);\n node.body = this.parseStatement(\"do\");\n this.labels.pop();\n this.expect(types$1._while);\n node.test = this.parseParenExpression();\n if (this.options.ecmaVersion >= 6)\n { this.eat(types$1.semi); }\n else\n { this.semicolon(); }\n return this.finishNode(node, \"DoWhileStatement\")\n};\n\n// Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n// loop is non-trivial. Basically, we have to parse the init `var`\n// statement or expression, disallowing the `in` operator (see\n// the second parameter to `parseExpression`), and then check\n// whether the next token is `in` or `of`. When there is no init\n// part (semicolon immediately after the opening parenthesis), it\n// is a regular `for` loop.\n\npp$8.parseForStatement = function(node) {\n this.next();\n var awaitAt = (this.options.ecmaVersion >= 9 && this.canAwait && this.eatContextual(\"await\")) ? this.lastTokStart : -1;\n this.labels.push(loopLabel);\n this.enterScope(0);\n this.expect(types$1.parenL);\n if (this.type === types$1.semi) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, null)\n }\n var isLet = this.isLet();\n if (this.type === types$1._var || this.type === types$1._const || isLet) {\n var init$1 = this.startNode(), kind = isLet ? \"let\" : this.value;\n this.next();\n this.parseVar(init$1, true, kind);\n this.finishNode(init$1, \"VariableDeclaration\");\n return this.parseForAfterInit(node, init$1, awaitAt)\n }\n var startsWithLet = this.isContextual(\"let\"), isForOf = false;\n\n var usingKind = this.isUsing(true) ? \"using\" : this.isAwaitUsing(true) ? \"await using\" : null;\n if (usingKind) {\n var init$2 = this.startNode();\n this.next();\n if (usingKind === \"await using\") {\n if (!this.canAwait) {\n this.raise(this.start, \"Await using cannot appear outside of async function\");\n }\n this.next();\n }\n this.parseVar(init$2, true, usingKind);\n this.finishNode(init$2, \"VariableDeclaration\");\n return this.parseForAfterInit(node, init$2, awaitAt)\n }\n var containsEsc = this.containsEsc;\n var refDestructuringErrors = new DestructuringErrors;\n var initPos = this.start;\n var init = awaitAt > -1\n ? this.parseExprSubscripts(refDestructuringErrors, \"await\")\n : this.parseExpression(true, refDestructuringErrors);\n if (this.type === types$1._in || (isForOf = this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) {\n if (awaitAt > -1) { // implies `ecmaVersion >= 9` (see declaration of awaitAt)\n if (this.type === types$1._in) { this.unexpected(awaitAt); }\n node.await = true;\n } else if (isForOf && this.options.ecmaVersion >= 8) {\n if (init.start === initPos && !containsEsc && init.type === \"Identifier\" && init.name === \"async\") { this.unexpected(); }\n else if (this.options.ecmaVersion >= 9) { node.await = false; }\n }\n if (startsWithLet && isForOf) { this.raise(init.start, \"The left-hand side of a for-of loop may not start with 'let'.\"); }\n this.toAssignable(init, false, refDestructuringErrors);\n this.checkLValPattern(init);\n return this.parseForIn(node, init)\n } else {\n this.checkExpressionErrors(refDestructuringErrors, true);\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init)\n};\n\n// Helper method to parse for loop after variable initialization\npp$8.parseForAfterInit = function(node, init, awaitAt) {\n if ((this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) && init.declarations.length === 1) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === types$1._in) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n } else { node.await = awaitAt > -1; }\n }\n return this.parseForIn(node, init)\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init)\n};\n\npp$8.parseFunctionStatement = function(node, isAsync, declarationPosition) {\n this.next();\n return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync)\n};\n\npp$8.parseIfStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n // allow function declarations in branches, but only in non-strict mode\n node.consequent = this.parseStatement(\"if\");\n node.alternate = this.eat(types$1._else) ? this.parseStatement(\"if\") : null;\n return this.finishNode(node, \"IfStatement\")\n};\n\npp$8.parseReturnStatement = function(node) {\n if (!this.allowReturn)\n { this.raise(this.start, \"'return' outside of function\"); }\n this.next();\n\n // In `return` (and `break`/`continue`), the keywords with\n // optional arguments, we eagerly look for a semicolon or the\n // possibility to insert one.\n\n if (this.eat(types$1.semi) || this.insertSemicolon()) { node.argument = null; }\n else { node.argument = this.parseExpression(); this.semicolon(); }\n return this.finishNode(node, \"ReturnStatement\")\n};\n\npp$8.parseSwitchStatement = function(node) {\n this.next();\n node.discriminant = this.parseParenExpression();\n node.cases = [];\n this.expect(types$1.braceL);\n this.labels.push(switchLabel);\n this.enterScope(SCOPE_SWITCH);\n\n // Statements under must be grouped (by label) in SwitchCase\n // nodes. `cur` is used to keep the node that we are currently\n // adding statements to.\n\n var cur;\n for (var sawDefault = false; this.type !== types$1.braceR;) {\n if (this.type === types$1._case || this.type === types$1._default) {\n var isCase = this.type === types$1._case;\n if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n node.cases.push(cur = this.startNode());\n cur.consequent = [];\n this.next();\n if (isCase) {\n cur.test = this.parseExpression();\n } else {\n if (sawDefault) { this.raiseRecoverable(this.lastTokStart, \"Multiple default clauses\"); }\n sawDefault = true;\n cur.test = null;\n }\n this.expect(types$1.colon);\n } else {\n if (!cur) { this.unexpected(); }\n cur.consequent.push(this.parseStatement(null));\n }\n }\n this.exitScope();\n if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n this.next(); // Closing brace\n this.labels.pop();\n return this.finishNode(node, \"SwitchStatement\")\n};\n\npp$8.parseThrowStatement = function(node) {\n this.next();\n if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start)))\n { this.raise(this.lastTokEnd, \"Illegal newline after throw\"); }\n node.argument = this.parseExpression();\n this.semicolon();\n return this.finishNode(node, \"ThrowStatement\")\n};\n\n// Reused empty array added for node fields that are always empty.\n\nvar empty$1 = [];\n\npp$8.parseCatchClauseParam = function() {\n var param = this.parseBindingAtom();\n var simple = param.type === \"Identifier\";\n this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0);\n this.checkLValPattern(param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL);\n this.expect(types$1.parenR);\n\n return param\n};\n\npp$8.parseTryStatement = function(node) {\n this.next();\n node.block = this.parseBlock();\n node.handler = null;\n if (this.type === types$1._catch) {\n var clause = this.startNode();\n this.next();\n if (this.eat(types$1.parenL)) {\n clause.param = this.parseCatchClauseParam();\n } else {\n if (this.options.ecmaVersion < 10) { this.unexpected(); }\n clause.param = null;\n this.enterScope(0);\n }\n clause.body = this.parseBlock(false);\n this.exitScope();\n node.handler = this.finishNode(clause, \"CatchClause\");\n }\n node.finalizer = this.eat(types$1._finally) ? this.parseBlock() : null;\n if (!node.handler && !node.finalizer)\n { this.raise(node.start, \"Missing catch or finally clause\"); }\n return this.finishNode(node, \"TryStatement\")\n};\n\npp$8.parseVarStatement = function(node, kind, allowMissingInitializer) {\n this.next();\n this.parseVar(node, false, kind, allowMissingInitializer);\n this.semicolon();\n return this.finishNode(node, \"VariableDeclaration\")\n};\n\npp$8.parseWhileStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n this.labels.push(loopLabel);\n node.body = this.parseStatement(\"while\");\n this.labels.pop();\n return this.finishNode(node, \"WhileStatement\")\n};\n\npp$8.parseWithStatement = function(node) {\n if (this.strict) { this.raise(this.start, \"'with' in strict mode\"); }\n this.next();\n node.object = this.parseParenExpression();\n node.body = this.parseStatement(\"with\");\n return this.finishNode(node, \"WithStatement\")\n};\n\npp$8.parseEmptyStatement = function(node) {\n this.next();\n return this.finishNode(node, \"EmptyStatement\")\n};\n\npp$8.parseLabeledStatement = function(node, maybeName, expr, context) {\n for (var i$1 = 0, list = this.labels; i$1 < list.length; i$1 += 1)\n {\n var label = list[i$1];\n\n if (label.name === maybeName)\n { this.raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n } }\n var kind = this.type.isLoop ? \"loop\" : this.type === types$1._switch ? \"switch\" : null;\n for (var i = this.labels.length - 1; i >= 0; i--) {\n var label$1 = this.labels[i];\n if (label$1.statementStart === node.start) {\n // Update information about previous labels on this node\n label$1.statementStart = this.start;\n label$1.kind = kind;\n } else { break }\n }\n this.labels.push({name: maybeName, kind: kind, statementStart: this.start});\n node.body = this.parseStatement(context ? context.indexOf(\"label\") === -1 ? context + \"label\" : context : \"label\");\n this.labels.pop();\n node.label = expr;\n return this.finishNode(node, \"LabeledStatement\")\n};\n\npp$8.parseExpressionStatement = function(node, expr) {\n node.expression = expr;\n this.semicolon();\n return this.finishNode(node, \"ExpressionStatement\")\n};\n\n// Parse a semicolon-enclosed block of statements, handling `\"use\n// strict\"` declarations when `allowStrict` is true (used for\n// function bodies).\n\npp$8.parseBlock = function(createNewLexicalScope, node, exitStrict) {\n if ( createNewLexicalScope === void 0 ) createNewLexicalScope = true;\n if ( node === void 0 ) node = this.startNode();\n\n node.body = [];\n this.expect(types$1.braceL);\n if (createNewLexicalScope) { this.enterScope(0); }\n while (this.type !== types$1.braceR) {\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n if (exitStrict) { this.strict = false; }\n this.next();\n if (createNewLexicalScope) { this.exitScope(); }\n return this.finishNode(node, \"BlockStatement\")\n};\n\n// Parse a regular `for` loop. The disambiguation code in\n// `parseStatement` will already have parsed the init statement or\n// expression.\n\npp$8.parseFor = function(node, init) {\n node.init = init;\n this.expect(types$1.semi);\n node.test = this.type === types$1.semi ? null : this.parseExpression();\n this.expect(types$1.semi);\n node.update = this.type === types$1.parenR ? null : this.parseExpression();\n this.expect(types$1.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, \"ForStatement\")\n};\n\n// Parse a `for`/`in` and `for`/`of` loop, which are almost\n// same from parser's perspective.\n\npp$8.parseForIn = function(node, init) {\n var isForIn = this.type === types$1._in;\n this.next();\n\n if (\n init.type === \"VariableDeclaration\" &&\n init.declarations[0].init != null &&\n (\n !isForIn ||\n this.options.ecmaVersion < 8 ||\n this.strict ||\n init.kind !== \"var\" ||\n init.declarations[0].id.type !== \"Identifier\"\n )\n ) {\n this.raise(\n init.start,\n ((isForIn ? \"for-in\" : \"for-of\") + \" loop variable declaration may not have an initializer\")\n );\n }\n node.left = init;\n node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();\n this.expect(types$1.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\")\n};\n\n// Parse a list of variable declarations.\n\npp$8.parseVar = function(node, isFor, kind, allowMissingInitializer) {\n node.declarations = [];\n node.kind = kind;\n for (;;) {\n var decl = this.startNode();\n this.parseVarId(decl, kind);\n if (this.eat(types$1.eq)) {\n decl.init = this.parseMaybeAssign(isFor);\n } else if (!allowMissingInitializer && kind === \"const\" && !(this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\")))) {\n this.unexpected();\n } else if (!allowMissingInitializer && (kind === \"using\" || kind === \"await using\") && this.options.ecmaVersion >= 17 && this.type !== types$1._in && !this.isContextual(\"of\")) {\n this.raise(this.lastTokEnd, (\"Missing initializer in \" + kind + \" declaration\"));\n } else if (!allowMissingInitializer && decl.id.type !== \"Identifier\" && !(isFor && (this.type === types$1._in || this.isContextual(\"of\")))) {\n this.raise(this.lastTokEnd, \"Complex binding patterns require an initialization value\");\n } else {\n decl.init = null;\n }\n node.declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n if (!this.eat(types$1.comma)) { break }\n }\n return node\n};\n\npp$8.parseVarId = function(decl, kind) {\n decl.id = kind === \"using\" || kind === \"await using\"\n ? this.parseIdent()\n : this.parseBindingAtom();\n\n this.checkLValPattern(decl.id, kind === \"var\" ? BIND_VAR : BIND_LEXICAL, false);\n};\n\nvar FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4;\n\n// Parse a function declaration or literal (depending on the\n// `statement & FUNC_STATEMENT`).\n\n// Remove `allowExpressionBody` for 7.0.0, as it is only called with false\npp$8.parseFunction = function(node, statement, allowExpressionBody, isAsync, forInit) {\n this.initFunction(node);\n if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {\n if (this.type === types$1.star && (statement & FUNC_HANGING_STATEMENT))\n { this.unexpected(); }\n node.generator = this.eat(types$1.star);\n }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n if (statement & FUNC_STATEMENT) {\n node.id = (statement & FUNC_NULLABLE_ID) && this.type !== types$1.name ? null : this.parseIdent();\n if (node.id && !(statement & FUNC_HANGING_STATEMENT))\n // If it is a regular function declaration in sloppy mode, then it is\n // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding\n // mode depends on properties of the current scope (see\n // treatFunctionsAsVar).\n { this.checkLValSimple(node.id, (this.strict || node.generator || node.async) ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION); }\n }\n\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(node.async, node.generator));\n\n if (!(statement & FUNC_STATEMENT))\n { node.id = this.type === types$1.name ? this.parseIdent() : null; }\n\n this.parseFunctionParams(node);\n this.parseFunctionBody(node, allowExpressionBody, false, forInit);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, (statement & FUNC_STATEMENT) ? \"FunctionDeclaration\" : \"FunctionExpression\")\n};\n\npp$8.parseFunctionParams = function(node) {\n this.expect(types$1.parenL);\n node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n};\n\n// Parse a class declaration or literal (depending on the\n// `isStatement` parameter).\n\npp$8.parseClass = function(node, isStatement) {\n this.next();\n\n // ecma-262 14.6 Class Definitions\n // A class definition is always strict mode code.\n var oldStrict = this.strict;\n this.strict = true;\n\n this.parseClassId(node, isStatement);\n this.parseClassSuper(node);\n var privateNameMap = this.enterClassBody();\n var classBody = this.startNode();\n var hadConstructor = false;\n classBody.body = [];\n this.expect(types$1.braceL);\n while (this.type !== types$1.braceR) {\n var element = this.parseClassElement(node.superClass !== null);\n if (element) {\n classBody.body.push(element);\n if (element.type === \"MethodDefinition\" && element.kind === \"constructor\") {\n if (hadConstructor) { this.raiseRecoverable(element.start, \"Duplicate constructor in the same class\"); }\n hadConstructor = true;\n } else if (element.key && element.key.type === \"PrivateIdentifier\" && isPrivateNameConflicted(privateNameMap, element)) {\n this.raiseRecoverable(element.key.start, (\"Identifier '#\" + (element.key.name) + \"' has already been declared\"));\n }\n }\n }\n this.strict = oldStrict;\n this.next();\n node.body = this.finishNode(classBody, \"ClassBody\");\n this.exitClassBody();\n return this.finishNode(node, isStatement ? \"ClassDeclaration\" : \"ClassExpression\")\n};\n\npp$8.parseClassElement = function(constructorAllowsSuper) {\n if (this.eat(types$1.semi)) { return null }\n\n var ecmaVersion = this.options.ecmaVersion;\n var node = this.startNode();\n var keyName = \"\";\n var isGenerator = false;\n var isAsync = false;\n var kind = \"method\";\n var isStatic = false;\n\n if (this.eatContextual(\"static\")) {\n // Parse static init block\n if (ecmaVersion >= 13 && this.eat(types$1.braceL)) {\n this.parseClassStaticBlock(node);\n return node\n }\n if (this.isClassElementNameStart() || this.type === types$1.star) {\n isStatic = true;\n } else {\n keyName = \"static\";\n }\n }\n node.static = isStatic;\n if (!keyName && ecmaVersion >= 8 && this.eatContextual(\"async\")) {\n if ((this.isClassElementNameStart() || this.type === types$1.star) && !this.canInsertSemicolon()) {\n isAsync = true;\n } else {\n keyName = \"async\";\n }\n }\n if (!keyName && (ecmaVersion >= 9 || !isAsync) && this.eat(types$1.star)) {\n isGenerator = true;\n }\n if (!keyName && !isAsync && !isGenerator) {\n var lastValue = this.value;\n if (this.eatContextual(\"get\") || this.eatContextual(\"set\")) {\n if (this.isClassElementNameStart()) {\n kind = lastValue;\n } else {\n keyName = lastValue;\n }\n }\n }\n\n // Parse element name\n if (keyName) {\n // 'async', 'get', 'set', or 'static' were not a keyword contextually.\n // The last token is any of those. Make it the element name.\n node.computed = false;\n node.key = this.startNodeAt(this.lastTokStart, this.lastTokStartLoc);\n node.key.name = keyName;\n this.finishNode(node.key, \"Identifier\");\n } else {\n this.parseClassElementName(node);\n }\n\n // Parse element value\n if (ecmaVersion < 13 || this.type === types$1.parenL || kind !== \"method\" || isGenerator || isAsync) {\n var isConstructor = !node.static && checkKeyName(node, \"constructor\");\n var allowsDirectSuper = isConstructor && constructorAllowsSuper;\n // Couldn't move this check into the 'parseClassMethod' method for backward compatibility.\n if (isConstructor && kind !== \"method\") { this.raise(node.key.start, \"Constructor can't have get/set modifier\"); }\n node.kind = isConstructor ? \"constructor\" : kind;\n this.parseClassMethod(node, isGenerator, isAsync, allowsDirectSuper);\n } else {\n this.parseClassField(node);\n }\n\n return node\n};\n\npp$8.isClassElementNameStart = function() {\n return (\n this.type === types$1.name ||\n this.type === types$1.privateId ||\n this.type === types$1.num ||\n this.type === types$1.string ||\n this.type === types$1.bracketL ||\n this.type.keyword\n )\n};\n\npp$8.parseClassElementName = function(element) {\n if (this.type === types$1.privateId) {\n if (this.value === \"constructor\") {\n this.raise(this.start, \"Classes can't have an element named '#constructor'\");\n }\n element.computed = false;\n element.key = this.parsePrivateIdent();\n } else {\n this.parsePropertyName(element);\n }\n};\n\npp$8.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {\n // Check key and flags\n var key = method.key;\n if (method.kind === \"constructor\") {\n if (isGenerator) { this.raise(key.start, \"Constructor can't be a generator\"); }\n if (isAsync) { this.raise(key.start, \"Constructor can't be an async method\"); }\n } else if (method.static && checkKeyName(method, \"prototype\")) {\n this.raise(key.start, \"Classes may not have a static property named prototype\");\n }\n\n // Parse value\n var value = method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper);\n\n // Check value\n if (method.kind === \"get\" && value.params.length !== 0)\n { this.raiseRecoverable(value.start, \"getter should have no params\"); }\n if (method.kind === \"set\" && value.params.length !== 1)\n { this.raiseRecoverable(value.start, \"setter should have exactly one param\"); }\n if (method.kind === \"set\" && value.params[0].type === \"RestElement\")\n { this.raiseRecoverable(value.params[0].start, \"Setter cannot use rest params\"); }\n\n return this.finishNode(method, \"MethodDefinition\")\n};\n\npp$8.parseClassField = function(field) {\n if (checkKeyName(field, \"constructor\")) {\n this.raise(field.key.start, \"Classes can't have a field named 'constructor'\");\n } else if (field.static && checkKeyName(field, \"prototype\")) {\n this.raise(field.key.start, \"Classes can't have a static field named 'prototype'\");\n }\n\n if (this.eat(types$1.eq)) {\n // To raise SyntaxError if 'arguments' exists in the initializer.\n this.enterScope(SCOPE_CLASS_FIELD_INIT | SCOPE_SUPER);\n field.value = this.parseMaybeAssign();\n this.exitScope();\n } else {\n field.value = null;\n }\n this.semicolon();\n\n return this.finishNode(field, \"PropertyDefinition\")\n};\n\npp$8.parseClassStaticBlock = function(node) {\n node.body = [];\n\n var oldLabels = this.labels;\n this.labels = [];\n this.enterScope(SCOPE_CLASS_STATIC_BLOCK | SCOPE_SUPER);\n while (this.type !== types$1.braceR) {\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n this.next();\n this.exitScope();\n this.labels = oldLabels;\n\n return this.finishNode(node, \"StaticBlock\")\n};\n\npp$8.parseClassId = function(node, isStatement) {\n if (this.type === types$1.name) {\n node.id = this.parseIdent();\n if (isStatement)\n { this.checkLValSimple(node.id, BIND_LEXICAL, false); }\n } else {\n if (isStatement === true)\n { this.unexpected(); }\n node.id = null;\n }\n};\n\npp$8.parseClassSuper = function(node) {\n node.superClass = this.eat(types$1._extends) ? this.parseExprSubscripts(null, false) : null;\n};\n\npp$8.enterClassBody = function() {\n var element = {declared: Object.create(null), used: []};\n this.privateNameStack.push(element);\n return element.declared\n};\n\npp$8.exitClassBody = function() {\n var ref = this.privateNameStack.pop();\n var declared = ref.declared;\n var used = ref.used;\n if (!this.options.checkPrivateFields) { return }\n var len = this.privateNameStack.length;\n var parent = len === 0 ? null : this.privateNameStack[len - 1];\n for (var i = 0; i < used.length; ++i) {\n var id = used[i];\n if (!hasOwn(declared, id.name)) {\n if (parent) {\n parent.used.push(id);\n } else {\n this.raiseRecoverable(id.start, (\"Private field '#\" + (id.name) + \"' must be declared in an enclosing class\"));\n }\n }\n }\n};\n\nfunction isPrivateNameConflicted(privateNameMap, element) {\n var name = element.key.name;\n var curr = privateNameMap[name];\n\n var next = \"true\";\n if (element.type === \"MethodDefinition\" && (element.kind === \"get\" || element.kind === \"set\")) {\n next = (element.static ? \"s\" : \"i\") + element.kind;\n }\n\n // `class { get #a(){}; static set #a(_){} }` is also conflict.\n if (\n curr === \"iget\" && next === \"iset\" ||\n curr === \"iset\" && next === \"iget\" ||\n curr === \"sget\" && next === \"sset\" ||\n curr === \"sset\" && next === \"sget\"\n ) {\n privateNameMap[name] = \"true\";\n return false\n } else if (!curr) {\n privateNameMap[name] = next;\n return false\n } else {\n return true\n }\n}\n\nfunction checkKeyName(node, name) {\n var computed = node.computed;\n var key = node.key;\n return !computed && (\n key.type === \"Identifier\" && key.name === name ||\n key.type === \"Literal\" && key.value === name\n )\n}\n\n// Parses module export declaration.\n\npp$8.parseExportAllDeclaration = function(node, exports) {\n if (this.options.ecmaVersion >= 11) {\n if (this.eatContextual(\"as\")) {\n node.exported = this.parseModuleExportName();\n this.checkExport(exports, node.exported, this.lastTokStart);\n } else {\n node.exported = null;\n }\n }\n this.expectContextual(\"from\");\n if (this.type !== types$1.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n if (this.options.ecmaVersion >= 16)\n { node.attributes = this.parseWithClause(); }\n this.semicolon();\n return this.finishNode(node, \"ExportAllDeclaration\")\n};\n\npp$8.parseExport = function(node, exports) {\n this.next();\n // export * from '...'\n if (this.eat(types$1.star)) {\n return this.parseExportAllDeclaration(node, exports)\n }\n if (this.eat(types$1._default)) { // export default ...\n this.checkExport(exports, \"default\", this.lastTokStart);\n node.declaration = this.parseExportDefaultDeclaration();\n return this.finishNode(node, \"ExportDefaultDeclaration\")\n }\n // export var|const|let|function|class ...\n if (this.shouldParseExportStatement()) {\n node.declaration = this.parseExportDeclaration(node);\n if (node.declaration.type === \"VariableDeclaration\")\n { this.checkVariableExport(exports, node.declaration.declarations); }\n else\n { this.checkExport(exports, node.declaration.id, node.declaration.id.start); }\n node.specifiers = [];\n node.source = null;\n if (this.options.ecmaVersion >= 16)\n { node.attributes = []; }\n } else { // export { x, y as z } [from '...']\n node.declaration = null;\n node.specifiers = this.parseExportSpecifiers(exports);\n if (this.eatContextual(\"from\")) {\n if (this.type !== types$1.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n if (this.options.ecmaVersion >= 16)\n { node.attributes = this.parseWithClause(); }\n } else {\n for (var i = 0, list = node.specifiers; i < list.length; i += 1) {\n // check for keywords used as local names\n var spec = list[i];\n\n this.checkUnreserved(spec.local);\n // check if export is defined\n this.checkLocalExport(spec.local);\n\n if (spec.local.type === \"Literal\") {\n this.raise(spec.local.start, \"A string literal cannot be used as an exported binding without `from`.\");\n }\n }\n\n node.source = null;\n if (this.options.ecmaVersion >= 16)\n { node.attributes = []; }\n }\n this.semicolon();\n }\n return this.finishNode(node, \"ExportNamedDeclaration\")\n};\n\npp$8.parseExportDeclaration = function(node) {\n return this.parseStatement(null)\n};\n\npp$8.parseExportDefaultDeclaration = function() {\n var isAsync;\n if (this.type === types$1._function || (isAsync = this.isAsyncFunction())) {\n var fNode = this.startNode();\n this.next();\n if (isAsync) { this.next(); }\n return this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync)\n } else if (this.type === types$1._class) {\n var cNode = this.startNode();\n return this.parseClass(cNode, \"nullableID\")\n } else {\n var declaration = this.parseMaybeAssign();\n this.semicolon();\n return declaration\n }\n};\n\npp$8.checkExport = function(exports, name, pos) {\n if (!exports) { return }\n if (typeof name !== \"string\")\n { name = name.type === \"Identifier\" ? name.name : name.value; }\n if (hasOwn(exports, name))\n { this.raiseRecoverable(pos, \"Duplicate export '\" + name + \"'\"); }\n exports[name] = true;\n};\n\npp$8.checkPatternExport = function(exports, pat) {\n var type = pat.type;\n if (type === \"Identifier\")\n { this.checkExport(exports, pat, pat.start); }\n else if (type === \"ObjectPattern\")\n { for (var i = 0, list = pat.properties; i < list.length; i += 1)\n {\n var prop = list[i];\n\n this.checkPatternExport(exports, prop);\n } }\n else if (type === \"ArrayPattern\")\n { for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) {\n var elt = list$1[i$1];\n\n if (elt) { this.checkPatternExport(exports, elt); }\n } }\n else if (type === \"Property\")\n { this.checkPatternExport(exports, pat.value); }\n else if (type === \"AssignmentPattern\")\n { this.checkPatternExport(exports, pat.left); }\n else if (type === \"RestElement\")\n { this.checkPatternExport(exports, pat.argument); }\n};\n\npp$8.checkVariableExport = function(exports, decls) {\n if (!exports) { return }\n for (var i = 0, list = decls; i < list.length; i += 1)\n {\n var decl = list[i];\n\n this.checkPatternExport(exports, decl.id);\n }\n};\n\npp$8.shouldParseExportStatement = function() {\n return this.type.keyword === \"var\" ||\n this.type.keyword === \"const\" ||\n this.type.keyword === \"class\" ||\n this.type.keyword === \"function\" ||\n this.isLet() ||\n this.isAsyncFunction()\n};\n\n// Parses a comma-separated list of module exports.\n\npp$8.parseExportSpecifier = function(exports) {\n var node = this.startNode();\n node.local = this.parseModuleExportName();\n\n node.exported = this.eatContextual(\"as\") ? this.parseModuleExportName() : node.local;\n this.checkExport(\n exports,\n node.exported,\n node.exported.start\n );\n\n return this.finishNode(node, \"ExportSpecifier\")\n};\n\npp$8.parseExportSpecifiers = function(exports) {\n var nodes = [], first = true;\n // export { x, y as z } [from '...']\n this.expect(types$1.braceL);\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n nodes.push(this.parseExportSpecifier(exports));\n }\n return nodes\n};\n\n// Parses import declaration.\n\npp$8.parseImport = function(node) {\n this.next();\n\n // import '...'\n if (this.type === types$1.string) {\n node.specifiers = empty$1;\n node.source = this.parseExprAtom();\n } else {\n node.specifiers = this.parseImportSpecifiers();\n this.expectContextual(\"from\");\n node.source = this.type === types$1.string ? this.parseExprAtom() : this.unexpected();\n }\n if (this.options.ecmaVersion >= 16)\n { node.attributes = this.parseWithClause(); }\n this.semicolon();\n return this.finishNode(node, \"ImportDeclaration\")\n};\n\n// Parses a comma-separated list of module imports.\n\npp$8.parseImportSpecifier = function() {\n var node = this.startNode();\n node.imported = this.parseModuleExportName();\n\n if (this.eatContextual(\"as\")) {\n node.local = this.parseIdent();\n } else {\n this.checkUnreserved(node.imported);\n node.local = node.imported;\n }\n this.checkLValSimple(node.local, BIND_LEXICAL);\n\n return this.finishNode(node, \"ImportSpecifier\")\n};\n\npp$8.parseImportDefaultSpecifier = function() {\n // import defaultObj, { x, y as z } from '...'\n var node = this.startNode();\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, BIND_LEXICAL);\n return this.finishNode(node, \"ImportDefaultSpecifier\")\n};\n\npp$8.parseImportNamespaceSpecifier = function() {\n var node = this.startNode();\n this.next();\n this.expectContextual(\"as\");\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, BIND_LEXICAL);\n return this.finishNode(node, \"ImportNamespaceSpecifier\")\n};\n\npp$8.parseImportSpecifiers = function() {\n var nodes = [], first = true;\n if (this.type === types$1.name) {\n nodes.push(this.parseImportDefaultSpecifier());\n if (!this.eat(types$1.comma)) { return nodes }\n }\n if (this.type === types$1.star) {\n nodes.push(this.parseImportNamespaceSpecifier());\n return nodes\n }\n this.expect(types$1.braceL);\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n nodes.push(this.parseImportSpecifier());\n }\n return nodes\n};\n\npp$8.parseWithClause = function() {\n var nodes = [];\n if (!this.eat(types$1._with)) {\n return nodes\n }\n this.expect(types$1.braceL);\n var attributeKeys = {};\n var first = true;\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n var attr = this.parseImportAttribute();\n var keyName = attr.key.type === \"Identifier\" ? attr.key.name : attr.key.value;\n if (hasOwn(attributeKeys, keyName))\n { this.raiseRecoverable(attr.key.start, \"Duplicate attribute key '\" + keyName + \"'\"); }\n attributeKeys[keyName] = true;\n nodes.push(attr);\n }\n return nodes\n};\n\npp$8.parseImportAttribute = function() {\n var node = this.startNode();\n node.key = this.type === types$1.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== \"never\");\n this.expect(types$1.colon);\n if (this.type !== types$1.string) {\n this.unexpected();\n }\n node.value = this.parseExprAtom();\n return this.finishNode(node, \"ImportAttribute\")\n};\n\npp$8.parseModuleExportName = function() {\n if (this.options.ecmaVersion >= 13 && this.type === types$1.string) {\n var stringLiteral = this.parseLiteral(this.value);\n if (loneSurrogate.test(stringLiteral.value)) {\n this.raise(stringLiteral.start, \"An export name cannot include a lone surrogate.\");\n }\n return stringLiteral\n }\n return this.parseIdent(true)\n};\n\n// Set `ExpressionStatement#directive` property for directive prologues.\npp$8.adaptDirectivePrologue = function(statements) {\n for (var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) {\n statements[i].directive = statements[i].expression.raw.slice(1, -1);\n }\n};\npp$8.isDirectiveCandidate = function(statement) {\n return (\n this.options.ecmaVersion >= 5 &&\n statement.type === \"ExpressionStatement\" &&\n statement.expression.type === \"Literal\" &&\n typeof statement.expression.value === \"string\" &&\n // Reject parenthesized strings.\n (this.input[statement.start] === \"\\\"\" || this.input[statement.start] === \"'\")\n )\n};\n\nvar pp$7 = Parser.prototype;\n\n// Convert existing expression atom to assignable pattern\n// if possible.\n\npp$7.toAssignable = function(node, isBinding, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 6 && node) {\n switch (node.type) {\n case \"Identifier\":\n if (this.inAsync && node.name === \"await\")\n { this.raise(node.start, \"Cannot use 'await' as identifier inside an async function\"); }\n break\n\n case \"ObjectPattern\":\n case \"ArrayPattern\":\n case \"AssignmentPattern\":\n case \"RestElement\":\n break\n\n case \"ObjectExpression\":\n node.type = \"ObjectPattern\";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n for (var i = 0, list = node.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n this.toAssignable(prop, isBinding);\n // Early error:\n // AssignmentRestProperty[Yield, Await] :\n // `...` DestructuringAssignmentTarget[Yield, Await]\n //\n // It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.\n if (\n prop.type === \"RestElement\" &&\n (prop.argument.type === \"ArrayPattern\" || prop.argument.type === \"ObjectPattern\")\n ) {\n this.raise(prop.argument.start, \"Unexpected token\");\n }\n }\n break\n\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n if (node.kind !== \"init\") { this.raise(node.key.start, \"Object pattern can't contain getter or setter\"); }\n this.toAssignable(node.value, isBinding);\n break\n\n case \"ArrayExpression\":\n node.type = \"ArrayPattern\";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n this.toAssignableList(node.elements, isBinding);\n break\n\n case \"SpreadElement\":\n node.type = \"RestElement\";\n this.toAssignable(node.argument, isBinding);\n if (node.argument.type === \"AssignmentPattern\")\n { this.raise(node.argument.start, \"Rest elements cannot have a default value\"); }\n break\n\n case \"AssignmentExpression\":\n if (node.operator !== \"=\") { this.raise(node.left.end, \"Only '=' operator can be used for specifying default value.\"); }\n node.type = \"AssignmentPattern\";\n delete node.operator;\n this.toAssignable(node.left, isBinding);\n break\n\n case \"ParenthesizedExpression\":\n this.toAssignable(node.expression, isBinding, refDestructuringErrors);\n break\n\n case \"ChainExpression\":\n this.raiseRecoverable(node.start, \"Optional chaining cannot appear in left-hand side\");\n break\n\n case \"MemberExpression\":\n if (!isBinding) { break }\n\n default:\n this.raise(node.start, \"Assigning to rvalue\");\n }\n } else if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n return node\n};\n\n// Convert list of expression atoms to binding list.\n\npp$7.toAssignableList = function(exprList, isBinding) {\n var end = exprList.length;\n for (var i = 0; i < end; i++) {\n var elt = exprList[i];\n if (elt) { this.toAssignable(elt, isBinding); }\n }\n if (end) {\n var last = exprList[end - 1];\n if (this.options.ecmaVersion === 6 && isBinding && last && last.type === \"RestElement\" && last.argument.type !== \"Identifier\")\n { this.unexpected(last.argument.start); }\n }\n return exprList\n};\n\n// Parses spread element.\n\npp$7.parseSpread = function(refDestructuringErrors) {\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n return this.finishNode(node, \"SpreadElement\")\n};\n\npp$7.parseRestBinding = function() {\n var node = this.startNode();\n this.next();\n\n // RestElement inside of a function parameter must be an identifier\n if (this.options.ecmaVersion === 6 && this.type !== types$1.name)\n { this.unexpected(); }\n\n node.argument = this.parseBindingAtom();\n\n return this.finishNode(node, \"RestElement\")\n};\n\n// Parses lvalue (assignable) atom.\n\npp$7.parseBindingAtom = function() {\n if (this.options.ecmaVersion >= 6) {\n switch (this.type) {\n case types$1.bracketL:\n var node = this.startNode();\n this.next();\n node.elements = this.parseBindingList(types$1.bracketR, true, true);\n return this.finishNode(node, \"ArrayPattern\")\n\n case types$1.braceL:\n return this.parseObj(true)\n }\n }\n return this.parseIdent()\n};\n\npp$7.parseBindingList = function(close, allowEmpty, allowTrailingComma, allowModifiers) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (first) { first = false; }\n else { this.expect(types$1.comma); }\n if (allowEmpty && this.type === types$1.comma) {\n elts.push(null);\n } else if (allowTrailingComma && this.afterTrailingComma(close)) {\n break\n } else if (this.type === types$1.ellipsis) {\n var rest = this.parseRestBinding();\n this.parseBindingListItem(rest);\n elts.push(rest);\n if (this.type === types$1.comma) { this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\"); }\n this.expect(close);\n break\n } else {\n elts.push(this.parseAssignableListItem(allowModifiers));\n }\n }\n return elts\n};\n\npp$7.parseAssignableListItem = function(allowModifiers) {\n var elem = this.parseMaybeDefault(this.start, this.startLoc);\n this.parseBindingListItem(elem);\n return elem\n};\n\npp$7.parseBindingListItem = function(param) {\n return param\n};\n\n// Parses assignment pattern around given atom if possible.\n\npp$7.parseMaybeDefault = function(startPos, startLoc, left) {\n left = left || this.parseBindingAtom();\n if (this.options.ecmaVersion < 6 || !this.eat(types$1.eq)) { return left }\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.right = this.parseMaybeAssign();\n return this.finishNode(node, \"AssignmentPattern\")\n};\n\n// The following three functions all verify that a node is an lvalue —\n// something that can be bound, or assigned to. In order to do so, they perform\n// a variety of checks:\n//\n// - Check that none of the bound/assigned-to identifiers are reserved words.\n// - Record name declarations for bindings in the appropriate scope.\n// - Check duplicate argument names, if checkClashes is set.\n//\n// If a complex binding pattern is encountered (e.g., object and array\n// destructuring), the entire pattern is recursively checked.\n//\n// There are three versions of checkLVal*() appropriate for different\n// circumstances:\n//\n// - checkLValSimple() shall be used if the syntactic construct supports\n// nothing other than identifiers and member expressions. Parenthesized\n// expressions are also correctly handled. This is generally appropriate for\n// constructs for which the spec says\n//\n// > It is a Syntax Error if AssignmentTargetType of [the production] is not\n// > simple.\n//\n// It is also appropriate for checking if an identifier is valid and not\n// defined elsewhere, like import declarations or function/class identifiers.\n//\n// Examples where this is used include:\n// a += …;\n// import a from '…';\n// where a is the node to be checked.\n//\n// - checkLValPattern() shall be used if the syntactic construct supports\n// anything checkLValSimple() supports, as well as object and array\n// destructuring patterns. This is generally appropriate for constructs for\n// which the spec says\n//\n// > It is a Syntax Error if [the production] is neither an ObjectLiteral nor\n// > an ArrayLiteral and AssignmentTargetType of [the production] is not\n// > simple.\n//\n// Examples where this is used include:\n// (a = …);\n// const a = …;\n// try { … } catch (a) { … }\n// where a is the node to be checked.\n//\n// - checkLValInnerPattern() shall be used if the syntactic construct supports\n// anything checkLValPattern() supports, as well as default assignment\n// patterns, rest elements, and other constructs that may appear within an\n// object or array destructuring pattern.\n//\n// As a special case, function parameters also use checkLValInnerPattern(),\n// as they also support defaults and rest constructs.\n//\n// These functions deliberately support both assignment and binding constructs,\n// as the logic for both is exceedingly similar. If the node is the target of\n// an assignment, then bindingType should be set to BIND_NONE. Otherwise, it\n// should be set to the appropriate BIND_* constant, like BIND_VAR or\n// BIND_LEXICAL.\n//\n// If the function is called with a non-BIND_NONE bindingType, then\n// additionally a checkClashes object may be specified to allow checking for\n// duplicate argument names. checkClashes is ignored if the provided construct\n// is an assignment (i.e., bindingType is BIND_NONE).\n\npp$7.checkLValSimple = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n var isBind = bindingType !== BIND_NONE;\n\n switch (expr.type) {\n case \"Identifier\":\n if (this.strict && this.reservedWordsStrictBind.test(expr.name))\n { this.raiseRecoverable(expr.start, (isBind ? \"Binding \" : \"Assigning to \") + expr.name + \" in strict mode\"); }\n if (isBind) {\n if (bindingType === BIND_LEXICAL && expr.name === \"let\")\n { this.raiseRecoverable(expr.start, \"let is disallowed as a lexically bound name\"); }\n if (checkClashes) {\n if (hasOwn(checkClashes, expr.name))\n { this.raiseRecoverable(expr.start, \"Argument name clash\"); }\n checkClashes[expr.name] = true;\n }\n if (bindingType !== BIND_OUTSIDE) { this.declareName(expr.name, bindingType, expr.start); }\n }\n break\n\n case \"ChainExpression\":\n this.raiseRecoverable(expr.start, \"Optional chaining cannot appear in left-hand side\");\n break\n\n case \"MemberExpression\":\n if (isBind) { this.raiseRecoverable(expr.start, \"Binding member expression\"); }\n break\n\n case \"ParenthesizedExpression\":\n if (isBind) { this.raiseRecoverable(expr.start, \"Binding parenthesized expression\"); }\n return this.checkLValSimple(expr.expression, bindingType, checkClashes)\n\n default:\n this.raise(expr.start, (isBind ? \"Binding\" : \"Assigning to\") + \" rvalue\");\n }\n};\n\npp$7.checkLValPattern = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n switch (expr.type) {\n case \"ObjectPattern\":\n for (var i = 0, list = expr.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n this.checkLValInnerPattern(prop, bindingType, checkClashes);\n }\n break\n\n case \"ArrayPattern\":\n for (var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1) {\n var elem = list$1[i$1];\n\n if (elem) { this.checkLValInnerPattern(elem, bindingType, checkClashes); }\n }\n break\n\n default:\n this.checkLValSimple(expr, bindingType, checkClashes);\n }\n};\n\npp$7.checkLValInnerPattern = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n switch (expr.type) {\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n this.checkLValInnerPattern(expr.value, bindingType, checkClashes);\n break\n\n case \"AssignmentPattern\":\n this.checkLValPattern(expr.left, bindingType, checkClashes);\n break\n\n case \"RestElement\":\n this.checkLValPattern(expr.argument, bindingType, checkClashes);\n break\n\n default:\n this.checkLValPattern(expr, bindingType, checkClashes);\n }\n};\n\n// The algorithm used to determine whether a regexp can appear at a\n// given point in the program is loosely based on sweet.js' approach.\n// See https://github.com/mozilla/sweet.js/wiki/design\n\n\nvar TokContext = function TokContext(token, isExpr, preserveSpace, override, generator) {\n this.token = token;\n this.isExpr = !!isExpr;\n this.preserveSpace = !!preserveSpace;\n this.override = override;\n this.generator = !!generator;\n};\n\nvar types = {\n b_stat: new TokContext(\"{\", false),\n b_expr: new TokContext(\"{\", true),\n b_tmpl: new TokContext(\"${\", false),\n p_stat: new TokContext(\"(\", false),\n p_expr: new TokContext(\"(\", true),\n q_tmpl: new TokContext(\"`\", true, true, function (p) { return p.tryReadTemplateToken(); }),\n f_stat: new TokContext(\"function\", false),\n f_expr: new TokContext(\"function\", true),\n f_expr_gen: new TokContext(\"function\", true, false, null, true),\n f_gen: new TokContext(\"function\", false, false, null, true)\n};\n\nvar pp$6 = Parser.prototype;\n\npp$6.initialContext = function() {\n return [types.b_stat]\n};\n\npp$6.curContext = function() {\n return this.context[this.context.length - 1]\n};\n\npp$6.braceIsBlock = function(prevType) {\n var parent = this.curContext();\n if (parent === types.f_expr || parent === types.f_stat)\n { return true }\n if (prevType === types$1.colon && (parent === types.b_stat || parent === types.b_expr))\n { return !parent.isExpr }\n\n // The check for `tt.name && exprAllowed` detects whether we are\n // after a `yield` or `of` construct. See the `updateContext` for\n // `tt.name`.\n if (prevType === types$1._return || prevType === types$1.name && this.exprAllowed)\n { return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) }\n if (prevType === types$1._else || prevType === types$1.semi || prevType === types$1.eof || prevType === types$1.parenR || prevType === types$1.arrow)\n { return true }\n if (prevType === types$1.braceL)\n { return parent === types.b_stat }\n if (prevType === types$1._var || prevType === types$1._const || prevType === types$1.name)\n { return false }\n return !this.exprAllowed\n};\n\npp$6.inGeneratorContext = function() {\n for (var i = this.context.length - 1; i >= 1; i--) {\n var context = this.context[i];\n if (context.token === \"function\")\n { return context.generator }\n }\n return false\n};\n\npp$6.updateContext = function(prevType) {\n var update, type = this.type;\n if (type.keyword && prevType === types$1.dot)\n { this.exprAllowed = false; }\n else if (update = type.updateContext)\n { update.call(this, prevType); }\n else\n { this.exprAllowed = type.beforeExpr; }\n};\n\n// Used to handle edge cases when token context could not be inferred correctly during tokenization phase\n\npp$6.overrideContext = function(tokenCtx) {\n if (this.curContext() !== tokenCtx) {\n this.context[this.context.length - 1] = tokenCtx;\n }\n};\n\n// Token-specific context update code\n\ntypes$1.parenR.updateContext = types$1.braceR.updateContext = function() {\n if (this.context.length === 1) {\n this.exprAllowed = true;\n return\n }\n var out = this.context.pop();\n if (out === types.b_stat && this.curContext().token === \"function\") {\n out = this.context.pop();\n }\n this.exprAllowed = !out.isExpr;\n};\n\ntypes$1.braceL.updateContext = function(prevType) {\n this.context.push(this.braceIsBlock(prevType) ? types.b_stat : types.b_expr);\n this.exprAllowed = true;\n};\n\ntypes$1.dollarBraceL.updateContext = function() {\n this.context.push(types.b_tmpl);\n this.exprAllowed = true;\n};\n\ntypes$1.parenL.updateContext = function(prevType) {\n var statementParens = prevType === types$1._if || prevType === types$1._for || prevType === types$1._with || prevType === types$1._while;\n this.context.push(statementParens ? types.p_stat : types.p_expr);\n this.exprAllowed = true;\n};\n\ntypes$1.incDec.updateContext = function() {\n // tokExprAllowed stays unchanged\n};\n\ntypes$1._function.updateContext = types$1._class.updateContext = function(prevType) {\n if (prevType.beforeExpr && prevType !== types$1._else &&\n !(prevType === types$1.semi && this.curContext() !== types.p_stat) &&\n !(prevType === types$1._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) &&\n !((prevType === types$1.colon || prevType === types$1.braceL) && this.curContext() === types.b_stat))\n { this.context.push(types.f_expr); }\n else\n { this.context.push(types.f_stat); }\n this.exprAllowed = false;\n};\n\ntypes$1.colon.updateContext = function() {\n if (this.curContext().token === \"function\") { this.context.pop(); }\n this.exprAllowed = true;\n};\n\ntypes$1.backQuote.updateContext = function() {\n if (this.curContext() === types.q_tmpl)\n { this.context.pop(); }\n else\n { this.context.push(types.q_tmpl); }\n this.exprAllowed = false;\n};\n\ntypes$1.star.updateContext = function(prevType) {\n if (prevType === types$1._function) {\n var index = this.context.length - 1;\n if (this.context[index] === types.f_expr)\n { this.context[index] = types.f_expr_gen; }\n else\n { this.context[index] = types.f_gen; }\n }\n this.exprAllowed = true;\n};\n\ntypes$1.name.updateContext = function(prevType) {\n var allowed = false;\n if (this.options.ecmaVersion >= 6 && prevType !== types$1.dot) {\n if (this.value === \"of\" && !this.exprAllowed ||\n this.value === \"yield\" && this.inGeneratorContext())\n { allowed = true; }\n }\n this.exprAllowed = allowed;\n};\n\n// A recursive descent parser operates by defining functions for all\n// syntactic elements, and recursively calling those, each function\n// advancing the input stream and returning an AST node. Precedence\n// of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n// instead of `(!x)[1]` is handled by the fact that the parser\n// function that parses unary prefix operators is called first, and\n// in turn calls the function that parses `[]` subscripts — that\n// way, it'll receive the node for `x[1]` already parsed, and wraps\n// *that* in the unary operator node.\n//\n// Acorn uses an [operator precedence parser][opp] to handle binary\n// operator precedence, because it is much more compact than using\n// the technique outlined above, which uses different, nesting\n// functions to specify precedence, for all of the ten binary\n// precedence levels that JavaScript defines.\n//\n// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\n\n\nvar pp$5 = Parser.prototype;\n\n// Check if property name clashes with already added.\n// Object/class getters and setters are not allowed to clash —\n// either with each other or with an init property — and in\n// strict mode, init properties are also not allowed to be repeated.\n\npp$5.checkPropClash = function(prop, propHash, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 9 && prop.type === \"SpreadElement\")\n { return }\n if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand))\n { return }\n var key = prop.key;\n var name;\n switch (key.type) {\n case \"Identifier\": name = key.name; break\n case \"Literal\": name = String(key.value); break\n default: return\n }\n var kind = prop.kind;\n if (this.options.ecmaVersion >= 6) {\n if (name === \"__proto__\" && kind === \"init\") {\n if (propHash.proto) {\n if (refDestructuringErrors) {\n if (refDestructuringErrors.doubleProto < 0) {\n refDestructuringErrors.doubleProto = key.start;\n }\n } else {\n this.raiseRecoverable(key.start, \"Redefinition of __proto__ property\");\n }\n }\n propHash.proto = true;\n }\n return\n }\n name = \"$\" + name;\n var other = propHash[name];\n if (other) {\n var redefinition;\n if (kind === \"init\") {\n redefinition = this.strict && other.init || other.get || other.set;\n } else {\n redefinition = other.init || other[kind];\n }\n if (redefinition)\n { this.raiseRecoverable(key.start, \"Redefinition of property\"); }\n } else {\n other = propHash[name] = {\n init: false,\n get: false,\n set: false\n };\n }\n other[kind] = true;\n};\n\n// ### Expression parsing\n\n// These nest, from the most general expression type at the top to\n// 'atomic', nondivisible expression types at the bottom. Most of\n// the functions will simply let the function(s) below them parse,\n// and, *if* the syntactic construct they handle is present, wrap\n// the AST node that the inner parser gave them in another node.\n\n// Parse a full expression. The optional arguments are used to\n// forbid the `in` operator (in for loops initalization expressions)\n// and provide reference for storing '=' operator inside shorthand\n// property assignment in contexts where both object expression\n// and object pattern might appear (so it's possible to raise\n// delayed syntax error at correct position).\n\npp$5.parseExpression = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeAssign(forInit, refDestructuringErrors);\n if (this.type === types$1.comma) {\n var node = this.startNodeAt(startPos, startLoc);\n node.expressions = [expr];\n while (this.eat(types$1.comma)) { node.expressions.push(this.parseMaybeAssign(forInit, refDestructuringErrors)); }\n return this.finishNode(node, \"SequenceExpression\")\n }\n return expr\n};\n\n// Parse an assignment expression. This includes applications of\n// operators like `+=`.\n\npp$5.parseMaybeAssign = function(forInit, refDestructuringErrors, afterLeftParse) {\n if (this.isContextual(\"yield\")) {\n if (this.inGenerator) { return this.parseYield(forInit) }\n // The tokenizer will assume an expression is allowed after\n // `yield`, but this isn't that kind of yield\n else { this.exprAllowed = false; }\n }\n\n var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1, oldDoubleProto = -1;\n if (refDestructuringErrors) {\n oldParenAssign = refDestructuringErrors.parenthesizedAssign;\n oldTrailingComma = refDestructuringErrors.trailingComma;\n oldDoubleProto = refDestructuringErrors.doubleProto;\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = -1;\n } else {\n refDestructuringErrors = new DestructuringErrors;\n ownDestructuringErrors = true;\n }\n\n var startPos = this.start, startLoc = this.startLoc;\n if (this.type === types$1.parenL || this.type === types$1.name) {\n this.potentialArrowAt = this.start;\n this.potentialArrowInForAwait = forInit === \"await\";\n }\n var left = this.parseMaybeConditional(forInit, refDestructuringErrors);\n if (afterLeftParse) { left = afterLeftParse.call(this, left, startPos, startLoc); }\n if (this.type.isAssign) {\n var node = this.startNodeAt(startPos, startLoc);\n node.operator = this.value;\n if (this.type === types$1.eq)\n { left = this.toAssignable(left, false, refDestructuringErrors); }\n if (!ownDestructuringErrors) {\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.doubleProto = -1;\n }\n if (refDestructuringErrors.shorthandAssign >= left.start)\n { refDestructuringErrors.shorthandAssign = -1; } // reset because shorthand default was used correctly\n if (this.type === types$1.eq)\n { this.checkLValPattern(left); }\n else\n { this.checkLValSimple(left); }\n node.left = left;\n this.next();\n node.right = this.parseMaybeAssign(forInit);\n if (oldDoubleProto > -1) { refDestructuringErrors.doubleProto = oldDoubleProto; }\n return this.finishNode(node, \"AssignmentExpression\")\n } else {\n if (ownDestructuringErrors) { this.checkExpressionErrors(refDestructuringErrors, true); }\n }\n if (oldParenAssign > -1) { refDestructuringErrors.parenthesizedAssign = oldParenAssign; }\n if (oldTrailingComma > -1) { refDestructuringErrors.trailingComma = oldTrailingComma; }\n return left\n};\n\n// Parse a ternary conditional (`?:`) operator.\n\npp$5.parseMaybeConditional = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprOps(forInit, refDestructuringErrors);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n if (this.eat(types$1.question)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.test = expr;\n node.consequent = this.parseMaybeAssign();\n this.expect(types$1.colon);\n node.alternate = this.parseMaybeAssign(forInit);\n return this.finishNode(node, \"ConditionalExpression\")\n }\n return expr\n};\n\n// Start the precedence parser.\n\npp$5.parseExprOps = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeUnary(refDestructuringErrors, false, false, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n return expr.start === startPos && expr.type === \"ArrowFunctionExpression\" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, forInit)\n};\n\n// Parse binary operators with the operator precedence parsing\n// algorithm. `left` is the left-hand side of the operator.\n// `minPrec` provides context that allows the function to stop and\n// defer further parser to one of its callers when it encounters an\n// operator that has a lower precedence than the set it is parsing.\n\npp$5.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, forInit) {\n var prec = this.type.binop;\n if (prec != null && (!forInit || this.type !== types$1._in)) {\n if (prec > minPrec) {\n var logical = this.type === types$1.logicalOR || this.type === types$1.logicalAND;\n var coalesce = this.type === types$1.coalesce;\n if (coalesce) {\n // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\n // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.\n prec = types$1.logicalAND.binop;\n }\n var op = this.value;\n this.next();\n var startPos = this.start, startLoc = this.startLoc;\n var right = this.parseExprOp(this.parseMaybeUnary(null, false, false, forInit), startPos, startLoc, prec, forInit);\n var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical || coalesce);\n if ((logical && this.type === types$1.coalesce) || (coalesce && (this.type === types$1.logicalOR || this.type === types$1.logicalAND))) {\n this.raiseRecoverable(this.start, \"Logical expressions and coalesce expressions cannot be mixed. Wrap either by parentheses\");\n }\n return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, forInit)\n }\n }\n return left\n};\n\npp$5.buildBinary = function(startPos, startLoc, left, right, op, logical) {\n if (right.type === \"PrivateIdentifier\") { this.raise(right.start, \"Private identifier can only be left side of binary expression\"); }\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.operator = op;\n node.right = right;\n return this.finishNode(node, logical ? \"LogicalExpression\" : \"BinaryExpression\")\n};\n\n// Parse unary operators, both prefix and postfix.\n\npp$5.parseMaybeUnary = function(refDestructuringErrors, sawUnary, incDec, forInit) {\n var startPos = this.start, startLoc = this.startLoc, expr;\n if (this.isContextual(\"await\") && this.canAwait) {\n expr = this.parseAwait(forInit);\n sawUnary = true;\n } else if (this.type.prefix) {\n var node = this.startNode(), update = this.type === types$1.incDec;\n node.operator = this.value;\n node.prefix = true;\n this.next();\n node.argument = this.parseMaybeUnary(null, true, update, forInit);\n this.checkExpressionErrors(refDestructuringErrors, true);\n if (update) { this.checkLValSimple(node.argument); }\n else if (this.strict && node.operator === \"delete\" && isLocalVariableAccess(node.argument))\n { this.raiseRecoverable(node.start, \"Deleting local variable in strict mode\"); }\n else if (node.operator === \"delete\" && isPrivateFieldAccess(node.argument))\n { this.raiseRecoverable(node.start, \"Private fields can not be deleted\"); }\n else { sawUnary = true; }\n expr = this.finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n } else if (!sawUnary && this.type === types$1.privateId) {\n if ((forInit || this.privateNameStack.length === 0) && this.options.checkPrivateFields) { this.unexpected(); }\n expr = this.parsePrivateIdent();\n // only could be private fields in 'in', such as #x in obj\n if (this.type !== types$1._in) { this.unexpected(); }\n } else {\n expr = this.parseExprSubscripts(refDestructuringErrors, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n while (this.type.postfix && !this.canInsertSemicolon()) {\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.operator = this.value;\n node$1.prefix = false;\n node$1.argument = expr;\n this.checkLValSimple(expr);\n this.next();\n expr = this.finishNode(node$1, \"UpdateExpression\");\n }\n }\n\n if (!incDec && this.eat(types$1.starstar)) {\n if (sawUnary)\n { this.unexpected(this.lastTokStart); }\n else\n { return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false, false, forInit), \"**\", false) }\n } else {\n return expr\n }\n};\n\nfunction isLocalVariableAccess(node) {\n return (\n node.type === \"Identifier\" ||\n node.type === \"ParenthesizedExpression\" && isLocalVariableAccess(node.expression)\n )\n}\n\nfunction isPrivateFieldAccess(node) {\n return (\n node.type === \"MemberExpression\" && node.property.type === \"PrivateIdentifier\" ||\n node.type === \"ChainExpression\" && isPrivateFieldAccess(node.expression) ||\n node.type === \"ParenthesizedExpression\" && isPrivateFieldAccess(node.expression)\n )\n}\n\n// Parse call, dot, and `[]`-subscript expressions.\n\npp$5.parseExprSubscripts = function(refDestructuringErrors, forInit) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprAtom(refDestructuringErrors, forInit);\n if (expr.type === \"ArrowFunctionExpression\" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== \")\")\n { return expr }\n var result = this.parseSubscripts(expr, startPos, startLoc, false, forInit);\n if (refDestructuringErrors && result.type === \"MemberExpression\") {\n if (refDestructuringErrors.parenthesizedAssign >= result.start) { refDestructuringErrors.parenthesizedAssign = -1; }\n if (refDestructuringErrors.parenthesizedBind >= result.start) { refDestructuringErrors.parenthesizedBind = -1; }\n if (refDestructuringErrors.trailingComma >= result.start) { refDestructuringErrors.trailingComma = -1; }\n }\n return result\n};\n\npp$5.parseSubscripts = function(base, startPos, startLoc, noCalls, forInit) {\n var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === \"Identifier\" && base.name === \"async\" &&\n this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 &&\n this.potentialArrowAt === base.start;\n var optionalChained = false;\n\n while (true) {\n var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit);\n\n if (element.optional) { optionalChained = true; }\n if (element === base || element.type === \"ArrowFunctionExpression\") {\n if (optionalChained) {\n var chainNode = this.startNodeAt(startPos, startLoc);\n chainNode.expression = element;\n element = this.finishNode(chainNode, \"ChainExpression\");\n }\n return element\n }\n\n base = element;\n }\n};\n\npp$5.shouldParseAsyncArrow = function() {\n return !this.canInsertSemicolon() && this.eat(types$1.arrow)\n};\n\npp$5.parseSubscriptAsyncArrow = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true, forInit)\n};\n\npp$5.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit) {\n var optionalSupported = this.options.ecmaVersion >= 11;\n var optional = optionalSupported && this.eat(types$1.questionDot);\n if (noCalls && optional) { this.raise(this.lastTokStart, \"Optional chaining cannot appear in the callee of new expressions\"); }\n\n var computed = this.eat(types$1.bracketL);\n if (computed || (optional && this.type !== types$1.parenL && this.type !== types$1.backQuote) || this.eat(types$1.dot)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.object = base;\n if (computed) {\n node.property = this.parseExpression();\n this.expect(types$1.bracketR);\n } else if (this.type === types$1.privateId && base.type !== \"Super\") {\n node.property = this.parsePrivateIdent();\n } else {\n node.property = this.parseIdent(this.options.allowReserved !== \"never\");\n }\n node.computed = !!computed;\n if (optionalSupported) {\n node.optional = optional;\n }\n base = this.finishNode(node, \"MemberExpression\");\n } else if (!noCalls && this.eat(types$1.parenL)) {\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n var exprList = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors);\n if (maybeAsyncArrow && !optional && this.shouldParseAsyncArrow()) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n if (this.awaitIdentPos > 0)\n { this.raise(this.awaitIdentPos, \"Cannot use 'await' as identifier inside an async function\"); }\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.parseSubscriptAsyncArrow(startPos, startLoc, exprList, forInit)\n }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos;\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.callee = base;\n node$1.arguments = exprList;\n if (optionalSupported) {\n node$1.optional = optional;\n }\n base = this.finishNode(node$1, \"CallExpression\");\n } else if (this.type === types$1.backQuote) {\n if (optional || optionalChained) {\n this.raise(this.start, \"Optional chaining cannot appear in the tag of tagged template expressions\");\n }\n var node$2 = this.startNodeAt(startPos, startLoc);\n node$2.tag = base;\n node$2.quasi = this.parseTemplate({isTagged: true});\n base = this.finishNode(node$2, \"TaggedTemplateExpression\");\n }\n return base\n};\n\n// Parse an atomic expression — either a single token that is an\n// expression, an expression started by a keyword like `function` or\n// `new`, or an expression wrapped in punctuation like `()`, `[]`,\n// or `{}`.\n\npp$5.parseExprAtom = function(refDestructuringErrors, forInit, forNew) {\n // If a division operator appears in an expression position, the\n // tokenizer got confused, and we force it to read a regexp instead.\n if (this.type === types$1.slash) { this.readRegexp(); }\n\n var node, canBeArrow = this.potentialArrowAt === this.start;\n switch (this.type) {\n case types$1._super:\n if (!this.allowSuper)\n { this.raise(this.start, \"'super' keyword outside a method\"); }\n node = this.startNode();\n this.next();\n if (this.type === types$1.parenL && !this.allowDirectSuper)\n { this.raise(node.start, \"super() call outside constructor of a subclass\"); }\n // The `super` keyword can appear at below:\n // SuperProperty:\n // super [ Expression ]\n // super . IdentifierName\n // SuperCall:\n // super ( Arguments )\n if (this.type !== types$1.dot && this.type !== types$1.bracketL && this.type !== types$1.parenL)\n { this.unexpected(); }\n return this.finishNode(node, \"Super\")\n\n case types$1._this:\n node = this.startNode();\n this.next();\n return this.finishNode(node, \"ThisExpression\")\n\n case types$1.name:\n var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc;\n var id = this.parseIdent(false);\n if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === \"async\" && !this.canInsertSemicolon() && this.eat(types$1._function)) {\n this.overrideContext(types.f_expr);\n return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true, forInit)\n }\n if (canBeArrow && !this.canInsertSemicolon()) {\n if (this.eat(types$1.arrow))\n { return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false, forInit) }\n if (this.options.ecmaVersion >= 8 && id.name === \"async\" && this.type === types$1.name && !containsEsc &&\n (!this.potentialArrowInForAwait || this.value !== \"of\" || this.containsEsc)) {\n id = this.parseIdent(false);\n if (this.canInsertSemicolon() || !this.eat(types$1.arrow))\n { this.unexpected(); }\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true, forInit)\n }\n }\n return id\n\n case types$1.regexp:\n var value = this.value;\n node = this.parseLiteral(value.value);\n node.regex = {pattern: value.pattern, flags: value.flags};\n return node\n\n case types$1.num: case types$1.string:\n return this.parseLiteral(this.value)\n\n case types$1._null: case types$1._true: case types$1._false:\n node = this.startNode();\n node.value = this.type === types$1._null ? null : this.type === types$1._true;\n node.raw = this.type.keyword;\n this.next();\n return this.finishNode(node, \"Literal\")\n\n case types$1.parenL:\n var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow, forInit);\n if (refDestructuringErrors) {\n if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr))\n { refDestructuringErrors.parenthesizedAssign = start; }\n if (refDestructuringErrors.parenthesizedBind < 0)\n { refDestructuringErrors.parenthesizedBind = start; }\n }\n return expr\n\n case types$1.bracketL:\n node = this.startNode();\n this.next();\n node.elements = this.parseExprList(types$1.bracketR, true, true, refDestructuringErrors);\n return this.finishNode(node, \"ArrayExpression\")\n\n case types$1.braceL:\n this.overrideContext(types.b_expr);\n return this.parseObj(false, refDestructuringErrors)\n\n case types$1._function:\n node = this.startNode();\n this.next();\n return this.parseFunction(node, 0)\n\n case types$1._class:\n return this.parseClass(this.startNode(), false)\n\n case types$1._new:\n return this.parseNew()\n\n case types$1.backQuote:\n return this.parseTemplate()\n\n case types$1._import:\n if (this.options.ecmaVersion >= 11) {\n return this.parseExprImport(forNew)\n } else {\n return this.unexpected()\n }\n\n default:\n return this.parseExprAtomDefault()\n }\n};\n\npp$5.parseExprAtomDefault = function() {\n this.unexpected();\n};\n\npp$5.parseExprImport = function(forNew) {\n var node = this.startNode();\n\n // Consume `import` as an identifier for `import.meta`.\n // Because `this.parseIdent(true)` doesn't check escape sequences, it needs the check of `this.containsEsc`.\n if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword import\"); }\n this.next();\n\n if (this.type === types$1.parenL && !forNew) {\n return this.parseDynamicImport(node)\n } else if (this.type === types$1.dot) {\n var meta = this.startNodeAt(node.start, node.loc && node.loc.start);\n meta.name = \"import\";\n node.meta = this.finishNode(meta, \"Identifier\");\n return this.parseImportMeta(node)\n } else {\n this.unexpected();\n }\n};\n\npp$5.parseDynamicImport = function(node) {\n this.next(); // skip `(`\n\n // Parse node.source.\n node.source = this.parseMaybeAssign();\n\n if (this.options.ecmaVersion >= 16) {\n if (!this.eat(types$1.parenR)) {\n this.expect(types$1.comma);\n if (!this.afterTrailingComma(types$1.parenR)) {\n node.options = this.parseMaybeAssign();\n if (!this.eat(types$1.parenR)) {\n this.expect(types$1.comma);\n if (!this.afterTrailingComma(types$1.parenR)) {\n this.unexpected();\n }\n }\n } else {\n node.options = null;\n }\n } else {\n node.options = null;\n }\n } else {\n // Verify ending.\n if (!this.eat(types$1.parenR)) {\n var errorPos = this.start;\n if (this.eat(types$1.comma) && this.eat(types$1.parenR)) {\n this.raiseRecoverable(errorPos, \"Trailing comma is not allowed in import()\");\n } else {\n this.unexpected(errorPos);\n }\n }\n }\n\n return this.finishNode(node, \"ImportExpression\")\n};\n\npp$5.parseImportMeta = function(node) {\n this.next(); // skip `.`\n\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n\n if (node.property.name !== \"meta\")\n { this.raiseRecoverable(node.property.start, \"The only valid meta property for import is 'import.meta'\"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, \"'import.meta' must not contain escaped characters\"); }\n if (this.options.sourceType !== \"module\" && !this.options.allowImportExportEverywhere)\n { this.raiseRecoverable(node.start, \"Cannot use 'import.meta' outside a module\"); }\n\n return this.finishNode(node, \"MetaProperty\")\n};\n\npp$5.parseLiteral = function(value) {\n var node = this.startNode();\n node.value = value;\n node.raw = this.input.slice(this.start, this.end);\n if (node.raw.charCodeAt(node.raw.length - 1) === 110)\n { node.bigint = node.value != null ? node.value.toString() : node.raw.slice(0, -1).replace(/_/g, \"\"); }\n this.next();\n return this.finishNode(node, \"Literal\")\n};\n\npp$5.parseParenExpression = function() {\n this.expect(types$1.parenL);\n var val = this.parseExpression();\n this.expect(types$1.parenR);\n return val\n};\n\npp$5.shouldParseArrow = function(exprList) {\n return !this.canInsertSemicolon()\n};\n\npp$5.parseParenAndDistinguishExpression = function(canBeArrow, forInit) {\n var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8;\n if (this.options.ecmaVersion >= 6) {\n this.next();\n\n var innerStartPos = this.start, innerStartLoc = this.startLoc;\n var exprList = [], first = true, lastIsComma = false;\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart;\n this.yieldPos = 0;\n this.awaitPos = 0;\n // Do not save awaitIdentPos to allow checking awaits nested in parameters\n while (this.type !== types$1.parenR) {\n first ? first = false : this.expect(types$1.comma);\n if (allowTrailingComma && this.afterTrailingComma(types$1.parenR, true)) {\n lastIsComma = true;\n break\n } else if (this.type === types$1.ellipsis) {\n spreadStart = this.start;\n exprList.push(this.parseParenItem(this.parseRestBinding()));\n if (this.type === types$1.comma) {\n this.raiseRecoverable(\n this.start,\n \"Comma is not permitted after the rest element\"\n );\n }\n break\n } else {\n exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem));\n }\n }\n var innerEndPos = this.lastTokEnd, innerEndLoc = this.lastTokEndLoc;\n this.expect(types$1.parenR);\n\n if (canBeArrow && this.shouldParseArrow(exprList) && this.eat(types$1.arrow)) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n return this.parseParenArrowList(startPos, startLoc, exprList, forInit)\n }\n\n if (!exprList.length || lastIsComma) { this.unexpected(this.lastTokStart); }\n if (spreadStart) { this.unexpected(spreadStart); }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n\n if (exprList.length > 1) {\n val = this.startNodeAt(innerStartPos, innerStartLoc);\n val.expressions = exprList;\n this.finishNodeAt(val, \"SequenceExpression\", innerEndPos, innerEndLoc);\n } else {\n val = exprList[0];\n }\n } else {\n val = this.parseParenExpression();\n }\n\n if (this.options.preserveParens) {\n var par = this.startNodeAt(startPos, startLoc);\n par.expression = val;\n return this.finishNode(par, \"ParenthesizedExpression\")\n } else {\n return val\n }\n};\n\npp$5.parseParenItem = function(item) {\n return item\n};\n\npp$5.parseParenArrowList = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, false, forInit)\n};\n\n// New's precedence is slightly tricky. It must allow its argument to\n// be a `[]` or dot subscript expression, but not a call — at least,\n// not without wrapping it in parentheses. Thus, it uses the noCalls\n// argument to parseSubscripts to prevent it from consuming the\n// argument list.\n\nvar empty = [];\n\npp$5.parseNew = function() {\n if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword new\"); }\n var node = this.startNode();\n this.next();\n if (this.options.ecmaVersion >= 6 && this.type === types$1.dot) {\n var meta = this.startNodeAt(node.start, node.loc && node.loc.start);\n meta.name = \"new\";\n node.meta = this.finishNode(meta, \"Identifier\");\n this.next();\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n if (node.property.name !== \"target\")\n { this.raiseRecoverable(node.property.start, \"The only valid meta property for new is 'new.target'\"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, \"'new.target' must not contain escaped characters\"); }\n if (!this.allowNewDotTarget)\n { this.raiseRecoverable(node.start, \"'new.target' can only be used in functions and class static block\"); }\n return this.finishNode(node, \"MetaProperty\")\n }\n var startPos = this.start, startLoc = this.startLoc;\n node.callee = this.parseSubscripts(this.parseExprAtom(null, false, true), startPos, startLoc, true, false);\n if (this.eat(types$1.parenL)) { node.arguments = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false); }\n else { node.arguments = empty; }\n return this.finishNode(node, \"NewExpression\")\n};\n\n// Parse template expression.\n\npp$5.parseTemplateElement = function(ref) {\n var isTagged = ref.isTagged;\n\n var elem = this.startNode();\n if (this.type === types$1.invalidTemplate) {\n if (!isTagged) {\n this.raiseRecoverable(this.start, \"Bad escape sequence in untagged template literal\");\n }\n elem.value = {\n raw: this.value.replace(/\\r\\n?/g, \"\\n\"),\n cooked: null\n };\n } else {\n elem.value = {\n raw: this.input.slice(this.start, this.end).replace(/\\r\\n?/g, \"\\n\"),\n cooked: this.value\n };\n }\n this.next();\n elem.tail = this.type === types$1.backQuote;\n return this.finishNode(elem, \"TemplateElement\")\n};\n\npp$5.parseTemplate = function(ref) {\n if ( ref === void 0 ) ref = {};\n var isTagged = ref.isTagged; if ( isTagged === void 0 ) isTagged = false;\n\n var node = this.startNode();\n this.next();\n node.expressions = [];\n var curElt = this.parseTemplateElement({isTagged: isTagged});\n node.quasis = [curElt];\n while (!curElt.tail) {\n if (this.type === types$1.eof) { this.raise(this.pos, \"Unterminated template literal\"); }\n this.expect(types$1.dollarBraceL);\n node.expressions.push(this.parseExpression());\n this.expect(types$1.braceR);\n node.quasis.push(curElt = this.parseTemplateElement({isTagged: isTagged}));\n }\n this.next();\n return this.finishNode(node, \"TemplateLiteral\")\n};\n\npp$5.isAsyncProp = function(prop) {\n return !prop.computed && prop.key.type === \"Identifier\" && prop.key.name === \"async\" &&\n (this.type === types$1.name || this.type === types$1.num || this.type === types$1.string || this.type === types$1.bracketL || this.type.keyword || (this.options.ecmaVersion >= 9 && this.type === types$1.star)) &&\n !lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n};\n\n// Parse an object literal or binding pattern.\n\npp$5.parseObj = function(isPattern, refDestructuringErrors) {\n var node = this.startNode(), first = true, propHash = {};\n node.properties = [];\n this.next();\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.options.ecmaVersion >= 5 && this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n var prop = this.parseProperty(isPattern, refDestructuringErrors);\n if (!isPattern) { this.checkPropClash(prop, propHash, refDestructuringErrors); }\n node.properties.push(prop);\n }\n return this.finishNode(node, isPattern ? \"ObjectPattern\" : \"ObjectExpression\")\n};\n\npp$5.parseProperty = function(isPattern, refDestructuringErrors) {\n var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc;\n if (this.options.ecmaVersion >= 9 && this.eat(types$1.ellipsis)) {\n if (isPattern) {\n prop.argument = this.parseIdent(false);\n if (this.type === types$1.comma) {\n this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\");\n }\n return this.finishNode(prop, \"RestElement\")\n }\n // Parse argument.\n prop.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n // To disallow trailing comma via `this.toAssignable()`.\n if (this.type === types$1.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) {\n refDestructuringErrors.trailingComma = this.start;\n }\n // Finish\n return this.finishNode(prop, \"SpreadElement\")\n }\n if (this.options.ecmaVersion >= 6) {\n prop.method = false;\n prop.shorthand = false;\n if (isPattern || refDestructuringErrors) {\n startPos = this.start;\n startLoc = this.startLoc;\n }\n if (!isPattern)\n { isGenerator = this.eat(types$1.star); }\n }\n var containsEsc = this.containsEsc;\n this.parsePropertyName(prop);\n if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {\n isAsync = true;\n isGenerator = this.options.ecmaVersion >= 9 && this.eat(types$1.star);\n this.parsePropertyName(prop);\n } else {\n isAsync = false;\n }\n this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc);\n return this.finishNode(prop, \"Property\")\n};\n\npp$5.parseGetterSetter = function(prop) {\n var kind = prop.key.name;\n this.parsePropertyName(prop);\n prop.value = this.parseMethod(false);\n prop.kind = kind;\n var paramCount = prop.kind === \"get\" ? 0 : 1;\n if (prop.value.params.length !== paramCount) {\n var start = prop.value.start;\n if (prop.kind === \"get\")\n { this.raiseRecoverable(start, \"getter should have no params\"); }\n else\n { this.raiseRecoverable(start, \"setter should have exactly one param\"); }\n } else {\n if (prop.kind === \"set\" && prop.value.params[0].type === \"RestElement\")\n { this.raiseRecoverable(prop.value.params[0].start, \"Setter cannot use rest params\"); }\n }\n};\n\npp$5.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {\n if ((isGenerator || isAsync) && this.type === types$1.colon)\n { this.unexpected(); }\n\n if (this.eat(types$1.colon)) {\n prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);\n prop.kind = \"init\";\n } else if (this.options.ecmaVersion >= 6 && this.type === types$1.parenL) {\n if (isPattern) { this.unexpected(); }\n prop.method = true;\n prop.value = this.parseMethod(isGenerator, isAsync);\n prop.kind = \"init\";\n } else if (!isPattern && !containsEsc &&\n this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === \"Identifier\" &&\n (prop.key.name === \"get\" || prop.key.name === \"set\") &&\n (this.type !== types$1.comma && this.type !== types$1.braceR && this.type !== types$1.eq)) {\n if (isGenerator || isAsync) { this.unexpected(); }\n this.parseGetterSetter(prop);\n } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === \"Identifier\") {\n if (isGenerator || isAsync) { this.unexpected(); }\n this.checkUnreserved(prop.key);\n if (prop.key.name === \"await\" && !this.awaitIdentPos)\n { this.awaitIdentPos = startPos; }\n if (isPattern) {\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else if (this.type === types$1.eq && refDestructuringErrors) {\n if (refDestructuringErrors.shorthandAssign < 0)\n { refDestructuringErrors.shorthandAssign = this.start; }\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else {\n prop.value = this.copyNode(prop.key);\n }\n prop.kind = \"init\";\n prop.shorthand = true;\n } else { this.unexpected(); }\n};\n\npp$5.parsePropertyName = function(prop) {\n if (this.options.ecmaVersion >= 6) {\n if (this.eat(types$1.bracketL)) {\n prop.computed = true;\n prop.key = this.parseMaybeAssign();\n this.expect(types$1.bracketR);\n return prop.key\n } else {\n prop.computed = false;\n }\n }\n return prop.key = this.type === types$1.num || this.type === types$1.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== \"never\")\n};\n\n// Initialize empty function node.\n\npp$5.initFunction = function(node) {\n node.id = null;\n if (this.options.ecmaVersion >= 6) { node.generator = node.expression = false; }\n if (this.options.ecmaVersion >= 8) { node.async = false; }\n};\n\n// Parse object or class method.\n\npp$5.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {\n var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.initFunction(node);\n if (this.options.ecmaVersion >= 6)\n { node.generator = isGenerator; }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));\n\n this.expect(types$1.parenL);\n node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n this.parseFunctionBody(node, false, true, false);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"FunctionExpression\")\n};\n\n// Parse arrow function expression with given parameters.\n\npp$5.parseArrowExpression = function(node, params, isAsync, forInit) {\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW);\n this.initFunction(node);\n if (this.options.ecmaVersion >= 8) { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n\n node.params = this.toAssignableList(params, true);\n this.parseFunctionBody(node, true, false, forInit);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"ArrowFunctionExpression\")\n};\n\n// Parse function body and check parameters.\n\npp$5.parseFunctionBody = function(node, isArrowFunction, isMethod, forInit) {\n var isExpression = isArrowFunction && this.type !== types$1.braceL;\n var oldStrict = this.strict, useStrict = false;\n\n if (isExpression) {\n node.body = this.parseMaybeAssign(forInit);\n node.expression = true;\n this.checkParams(node, false);\n } else {\n var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params);\n if (!oldStrict || nonSimple) {\n useStrict = this.strictDirective(this.end);\n // If this is a strict mode function, verify that argument names\n // are not repeated, and it does not try to bind the words `eval`\n // or `arguments`.\n if (useStrict && nonSimple)\n { this.raiseRecoverable(node.start, \"Illegal 'use strict' directive in function with non-simple parameter list\"); }\n }\n // Start a new scope with regard to labels and the `inFunction`\n // flag (restore them to their old value afterwards).\n var oldLabels = this.labels;\n this.labels = [];\n if (useStrict) { this.strict = true; }\n\n // Add the params to varDeclaredNames to ensure that an error is thrown\n // if a let/const declaration in the function clashes with one of the params.\n this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params));\n // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n if (this.strict && node.id) { this.checkLValSimple(node.id, BIND_OUTSIDE); }\n node.body = this.parseBlock(false, undefined, useStrict && !oldStrict);\n node.expression = false;\n this.adaptDirectivePrologue(node.body.body);\n this.labels = oldLabels;\n }\n this.exitScope();\n};\n\npp$5.isSimpleParamList = function(params) {\n for (var i = 0, list = params; i < list.length; i += 1)\n {\n var param = list[i];\n\n if (param.type !== \"Identifier\") { return false\n } }\n return true\n};\n\n// Checks function params for various disallowed patterns such as using \"eval\"\n// or \"arguments\" and duplicate parameters.\n\npp$5.checkParams = function(node, allowDuplicates) {\n var nameHash = Object.create(null);\n for (var i = 0, list = node.params; i < list.length; i += 1)\n {\n var param = list[i];\n\n this.checkLValInnerPattern(param, BIND_VAR, allowDuplicates ? null : nameHash);\n }\n};\n\n// Parses a comma-separated list of expressions, and returns them as\n// an array. `close` is the token type that ends the list, and\n// `allowEmpty` can be turned on to allow subsequent commas with\n// nothing in between them to be parsed as `null` (which is needed\n// for array literals).\n\npp$5.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (!first) {\n this.expect(types$1.comma);\n if (allowTrailingComma && this.afterTrailingComma(close)) { break }\n } else { first = false; }\n\n var elt = (void 0);\n if (allowEmpty && this.type === types$1.comma)\n { elt = null; }\n else if (this.type === types$1.ellipsis) {\n elt = this.parseSpread(refDestructuringErrors);\n if (refDestructuringErrors && this.type === types$1.comma && refDestructuringErrors.trailingComma < 0)\n { refDestructuringErrors.trailingComma = this.start; }\n } else {\n elt = this.parseMaybeAssign(false, refDestructuringErrors);\n }\n elts.push(elt);\n }\n return elts\n};\n\npp$5.checkUnreserved = function(ref) {\n var start = ref.start;\n var end = ref.end;\n var name = ref.name;\n\n if (this.inGenerator && name === \"yield\")\n { this.raiseRecoverable(start, \"Cannot use 'yield' as identifier inside a generator\"); }\n if (this.inAsync && name === \"await\")\n { this.raiseRecoverable(start, \"Cannot use 'await' as identifier inside an async function\"); }\n if (!(this.currentThisScope().flags & SCOPE_VAR) && name === \"arguments\")\n { this.raiseRecoverable(start, \"Cannot use 'arguments' in class field initializer\"); }\n if (this.inClassStaticBlock && (name === \"arguments\" || name === \"await\"))\n { this.raise(start, (\"Cannot use \" + name + \" in class static initialization block\")); }\n if (this.keywords.test(name))\n { this.raise(start, (\"Unexpected keyword '\" + name + \"'\")); }\n if (this.options.ecmaVersion < 6 &&\n this.input.slice(start, end).indexOf(\"\\\\\") !== -1) { return }\n var re = this.strict ? this.reservedWordsStrict : this.reservedWords;\n if (re.test(name)) {\n if (!this.inAsync && name === \"await\")\n { this.raiseRecoverable(start, \"Cannot use keyword 'await' outside an async function\"); }\n this.raiseRecoverable(start, (\"The keyword '\" + name + \"' is reserved\"));\n }\n};\n\n// Parse the next token as an identifier. If `liberal` is true (used\n// when parsing properties), it will also convert keywords into\n// identifiers.\n\npp$5.parseIdent = function(liberal) {\n var node = this.parseIdentNode();\n this.next(!!liberal);\n this.finishNode(node, \"Identifier\");\n if (!liberal) {\n this.checkUnreserved(node);\n if (node.name === \"await\" && !this.awaitIdentPos)\n { this.awaitIdentPos = node.start; }\n }\n return node\n};\n\npp$5.parseIdentNode = function() {\n var node = this.startNode();\n if (this.type === types$1.name) {\n node.name = this.value;\n } else if (this.type.keyword) {\n node.name = this.type.keyword;\n\n // To fix https://github.com/acornjs/acorn/issues/575\n // `class` and `function` keywords push new context into this.context.\n // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.\n // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword\n if ((node.name === \"class\" || node.name === \"function\") &&\n (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) {\n this.context.pop();\n }\n this.type = types$1.name;\n } else {\n this.unexpected();\n }\n return node\n};\n\npp$5.parsePrivateIdent = function() {\n var node = this.startNode();\n if (this.type === types$1.privateId) {\n node.name = this.value;\n } else {\n this.unexpected();\n }\n this.next();\n this.finishNode(node, \"PrivateIdentifier\");\n\n // For validating existence\n if (this.options.checkPrivateFields) {\n if (this.privateNameStack.length === 0) {\n this.raise(node.start, (\"Private field '#\" + (node.name) + \"' must be declared in an enclosing class\"));\n } else {\n this.privateNameStack[this.privateNameStack.length - 1].used.push(node);\n }\n }\n\n return node\n};\n\n// Parses yield expression inside generator.\n\npp$5.parseYield = function(forInit) {\n if (!this.yieldPos) { this.yieldPos = this.start; }\n\n var node = this.startNode();\n this.next();\n if (this.type === types$1.semi || this.canInsertSemicolon() || (this.type !== types$1.star && !this.type.startsExpr)) {\n node.delegate = false;\n node.argument = null;\n } else {\n node.delegate = this.eat(types$1.star);\n node.argument = this.parseMaybeAssign(forInit);\n }\n return this.finishNode(node, \"YieldExpression\")\n};\n\npp$5.parseAwait = function(forInit) {\n if (!this.awaitPos) { this.awaitPos = this.start; }\n\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeUnary(null, true, false, forInit);\n return this.finishNode(node, \"AwaitExpression\")\n};\n\nvar pp$4 = Parser.prototype;\n\n// This function is used to raise exceptions on parse errors. It\n// takes an offset integer (into the current `input`) to indicate\n// the location of the error, attaches the position to the end\n// of the error message, and then raises a `SyntaxError` with that\n// message.\n\npp$4.raise = function(pos, message) {\n var loc = getLineInfo(this.input, pos);\n message += \" (\" + loc.line + \":\" + loc.column + \")\";\n if (this.sourceFile) {\n message += \" in \" + this.sourceFile;\n }\n var err = new SyntaxError(message);\n err.pos = pos; err.loc = loc; err.raisedAt = this.pos;\n throw err\n};\n\npp$4.raiseRecoverable = pp$4.raise;\n\npp$4.curPosition = function() {\n if (this.options.locations) {\n return new Position(this.curLine, this.pos - this.lineStart)\n }\n};\n\nvar pp$3 = Parser.prototype;\n\nvar Scope = function Scope(flags) {\n this.flags = flags;\n // A list of var-declared names in the current lexical scope\n this.var = [];\n // A list of lexically-declared names in the current lexical scope\n this.lexical = [];\n // A list of lexically-declared FunctionDeclaration names in the current lexical scope\n this.functions = [];\n};\n\n// The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.\n\npp$3.enterScope = function(flags) {\n this.scopeStack.push(new Scope(flags));\n};\n\npp$3.exitScope = function() {\n this.scopeStack.pop();\n};\n\n// The spec says:\n// > At the top level of a function, or script, function declarations are\n// > treated like var declarations rather than like lexical declarations.\npp$3.treatFunctionsAsVarInScope = function(scope) {\n return (scope.flags & SCOPE_FUNCTION) || !this.inModule && (scope.flags & SCOPE_TOP)\n};\n\npp$3.declareName = function(name, bindingType, pos) {\n var redeclared = false;\n if (bindingType === BIND_LEXICAL) {\n var scope = this.currentScope();\n redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1;\n scope.lexical.push(name);\n if (this.inModule && (scope.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n } else if (bindingType === BIND_SIMPLE_CATCH) {\n var scope$1 = this.currentScope();\n scope$1.lexical.push(name);\n } else if (bindingType === BIND_FUNCTION) {\n var scope$2 = this.currentScope();\n if (this.treatFunctionsAsVar)\n { redeclared = scope$2.lexical.indexOf(name) > -1; }\n else\n { redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1; }\n scope$2.functions.push(name);\n } else {\n for (var i = this.scopeStack.length - 1; i >= 0; --i) {\n var scope$3 = this.scopeStack[i];\n if (scope$3.lexical.indexOf(name) > -1 && !((scope$3.flags & SCOPE_SIMPLE_CATCH) && scope$3.lexical[0] === name) ||\n !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) {\n redeclared = true;\n break\n }\n scope$3.var.push(name);\n if (this.inModule && (scope$3.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n if (scope$3.flags & SCOPE_VAR) { break }\n }\n }\n if (redeclared) { this.raiseRecoverable(pos, (\"Identifier '\" + name + \"' has already been declared\")); }\n};\n\npp$3.checkLocalExport = function(id) {\n // scope.functions must be empty as Module code is always strict.\n if (this.scopeStack[0].lexical.indexOf(id.name) === -1 &&\n this.scopeStack[0].var.indexOf(id.name) === -1) {\n this.undefinedExports[id.name] = id;\n }\n};\n\npp$3.currentScope = function() {\n return this.scopeStack[this.scopeStack.length - 1]\n};\n\npp$3.currentVarScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & (SCOPE_VAR | SCOPE_CLASS_FIELD_INIT | SCOPE_CLASS_STATIC_BLOCK)) { return scope }\n }\n};\n\n// Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\npp$3.currentThisScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & (SCOPE_VAR | SCOPE_CLASS_FIELD_INIT | SCOPE_CLASS_STATIC_BLOCK) &&\n !(scope.flags & SCOPE_ARROW)) { return scope }\n }\n};\n\nvar Node = function Node(parser, pos, loc) {\n this.type = \"\";\n this.start = pos;\n this.end = 0;\n if (parser.options.locations)\n { this.loc = new SourceLocation(parser, loc); }\n if (parser.options.directSourceFile)\n { this.sourceFile = parser.options.directSourceFile; }\n if (parser.options.ranges)\n { this.range = [pos, 0]; }\n};\n\n// Start an AST node, attaching a start offset.\n\nvar pp$2 = Parser.prototype;\n\npp$2.startNode = function() {\n return new Node(this, this.start, this.startLoc)\n};\n\npp$2.startNodeAt = function(pos, loc) {\n return new Node(this, pos, loc)\n};\n\n// Finish an AST node, adding `type` and `end` properties.\n\nfunction finishNodeAt(node, type, pos, loc) {\n node.type = type;\n node.end = pos;\n if (this.options.locations)\n { node.loc.end = loc; }\n if (this.options.ranges)\n { node.range[1] = pos; }\n return node\n}\n\npp$2.finishNode = function(node, type) {\n return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc)\n};\n\n// Finish node at given position\n\npp$2.finishNodeAt = function(node, type, pos, loc) {\n return finishNodeAt.call(this, node, type, pos, loc)\n};\n\npp$2.copyNode = function(node) {\n var newNode = new Node(this, node.start, this.startLoc);\n for (var prop in node) { newNode[prop] = node[prop]; }\n return newNode\n};\n\n// This file was generated by \"bin/generate-unicode-script-values.js\". Do not modify manually!\nvar scriptValuesAddedInUnicode = \"Berf Beria_Erfe Gara Garay Gukh Gurung_Khema Hrkt Katakana_Or_Hiragana Kawi Kirat_Rai Krai Nag_Mundari Nagm Ol_Onal Onao Sidetic Sidt Sunu Sunuwar Tai_Yo Tayo Todhri Todr Tolong_Siki Tols Tulu_Tigalari Tutg Unknown Zzzz\";\n\n// This file contains Unicode properties extracted from the ECMAScript specification.\n// The lists are extracted like so:\n// $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)\n\n// #table-binary-unicode-properties\nvar ecma9BinaryProperties = \"ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS\";\nvar ecma10BinaryProperties = ecma9BinaryProperties + \" Extended_Pictographic\";\nvar ecma11BinaryProperties = ecma10BinaryProperties;\nvar ecma12BinaryProperties = ecma11BinaryProperties + \" EBase EComp EMod EPres ExtPict\";\nvar ecma13BinaryProperties = ecma12BinaryProperties;\nvar ecma14BinaryProperties = ecma13BinaryProperties;\n\nvar unicodeBinaryProperties = {\n 9: ecma9BinaryProperties,\n 10: ecma10BinaryProperties,\n 11: ecma11BinaryProperties,\n 12: ecma12BinaryProperties,\n 13: ecma13BinaryProperties,\n 14: ecma14BinaryProperties\n};\n\n// #table-binary-unicode-properties-of-strings\nvar ecma14BinaryPropertiesOfStrings = \"Basic_Emoji Emoji_Keycap_Sequence RGI_Emoji_Modifier_Sequence RGI_Emoji_Flag_Sequence RGI_Emoji_Tag_Sequence RGI_Emoji_ZWJ_Sequence RGI_Emoji\";\n\nvar unicodeBinaryPropertiesOfStrings = {\n 9: \"\",\n 10: \"\",\n 11: \"\",\n 12: \"\",\n 13: \"\",\n 14: ecma14BinaryPropertiesOfStrings\n};\n\n// #table-unicode-general-category-values\nvar unicodeGeneralCategoryValues = \"Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu\";\n\n// #table-unicode-script-values\nvar ecma9ScriptValues = \"Adlam Adlm Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb\";\nvar ecma10ScriptValues = ecma9ScriptValues + \" Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd\";\nvar ecma11ScriptValues = ecma10ScriptValues + \" Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho\";\nvar ecma12ScriptValues = ecma11ScriptValues + \" Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi\";\nvar ecma13ScriptValues = ecma12ScriptValues + \" Cypro_Minoan Cpmn Old_Uyghur Ougr Tangsa Tnsa Toto Vithkuqi Vith\";\nvar ecma14ScriptValues = ecma13ScriptValues + \" \" + scriptValuesAddedInUnicode;\n\nvar unicodeScriptValues = {\n 9: ecma9ScriptValues,\n 10: ecma10ScriptValues,\n 11: ecma11ScriptValues,\n 12: ecma12ScriptValues,\n 13: ecma13ScriptValues,\n 14: ecma14ScriptValues\n};\n\nvar data = {};\nfunction buildUnicodeData(ecmaVersion) {\n var d = data[ecmaVersion] = {\n binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion] + \" \" + unicodeGeneralCategoryValues),\n binaryOfStrings: wordsRegexp(unicodeBinaryPropertiesOfStrings[ecmaVersion]),\n nonBinary: {\n General_Category: wordsRegexp(unicodeGeneralCategoryValues),\n Script: wordsRegexp(unicodeScriptValues[ecmaVersion])\n }\n };\n d.nonBinary.Script_Extensions = d.nonBinary.Script;\n\n d.nonBinary.gc = d.nonBinary.General_Category;\n d.nonBinary.sc = d.nonBinary.Script;\n d.nonBinary.scx = d.nonBinary.Script_Extensions;\n}\n\nfor (var i = 0, list = [9, 10, 11, 12, 13, 14]; i < list.length; i += 1) {\n var ecmaVersion = list[i];\n\n buildUnicodeData(ecmaVersion);\n}\n\nvar pp$1 = Parser.prototype;\n\n// Track disjunction structure to determine whether a duplicate\n// capture group name is allowed because it is in a separate branch.\nvar BranchID = function BranchID(parent, base) {\n // Parent disjunction branch\n this.parent = parent;\n // Identifies this set of sibling branches\n this.base = base || this;\n};\n\nBranchID.prototype.separatedFrom = function separatedFrom (alt) {\n // A branch is separate from another branch if they or any of\n // their parents are siblings in a given disjunction\n for (var self = this; self; self = self.parent) {\n for (var other = alt; other; other = other.parent) {\n if (self.base === other.base && self !== other) { return true }\n }\n }\n return false\n};\n\nBranchID.prototype.sibling = function sibling () {\n return new BranchID(this.parent, this.base)\n};\n\nvar RegExpValidationState = function RegExpValidationState(parser) {\n this.parser = parser;\n this.validFlags = \"gim\" + (parser.options.ecmaVersion >= 6 ? \"uy\" : \"\") + (parser.options.ecmaVersion >= 9 ? \"s\" : \"\") + (parser.options.ecmaVersion >= 13 ? \"d\" : \"\") + (parser.options.ecmaVersion >= 15 ? \"v\" : \"\");\n this.unicodeProperties = data[parser.options.ecmaVersion >= 14 ? 14 : parser.options.ecmaVersion];\n this.source = \"\";\n this.flags = \"\";\n this.start = 0;\n this.switchU = false;\n this.switchV = false;\n this.switchN = false;\n this.pos = 0;\n this.lastIntValue = 0;\n this.lastStringValue = \"\";\n this.lastAssertionIsQuantifiable = false;\n this.numCapturingParens = 0;\n this.maxBackReference = 0;\n this.groupNames = Object.create(null);\n this.backReferenceNames = [];\n this.branchID = null;\n};\n\nRegExpValidationState.prototype.reset = function reset (start, pattern, flags) {\n var unicodeSets = flags.indexOf(\"v\") !== -1;\n var unicode = flags.indexOf(\"u\") !== -1;\n this.start = start | 0;\n this.source = pattern + \"\";\n this.flags = flags;\n if (unicodeSets && this.parser.options.ecmaVersion >= 15) {\n this.switchU = true;\n this.switchV = true;\n this.switchN = true;\n } else {\n this.switchU = unicode && this.parser.options.ecmaVersion >= 6;\n this.switchV = false;\n this.switchN = unicode && this.parser.options.ecmaVersion >= 9;\n }\n};\n\nRegExpValidationState.prototype.raise = function raise (message) {\n this.parser.raiseRecoverable(this.start, (\"Invalid regular expression: /\" + (this.source) + \"/: \" + message));\n};\n\n// If u flag is given, this returns the code point at the index (it combines a surrogate pair).\n// Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).\nRegExpValidationState.prototype.at = function at (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return -1\n }\n var c = s.charCodeAt(i);\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {\n return c\n }\n var next = s.charCodeAt(i + 1);\n return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c\n};\n\nRegExpValidationState.prototype.nextIndex = function nextIndex (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return l\n }\n var c = s.charCodeAt(i), next;\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l ||\n (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) {\n return i + 1\n }\n return i + 2\n};\n\nRegExpValidationState.prototype.current = function current (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.pos, forceU)\n};\n\nRegExpValidationState.prototype.lookahead = function lookahead (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.nextIndex(this.pos, forceU), forceU)\n};\n\nRegExpValidationState.prototype.advance = function advance (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n this.pos = this.nextIndex(this.pos, forceU);\n};\n\nRegExpValidationState.prototype.eat = function eat (ch, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n if (this.current(forceU) === ch) {\n this.advance(forceU);\n return true\n }\n return false\n};\n\nRegExpValidationState.prototype.eatChars = function eatChars (chs, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var pos = this.pos;\n for (var i = 0, list = chs; i < list.length; i += 1) {\n var ch = list[i];\n\n var current = this.at(pos, forceU);\n if (current === -1 || current !== ch) {\n return false\n }\n pos = this.nextIndex(pos, forceU);\n }\n this.pos = pos;\n return true\n};\n\n/**\n * Validate the flags part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp$1.validateRegExpFlags = function(state) {\n var validFlags = state.validFlags;\n var flags = state.flags;\n\n var u = false;\n var v = false;\n\n for (var i = 0; i < flags.length; i++) {\n var flag = flags.charAt(i);\n if (validFlags.indexOf(flag) === -1) {\n this.raise(state.start, \"Invalid regular expression flag\");\n }\n if (flags.indexOf(flag, i + 1) > -1) {\n this.raise(state.start, \"Duplicate regular expression flag\");\n }\n if (flag === \"u\") { u = true; }\n if (flag === \"v\") { v = true; }\n }\n if (this.options.ecmaVersion >= 15 && u && v) {\n this.raise(state.start, \"Invalid regular expression flag\");\n }\n};\n\nfunction hasProp(obj) {\n for (var _ in obj) { return true }\n return false\n}\n\n/**\n * Validate the pattern part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp$1.validateRegExpPattern = function(state) {\n this.regexp_pattern(state);\n\n // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of\n // parsing contains a |GroupName|, reparse with the goal symbol\n // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*\n // exception if _P_ did not conform to the grammar, if any elements of _P_\n // were not matched by the parse, or if any Early Error conditions exist.\n if (!state.switchN && this.options.ecmaVersion >= 9 && hasProp(state.groupNames)) {\n state.switchN = true;\n this.regexp_pattern(state);\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\npp$1.regexp_pattern = function(state) {\n state.pos = 0;\n state.lastIntValue = 0;\n state.lastStringValue = \"\";\n state.lastAssertionIsQuantifiable = false;\n state.numCapturingParens = 0;\n state.maxBackReference = 0;\n state.groupNames = Object.create(null);\n state.backReferenceNames.length = 0;\n state.branchID = null;\n\n this.regexp_disjunction(state);\n\n if (state.pos !== state.source.length) {\n // Make the same messages as V8.\n if (state.eat(0x29 /* ) */)) {\n state.raise(\"Unmatched ')'\");\n }\n if (state.eat(0x5D /* ] */) || state.eat(0x7D /* } */)) {\n state.raise(\"Lone quantifier brackets\");\n }\n }\n if (state.maxBackReference > state.numCapturingParens) {\n state.raise(\"Invalid escape\");\n }\n for (var i = 0, list = state.backReferenceNames; i < list.length; i += 1) {\n var name = list[i];\n\n if (!state.groupNames[name]) {\n state.raise(\"Invalid named capture referenced\");\n }\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\npp$1.regexp_disjunction = function(state) {\n var trackDisjunction = this.options.ecmaVersion >= 16;\n if (trackDisjunction) { state.branchID = new BranchID(state.branchID, null); }\n this.regexp_alternative(state);\n while (state.eat(0x7C /* | */)) {\n if (trackDisjunction) { state.branchID = state.branchID.sibling(); }\n this.regexp_alternative(state);\n }\n if (trackDisjunction) { state.branchID = state.branchID.parent; }\n\n // Make the same message as V8.\n if (this.regexp_eatQuantifier(state, true)) {\n state.raise(\"Nothing to repeat\");\n }\n if (state.eat(0x7B /* { */)) {\n state.raise(\"Lone quantifier brackets\");\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\npp$1.regexp_alternative = function(state) {\n while (state.pos < state.source.length && this.regexp_eatTerm(state)) {}\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term\npp$1.regexp_eatTerm = function(state) {\n if (this.regexp_eatAssertion(state)) {\n // Handle `QuantifiableAssertion Quantifier` alternative.\n // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion\n // is a QuantifiableAssertion.\n if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) {\n // Make the same message as V8.\n if (state.switchU) {\n state.raise(\"Invalid quantifier\");\n }\n }\n return true\n }\n\n if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {\n this.regexp_eatQuantifier(state);\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion\npp$1.regexp_eatAssertion = function(state) {\n var start = state.pos;\n state.lastAssertionIsQuantifiable = false;\n\n // ^, $\n if (state.eat(0x5E /* ^ */) || state.eat(0x24 /* $ */)) {\n return true\n }\n\n // \\b \\B\n if (state.eat(0x5C /* \\ */)) {\n if (state.eat(0x42 /* B */) || state.eat(0x62 /* b */)) {\n return true\n }\n state.pos = start;\n }\n\n // Lookahead / Lookbehind\n if (state.eat(0x28 /* ( */) && state.eat(0x3F /* ? */)) {\n var lookbehind = false;\n if (this.options.ecmaVersion >= 9) {\n lookbehind = state.eat(0x3C /* < */);\n }\n if (state.eat(0x3D /* = */) || state.eat(0x21 /* ! */)) {\n this.regexp_disjunction(state);\n if (!state.eat(0x29 /* ) */)) {\n state.raise(\"Unterminated group\");\n }\n state.lastAssertionIsQuantifiable = !lookbehind;\n return true\n }\n }\n\n state.pos = start;\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\npp$1.regexp_eatQuantifier = function(state, noError) {\n if ( noError === void 0 ) noError = false;\n\n if (this.regexp_eatQuantifierPrefix(state, noError)) {\n state.eat(0x3F /* ? */);\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\npp$1.regexp_eatQuantifierPrefix = function(state, noError) {\n return (\n state.eat(0x2A /* * */) ||\n state.eat(0x2B /* + */) ||\n state.eat(0x3F /* ? */) ||\n this.regexp_eatBracedQuantifier(state, noError)\n )\n};\npp$1.regexp_eatBracedQuantifier = function(state, noError) {\n var start = state.pos;\n if (state.eat(0x7B /* { */)) {\n var min = 0, max = -1;\n if (this.regexp_eatDecimalDigits(state)) {\n min = state.lastIntValue;\n if (state.eat(0x2C /* , */) && this.regexp_eatDecimalDigits(state)) {\n max = state.lastIntValue;\n }\n if (state.eat(0x7D /* } */)) {\n // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term\n if (max !== -1 && max < min && !noError) {\n state.raise(\"numbers out of order in {} quantifier\");\n }\n return true\n }\n }\n if (state.switchU && !noError) {\n state.raise(\"Incomplete quantifier\");\n }\n state.pos = start;\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\npp$1.regexp_eatAtom = function(state) {\n return (\n this.regexp_eatPatternCharacters(state) ||\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state)\n )\n};\npp$1.regexp_eatReverseSolidusAtomEscape = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatAtomEscape(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatUncapturingGroup = function(state) {\n var start = state.pos;\n if (state.eat(0x28 /* ( */)) {\n if (state.eat(0x3F /* ? */)) {\n if (this.options.ecmaVersion >= 16) {\n var addModifiers = this.regexp_eatModifiers(state);\n var hasHyphen = state.eat(0x2D /* - */);\n if (addModifiers || hasHyphen) {\n for (var i = 0; i < addModifiers.length; i++) {\n var modifier = addModifiers.charAt(i);\n if (addModifiers.indexOf(modifier, i + 1) > -1) {\n state.raise(\"Duplicate regular expression modifiers\");\n }\n }\n if (hasHyphen) {\n var removeModifiers = this.regexp_eatModifiers(state);\n if (!addModifiers && !removeModifiers && state.current() === 0x3A /* : */) {\n state.raise(\"Invalid regular expression modifiers\");\n }\n for (var i$1 = 0; i$1 < removeModifiers.length; i$1++) {\n var modifier$1 = removeModifiers.charAt(i$1);\n if (\n removeModifiers.indexOf(modifier$1, i$1 + 1) > -1 ||\n addModifiers.indexOf(modifier$1) > -1\n ) {\n state.raise(\"Duplicate regular expression modifiers\");\n }\n }\n }\n }\n }\n if (state.eat(0x3A /* : */)) {\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n return true\n }\n state.raise(\"Unterminated group\");\n }\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatCapturingGroup = function(state) {\n if (state.eat(0x28 /* ( */)) {\n if (this.options.ecmaVersion >= 9) {\n this.regexp_groupSpecifier(state);\n } else if (state.current() === 0x3F /* ? */) {\n state.raise(\"Invalid group\");\n }\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n state.numCapturingParens += 1;\n return true\n }\n state.raise(\"Unterminated group\");\n }\n return false\n};\n// RegularExpressionModifiers ::\n// [empty]\n// RegularExpressionModifiers RegularExpressionModifier\npp$1.regexp_eatModifiers = function(state) {\n var modifiers = \"\";\n var ch = 0;\n while ((ch = state.current()) !== -1 && isRegularExpressionModifier(ch)) {\n modifiers += codePointToString(ch);\n state.advance();\n }\n return modifiers\n};\n// RegularExpressionModifier :: one of\n// `i` `m` `s`\nfunction isRegularExpressionModifier(ch) {\n return ch === 0x69 /* i */ || ch === 0x6d /* m */ || ch === 0x73 /* s */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom\npp$1.regexp_eatExtendedAtom = function(state) {\n return (\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state) ||\n this.regexp_eatInvalidBracedQuantifier(state) ||\n this.regexp_eatExtendedPatternCharacter(state)\n )\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier\npp$1.regexp_eatInvalidBracedQuantifier = function(state) {\n if (this.regexp_eatBracedQuantifier(state, true)) {\n state.raise(\"Nothing to repeat\");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\npp$1.regexp_eatSyntaxCharacter = function(state) {\n var ch = state.current();\n if (isSyntaxCharacter(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n return false\n};\nfunction isSyntaxCharacter(ch) {\n return (\n ch === 0x24 /* $ */ ||\n ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ ||\n ch === 0x2E /* . */ ||\n ch === 0x3F /* ? */ ||\n ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ ||\n ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n// But eat eager.\npp$1.regexp_eatPatternCharacters = function(state) {\n var start = state.pos;\n var ch = 0;\n while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) {\n state.advance();\n }\n return state.pos !== start\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter\npp$1.regexp_eatExtendedPatternCharacter = function(state) {\n var ch = state.current();\n if (\n ch !== -1 &&\n ch !== 0x24 /* $ */ &&\n !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */) &&\n ch !== 0x2E /* . */ &&\n ch !== 0x3F /* ? */ &&\n ch !== 0x5B /* [ */ &&\n ch !== 0x5E /* ^ */ &&\n ch !== 0x7C /* | */\n ) {\n state.advance();\n return true\n }\n return false\n};\n\n// GroupSpecifier ::\n// [empty]\n// `?` GroupName\npp$1.regexp_groupSpecifier = function(state) {\n if (state.eat(0x3F /* ? */)) {\n if (!this.regexp_eatGroupName(state)) { state.raise(\"Invalid group\"); }\n var trackDisjunction = this.options.ecmaVersion >= 16;\n var known = state.groupNames[state.lastStringValue];\n if (known) {\n if (trackDisjunction) {\n for (var i = 0, list = known; i < list.length; i += 1) {\n var altID = list[i];\n\n if (!altID.separatedFrom(state.branchID))\n { state.raise(\"Duplicate capture group name\"); }\n }\n } else {\n state.raise(\"Duplicate capture group name\");\n }\n }\n if (trackDisjunction) {\n (known || (state.groupNames[state.lastStringValue] = [])).push(state.branchID);\n } else {\n state.groupNames[state.lastStringValue] = true;\n }\n }\n};\n\n// GroupName ::\n// `<` RegExpIdentifierName `>`\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp$1.regexp_eatGroupName = function(state) {\n state.lastStringValue = \"\";\n if (state.eat(0x3C /* < */)) {\n if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */)) {\n return true\n }\n state.raise(\"Invalid capture group name\");\n }\n return false\n};\n\n// RegExpIdentifierName ::\n// RegExpIdentifierStart\n// RegExpIdentifierName RegExpIdentifierPart\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp$1.regexp_eatRegExpIdentifierName = function(state) {\n state.lastStringValue = \"\";\n if (this.regexp_eatRegExpIdentifierStart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n while (this.regexp_eatRegExpIdentifierPart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n }\n return true\n }\n return false\n};\n\n// RegExpIdentifierStart ::\n// UnicodeIDStart\n// `$`\n// `_`\n// `\\` RegExpUnicodeEscapeSequence[+U]\npp$1.regexp_eatRegExpIdentifierStart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierStart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n};\nfunction isRegExpIdentifierStart(ch) {\n return isIdentifierStart(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */\n}\n\n// RegExpIdentifierPart ::\n// UnicodeIDContinue\n// `$`\n// `_`\n// `\\` RegExpUnicodeEscapeSequence[+U]\n// <ZWNJ>\n// <ZWJ>\npp$1.regexp_eatRegExpIdentifierPart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierPart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n};\nfunction isRegExpIdentifierPart(ch) {\n return isIdentifierChar(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* <ZWNJ> */ || ch === 0x200D /* <ZWJ> */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape\npp$1.regexp_eatAtomEscape = function(state) {\n if (\n this.regexp_eatBackReference(state) ||\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state) ||\n (state.switchN && this.regexp_eatKGroupName(state))\n ) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n if (state.current() === 0x63 /* c */) {\n state.raise(\"Invalid unicode escape\");\n }\n state.raise(\"Invalid escape\");\n }\n return false\n};\npp$1.regexp_eatBackReference = function(state) {\n var start = state.pos;\n if (this.regexp_eatDecimalEscape(state)) {\n var n = state.lastIntValue;\n if (state.switchU) {\n // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape\n if (n > state.maxBackReference) {\n state.maxBackReference = n;\n }\n return true\n }\n if (n <= state.numCapturingParens) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatKGroupName = function(state) {\n if (state.eat(0x6B /* k */)) {\n if (this.regexp_eatGroupName(state)) {\n state.backReferenceNames.push(state.lastStringValue);\n return true\n }\n state.raise(\"Invalid named reference\");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape\npp$1.regexp_eatCharacterEscape = function(state) {\n return (\n this.regexp_eatControlEscape(state) ||\n this.regexp_eatCControlLetter(state) ||\n this.regexp_eatZero(state) ||\n this.regexp_eatHexEscapeSequence(state) ||\n this.regexp_eatRegExpUnicodeEscapeSequence(state, false) ||\n (!state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state)) ||\n this.regexp_eatIdentityEscape(state)\n )\n};\npp$1.regexp_eatCControlLetter = function(state) {\n var start = state.pos;\n if (state.eat(0x63 /* c */)) {\n if (this.regexp_eatControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatZero = function(state) {\n if (state.current() === 0x30 /* 0 */ && !isDecimalDigit(state.lookahead())) {\n state.lastIntValue = 0;\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\npp$1.regexp_eatControlEscape = function(state) {\n var ch = state.current();\n if (ch === 0x74 /* t */) {\n state.lastIntValue = 0x09; /* \\t */\n state.advance();\n return true\n }\n if (ch === 0x6E /* n */) {\n state.lastIntValue = 0x0A; /* \\n */\n state.advance();\n return true\n }\n if (ch === 0x76 /* v */) {\n state.lastIntValue = 0x0B; /* \\v */\n state.advance();\n return true\n }\n if (ch === 0x66 /* f */) {\n state.lastIntValue = 0x0C; /* \\f */\n state.advance();\n return true\n }\n if (ch === 0x72 /* r */) {\n state.lastIntValue = 0x0D; /* \\r */\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\npp$1.regexp_eatControlLetter = function(state) {\n var ch = state.current();\n if (isControlLetter(ch)) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n};\nfunction isControlLetter(ch) {\n return (\n (ch >= 0x41 /* A */ && ch <= 0x5A /* Z */) ||\n (ch >= 0x61 /* a */ && ch <= 0x7A /* z */)\n )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\npp$1.regexp_eatRegExpUnicodeEscapeSequence = function(state, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var start = state.pos;\n var switchU = forceU || state.switchU;\n\n if (state.eat(0x75 /* u */)) {\n if (this.regexp_eatFixedHexDigits(state, 4)) {\n var lead = state.lastIntValue;\n if (switchU && lead >= 0xD800 && lead <= 0xDBFF) {\n var leadSurrogateEnd = state.pos;\n if (state.eat(0x5C /* \\ */) && state.eat(0x75 /* u */) && this.regexp_eatFixedHexDigits(state, 4)) {\n var trail = state.lastIntValue;\n if (trail >= 0xDC00 && trail <= 0xDFFF) {\n state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n return true\n }\n }\n state.pos = leadSurrogateEnd;\n state.lastIntValue = lead;\n }\n return true\n }\n if (\n switchU &&\n state.eat(0x7B /* { */) &&\n this.regexp_eatHexDigits(state) &&\n state.eat(0x7D /* } */) &&\n isValidUnicode(state.lastIntValue)\n ) {\n return true\n }\n if (switchU) {\n state.raise(\"Invalid unicode escape\");\n }\n state.pos = start;\n }\n\n return false\n};\nfunction isValidUnicode(ch) {\n return ch >= 0 && ch <= 0x10FFFF\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape\npp$1.regexp_eatIdentityEscape = function(state) {\n if (state.switchU) {\n if (this.regexp_eatSyntaxCharacter(state)) {\n return true\n }\n if (state.eat(0x2F /* / */)) {\n state.lastIntValue = 0x2F; /* / */\n return true\n }\n return false\n }\n\n var ch = state.current();\n if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\npp$1.regexp_eatDecimalEscape = function(state) {\n state.lastIntValue = 0;\n var ch = state.current();\n if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */) {\n do {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n } while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */)\n return true\n }\n return false\n};\n\n// Return values used by character set parsing methods, needed to\n// forbid negation of sets that can match strings.\nvar CharSetNone = 0; // Nothing parsed\nvar CharSetOk = 1; // Construct parsed, cannot contain strings\nvar CharSetString = 2; // Construct parsed, can contain strings\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\npp$1.regexp_eatCharacterClassEscape = function(state) {\n var ch = state.current();\n\n if (isCharacterClassEscape(ch)) {\n state.lastIntValue = -1;\n state.advance();\n return CharSetOk\n }\n\n var negate = false;\n if (\n state.switchU &&\n this.options.ecmaVersion >= 9 &&\n ((negate = ch === 0x50 /* P */) || ch === 0x70 /* p */)\n ) {\n state.lastIntValue = -1;\n state.advance();\n var result;\n if (\n state.eat(0x7B /* { */) &&\n (result = this.regexp_eatUnicodePropertyValueExpression(state)) &&\n state.eat(0x7D /* } */)\n ) {\n if (negate && result === CharSetString) { state.raise(\"Invalid property name\"); }\n return result\n }\n state.raise(\"Invalid property name\");\n }\n\n return CharSetNone\n};\n\nfunction isCharacterClassEscape(ch) {\n return (\n ch === 0x64 /* d */ ||\n ch === 0x44 /* D */ ||\n ch === 0x73 /* s */ ||\n ch === 0x53 /* S */ ||\n ch === 0x77 /* w */ ||\n ch === 0x57 /* W */\n )\n}\n\n// UnicodePropertyValueExpression ::\n// UnicodePropertyName `=` UnicodePropertyValue\n// LoneUnicodePropertyNameOrValue\npp$1.regexp_eatUnicodePropertyValueExpression = function(state) {\n var start = state.pos;\n\n // UnicodePropertyName `=` UnicodePropertyValue\n if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */)) {\n var name = state.lastStringValue;\n if (this.regexp_eatUnicodePropertyValue(state)) {\n var value = state.lastStringValue;\n this.regexp_validateUnicodePropertyNameAndValue(state, name, value);\n return CharSetOk\n }\n }\n state.pos = start;\n\n // LoneUnicodePropertyNameOrValue\n if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {\n var nameOrValue = state.lastStringValue;\n return this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue)\n }\n return CharSetNone\n};\n\npp$1.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {\n if (!hasOwn(state.unicodeProperties.nonBinary, name))\n { state.raise(\"Invalid property name\"); }\n if (!state.unicodeProperties.nonBinary[name].test(value))\n { state.raise(\"Invalid property value\"); }\n};\n\npp$1.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {\n if (state.unicodeProperties.binary.test(nameOrValue)) { return CharSetOk }\n if (state.switchV && state.unicodeProperties.binaryOfStrings.test(nameOrValue)) { return CharSetString }\n state.raise(\"Invalid property name\");\n};\n\n// UnicodePropertyName ::\n// UnicodePropertyNameCharacters\npp$1.regexp_eatUnicodePropertyName = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while (isUnicodePropertyNameCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\"\n};\n\nfunction isUnicodePropertyNameCharacter(ch) {\n return isControlLetter(ch) || ch === 0x5F /* _ */\n}\n\n// UnicodePropertyValue ::\n// UnicodePropertyValueCharacters\npp$1.regexp_eatUnicodePropertyValue = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while (isUnicodePropertyValueCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\"\n};\nfunction isUnicodePropertyValueCharacter(ch) {\n return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch)\n}\n\n// LoneUnicodePropertyNameOrValue ::\n// UnicodePropertyValueCharacters\npp$1.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {\n return this.regexp_eatUnicodePropertyValue(state)\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\npp$1.regexp_eatCharacterClass = function(state) {\n if (state.eat(0x5B /* [ */)) {\n var negate = state.eat(0x5E /* ^ */);\n var result = this.regexp_classContents(state);\n if (!state.eat(0x5D /* ] */))\n { state.raise(\"Unterminated character class\"); }\n if (negate && result === CharSetString)\n { state.raise(\"Negated character class may contain strings\"); }\n return true\n }\n return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassContents\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\npp$1.regexp_classContents = function(state) {\n if (state.current() === 0x5D /* ] */) { return CharSetOk }\n if (state.switchV) { return this.regexp_classSetExpression(state) }\n this.regexp_nonEmptyClassRanges(state);\n return CharSetOk\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\npp$1.regexp_nonEmptyClassRanges = function(state) {\n while (this.regexp_eatClassAtom(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */) && this.regexp_eatClassAtom(state)) {\n var right = state.lastIntValue;\n if (state.switchU && (left === -1 || right === -1)) {\n state.raise(\"Invalid character class\");\n }\n if (left !== -1 && right !== -1 && left > right) {\n state.raise(\"Range out of order in character class\");\n }\n }\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\npp$1.regexp_eatClassAtom = function(state) {\n var start = state.pos;\n\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatClassEscape(state)) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n var ch$1 = state.current();\n if (ch$1 === 0x63 /* c */ || isOctalDigit(ch$1)) {\n state.raise(\"Invalid class escape\");\n }\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n\n var ch = state.current();\n if (ch !== 0x5D /* ] */) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape\npp$1.regexp_eatClassEscape = function(state) {\n var start = state.pos;\n\n if (state.eat(0x62 /* b */)) {\n state.lastIntValue = 0x08; /* <BS> */\n return true\n }\n\n if (state.switchU && state.eat(0x2D /* - */)) {\n state.lastIntValue = 0x2D; /* - */\n return true\n }\n\n if (!state.switchU && state.eat(0x63 /* c */)) {\n if (this.regexp_eatClassControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n\n return (\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state)\n )\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetExpression\n// https://tc39.es/ecma262/#prod-ClassUnion\n// https://tc39.es/ecma262/#prod-ClassIntersection\n// https://tc39.es/ecma262/#prod-ClassSubtraction\npp$1.regexp_classSetExpression = function(state) {\n var result = CharSetOk, subResult;\n if (this.regexp_eatClassSetRange(state)) ; else if (subResult = this.regexp_eatClassSetOperand(state)) {\n if (subResult === CharSetString) { result = CharSetString; }\n // https://tc39.es/ecma262/#prod-ClassIntersection\n var start = state.pos;\n while (state.eatChars([0x26, 0x26] /* && */)) {\n if (\n state.current() !== 0x26 /* & */ &&\n (subResult = this.regexp_eatClassSetOperand(state))\n ) {\n if (subResult !== CharSetString) { result = CharSetOk; }\n continue\n }\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) { return result }\n // https://tc39.es/ecma262/#prod-ClassSubtraction\n while (state.eatChars([0x2D, 0x2D] /* -- */)) {\n if (this.regexp_eatClassSetOperand(state)) { continue }\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) { return result }\n } else {\n state.raise(\"Invalid character in character class\");\n }\n // https://tc39.es/ecma262/#prod-ClassUnion\n for (;;) {\n if (this.regexp_eatClassSetRange(state)) { continue }\n subResult = this.regexp_eatClassSetOperand(state);\n if (!subResult) { return result }\n if (subResult === CharSetString) { result = CharSetString; }\n }\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetRange\npp$1.regexp_eatClassSetRange = function(state) {\n var start = state.pos;\n if (this.regexp_eatClassSetCharacter(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */) && this.regexp_eatClassSetCharacter(state)) {\n var right = state.lastIntValue;\n if (left !== -1 && right !== -1 && left > right) {\n state.raise(\"Range out of order in character class\");\n }\n return true\n }\n state.pos = start;\n }\n return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetOperand\npp$1.regexp_eatClassSetOperand = function(state) {\n if (this.regexp_eatClassSetCharacter(state)) { return CharSetOk }\n return this.regexp_eatClassStringDisjunction(state) || this.regexp_eatNestedClass(state)\n};\n\n// https://tc39.es/ecma262/#prod-NestedClass\npp$1.regexp_eatNestedClass = function(state) {\n var start = state.pos;\n if (state.eat(0x5B /* [ */)) {\n var negate = state.eat(0x5E /* ^ */);\n var result = this.regexp_classContents(state);\n if (state.eat(0x5D /* ] */)) {\n if (negate && result === CharSetString) {\n state.raise(\"Negated character class may contain strings\");\n }\n return result\n }\n state.pos = start;\n }\n if (state.eat(0x5C /* \\ */)) {\n var result$1 = this.regexp_eatCharacterClassEscape(state);\n if (result$1) {\n return result$1\n }\n state.pos = start;\n }\n return null\n};\n\n// https://tc39.es/ecma262/#prod-ClassStringDisjunction\npp$1.regexp_eatClassStringDisjunction = function(state) {\n var start = state.pos;\n if (state.eatChars([0x5C, 0x71] /* \\q */)) {\n if (state.eat(0x7B /* { */)) {\n var result = this.regexp_classStringDisjunctionContents(state);\n if (state.eat(0x7D /* } */)) {\n return result\n }\n } else {\n // Make the same message as V8.\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n return null\n};\n\n// https://tc39.es/ecma262/#prod-ClassStringDisjunctionContents\npp$1.regexp_classStringDisjunctionContents = function(state) {\n var result = this.regexp_classString(state);\n while (state.eat(0x7C /* | */)) {\n if (this.regexp_classString(state) === CharSetString) { result = CharSetString; }\n }\n return result\n};\n\n// https://tc39.es/ecma262/#prod-ClassString\n// https://tc39.es/ecma262/#prod-NonEmptyClassString\npp$1.regexp_classString = function(state) {\n var count = 0;\n while (this.regexp_eatClassSetCharacter(state)) { count++; }\n return count === 1 ? CharSetOk : CharSetString\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetCharacter\npp$1.regexp_eatClassSetCharacter = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */)) {\n if (\n this.regexp_eatCharacterEscape(state) ||\n this.regexp_eatClassSetReservedPunctuator(state)\n ) {\n return true\n }\n if (state.eat(0x62 /* b */)) {\n state.lastIntValue = 0x08; /* <BS> */\n return true\n }\n state.pos = start;\n return false\n }\n var ch = state.current();\n if (ch < 0 || ch === state.lookahead() && isClassSetReservedDoublePunctuatorCharacter(ch)) { return false }\n if (isClassSetSyntaxCharacter(ch)) { return false }\n state.advance();\n state.lastIntValue = ch;\n return true\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedDoublePunctuator\nfunction isClassSetReservedDoublePunctuatorCharacter(ch) {\n return (\n ch === 0x21 /* ! */ ||\n ch >= 0x23 /* # */ && ch <= 0x26 /* & */ ||\n ch >= 0x2A /* * */ && ch <= 0x2C /* , */ ||\n ch === 0x2E /* . */ ||\n ch >= 0x3A /* : */ && ch <= 0x40 /* @ */ ||\n ch === 0x5E /* ^ */ ||\n ch === 0x60 /* ` */ ||\n ch === 0x7E /* ~ */\n )\n}\n\n// https://tc39.es/ecma262/#prod-ClassSetSyntaxCharacter\nfunction isClassSetSyntaxCharacter(ch) {\n return (\n ch === 0x28 /* ( */ ||\n ch === 0x29 /* ) */ ||\n ch === 0x2D /* - */ ||\n ch === 0x2F /* / */ ||\n ch >= 0x5B /* [ */ && ch <= 0x5D /* ] */ ||\n ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n )\n}\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\npp$1.regexp_eatClassSetReservedPunctuator = function(state) {\n var ch = state.current();\n if (isClassSetReservedPunctuator(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\nfunction isClassSetReservedPunctuator(ch) {\n return (\n ch === 0x21 /* ! */ ||\n ch === 0x23 /* # */ ||\n ch === 0x25 /* % */ ||\n ch === 0x26 /* & */ ||\n ch === 0x2C /* , */ ||\n ch === 0x2D /* - */ ||\n ch >= 0x3A /* : */ && ch <= 0x3E /* > */ ||\n ch === 0x40 /* @ */ ||\n ch === 0x60 /* ` */ ||\n ch === 0x7E /* ~ */\n )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter\npp$1.regexp_eatClassControlLetter = function(state) {\n var ch = state.current();\n if (isDecimalDigit(ch) || ch === 0x5F /* _ */) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp$1.regexp_eatHexEscapeSequence = function(state) {\n var start = state.pos;\n if (state.eat(0x78 /* x */)) {\n if (this.regexp_eatFixedHexDigits(state, 2)) {\n return true\n }\n if (state.switchU) {\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\npp$1.regexp_eatDecimalDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isDecimalDigit(ch = state.current())) {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n }\n return state.pos !== start\n};\nfunction isDecimalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\npp$1.regexp_eatHexDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isHexDigit(ch = state.current())) {\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return state.pos !== start\n};\nfunction isHexDigit(ch) {\n return (\n (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) ||\n (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) ||\n (ch >= 0x61 /* a */ && ch <= 0x66 /* f */)\n )\n}\nfunction hexToInt(ch) {\n if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) {\n return 10 + (ch - 0x41 /* A */)\n }\n if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) {\n return 10 + (ch - 0x61 /* a */)\n }\n return ch - 0x30 /* 0 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence\n// Allows only 0-377(octal) i.e. 0-255(decimal).\npp$1.regexp_eatLegacyOctalEscapeSequence = function(state) {\n if (this.regexp_eatOctalDigit(state)) {\n var n1 = state.lastIntValue;\n if (this.regexp_eatOctalDigit(state)) {\n var n2 = state.lastIntValue;\n if (n1 <= 3 && this.regexp_eatOctalDigit(state)) {\n state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue;\n } else {\n state.lastIntValue = n1 * 8 + n2;\n }\n } else {\n state.lastIntValue = n1;\n }\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\npp$1.regexp_eatOctalDigit = function(state) {\n var ch = state.current();\n if (isOctalDigit(ch)) {\n state.lastIntValue = ch - 0x30; /* 0 */\n state.advance();\n return true\n }\n state.lastIntValue = 0;\n return false\n};\nfunction isOctalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n// And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp$1.regexp_eatFixedHexDigits = function(state, length) {\n var start = state.pos;\n state.lastIntValue = 0;\n for (var i = 0; i < length; ++i) {\n var ch = state.current();\n if (!isHexDigit(ch)) {\n state.pos = start;\n return false\n }\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return true\n};\n\n// Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\n\nvar Token = function Token(p) {\n this.type = p.type;\n this.value = p.value;\n this.start = p.start;\n this.end = p.end;\n if (p.options.locations)\n { this.loc = new SourceLocation(p, p.startLoc, p.endLoc); }\n if (p.options.ranges)\n { this.range = [p.start, p.end]; }\n};\n\n// ## Tokenizer\n\nvar pp = Parser.prototype;\n\n// Move to the next token\n\npp.next = function(ignoreEscapeSequenceInKeyword) {\n if (!ignoreEscapeSequenceInKeyword && this.type.keyword && this.containsEsc)\n { this.raiseRecoverable(this.start, \"Escape sequence in keyword \" + this.type.keyword); }\n if (this.options.onToken)\n { this.options.onToken(new Token(this)); }\n\n this.lastTokEnd = this.end;\n this.lastTokStart = this.start;\n this.lastTokEndLoc = this.endLoc;\n this.lastTokStartLoc = this.startLoc;\n this.nextToken();\n};\n\npp.getToken = function() {\n this.next();\n return new Token(this)\n};\n\n// If we're in an ES6 environment, make parsers iterable\nif (typeof Symbol !== \"undefined\")\n { pp[Symbol.iterator] = function() {\n var this$1$1 = this;\n\n return {\n next: function () {\n var token = this$1$1.getToken();\n return {\n done: token.type === types$1.eof,\n value: token\n }\n }\n }\n }; }\n\n// Toggle strict mode. Re-reads the next number or string to please\n// pedantic tests (`\"use strict\"; 010;` should fail).\n\n// Read a single token, updating the parser object's token-related\n// properties.\n\npp.nextToken = function() {\n var curContext = this.curContext();\n if (!curContext || !curContext.preserveSpace) { this.skipSpace(); }\n\n this.start = this.pos;\n if (this.options.locations) { this.startLoc = this.curPosition(); }\n if (this.pos >= this.input.length) { return this.finishToken(types$1.eof) }\n\n if (curContext.override) { return curContext.override(this) }\n else { this.readToken(this.fullCharCodeAtPos()); }\n};\n\npp.readToken = function(code) {\n // Identifier or keyword. '\\uXXXX' sequences are allowed in\n // identifiers, so '\\' also dispatches to that.\n if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* '\\' */)\n { return this.readWord() }\n\n return this.getTokenFromCode(code)\n};\n\npp.fullCharCodeAt = function(pos) {\n var code = this.input.charCodeAt(pos);\n if (code <= 0xd7ff || code >= 0xdc00) { return code }\n var next = this.input.charCodeAt(pos + 1);\n return next <= 0xdbff || next >= 0xe000 ? code : (code << 10) + next - 0x35fdc00\n};\n\npp.fullCharCodeAtPos = function() {\n return this.fullCharCodeAt(this.pos)\n};\n\npp.skipBlockComment = function() {\n var startLoc = this.options.onComment && this.curPosition();\n var start = this.pos, end = this.input.indexOf(\"*/\", this.pos += 2);\n if (end === -1) { this.raise(this.pos - 2, \"Unterminated comment\"); }\n this.pos = end + 2;\n if (this.options.locations) {\n for (var nextBreak = (void 0), pos = start; (nextBreak = nextLineBreak(this.input, pos, this.pos)) > -1;) {\n ++this.curLine;\n pos = this.lineStart = nextBreak;\n }\n }\n if (this.options.onComment)\n { this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos,\n startLoc, this.curPosition()); }\n};\n\npp.skipLineComment = function(startSkip) {\n var start = this.pos;\n var startLoc = this.options.onComment && this.curPosition();\n var ch = this.input.charCodeAt(this.pos += startSkip);\n while (this.pos < this.input.length && !isNewLine(ch)) {\n ch = this.input.charCodeAt(++this.pos);\n }\n if (this.options.onComment)\n { this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos,\n startLoc, this.curPosition()); }\n};\n\n// Called at the start of the parse and after every token. Skips\n// whitespace and comments, and.\n\npp.skipSpace = function() {\n loop: while (this.pos < this.input.length) {\n var ch = this.input.charCodeAt(this.pos);\n switch (ch) {\n case 32: case 160: // ' '\n ++this.pos;\n break\n case 13:\n if (this.input.charCodeAt(this.pos + 1) === 10) {\n ++this.pos;\n }\n case 10: case 8232: case 8233:\n ++this.pos;\n if (this.options.locations) {\n ++this.curLine;\n this.lineStart = this.pos;\n }\n break\n case 47: // '/'\n switch (this.input.charCodeAt(this.pos + 1)) {\n case 42: // '*'\n this.skipBlockComment();\n break\n case 47:\n this.skipLineComment(2);\n break\n default:\n break loop\n }\n break\n default:\n if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {\n ++this.pos;\n } else {\n break loop\n }\n }\n }\n};\n\n// Called at the end of every token. Sets `end`, `val`, and\n// maintains `context` and `exprAllowed`, and skips the space after\n// the token, so that the next one's `start` will point at the\n// right position.\n\npp.finishToken = function(type, val) {\n this.end = this.pos;\n if (this.options.locations) { this.endLoc = this.curPosition(); }\n var prevType = this.type;\n this.type = type;\n this.value = val;\n\n this.updateContext(prevType);\n};\n\n// ### Token reading\n\n// This is the function that is called to fetch the next token. It\n// is somewhat obscure, because it works in character codes rather\n// than characters, and because operator parsing has been inlined\n// into it.\n//\n// All in the name of speed.\n//\npp.readToken_dot = function() {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next >= 48 && next <= 57) { return this.readNumber(true) }\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { // 46 = dot '.'\n this.pos += 3;\n return this.finishToken(types$1.ellipsis)\n } else {\n ++this.pos;\n return this.finishToken(types$1.dot)\n }\n};\n\npp.readToken_slash = function() { // '/'\n var next = this.input.charCodeAt(this.pos + 1);\n if (this.exprAllowed) { ++this.pos; return this.readRegexp() }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.slash, 1)\n};\n\npp.readToken_mult_modulo_exp = function(code) { // '%*'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n var tokentype = code === 42 ? types$1.star : types$1.modulo;\n\n // exponentiation operator ** and **=\n if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {\n ++size;\n tokentype = types$1.starstar;\n next = this.input.charCodeAt(this.pos + 2);\n }\n\n if (next === 61) { return this.finishOp(types$1.assign, size + 1) }\n return this.finishOp(tokentype, size)\n};\n\npp.readToken_pipe_amp = function(code) { // '|&'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (this.options.ecmaVersion >= 12) {\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (next2 === 61) { return this.finishOp(types$1.assign, 3) }\n }\n return this.finishOp(code === 124 ? types$1.logicalOR : types$1.logicalAND, 2)\n }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(code === 124 ? types$1.bitwiseOR : types$1.bitwiseAND, 1)\n};\n\npp.readToken_caret = function() { // '^'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.bitwiseXOR, 1)\n};\n\npp.readToken_plus_min = function(code) { // '+-'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 &&\n (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) {\n // A `-->` line comment\n this.skipLineComment(3);\n this.skipSpace();\n return this.nextToken()\n }\n return this.finishOp(types$1.incDec, 2)\n }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.plusMin, 1)\n};\n\npp.readToken_lt_gt = function(code) { // '<>'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n if (next === code) {\n size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;\n if (this.input.charCodeAt(this.pos + size) === 61) { return this.finishOp(types$1.assign, size + 1) }\n return this.finishOp(types$1.bitShift, size)\n }\n if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 &&\n this.input.charCodeAt(this.pos + 3) === 45) {\n // `<!--`, an XML-style comment that should be interpreted as a line comment\n this.skipLineComment(4);\n this.skipSpace();\n return this.nextToken()\n }\n if (next === 61) { size = 2; }\n return this.finishOp(types$1.relational, size)\n};\n\npp.readToken_eq_excl = function(code) { // '=!'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 61) { return this.finishOp(types$1.equality, this.input.charCodeAt(this.pos + 2) === 61 ? 3 : 2) }\n if (code === 61 && next === 62 && this.options.ecmaVersion >= 6) { // '=>'\n this.pos += 2;\n return this.finishToken(types$1.arrow)\n }\n return this.finishOp(code === 61 ? types$1.eq : types$1.prefix, 1)\n};\n\npp.readToken_question = function() { // '?'\n var ecmaVersion = this.options.ecmaVersion;\n if (ecmaVersion >= 11) {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 46) {\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (next2 < 48 || next2 > 57) { return this.finishOp(types$1.questionDot, 2) }\n }\n if (next === 63) {\n if (ecmaVersion >= 12) {\n var next2$1 = this.input.charCodeAt(this.pos + 2);\n if (next2$1 === 61) { return this.finishOp(types$1.assign, 3) }\n }\n return this.finishOp(types$1.coalesce, 2)\n }\n }\n return this.finishOp(types$1.question, 1)\n};\n\npp.readToken_numberSign = function() { // '#'\n var ecmaVersion = this.options.ecmaVersion;\n var code = 35; // '#'\n if (ecmaVersion >= 13) {\n ++this.pos;\n code = this.fullCharCodeAtPos();\n if (isIdentifierStart(code, true) || code === 92 /* '\\' */) {\n return this.finishToken(types$1.privateId, this.readWord1())\n }\n }\n\n this.raise(this.pos, \"Unexpected character '\" + codePointToString(code) + \"'\");\n};\n\npp.getTokenFromCode = function(code) {\n switch (code) {\n // The interpretation of a dot depends on whether it is followed\n // by a digit or another two dots.\n case 46: // '.'\n return this.readToken_dot()\n\n // Punctuation tokens.\n case 40: ++this.pos; return this.finishToken(types$1.parenL)\n case 41: ++this.pos; return this.finishToken(types$1.parenR)\n case 59: ++this.pos; return this.finishToken(types$1.semi)\n case 44: ++this.pos; return this.finishToken(types$1.comma)\n case 91: ++this.pos; return this.finishToken(types$1.bracketL)\n case 93: ++this.pos; return this.finishToken(types$1.bracketR)\n case 123: ++this.pos; return this.finishToken(types$1.braceL)\n case 125: ++this.pos; return this.finishToken(types$1.braceR)\n case 58: ++this.pos; return this.finishToken(types$1.colon)\n\n case 96: // '`'\n if (this.options.ecmaVersion < 6) { break }\n ++this.pos;\n return this.finishToken(types$1.backQuote)\n\n case 48: // '0'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 120 || next === 88) { return this.readRadixNumber(16) } // '0x', '0X' - hex number\n if (this.options.ecmaVersion >= 6) {\n if (next === 111 || next === 79) { return this.readRadixNumber(8) } // '0o', '0O' - octal number\n if (next === 98 || next === 66) { return this.readRadixNumber(2) } // '0b', '0B' - binary number\n }\n\n // Anything else beginning with a digit is an integer, octal\n // number, or float.\n case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: // 1-9\n return this.readNumber(false)\n\n // Quotes produce strings.\n case 34: case 39: // '\"', \"'\"\n return this.readString(code)\n\n // Operators are parsed inline in tiny state machines. '=' (61) is\n // often referred to. `finishOp` simply skips the amount of\n // characters it is given as second argument, and returns a token\n // of the type given by its first argument.\n case 47: // '/'\n return this.readToken_slash()\n\n case 37: case 42: // '%*'\n return this.readToken_mult_modulo_exp(code)\n\n case 124: case 38: // '|&'\n return this.readToken_pipe_amp(code)\n\n case 94: // '^'\n return this.readToken_caret()\n\n case 43: case 45: // '+-'\n return this.readToken_plus_min(code)\n\n case 60: case 62: // '<>'\n return this.readToken_lt_gt(code)\n\n case 61: case 33: // '=!'\n return this.readToken_eq_excl(code)\n\n case 63: // '?'\n return this.readToken_question()\n\n case 126: // '~'\n return this.finishOp(types$1.prefix, 1)\n\n case 35: // '#'\n return this.readToken_numberSign()\n }\n\n this.raise(this.pos, \"Unexpected character '\" + codePointToString(code) + \"'\");\n};\n\npp.finishOp = function(type, size) {\n var str = this.input.slice(this.pos, this.pos + size);\n this.pos += size;\n return this.finishToken(type, str)\n};\n\npp.readRegexp = function() {\n var escaped, inClass, start = this.pos;\n for (;;) {\n if (this.pos >= this.input.length) { this.raise(start, \"Unterminated regular expression\"); }\n var ch = this.input.charAt(this.pos);\n if (lineBreak.test(ch)) { this.raise(start, \"Unterminated regular expression\"); }\n if (!escaped) {\n if (ch === \"[\") { inClass = true; }\n else if (ch === \"]\" && inClass) { inClass = false; }\n else if (ch === \"/\" && !inClass) { break }\n escaped = ch === \"\\\\\";\n } else { escaped = false; }\n ++this.pos;\n }\n var pattern = this.input.slice(start, this.pos);\n ++this.pos;\n var flagsStart = this.pos;\n var flags = this.readWord1();\n if (this.containsEsc) { this.unexpected(flagsStart); }\n\n // Validate pattern\n var state = this.regexpState || (this.regexpState = new RegExpValidationState(this));\n state.reset(start, pattern, flags);\n this.validateRegExpFlags(state);\n this.validateRegExpPattern(state);\n\n // Create Literal#value property value.\n var value = null;\n try {\n value = new RegExp(pattern, flags);\n } catch (e) {\n // ESTree requires null if it failed to instantiate RegExp object.\n // https://github.com/estree/estree/blob/a27003adf4fd7bfad44de9cef372a2eacd527b1c/es5.md#regexpliteral\n }\n\n return this.finishToken(types$1.regexp, {pattern: pattern, flags: flags, value: value})\n};\n\n// Read an integer in the given radix. Return null if zero digits\n// were read, the integer value otherwise. When `len` is given, this\n// will return `null` unless the integer has exactly `len` digits.\n\npp.readInt = function(radix, len, maybeLegacyOctalNumericLiteral) {\n // `len` is used for character escape sequences. In that case, disallow separators.\n var allowSeparators = this.options.ecmaVersion >= 12 && len === undefined;\n\n // `maybeLegacyOctalNumericLiteral` is true if it doesn't have prefix (0x,0o,0b)\n // and isn't fraction part nor exponent part. In that case, if the first digit\n // is zero then disallow separators.\n var isLegacyOctalNumericLiteral = maybeLegacyOctalNumericLiteral && this.input.charCodeAt(this.pos) === 48;\n\n var start = this.pos, total = 0, lastCode = 0;\n for (var i = 0, e = len == null ? Infinity : len; i < e; ++i, ++this.pos) {\n var code = this.input.charCodeAt(this.pos), val = (void 0);\n\n if (allowSeparators && code === 95) {\n if (isLegacyOctalNumericLiteral) { this.raiseRecoverable(this.pos, \"Numeric separator is not allowed in legacy octal numeric literals\"); }\n if (lastCode === 95) { this.raiseRecoverable(this.pos, \"Numeric separator must be exactly one underscore\"); }\n if (i === 0) { this.raiseRecoverable(this.pos, \"Numeric separator is not allowed at the first of digits\"); }\n lastCode = code;\n continue\n }\n\n if (code >= 97) { val = code - 97 + 10; } // a\n else if (code >= 65) { val = code - 65 + 10; } // A\n else if (code >= 48 && code <= 57) { val = code - 48; } // 0-9\n else { val = Infinity; }\n if (val >= radix) { break }\n lastCode = code;\n total = total * radix + val;\n }\n\n if (allowSeparators && lastCode === 95) { this.raiseRecoverable(this.pos - 1, \"Numeric separator is not allowed at the last of digits\"); }\n if (this.pos === start || len != null && this.pos - start !== len) { return null }\n\n return total\n};\n\nfunction stringToNumber(str, isLegacyOctalNumericLiteral) {\n if (isLegacyOctalNumericLiteral) {\n return parseInt(str, 8)\n }\n\n // `parseFloat(value)` stops parsing at the first numeric separator then returns a wrong value.\n return parseFloat(str.replace(/_/g, \"\"))\n}\n\nfunction stringToBigInt(str) {\n if (typeof BigInt !== \"function\") {\n return null\n }\n\n // `BigInt(value)` throws syntax error if the string contains numeric separators.\n return BigInt(str.replace(/_/g, \"\"))\n}\n\npp.readRadixNumber = function(radix) {\n var start = this.pos;\n this.pos += 2; // 0x\n var val = this.readInt(radix);\n if (val == null) { this.raise(this.start + 2, \"Expected number in radix \" + radix); }\n if (this.options.ecmaVersion >= 11 && this.input.charCodeAt(this.pos) === 110) {\n val = stringToBigInt(this.input.slice(start, this.pos));\n ++this.pos;\n } else if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n return this.finishToken(types$1.num, val)\n};\n\n// Read an integer, octal integer, or floating-point number.\n\npp.readNumber = function(startsWithDot) {\n var start = this.pos;\n if (!startsWithDot && this.readInt(10, undefined, true) === null) { this.raise(start, \"Invalid number\"); }\n var octal = this.pos - start >= 2 && this.input.charCodeAt(start) === 48;\n if (octal && this.strict) { this.raise(start, \"Invalid number\"); }\n var next = this.input.charCodeAt(this.pos);\n if (!octal && !startsWithDot && this.options.ecmaVersion >= 11 && next === 110) {\n var val$1 = stringToBigInt(this.input.slice(start, this.pos));\n ++this.pos;\n if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n return this.finishToken(types$1.num, val$1)\n }\n if (octal && /[89]/.test(this.input.slice(start, this.pos))) { octal = false; }\n if (next === 46 && !octal) { // '.'\n ++this.pos;\n this.readInt(10);\n next = this.input.charCodeAt(this.pos);\n }\n if ((next === 69 || next === 101) && !octal) { // 'eE'\n next = this.input.charCodeAt(++this.pos);\n if (next === 43 || next === 45) { ++this.pos; } // '+-'\n if (this.readInt(10) === null) { this.raise(start, \"Invalid number\"); }\n }\n if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n\n var val = stringToNumber(this.input.slice(start, this.pos), octal);\n return this.finishToken(types$1.num, val)\n};\n\n// Read a string value, interpreting backslash-escapes.\n\npp.readCodePoint = function() {\n var ch = this.input.charCodeAt(this.pos), code;\n\n if (ch === 123) { // '{'\n if (this.options.ecmaVersion < 6) { this.unexpected(); }\n var codePos = ++this.pos;\n code = this.readHexChar(this.input.indexOf(\"}\", this.pos) - this.pos);\n ++this.pos;\n if (code > 0x10FFFF) { this.invalidStringToken(codePos, \"Code point out of bounds\"); }\n } else {\n code = this.readHexChar(4);\n }\n return code\n};\n\npp.readString = function(quote) {\n var out = \"\", chunkStart = ++this.pos;\n for (;;) {\n if (this.pos >= this.input.length) { this.raise(this.start, \"Unterminated string constant\"); }\n var ch = this.input.charCodeAt(this.pos);\n if (ch === quote) { break }\n if (ch === 92) { // '\\'\n out += this.input.slice(chunkStart, this.pos);\n out += this.readEscapedChar(false);\n chunkStart = this.pos;\n } else if (ch === 0x2028 || ch === 0x2029) {\n if (this.options.ecmaVersion < 10) { this.raise(this.start, \"Unterminated string constant\"); }\n ++this.pos;\n if (this.options.locations) {\n this.curLine++;\n this.lineStart = this.pos;\n }\n } else {\n if (isNewLine(ch)) { this.raise(this.start, \"Unterminated string constant\"); }\n ++this.pos;\n }\n }\n out += this.input.slice(chunkStart, this.pos++);\n return this.finishToken(types$1.string, out)\n};\n\n// Reads template string tokens.\n\nvar INVALID_TEMPLATE_ESCAPE_ERROR = {};\n\npp.tryReadTemplateToken = function() {\n this.inTemplateElement = true;\n try {\n this.readTmplToken();\n } catch (err) {\n if (err === INVALID_TEMPLATE_ESCAPE_ERROR) {\n this.readInvalidTemplateToken();\n } else {\n throw err\n }\n }\n\n this.inTemplateElement = false;\n};\n\npp.invalidStringToken = function(position, message) {\n if (this.inTemplateElement && this.options.ecmaVersion >= 9) {\n throw INVALID_TEMPLATE_ESCAPE_ERROR\n } else {\n this.raise(position, message);\n }\n};\n\npp.readTmplToken = function() {\n var out = \"\", chunkStart = this.pos;\n for (;;) {\n if (this.pos >= this.input.length) { this.raise(this.start, \"Unterminated template\"); }\n var ch = this.input.charCodeAt(this.pos);\n if (ch === 96 || ch === 36 && this.input.charCodeAt(this.pos + 1) === 123) { // '`', '${'\n if (this.pos === this.start && (this.type === types$1.template || this.type === types$1.invalidTemplate)) {\n if (ch === 36) {\n this.pos += 2;\n return this.finishToken(types$1.dollarBraceL)\n } else {\n ++this.pos;\n return this.finishToken(types$1.backQuote)\n }\n }\n out += this.input.slice(chunkStart, this.pos);\n return this.finishToken(types$1.template, out)\n }\n if (ch === 92) { // '\\'\n out += this.input.slice(chunkStart, this.pos);\n out += this.readEscapedChar(true);\n chunkStart = this.pos;\n } else if (isNewLine(ch)) {\n out += this.input.slice(chunkStart, this.pos);\n ++this.pos;\n switch (ch) {\n case 13:\n if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; }\n case 10:\n out += \"\\n\";\n break\n default:\n out += String.fromCharCode(ch);\n break\n }\n if (this.options.locations) {\n ++this.curLine;\n this.lineStart = this.pos;\n }\n chunkStart = this.pos;\n } else {\n ++this.pos;\n }\n }\n};\n\n// Reads a template token to search for the end, without validating any escape sequences\npp.readInvalidTemplateToken = function() {\n for (; this.pos < this.input.length; this.pos++) {\n switch (this.input[this.pos]) {\n case \"\\\\\":\n ++this.pos;\n break\n\n case \"$\":\n if (this.input[this.pos + 1] !== \"{\") { break }\n // fall through\n case \"`\":\n return this.finishToken(types$1.invalidTemplate, this.input.slice(this.start, this.pos))\n\n case \"\\r\":\n if (this.input[this.pos + 1] === \"\\n\") { ++this.pos; }\n // fall through\n case \"\\n\": case \"\\u2028\": case \"\\u2029\":\n ++this.curLine;\n this.lineStart = this.pos + 1;\n break\n }\n }\n this.raise(this.start, \"Unterminated template\");\n};\n\n// Used to read escaped characters\n\npp.readEscapedChar = function(inTemplate) {\n var ch = this.input.charCodeAt(++this.pos);\n ++this.pos;\n switch (ch) {\n case 110: return \"\\n\" // 'n' -> '\\n'\n case 114: return \"\\r\" // 'r' -> '\\r'\n case 120: return String.fromCharCode(this.readHexChar(2)) // 'x'\n case 117: return codePointToString(this.readCodePoint()) // 'u'\n case 116: return \"\\t\" // 't' -> '\\t'\n case 98: return \"\\b\" // 'b' -> '\\b'\n case 118: return \"\\u000b\" // 'v' -> '\\u000b'\n case 102: return \"\\f\" // 'f' -> '\\f'\n case 13: if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; } // '\\r\\n'\n case 10: // ' \\n'\n if (this.options.locations) { this.lineStart = this.pos; ++this.curLine; }\n return \"\"\n case 56:\n case 57:\n if (this.strict) {\n this.invalidStringToken(\n this.pos - 1,\n \"Invalid escape sequence\"\n );\n }\n if (inTemplate) {\n var codePos = this.pos - 1;\n\n this.invalidStringToken(\n codePos,\n \"Invalid escape sequence in template string\"\n );\n }\n default:\n if (ch >= 48 && ch <= 55) {\n var octalStr = this.input.substr(this.pos - 1, 3).match(/^[0-7]+/)[0];\n var octal = parseInt(octalStr, 8);\n if (octal > 255) {\n octalStr = octalStr.slice(0, -1);\n octal = parseInt(octalStr, 8);\n }\n this.pos += octalStr.length - 1;\n ch = this.input.charCodeAt(this.pos);\n if ((octalStr !== \"0\" || ch === 56 || ch === 57) && (this.strict || inTemplate)) {\n this.invalidStringToken(\n this.pos - 1 - octalStr.length,\n inTemplate\n ? \"Octal literal in template string\"\n : \"Octal literal in strict mode\"\n );\n }\n return String.fromCharCode(octal)\n }\n if (isNewLine(ch)) {\n // Unicode new line characters after \\ get removed from output in both\n // template literals and strings\n if (this.options.locations) { this.lineStart = this.pos; ++this.curLine; }\n return \"\"\n }\n return String.fromCharCode(ch)\n }\n};\n\n// Used to read character escape sequences ('\\x', '\\u', '\\U').\n\npp.readHexChar = function(len) {\n var codePos = this.pos;\n var n = this.readInt(16, len);\n if (n === null) { this.invalidStringToken(codePos, \"Bad character escape sequence\"); }\n return n\n};\n\n// Read an identifier, and return it as a string. Sets `this.containsEsc`\n// to whether the word contained a '\\u' escape.\n//\n// Incrementally adds only escaped chars, adding other chunks as-is\n// as a micro-optimization.\n\npp.readWord1 = function() {\n this.containsEsc = false;\n var word = \"\", first = true, chunkStart = this.pos;\n var astral = this.options.ecmaVersion >= 6;\n while (this.pos < this.input.length) {\n var ch = this.fullCharCodeAtPos();\n if (isIdentifierChar(ch, astral)) {\n this.pos += ch <= 0xffff ? 1 : 2;\n } else if (ch === 92) { // \"\\\"\n this.containsEsc = true;\n word += this.input.slice(chunkStart, this.pos);\n var escStart = this.pos;\n if (this.input.charCodeAt(++this.pos) !== 117) // \"u\"\n { this.invalidStringToken(this.pos, \"Expecting Unicode escape sequence \\\\uXXXX\"); }\n ++this.pos;\n var esc = this.readCodePoint();\n if (!(first ? isIdentifierStart : isIdentifierChar)(esc, astral))\n { this.invalidStringToken(escStart, \"Invalid Unicode escape\"); }\n word += codePointToString(esc);\n chunkStart = this.pos;\n } else {\n break\n }\n first = false;\n }\n return word + this.input.slice(chunkStart, this.pos)\n};\n\n// Read an identifier or keyword token. Will check for reserved\n// words when necessary.\n\npp.readWord = function() {\n var word = this.readWord1();\n var type = types$1.name;\n if (this.keywords.test(word)) {\n type = keywords[word];\n }\n return this.finishToken(type, word)\n};\n\n// Acorn is a tiny, fast JavaScript parser written in JavaScript.\n//\n// Acorn was written by Marijn Haverbeke, Ingvar Stepanyan, and\n// various contributors and released under an MIT license.\n//\n// Git repositories for Acorn are available at\n//\n// http://marijnhaverbeke.nl/git/acorn\n// https://github.com/acornjs/acorn.git\n//\n// Please use the [github bug tracker][ghbt] to report issues.\n//\n// [ghbt]: https://github.com/acornjs/acorn/issues\n\n\nvar version = \"8.16.0\";\n\nParser.acorn = {\n Parser: Parser,\n version: version,\n defaultOptions: defaultOptions,\n Position: Position,\n SourceLocation: SourceLocation,\n getLineInfo: getLineInfo,\n Node: Node,\n TokenType: TokenType,\n tokTypes: types$1,\n keywordTypes: keywords,\n TokContext: TokContext,\n tokContexts: types,\n isIdentifierChar: isIdentifierChar,\n isIdentifierStart: isIdentifierStart,\n Token: Token,\n isNewLine: isNewLine,\n lineBreak: lineBreak,\n lineBreakG: lineBreakG,\n nonASCIIwhitespace: nonASCIIwhitespace\n};\n\n// The main exported interface (under `self.acorn` when in the\n// browser) is a `parse` function that takes a code string and returns\n// an abstract syntax tree as specified by the [ESTree spec][estree].\n//\n// [estree]: https://github.com/estree/estree\n\nfunction parse(input, options) {\n return Parser.parse(input, options)\n}\n\n// This function tries to parse a single expression at a given\n// offset in a string. Useful for parsing mixed-language formats\n// that embed JavaScript expressions.\n\nfunction parseExpressionAt(input, pos, options) {\n return Parser.parseExpressionAt(input, pos, options)\n}\n\n// Acorn is organized as a tokenizer and a recursive-descent parser.\n// The `tokenizer` export provides an interface to the tokenizer.\n\nfunction tokenizer(input, options) {\n return Parser.tokenizer(input, options)\n}\n\nexport { Node, Parser, Position, SourceLocation, TokContext, Token, TokenType, defaultOptions, getLineInfo, isIdentifierChar, isIdentifierStart, isNewLine, keywords as keywordTypes, lineBreak, lineBreakG, nonASCIIwhitespace, parse, parseExpressionAt, types as tokContexts, types$1 as tokTypes, tokenizer, version };\n","module.exports = {\n quot: '\\u0022',\n amp: '&',\n apos: '\\u0027',\n lt: '<',\n gt: '>',\n nbsp: '\\u00A0',\n iexcl: '\\u00A1',\n cent: '\\u00A2',\n pound: '\\u00A3',\n curren: '\\u00A4',\n yen: '\\u00A5',\n brvbar: '\\u00A6',\n sect: '\\u00A7',\n uml: '\\u00A8',\n copy: '\\u00A9',\n ordf: '\\u00AA',\n laquo: '\\u00AB',\n not: '\\u00AC',\n shy: '\\u00AD',\n reg: '\\u00AE',\n macr: '\\u00AF',\n deg: '\\u00B0',\n plusmn: '\\u00B1',\n sup2: '\\u00B2',\n sup3: '\\u00B3',\n acute: '\\u00B4',\n micro: '\\u00B5',\n para: '\\u00B6',\n middot: '\\u00B7',\n cedil: '\\u00B8',\n sup1: '\\u00B9',\n ordm: '\\u00BA',\n raquo: '\\u00BB',\n frac14: '\\u00BC',\n frac12: '\\u00BD',\n frac34: '\\u00BE',\n iquest: '\\u00BF',\n Agrave: '\\u00C0',\n Aacute: '\\u00C1',\n Acirc: '\\u00C2',\n Atilde: '\\u00C3',\n Auml: '\\u00C4',\n Aring: '\\u00C5',\n AElig: '\\u00C6',\n Ccedil: '\\u00C7',\n Egrave: '\\u00C8',\n Eacute: '\\u00C9',\n Ecirc: '\\u00CA',\n Euml: '\\u00CB',\n Igrave: '\\u00CC',\n Iacute: '\\u00CD',\n Icirc: '\\u00CE',\n Iuml: '\\u00CF',\n ETH: '\\u00D0',\n Ntilde: '\\u00D1',\n Ograve: '\\u00D2',\n Oacute: '\\u00D3',\n Ocirc: '\\u00D4',\n Otilde: '\\u00D5',\n Ouml: '\\u00D6',\n times: '\\u00D7',\n Oslash: '\\u00D8',\n Ugrave: '\\u00D9',\n Uacute: '\\u00DA',\n Ucirc: '\\u00DB',\n Uuml: '\\u00DC',\n Yacute: '\\u00DD',\n THORN: '\\u00DE',\n szlig: '\\u00DF',\n agrave: '\\u00E0',\n aacute: '\\u00E1',\n acirc: '\\u00E2',\n atilde: '\\u00E3',\n auml: '\\u00E4',\n aring: '\\u00E5',\n aelig: '\\u00E6',\n ccedil: '\\u00E7',\n egrave: '\\u00E8',\n eacute: '\\u00E9',\n ecirc: '\\u00EA',\n euml: '\\u00EB',\n igrave: '\\u00EC',\n iacute: '\\u00ED',\n icirc: '\\u00EE',\n iuml: '\\u00EF',\n eth: '\\u00F0',\n ntilde: '\\u00F1',\n ograve: '\\u00F2',\n oacute: '\\u00F3',\n ocirc: '\\u00F4',\n otilde: '\\u00F5',\n ouml: '\\u00F6',\n divide: '\\u00F7',\n oslash: '\\u00F8',\n ugrave: '\\u00F9',\n uacute: '\\u00FA',\n ucirc: '\\u00FB',\n uuml: '\\u00FC',\n yacute: '\\u00FD',\n thorn: '\\u00FE',\n yuml: '\\u00FF',\n OElig: '\\u0152',\n oelig: '\\u0153',\n Scaron: '\\u0160',\n scaron: '\\u0161',\n Yuml: '\\u0178',\n fnof: '\\u0192',\n circ: '\\u02C6',\n tilde: '\\u02DC',\n Alpha: '\\u0391',\n Beta: '\\u0392',\n Gamma: '\\u0393',\n Delta: '\\u0394',\n Epsilon: '\\u0395',\n Zeta: '\\u0396',\n Eta: '\\u0397',\n Theta: '\\u0398',\n Iota: '\\u0399',\n Kappa: '\\u039A',\n Lambda: '\\u039B',\n Mu: '\\u039C',\n Nu: '\\u039D',\n Xi: '\\u039E',\n Omicron: '\\u039F',\n Pi: '\\u03A0',\n Rho: '\\u03A1',\n Sigma: '\\u03A3',\n Tau: '\\u03A4',\n Upsilon: '\\u03A5',\n Phi: '\\u03A6',\n Chi: '\\u03A7',\n Psi: '\\u03A8',\n Omega: '\\u03A9',\n alpha: '\\u03B1',\n beta: '\\u03B2',\n gamma: '\\u03B3',\n delta: '\\u03B4',\n epsilon: '\\u03B5',\n zeta: '\\u03B6',\n eta: '\\u03B7',\n theta: '\\u03B8',\n iota: '\\u03B9',\n kappa: '\\u03BA',\n lambda: '\\u03BB',\n mu: '\\u03BC',\n nu: '\\u03BD',\n xi: '\\u03BE',\n omicron: '\\u03BF',\n pi: '\\u03C0',\n rho: '\\u03C1',\n sigmaf: '\\u03C2',\n sigma: '\\u03C3',\n tau: '\\u03C4',\n upsilon: '\\u03C5',\n phi: '\\u03C6',\n chi: '\\u03C7',\n psi: '\\u03C8',\n omega: '\\u03C9',\n thetasym: '\\u03D1',\n upsih: '\\u03D2',\n piv: '\\u03D6',\n ensp: '\\u2002',\n emsp: '\\u2003',\n thinsp: '\\u2009',\n zwnj: '\\u200C',\n zwj: '\\u200D',\n lrm: '\\u200E',\n rlm: '\\u200F',\n ndash: '\\u2013',\n mdash: '\\u2014',\n lsquo: '\\u2018',\n rsquo: '\\u2019',\n sbquo: '\\u201A',\n ldquo: '\\u201C',\n rdquo: '\\u201D',\n bdquo: '\\u201E',\n dagger: '\\u2020',\n Dagger: '\\u2021',\n bull: '\\u2022',\n hellip: '\\u2026',\n permil: '\\u2030',\n prime: '\\u2032',\n Prime: '\\u2033',\n lsaquo: '\\u2039',\n rsaquo: '\\u203A',\n oline: '\\u203E',\n frasl: '\\u2044',\n euro: '\\u20AC',\n image: '\\u2111',\n weierp: '\\u2118',\n real: '\\u211C',\n trade: '\\u2122',\n alefsym: '\\u2135',\n larr: '\\u2190',\n uarr: '\\u2191',\n rarr: '\\u2192',\n darr: '\\u2193',\n harr: '\\u2194',\n crarr: '\\u21B5',\n lArr: '\\u21D0',\n uArr: '\\u21D1',\n rArr: '\\u21D2',\n dArr: '\\u21D3',\n hArr: '\\u21D4',\n forall: '\\u2200',\n part: '\\u2202',\n exist: '\\u2203',\n empty: '\\u2205',\n nabla: '\\u2207',\n isin: '\\u2208',\n notin: '\\u2209',\n ni: '\\u220B',\n prod: '\\u220F',\n sum: '\\u2211',\n minus: '\\u2212',\n lowast: '\\u2217',\n radic: '\\u221A',\n prop: '\\u221D',\n infin: '\\u221E',\n ang: '\\u2220',\n and: '\\u2227',\n or: '\\u2228',\n cap: '\\u2229',\n cup: '\\u222A',\n 'int': '\\u222B',\n there4: '\\u2234',\n sim: '\\u223C',\n cong: '\\u2245',\n asymp: '\\u2248',\n ne: '\\u2260',\n equiv: '\\u2261',\n le: '\\u2264',\n ge: '\\u2265',\n sub: '\\u2282',\n sup: '\\u2283',\n nsub: '\\u2284',\n sube: '\\u2286',\n supe: '\\u2287',\n oplus: '\\u2295',\n otimes: '\\u2297',\n perp: '\\u22A5',\n sdot: '\\u22C5',\n lceil: '\\u2308',\n rceil: '\\u2309',\n lfloor: '\\u230A',\n rfloor: '\\u230B',\n lang: '\\u2329',\n rang: '\\u232A',\n loz: '\\u25CA',\n spades: '\\u2660',\n clubs: '\\u2663',\n hearts: '\\u2665',\n diams: '\\u2666'\n};\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.acorn = {}));\n})(this, (function (exports) { 'use strict';\n\n // This file was generated. Do not modify manually!\n var astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 7, 9, 32, 4, 318, 1, 78, 5, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 68, 8, 2, 0, 3, 0, 2, 3, 2, 4, 2, 0, 15, 1, 83, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 7, 19, 58, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 199, 7, 137, 9, 54, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 55, 9, 266, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 10, 5350, 0, 7, 14, 11465, 27, 2343, 9, 87, 9, 39, 4, 60, 6, 26, 9, 535, 9, 470, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4178, 9, 519, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 245, 1, 2, 9, 233, 0, 3, 0, 8, 1, 6, 0, 475, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];\n\n // This file was generated. Do not modify manually!\n var astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 4, 51, 13, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 7, 25, 39, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 39, 27, 10, 22, 251, 41, 7, 1, 17, 5, 57, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 31, 9, 2, 0, 3, 0, 2, 37, 2, 0, 26, 0, 2, 0, 45, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 200, 32, 32, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 24, 43, 261, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 26, 3994, 6, 582, 6842, 29, 1763, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 433, 44, 212, 63, 33, 24, 3, 24, 45, 74, 6, 0, 67, 12, 65, 1, 2, 0, 15, 4, 10, 7381, 42, 31, 98, 114, 8702, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 229, 29, 3, 0, 208, 30, 2, 2, 2, 1, 2, 6, 3, 4, 10, 1, 225, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4381, 3, 5773, 3, 7472, 16, 621, 2467, 541, 1507, 4938, 6, 8489];\n\n // This file was generated. Do not modify manually!\n var nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0897-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1add\\u1ae0-\\u1aeb\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\u30fb\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\\uff65\";\n\n // This file was generated. Do not modify manually!\n var nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u0870-\\u0887\\u0889-\\u088f\\u08a0-\\u08c9\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c5c\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdc-\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c8a\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7dc\\ua7f1-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab69\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n\n // These are a run-length and offset encoded representation of the\n // >0xffff code points that are a valid part of identifiers. The\n // offset starts at 0x10000, and each pair of numbers represents an\n // offset to the next range, and then a size of the range.\n\n // Reserved word lists for various dialects of the language\n\n var reservedWords = {\n 3: \"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\",\n 5: \"class enum extends super const export import\",\n 6: \"enum\",\n strict: \"implements interface let package private protected public static yield\",\n strictBind: \"eval arguments\"\n };\n\n // And the keywords\n\n var ecma5AndLessKeywords = \"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\";\n\n var keywords$1 = {\n 5: ecma5AndLessKeywords,\n \"5module\": ecma5AndLessKeywords + \" export import\",\n 6: ecma5AndLessKeywords + \" const class extends export import super\"\n };\n\n var keywordRelationalOperator = /^in(stanceof)?$/;\n\n // ## Character categories\n\n var nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\n var nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\n\n // This has a complexity linear to the value of the code. The\n // assumption is that looking up astral identifier characters is\n // rare.\n function isInAstralSet(code, set) {\n var pos = 0x10000;\n for (var i = 0; i < set.length; i += 2) {\n pos += set[i];\n if (pos > code) { return false }\n pos += set[i + 1];\n if (pos >= code) { return true }\n }\n return false\n }\n\n // Test whether a given character code starts an identifier.\n\n function isIdentifierStart(code, astral) {\n if (code < 65) { return code === 36 }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes)\n }\n\n // Test whether a given character is part of an identifier.\n\n function isIdentifierChar(code, astral) {\n if (code < 48) { return code === 36 }\n if (code < 58) { return true }\n if (code < 65) { return false }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes)\n }\n\n // ## Token types\n\n // The assignment of fine-grained, information-carrying type objects\n // allows the tokenizer to store the information it has about a\n // token in a way that is very cheap for the parser to look up.\n\n // All token type variables start with an underscore, to make them\n // easy to recognize.\n\n // The `beforeExpr` property is used to disambiguate between regular\n // expressions and divisions. It is set on all token types that can\n // be followed by an expression (thus, a slash after them would be a\n // regular expression).\n //\n // The `startsExpr` property is used to check if the token ends a\n // `yield` expression. It is set on all token types that either can\n // directly start an expression (like a quotation mark) or can\n // continue an expression (like the body of a string).\n //\n // `isLoop` marks a keyword as starting a loop, which is important\n // to know when parsing a label, in order to allow or disallow\n // continue jumps to that label.\n\n var TokenType = function TokenType(label, conf) {\n if ( conf === void 0 ) conf = {};\n\n this.label = label;\n this.keyword = conf.keyword;\n this.beforeExpr = !!conf.beforeExpr;\n this.startsExpr = !!conf.startsExpr;\n this.isLoop = !!conf.isLoop;\n this.isAssign = !!conf.isAssign;\n this.prefix = !!conf.prefix;\n this.postfix = !!conf.postfix;\n this.binop = conf.binop || null;\n this.updateContext = null;\n };\n\n function binop(name, prec) {\n return new TokenType(name, {beforeExpr: true, binop: prec})\n }\n var beforeExpr = {beforeExpr: true}, startsExpr = {startsExpr: true};\n\n // Map keyword names to token types.\n\n var keywords = {};\n\n // Succinct definitions of keyword token types\n function kw(name, options) {\n if ( options === void 0 ) options = {};\n\n options.keyword = name;\n return keywords[name] = new TokenType(name, options)\n }\n\n var types$1 = {\n num: new TokenType(\"num\", startsExpr),\n regexp: new TokenType(\"regexp\", startsExpr),\n string: new TokenType(\"string\", startsExpr),\n name: new TokenType(\"name\", startsExpr),\n privateId: new TokenType(\"privateId\", startsExpr),\n eof: new TokenType(\"eof\"),\n\n // Punctuation token types.\n bracketL: new TokenType(\"[\", {beforeExpr: true, startsExpr: true}),\n bracketR: new TokenType(\"]\"),\n braceL: new TokenType(\"{\", {beforeExpr: true, startsExpr: true}),\n braceR: new TokenType(\"}\"),\n parenL: new TokenType(\"(\", {beforeExpr: true, startsExpr: true}),\n parenR: new TokenType(\")\"),\n comma: new TokenType(\",\", beforeExpr),\n semi: new TokenType(\";\", beforeExpr),\n colon: new TokenType(\":\", beforeExpr),\n dot: new TokenType(\".\"),\n question: new TokenType(\"?\", beforeExpr),\n questionDot: new TokenType(\"?.\"),\n arrow: new TokenType(\"=>\", beforeExpr),\n template: new TokenType(\"template\"),\n invalidTemplate: new TokenType(\"invalidTemplate\"),\n ellipsis: new TokenType(\"...\", beforeExpr),\n backQuote: new TokenType(\"`\", startsExpr),\n dollarBraceL: new TokenType(\"${\", {beforeExpr: true, startsExpr: true}),\n\n // Operators. These carry several kinds of properties to help the\n // parser use them properly (the presence of these properties is\n // what categorizes them as operators).\n //\n // `binop`, when present, specifies that this operator is a binary\n // operator, and will refer to its precedence.\n //\n // `prefix` and `postfix` mark the operator as a prefix or postfix\n // unary operator.\n //\n // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n // binary operators with a very low precedence, that should result\n // in AssignmentExpression nodes.\n\n eq: new TokenType(\"=\", {beforeExpr: true, isAssign: true}),\n assign: new TokenType(\"_=\", {beforeExpr: true, isAssign: true}),\n incDec: new TokenType(\"++/--\", {prefix: true, postfix: true, startsExpr: true}),\n prefix: new TokenType(\"!/~\", {beforeExpr: true, prefix: true, startsExpr: true}),\n logicalOR: binop(\"||\", 1),\n logicalAND: binop(\"&&\", 2),\n bitwiseOR: binop(\"|\", 3),\n bitwiseXOR: binop(\"^\", 4),\n bitwiseAND: binop(\"&\", 5),\n equality: binop(\"==/!=/===/!==\", 6),\n relational: binop(\"</>/<=/>=\", 7),\n bitShift: binop(\"<</>>/>>>\", 8),\n plusMin: new TokenType(\"+/-\", {beforeExpr: true, binop: 9, prefix: true, startsExpr: true}),\n modulo: binop(\"%\", 10),\n star: binop(\"*\", 10),\n slash: binop(\"/\", 10),\n starstar: new TokenType(\"**\", {beforeExpr: true}),\n coalesce: binop(\"??\", 1),\n\n // Keyword token types.\n _break: kw(\"break\"),\n _case: kw(\"case\", beforeExpr),\n _catch: kw(\"catch\"),\n _continue: kw(\"continue\"),\n _debugger: kw(\"debugger\"),\n _default: kw(\"default\", beforeExpr),\n _do: kw(\"do\", {isLoop: true, beforeExpr: true}),\n _else: kw(\"else\", beforeExpr),\n _finally: kw(\"finally\"),\n _for: kw(\"for\", {isLoop: true}),\n _function: kw(\"function\", startsExpr),\n _if: kw(\"if\"),\n _return: kw(\"return\", beforeExpr),\n _switch: kw(\"switch\"),\n _throw: kw(\"throw\", beforeExpr),\n _try: kw(\"try\"),\n _var: kw(\"var\"),\n _const: kw(\"const\"),\n _while: kw(\"while\", {isLoop: true}),\n _with: kw(\"with\"),\n _new: kw(\"new\", {beforeExpr: true, startsExpr: true}),\n _this: kw(\"this\", startsExpr),\n _super: kw(\"super\", startsExpr),\n _class: kw(\"class\", startsExpr),\n _extends: kw(\"extends\", beforeExpr),\n _export: kw(\"export\"),\n _import: kw(\"import\", startsExpr),\n _null: kw(\"null\", startsExpr),\n _true: kw(\"true\", startsExpr),\n _false: kw(\"false\", startsExpr),\n _in: kw(\"in\", {beforeExpr: true, binop: 7}),\n _instanceof: kw(\"instanceof\", {beforeExpr: true, binop: 7}),\n _typeof: kw(\"typeof\", {beforeExpr: true, prefix: true, startsExpr: true}),\n _void: kw(\"void\", {beforeExpr: true, prefix: true, startsExpr: true}),\n _delete: kw(\"delete\", {beforeExpr: true, prefix: true, startsExpr: true})\n };\n\n // Matches a whole line break (where CRLF is considered a single\n // line break). Used to count lines.\n\n var lineBreak = /\\r\\n?|\\n|\\u2028|\\u2029/;\n var lineBreakG = new RegExp(lineBreak.source, \"g\");\n\n function isNewLine(code) {\n return code === 10 || code === 13 || code === 0x2028 || code === 0x2029\n }\n\n function nextLineBreak(code, from, end) {\n if ( end === void 0 ) end = code.length;\n\n for (var i = from; i < end; i++) {\n var next = code.charCodeAt(i);\n if (isNewLine(next))\n { return i < end - 1 && next === 13 && code.charCodeAt(i + 1) === 10 ? i + 2 : i + 1 }\n }\n return -1\n }\n\n var nonASCIIwhitespace = /[\\u1680\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n\n var skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\n var ref = Object.prototype;\n var hasOwnProperty = ref.hasOwnProperty;\n var toString = ref.toString;\n\n var hasOwn = Object.hasOwn || (function (obj, propName) { return (\n hasOwnProperty.call(obj, propName)\n ); });\n\n var isArray = Array.isArray || (function (obj) { return (\n toString.call(obj) === \"[object Array]\"\n ); });\n\n var regexpCache = Object.create(null);\n\n function wordsRegexp(words) {\n return regexpCache[words] || (regexpCache[words] = new RegExp(\"^(?:\" + words.replace(/ /g, \"|\") + \")$\"))\n }\n\n function codePointToString(code) {\n // UTF-16 Decoding\n if (code <= 0xFFFF) { return String.fromCharCode(code) }\n code -= 0x10000;\n return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00)\n }\n\n var loneSurrogate = /(?:[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/;\n\n // These are used when `options.locations` is on, for the\n // `startLoc` and `endLoc` properties.\n\n var Position = function Position(line, col) {\n this.line = line;\n this.column = col;\n };\n\n Position.prototype.offset = function offset (n) {\n return new Position(this.line, this.column + n)\n };\n\n var SourceLocation = function SourceLocation(p, start, end) {\n this.start = start;\n this.end = end;\n if (p.sourceFile !== null) { this.source = p.sourceFile; }\n };\n\n // The `getLineInfo` function is mostly useful when the\n // `locations` option is off (for performance reasons) and you\n // want to find the line/column position for a given character\n // offset. `input` should be the code string that the offset refers\n // into.\n\n function getLineInfo(input, offset) {\n for (var line = 1, cur = 0;;) {\n var nextBreak = nextLineBreak(input, cur, offset);\n if (nextBreak < 0) { return new Position(line, offset - cur) }\n ++line;\n cur = nextBreak;\n }\n }\n\n // A second argument must be given to configure the parser process.\n // These options are recognized (only `ecmaVersion` is required):\n\n var defaultOptions = {\n // `ecmaVersion` indicates the ECMAScript version to parse. Must be\n // either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10\n // (2019), 11 (2020), 12 (2021), 13 (2022), 14 (2023), or `\"latest\"`\n // (the latest version the library supports). This influences\n // support for strict mode, the set of reserved words, and support\n // for new syntax features.\n ecmaVersion: null,\n // `sourceType` indicates the mode the code should be parsed in.\n // Can be either `\"script\"`, `\"module\"` or `\"commonjs\"`. This influences global\n // strict mode and parsing of `import` and `export` declarations.\n sourceType: \"script\",\n // `onInsertedSemicolon` can be a callback that will be called when\n // a semicolon is automatically inserted. It will be passed the\n // position of the inserted semicolon as an offset, and if\n // `locations` is enabled, it is given the location as a `{line,\n // column}` object as second argument.\n onInsertedSemicolon: null,\n // `onTrailingComma` is similar to `onInsertedSemicolon`, but for\n // trailing commas.\n onTrailingComma: null,\n // By default, reserved words are only enforced if ecmaVersion >= 5.\n // Set `allowReserved` to a boolean value to explicitly turn this on\n // an off. When this option has the value \"never\", reserved words\n // and keywords can also not be used as property names.\n allowReserved: null,\n // When enabled, a return at the top level is not considered an\n // error.\n allowReturnOutsideFunction: false,\n // When enabled, import/export statements are not constrained to\n // appearing at the top of the program, and an import.meta expression\n // in a script isn't considered an error.\n allowImportExportEverywhere: false,\n // By default, await identifiers are allowed to appear at the top-level scope only if ecmaVersion >= 2022.\n // When enabled, await identifiers are allowed to appear at the top-level scope,\n // but they are still not allowed in non-async functions.\n allowAwaitOutsideFunction: null,\n // When enabled, super identifiers are not constrained to\n // appearing in methods and do not raise an error when they appear elsewhere.\n allowSuperOutsideMethod: null,\n // When enabled, hashbang directive in the beginning of file is\n // allowed and treated as a line comment. Enabled by default when\n // `ecmaVersion` >= 2023.\n allowHashBang: false,\n // By default, the parser will verify that private properties are\n // only used in places where they are valid and have been declared.\n // Set this to false to turn such checks off.\n checkPrivateFields: true,\n // When `locations` is on, `loc` properties holding objects with\n // `start` and `end` properties in `{line, column}` form (with\n // line being 1-based and column 0-based) will be attached to the\n // nodes.\n locations: false,\n // A function can be passed as `onToken` option, which will\n // cause Acorn to call that function with object in the same\n // format as tokens returned from `tokenizer().getToken()`. Note\n // that you are not allowed to call the parser from the\n // callback—that will corrupt its internal state.\n onToken: null,\n // A function can be passed as `onComment` option, which will\n // cause Acorn to call that function with `(block, text, start,\n // end)` parameters whenever a comment is skipped. `block` is a\n // boolean indicating whether this is a block (`/* */`) comment,\n // `text` is the content of the comment, and `start` and `end` are\n // character offsets that denote the start and end of the comment.\n // When the `locations` option is on, two more parameters are\n // passed, the full `{line, column}` locations of the start and\n // end of the comments. Note that you are not allowed to call the\n // parser from the callback—that will corrupt its internal state.\n // When this option has an array as value, objects representing the\n // comments are pushed to it.\n onComment: null,\n // Nodes have their start and end characters offsets recorded in\n // `start` and `end` properties (directly on the node, rather than\n // the `loc` object, which holds line/column data. To also add a\n // [semi-standardized][range] `range` property holding a `[start,\n // end]` array with the same numbers, set the `ranges` option to\n // `true`.\n //\n // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n ranges: false,\n // It is possible to parse multiple files into a single AST by\n // passing the tree produced by parsing the first file as\n // `program` option in subsequent parses. This will add the\n // toplevel forms of the parsed file to the `Program` (top) node\n // of an existing parse tree.\n program: null,\n // When `locations` is on, you can pass this to record the source\n // file in every node's `loc` object.\n sourceFile: null,\n // This value, if given, is stored in every node, whether\n // `locations` is on or off.\n directSourceFile: null,\n // When enabled, parenthesized expressions are represented by\n // (non-standard) ParenthesizedExpression nodes\n preserveParens: false\n };\n\n // Interpret and default an options object\n\n var warnedAboutEcmaVersion = false;\n\n function getOptions(opts) {\n var options = {};\n\n for (var opt in defaultOptions)\n { options[opt] = opts && hasOwn(opts, opt) ? opts[opt] : defaultOptions[opt]; }\n\n if (options.ecmaVersion === \"latest\") {\n options.ecmaVersion = 1e8;\n } else if (options.ecmaVersion == null) {\n if (!warnedAboutEcmaVersion && typeof console === \"object\" && console.warn) {\n warnedAboutEcmaVersion = true;\n console.warn(\"Since Acorn 8.0.0, options.ecmaVersion is required.\\nDefaulting to 2020, but this will stop working in the future.\");\n }\n options.ecmaVersion = 11;\n } else if (options.ecmaVersion >= 2015) {\n options.ecmaVersion -= 2009;\n }\n\n if (options.allowReserved == null)\n { options.allowReserved = options.ecmaVersion < 5; }\n\n if (!opts || opts.allowHashBang == null)\n { options.allowHashBang = options.ecmaVersion >= 14; }\n\n if (isArray(options.onToken)) {\n var tokens = options.onToken;\n options.onToken = function (token) { return tokens.push(token); };\n }\n if (isArray(options.onComment))\n { options.onComment = pushComment(options, options.onComment); }\n\n if (options.sourceType === \"commonjs\" && options.allowAwaitOutsideFunction)\n { throw new Error(\"Cannot use allowAwaitOutsideFunction with sourceType: commonjs\") }\n\n return options\n }\n\n function pushComment(options, array) {\n return function(block, text, start, end, startLoc, endLoc) {\n var comment = {\n type: block ? \"Block\" : \"Line\",\n value: text,\n start: start,\n end: end\n };\n if (options.locations)\n { comment.loc = new SourceLocation(this, startLoc, endLoc); }\n if (options.ranges)\n { comment.range = [start, end]; }\n array.push(comment);\n }\n }\n\n // Each scope gets a bitset that may contain these flags\n var\n SCOPE_TOP = 1,\n SCOPE_FUNCTION = 2,\n SCOPE_ASYNC = 4,\n SCOPE_GENERATOR = 8,\n SCOPE_ARROW = 16,\n SCOPE_SIMPLE_CATCH = 32,\n SCOPE_SUPER = 64,\n SCOPE_DIRECT_SUPER = 128,\n SCOPE_CLASS_STATIC_BLOCK = 256,\n SCOPE_CLASS_FIELD_INIT = 512,\n SCOPE_SWITCH = 1024,\n SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK;\n\n function functionFlags(async, generator) {\n return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0)\n }\n\n // Used in checkLVal* and declareName to determine the type of a binding\n var\n BIND_NONE = 0, // Not a binding\n BIND_VAR = 1, // Var-style binding\n BIND_LEXICAL = 2, // Let- or const-style binding\n BIND_FUNCTION = 3, // Function declaration\n BIND_SIMPLE_CATCH = 4, // Simple (identifier pattern) catch binding\n BIND_OUTSIDE = 5; // Special case for function names as bound inside the function\n\n var Parser = function Parser(options, input, startPos) {\n this.options = options = getOptions(options);\n this.sourceFile = options.sourceFile;\n this.keywords = wordsRegexp(keywords$1[options.ecmaVersion >= 6 ? 6 : options.sourceType === \"module\" ? \"5module\" : 5]);\n var reserved = \"\";\n if (options.allowReserved !== true) {\n reserved = reservedWords[options.ecmaVersion >= 6 ? 6 : options.ecmaVersion === 5 ? 5 : 3];\n if (options.sourceType === \"module\") { reserved += \" await\"; }\n }\n this.reservedWords = wordsRegexp(reserved);\n var reservedStrict = (reserved ? reserved + \" \" : \"\") + reservedWords.strict;\n this.reservedWordsStrict = wordsRegexp(reservedStrict);\n this.reservedWordsStrictBind = wordsRegexp(reservedStrict + \" \" + reservedWords.strictBind);\n this.input = String(input);\n\n // Used to signal to callers of `readWord1` whether the word\n // contained any escape sequences. This is needed because words with\n // escape sequences must not be interpreted as keywords.\n this.containsEsc = false;\n\n // Set up token state\n\n // The current position of the tokenizer in the input.\n if (startPos) {\n this.pos = startPos;\n this.lineStart = this.input.lastIndexOf(\"\\n\", startPos - 1) + 1;\n this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length;\n } else {\n this.pos = this.lineStart = 0;\n this.curLine = 1;\n }\n\n // Properties of the current token:\n // Its type\n this.type = types$1.eof;\n // For tokens that include more information than their type, the value\n this.value = null;\n // Its start and end offset\n this.start = this.end = this.pos;\n // And, if locations are used, the {line, column} object\n // corresponding to those offsets\n this.startLoc = this.endLoc = this.curPosition();\n\n // Position information for the previous token\n this.lastTokEndLoc = this.lastTokStartLoc = null;\n this.lastTokStart = this.lastTokEnd = this.pos;\n\n // The context stack is used to superficially track syntactic\n // context to predict whether a regular expression is allowed in a\n // given position.\n this.context = this.initialContext();\n this.exprAllowed = true;\n\n // Figure out if it's a module code.\n this.inModule = options.sourceType === \"module\";\n this.strict = this.inModule || this.strictDirective(this.pos);\n\n // Used to signify the start of a potential arrow function\n this.potentialArrowAt = -1;\n this.potentialArrowInForAwait = false;\n\n // Positions to delayed-check that yield/await does not exist in default parameters.\n this.yieldPos = this.awaitPos = this.awaitIdentPos = 0;\n // Labels in scope.\n this.labels = [];\n // Thus-far undefined exports.\n this.undefinedExports = Object.create(null);\n\n // If enabled, skip leading hashbang line.\n if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === \"#!\")\n { this.skipLineComment(2); }\n\n // Scope tracking for duplicate variable names (see scope.js)\n this.scopeStack = [];\n this.enterScope(\n this.options.sourceType === \"commonjs\"\n // In commonjs, the top-level scope behaves like a function scope\n ? SCOPE_FUNCTION\n : SCOPE_TOP\n );\n\n // For RegExp validation\n this.regexpState = null;\n\n // The stack of private names.\n // Each element has two properties: 'declared' and 'used'.\n // When it exited from the outermost class definition, all used private names must be declared.\n this.privateNameStack = [];\n };\n\n 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 } };\n\n Parser.prototype.parse = function parse () {\n var node = this.options.program || this.startNode();\n this.nextToken();\n return this.parseTopLevel(node)\n };\n\n prototypeAccessors.inFunction.get = function () { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 };\n\n prototypeAccessors.inGenerator.get = function () { return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 };\n\n prototypeAccessors.inAsync.get = function () { return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 };\n\n prototypeAccessors.canAwait.get = function () {\n for (var i = this.scopeStack.length - 1; i >= 0; i--) {\n var ref = this.scopeStack[i];\n var flags = ref.flags;\n if (flags & (SCOPE_CLASS_STATIC_BLOCK | SCOPE_CLASS_FIELD_INIT)) { return false }\n if (flags & SCOPE_FUNCTION) { return (flags & SCOPE_ASYNC) > 0 }\n }\n return (this.inModule && this.options.ecmaVersion >= 13) || this.options.allowAwaitOutsideFunction\n };\n\n prototypeAccessors.allowReturn.get = function () {\n if (this.inFunction) { return true }\n if (this.options.allowReturnOutsideFunction && this.currentVarScope().flags & SCOPE_TOP) { return true }\n return false\n };\n\n prototypeAccessors.allowSuper.get = function () {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n return (flags & SCOPE_SUPER) > 0 || this.options.allowSuperOutsideMethod\n };\n\n prototypeAccessors.allowDirectSuper.get = function () { return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0 };\n\n prototypeAccessors.treatFunctionsAsVar.get = function () { return this.treatFunctionsAsVarInScope(this.currentScope()) };\n\n prototypeAccessors.allowNewDotTarget.get = function () {\n for (var i = this.scopeStack.length - 1; i >= 0; i--) {\n var ref = this.scopeStack[i];\n var flags = ref.flags;\n if (flags & (SCOPE_CLASS_STATIC_BLOCK | SCOPE_CLASS_FIELD_INIT) ||\n ((flags & SCOPE_FUNCTION) && !(flags & SCOPE_ARROW))) { return true }\n }\n return false\n };\n\n prototypeAccessors.allowUsing.get = function () {\n var ref = this.currentScope();\n var flags = ref.flags;\n if (flags & SCOPE_SWITCH) { return false }\n if (!this.inModule && flags & SCOPE_TOP) { return false }\n return true\n };\n\n prototypeAccessors.inClassStaticBlock.get = function () {\n return (this.currentVarScope().flags & SCOPE_CLASS_STATIC_BLOCK) > 0\n };\n\n Parser.extend = function extend () {\n var plugins = [], len = arguments.length;\n while ( len-- ) plugins[ len ] = arguments[ len ];\n\n var cls = this;\n for (var i = 0; i < plugins.length; i++) { cls = plugins[i](cls); }\n return cls\n };\n\n Parser.parse = function parse (input, options) {\n return new this(options, input).parse()\n };\n\n Parser.parseExpressionAt = function parseExpressionAt (input, pos, options) {\n var parser = new this(options, input, pos);\n parser.nextToken();\n return parser.parseExpression()\n };\n\n Parser.tokenizer = function tokenizer (input, options) {\n return new this(options, input)\n };\n\n Object.defineProperties( Parser.prototype, prototypeAccessors );\n\n var pp$9 = Parser.prototype;\n\n // ## Parser utilities\n\n var literal = /^(?:'((?:\\\\[^]|[^'\\\\])*?)'|\"((?:\\\\[^]|[^\"\\\\])*?)\")/;\n pp$9.strictDirective = function(start) {\n if (this.options.ecmaVersion < 5) { return false }\n for (;;) {\n // Try to find string literal.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n var match = literal.exec(this.input.slice(start));\n if (!match) { return false }\n if ((match[1] || match[2]) === \"use strict\") {\n skipWhiteSpace.lastIndex = start + match[0].length;\n var spaceAfter = skipWhiteSpace.exec(this.input), end = spaceAfter.index + spaceAfter[0].length;\n var next = this.input.charAt(end);\n return next === \";\" || next === \"}\" ||\n (lineBreak.test(spaceAfter[0]) &&\n !(/[(`.[+\\-/*%<>=,?^&]/.test(next) || next === \"!\" && this.input.charAt(end + 1) === \"=\"))\n }\n start += match[0].length;\n\n // Skip semicolon, if any.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n if (this.input[start] === \";\")\n { start++; }\n }\n };\n\n // Predicate that tests whether the next token is of the given\n // type, and if yes, consumes it as a side effect.\n\n pp$9.eat = function(type) {\n if (this.type === type) {\n this.next();\n return true\n } else {\n return false\n }\n };\n\n // Tests whether parsed token is a contextual keyword.\n\n pp$9.isContextual = function(name) {\n return this.type === types$1.name && this.value === name && !this.containsEsc\n };\n\n // Consumes contextual keyword if possible.\n\n pp$9.eatContextual = function(name) {\n if (!this.isContextual(name)) { return false }\n this.next();\n return true\n };\n\n // Asserts that following token is given contextual keyword.\n\n pp$9.expectContextual = function(name) {\n if (!this.eatContextual(name)) { this.unexpected(); }\n };\n\n // Test whether a semicolon can be inserted at the current position.\n\n pp$9.canInsertSemicolon = function() {\n return this.type === types$1.eof ||\n this.type === types$1.braceR ||\n lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n };\n\n pp$9.insertSemicolon = function() {\n if (this.canInsertSemicolon()) {\n if (this.options.onInsertedSemicolon)\n { this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc); }\n return true\n }\n };\n\n // Consume a semicolon, or, failing that, see if we are allowed to\n // pretend that there is a semicolon at this position.\n\n pp$9.semicolon = function() {\n if (!this.eat(types$1.semi) && !this.insertSemicolon()) { this.unexpected(); }\n };\n\n pp$9.afterTrailingComma = function(tokType, notNext) {\n if (this.type === tokType) {\n if (this.options.onTrailingComma)\n { this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc); }\n if (!notNext)\n { this.next(); }\n return true\n }\n };\n\n // Expect a token of a given type. If found, consume it, otherwise,\n // raise an unexpected token error.\n\n pp$9.expect = function(type) {\n this.eat(type) || this.unexpected();\n };\n\n // Raise an unexpected token error.\n\n pp$9.unexpected = function(pos) {\n this.raise(pos != null ? pos : this.start, \"Unexpected token\");\n };\n\n var DestructuringErrors = function DestructuringErrors() {\n this.shorthandAssign =\n this.trailingComma =\n this.parenthesizedAssign =\n this.parenthesizedBind =\n this.doubleProto =\n -1;\n };\n\n pp$9.checkPatternErrors = function(refDestructuringErrors, isAssign) {\n if (!refDestructuringErrors) { return }\n if (refDestructuringErrors.trailingComma > -1)\n { this.raiseRecoverable(refDestructuringErrors.trailingComma, \"Comma is not permitted after the rest element\"); }\n var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind;\n if (parens > -1) { this.raiseRecoverable(parens, isAssign ? \"Assigning to rvalue\" : \"Parenthesized pattern\"); }\n };\n\n pp$9.checkExpressionErrors = function(refDestructuringErrors, andThrow) {\n if (!refDestructuringErrors) { return false }\n var shorthandAssign = refDestructuringErrors.shorthandAssign;\n var doubleProto = refDestructuringErrors.doubleProto;\n if (!andThrow) { return shorthandAssign >= 0 || doubleProto >= 0 }\n if (shorthandAssign >= 0)\n { this.raise(shorthandAssign, \"Shorthand property assignments are valid only in destructuring patterns\"); }\n if (doubleProto >= 0)\n { this.raiseRecoverable(doubleProto, \"Redefinition of __proto__ property\"); }\n };\n\n pp$9.checkYieldAwaitInDefaultParams = function() {\n if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos))\n { this.raise(this.yieldPos, \"Yield expression cannot be a default value\"); }\n if (this.awaitPos)\n { this.raise(this.awaitPos, \"Await expression cannot be a default value\"); }\n };\n\n pp$9.isSimpleAssignTarget = function(expr) {\n if (expr.type === \"ParenthesizedExpression\")\n { return this.isSimpleAssignTarget(expr.expression) }\n return expr.type === \"Identifier\" || expr.type === \"MemberExpression\"\n };\n\n var pp$8 = Parser.prototype;\n\n // ### Statement parsing\n\n // Parse a program. Initializes the parser, reads any number of\n // statements, and wraps them in a Program node. Optionally takes a\n // `program` argument. If present, the statements will be appended\n // to its body instead of creating a new node.\n\n pp$8.parseTopLevel = function(node) {\n var exports = Object.create(null);\n if (!node.body) { node.body = []; }\n while (this.type !== types$1.eof) {\n var stmt = this.parseStatement(null, true, exports);\n node.body.push(stmt);\n }\n if (this.inModule)\n { for (var i = 0, list = Object.keys(this.undefinedExports); i < list.length; i += 1)\n {\n var name = list[i];\n\n this.raiseRecoverable(this.undefinedExports[name].start, (\"Export '\" + name + \"' is not defined\"));\n } }\n this.adaptDirectivePrologue(node.body);\n this.next();\n node.sourceType = this.options.sourceType === \"commonjs\" ? \"script\" : this.options.sourceType;\n return this.finishNode(node, \"Program\")\n };\n\n var loopLabel = {kind: \"loop\"}, switchLabel = {kind: \"switch\"};\n\n pp$8.isLet = function(context) {\n if (this.options.ecmaVersion < 6 || !this.isContextual(\"let\")) { return false }\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.fullCharCodeAt(next);\n // For ambiguous cases, determine if a LexicalDeclaration (or only a\n // Statement) is allowed here. If context is not empty then only a Statement\n // is allowed. However, `let [` is an explicit negative lookahead for\n // ExpressionStatement, so special-case it first.\n if (nextCh === 91 || nextCh === 92) { return true } // '[', '\\'\n if (context) { return false }\n\n if (nextCh === 123) { return true } // '{'\n if (isIdentifierStart(nextCh)) {\n var start = next;\n do { next += nextCh <= 0xffff ? 1 : 2; }\n while (isIdentifierChar(nextCh = this.fullCharCodeAt(next)))\n if (nextCh === 92) { return true }\n var ident = this.input.slice(start, next);\n if (!keywordRelationalOperator.test(ident)) { return true }\n }\n return false\n };\n\n // check 'async [no LineTerminator here] function'\n // - 'async /*foo*/ function' is OK.\n // - 'async /*\\n*/ function' is invalid.\n pp$8.isAsyncFunction = function() {\n if (this.options.ecmaVersion < 8 || !this.isContextual(\"async\"))\n { return false }\n\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, after;\n return !lineBreak.test(this.input.slice(this.pos, next)) &&\n this.input.slice(next, next + 8) === \"function\" &&\n (next + 8 === this.input.length ||\n !(isIdentifierChar(after = this.fullCharCodeAt(next + 8)) || after === 92 /* '\\' */))\n };\n\n pp$8.isUsingKeyword = function(isAwaitUsing, isFor) {\n if (this.options.ecmaVersion < 17 || !this.isContextual(isAwaitUsing ? \"await\" : \"using\"))\n { return false }\n\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length;\n\n if (lineBreak.test(this.input.slice(this.pos, next))) { return false }\n\n if (isAwaitUsing) {\n var usingEndPos = next + 5 /* using */, after;\n if (this.input.slice(next, usingEndPos) !== \"using\" ||\n usingEndPos === this.input.length ||\n isIdentifierChar(after = this.fullCharCodeAt(usingEndPos)) ||\n after === 92 /* '\\' */\n ) { return false }\n\n skipWhiteSpace.lastIndex = usingEndPos;\n var skipAfterUsing = skipWhiteSpace.exec(this.input);\n next = usingEndPos + skipAfterUsing[0].length;\n if (skipAfterUsing && lineBreak.test(this.input.slice(usingEndPos, next))) { return false }\n }\n\n var ch = this.fullCharCodeAt(next);\n if (!isIdentifierStart(ch) && ch !== 92 /* '\\' */) { return false }\n var idStart = next;\n do { next += ch <= 0xffff ? 1 : 2; }\n while (isIdentifierChar(ch = this.fullCharCodeAt(next)))\n if (ch === 92) { return true }\n var id = this.input.slice(idStart, next);\n if (keywordRelationalOperator.test(id) || isFor && id === \"of\") { return false }\n return true\n };\n\n pp$8.isAwaitUsing = function(isFor) {\n return this.isUsingKeyword(true, isFor)\n };\n\n pp$8.isUsing = function(isFor) {\n return this.isUsingKeyword(false, isFor)\n };\n\n // Parse a single statement.\n //\n // If expecting a statement and finding a slash operator, parse a\n // regular expression literal. This is to handle cases like\n // `if (foo) /blah/.exec(foo)`, where looking at the previous token\n // does not help.\n\n pp$8.parseStatement = function(context, topLevel, exports) {\n var starttype = this.type, node = this.startNode(), kind;\n\n if (this.isLet(context)) {\n starttype = types$1._var;\n kind = \"let\";\n }\n\n // Most types of statements are recognized by the keyword they\n // start with. Many are trivial to parse, some require a bit of\n // complexity.\n\n switch (starttype) {\n case types$1._break: case types$1._continue: return this.parseBreakContinueStatement(node, starttype.keyword)\n case types$1._debugger: return this.parseDebuggerStatement(node)\n case types$1._do: return this.parseDoStatement(node)\n case types$1._for: return this.parseForStatement(node)\n case types$1._function:\n // Function as sole body of either an if statement or a labeled statement\n // works, but not when it is part of a labeled statement that is the sole\n // body of an if statement.\n if ((context && (this.strict || context !== \"if\" && context !== \"label\")) && this.options.ecmaVersion >= 6) { this.unexpected(); }\n return this.parseFunctionStatement(node, false, !context)\n case types$1._class:\n if (context) { this.unexpected(); }\n return this.parseClass(node, true)\n case types$1._if: return this.parseIfStatement(node)\n case types$1._return: return this.parseReturnStatement(node)\n case types$1._switch: return this.parseSwitchStatement(node)\n case types$1._throw: return this.parseThrowStatement(node)\n case types$1._try: return this.parseTryStatement(node)\n case types$1._const: case types$1._var:\n kind = kind || this.value;\n if (context && kind !== \"var\") { this.unexpected(); }\n return this.parseVarStatement(node, kind)\n case types$1._while: return this.parseWhileStatement(node)\n case types$1._with: return this.parseWithStatement(node)\n case types$1.braceL: return this.parseBlock(true, node)\n case types$1.semi: return this.parseEmptyStatement(node)\n case types$1._export:\n case types$1._import:\n if (this.options.ecmaVersion > 10 && starttype === types$1._import) {\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n if (nextCh === 40 || nextCh === 46) // '(' or '.'\n { return this.parseExpressionStatement(node, this.parseExpression()) }\n }\n\n if (!this.options.allowImportExportEverywhere) {\n if (!topLevel)\n { this.raise(this.start, \"'import' and 'export' may only appear at the top level\"); }\n if (!this.inModule)\n { this.raise(this.start, \"'import' and 'export' may appear only with 'sourceType: module'\"); }\n }\n return starttype === types$1._import ? this.parseImport(node) : this.parseExport(node, exports)\n\n // If the statement does not start with a statement keyword or a\n // brace, it's an ExpressionStatement or LabeledStatement. We\n // simply start parsing an expression, and afterwards, if the\n // next token is a colon and the expression was a simple\n // Identifier node, we switch to interpreting it as a label.\n default:\n if (this.isAsyncFunction()) {\n if (context) { this.unexpected(); }\n this.next();\n return this.parseFunctionStatement(node, true, !context)\n }\n\n var usingKind = this.isAwaitUsing(false) ? \"await using\" : this.isUsing(false) ? \"using\" : null;\n if (usingKind) {\n if (!this.allowUsing) {\n this.raise(this.start, \"Using declaration cannot appear in the top level when source type is `script` or in the bare case statement\");\n }\n if (usingKind === \"await using\") {\n if (!this.canAwait) {\n this.raise(this.start, \"Await using cannot appear outside of async function\");\n }\n this.next();\n }\n this.next();\n this.parseVar(node, false, usingKind);\n this.semicolon();\n return this.finishNode(node, \"VariableDeclaration\")\n }\n\n var maybeName = this.value, expr = this.parseExpression();\n if (starttype === types$1.name && expr.type === \"Identifier\" && this.eat(types$1.colon))\n { return this.parseLabeledStatement(node, maybeName, expr, context) }\n else { return this.parseExpressionStatement(node, expr) }\n }\n };\n\n pp$8.parseBreakContinueStatement = function(node, keyword) {\n var isBreak = keyword === \"break\";\n this.next();\n if (this.eat(types$1.semi) || this.insertSemicolon()) { node.label = null; }\n else if (this.type !== types$1.name) { this.unexpected(); }\n else {\n node.label = this.parseIdent();\n this.semicolon();\n }\n\n // Verify that there is an actual destination to break or\n // continue to.\n var i = 0;\n for (; i < this.labels.length; ++i) {\n var lab = this.labels[i];\n if (node.label == null || lab.name === node.label.name) {\n if (lab.kind != null && (isBreak || lab.kind === \"loop\")) { break }\n if (node.label && isBreak) { break }\n }\n }\n if (i === this.labels.length) { this.raise(node.start, \"Unsyntactic \" + keyword); }\n return this.finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\")\n };\n\n pp$8.parseDebuggerStatement = function(node) {\n this.next();\n this.semicolon();\n return this.finishNode(node, \"DebuggerStatement\")\n };\n\n pp$8.parseDoStatement = function(node) {\n this.next();\n this.labels.push(loopLabel);\n node.body = this.parseStatement(\"do\");\n this.labels.pop();\n this.expect(types$1._while);\n node.test = this.parseParenExpression();\n if (this.options.ecmaVersion >= 6)\n { this.eat(types$1.semi); }\n else\n { this.semicolon(); }\n return this.finishNode(node, \"DoWhileStatement\")\n };\n\n // Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n // loop is non-trivial. Basically, we have to parse the init `var`\n // statement or expression, disallowing the `in` operator (see\n // the second parameter to `parseExpression`), and then check\n // whether the next token is `in` or `of`. When there is no init\n // part (semicolon immediately after the opening parenthesis), it\n // is a regular `for` loop.\n\n pp$8.parseForStatement = function(node) {\n this.next();\n var awaitAt = (this.options.ecmaVersion >= 9 && this.canAwait && this.eatContextual(\"await\")) ? this.lastTokStart : -1;\n this.labels.push(loopLabel);\n this.enterScope(0);\n this.expect(types$1.parenL);\n if (this.type === types$1.semi) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, null)\n }\n var isLet = this.isLet();\n if (this.type === types$1._var || this.type === types$1._const || isLet) {\n var init$1 = this.startNode(), kind = isLet ? \"let\" : this.value;\n this.next();\n this.parseVar(init$1, true, kind);\n this.finishNode(init$1, \"VariableDeclaration\");\n return this.parseForAfterInit(node, init$1, awaitAt)\n }\n var startsWithLet = this.isContextual(\"let\"), isForOf = false;\n\n var usingKind = this.isUsing(true) ? \"using\" : this.isAwaitUsing(true) ? \"await using\" : null;\n if (usingKind) {\n var init$2 = this.startNode();\n this.next();\n if (usingKind === \"await using\") {\n if (!this.canAwait) {\n this.raise(this.start, \"Await using cannot appear outside of async function\");\n }\n this.next();\n }\n this.parseVar(init$2, true, usingKind);\n this.finishNode(init$2, \"VariableDeclaration\");\n return this.parseForAfterInit(node, init$2, awaitAt)\n }\n var containsEsc = this.containsEsc;\n var refDestructuringErrors = new DestructuringErrors;\n var initPos = this.start;\n var init = awaitAt > -1\n ? this.parseExprSubscripts(refDestructuringErrors, \"await\")\n : this.parseExpression(true, refDestructuringErrors);\n if (this.type === types$1._in || (isForOf = this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) {\n if (awaitAt > -1) { // implies `ecmaVersion >= 9` (see declaration of awaitAt)\n if (this.type === types$1._in) { this.unexpected(awaitAt); }\n node.await = true;\n } else if (isForOf && this.options.ecmaVersion >= 8) {\n if (init.start === initPos && !containsEsc && init.type === \"Identifier\" && init.name === \"async\") { this.unexpected(); }\n else if (this.options.ecmaVersion >= 9) { node.await = false; }\n }\n if (startsWithLet && isForOf) { this.raise(init.start, \"The left-hand side of a for-of loop may not start with 'let'.\"); }\n this.toAssignable(init, false, refDestructuringErrors);\n this.checkLValPattern(init);\n return this.parseForIn(node, init)\n } else {\n this.checkExpressionErrors(refDestructuringErrors, true);\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init)\n };\n\n // Helper method to parse for loop after variable initialization\n pp$8.parseForAfterInit = function(node, init, awaitAt) {\n if ((this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) && init.declarations.length === 1) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === types$1._in) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n } else { node.await = awaitAt > -1; }\n }\n return this.parseForIn(node, init)\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init)\n };\n\n pp$8.parseFunctionStatement = function(node, isAsync, declarationPosition) {\n this.next();\n return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync)\n };\n\n pp$8.parseIfStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n // allow function declarations in branches, but only in non-strict mode\n node.consequent = this.parseStatement(\"if\");\n node.alternate = this.eat(types$1._else) ? this.parseStatement(\"if\") : null;\n return this.finishNode(node, \"IfStatement\")\n };\n\n pp$8.parseReturnStatement = function(node) {\n if (!this.allowReturn)\n { this.raise(this.start, \"'return' outside of function\"); }\n this.next();\n\n // In `return` (and `break`/`continue`), the keywords with\n // optional arguments, we eagerly look for a semicolon or the\n // possibility to insert one.\n\n if (this.eat(types$1.semi) || this.insertSemicolon()) { node.argument = null; }\n else { node.argument = this.parseExpression(); this.semicolon(); }\n return this.finishNode(node, \"ReturnStatement\")\n };\n\n pp$8.parseSwitchStatement = function(node) {\n this.next();\n node.discriminant = this.parseParenExpression();\n node.cases = [];\n this.expect(types$1.braceL);\n this.labels.push(switchLabel);\n this.enterScope(SCOPE_SWITCH);\n\n // Statements under must be grouped (by label) in SwitchCase\n // nodes. `cur` is used to keep the node that we are currently\n // adding statements to.\n\n var cur;\n for (var sawDefault = false; this.type !== types$1.braceR;) {\n if (this.type === types$1._case || this.type === types$1._default) {\n var isCase = this.type === types$1._case;\n if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n node.cases.push(cur = this.startNode());\n cur.consequent = [];\n this.next();\n if (isCase) {\n cur.test = this.parseExpression();\n } else {\n if (sawDefault) { this.raiseRecoverable(this.lastTokStart, \"Multiple default clauses\"); }\n sawDefault = true;\n cur.test = null;\n }\n this.expect(types$1.colon);\n } else {\n if (!cur) { this.unexpected(); }\n cur.consequent.push(this.parseStatement(null));\n }\n }\n this.exitScope();\n if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n this.next(); // Closing brace\n this.labels.pop();\n return this.finishNode(node, \"SwitchStatement\")\n };\n\n pp$8.parseThrowStatement = function(node) {\n this.next();\n if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start)))\n { this.raise(this.lastTokEnd, \"Illegal newline after throw\"); }\n node.argument = this.parseExpression();\n this.semicolon();\n return this.finishNode(node, \"ThrowStatement\")\n };\n\n // Reused empty array added for node fields that are always empty.\n\n var empty$1 = [];\n\n pp$8.parseCatchClauseParam = function() {\n var param = this.parseBindingAtom();\n var simple = param.type === \"Identifier\";\n this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0);\n this.checkLValPattern(param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL);\n this.expect(types$1.parenR);\n\n return param\n };\n\n pp$8.parseTryStatement = function(node) {\n this.next();\n node.block = this.parseBlock();\n node.handler = null;\n if (this.type === types$1._catch) {\n var clause = this.startNode();\n this.next();\n if (this.eat(types$1.parenL)) {\n clause.param = this.parseCatchClauseParam();\n } else {\n if (this.options.ecmaVersion < 10) { this.unexpected(); }\n clause.param = null;\n this.enterScope(0);\n }\n clause.body = this.parseBlock(false);\n this.exitScope();\n node.handler = this.finishNode(clause, \"CatchClause\");\n }\n node.finalizer = this.eat(types$1._finally) ? this.parseBlock() : null;\n if (!node.handler && !node.finalizer)\n { this.raise(node.start, \"Missing catch or finally clause\"); }\n return this.finishNode(node, \"TryStatement\")\n };\n\n pp$8.parseVarStatement = function(node, kind, allowMissingInitializer) {\n this.next();\n this.parseVar(node, false, kind, allowMissingInitializer);\n this.semicolon();\n return this.finishNode(node, \"VariableDeclaration\")\n };\n\n pp$8.parseWhileStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n this.labels.push(loopLabel);\n node.body = this.parseStatement(\"while\");\n this.labels.pop();\n return this.finishNode(node, \"WhileStatement\")\n };\n\n pp$8.parseWithStatement = function(node) {\n if (this.strict) { this.raise(this.start, \"'with' in strict mode\"); }\n this.next();\n node.object = this.parseParenExpression();\n node.body = this.parseStatement(\"with\");\n return this.finishNode(node, \"WithStatement\")\n };\n\n pp$8.parseEmptyStatement = function(node) {\n this.next();\n return this.finishNode(node, \"EmptyStatement\")\n };\n\n pp$8.parseLabeledStatement = function(node, maybeName, expr, context) {\n for (var i$1 = 0, list = this.labels; i$1 < list.length; i$1 += 1)\n {\n var label = list[i$1];\n\n if (label.name === maybeName)\n { this.raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n } }\n var kind = this.type.isLoop ? \"loop\" : this.type === types$1._switch ? \"switch\" : null;\n for (var i = this.labels.length - 1; i >= 0; i--) {\n var label$1 = this.labels[i];\n if (label$1.statementStart === node.start) {\n // Update information about previous labels on this node\n label$1.statementStart = this.start;\n label$1.kind = kind;\n } else { break }\n }\n this.labels.push({name: maybeName, kind: kind, statementStart: this.start});\n node.body = this.parseStatement(context ? context.indexOf(\"label\") === -1 ? context + \"label\" : context : \"label\");\n this.labels.pop();\n node.label = expr;\n return this.finishNode(node, \"LabeledStatement\")\n };\n\n pp$8.parseExpressionStatement = function(node, expr) {\n node.expression = expr;\n this.semicolon();\n return this.finishNode(node, \"ExpressionStatement\")\n };\n\n // Parse a semicolon-enclosed block of statements, handling `\"use\n // strict\"` declarations when `allowStrict` is true (used for\n // function bodies).\n\n pp$8.parseBlock = function(createNewLexicalScope, node, exitStrict) {\n if ( createNewLexicalScope === void 0 ) createNewLexicalScope = true;\n if ( node === void 0 ) node = this.startNode();\n\n node.body = [];\n this.expect(types$1.braceL);\n if (createNewLexicalScope) { this.enterScope(0); }\n while (this.type !== types$1.braceR) {\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n if (exitStrict) { this.strict = false; }\n this.next();\n if (createNewLexicalScope) { this.exitScope(); }\n return this.finishNode(node, \"BlockStatement\")\n };\n\n // Parse a regular `for` loop. The disambiguation code in\n // `parseStatement` will already have parsed the init statement or\n // expression.\n\n pp$8.parseFor = function(node, init) {\n node.init = init;\n this.expect(types$1.semi);\n node.test = this.type === types$1.semi ? null : this.parseExpression();\n this.expect(types$1.semi);\n node.update = this.type === types$1.parenR ? null : this.parseExpression();\n this.expect(types$1.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, \"ForStatement\")\n };\n\n // Parse a `for`/`in` and `for`/`of` loop, which are almost\n // same from parser's perspective.\n\n pp$8.parseForIn = function(node, init) {\n var isForIn = this.type === types$1._in;\n this.next();\n\n if (\n init.type === \"VariableDeclaration\" &&\n init.declarations[0].init != null &&\n (\n !isForIn ||\n this.options.ecmaVersion < 8 ||\n this.strict ||\n init.kind !== \"var\" ||\n init.declarations[0].id.type !== \"Identifier\"\n )\n ) {\n this.raise(\n init.start,\n ((isForIn ? \"for-in\" : \"for-of\") + \" loop variable declaration may not have an initializer\")\n );\n }\n node.left = init;\n node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();\n this.expect(types$1.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\")\n };\n\n // Parse a list of variable declarations.\n\n pp$8.parseVar = function(node, isFor, kind, allowMissingInitializer) {\n node.declarations = [];\n node.kind = kind;\n for (;;) {\n var decl = this.startNode();\n this.parseVarId(decl, kind);\n if (this.eat(types$1.eq)) {\n decl.init = this.parseMaybeAssign(isFor);\n } else if (!allowMissingInitializer && kind === \"const\" && !(this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\")))) {\n this.unexpected();\n } else if (!allowMissingInitializer && (kind === \"using\" || kind === \"await using\") && this.options.ecmaVersion >= 17 && this.type !== types$1._in && !this.isContextual(\"of\")) {\n this.raise(this.lastTokEnd, (\"Missing initializer in \" + kind + \" declaration\"));\n } else if (!allowMissingInitializer && decl.id.type !== \"Identifier\" && !(isFor && (this.type === types$1._in || this.isContextual(\"of\")))) {\n this.raise(this.lastTokEnd, \"Complex binding patterns require an initialization value\");\n } else {\n decl.init = null;\n }\n node.declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n if (!this.eat(types$1.comma)) { break }\n }\n return node\n };\n\n pp$8.parseVarId = function(decl, kind) {\n decl.id = kind === \"using\" || kind === \"await using\"\n ? this.parseIdent()\n : this.parseBindingAtom();\n\n this.checkLValPattern(decl.id, kind === \"var\" ? BIND_VAR : BIND_LEXICAL, false);\n };\n\n var FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4;\n\n // Parse a function declaration or literal (depending on the\n // `statement & FUNC_STATEMENT`).\n\n // Remove `allowExpressionBody` for 7.0.0, as it is only called with false\n pp$8.parseFunction = function(node, statement, allowExpressionBody, isAsync, forInit) {\n this.initFunction(node);\n if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {\n if (this.type === types$1.star && (statement & FUNC_HANGING_STATEMENT))\n { this.unexpected(); }\n node.generator = this.eat(types$1.star);\n }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n if (statement & FUNC_STATEMENT) {\n node.id = (statement & FUNC_NULLABLE_ID) && this.type !== types$1.name ? null : this.parseIdent();\n if (node.id && !(statement & FUNC_HANGING_STATEMENT))\n // If it is a regular function declaration in sloppy mode, then it is\n // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding\n // mode depends on properties of the current scope (see\n // treatFunctionsAsVar).\n { this.checkLValSimple(node.id, (this.strict || node.generator || node.async) ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION); }\n }\n\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(node.async, node.generator));\n\n if (!(statement & FUNC_STATEMENT))\n { node.id = this.type === types$1.name ? this.parseIdent() : null; }\n\n this.parseFunctionParams(node);\n this.parseFunctionBody(node, allowExpressionBody, false, forInit);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, (statement & FUNC_STATEMENT) ? \"FunctionDeclaration\" : \"FunctionExpression\")\n };\n\n pp$8.parseFunctionParams = function(node) {\n this.expect(types$1.parenL);\n node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n };\n\n // Parse a class declaration or literal (depending on the\n // `isStatement` parameter).\n\n pp$8.parseClass = function(node, isStatement) {\n this.next();\n\n // ecma-262 14.6 Class Definitions\n // A class definition is always strict mode code.\n var oldStrict = this.strict;\n this.strict = true;\n\n this.parseClassId(node, isStatement);\n this.parseClassSuper(node);\n var privateNameMap = this.enterClassBody();\n var classBody = this.startNode();\n var hadConstructor = false;\n classBody.body = [];\n this.expect(types$1.braceL);\n while (this.type !== types$1.braceR) {\n var element = this.parseClassElement(node.superClass !== null);\n if (element) {\n classBody.body.push(element);\n if (element.type === \"MethodDefinition\" && element.kind === \"constructor\") {\n if (hadConstructor) { this.raiseRecoverable(element.start, \"Duplicate constructor in the same class\"); }\n hadConstructor = true;\n } else if (element.key && element.key.type === \"PrivateIdentifier\" && isPrivateNameConflicted(privateNameMap, element)) {\n this.raiseRecoverable(element.key.start, (\"Identifier '#\" + (element.key.name) + \"' has already been declared\"));\n }\n }\n }\n this.strict = oldStrict;\n this.next();\n node.body = this.finishNode(classBody, \"ClassBody\");\n this.exitClassBody();\n return this.finishNode(node, isStatement ? \"ClassDeclaration\" : \"ClassExpression\")\n };\n\n pp$8.parseClassElement = function(constructorAllowsSuper) {\n if (this.eat(types$1.semi)) { return null }\n\n var ecmaVersion = this.options.ecmaVersion;\n var node = this.startNode();\n var keyName = \"\";\n var isGenerator = false;\n var isAsync = false;\n var kind = \"method\";\n var isStatic = false;\n\n if (this.eatContextual(\"static\")) {\n // Parse static init block\n if (ecmaVersion >= 13 && this.eat(types$1.braceL)) {\n this.parseClassStaticBlock(node);\n return node\n }\n if (this.isClassElementNameStart() || this.type === types$1.star) {\n isStatic = true;\n } else {\n keyName = \"static\";\n }\n }\n node.static = isStatic;\n if (!keyName && ecmaVersion >= 8 && this.eatContextual(\"async\")) {\n if ((this.isClassElementNameStart() || this.type === types$1.star) && !this.canInsertSemicolon()) {\n isAsync = true;\n } else {\n keyName = \"async\";\n }\n }\n if (!keyName && (ecmaVersion >= 9 || !isAsync) && this.eat(types$1.star)) {\n isGenerator = true;\n }\n if (!keyName && !isAsync && !isGenerator) {\n var lastValue = this.value;\n if (this.eatContextual(\"get\") || this.eatContextual(\"set\")) {\n if (this.isClassElementNameStart()) {\n kind = lastValue;\n } else {\n keyName = lastValue;\n }\n }\n }\n\n // Parse element name\n if (keyName) {\n // 'async', 'get', 'set', or 'static' were not a keyword contextually.\n // The last token is any of those. Make it the element name.\n node.computed = false;\n node.key = this.startNodeAt(this.lastTokStart, this.lastTokStartLoc);\n node.key.name = keyName;\n this.finishNode(node.key, \"Identifier\");\n } else {\n this.parseClassElementName(node);\n }\n\n // Parse element value\n if (ecmaVersion < 13 || this.type === types$1.parenL || kind !== \"method\" || isGenerator || isAsync) {\n var isConstructor = !node.static && checkKeyName(node, \"constructor\");\n var allowsDirectSuper = isConstructor && constructorAllowsSuper;\n // Couldn't move this check into the 'parseClassMethod' method for backward compatibility.\n if (isConstructor && kind !== \"method\") { this.raise(node.key.start, \"Constructor can't have get/set modifier\"); }\n node.kind = isConstructor ? \"constructor\" : kind;\n this.parseClassMethod(node, isGenerator, isAsync, allowsDirectSuper);\n } else {\n this.parseClassField(node);\n }\n\n return node\n };\n\n pp$8.isClassElementNameStart = function() {\n return (\n this.type === types$1.name ||\n this.type === types$1.privateId ||\n this.type === types$1.num ||\n this.type === types$1.string ||\n this.type === types$1.bracketL ||\n this.type.keyword\n )\n };\n\n pp$8.parseClassElementName = function(element) {\n if (this.type === types$1.privateId) {\n if (this.value === \"constructor\") {\n this.raise(this.start, \"Classes can't have an element named '#constructor'\");\n }\n element.computed = false;\n element.key = this.parsePrivateIdent();\n } else {\n this.parsePropertyName(element);\n }\n };\n\n pp$8.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {\n // Check key and flags\n var key = method.key;\n if (method.kind === \"constructor\") {\n if (isGenerator) { this.raise(key.start, \"Constructor can't be a generator\"); }\n if (isAsync) { this.raise(key.start, \"Constructor can't be an async method\"); }\n } else if (method.static && checkKeyName(method, \"prototype\")) {\n this.raise(key.start, \"Classes may not have a static property named prototype\");\n }\n\n // Parse value\n var value = method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper);\n\n // Check value\n if (method.kind === \"get\" && value.params.length !== 0)\n { this.raiseRecoverable(value.start, \"getter should have no params\"); }\n if (method.kind === \"set\" && value.params.length !== 1)\n { this.raiseRecoverable(value.start, \"setter should have exactly one param\"); }\n if (method.kind === \"set\" && value.params[0].type === \"RestElement\")\n { this.raiseRecoverable(value.params[0].start, \"Setter cannot use rest params\"); }\n\n return this.finishNode(method, \"MethodDefinition\")\n };\n\n pp$8.parseClassField = function(field) {\n if (checkKeyName(field, \"constructor\")) {\n this.raise(field.key.start, \"Classes can't have a field named 'constructor'\");\n } else if (field.static && checkKeyName(field, \"prototype\")) {\n this.raise(field.key.start, \"Classes can't have a static field named 'prototype'\");\n }\n\n if (this.eat(types$1.eq)) {\n // To raise SyntaxError if 'arguments' exists in the initializer.\n this.enterScope(SCOPE_CLASS_FIELD_INIT | SCOPE_SUPER);\n field.value = this.parseMaybeAssign();\n this.exitScope();\n } else {\n field.value = null;\n }\n this.semicolon();\n\n return this.finishNode(field, \"PropertyDefinition\")\n };\n\n pp$8.parseClassStaticBlock = function(node) {\n node.body = [];\n\n var oldLabels = this.labels;\n this.labels = [];\n this.enterScope(SCOPE_CLASS_STATIC_BLOCK | SCOPE_SUPER);\n while (this.type !== types$1.braceR) {\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n this.next();\n this.exitScope();\n this.labels = oldLabels;\n\n return this.finishNode(node, \"StaticBlock\")\n };\n\n pp$8.parseClassId = function(node, isStatement) {\n if (this.type === types$1.name) {\n node.id = this.parseIdent();\n if (isStatement)\n { this.checkLValSimple(node.id, BIND_LEXICAL, false); }\n } else {\n if (isStatement === true)\n { this.unexpected(); }\n node.id = null;\n }\n };\n\n pp$8.parseClassSuper = function(node) {\n node.superClass = this.eat(types$1._extends) ? this.parseExprSubscripts(null, false) : null;\n };\n\n pp$8.enterClassBody = function() {\n var element = {declared: Object.create(null), used: []};\n this.privateNameStack.push(element);\n return element.declared\n };\n\n pp$8.exitClassBody = function() {\n var ref = this.privateNameStack.pop();\n var declared = ref.declared;\n var used = ref.used;\n if (!this.options.checkPrivateFields) { return }\n var len = this.privateNameStack.length;\n var parent = len === 0 ? null : this.privateNameStack[len - 1];\n for (var i = 0; i < used.length; ++i) {\n var id = used[i];\n if (!hasOwn(declared, id.name)) {\n if (parent) {\n parent.used.push(id);\n } else {\n this.raiseRecoverable(id.start, (\"Private field '#\" + (id.name) + \"' must be declared in an enclosing class\"));\n }\n }\n }\n };\n\n function isPrivateNameConflicted(privateNameMap, element) {\n var name = element.key.name;\n var curr = privateNameMap[name];\n\n var next = \"true\";\n if (element.type === \"MethodDefinition\" && (element.kind === \"get\" || element.kind === \"set\")) {\n next = (element.static ? \"s\" : \"i\") + element.kind;\n }\n\n // `class { get #a(){}; static set #a(_){} }` is also conflict.\n if (\n curr === \"iget\" && next === \"iset\" ||\n curr === \"iset\" && next === \"iget\" ||\n curr === \"sget\" && next === \"sset\" ||\n curr === \"sset\" && next === \"sget\"\n ) {\n privateNameMap[name] = \"true\";\n return false\n } else if (!curr) {\n privateNameMap[name] = next;\n return false\n } else {\n return true\n }\n }\n\n function checkKeyName(node, name) {\n var computed = node.computed;\n var key = node.key;\n return !computed && (\n key.type === \"Identifier\" && key.name === name ||\n key.type === \"Literal\" && key.value === name\n )\n }\n\n // Parses module export declaration.\n\n pp$8.parseExportAllDeclaration = function(node, exports) {\n if (this.options.ecmaVersion >= 11) {\n if (this.eatContextual(\"as\")) {\n node.exported = this.parseModuleExportName();\n this.checkExport(exports, node.exported, this.lastTokStart);\n } else {\n node.exported = null;\n }\n }\n this.expectContextual(\"from\");\n if (this.type !== types$1.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n if (this.options.ecmaVersion >= 16)\n { node.attributes = this.parseWithClause(); }\n this.semicolon();\n return this.finishNode(node, \"ExportAllDeclaration\")\n };\n\n pp$8.parseExport = function(node, exports) {\n this.next();\n // export * from '...'\n if (this.eat(types$1.star)) {\n return this.parseExportAllDeclaration(node, exports)\n }\n if (this.eat(types$1._default)) { // export default ...\n this.checkExport(exports, \"default\", this.lastTokStart);\n node.declaration = this.parseExportDefaultDeclaration();\n return this.finishNode(node, \"ExportDefaultDeclaration\")\n }\n // export var|const|let|function|class ...\n if (this.shouldParseExportStatement()) {\n node.declaration = this.parseExportDeclaration(node);\n if (node.declaration.type === \"VariableDeclaration\")\n { this.checkVariableExport(exports, node.declaration.declarations); }\n else\n { this.checkExport(exports, node.declaration.id, node.declaration.id.start); }\n node.specifiers = [];\n node.source = null;\n if (this.options.ecmaVersion >= 16)\n { node.attributes = []; }\n } else { // export { x, y as z } [from '...']\n node.declaration = null;\n node.specifiers = this.parseExportSpecifiers(exports);\n if (this.eatContextual(\"from\")) {\n if (this.type !== types$1.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n if (this.options.ecmaVersion >= 16)\n { node.attributes = this.parseWithClause(); }\n } else {\n for (var i = 0, list = node.specifiers; i < list.length; i += 1) {\n // check for keywords used as local names\n var spec = list[i];\n\n this.checkUnreserved(spec.local);\n // check if export is defined\n this.checkLocalExport(spec.local);\n\n if (spec.local.type === \"Literal\") {\n this.raise(spec.local.start, \"A string literal cannot be used as an exported binding without `from`.\");\n }\n }\n\n node.source = null;\n if (this.options.ecmaVersion >= 16)\n { node.attributes = []; }\n }\n this.semicolon();\n }\n return this.finishNode(node, \"ExportNamedDeclaration\")\n };\n\n pp$8.parseExportDeclaration = function(node) {\n return this.parseStatement(null)\n };\n\n pp$8.parseExportDefaultDeclaration = function() {\n var isAsync;\n if (this.type === types$1._function || (isAsync = this.isAsyncFunction())) {\n var fNode = this.startNode();\n this.next();\n if (isAsync) { this.next(); }\n return this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync)\n } else if (this.type === types$1._class) {\n var cNode = this.startNode();\n return this.parseClass(cNode, \"nullableID\")\n } else {\n var declaration = this.parseMaybeAssign();\n this.semicolon();\n return declaration\n }\n };\n\n pp$8.checkExport = function(exports, name, pos) {\n if (!exports) { return }\n if (typeof name !== \"string\")\n { name = name.type === \"Identifier\" ? name.name : name.value; }\n if (hasOwn(exports, name))\n { this.raiseRecoverable(pos, \"Duplicate export '\" + name + \"'\"); }\n exports[name] = true;\n };\n\n pp$8.checkPatternExport = function(exports, pat) {\n var type = pat.type;\n if (type === \"Identifier\")\n { this.checkExport(exports, pat, pat.start); }\n else if (type === \"ObjectPattern\")\n { for (var i = 0, list = pat.properties; i < list.length; i += 1)\n {\n var prop = list[i];\n\n this.checkPatternExport(exports, prop);\n } }\n else if (type === \"ArrayPattern\")\n { for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) {\n var elt = list$1[i$1];\n\n if (elt) { this.checkPatternExport(exports, elt); }\n } }\n else if (type === \"Property\")\n { this.checkPatternExport(exports, pat.value); }\n else if (type === \"AssignmentPattern\")\n { this.checkPatternExport(exports, pat.left); }\n else if (type === \"RestElement\")\n { this.checkPatternExport(exports, pat.argument); }\n };\n\n pp$8.checkVariableExport = function(exports, decls) {\n if (!exports) { return }\n for (var i = 0, list = decls; i < list.length; i += 1)\n {\n var decl = list[i];\n\n this.checkPatternExport(exports, decl.id);\n }\n };\n\n pp$8.shouldParseExportStatement = function() {\n return this.type.keyword === \"var\" ||\n this.type.keyword === \"const\" ||\n this.type.keyword === \"class\" ||\n this.type.keyword === \"function\" ||\n this.isLet() ||\n this.isAsyncFunction()\n };\n\n // Parses a comma-separated list of module exports.\n\n pp$8.parseExportSpecifier = function(exports) {\n var node = this.startNode();\n node.local = this.parseModuleExportName();\n\n node.exported = this.eatContextual(\"as\") ? this.parseModuleExportName() : node.local;\n this.checkExport(\n exports,\n node.exported,\n node.exported.start\n );\n\n return this.finishNode(node, \"ExportSpecifier\")\n };\n\n pp$8.parseExportSpecifiers = function(exports) {\n var nodes = [], first = true;\n // export { x, y as z } [from '...']\n this.expect(types$1.braceL);\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n nodes.push(this.parseExportSpecifier(exports));\n }\n return nodes\n };\n\n // Parses import declaration.\n\n pp$8.parseImport = function(node) {\n this.next();\n\n // import '...'\n if (this.type === types$1.string) {\n node.specifiers = empty$1;\n node.source = this.parseExprAtom();\n } else {\n node.specifiers = this.parseImportSpecifiers();\n this.expectContextual(\"from\");\n node.source = this.type === types$1.string ? this.parseExprAtom() : this.unexpected();\n }\n if (this.options.ecmaVersion >= 16)\n { node.attributes = this.parseWithClause(); }\n this.semicolon();\n return this.finishNode(node, \"ImportDeclaration\")\n };\n\n // Parses a comma-separated list of module imports.\n\n pp$8.parseImportSpecifier = function() {\n var node = this.startNode();\n node.imported = this.parseModuleExportName();\n\n if (this.eatContextual(\"as\")) {\n node.local = this.parseIdent();\n } else {\n this.checkUnreserved(node.imported);\n node.local = node.imported;\n }\n this.checkLValSimple(node.local, BIND_LEXICAL);\n\n return this.finishNode(node, \"ImportSpecifier\")\n };\n\n pp$8.parseImportDefaultSpecifier = function() {\n // import defaultObj, { x, y as z } from '...'\n var node = this.startNode();\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, BIND_LEXICAL);\n return this.finishNode(node, \"ImportDefaultSpecifier\")\n };\n\n pp$8.parseImportNamespaceSpecifier = function() {\n var node = this.startNode();\n this.next();\n this.expectContextual(\"as\");\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, BIND_LEXICAL);\n return this.finishNode(node, \"ImportNamespaceSpecifier\")\n };\n\n pp$8.parseImportSpecifiers = function() {\n var nodes = [], first = true;\n if (this.type === types$1.name) {\n nodes.push(this.parseImportDefaultSpecifier());\n if (!this.eat(types$1.comma)) { return nodes }\n }\n if (this.type === types$1.star) {\n nodes.push(this.parseImportNamespaceSpecifier());\n return nodes\n }\n this.expect(types$1.braceL);\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n nodes.push(this.parseImportSpecifier());\n }\n return nodes\n };\n\n pp$8.parseWithClause = function() {\n var nodes = [];\n if (!this.eat(types$1._with)) {\n return nodes\n }\n this.expect(types$1.braceL);\n var attributeKeys = {};\n var first = true;\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n var attr = this.parseImportAttribute();\n var keyName = attr.key.type === \"Identifier\" ? attr.key.name : attr.key.value;\n if (hasOwn(attributeKeys, keyName))\n { this.raiseRecoverable(attr.key.start, \"Duplicate attribute key '\" + keyName + \"'\"); }\n attributeKeys[keyName] = true;\n nodes.push(attr);\n }\n return nodes\n };\n\n pp$8.parseImportAttribute = function() {\n var node = this.startNode();\n node.key = this.type === types$1.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== \"never\");\n this.expect(types$1.colon);\n if (this.type !== types$1.string) {\n this.unexpected();\n }\n node.value = this.parseExprAtom();\n return this.finishNode(node, \"ImportAttribute\")\n };\n\n pp$8.parseModuleExportName = function() {\n if (this.options.ecmaVersion >= 13 && this.type === types$1.string) {\n var stringLiteral = this.parseLiteral(this.value);\n if (loneSurrogate.test(stringLiteral.value)) {\n this.raise(stringLiteral.start, \"An export name cannot include a lone surrogate.\");\n }\n return stringLiteral\n }\n return this.parseIdent(true)\n };\n\n // Set `ExpressionStatement#directive` property for directive prologues.\n pp$8.adaptDirectivePrologue = function(statements) {\n for (var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) {\n statements[i].directive = statements[i].expression.raw.slice(1, -1);\n }\n };\n pp$8.isDirectiveCandidate = function(statement) {\n return (\n this.options.ecmaVersion >= 5 &&\n statement.type === \"ExpressionStatement\" &&\n statement.expression.type === \"Literal\" &&\n typeof statement.expression.value === \"string\" &&\n // Reject parenthesized strings.\n (this.input[statement.start] === \"\\\"\" || this.input[statement.start] === \"'\")\n )\n };\n\n var pp$7 = Parser.prototype;\n\n // Convert existing expression atom to assignable pattern\n // if possible.\n\n pp$7.toAssignable = function(node, isBinding, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 6 && node) {\n switch (node.type) {\n case \"Identifier\":\n if (this.inAsync && node.name === \"await\")\n { this.raise(node.start, \"Cannot use 'await' as identifier inside an async function\"); }\n break\n\n case \"ObjectPattern\":\n case \"ArrayPattern\":\n case \"AssignmentPattern\":\n case \"RestElement\":\n break\n\n case \"ObjectExpression\":\n node.type = \"ObjectPattern\";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n for (var i = 0, list = node.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n this.toAssignable(prop, isBinding);\n // Early error:\n // AssignmentRestProperty[Yield, Await] :\n // `...` DestructuringAssignmentTarget[Yield, Await]\n //\n // It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.\n if (\n prop.type === \"RestElement\" &&\n (prop.argument.type === \"ArrayPattern\" || prop.argument.type === \"ObjectPattern\")\n ) {\n this.raise(prop.argument.start, \"Unexpected token\");\n }\n }\n break\n\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n if (node.kind !== \"init\") { this.raise(node.key.start, \"Object pattern can't contain getter or setter\"); }\n this.toAssignable(node.value, isBinding);\n break\n\n case \"ArrayExpression\":\n node.type = \"ArrayPattern\";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n this.toAssignableList(node.elements, isBinding);\n break\n\n case \"SpreadElement\":\n node.type = \"RestElement\";\n this.toAssignable(node.argument, isBinding);\n if (node.argument.type === \"AssignmentPattern\")\n { this.raise(node.argument.start, \"Rest elements cannot have a default value\"); }\n break\n\n case \"AssignmentExpression\":\n if (node.operator !== \"=\") { this.raise(node.left.end, \"Only '=' operator can be used for specifying default value.\"); }\n node.type = \"AssignmentPattern\";\n delete node.operator;\n this.toAssignable(node.left, isBinding);\n break\n\n case \"ParenthesizedExpression\":\n this.toAssignable(node.expression, isBinding, refDestructuringErrors);\n break\n\n case \"ChainExpression\":\n this.raiseRecoverable(node.start, \"Optional chaining cannot appear in left-hand side\");\n break\n\n case \"MemberExpression\":\n if (!isBinding) { break }\n\n default:\n this.raise(node.start, \"Assigning to rvalue\");\n }\n } else if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n return node\n };\n\n // Convert list of expression atoms to binding list.\n\n pp$7.toAssignableList = function(exprList, isBinding) {\n var end = exprList.length;\n for (var i = 0; i < end; i++) {\n var elt = exprList[i];\n if (elt) { this.toAssignable(elt, isBinding); }\n }\n if (end) {\n var last = exprList[end - 1];\n if (this.options.ecmaVersion === 6 && isBinding && last && last.type === \"RestElement\" && last.argument.type !== \"Identifier\")\n { this.unexpected(last.argument.start); }\n }\n return exprList\n };\n\n // Parses spread element.\n\n pp$7.parseSpread = function(refDestructuringErrors) {\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n return this.finishNode(node, \"SpreadElement\")\n };\n\n pp$7.parseRestBinding = function() {\n var node = this.startNode();\n this.next();\n\n // RestElement inside of a function parameter must be an identifier\n if (this.options.ecmaVersion === 6 && this.type !== types$1.name)\n { this.unexpected(); }\n\n node.argument = this.parseBindingAtom();\n\n return this.finishNode(node, \"RestElement\")\n };\n\n // Parses lvalue (assignable) atom.\n\n pp$7.parseBindingAtom = function() {\n if (this.options.ecmaVersion >= 6) {\n switch (this.type) {\n case types$1.bracketL:\n var node = this.startNode();\n this.next();\n node.elements = this.parseBindingList(types$1.bracketR, true, true);\n return this.finishNode(node, \"ArrayPattern\")\n\n case types$1.braceL:\n return this.parseObj(true)\n }\n }\n return this.parseIdent()\n };\n\n pp$7.parseBindingList = function(close, allowEmpty, allowTrailingComma, allowModifiers) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (first) { first = false; }\n else { this.expect(types$1.comma); }\n if (allowEmpty && this.type === types$1.comma) {\n elts.push(null);\n } else if (allowTrailingComma && this.afterTrailingComma(close)) {\n break\n } else if (this.type === types$1.ellipsis) {\n var rest = this.parseRestBinding();\n this.parseBindingListItem(rest);\n elts.push(rest);\n if (this.type === types$1.comma) { this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\"); }\n this.expect(close);\n break\n } else {\n elts.push(this.parseAssignableListItem(allowModifiers));\n }\n }\n return elts\n };\n\n pp$7.parseAssignableListItem = function(allowModifiers) {\n var elem = this.parseMaybeDefault(this.start, this.startLoc);\n this.parseBindingListItem(elem);\n return elem\n };\n\n pp$7.parseBindingListItem = function(param) {\n return param\n };\n\n // Parses assignment pattern around given atom if possible.\n\n pp$7.parseMaybeDefault = function(startPos, startLoc, left) {\n left = left || this.parseBindingAtom();\n if (this.options.ecmaVersion < 6 || !this.eat(types$1.eq)) { return left }\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.right = this.parseMaybeAssign();\n return this.finishNode(node, \"AssignmentPattern\")\n };\n\n // The following three functions all verify that a node is an lvalue —\n // something that can be bound, or assigned to. In order to do so, they perform\n // a variety of checks:\n //\n // - Check that none of the bound/assigned-to identifiers are reserved words.\n // - Record name declarations for bindings in the appropriate scope.\n // - Check duplicate argument names, if checkClashes is set.\n //\n // If a complex binding pattern is encountered (e.g., object and array\n // destructuring), the entire pattern is recursively checked.\n //\n // There are three versions of checkLVal*() appropriate for different\n // circumstances:\n //\n // - checkLValSimple() shall be used if the syntactic construct supports\n // nothing other than identifiers and member expressions. Parenthesized\n // expressions are also correctly handled. This is generally appropriate for\n // constructs for which the spec says\n //\n // > It is a Syntax Error if AssignmentTargetType of [the production] is not\n // > simple.\n //\n // It is also appropriate for checking if an identifier is valid and not\n // defined elsewhere, like import declarations or function/class identifiers.\n //\n // Examples where this is used include:\n // a += …;\n // import a from '…';\n // where a is the node to be checked.\n //\n // - checkLValPattern() shall be used if the syntactic construct supports\n // anything checkLValSimple() supports, as well as object and array\n // destructuring patterns. This is generally appropriate for constructs for\n // which the spec says\n //\n // > It is a Syntax Error if [the production] is neither an ObjectLiteral nor\n // > an ArrayLiteral and AssignmentTargetType of [the production] is not\n // > simple.\n //\n // Examples where this is used include:\n // (a = …);\n // const a = …;\n // try { … } catch (a) { … }\n // where a is the node to be checked.\n //\n // - checkLValInnerPattern() shall be used if the syntactic construct supports\n // anything checkLValPattern() supports, as well as default assignment\n // patterns, rest elements, and other constructs that may appear within an\n // object or array destructuring pattern.\n //\n // As a special case, function parameters also use checkLValInnerPattern(),\n // as they also support defaults and rest constructs.\n //\n // These functions deliberately support both assignment and binding constructs,\n // as the logic for both is exceedingly similar. If the node is the target of\n // an assignment, then bindingType should be set to BIND_NONE. Otherwise, it\n // should be set to the appropriate BIND_* constant, like BIND_VAR or\n // BIND_LEXICAL.\n //\n // If the function is called with a non-BIND_NONE bindingType, then\n // additionally a checkClashes object may be specified to allow checking for\n // duplicate argument names. checkClashes is ignored if the provided construct\n // is an assignment (i.e., bindingType is BIND_NONE).\n\n pp$7.checkLValSimple = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n var isBind = bindingType !== BIND_NONE;\n\n switch (expr.type) {\n case \"Identifier\":\n if (this.strict && this.reservedWordsStrictBind.test(expr.name))\n { this.raiseRecoverable(expr.start, (isBind ? \"Binding \" : \"Assigning to \") + expr.name + \" in strict mode\"); }\n if (isBind) {\n if (bindingType === BIND_LEXICAL && expr.name === \"let\")\n { this.raiseRecoverable(expr.start, \"let is disallowed as a lexically bound name\"); }\n if (checkClashes) {\n if (hasOwn(checkClashes, expr.name))\n { this.raiseRecoverable(expr.start, \"Argument name clash\"); }\n checkClashes[expr.name] = true;\n }\n if (bindingType !== BIND_OUTSIDE) { this.declareName(expr.name, bindingType, expr.start); }\n }\n break\n\n case \"ChainExpression\":\n this.raiseRecoverable(expr.start, \"Optional chaining cannot appear in left-hand side\");\n break\n\n case \"MemberExpression\":\n if (isBind) { this.raiseRecoverable(expr.start, \"Binding member expression\"); }\n break\n\n case \"ParenthesizedExpression\":\n if (isBind) { this.raiseRecoverable(expr.start, \"Binding parenthesized expression\"); }\n return this.checkLValSimple(expr.expression, bindingType, checkClashes)\n\n default:\n this.raise(expr.start, (isBind ? \"Binding\" : \"Assigning to\") + \" rvalue\");\n }\n };\n\n pp$7.checkLValPattern = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n switch (expr.type) {\n case \"ObjectPattern\":\n for (var i = 0, list = expr.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n this.checkLValInnerPattern(prop, bindingType, checkClashes);\n }\n break\n\n case \"ArrayPattern\":\n for (var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1) {\n var elem = list$1[i$1];\n\n if (elem) { this.checkLValInnerPattern(elem, bindingType, checkClashes); }\n }\n break\n\n default:\n this.checkLValSimple(expr, bindingType, checkClashes);\n }\n };\n\n pp$7.checkLValInnerPattern = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n switch (expr.type) {\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n this.checkLValInnerPattern(expr.value, bindingType, checkClashes);\n break\n\n case \"AssignmentPattern\":\n this.checkLValPattern(expr.left, bindingType, checkClashes);\n break\n\n case \"RestElement\":\n this.checkLValPattern(expr.argument, bindingType, checkClashes);\n break\n\n default:\n this.checkLValPattern(expr, bindingType, checkClashes);\n }\n };\n\n // The algorithm used to determine whether a regexp can appear at a\n // given point in the program is loosely based on sweet.js' approach.\n // See https://github.com/mozilla/sweet.js/wiki/design\n\n\n var TokContext = function TokContext(token, isExpr, preserveSpace, override, generator) {\n this.token = token;\n this.isExpr = !!isExpr;\n this.preserveSpace = !!preserveSpace;\n this.override = override;\n this.generator = !!generator;\n };\n\n var types = {\n b_stat: new TokContext(\"{\", false),\n b_expr: new TokContext(\"{\", true),\n b_tmpl: new TokContext(\"${\", false),\n p_stat: new TokContext(\"(\", false),\n p_expr: new TokContext(\"(\", true),\n q_tmpl: new TokContext(\"`\", true, true, function (p) { return p.tryReadTemplateToken(); }),\n f_stat: new TokContext(\"function\", false),\n f_expr: new TokContext(\"function\", true),\n f_expr_gen: new TokContext(\"function\", true, false, null, true),\n f_gen: new TokContext(\"function\", false, false, null, true)\n };\n\n var pp$6 = Parser.prototype;\n\n pp$6.initialContext = function() {\n return [types.b_stat]\n };\n\n pp$6.curContext = function() {\n return this.context[this.context.length - 1]\n };\n\n pp$6.braceIsBlock = function(prevType) {\n var parent = this.curContext();\n if (parent === types.f_expr || parent === types.f_stat)\n { return true }\n if (prevType === types$1.colon && (parent === types.b_stat || parent === types.b_expr))\n { return !parent.isExpr }\n\n // The check for `tt.name && exprAllowed` detects whether we are\n // after a `yield` or `of` construct. See the `updateContext` for\n // `tt.name`.\n if (prevType === types$1._return || prevType === types$1.name && this.exprAllowed)\n { return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) }\n if (prevType === types$1._else || prevType === types$1.semi || prevType === types$1.eof || prevType === types$1.parenR || prevType === types$1.arrow)\n { return true }\n if (prevType === types$1.braceL)\n { return parent === types.b_stat }\n if (prevType === types$1._var || prevType === types$1._const || prevType === types$1.name)\n { return false }\n return !this.exprAllowed\n };\n\n pp$6.inGeneratorContext = function() {\n for (var i = this.context.length - 1; i >= 1; i--) {\n var context = this.context[i];\n if (context.token === \"function\")\n { return context.generator }\n }\n return false\n };\n\n pp$6.updateContext = function(prevType) {\n var update, type = this.type;\n if (type.keyword && prevType === types$1.dot)\n { this.exprAllowed = false; }\n else if (update = type.updateContext)\n { update.call(this, prevType); }\n else\n { this.exprAllowed = type.beforeExpr; }\n };\n\n // Used to handle edge cases when token context could not be inferred correctly during tokenization phase\n\n pp$6.overrideContext = function(tokenCtx) {\n if (this.curContext() !== tokenCtx) {\n this.context[this.context.length - 1] = tokenCtx;\n }\n };\n\n // Token-specific context update code\n\n types$1.parenR.updateContext = types$1.braceR.updateContext = function() {\n if (this.context.length === 1) {\n this.exprAllowed = true;\n return\n }\n var out = this.context.pop();\n if (out === types.b_stat && this.curContext().token === \"function\") {\n out = this.context.pop();\n }\n this.exprAllowed = !out.isExpr;\n };\n\n types$1.braceL.updateContext = function(prevType) {\n this.context.push(this.braceIsBlock(prevType) ? types.b_stat : types.b_expr);\n this.exprAllowed = true;\n };\n\n types$1.dollarBraceL.updateContext = function() {\n this.context.push(types.b_tmpl);\n this.exprAllowed = true;\n };\n\n types$1.parenL.updateContext = function(prevType) {\n var statementParens = prevType === types$1._if || prevType === types$1._for || prevType === types$1._with || prevType === types$1._while;\n this.context.push(statementParens ? types.p_stat : types.p_expr);\n this.exprAllowed = true;\n };\n\n types$1.incDec.updateContext = function() {\n // tokExprAllowed stays unchanged\n };\n\n types$1._function.updateContext = types$1._class.updateContext = function(prevType) {\n if (prevType.beforeExpr && prevType !== types$1._else &&\n !(prevType === types$1.semi && this.curContext() !== types.p_stat) &&\n !(prevType === types$1._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) &&\n !((prevType === types$1.colon || prevType === types$1.braceL) && this.curContext() === types.b_stat))\n { this.context.push(types.f_expr); }\n else\n { this.context.push(types.f_stat); }\n this.exprAllowed = false;\n };\n\n types$1.colon.updateContext = function() {\n if (this.curContext().token === \"function\") { this.context.pop(); }\n this.exprAllowed = true;\n };\n\n types$1.backQuote.updateContext = function() {\n if (this.curContext() === types.q_tmpl)\n { this.context.pop(); }\n else\n { this.context.push(types.q_tmpl); }\n this.exprAllowed = false;\n };\n\n types$1.star.updateContext = function(prevType) {\n if (prevType === types$1._function) {\n var index = this.context.length - 1;\n if (this.context[index] === types.f_expr)\n { this.context[index] = types.f_expr_gen; }\n else\n { this.context[index] = types.f_gen; }\n }\n this.exprAllowed = true;\n };\n\n types$1.name.updateContext = function(prevType) {\n var allowed = false;\n if (this.options.ecmaVersion >= 6 && prevType !== types$1.dot) {\n if (this.value === \"of\" && !this.exprAllowed ||\n this.value === \"yield\" && this.inGeneratorContext())\n { allowed = true; }\n }\n this.exprAllowed = allowed;\n };\n\n // A recursive descent parser operates by defining functions for all\n // syntactic elements, and recursively calling those, each function\n // advancing the input stream and returning an AST node. Precedence\n // of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n // instead of `(!x)[1]` is handled by the fact that the parser\n // function that parses unary prefix operators is called first, and\n // in turn calls the function that parses `[]` subscripts — that\n // way, it'll receive the node for `x[1]` already parsed, and wraps\n // *that* in the unary operator node.\n //\n // Acorn uses an [operator precedence parser][opp] to handle binary\n // operator precedence, because it is much more compact than using\n // the technique outlined above, which uses different, nesting\n // functions to specify precedence, for all of the ten binary\n // precedence levels that JavaScript defines.\n //\n // [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\n\n\n var pp$5 = Parser.prototype;\n\n // Check if property name clashes with already added.\n // Object/class getters and setters are not allowed to clash —\n // either with each other or with an init property — and in\n // strict mode, init properties are also not allowed to be repeated.\n\n pp$5.checkPropClash = function(prop, propHash, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 9 && prop.type === \"SpreadElement\")\n { return }\n if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand))\n { return }\n var key = prop.key;\n var name;\n switch (key.type) {\n case \"Identifier\": name = key.name; break\n case \"Literal\": name = String(key.value); break\n default: return\n }\n var kind = prop.kind;\n if (this.options.ecmaVersion >= 6) {\n if (name === \"__proto__\" && kind === \"init\") {\n if (propHash.proto) {\n if (refDestructuringErrors) {\n if (refDestructuringErrors.doubleProto < 0) {\n refDestructuringErrors.doubleProto = key.start;\n }\n } else {\n this.raiseRecoverable(key.start, \"Redefinition of __proto__ property\");\n }\n }\n propHash.proto = true;\n }\n return\n }\n name = \"$\" + name;\n var other = propHash[name];\n if (other) {\n var redefinition;\n if (kind === \"init\") {\n redefinition = this.strict && other.init || other.get || other.set;\n } else {\n redefinition = other.init || other[kind];\n }\n if (redefinition)\n { this.raiseRecoverable(key.start, \"Redefinition of property\"); }\n } else {\n other = propHash[name] = {\n init: false,\n get: false,\n set: false\n };\n }\n other[kind] = true;\n };\n\n // ### Expression parsing\n\n // These nest, from the most general expression type at the top to\n // 'atomic', nondivisible expression types at the bottom. Most of\n // the functions will simply let the function(s) below them parse,\n // and, *if* the syntactic construct they handle is present, wrap\n // the AST node that the inner parser gave them in another node.\n\n // Parse a full expression. The optional arguments are used to\n // forbid the `in` operator (in for loops initalization expressions)\n // and provide reference for storing '=' operator inside shorthand\n // property assignment in contexts where both object expression\n // and object pattern might appear (so it's possible to raise\n // delayed syntax error at correct position).\n\n pp$5.parseExpression = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeAssign(forInit, refDestructuringErrors);\n if (this.type === types$1.comma) {\n var node = this.startNodeAt(startPos, startLoc);\n node.expressions = [expr];\n while (this.eat(types$1.comma)) { node.expressions.push(this.parseMaybeAssign(forInit, refDestructuringErrors)); }\n return this.finishNode(node, \"SequenceExpression\")\n }\n return expr\n };\n\n // Parse an assignment expression. This includes applications of\n // operators like `+=`.\n\n pp$5.parseMaybeAssign = function(forInit, refDestructuringErrors, afterLeftParse) {\n if (this.isContextual(\"yield\")) {\n if (this.inGenerator) { return this.parseYield(forInit) }\n // The tokenizer will assume an expression is allowed after\n // `yield`, but this isn't that kind of yield\n else { this.exprAllowed = false; }\n }\n\n var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1, oldDoubleProto = -1;\n if (refDestructuringErrors) {\n oldParenAssign = refDestructuringErrors.parenthesizedAssign;\n oldTrailingComma = refDestructuringErrors.trailingComma;\n oldDoubleProto = refDestructuringErrors.doubleProto;\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = -1;\n } else {\n refDestructuringErrors = new DestructuringErrors;\n ownDestructuringErrors = true;\n }\n\n var startPos = this.start, startLoc = this.startLoc;\n if (this.type === types$1.parenL || this.type === types$1.name) {\n this.potentialArrowAt = this.start;\n this.potentialArrowInForAwait = forInit === \"await\";\n }\n var left = this.parseMaybeConditional(forInit, refDestructuringErrors);\n if (afterLeftParse) { left = afterLeftParse.call(this, left, startPos, startLoc); }\n if (this.type.isAssign) {\n var node = this.startNodeAt(startPos, startLoc);\n node.operator = this.value;\n if (this.type === types$1.eq)\n { left = this.toAssignable(left, false, refDestructuringErrors); }\n if (!ownDestructuringErrors) {\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.doubleProto = -1;\n }\n if (refDestructuringErrors.shorthandAssign >= left.start)\n { refDestructuringErrors.shorthandAssign = -1; } // reset because shorthand default was used correctly\n if (this.type === types$1.eq)\n { this.checkLValPattern(left); }\n else\n { this.checkLValSimple(left); }\n node.left = left;\n this.next();\n node.right = this.parseMaybeAssign(forInit);\n if (oldDoubleProto > -1) { refDestructuringErrors.doubleProto = oldDoubleProto; }\n return this.finishNode(node, \"AssignmentExpression\")\n } else {\n if (ownDestructuringErrors) { this.checkExpressionErrors(refDestructuringErrors, true); }\n }\n if (oldParenAssign > -1) { refDestructuringErrors.parenthesizedAssign = oldParenAssign; }\n if (oldTrailingComma > -1) { refDestructuringErrors.trailingComma = oldTrailingComma; }\n return left\n };\n\n // Parse a ternary conditional (`?:`) operator.\n\n pp$5.parseMaybeConditional = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprOps(forInit, refDestructuringErrors);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n if (this.eat(types$1.question)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.test = expr;\n node.consequent = this.parseMaybeAssign();\n this.expect(types$1.colon);\n node.alternate = this.parseMaybeAssign(forInit);\n return this.finishNode(node, \"ConditionalExpression\")\n }\n return expr\n };\n\n // Start the precedence parser.\n\n pp$5.parseExprOps = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeUnary(refDestructuringErrors, false, false, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n return expr.start === startPos && expr.type === \"ArrowFunctionExpression\" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, forInit)\n };\n\n // Parse binary operators with the operator precedence parsing\n // algorithm. `left` is the left-hand side of the operator.\n // `minPrec` provides context that allows the function to stop and\n // defer further parser to one of its callers when it encounters an\n // operator that has a lower precedence than the set it is parsing.\n\n pp$5.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, forInit) {\n var prec = this.type.binop;\n if (prec != null && (!forInit || this.type !== types$1._in)) {\n if (prec > minPrec) {\n var logical = this.type === types$1.logicalOR || this.type === types$1.logicalAND;\n var coalesce = this.type === types$1.coalesce;\n if (coalesce) {\n // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\n // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.\n prec = types$1.logicalAND.binop;\n }\n var op = this.value;\n this.next();\n var startPos = this.start, startLoc = this.startLoc;\n var right = this.parseExprOp(this.parseMaybeUnary(null, false, false, forInit), startPos, startLoc, prec, forInit);\n var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical || coalesce);\n if ((logical && this.type === types$1.coalesce) || (coalesce && (this.type === types$1.logicalOR || this.type === types$1.logicalAND))) {\n this.raiseRecoverable(this.start, \"Logical expressions and coalesce expressions cannot be mixed. Wrap either by parentheses\");\n }\n return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, forInit)\n }\n }\n return left\n };\n\n pp$5.buildBinary = function(startPos, startLoc, left, right, op, logical) {\n if (right.type === \"PrivateIdentifier\") { this.raise(right.start, \"Private identifier can only be left side of binary expression\"); }\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.operator = op;\n node.right = right;\n return this.finishNode(node, logical ? \"LogicalExpression\" : \"BinaryExpression\")\n };\n\n // Parse unary operators, both prefix and postfix.\n\n pp$5.parseMaybeUnary = function(refDestructuringErrors, sawUnary, incDec, forInit) {\n var startPos = this.start, startLoc = this.startLoc, expr;\n if (this.isContextual(\"await\") && this.canAwait) {\n expr = this.parseAwait(forInit);\n sawUnary = true;\n } else if (this.type.prefix) {\n var node = this.startNode(), update = this.type === types$1.incDec;\n node.operator = this.value;\n node.prefix = true;\n this.next();\n node.argument = this.parseMaybeUnary(null, true, update, forInit);\n this.checkExpressionErrors(refDestructuringErrors, true);\n if (update) { this.checkLValSimple(node.argument); }\n else if (this.strict && node.operator === \"delete\" && isLocalVariableAccess(node.argument))\n { this.raiseRecoverable(node.start, \"Deleting local variable in strict mode\"); }\n else if (node.operator === \"delete\" && isPrivateFieldAccess(node.argument))\n { this.raiseRecoverable(node.start, \"Private fields can not be deleted\"); }\n else { sawUnary = true; }\n expr = this.finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n } else if (!sawUnary && this.type === types$1.privateId) {\n if ((forInit || this.privateNameStack.length === 0) && this.options.checkPrivateFields) { this.unexpected(); }\n expr = this.parsePrivateIdent();\n // only could be private fields in 'in', such as #x in obj\n if (this.type !== types$1._in) { this.unexpected(); }\n } else {\n expr = this.parseExprSubscripts(refDestructuringErrors, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n while (this.type.postfix && !this.canInsertSemicolon()) {\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.operator = this.value;\n node$1.prefix = false;\n node$1.argument = expr;\n this.checkLValSimple(expr);\n this.next();\n expr = this.finishNode(node$1, \"UpdateExpression\");\n }\n }\n\n if (!incDec && this.eat(types$1.starstar)) {\n if (sawUnary)\n { this.unexpected(this.lastTokStart); }\n else\n { return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false, false, forInit), \"**\", false) }\n } else {\n return expr\n }\n };\n\n function isLocalVariableAccess(node) {\n return (\n node.type === \"Identifier\" ||\n node.type === \"ParenthesizedExpression\" && isLocalVariableAccess(node.expression)\n )\n }\n\n function isPrivateFieldAccess(node) {\n return (\n node.type === \"MemberExpression\" && node.property.type === \"PrivateIdentifier\" ||\n node.type === \"ChainExpression\" && isPrivateFieldAccess(node.expression) ||\n node.type === \"ParenthesizedExpression\" && isPrivateFieldAccess(node.expression)\n )\n }\n\n // Parse call, dot, and `[]`-subscript expressions.\n\n pp$5.parseExprSubscripts = function(refDestructuringErrors, forInit) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprAtom(refDestructuringErrors, forInit);\n if (expr.type === \"ArrowFunctionExpression\" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== \")\")\n { return expr }\n var result = this.parseSubscripts(expr, startPos, startLoc, false, forInit);\n if (refDestructuringErrors && result.type === \"MemberExpression\") {\n if (refDestructuringErrors.parenthesizedAssign >= result.start) { refDestructuringErrors.parenthesizedAssign = -1; }\n if (refDestructuringErrors.parenthesizedBind >= result.start) { refDestructuringErrors.parenthesizedBind = -1; }\n if (refDestructuringErrors.trailingComma >= result.start) { refDestructuringErrors.trailingComma = -1; }\n }\n return result\n };\n\n pp$5.parseSubscripts = function(base, startPos, startLoc, noCalls, forInit) {\n var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === \"Identifier\" && base.name === \"async\" &&\n this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 &&\n this.potentialArrowAt === base.start;\n var optionalChained = false;\n\n while (true) {\n var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit);\n\n if (element.optional) { optionalChained = true; }\n if (element === base || element.type === \"ArrowFunctionExpression\") {\n if (optionalChained) {\n var chainNode = this.startNodeAt(startPos, startLoc);\n chainNode.expression = element;\n element = this.finishNode(chainNode, \"ChainExpression\");\n }\n return element\n }\n\n base = element;\n }\n };\n\n pp$5.shouldParseAsyncArrow = function() {\n return !this.canInsertSemicolon() && this.eat(types$1.arrow)\n };\n\n pp$5.parseSubscriptAsyncArrow = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true, forInit)\n };\n\n pp$5.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit) {\n var optionalSupported = this.options.ecmaVersion >= 11;\n var optional = optionalSupported && this.eat(types$1.questionDot);\n if (noCalls && optional) { this.raise(this.lastTokStart, \"Optional chaining cannot appear in the callee of new expressions\"); }\n\n var computed = this.eat(types$1.bracketL);\n if (computed || (optional && this.type !== types$1.parenL && this.type !== types$1.backQuote) || this.eat(types$1.dot)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.object = base;\n if (computed) {\n node.property = this.parseExpression();\n this.expect(types$1.bracketR);\n } else if (this.type === types$1.privateId && base.type !== \"Super\") {\n node.property = this.parsePrivateIdent();\n } else {\n node.property = this.parseIdent(this.options.allowReserved !== \"never\");\n }\n node.computed = !!computed;\n if (optionalSupported) {\n node.optional = optional;\n }\n base = this.finishNode(node, \"MemberExpression\");\n } else if (!noCalls && this.eat(types$1.parenL)) {\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n var exprList = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors);\n if (maybeAsyncArrow && !optional && this.shouldParseAsyncArrow()) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n if (this.awaitIdentPos > 0)\n { this.raise(this.awaitIdentPos, \"Cannot use 'await' as identifier inside an async function\"); }\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.parseSubscriptAsyncArrow(startPos, startLoc, exprList, forInit)\n }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos;\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.callee = base;\n node$1.arguments = exprList;\n if (optionalSupported) {\n node$1.optional = optional;\n }\n base = this.finishNode(node$1, \"CallExpression\");\n } else if (this.type === types$1.backQuote) {\n if (optional || optionalChained) {\n this.raise(this.start, \"Optional chaining cannot appear in the tag of tagged template expressions\");\n }\n var node$2 = this.startNodeAt(startPos, startLoc);\n node$2.tag = base;\n node$2.quasi = this.parseTemplate({isTagged: true});\n base = this.finishNode(node$2, \"TaggedTemplateExpression\");\n }\n return base\n };\n\n // Parse an atomic expression — either a single token that is an\n // expression, an expression started by a keyword like `function` or\n // `new`, or an expression wrapped in punctuation like `()`, `[]`,\n // or `{}`.\n\n pp$5.parseExprAtom = function(refDestructuringErrors, forInit, forNew) {\n // If a division operator appears in an expression position, the\n // tokenizer got confused, and we force it to read a regexp instead.\n if (this.type === types$1.slash) { this.readRegexp(); }\n\n var node, canBeArrow = this.potentialArrowAt === this.start;\n switch (this.type) {\n case types$1._super:\n if (!this.allowSuper)\n { this.raise(this.start, \"'super' keyword outside a method\"); }\n node = this.startNode();\n this.next();\n if (this.type === types$1.parenL && !this.allowDirectSuper)\n { this.raise(node.start, \"super() call outside constructor of a subclass\"); }\n // The `super` keyword can appear at below:\n // SuperProperty:\n // super [ Expression ]\n // super . IdentifierName\n // SuperCall:\n // super ( Arguments )\n if (this.type !== types$1.dot && this.type !== types$1.bracketL && this.type !== types$1.parenL)\n { this.unexpected(); }\n return this.finishNode(node, \"Super\")\n\n case types$1._this:\n node = this.startNode();\n this.next();\n return this.finishNode(node, \"ThisExpression\")\n\n case types$1.name:\n var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc;\n var id = this.parseIdent(false);\n if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === \"async\" && !this.canInsertSemicolon() && this.eat(types$1._function)) {\n this.overrideContext(types.f_expr);\n return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true, forInit)\n }\n if (canBeArrow && !this.canInsertSemicolon()) {\n if (this.eat(types$1.arrow))\n { return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false, forInit) }\n if (this.options.ecmaVersion >= 8 && id.name === \"async\" && this.type === types$1.name && !containsEsc &&\n (!this.potentialArrowInForAwait || this.value !== \"of\" || this.containsEsc)) {\n id = this.parseIdent(false);\n if (this.canInsertSemicolon() || !this.eat(types$1.arrow))\n { this.unexpected(); }\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true, forInit)\n }\n }\n return id\n\n case types$1.regexp:\n var value = this.value;\n node = this.parseLiteral(value.value);\n node.regex = {pattern: value.pattern, flags: value.flags};\n return node\n\n case types$1.num: case types$1.string:\n return this.parseLiteral(this.value)\n\n case types$1._null: case types$1._true: case types$1._false:\n node = this.startNode();\n node.value = this.type === types$1._null ? null : this.type === types$1._true;\n node.raw = this.type.keyword;\n this.next();\n return this.finishNode(node, \"Literal\")\n\n case types$1.parenL:\n var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow, forInit);\n if (refDestructuringErrors) {\n if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr))\n { refDestructuringErrors.parenthesizedAssign = start; }\n if (refDestructuringErrors.parenthesizedBind < 0)\n { refDestructuringErrors.parenthesizedBind = start; }\n }\n return expr\n\n case types$1.bracketL:\n node = this.startNode();\n this.next();\n node.elements = this.parseExprList(types$1.bracketR, true, true, refDestructuringErrors);\n return this.finishNode(node, \"ArrayExpression\")\n\n case types$1.braceL:\n this.overrideContext(types.b_expr);\n return this.parseObj(false, refDestructuringErrors)\n\n case types$1._function:\n node = this.startNode();\n this.next();\n return this.parseFunction(node, 0)\n\n case types$1._class:\n return this.parseClass(this.startNode(), false)\n\n case types$1._new:\n return this.parseNew()\n\n case types$1.backQuote:\n return this.parseTemplate()\n\n case types$1._import:\n if (this.options.ecmaVersion >= 11) {\n return this.parseExprImport(forNew)\n } else {\n return this.unexpected()\n }\n\n default:\n return this.parseExprAtomDefault()\n }\n };\n\n pp$5.parseExprAtomDefault = function() {\n this.unexpected();\n };\n\n pp$5.parseExprImport = function(forNew) {\n var node = this.startNode();\n\n // Consume `import` as an identifier for `import.meta`.\n // Because `this.parseIdent(true)` doesn't check escape sequences, it needs the check of `this.containsEsc`.\n if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword import\"); }\n this.next();\n\n if (this.type === types$1.parenL && !forNew) {\n return this.parseDynamicImport(node)\n } else if (this.type === types$1.dot) {\n var meta = this.startNodeAt(node.start, node.loc && node.loc.start);\n meta.name = \"import\";\n node.meta = this.finishNode(meta, \"Identifier\");\n return this.parseImportMeta(node)\n } else {\n this.unexpected();\n }\n };\n\n pp$5.parseDynamicImport = function(node) {\n this.next(); // skip `(`\n\n // Parse node.source.\n node.source = this.parseMaybeAssign();\n\n if (this.options.ecmaVersion >= 16) {\n if (!this.eat(types$1.parenR)) {\n this.expect(types$1.comma);\n if (!this.afterTrailingComma(types$1.parenR)) {\n node.options = this.parseMaybeAssign();\n if (!this.eat(types$1.parenR)) {\n this.expect(types$1.comma);\n if (!this.afterTrailingComma(types$1.parenR)) {\n this.unexpected();\n }\n }\n } else {\n node.options = null;\n }\n } else {\n node.options = null;\n }\n } else {\n // Verify ending.\n if (!this.eat(types$1.parenR)) {\n var errorPos = this.start;\n if (this.eat(types$1.comma) && this.eat(types$1.parenR)) {\n this.raiseRecoverable(errorPos, \"Trailing comma is not allowed in import()\");\n } else {\n this.unexpected(errorPos);\n }\n }\n }\n\n return this.finishNode(node, \"ImportExpression\")\n };\n\n pp$5.parseImportMeta = function(node) {\n this.next(); // skip `.`\n\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n\n if (node.property.name !== \"meta\")\n { this.raiseRecoverable(node.property.start, \"The only valid meta property for import is 'import.meta'\"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, \"'import.meta' must not contain escaped characters\"); }\n if (this.options.sourceType !== \"module\" && !this.options.allowImportExportEverywhere)\n { this.raiseRecoverable(node.start, \"Cannot use 'import.meta' outside a module\"); }\n\n return this.finishNode(node, \"MetaProperty\")\n };\n\n pp$5.parseLiteral = function(value) {\n var node = this.startNode();\n node.value = value;\n node.raw = this.input.slice(this.start, this.end);\n if (node.raw.charCodeAt(node.raw.length - 1) === 110)\n { node.bigint = node.value != null ? node.value.toString() : node.raw.slice(0, -1).replace(/_/g, \"\"); }\n this.next();\n return this.finishNode(node, \"Literal\")\n };\n\n pp$5.parseParenExpression = function() {\n this.expect(types$1.parenL);\n var val = this.parseExpression();\n this.expect(types$1.parenR);\n return val\n };\n\n pp$5.shouldParseArrow = function(exprList) {\n return !this.canInsertSemicolon()\n };\n\n pp$5.parseParenAndDistinguishExpression = function(canBeArrow, forInit) {\n var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8;\n if (this.options.ecmaVersion >= 6) {\n this.next();\n\n var innerStartPos = this.start, innerStartLoc = this.startLoc;\n var exprList = [], first = true, lastIsComma = false;\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart;\n this.yieldPos = 0;\n this.awaitPos = 0;\n // Do not save awaitIdentPos to allow checking awaits nested in parameters\n while (this.type !== types$1.parenR) {\n first ? first = false : this.expect(types$1.comma);\n if (allowTrailingComma && this.afterTrailingComma(types$1.parenR, true)) {\n lastIsComma = true;\n break\n } else if (this.type === types$1.ellipsis) {\n spreadStart = this.start;\n exprList.push(this.parseParenItem(this.parseRestBinding()));\n if (this.type === types$1.comma) {\n this.raiseRecoverable(\n this.start,\n \"Comma is not permitted after the rest element\"\n );\n }\n break\n } else {\n exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem));\n }\n }\n var innerEndPos = this.lastTokEnd, innerEndLoc = this.lastTokEndLoc;\n this.expect(types$1.parenR);\n\n if (canBeArrow && this.shouldParseArrow(exprList) && this.eat(types$1.arrow)) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n return this.parseParenArrowList(startPos, startLoc, exprList, forInit)\n }\n\n if (!exprList.length || lastIsComma) { this.unexpected(this.lastTokStart); }\n if (spreadStart) { this.unexpected(spreadStart); }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n\n if (exprList.length > 1) {\n val = this.startNodeAt(innerStartPos, innerStartLoc);\n val.expressions = exprList;\n this.finishNodeAt(val, \"SequenceExpression\", innerEndPos, innerEndLoc);\n } else {\n val = exprList[0];\n }\n } else {\n val = this.parseParenExpression();\n }\n\n if (this.options.preserveParens) {\n var par = this.startNodeAt(startPos, startLoc);\n par.expression = val;\n return this.finishNode(par, \"ParenthesizedExpression\")\n } else {\n return val\n }\n };\n\n pp$5.parseParenItem = function(item) {\n return item\n };\n\n pp$5.parseParenArrowList = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, false, forInit)\n };\n\n // New's precedence is slightly tricky. It must allow its argument to\n // be a `[]` or dot subscript expression, but not a call — at least,\n // not without wrapping it in parentheses. Thus, it uses the noCalls\n // argument to parseSubscripts to prevent it from consuming the\n // argument list.\n\n var empty = [];\n\n pp$5.parseNew = function() {\n if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword new\"); }\n var node = this.startNode();\n this.next();\n if (this.options.ecmaVersion >= 6 && this.type === types$1.dot) {\n var meta = this.startNodeAt(node.start, node.loc && node.loc.start);\n meta.name = \"new\";\n node.meta = this.finishNode(meta, \"Identifier\");\n this.next();\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n if (node.property.name !== \"target\")\n { this.raiseRecoverable(node.property.start, \"The only valid meta property for new is 'new.target'\"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, \"'new.target' must not contain escaped characters\"); }\n if (!this.allowNewDotTarget)\n { this.raiseRecoverable(node.start, \"'new.target' can only be used in functions and class static block\"); }\n return this.finishNode(node, \"MetaProperty\")\n }\n var startPos = this.start, startLoc = this.startLoc;\n node.callee = this.parseSubscripts(this.parseExprAtom(null, false, true), startPos, startLoc, true, false);\n if (this.eat(types$1.parenL)) { node.arguments = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false); }\n else { node.arguments = empty; }\n return this.finishNode(node, \"NewExpression\")\n };\n\n // Parse template expression.\n\n pp$5.parseTemplateElement = function(ref) {\n var isTagged = ref.isTagged;\n\n var elem = this.startNode();\n if (this.type === types$1.invalidTemplate) {\n if (!isTagged) {\n this.raiseRecoverable(this.start, \"Bad escape sequence in untagged template literal\");\n }\n elem.value = {\n raw: this.value.replace(/\\r\\n?/g, \"\\n\"),\n cooked: null\n };\n } else {\n elem.value = {\n raw: this.input.slice(this.start, this.end).replace(/\\r\\n?/g, \"\\n\"),\n cooked: this.value\n };\n }\n this.next();\n elem.tail = this.type === types$1.backQuote;\n return this.finishNode(elem, \"TemplateElement\")\n };\n\n pp$5.parseTemplate = function(ref) {\n if ( ref === void 0 ) ref = {};\n var isTagged = ref.isTagged; if ( isTagged === void 0 ) isTagged = false;\n\n var node = this.startNode();\n this.next();\n node.expressions = [];\n var curElt = this.parseTemplateElement({isTagged: isTagged});\n node.quasis = [curElt];\n while (!curElt.tail) {\n if (this.type === types$1.eof) { this.raise(this.pos, \"Unterminated template literal\"); }\n this.expect(types$1.dollarBraceL);\n node.expressions.push(this.parseExpression());\n this.expect(types$1.braceR);\n node.quasis.push(curElt = this.parseTemplateElement({isTagged: isTagged}));\n }\n this.next();\n return this.finishNode(node, \"TemplateLiteral\")\n };\n\n pp$5.isAsyncProp = function(prop) {\n return !prop.computed && prop.key.type === \"Identifier\" && prop.key.name === \"async\" &&\n (this.type === types$1.name || this.type === types$1.num || this.type === types$1.string || this.type === types$1.bracketL || this.type.keyword || (this.options.ecmaVersion >= 9 && this.type === types$1.star)) &&\n !lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n };\n\n // Parse an object literal or binding pattern.\n\n pp$5.parseObj = function(isPattern, refDestructuringErrors) {\n var node = this.startNode(), first = true, propHash = {};\n node.properties = [];\n this.next();\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.options.ecmaVersion >= 5 && this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n var prop = this.parseProperty(isPattern, refDestructuringErrors);\n if (!isPattern) { this.checkPropClash(prop, propHash, refDestructuringErrors); }\n node.properties.push(prop);\n }\n return this.finishNode(node, isPattern ? \"ObjectPattern\" : \"ObjectExpression\")\n };\n\n pp$5.parseProperty = function(isPattern, refDestructuringErrors) {\n var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc;\n if (this.options.ecmaVersion >= 9 && this.eat(types$1.ellipsis)) {\n if (isPattern) {\n prop.argument = this.parseIdent(false);\n if (this.type === types$1.comma) {\n this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\");\n }\n return this.finishNode(prop, \"RestElement\")\n }\n // Parse argument.\n prop.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n // To disallow trailing comma via `this.toAssignable()`.\n if (this.type === types$1.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) {\n refDestructuringErrors.trailingComma = this.start;\n }\n // Finish\n return this.finishNode(prop, \"SpreadElement\")\n }\n if (this.options.ecmaVersion >= 6) {\n prop.method = false;\n prop.shorthand = false;\n if (isPattern || refDestructuringErrors) {\n startPos = this.start;\n startLoc = this.startLoc;\n }\n if (!isPattern)\n { isGenerator = this.eat(types$1.star); }\n }\n var containsEsc = this.containsEsc;\n this.parsePropertyName(prop);\n if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {\n isAsync = true;\n isGenerator = this.options.ecmaVersion >= 9 && this.eat(types$1.star);\n this.parsePropertyName(prop);\n } else {\n isAsync = false;\n }\n this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc);\n return this.finishNode(prop, \"Property\")\n };\n\n pp$5.parseGetterSetter = function(prop) {\n var kind = prop.key.name;\n this.parsePropertyName(prop);\n prop.value = this.parseMethod(false);\n prop.kind = kind;\n var paramCount = prop.kind === \"get\" ? 0 : 1;\n if (prop.value.params.length !== paramCount) {\n var start = prop.value.start;\n if (prop.kind === \"get\")\n { this.raiseRecoverable(start, \"getter should have no params\"); }\n else\n { this.raiseRecoverable(start, \"setter should have exactly one param\"); }\n } else {\n if (prop.kind === \"set\" && prop.value.params[0].type === \"RestElement\")\n { this.raiseRecoverable(prop.value.params[0].start, \"Setter cannot use rest params\"); }\n }\n };\n\n pp$5.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {\n if ((isGenerator || isAsync) && this.type === types$1.colon)\n { this.unexpected(); }\n\n if (this.eat(types$1.colon)) {\n prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);\n prop.kind = \"init\";\n } else if (this.options.ecmaVersion >= 6 && this.type === types$1.parenL) {\n if (isPattern) { this.unexpected(); }\n prop.method = true;\n prop.value = this.parseMethod(isGenerator, isAsync);\n prop.kind = \"init\";\n } else if (!isPattern && !containsEsc &&\n this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === \"Identifier\" &&\n (prop.key.name === \"get\" || prop.key.name === \"set\") &&\n (this.type !== types$1.comma && this.type !== types$1.braceR && this.type !== types$1.eq)) {\n if (isGenerator || isAsync) { this.unexpected(); }\n this.parseGetterSetter(prop);\n } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === \"Identifier\") {\n if (isGenerator || isAsync) { this.unexpected(); }\n this.checkUnreserved(prop.key);\n if (prop.key.name === \"await\" && !this.awaitIdentPos)\n { this.awaitIdentPos = startPos; }\n if (isPattern) {\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else if (this.type === types$1.eq && refDestructuringErrors) {\n if (refDestructuringErrors.shorthandAssign < 0)\n { refDestructuringErrors.shorthandAssign = this.start; }\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else {\n prop.value = this.copyNode(prop.key);\n }\n prop.kind = \"init\";\n prop.shorthand = true;\n } else { this.unexpected(); }\n };\n\n pp$5.parsePropertyName = function(prop) {\n if (this.options.ecmaVersion >= 6) {\n if (this.eat(types$1.bracketL)) {\n prop.computed = true;\n prop.key = this.parseMaybeAssign();\n this.expect(types$1.bracketR);\n return prop.key\n } else {\n prop.computed = false;\n }\n }\n return prop.key = this.type === types$1.num || this.type === types$1.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== \"never\")\n };\n\n // Initialize empty function node.\n\n pp$5.initFunction = function(node) {\n node.id = null;\n if (this.options.ecmaVersion >= 6) { node.generator = node.expression = false; }\n if (this.options.ecmaVersion >= 8) { node.async = false; }\n };\n\n // Parse object or class method.\n\n pp$5.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {\n var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.initFunction(node);\n if (this.options.ecmaVersion >= 6)\n { node.generator = isGenerator; }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));\n\n this.expect(types$1.parenL);\n node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n this.parseFunctionBody(node, false, true, false);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"FunctionExpression\")\n };\n\n // Parse arrow function expression with given parameters.\n\n pp$5.parseArrowExpression = function(node, params, isAsync, forInit) {\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW);\n this.initFunction(node);\n if (this.options.ecmaVersion >= 8) { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n\n node.params = this.toAssignableList(params, true);\n this.parseFunctionBody(node, true, false, forInit);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"ArrowFunctionExpression\")\n };\n\n // Parse function body and check parameters.\n\n pp$5.parseFunctionBody = function(node, isArrowFunction, isMethod, forInit) {\n var isExpression = isArrowFunction && this.type !== types$1.braceL;\n var oldStrict = this.strict, useStrict = false;\n\n if (isExpression) {\n node.body = this.parseMaybeAssign(forInit);\n node.expression = true;\n this.checkParams(node, false);\n } else {\n var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params);\n if (!oldStrict || nonSimple) {\n useStrict = this.strictDirective(this.end);\n // If this is a strict mode function, verify that argument names\n // are not repeated, and it does not try to bind the words `eval`\n // or `arguments`.\n if (useStrict && nonSimple)\n { this.raiseRecoverable(node.start, \"Illegal 'use strict' directive in function with non-simple parameter list\"); }\n }\n // Start a new scope with regard to labels and the `inFunction`\n // flag (restore them to their old value afterwards).\n var oldLabels = this.labels;\n this.labels = [];\n if (useStrict) { this.strict = true; }\n\n // Add the params to varDeclaredNames to ensure that an error is thrown\n // if a let/const declaration in the function clashes with one of the params.\n this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params));\n // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n if (this.strict && node.id) { this.checkLValSimple(node.id, BIND_OUTSIDE); }\n node.body = this.parseBlock(false, undefined, useStrict && !oldStrict);\n node.expression = false;\n this.adaptDirectivePrologue(node.body.body);\n this.labels = oldLabels;\n }\n this.exitScope();\n };\n\n pp$5.isSimpleParamList = function(params) {\n for (var i = 0, list = params; i < list.length; i += 1)\n {\n var param = list[i];\n\n if (param.type !== \"Identifier\") { return false\n } }\n return true\n };\n\n // Checks function params for various disallowed patterns such as using \"eval\"\n // or \"arguments\" and duplicate parameters.\n\n pp$5.checkParams = function(node, allowDuplicates) {\n var nameHash = Object.create(null);\n for (var i = 0, list = node.params; i < list.length; i += 1)\n {\n var param = list[i];\n\n this.checkLValInnerPattern(param, BIND_VAR, allowDuplicates ? null : nameHash);\n }\n };\n\n // Parses a comma-separated list of expressions, and returns them as\n // an array. `close` is the token type that ends the list, and\n // `allowEmpty` can be turned on to allow subsequent commas with\n // nothing in between them to be parsed as `null` (which is needed\n // for array literals).\n\n pp$5.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (!first) {\n this.expect(types$1.comma);\n if (allowTrailingComma && this.afterTrailingComma(close)) { break }\n } else { first = false; }\n\n var elt = (void 0);\n if (allowEmpty && this.type === types$1.comma)\n { elt = null; }\n else if (this.type === types$1.ellipsis) {\n elt = this.parseSpread(refDestructuringErrors);\n if (refDestructuringErrors && this.type === types$1.comma && refDestructuringErrors.trailingComma < 0)\n { refDestructuringErrors.trailingComma = this.start; }\n } else {\n elt = this.parseMaybeAssign(false, refDestructuringErrors);\n }\n elts.push(elt);\n }\n return elts\n };\n\n pp$5.checkUnreserved = function(ref) {\n var start = ref.start;\n var end = ref.end;\n var name = ref.name;\n\n if (this.inGenerator && name === \"yield\")\n { this.raiseRecoverable(start, \"Cannot use 'yield' as identifier inside a generator\"); }\n if (this.inAsync && name === \"await\")\n { this.raiseRecoverable(start, \"Cannot use 'await' as identifier inside an async function\"); }\n if (!(this.currentThisScope().flags & SCOPE_VAR) && name === \"arguments\")\n { this.raiseRecoverable(start, \"Cannot use 'arguments' in class field initializer\"); }\n if (this.inClassStaticBlock && (name === \"arguments\" || name === \"await\"))\n { this.raise(start, (\"Cannot use \" + name + \" in class static initialization block\")); }\n if (this.keywords.test(name))\n { this.raise(start, (\"Unexpected keyword '\" + name + \"'\")); }\n if (this.options.ecmaVersion < 6 &&\n this.input.slice(start, end).indexOf(\"\\\\\") !== -1) { return }\n var re = this.strict ? this.reservedWordsStrict : this.reservedWords;\n if (re.test(name)) {\n if (!this.inAsync && name === \"await\")\n { this.raiseRecoverable(start, \"Cannot use keyword 'await' outside an async function\"); }\n this.raiseRecoverable(start, (\"The keyword '\" + name + \"' is reserved\"));\n }\n };\n\n // Parse the next token as an identifier. If `liberal` is true (used\n // when parsing properties), it will also convert keywords into\n // identifiers.\n\n pp$5.parseIdent = function(liberal) {\n var node = this.parseIdentNode();\n this.next(!!liberal);\n this.finishNode(node, \"Identifier\");\n if (!liberal) {\n this.checkUnreserved(node);\n if (node.name === \"await\" && !this.awaitIdentPos)\n { this.awaitIdentPos = node.start; }\n }\n return node\n };\n\n pp$5.parseIdentNode = function() {\n var node = this.startNode();\n if (this.type === types$1.name) {\n node.name = this.value;\n } else if (this.type.keyword) {\n node.name = this.type.keyword;\n\n // To fix https://github.com/acornjs/acorn/issues/575\n // `class` and `function` keywords push new context into this.context.\n // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.\n // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword\n if ((node.name === \"class\" || node.name === \"function\") &&\n (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) {\n this.context.pop();\n }\n this.type = types$1.name;\n } else {\n this.unexpected();\n }\n return node\n };\n\n pp$5.parsePrivateIdent = function() {\n var node = this.startNode();\n if (this.type === types$1.privateId) {\n node.name = this.value;\n } else {\n this.unexpected();\n }\n this.next();\n this.finishNode(node, \"PrivateIdentifier\");\n\n // For validating existence\n if (this.options.checkPrivateFields) {\n if (this.privateNameStack.length === 0) {\n this.raise(node.start, (\"Private field '#\" + (node.name) + \"' must be declared in an enclosing class\"));\n } else {\n this.privateNameStack[this.privateNameStack.length - 1].used.push(node);\n }\n }\n\n return node\n };\n\n // Parses yield expression inside generator.\n\n pp$5.parseYield = function(forInit) {\n if (!this.yieldPos) { this.yieldPos = this.start; }\n\n var node = this.startNode();\n this.next();\n if (this.type === types$1.semi || this.canInsertSemicolon() || (this.type !== types$1.star && !this.type.startsExpr)) {\n node.delegate = false;\n node.argument = null;\n } else {\n node.delegate = this.eat(types$1.star);\n node.argument = this.parseMaybeAssign(forInit);\n }\n return this.finishNode(node, \"YieldExpression\")\n };\n\n pp$5.parseAwait = function(forInit) {\n if (!this.awaitPos) { this.awaitPos = this.start; }\n\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeUnary(null, true, false, forInit);\n return this.finishNode(node, \"AwaitExpression\")\n };\n\n var pp$4 = Parser.prototype;\n\n // This function is used to raise exceptions on parse errors. It\n // takes an offset integer (into the current `input`) to indicate\n // the location of the error, attaches the position to the end\n // of the error message, and then raises a `SyntaxError` with that\n // message.\n\n pp$4.raise = function(pos, message) {\n var loc = getLineInfo(this.input, pos);\n message += \" (\" + loc.line + \":\" + loc.column + \")\";\n if (this.sourceFile) {\n message += \" in \" + this.sourceFile;\n }\n var err = new SyntaxError(message);\n err.pos = pos; err.loc = loc; err.raisedAt = this.pos;\n throw err\n };\n\n pp$4.raiseRecoverable = pp$4.raise;\n\n pp$4.curPosition = function() {\n if (this.options.locations) {\n return new Position(this.curLine, this.pos - this.lineStart)\n }\n };\n\n var pp$3 = Parser.prototype;\n\n var Scope = function Scope(flags) {\n this.flags = flags;\n // A list of var-declared names in the current lexical scope\n this.var = [];\n // A list of lexically-declared names in the current lexical scope\n this.lexical = [];\n // A list of lexically-declared FunctionDeclaration names in the current lexical scope\n this.functions = [];\n };\n\n // The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.\n\n pp$3.enterScope = function(flags) {\n this.scopeStack.push(new Scope(flags));\n };\n\n pp$3.exitScope = function() {\n this.scopeStack.pop();\n };\n\n // The spec says:\n // > At the top level of a function, or script, function declarations are\n // > treated like var declarations rather than like lexical declarations.\n pp$3.treatFunctionsAsVarInScope = function(scope) {\n return (scope.flags & SCOPE_FUNCTION) || !this.inModule && (scope.flags & SCOPE_TOP)\n };\n\n pp$3.declareName = function(name, bindingType, pos) {\n var redeclared = false;\n if (bindingType === BIND_LEXICAL) {\n var scope = this.currentScope();\n redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1;\n scope.lexical.push(name);\n if (this.inModule && (scope.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n } else if (bindingType === BIND_SIMPLE_CATCH) {\n var scope$1 = this.currentScope();\n scope$1.lexical.push(name);\n } else if (bindingType === BIND_FUNCTION) {\n var scope$2 = this.currentScope();\n if (this.treatFunctionsAsVar)\n { redeclared = scope$2.lexical.indexOf(name) > -1; }\n else\n { redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1; }\n scope$2.functions.push(name);\n } else {\n for (var i = this.scopeStack.length - 1; i >= 0; --i) {\n var scope$3 = this.scopeStack[i];\n if (scope$3.lexical.indexOf(name) > -1 && !((scope$3.flags & SCOPE_SIMPLE_CATCH) && scope$3.lexical[0] === name) ||\n !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) {\n redeclared = true;\n break\n }\n scope$3.var.push(name);\n if (this.inModule && (scope$3.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n if (scope$3.flags & SCOPE_VAR) { break }\n }\n }\n if (redeclared) { this.raiseRecoverable(pos, (\"Identifier '\" + name + \"' has already been declared\")); }\n };\n\n pp$3.checkLocalExport = function(id) {\n // scope.functions must be empty as Module code is always strict.\n if (this.scopeStack[0].lexical.indexOf(id.name) === -1 &&\n this.scopeStack[0].var.indexOf(id.name) === -1) {\n this.undefinedExports[id.name] = id;\n }\n };\n\n pp$3.currentScope = function() {\n return this.scopeStack[this.scopeStack.length - 1]\n };\n\n pp$3.currentVarScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & (SCOPE_VAR | SCOPE_CLASS_FIELD_INIT | SCOPE_CLASS_STATIC_BLOCK)) { return scope }\n }\n };\n\n // Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\n pp$3.currentThisScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & (SCOPE_VAR | SCOPE_CLASS_FIELD_INIT | SCOPE_CLASS_STATIC_BLOCK) &&\n !(scope.flags & SCOPE_ARROW)) { return scope }\n }\n };\n\n var Node = function Node(parser, pos, loc) {\n this.type = \"\";\n this.start = pos;\n this.end = 0;\n if (parser.options.locations)\n { this.loc = new SourceLocation(parser, loc); }\n if (parser.options.directSourceFile)\n { this.sourceFile = parser.options.directSourceFile; }\n if (parser.options.ranges)\n { this.range = [pos, 0]; }\n };\n\n // Start an AST node, attaching a start offset.\n\n var pp$2 = Parser.prototype;\n\n pp$2.startNode = function() {\n return new Node(this, this.start, this.startLoc)\n };\n\n pp$2.startNodeAt = function(pos, loc) {\n return new Node(this, pos, loc)\n };\n\n // Finish an AST node, adding `type` and `end` properties.\n\n function finishNodeAt(node, type, pos, loc) {\n node.type = type;\n node.end = pos;\n if (this.options.locations)\n { node.loc.end = loc; }\n if (this.options.ranges)\n { node.range[1] = pos; }\n return node\n }\n\n pp$2.finishNode = function(node, type) {\n return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc)\n };\n\n // Finish node at given position\n\n pp$2.finishNodeAt = function(node, type, pos, loc) {\n return finishNodeAt.call(this, node, type, pos, loc)\n };\n\n pp$2.copyNode = function(node) {\n var newNode = new Node(this, node.start, this.startLoc);\n for (var prop in node) { newNode[prop] = node[prop]; }\n return newNode\n };\n\n // This file was generated by \"bin/generate-unicode-script-values.js\". Do not modify manually!\n var scriptValuesAddedInUnicode = \"Berf Beria_Erfe Gara Garay Gukh Gurung_Khema Hrkt Katakana_Or_Hiragana Kawi Kirat_Rai Krai Nag_Mundari Nagm Ol_Onal Onao Sidetic Sidt Sunu Sunuwar Tai_Yo Tayo Todhri Todr Tolong_Siki Tols Tulu_Tigalari Tutg Unknown Zzzz\";\n\n // This file contains Unicode properties extracted from the ECMAScript specification.\n // The lists are extracted like so:\n // $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)\n\n // #table-binary-unicode-properties\n var ecma9BinaryProperties = \"ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS\";\n var ecma10BinaryProperties = ecma9BinaryProperties + \" Extended_Pictographic\";\n var ecma11BinaryProperties = ecma10BinaryProperties;\n var ecma12BinaryProperties = ecma11BinaryProperties + \" EBase EComp EMod EPres ExtPict\";\n var ecma13BinaryProperties = ecma12BinaryProperties;\n var ecma14BinaryProperties = ecma13BinaryProperties;\n\n var unicodeBinaryProperties = {\n 9: ecma9BinaryProperties,\n 10: ecma10BinaryProperties,\n 11: ecma11BinaryProperties,\n 12: ecma12BinaryProperties,\n 13: ecma13BinaryProperties,\n 14: ecma14BinaryProperties\n };\n\n // #table-binary-unicode-properties-of-strings\n var ecma14BinaryPropertiesOfStrings = \"Basic_Emoji Emoji_Keycap_Sequence RGI_Emoji_Modifier_Sequence RGI_Emoji_Flag_Sequence RGI_Emoji_Tag_Sequence RGI_Emoji_ZWJ_Sequence RGI_Emoji\";\n\n var unicodeBinaryPropertiesOfStrings = {\n 9: \"\",\n 10: \"\",\n 11: \"\",\n 12: \"\",\n 13: \"\",\n 14: ecma14BinaryPropertiesOfStrings\n };\n\n // #table-unicode-general-category-values\n var unicodeGeneralCategoryValues = \"Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu\";\n\n // #table-unicode-script-values\n var ecma9ScriptValues = \"Adlam Adlm Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb\";\n var ecma10ScriptValues = ecma9ScriptValues + \" Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd\";\n var ecma11ScriptValues = ecma10ScriptValues + \" Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho\";\n var ecma12ScriptValues = ecma11ScriptValues + \" Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi\";\n var ecma13ScriptValues = ecma12ScriptValues + \" Cypro_Minoan Cpmn Old_Uyghur Ougr Tangsa Tnsa Toto Vithkuqi Vith\";\n var ecma14ScriptValues = ecma13ScriptValues + \" \" + scriptValuesAddedInUnicode;\n\n var unicodeScriptValues = {\n 9: ecma9ScriptValues,\n 10: ecma10ScriptValues,\n 11: ecma11ScriptValues,\n 12: ecma12ScriptValues,\n 13: ecma13ScriptValues,\n 14: ecma14ScriptValues\n };\n\n var data = {};\n function buildUnicodeData(ecmaVersion) {\n var d = data[ecmaVersion] = {\n binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion] + \" \" + unicodeGeneralCategoryValues),\n binaryOfStrings: wordsRegexp(unicodeBinaryPropertiesOfStrings[ecmaVersion]),\n nonBinary: {\n General_Category: wordsRegexp(unicodeGeneralCategoryValues),\n Script: wordsRegexp(unicodeScriptValues[ecmaVersion])\n }\n };\n d.nonBinary.Script_Extensions = d.nonBinary.Script;\n\n d.nonBinary.gc = d.nonBinary.General_Category;\n d.nonBinary.sc = d.nonBinary.Script;\n d.nonBinary.scx = d.nonBinary.Script_Extensions;\n }\n\n for (var i = 0, list = [9, 10, 11, 12, 13, 14]; i < list.length; i += 1) {\n var ecmaVersion = list[i];\n\n buildUnicodeData(ecmaVersion);\n }\n\n var pp$1 = Parser.prototype;\n\n // Track disjunction structure to determine whether a duplicate\n // capture group name is allowed because it is in a separate branch.\n var BranchID = function BranchID(parent, base) {\n // Parent disjunction branch\n this.parent = parent;\n // Identifies this set of sibling branches\n this.base = base || this;\n };\n\n BranchID.prototype.separatedFrom = function separatedFrom (alt) {\n // A branch is separate from another branch if they or any of\n // their parents are siblings in a given disjunction\n for (var self = this; self; self = self.parent) {\n for (var other = alt; other; other = other.parent) {\n if (self.base === other.base && self !== other) { return true }\n }\n }\n return false\n };\n\n BranchID.prototype.sibling = function sibling () {\n return new BranchID(this.parent, this.base)\n };\n\n var RegExpValidationState = function RegExpValidationState(parser) {\n this.parser = parser;\n this.validFlags = \"gim\" + (parser.options.ecmaVersion >= 6 ? \"uy\" : \"\") + (parser.options.ecmaVersion >= 9 ? \"s\" : \"\") + (parser.options.ecmaVersion >= 13 ? \"d\" : \"\") + (parser.options.ecmaVersion >= 15 ? \"v\" : \"\");\n this.unicodeProperties = data[parser.options.ecmaVersion >= 14 ? 14 : parser.options.ecmaVersion];\n this.source = \"\";\n this.flags = \"\";\n this.start = 0;\n this.switchU = false;\n this.switchV = false;\n this.switchN = false;\n this.pos = 0;\n this.lastIntValue = 0;\n this.lastStringValue = \"\";\n this.lastAssertionIsQuantifiable = false;\n this.numCapturingParens = 0;\n this.maxBackReference = 0;\n this.groupNames = Object.create(null);\n this.backReferenceNames = [];\n this.branchID = null;\n };\n\n RegExpValidationState.prototype.reset = function reset (start, pattern, flags) {\n var unicodeSets = flags.indexOf(\"v\") !== -1;\n var unicode = flags.indexOf(\"u\") !== -1;\n this.start = start | 0;\n this.source = pattern + \"\";\n this.flags = flags;\n if (unicodeSets && this.parser.options.ecmaVersion >= 15) {\n this.switchU = true;\n this.switchV = true;\n this.switchN = true;\n } else {\n this.switchU = unicode && this.parser.options.ecmaVersion >= 6;\n this.switchV = false;\n this.switchN = unicode && this.parser.options.ecmaVersion >= 9;\n }\n };\n\n RegExpValidationState.prototype.raise = function raise (message) {\n this.parser.raiseRecoverable(this.start, (\"Invalid regular expression: /\" + (this.source) + \"/: \" + message));\n };\n\n // If u flag is given, this returns the code point at the index (it combines a surrogate pair).\n // Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).\n RegExpValidationState.prototype.at = function at (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return -1\n }\n var c = s.charCodeAt(i);\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {\n return c\n }\n var next = s.charCodeAt(i + 1);\n return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c\n };\n\n RegExpValidationState.prototype.nextIndex = function nextIndex (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return l\n }\n var c = s.charCodeAt(i), next;\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l ||\n (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) {\n return i + 1\n }\n return i + 2\n };\n\n RegExpValidationState.prototype.current = function current (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.pos, forceU)\n };\n\n RegExpValidationState.prototype.lookahead = function lookahead (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.nextIndex(this.pos, forceU), forceU)\n };\n\n RegExpValidationState.prototype.advance = function advance (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n this.pos = this.nextIndex(this.pos, forceU);\n };\n\n RegExpValidationState.prototype.eat = function eat (ch, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n if (this.current(forceU) === ch) {\n this.advance(forceU);\n return true\n }\n return false\n };\n\n RegExpValidationState.prototype.eatChars = function eatChars (chs, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var pos = this.pos;\n for (var i = 0, list = chs; i < list.length; i += 1) {\n var ch = list[i];\n\n var current = this.at(pos, forceU);\n if (current === -1 || current !== ch) {\n return false\n }\n pos = this.nextIndex(pos, forceU);\n }\n this.pos = pos;\n return true\n };\n\n /**\n * Validate the flags part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\n pp$1.validateRegExpFlags = function(state) {\n var validFlags = state.validFlags;\n var flags = state.flags;\n\n var u = false;\n var v = false;\n\n for (var i = 0; i < flags.length; i++) {\n var flag = flags.charAt(i);\n if (validFlags.indexOf(flag) === -1) {\n this.raise(state.start, \"Invalid regular expression flag\");\n }\n if (flags.indexOf(flag, i + 1) > -1) {\n this.raise(state.start, \"Duplicate regular expression flag\");\n }\n if (flag === \"u\") { u = true; }\n if (flag === \"v\") { v = true; }\n }\n if (this.options.ecmaVersion >= 15 && u && v) {\n this.raise(state.start, \"Invalid regular expression flag\");\n }\n };\n\n function hasProp(obj) {\n for (var _ in obj) { return true }\n return false\n }\n\n /**\n * Validate the pattern part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\n pp$1.validateRegExpPattern = function(state) {\n this.regexp_pattern(state);\n\n // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of\n // parsing contains a |GroupName|, reparse with the goal symbol\n // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*\n // exception if _P_ did not conform to the grammar, if any elements of _P_\n // were not matched by the parse, or if any Early Error conditions exist.\n if (!state.switchN && this.options.ecmaVersion >= 9 && hasProp(state.groupNames)) {\n state.switchN = true;\n this.regexp_pattern(state);\n }\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\n pp$1.regexp_pattern = function(state) {\n state.pos = 0;\n state.lastIntValue = 0;\n state.lastStringValue = \"\";\n state.lastAssertionIsQuantifiable = false;\n state.numCapturingParens = 0;\n state.maxBackReference = 0;\n state.groupNames = Object.create(null);\n state.backReferenceNames.length = 0;\n state.branchID = null;\n\n this.regexp_disjunction(state);\n\n if (state.pos !== state.source.length) {\n // Make the same messages as V8.\n if (state.eat(0x29 /* ) */)) {\n state.raise(\"Unmatched ')'\");\n }\n if (state.eat(0x5D /* ] */) || state.eat(0x7D /* } */)) {\n state.raise(\"Lone quantifier brackets\");\n }\n }\n if (state.maxBackReference > state.numCapturingParens) {\n state.raise(\"Invalid escape\");\n }\n for (var i = 0, list = state.backReferenceNames; i < list.length; i += 1) {\n var name = list[i];\n\n if (!state.groupNames[name]) {\n state.raise(\"Invalid named capture referenced\");\n }\n }\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\n pp$1.regexp_disjunction = function(state) {\n var trackDisjunction = this.options.ecmaVersion >= 16;\n if (trackDisjunction) { state.branchID = new BranchID(state.branchID, null); }\n this.regexp_alternative(state);\n while (state.eat(0x7C /* | */)) {\n if (trackDisjunction) { state.branchID = state.branchID.sibling(); }\n this.regexp_alternative(state);\n }\n if (trackDisjunction) { state.branchID = state.branchID.parent; }\n\n // Make the same message as V8.\n if (this.regexp_eatQuantifier(state, true)) {\n state.raise(\"Nothing to repeat\");\n }\n if (state.eat(0x7B /* { */)) {\n state.raise(\"Lone quantifier brackets\");\n }\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\n pp$1.regexp_alternative = function(state) {\n while (state.pos < state.source.length && this.regexp_eatTerm(state)) {}\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term\n pp$1.regexp_eatTerm = function(state) {\n if (this.regexp_eatAssertion(state)) {\n // Handle `QuantifiableAssertion Quantifier` alternative.\n // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion\n // is a QuantifiableAssertion.\n if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) {\n // Make the same message as V8.\n if (state.switchU) {\n state.raise(\"Invalid quantifier\");\n }\n }\n return true\n }\n\n if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {\n this.regexp_eatQuantifier(state);\n return true\n }\n\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion\n pp$1.regexp_eatAssertion = function(state) {\n var start = state.pos;\n state.lastAssertionIsQuantifiable = false;\n\n // ^, $\n if (state.eat(0x5E /* ^ */) || state.eat(0x24 /* $ */)) {\n return true\n }\n\n // \\b \\B\n if (state.eat(0x5C /* \\ */)) {\n if (state.eat(0x42 /* B */) || state.eat(0x62 /* b */)) {\n return true\n }\n state.pos = start;\n }\n\n // Lookahead / Lookbehind\n if (state.eat(0x28 /* ( */) && state.eat(0x3F /* ? */)) {\n var lookbehind = false;\n if (this.options.ecmaVersion >= 9) {\n lookbehind = state.eat(0x3C /* < */);\n }\n if (state.eat(0x3D /* = */) || state.eat(0x21 /* ! */)) {\n this.regexp_disjunction(state);\n if (!state.eat(0x29 /* ) */)) {\n state.raise(\"Unterminated group\");\n }\n state.lastAssertionIsQuantifiable = !lookbehind;\n return true\n }\n }\n\n state.pos = start;\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\n pp$1.regexp_eatQuantifier = function(state, noError) {\n if ( noError === void 0 ) noError = false;\n\n if (this.regexp_eatQuantifierPrefix(state, noError)) {\n state.eat(0x3F /* ? */);\n return true\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\n pp$1.regexp_eatQuantifierPrefix = function(state, noError) {\n return (\n state.eat(0x2A /* * */) ||\n state.eat(0x2B /* + */) ||\n state.eat(0x3F /* ? */) ||\n this.regexp_eatBracedQuantifier(state, noError)\n )\n };\n pp$1.regexp_eatBracedQuantifier = function(state, noError) {\n var start = state.pos;\n if (state.eat(0x7B /* { */)) {\n var min = 0, max = -1;\n if (this.regexp_eatDecimalDigits(state)) {\n min = state.lastIntValue;\n if (state.eat(0x2C /* , */) && this.regexp_eatDecimalDigits(state)) {\n max = state.lastIntValue;\n }\n if (state.eat(0x7D /* } */)) {\n // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term\n if (max !== -1 && max < min && !noError) {\n state.raise(\"numbers out of order in {} quantifier\");\n }\n return true\n }\n }\n if (state.switchU && !noError) {\n state.raise(\"Incomplete quantifier\");\n }\n state.pos = start;\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\n pp$1.regexp_eatAtom = function(state) {\n return (\n this.regexp_eatPatternCharacters(state) ||\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state)\n )\n };\n pp$1.regexp_eatReverseSolidusAtomEscape = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatAtomEscape(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n };\n pp$1.regexp_eatUncapturingGroup = function(state) {\n var start = state.pos;\n if (state.eat(0x28 /* ( */)) {\n if (state.eat(0x3F /* ? */)) {\n if (this.options.ecmaVersion >= 16) {\n var addModifiers = this.regexp_eatModifiers(state);\n var hasHyphen = state.eat(0x2D /* - */);\n if (addModifiers || hasHyphen) {\n for (var i = 0; i < addModifiers.length; i++) {\n var modifier = addModifiers.charAt(i);\n if (addModifiers.indexOf(modifier, i + 1) > -1) {\n state.raise(\"Duplicate regular expression modifiers\");\n }\n }\n if (hasHyphen) {\n var removeModifiers = this.regexp_eatModifiers(state);\n if (!addModifiers && !removeModifiers && state.current() === 0x3A /* : */) {\n state.raise(\"Invalid regular expression modifiers\");\n }\n for (var i$1 = 0; i$1 < removeModifiers.length; i$1++) {\n var modifier$1 = removeModifiers.charAt(i$1);\n if (\n removeModifiers.indexOf(modifier$1, i$1 + 1) > -1 ||\n addModifiers.indexOf(modifier$1) > -1\n ) {\n state.raise(\"Duplicate regular expression modifiers\");\n }\n }\n }\n }\n }\n if (state.eat(0x3A /* : */)) {\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n return true\n }\n state.raise(\"Unterminated group\");\n }\n }\n state.pos = start;\n }\n return false\n };\n pp$1.regexp_eatCapturingGroup = function(state) {\n if (state.eat(0x28 /* ( */)) {\n if (this.options.ecmaVersion >= 9) {\n this.regexp_groupSpecifier(state);\n } else if (state.current() === 0x3F /* ? */) {\n state.raise(\"Invalid group\");\n }\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n state.numCapturingParens += 1;\n return true\n }\n state.raise(\"Unterminated group\");\n }\n return false\n };\n // RegularExpressionModifiers ::\n // [empty]\n // RegularExpressionModifiers RegularExpressionModifier\n pp$1.regexp_eatModifiers = function(state) {\n var modifiers = \"\";\n var ch = 0;\n while ((ch = state.current()) !== -1 && isRegularExpressionModifier(ch)) {\n modifiers += codePointToString(ch);\n state.advance();\n }\n return modifiers\n };\n // RegularExpressionModifier :: one of\n // `i` `m` `s`\n function isRegularExpressionModifier(ch) {\n return ch === 0x69 /* i */ || ch === 0x6d /* m */ || ch === 0x73 /* s */\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom\n pp$1.regexp_eatExtendedAtom = function(state) {\n return (\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state) ||\n this.regexp_eatInvalidBracedQuantifier(state) ||\n this.regexp_eatExtendedPatternCharacter(state)\n )\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier\n pp$1.regexp_eatInvalidBracedQuantifier = function(state) {\n if (this.regexp_eatBracedQuantifier(state, true)) {\n state.raise(\"Nothing to repeat\");\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\n pp$1.regexp_eatSyntaxCharacter = function(state) {\n var ch = state.current();\n if (isSyntaxCharacter(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n return false\n };\n function isSyntaxCharacter(ch) {\n return (\n ch === 0x24 /* $ */ ||\n ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ ||\n ch === 0x2E /* . */ ||\n ch === 0x3F /* ? */ ||\n ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ ||\n ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n )\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n // But eat eager.\n pp$1.regexp_eatPatternCharacters = function(state) {\n var start = state.pos;\n var ch = 0;\n while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) {\n state.advance();\n }\n return state.pos !== start\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter\n pp$1.regexp_eatExtendedPatternCharacter = function(state) {\n var ch = state.current();\n if (\n ch !== -1 &&\n ch !== 0x24 /* $ */ &&\n !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */) &&\n ch !== 0x2E /* . */ &&\n ch !== 0x3F /* ? */ &&\n ch !== 0x5B /* [ */ &&\n ch !== 0x5E /* ^ */ &&\n ch !== 0x7C /* | */\n ) {\n state.advance();\n return true\n }\n return false\n };\n\n // GroupSpecifier ::\n // [empty]\n // `?` GroupName\n pp$1.regexp_groupSpecifier = function(state) {\n if (state.eat(0x3F /* ? */)) {\n if (!this.regexp_eatGroupName(state)) { state.raise(\"Invalid group\"); }\n var trackDisjunction = this.options.ecmaVersion >= 16;\n var known = state.groupNames[state.lastStringValue];\n if (known) {\n if (trackDisjunction) {\n for (var i = 0, list = known; i < list.length; i += 1) {\n var altID = list[i];\n\n if (!altID.separatedFrom(state.branchID))\n { state.raise(\"Duplicate capture group name\"); }\n }\n } else {\n state.raise(\"Duplicate capture group name\");\n }\n }\n if (trackDisjunction) {\n (known || (state.groupNames[state.lastStringValue] = [])).push(state.branchID);\n } else {\n state.groupNames[state.lastStringValue] = true;\n }\n }\n };\n\n // GroupName ::\n // `<` RegExpIdentifierName `>`\n // Note: this updates `state.lastStringValue` property with the eaten name.\n pp$1.regexp_eatGroupName = function(state) {\n state.lastStringValue = \"\";\n if (state.eat(0x3C /* < */)) {\n if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */)) {\n return true\n }\n state.raise(\"Invalid capture group name\");\n }\n return false\n };\n\n // RegExpIdentifierName ::\n // RegExpIdentifierStart\n // RegExpIdentifierName RegExpIdentifierPart\n // Note: this updates `state.lastStringValue` property with the eaten name.\n pp$1.regexp_eatRegExpIdentifierName = function(state) {\n state.lastStringValue = \"\";\n if (this.regexp_eatRegExpIdentifierStart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n while (this.regexp_eatRegExpIdentifierPart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n }\n return true\n }\n return false\n };\n\n // RegExpIdentifierStart ::\n // UnicodeIDStart\n // `$`\n // `_`\n // `\\` RegExpUnicodeEscapeSequence[+U]\n pp$1.regexp_eatRegExpIdentifierStart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierStart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n };\n function isRegExpIdentifierStart(ch) {\n return isIdentifierStart(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */\n }\n\n // RegExpIdentifierPart ::\n // UnicodeIDContinue\n // `$`\n // `_`\n // `\\` RegExpUnicodeEscapeSequence[+U]\n // <ZWNJ>\n // <ZWJ>\n pp$1.regexp_eatRegExpIdentifierPart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierPart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n };\n function isRegExpIdentifierPart(ch) {\n return isIdentifierChar(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* <ZWNJ> */ || ch === 0x200D /* <ZWJ> */\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape\n pp$1.regexp_eatAtomEscape = function(state) {\n if (\n this.regexp_eatBackReference(state) ||\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state) ||\n (state.switchN && this.regexp_eatKGroupName(state))\n ) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n if (state.current() === 0x63 /* c */) {\n state.raise(\"Invalid unicode escape\");\n }\n state.raise(\"Invalid escape\");\n }\n return false\n };\n pp$1.regexp_eatBackReference = function(state) {\n var start = state.pos;\n if (this.regexp_eatDecimalEscape(state)) {\n var n = state.lastIntValue;\n if (state.switchU) {\n // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape\n if (n > state.maxBackReference) {\n state.maxBackReference = n;\n }\n return true\n }\n if (n <= state.numCapturingParens) {\n return true\n }\n state.pos = start;\n }\n return false\n };\n pp$1.regexp_eatKGroupName = function(state) {\n if (state.eat(0x6B /* k */)) {\n if (this.regexp_eatGroupName(state)) {\n state.backReferenceNames.push(state.lastStringValue);\n return true\n }\n state.raise(\"Invalid named reference\");\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape\n pp$1.regexp_eatCharacterEscape = function(state) {\n return (\n this.regexp_eatControlEscape(state) ||\n this.regexp_eatCControlLetter(state) ||\n this.regexp_eatZero(state) ||\n this.regexp_eatHexEscapeSequence(state) ||\n this.regexp_eatRegExpUnicodeEscapeSequence(state, false) ||\n (!state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state)) ||\n this.regexp_eatIdentityEscape(state)\n )\n };\n pp$1.regexp_eatCControlLetter = function(state) {\n var start = state.pos;\n if (state.eat(0x63 /* c */)) {\n if (this.regexp_eatControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n };\n pp$1.regexp_eatZero = function(state) {\n if (state.current() === 0x30 /* 0 */ && !isDecimalDigit(state.lookahead())) {\n state.lastIntValue = 0;\n state.advance();\n return true\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\n pp$1.regexp_eatControlEscape = function(state) {\n var ch = state.current();\n if (ch === 0x74 /* t */) {\n state.lastIntValue = 0x09; /* \\t */\n state.advance();\n return true\n }\n if (ch === 0x6E /* n */) {\n state.lastIntValue = 0x0A; /* \\n */\n state.advance();\n return true\n }\n if (ch === 0x76 /* v */) {\n state.lastIntValue = 0x0B; /* \\v */\n state.advance();\n return true\n }\n if (ch === 0x66 /* f */) {\n state.lastIntValue = 0x0C; /* \\f */\n state.advance();\n return true\n }\n if (ch === 0x72 /* r */) {\n state.lastIntValue = 0x0D; /* \\r */\n state.advance();\n return true\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\n pp$1.regexp_eatControlLetter = function(state) {\n var ch = state.current();\n if (isControlLetter(ch)) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n };\n function isControlLetter(ch) {\n return (\n (ch >= 0x41 /* A */ && ch <= 0x5A /* Z */) ||\n (ch >= 0x61 /* a */ && ch <= 0x7A /* z */)\n )\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\n pp$1.regexp_eatRegExpUnicodeEscapeSequence = function(state, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var start = state.pos;\n var switchU = forceU || state.switchU;\n\n if (state.eat(0x75 /* u */)) {\n if (this.regexp_eatFixedHexDigits(state, 4)) {\n var lead = state.lastIntValue;\n if (switchU && lead >= 0xD800 && lead <= 0xDBFF) {\n var leadSurrogateEnd = state.pos;\n if (state.eat(0x5C /* \\ */) && state.eat(0x75 /* u */) && this.regexp_eatFixedHexDigits(state, 4)) {\n var trail = state.lastIntValue;\n if (trail >= 0xDC00 && trail <= 0xDFFF) {\n state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n return true\n }\n }\n state.pos = leadSurrogateEnd;\n state.lastIntValue = lead;\n }\n return true\n }\n if (\n switchU &&\n state.eat(0x7B /* { */) &&\n this.regexp_eatHexDigits(state) &&\n state.eat(0x7D /* } */) &&\n isValidUnicode(state.lastIntValue)\n ) {\n return true\n }\n if (switchU) {\n state.raise(\"Invalid unicode escape\");\n }\n state.pos = start;\n }\n\n return false\n };\n function isValidUnicode(ch) {\n return ch >= 0 && ch <= 0x10FFFF\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape\n pp$1.regexp_eatIdentityEscape = function(state) {\n if (state.switchU) {\n if (this.regexp_eatSyntaxCharacter(state)) {\n return true\n }\n if (state.eat(0x2F /* / */)) {\n state.lastIntValue = 0x2F; /* / */\n return true\n }\n return false\n }\n\n var ch = state.current();\n if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\n pp$1.regexp_eatDecimalEscape = function(state) {\n state.lastIntValue = 0;\n var ch = state.current();\n if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */) {\n do {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n } while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */)\n return true\n }\n return false\n };\n\n // Return values used by character set parsing methods, needed to\n // forbid negation of sets that can match strings.\n var CharSetNone = 0; // Nothing parsed\n var CharSetOk = 1; // Construct parsed, cannot contain strings\n var CharSetString = 2; // Construct parsed, can contain strings\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\n pp$1.regexp_eatCharacterClassEscape = function(state) {\n var ch = state.current();\n\n if (isCharacterClassEscape(ch)) {\n state.lastIntValue = -1;\n state.advance();\n return CharSetOk\n }\n\n var negate = false;\n if (\n state.switchU &&\n this.options.ecmaVersion >= 9 &&\n ((negate = ch === 0x50 /* P */) || ch === 0x70 /* p */)\n ) {\n state.lastIntValue = -1;\n state.advance();\n var result;\n if (\n state.eat(0x7B /* { */) &&\n (result = this.regexp_eatUnicodePropertyValueExpression(state)) &&\n state.eat(0x7D /* } */)\n ) {\n if (negate && result === CharSetString) { state.raise(\"Invalid property name\"); }\n return result\n }\n state.raise(\"Invalid property name\");\n }\n\n return CharSetNone\n };\n\n function isCharacterClassEscape(ch) {\n return (\n ch === 0x64 /* d */ ||\n ch === 0x44 /* D */ ||\n ch === 0x73 /* s */ ||\n ch === 0x53 /* S */ ||\n ch === 0x77 /* w */ ||\n ch === 0x57 /* W */\n )\n }\n\n // UnicodePropertyValueExpression ::\n // UnicodePropertyName `=` UnicodePropertyValue\n // LoneUnicodePropertyNameOrValue\n pp$1.regexp_eatUnicodePropertyValueExpression = function(state) {\n var start = state.pos;\n\n // UnicodePropertyName `=` UnicodePropertyValue\n if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */)) {\n var name = state.lastStringValue;\n if (this.regexp_eatUnicodePropertyValue(state)) {\n var value = state.lastStringValue;\n this.regexp_validateUnicodePropertyNameAndValue(state, name, value);\n return CharSetOk\n }\n }\n state.pos = start;\n\n // LoneUnicodePropertyNameOrValue\n if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {\n var nameOrValue = state.lastStringValue;\n return this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue)\n }\n return CharSetNone\n };\n\n pp$1.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {\n if (!hasOwn(state.unicodeProperties.nonBinary, name))\n { state.raise(\"Invalid property name\"); }\n if (!state.unicodeProperties.nonBinary[name].test(value))\n { state.raise(\"Invalid property value\"); }\n };\n\n pp$1.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {\n if (state.unicodeProperties.binary.test(nameOrValue)) { return CharSetOk }\n if (state.switchV && state.unicodeProperties.binaryOfStrings.test(nameOrValue)) { return CharSetString }\n state.raise(\"Invalid property name\");\n };\n\n // UnicodePropertyName ::\n // UnicodePropertyNameCharacters\n pp$1.regexp_eatUnicodePropertyName = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while (isUnicodePropertyNameCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\"\n };\n\n function isUnicodePropertyNameCharacter(ch) {\n return isControlLetter(ch) || ch === 0x5F /* _ */\n }\n\n // UnicodePropertyValue ::\n // UnicodePropertyValueCharacters\n pp$1.regexp_eatUnicodePropertyValue = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while (isUnicodePropertyValueCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\"\n };\n function isUnicodePropertyValueCharacter(ch) {\n return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch)\n }\n\n // LoneUnicodePropertyNameOrValue ::\n // UnicodePropertyValueCharacters\n pp$1.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {\n return this.regexp_eatUnicodePropertyValue(state)\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\n pp$1.regexp_eatCharacterClass = function(state) {\n if (state.eat(0x5B /* [ */)) {\n var negate = state.eat(0x5E /* ^ */);\n var result = this.regexp_classContents(state);\n if (!state.eat(0x5D /* ] */))\n { state.raise(\"Unterminated character class\"); }\n if (negate && result === CharSetString)\n { state.raise(\"Negated character class may contain strings\"); }\n return true\n }\n return false\n };\n\n // https://tc39.es/ecma262/#prod-ClassContents\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\n pp$1.regexp_classContents = function(state) {\n if (state.current() === 0x5D /* ] */) { return CharSetOk }\n if (state.switchV) { return this.regexp_classSetExpression(state) }\n this.regexp_nonEmptyClassRanges(state);\n return CharSetOk\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\n pp$1.regexp_nonEmptyClassRanges = function(state) {\n while (this.regexp_eatClassAtom(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */) && this.regexp_eatClassAtom(state)) {\n var right = state.lastIntValue;\n if (state.switchU && (left === -1 || right === -1)) {\n state.raise(\"Invalid character class\");\n }\n if (left !== -1 && right !== -1 && left > right) {\n state.raise(\"Range out of order in character class\");\n }\n }\n }\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\n pp$1.regexp_eatClassAtom = function(state) {\n var start = state.pos;\n\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatClassEscape(state)) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n var ch$1 = state.current();\n if (ch$1 === 0x63 /* c */ || isOctalDigit(ch$1)) {\n state.raise(\"Invalid class escape\");\n }\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n\n var ch = state.current();\n if (ch !== 0x5D /* ] */) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape\n pp$1.regexp_eatClassEscape = function(state) {\n var start = state.pos;\n\n if (state.eat(0x62 /* b */)) {\n state.lastIntValue = 0x08; /* <BS> */\n return true\n }\n\n if (state.switchU && state.eat(0x2D /* - */)) {\n state.lastIntValue = 0x2D; /* - */\n return true\n }\n\n if (!state.switchU && state.eat(0x63 /* c */)) {\n if (this.regexp_eatClassControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n\n return (\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state)\n )\n };\n\n // https://tc39.es/ecma262/#prod-ClassSetExpression\n // https://tc39.es/ecma262/#prod-ClassUnion\n // https://tc39.es/ecma262/#prod-ClassIntersection\n // https://tc39.es/ecma262/#prod-ClassSubtraction\n pp$1.regexp_classSetExpression = function(state) {\n var result = CharSetOk, subResult;\n if (this.regexp_eatClassSetRange(state)) ; else if (subResult = this.regexp_eatClassSetOperand(state)) {\n if (subResult === CharSetString) { result = CharSetString; }\n // https://tc39.es/ecma262/#prod-ClassIntersection\n var start = state.pos;\n while (state.eatChars([0x26, 0x26] /* && */)) {\n if (\n state.current() !== 0x26 /* & */ &&\n (subResult = this.regexp_eatClassSetOperand(state))\n ) {\n if (subResult !== CharSetString) { result = CharSetOk; }\n continue\n }\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) { return result }\n // https://tc39.es/ecma262/#prod-ClassSubtraction\n while (state.eatChars([0x2D, 0x2D] /* -- */)) {\n if (this.regexp_eatClassSetOperand(state)) { continue }\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) { return result }\n } else {\n state.raise(\"Invalid character in character class\");\n }\n // https://tc39.es/ecma262/#prod-ClassUnion\n for (;;) {\n if (this.regexp_eatClassSetRange(state)) { continue }\n subResult = this.regexp_eatClassSetOperand(state);\n if (!subResult) { return result }\n if (subResult === CharSetString) { result = CharSetString; }\n }\n };\n\n // https://tc39.es/ecma262/#prod-ClassSetRange\n pp$1.regexp_eatClassSetRange = function(state) {\n var start = state.pos;\n if (this.regexp_eatClassSetCharacter(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */) && this.regexp_eatClassSetCharacter(state)) {\n var right = state.lastIntValue;\n if (left !== -1 && right !== -1 && left > right) {\n state.raise(\"Range out of order in character class\");\n }\n return true\n }\n state.pos = start;\n }\n return false\n };\n\n // https://tc39.es/ecma262/#prod-ClassSetOperand\n pp$1.regexp_eatClassSetOperand = function(state) {\n if (this.regexp_eatClassSetCharacter(state)) { return CharSetOk }\n return this.regexp_eatClassStringDisjunction(state) || this.regexp_eatNestedClass(state)\n };\n\n // https://tc39.es/ecma262/#prod-NestedClass\n pp$1.regexp_eatNestedClass = function(state) {\n var start = state.pos;\n if (state.eat(0x5B /* [ */)) {\n var negate = state.eat(0x5E /* ^ */);\n var result = this.regexp_classContents(state);\n if (state.eat(0x5D /* ] */)) {\n if (negate && result === CharSetString) {\n state.raise(\"Negated character class may contain strings\");\n }\n return result\n }\n state.pos = start;\n }\n if (state.eat(0x5C /* \\ */)) {\n var result$1 = this.regexp_eatCharacterClassEscape(state);\n if (result$1) {\n return result$1\n }\n state.pos = start;\n }\n return null\n };\n\n // https://tc39.es/ecma262/#prod-ClassStringDisjunction\n pp$1.regexp_eatClassStringDisjunction = function(state) {\n var start = state.pos;\n if (state.eatChars([0x5C, 0x71] /* \\q */)) {\n if (state.eat(0x7B /* { */)) {\n var result = this.regexp_classStringDisjunctionContents(state);\n if (state.eat(0x7D /* } */)) {\n return result\n }\n } else {\n // Make the same message as V8.\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n return null\n };\n\n // https://tc39.es/ecma262/#prod-ClassStringDisjunctionContents\n pp$1.regexp_classStringDisjunctionContents = function(state) {\n var result = this.regexp_classString(state);\n while (state.eat(0x7C /* | */)) {\n if (this.regexp_classString(state) === CharSetString) { result = CharSetString; }\n }\n return result\n };\n\n // https://tc39.es/ecma262/#prod-ClassString\n // https://tc39.es/ecma262/#prod-NonEmptyClassString\n pp$1.regexp_classString = function(state) {\n var count = 0;\n while (this.regexp_eatClassSetCharacter(state)) { count++; }\n return count === 1 ? CharSetOk : CharSetString\n };\n\n // https://tc39.es/ecma262/#prod-ClassSetCharacter\n pp$1.regexp_eatClassSetCharacter = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */)) {\n if (\n this.regexp_eatCharacterEscape(state) ||\n this.regexp_eatClassSetReservedPunctuator(state)\n ) {\n return true\n }\n if (state.eat(0x62 /* b */)) {\n state.lastIntValue = 0x08; /* <BS> */\n return true\n }\n state.pos = start;\n return false\n }\n var ch = state.current();\n if (ch < 0 || ch === state.lookahead() && isClassSetReservedDoublePunctuatorCharacter(ch)) { return false }\n if (isClassSetSyntaxCharacter(ch)) { return false }\n state.advance();\n state.lastIntValue = ch;\n return true\n };\n\n // https://tc39.es/ecma262/#prod-ClassSetReservedDoublePunctuator\n function isClassSetReservedDoublePunctuatorCharacter(ch) {\n return (\n ch === 0x21 /* ! */ ||\n ch >= 0x23 /* # */ && ch <= 0x26 /* & */ ||\n ch >= 0x2A /* * */ && ch <= 0x2C /* , */ ||\n ch === 0x2E /* . */ ||\n ch >= 0x3A /* : */ && ch <= 0x40 /* @ */ ||\n ch === 0x5E /* ^ */ ||\n ch === 0x60 /* ` */ ||\n ch === 0x7E /* ~ */\n )\n }\n\n // https://tc39.es/ecma262/#prod-ClassSetSyntaxCharacter\n function isClassSetSyntaxCharacter(ch) {\n return (\n ch === 0x28 /* ( */ ||\n ch === 0x29 /* ) */ ||\n ch === 0x2D /* - */ ||\n ch === 0x2F /* / */ ||\n ch >= 0x5B /* [ */ && ch <= 0x5D /* ] */ ||\n ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n )\n }\n\n // https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\n pp$1.regexp_eatClassSetReservedPunctuator = function(state) {\n var ch = state.current();\n if (isClassSetReservedPunctuator(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n return false\n };\n\n // https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\n function isClassSetReservedPunctuator(ch) {\n return (\n ch === 0x21 /* ! */ ||\n ch === 0x23 /* # */ ||\n ch === 0x25 /* % */ ||\n ch === 0x26 /* & */ ||\n ch === 0x2C /* , */ ||\n ch === 0x2D /* - */ ||\n ch >= 0x3A /* : */ && ch <= 0x3E /* > */ ||\n ch === 0x40 /* @ */ ||\n ch === 0x60 /* ` */ ||\n ch === 0x7E /* ~ */\n )\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter\n pp$1.regexp_eatClassControlLetter = function(state) {\n var ch = state.current();\n if (isDecimalDigit(ch) || ch === 0x5F /* _ */) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n pp$1.regexp_eatHexEscapeSequence = function(state) {\n var start = state.pos;\n if (state.eat(0x78 /* x */)) {\n if (this.regexp_eatFixedHexDigits(state, 2)) {\n return true\n }\n if (state.switchU) {\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\n pp$1.regexp_eatDecimalDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isDecimalDigit(ch = state.current())) {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n }\n return state.pos !== start\n };\n function isDecimalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\n pp$1.regexp_eatHexDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isHexDigit(ch = state.current())) {\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return state.pos !== start\n };\n function isHexDigit(ch) {\n return (\n (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) ||\n (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) ||\n (ch >= 0x61 /* a */ && ch <= 0x66 /* f */)\n )\n }\n function hexToInt(ch) {\n if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) {\n return 10 + (ch - 0x41 /* A */)\n }\n if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) {\n return 10 + (ch - 0x61 /* a */)\n }\n return ch - 0x30 /* 0 */\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence\n // Allows only 0-377(octal) i.e. 0-255(decimal).\n pp$1.regexp_eatLegacyOctalEscapeSequence = function(state) {\n if (this.regexp_eatOctalDigit(state)) {\n var n1 = state.lastIntValue;\n if (this.regexp_eatOctalDigit(state)) {\n var n2 = state.lastIntValue;\n if (n1 <= 3 && this.regexp_eatOctalDigit(state)) {\n state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue;\n } else {\n state.lastIntValue = n1 * 8 + n2;\n }\n } else {\n state.lastIntValue = n1;\n }\n return true\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\n pp$1.regexp_eatOctalDigit = function(state) {\n var ch = state.current();\n if (isOctalDigit(ch)) {\n state.lastIntValue = ch - 0x30; /* 0 */\n state.advance();\n return true\n }\n state.lastIntValue = 0;\n return false\n };\n function isOctalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n // And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n pp$1.regexp_eatFixedHexDigits = function(state, length) {\n var start = state.pos;\n state.lastIntValue = 0;\n for (var i = 0; i < length; ++i) {\n var ch = state.current();\n if (!isHexDigit(ch)) {\n state.pos = start;\n return false\n }\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return true\n };\n\n // Object type used to represent tokens. Note that normally, tokens\n // simply exist as properties on the parser object. This is only\n // used for the onToken callback and the external tokenizer.\n\n var Token = function Token(p) {\n this.type = p.type;\n this.value = p.value;\n this.start = p.start;\n this.end = p.end;\n if (p.options.locations)\n { this.loc = new SourceLocation(p, p.startLoc, p.endLoc); }\n if (p.options.ranges)\n { this.range = [p.start, p.end]; }\n };\n\n // ## Tokenizer\n\n var pp = Parser.prototype;\n\n // Move to the next token\n\n pp.next = function(ignoreEscapeSequenceInKeyword) {\n if (!ignoreEscapeSequenceInKeyword && this.type.keyword && this.containsEsc)\n { this.raiseRecoverable(this.start, \"Escape sequence in keyword \" + this.type.keyword); }\n if (this.options.onToken)\n { this.options.onToken(new Token(this)); }\n\n this.lastTokEnd = this.end;\n this.lastTokStart = this.start;\n this.lastTokEndLoc = this.endLoc;\n this.lastTokStartLoc = this.startLoc;\n this.nextToken();\n };\n\n pp.getToken = function() {\n this.next();\n return new Token(this)\n };\n\n // If we're in an ES6 environment, make parsers iterable\n if (typeof Symbol !== \"undefined\")\n { pp[Symbol.iterator] = function() {\n var this$1$1 = this;\n\n return {\n next: function () {\n var token = this$1$1.getToken();\n return {\n done: token.type === types$1.eof,\n value: token\n }\n }\n }\n }; }\n\n // Toggle strict mode. Re-reads the next number or string to please\n // pedantic tests (`\"use strict\"; 010;` should fail).\n\n // Read a single token, updating the parser object's token-related\n // properties.\n\n pp.nextToken = function() {\n var curContext = this.curContext();\n if (!curContext || !curContext.preserveSpace) { this.skipSpace(); }\n\n this.start = this.pos;\n if (this.options.locations) { this.startLoc = this.curPosition(); }\n if (this.pos >= this.input.length) { return this.finishToken(types$1.eof) }\n\n if (curContext.override) { return curContext.override(this) }\n else { this.readToken(this.fullCharCodeAtPos()); }\n };\n\n pp.readToken = function(code) {\n // Identifier or keyword. '\\uXXXX' sequences are allowed in\n // identifiers, so '\\' also dispatches to that.\n if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* '\\' */)\n { return this.readWord() }\n\n return this.getTokenFromCode(code)\n };\n\n pp.fullCharCodeAt = function(pos) {\n var code = this.input.charCodeAt(pos);\n if (code <= 0xd7ff || code >= 0xdc00) { return code }\n var next = this.input.charCodeAt(pos + 1);\n return next <= 0xdbff || next >= 0xe000 ? code : (code << 10) + next - 0x35fdc00\n };\n\n pp.fullCharCodeAtPos = function() {\n return this.fullCharCodeAt(this.pos)\n };\n\n pp.skipBlockComment = function() {\n var startLoc = this.options.onComment && this.curPosition();\n var start = this.pos, end = this.input.indexOf(\"*/\", this.pos += 2);\n if (end === -1) { this.raise(this.pos - 2, \"Unterminated comment\"); }\n this.pos = end + 2;\n if (this.options.locations) {\n for (var nextBreak = (void 0), pos = start; (nextBreak = nextLineBreak(this.input, pos, this.pos)) > -1;) {\n ++this.curLine;\n pos = this.lineStart = nextBreak;\n }\n }\n if (this.options.onComment)\n { this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos,\n startLoc, this.curPosition()); }\n };\n\n pp.skipLineComment = function(startSkip) {\n var start = this.pos;\n var startLoc = this.options.onComment && this.curPosition();\n var ch = this.input.charCodeAt(this.pos += startSkip);\n while (this.pos < this.input.length && !isNewLine(ch)) {\n ch = this.input.charCodeAt(++this.pos);\n }\n if (this.options.onComment)\n { this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos,\n startLoc, this.curPosition()); }\n };\n\n // Called at the start of the parse and after every token. Skips\n // whitespace and comments, and.\n\n pp.skipSpace = function() {\n loop: while (this.pos < this.input.length) {\n var ch = this.input.charCodeAt(this.pos);\n switch (ch) {\n case 32: case 160: // ' '\n ++this.pos;\n break\n case 13:\n if (this.input.charCodeAt(this.pos + 1) === 10) {\n ++this.pos;\n }\n case 10: case 8232: case 8233:\n ++this.pos;\n if (this.options.locations) {\n ++this.curLine;\n this.lineStart = this.pos;\n }\n break\n case 47: // '/'\n switch (this.input.charCodeAt(this.pos + 1)) {\n case 42: // '*'\n this.skipBlockComment();\n break\n case 47:\n this.skipLineComment(2);\n break\n default:\n break loop\n }\n break\n default:\n if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {\n ++this.pos;\n } else {\n break loop\n }\n }\n }\n };\n\n // Called at the end of every token. Sets `end`, `val`, and\n // maintains `context` and `exprAllowed`, and skips the space after\n // the token, so that the next one's `start` will point at the\n // right position.\n\n pp.finishToken = function(type, val) {\n this.end = this.pos;\n if (this.options.locations) { this.endLoc = this.curPosition(); }\n var prevType = this.type;\n this.type = type;\n this.value = val;\n\n this.updateContext(prevType);\n };\n\n // ### Token reading\n\n // This is the function that is called to fetch the next token. It\n // is somewhat obscure, because it works in character codes rather\n // than characters, and because operator parsing has been inlined\n // into it.\n //\n // All in the name of speed.\n //\n pp.readToken_dot = function() {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next >= 48 && next <= 57) { return this.readNumber(true) }\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { // 46 = dot '.'\n this.pos += 3;\n return this.finishToken(types$1.ellipsis)\n } else {\n ++this.pos;\n return this.finishToken(types$1.dot)\n }\n };\n\n pp.readToken_slash = function() { // '/'\n var next = this.input.charCodeAt(this.pos + 1);\n if (this.exprAllowed) { ++this.pos; return this.readRegexp() }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.slash, 1)\n };\n\n pp.readToken_mult_modulo_exp = function(code) { // '%*'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n var tokentype = code === 42 ? types$1.star : types$1.modulo;\n\n // exponentiation operator ** and **=\n if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {\n ++size;\n tokentype = types$1.starstar;\n next = this.input.charCodeAt(this.pos + 2);\n }\n\n if (next === 61) { return this.finishOp(types$1.assign, size + 1) }\n return this.finishOp(tokentype, size)\n };\n\n pp.readToken_pipe_amp = function(code) { // '|&'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (this.options.ecmaVersion >= 12) {\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (next2 === 61) { return this.finishOp(types$1.assign, 3) }\n }\n return this.finishOp(code === 124 ? types$1.logicalOR : types$1.logicalAND, 2)\n }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(code === 124 ? types$1.bitwiseOR : types$1.bitwiseAND, 1)\n };\n\n pp.readToken_caret = function() { // '^'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.bitwiseXOR, 1)\n };\n\n pp.readToken_plus_min = function(code) { // '+-'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 &&\n (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) {\n // A `-->` line comment\n this.skipLineComment(3);\n this.skipSpace();\n return this.nextToken()\n }\n return this.finishOp(types$1.incDec, 2)\n }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.plusMin, 1)\n };\n\n pp.readToken_lt_gt = function(code) { // '<>'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n if (next === code) {\n size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;\n if (this.input.charCodeAt(this.pos + size) === 61) { return this.finishOp(types$1.assign, size + 1) }\n return this.finishOp(types$1.bitShift, size)\n }\n if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 &&\n this.input.charCodeAt(this.pos + 3) === 45) {\n // `<!--`, an XML-style comment that should be interpreted as a line comment\n this.skipLineComment(4);\n this.skipSpace();\n return this.nextToken()\n }\n if (next === 61) { size = 2; }\n return this.finishOp(types$1.relational, size)\n };\n\n pp.readToken_eq_excl = function(code) { // '=!'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 61) { return this.finishOp(types$1.equality, this.input.charCodeAt(this.pos + 2) === 61 ? 3 : 2) }\n if (code === 61 && next === 62 && this.options.ecmaVersion >= 6) { // '=>'\n this.pos += 2;\n return this.finishToken(types$1.arrow)\n }\n return this.finishOp(code === 61 ? types$1.eq : types$1.prefix, 1)\n };\n\n pp.readToken_question = function() { // '?'\n var ecmaVersion = this.options.ecmaVersion;\n if (ecmaVersion >= 11) {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 46) {\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (next2 < 48 || next2 > 57) { return this.finishOp(types$1.questionDot, 2) }\n }\n if (next === 63) {\n if (ecmaVersion >= 12) {\n var next2$1 = this.input.charCodeAt(this.pos + 2);\n if (next2$1 === 61) { return this.finishOp(types$1.assign, 3) }\n }\n return this.finishOp(types$1.coalesce, 2)\n }\n }\n return this.finishOp(types$1.question, 1)\n };\n\n pp.readToken_numberSign = function() { // '#'\n var ecmaVersion = this.options.ecmaVersion;\n var code = 35; // '#'\n if (ecmaVersion >= 13) {\n ++this.pos;\n code = this.fullCharCodeAtPos();\n if (isIdentifierStart(code, true) || code === 92 /* '\\' */) {\n return this.finishToken(types$1.privateId, this.readWord1())\n }\n }\n\n this.raise(this.pos, \"Unexpected character '\" + codePointToString(code) + \"'\");\n };\n\n pp.getTokenFromCode = function(code) {\n switch (code) {\n // The interpretation of a dot depends on whether it is followed\n // by a digit or another two dots.\n case 46: // '.'\n return this.readToken_dot()\n\n // Punctuation tokens.\n case 40: ++this.pos; return this.finishToken(types$1.parenL)\n case 41: ++this.pos; return this.finishToken(types$1.parenR)\n case 59: ++this.pos; return this.finishToken(types$1.semi)\n case 44: ++this.pos; return this.finishToken(types$1.comma)\n case 91: ++this.pos; return this.finishToken(types$1.bracketL)\n case 93: ++this.pos; return this.finishToken(types$1.bracketR)\n case 123: ++this.pos; return this.finishToken(types$1.braceL)\n case 125: ++this.pos; return this.finishToken(types$1.braceR)\n case 58: ++this.pos; return this.finishToken(types$1.colon)\n\n case 96: // '`'\n if (this.options.ecmaVersion < 6) { break }\n ++this.pos;\n return this.finishToken(types$1.backQuote)\n\n case 48: // '0'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 120 || next === 88) { return this.readRadixNumber(16) } // '0x', '0X' - hex number\n if (this.options.ecmaVersion >= 6) {\n if (next === 111 || next === 79) { return this.readRadixNumber(8) } // '0o', '0O' - octal number\n if (next === 98 || next === 66) { return this.readRadixNumber(2) } // '0b', '0B' - binary number\n }\n\n // Anything else beginning with a digit is an integer, octal\n // number, or float.\n case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: // 1-9\n return this.readNumber(false)\n\n // Quotes produce strings.\n case 34: case 39: // '\"', \"'\"\n return this.readString(code)\n\n // Operators are parsed inline in tiny state machines. '=' (61) is\n // often referred to. `finishOp` simply skips the amount of\n // characters it is given as second argument, and returns a token\n // of the type given by its first argument.\n case 47: // '/'\n return this.readToken_slash()\n\n case 37: case 42: // '%*'\n return this.readToken_mult_modulo_exp(code)\n\n case 124: case 38: // '|&'\n return this.readToken_pipe_amp(code)\n\n case 94: // '^'\n return this.readToken_caret()\n\n case 43: case 45: // '+-'\n return this.readToken_plus_min(code)\n\n case 60: case 62: // '<>'\n return this.readToken_lt_gt(code)\n\n case 61: case 33: // '=!'\n return this.readToken_eq_excl(code)\n\n case 63: // '?'\n return this.readToken_question()\n\n case 126: // '~'\n return this.finishOp(types$1.prefix, 1)\n\n case 35: // '#'\n return this.readToken_numberSign()\n }\n\n this.raise(this.pos, \"Unexpected character '\" + codePointToString(code) + \"'\");\n };\n\n pp.finishOp = function(type, size) {\n var str = this.input.slice(this.pos, this.pos + size);\n this.pos += size;\n return this.finishToken(type, str)\n };\n\n pp.readRegexp = function() {\n var escaped, inClass, start = this.pos;\n for (;;) {\n if (this.pos >= this.input.length) { this.raise(start, \"Unterminated regular expression\"); }\n var ch = this.input.charAt(this.pos);\n if (lineBreak.test(ch)) { this.raise(start, \"Unterminated regular expression\"); }\n if (!escaped) {\n if (ch === \"[\") { inClass = true; }\n else if (ch === \"]\" && inClass) { inClass = false; }\n else if (ch === \"/\" && !inClass) { break }\n escaped = ch === \"\\\\\";\n } else { escaped = false; }\n ++this.pos;\n }\n var pattern = this.input.slice(start, this.pos);\n ++this.pos;\n var flagsStart = this.pos;\n var flags = this.readWord1();\n if (this.containsEsc) { this.unexpected(flagsStart); }\n\n // Validate pattern\n var state = this.regexpState || (this.regexpState = new RegExpValidationState(this));\n state.reset(start, pattern, flags);\n this.validateRegExpFlags(state);\n this.validateRegExpPattern(state);\n\n // Create Literal#value property value.\n var value = null;\n try {\n value = new RegExp(pattern, flags);\n } catch (e) {\n // ESTree requires null if it failed to instantiate RegExp object.\n // https://github.com/estree/estree/blob/a27003adf4fd7bfad44de9cef372a2eacd527b1c/es5.md#regexpliteral\n }\n\n return this.finishToken(types$1.regexp, {pattern: pattern, flags: flags, value: value})\n };\n\n // Read an integer in the given radix. Return null if zero digits\n // were read, the integer value otherwise. When `len` is given, this\n // will return `null` unless the integer has exactly `len` digits.\n\n pp.readInt = function(radix, len, maybeLegacyOctalNumericLiteral) {\n // `len` is used for character escape sequences. In that case, disallow separators.\n var allowSeparators = this.options.ecmaVersion >= 12 && len === undefined;\n\n // `maybeLegacyOctalNumericLiteral` is true if it doesn't have prefix (0x,0o,0b)\n // and isn't fraction part nor exponent part. In that case, if the first digit\n // is zero then disallow separators.\n var isLegacyOctalNumericLiteral = maybeLegacyOctalNumericLiteral && this.input.charCodeAt(this.pos) === 48;\n\n var start = this.pos, total = 0, lastCode = 0;\n for (var i = 0, e = len == null ? Infinity : len; i < e; ++i, ++this.pos) {\n var code = this.input.charCodeAt(this.pos), val = (void 0);\n\n if (allowSeparators && code === 95) {\n if (isLegacyOctalNumericLiteral) { this.raiseRecoverable(this.pos, \"Numeric separator is not allowed in legacy octal numeric literals\"); }\n if (lastCode === 95) { this.raiseRecoverable(this.pos, \"Numeric separator must be exactly one underscore\"); }\n if (i === 0) { this.raiseRecoverable(this.pos, \"Numeric separator is not allowed at the first of digits\"); }\n lastCode = code;\n continue\n }\n\n if (code >= 97) { val = code - 97 + 10; } // a\n else if (code >= 65) { val = code - 65 + 10; } // A\n else if (code >= 48 && code <= 57) { val = code - 48; } // 0-9\n else { val = Infinity; }\n if (val >= radix) { break }\n lastCode = code;\n total = total * radix + val;\n }\n\n if (allowSeparators && lastCode === 95) { this.raiseRecoverable(this.pos - 1, \"Numeric separator is not allowed at the last of digits\"); }\n if (this.pos === start || len != null && this.pos - start !== len) { return null }\n\n return total\n };\n\n function stringToNumber(str, isLegacyOctalNumericLiteral) {\n if (isLegacyOctalNumericLiteral) {\n return parseInt(str, 8)\n }\n\n // `parseFloat(value)` stops parsing at the first numeric separator then returns a wrong value.\n return parseFloat(str.replace(/_/g, \"\"))\n }\n\n function stringToBigInt(str) {\n if (typeof BigInt !== \"function\") {\n return null\n }\n\n // `BigInt(value)` throws syntax error if the string contains numeric separators.\n return BigInt(str.replace(/_/g, \"\"))\n }\n\n pp.readRadixNumber = function(radix) {\n var start = this.pos;\n this.pos += 2; // 0x\n var val = this.readInt(radix);\n if (val == null) { this.raise(this.start + 2, \"Expected number in radix \" + radix); }\n if (this.options.ecmaVersion >= 11 && this.input.charCodeAt(this.pos) === 110) {\n val = stringToBigInt(this.input.slice(start, this.pos));\n ++this.pos;\n } else if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n return this.finishToken(types$1.num, val)\n };\n\n // Read an integer, octal integer, or floating-point number.\n\n pp.readNumber = function(startsWithDot) {\n var start = this.pos;\n if (!startsWithDot && this.readInt(10, undefined, true) === null) { this.raise(start, \"Invalid number\"); }\n var octal = this.pos - start >= 2 && this.input.charCodeAt(start) === 48;\n if (octal && this.strict) { this.raise(start, \"Invalid number\"); }\n var next = this.input.charCodeAt(this.pos);\n if (!octal && !startsWithDot && this.options.ecmaVersion >= 11 && next === 110) {\n var val$1 = stringToBigInt(this.input.slice(start, this.pos));\n ++this.pos;\n if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n return this.finishToken(types$1.num, val$1)\n }\n if (octal && /[89]/.test(this.input.slice(start, this.pos))) { octal = false; }\n if (next === 46 && !octal) { // '.'\n ++this.pos;\n this.readInt(10);\n next = this.input.charCodeAt(this.pos);\n }\n if ((next === 69 || next === 101) && !octal) { // 'eE'\n next = this.input.charCodeAt(++this.pos);\n if (next === 43 || next === 45) { ++this.pos; } // '+-'\n if (this.readInt(10) === null) { this.raise(start, \"Invalid number\"); }\n }\n if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n\n var val = stringToNumber(this.input.slice(start, this.pos), octal);\n return this.finishToken(types$1.num, val)\n };\n\n // Read a string value, interpreting backslash-escapes.\n\n pp.readCodePoint = function() {\n var ch = this.input.charCodeAt(this.pos), code;\n\n if (ch === 123) { // '{'\n if (this.options.ecmaVersion < 6) { this.unexpected(); }\n var codePos = ++this.pos;\n code = this.readHexChar(this.input.indexOf(\"}\", this.pos) - this.pos);\n ++this.pos;\n if (code > 0x10FFFF) { this.invalidStringToken(codePos, \"Code point out of bounds\"); }\n } else {\n code = this.readHexChar(4);\n }\n return code\n };\n\n pp.readString = function(quote) {\n var out = \"\", chunkStart = ++this.pos;\n for (;;) {\n if (this.pos >= this.input.length) { this.raise(this.start, \"Unterminated string constant\"); }\n var ch = this.input.charCodeAt(this.pos);\n if (ch === quote) { break }\n if (ch === 92) { // '\\'\n out += this.input.slice(chunkStart, this.pos);\n out += this.readEscapedChar(false);\n chunkStart = this.pos;\n } else if (ch === 0x2028 || ch === 0x2029) {\n if (this.options.ecmaVersion < 10) { this.raise(this.start, \"Unterminated string constant\"); }\n ++this.pos;\n if (this.options.locations) {\n this.curLine++;\n this.lineStart = this.pos;\n }\n } else {\n if (isNewLine(ch)) { this.raise(this.start, \"Unterminated string constant\"); }\n ++this.pos;\n }\n }\n out += this.input.slice(chunkStart, this.pos++);\n return this.finishToken(types$1.string, out)\n };\n\n // Reads template string tokens.\n\n var INVALID_TEMPLATE_ESCAPE_ERROR = {};\n\n pp.tryReadTemplateToken = function() {\n this.inTemplateElement = true;\n try {\n this.readTmplToken();\n } catch (err) {\n if (err === INVALID_TEMPLATE_ESCAPE_ERROR) {\n this.readInvalidTemplateToken();\n } else {\n throw err\n }\n }\n\n this.inTemplateElement = false;\n };\n\n pp.invalidStringToken = function(position, message) {\n if (this.inTemplateElement && this.options.ecmaVersion >= 9) {\n throw INVALID_TEMPLATE_ESCAPE_ERROR\n } else {\n this.raise(position, message);\n }\n };\n\n pp.readTmplToken = function() {\n var out = \"\", chunkStart = this.pos;\n for (;;) {\n if (this.pos >= this.input.length) { this.raise(this.start, \"Unterminated template\"); }\n var ch = this.input.charCodeAt(this.pos);\n if (ch === 96 || ch === 36 && this.input.charCodeAt(this.pos + 1) === 123) { // '`', '${'\n if (this.pos === this.start && (this.type === types$1.template || this.type === types$1.invalidTemplate)) {\n if (ch === 36) {\n this.pos += 2;\n return this.finishToken(types$1.dollarBraceL)\n } else {\n ++this.pos;\n return this.finishToken(types$1.backQuote)\n }\n }\n out += this.input.slice(chunkStart, this.pos);\n return this.finishToken(types$1.template, out)\n }\n if (ch === 92) { // '\\'\n out += this.input.slice(chunkStart, this.pos);\n out += this.readEscapedChar(true);\n chunkStart = this.pos;\n } else if (isNewLine(ch)) {\n out += this.input.slice(chunkStart, this.pos);\n ++this.pos;\n switch (ch) {\n case 13:\n if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; }\n case 10:\n out += \"\\n\";\n break\n default:\n out += String.fromCharCode(ch);\n break\n }\n if (this.options.locations) {\n ++this.curLine;\n this.lineStart = this.pos;\n }\n chunkStart = this.pos;\n } else {\n ++this.pos;\n }\n }\n };\n\n // Reads a template token to search for the end, without validating any escape sequences\n pp.readInvalidTemplateToken = function() {\n for (; this.pos < this.input.length; this.pos++) {\n switch (this.input[this.pos]) {\n case \"\\\\\":\n ++this.pos;\n break\n\n case \"$\":\n if (this.input[this.pos + 1] !== \"{\") { break }\n // fall through\n case \"`\":\n return this.finishToken(types$1.invalidTemplate, this.input.slice(this.start, this.pos))\n\n case \"\\r\":\n if (this.input[this.pos + 1] === \"\\n\") { ++this.pos; }\n // fall through\n case \"\\n\": case \"\\u2028\": case \"\\u2029\":\n ++this.curLine;\n this.lineStart = this.pos + 1;\n break\n }\n }\n this.raise(this.start, \"Unterminated template\");\n };\n\n // Used to read escaped characters\n\n pp.readEscapedChar = function(inTemplate) {\n var ch = this.input.charCodeAt(++this.pos);\n ++this.pos;\n switch (ch) {\n case 110: return \"\\n\" // 'n' -> '\\n'\n case 114: return \"\\r\" // 'r' -> '\\r'\n case 120: return String.fromCharCode(this.readHexChar(2)) // 'x'\n case 117: return codePointToString(this.readCodePoint()) // 'u'\n case 116: return \"\\t\" // 't' -> '\\t'\n case 98: return \"\\b\" // 'b' -> '\\b'\n case 118: return \"\\u000b\" // 'v' -> '\\u000b'\n case 102: return \"\\f\" // 'f' -> '\\f'\n case 13: if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; } // '\\r\\n'\n case 10: // ' \\n'\n if (this.options.locations) { this.lineStart = this.pos; ++this.curLine; }\n return \"\"\n case 56:\n case 57:\n if (this.strict) {\n this.invalidStringToken(\n this.pos - 1,\n \"Invalid escape sequence\"\n );\n }\n if (inTemplate) {\n var codePos = this.pos - 1;\n\n this.invalidStringToken(\n codePos,\n \"Invalid escape sequence in template string\"\n );\n }\n default:\n if (ch >= 48 && ch <= 55) {\n var octalStr = this.input.substr(this.pos - 1, 3).match(/^[0-7]+/)[0];\n var octal = parseInt(octalStr, 8);\n if (octal > 255) {\n octalStr = octalStr.slice(0, -1);\n octal = parseInt(octalStr, 8);\n }\n this.pos += octalStr.length - 1;\n ch = this.input.charCodeAt(this.pos);\n if ((octalStr !== \"0\" || ch === 56 || ch === 57) && (this.strict || inTemplate)) {\n this.invalidStringToken(\n this.pos - 1 - octalStr.length,\n inTemplate\n ? \"Octal literal in template string\"\n : \"Octal literal in strict mode\"\n );\n }\n return String.fromCharCode(octal)\n }\n if (isNewLine(ch)) {\n // Unicode new line characters after \\ get removed from output in both\n // template literals and strings\n if (this.options.locations) { this.lineStart = this.pos; ++this.curLine; }\n return \"\"\n }\n return String.fromCharCode(ch)\n }\n };\n\n // Used to read character escape sequences ('\\x', '\\u', '\\U').\n\n pp.readHexChar = function(len) {\n var codePos = this.pos;\n var n = this.readInt(16, len);\n if (n === null) { this.invalidStringToken(codePos, \"Bad character escape sequence\"); }\n return n\n };\n\n // Read an identifier, and return it as a string. Sets `this.containsEsc`\n // to whether the word contained a '\\u' escape.\n //\n // Incrementally adds only escaped chars, adding other chunks as-is\n // as a micro-optimization.\n\n pp.readWord1 = function() {\n this.containsEsc = false;\n var word = \"\", first = true, chunkStart = this.pos;\n var astral = this.options.ecmaVersion >= 6;\n while (this.pos < this.input.length) {\n var ch = this.fullCharCodeAtPos();\n if (isIdentifierChar(ch, astral)) {\n this.pos += ch <= 0xffff ? 1 : 2;\n } else if (ch === 92) { // \"\\\"\n this.containsEsc = true;\n word += this.input.slice(chunkStart, this.pos);\n var escStart = this.pos;\n if (this.input.charCodeAt(++this.pos) !== 117) // \"u\"\n { this.invalidStringToken(this.pos, \"Expecting Unicode escape sequence \\\\uXXXX\"); }\n ++this.pos;\n var esc = this.readCodePoint();\n if (!(first ? isIdentifierStart : isIdentifierChar)(esc, astral))\n { this.invalidStringToken(escStart, \"Invalid Unicode escape\"); }\n word += codePointToString(esc);\n chunkStart = this.pos;\n } else {\n break\n }\n first = false;\n }\n return word + this.input.slice(chunkStart, this.pos)\n };\n\n // Read an identifier or keyword token. Will check for reserved\n // words when necessary.\n\n pp.readWord = function() {\n var word = this.readWord1();\n var type = types$1.name;\n if (this.keywords.test(word)) {\n type = keywords[word];\n }\n return this.finishToken(type, word)\n };\n\n // Acorn is a tiny, fast JavaScript parser written in JavaScript.\n //\n // Acorn was written by Marijn Haverbeke, Ingvar Stepanyan, and\n // various contributors and released under an MIT license.\n //\n // Git repositories for Acorn are available at\n //\n // http://marijnhaverbeke.nl/git/acorn\n // https://github.com/acornjs/acorn.git\n //\n // Please use the [github bug tracker][ghbt] to report issues.\n //\n // [ghbt]: https://github.com/acornjs/acorn/issues\n\n\n var version = \"8.16.0\";\n\n Parser.acorn = {\n Parser: Parser,\n version: version,\n defaultOptions: defaultOptions,\n Position: Position,\n SourceLocation: SourceLocation,\n getLineInfo: getLineInfo,\n Node: Node,\n TokenType: TokenType,\n tokTypes: types$1,\n keywordTypes: keywords,\n TokContext: TokContext,\n tokContexts: types,\n isIdentifierChar: isIdentifierChar,\n isIdentifierStart: isIdentifierStart,\n Token: Token,\n isNewLine: isNewLine,\n lineBreak: lineBreak,\n lineBreakG: lineBreakG,\n nonASCIIwhitespace: nonASCIIwhitespace\n };\n\n // The main exported interface (under `self.acorn` when in the\n // browser) is a `parse` function that takes a code string and returns\n // an abstract syntax tree as specified by the [ESTree spec][estree].\n //\n // [estree]: https://github.com/estree/estree\n\n function parse(input, options) {\n return Parser.parse(input, options)\n }\n\n // This function tries to parse a single expression at a given\n // offset in a string. Useful for parsing mixed-language formats\n // that embed JavaScript expressions.\n\n function parseExpressionAt(input, pos, options) {\n return Parser.parseExpressionAt(input, pos, options)\n }\n\n // Acorn is organized as a tokenizer and a recursive-descent parser.\n // The `tokenizer` export provides an interface to the tokenizer.\n\n function tokenizer(input, options) {\n return Parser.tokenizer(input, options)\n }\n\n exports.Node = Node;\n exports.Parser = Parser;\n exports.Position = Position;\n exports.SourceLocation = SourceLocation;\n exports.TokContext = TokContext;\n exports.Token = Token;\n exports.TokenType = TokenType;\n exports.defaultOptions = defaultOptions;\n exports.getLineInfo = getLineInfo;\n exports.isIdentifierChar = isIdentifierChar;\n exports.isIdentifierStart = isIdentifierStart;\n exports.isNewLine = isNewLine;\n exports.keywordTypes = keywords;\n exports.lineBreak = lineBreak;\n exports.lineBreakG = lineBreakG;\n exports.nonASCIIwhitespace = nonASCIIwhitespace;\n exports.parse = parse;\n exports.parseExpressionAt = parseExpressionAt;\n exports.tokContexts = types;\n exports.tokTypes = types$1;\n exports.tokenizer = tokenizer;\n exports.version = version;\n\n}));\n","'use strict';\n\nconst XHTMLEntities = require('./xhtml');\n\nconst hexNumber = /^[\\da-fA-F]+$/;\nconst decimalNumber = /^\\d+$/;\n\n// The map to `acorn-jsx` tokens from `acorn` namespace objects.\nconst acornJsxMap = new WeakMap();\n\n// Get the original tokens for the given `acorn` namespace object.\nfunction getJsxTokens(acorn) {\n acorn = acorn.Parser.acorn || acorn;\n let acornJsx = acornJsxMap.get(acorn);\n if (!acornJsx) {\n const tt = acorn.tokTypes;\n const TokContext = acorn.TokContext;\n const TokenType = acorn.TokenType;\n const tc_oTag = new TokContext('<tag', false);\n const tc_cTag = new TokContext('</tag', false);\n const tc_expr = new TokContext('<tag>...</tag>', true, true);\n const tokContexts = {\n tc_oTag: tc_oTag,\n tc_cTag: tc_cTag,\n tc_expr: tc_expr\n };\n const tokTypes = {\n jsxName: new TokenType('jsxName'),\n jsxText: new TokenType('jsxText', {beforeExpr: true}),\n jsxTagStart: new TokenType('jsxTagStart', {startsExpr: true}),\n jsxTagEnd: new TokenType('jsxTagEnd')\n };\n\n tokTypes.jsxTagStart.updateContext = function() {\n this.context.push(tc_expr); // treat as beginning of JSX expression\n this.context.push(tc_oTag); // start opening tag context\n this.exprAllowed = false;\n };\n tokTypes.jsxTagEnd.updateContext = function(prevType) {\n let out = this.context.pop();\n if (out === tc_oTag && prevType === tt.slash || out === tc_cTag) {\n this.context.pop();\n this.exprAllowed = this.curContext() === tc_expr;\n } else {\n this.exprAllowed = true;\n }\n };\n\n acornJsx = { tokContexts: tokContexts, tokTypes: tokTypes };\n acornJsxMap.set(acorn, acornJsx);\n }\n\n return acornJsx;\n}\n\n// Transforms JSX element name to string.\n\nfunction getQualifiedJSXName(object) {\n if (!object)\n return object;\n\n if (object.type === 'JSXIdentifier')\n return object.name;\n\n if (object.type === 'JSXNamespacedName')\n return object.namespace.name + ':' + object.name.name;\n\n if (object.type === 'JSXMemberExpression')\n return getQualifiedJSXName(object.object) + '.' +\n getQualifiedJSXName(object.property);\n}\n\nmodule.exports = function(options) {\n options = options || {};\n return function(Parser) {\n return plugin({\n allowNamespaces: options.allowNamespaces !== false,\n allowNamespacedObjects: !!options.allowNamespacedObjects\n }, Parser);\n };\n};\n\n// This is `tokTypes` of the peer dep.\n// This can be different instances from the actual `tokTypes` this plugin uses.\nObject.defineProperty(module.exports, \"tokTypes\", {\n get: function get_tokTypes() {\n return getJsxTokens(require(\"acorn\")).tokTypes;\n },\n configurable: true,\n enumerable: true\n});\n\nfunction plugin(options, Parser) {\n const acorn = Parser.acorn || require(\"acorn\");\n const acornJsx = getJsxTokens(acorn);\n const tt = acorn.tokTypes;\n const tok = acornJsx.tokTypes;\n const tokContexts = acorn.tokContexts;\n const tc_oTag = acornJsx.tokContexts.tc_oTag;\n const tc_cTag = acornJsx.tokContexts.tc_cTag;\n const tc_expr = acornJsx.tokContexts.tc_expr;\n const isNewLine = acorn.isNewLine;\n const isIdentifierStart = acorn.isIdentifierStart;\n const isIdentifierChar = acorn.isIdentifierChar;\n\n return class extends Parser {\n // Expose actual `tokTypes` and `tokContexts` to other plugins.\n static get acornJsx() {\n return acornJsx;\n }\n\n // Reads inline JSX contents token.\n jsx_readToken() {\n let out = '', chunkStart = this.pos;\n for (;;) {\n if (this.pos >= this.input.length)\n this.raise(this.start, 'Unterminated JSX contents');\n let ch = this.input.charCodeAt(this.pos);\n\n switch (ch) {\n case 60: // '<'\n case 123: // '{'\n if (this.pos === this.start) {\n if (ch === 60 && this.exprAllowed) {\n ++this.pos;\n return this.finishToken(tok.jsxTagStart);\n }\n return this.getTokenFromCode(ch);\n }\n out += this.input.slice(chunkStart, this.pos);\n return this.finishToken(tok.jsxText, out);\n\n case 38: // '&'\n out += this.input.slice(chunkStart, this.pos);\n out += this.jsx_readEntity();\n chunkStart = this.pos;\n break;\n\n case 62: // '>'\n case 125: // '}'\n this.raise(\n this.pos,\n \"Unexpected token `\" + this.input[this.pos] + \"`. Did you mean `\" +\n (ch === 62 ? \"&gt;\" : \"&rbrace;\") + \"` or \" + \"`{\\\"\" + this.input[this.pos] + \"\\\"}\" + \"`?\"\n );\n\n default:\n if (isNewLine(ch)) {\n out += this.input.slice(chunkStart, this.pos);\n out += this.jsx_readNewLine(true);\n chunkStart = this.pos;\n } else {\n ++this.pos;\n }\n }\n }\n }\n\n jsx_readNewLine(normalizeCRLF) {\n let ch = this.input.charCodeAt(this.pos);\n let out;\n ++this.pos;\n if (ch === 13 && this.input.charCodeAt(this.pos) === 10) {\n ++this.pos;\n out = normalizeCRLF ? '\\n' : '\\r\\n';\n } else {\n out = String.fromCharCode(ch);\n }\n if (this.options.locations) {\n ++this.curLine;\n this.lineStart = this.pos;\n }\n\n return out;\n }\n\n jsx_readString(quote) {\n let out = '', chunkStart = ++this.pos;\n for (;;) {\n if (this.pos >= this.input.length)\n this.raise(this.start, 'Unterminated string constant');\n let ch = this.input.charCodeAt(this.pos);\n if (ch === quote) break;\n if (ch === 38) { // '&'\n out += this.input.slice(chunkStart, this.pos);\n out += this.jsx_readEntity();\n chunkStart = this.pos;\n } else if (isNewLine(ch)) {\n out += this.input.slice(chunkStart, this.pos);\n out += this.jsx_readNewLine(false);\n chunkStart = this.pos;\n } else {\n ++this.pos;\n }\n }\n out += this.input.slice(chunkStart, this.pos++);\n return this.finishToken(tt.string, out);\n }\n\n jsx_readEntity() {\n let str = '', count = 0, entity;\n let ch = this.input[this.pos];\n if (ch !== '&')\n this.raise(this.pos, 'Entity must start with an ampersand');\n let startPos = ++this.pos;\n while (this.pos < this.input.length && count++ < 10) {\n ch = this.input[this.pos++];\n if (ch === ';') {\n if (str[0] === '#') {\n if (str[1] === 'x') {\n str = str.substr(2);\n if (hexNumber.test(str))\n entity = String.fromCharCode(parseInt(str, 16));\n } else {\n str = str.substr(1);\n if (decimalNumber.test(str))\n entity = String.fromCharCode(parseInt(str, 10));\n }\n } else {\n entity = XHTMLEntities[str];\n }\n break;\n }\n str += ch;\n }\n if (!entity) {\n this.pos = startPos;\n return '&';\n }\n return entity;\n }\n\n // Read a JSX identifier (valid tag or attribute name).\n //\n // Optimized version since JSX identifiers can't contain\n // escape characters and so can be read as single slice.\n // Also assumes that first character was already checked\n // by isIdentifierStart in readToken.\n\n jsx_readWord() {\n let ch, start = this.pos;\n do {\n ch = this.input.charCodeAt(++this.pos);\n } while (isIdentifierChar(ch) || ch === 45); // '-'\n return this.finishToken(tok.jsxName, this.input.slice(start, this.pos));\n }\n\n // Parse next token as JSX identifier\n\n jsx_parseIdentifier() {\n let node = this.startNode();\n if (this.type === tok.jsxName)\n node.name = this.value;\n else if (this.type.keyword)\n node.name = this.type.keyword;\n else\n this.unexpected();\n this.next();\n return this.finishNode(node, 'JSXIdentifier');\n }\n\n // Parse namespaced identifier.\n\n jsx_parseNamespacedName() {\n let startPos = this.start, startLoc = this.startLoc;\n let name = this.jsx_parseIdentifier();\n if (!options.allowNamespaces || !this.eat(tt.colon)) return name;\n var node = this.startNodeAt(startPos, startLoc);\n node.namespace = name;\n node.name = this.jsx_parseIdentifier();\n return this.finishNode(node, 'JSXNamespacedName');\n }\n\n // Parses element name in any form - namespaced, member\n // or single identifier.\n\n jsx_parseElementName() {\n if (this.type === tok.jsxTagEnd) return '';\n let startPos = this.start, startLoc = this.startLoc;\n let node = this.jsx_parseNamespacedName();\n if (this.type === tt.dot && node.type === 'JSXNamespacedName' && !options.allowNamespacedObjects) {\n this.unexpected();\n }\n while (this.eat(tt.dot)) {\n let newNode = this.startNodeAt(startPos, startLoc);\n newNode.object = node;\n newNode.property = this.jsx_parseIdentifier();\n node = this.finishNode(newNode, 'JSXMemberExpression');\n }\n return node;\n }\n\n // Parses any type of JSX attribute value.\n\n jsx_parseAttributeValue() {\n switch (this.type) {\n case tt.braceL:\n let node = this.jsx_parseExpressionContainer();\n if (node.expression.type === 'JSXEmptyExpression')\n this.raise(node.start, 'JSX attributes must only be assigned a non-empty expression');\n return node;\n\n case tok.jsxTagStart:\n case tt.string:\n return this.parseExprAtom();\n\n default:\n this.raise(this.start, 'JSX value should be either an expression or a quoted JSX text');\n }\n }\n\n // JSXEmptyExpression is unique type since it doesn't actually parse anything,\n // and so it should start at the end of last read token (left brace) and finish\n // at the beginning of the next one (right brace).\n\n jsx_parseEmptyExpression() {\n let node = this.startNodeAt(this.lastTokEnd, this.lastTokEndLoc);\n return this.finishNodeAt(node, 'JSXEmptyExpression', this.start, this.startLoc);\n }\n\n // Parses JSX expression enclosed into curly brackets.\n\n jsx_parseExpressionContainer() {\n let node = this.startNode();\n this.next();\n node.expression = this.type === tt.braceR\n ? this.jsx_parseEmptyExpression()\n : this.parseExpression();\n this.expect(tt.braceR);\n return this.finishNode(node, 'JSXExpressionContainer');\n }\n\n // Parses following JSX attribute name-value pair.\n\n jsx_parseAttribute() {\n let node = this.startNode();\n if (this.eat(tt.braceL)) {\n this.expect(tt.ellipsis);\n node.argument = this.parseMaybeAssign();\n this.expect(tt.braceR);\n return this.finishNode(node, 'JSXSpreadAttribute');\n }\n node.name = this.jsx_parseNamespacedName();\n node.value = this.eat(tt.eq) ? this.jsx_parseAttributeValue() : null;\n return this.finishNode(node, 'JSXAttribute');\n }\n\n // Parses JSX opening tag starting after '<'.\n\n jsx_parseOpeningElementAt(startPos, startLoc) {\n let node = this.startNodeAt(startPos, startLoc);\n node.attributes = [];\n let nodeName = this.jsx_parseElementName();\n if (nodeName) node.name = nodeName;\n while (this.type !== tt.slash && this.type !== tok.jsxTagEnd)\n node.attributes.push(this.jsx_parseAttribute());\n node.selfClosing = this.eat(tt.slash);\n this.expect(tok.jsxTagEnd);\n return this.finishNode(node, nodeName ? 'JSXOpeningElement' : 'JSXOpeningFragment');\n }\n\n // Parses JSX closing tag starting after '</'.\n\n jsx_parseClosingElementAt(startPos, startLoc) {\n let node = this.startNodeAt(startPos, startLoc);\n let nodeName = this.jsx_parseElementName();\n if (nodeName) node.name = nodeName;\n this.expect(tok.jsxTagEnd);\n return this.finishNode(node, nodeName ? 'JSXClosingElement' : 'JSXClosingFragment');\n }\n\n // Parses entire JSX element, including it's opening tag\n // (starting after '<'), attributes, contents and closing tag.\n\n jsx_parseElementAt(startPos, startLoc) {\n let node = this.startNodeAt(startPos, startLoc);\n let children = [];\n let openingElement = this.jsx_parseOpeningElementAt(startPos, startLoc);\n let closingElement = null;\n\n if (!openingElement.selfClosing) {\n contents: for (;;) {\n switch (this.type) {\n case tok.jsxTagStart:\n startPos = this.start; startLoc = this.startLoc;\n this.next();\n if (this.eat(tt.slash)) {\n closingElement = this.jsx_parseClosingElementAt(startPos, startLoc);\n break contents;\n }\n children.push(this.jsx_parseElementAt(startPos, startLoc));\n break;\n\n case tok.jsxText:\n children.push(this.parseExprAtom());\n break;\n\n case tt.braceL:\n children.push(this.jsx_parseExpressionContainer());\n break;\n\n default:\n this.unexpected();\n }\n }\n if (getQualifiedJSXName(closingElement.name) !== getQualifiedJSXName(openingElement.name)) {\n this.raise(\n closingElement.start,\n 'Expected corresponding JSX closing tag for <' + getQualifiedJSXName(openingElement.name) + '>');\n }\n }\n let fragmentOrElement = openingElement.name ? 'Element' : 'Fragment';\n\n node['opening' + fragmentOrElement] = openingElement;\n node['closing' + fragmentOrElement] = closingElement;\n node.children = children;\n if (this.type === tt.relational && this.value === \"<\") {\n this.raise(this.start, \"Adjacent JSX elements must be wrapped in an enclosing tag\");\n }\n return this.finishNode(node, 'JSX' + fragmentOrElement);\n }\n\n // Parse JSX text\n\n jsx_parseText() {\n let node = this.parseLiteral(this.value);\n node.type = \"JSXText\";\n return node;\n }\n\n // Parses entire JSX element from current position.\n\n jsx_parseElement() {\n let startPos = this.start, startLoc = this.startLoc;\n this.next();\n return this.jsx_parseElementAt(startPos, startLoc);\n }\n\n parseExprAtom(refShortHandDefaultPos) {\n if (this.type === tok.jsxText)\n return this.jsx_parseText();\n else if (this.type === tok.jsxTagStart)\n return this.jsx_parseElement();\n else\n return super.parseExprAtom(refShortHandDefaultPos);\n }\n\n readToken(code) {\n let context = this.curContext();\n\n if (context === tc_expr) return this.jsx_readToken();\n\n if (context === tc_oTag || context === tc_cTag) {\n if (isIdentifierStart(code)) return this.jsx_readWord();\n\n if (code == 62) {\n ++this.pos;\n return this.finishToken(tok.jsxTagEnd);\n }\n\n if ((code === 34 || code === 39) && context == tc_oTag)\n return this.jsx_readString(code);\n }\n\n if (code === 60 && this.exprAllowed && this.input.charCodeAt(this.pos + 1) !== 33) {\n ++this.pos;\n return this.finishToken(tok.jsxTagStart);\n }\n return super.readToken(code);\n }\n\n updateContext(prevType) {\n if (this.type == tt.braceL) {\n var curContext = this.curContext();\n if (curContext == tc_oTag) this.context.push(tokContexts.b_expr);\n else if (curContext == tc_expr) this.context.push(tokContexts.b_tmpl);\n else super.updateContext(prevType);\n this.exprAllowed = true;\n } else if (this.type === tt.slash && prevType === tok.jsxTagStart) {\n this.context.length -= 2; // do not consider JSX expr -> JSX open tag -> ... anymore\n this.context.push(tc_cTag); // reconsider as closing tag context\n this.exprAllowed = false;\n } else {\n return super.updateContext(prevType);\n }\n }\n };\n}\n","/**\n * AST-based directive detection for 'use cache', 'use dynamic',\n * 'use client', and 'use server'.\n *\n * Uses acorn to parse source code and detect directives properly,\n * avoiding false positives from regex matching inside string literals,\n * comments, or template expressions.\n *\n * @module\n */\n\nimport { Parser } from 'acorn';\nimport acornJsx from 'acorn-jsx';\n\n// acorn parser with JSX support\nconst jsxParser = Parser.extend(acornJsx());\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface FileDirective {\n /** The directive value, e.g. 'use client', 'use server' */\n directive: string;\n /** 1-based line number where the directive appears */\n line: number;\n}\n\nexport interface FunctionWithDirective {\n /** Function name (or 'default' for anonymous default exports) */\n name: string;\n /** The directive found in the function body */\n directive: string;\n /** 1-based line number of the directive */\n directiveLine: number;\n /** Start offset of the function in the source */\n start: number;\n /** End offset of the function in the source */\n end: number;\n /** Start offset of the function body block (after the '{') */\n bodyStart: number;\n /** End offset of the function body block (the '}') */\n bodyEnd: number;\n /** Content between { and } of the function body */\n bodyContent: string;\n /** 'export ', 'export default ', or '' */\n prefix: string;\n /** Whether this is an arrow function */\n isArrow: boolean;\n /** The function signature (everything before the body '{') */\n declaration: string;\n}\n\n// ---------------------------------------------------------------------------\n// File-level directive detection\n// ---------------------------------------------------------------------------\n\n/**\n * Detect a file-level directive ('use client', 'use server', etc.).\n *\n * Per the ECMAScript spec, directives are string literal expression\n * statements at the start of a program body (before any non-directive\n * statements). This function checks the AST `Program.body` for\n * `ExpressionStatement` nodes whose expression is a `Literal` string\n * matching a known directive.\n *\n * Returns the first matching directive, or null if none found.\n */\nexport function detectFileDirective(\n code: string,\n directives: string[] = ['use client', 'use server']\n): FileDirective | null {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let ast: any;\n try {\n ast = jsxParser.parse(code, {\n ecmaVersion: 'latest',\n sourceType: 'module',\n locations: true,\n });\n } catch {\n // If the file fails to parse (e.g. TypeScript syntax), fall back to\n // a safe line-by-line check that only considers lines before any\n // non-comment, non-whitespace, non-directive content.\n return detectFileDirectiveFallback(code, directives);\n }\n\n for (const node of ast.body) {\n if (\n node.type === 'ExpressionStatement' &&\n node.expression.type === 'Literal' &&\n typeof node.expression.value === 'string'\n ) {\n if (directives.includes(node.expression.value)) {\n return {\n directive: node.expression.value,\n line: node.loc.start.line,\n };\n }\n } else {\n // Directives must appear before any non-directive statements\n break;\n }\n }\n\n return null;\n}\n\n/**\n * Fallback for TypeScript files that acorn cannot parse.\n *\n * Scans lines from the top of the file. Skips blank lines and comments.\n * Checks if the first real statement is a directive string literal.\n */\nfunction detectFileDirectiveFallback(code: string, directives: string[]): FileDirective | null {\n const lines = code.split('\\n');\n let inBlockComment = false;\n\n for (let i = 0; i < lines.length; i++) {\n let line = lines[i].trim();\n\n // Handle block comments\n if (inBlockComment) {\n const endIdx = line.indexOf('*/');\n if (endIdx === -1) continue;\n line = line.slice(endIdx + 2).trim();\n inBlockComment = false;\n if (!line) continue;\n }\n\n // Skip blank lines\n if (!line) continue;\n\n // Skip line comments\n if (line.startsWith('//')) continue;\n\n // Skip block comment start\n if (line.startsWith('/*')) {\n const endIdx = line.indexOf('*/', 2);\n if (endIdx === -1) {\n inBlockComment = true;\n continue;\n }\n line = line.slice(endIdx + 2).trim();\n if (!line) continue;\n }\n\n // Check for directive\n for (const dir of directives) {\n // Match 'directive' or \"directive\" optionally followed by ;\n if (\n line === `'${dir}'` ||\n line === `'${dir}';` ||\n line === `\"${dir}\"` ||\n line === `\"${dir}\";`\n ) {\n return { directive: dir, line: i + 1 };\n }\n }\n\n // First non-comment, non-blank line is not a directive — stop\n break;\n }\n\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Function-body directive detection\n// ---------------------------------------------------------------------------\n\n/**\n * Find all functions in the source code that contain a directive\n * (e.g. 'use cache', 'use dynamic') as their first body statement.\n *\n * Parses the source with acorn and walks the AST looking for function\n * declarations and arrow function expressions whose body is a\n * BlockStatement with a directive prologue.\n *\n * Returns an array of function info objects, sorted by position\n * (descending) for safe end-to-start replacement.\n */\nexport function findFunctionsWithDirective(\n code: string,\n directive: string\n): FunctionWithDirective[] {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let ast: any;\n try {\n ast = jsxParser.parse(code, {\n ecmaVersion: 'latest',\n sourceType: 'module',\n locations: true,\n });\n } catch {\n // TypeScript fallback: return empty — callers should use the quick\n // regex check first and skip non-matching files anyway\n return findFunctionsWithDirectiveFallback(code, directive);\n }\n\n const results: FunctionWithDirective[] = [];\n walkAst(ast, code, directive, results, []);\n\n // Sort descending by start position for safe end-to-start replacement\n results.sort((a, b) => b.start - a.start);\n return results;\n}\n\n/**\n * Recursive AST walker that finds functions with a directive in their body.\n */\nfunction walkAst(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n node: any,\n code: string,\n directive: string,\n results: FunctionWithDirective[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ancestors: any[]\n): void {\n if (!node || typeof node !== 'object') return;\n\n if (Array.isArray(node)) {\n for (const child of node) {\n walkAst(child, code, directive, results, ancestors);\n }\n return;\n }\n\n if (!node.type) return;\n\n // Check function declarations and expressions\n if (node.type === 'FunctionDeclaration' || node.type === 'FunctionExpression') {\n checkFunctionBody(node, code, directive, results, ancestors);\n }\n\n // Check arrow functions with block bodies\n if (node.type === 'ArrowFunctionExpression' && node.body && node.body.type === 'BlockStatement') {\n checkFunctionBody(node, code, directive, results, ancestors);\n }\n\n // Walk children\n const newAncestors = [...ancestors, node];\n for (const key of Object.keys(node)) {\n if (key === 'type' || key === 'loc' || key === 'start' || key === 'end') continue;\n const child = node[key];\n if (child && typeof child === 'object') {\n walkAst(child, code, directive, results, newAncestors);\n }\n }\n}\n\n/**\n * Check if a function's body starts with the target directive.\n */\nfunction checkFunctionBody(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n node: any,\n code: string,\n directive: string,\n results: FunctionWithDirective[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ancestors: any[]\n): void {\n const body = node.type === 'ArrowFunctionExpression' ? node.body : node.body;\n if (!body || body.type !== 'BlockStatement' || body.body.length === 0) return;\n\n // Check the first statement for a directive\n const firstStmt = body.body[0];\n if (\n firstStmt.type !== 'ExpressionStatement' ||\n firstStmt.expression.type !== 'Literal' ||\n firstStmt.expression.value !== directive\n ) {\n return;\n }\n\n // Determine function metadata from AST context\n const parent = ancestors[ancestors.length - 1];\n const grandparent = ancestors.length >= 2 ? ancestors[ancestors.length - 2] : null;\n\n let name = '';\n let prefix = '';\n const isArrow = node.type === 'ArrowFunctionExpression';\n let funcStart = node.start;\n let funcEnd = node.end;\n\n if (node.type === 'FunctionDeclaration') {\n name = node.id?.name || 'default';\n\n // Check for export\n if (parent?.type === 'ExportNamedDeclaration') {\n prefix = 'export ';\n funcStart = parent.start;\n funcEnd = parent.end;\n } else if (parent?.type === 'ExportDefaultDeclaration') {\n prefix = 'export default ';\n funcStart = parent.start;\n funcEnd = parent.end;\n }\n } else if (node.type === 'ArrowFunctionExpression') {\n // Arrow in variable declaration: const name = async () => {}\n if (parent?.type === 'VariableDeclarator' && parent.id?.name) {\n name = parent.id.name;\n // Include the full variable declaration\n if (grandparent?.type === 'VariableDeclaration') {\n funcStart = grandparent.start;\n funcEnd = grandparent.end;\n }\n }\n } else if (node.type === 'FunctionExpression') {\n // Function expression in variable: const name = async function() {}\n name = node.id?.name || '';\n if (parent?.type === 'VariableDeclarator' && parent.id?.name) {\n name = parent.id.name;\n if (grandparent?.type === 'VariableDeclaration') {\n funcStart = grandparent.start;\n funcEnd = grandparent.end;\n }\n }\n }\n\n if (!name) return; // Skip anonymous functions we can't name\n\n // Extract the body content (between the braces)\n const bodyStart = body.start + 1; // after '{'\n const bodyEnd = body.end - 1; // before '}'\n const bodyContent = code.slice(bodyStart, bodyEnd);\n\n // Extract declaration (everything before the body '{')\n const declaration = code.slice(funcStart, body.start).trim();\n\n results.push({\n name,\n directive,\n directiveLine: firstStmt.loc.start.line,\n start: funcStart,\n end: funcEnd,\n bodyStart,\n bodyEnd,\n bodyContent,\n prefix,\n isArrow,\n declaration,\n });\n}\n\n// ---------------------------------------------------------------------------\n// TypeScript fallback for function-body directives\n// ---------------------------------------------------------------------------\n\n/**\n * Fallback that uses regex to find functions with directives when acorn\n * cannot parse the file (TypeScript with type annotations).\n *\n * This is less precise but handles common patterns. The regex approach\n * is only used as a fallback — pure JS/JSX files always use the AST path.\n */\nfunction findFunctionsWithDirectiveFallback(\n code: string,\n directive: string\n): FunctionWithDirective[] {\n const results: FunctionWithDirective[] = [];\n const directivePattern = new RegExp(`['\"]${escapeRegex(directive)}['\"]`);\n\n // Quick bail-out\n if (!directivePattern.test(code)) return results;\n\n // Pattern 1: function declarations\n const fnDeclPattern =\n /(?:(export\\s+default\\s+|export\\s+))?async\\s+function\\s+(\\w+)\\s*\\([^)]*\\)\\s*\\{/g;\n let match: RegExpExecArray | null;\n\n while ((match = fnDeclPattern.exec(code)) !== null) {\n const prefix = match[1]?.trim() || '';\n const name = match[2];\n const bodyStart = match.index + match[0].length;\n const bodyEnd = findMatchingBraceFallback(code, bodyStart - 1);\n if (bodyEnd === -1) continue;\n\n const bodyContent = code.slice(bodyStart, bodyEnd);\n // Check that the directive is the first meaningful statement\n const trimmedBody = bodyContent.trimStart();\n if (!trimmedBody.startsWith(`'${directive}'`) && !trimmedBody.startsWith(`\"${directive}\"`))\n continue;\n\n const directiveLine =\n code.slice(0, bodyStart).split('\\n').length +\n bodyContent.slice(0, bodyContent.indexOf(directive)).split('\\n').length -\n 1;\n\n results.push({\n name,\n directive,\n directiveLine,\n start: match.index,\n end: bodyEnd + 1,\n bodyStart,\n bodyEnd,\n bodyContent,\n prefix: prefix ? prefix + ' ' : '',\n isArrow: false,\n declaration: code.slice(match.index, bodyStart - 1).trimEnd(),\n });\n }\n\n // Pattern 2: arrow functions\n const arrowPattern = /(?:const|let|var)\\s+(\\w+)\\s*=\\s*async\\s*(\\([^)]*\\)|[^=]*?)\\s*=>\\s*\\{/g;\n while ((match = arrowPattern.exec(code)) !== null) {\n const name = match[1];\n const bodyStart = match.index + match[0].length;\n const bodyEnd = findMatchingBraceFallback(code, bodyStart - 1);\n if (bodyEnd === -1) continue;\n\n const bodyContent = code.slice(bodyStart, bodyEnd);\n const trimmedBody = bodyContent.trimStart();\n if (!trimmedBody.startsWith(`'${directive}'`) && !trimmedBody.startsWith(`\"${directive}\"`))\n continue;\n\n const directiveLine =\n code.slice(0, bodyStart).split('\\n').length +\n bodyContent.slice(0, bodyContent.indexOf(directive)).split('\\n').length -\n 1;\n\n results.push({\n name,\n directive,\n directiveLine,\n start: match.index,\n end: bodyEnd + 1,\n bodyStart,\n bodyEnd,\n bodyContent,\n prefix: '',\n isArrow: true,\n declaration: code.slice(match.index, bodyStart - 1).trimEnd(),\n });\n }\n\n results.sort((a, b) => b.start - a.start);\n return results;\n}\n\nfunction escapeRegex(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n/**\n * Find matching closing brace — same algorithm as cache-transform.ts\n * but kept here for the fallback path only.\n */\nfunction findMatchingBraceFallback(code: string, openPos: number): number {\n let depth = 1;\n let i = openPos + 1;\n\n while (i < code.length && depth > 0) {\n const ch = code[i];\n\n if (ch === \"'\" || ch === '\"') {\n i = skipStringFallback(code, i);\n continue;\n }\n if (ch === '`') {\n i = skipTemplateFallback(code, i);\n continue;\n }\n if (ch === '/' && code[i + 1] === '/') {\n i = code.indexOf('\\n', i);\n if (i === -1) return -1;\n i++;\n continue;\n }\n if (ch === '/' && code[i + 1] === '*') {\n i = code.indexOf('*/', i + 2);\n if (i === -1) return -1;\n i += 2;\n continue;\n }\n\n if (ch === '{') depth++;\n else if (ch === '}') depth--;\n i++;\n }\n\n return depth === 0 ? i - 1 : -1;\n}\n\nfunction skipStringFallback(code: string, start: number): number {\n const quote = code[start];\n let i = start + 1;\n while (i < code.length) {\n if (code[i] === '\\\\') {\n i += 2;\n continue;\n }\n if (code[i] === quote) return i + 1;\n i++;\n }\n return i;\n}\n\nfunction skipTemplateFallback(code: string, start: number): number {\n let i = start + 1;\n while (i < code.length) {\n if (code[i] === '\\\\') {\n i += 2;\n continue;\n }\n if (code[i] === '`') return i + 1;\n if (code[i] === '$' && code[i + 1] === '{') {\n i = findMatchingBraceFallback(code, i + 1) + 1;\n continue;\n }\n i++;\n }\n return i;\n}\n\n// ---------------------------------------------------------------------------\n// Convenience: quick regex check (for fast bail-out before AST parsing)\n// ---------------------------------------------------------------------------\n\n/**\n * Quick regex check for whether code contains a directive string.\n * Use as a fast bail-out before calling the AST-based functions.\n */\nexport function containsDirective(code: string, directive: string): boolean {\n return code.includes(directive);\n}\n","import type { Plugin } from 'vite';\nimport { findFunctionsWithDirective, containsDirective } from '#/utils/directive-parser.js';\n\n/**\n * Parse a cacheLife duration string to seconds.\n * Supports: '30s', '5m', '1h', '2d', '1w', or a plain number (seconds).\n */\nexport function parseCacheLife(value: string | number): number {\n if (typeof value === 'number') return value;\n\n const match = value.match(/^(\\d+)(s|m|h|d|w)$/);\n if (!match) {\n throw new Error(\n `Invalid cacheLife value: \"${value}\". Expected format: \"30s\", \"5m\", \"1h\", \"2d\", \"1w\", or a number.`\n );\n }\n\n const amount = parseInt(match[1], 10);\n const unit = match[2];\n const multipliers: Record<string, number> = { s: 1, m: 60, h: 3600, d: 86400, w: 604800 };\n return amount * multipliers[unit];\n}\n\n// Default TTL when no cacheLife() is specified (Infinity means cache until explicit invalidation).\nconst DEFAULT_TTL = Infinity;\n\nexport interface CacheTransformWarning {\n message: string;\n functionName: string;\n}\n\ninterface TransformResult {\n code: string;\n map?: null;\n warnings?: CacheTransformWarning[];\n}\n\n/**\n * Match cacheLife() calls: cacheLife('1h'), cacheLife(\"5m\"), cacheLife(300)\n */\nconst CACHE_LIFE_PATTERN = /cacheLife\\(\\s*(?:'([^']+)'|\"([^\"]+)\"|(\\d+))\\s*\\)/;\n\n/**\n * Strip the 'use cache' directive and cacheLife() call from a function body.\n * Returns the cleaned body and the extracted TTL.\n */\nfunction extractCacheDirectives(body: string): { cleanBody: string; ttl: number } {\n let ttl = DEFAULT_TTL;\n\n // Remove 'use cache' / \"use cache\" directive (including optional semicolon and newline)\n let cleanBody = body.replace(/\\s*['\"]use cache['\"];?\\s*\\n?/, '\\n');\n\n // Extract and remove cacheLife() calls\n const lifeMatch = cleanBody.match(CACHE_LIFE_PATTERN);\n if (lifeMatch) {\n const value = lifeMatch[1] || lifeMatch[2] || parseInt(lifeMatch[3], 10);\n ttl = parseCacheLife(value);\n cleanBody = cleanBody.replace(/\\s*cacheLife\\([^)]*\\);?\\s*\\n?/, '\\n');\n }\n\n return { cleanBody, ttl };\n}\n\n/**\n * Determine if a function name is a React component (PascalCase).\n */\nfunction isComponentName(name: string): boolean {\n return /^[A-Z]/.test(name);\n}\n\n/**\n * Pattern matching page/layout file conventions in a dynamic route segment.\n * Matches paths like: app/[slug]/page.tsx, app/[id]/layout.ts, etc.\n */\nconst DYNAMIC_ROUTE_PAGE_PATTERN = /\\/\\[[^\\]]+\\].*\\/(page|layout)\\.[jt]sx?$/;\n\n/**\n * Detect if a function declaration has Promise-typed parameters.\n *\n * Checks for common patterns:\n * - `params: Promise<...>`\n * - `{ params }: { params: Promise<...> }`\n * - `props: { params: Promise<...> }`\n */\nconst PROMISE_PARAMS_PATTERN = /params\\s*(?::|.*?:)\\s*Promise\\s*</;\n\n/**\n * Check if a 'use cache' function in a dynamic route page/layout receives\n * Promise-typed params, which are not serializable as cache keys.\n */\nexport function detectPromiseParamsWarning(\n declaration: string,\n functionName: string,\n fileId: string\n): CacheTransformWarning | null {\n if (!DYNAMIC_ROUTE_PAGE_PATTERN.test(fileId)) return null;\n if (!PROMISE_PARAMS_PATTERN.test(declaration)) return null;\n\n return {\n message:\n `'use cache' on \"${functionName}\" in \"${fileId}\" receives Promise params. ` +\n `Promise is not serializable as a cache key and will cause runtime errors. ` +\n `Either remove 'use cache' or await the params before using them in a separate cached function.`,\n functionName,\n };\n}\n\n/**\n * Transform source code containing 'use cache' directives into\n * registerCachedFunction() calls.\n *\n * Returns null if no transformations were made.\n */\nexport function transformUseCache(code: string, fileId: string): TransformResult | null {\n if (!containsDirective(code, 'use cache')) return null;\n\n const functions = findFunctionsWithDirective(code, 'use cache');\n if (functions.length === 0) return null;\n\n let result = code;\n let needsImport = false;\n const warnings: CacheTransformWarning[] = [];\n\n // Process functions from end to start (sorted descending by start position)\n for (const fn of functions) {\n // Warn if function receives Promise params in a dynamic route page/layout\n const promiseWarning = detectPromiseParamsWarning(fn.declaration, fn.name, fileId);\n if (promiseWarning) warnings.push(promiseWarning);\n const { cleanBody, ttl } = extractCacheDirectives(fn.bodyContent);\n const stableId = `${fileId}#${fn.name}`;\n const isComponent = isComponentName(fn.name);\n\n // Build the options object\n const optsParts = [`ttl: ${ttl === Infinity ? 'Infinity' : ttl}`];\n optsParts.push(`id: '${stableId}'`);\n if (isComponent) {\n optsParts.push('isComponent: true');\n }\n const optsStr = `{ ${optsParts.join(', ')} }`;\n\n // Build the replacement\n let replacement: string;\n if (fn.isArrow) {\n // const Name = async (...) => { body } → const Name = registerCachedFunction(async (...) => { body }, opts)\n const arrowSig = fn.declaration.replace(/^(?:const|let|var)\\s+\\w+\\s*=\\s*/, '');\n replacement = `const ${fn.name} = registerCachedFunction(${arrowSig} {${cleanBody}}, ${optsStr})`;\n } else {\n // async function Name(...) { body } → const Name = registerCachedFunction(async function Name(...) { body }, opts)\n const fnDecl = fn.declaration.replace(/^(?:export\\s+default\\s+|export\\s+)?/, '');\n const exportPrefix = fn.prefix.includes('default')\n ? 'export default '\n : fn.prefix.includes('export')\n ? 'export '\n : '';\n\n replacement = `${exportPrefix}const ${fn.name} = registerCachedFunction(${fnDecl} {${cleanBody}}, ${optsStr})`;\n }\n\n result = result.slice(0, fn.start) + replacement + result.slice(fn.end);\n needsImport = true;\n }\n\n if (needsImport) {\n // Add the import at the top of the file\n result = `import { registerCachedFunction } from '@timber/app/cache';\\n` + result;\n }\n\n return { code: result, map: null, warnings: warnings.length > 0 ? warnings : undefined };\n}\n\n/**\n * Vite plugin: timber-cache\n *\n * Transforms 'use cache' directives into registerCachedFunction() calls.\n * Only runs in the RSC environment.\n */\nexport function cacheTransformPlugin(): Plugin {\n return {\n name: 'timber-cache',\n\n transform(code, id) {\n // Only transform in RSC environment\n // Skip node_modules and non-JS/TS files\n if (id.includes('node_modules')) return null;\n if (!/\\.[jt]sx?$/.test(id)) return null;\n\n // Quick bail-out: no 'use cache' directive in this file\n if (!containsDirective(code, 'use cache')) return null;\n\n const result = transformUseCache(code, id);\n if (result?.warnings) {\n for (const w of result.warnings) {\n this.warn(`[timber] ${w.message}`);\n }\n }\n return result;\n },\n };\n}\n","/**\n * timber-content — Vite sub-plugin for content collections.\n *\n * Wraps @content-collections/vite to provide content collection support.\n * Activates only when a content-collections.ts config file exists at the\n * project root.\n *\n * Design doc: 20-content-collections.md §\"Content Collections\"\n */\n\nimport type { Plugin } from 'vite';\nimport { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { PluginContext } from '#/index.js';\n\nconst CONFIG_FILE_NAMES = [\n 'content-collections.ts',\n 'content-collections.js',\n 'content-collections.mts',\n 'content-collections.mjs',\n];\n\n/**\n * Find the content-collections config file at the project root.\n * Returns the filename (not full path) if found, otherwise undefined.\n */\nfunction findConfigFile(root: string): string | undefined {\n for (const name of CONFIG_FILE_NAMES) {\n if (existsSync(join(root, name))) return name;\n }\n return undefined;\n}\n\n/**\n * Create the timber-content Vite plugin.\n *\n * Delegates all content scanning, validation, code generation, and file watching\n * to @content-collections/vite. This plugin only handles detection and activation.\n */\nexport function timberContent(ctx: PluginContext): Plugin {\n let innerPlugin: Plugin | null = null;\n\n async function activate(root: string): Promise<void> {\n if (innerPlugin !== null) return;\n\n const configFile = findConfigFile(root);\n if (!configFile) return;\n\n let createPlugin: ((options?: { configPath?: string }) => Plugin) | undefined;\n try {\n const mod = await import('@content-collections/vite');\n createPlugin = (mod.default ?? mod) as typeof createPlugin;\n } catch {\n throw new Error(\n [\n '[timber] Content collections are enabled but @content-collections/vite is not installed.',\n '',\n 'Install content-collections:',\n ' pnpm add -D @content-collections/core @content-collections/vite',\n '',\n 'For MDX content, also install:',\n ' pnpm add -D @content-collections/mdx',\n '',\n 'Content collections are activated because a content-collections.ts file exists.',\n ].join('\\n')\n );\n }\n\n if (createPlugin) {\n innerPlugin = createPlugin({ configPath: configFile });\n }\n }\n\n return {\n name: 'timber-content',\n\n async config(config, env) {\n const root = config.root ?? ctx.root;\n ctx.timer.start('content-activate');\n await activate(root);\n ctx.timer.end('content-activate');\n if (!innerPlugin) return;\n if (typeof innerPlugin.config === 'function') {\n return innerPlugin.config.call(this, config, env);\n }\n },\n\n async configResolved(config) {\n if (!innerPlugin) return;\n if (typeof innerPlugin.configResolved === 'function') {\n await (innerPlugin.configResolved as (...args: unknown[]) => unknown).call(this, config);\n }\n },\n\n async buildStart(options) {\n if (!innerPlugin) return;\n if (typeof innerPlugin.buildStart === 'function') {\n await (innerPlugin.buildStart as (...args: unknown[]) => unknown).call(this, options);\n }\n },\n\n async resolveId(source: string, importer: string | undefined, options: unknown) {\n if (!innerPlugin) return null;\n if (typeof innerPlugin.resolveId === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (innerPlugin.resolveId as any).call(this, source, importer, options);\n }\n return null;\n },\n\n async load(id: string) {\n if (!innerPlugin) return null;\n if (typeof innerPlugin.load === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (innerPlugin.load as any).call(this, id);\n }\n return null;\n },\n\n async transform(code: string, id: string) {\n if (!innerPlugin) return null;\n if (typeof innerPlugin.transform === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (innerPlugin.transform as any).call(this, code, id);\n }\n return null;\n },\n\n async configureServer(server) {\n if (!innerPlugin) return;\n if (typeof innerPlugin.configureServer === 'function') {\n await (innerPlugin.configureServer as (...args: unknown[]) => unknown).call(this, server);\n }\n },\n };\n}\n","/**\n * Dev error overlay — formats and sends errors to Vite's browser overlay and stderr.\n *\n * Integrates with Vite's built-in error overlay (`server.ssrFixStacktrace` +\n * `server.hot.send`) rather than implementing a custom overlay.\n *\n * Design doc: 21-dev-server.md §\"Error Overlay\"\n */\n\nimport type { ViteDevServer } from 'vite';\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\n/** The phase of the pipeline where the error occurred. */\nexport type ErrorPhase =\n | 'module-transform'\n | 'proxy'\n | 'middleware'\n | 'access'\n | 'render'\n | 'handler';\n\n/** Labels for terminal output. */\nconst PHASE_LABELS: Record<ErrorPhase, string> = {\n 'module-transform': 'Module Transform',\n 'proxy': 'Proxy',\n 'middleware': 'Middleware',\n 'access': 'Access Check',\n 'render': 'RSC Render',\n 'handler': 'Route Handler',\n};\n\n// ─── Frame Classification ───────────────────────────────────────────────────\n\nexport type FrameType = 'app' | 'framework' | 'internal';\n\n/**\n * Classify a stack frame line by origin.\n *\n * - 'app': user application code (in project root, not node_modules)\n * - 'framework': timber-app internal code\n * - 'internal': node_modules, Node.js internals\n */\nexport function classifyFrame(frameLine: string, projectRoot: string): FrameType {\n // Strip leading whitespace and \"at \"\n const trimmed = frameLine.trim();\n\n if (trimmed.includes('packages/timber-app/')) return 'framework';\n if (trimmed.includes('node_modules/')) return 'internal';\n if (trimmed.startsWith('at node:') || trimmed.includes('(node:')) return 'internal';\n if (trimmed.includes(projectRoot)) return 'app';\n\n return 'internal';\n}\n\n// ─── Component Stack Extraction ─────────────────────────────────────────────\n\n/**\n * Extract the React component stack from an error, if present.\n * React attaches this as `componentStack` during renderToReadableStream errors.\n */\nexport function extractComponentStack(error: unknown): string | null {\n if (\n error &&\n typeof error === 'object' &&\n 'componentStack' in error &&\n typeof (error as Record<string, unknown>).componentStack === 'string'\n ) {\n return (error as Record<string, unknown>).componentStack as string;\n }\n return null;\n}\n\n// ─── First App Frame Parsing ────────────────────────────────────────────────\n\ninterface SourceLocation {\n file: string;\n line: number;\n column: number;\n}\n\n/**\n * Parse the first application frame from a stack trace.\n * Returns file/line/column for the overlay's `loc` field.\n */\nexport function parseFirstAppFrame(stack: string, projectRoot: string): SourceLocation | null {\n const lines = stack.split('\\n');\n // Match patterns like:\n // at functionName (/absolute/path:line:column)\n // at /absolute/path:line:column\n const parenRegex = /\\(([^)]+):(\\d+):(\\d+)\\)/;\n const bareRegex = /at (\\/[^:]+):(\\d+):(\\d+)/;\n\n for (const line of lines) {\n if (classifyFrame(line, projectRoot) !== 'app') continue;\n\n const match = parenRegex.exec(line) ?? bareRegex.exec(line);\n if (!match) continue;\n\n const [, file, lineNum, col] = match;\n if (file && lineNum && col) {\n return { file, line: parseInt(lineNum, 10), column: parseInt(col, 10) };\n }\n }\n\n return null;\n}\n\n// ─── Error Phase Classification ─────────────────────────────────────────────\n\n/**\n * Classify the error phase by inspecting the error's stack trace.\n * Falls back to 'render' if no specific phase can be determined.\n */\nexport function classifyErrorPhase(error: Error, projectRoot: string): ErrorPhase {\n const stack = error.stack ?? '';\n\n // Check for React component stack (render error)\n if (extractComponentStack(error)) return 'render';\n\n // Check for specific file patterns in app frames\n const appRoot = projectRoot.replace(/\\/$/, '');\n if (stack.includes(`${appRoot}/app/`) || stack.includes('/app/')) {\n if (stack.includes('/middleware.ts') || stack.includes('/middleware.js')) return 'middleware';\n if (stack.includes('/access.ts') || stack.includes('/access.js')) return 'access';\n if (stack.includes('/route.ts') || stack.includes('/route.js')) return 'handler';\n }\n\n return 'render';\n}\n\n// ─── Terminal Formatting ────────────────────────────────────────────────────\n\n// ANSI codes\nconst RED = '\\x1b[31m';\nconst DIM = '\\x1b[2m';\nconst RESET = '\\x1b[0m';\nconst BOLD = '\\x1b[1m';\n\n/**\n * Format an error for terminal output.\n *\n * - Red for the error message and phase label\n * - Dim for framework-internal frames\n * - Normal for application frames\n * - Separate section for component stack (if present)\n */\nexport function formatTerminalError(error: Error, phase: ErrorPhase, projectRoot: string): string {\n const lines: string[] = [];\n\n // Phase header + error message\n lines.push(`${RED}${BOLD}[timber] ${PHASE_LABELS[phase]} Error${RESET}`);\n lines.push(`${RED}${error.message}${RESET}`);\n lines.push('');\n\n // Component stack (if present)\n const componentStack = extractComponentStack(error);\n if (componentStack) {\n lines.push(`${BOLD}Component Stack:${RESET}`);\n for (const csLine of componentStack.trim().split('\\n')) {\n lines.push(` ${csLine.trim()}`);\n }\n lines.push('');\n }\n\n // Stack trace with frame dimming\n if (error.stack) {\n lines.push(`${BOLD}Stack Trace:${RESET}`);\n const stackLines = error.stack.split('\\n').slice(1); // Skip the first line (message)\n for (const stackLine of stackLines) {\n const frameType = classifyFrame(stackLine, projectRoot);\n if (frameType === 'app') {\n lines.push(stackLine);\n } else {\n lines.push(`${DIM}${stackLine}${RESET}`);\n }\n }\n }\n\n return lines.join('\\n');\n}\n\n// ─── Overlay Integration ────────────────────────────────────────────────────\n\n/**\n * Send an error to Vite's browser overlay and log it to stderr.\n *\n * Uses `server.ssrFixStacktrace()` to map stack traces back to source,\n * then sends the error via `server.hot.send()` for the browser overlay.\n *\n * The dev server remains running — errors are handled, not fatal.\n */\nexport function sendErrorToOverlay(\n server: ViteDevServer,\n error: Error,\n phase: ErrorPhase,\n projectRoot: string\n): void {\n // Fix stack trace to use source-mapped positions\n server.ssrFixStacktrace(error);\n\n // Log to stderr with frame dimming\n const formatted = formatTerminalError(error, phase, projectRoot);\n process.stderr.write(`${formatted}\\n`);\n\n // Build overlay payload\n const loc = parseFirstAppFrame(error.stack ?? '', projectRoot);\n const componentStack = extractComponentStack(error);\n\n let message = error.message;\n if (componentStack) {\n message = `${error.message}\\n\\nComponent Stack:\\n${componentStack.trim()}`;\n }\n\n // Send to browser via Vite's error overlay protocol\n try {\n server.hot.send({\n type: 'error',\n err: {\n message,\n stack: error.stack ?? '',\n id: loc?.file,\n plugin: `timber (${PHASE_LABELS[phase]})`,\n loc: loc ? { file: loc.file, line: loc.line, column: loc.column } : undefined,\n },\n });\n } catch {\n // Overlay send must never crash the dev server\n }\n}\n","/**\n * timber-dev-server — Vite sub-plugin for dev server request handling.\n *\n * Registers a configureServer middleware that intercepts requests and\n * routes them through the timber pipeline:\n * proxy.ts → canonicalize → route match → middleware → access → render → flush\n *\n * The RSC entry module is loaded via Vite's ssrLoadModule, which uses\n * Vite's dev module graph instead of built bundles. The full pipeline\n * (including proxy.ts) runs on every request.\n *\n * Design docs: 18-build-system.md §\"Dev Server\", 02-rendering-pipeline.md\n */\n\nimport type { Plugin, ViteDevServer } from 'vite';\nimport { isRunnableDevEnvironment } from 'vite';\nimport type { IncomingMessage, ServerResponse } from 'node:http';\nimport { join } from 'node:path';\nimport type { PluginContext } from '#/index.js';\nimport { setViteServer } from '#/server/dev-warnings.js';\nimport { sendErrorToOverlay, classifyErrorPhase, parseFirstAppFrame } from './dev-error-overlay.js';\n\n// ─── Constants ────────────────────────────────────────────────────────────\n\nconst RSC_ENTRY_ID = 'virtual:timber-rsc-entry';\n\n/**\n * Config file names that trigger a full dev server restart when changed.\n * See 21-dev-server.md §HMR Wiring — config is loaded once at startup.\n */\nconst CONFIG_FILE_NAMES = ['timber.config.ts', 'timber.config.js', 'timber.config.mjs'];\n\n/**\n * URL prefixes that are Vite-internal and should never be intercepted.\n * These are passed through to Vite's built-in middleware.\n */\nconst VITE_INTERNAL_PREFIXES = [\n '/@', // /@vite/client, /@fs/, /@id/\n '/__vite', // /__vite_hmr, /__vite_ping\n '/node_modules/',\n];\n\n/**\n * File extensions that indicate static asset requests.\n * These are passed through to Vite's static file serving.\n */\nconst ASSET_EXTENSIONS =\n /\\.(?:js|ts|tsx|jsx|css|map|json|svg|png|jpg|jpeg|gif|webp|avif|ico|woff|woff2|ttf|eot|mp4|webm|ogg|mp3|wav)(?:\\?.*)?$/;\n\n// ─── Plugin ───────────────────────────────────────────────────────────────\n\n/**\n * Create the timber-dev-server Vite plugin.\n *\n * Hook: configureServer (returns post-hook to register after Vite's middleware)\n */\nexport function timberDevServer(ctx: PluginContext): Plugin {\n return {\n name: 'timber-dev-server',\n\n // Only active in dev mode (command === 'serve'), not during build.\n // See 21-dev-server.md §Plugin Registration.\n apply: 'serve',\n\n /**\n * Register the dev server middleware and config file watcher.\n *\n * Registers as a pre-hook (no return value) so our middleware runs\n * before Vite's built-in SPA fallback / historyApiFallback. This\n * ensures we see the original URL (e.g. /blog) rather than a\n * rewritten /index.html. Vite-internal and asset requests are\n * filtered out explicitly and passed through to Vite.\n */\n configureServer(server: ViteDevServer) {\n // Watch config files for full restart.\n // timber.config.ts is loaded once at startup — any change requires\n // a full dev server restart. See 21-dev-server.md §HMR Wiring.\n const configPaths = CONFIG_FILE_NAMES.map((name) => join(ctx.root, name));\n\n server.watcher.on('change', (filePath: string) => {\n if (configPaths.includes(filePath)) {\n server.restart();\n }\n });\n\n // Register Vite server for browser console warning forwarding.\n // See 21-dev-server.md §Dev-Mode Warnings.\n setViteServer(server);\n\n // Listen for client-side errors forwarded from the browser.\n // The browser entry sends 'timber:client-error' events via HMR\n // for uncaught errors and unhandled rejections. We echo them back\n // as Vite's '{ type: \"error\" }' payload to trigger the overlay.\n listenForClientErrors(server, ctx.root);\n\n // Pre-hook — registers middleware before Vite's internals\n server.middlewares.use(createTimberMiddleware(server, ctx.root));\n\n // Log startup timing summary. configureServer runs on all plugins\n // before the server listens, so this captures the full cold start.\n ctx.timer.end('dev-server-setup');\n const summary = ctx.timer.formatSummary();\n if (summary) {\n console.log(summary);\n }\n },\n };\n}\n\n// ─── Middleware ────────────────────────────────────────────────────────────\n\n/**\n * Create the Connect middleware that routes requests through the timber pipeline.\n *\n * For route requests (HTML pages, API endpoints), the middleware:\n * 1. Loads the RSC entry via ssrLoadModule\n * 2. Converts the Node request to a Web Request\n * 3. Passes it through the RSC handler (which runs the full pipeline)\n * 4. Converts the Web Response back to a Node response\n *\n * For non-route requests (assets, Vite internals, HMR), the middleware\n * calls next() to let Vite handle them.\n */\nfunction createTimberMiddleware(server: ViteDevServer, projectRoot: string) {\n return async (req: IncomingMessage, res: ServerResponse, next: () => void): Promise<void> => {\n const url = req.url;\n if (!url) {\n next();\n return;\n }\n\n // Pass through Vite-internal requests\n if (isViteInternal(url)) {\n next();\n return;\n }\n\n // Pass through static asset requests\n if (isAssetRequest(url)) {\n next();\n return;\n }\n\n // Step 1: Load the RSC entry module from the RSC environment.\n // The RSC entry runs in the 'rsc' Vite environment (separate module\n // graph with react-server conditions). In dev mode, this uses the\n // environment's module runner for HMR-aware loading.\n let handler: (req: Request) => Promise<Response>;\n try {\n const rscEnv = server.environments.rsc;\n if (!isRunnableDevEnvironment(rscEnv)) {\n throw new Error('[timber] RSC environment is not runnable');\n }\n const rscModule = await rscEnv.runner.import(RSC_ENTRY_ID);\n handler = rscModule.default as (req: Request) => Promise<Response>;\n\n // Wire pipeline errors into the browser error overlay.\n // setDevPipelineErrorHandler is only defined in dev (rsc-entry.ts exports it).\n const setHandler = rscModule.setDevPipelineErrorHandler as\n | ((fn: (error: Error, phase: string) => void) => void)\n | undefined;\n if (typeof setHandler === 'function') {\n setHandler((error) => {\n sendErrorToOverlay(server, error, classifyErrorPhase(error, projectRoot), projectRoot);\n });\n }\n } catch (error) {\n // Module transform error — syntax error, missing import, etc.\n // Vite may already show its own overlay for these, but we still\n // log to stderr with frame dimming for the terminal.\n if (error instanceof Error) {\n sendErrorToOverlay(server, error, 'module-transform', projectRoot);\n }\n respond500(res, error);\n return;\n }\n\n if (typeof handler !== 'function') {\n console.error('[timber] RSC entry module does not export a default function');\n next();\n return;\n }\n\n // Step 2: Run the pipeline.\n try {\n // Convert Node IncomingMessage → Web Request\n const webRequest = toWebRequest(req);\n\n // Run the full pipeline\n const webResponse = await handler(webRequest);\n\n // Convert Web Response → Node ServerResponse\n await sendWebResponse(res, webResponse);\n } catch (error) {\n // Pipeline error — classify the phase, send to overlay, respond 500.\n // The dev server remains running for recovery on file fix + HMR.\n if (error instanceof Error) {\n const phase = classifyErrorPhase(error, projectRoot);\n sendErrorToOverlay(server, error, phase, projectRoot);\n } else {\n process.stderr.write(`\\x1b[31m[timber] Dev server error:\\x1b[0m ${String(error)}\\n`);\n }\n respond500(res, error);\n }\n };\n}\n\n/**\n * Send a 500 response without crashing the dev server.\n */\nfunction respond500(res: ServerResponse, error: unknown): void {\n if (!res.headersSent) {\n res.statusCode = 500;\n res.setHeader('content-type', 'text/plain');\n res.end(\n `[timber] Internal server error\\n\\n${error instanceof Error ? (error.stack ?? error.message) : String(error)}`\n );\n }\n}\n\n// ─── Request/Response Conversion ──────────────────────────────────────────\n\n/**\n * Convert a Node IncomingMessage to a Web Request.\n *\n * Constructs the full URL from the Host header and request URL,\n * and forwards the method, headers, and body.\n */\nfunction toWebRequest(nodeReq: IncomingMessage): Request {\n const protocol = 'http';\n const host = nodeReq.headers.host ?? 'localhost';\n const url = `${protocol}://${host}${nodeReq.url}`;\n\n const headers = new Headers();\n for (const [key, value] of Object.entries(nodeReq.headers)) {\n if (value === undefined) continue;\n if (Array.isArray(value)) {\n for (const v of value) {\n headers.append(key, v);\n }\n } else {\n headers.set(key, value);\n }\n }\n\n const method = nodeReq.method ?? 'GET';\n const hasBody = method !== 'GET' && method !== 'HEAD';\n\n return new Request(url, {\n method,\n headers,\n body: hasBody ? nodeReadableToWebStream(nodeReq) : undefined,\n // @ts-expect-error — duplex is required for streaming request bodies\n duplex: hasBody ? 'half' : undefined,\n });\n}\n\n/**\n * Convert a Node Readable stream to a Web ReadableStream.\n */\nfunction nodeReadableToWebStream(nodeStream: IncomingMessage): ReadableStream<Uint8Array> {\n return new ReadableStream({\n start(controller) {\n nodeStream.on('data', (chunk: Buffer) => {\n controller.enqueue(new Uint8Array(chunk));\n });\n nodeStream.on('end', () => {\n controller.close();\n });\n nodeStream.on('error', (err) => {\n controller.error(err);\n });\n },\n });\n}\n\n/**\n * Write a Web Response to a Node ServerResponse.\n *\n * Copies status code, headers, and streams the body.\n */\nasync function sendWebResponse(nodeRes: ServerResponse, webResponse: Response): Promise<void> {\n nodeRes.statusCode = webResponse.status;\n\n // Copy headers. Set-Cookie needs special handling: Headers.forEach()\n // joins multiple Set-Cookie values with \", \" into one entry, but each\n // cookie must be its own header per RFC 6265 §4.1. Use getSetCookie()\n // to preserve individual Set-Cookie headers.\n webResponse.headers.forEach((value, key) => {\n if (key.toLowerCase() !== 'set-cookie') {\n nodeRes.setHeader(key, value);\n }\n });\n const setCookies = webResponse.headers.getSetCookie();\n if (setCookies.length > 0) {\n nodeRes.setHeader('Set-Cookie', setCookies);\n }\n\n // Stream the body\n if (!webResponse.body) {\n nodeRes.end();\n return;\n }\n\n // Flush headers immediately so the client can start processing\n // the response (critical for SSE and other streaming responses).\n nodeRes.flushHeaders();\n\n const reader = webResponse.body.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n // write() returns false when the kernel buffer is full, but we\n // don't need back-pressure here — just keep pushing chunks.\n nodeRes.write(value);\n }\n } finally {\n reader.releaseLock();\n nodeRes.end();\n }\n}\n\n// ─── URL Classification ──────────────────────────────────────────────────\n\n/**\n * Check if a URL is a Vite-internal request that should be passed through.\n */\nfunction isViteInternal(url: string): boolean {\n return VITE_INTERNAL_PREFIXES.some((prefix) => url.startsWith(prefix));\n}\n\n/**\n * Check if a URL looks like a static asset request.\n */\nfunction isAssetRequest(url: string): boolean {\n return ASSET_EXTENSIONS.test(url);\n}\n\n// ─── Client Error Listener ─────────────────────────────────────────────\n\ninterface ClientErrorPayload {\n message: string;\n stack: string;\n componentStack: string | null;\n}\n\n/**\n * Listen for client-side errors forwarded from the browser via HMR.\n *\n * The browser entry catches uncaught errors and unhandled rejections,\n * then sends them as 'timber:client-error' custom events. We parse\n * the first app frame for the overlay's loc field and forward the\n * error to Vite's overlay protocol.\n */\nfunction listenForClientErrors(server: ViteDevServer, projectRoot: string): void {\n server.hot.on('timber:client-error', (data: ClientErrorPayload) => {\n const loc = parseFirstAppFrame(data.stack, projectRoot);\n\n let message = data.message;\n if (data.componentStack) {\n message = `${data.message}\\n\\nComponent Stack:\\n${data.componentStack.trim()}`;\n }\n\n // Log to stderr\n const RED = '\\x1b[31m';\n const BOLD = '\\x1b[1m';\n const RESET = '\\x1b[0m';\n process.stderr.write(\n `${RED}${BOLD}[timber] Client Error${RESET}\\n${RED}${data.message}${RESET}\\n\\n`\n );\n\n // Forward to Vite's overlay\n try {\n server.hot.send({\n type: 'error',\n err: {\n message,\n stack: data.stack,\n id: loc?.file,\n plugin: 'timber (Client)',\n loc: loc ? { file: loc.file, line: loc.line, column: loc.column } : undefined,\n },\n });\n } catch {\n // Overlay send must never crash the dev server\n }\n });\n}\n","/**\n * timber-entries — Vite sub-plugin for entry virtual module resolution.\n *\n * Resolves virtual:timber-rsc-entry, virtual:timber-ssr-entry,\n * virtual:timber-browser-entry to real TypeScript files, and generates\n * virtual:timber-config as serialized runtime config.\n *\n * Entry modules are real .ts files — NOT codegen strings. The only\n * generated code is virtual:timber-config (serialized runtime config).\n *\n * Design docs: 18-build-system.md §\"Entry Generation\", §\"Virtual Modules\"\n */\n\nimport type { Plugin } from 'vite';\nimport { resolve, dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport type { PluginContext } from '#/index.js';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst SRC_DIR = resolve(__dirname, '..');\n\n// ─── Virtual Module IDs ──────────────────────────────────────────────────\n\nconst VIRTUAL_IDS = {\n rscEntry: 'virtual:timber-rsc-entry',\n ssrEntry: 'virtual:timber-ssr-entry',\n browserEntry: 'virtual:timber-browser-entry',\n config: 'virtual:timber-config',\n} as const;\n\n/**\n * Map from virtual module IDs to their resolved file paths.\n *\n * rsc-entry, ssr-entry, and browser-entry point to real TypeScript files.\n * config is handled specially in the load hook (generated code).\n */\nconst ENTRY_FILE_MAP: Record<string, string> = {\n [VIRTUAL_IDS.rscEntry]: resolve(SRC_DIR, 'server', 'rsc-entry', 'index.ts'),\n [VIRTUAL_IDS.ssrEntry]: resolve(SRC_DIR, 'server', 'ssr-entry.ts'),\n [VIRTUAL_IDS.browserEntry]: resolve(SRC_DIR, 'client', 'browser-entry.ts'),\n};\n\n/** The \\0-prefixed resolved ID for virtual:timber-config */\nconst RESOLVED_CONFIG_ID = `\\0${VIRTUAL_IDS.config}`;\n\n/**\n * Strip the \\0 prefix from a module ID.\n *\n * The RSC plugin generates browser entry imports using already-resolved\n * \\0-prefixed IDs. Vite's import-analysis cannot resolve these.\n * See 18-build-system.md §\"Resolution Quirks\".\n */\nfunction stripNullPrefix(id: string): string {\n return id.startsWith('\\0') ? id.slice(1) : id;\n}\n\n/**\n * Strip a root directory prefix from a module ID.\n *\n * Vite prefixes virtual module IDs with the project root when resolving\n * SSR build entries. We need to handle both `virtual:timber-rsc-entry`\n * and `<root>/virtual:timber-rsc-entry`.\n * See 18-build-system.md §\"Resolution Quirks\".\n */\nfunction stripRootPrefix(id: string, root: string): string {\n if (id.startsWith(root)) {\n // Remove root + path separator\n const stripped = id.slice(root.length);\n // Handle both /virtual:... and \\virtual:... (Windows)\n if (stripped.startsWith('/') || stripped.startsWith('\\\\')) {\n return stripped.slice(1);\n }\n return stripped;\n }\n return id;\n}\n\n/**\n * Generate the virtual:timber-config module source.\n *\n * Serializes output mode and feature flags for runtime consumption.\n */\nfunction generateConfigModule(ctx: PluginContext): string {\n // Resolve cookie secrets: `secret` shorthand expands to `secrets: [secret]`\n const cookieSecrets = ctx.config.cookies?.secrets ??\n (ctx.config.cookies?.secret ? [ctx.config.cookies.secret] : undefined);\n\n const runtimeConfig = {\n output: ctx.config.output ?? 'server',\n csrf: ctx.config.csrf ?? true,\n allowedOrigins: ctx.config.allowedOrigins,\n clientJavascript: ctx.clientJavascript,\n dev: ctx.dev ?? false,\n slowPhaseMs: ctx.config.dev?.slowPhaseMs ?? 200,\n cookieSecrets,\n };\n\n return [\n '// Auto-generated runtime config — do not edit.',\n '// Generated by timber-entries plugin.',\n '',\n `const config = ${JSON.stringify(runtimeConfig, null, 2)};`,\n '',\n 'export default config;',\n ].join('\\n');\n}\n\n/**\n * Create the timber-entries Vite plugin.\n *\n * Hooks: resolveId, load\n */\nexport function timberEntries(ctx: PluginContext): Plugin {\n return {\n name: 'timber-entries',\n\n /**\n * Resolve virtual entry and config module IDs.\n *\n * Handles:\n * - virtual:timber-rsc-entry → real file path\n * - virtual:timber-ssr-entry → real file path\n * - virtual:timber-browser-entry → real file path\n * - virtual:timber-config → \\0-prefixed virtual ID\n * - \\0 prefix stripping (RSC plugin re-imports)\n * - Root prefix stripping (SSR build entries)\n */\n resolveId(id: string) {\n // Step 1: Strip \\0 prefix if present\n let cleanId = stripNullPrefix(id);\n\n // Step 2: Strip root prefix if present\n cleanId = stripRootPrefix(cleanId, ctx.root);\n\n // Check entry file map (real files)\n if (cleanId in ENTRY_FILE_MAP) {\n return ENTRY_FILE_MAP[cleanId];\n }\n\n // Check config virtual module\n if (cleanId === VIRTUAL_IDS.config) {\n return RESOLVED_CONFIG_ID;\n }\n\n return null;\n },\n\n /**\n * Load the virtual:timber-config module.\n *\n * Entry files (rsc/ssr/browser) are real TypeScript files that Vite\n * processes normally. Only virtual:timber-config needs generated code.\n */\n load(id: string) {\n if (id === RESOLVED_CONFIG_ID) {\n return generateConfigModule(ctx);\n }\n return null;\n },\n\n /**\n * Rename \"rsc-entry\" chunks in the client build to \"rsc-client-entry\".\n *\n * The RSC plugin creates client reference facades named after the RSC\n * entry (virtual:timber-rsc-entry), producing chunks like \"rsc-entry-XYZ.js\"\n * in the client output. This is confusing since those chunks contain client\n * components, not server code. Renaming clarifies their purpose.\n */\n generateBundle(_options, bundle) {\n if ((this as any).environment?.name !== 'client') return;\n\n for (const [fileName, chunk] of Object.entries(bundle)) {\n if (chunk.type !== 'chunk') continue;\n if (!chunk.name?.startsWith('rsc-entry')) continue;\n\n const newFileName = fileName.replace('rsc-entry', 'rsc-client-entry');\n // Extract just the basename for matching code references like \"./rsc-entry-XYZ.js\"\n const oldBase = fileName.split('/').pop()!;\n const newBase = newFileName.split('/').pop()!;\n\n chunk.fileName = newFileName;\n chunk.name = chunk.name.replace('rsc-entry', 'rsc-client-entry');\n bundle[newFileName] = chunk;\n delete bundle[fileName];\n\n // Update import references in other chunks\n for (const other of Object.values(bundle)) {\n if (other.type !== 'chunk') continue;\n if (other.code.includes(oldBase)) {\n other.code = other.code.replaceAll(oldBase, newBase);\n }\n if (other.imports) {\n other.imports = other.imports.map((i) => (i === fileName ? newFileName : i));\n }\n if (other.dynamicImports) {\n other.dynamicImports = other.dynamicImports.map((i) =>\n i === fileName ? newFileName : i\n );\n }\n }\n }\n },\n };\n}\n","/**\n * timber-mdx — Vite sub-plugin for MDX page rendering.\n *\n * Wires @mdx-js/rollup into the Vite pipeline when MDX is activated.\n * MDX is activated when pageExtensions includes 'mdx' or 'md', or\n * when a content/ directory exists at the project root.\n *\n * Design doc: 20-content-collections.md §\"The timber-mdx Plugin\"\n */\n\nimport type { Plugin } from 'vite';\nimport { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { PluginContext } from '#/index.js';\n\nconst MDX_EXTENSIONS = ['mdx', 'md'];\n\n/**\n * Check if mdx-components.tsx (or .ts, .jsx, .js) exists at the project root.\n * Returns the absolute path if found, otherwise undefined.\n */\nfunction findMdxComponents(root: string): string | undefined {\n const candidates = [\n 'mdx-components.tsx',\n 'mdx-components.ts',\n 'mdx-components.jsx',\n 'mdx-components.js',\n ];\n for (const name of candidates) {\n const p = join(root, name);\n if (existsSync(p)) return p;\n }\n return undefined;\n}\n\n/**\n * Determine if MDX should be activated based on config and project structure.\n */\nfunction shouldActivate(ctx: PluginContext): boolean {\n const exts = ctx.config.pageExtensions;\n if (exts && exts.some((ext) => MDX_EXTENSIONS.includes(ext))) {\n return true;\n }\n\n if (existsSync(join(ctx.root, 'content'))) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Try to dynamically import a module by name. Returns the default export\n * or the module itself, or undefined if the module is not installed.\n */\nasync function tryImport(name: string): Promise<unknown | undefined> {\n try {\n const mod = await import(name);\n return mod.default ?? mod;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Create the timber-mdx Vite plugin.\n *\n * Uses the transform and resolveId hooks to delegate MDX compilation\n * to @mdx-js/rollup. The inner plugin is loaded lazily on first activation.\n *\n * Hooks: buildStart (loads @mdx-js/rollup), resolveId, load, transform\n */\nexport function timberMdx(ctx: PluginContext): Plugin {\n let innerPlugin: Plugin | null = null;\n\n async function activate(): Promise<void> {\n if (innerPlugin !== null || !shouldActivate(ctx)) return;\n\n const createMdxPlugin = (await tryImport('@mdx-js/rollup')) as\n | ((options?: Record<string, unknown>) => Plugin)\n | undefined;\n\n if (!createMdxPlugin) {\n throw new Error(\n [\n '[timber] MDX is enabled but @mdx-js/rollup is not installed.',\n '',\n 'Install it:',\n ' pnpm add -D @mdx-js/rollup remark-frontmatter remark-mdx-frontmatter',\n '',\n 'MDX is activated because pageExtensions includes \"mdx\"/\"md\" or a content/ directory exists.',\n ].join('\\n')\n );\n }\n\n const mdxConfig = ctx.config.mdx ?? {};\n\n // Auto-register frontmatter plugins\n const remarkPlugins: unknown[] = [];\n const remarkFrontmatter = await tryImport('remark-frontmatter');\n const remarkMdxFrontmatter = await tryImport('remark-mdx-frontmatter');\n if (remarkFrontmatter) remarkPlugins.push(remarkFrontmatter);\n if (remarkMdxFrontmatter) remarkPlugins.push(remarkMdxFrontmatter);\n\n if (mdxConfig.remarkPlugins) {\n remarkPlugins.push(...mdxConfig.remarkPlugins);\n }\n\n const mdxOptions: Record<string, unknown> = {\n remarkPlugins,\n rehypePlugins: mdxConfig.rehypePlugins ?? [],\n recmaPlugins: mdxConfig.recmaPlugins ?? [],\n remarkRehypeOptions: mdxConfig.remarkRehypeOptions,\n };\n\n const mdxComponentsPath = findMdxComponents(ctx.root);\n if (mdxComponentsPath) {\n mdxOptions.providerImportSource = mdxComponentsPath;\n }\n\n innerPlugin = createMdxPlugin(mdxOptions);\n }\n\n return {\n name: 'timber-mdx',\n // Must run before @vitejs/plugin-rsc (rsc:use-client) which tries to parse\n // all files as JS. MDX files must be compiled to JS first.\n enforce: 'pre',\n\n async buildStart(options) {\n ctx.timer.start('mdx-activate');\n await activate();\n ctx.timer.end('mdx-activate');\n if (!innerPlugin) return;\n if (typeof innerPlugin.buildStart === 'function') {\n await (innerPlugin.buildStart as (options: unknown) => void | Promise<void>).call(\n this,\n options\n );\n }\n },\n\n async resolveId(source, importer, options) {\n if (!innerPlugin) return null;\n // MDX pages are server components — only compile in the RSC environment.\n // This prevents server-only deps (e.g. bright via mdx-components) from\n // being pulled into SSR or client bundles.\n const envName = (this as unknown as { environment?: { name?: string } }).environment?.name;\n if (envName && envName !== 'rsc') return null;\n if (typeof innerPlugin.resolveId === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (innerPlugin.resolveId as any).call(this, source, importer, options);\n }\n return null;\n },\n\n async load(id) {\n if (!innerPlugin) return null;\n const envName = (this as unknown as { environment?: { name?: string } }).environment?.name;\n if (envName && envName !== 'rsc') return null;\n if (typeof innerPlugin.load === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (innerPlugin.load as any).call(this, id);\n }\n return null;\n },\n\n async transform(code, id) {\n if (!innerPlugin) return null;\n const envName = (this as unknown as { environment?: { name?: string } }).environment?.name;\n if (envName && envName !== 'rsc') return null;\n if (typeof innerPlugin.transform === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (innerPlugin.transform as any).call(this, code, id);\n }\n return null;\n },\n };\n}\n","/**\n * Lint status files and error.tsx for missing 'use client' directive.\n *\n * Status files (error.tsx, 404.tsx, 4xx.tsx, 5xx.tsx, NNN.tsx) and legacy\n * compat files (not-found.tsx, forbidden.tsx, unauthorized.tsx) are passed\n * as fallbackComponent to TimberErrorBoundary — a 'use client' component.\n * RSC forbids passing server component functions as props to client\n * components, causing a hard-to-debug runtime error.\n *\n * This module provides a build/dev-time check that warns when these files\n * are missing the 'use client' directive.\n *\n * See design/10-error-handling.md §\"Status-Code Files\".\n */\n\nimport { readFileSync } from 'node:fs';\nimport type { RouteTree, SegmentNode } from './types.js';\nimport { detectFileDirective } from '#/utils/directive-parser.js';\n\n/** Extensions that require 'use client' (component files, not MDX/JSON). */\nconst CLIENT_REQUIRED_EXTENSIONS = new Set(['tsx', 'jsx', 'ts', 'js']);\n\nexport interface StatusFileLintWarning {\n filePath: string;\n fileType: string;\n}\n\n/**\n * Walk the route tree and check all status files and error files for\n * the 'use client' directive. Returns an array of warnings for files\n * that are missing it.\n *\n * MDX and JSON status files are excluded — MDX files are server components\n * by design, and JSON files are data, not components.\n */\nexport function lintStatusFileDirectives(tree: RouteTree): StatusFileLintWarning[] {\n const warnings: StatusFileLintWarning[] = [];\n walkNode(tree.root, warnings);\n return warnings;\n}\n\nfunction walkNode(node: SegmentNode, warnings: StatusFileLintWarning[]): void {\n // Check error.tsx\n if (node.error) {\n checkFile(node.error.filePath, node.error.extension, 'error', warnings);\n }\n\n // Check status-code files (404.tsx, 4xx.tsx, 5xx.tsx, etc.)\n if (node.statusFiles) {\n for (const [code, file] of node.statusFiles) {\n checkFile(file.filePath, file.extension, code, warnings);\n }\n }\n\n // Check legacy compat files (not-found.tsx, forbidden.tsx, unauthorized.tsx)\n if (node.legacyStatusFiles) {\n for (const [name, file] of node.legacyStatusFiles) {\n checkFile(file.filePath, file.extension, name, warnings);\n }\n }\n\n // Recurse into children and slots\n for (const child of node.children) {\n walkNode(child, warnings);\n }\n for (const [, slotNode] of node.slots) {\n walkNode(slotNode, warnings);\n }\n}\n\nfunction checkFile(\n filePath: string,\n extension: string,\n fileType: string,\n warnings: StatusFileLintWarning[]\n): void {\n if (!CLIENT_REQUIRED_EXTENSIONS.has(extension)) return;\n\n let code: string;\n try {\n code = readFileSync(filePath, 'utf-8');\n } catch {\n return; // File unreadable — skip silently\n }\n\n const directive = detectFileDirective(code, ['use client']);\n if (!directive) {\n warnings.push({ filePath, fileType });\n }\n}\n\n/**\n * Format warnings into human-readable console output.\n */\nexport function formatStatusFileLintWarnings(warnings: StatusFileLintWarning[]): string {\n const lines = [\n `[timber] ${warnings.length} status/error file${warnings.length > 1 ? 's' : ''} missing 'use client' directive:`,\n '',\n ];\n\n for (const w of warnings) {\n lines.push(` ${w.filePath}`);\n }\n\n lines.push('');\n lines.push(\n \" Status files and error.tsx are rendered inside TimberErrorBoundary (a 'use client' component).\"\n );\n lines.push(\n \" Add 'use client' as the first line of each file to avoid a runtime error.\"\n );\n\n return lines.join('\\n');\n}\n","/**\n * timber-routing — Vite sub-plugin for route manifest generation.\n *\n * Bridges the route scanner with Vite's module graph. Scans app/ at startup,\n * watches for file changes in dev, and serves the virtual:timber-route-manifest\n * module that entry files consume.\n *\n * Design docs: 18-build-system.md §\"Virtual Modules\", 07-routing.md\n */\n\nimport type { Plugin, ViteDevServer } from 'vite';\nimport { writeFile, mkdir } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { scanRoutes } from '#/routing/scanner.js';\nimport { generateRouteMap } from '#/routing/codegen.js';\nimport { collectInterceptionRewrites } from '#/routing/interception.js';\nimport { lintStatusFileDirectives, formatStatusFileLintWarnings } from '#/routing/status-file-lint.js';\nimport type { RouteTree, SegmentNode, RouteFile } from '#/routing/types.js';\nimport type { PluginContext } from '#/index.js';\n\nconst VIRTUAL_MODULE_ID = 'virtual:timber-route-manifest';\nconst RESOLVED_VIRTUAL_ID = `\\0${VIRTUAL_MODULE_ID}`;\n\n/**\n * File convention names we track for changes that require manifest regeneration.\n */\nconst ROUTE_FILE_PATTERNS =\n /\\/(page|layout|middleware|access|route|error|default|denied|search-params|\\d{3}|[45]xx|not-found|forbidden|unauthorized|sitemap|robots|manifest|favicon|icon|opengraph-image|twitter-image|apple-icon)\\./;\n\n/**\n * Create the timber-routing Vite plugin.\n *\n * Hooks: resolveId, load, buildStart, configureServer\n */\n/** Absolute path to the generated route map declaration file. */\nconst CODEGEN_OUTPUT = '.timber/timber-routes.d.ts';\n\n/**\n * Content of the timber-env.d.ts file written to the project root.\n *\n * Uses a triple-slash reference so TypeScript auto-discovers the generated\n * route map without the user needing to edit tsconfig.json — same pattern\n * as Next.js's next-env.d.ts.\n */\nconst TIMBER_ENV_DTS = [\n '// This file is auto-generated by timber.js. Do not edit.',\n '// It ensures TypeScript picks up the generated route types.',\n '// eslint-disable-next-line @typescript-eslint/triple-slash-reference',\n '/// <reference path=\".timber/timber-routes.d.ts\" />',\n '',\n].join('\\n');\n\n/**\n * Write the generated route map and the timber-env.d.ts reference file.\n *\n * Fire-and-forget — never awaited to avoid blocking the hot path.\n * Errors are swallowed; a missing .d.ts is a developer UX issue, not a runtime failure.\n */\nfunction writeCodegen(ctx: PluginContext): void {\n if (!ctx.routeTree) return;\n const timberDir = join(ctx.root, '.timber');\n const content = generateRouteMap(ctx.routeTree, { appDir: ctx.appDir, outputDir: timberDir });\n const routesPath = join(ctx.root, CODEGEN_OUTPUT);\n const envPath = join(ctx.root, 'timber-env.d.ts');\n mkdir(timberDir, { recursive: true })\n .then(() =>\n Promise.all([\n writeFile(routesPath, content, 'utf-8'),\n writeFile(envPath, TIMBER_ENV_DTS, 'utf-8'),\n ])\n )\n .catch((err) => {\n // Non-fatal — types are a dev convenience, but log so issues are visible\n console.warn('[timber] Failed to write codegen output:', err);\n });\n}\n\nexport function timberRouting(ctx: PluginContext): Plugin {\n /** Track warned files to avoid repeating warnings on rescan. */\n const warnedFiles = new Set<string>();\n\n function rescan(): void {\n ctx.timer.start('route-scan');\n ctx.routeTree = scanRoutes(ctx.appDir, {\n pageExtensions: ctx.config.pageExtensions,\n });\n ctx.timer.end('route-scan');\n writeCodegen(ctx);\n\n // Lint status files for missing 'use client' directive\n const warnings = lintStatusFileDirectives(ctx.routeTree);\n const newWarnings = warnings.filter((w) => !warnedFiles.has(w.filePath));\n if (newWarnings.length > 0) {\n for (const w of newWarnings) warnedFiles.add(w.filePath);\n console.warn(formatStatusFileLintWarnings(newWarnings));\n }\n }\n\n return {\n name: 'timber-routing',\n\n /**\n * Resolve the virtual module ID.\n *\n * Handles:\n * - virtual:timber-route-manifest\n * - <root>/virtual:timber-route-manifest (Vite SSR build root prefix)\n * - \\0virtual:timber-route-manifest (RSC plugin re-imports)\n */\n resolveId(id: string) {\n // Strip \\0 prefix if present (RSC plugin generates these)\n const cleanId = id.startsWith('\\0') ? id.slice(1) : id;\n\n if (cleanId === VIRTUAL_MODULE_ID) {\n return RESOLVED_VIRTUAL_ID;\n }\n\n // Handle root-prefixed resolution in SSR build\n if (cleanId.endsWith(`/${VIRTUAL_MODULE_ID}`)) {\n return RESOLVED_VIRTUAL_ID;\n }\n\n return null;\n },\n\n /**\n * Generate the route manifest module.\n *\n * The manifest exports the route tree as a serialized data structure\n * with absolute import paths for all file references.\n */\n load(id: string) {\n if (id !== RESOLVED_VIRTUAL_ID) return null;\n\n // If routeTree hasn't been built yet (shouldn't happen), scan now\n if (!ctx.routeTree) {\n rescan();\n }\n\n return generateManifestModule(ctx.routeTree!);\n },\n\n /**\n * Scan routes at build start.\n *\n * In dev mode, skip — configureServer runs after buildStart and will\n * do its own scan. Avoids a redundant FS traversal on cold start.\n */\n buildStart() {\n if (ctx.dev) return;\n rescan();\n },\n\n /**\n * Set up file watcher in dev mode.\n *\n * Watches app/ for file additions/deletions/renames that affect\n * the route tree, regenerates the manifest, and invalidates\n * dependent modules via HMR.\n */\n configureServer(devServer: ViteDevServer) {\n // Initial scan (only scan point in dev — buildStart is skipped)\n rescan();\n\n // Watch the app directory\n devServer.watcher.add(ctx.appDir);\n\n const handleFileChange = (filePath: string) => {\n // Only react to route-significant files in the app directory\n if (!filePath.startsWith(ctx.appDir)) return;\n if (!ROUTE_FILE_PATTERNS.test(filePath)) return;\n\n // Rescan the route tree\n rescan();\n\n // Invalidate the virtual module in all environments\n invalidateManifest(devServer);\n };\n\n devServer.watcher.on('add', handleFileChange);\n devServer.watcher.on('unlink', handleFileChange);\n // Also watch renames (which are add+unlink) — handled by the above\n },\n };\n}\n\n/**\n * Invalidate the virtual route manifest module across all Vite environments.\n *\n * When the route tree changes, any environment that has imported the manifest\n * needs to be invalidated so the next request/transform picks up the new tree.\n */\nfunction invalidateManifest(server: ViteDevServer): void {\n for (const envName of Object.keys(server.environments)) {\n const env = server.environments[envName];\n if (!env?.moduleGraph) continue;\n\n const mod = env.moduleGraph.getModuleById(RESOLVED_VIRTUAL_ID);\n if (mod) {\n env.moduleGraph.invalidateModule(mod);\n }\n }\n\n // Trigger HMR full reload — route changes are structural\n server.hot.send({ type: 'full-reload' });\n}\n\n/**\n * Generate the virtual module source code for the route manifest.\n *\n * The output is a default-exported object containing the serialized route tree.\n * All file references use absolute paths (required for virtual modules).\n */\nfunction generateManifestModule(tree: RouteTree): string {\n const imports: string[] = [];\n let importIndex = 0;\n\n /**\n * Create a lazy import expression for a route file.\n * Returns the import variable name.\n */\n function addImport(file: RouteFile): string {\n const varName = `_route${importIndex++}`;\n imports.push(`const ${varName} = () => import(\"${file.filePath}\");`);\n return varName;\n }\n\n /**\n * Serialize a segment node to a JS object literal.\n */\n function serializeNode(node: SegmentNode, indent: string): string {\n const nextIndent = indent + ' ';\n const parts: string[] = [];\n\n parts.push(`${nextIndent}segmentName: ${JSON.stringify(node.segmentName)},`);\n parts.push(`${nextIndent}segmentType: ${JSON.stringify(node.segmentType)},`);\n parts.push(`${nextIndent}urlPath: ${JSON.stringify(node.urlPath)},`);\n\n if (node.paramName) {\n parts.push(`${nextIndent}paramName: ${JSON.stringify(node.paramName)},`);\n }\n\n if (node.interceptionMarker) {\n parts.push(`${nextIndent}interceptionMarker: ${JSON.stringify(node.interceptionMarker)},`);\n }\n if (node.interceptedSegmentName) {\n parts.push(\n `${nextIndent}interceptedSegmentName: ${JSON.stringify(node.interceptedSegmentName)},`\n );\n }\n\n // File conventions — absolute paths as lazy imports\n if (node.page) {\n const v = addImport(node.page);\n parts.push(\n `${nextIndent}page: { load: ${v}, filePath: ${JSON.stringify(node.page.filePath)} },`\n );\n }\n if (node.layout) {\n const v = addImport(node.layout);\n parts.push(\n `${nextIndent}layout: { load: ${v}, filePath: ${JSON.stringify(node.layout.filePath)} },`\n );\n }\n if (node.middleware) {\n const v = addImport(node.middleware);\n parts.push(\n `${nextIndent}middleware: { load: ${v}, filePath: ${JSON.stringify(node.middleware.filePath)} },`\n );\n }\n if (node.access) {\n const v = addImport(node.access);\n parts.push(\n `${nextIndent}access: { load: ${v}, filePath: ${JSON.stringify(node.access.filePath)} },`\n );\n }\n if (node.route) {\n const v = addImport(node.route);\n parts.push(\n `${nextIndent}route: { load: ${v}, filePath: ${JSON.stringify(node.route.filePath)} },`\n );\n }\n if (node.error) {\n const v = addImport(node.error);\n parts.push(\n `${nextIndent}error: { load: ${v}, filePath: ${JSON.stringify(node.error.filePath)} },`\n );\n }\n if (node.default) {\n const v = addImport(node.default);\n parts.push(\n `${nextIndent}default: { load: ${v}, filePath: ${JSON.stringify(node.default.filePath)} },`\n );\n }\n if (node.denied) {\n const v = addImport(node.denied);\n parts.push(\n `${nextIndent}denied: { load: ${v}, filePath: ${JSON.stringify(node.denied.filePath)} },`\n );\n }\n if (node.searchParams) {\n const v = addImport(node.searchParams);\n parts.push(\n `${nextIndent}searchParams: { load: ${v}, filePath: ${JSON.stringify(node.searchParams.filePath)} },`\n );\n }\n\n // Status-code files\n if (node.statusFiles && node.statusFiles.size > 0) {\n const statusEntries: string[] = [];\n for (const [code, file] of node.statusFiles) {\n const v = addImport(file);\n statusEntries.push(\n `${nextIndent} ${JSON.stringify(code)}: { load: ${v}, filePath: ${JSON.stringify(file.filePath)} }`\n );\n }\n parts.push(`${nextIndent}statusFiles: {\\n${statusEntries.join(',\\n')}\\n${nextIndent}},`);\n }\n\n // JSON status-code files\n if (node.jsonStatusFiles && node.jsonStatusFiles.size > 0) {\n const jsonEntries: string[] = [];\n for (const [code, file] of node.jsonStatusFiles) {\n const v = addImport(file);\n jsonEntries.push(\n `${nextIndent} ${JSON.stringify(code)}: { load: ${v}, filePath: ${JSON.stringify(file.filePath)} }`\n );\n }\n parts.push(`${nextIndent}jsonStatusFiles: {\\n${jsonEntries.join(',\\n')}\\n${nextIndent}},`);\n }\n\n // Legacy status files\n if (node.legacyStatusFiles && node.legacyStatusFiles.size > 0) {\n const legacyEntries: string[] = [];\n for (const [name, file] of node.legacyStatusFiles) {\n const v = addImport(file);\n legacyEntries.push(\n `${nextIndent} ${JSON.stringify(name)}: { load: ${v}, filePath: ${JSON.stringify(file.filePath)} }`\n );\n }\n parts.push(\n `${nextIndent}legacyStatusFiles: {\\n${legacyEntries.join(',\\n')}\\n${nextIndent}},`\n );\n }\n\n // Metadata route files (sitemap.ts, robots.ts, icon.tsx, etc.)\n if (node.metadataRoutes && node.metadataRoutes.size > 0) {\n const metaEntries: string[] = [];\n for (const [name, file] of node.metadataRoutes) {\n const v = addImport(file);\n metaEntries.push(\n `${nextIndent} ${JSON.stringify(name)}: { load: ${v}, filePath: ${JSON.stringify(file.filePath)} }`\n );\n }\n parts.push(\n `${nextIndent}metadataRoutes: {\\n${metaEntries.join(',\\n')}\\n${nextIndent}},`\n );\n }\n\n // Children\n if (node.children.length > 0) {\n const childNodes = node.children.map((c) => serializeNode(c, nextIndent));\n parts.push(`${nextIndent}children: [\\n${childNodes.join(',\\n')}\\n${nextIndent}],`);\n } else {\n parts.push(`${nextIndent}children: [],`);\n }\n\n // Parallel slots\n if (node.slots.size > 0) {\n const slotEntries: string[] = [];\n for (const [slotName, slotNode] of node.slots) {\n slotEntries.push(\n `${nextIndent} ${JSON.stringify(slotName)}: ${serializeNode(slotNode, nextIndent + ' ')}`\n );\n }\n parts.push(`${nextIndent}slots: {\\n${slotEntries.join(',\\n')}\\n${nextIndent}},`);\n } else {\n parts.push(`${nextIndent}slots: {},`);\n }\n\n return `${indent}{\\n${parts.join('\\n')}\\n${indent}}`;\n }\n\n const rootSerialized = serializeNode(tree.root, ' ');\n\n // Proxy file\n let proxyLine = '';\n if (tree.proxy) {\n const v = addImport(tree.proxy);\n proxyLine = ` proxy: { load: ${v}, filePath: ${JSON.stringify(tree.proxy.filePath)} },`;\n }\n\n // Interception rewrites — computed at build time from the route tree.\n // Only interceptedPattern and interceptingPrefix are needed at runtime.\n const rewrites = collectInterceptionRewrites(tree.root);\n const rewritesLine =\n rewrites.length > 0\n ? ` interceptionRewrites: ${JSON.stringify(rewrites.map((r) => ({ interceptedPattern: r.interceptedPattern, interceptingPrefix: r.interceptingPrefix })))},`\n : '';\n\n const code = [\n '// Auto-generated route manifest — do not edit.',\n '// Generated by timber-routing plugin.',\n '',\n ...imports,\n '',\n 'const manifest = {',\n proxyLine,\n rewritesLine,\n ` root: ${rootSerialized},`,\n '};',\n '',\n 'export default manifest;',\n ]\n .filter((line) => line !== undefined && line !== '')\n .join('\\n');\n\n return code;\n}\n","/**\n * timber-shims — Vite sub-plugin for next/* → timber shim resolution.\n *\n * Intercepts imports of next/* modules and redirects them to timber.js\n * shim implementations. This enables Next.js-compatible libraries\n * (nuqs, next-intl, etc.) to work unmodified.\n *\n * Design doc: 18-build-system.md §\"Shim Map\"\n */\n\nimport type { Plugin } from 'vite';\nimport { resolve, dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport type { PluginContext } from '#/index.js';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst SHIMS_DIR = resolve(__dirname, '..', 'shims');\n\n/**\n * Virtual module IDs for server-only and client-only poison pills.\n *\n * These packages cause build errors when imported in the wrong environment:\n * - `server-only` errors when imported in a client component\n * - `client-only` errors when imported in a server component\n */\nconst SERVER_ONLY_VIRTUAL = '\\0timber:server-only';\nconst CLIENT_ONLY_VIRTUAL = '\\0timber:client-only';\n\n/**\n * Map from next/* import specifiers to shim file paths.\n *\n * The shim map is a separate data structure (not embedded in the plugin)\n * per the task's approach constraints.\n */\nconst SHIM_MAP: Record<string, string> = {\n 'next/link': resolve(SHIMS_DIR, 'link.ts'),\n 'next/image': resolve(SHIMS_DIR, 'image.ts'),\n 'next/navigation': resolve(SHIMS_DIR, 'navigation.ts'),\n 'next/headers': resolve(SHIMS_DIR, 'headers.ts'),\n // next/font/* redirects to the timber-fonts virtual modules.\n // The fonts plugin's load hook serves the actual module code.\n 'next/font/google': '\\0@timber/fonts/google',\n 'next/font/local': '\\0@timber/fonts/local',\n};\n\n/**\n * Client-only shim overrides for the browser environment.\n *\n * next/navigation in the client environment resolves to navigation-client.ts\n * which only re-exports client hooks — not server functions like redirect()\n * and deny(). This prevents server/primitives.ts from being pulled into the\n * browser bundle via tree-shaking-resistant imports.\n */\nconst CLIENT_SHIM_OVERRIDES: Record<string, string> = {\n 'next/navigation': resolve(SHIMS_DIR, 'navigation-client.ts'),\n};\n\n/**\n * Map from @timber/app/* subpath imports to real source files.\n *\n * These resolve subpath imports like `@timber/app/server` to the\n * real entry files in the package source.\n */\nconst TIMBER_SUBPATH_MAP: Record<string, string> = {\n '@timber/app/server': resolve(__dirname, '..', 'server', 'index.ts'),\n '@timber/app/client': resolve(__dirname, '..', 'client', 'index.ts'),\n '@timber/app/cache': resolve(__dirname, '..', 'cache', 'index.ts'),\n '@timber/app/search-params': resolve(__dirname, '..', 'search-params', 'index.ts'),\n '@timber/app/routing': resolve(__dirname, '..', 'routing', 'index.ts'),\n};\n\n/**\n * Strip .js extension from an import specifier.\n *\n * Libraries like nuqs import `next/navigation.js` with an explicit\n * extension. We strip it before matching against the shim map.\n */\nfunction stripJsExtension(id: string): string {\n return id.endsWith('.js') ? id.slice(0, -3) : id;\n}\n\n/**\n * Create the timber-shims Vite plugin.\n *\n * Hooks: resolveId, load\n */\nexport function timberShims(_ctx: PluginContext): Plugin {\n return {\n name: 'timber-shims',\n // Must run before Vite's built-in resolution so that server-only/client-only\n // poison pills are intercepted even when imported from node_modules deps\n // (e.g. bright, next-intl). Without this, the dep optimizer resolves to the\n // real CJS package which throws at runtime in the SSR environment.\n enforce: 'pre',\n\n /**\n * Resolve next/* and @timber/app/* imports to shim/source files.\n *\n * Resolution order:\n * 1. Check server-only / client-only poison pill packages\n * 2. Strip .js extension from the import specifier\n * 3. Check next/* shim map\n * 4. Check @timber/app/* subpath map\n * 5. Return null (pass through) for unrecognized imports\n */\n resolveId(id: string) {\n // Poison pill packages — resolve to virtual modules handled by load()\n if (id === 'server-only') return SERVER_ONLY_VIRTUAL;\n if (id === 'client-only') return CLIENT_ONLY_VIRTUAL;\n\n const cleanId = stripJsExtension(id);\n\n // Check next/* shim map.\n // In the client (browser) environment, use client-only shim overrides\n // to avoid pulling server code (primitives.ts) into the browser bundle.\n if (cleanId in SHIM_MAP) {\n const envName = (this as unknown as { environment?: { name?: string } }).environment?.name;\n if (envName === 'client' && cleanId in CLIENT_SHIM_OVERRIDES) {\n return CLIENT_SHIM_OVERRIDES[cleanId];\n }\n return SHIM_MAP[cleanId];\n }\n\n // Check @timber/app/* subpath map\n if (cleanId in TIMBER_SUBPATH_MAP) {\n return TIMBER_SUBPATH_MAP[cleanId];\n }\n\n return null;\n },\n\n /**\n * Serve virtual modules for server-only / client-only poison pills.\n *\n * In the correct environment, the module is a no-op (empty export).\n * In the wrong environment, it throws a build-time error message that\n * clearly identifies the boundary violation.\n */\n load(id: string) {\n const envName = (this as unknown as { environment?: { name?: string } }).environment?.name;\n const isClient = envName === 'client';\n\n if (id === SERVER_ONLY_VIRTUAL) {\n if (isClient) {\n return `throw new Error(\n \"This module cannot be imported from a Client Component module. \" +\n \"It should only be used from a Server Component.\"\n);`;\n }\n // No-op in server environments (rsc, ssr)\n return 'export {};';\n }\n\n if (id === CLIENT_ONLY_VIRTUAL) {\n if (!isClient) {\n return `throw new Error(\n \"This module cannot be imported from a Server Component module. \" +\n \"It should only be used from a Client Component.\"\n);`;\n }\n // No-op in client environment\n return 'export {};';\n }\n\n return null;\n },\n };\n}\n","/**\n * Size-adjusted fallback font generation.\n *\n * Generates `@font-face` declarations for fallback fonts with\n * `size-adjust`, `ascent-override`, `descent-override`, and\n * `line-gap-override` to match custom font metrics and eliminate CLS.\n *\n * Design doc: 24-fonts.md §\"Step 4: Size-Adjusted Fallbacks\"\n */\n\nimport type { FontFaceDescriptor } from './types.js';\n\n/**\n * Font metrics for size-adjusted fallback calculation.\n *\n * Values are percentages used in CSS override descriptors.\n */\ninterface FallbackMetrics {\n /** The local() system font to use as base. */\n fallbackFont: string;\n /** size-adjust percentage (e.g. 107.64). */\n sizeAdjust: number;\n /** ascent-override percentage (e.g. 90.49). */\n ascentOverride: number;\n /** descent-override percentage (e.g. 22.48). */\n descentOverride: number;\n /** line-gap-override percentage (e.g. 0). */\n lineGapOverride: number;\n}\n\n/**\n * Lookup table for commonly used Google Fonts.\n *\n * Metrics sourced from fontaine / @capsizecss/metrics.\n * Keyed by lowercase font family name.\n */\nconst FALLBACK_METRICS: Record<string, FallbackMetrics> = {\n 'inter': {\n fallbackFont: 'Arial',\n sizeAdjust: 107.64,\n ascentOverride: 90.49,\n descentOverride: 22.48,\n lineGapOverride: 0,\n },\n 'roboto': {\n fallbackFont: 'Arial',\n sizeAdjust: 100.3,\n ascentOverride: 92.77,\n descentOverride: 24.41,\n lineGapOverride: 0,\n },\n 'open sans': {\n fallbackFont: 'Arial',\n sizeAdjust: 105.48,\n ascentOverride: 101.03,\n descentOverride: 27.47,\n lineGapOverride: 0,\n },\n 'lato': {\n fallbackFont: 'Arial',\n sizeAdjust: 112.5,\n ascentOverride: 100.22,\n descentOverride: 21.16,\n lineGapOverride: 0,\n },\n 'montserrat': {\n fallbackFont: 'Arial',\n sizeAdjust: 112.17,\n ascentOverride: 85.13,\n descentOverride: 22.07,\n lineGapOverride: 0,\n },\n 'poppins': {\n fallbackFont: 'Arial',\n sizeAdjust: 112.76,\n ascentOverride: 96.31,\n descentOverride: 32.1,\n lineGapOverride: 0,\n },\n 'roboto mono': {\n fallbackFont: 'Courier New',\n sizeAdjust: 109.29,\n ascentOverride: 87.79,\n descentOverride: 23.1,\n lineGapOverride: 0,\n },\n 'jetbrains mono': {\n fallbackFont: 'Courier New',\n sizeAdjust: 112.7,\n ascentOverride: 89.53,\n descentOverride: 24.21,\n lineGapOverride: 0,\n },\n 'source code pro': {\n fallbackFont: 'Courier New',\n sizeAdjust: 106.13,\n ascentOverride: 93.47,\n descentOverride: 26.01,\n lineGapOverride: 0,\n },\n 'fira code': {\n fallbackFont: 'Courier New',\n sizeAdjust: 112.96,\n ascentOverride: 86.87,\n descentOverride: 26.34,\n lineGapOverride: 0,\n },\n 'nunito': {\n fallbackFont: 'Arial',\n sizeAdjust: 103.62,\n ascentOverride: 99.45,\n descentOverride: 34.8,\n lineGapOverride: 0,\n },\n 'playfair display': {\n fallbackFont: 'Georgia',\n sizeAdjust: 110.72,\n ascentOverride: 84.44,\n descentOverride: 23.56,\n lineGapOverride: 0,\n },\n 'merriweather': {\n fallbackFont: 'Georgia',\n sizeAdjust: 107.66,\n ascentOverride: 91.93,\n descentOverride: 27.6,\n lineGapOverride: 0,\n },\n 'raleway': {\n fallbackFont: 'Arial',\n sizeAdjust: 107.74,\n ascentOverride: 94.19,\n descentOverride: 26.76,\n lineGapOverride: 0,\n },\n};\n\n/**\n * Known serif font families (lowercase).\n * Used for generic family detection when the name doesn't contain \"serif\".\n */\nconst SERIF_FAMILIES = new Set([\n 'playfair display',\n 'merriweather',\n 'lora',\n 'georgia',\n 'garamond',\n 'eb garamond',\n 'crimson text',\n 'libre baskerville',\n 'source serif pro',\n 'source serif 4',\n 'dm serif display',\n 'dm serif text',\n 'noto serif',\n 'pt serif',\n 'bitter',\n 'domine',\n 'cormorant',\n 'cormorant garamond',\n]);\n\nexport function getGenericFamily(family: string): string {\n const lc = family.toLowerCase();\n if (lc.includes('mono') || lc.includes('code')) return 'monospace';\n if ((lc.includes('serif') && !lc.includes('sans')) || SERIF_FAMILIES.has(lc)) {\n return 'serif';\n }\n return 'sans-serif';\n}\n\n/**\n * Generate a size-adjusted fallback @font-face for a given font family.\n *\n * Returns null if no metrics are available (unknown font — no fallback generated).\n */\nexport function generateFallbackFontFace(family: string): FontFaceDescriptor | null {\n const metrics = FALLBACK_METRICS[family.toLowerCase()];\n if (!metrics) return null;\n\n const fallbackFamily = `${family} Fallback`;\n\n return {\n family: fallbackFamily,\n src: `local('${metrics.fallbackFont}')`,\n // Encode the metrics into a CSS descriptor string.\n // We abuse the 'style' field to carry the override properties\n // since FontFaceDescriptor doesn't have dedicated fields.\n // The generateFallbackCss function handles this specially.\n };\n}\n\n/**\n * Generate the full CSS for a size-adjusted fallback font.\n *\n * This produces a complete @font-face block with override descriptors\n * that FontFaceDescriptor doesn't natively support.\n */\nexport function generateFallbackCss(family: string): string | null {\n const metrics = FALLBACK_METRICS[family.toLowerCase()];\n if (!metrics) return null;\n\n const fallbackFamily = `${family} Fallback`;\n\n const lines = [\n '@font-face {',\n ` font-family: '${fallbackFamily}';`,\n ` src: local('${metrics.fallbackFont}');`,\n ` size-adjust: ${metrics.sizeAdjust}%;`,\n ` ascent-override: ${metrics.ascentOverride}%;`,\n ` descent-override: ${metrics.descentOverride}%;`,\n ` line-gap-override: ${metrics.lineGapOverride}%;`,\n '}',\n ];\n\n return lines.join('\\n');\n}\n\n/**\n * Check whether fallback metrics are available for a font family.\n */\nexport function hasFallbackMetrics(family: string): boolean {\n return family.toLowerCase() in FALLBACK_METRICS;\n}\n\n/**\n * Build the full font stack string for a font, including its\n * size-adjusted fallback and a generic family.\n *\n * Example: `'Inter', 'Inter Fallback', system-ui, sans-serif`\n */\nexport function buildFontStack(family: string): string {\n const generic = getGenericFamily(family);\n const hasMetrics = hasFallbackMetrics(family);\n\n const parts = [`'${family}'`];\n if (hasMetrics) parts.push(`'${family} Fallback'`);\n\n // Add system-ui for sans-serif fonts, ui-monospace for mono\n if (generic === 'monospace') {\n parts.push('ui-monospace');\n } else if (generic === 'sans-serif') {\n parts.push('system-ui');\n }\n parts.push(generic);\n\n return parts.join(', ');\n}\n","/**\n * Acorn-based AST utilities for extracting static font configs from source code.\n *\n * Replaces the fragile regex-based extraction in fonts.ts and local.ts.\n * Uses acorn (already a Vite dependency) for robust parsing that handles\n * comments, trailing commas, multi-line configs, and other edge cases\n * the regex approach missed.\n *\n * Design doc: 24-fonts.md §\"Step 1: Static Analysis\"\n */\n\nimport { parse } from 'acorn';\nimport type { GoogleFontConfig } from './types.js';\nimport type { LocalFontConfig, LocalFontSrc } from './types.js';\n\n// ── AST node types (minimal subset of estree) ────────────────────────────────\n\ninterface AstNode {\n type: string;\n [key: string]: unknown;\n}\n\ninterface LiteralNode extends AstNode {\n type: 'Literal';\n value: string | number | boolean | null;\n}\n\ninterface ArrayExpressionNode extends AstNode {\n type: 'ArrayExpression';\n elements: AstNode[];\n}\n\ninterface ObjectExpressionNode extends AstNode {\n type: 'ObjectExpression';\n properties: PropertyNode[];\n}\n\ninterface PropertyNode extends AstNode {\n type: 'Property';\n key: AstNode & { name?: string; value?: string | number };\n value: AstNode;\n}\n\ninterface IdentifierNode extends AstNode {\n type: 'Identifier';\n name: string;\n}\n\n// ── Core AST extraction helpers ──────────────────────────────────────────────\n\n/**\n * Parse a JavaScript expression string into an AST node.\n *\n * Wraps the expression in parens so acorn treats it as an expression statement.\n * Returns null if parsing fails.\n */\nfunction parseExpression(source: string): AstNode | null {\n try {\n const ast = parse(`(${source})`, {\n ecmaVersion: 'latest',\n sourceType: 'module',\n }) as unknown as { body: Array<{ expression: AstNode }> };\n return ast.body[0]?.expression ?? null;\n } catch {\n return null;\n }\n}\n\n/**\n * Extract a static string value from an AST node.\n * Returns undefined if the node is not a string literal.\n */\nfunction extractString(node: AstNode): string | undefined {\n if (node.type === 'Literal' && typeof (node as LiteralNode).value === 'string') {\n return (node as LiteralNode).value as string;\n }\n return undefined;\n}\n\n/**\n * Extract a static boolean value from an AST node.\n * Returns undefined if the node is not a boolean literal.\n */\nfunction extractBoolean(node: AstNode): boolean | undefined {\n if (node.type === 'Literal' && typeof (node as LiteralNode).value === 'boolean') {\n return (node as LiteralNode).value as boolean;\n }\n return undefined;\n}\n\n/**\n * Extract a string array from an AST ArrayExpression node.\n * Returns undefined if any element is not a string literal.\n */\nfunction extractStringArray(node: AstNode): string[] | undefined {\n if (node.type !== 'ArrayExpression') return undefined;\n const arr = node as ArrayExpressionNode;\n const result: string[] = [];\n for (const elem of arr.elements) {\n const s = extractString(elem);\n if (s === undefined) return undefined;\n result.push(s);\n }\n return result;\n}\n\n/**\n * Get the key name from a Property node.\n */\nfunction getPropertyKey(prop: PropertyNode): string | undefined {\n if (prop.key.type === 'Identifier') {\n return (prop.key as IdentifierNode).name;\n }\n if (prop.key.type === 'Literal' && typeof prop.key.value === 'string') {\n return prop.key.value;\n }\n return undefined;\n}\n\n/**\n * Build a map of property name → value node from an ObjectExpression.\n */\nfunction objectProperties(node: ObjectExpressionNode): Map<string, AstNode> {\n const map = new Map<string, AstNode>();\n for (const prop of node.properties) {\n // Skip spread elements or computed keys\n if (prop.type !== 'Property') continue;\n const key = getPropertyKey(prop);\n if (key) map.set(key, prop.value);\n }\n return map;\n}\n\n// ── Google font config extraction ────────────────────────────────────────────\n\n/**\n * Extract a GoogleFontConfig from the source text of a font function call's\n * object argument.\n *\n * The `callSource` should be the text of the call's argument list including\n * parens, e.g. `({ subsets: ['latin'], weight: '400' })`.\n *\n * Returns null if parsing or extraction fails.\n */\nexport function extractFontConfigAst(callSource: string): GoogleFontConfig | null {\n const node = parseExpression(callSource);\n if (!node || node.type !== 'ObjectExpression') return null;\n\n const props = objectProperties(node as ObjectExpressionNode);\n const config: GoogleFontConfig = {};\n\n // subsets: string[]\n const subsetsNode = props.get('subsets');\n if (subsetsNode) {\n const arr = extractStringArray(subsetsNode);\n if (arr) config.subsets = arr;\n }\n\n // weight: string | string[]\n const weightNode = props.get('weight');\n if (weightNode) {\n const arr = extractStringArray(weightNode);\n if (arr) {\n config.weight = arr;\n } else {\n const s = extractString(weightNode);\n if (s !== undefined) config.weight = s;\n }\n }\n\n // display: string\n const displayNode = props.get('display');\n if (displayNode) {\n const s = extractString(displayNode);\n if (s !== undefined) config.display = s as GoogleFontConfig['display'];\n }\n\n // variable: string\n const variableNode = props.get('variable');\n if (variableNode) {\n const s = extractString(variableNode);\n if (s !== undefined) config.variable = s;\n }\n\n // style: string | string[]\n const styleNode = props.get('style');\n if (styleNode) {\n const arr = extractStringArray(styleNode);\n if (arr) {\n config.style = arr;\n } else {\n const s = extractString(styleNode);\n if (s !== undefined) config.style = s;\n }\n }\n\n // preload: boolean\n const preloadNode = props.get('preload');\n if (preloadNode) {\n const b = extractBoolean(preloadNode);\n if (b !== undefined) config.preload = b;\n }\n\n return config;\n}\n\n// ── Local font config extraction ─────────────────────────────────────────────\n\n/**\n * Extract a single LocalFontSrc entry from an ObjectExpression AST node.\n */\nfunction extractLocalFontSrcEntry(node: AstNode): LocalFontSrc | null {\n if (node.type !== 'ObjectExpression') return null;\n const props = objectProperties(node as ObjectExpressionNode);\n\n const pathNode = props.get('path');\n if (!pathNode) return null;\n const path = extractString(pathNode);\n if (path === undefined) return null;\n\n const entry: LocalFontSrc = { path };\n\n const weightNode = props.get('weight');\n if (weightNode) {\n const w = extractString(weightNode);\n if (w !== undefined) entry.weight = w;\n }\n\n const styleNode = props.get('style');\n if (styleNode) {\n const s = extractString(styleNode);\n if (s !== undefined) entry.style = s;\n }\n\n return entry;\n}\n\n/**\n * Extract a LocalFontConfig from the source text of a localFont() call's\n * object argument.\n *\n * Returns null if parsing or extraction fails.\n */\nexport function extractLocalFontConfigAst(callSource: string): LocalFontConfig | null {\n const node = parseExpression(callSource);\n if (!node || node.type !== 'ObjectExpression') return null;\n\n const props = objectProperties(node as ObjectExpressionNode);\n\n // display: string\n const displayNode = props.get('display');\n const display = displayNode\n ? (extractString(displayNode) as LocalFontConfig['display'])\n : undefined;\n\n // variable: string\n const variableNode = props.get('variable');\n const variable = variableNode ? extractString(variableNode) : undefined;\n\n // family: string\n const familyNode = props.get('family');\n const family = familyNode ? extractString(familyNode) : undefined;\n\n // src: string | LocalFontSrc[]\n const srcNode = props.get('src');\n if (!srcNode) return null;\n\n // String form: src: './fonts/MyFont.woff2'\n const srcString = extractString(srcNode);\n if (srcString !== undefined) {\n return { src: srcString, display, variable, family };\n }\n\n // Array form: src: [{ path: '...', weight: '...' }, ...]\n if (srcNode.type === 'ArrayExpression') {\n const arr = srcNode as ArrayExpressionNode;\n const entries: LocalFontSrc[] = [];\n for (const elem of arr.elements) {\n const entry = extractLocalFontSrcEntry(elem);\n if (!entry) return null;\n entries.push(entry);\n }\n if (entries.length === 0) return null;\n return { src: entries, display, variable, family };\n }\n\n return null;\n}\n\n// ── Dynamic call detection ───────────────────────────────────────────────────\n\n/**\n * Detect if source code contains dynamic/computed font function calls\n * that cannot be statically analyzed.\n *\n * Uses acorn to parse the full source and inspect CallExpression nodes.\n * Returns the offending expression string if found, null if all calls are static.\n */\nexport function detectDynamicFontCallAst(source: string, importedNames: string[]): string | null {\n if (importedNames.length === 0) return null;\n\n let ast;\n try {\n ast = parse(source, {\n ecmaVersion: 'latest',\n sourceType: 'module',\n }) as unknown as { body: AstNode[] };\n } catch {\n // If we can't parse the source at all, fall back to no detection\n return null;\n }\n\n const nameSet = new Set(importedNames);\n const result = walkForDynamicCalls(ast as unknown as AstNode, nameSet, source);\n return result;\n}\n\n/**\n * Recursively walk the AST looking for CallExpression nodes where\n * the callee is one of the imported font names and the first argument\n * is not an ObjectExpression (i.e. it's dynamic).\n */\nfunction walkForDynamicCalls(node: AstNode, names: Set<string>, source: string): string | null {\n if (!node || typeof node !== 'object') return null;\n\n if (node.type === 'CallExpression') {\n const callee = node.callee as AstNode;\n if (callee.type === 'Identifier' && names.has((callee as IdentifierNode).name)) {\n const args = node.arguments as AstNode[];\n if (args.length > 0 && args[0].type !== 'ObjectExpression') {\n // Extract the argument source text\n const argStart = (args[0] as AstNode & { start: number }).start;\n const argEnd = (args[0] as AstNode & { end: number }).end;\n const argText = source.slice(argStart, argEnd);\n const calleeName = (callee as IdentifierNode).name;\n return `${calleeName}(${argText})`;\n }\n }\n }\n\n // Walk all child properties\n for (const key of Object.keys(node)) {\n if (key === 'type') continue;\n const child = node[key];\n if (Array.isArray(child)) {\n for (const item of child) {\n if (item && typeof item === 'object' && (item as AstNode).type) {\n const result = walkForDynamicCalls(item as AstNode, names, source);\n if (result) return result;\n }\n }\n } else if (child && typeof child === 'object' && (child as AstNode).type) {\n const result = walkForDynamicCalls(child as AstNode, names, source);\n if (result) return result;\n }\n }\n\n return null;\n}\n","/**\n * Local font processing for the timber-fonts pipeline.\n *\n * Handles:\n * - Resolving font file paths relative to the importing module\n * - Normalizing single-string `src` to array form\n * - Generating @font-face descriptors for each weight/style variant\n *\n * Does NOT handle:\n * - Font format conversion (serve whatever the user provides)\n * - Font subsetting (user's responsibility for local fonts)\n *\n * Design doc: 24-fonts.md §\"Local Fonts\"\n */\n\nimport { resolve, dirname, extname } from 'node:path';\nimport type { LocalFontConfig, LocalFontSrc, FontFaceDescriptor, ExtractedFont } from './types.js';\nimport { buildFontStack } from './fallbacks.js';\nimport { extractLocalFontConfigAst } from './ast.js';\n\n/**\n * Infer the font format from a file extension.\n *\n * Returns the CSS `format()` value for `@font-face` src descriptors.\n */\nexport function inferFontFormat(filePath: string): string {\n const ext = extname(filePath).toLowerCase();\n switch (ext) {\n case '.woff2':\n return 'woff2';\n case '.woff':\n return 'woff';\n case '.ttf':\n return 'truetype';\n case '.otf':\n return 'opentype';\n case '.eot':\n return 'embedded-opentype';\n default:\n return 'woff2';\n }\n}\n\n/**\n * Normalize `src` config to an array of LocalFontSrc entries.\n *\n * When `src` is a single string, it becomes a single entry with\n * default weight '400' and style 'normal'.\n */\nexport function normalizeSrc(src: string | LocalFontSrc[]): LocalFontSrc[] {\n if (typeof src === 'string') {\n return [{ path: src, weight: '400', style: 'normal' }];\n }\n return src.map((entry) => ({\n path: entry.path,\n weight: entry.weight ?? '400',\n style: entry.style ?? 'normal',\n }));\n}\n\n/**\n * Resolve font file paths relative to the importing module's directory.\n *\n * Takes the importer's file path and the normalized src entries,\n * returns new entries with absolute resolved paths.\n */\nexport function resolveLocalFontPaths(\n importerPath: string,\n sources: LocalFontSrc[]\n): LocalFontSrc[] {\n const importerDir = dirname(importerPath);\n return sources.map((entry) => ({\n ...entry,\n path: resolve(importerDir, entry.path),\n }));\n}\n\n/**\n * Generate a deterministic font family name from the file path\n * when no explicit `family` is provided.\n *\n * Uses the filename without extension, e.g. \"MyFont-Regular.woff2\" → \"MyFont-Regular\".\n * For multi-weight sources, uses the first file's name stem.\n */\nexport function generateFamilyName(sources: LocalFontSrc[]): string {\n if (sources.length === 0) return 'Local Font';\n const firstPath = sources[0].path;\n const basename = firstPath.split('/').pop() ?? firstPath;\n // Remove extension and weight/style suffixes for a cleaner family name\n const stem = basename.replace(/\\.[^.]+$/, '');\n // Strip common weight/style suffixes to get the family root\n const family = stem.replace(\n /[-_]?(Regular|Bold|Italic|Light|Medium|SemiBold|ExtraBold|Thin|Black|Heavy)$/i,\n ''\n );\n return family || stem;\n}\n\n/**\n * Generate @font-face descriptors for local font sources.\n *\n * Each source entry produces one @font-face rule. The `src` descriptor\n * uses a `url()` pointing to the resolved file path with the inferred format.\n */\nexport function generateLocalFontFaces(\n family: string,\n sources: LocalFontSrc[],\n display: string\n): FontFaceDescriptor[] {\n return sources.map((entry) => {\n const format = inferFontFormat(entry.path);\n return {\n family,\n src: `url('${entry.path}') format('${format}')`,\n weight: entry.weight,\n style: entry.style,\n display,\n };\n });\n}\n\n/**\n * Build the className for a local font, following the same convention\n * as Google fonts: `timber-font-<lowercase-hyphenated-family>`.\n */\nexport function localFontClassName(family: string): string {\n return `timber-font-${family.toLowerCase().replace(/\\s+/g, '-')}`;\n}\n\n/**\n * Process a local font config into an ExtractedFont.\n *\n * This is the main entry point called by the fonts plugin's transform hook\n * when it encounters a `localFont()` call.\n */\nexport function processLocalFont(config: LocalFontConfig, importerPath: string): ExtractedFont {\n const sources = normalizeSrc(config.src);\n const resolvedSources = resolveLocalFontPaths(importerPath, sources);\n const family = config.family ?? generateFamilyName(sources);\n const display = config.display ?? 'swap';\n const className = localFontClassName(family);\n const fontStack = buildFontStack(family);\n\n const weights = [...new Set(resolvedSources.map((s) => s.weight ?? '400'))];\n const styles = [...new Set(resolvedSources.map((s) => s.style ?? 'normal'))];\n\n return {\n id: `local-${family.toLowerCase().replace(/\\s+/g, '-')}-${weights.join(',')}-${styles.join(',')}`,\n family,\n provider: 'local',\n weights,\n styles,\n subsets: [],\n display,\n variable: config.variable,\n localSources: resolvedSources,\n importer: importerPath,\n className,\n fontFamily: fontStack,\n };\n}\n\n/**\n * Extract a LocalFontConfig from a static `localFont()` call source.\n *\n * Parses patterns like:\n * localFont({ src: './fonts/MyFont.woff2', display: 'swap', variable: '--font-custom' })\n * localFont({ src: [{ path: './a.woff2', weight: '400' }, { path: './b.woff2', weight: '700' }] })\n *\n * Returns null if the call cannot be statically analyzed.\n *\n * Uses acorn AST parsing for robust handling of comments, trailing commas,\n * and multi-line configs.\n */\nexport function extractLocalFontConfig(callSource: string): LocalFontConfig | null {\n return extractLocalFontConfigAst(callSource);\n}\n","/**\n * Google Fonts download, caching, and dev CDN fallback.\n *\n * At build time (production only):\n * 1. Queries Google Fonts CSS API v2 for font metadata and file URLs\n * 2. Downloads woff2 font files\n * 3. Caches them in node_modules/.cache/timber-fonts/\n * 4. Content-hashes filenames for cache busting\n * 5. Emits font files into the build output via generateBundle\n *\n * In dev mode:\n * - Generates @font-face rules pointing to Google Fonts CDN\n * - No downloads, no caching\n *\n * Design doc: 24-fonts.md §\"Step 2: Font Download & Subsetting\"\n */\n\nimport { createHash } from 'node:crypto';\nimport { readFile, writeFile, mkdir, stat } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { ExtractedFont, FontFaceDescriptor } from './types.js';\n\n/** Google Fonts CSS API v2 base URL. */\nconst GOOGLE_FONTS_API = 'https://fonts.googleapis.com/css2';\n\n/**\n * User-Agent string that requests woff2 format from Google Fonts API.\n * Google serves different formats based on user-agent.\n */\nconst WOFF2_USER_AGENT =\n 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36';\n\n/** Default cache directory for downloaded font files. */\nconst DEFAULT_CACHE_DIR = 'node_modules/.cache/timber-fonts';\n\n/** A parsed @font-face block from the Google Fonts CSS response. */\nexport interface GoogleFontFace {\n family: string;\n weight: string;\n style: string;\n /** The remote URL to the font file. */\n url: string;\n /** The unicode-range from the CSS (e.g. `U+0000-00FF, U+0131`). */\n unicodeRange: string;\n /** Subset label extracted from the CSS comment (e.g. `latin`, `cyrillic`). */\n subset: string;\n}\n\n/** A downloaded and cached font file, ready for build output. */\nexport interface CachedFont {\n /** The original parsed face data. */\n face: GoogleFontFace;\n /** Content-hashed filename (e.g. `inter-latin-400-normal-abc123.woff2`). */\n hashedFilename: string;\n /** Absolute path to the cached file. */\n cachePath: string;\n /** Raw font file bytes. */\n data: Buffer;\n}\n\n/**\n * Build the Google Fonts CSS API v2 URL for a given font config.\n *\n * Example output:\n * https://fonts.googleapis.com/css2?family=Inter:wght@400;700&display=swap&subset=latin\n */\nexport function buildGoogleFontsUrl(font: ExtractedFont): string {\n const family = font.family.replace(/\\s+/g, '+');\n\n // Build axis spec: wght for weights, ital for italic styles\n const hasItalic = font.styles.includes('italic');\n const weights = font.weights.map(Number).sort((a, b) => a - b);\n\n let axisSpec: string;\n if (hasItalic && weights.length > 0) {\n // ital,wght@0,400;0,700;1,400;1,700\n const pairs: string[] = [];\n for (const ital of [0, 1]) {\n if (ital === 1 && !hasItalic) continue;\n if (ital === 0 && font.styles.length === 1 && font.styles[0] === 'italic') continue;\n for (const w of weights) {\n pairs.push(`${ital},${w}`);\n }\n }\n axisSpec = `ital,wght@${pairs.join(';')}`;\n } else if (weights.length > 0) {\n axisSpec = `wght@${weights.join(';')}`;\n } else {\n axisSpec = '';\n }\n\n const familyParam = axisSpec ? `${family}:${axisSpec}` : family;\n\n // Build URL manually — URLSearchParams encodes +, :, @, ; which\n // the Google Fonts CSS API v2 requires as literal characters.\n const parts = [`family=${familyParam}`];\n if (font.display) parts.push(`display=${font.display}`);\n\n return `${GOOGLE_FONTS_API}?${parts.join('&')}`;\n}\n\n/**\n * Fetch the CSS from Google Fonts API and parse out @font-face blocks.\n *\n * The API returns CSS with subset comments like:\n * ```\n * /* latin * /\n * @font-face { ... }\n * ```\n *\n * We parse each block to extract the font URL, unicode-range, and subset label.\n */\nexport async function fetchGoogleFontsCss(url: string): Promise<GoogleFontFace[]> {\n const response = await fetch(url, {\n headers: { 'User-Agent': WOFF2_USER_AGENT },\n });\n\n if (!response.ok) {\n throw new Error(\n `Google Fonts API returned ${response.status}: ${response.statusText} for ${url}`\n );\n }\n\n const css = await response.text();\n return parseGoogleFontsCss(css);\n}\n\n/**\n * Parse the CSS response from Google Fonts API into structured font face data.\n *\n * Handles the Google Fonts CSS format with subset comments and @font-face blocks.\n */\nexport function parseGoogleFontsCss(css: string): GoogleFontFace[] {\n const faces: GoogleFontFace[] = [];\n\n // Match subset comments followed by @font-face blocks\n const blockPattern = /\\/\\*\\s*([a-z0-9-]+)\\s*\\*\\/\\s*@font-face\\s*\\{([^}]+)\\}/g;\n\n let match;\n while ((match = blockPattern.exec(css)) !== null) {\n const subset = match[1];\n const block = match[2];\n\n const familyMatch = block.match(/font-family:\\s*'([^']+)'/);\n const weightMatch = block.match(/font-weight:\\s*(\\d+)/);\n const styleMatch = block.match(/font-style:\\s*(\\w+)/);\n const urlMatch = block.match(/url\\(([^)]+)\\)\\s*format\\('woff2'\\)/);\n const rangeMatch = block.match(/unicode-range:\\s*([^;]+)/);\n\n if (familyMatch && urlMatch) {\n faces.push({\n family: familyMatch[1],\n weight: weightMatch?.[1] ?? '400',\n style: styleMatch?.[1] ?? 'normal',\n url: urlMatch[1],\n unicodeRange: rangeMatch?.[1]?.trim() ?? '',\n subset,\n });\n }\n }\n\n return faces;\n}\n\n/**\n * Filter parsed font faces to only the requested subsets.\n */\nexport function filterBySubsets(faces: GoogleFontFace[], subsets: string[]): GoogleFontFace[] {\n if (subsets.length === 0) return faces;\n const subsetSet = new Set(subsets);\n return faces.filter((f) => subsetSet.has(f.subset));\n}\n\n/**\n * Generate a content hash for font data.\n * Returns the first 8 hex chars of the SHA-256 hash.\n */\nexport function contentHash(data: Buffer): string {\n return createHash('sha256').update(data).digest('hex').slice(0, 8);\n}\n\n/**\n * Generate a content-hashed filename for a font face.\n *\n * Format: `<family>-<subset>-<weight>-<style>-<hash>.woff2`\n * Example: `inter-latin-400-normal-abc12345.woff2`\n */\nexport function hashedFontFilename(face: GoogleFontFace, data: Buffer): string {\n const slug = face.family.toLowerCase().replace(/\\s+/g, '-');\n const hash = contentHash(data);\n return `${slug}-${face.subset}-${face.weight}-${face.style}-${hash}.woff2`;\n}\n\n/**\n * Build the cache key for a font face.\n * Used to check if a font has already been downloaded.\n */\nexport function cacheKey(face: GoogleFontFace): string {\n const slug = face.family.toLowerCase().replace(/\\s+/g, '-');\n return `${slug}-${face.subset}-${face.weight}-${face.style}`;\n}\n\n/**\n * Download a single font file from its URL.\n */\nexport async function downloadFontFile(url: string): Promise<Buffer> {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Failed to download font from ${url}: ${response.status}`);\n }\n return Buffer.from(await response.arrayBuffer());\n}\n\n/**\n * Download and cache all font files for a set of extracted Google fonts.\n *\n * - Checks the local cache first (node_modules/.cache/timber-fonts/)\n * - Downloads missing fonts from Google Fonts CDN\n * - Writes downloaded fonts to cache\n * - Returns CachedFont entries with content-hashed filenames\n */\nexport async function downloadAndCacheFonts(\n fonts: ExtractedFont[],\n projectRoot: string\n): Promise<CachedFont[]> {\n const cacheDir = join(projectRoot, DEFAULT_CACHE_DIR);\n await mkdir(cacheDir, { recursive: true });\n\n const googleFonts = fonts.filter((f) => f.provider === 'google');\n const cached: CachedFont[] = [];\n\n for (const font of googleFonts) {\n const apiUrl = buildGoogleFontsUrl(font);\n const faces = await fetchGoogleFontsCss(apiUrl);\n const filtered = filterBySubsets(faces, font.subsets);\n\n for (const face of filtered) {\n const key = cacheKey(face);\n const metaPath = join(cacheDir, `${key}.meta.json`);\n const dataPath = join(cacheDir, `${key}.woff2`);\n\n let data: Buffer;\n let filename: string;\n\n // Check cache\n const cacheHit = await isCacheHit(metaPath, dataPath);\n if (cacheHit) {\n data = await readFile(dataPath);\n const meta = JSON.parse(await readFile(metaPath, 'utf-8'));\n filename = meta.hashedFilename;\n } else {\n // Download and cache\n data = await downloadFontFile(face.url);\n filename = hashedFontFilename(face, data);\n\n await writeFile(dataPath, data);\n await writeFile(metaPath, JSON.stringify({ hashedFilename: filename, url: face.url }));\n }\n\n cached.push({ face, hashedFilename: filename, cachePath: dataPath, data });\n }\n }\n\n return cached;\n}\n\n/**\n * Check if both the meta and data files exist in the cache.\n */\nasync function isCacheHit(metaPath: string, dataPath: string): Promise<boolean> {\n try {\n await stat(metaPath);\n await stat(dataPath);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Generate @font-face descriptors for cached (production) Google Fonts.\n *\n * Each CachedFont gets a FontFaceDescriptor pointing to the\n * content-hashed URL under `/_timber/fonts/`.\n */\nexport function generateProductionFontFaces(\n cachedFonts: CachedFont[],\n display: string\n): FontFaceDescriptor[] {\n return cachedFonts.map((cf) => ({\n family: cf.face.family,\n src: `url('/_timber/fonts/${cf.hashedFilename}') format('woff2')`,\n weight: cf.face.weight,\n style: cf.face.style,\n display,\n unicodeRange: cf.face.unicodeRange,\n }));\n}\n\n/**\n * Generate @font-face descriptors for dev mode (CDN-pointing).\n *\n * In dev mode, we query the Google Fonts API but use the CDN URLs\n * directly instead of downloading. This avoids the download/cache\n * step during `vite dev`.\n */\nexport function generateDevFontFaces(\n faces: GoogleFontFace[],\n display: string\n): FontFaceDescriptor[] {\n return faces.map((face) => ({\n family: face.family,\n src: `url('${face.url}') format('woff2')`,\n weight: face.weight,\n style: face.style,\n display,\n unicodeRange: face.unicodeRange,\n }));\n}\n\n/**\n * Resolve dev-mode font faces for an extracted font.\n *\n * Fetches the CSS from Google Fonts API and returns FontFaceDescriptors\n * pointing to CDN URLs. No files are downloaded.\n */\nexport async function resolveDevFontFaces(font: ExtractedFont): Promise<FontFaceDescriptor[]> {\n const apiUrl = buildGoogleFontsUrl(font);\n const faces = await fetchGoogleFontsCss(apiUrl);\n const filtered = filterBySubsets(faces, font.subsets);\n return generateDevFontFaces(filtered, font.display);\n}\n","/**\n * timber-fonts — Vite sub-plugin for build-time font processing.\n *\n * Handles:\n * - Virtual module resolution for `@timber/fonts/google` and `@timber/fonts/local`\n * - Static analysis of font function calls during `transform`\n * - @font-face CSS generation and scoped class output\n * - Size-adjusted fallback font generation\n *\n * Does NOT handle (separate tasks):\n * - Google Fonts downloading/caching (timber-nk5)\n * - Build manifest / Early Hints integration (timber-qnx)\n *\n * Design doc: 24-fonts.md\n */\n\nimport type { Plugin } from 'vite';\nimport type { PluginContext } from '#/index.js';\nimport type { ExtractedFont, GoogleFontConfig } from '#/fonts/types.js';\nimport type { ManifestFontEntry } from '#/server/build-manifest.js';\nimport { generateVariableClass, generateFontFamilyClass } from '#/fonts/css.js';\nimport { generateFallbackCss, buildFontStack } from '#/fonts/fallbacks.js';\nimport { processLocalFont } from '#/fonts/local.js';\nimport { inferFontFormat } from '#/fonts/local.js';\nimport { downloadAndCacheFonts, type CachedFont } from '#/fonts/google.js';\nimport {\n extractFontConfigAst,\n extractLocalFontConfigAst,\n detectDynamicFontCallAst,\n} from '#/fonts/ast.js';\n\nconst VIRTUAL_GOOGLE = '@timber/fonts/google';\nconst VIRTUAL_LOCAL = '@timber/fonts/local';\nconst RESOLVED_GOOGLE = '\\0@timber/fonts/google';\nconst RESOLVED_LOCAL = '\\0@timber/fonts/local';\n\n/**\n * Registry of fonts extracted during transform.\n * Keyed by a unique font ID derived from family + config.\n */\nexport type FontRegistry = Map<string, ExtractedFont>;\n\n/**\n * Convert a font family name to a PascalCase export name.\n * e.g. \"JetBrains Mono\" → \"JetBrains_Mono\"\n */\nfunction familyToExportName(family: string): string {\n return family.replace(/\\s+/g, '_');\n}\n\n/**\n * Convert a font family name to a scoped class name.\n * e.g. \"JetBrains Mono\" → \"timber-font-jetbrains-mono\"\n */\nfunction familyToClassName(family: string): string {\n return `timber-font-${family.toLowerCase().replace(/\\s+/g, '-')}`;\n}\n\n/**\n * Generate a unique font ID from family + config hash.\n */\nfunction generateFontId(family: string, config: GoogleFontConfig): string {\n const weights = normalizeToArray(config.weight);\n const styles = normalizeToArray(config.style);\n const subsets = config.subsets ?? ['latin'];\n return `${family.toLowerCase()}-${weights.join(',')}-${styles.join(',')}-${subsets.join(',')}`;\n}\n\n/**\n * Normalize a string or string array to an array.\n */\nfunction normalizeToArray(value: string | string[] | undefined): string[] {\n if (!value) return ['400'];\n return Array.isArray(value) ? value : [value];\n}\n\n/**\n * Normalize style to an array.\n */\nfunction normalizeStyleArray(value: string | string[] | undefined): string[] {\n if (!value) return ['normal'];\n return Array.isArray(value) ? value : [value];\n}\n\n/**\n * Extract static font config from a font function call in source code.\n *\n * Parses patterns like:\n * const inter = Inter({ subsets: ['latin'], weight: '400', display: 'swap', variable: '--font-sans' })\n *\n * Returns null if the call cannot be statically analyzed.\n *\n * Uses acorn AST parsing for robust handling of comments, trailing commas,\n * and multi-line configs.\n */\nexport function extractFontConfig(callSource: string): GoogleFontConfig | null {\n return extractFontConfigAst(callSource);\n}\n\n/**\n * Detect if a source file contains dynamic/computed font function calls\n * that cannot be statically analyzed.\n *\n * Returns the offending expression if found, null if all calls are static.\n *\n * Uses acorn AST parsing for accurate detection.\n */\nexport function detectDynamicFontCall(source: string, importedNames: string[]): string | null {\n return detectDynamicFontCallAst(source, importedNames);\n}\n\n/**\n * Regex that matches imports from either `@timber/fonts/google` or `next/font/google`.\n * The shims plugin resolves `next/font/google` to the same virtual module,\n * but the source code still contains the original import specifier.\n */\nconst GOOGLE_FONT_IMPORT_RE =\n /import\\s*\\{([^}]+)\\}\\s*from\\s*['\"](?:@timber\\/fonts\\/google|next\\/font\\/google)['\"]/g;\n\n/**\n * Parse import specifiers from a source file that imports from\n * `@timber/fonts/google` or `next/font/google`.\n *\n * Returns the list of imported font names (e.g. ['Inter', 'JetBrains_Mono']).\n */\nexport function parseGoogleFontImports(source: string): string[] {\n const importPattern = new RegExp(GOOGLE_FONT_IMPORT_RE.source, 'g');\n const names: string[] = [];\n\n let match;\n while ((match = importPattern.exec(source)) !== null) {\n const specifiers = match[1]\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean);\n for (const spec of specifiers) {\n // Handle `Inter as MyInter` — we want the local name\n const parts = spec.split(/\\s+as\\s+/);\n names.push(parts[parts.length - 1].trim());\n }\n }\n\n return names;\n}\n\n/**\n * Parse the original (remote) font family names from imports.\n *\n * Returns a map of local name → family name.\n * e.g. { Inter: 'Inter', JetBrains_Mono: 'JetBrains Mono' }\n */\nexport function parseGoogleFontFamilies(source: string): Map<string, string> {\n const importPattern = new RegExp(GOOGLE_FONT_IMPORT_RE.source, 'g');\n const families = new Map<string, string>();\n\n let match;\n while ((match = importPattern.exec(source)) !== null) {\n const specifiers = match[1]\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean);\n for (const spec of specifiers) {\n const parts = spec.split(/\\s+as\\s+/);\n const originalName = parts[0].trim();\n const localName = parts[parts.length - 1].trim();\n // Convert export name back to family name: JetBrains_Mono → JetBrains Mono\n const family = originalName.replace(/_/g, ' ');\n families.set(localName, family);\n }\n }\n\n return families;\n}\n\n/**\n * Generate the virtual module source for `@timber/fonts/google`.\n *\n * Each Google Font family gets a named export that returns a FontResult.\n * In this base implementation, the functions return static data.\n * The Google Fonts download task (timber-nk5) will add real font file URLs.\n */\nfunction generateGoogleVirtualModule(registry: FontRegistry): string {\n // Collect unique families from the registry\n const families = new Set<string>();\n for (const font of registry.values()) {\n if (font.provider === 'google') families.add(font.family);\n }\n\n const lines = [\n '// Auto-generated virtual module: @timber/fonts/google',\n '// Each export is a font loader function that returns a FontResult.',\n '',\n ];\n\n // If no fonts registered yet, export a generic loader for any font\n // This is the initial load — the transform hook will process actual calls\n lines.push('function createFontResult(family, config) {');\n lines.push(' return {');\n lines.push(' className: `timber-font-${family.toLowerCase().replace(/\\\\s+/g, \"-\")}`,');\n lines.push(' style: { fontFamily: family },');\n lines.push(' variable: config?.variable,');\n lines.push(' };');\n lines.push('}');\n lines.push('');\n\n // Export a Proxy-based default that handles any font name import\n lines.push('export default new Proxy({}, {');\n lines.push(' get(_, prop) {');\n lines.push(' if (typeof prop === \"string\") {');\n lines.push(' return (config) => createFontResult(prop.replace(/_/g, \" \"), config);');\n lines.push(' }');\n lines.push(' }');\n lines.push('});');\n\n // Also export known families as named exports for tree-shaking\n for (const family of families) {\n const exportName = familyToExportName(family);\n lines.push('');\n lines.push(`export function ${exportName}(config) {`);\n lines.push(` return createFontResult('${family}', config);`);\n lines.push('}');\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Generate the virtual module source for `@timber/fonts/local`.\n */\nfunction generateLocalVirtualModule(): string {\n return [\n '// Auto-generated virtual module: @timber/fonts/local',\n '',\n 'export default function localFont(config) {',\n ' const family = config?.family || \"Local Font\";',\n ' return {',\n ' className: `timber-font-${family.toLowerCase().replace(/\\\\s+/g, \"-\")}`,',\n ' style: { fontFamily: family },',\n ' variable: config?.variable,',\n ' };',\n '}',\n ].join('\\n');\n}\n\n/**\n * Generate the CSS output for all extracted fonts.\n *\n * Includes @font-face rules, fallback @font-face rules, and scoped classes.\n */\nexport function generateAllFontCss(registry: FontRegistry): string {\n const cssParts: string[] = [];\n\n for (const font of registry.values()) {\n // Generate fallback @font-face if metrics are available\n const fallbackCss = generateFallbackCss(font.family);\n if (fallbackCss) cssParts.push(fallbackCss);\n\n // Generate scoped class\n if (font.variable) {\n cssParts.push(generateVariableClass(font.className, font.variable, font.fontFamily));\n } else {\n cssParts.push(generateFontFamilyClass(font.className, font.fontFamily));\n }\n }\n\n return cssParts.join('\\n\\n');\n}\n\n/**\n * Parse the local name used for the default import of `@timber/fonts/local`.\n *\n * Handles:\n * import localFont from '@timber/fonts/local'\n * import myLoader from '@timber/fonts/local'\n */\nexport function parseLocalFontImportName(source: string): string | null {\n const match = source.match(\n /import\\s+(\\w+)\\s+from\\s*['\"](?:@timber\\/fonts\\/local|next\\/font\\/local)['\"]/\n );\n return match ? match[1] : null;\n}\n\n/**\n * Transform local font calls in source code.\n *\n * Finds `localFont({ ... })` calls, extracts the config,\n * registers the font, and replaces the call with a static FontResult.\n */\nfunction transformLocalFonts(\n transformedCode: string,\n originalCode: string,\n importerId: string,\n registry: FontRegistry,\n emitError: (msg: string) => void\n): string {\n const localName = parseLocalFontImportName(originalCode);\n if (!localName) return transformedCode;\n\n // Check for dynamic calls\n const dynamicCall = detectDynamicFontCall(originalCode, [localName]);\n if (dynamicCall) {\n emitError(\n `Font function calls must be statically analyzable. ` +\n `Found dynamic call: ${dynamicCall}. ` +\n `Pass a literal object with string/array values instead.`\n );\n }\n\n // Find all calls: const varName = localFont({ ... })\n const callPattern = new RegExp(\n `(?:const|let|var)\\\\s+(\\\\w+)\\\\s*=\\\\s*${localName}\\\\s*\\\\(\\\\s*(\\\\{[\\\\s\\\\S]*?\\\\})\\\\s*\\\\)`,\n 'g'\n );\n\n let callMatch;\n while ((callMatch = callPattern.exec(originalCode)) !== null) {\n const varName = callMatch[1];\n const configSource = callMatch[2];\n const fullMatch = callMatch[0];\n\n const config = extractLocalFontConfigAst(`(${configSource})`);\n if (!config) {\n emitError(\n `Could not statically analyze local font config. ` +\n `Ensure src is a string or array of { path, weight?, style? } objects.`\n );\n return transformedCode;\n }\n\n const extracted = processLocalFont(config, importerId);\n registry.set(extracted.id, extracted);\n\n const resultObj = extracted.variable\n ? `{ className: \"${extracted.className}\", style: { fontFamily: \"${extracted.fontFamily}\" }, variable: \"${extracted.variable}\" }`\n : `{ className: \"${extracted.className}\", style: { fontFamily: \"${extracted.fontFamily}\" } }`;\n\n const replacement = `const ${varName} = ${resultObj}`;\n transformedCode = transformedCode.replace(fullMatch, replacement);\n }\n\n // Remove the import statement\n transformedCode = transformedCode.replace(\n /import\\s+\\w+\\s+from\\s*['\"](?:@timber\\/fonts\\/local|next\\/font\\/local)['\"];?\\s*\\n?/g,\n ''\n );\n\n return transformedCode;\n}\n\n/**\n * Create the timber-fonts Vite plugin.\n */\nexport function timberFonts(ctx: PluginContext): Plugin {\n const registry: FontRegistry = new Map();\n /** Fonts downloaded during buildStart (production only). */\n let cachedFonts: CachedFont[] = [];\n\n return {\n name: 'timber-fonts',\n\n /**\n * Resolve `@timber/fonts/google` and `@timber/fonts/local` to virtual modules.\n */\n resolveId(id: string) {\n if (id === VIRTUAL_GOOGLE) return RESOLVED_GOOGLE;\n if (id === VIRTUAL_LOCAL) return RESOLVED_LOCAL;\n return null;\n },\n\n /**\n * Return generated source for font virtual modules.\n */\n load(id: string) {\n if (id === RESOLVED_GOOGLE) return generateGoogleVirtualModule(registry);\n if (id === RESOLVED_LOCAL) return generateLocalVirtualModule();\n return null;\n },\n\n /**\n * Download and cache Google Fonts during production builds.\n *\n * In dev mode this is a no-op — fonts point to the Google CDN.\n * The registry is populated by the transform hook which runs before\n * buildStart in the build pipeline, so all fonts are known here.\n */\n async buildStart() {\n if (ctx.dev) return;\n\n const googleFonts = [...registry.values()].filter((f) => f.provider === 'google');\n if (googleFonts.length === 0) return;\n\n cachedFonts = await downloadAndCacheFonts(googleFonts, ctx.root);\n },\n\n /**\n * Scan source files for font function calls and extract static config.\n *\n * When a file imports from `@timber/fonts/google`, we:\n * 1. Parse the import specifiers to get font family names\n * 2. Find each font function call and extract its config\n * 3. Validate that all calls are statically analyzable\n * 4. Register extracted fonts in the registry\n * 5. Replace the function call with a static FontResult object\n */\n transform(code: string, id: string) {\n // Skip virtual modules and node_modules\n if (id.startsWith('\\0') || id.includes('node_modules')) return null;\n\n const hasGoogleImport =\n code.includes('@timber/fonts/google') || code.includes('next/font/google');\n const hasLocalImport =\n code.includes('@timber/fonts/local') || code.includes('next/font/local');\n if (!hasGoogleImport && !hasLocalImport) return null;\n\n let transformedCode = code;\n\n // ── Google font transform ──────────────────────────────────────────\n if (hasGoogleImport) {\n const families = parseGoogleFontFamilies(code);\n if (families.size > 0) {\n const importedNames = [...families.keys()];\n\n const dynamicCall = detectDynamicFontCall(code, importedNames);\n if (dynamicCall) {\n this.error(\n `Font function calls must be statically analyzable. ` +\n `Found dynamic call: ${dynamicCall}. ` +\n `Pass a literal object with string/array values instead.`\n );\n }\n\n for (const [localName, family] of families) {\n const callPattern = new RegExp(\n `(?:const|let|var)\\\\s+(\\\\w+)\\\\s*=\\\\s*${localName}\\\\s*\\\\(\\\\s*(\\\\{[\\\\s\\\\S]*?\\\\})\\\\s*\\\\)`,\n 'g'\n );\n\n let callMatch;\n while ((callMatch = callPattern.exec(code)) !== null) {\n const varName = callMatch[1];\n const configSource = callMatch[2];\n const fullMatch = callMatch[0];\n\n const config = extractFontConfig(`(${configSource})`);\n if (!config) {\n this.error(\n `Could not statically analyze font config for ${family}. ` +\n `Ensure all config values are string literals or arrays of string literals.`\n );\n return null;\n }\n\n const fontId = generateFontId(family, config);\n const className = familyToClassName(family);\n const fontStack = buildFontStack(family);\n const display = config.display ?? 'swap';\n\n const extracted: ExtractedFont = {\n id: fontId,\n family,\n provider: 'google',\n weights: normalizeToArray(config.weight),\n styles: normalizeStyleArray(config.style),\n subsets: config.subsets ?? ['latin'],\n display,\n variable: config.variable,\n className,\n fontFamily: fontStack,\n importer: id,\n };\n\n registry.set(fontId, extracted);\n\n const resultObj = config.variable\n ? `{ className: \"${className}\", style: { fontFamily: \"${fontStack}\" }, variable: \"${config.variable}\" }`\n : `{ className: \"${className}\", style: { fontFamily: \"${fontStack}\" } }`;\n\n const replacement = `const ${varName} = ${resultObj}`;\n transformedCode = transformedCode.replace(fullMatch, replacement);\n }\n }\n\n transformedCode = transformedCode.replace(\n /import\\s*\\{[^}]+\\}\\s*from\\s*['\"](?:@timber\\/fonts\\/google|next\\/font\\/google)['\"];?\\s*\\n?/g,\n ''\n );\n }\n }\n\n // ── Local font transform ───────────────────────────────────────────\n if (hasLocalImport) {\n transformedCode = transformLocalFonts(\n transformedCode,\n code,\n id,\n registry,\n this.error.bind(this)\n );\n }\n\n if (transformedCode !== code) {\n return { code: transformedCode, map: null };\n }\n\n return null;\n },\n\n /**\n * Emit font files and metadata into the build output.\n *\n * For Google fonts: emits the downloaded, content-hashed woff2 files\n * and writes ManifestFontEntry arrays using real hashed URLs.\n *\n * For local fonts: emits entries using the source file paths.\n *\n * In dev mode the build manifest is null, so this is a no-op.\n */\n generateBundle() {\n // Emit cached Google Font files into the build output\n for (const cf of cachedFonts) {\n this.emitFile({\n type: 'asset',\n fileName: `_timber/fonts/${cf.hashedFilename}`,\n source: cf.data,\n });\n }\n\n if (!ctx.buildManifest) return;\n\n // Build a lookup from font family → cached files for manifest entries\n const cachedByFamily = new Map<string, CachedFont[]>();\n for (const cf of cachedFonts) {\n const key = cf.face.family.toLowerCase();\n const arr = cachedByFamily.get(key) ?? [];\n arr.push(cf);\n cachedByFamily.set(key, arr);\n }\n\n const fontsByImporter = new Map<string, ManifestFontEntry[]>();\n\n for (const font of registry.values()) {\n const entries = fontsByImporter.get(font.importer) ?? [];\n\n if (font.provider === 'local' && font.localSources) {\n // Local fonts: one entry per source file\n for (const src of font.localSources) {\n const filename = src.path.split('/').pop() ?? src.path;\n const format = inferFontFormat(src.path);\n entries.push({\n href: `/_timber/fonts/${filename}`,\n format,\n crossOrigin: 'anonymous',\n });\n }\n } else {\n // Google fonts: use real content-hashed URLs from cached downloads\n const familyKey = font.family.toLowerCase();\n const familyCached = cachedByFamily.get(familyKey) ?? [];\n for (const cf of familyCached) {\n entries.push({\n href: `/_timber/fonts/${cf.hashedFilename}`,\n format: 'woff2',\n crossOrigin: 'anonymous',\n });\n }\n }\n\n fontsByImporter.set(font.importer, entries);\n }\n\n // Normalize importer paths to be relative to project root (matching\n // how Vite's manifest.json keys work for css/js).\n for (const [importer, entries] of fontsByImporter) {\n const relativePath = importer.startsWith(ctx.root)\n ? importer.slice(ctx.root.length + 1)\n : importer;\n ctx.buildManifest.fonts[relativePath] = entries;\n }\n },\n };\n}\n","/**\n * timber-static-build — Vite sub-plugin for static output mode.\n *\n * When `output: 'static'` is set in timber.config.ts, this plugin:\n * 1. Validates that no dynamic APIs (cookies(), headers()) are used\n * 2. When client JavaScript is disabled, rejects 'use client' and 'use server' directives\n * 3. Coordinates build-time rendering of all pages\n *\n * Design doc: design/15-future-prerendering.md\n */\n\nimport type { Plugin } from 'vite';\nimport type { PluginContext } from '#/index.js';\nimport { detectFileDirective } from '#/utils/directive-parser.js';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface StaticValidationError {\n type: 'dynamic-api' | 'nojs-directive';\n file: string;\n message: string;\n line?: number;\n}\n\nexport interface StaticOptions {\n clientJavascriptDisabled: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Detection: dynamic APIs (cookies, headers)\n// ---------------------------------------------------------------------------\n\n/**\n * Patterns that indicate dynamic per-request API usage.\n * These are build errors in static mode because there is no request at build time.\n *\n * We detect both import-level and call-level usage.\n */\nconst DYNAMIC_API_PATTERNS: Array<{ pattern: RegExp; name: string }> = [\n { pattern: /\\bcookies\\s*\\(/, name: 'cookies()' },\n { pattern: /\\bheaders\\s*\\(/, name: 'headers()' },\n];\n\n/**\n * Detect usage of dynamic per-request APIs (cookies(), headers())\n * that cannot work at build time in static mode.\n *\n * Returns an array of validation errors.\n */\nexport function detectDynamicApis(code: string, fileId: string): StaticValidationError[] {\n const errors: StaticValidationError[] = [];\n\n for (const { pattern, name } of DYNAMIC_API_PATTERNS) {\n if (pattern.test(code)) {\n // Find the line number of the first match\n const lines = code.split('\\n');\n let line: number | undefined;\n for (let i = 0; i < lines.length; i++) {\n if (pattern.test(lines[i])) {\n line = i + 1;\n break;\n }\n }\n\n errors.push({\n type: 'dynamic-api',\n file: fileId,\n message:\n `${name} cannot be used in static mode — there is no request at build time. ` +\n `Remove the ${name} call or switch to output: 'server'.`,\n line,\n });\n }\n }\n\n return errors;\n}\n\n// ---------------------------------------------------------------------------\n// Detection: 'use client' / 'use server' directives (clientJavascript disabled)\n// ---------------------------------------------------------------------------\n\n/**\n * Detect 'use client' and 'use server' directives using AST-based parsing.\n * When client JavaScript is disabled, both are hard build errors — no React\n * runtime or server actions are allowed in the output.\n *\n * When client JavaScript is enabled, these are allowed (client components\n * hydrate, server actions get extracted to API endpoints).\n */\nexport function detectDirectives(\n code: string,\n fileId: string,\n options: StaticOptions\n): StaticValidationError[] {\n if (!options.clientJavascriptDisabled) return [];\n\n const errors: StaticValidationError[] = [];\n\n const clientDirective = detectFileDirective(code, ['use client']);\n if (clientDirective) {\n errors.push({\n type: 'nojs-directive',\n file: fileId,\n message:\n `'use client' is not allowed when client JavaScript is disabled (clientJavascript: false). ` +\n `This mode produces zero JavaScript — client components cannot exist.`,\n line: clientDirective.line,\n });\n }\n\n const serverDirective = detectFileDirective(code, ['use server']);\n if (serverDirective) {\n errors.push({\n type: 'nojs-directive',\n file: fileId,\n message:\n `'use server' is not allowed when client JavaScript is disabled (clientJavascript: false). ` +\n `This mode produces zero JavaScript — server actions cannot exist.`,\n line: serverDirective.line,\n });\n }\n\n return errors;\n}\n\n// ---------------------------------------------------------------------------\n// Combined validation\n// ---------------------------------------------------------------------------\n\n/**\n * Run all static mode validations on a source file.\n *\n * Combines:\n * - Dynamic API detection (cookies, headers) — always in static mode\n * - Directive detection ('use client', 'use server') — only when client JS is disabled\n */\nexport function validateStaticMode(\n code: string,\n fileId: string,\n options: StaticOptions\n): StaticValidationError[] {\n const errors: StaticValidationError[] = [];\n\n errors.push(...detectDynamicApis(code, fileId));\n errors.push(...detectDirectives(code, fileId, options));\n\n return errors;\n}\n\n// ---------------------------------------------------------------------------\n// Vite Plugin\n// ---------------------------------------------------------------------------\n\n/**\n * Create the timber-static-build Vite plugin.\n *\n * Only active when output: 'static' is configured.\n *\n * Hooks:\n * - transform: Validates source files for static mode violations\n */\nexport function timberStaticBuild(ctx: PluginContext): Plugin {\n const isStatic = ctx.config.output === 'static';\n const clientJavascriptDisabled = ctx.clientJavascript.disabled;\n\n return {\n name: 'timber-static-build',\n\n /**\n * Validate source files during transform.\n *\n * In static mode, we check every app/ file for:\n * - Dynamic API usage (cookies(), headers()) → build error\n * - When client JS disabled: 'use client' / 'use server' directives → build error\n */\n transform(code: string, id: string) {\n // Only active in static mode\n if (!isStatic) return null;\n\n // Skip node_modules\n if (id.includes('node_modules')) return null;\n\n // Only check files in the app directory\n if (!id.includes('/app/') && !id.startsWith('app/')) return null;\n\n // Only check JS/TS files\n if (!/\\.[jt]sx?$/.test(id)) return null;\n\n const errors = validateStaticMode(code, id, { clientJavascriptDisabled });\n\n if (errors.length > 0) {\n // Format all errors into a single build error message\n const messages = errors.map(\n (e) =>\n `[timber] Static mode error in ${e.file}${e.line ? `:${e.line}` : ''}: ${e.message}`\n );\n\n this.error(messages.join('\\n\\n'));\n }\n\n return null;\n },\n };\n}\n","/**\n * timber-dynamic-transform — Vite sub-plugin for 'use dynamic' directive.\n *\n * Detects `'use dynamic'` directives in server component function bodies\n * and transforms them into `markDynamic()` runtime calls. The directive\n * declares a dynamic boundary — the component and its subtree opt out of\n * the pre-rendered shell and render per-request.\n *\n * - In `output: 'static'` mode, `'use dynamic'` is a build error.\n * - In standard SSR routes (no prerender.ts), the directive is a no-op\n * (everything is already per-request), but the transform still runs\n * so the runtime can skip unnecessary work.\n *\n * Design doc: design/15-future-prerendering.md §\"'use dynamic'\"\n */\n\nimport type { Plugin } from 'vite';\nimport type { PluginContext } from '#/index.js';\nimport { findFunctionsWithDirective, containsDirective } from '#/utils/directive-parser.js';\n\n// ---------------------------------------------------------------------------\n// Detection\n// ---------------------------------------------------------------------------\n\n/**\n * Quick check: does this source file contain 'use dynamic' anywhere?\n * Used as a fast bail-out before doing expensive AST parsing.\n */\nexport function containsUseDynamic(code: string): boolean {\n return containsDirective(code, 'use dynamic');\n}\n\n// ---------------------------------------------------------------------------\n// Transform\n// ---------------------------------------------------------------------------\n\ninterface TransformResult {\n code: string;\n map?: null;\n}\n\n/**\n * Find function declarations/expressions containing 'use dynamic' and\n * transform them into markDynamic() calls.\n *\n * Input:\n * ```tsx\n * export default async function AddToCartButton({ productId }) {\n * 'use dynamic'\n * const user = await getUser()\n * return <button>Add to cart</button>\n * }\n * ```\n *\n * Output:\n * ```tsx\n * import { markDynamic as __markDynamic } from '@timber/app/runtime';\n * export default async function AddToCartButton({ productId }) {\n * __markDynamic();\n * const user = await getUser()\n * return <button>Add to cart</button>\n * }\n * ```\n *\n * The markDynamic() call registers the component boundary as dynamic\n * at render time. The pre-render pass uses this to know which subtrees\n * to skip and leave as holes for per-request rendering.\n */\nexport function transformUseDynamic(code: string): TransformResult | null {\n if (!containsUseDynamic(code)) return null;\n\n const functions = findFunctionsWithDirective(code, 'use dynamic');\n if (functions.length === 0) return null;\n\n // Replace directive strings with __markDynamic() calls, processing\n // from end to start to preserve source offsets\n let result = code;\n for (const fn of functions) {\n // Replace the directive in the body content\n const cleanBody = fn.bodyContent.replace(/['\"]use dynamic['\"];?/, '__markDynamic();');\n // Reconstruct: replace the body content between braces\n result = result.slice(0, fn.bodyStart) + cleanBody + result.slice(fn.bodyEnd);\n }\n\n // Add the import at the top\n result = `import { markDynamic as __markDynamic } from '@timber/app/runtime';\\n` + result;\n\n return { code: result, map: null };\n}\n\n// ---------------------------------------------------------------------------\n// Static mode validation\n// ---------------------------------------------------------------------------\n\n/**\n * In `output: 'static'` mode, `'use dynamic'` is a build error.\n * Static mode renders everything at build time — there is no per-request\n * rendering to opt into.\n */\nexport function validateNoDynamicInStaticMode(\n code: string\n): { message: string; line?: number } | null {\n if (!containsUseDynamic(code)) return null;\n\n const functions = findFunctionsWithDirective(code, 'use dynamic');\n if (functions.length === 0) return null;\n\n return {\n message:\n `'use dynamic' cannot be used in static mode (output: 'static'). ` +\n `Static mode renders all content at build time — there is no per-request rendering. ` +\n `Remove the directive or switch to output: 'server'.`,\n line: functions[functions.length - 1].directiveLine, // First occurrence (sorted descending)\n };\n}\n\n// ---------------------------------------------------------------------------\n// Vite Plugin\n// ---------------------------------------------------------------------------\n\n/**\n * Create the timber-dynamic-transform Vite plugin.\n *\n * In server mode: transforms 'use dynamic' into markDynamic() calls.\n * In static mode: rejects 'use dynamic' as a build error.\n */\nexport function timberDynamicTransform(ctx: PluginContext): Plugin {\n const isStatic = ctx.config.output === 'static';\n\n return {\n name: 'timber-dynamic-transform',\n\n transform(code: string, id: string) {\n // Skip node_modules\n if (id.includes('node_modules')) return null;\n\n // Only check files in the app directory\n if (!id.includes('/app/') && !id.startsWith('app/')) return null;\n\n // Only check JS/TS files\n if (!/\\.[jt]sx?$/.test(id)) return null;\n\n // Quick bail-out\n if (!containsUseDynamic(code)) return null;\n\n // In static mode, 'use dynamic' is a build error\n if (isStatic) {\n const error = validateNoDynamicInStaticMode(code);\n if (error) {\n this.error(\n `[timber] Static mode error in ${id}${error.line ? `:${error.line}` : ''}: ${error.message}`\n );\n }\n return null;\n }\n\n // In server mode, transform the directive\n return transformUseDynamic(code);\n },\n };\n}\n","import type { Plugin } from 'vite';\nimport { Parser } from 'acorn';\nimport acornJsx from 'acorn-jsx';\nimport { detectFileDirective } from '#/utils/directive-parser.js';\n\nconst jsxParser = Parser.extend(acornJsx());\n\n/**\n * Rewrite 'use server' module exports to bypass RSC plugin AST validation.\n *\n * The RSC plugin's client/SSR proxy transform (transformProxyExport) requires\n * all `export const` initializers to be `async ArrowFunctionExpression`. But\n * `createActionClient().action()` and `validated()` return async functions via\n * CallExpressions — valid at runtime but rejected by the static AST check.\n *\n * This plugin rewrites non-function-expression exports from:\n *\n * export const foo = someCall();\n *\n * to:\n *\n * const foo = someCall();\n * export { foo };\n *\n * The `export { name }` form bypasses the RSC plugin's validation without\n * changing runtime semantics. Function expression exports (async arrows,\n * async function expressions) are left untouched.\n *\n * See design/08-forms-and-actions.md §\"Middleware for Server Actions\"\n */\nexport function timberServerActionExports(): Plugin {\n return {\n name: 'timber-server-action-exports',\n transform(code, id) {\n // Skip non-JS/TS files\n if (!/\\.[jt]sx?$/.test(id)) return;\n // Quick bail-out\n if (!code.includes('use server')) return;\n // Check for file-level directive\n const directive = detectFileDirective(code, ['use server']);\n if (!directive) return;\n\n return rewriteServerActionExports(code);\n },\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AcornNode = any;\n\n/**\n * Check if an AST node is an async function expression (arrow or regular).\n * These are handled correctly by the RSC plugin and don't need rewriting.\n */\nfunction isAsyncFunctionExpr(node: AcornNode): boolean {\n if (!node) return false;\n return (\n (node.type === 'ArrowFunctionExpression' || node.type === 'FunctionExpression') && node.async\n );\n}\n\n/**\n * Extract identifier names from a declarator's id pattern.\n * Handles simple identifiers and destructuring patterns.\n */\nfunction extractDeclNames(id: AcornNode): string[] {\n if (id.type === 'Identifier') return [id.name];\n\n // ObjectPattern: const { a, b } = ...\n if (id.type === 'ObjectPattern') {\n return id.properties.flatMap((p: AcornNode) => extractDeclNames(p.value ?? p.argument));\n }\n\n // ArrayPattern: const [a, b] = ...\n if (id.type === 'ArrayPattern') {\n return id.elements.filter(Boolean).flatMap((e: AcornNode) => extractDeclNames(e));\n }\n\n // RestElement: const [...rest] = ...\n if (id.type === 'RestElement') {\n return extractDeclNames(id.argument);\n }\n\n // AssignmentPattern: const { a = 1 } = ...\n if (id.type === 'AssignmentPattern') {\n return extractDeclNames(id.left);\n }\n\n return [];\n}\n\ninterface RewriteTarget {\n /** Start offset of the `export` keyword */\n exportStart: number;\n /** Start offset of the `const/let/var` keyword (right after `export `) */\n declStart: number;\n /** Names to re-export */\n names: string[];\n}\n\nfunction rewriteServerActionExports(code: string): { code: string; map: null } | undefined {\n let ast: AcornNode;\n try {\n ast = jsxParser.parse(code, {\n ecmaVersion: 'latest',\n sourceType: 'module',\n });\n } catch {\n // TypeScript that esbuild hasn't stripped yet — use regex fallback\n return rewriteServerActionExportsFallback(code);\n }\n\n const targets: RewriteTarget[] = [];\n\n for (const node of ast.body) {\n // Case 1: export const/let/var name = <non-function-expression>\n if (\n node.type === 'ExportNamedDeclaration' &&\n node.declaration?.type === 'VariableDeclaration'\n ) {\n const hasNonFunctionInit = node.declaration.declarations.some(\n (d: AcornNode) => d.init && !isAsyncFunctionExpr(d.init)\n );\n if (!hasNonFunctionInit) continue;\n\n const names = node.declaration.declarations.flatMap((d: AcornNode) => extractDeclNames(d.id));\n if (names.length === 0) continue;\n\n targets.push({\n exportStart: node.start,\n declStart: node.declaration.start,\n names,\n });\n }\n\n // Case 2: export default <non-function-expression>\n if (node.type === 'ExportDefaultDeclaration') {\n const decl = node.declaration;\n if (\n decl.type !== 'FunctionDeclaration' &&\n decl.type !== 'Identifier' &&\n !isAsyncFunctionExpr(decl)\n ) {\n // export default someCall() → const $$default = someCall(); export default $$default;\n targets.push({\n exportStart: node.start,\n declStart: -1, // sentinel for default export\n names: ['default'],\n });\n }\n }\n }\n\n if (targets.length === 0) return undefined;\n\n // Process from end to start to preserve character positions\n let result = code;\n const reExports: string[] = [];\n\n for (let i = targets.length - 1; i >= 0; i--) {\n const target = targets[i];\n\n if (target.declStart === -1) {\n // export default <expr> → const $$default = <expr>;\\nexport default $$default;\n const node = ast.body.find(\n (n: AcornNode) => n.type === 'ExportDefaultDeclaration' && n.start === target.exportStart\n );\n if (node) {\n const exprCode = code.slice(node.declaration.start, node.declaration.end);\n const replacement = `const $$default = ${exprCode};\\nexport default $$default;`;\n result = result.slice(0, node.start) + replacement + result.slice(node.end);\n }\n continue;\n }\n\n // Remove 'export ' from the declaration\n result = result.slice(0, target.exportStart) + result.slice(target.declStart);\n reExports.push(...target.names);\n }\n\n if (reExports.length > 0) {\n result += '\\nexport { ' + reExports.join(', ') + ' };\\n';\n }\n\n return { code: result, map: null };\n}\n\n/**\n * Regex fallback for TypeScript files that acorn cannot parse.\n *\n * Matches `export const/let/var name = <expr>` where the initializer does\n * NOT start with `async function` or `async (` (i.e., not an async\n * function expression or async arrow function).\n */\nfunction rewriteServerActionExportsFallback(code: string): { code: string; map: null } | undefined {\n // Match: export const/let/var <name> = <non-async-function-expr>\n const pattern =\n /^(export\\s+)((?:const|let|var)\\s+(\\w+)\\s*=\\s*)(?!async\\s+(?:function[\\s(]|\\())/gm;\n\n const names: string[] = [];\n let result = code;\n let offset = 0;\n let match;\n\n while ((match = pattern.exec(code)) !== null) {\n const exportKeyword = match[1]; // 'export ' (with trailing space)\n const name = match[3];\n\n // Remove 'export ' at this position (adjusted for prior removals)\n const pos = match.index + offset;\n result = result.slice(0, pos) + result.slice(pos + exportKeyword.length);\n offset -= exportKeyword.length;\n names.push(name);\n }\n\n if (names.length === 0) return undefined;\n\n result += '\\nexport { ' + names.join(', ') + ' };\\n';\n return { code: result, map: null };\n}\n","/**\n * timber-build-manifest — Vite sub-plugin for build asset manifest generation.\n *\n * Provides `virtual:timber-build-manifest` which exports a BuildManifest\n * mapping route segment file paths to their CSS, JS, and modulepreload\n * output chunks.\n *\n * - Dev mode: exports an empty manifest (Vite HMR handles CSS/JS).\n * - Build mode: virtual module reads from globalThis.__TIMBER_BUILD_MANIFEST__\n * at runtime. The actual manifest data is injected by the adapter via a\n * _timber-manifest-init.js module that runs before the RSC handler.\n *\n * The generateBundle hook (client env only) extracts CSS/JS/modulepreload\n * data from the Rollup bundle and populates ctx.buildManifest.\n *\n * Design docs: 18-build-system.md §\"Build Manifest\", 02-rendering-pipeline.md §\"Early Hints\"\n */\n\nimport type { Plugin, ResolvedConfig } from 'vite';\nimport type { PluginContext } from '#/index.js';\nimport type { BuildManifest } from '#/server/build-manifest.js';\n\n// Rollup types used by generateBundle hook — imported from vite which re-exports them.\n// We define minimal interfaces here to avoid a direct 'rollup' dependency.\ninterface OutputChunk {\n type: 'chunk';\n fileName: string;\n facadeModuleId: string | null;\n imports: string[];\n name: string;\n code: string;\n viteMetadata?: { importedCss?: Set<string> };\n}\n\ninterface OutputAsset {\n type: 'asset';\n fileName: string;\n}\n\ntype OutputBundle = Record<string, OutputChunk | OutputAsset>;\n\nconst VIRTUAL_MODULE_ID = 'virtual:timber-build-manifest';\nconst RESOLVED_VIRTUAL_ID = `\\0${VIRTUAL_MODULE_ID}`;\n\n/**\n * Vite's manifest.json entry shape (subset we need).\n * See https://vite.dev/guide/backend-integration.html\n */\ninterface ViteManifestEntry {\n file: string;\n css?: string[];\n imports?: string[];\n}\n\n/**\n * Parse Vite's .vite/manifest.json into a BuildManifest.\n *\n * Walks each entry and collects:\n * - `css`: CSS output URLs per input file (transitive CSS included by Vite)\n * - `js`: Hashed JS chunk URL per input file\n * - `modulepreload`: Transitive JS dependency URLs per input file\n *\n * Keys are input file paths (relative to project root).\n */\nexport function parseViteManifest(\n viteManifest: Record<string, ViteManifestEntry>,\n base: string\n): BuildManifest {\n const css: Record<string, string[]> = {};\n const js: Record<string, string> = {};\n const modulepreload: Record<string, string[]> = {};\n\n for (const [inputPath, entry] of Object.entries(viteManifest)) {\n // JS chunk mapping\n js[inputPath] = base + entry.file;\n\n // CSS mapping\n if (entry.css && entry.css.length > 0) {\n css[inputPath] = entry.css.map((cssPath) => base + cssPath);\n }\n\n // Collect transitive JS dependencies for modulepreload\n modulepreload[inputPath] = collectTransitiveDeps(inputPath, viteManifest, base);\n }\n\n return { css, js, modulepreload, fonts: {} };\n}\n\n/**\n * Recursively collect transitive JS dependency URLs for an entry.\n *\n * Walks the `imports` graph in Vite's manifest, resolving each import\n * key to its output `file` URL. Deduplicates to avoid cycles and\n * redundant preloads.\n */\nfunction collectTransitiveDeps(\n entryKey: string,\n manifest: Record<string, ViteManifestEntry>,\n base: string\n): string[] {\n const seen = new Set<string>();\n const result: string[] = [];\n\n function walk(key: string) {\n const entry = manifest[key];\n if (!entry?.imports) return;\n\n for (const importKey of entry.imports) {\n if (seen.has(importKey)) continue;\n seen.add(importKey);\n\n const dep = manifest[importKey];\n if (dep) {\n result.push(base + dep.file);\n walk(importKey);\n }\n }\n }\n\n walk(entryKey);\n return result;\n}\n\n/**\n * Build a BuildManifest from a Rollup output bundle.\n *\n * Unlike parseViteManifest (which reads Vite's manifest.json), this\n * works directly with the Rollup bundle output. This is necessary because\n * the RSC plugin doesn't produce a standard Vite manifest.json.\n *\n * Walks each chunk in the bundle and collects:\n * - `css`: CSS files imported by each chunk (via viteMetadata.importedCss)\n * - `js`: The output filename for each chunk with a facadeModuleId\n * - `modulepreload`: Transitive JS imports for each entry chunk\n *\n * Keys are input file paths relative to root.\n */\nexport function buildManifestFromBundle(\n bundle: OutputBundle,\n base: string,\n root: string\n): BuildManifest {\n const css: Record<string, string[]> = {};\n const js: Record<string, string> = {};\n const modulepreload: Record<string, string[]> = {};\n\n // Build a map of chunk fileName → chunk for transitive dep resolution\n const chunksByFileName = new Map<string, OutputChunk>();\n for (const item of Object.values(bundle) as (OutputChunk | OutputAsset)[]) {\n if (item.type === 'chunk') {\n chunksByFileName.set(item.fileName, item);\n }\n }\n\n for (const item of Object.values(bundle) as (OutputChunk | OutputAsset)[]) {\n if (item.type !== 'chunk') continue;\n\n const chunk = item;\n if (!chunk.facadeModuleId) continue;\n\n // Convert absolute facadeModuleId to root-relative path\n let inputPath = chunk.facadeModuleId;\n if (inputPath.startsWith(root)) {\n inputPath = inputPath.slice(root.length + 1);\n }\n\n // JS chunk mapping\n js[inputPath] = base + chunk.fileName;\n\n // CSS mapping via viteMetadata\n const viteMetadata = chunk.viteMetadata;\n if (viteMetadata?.importedCss && viteMetadata.importedCss.size > 0) {\n css[inputPath] = Array.from(viteMetadata.importedCss).map((cssFile) => base + cssFile);\n }\n\n // Collect transitive JS dependencies for modulepreload\n const deps = collectTransitiveBundleDeps(chunk, chunksByFileName, base);\n if (deps.length > 0) {\n modulepreload[inputPath] = deps;\n }\n }\n\n // Collect ALL CSS assets from the bundle under the `_global` key.\n // Route files (app/layout.tsx, app/page.tsx) are server components —\n // they don't appear in the client bundle, so per-route CSS keying\n // via facadeModuleId doesn't work. The RSC plugin handles per-route\n // CSS injection via data-rsc-css-href. For Link headers (103 Early\n // Hints), we emit all CSS files — they're just prefetch hints.\n const allCss: string[] = [];\n for (const item of Object.values(bundle) as (OutputChunk | OutputAsset)[]) {\n if (item.type === 'asset' && item.fileName.endsWith('.css')) {\n allCss.push(base + item.fileName);\n }\n }\n if (allCss.length > 0) {\n css['_global'] = allCss;\n }\n\n return { css, js, modulepreload, fonts: {} };\n}\n\n/**\n * Recursively collect transitive JS dependency URLs from a bundle chunk.\n */\nfunction collectTransitiveBundleDeps(\n chunk: OutputChunk,\n chunksByFileName: Map<string, OutputChunk>,\n base: string\n): string[] {\n const seen = new Set<string>();\n const result: string[] = [];\n\n function walk(imports: string[]) {\n for (const importFileName of imports) {\n if (seen.has(importFileName)) continue;\n seen.add(importFileName);\n\n result.push(base + importFileName);\n const dep = chunksByFileName.get(importFileName);\n if (dep) {\n walk(dep.imports);\n }\n }\n }\n\n walk(chunk.imports);\n return result;\n}\n\n/**\n * Create the timber-build-manifest Vite plugin.\n *\n * Hooks: configResolved, resolveId, load, generateBundle (client env only)\n */\nexport function timberBuildManifest(ctx: PluginContext): Plugin {\n let resolvedBase = '/';\n let isDev = false;\n\n return {\n name: 'timber-build-manifest',\n\n configResolved(config: ResolvedConfig) {\n resolvedBase = config.base;\n isDev = config.command === 'serve';\n },\n\n resolveId(id: string) {\n const cleanId = id.startsWith('\\0') ? id.slice(1) : id;\n\n if (cleanId === VIRTUAL_MODULE_ID) {\n return RESOLVED_VIRTUAL_ID;\n }\n\n if (cleanId.endsWith(`/${VIRTUAL_MODULE_ID}`)) {\n return RESOLVED_VIRTUAL_ID;\n }\n\n return null;\n },\n\n load(id: string) {\n if (id !== RESOLVED_VIRTUAL_ID) return null;\n\n // In dev mode, return empty manifest — Vite HMR handles CSS.\n if (isDev) {\n return [\n '// Auto-generated build manifest — do not edit.',\n '// Dev mode: empty manifest (Vite HMR handles CSS/JS).',\n '',\n 'const manifest = { css: {}, js: {}, modulepreload: {}, fonts: {} };',\n '',\n 'export default manifest;',\n ].join('\\n');\n }\n\n // In production, read from globalThis at runtime.\n // The adapter writes a _timber-manifest-init.js that sets this global\n // before the RSC handler imports this module. ESM evaluation order\n // guarantees the global is set by the time this code runs.\n return [\n '// Auto-generated build manifest — do not edit.',\n '// Production: reads manifest from globalThis (set by _timber-manifest-init.js).',\n '',\n 'const manifest = globalThis.__TIMBER_BUILD_MANIFEST__ ?? { css: {}, js: {}, modulepreload: {}, fonts: {} };',\n '',\n 'export default manifest;',\n ].join('\\n');\n },\n\n // Extract manifest data from the client bundle only.\n // The RSC plugin runs builds in order: RSC → client → SSR.\n // We only want client env data (CSS assets, client JS chunks).\n generateBundle(_options, bundle) {\n if (isDev) return;\n\n const envName = (this as { environment?: { name: string } }).environment?.name;\n\n if (envName === 'client') {\n ctx.buildManifest = buildManifestFromBundle(bundle, resolvedBase, ctx.root);\n\n // When client JavaScript is disabled, strip JS chunks from the bundle\n // so Rollup never writes them to disk. CSS assets are preserved —\n // they're still needed for server-rendered HTML.\n //\n // This is an optimization: adapter-build.ts still strips JS from the\n // build manifest and RSC assets manifest as a defense-in-depth fallback.\n if (ctx.clientJavascript.disabled) {\n // Clear JS and modulepreload from the manifest (they'd be stripped\n // by adapter-build.ts anyway, but doing it here avoids the round-trip).\n ctx.buildManifest.js = {};\n ctx.buildManifest.modulepreload = {};\n\n // Remove JS chunks from the Rollup bundle — prevents disk writes.\n for (const [fileName, item] of Object.entries(bundle)) {\n if (item.type === 'chunk') {\n delete bundle[fileName];\n }\n }\n }\n }\n },\n };\n}\n","/**\n * timber-dev-logs — Pipes server console output to the browser console in dev.\n *\n * Patches `console.log/warn/error/debug/info` on the server side and\n * forwards messages to connected browsers via Vite's HMR WebSocket.\n * The browser entry replays them in the browser console with the\n * correct log level and a \"[server]\" prefix.\n *\n * Dev-only: this plugin only runs during `vite dev` (apply: 'serve').\n * No runtime overhead in production.\n *\n * Design docs: 18-build-system.md §\"Dev Server\", 02-rendering-pipeline.md\n */\n\nimport type { Plugin, ViteDevServer } from 'vite';\nimport type { PluginContext } from '#/index.js';\n\n// ─── Types ───────────────────────────────────────────────────────────────\n\n/** Log levels that are patched and forwarded. */\nexport type ServerLogLevel = 'log' | 'warn' | 'error' | 'debug' | 'info';\n\nconst LOG_LEVELS: ServerLogLevel[] = ['log', 'warn', 'error', 'debug', 'info'];\n\n/** Payload sent over Vite's HMR WebSocket. */\nexport interface ServerLogPayload {\n level: ServerLogLevel;\n args: unknown[];\n /** Server-side source location (file:line:col) if available. */\n location: string | null;\n /** Timestamp in ms (Date.now()) */\n timestamp: number;\n}\n\n// ─── Serialization ───────────────────────────────────────────────────────\n\n/** Patterns that look like env vars or secrets — these are redacted. */\nconst SENSITIVE_PATTERNS =\n /(?:^|[^a-z])(?:SECRET|TOKEN|PASSWORD|API_KEY|PRIVATE_KEY|AUTH|CREDENTIAL|SESSION_SECRET)(?:[^a-z]|$)/i;\n\n/**\n * Serialize a console argument for transmission over WebSocket.\n *\n * Handles: strings, numbers, booleans, null, undefined, arrays, plain\n * objects, Errors, Dates, RegExps, and falls back to String() for others.\n *\n * Redacts values that match sensitive patterns to avoid leaking secrets.\n */\nfunction serializeArg(arg: unknown, depth = 0): unknown {\n if (depth > 5) return '[...]';\n\n if (arg === null) return null;\n if (arg === undefined) return '[undefined]';\n\n switch (typeof arg) {\n case 'string':\n if (SENSITIVE_PATTERNS.test(arg)) return '[REDACTED]';\n return arg;\n case 'number':\n case 'boolean':\n return arg;\n case 'bigint':\n return `${arg}n`;\n case 'symbol':\n return arg.toString();\n case 'function':\n return `[Function: ${arg.name || 'anonymous'}]`;\n case 'object':\n break;\n default:\n return String(arg);\n }\n\n // Error\n if (arg instanceof Error) {\n return {\n __type: 'Error',\n name: arg.name,\n message: arg.message,\n stack: arg.stack ?? null,\n };\n }\n\n // Date\n if (arg instanceof Date) {\n return arg.toISOString();\n }\n\n // RegExp\n if (arg instanceof RegExp) {\n return arg.toString();\n }\n\n // Array\n if (Array.isArray(arg)) {\n return arg.map((item) => serializeArg(item, depth + 1));\n }\n\n // Map\n if (arg instanceof Map) {\n const entries: Record<string, unknown> = {};\n for (const [key, value] of arg) {\n entries[String(key)] = serializeArg(value, depth + 1);\n }\n return { __type: 'Map', entries };\n }\n\n // Set\n if (arg instanceof Set) {\n return { __type: 'Set', values: [...arg].map((v) => serializeArg(v, depth + 1)) };\n }\n\n // Plain object\n if (Object.getPrototypeOf(arg) === Object.prototype || Object.getPrototypeOf(arg) === null) {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(arg as Record<string, unknown>)) {\n if (SENSITIVE_PATTERNS.test(key)) {\n result[key] = '[REDACTED]';\n } else {\n result[key] = serializeArg(value, depth + 1);\n }\n }\n return result;\n }\n\n // Fallback — use toString or constructor name\n try {\n return `[${(arg as object).constructor?.name ?? 'Object'}]`;\n } catch {\n return '[Object]';\n }\n}\n\n// ─── Source Location ─────────────────────────────────────────────────────\n\n/**\n * Extract the caller's source location from an Error stack trace.\n *\n * Walks the stack to find the first frame that isn't inside this file\n * or Node internals. Returns \"file:line:col\" or null.\n */\nfunction extractCallerLocation(projectRoot: string): string | null {\n const err = new Error();\n const stack = err.stack;\n if (!stack) return null;\n\n const lines = stack.split('\\n');\n // Skip first line (\"Error\") and frames inside this module\n for (let i = 1; i < lines.length; i++) {\n const line = lines[i].trim();\n // Skip our own patching frames\n if (line.includes('dev-logs')) continue;\n // Skip node internals\n if (line.includes('node:') || line.includes('node_modules')) continue;\n\n // Extract file path from \"at ... (file:line:col)\" or \"at file:line:col\"\n const match = line.match(/\\((.+?):(\\d+):(\\d+)\\)/) ?? line.match(/at (.+?):(\\d+):(\\d+)/);\n if (match) {\n let filePath = match[1];\n // Make path relative to project root for readability\n if (filePath.startsWith(projectRoot)) {\n filePath = filePath.slice(projectRoot.length + 1);\n }\n return `${filePath}:${match[2]}:${match[3]}`;\n }\n }\n return null;\n}\n\n// ─── Framework-Internal Detection ────────────────────────────────────────\n\n/**\n * Check if the calling code is from timber's internal plugin/adapter plumbing.\n *\n * Only filters logs from `plugins/` and `adapters/` directories — these are\n * framework operational noise (request summaries, codegen warnings, adapter\n * setup). Logs from `server/` are preserved because they surface user errors\n * (render errors, action errors, route handler errors, etc.).\n *\n * Handles both monorepo paths (timber-app/src/plugins/) and installed\n * package paths (@timber/app/dist/plugins/).\n */\nexport function isFrameworkInternalCaller(): boolean {\n const err = new Error();\n const stack = err.stack;\n if (!stack) return false;\n\n const lines = stack.split('\\n');\n for (let i = 1; i < lines.length; i++) {\n const line = lines[i].trim();\n // Skip our own patching frames\n if (line.includes('dev-logs')) continue;\n // Skip node internals (but NOT node_modules — we need to inspect those)\n if (line.includes('node:')) continue;\n\n // Check if this first real frame is inside timber's own source\n const isTimberPath = line.includes('timber-app/') || line.includes('@timber/app/');\n if (!isTimberPath) return false;\n\n // Only filter plugin and adapter internals, not server/ runtime code\n // which surfaces user errors (render errors, action errors, etc.)\n return line.includes('/plugins/') || line.includes('/adapters/');\n }\n return false;\n}\n\n// ─── Console Patching ────────────────────────────────────────────────────\n\n/**\n * Patch console methods to forward logs to the browser via HMR WebSocket.\n *\n * Each patched method:\n * 1. Calls the original console method (server terminal still works)\n * 2. Serializes arguments for JSON transport\n * 3. Sends via server.hot.send() — dropped if no clients connected\n */\nfunction patchConsole(server: ViteDevServer, projectRoot: string): () => void {\n const originals = new Map<ServerLogLevel, (...args: unknown[]) => void>();\n\n for (const level of LOG_LEVELS) {\n originals.set(level, console[level].bind(console));\n\n console[level] = (...args: unknown[]) => {\n // Always call the original — server terminal output is preserved\n originals.get(level)!(...args);\n\n // Skip framework-internal logs (plugins/, adapters/) from browser forwarding.\n // Server runtime logs (render errors, action errors, etc.) are preserved.\n if (isFrameworkInternalCaller()) return;\n\n // Serialize and forward to browser\n try {\n const payload: ServerLogPayload = {\n level,\n args: args.map((arg) => serializeArg(arg)),\n location: extractCallerLocation(projectRoot),\n timestamp: Date.now(),\n };\n\n server.hot.send('timber:server-log', payload);\n } catch {\n // Never let log forwarding break the server\n }\n };\n }\n\n // Return a cleanup function to restore originals\n return () => {\n for (const [level, original] of originals) {\n console[level] = original;\n }\n };\n}\n\n// ─── Plugin ──────────────────────────────────────────────────────────────\n\n/**\n * Create the timber-dev-logs Vite plugin.\n *\n * Patches console methods when the dev server starts and restores them\n * when the server closes. Only active during `vite dev`.\n */\nexport function timberDevLogs(_ctx: PluginContext): Plugin {\n let cleanup: (() => void) | null = null;\n\n return {\n name: 'timber-dev-logs',\n apply: 'serve',\n\n configureServer(server: ViteDevServer) {\n cleanup = patchConsole(server, _ctx.root);\n\n // Restore console on server close\n server.httpServer?.on('close', () => {\n cleanup?.();\n cleanup = null;\n });\n },\n };\n}\n","import type { Plugin } from 'vite';\n\n/**\n * Redirect React's CJS development bundles to production bundles.\n *\n * React packages use a runtime `process.env.NODE_ENV` check in their CJS\n * entry points to conditionally require either `*.development.js` or\n * `*.production.js`. Rollup's CJS plugin resolves both branches statically\n * before the `define` replacement can eliminate the dead branch, causing\n * development React code to be included in production builds.\n *\n * This plugin intercepts `resolveId` and rewrites any `*.development.js`\n * import under `react/cjs/`, `react-dom/cjs/`, or `scheduler/cjs/` to\n * its `*.production.js` counterpart.\n *\n * Only active in production builds. Has no effect in dev mode.\n */\nexport function timberReactProd(): Plugin {\n let isProd = false;\n\n return {\n name: 'timber-react-prod',\n enforce: 'pre',\n configResolved(config) {\n isProd = config.command === 'build' && config.mode === 'production';\n },\n resolveId: {\n order: 'pre',\n async handler(source, importer, options) {\n if (!isProd) return;\n\n // Match: react/cjs/*.development.js, react-dom/cjs/*.development.js, scheduler/cjs/*.development.js\n if (!source.includes('.development.')) return;\n\n const resolved = await this.resolve(source, importer, {\n ...options,\n skipSelf: true,\n });\n if (!resolved) return;\n\n // Only rewrite paths inside react/react-dom/scheduler/react-server-dom CJS directories\n if (\n !resolved.id.includes('/react/cjs/') &&\n !resolved.id.includes('/react-dom/cjs/') &&\n !resolved.id.includes('/scheduler/cjs/') &&\n !resolved.id.includes('/react-server-dom/cjs/')\n ) {\n return;\n }\n\n const prodId = resolved.id.replace('.development.', '.production.');\n return { ...resolved, id: prodId };\n },\n },\n };\n}\n","/**\n * timber-chunks — Vite sub-plugin for intelligent client chunk splitting.\n *\n * Splits client bundles into cache tiers based on update frequency:\n *\n * Tier 1: vendor-react — react, react-dom, scheduler (changes rarely)\n * Tier 2: vendor-timber — timber runtime, RSC runtime (changes per framework update)\n * Tier 3: [route]-* — per-route app code (changes per deploy, handled by Vite defaults)\n *\n * Server environments (RSC, SSR) are left to Vite's default chunking since\n * Cloudflare Workers load all code from a single deployment bundle with no\n * benefit from cache-tier separation.\n *\n * Design docs: 27-chunking-strategy.md\n */\n\nimport type { Plugin } from 'vite';\n\n/**\n * Categorize a module ID into a cache tier chunk name.\n *\n * Returns a chunk name for vendor modules, or undefined to let\n * Rollup's default splitting handle app/route code.\n */\nexport function assignChunk(id: string): string | undefined {\n // Tier 1: React ecosystem — changes on version bumps only\n if (\n id.includes('node_modules/react-dom') ||\n id.includes('node_modules/react/') ||\n id.includes('node_modules/scheduler')\n ) {\n return 'vendor-react';\n }\n\n // Tier 2: timber framework runtime — changes on framework updates\n if (\n id.includes('/timber-app/') ||\n id.includes('react-server-dom') ||\n id.includes('@vitejs/plugin-rsc')\n ) {\n return 'vendor-timber';\n }\n\n // Everything else: Rollup's default splitting (per-route chunks)\n}\n\n/**\n * Group timber's internal 'use client' modules into the vendor-timber chunk.\n *\n * The RSC plugin creates separate entry points for each 'use client' module,\n * which manualChunks can't merge. This function is passed as the RSC plugin's\n * `clientChunks` callback to group timber internals into a single chunk.\n * User and third-party client components are left to default per-route splitting.\n */\nexport function assignClientChunk(meta: {\n id: string;\n normalizedId: string;\n serverChunk: string;\n}): string | undefined {\n if (meta.id.includes('/timber-app/')) return 'vendor-timber';\n}\n\n/**\n * Create the timber-chunks Vite plugin.\n *\n * Uses Vite's per-environment config to apply manualChunks only to\n * the client build. The config hook runs before environments are\n * created, so we use `environments.client` to target the client.\n */\nexport function timberChunks(): Plugin {\n return {\n name: 'timber-chunks',\n\n config() {\n return {\n environments: {\n client: {\n build: {\n rollupOptions: {\n output: {\n manualChunks: assignChunk,\n },\n },\n },\n },\n },\n };\n },\n };\n}\n","/**\n * timber-server-bundle — Bundle all dependencies for server environments.\n *\n * In production builds, sets `resolve.noExternal: true` for the rsc and ssr\n * environments. This ensures all npm dependencies are bundled into the output,\n * which is required for platforms like Cloudflare Workers that don't have\n * access to node_modules at runtime.\n *\n * In dev mode, Vite's default externalization is preserved for fast HMR.\n *\n * Design docs: design/11-platform.md, design/25-production-deployments.md\n */\n\nimport type { Plugin } from 'vite';\n\nexport function timberServerBundle(): Plugin[] {\n const bundlePlugin: Plugin = {\n name: 'timber-server-bundle',\n\n config(_cfg, { command }) {\n // In dev mode, Vite externalizes node_modules by default for fast HMR.\n // But server-only/client-only must NOT be externalized — they need to\n // go through the timber-shims plugin so it can replace them with no-op\n // virtual modules. Without this, deps like `bright` that import\n // `server-only` get the real CJS package loaded via Node's require(),\n // which throws in the SSR environment.\n if (command === 'serve') {\n // In dev, Vite externalizes node_modules and loads them via Node's\n // native require(). Deps that import `server-only` (like `bright`)\n // hit the real CJS package which throws at runtime. We force these\n // poison-pill packages to be non-external so they go through Vite's\n // module pipeline, where the timber-shims plugin intercepts them\n // and serves no-op virtual modules for server environments.\n return {\n environments: {\n rsc: {\n resolve: {\n noExternal: ['server-only', 'client-only'],\n },\n },\n ssr: {\n resolve: {\n noExternal: ['server-only', 'client-only'],\n },\n },\n },\n };\n }\n\n // Bundle all dependencies in server environments for production.\n // Without this, bare imports like 'nuqs/adapters/custom' are left\n // as external imports in the output, which fails on platforms\n // without node_modules (Cloudflare Workers, edge runtimes).\n // Define process.env.NODE_ENV in server environments so that\n // dead-code branches (dev-only tracing, React dev checks) are\n // eliminated by Rollup's tree-shaking. Without this, the runtime\n // check falls through on platforms where process.env is empty\n // (e.g. Cloudflare Workers), causing dev code to run in production.\n const serverDefine = {\n 'process.env.NODE_ENV': JSON.stringify('production'),\n };\n\n return {\n // Target webworker so Rolldown doesn't emit createRequire(import.meta.url)\n // shims that fail in Cloudflare Workers where import.meta.url is undefined\n // for non-entry modules. See design/11-platform.md.\n ssr: { target: 'webworker' },\n environments: {\n rsc: {\n resolve: { noExternal: true },\n define: serverDefine,\n },\n ssr: {\n resolve: { noExternal: true },\n define: serverDefine,\n },\n },\n };\n },\n };\n\n // Fix Rolldown's broken `__esmMin` lazy initializers in server bundles.\n //\n // Rolldown wraps ESM module initialization in `__esmMin` lazy functions.\n // For packages with `sideEffects: false` (e.g. nuqs), Rolldown drops\n // the variable assignment of the init function — so the module's React\n // imports, context creation, etc. never execute.\n //\n // The fix: patch the `__esmMin` runtime definition to eagerly execute\n // the init callback while still returning the lazy wrapper. This makes\n // all ESM module inits run at load time (standard ESM behavior) instead\n // of lazily, which is functionally correct and avoids the dropped-init bug.\n const esmInitFixPlugin: Plugin = {\n name: 'timber-esm-init-fix',\n applyToEnvironment(environment) {\n return environment.name === 'rsc' || environment.name === 'ssr';\n },\n renderChunk(code) {\n const lazy = 'var __esmMin = (fn, res) => () => (fn && (res = fn(fn = 0)), res);';\n if (!code.includes(lazy)) return null;\n\n // Replace with eager-then-lazy: execute init immediately, then\n // return the lazy wrapper for any subsequent calls (which are\n // idempotent since fn is set to 0 after first execution).\n const eager =\n 'var __esmMin = (fn, res) => { var l = () => (fn && (res = fn(fn = 0)), res); l(); return l; };';\n\n return { code: code.replace(lazy, eager), map: null };\n },\n };\n\n return [bundlePlugin, esmInitFixPlugin];\n}\n","/**\n * timber-adapter-build — Invoke the adapter's buildOutput after vite build.\n *\n * After all environments are built and the RSC plugin has written its\n * asset manifests, calls `adapter.buildOutput()` to transform the output\n * into a deployable artifact (e.g., Cloudflare Workers entry + wrangler.jsonc).\n *\n * Uses a `buildApp` hook with `order: 'post'` so that Vite calls the\n * RSC plugin's buildApp (which orchestrates all environment builds and\n * writes asset manifests) first, then runs this handler after everything\n * is complete.\n *\n * Design docs: design/11-platform.md, design/25-production-deployments.md\n */\n\nimport type { Plugin } from 'vite';\nimport { join } from 'node:path';\nimport { readFile, writeFile } from 'node:fs/promises';\nimport type { PluginContext } from '#/index.js';\nimport type { TimberPlatformAdapter, TimberConfig } from '#/adapters/types.js';\n\nexport function timberAdapterBuild(ctx: PluginContext): Plugin {\n return {\n name: 'timber-adapter-build',\n\n // order: 'post' causes Vite to run configBuilder.buildApp() (which\n // includes the RSC plugin's buildApp) before calling this handler.\n // By the time we run, all environments are built and asset manifests\n // are written — safe to copy the output.\n buildApp: {\n order: 'post' as const,\n async handler() {\n if (ctx.dev) return;\n\n const adapter = ctx.config.adapter as TimberPlatformAdapter | undefined;\n if (!adapter || typeof adapter.buildOutput !== 'function') return;\n\n const buildDir = join(ctx.root, 'dist');\n\n // Serialize the build manifest as a JS module that sets the global.\n // The adapter writes this as _timber-manifest-init.mjs and imports it\n // before the RSC handler, so globalThis.__TIMBER_BUILD_MANIFEST__ is\n // available when virtual:timber-build-manifest evaluates.\n let manifestInit: string | undefined;\n if (ctx.buildManifest) {\n // Strip JS/modulepreload from manifest when client JS is disabled —\n // those files aren't served, so hints for them are useless.\n const manifest = ctx.clientJavascript.disabled\n ? { ...ctx.buildManifest, js: {}, modulepreload: {} }\n : ctx.buildManifest;\n const json = JSON.stringify(manifest);\n manifestInit = `globalThis.__TIMBER_BUILD_MANIFEST__ = ${json};\\n`;\n }\n\n // Strip JS from the RSC plugin's assets manifest when client JS\n // is disabled. The RSC plugin writes __vite_rsc_assets_manifest.js\n // with clientReferenceDeps containing JS URLs — used to inject\n // <link rel=\"modulepreload\"> tags. Must happen before the adapter\n // copies files to the output directory.\n if (ctx.clientJavascript.disabled) {\n await stripJsFromRscAssetsManifests(buildDir);\n }\n\n const adapterConfig: TimberConfig = {\n output: ctx.config.output ?? 'server',\n clientJavascriptDisabled: ctx.clientJavascript.disabled,\n manifestInit,\n };\n\n await adapter.buildOutput(adapterConfig, buildDir);\n },\n },\n };\n}\n\n/**\n * Strip JS references from the RSC plugin's assets manifest files.\n *\n * The RSC plugin writes `__vite_rsc_assets_manifest.js` to rsc/ and ssr/\n * as standalone files (not Rollup chunks), so generateBundle can't\n * intercept them. This rewrites the files on disk after all builds\n * complete but before the adapter copies them to the output directory.\n */\nasync function stripJsFromRscAssetsManifests(buildDir: string): Promise<void> {\n const manifestName = '__vite_rsc_assets_manifest.js';\n const paths = [join(buildDir, 'rsc', manifestName), join(buildDir, 'ssr', manifestName)];\n\n for (const path of paths) {\n let content: string;\n try {\n content = await readFile(path, 'utf-8');\n } catch {\n continue;\n }\n\n const jsonStr = content.replace(/^export default\\s*/, '').replace(/;?\\s*$/, '');\n let manifest: Record<string, unknown>;\n try {\n manifest = JSON.parse(jsonStr);\n } catch {\n continue;\n }\n\n // Clear JS from clientReferenceDeps — preserves CSS\n const deps = manifest.clientReferenceDeps as\n | Record<string, { js: string[]; css: string[] }>\n | undefined;\n if (deps) {\n for (const entry of Object.values(deps)) {\n entry.js = [];\n }\n }\n\n manifest.bootstrapScriptContent = '';\n\n await writeFile(path, `export default ${JSON.stringify(manifest, null, 2)};\\n`);\n }\n}\n","/**\n * timber-build-report — Post-build route summary table.\n *\n * After a production build, logs a per-route table showing:\n * - Route type (○ static, λ dynamic, ƒ function)\n * - Route-specific client JS size\n * - First-load JS size (gzip) — route-specific + shared chunks\n *\n * Only active during production builds. Sizes are computed from the\n * already-generated Vite client bundle — no extra analysis passes.\n *\n * Design docs: 18-build-system.md §\"Build Pipeline\", 07-routing.md\n * Task: TIM-287\n */\n\nimport { gzipSync } from 'node:zlib';\nimport type { Plugin, Logger } from 'vite';\nimport type { PluginContext } from '#/index.js';\nimport type { SegmentNode, RouteTree } from '#/routing/types.js';\nimport { formatSize } from '#/utils/format.js';\n\n// ─── Public types ─────────────────────────────────────────────────────────\n\nexport type RouteType = 'static' | 'dynamic' | 'function';\n\nexport interface RouteEntry {\n path: string;\n type: RouteType;\n /** Route-specific client JS size in bytes (raw). */\n size: number;\n /** Total first-load JS in bytes (gzip): route-specific + shared. */\n firstLoadSize: number;\n}\n\n// ─── Route classification ─────────────────────────────────────────────────\n\nconst ROUTE_TYPE_ICONS: Record<RouteType, string> = {\n static: '○',\n dynamic: 'λ',\n function: 'ƒ',\n};\n\n/**\n * Classify a route by its segment chain and output mode.\n *\n * In server mode (default), all pages are dynamic (rendered per-request).\n * In static mode, only pages with dynamic/catch-all segments are dynamic.\n * API routes (route.ts) are always classified as function.\n */\nexport function classifyRoute(\n segments: SegmentNode[],\n outputMode: 'server' | 'static' = 'server'\n): RouteType {\n const leaf = segments[segments.length - 1];\n if (leaf?.route) return 'function';\n if (outputMode === 'server') return 'dynamic';\n\n const isDynamic = segments.some(\n (s) =>\n s.segmentType === 'dynamic' ||\n s.segmentType === 'catch-all' ||\n s.segmentType === 'optional-catch-all'\n );\n return isDynamic ? 'dynamic' : 'static';\n}\n\n// ─── Size helpers ─────────────────────────────────────────────────────────\n\nexport { formatSize };\n\nfunction green(text: string): string {\n return `\\x1b[92m${text}\\x1b[39m`; // bright/light green (ANSI 92)\n}\n\n// ─── Route tree collection ────────────────────────────────────────────────\n\ninterface RouteInfo {\n path: string;\n segments: SegmentNode[];\n entryFilePath: string | null;\n}\n\n/** Walk the route tree and collect all leaf routes (pages + API endpoints). */\nexport function collectRoutes(tree: RouteTree): RouteInfo[] {\n const routes: RouteInfo[] = [];\n\n function walk(node: SegmentNode, chain: SegmentNode[]): void {\n const currentChain = [...chain, node];\n const path = node.urlPath || '/';\n\n if (node.page) {\n routes.push({ path, segments: currentChain, entryFilePath: node.page.filePath });\n }\n if (node.route) {\n routes.push({ path, segments: currentChain, entryFilePath: node.route.filePath });\n }\n\n for (const child of node.children) walk(child, currentChain);\n for (const slot of node.slots.values()) walk(slot, currentChain);\n }\n\n walk(tree.root, []);\n return routes;\n}\n\n// ─── Report formatting ────────────────────────────────────────────────────\n\n/** Produce formatted report lines for the Vite logger. */\nexport function buildRouteReport(entries: RouteEntry[], sharedSize: number): string[] {\n const sorted = [...entries].sort((a, b) => a.path.localeCompare(b.path));\n\n const header = 'Route (app)';\n const sizeHeader = 'Size';\n const firstLoadHeader = 'First Load JS';\n\n const pathW = Math.max(header.length + 2, ...sorted.map((e) => e.path.length + 6));\n const sizeW = Math.max(sizeHeader.length, 14);\n const flW = Math.max(firstLoadHeader.length, 10);\n const totalW = pathW + sizeW + flW + 4;\n const sep = '─'.repeat(totalW);\n\n const lines: string[] = [];\n\n // Header\n lines.push(\n `${pad(header, pathW)} ${pad(sizeHeader, sizeW, 'left')} ${pad(firstLoadHeader, flW, 'left')}`\n );\n lines.push(sep);\n\n // Routes\n for (const entry of sorted) {\n const icon = ROUTE_TYPE_ICONS[entry.type];\n const pathStr = ` ${icon} ${entry.path}`;\n const sizeStr = entry.size === 0 ? green('zero unique JS') : formatSize(entry.size);\n const flStr = formatSize(entry.firstLoadSize);\n lines.push(\n `${pad(pathStr, pathW)} ${pad(sizeStr, sizeW, 'left')} ${pad(flStr, flW, 'left')}`\n );\n }\n\n // Footer\n lines.push(sep);\n lines.push(\n `${pad(' Shared by all', pathW)} ${pad('', sizeW, 'left')} ${pad(formatSize(sharedSize), flW, 'left')}`\n );\n lines.push('');\n lines.push('○ (Static) λ (Dynamic) ƒ (Function)');\n\n return lines;\n}\n\nfunction pad(str: string, width: number, align: 'left' | 'right' = 'right'): string {\n const gap = Math.max(0, width - stripAnsi(str).length);\n return align === 'left' ? ' '.repeat(gap) + str : str + ' '.repeat(gap);\n}\n\nfunction stripAnsi(str: string): string {\n // eslint-disable-next-line no-control-regex\n return str.replace(/\\u001b\\[\\d+m/g, '');\n}\n\n// ─── Bundle analysis ──────────────────────────────────────────────────────\n\ninterface ChunkSize {\n raw: number;\n gzip: number;\n}\n\ninterface OutputChunkLike {\n type: 'chunk' | 'asset';\n fileName: string;\n code?: string;\n source?: string | Uint8Array;\n modules?: Record<string, unknown>;\n facadeModuleId?: string | null;\n}\n\n/** Measure raw + gzip sizes for all JS chunks and CSS assets in a bundle. */\nexport function collectChunkSizes(bundle: Record<string, OutputChunkLike>): Map<string, ChunkSize> {\n const sizes = new Map<string, ChunkSize>();\n for (const [fileName, item] of Object.entries(bundle)) {\n if (item.type === 'chunk' && item.code) {\n sizes.set(fileName, measure(item.code));\n } else if (item.type === 'asset' && fileName.endsWith('.css') && item.source != null) {\n const src =\n typeof item.source === 'string' ? item.source : new TextDecoder().decode(item.source);\n sizes.set(fileName, measure(src));\n }\n }\n return sizes;\n}\n\nfunction measure(content: string): ChunkSize {\n const buf = new TextEncoder().encode(content);\n return { raw: buf.length, gzip: gzipSync(buf).length };\n}\n\n/** Find the output chunk that contains a given input file. */\nexport function findChunkForFile(\n filePath: string,\n bundle: Record<string, OutputChunkLike>\n): string | null {\n for (const [fileName, item] of Object.entries(bundle)) {\n if (item.type !== 'chunk') continue;\n if (item.facadeModuleId === filePath) return fileName;\n if (item.modules && filePath in item.modules) return fileName;\n }\n return null;\n}\n\n// ─── Build route entries from collected data ──────────────────────────────\n\nfunction buildEntries(\n routeTree: RouteTree,\n chunkSizes: Map<string, ChunkSize>,\n bundle: Record<string, OutputChunkLike>,\n outputMode: 'server' | 'static'\n): { entries: RouteEntry[]; sharedGzip: number } {\n const routeInfos = collectRoutes(routeTree);\n\n // Total gzip across all client chunks\n let totalGzip = 0;\n for (const s of chunkSizes.values()) totalGzip += s.gzip;\n\n // Per-route sizes and track route-specific chunks\n const routeChunkFiles = new Set<string>();\n const entries: RouteEntry[] = [];\n\n for (const info of routeInfos) {\n let raw = 0;\n let gzip = 0;\n\n if (info.entryFilePath) {\n const chunk = findChunkForFile(info.entryFilePath, bundle);\n if (chunk) {\n const s = chunkSizes.get(chunk);\n if (s) {\n raw = s.raw;\n gzip = s.gzip;\n }\n routeChunkFiles.add(chunk);\n }\n }\n\n entries.push({\n path: info.path,\n type: classifyRoute(info.segments, outputMode),\n size: raw,\n firstLoadSize: gzip, // route-specific gzip — shared added below\n });\n }\n\n // Shared = total gzip minus route-specific gzip\n let routeGzip = 0;\n for (const f of routeChunkFiles) routeGzip += chunkSizes.get(f)?.gzip ?? 0;\n const sharedGzip = totalGzip - routeGzip;\n\n for (const e of entries) e.firstLoadSize += sharedGzip;\n\n return { entries, sharedGzip };\n}\n\n// ─── Vite plugin ──────────────────────────────────────────────────────────\n\n/**\n * Suppress RSC/SSR per-chunk build log lines.\n *\n * Vite logs each output chunk via config.logger.info(). We wrap that method\n * to filter lines matching dist/rsc/ or dist/ssr/ paths. The regex is\n * non-anchored because Vite prepends ANSI color codes.\n */\nfunction suppressNonClientLogs(config: { command: string; logger: Logger }): void {\n if (config.command !== 'build') return;\n const orig = config.logger.info.bind(config.logger);\n config.logger.info = (msg: string, opts?: { timestamp?: boolean }) => {\n if (typeof msg === 'string' && /dist\\/(rsc|ssr)\\//.test(msg)) return;\n orig(msg, opts);\n };\n}\n\nexport function timberBuildReport(ctx: PluginContext): Plugin {\n let logger: Logger | null = null;\n let chunkSizes: Map<string, ChunkSize> | null = null;\n let clientBundle: Record<string, OutputChunkLike> | null = null;\n let reported = false;\n let deferReport = false;\n const buildStart = performance.now();\n\n return {\n name: 'timber-build-report',\n\n config(_cfg, { command }) {\n if (command !== 'build') return;\n return {\n environments: {\n rsc: { build: { reportCompressedSize: false } },\n ssr: { build: { reportCompressedSize: false } },\n },\n };\n },\n\n configResolved(config) {\n logger = config.logger;\n suppressNonClientLogs(config);\n },\n\n generateBundle(_options, bundle) {\n if (ctx.dev) return;\n if (this.environment?.name && this.environment.name !== 'client') return;\n\n chunkSizes = collectChunkSizes(bundle as Record<string, OutputChunkLike>);\n clientBundle = { ...bundle } as Record<string, OutputChunkLike>;\n deferReport = true; // skip client's closeBundle; emit after SSR's\n },\n\n closeBundle() {\n if (ctx.dev || reported) return;\n\n // The client build's closeBundle fires before SSR starts.\n // Defer one cycle so the report appears after all builds complete.\n if (deferReport) {\n deferReport = false;\n return;\n }\n if (!ctx.routeTree || !chunkSizes || !clientBundle || !logger) return;\n\n reported = true;\n const outputMode = ctx.config.output ?? 'server';\n const clientJsDisabled = ctx.clientJavascript.disabled;\n const { entries, sharedGzip } = clientJsDisabled\n ? {\n entries: collectRoutes(ctx.routeTree).map((info) => ({\n path: info.path,\n type: classifyRoute(info.segments, outputMode),\n size: 0,\n firstLoadSize: 0,\n })),\n sharedGzip: 0,\n }\n : buildEntries(ctx.routeTree, chunkSizes, clientBundle, outputMode);\n const elapsed = ((performance.now() - buildStart) / 1000).toFixed(2);\n const lines = buildRouteReport(entries, sharedGzip);\n\n logger.info('');\n for (const line of lines) logger.info(line);\n logger.info('');\n logger.info(\n `✓ built ${entries.length} routes for all three environments (rsc, ssr, client) in ${elapsed}s`\n );\n logger.info('');\n },\n };\n}\n","/**\n * Startup timer — records named phases with their durations.\n *\n * Used by the plugin system to instrument cold start and report a\n * timing breakdown in dev mode. Zero overhead in production (disabled).\n *\n * See design/18-build-system.md, TIM-155.\n */\n\nimport { performance } from 'node:perf_hooks';\n\nexport interface PhaseRecord {\n name: string;\n startMs: number;\n durationMs: number;\n}\n\nexport interface StartupTimer {\n /** Mark the beginning of a named phase. */\n start(phase: string): void;\n /** Mark the end of a named phase. Returns duration in ms. */\n end(phase: string): number;\n /** Get all completed phase records, ordered by start time. */\n getPhases(): PhaseRecord[];\n /** Total elapsed time from first start() to last end(). */\n totalMs(): number;\n /** Format a human-readable summary string. */\n formatSummary(): string;\n}\n\n/**\n * Create a startup timer that records phase durations.\n */\nexport function createStartupTimer(): StartupTimer {\n const pending = new Map<string, number>();\n const phases: PhaseRecord[] = [];\n\n return {\n start(phase: string): void {\n pending.set(phase, performance.now());\n },\n\n end(phase: string): number {\n const startMs = pending.get(phase);\n if (startMs === undefined) {\n return 0;\n }\n pending.delete(phase);\n const durationMs = performance.now() - startMs;\n phases.push({ name: phase, startMs, durationMs });\n return durationMs;\n },\n\n getPhases(): PhaseRecord[] {\n return [...phases].sort((a, b) => a.startMs - b.startMs);\n },\n\n totalMs(): number {\n if (phases.length === 0) return 0;\n const sorted = this.getPhases();\n const first = sorted[0];\n const last = sorted[sorted.length - 1];\n return last.startMs + last.durationMs - first.startMs;\n },\n\n formatSummary(): string {\n const sorted = this.getPhases();\n if (sorted.length === 0) return 'No phases recorded.';\n\n const lines = sorted.map((p) => {\n const ms = p.durationMs.toFixed(1);\n return ` ${p.name.padEnd(30)} ${ms.padStart(8)}ms`;\n });\n\n const total = this.totalMs().toFixed(1);\n lines.push(` ${'total'.padEnd(30)} ${total.padStart(8)}ms`);\n\n return ['[timber] startup timing:', ...lines].join('\\n');\n },\n };\n}\n\n/**\n * No-op timer for production builds — all methods are empty.\n */\nexport function createNoopTimer(): StartupTimer {\n return {\n start() {},\n end() {\n return 0;\n },\n getPhases() {\n return [];\n },\n totalMs() {\n return 0;\n },\n formatSummary() {\n return '';\n },\n };\n}\n","import type { Plugin, PluginOption } from 'vite';\nimport { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport react from '@vitejs/plugin-react';\nimport { cacheTransformPlugin } from './plugins/cache-transform';\nimport { timberContent } from './plugins/content';\nimport { timberDevServer } from './plugins/dev-server';\nimport { timberEntries } from './plugins/entries';\nimport { timberMdx } from './plugins/mdx';\nimport { timberRouting } from './plugins/routing';\nimport { timberShims } from './plugins/shims';\nimport { timberFonts } from './plugins/fonts';\nimport { timberStaticBuild } from './plugins/static-build';\nimport { timberDynamicTransform } from './plugins/dynamic-transform';\nimport { timberServerActionExports } from './plugins/server-action-exports';\nimport { timberBuildManifest } from './plugins/build-manifest';\nimport { timberDevLogs } from './plugins/dev-logs';\nimport { timberReactProd } from './plugins/react-prod';\nimport { timberChunks, assignClientChunk } from './plugins/chunks';\nimport { timberServerBundle } from './plugins/server-bundle';\nimport { timberAdapterBuild } from './plugins/adapter-build';\nimport { timberBuildReport } from './plugins/build-report';\nimport type { RouteTree } from './routing/types';\nimport type { BuildManifest } from './server/build-manifest';\nimport type { StartupTimer } from './utils/startup-timer';\nimport { createStartupTimer, createNoopTimer } from './utils/startup-timer';\n\n/** Configuration for client-side JavaScript output. */\nexport interface ClientJavascriptConfig {\n /** When true, no client JS bundles are emitted or referenced in HTML. */\n disabled: boolean;\n /**\n * When `disabled` is true, still inject the Vite HMR client in dev mode\n * so hot reloading works during development. Default: true.\n */\n enableHMRInDev?: boolean;\n}\n\n/** Fully resolved client JavaScript configuration (no optionals). */\nexport interface ResolvedClientJavascript {\n disabled: boolean;\n enableHMRInDev: boolean;\n}\n\nexport interface TimberUserConfig {\n output?: 'server' | 'static';\n /**\n * Control client-side JavaScript output.\n *\n * Boolean shorthand:\n * `clientJavascript: false` disables all client JS (equivalent to `{ disabled: true }`).\n * `clientJavascript: true` enables client JS (the default).\n *\n * Object form:\n * `clientJavascript: { disabled: true, enableHMRInDev: true }` disables client JS\n * in production but preserves Vite HMR in dev mode.\n *\n * When `disabled` is true, `enableHMRInDev` defaults to `true`.\n * Server-side JS still runs — this only affects what is sent to the browser.\n */\n clientJavascript?: boolean | ClientJavascriptConfig;\n /**\n * @deprecated Use `clientJavascript: false` or `clientJavascript: { disabled: true }` instead.\n *\n * Disable all client-side JavaScript output. When true, no client JS\n * bundles are emitted or referenced in HTML. Pages work entirely via\n * server-rendered HTML. Works in both 'server' and 'static' modes.\n *\n * Server-side JS still runs — this only affects what is sent to the browser.\n */\n noClientJavascript?: boolean;\n adapter?: unknown;\n cacheHandler?: unknown;\n allowedOrigins?: string[];\n csrf?: boolean;\n limits?: {\n actionBodySize?: string;\n uploadBodySize?: string;\n maxFields?: number;\n };\n pageExtensions?: string[];\n /** Dev-mode options. These have no effect in production builds. */\n dev?: {\n /** Threshold in ms to highlight slow phases in dev logging output. Default: 200. */\n slowPhaseMs?: number;\n };\n /**\n * Cookie signing configuration. See design/29-cookies.md §\"Signed Cookies\".\n *\n * Provide `secret` for a single key, or `secrets` (array) for key rotation.\n * When `secrets` is used, index 0 is the signing key; all are tried for verification.\n */\n cookies?: {\n /** Single signing secret. Shorthand for `secrets: [secret]`. */\n secret?: string;\n /** Array of signing secrets for key rotation. Index 0 signs; all verify. */\n secrets?: string[];\n };\n /**\n * Override the app directory location. By default, timber auto-detects\n * `app/` at the project root, falling back to `src/app/`.\n *\n * Set this to a relative path from the project root (e.g. `'src/app'`)\n * to use a custom location.\n */\n appDir?: string;\n /** MDX compilation options passed to @mdx-js/rollup. See design/20-content-collections.md. */\n mdx?: {\n remarkPlugins?: unknown[];\n rehypePlugins?: unknown[];\n recmaPlugins?: unknown[];\n remarkRehypeOptions?: Record<string, unknown>;\n };\n}\n\n/**\n * Resolve `clientJavascript` (new) and `noClientJavascript` (deprecated) into\n * a fully resolved config. Emits a deprecation warning for the old option.\n */\nexport function resolveClientJavascript(config: TimberUserConfig): ResolvedClientJavascript {\n // New option takes precedence over deprecated option\n if (config.clientJavascript !== undefined) {\n if (typeof config.clientJavascript === 'boolean') {\n // `clientJavascript: false` → disabled\n // `clientJavascript: true` → enabled (default)\n return {\n disabled: !config.clientJavascript,\n enableHMRInDev: !config.clientJavascript, // default true when disabled\n };\n }\n // Object form\n return {\n disabled: config.clientJavascript.disabled,\n enableHMRInDev: config.clientJavascript.enableHMRInDev ?? config.clientJavascript.disabled,\n };\n }\n\n // Fall back to deprecated noClientJavascript\n if (config.noClientJavascript !== undefined) {\n console.warn(\n '[timber] `noClientJavascript` is deprecated. ' +\n 'Use `clientJavascript: false` or `clientJavascript: { disabled: true, enableHMRInDev: true }` instead.'\n );\n return {\n disabled: config.noClientJavascript,\n enableHMRInDev: config.noClientJavascript, // default true when disabled\n };\n }\n\n // Default: client JS enabled\n return { disabled: false, enableHMRInDev: false };\n}\n\n/**\n * Shared context object passed to all sub-plugins via closure.\n *\n * Sub-plugins communicate through this context — not through Vite's\n * plugin API or global state.\n * See design/18-build-system.md §\"Shared Plugin Context\".\n */\nexport interface PluginContext {\n config: TimberUserConfig;\n /** Resolved client JavaScript configuration */\n clientJavascript: ResolvedClientJavascript;\n /** The scanned route tree (populated by timber-routing, consumed by timber-entries) */\n routeTree: RouteTree | null;\n /** Absolute path to the app/ directory */\n appDir: string;\n /** Absolute path to the project root */\n root: string;\n /** Whether the dev server is running (set by timber-root-sync in configResolved) */\n dev: boolean;\n /** CSS build manifest (populated by adapter after client build, null in dev) */\n buildManifest: BuildManifest | null;\n /** Startup timer for profiling cold start phases (active in dev, no-op in prod) */\n timer: StartupTimer;\n}\n\n/**\n * Resolve the app directory. Checks (in order):\n * 1. Explicit `configAppDir` from timber.config.ts\n * 2. `<root>/app`\n * 3. `<root>/src/app`\n *\n * Throws if none exist.\n */\nexport function resolveAppDir(root: string, configAppDir?: string): string {\n if (configAppDir) {\n const explicit = join(root, configAppDir);\n if (!existsSync(explicit)) {\n throw new Error(\n `[timber] Configured appDir \"${configAppDir}\" does not exist at ${explicit}`\n );\n }\n return explicit;\n }\n\n const rootApp = join(root, 'app');\n if (existsSync(rootApp)) return rootApp;\n\n const srcApp = join(root, 'src', 'app');\n if (existsSync(srcApp)) return srcApp;\n\n throw new Error(\n `[timber] Could not find app directory. Expected \"app/\" or \"src/app/\" in ${root}. ` +\n `You can set appDir in timber.config.ts to specify a custom location.`\n );\n}\n\nfunction createPluginContext(config?: TimberUserConfig, root?: string): PluginContext {\n const projectRoot = root ?? process.cwd();\n const resolvedConfig: TimberUserConfig = { output: 'server', ...config };\n // Timer starts as active — swapped to noop in configResolved for production builds\n return {\n config: resolvedConfig,\n clientJavascript: resolveClientJavascript(resolvedConfig),\n routeTree: null,\n appDir: join(projectRoot, 'app'),\n root: projectRoot,\n dev: false,\n buildManifest: null,\n timer: createStartupTimer(),\n };\n}\n\n/**\n * Load timber.config.ts (or .js, .mjs) from the project root.\n * Returns the config object or null if no config file is found.\n */\nasync function loadTimberConfigFile(root: string): Promise<TimberUserConfig | null> {\n const configNames = ['timber.config.ts', 'timber.config.js', 'timber.config.mjs'];\n\n for (const name of configNames) {\n const configPath = join(root, name);\n if (existsSync(configPath)) {\n const mod = await import(pathToFileURL(configPath).href);\n return (mod.default ?? mod) as TimberUserConfig;\n }\n }\n return null;\n}\n\n/**\n * Detect config keys set in both inline (vite.config.ts) and file (timber.config.ts)\n * and warn the user. The `output` key is excluded because it defaults to 'server'\n * in createPluginContext and would always appear as an inline key.\n *\n * Returns the list of conflicting key names (for testing).\n */\nexport function warnConfigConflicts(\n inline: TimberUserConfig,\n fileConfig: TimberUserConfig\n): string[] {\n const conflicts: string[] = [];\n for (const key of Object.keys(fileConfig) as (keyof TimberUserConfig)[]) {\n if (key === 'output') continue;\n if (key in inline && inline[key] !== undefined) {\n conflicts.push(key);\n }\n }\n if (conflicts.length > 0) {\n console.warn(\n `[timber] Config conflict: ${conflicts.map((k) => `\"${k}\"`).join(', ')} set in both ` +\n `vite.config.ts (inline) and timber.config.ts. ` +\n `Move all config to timber.config.ts to avoid confusion. ` +\n `The inline value from vite.config.ts will be used.`\n );\n }\n return conflicts;\n}\n\n/**\n * Merge file-based config into ctx.config. Inline config (already in ctx.config)\n * takes precedence — file config only fills in missing fields.\n */\nfunction mergeFileConfig(ctx: PluginContext, fileConfig: TimberUserConfig): void {\n const inline = ctx.config;\n\n // Warn if the same key is set in both places\n warnConfigConflicts(inline, fileConfig);\n\n // For each top-level key, use inline value if present, otherwise file value\n ctx.config = {\n ...fileConfig,\n ...inline,\n // Deep merge for nested objects where both exist\n ...(fileConfig.limits && inline.limits\n ? { limits: { ...fileConfig.limits, ...inline.limits } }\n : {}),\n ...(fileConfig.dev && inline.dev ? { dev: { ...fileConfig.dev, ...inline.dev } } : {}),\n ...(fileConfig.mdx && inline.mdx ? { mdx: { ...fileConfig.mdx, ...inline.mdx } } : {}),\n };\n}\n\nfunction timberCache(_ctx: PluginContext): Plugin {\n return cacheTransformPlugin();\n}\n\nexport function timber(config?: TimberUserConfig): PluginOption[] {\n const ctx = createPluginContext(config);\n // Sync ctx.root and ctx.appDir with Vite's resolved root, which may\n // differ from process.cwd() when --config points to a subdirectory.\n // Also loads timber.config.ts and merges it into ctx.config (inline config wins).\n const rootSync: Plugin = {\n name: 'timber-root-sync',\n async config(userConfig) {\n // Load timber.config.ts early — before configResolved/buildStart — so\n // all plugins (including timber-mdx) see the merged config in their\n // buildStart hooks. The config hook runs once and supports async.\n const root = userConfig.root ?? process.cwd();\n ctx.timer.start('config-load');\n const fileConfig = await loadTimberConfigFile(root);\n if (fileConfig) {\n mergeFileConfig(ctx, fileConfig);\n ctx.clientJavascript = resolveClientJavascript(ctx.config);\n }\n ctx.timer.end('config-load');\n },\n configResolved(resolved) {\n ctx.root = resolved.root;\n ctx.appDir = resolveAppDir(resolved.root, ctx.config.appDir);\n ctx.dev = resolved.command === 'serve';\n // In production builds, swap to a no-op timer to avoid overhead\n if (!ctx.dev) {\n ctx.timer = createNoopTimer();\n } else {\n // Start the overall dev server setup timer — ends in timber-dev-server\n ctx.timer.start('dev-server-setup');\n }\n },\n };\n // @vitejs/plugin-rsc handles:\n // - RSC/SSR/client environment setup\n // - \"use client\" directive → client reference proxy transformation\n // - \"use server\" directive → server reference transformation\n // - Client reference tracking and module map generation\n //\n // Loaded via dynamic import() because @vitejs/plugin-rsc is ESM-only.\n // Vite's config loader uses esbuild to transpile to CJS, which breaks\n // static imports of ESM-only packages. The dynamic import() is preserved\n // by esbuild and runs natively in ESM at runtime.\n //\n // serverHandler: false — timber has its own dev server (timber-dev-server)\n // entries — tells the RSC plugin about timber's virtual entry modules so\n // it correctly wires up the browser entry (needed for React Fast Refresh\n // preamble coordination with @vitejs/plugin-react)\n // customClientEntry: true — timber manages its own browser entry and\n // preloading; skips RSC plugin's default \"index\" client entry convention\n //\n // The RSC plugin's built-in buildApp handles the 5-step multi-environment\n // build sequence (analyze references → build RSC → build client → build SSR).\n // We do NOT set customBuildApp — the RSC plugin's orchestration is correct\n // and handles bundle ordering, asset manifest generation, and environment\n // imports manifest. See @vitejs/plugin-rsc's buildApp implementation.\n ctx.timer.start('rsc-plugin-import');\n const rscPluginsPromise = import('@vitejs/plugin-rsc').then(({ default: vitePluginRsc }) => {\n ctx.timer.end('rsc-plugin-import');\n return vitePluginRsc({\n serverHandler: false,\n customClientEntry: true,\n entries: {\n rsc: 'virtual:timber-rsc-entry',\n ssr: 'virtual:timber-ssr-entry',\n client: 'virtual:timber-browser-entry',\n },\n clientChunks: assignClientChunk,\n });\n });\n\n return [\n rootSync,\n timberReactProd(),\n // @vitejs/plugin-react provides React Fast Refresh (state-preserving HMR)\n // for client components via Babel transform. Placed before @vitejs/plugin-rsc\n // following Vinext's convention — the RSC plugin's virtual browser entry\n // coordinates with plugin-react via __vite_plugin_react_preamble_installed__.\n react(),\n timberServerActionExports(),\n rscPluginsPromise,\n timberShims(ctx),\n timberRouting(ctx),\n timberEntries(ctx),\n timberBuildManifest(ctx),\n timberCache(ctx),\n timberStaticBuild(ctx),\n timberDynamicTransform(ctx),\n timberFonts(ctx),\n timberMdx(ctx),\n timberContent(ctx),\n timberServerBundle(), // Bundle all deps in server environments for prod\n timberChunks(),\n timberBuildReport(ctx), // Post-build: route table with bundle sizes\n timberAdapterBuild(ctx), // Post-build: invoke adapter.buildOutput()\n timberDevLogs(ctx), // Dev-only: forward server console.* to browser console\n timberDevServer(ctx), // Must be last — configureServer post-hook runs after all watchers\n ];\n}\n\n/**\n * Route map interface — augmented by the generated timber-routes.d.ts.\n *\n * Each key is a route path pattern. Values have:\n * params: shape of URL params (e.g. { id: string })\n * searchParams: parsed type from search-params.ts, or {} if none\n *\n * This interface is empty by default and populated via codegen.\n * See design/09-typescript.md §\"Typed Routes\".\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface Routes {}\n\nexport default timber;\n"],"x_google_ignoreList":[0,1,2,3],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,IAAI,wBAAwB;CAAC;CAAK;CAAG;CAAK;CAAG;CAAK;CAAG;CAAK;CAAG;CAAM;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAK;CAAG;CAAK;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAK;CAAG;CAAI;CAAG;CAAI;CAAI;CAAI;CAAG;CAAK;CAAG;CAAI;CAAI;CAAI;CAAI;CAAG;CAAG;CAAI;CAAG;CAAI;CAAI;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAI;CAAI;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAI;CAAG;CAAG;CAAG;CAAI;CAAI;CAAI;CAAG;CAAG;CAAG;CAAG;CAAK;CAAI;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAI;CAAI;CAAI;CAAG;CAAG;CAAG;CAAI;CAAI;CAAI;CAAG;CAAK;CAAG;CAAG;CAAG;CAAI;CAAG;CAAI;CAAI;CAAI;CAAG;CAAI;CAAI;CAAG;CAAG;CAAG;CAAI;CAAI;CAAI;CAAG;CAAG;CAAK;CAAI;CAAK;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAK;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAI;CAAI;CAAI;CAAK;CAAG;CAAK;CAAG;CAAI;CAAG;CAAG;CAAG;CAAI;CAAG;CAAI;CAAI;CAAG;CAAI;CAAK;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAK;CAAG;CAAI;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAI;CAAI;CAAM;CAAG;CAAG;CAAI;CAAO;CAAI;CAAM;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAK;CAAG;CAAK;CAAG;CAAG;CAAI;CAAG;CAAG;CAAI;CAAG;CAAI;CAAG;CAAO;CAAG;CAAM;CAAG;CAAK;CAAI;CAAG;CAAI;CAAK;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAK;CAAG;CAAM;CAAI;CAAK;CAAI;CAAG;CAAI;CAAG;CAAG;CAAI;CAAG;CAAI;CAAG;CAAG;CAAI;CAAM;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAK;CAAG;CAAK;CAAG;CAAI;CAAG;CAAK;CAAG;CAAI;CAAI;CAAK;CAAI;CAAK;CAAG;CAAG;CAAG;CAAK;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAK;CAAG;CAAK;CAAG;CAAG;CAAG;CAAM;CAAG;CAAQ;CAAI;AAGnrC,IAAI,6BAA6B;CAAC;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAG;CAAG;CAAI;CAAG;CAAI;CAAI;CAAK;CAAI;CAAI;CAAK;CAAI;CAAG;CAAI;CAAI;CAAI;CAAI;CAAI;CAAG;CAAI;CAAI;CAAI;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAI;CAAK;CAAI;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAI;CAAI;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAI;CAAK;CAAI;CAAI;CAAI;CAAG;CAAI;CAAG;CAAG;CAAI;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAG;CAAG;CAAI;CAAI;CAAI;CAAI;CAAG;CAAI;CAAI;CAAI;CAAG;CAAG;CAAI;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAI;CAAI;CAAI;CAAG;CAAI;CAAI;CAAG;CAAG;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAK;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAK;CAAI;CAAG;CAAG;CAAI;CAAG;CAAI;CAAI;CAAI;CAAG;CAAG;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAG;CAAG;CAAG;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAI;CAAI;CAAI;CAAG;CAAI;CAAG;CAAG;CAAG;CAAI;CAAI;CAAG;CAAI;CAAI;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAI;CAAI;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAI;CAAI;CAAI;CAAG;CAAI;CAAG;CAAI;CAAI;CAAI;CAAG;CAAG;CAAG;CAAK;CAAI;CAAI;CAAG;CAAI;CAAI;CAAI;CAAG;CAAI;CAAI;CAAI;CAAG;CAAI;CAAI;CAAI;CAAG;CAAK;CAAI;CAAK;CAAI;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAI;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAI;CAAI;CAAG;CAAG;CAAG;CAAI;CAAG;CAAI;CAAI;CAAG;CAAG;CAAI;CAAG;CAAI;CAAI;CAAI;CAAG;CAAI;CAAI;CAAK;CAAI;CAAI;CAAG;CAAG;CAAI;CAAI;CAAG;CAAI;CAAI;CAAK;CAAG;CAAG;CAAG;CAAG;CAAI;CAAI;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAI;CAAI;CAAG;CAAI;CAAI;CAAK;CAAI;CAAI;CAAG;CAAG;CAAI;CAAG;CAAI;CAAK;CAAG;CAAI;CAAK;CAAK;CAAK;CAAI;CAAK;CAAM;CAAI;CAAI;CAAM;CAAI;CAAG;CAAI;CAAM;CAAG;CAAK;CAAM;CAAI;CAAM;CAAK;CAAG;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAG;CAAI;CAAI;CAAG;CAAI;CAAK;CAAI;CAAK;CAAI;CAAI;CAAI;CAAG;CAAI;CAAI;CAAI;CAAG;CAAG;CAAI;CAAI;CAAI;CAAG;CAAG;CAAG;CAAI;CAAG;CAAI;CAAM;CAAI;CAAI;CAAI;CAAK;CAAM;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAK;CAAI;CAAG;CAAI;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAK;CAAM;CAAK;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAM;CAAI;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAK;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAG;CAAM;CAAI;CAAG;CAAG;CAAK;CAAI;CAAK;CAAI;CAAI;CAAG;CAAI;CAAG;CAAK;CAAI;CAAI;CAAI;CAAK;CAAI;CAAK;CAAI;CAAG;CAAG;CAAK;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAK;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAK;CAAI;CAAI;CAAG;CAAG;CAAM;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAM;CAAO;CAAI;CAAM;CAAG;CAAM;CAAG;CAAM;CAAI;CAAK;CAAM;CAAK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GAAK;GAAI;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAI;GAAI;GAAI;GAAG;GAAG;GAAG;GAAI;GAAI;GAAI;GAAG;GAAK;GAAG;GAAG;GAAG;GAAI;GAAG;GAAI;GAAI;GAAI;GAAG;GAAI;GAAI;GAAG;GAAG;GAAG;GAAI;GAAI;GAAI;GAAG;GAAG;GAAK;GAAI;GAAK;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAK;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAI;GAAI;GAAI;GAAK;GAAG;GAAK;GAAG;GAAI;GAAG;GAAG;GAAG;GAAI;GAAG;GAAI;GAAI;GAAG;GAAI;GAAK;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAK;GAAG;GAAI;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAI;GAAI;GAAM;GAAG;GAAG;GAAI;GAAO;GAAI;GAAM;GAAG;GAAI;GAAG;GAAI;GAAG;GAAI;GAAG;GAAI;GAAG;GAAK;GAAG;GAAK;GAAG;GAAG;GAAI;GAAG;GAAG;GAAI;GAAG;GAAI;GAAG;GAAO;GAAG;GAAM;GAAG;GAAK;GAAI;GAAG;GAAI;GAAK;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAK;GAAG;GAAM;GAAI;GAAK;GAAI;GAAG;GAAI;GAAG;GAAG;GAAI;GAAG;GAAI;GAAG;GAAG;GAAI;GAAM;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAK;GAAG;GAAK;GAAG;GAAI;GAAG;GAAK;GAAG;GAAI;GAAI;GAAK;GAAI;GAAK;GAAG;GAAG;GAAG;GAAK;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAK;GAAG;GAAK;GAAG;GAAG;GAAG;GAAM;GAAG;GAAQ;GAAI;EAGnrC,IAAI,6BAA6B;GAAC;GAAG;GAAI;GAAG;GAAI;GAAG;GAAI;GAAG;GAAG;GAAG;GAAI;GAAG;GAAI;GAAI;GAAK;GAAI;GAAI;GAAK;GAAI;GAAG;GAAI;GAAI;GAAI;GAAI;GAAI;GAAG;GAAI;GAAI;GAAI;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAI;GAAK;GAAI;GAAI;GAAG;GAAI;GAAG;GAAI;GAAG;GAAI;GAAI;GAAI;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAI;GAAK;GAAI;GAAI;GAAI;GAAG;GAAI;GAAG;GAAG;GAAI;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAG;GAAG;GAAI;GAAI;GAAI;GAAI;GAAG;GAAI;GAAI;GAAI;GAAG;GAAG;GAAI;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAI;GAAI;GAAI;GAAG;GAAI;GAAI;GAAG;GAAG;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAK;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAK;GAAI;GAAG;GAAG;GAAI;GAAG;GAAI;GAAI;GAAI;GAAG;GAAG;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAG;GAAG;GAAG;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAI;GAAI;GAAI;GAAG;GAAI;GAAG;GAAG;GAAG;GAAI;GAAI;GAAG;GAAI;GAAI;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAI;GAAI;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAI;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAI;GAAI;GAAI;GAAG;GAAI;GAAG;GAAI;GAAI;GAAI;GAAG;GAAG;GAAG;GAAK;GAAI;GAAI;GAAG;GAAI;GAAI;GAAI;GAAG;GAAI;GAAI;GAAI;GAAG;GAAI;GAAI;GAAI;GAAG;GAAK;GAAI;GAAK;GAAI;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAI;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAI;GAAI;GAAG;GAAG;GAAG;GAAI;GAAG;GAAI;GAAI;GAAG;GAAG;GAAI;GAAG;GAAI;GAAI;GAAI;GAAG;GAAI;GAAI;GAAK;GAAI;GAAI;GAAG;GAAG;GAAI;GAAI;GAAG;GAAI;GAAI;GAAK;GAAG;GAAG;GAAG;GAAG;GAAI;GAAI;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAI;GAAI;GAAG;GAAI;GAAI;GAAK;GAAI;GAAI;GAAG;GAAG;GAAI;GAAG;GAAI;GAAK;GAAG;GAAI;GAAK;GAAK;GAAK;GAAI;GAAK;GAAM;GAAI;GAAI;GAAM;GAAI;GAAG;GAAI;GAAM;GAAG;GAAK;GAAM;GAAI;GAAM;GAAK;GAAG;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAG;GAAI;GAAI;GAAG;GAAI;GAAK;GAAI;GAAK;GAAI;GAAI;GAAI;GAAG;GAAI;GAAI;GAAI;GAAG;GAAG;GAAI;GAAI;GAAI;GAAG;GAAG;GAAG;GAAI;GAAG;GAAI;GAAM;GAAI;GAAI;GAAI;GAAK;GAAM;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAK;GAAI;GAAG;GAAI;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAK;GAAM;GAAK;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAM;GAAI;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;G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"}