@mojir/dvala 0.0.7 → 0.0.10

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 (321) hide show
  1. package/dist/cli/cli.js +1622 -1620
  2. package/dist/cli/reference/examples.d.ts +1 -1
  3. package/dist/cli/src/AutoCompleter/AutoCompleter.d.ts +4 -2
  4. package/dist/cli/src/{Dvala/Cache.d.ts → Cache.d.ts} +1 -1
  5. package/dist/cli/src/builtin/specialExpressions/functions.d.ts +1 -1
  6. package/dist/cli/src/createDvala.d.ts +47 -0
  7. package/dist/cli/src/evaluator/ContextStack.d.ts +10 -2
  8. package/dist/cli/src/evaluator/effectTypes.d.ts +24 -6
  9. package/dist/cli/src/evaluator/suspension.d.ts +6 -0
  10. package/dist/cli/src/evaluator/trampoline.d.ts +15 -1
  11. package/dist/cli/src/parser/subParsers/parseDo.d.ts +1 -1
  12. package/dist/cli/src/tokenizer/token.d.ts +2 -4
  13. package/dist/cli/src/tokenizer/tokenize.d.ts +1 -2
  14. package/dist/cli/src/tokenizer/tokenizers.d.ts +2 -3
  15. package/dist/cli/src/tooling.d.ts +51 -0
  16. package/dist/debug.esm.js +1 -1
  17. package/dist/debug.esm.js.map +1 -1
  18. package/dist/debug.js +1 -1
  19. package/dist/debug.js.map +1 -1
  20. package/dist/dvala.iife.js +1 -1
  21. package/dist/dvala.iife.js.map +1 -1
  22. package/dist/full.esm.js +1 -1
  23. package/dist/full.esm.js.map +1 -1
  24. package/dist/full.js +1 -1
  25. package/dist/full.js.map +1 -1
  26. package/dist/index.esm.js +1 -1
  27. package/dist/index.esm.js.map +1 -1
  28. package/dist/index.js +1 -1
  29. package/dist/index.js.map +1 -1
  30. package/dist/mcp-server/common/utils.d.ts +2 -0
  31. package/dist/mcp-server/mcp-server/src/server.d.ts +1 -0
  32. package/dist/mcp-server/reference/api.d.ts +73 -0
  33. package/dist/mcp-server/reference/datatype.d.ts +3 -0
  34. package/dist/mcp-server/reference/examples.d.ts +11 -0
  35. package/dist/mcp-server/reference/index.d.ts +195 -0
  36. package/dist/mcp-server/reference/shorthand.d.ts +3 -0
  37. package/dist/mcp-server/server.js +36377 -0
  38. package/dist/mcp-server/src/AutoCompleter/AutoCompleter.d.ts +27 -0
  39. package/dist/{src/Dvala → mcp-server/src}/Cache.d.ts +1 -1
  40. package/dist/mcp-server/src/allModules.d.ts +2 -0
  41. package/dist/mcp-server/src/builtin/bindingNode.d.ts +11 -0
  42. package/dist/mcp-server/src/builtin/core/array.d.ts +2 -0
  43. package/dist/mcp-server/src/builtin/core/assertion.d.ts +2 -0
  44. package/dist/mcp-server/src/builtin/core/bitwise.d.ts +2 -0
  45. package/dist/mcp-server/src/builtin/core/collection.d.ts +2 -0
  46. package/dist/mcp-server/src/builtin/core/functional.d.ts +2 -0
  47. package/dist/mcp-server/src/builtin/core/math.d.ts +2 -0
  48. package/dist/mcp-server/src/builtin/core/meta.d.ts +3 -0
  49. package/dist/mcp-server/src/builtin/core/misc.d.ts +2 -0
  50. package/dist/mcp-server/src/builtin/core/object.d.ts +2 -0
  51. package/dist/mcp-server/src/builtin/core/predicates.d.ts +2 -0
  52. package/dist/mcp-server/src/builtin/core/regexp.d.ts +2 -0
  53. package/dist/mcp-server/src/builtin/core/sequence.d.ts +2 -0
  54. package/dist/mcp-server/src/builtin/core/string.d.ts +2 -0
  55. package/dist/mcp-server/src/builtin/core/vector.d.ts +2 -0
  56. package/dist/mcp-server/src/builtin/index.d.ts +13 -0
  57. package/dist/mcp-server/src/builtin/interface.d.ts +113 -0
  58. package/dist/mcp-server/src/builtin/modules/assertion/docs.d.ts +2 -0
  59. package/dist/mcp-server/src/builtin/modules/assertion/index.d.ts +2 -0
  60. package/dist/mcp-server/src/builtin/modules/bitwise/index.d.ts +2 -0
  61. package/dist/mcp-server/src/builtin/modules/collection/index.d.ts +2 -0
  62. package/dist/mcp-server/src/builtin/modules/convert/index.d.ts +2 -0
  63. package/dist/mcp-server/src/builtin/modules/functional/index.d.ts +2 -0
  64. package/dist/mcp-server/src/builtin/modules/grid/docs.d.ts +2 -0
  65. package/dist/mcp-server/src/builtin/modules/grid/fromArray.d.ts +8 -0
  66. package/dist/mcp-server/src/builtin/modules/grid/index.d.ts +2 -0
  67. package/dist/mcp-server/src/builtin/modules/grid/transpose.d.ts +2 -0
  68. package/dist/mcp-server/src/builtin/modules/interface.d.ts +28 -0
  69. package/dist/mcp-server/src/builtin/modules/linear-algebra/docs.d.ts +2 -0
  70. package/dist/mcp-server/src/builtin/modules/linear-algebra/helpers/calcFractionalRanks.d.ts +1 -0
  71. package/dist/mcp-server/src/builtin/modules/linear-algebra/helpers/collinear.d.ts +2 -0
  72. package/dist/mcp-server/src/builtin/modules/linear-algebra/helpers/corrleation.d.ts +8 -0
  73. package/dist/mcp-server/src/builtin/modules/linear-algebra/helpers/covariance.d.ts +4 -0
  74. package/dist/mcp-server/src/builtin/modules/linear-algebra/helpers/dot.d.ts +1 -0
  75. package/dist/mcp-server/src/builtin/modules/linear-algebra/helpers/gaussJordanElimination.d.ts +7 -0
  76. package/dist/mcp-server/src/builtin/modules/linear-algebra/helpers/getUnit.d.ts +2 -0
  77. package/dist/mcp-server/src/builtin/modules/linear-algebra/helpers/isZeroVector.d.ts +1 -0
  78. package/dist/mcp-server/src/builtin/modules/linear-algebra/helpers/kendallTau.d.ts +10 -0
  79. package/dist/mcp-server/src/builtin/modules/linear-algebra/helpers/length.d.ts +1 -0
  80. package/dist/mcp-server/src/builtin/modules/linear-algebra/helpers/pearsonCorr.d.ts +1 -0
  81. package/dist/mcp-server/src/builtin/modules/linear-algebra/helpers/scale.d.ts +1 -0
  82. package/dist/mcp-server/src/builtin/modules/linear-algebra/helpers/solve.d.ts +8 -0
  83. package/dist/mcp-server/src/builtin/modules/linear-algebra/helpers/subtract.d.ts +1 -0
  84. package/dist/mcp-server/src/builtin/modules/linear-algebra/index.d.ts +4 -0
  85. package/dist/mcp-server/src/builtin/modules/math/index.d.ts +2 -0
  86. package/dist/mcp-server/src/builtin/modules/matrix/docs.d.ts +2 -0
  87. package/dist/mcp-server/src/builtin/modules/matrix/helpers/adjugate.d.ts +1 -0
  88. package/dist/mcp-server/src/builtin/modules/matrix/helpers/band.d.ts +9 -0
  89. package/dist/mcp-server/src/builtin/modules/matrix/helpers/cofactor.d.ts +1 -0
  90. package/dist/mcp-server/src/builtin/modules/matrix/helpers/determinant.d.ts +6 -0
  91. package/dist/mcp-server/src/builtin/modules/matrix/helpers/inverse.d.ts +6 -0
  92. package/dist/mcp-server/src/builtin/modules/matrix/helpers/isBanded.d.ts +11 -0
  93. package/dist/mcp-server/src/builtin/modules/matrix/helpers/isDiagonal.d.ts +10 -0
  94. package/dist/mcp-server/src/builtin/modules/matrix/helpers/isIdentity.d.ts +1 -0
  95. package/dist/mcp-server/src/builtin/modules/matrix/helpers/isOrthogonal.d.ts +1 -0
  96. package/dist/mcp-server/src/builtin/modules/matrix/helpers/isSquare.d.ts +1 -0
  97. package/dist/mcp-server/src/builtin/modules/matrix/helpers/isSymetric.d.ts +8 -0
  98. package/dist/mcp-server/src/builtin/modules/matrix/helpers/isTriangular.d.ts +13 -0
  99. package/dist/mcp-server/src/builtin/modules/matrix/helpers/matrixMultiply.d.ts +7 -0
  100. package/dist/mcp-server/src/builtin/modules/matrix/helpers/minor.d.ts +1 -0
  101. package/dist/mcp-server/src/builtin/modules/matrix/helpers/norm1.d.ts +1 -0
  102. package/dist/mcp-server/src/builtin/modules/matrix/helpers/trace.d.ts +8 -0
  103. package/dist/mcp-server/src/builtin/modules/matrix/index.d.ts +4 -0
  104. package/dist/mcp-server/src/builtin/modules/number-theory/binomialCefficient.d.ts +1 -0
  105. package/dist/mcp-server/src/builtin/modules/number-theory/combinations.d.ts +2 -0
  106. package/dist/mcp-server/src/builtin/modules/number-theory/derangements.d.ts +2 -0
  107. package/dist/mcp-server/src/builtin/modules/number-theory/divisors.d.ts +4 -0
  108. package/dist/mcp-server/src/builtin/modules/number-theory/docs.d.ts +2 -0
  109. package/dist/mcp-server/src/builtin/modules/number-theory/factorial.d.ts +3 -0
  110. package/dist/mcp-server/src/builtin/modules/number-theory/index.d.ts +4 -0
  111. package/dist/mcp-server/src/builtin/modules/number-theory/partitions.d.ts +2 -0
  112. package/dist/mcp-server/src/builtin/modules/number-theory/permutations.d.ts +2 -0
  113. package/dist/mcp-server/src/builtin/modules/number-theory/powerSet.d.ts +2 -0
  114. package/dist/mcp-server/src/builtin/modules/number-theory/primeFactors.d.ts +11 -0
  115. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/abundant.d.ts +2 -0
  116. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/arithmetic.d.ts +2 -0
  117. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/bell.d.ts +1 -0
  118. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/bernoulli.d.ts +2 -0
  119. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/catalan.d.ts +1 -0
  120. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/collatz.d.ts +2 -0
  121. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/composite.d.ts +3 -0
  122. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/deficient.d.ts +2 -0
  123. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/factorial.d.ts +1 -0
  124. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/fibonacci.d.ts +1 -0
  125. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/geometric.d.ts +2 -0
  126. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/golomb.d.ts +2 -0
  127. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/happy.d.ts +2 -0
  128. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/index.d.ts +27 -0
  129. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/juggler.d.ts +2 -0
  130. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/lookAndSay.d.ts +2 -0
  131. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/lucas.d.ts +1 -0
  132. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/lucky.d.ts +2 -0
  133. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/mersenne.d.ts +1 -0
  134. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/padovan.d.ts +2 -0
  135. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/partition.d.ts +1 -0
  136. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/pell.d.ts +1 -0
  137. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/perfect.d.ts +1 -0
  138. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/perfectCube.d.ts +2 -0
  139. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/perfectPower.d.ts +10 -0
  140. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/perfectSquare.d.ts +2 -0
  141. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/poligonal.d.ts +2 -0
  142. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/prime.d.ts +3 -0
  143. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/recaman.d.ts +9 -0
  144. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/sylvester.d.ts +1 -0
  145. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/thueMorse.d.ts +2 -0
  146. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/tribonacci.d.ts +1 -0
  147. package/dist/mcp-server/src/builtin/modules/sequence/index.d.ts +2 -0
  148. package/dist/mcp-server/src/builtin/modules/string/index.d.ts +2 -0
  149. package/dist/mcp-server/src/builtin/modules/vector/bincount.d.ts +9 -0
  150. package/dist/mcp-server/src/builtin/modules/vector/calcMad.d.ts +1 -0
  151. package/dist/mcp-server/src/builtin/modules/vector/calcMean.d.ts +1 -0
  152. package/dist/mcp-server/src/builtin/modules/vector/calcMedad.d.ts +1 -0
  153. package/dist/mcp-server/src/builtin/modules/vector/calcMedian.d.ts +1 -0
  154. package/dist/mcp-server/src/builtin/modules/vector/calcStdDev.d.ts +2 -0
  155. package/dist/mcp-server/src/builtin/modules/vector/calcVariance.d.ts +2 -0
  156. package/dist/mcp-server/src/builtin/modules/vector/docs.d.ts +2 -0
  157. package/dist/mcp-server/src/builtin/modules/vector/entropy.d.ts +8 -0
  158. package/dist/mcp-server/src/builtin/modules/vector/histogram.d.ts +9 -0
  159. package/dist/mcp-server/src/builtin/modules/vector/index.d.ts +2 -0
  160. package/dist/mcp-server/src/builtin/modules/vector/mode.d.ts +6 -0
  161. package/dist/mcp-server/src/builtin/modules/vector/outliers.d.ts +7 -0
  162. package/dist/mcp-server/src/builtin/modules/vector/percentile.d.ts +7 -0
  163. package/dist/mcp-server/src/builtin/modules/vector/quartiles.d.ts +1 -0
  164. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/entropy.d.ts +2 -0
  165. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/giniCoefficient.d.ts +2 -0
  166. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/index.d.ts +13 -0
  167. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/iqr.d.ts +2 -0
  168. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/kurtosis.d.ts +5 -0
  169. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/mad.d.ts +2 -0
  170. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/mean.d.ts +4 -0
  171. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/medad.d.ts +2 -0
  172. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/median.d.ts +2 -0
  173. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/prod.d.ts +2 -0
  174. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/rms.d.ts +2 -0
  175. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/skewness.d.ts +3 -0
  176. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/span.d.ts +2 -0
  177. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/standardDeviation.d.ts +3 -0
  178. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/sum.d.ts +2 -0
  179. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/variance.d.ts +3 -0
  180. package/dist/mcp-server/src/builtin/normalExpressions/index.d.ts +9 -0
  181. package/dist/mcp-server/src/builtin/normalExpressions/initCoreDvala.d.ts +1 -0
  182. package/dist/mcp-server/src/builtin/specialExpressionTypes.d.ts +24 -0
  183. package/dist/mcp-server/src/builtin/specialExpressions/and.d.ts +6 -0
  184. package/dist/mcp-server/src/builtin/specialExpressions/array.d.ts +6 -0
  185. package/dist/mcp-server/src/builtin/specialExpressions/block.d.ts +7 -0
  186. package/dist/mcp-server/src/builtin/specialExpressions/cond.d.ts +6 -0
  187. package/dist/mcp-server/src/builtin/specialExpressions/defined.d.ts +5 -0
  188. package/dist/mcp-server/src/builtin/specialExpressions/effect.d.ts +5 -0
  189. package/dist/mcp-server/src/builtin/specialExpressions/functions.d.ts +6 -0
  190. package/dist/mcp-server/src/builtin/specialExpressions/if.d.ts +6 -0
  191. package/dist/mcp-server/src/builtin/specialExpressions/import.d.ts +6 -0
  192. package/dist/mcp-server/src/builtin/specialExpressions/let.d.ts +6 -0
  193. package/dist/mcp-server/src/builtin/specialExpressions/loop.d.ts +6 -0
  194. package/dist/mcp-server/src/builtin/specialExpressions/loops.d.ts +9 -0
  195. package/dist/mcp-server/src/builtin/specialExpressions/match.d.ts +7 -0
  196. package/dist/mcp-server/src/builtin/specialExpressions/object.d.ts +6 -0
  197. package/dist/mcp-server/src/builtin/specialExpressions/or.d.ts +6 -0
  198. package/dist/mcp-server/src/builtin/specialExpressions/parallel.d.ts +6 -0
  199. package/dist/mcp-server/src/builtin/specialExpressions/perform.d.ts +6 -0
  200. package/dist/mcp-server/src/builtin/specialExpressions/qq.d.ts +6 -0
  201. package/dist/mcp-server/src/builtin/specialExpressions/race.d.ts +6 -0
  202. package/dist/mcp-server/src/builtin/specialExpressions/recur.d.ts +5 -0
  203. package/dist/mcp-server/src/builtin/specialExpressions/unless.d.ts +6 -0
  204. package/dist/mcp-server/src/builtin/utils.d.ts +6 -0
  205. package/dist/mcp-server/src/bundler/interface.d.ts +15 -0
  206. package/dist/mcp-server/src/constants/constants.d.ts +19 -0
  207. package/dist/mcp-server/src/createDvala.d.ts +47 -0
  208. package/dist/mcp-server/src/errors.d.ts +24 -0
  209. package/dist/mcp-server/src/evaluator/ContextStack.d.ts +70 -0
  210. package/dist/mcp-server/src/evaluator/contentHash.d.ts +21 -0
  211. package/dist/mcp-server/src/evaluator/dedupSubTrees.d.ts +37 -0
  212. package/dist/mcp-server/src/evaluator/effectRef.d.ts +27 -0
  213. package/dist/mcp-server/src/evaluator/effectTypes.d.ts +199 -0
  214. package/dist/mcp-server/src/evaluator/frames.d.ts +513 -0
  215. package/dist/mcp-server/src/evaluator/interface.d.ts +14 -0
  216. package/dist/mcp-server/src/evaluator/standardEffects.d.ts +50 -0
  217. package/dist/mcp-server/src/evaluator/step.d.ts +175 -0
  218. package/dist/mcp-server/src/evaluator/suspension.d.ts +92 -0
  219. package/dist/mcp-server/src/evaluator/trampoline.d.ts +138 -0
  220. package/dist/mcp-server/src/getUndefinedSymbols/index.d.ts +7 -0
  221. package/dist/mcp-server/src/initReferenceData.d.ts +1 -0
  222. package/dist/mcp-server/src/interface.d.ts +7 -0
  223. package/dist/mcp-server/src/parser/ParserContext.d.ts +20 -0
  224. package/dist/mcp-server/src/parser/getPrecedence.d.ts +3 -0
  225. package/dist/mcp-server/src/parser/helpers.d.ts +19 -0
  226. package/dist/mcp-server/src/parser/index.d.ts +5 -0
  227. package/dist/mcp-server/src/parser/subParsers/parseArray.d.ts +3 -0
  228. package/dist/mcp-server/src/parser/subParsers/parseBindingTarget.d.ts +8 -0
  229. package/dist/mcp-server/src/parser/subParsers/parseCond.d.ts +4 -0
  230. package/dist/mcp-server/src/parser/subParsers/parseDo.d.ts +3 -0
  231. package/dist/mcp-server/src/parser/subParsers/parseExpression.d.ts +5 -0
  232. package/dist/mcp-server/src/parser/subParsers/parseForOrDoseq.d.ts +4 -0
  233. package/dist/mcp-server/src/parser/subParsers/parseFunction.d.ts +4 -0
  234. package/dist/mcp-server/src/parser/subParsers/parseFunctionCall.d.ts +3 -0
  235. package/dist/mcp-server/src/parser/subParsers/parseIfOrUnless.d.ts +5 -0
  236. package/dist/mcp-server/src/parser/subParsers/parseImplicitBlock.d.ts +5 -0
  237. package/dist/mcp-server/src/parser/subParsers/parseLet.d.ts +4 -0
  238. package/dist/mcp-server/src/parser/subParsers/parseLoop.d.ts +4 -0
  239. package/dist/mcp-server/src/parser/subParsers/parseMatch.d.ts +4 -0
  240. package/dist/mcp-server/src/parser/subParsers/parseNumber.d.ts +3 -0
  241. package/dist/mcp-server/src/parser/subParsers/parseObject.d.ts +3 -0
  242. package/dist/mcp-server/src/parser/subParsers/parseOperand.d.ts +3 -0
  243. package/dist/mcp-server/src/parser/subParsers/parseRegexpShorthand.d.ts +3 -0
  244. package/dist/mcp-server/src/parser/subParsers/parseReservedSymbol.d.ts +3 -0
  245. package/dist/mcp-server/src/parser/subParsers/parseString.d.ts +4 -0
  246. package/dist/mcp-server/src/parser/subParsers/parseSymbol.d.ts +3 -0
  247. package/dist/mcp-server/src/parser/types.d.ts +128 -0
  248. package/dist/mcp-server/src/tokenizer/minifyTokenStream.d.ts +4 -0
  249. package/dist/mcp-server/src/tokenizer/operators.d.ts +12 -0
  250. package/dist/mcp-server/src/tokenizer/reservedNames.d.ts +65 -0
  251. package/dist/mcp-server/src/tokenizer/token.d.ts +82 -0
  252. package/dist/mcp-server/src/tokenizer/tokenize.d.ts +7 -0
  253. package/dist/mcp-server/src/tokenizer/tokenizers.d.ts +13 -0
  254. package/dist/mcp-server/src/tooling.d.ts +51 -0
  255. package/dist/mcp-server/src/transformer/index.d.ts +2 -0
  256. package/dist/mcp-server/src/typeGuards/annotatedCollections.d.ts +16 -0
  257. package/dist/mcp-server/src/typeGuards/array.d.ts +9 -0
  258. package/dist/mcp-server/src/typeGuards/astNode.d.ts +19 -0
  259. package/dist/mcp-server/src/typeGuards/dvala.d.ts +26 -0
  260. package/dist/mcp-server/src/typeGuards/dvalaFunction.d.ts +9 -0
  261. package/dist/mcp-server/src/typeGuards/index.d.ts +7 -0
  262. package/dist/mcp-server/src/typeGuards/number.d.ts +66 -0
  263. package/dist/mcp-server/src/typeGuards/string.d.ts +15 -0
  264. package/dist/mcp-server/src/untokenizer/index.d.ts +2 -0
  265. package/dist/mcp-server/src/utils/arity.d.ts +10 -0
  266. package/dist/mcp-server/src/utils/debug/debugTools.d.ts +1 -0
  267. package/dist/mcp-server/src/utils/debug/getCodeMarker.d.ts +2 -0
  268. package/dist/mcp-server/src/utils/debug/getSourceCodeInfo.d.ts +2 -0
  269. package/dist/mcp-server/src/utils/docString/generateDocString.d.ts +4 -0
  270. package/dist/mcp-server/src/utils/getAssertionError.d.ts +3 -0
  271. package/dist/mcp-server/src/utils/index.d.ts +14 -0
  272. package/dist/mcp-server/src/utils/maybePromise.d.ts +54 -0
  273. package/dist/mcp-server/src/utils/symbols.d.ts +3 -0
  274. package/dist/modules/grid.esm.js +1 -1
  275. package/dist/modules/grid.esm.js.map +1 -1
  276. package/dist/modules/grid.js +1 -1
  277. package/dist/modules/grid.js.map +1 -1
  278. package/dist/modules/reference/index.d.ts +136 -136
  279. package/dist/modules/src/AutoCompleter/AutoCompleter.d.ts +4 -2
  280. package/dist/modules/src/{Dvala/Cache.d.ts → Cache.d.ts} +1 -1
  281. package/dist/modules/src/builtin/specialExpressions/functions.d.ts +1 -1
  282. package/dist/modules/src/createDvala.d.ts +47 -0
  283. package/dist/modules/src/evaluator/ContextStack.d.ts +10 -2
  284. package/dist/modules/src/evaluator/effectTypes.d.ts +24 -6
  285. package/dist/modules/src/evaluator/suspension.d.ts +6 -0
  286. package/dist/modules/src/evaluator/trampoline.d.ts +15 -1
  287. package/dist/modules/src/index.d.ts +10 -5
  288. package/dist/modules/src/parser/subParsers/parseDo.d.ts +1 -1
  289. package/dist/modules/src/resume.d.ts +41 -0
  290. package/dist/modules/src/retrigger.d.ts +39 -0
  291. package/dist/modules/src/tokenizer/token.d.ts +2 -4
  292. package/dist/modules/src/tokenizer/tokenize.d.ts +1 -2
  293. package/dist/modules/src/tokenizer/tokenizers.d.ts +2 -3
  294. package/dist/modules/src/tooling.d.ts +51 -0
  295. package/dist/reference/index.d.ts +136 -136
  296. package/dist/src/AutoCompleter/AutoCompleter.d.ts +4 -2
  297. package/dist/src/Cache.d.ts +16 -0
  298. package/dist/src/builtin/specialExpressions/functions.d.ts +1 -1
  299. package/dist/src/createDvala.d.ts +47 -0
  300. package/dist/src/evaluator/ContextStack.d.ts +10 -2
  301. package/dist/src/evaluator/effectTypes.d.ts +24 -6
  302. package/dist/src/evaluator/suspension.d.ts +6 -0
  303. package/dist/src/evaluator/trampoline.d.ts +15 -1
  304. package/dist/src/index.d.ts +10 -5
  305. package/dist/src/parser/subParsers/parseDo.d.ts +1 -1
  306. package/dist/src/resume.d.ts +41 -0
  307. package/dist/src/retrigger.d.ts +39 -0
  308. package/dist/src/tokenizer/token.d.ts +2 -4
  309. package/dist/src/tokenizer/tokenize.d.ts +1 -2
  310. package/dist/src/tokenizer/tokenizers.d.ts +2 -3
  311. package/dist/src/tooling.d.ts +51 -0
  312. package/dist/testFramework.esm.js +1 -1
  313. package/dist/testFramework.esm.js.map +1 -1
  314. package/dist/testFramework.js +1 -1
  315. package/dist/testFramework.js.map +1 -1
  316. package/package.json +17 -6
  317. package/dist/cli/src/Dvala/Dvala.d.ts +0 -63
  318. package/dist/modules/src/Dvala/Dvala.d.ts +0 -63
  319. package/dist/modules/src/effects.d.ts +0 -110
  320. package/dist/src/Dvala/Dvala.d.ts +0 -63
  321. package/dist/src/effects.d.ts +0 -110
package/dist/index.esm.js CHANGED
@@ -1,2 +1,2 @@
1
- function e(e){if(!e.position||!e.code)return"";const n=e.position.column-1,t=e.code.length-n-1;return`${" ".repeat(Math.max(n,0))}^${" ".repeat(Math.max(t,0))}`}class n extends Error{params;constructor(e){super(`recur, params: ${e}`),Object.setPrototypeOf(this,n.prototype),this.name="RecurSignal",this.params=e}}class t extends Error{sourceCodeInfo;shortMessage;constructor(n,r){const o=n instanceof Error?n.message:`${n}`;super(function(n,t){if(!t)return n;const r=`${t.position.line}:${t.position.column}`;return`${n}${t.filePath?`\n${t.filePath}:${r}`:`\nLocation ${r}`}\n${t.code}\n${e(t)}`}(o,r)),this.shortMessage=o,this.sourceCodeInfo=r,Object.setPrototypeOf(this,t.prototype),this.name="DvalaError"}getCodeMarker(){return this.sourceCodeInfo&&e(this.sourceCodeInfo)}}class r extends t{userMessage;constructor(e,n){super(e,n),this.userMessage=e,Object.setPrototypeOf(this,r.prototype),this.name="UserDefinedError"}}class o extends t{constructor(e,n){super(e,n),Object.setPrototypeOf(this,o.prototype),this.name="AssertionError"}}class a extends t{symbol;constructor(e,n){super(`Undefined symbol '${e}'.`,n),this.symbol=e,Object.setPrototypeOf(this,a.prototype),this.name="UndefinedSymbolError"}}function i(e){return e instanceof t}const s={Number:1,String:2,NormalExpression:3,SpecialExpression:4,UserDefinedSymbol:5,NormalBuiltinSymbol:6,SpecialBuiltinSymbol:7,ReservedSymbol:8,Binding:9,Spread:10},u=new Set(Object.values(s));function l(e){return Object.keys(s).find(n=>s[n]===e)}const c=new Set(["UserDefined","Partial","Comp","Constantly","Juxt","Complement","EveryPred","SomePred","Fnull","EffectMatcher","Builtin","SpecialBuiltin","Module"]);const f="^^fn^^",d="^^re^^",p="^^ef^^";function h(e){return null!==e&&"object"==typeof e&&(f in e&&"functionType"in e&&function(e){return"string"==typeof e&&c.has(e)}(e.functionType))}function y(e){return!(!Array.isArray(e)||e.length<2)&&function(e){return"number"==typeof e&&u.has(e)}(e[0])}function m(e){return h(e)?`<function ${e.name||"λ"}>`:y(e)?`${l(e[0])}-node`:null===e?"null":"object"==typeof e&&e instanceof RegExp?`${e}`:"object"==typeof e&&e instanceof Error?e.toString():JSON.stringify(e)}function v(e,n){return e?.sourceCodeInfo??n}function g(e,n,r){return new t(`Expected ${e}, got ${m(n)}.`,v(n,r))}function b(e,n){return w(e,n),e}function w(e,n){if(!function(e){return void 0!==e}(e))throw new t("Unexpected undefined",v(e,n))}function x(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function k(e){return null!==e&&"object"==typeof e&&!!e[f]}function E(e,n){return S(e,n),e}function S(e,n){if(!k(e))throw g("DvalaFunction",e,n)}function I(e){return k(e)&&"UserDefined"===e.functionType}function N(e,n){return P(e,n),e}function P(e,n){if(!I(e))throw g("UserDefinedFunction",e,n)}function $(e){return x(e)&&"Builtin"===e.functionType}function C(e){return void 0!==e}function A(e,n){return j(e,n),e}function j(e,n){if(!C(e))throw g("not undefined",e,n)}function O(e){return Array.isArray(e)||"string"==typeof e}function M(e,n){if(!O(e))throw g("string or array",e,n)}function U(e){return!(null===e||"object"!=typeof e||Array.isArray(e)||e instanceof RegExp||k(e)||B(e)||D(e))}function V(e,n){if(!U(e))throw g("object",e,n)}function R(e){return O(e)||U(e)}function T(e,n){if(!R(e))throw g("string, array or object",e,n)}function B(e){return null!==e&&"object"==typeof e&&!!e[d]}function _(e,n){if(!function(e){return B(e)||"string"==typeof e}(e))throw g("string or RegularExpression",e,n)}function D(e){return null!==e&&"object"==typeof e&&!!e[p]}function L(e,n){if(!D(e))throw g("Effect",e,n)}function F(e,n){return q(e,n),e}function q(e,n){if(!function(e){return"number"==typeof e||!!R(e)||!!k(e)}(e))throw g("FunctionLike",e,n)}function z(e,n={}){return"string"==typeof e&&((!n.nonEmpty||0!==e.length)&&(!n.char||1===e.length))}function W(e,n,t={}){if(!z(e,t))throw g(""+(t.nonEmpty?"non empty string":t.char?"character":"string"),e,n)}function Y(e,n,t={}){return W(e,n,t),e}function G(e){return"string"==typeof e||"number"==typeof e}function K(e,n){return J(e,n),e}function J(e,n){if(!G(e))throw g("string or number",e,n)}const H={assert:{evaluate:(e,n)=>{const t=e[0],r=2===e.length?e[1]:`${t}`;if(W(r,n),!t)throw new o(r,n);return A(t,n)},arity:{min:1,max:2}}};function X(e,n={}){return"number"==typeof e&&(!Number.isNaN(e)&&(!(n.integer&&!Number.isInteger(e))&&(!(n.finite&&!Number.isFinite(e))&&((!n.zero||0===e)&&((!n.nonZero||0!==e)&&(!(n.positive&&e<=0)&&(!(n.negative&&e>=0)&&(!(n.nonPositive&&e>0)&&(!(n.nonNegative&&e<0)&&(!("number"==typeof n.gt&&e<=n.gt)&&(!("number"==typeof n.gte&&e<n.gte)&&(!("number"==typeof n.lt&&e>=n.lt)&&!("number"==typeof n.lte&&e>n.lte)))))))))))))}function Z(e,n,r={}){if(!X(e,r))throw new t(`Expected ${function(e){if(e.zero)return"zero";const n=function(e){return e.positive?"positive":e.negative?"negative":e.nonNegative?"non negative":e.nonPositive?"non positive":e.nonZero?"non zero":""}(e),t=e.integer?"integer":"number",r=e.finite?"finite":"",o=function(e){return"number"!=typeof e.gt&&"number"!=typeof e.gte||"number"!=typeof e.lt&&"number"!=typeof e.lte?"number"==typeof e.gt||"number"==typeof e.gte?"number"==typeof e.gt?`n > ${e.gt}`:`n >= ${e.gte}`:"number"==typeof e.lt||"number"==typeof e.lte?"number"==typeof e.lt?`n < ${e.lt}`:`n <= ${e.lte}`:"":`${"number"==typeof e.gt?`${e.gt} < n `:`${e.gte} <= n `}${"number"==typeof e.lt?`< ${e.lt}`:`<= ${e.lte}`}`}(e);return[n,r,t,o].filter(e=>!!e).join(" ")}(r)}, got ${m(e)}.`,v(e,n))}function Q(e,n){const{min:t}=e;return!("number"==typeof t&&n<t)}function ee(e,n,r){const{min:o,max:a}=e;if("number"==typeof o&&n<o)throw new t(`Wrong number of arguments, expected at least ${o}, got ${m(n)}.`,r);if("number"==typeof a&&n>a)throw new t(`Wrong number of arguments, expected at most ${a}, got ${m(n)}.`,r)}function ne(e){return{min:e,max:e}}const te={"<<":{evaluate:([e,n],t)=>(Z(e,t,{integer:!0}),Z(n,t,{integer:!0,nonNegative:!0}),e<<n),arity:ne(2)},">>":{evaluate:([e,n],t)=>(Z(e,t,{integer:!0}),Z(n,t,{integer:!0,nonNegative:!0}),e>>n),arity:ne(2)},">>>":{evaluate:([e,n],t)=>(Z(e,t,{integer:!0}),Z(n,t,{integer:!0,nonNegative:!0}),e>>>n),arity:ne(2)},"&":{evaluate:([e,...n],t)=>(Z(e,t,{integer:!0}),n.reduce((e,n)=>(Z(n,t,{integer:!0}),e&n),e)),arity:{min:2}},"|":{evaluate:([e,...n],t)=>(Z(e,t,{integer:!0}),n.reduce((e,n)=>(Z(n,t,{integer:!0}),e|n),e)),arity:{min:2}},xor:{evaluate:([e,...n],t)=>(Z(e,t,{integer:!0}),n.reduce((e,n)=>(Z(n,t,{integer:!0}),e^n),e)),arity:{min:2}}};function re(e,n){return!!R(e)&&("string"==typeof e||Array.isArray(e)?!!X(n,{integer:!0})&&(n>=0&&n<e.length):!!Object.getOwnPropertyDescriptor(e,n))}function oe(e,n,r){if(J(e,r),J(n,r),"string"==typeof e&&"string"==typeof n)return e<n?-1:e>n?1:0;if("number"==typeof e&&"number"==typeof n)return Math.sign(e-n);throw new t(`Cannot compare values of different types: ${typeof e} and ${typeof n}`,r)}function ae(e,n,t){if(e===n)return!0;if("number"==typeof e&&"number"==typeof n)return function(e,n,t=le){if(e===n)return!0;const r=Math.abs(e-n);if(0===e||0===n||r<t)return r<t;const o=Math.abs(e),a=Math.abs(n);return r/(o+a)<t}(e,n);if(Array.isArray(e)&&Array.isArray(n)){if(e.length!==n.length)return!1;for(let r=0;r<e.length;r+=1)if(!ae(A(e[r],t),A(n[r],t),t))return!1;return!0}if(B(e)&&B(n))return e.s===n.s&&e.f===n.f;if(x(e)&&x(n)){const r=Object.keys(e),o=Object.keys(n);if(r.length!==o.length)return!1;for(let o=0;o<r.length;o+=1){const a=Y(r[o],t);if(!ae(e[a],n[a],t))return!1}return!0}return!1}function ie(e){return e??null}function se(...e){const n=new Set;for(const t of e)t.forEach(e=>n.add(e));return n}function ue(e,n){n.forEach(n=>e.add(n))}const le=1e-10;function ce(e,n=0){const t=e.split("\n");for(;t[0]?.match(/^\s*$/);)t.shift();for(;t[t.length-1]?.match(/^\s*$/);)t.pop();const r=t.reduce((e,n)=>{if(n.match(/^\s*$/))return e;const t=n.match(/^\s*/)[0].length;return Math.min(e,t)},1/0);return t.map(e=>" ".repeat(n)+e.slice(r)).join("\n").trimEnd()}function fe(e,n){if(!Array.isArray(e))throw g("array",e,n)}function de(e,n){if(!function(e){return Array.isArray(e)&&e.every(e=>"string"==typeof e)}(e))throw g("array of strings",e,n)}function pe(e,n){if(!function(e){return Array.isArray(e)&&e.every(e=>"string"==typeof e&&1===e.length)}(e))throw g("array of strings",e,n)}const he={filter:{evaluate:()=>{throw new Error("filter is implemented in Dvala")},arity:ne(2)},map:{evaluate:()=>{throw new Error("map is implemented in Dvala")},arity:{min:2}},reduce:{evaluate:()=>{throw new Error("reduce is implemented in Dvala")},arity:ne(3)},get:{evaluate:(e,n)=>{const[t,r]=e,o=ie(e[2]);if(J(r,n),null===t)return o;T(t,n);const a=function(e,n){if(U(e)){if("string"==typeof n&&re(e,n))return ie(e[n])}else if(X(n,{nonNegative:!0,integer:!0})&&n>=0&&n<e.length)return ie(e[n])}(t,r);return void 0===a?o:a},arity:{min:2,max:3}},count:{evaluate:([e],n)=>null===e?0:"string"==typeof e?e.length:(T(e,n),Array.isArray(e)?e.length:Object.keys(e).length),arity:ne(1)},"contains?":{evaluate:([e,n],t)=>null!==e&&(T(e,t),z(e)?(W(n,t),e.includes(n)):O(e)?(j(n,t),!!e.find(e=>ae(A(e),n,t))):(W(n,t),n in e)),arity:ne(2)},assoc:{evaluate:([e,n,t],r)=>(T(e,r),J(n,r),j(t,r),function(e,n,t,r){if(T(e,r),J(n,r),Array.isArray(e)||"string"==typeof e){if(Z(n,r,{integer:!0}),Z(n,r,{gte:0}),Z(n,r,{lte:e.length}),"string"==typeof e)return W(t,r,{char:!0}),`${e.slice(0,n)}${t}${e.slice(n+1)}`;const o=[...e];return o[n]=t,o}W(n,r);const o={...e};return o[n]=t,o}(e,n,t,r)),arity:ne(3)},"++":{evaluate:(e,n)=>(X(e[0])||T(e[0],n),Array.isArray(e[0])?e.reduce((e,t)=>(fe(t,n),e.concat(t)),[]):G(e[0])?e.reduce((e,t)=>(J(t,n),`${e}${t}`),""):e.reduce((e,t)=>(V(t,n),Object.assign(e,t)),{})),arity:{min:1}}},ye={range:{evaluate:(e,n)=>{const[t,r,o]=e;let a,i,s;Z(t,n,{finite:!0}),1===e.length?(a=0,i=t,s=i>=0?1:-1):2===e.length?(Z(r,n,{finite:!0}),a=t,i=r,s=i>=a?1:-1):(Z(r,n,{finite:!0}),Z(o,n,{finite:!0}),a=t,i=r,s=o,Z(s,n,i>a?{positive:!0}:i<a?{negative:!0}:{nonZero:!0}));const u=[];for(let e=a;s<0?e>i:e<i;e+=s)u.push(e);return u},arity:{min:1,max:3}},repeat:{evaluate:([e,n],t)=>{Z(n,t,{integer:!0,nonNegative:!0});const r=[];for(let t=0;t<n;t+=1)r.push(e);return r},arity:ne(2)},flatten:{evaluate:([e,n],t)=>{fe(e,t);const r=void 0===n||n===Number.POSITIVE_INFINITY?Number.POSITIVE_INFINITY:function(e,n,t={}){return Z(e,n,t),e}(n,t,{integer:!0,nonNegative:!0});return e.flat(r)},arity:{min:1,max:2}},mapcat:{evaluate:()=>{throw new Error("mapcat is implemented in Dvala")},arity:ne(2)},"moving-fn":{evaluate:()=>{throw new Error("moving-fn is implemented in Dvala")},arity:ne(3)},"running-fn":{evaluate:()=>{throw new Error("running-fn is implemented in Dvala")},arity:ne(2)}},me={nth:{evaluate:(e,n)=>{const[t,r]=e,o=ie(e[2]);if(Z(r,n,{integer:!0}),null===t)return o;if(M(t,n),r>=0&&r<t.length){return ie(t[r])}return o},arity:{min:2,max:3}},first:{evaluate:([e],n)=>{if(null===e)return null;M(e,n);return ie(e[0])},arity:ne(1)},last:{evaluate:([e],n)=>{if(null===e)return null;M(e,n);return ie(e.at(-1))},arity:ne(1)},pop:{evaluate:([e],n)=>(M(e,n),"string"==typeof e?e.substring(0,e.length-1):e.slice(0,e.length-1)),arity:ne(1)},"index-of":{evaluate:([e,n],t)=>{if(j(n,t),null===e)return null;if(M(e,t),"string"==typeof e){W(n,t);const r=e.indexOf(n);return-1!==r?r:null}{const r=e.findIndex(e=>ae(A(e,t),n),t);return-1!==r?r:null}},arity:ne(2)},push:{evaluate:([e,...n],t)=>(M(e,t),"string"==typeof e?(pe(n,t),[e,...n].join("")):[...e,...n]),arity:{min:2}},rest:{evaluate:([e],n)=>(M(e,n),Array.isArray(e)?e.length<=1?[]:e.slice(1):e.substring(1)),arity:ne(1)},next:{evaluate:([e],n)=>(M(e,n),Array.isArray(e)?e.length<=1?null:e.slice(1):e.length<=1?null:e.substring(1)),arity:ne(1)},reverse:{evaluate:([e],n)=>null===e?null:(M(e,n),Array.isArray(e)?[...e].reverse():e.split("").reverse().join("")),arity:ne(1)},second:{evaluate:([e],n)=>null===e?null:(M(e,n),ie(e[1])),arity:ne(1)},slice:{evaluate:(e,n)=>{const[t,r,o]=e;return M(t,n),Z(r,n,{integer:!0}),2===e.length?(Array.isArray(t),t.slice(r)):(Z(o,n,{integer:!0}),Array.isArray(t),t.slice(r,o))},arity:{min:2,max:3}},some:{evaluate:()=>{throw new Error("some is implemented in Dvala")},arity:ne(2)},sort:{evaluate:()=>{throw new Error("sort is implemented in Dvala")},arity:{min:1,max:2}},take:{evaluate:([e,n],t)=>{Z(n,t),M(e,t);const r=Math.max(Math.ceil(n),0);return e.slice(0,r)},arity:ne(2)},"take-last":{evaluate:([e,n],t)=>{M(e,t),Z(n,t);const r=Math.max(Math.ceil(n),0),o=e.length-r;return e.slice(o)},arity:ne(2)},drop:{evaluate:([e,n],t)=>{Z(n,t);const r=Math.max(Math.ceil(n),0);return M(e,t),e.slice(r)},arity:ne(2)},"drop-last":{evaluate:([e,n],t)=>{M(e,t),Z(n,t);const r=Math.max(Math.ceil(n),0),o=e.length-r;return e.slice(0,o)},arity:ne(2)},"take-while":{evaluate:()=>{throw new Error("take-while is implemented in Dvala")},arity:ne(2)},"drop-while":{evaluate:()=>{throw new Error("drop-while is implemented in Dvala")},arity:ne(2)}},ve=new WeakSet,ge=new WeakSet,be=new WeakSet,we=new WeakSet,xe=new WeakSet,ke=new WeakSet,Ee=new WeakSet;function Se(e){return Array.isArray(e)?(ve.has(e)||(Ie(e),Ce(e)||$e(e)),e):e}function Ie(e){return!!Array.isArray(e)&&(!!ge.has(e)||!be.has(e)&&(e.every(e=>X(e))?(ve.add(e),ge.add(e),!0):(be.add(e),!1)))}function Ne(e,n){if(!Ie(e))throw new t(`Expected a vector, but got ${e}`,n)}function Pe(e,n){if(Ne(e,n),0===e.length)throw new t(`Expected a non empty vector, but got ${e}`,n)}function $e(e,n){if(!Array.isArray(e))return!1;if(ke.has(e))return!0;if(Ee.has(e))return!1;if(0===e.length)return Ee.add(e),!1;if(!Array.isArray(e[0]))return Ee.add(e),!1;const t=e[0].length;if(0===t)return Ee.add(e),!1;for(const r of e){if(!Array.isArray(r))return Ee.add(e),!1;if(r.length!==t)return Ee.add(e),!1;if(n&&r.some(e=>!n(e)))return!1}return ve.add(e),ke.add(e),!0}function Ce(e){return $e(e,X)?(we.add(e),!0):(Array.isArray(e)&&xe.add(e),!1)}function Ae(e,n){let r=!1,o=!1;for(const a of e)if(Ie(a))r=!0;else if(Ce(a))o=!0;else if(!X(a))throw new t("Invalid parameter type: "+typeof a,n);if(o){if(r)throw new t("Cannot mix vector and matrix types",n);let o=null,a=null;for(const r of e)if(Ce(r))if(null===o)o=r.length,a=r[0].length;else if(r.length!==o||r[0].length!==a)throw new t("Matrix dimensions do not match",n);return["matrix",e.map(e=>Ce(e)?e:Array.from({length:o},()=>Array.from({length:a},()=>e)))]}if(r){let r=null;for(const o of e)if(Ie(o))if(null===r)r=o.length;else if(o.length!==r)throw new t("Vector lengths do not match",n);return["vector",e.map(e=>Ie(e)?e:Array.from({length:r},()=>e))]}return["number",e]}function je(e){return(n,t)=>{const[r,o]=Ae(n,t);return"number"===r?e(o[0]):"vector"===r?o[0].map(n=>e(n)):o[0].map(n=>n.map(n=>e(n)))}}function Oe(e){return(n,t)=>{const[r,o]=Ae(n,t);return"number"===r?e(o[0],o[1]):"vector"===r?o[0].map((n,t)=>e(n,o[1][t])):o[0].map((n,t)=>n.map((n,r)=>e(n,o[1][t][r])))}}function Me(e,n){return(t,r)=>{if(0===t.length)return e;const[o,a]=Ae(t,r);if("number"===o)return a.reduce((e,t)=>n(e,t),e);if("vector"===o){const[e,...t]=a;return t.reduce((e,t)=>e.map((e,r)=>n(e,t[r])),e)}{const[e,...t]=a;return t.reduce((e,t)=>e.map((e,r)=>e.map((e,o)=>n(e,t[r][o]))),e)}}}const Ue={inc:{evaluate:je(e=>e+1),arity:ne(1)},dec:{evaluate:je(e=>e-1),arity:ne(1)},"+":{evaluate:Me(0,(e,n)=>e+n),arity:{}},"*":{evaluate:Me(1,(e,n)=>e*n),arity:{}},"/":{evaluate:(e,n)=>{if(0===e.length)return 1;const[t,r]=Ae(e,n);if("number"===t){const[e,...n]=r;return 0===n.length?1/e:n.reduce((e,n)=>e/n,e)}if("vector"===t){const e=r[0];return r.slice(1).reduce((e,n)=>e.map((e,t)=>e/n[t]),e)}{const e=r[0];return r.slice(1).reduce((e,n)=>e.map((e,t)=>e.map((e,r)=>e/n[t][r])),e)}},arity:{}},"-":{evaluate:(e,n)=>{if(0===e.length)return 0;const[t,r]=Ae(e,n);if("number"===t){const[e,...n]=r;return 0===n.length?-e:n.reduce((e,n)=>e-n,e)}if("vector"===t){const e=r[0];return r.slice(1).reduce((e,n)=>e.map((e,t)=>e-n[t]),e)}{const e=r[0];return r.slice(1).reduce((e,n)=>e.map((e,t)=>e.map((e,r)=>e-n[t][r])),e)}},arity:{}},quot:{evaluate:Oe((e,n)=>Math.trunc(e/n)),arity:ne(2)},mod:{evaluate:Oe((e,n)=>e-n*Math.floor(e/n)),arity:ne(2)},"%":{evaluate:Oe((e,n)=>e%n),arity:ne(2)},sqrt:{evaluate:je(e=>Math.sqrt(e)),arity:ne(1)},cbrt:{evaluate:je(e=>Math.cbrt(e)),arity:ne(1)},"^":{evaluate:Oe((e,n)=>e**n),arity:ne(2)},round:{evaluate:([e,n],t)=>{const[r,o]=Ae([e],t);if("number"===r){if(void 0===n||0===n)return Math.round(o[0]);{Z(n,t,{integer:!0,positive:!0});const e=10**n;return Math.round(o[0]*e)/e}}if("vector"===r){const e=o[0];if(void 0===n||0===n)return e.map(e=>Math.round(e));{Z(n,t,{integer:!0,positive:!0});const r=10**n;return e.map(e=>Math.round(e*r)/r)}}{const e=o[0];if(void 0===n||0===n)return e.map(e=>e.map(e=>Math.round(e)));{Z(n,t,{integer:!0,positive:!0});const r=10**n;return e.map(e=>e.map(e=>Math.round(e*r)/r))}}},arity:{min:1,max:2}},trunc:{evaluate:je(e=>Math.trunc(e)),arity:ne(1)},floor:{evaluate:je(e=>Math.floor(e)),arity:ne(1)},ceil:{evaluate:je(e=>Math.ceil(e)),arity:ne(1)},min:{evaluate:(e,n)=>{if(1===e.length&&Ie(e[0])){const t=e[0];return Pe(t,n),t.reduce((e,n)=>Math.min(e,n),1/0)}const[t,...r]=e;return Z(t,n),r.reduce((e,t)=>(Z(t,n),Math.min(e,t)),t)},arity:{min:1}},max:{evaluate:(e,n)=>{if(1===e.length&&Ie(e[0])){const t=e[0];return Pe(t,n),t.reduce((e,n)=>Math.max(e,n),-1/0)}const[t,...r]=e;return Z(t,n),r.reduce((e,t)=>(Z(t,n),Math.max(e,t)),t)},arity:{min:1}},abs:{evaluate:je(e=>Math.abs(e)),arity:ne(1)},sign:{evaluate:je(e=>Math.sign(e)),arity:ne(1)}};function Ve([e,...n],t){const r=A(e,t);for(const e of n)if(!ae(r,A(e,t),t))return!1;return!0}const Re={"==":{evaluate:(e,n)=>Ve(e,n),arity:{min:1}},"!=":{evaluate:(e,n)=>!Ve(e,n),arity:{min:1}},"identical?":{evaluate:e=>function([e,...n]){for(const t of n)if(t!==e)return!1;return!0}(e),arity:{min:1}},">":{evaluate:([e,...n],t)=>{let r=K(e);for(const e of n){if(oe(r,K(e),t)<=0)return!1;r=K(e)}return!0},arity:{min:1}},"<":{evaluate:([e,...n],t)=>{let r=K(e);for(const e of n){if(oe(r,K(e),t)>=0)return!1;r=K(e)}return!0},arity:{min:1}},">=":{evaluate:([e,...n],t)=>{let r=K(e);for(const e of n){if(oe(r,K(e),t)<0)return!1;r=K(e)}return!0},arity:{min:1}},"<=":{evaluate:([e,...n],t)=>{let r=K(e);for(const e of n){if(oe(r,K(e),t)>0)return!1;r=K(e)}return!0},arity:{min:1}},not:{evaluate:([e])=>!e,arity:ne(1)},"epoch->iso-date":{evaluate:([e],n)=>(Z(e,n),new Date(e).toISOString()),arity:ne(1)},"iso-date->epoch":{evaluate:([e],n)=>{W(e,n);const t=new Date(e).valueOf();return Z(t,n,{finite:!0}),t},arity:ne(1)},boolean:{evaluate:([e])=>!!e,arity:ne(1)},compare:{evaluate:([e,n],t)=>(J(e,t),J(n,t),oe(e,n,t)),arity:ne(2)},"json-parse":{evaluate:([e],n)=>(W(e,n),JSON.parse(e)),arity:ne(1)},"json-stringify":{evaluate:([e,n],t)=>(j(e,t),void 0===n?JSON.stringify(e):(Z(n,t),JSON.stringify(e,null,n))),arity:{min:1,max:2}},"effect-name":{evaluate:([e],n)=>function(e,n){return L(e,n),e}(e,n).name,arity:ne(1)},"effect-matcher":{evaluate:([e],n)=>{if("string"==typeof e)return{[f]:!0,sourceCodeInfo:n,functionType:"EffectMatcher",matchType:"string",pattern:e,flags:"",arity:ne(1)};if(B(e))return{[f]:!0,sourceCodeInfo:n,functionType:"EffectMatcher",matchType:"regexp",pattern:e.s,flags:e.f,arity:ne(1)};throw new t("effect-matcher expects a string or regexp pattern",n)},arity:ne(1)},"type-of":{evaluate:([e])=>null==e?"null":"boolean"==typeof e?"boolean":"number"==typeof e?"number":"string"==typeof e?"string":D(e)?"effect":B(e)?"regexp":k(e)?"function":Array.isArray(e)?"array":"object",arity:ne(1)}},Te={keys:{evaluate:([e],n)=>(V(e,n),Object.keys(e)),arity:ne(1)},vals:{evaluate:([e],n)=>(V(e,n),Object.values(e)),arity:ne(1)},entries:{evaluate:([e],n)=>(V(e,n),Object.entries(e)),arity:ne(1)},find:{evaluate:([e,n],t)=>(V(e,t),W(n,t),re(e,n)?[n,e[n]]:null),arity:ne(2)},dissoc:{evaluate:([e,n],t)=>{V(e,t),W(n,t);const r={...e};return delete r[n],r},arity:ne(2)},merge:{evaluate:(e,n)=>{if(0===e.length)return null;const[t,...r]=e;return V(t,n),r.reduce((e,t)=>(V(t,n),{...e,...t}),{...t})},arity:{min:0}},"merge-with":{evaluate:()=>{throw new Error("merge-with is implemented in Dvala")},arity:{min:2}},zipmap:{evaluate:([e,n],t)=>{de(e,t),fe(n,t);const r=Math.min(e.length,n.length),o={};for(let a=0;a<r;a+=1){o[Y(e[a],t)]=ie(n[a])}return o},arity:ne(2)},"select-keys":{evaluate:([e,n],t)=>(de(n,t),V(e,t),n.reduce((n,t)=>(re(e,t)&&(n[t]=ie(e[t])),n),{})),arity:ne(2)}},Be={"function?":{evaluate:([e])=>k(e),arity:ne(1)},"string?":{evaluate:([e])=>"string"==typeof e,arity:ne(1)},"number?":{evaluate:([e])=>"number"==typeof e,arity:ne(1)},"integer?":{evaluate:([e])=>"number"==typeof e&&X(e,{integer:!0}),arity:ne(1)},"boolean?":{evaluate:([e])=>"boolean"==typeof e,arity:ne(1)},"null?":{evaluate:([e])=>null==e,arity:ne(1)},"zero?":{evaluate:([e],n)=>(Z(e,n,{finite:!0}),Math.abs(e)<le),arity:ne(1)},"pos?":{evaluate:([e],n)=>(Z(e,n,{finite:!0}),e>0),arity:ne(1)},"neg?":{evaluate:([e],n)=>(Z(e,n,{finite:!0}),e<0),arity:ne(1)},"even?":{evaluate:([e],n)=>(Z(e,n,{finite:!0}),e%2==0),arity:ne(1)},"odd?":{evaluate:([e],n)=>(Z(e,n,{finite:!0}),X(e,{integer:!0})&&e%2!=0),arity:ne(1)},"array?":{evaluate:([e])=>Array.isArray(e),arity:ne(1)},"collection?":{evaluate:([e])=>R(e),arity:ne(1)},"sequence?":{evaluate:([e])=>O(e),arity:ne(1)},"object?":{evaluate:([e])=>U(e),arity:ne(1)},"regexp?":{evaluate:([e])=>B(e),arity:ne(1)},"effect?":{evaluate:([e])=>D(e),arity:ne(1)},"finite?":{evaluate:([e],n)=>(Z(e,n),Number.isFinite(e)),arity:ne(1)},"positive-infinity?":{evaluate:([e],n)=>(Z(e,n),e===Number.POSITIVE_INFINITY),arity:ne(1)},"negative-infinity?":{evaluate:([e],n)=>(Z(e,n),e===Number.NEGATIVE_INFINITY),arity:ne(1)},"true?":{evaluate:([e])=>!0===e,arity:ne(1)},"false?":{evaluate:([e])=>!1===e,arity:ne(1)},"empty?":{evaluate:([e],n)=>null===e||(T(e,n),"string"==typeof e||Array.isArray(e)?0===e.length:0===Object.keys(e).length),arity:ne(1)},"not-empty?":{evaluate:([e],n)=>null!==e&&(T(e,n),"string"==typeof e||Array.isArray(e)?e.length>0:Object.keys(e).length>0),arity:ne(1)},"vector?":{evaluate:([e])=>Ie(e),arity:ne(1)},"matrix?":{evaluate:([e])=>Ce(e),arity:ne(1)},"grid?":{evaluate:([e])=>$e(e),arity:ne(1)}},_e={regexp:{evaluate:([e,n],r)=>{W(e,r);const o=e||"(?:)",a="string"==typeof n?n:"";try{new RegExp(o,a)}catch(e){throw new t(`Invalid regular expression: ${o} ${a}`,r)}return{[d]:!0,sourceCodeInfo:r,s:o,f:a}},arity:{min:1,max:2}},"re-match":{evaluate:([e,n],t)=>{if(function(e,n){if(!B(e))throw g("RegularExpression",e,n)}(n,t),!z(e))return null;const r=new RegExp(n.s,n.f).exec(e);return r?[...r]:null},arity:ne(2)},replace:{evaluate:([e,n,t],r)=>{W(e,r),_(n,r),W(t,r);const o=B(n)?new RegExp(n.s,`${n.f}`):n;return e.replace(o,t)},arity:ne(3)},"replace-all":{evaluate:([e,n,t],r)=>{W(e,r),_(n,r),W(t,r);const o=B(n)?new RegExp(n.s,`${n.f.includes("g")?n.f:`${n.f}g`}`):n;return e.replaceAll(o,t)},arity:ne(3)}},De=/^\s*$/,Le={str:{evaluate:e=>e.reduce((e,n)=>e+(null==n?"":U(n)||Array.isArray(n)?JSON.stringify(n):`${n}`),""),arity:{}},number:{evaluate:([e],n)=>{W(e,n);const r=Number(e);if(Number.isNaN(r))throw new t(`Could not convert '${e}' to a number.`,n);return r},arity:ne(1)},"lower-case":{evaluate:([e],n)=>(W(e,n),e.toLowerCase()),arity:ne(1)},"upper-case":{evaluate:([e],n)=>(W(e,n),e.toUpperCase()),arity:ne(1)},trim:{evaluate:([e],n)=>(W(e,n),e.trim()),arity:ne(1)},join:{evaluate:([e,n],t)=>(fe(e,t),e.forEach(e=>J(e,t)),W(n,t),e.join(n)),arity:ne(2)},split:{evaluate:([e,n,t],r)=>{W(e,r),_(n,r),void 0!==t&&Z(t,r,{integer:!0,nonNegative:!0});const o="string"==typeof n?n:new RegExp(n.s,n.f);return e.split(o,t)},arity:{min:2,max:3}},"blank?":{evaluate:([e],n)=>null===e||(W(e,n),De.test(e)),arity:ne(1)}},Fe={"|>":{evaluate:()=>{throw new Error("|> is implemented in Dvala")},arity:ne(2)},apply:{evaluate:()=>{throw new Error("apply is implemented in Dvala")},arity:{min:2}},identity:{evaluate:([e])=>ie(e),arity:ne(1)},comp:{evaluate:(e,n)=>{return e.forEach(e=>q(e,n)),{[f]:!0,sourceCodeInfo:n,functionType:"Comp",params:e,arity:e.length>0?(t=e.at(-1),"number"==typeof t||R(t)?ne(1):t.arity):{min:1,max:1}};var t},arity:{}},constantly:{evaluate:([e],n)=>({[f]:!0,sourceCodeInfo:n,functionType:"Constantly",value:ie(e),arity:{}}),arity:ne(1)}};function qe(e){return ce(`\n ${e.title}\n\n ${e.description.replace(/`(.+?)`/g,"$1").replace(/\$(\w+)/g,"$1").replace(/\*\*\*(.+)\*\*\*/g,"$1").replace(/\*\*(.+)\*\*/g,"$1")}\n\n Signature:\n ${function(e){const{title:n,variants:t,args:r,returns:o}=e,a=!ze(e)&&e._isOperator,i=t.map(t=>{if(ze(e)){const e=t.argumentNames.length>0?`, ${t.argumentNames.map(e=>{let n="";return r[e].rest&&(n+="..."),n+=e,n}).join(", ")}`:"";return` perform(effect(${n})${e}) -> ${We(o)}`}return`${` ${n}(${t.argumentNames.map(e=>{let n="";return r[e].rest&&(n+="..."),n+=e,n}).join(", ")})`} -> ${We(o)}`}),s=a?["","Operator:",` a ${n} b -> ${We(o)}`]:[];return[...i,...s]}(e).join("\n ")}\n\n Arguments:\n ${function(e){return Object.entries(e.args).map(([e,n])=>`${e}: ${We(n)}`)}(e).join("\n ")}\n\n Examples:\n${e.examples.map(e=>ce(e,4)).join("\n\n")}`)}function ze(e){return"effect"in e}function We(e){const n=e.type,t=(Array.isArray(n)?n:[n]).join(" | ");return e.array||e.rest?`Array<${t}>`:t}const Ye={sum:{evaluate:([e],n)=>(Ne(e,n),e.reduce((e,n)=>e+n,0)),arity:ne(1)},prod:{evaluate:([e],n)=>(Ne(e,n),e.reduce((e,n)=>e*n,1)),arity:ne(1)},mean:{evaluate:([e],n)=>(Pe(e,n),e.reduce((e,n)=>e+n,0)/e.length),arity:ne(1)},median:{evaluate:([e],n)=>(Pe(e,n),function(e){const n=[...e].sort((e,n)=>e-n),t=Math.floor(n.length/2);return n.length%2==0?(n[t-1]+n[t])/2:n[t]}(e)),arity:ne(1)}},Ge={...H,...te,...he,...ye,...me,...Ue,...function(e,n){return{doc:{evaluate:([t],r)=>{if(w(e),D(t)){const e=`-effect-${t.name}`,r=n[e];return r?qe(r):""}if(q(t,r),!k(t))return"";if("Builtin"===t.functionType){const n=e[t.name];return n?qe(n):""}return"UserDefined"===t.functionType?t.docString:""},arity:ne(1)},arity:{evaluate:([e],t)=>{if(D(e)){const t=`-effect-${e.name}`,r=n[t];if(!r)return{};const o=r.variants.map(e=>e.argumentNames.length);return{min:Math.min(...o),max:Math.max(...o)}}return q(e,t),k(e)?e.arity:ne(1)},arity:ne(1)}}}({},{}),...Re,...Te,...Be,..._e,...Le,...Fe,...Ye};Object.entries(Ge).forEach(([e,n])=>{n.name=e});const Ke={...Ge},Je={},He=[];Object.entries(Ke).forEach(([e,n],t)=>{Je[e]=t,He.push(n)});const Xe={arity:{},evaluateAsNormalExpression:(e,n)=>{let t=!0;for(const r of e)if(t=A(r,n),!t)break;return t},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1],n,r,o)},Ze=11,Qe=12,en=13,nn=14,tn=15,rn=16;function on(e,n){return e instanceof Promise?e.then(n):n(e)}async function an(e,n,t,r,o){n.push(await e);for(let e=o+1;e<t.length;e++)n.push(await r(t[e],e));return n}function sn(e,n,t){let r=t;for(let t=0;t<e.length;t++){const o=n(r,e[t],t);if(o instanceof Promise)return un(o,e,n,t);r=o}return r}async function un(e,n,t,r){let o=await e;for(let e=r+1;e<n.length;e++)o=await t(o,n[e],e);return o}function ln(e,n){for(let t=0;t<e.length;t++){const r=n(e[t],t);if(r instanceof Promise)return cn(r,e,n,t)}}async function cn(e,n,t,r){await e;for(let e=r+1;e<n.length;e++)await t(n[e],e)}function fn(e,n){if(e[0]===en)Object.values(e[1][0]).forEach(e=>{e[1][1]&&n(e[1][1]),fn(e,n)});else if(e[0]===nn)for(let t=0;t<e[1][0].length;t+=1){const r=e[1][0][t]??null;null!==r&&(r[1][1]&&n(r[1][1]),fn(r,n))}}function dn(e,n,t){const r=e[2],o={};return on(pn(e,n,t,r,o),()=>o)}function pn(e,n,r,o,a){if(e[0]===en){!function(e,n){if(!x(e))throw new t(`Expected UnknownRecord, got ${m(e)}.`,v(e,n))}(n,o);const i=new Set;let s;return on(ln(Object.entries(e[1][0]),([e,t])=>{if(t[0]===Qe)return void(s=t);i.add(e);const u=n[e];return on(void 0!==u?u:t[1][1]?r(t[1][1]):null,e=>{const n=e??null;return j(n,o),pn(t,n,r,o,a)})}),()=>{if(s){const e=Object.entries(n).filter(([e])=>!i.has(e)).reduce((e,[n,t])=>(e[n]=A(t),e),{});a[s[1][0]]=e}})}if(e[0]===nn){let t=null;fe(n,o);const i=[];for(let n=0;n<e[1][0].length;n+=1){const r=e[1][0][n]??null;if(null!==r){if(r[0]===Qe){t=n;break}i.push({element:r,index:n})}}return on(ln(i,({element:e,index:t})=>{const i=n[t];return on(void 0!==i?i:e[1][1]?r(e[1][1]):null,n=>{const t=n??null;return j(t,o),pn(e,t,r,o,a)})}),()=>{if(null!==t){const r=n.slice(t),o=e[1][0][t];a[o[1][0]]=r}})}e[0]===Qe?a[e[1][0]]=A(n):a[e[1][0][1]]=A(n)}function hn(e){const n={};return yn(e,n),n}function yn(e,n){if(null!==e)if(e[0]===nn)for(const t of e[1][0])yn(t,n);else if(e[0]===en)for(const t of Object.values(e[1][0]))yn(t,n);else if(e[0]===Qe){if(n[e[1][0]])throw new t(`Duplicate binding name: ${e[1][0]}`,e[2]);n[e[1][0]]=!0}else if(e[0]===Ze){if(n[e[1][0][1]])throw new t(`Duplicate binding name: ${e[1][0]}`,e[2]);n[e[1][0][1]]=!0}}function mn(e,n,t){const r={};return on(vn(e,n,t,r),e=>e?r:null)}function vn(e,n,t,r){if(e[0]===rn)return!0;if(e[0]===tn){const r=e[1][0];return on(t(r),e=>ae(n,e))}if(e[0]===Ze){const o=e[1][0],a=e[1][1];if(null==n){if(a)return on(t(a),e=>(r[o[1]]=A(e),!0));r[o[1]]=n??null}else r[o[1]]=A(n);return!0}if(e[0]===en){if(!x(n))return!1;const o=new Set;let a;const i=Object.entries(e[1][0]);let s=!0;for(const[e,u]of i)s=on(s,i=>{if(!i)return!1;if(u[0]===Qe)return a=u,!0;o.add(e);const s=n[e];if(void 0===s&&u[0]===tn)return on(t(u[1][0]),e=>ae(void 0,e));return on(void 0!==s?s:u[1]&&u[1][1]?t(u[1][1]):null,e=>vn(u,e??null,t,r))});return on(s,e=>{if(!e)return!1;if(a){const e=Object.entries(n).filter(([e])=>!o.has(e)).reduce((e,[n,t])=>(e[n]=A(t),e),{});r[a[1][0]]=e}return!0})}{const o=e;if(!Array.isArray(n))return!1;const a=o[1][0];let i=null;for(let e=0;e<a.length;e+=1){const n=a[e];if(null!==n&&n[0]===Qe){i=e;break}}if(null===i&&n.length!==a.length)return!1;if(null!==i&&n.length<i)return!1;let s=!0;for(let e=0;e<a.length;e+=1){const o=a[e];if(null===o)continue;if(o[0]===Qe){r[o[1][0]]=n.slice(e);break}const i=o;s=on(s,o=>!!o&&vn(i,A(n[e]),t,r))}return s}}const gn={arity:{},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>{const a=new Set;t([e[1][1]],n,r,o).forEach(e=>a.add(e));for(const[i,s,u]of e[1][2]){const e={};Object.assign(e,hn(i));const l=n.create(e);u&&t([u],l,r,o).forEach(e=>a.add(e)),t([s],l,r,o).forEach(e=>a.add(e))}return a}},bn={arity:ne(1),getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t([e[1][1]],n,r,o)},wn={arity:{},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>{const a=t(e[1][1],n.create({}),r,o),i=e[1][2];if(!i||0===i.length)return a;let s=new Set;for(const[e,a]of i){s=se(s,t([e],n,r,o),t([a],n,r,o))}return se(a,s)}},xn={arity:{},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>function(e,n,t,r,o){const a=new Set,i={self:{value:null}};e[0].forEach(e=>{Object.assign(i,hn(e)),fn(e,e=>{ue(a,t([e],n,r,o))})});const s=n.create(i),u=t(e[1],s,r,o);return ue(a,u),a}(e[1][1],n,t,r,o)};const kn={arity:ne(0),getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>{const a=e[1][1],i=a[1][0],s=a[1][1],u=t([s],n,r,o);return fn(i,e=>{ue(u,t([e],n,r,o))}),n.addValues(hn(i),i[2]),u}},En={arity:{},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>{const a=e[1][1],i=a.reduce((e,n)=>{const t=hn(n[1][0]);return Object.keys(t).forEach(n=>{e[n]={value:!0}}),e},{});return se(t(a.map(e=>e[1][1]),n,r,o),t([e[1][2]],n.create(i),r,o))}};function Sn(e,n,t,r,o){const a=new Set,i={},[,s,u]=e[1];return s.forEach(e=>{const[s,u,l,c]=e,[f,d]=s[1];t([d],n.create(i),r,o).forEach(e=>a.add(e)),Object.assign(i,hn(f)),u&&u.forEach(e=>{const[s,u]=e[1];t([u],n.create(i),r,o).forEach(e=>a.add(e)),Object.assign(i,hn(s))}),l&&t([l],n.create(i),r,o).forEach(e=>a.add(e)),c&&t([c],n.create(i),r,o).forEach(e=>a.add(e))}),t([u],n.create(i),r,o).forEach(e=>a.add(e)),a}const In={arity:ne(1),getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>Sn(e,n,t,r,o)},Nn={arity:ne(1),getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>Sn(e,n,t,r,o)},Pn={arity:{},evaluateAsNormalExpression:(e,n)=>{let t=!1;for(const r of e)if(t=A(r,n),t)break;return t},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1],n,r,o)},$n={arity:{min:1},evaluateAsNormalExpression:(e,n)=>{for(const t of e){const e=A(t,n);if(null!==e)return e}return null},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1],n,r,o)},Cn={arity:{},evaluateAsNormalExpression:e=>{throw new n(e)},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1],n,r,o)},An={arity:{},evaluateAsNormalExpression:(e,n)=>{const t=[];for(const r of e)t.push(A(r,n));return t},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1],n,r,o)},jn={arity:{},getUndefinedSymbols:()=>new Set},On={arity:{},evaluateAsNormalExpression:(e,n)=>{const t={};for(let r=0;r<e.length;r+=2){const o=e[r],a=e[r+1];W(o,n),t[o]=a??null}return t},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1],n,r,o)},Mn={arity:ne(1),getUndefinedSymbols:()=>new Set},Un={arity:{min:1},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>se(...e[1][1].map(e=>t([e],n,r,o)))},Vn={arity:{min:1},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>{const[,a,i]=e[1];return se(t([a],n,r,o),t(i,n,r,o))}},Rn={arity:{min:1},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>se(...e[1][1].map(e=>t([e],n,r,o)))},Tn={"??":0,"&&":1,"||":2,array:3,cond:4,"defined?":5,block:6,doseq:7,"0_lambda":8,for:9,if:10,let:11,loop:12,object:13,recur:14,match:15,unless:16,import:17,effect:18,perform:19,parallel:20,race:21},Bn=[$n,Xe,Pn,An,{arity:{},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1].flat(),n,r,o)},bn,wn,Nn,xn,In,{arity:{min:2,max:3},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1].filter(e=>!!e),n,r,o)},kn,En,On,Cn,gn,{arity:{},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1].filter(e=>!!e),n,r,o)},Mn,jn,Vn,Un,Rn],_n={normalExpressions:Ke,specialExpressions:Bn,allNormalExpressions:He},Dn=Object.keys(Ke),Ln=Object.keys(Tn);function Fn(e){return s.UserDefinedSymbol===e[0]}function qn(e,n){return function(e,n){if(!Fn(e))throw g("UserDefinedSymbolNode",e,n)}(e,n),e}function zn(e){return s.NormalBuiltinSymbol===e[0]}function Wn(e){return s.SpecialBuiltinSymbol===e[0]}function Yn(e){return!!function(e){return e[0]===s.NormalExpression}(e)&&function(e){const n=e[0];return s.UserDefinedSymbol===n||s.NormalBuiltinSymbol===n||s.SpecialBuiltinSymbol===n}(e[1][0])}function Gn(e){return e[0]===s.Spread}const Kn=(e,n,t,r)=>{const o=Array.isArray(e)?e:[[s.SpecialExpression,[Tn.block,e.body,void 0]]],a=new Set;for(const e of o)Jn(e,n,t,r)?.forEach(e=>a.add(e));return a};function Jn(e,n,r,o){const a=e[0];switch(a){case s.UserDefinedSymbol:{const t=e;return null===n.lookUp(t)?new Set([t[1]]):null}case s.NormalBuiltinSymbol:case s.SpecialBuiltinSymbol:case s.String:case s.Number:case s.ReservedSymbol:case s.Binding:return null;case s.NormalExpression:{const t=e,a=new Set;if(Yn(t)){const[,[e]]=t;if(Fn(e)){null===n.lookUp(e)&&a.add(e[1])}}else{const[,[e]]=t;Jn(e,n,r,o)?.forEach(e=>a.add(e))}for(const e of t[1][1])Jn(e,n,r,o)?.forEach(e=>a.add(e));return a}case s.SpecialExpression:{const t=e,a=t[1][0];return(0,r.specialExpressions[a].getUndefinedSymbols)(t,n,{getUndefinedSymbols:Kn,builtin:r,evaluateNode:o})}case s.Spread:return Jn(e[1],n,r,o);default:throw new t(`Unhandled node type: ${a}`,e[2])}}const Hn=["^","*","/","%","+","-","<<",">>",">>>","++","<","<=","≤",">",">=","≥","==","!=","!=","&","xor","|","&&","||","??","|>"],Xn=[...Hn,"?",":","->","...",".",",","=",":",";"],Zn=new Set(["comment","cond","defined?","block","doseq","if","let","loop","recur","unless","while"]);function Qn(e){return!Zn.has(e)}const et=new Set(Hn);function nt(e){return et.has(e)}const tt=new Set(Xn);function rt(e){return tt.has(e)}function ot(e,n){return"Symbol"===e?.[0]&&(!n||e[1]===n)}function at(e,n){return function(e,n){ot(e,n)||Nt("Symbol",void 0,e)}(e,n),e}function it(e,n){return"ReservedSymbol"===e?.[0]&&(!n||e[1]===n)}function st(e,n){it(e,n)||Nt("ReservedSymbol",n,e)}function ut(e,n){return st(e,n),e}function lt(e,n){return"Operator"===e?.[0]&&(!n||e[1]===n)}function ct(e,n){lt(e,n)||Nt("Operator",n,e)}function ft(e){return"Number"===e?.[0]}function dt(e){return"BasePrefixedNumber"===e?.[0]}function pt(e){return"LParen"===e?.[0]}function ht(e){pt(e)||Nt("LParen",void 0,e)}function yt(e){return"RParen"===e?.[0]}function mt(e){yt(e)||Nt("RParen",void 0,e)}function vt(e){return"LBracket"===e?.[0]}function gt(e){return function(e){vt(e)||Nt("LBracket",void 0,e)}(e),e}function bt(e){return"RBracket"===e?.[0]}function wt(e){bt(e)||Nt("RBracket",void 0,e)}function xt(e){return"LBrace"===e?.[0]}function kt(e){return function(e){xt(e)||Nt("LBrace",void 0,e)}(e),e}function Et(e){return"RBrace"===e?.[0]}function St(e){return"string"===e?.[0]}function It(e){return"Operator"===e?.[0]&&nt(e[1])}function Nt(e,n,r){const o=r?`${r[0]} '${r[1]}'`:"end of input";throw new t(`Unexpected token: ${o}, expected ${e}${n?` '${n}'`:""}`,r?.[2])}function Pt(e,n){return n&&(e[2]=n),e}function $t(e,n){return void 0!==Tn[e]&&"fn"!==e&&"defn"!==e?Pt([s.SpecialBuiltinSymbol,Tn[e]],n):void 0!==Je[e]?Pt([s.NormalBuiltinSymbol,Je[e]],n):Pt([s.UserDefinedSymbol,e],n)}function Ct(e){return e.substring(1,e.length-1).replace(/(\\{2})|(\\')|\\(.)/g,(e,n,t,r)=>n?"\\":t?"'":`\\${r}`)}const At=Object.entries(Je).reduce((e,[n,t])=>(e[t]=n,e),[]),jt=Object.entries(Tn).reduce((e,[n,t])=>(e[t]=n,e),[]);function Ot(e){return Fn(e)?e[1]:zn(e)?At[e[1]]:jt[e[1]]}function Mt(e,n,t){const r=Pt([s.NormalExpression,[e,n]],t);return zn(e)&&ee(He[e[1]].arity,r[1][1].length,t),r}function Ut(e){if(e.isAtEnd())return!0;const n=e.tryPeek();return lt(n)?[";",",",":"].includes(n[1]):!!it(n)&&["else","when","while","case","let","then","end","do"].includes(n[1])}function Vt(e,n,r,o,a){const i=e[1];switch(i){case"^":case"*":case"/":case"%":case"+":case"-":case"<<":case">>":case">>>":case"++":case"<":case"<=":case"≤":case">":case">=":case"≥":case"==":case"!=":case"&":case"xor":case"|":case"|>":return Mt(n,[r,o],a);case"&&":case"||":case"??":return Pt([s.SpecialExpression,[Tn[i],[r,o]]],a);default:throw new t(`Unknown binary operator: ${i}`,a)}}class Rt{tokens;position;storedPosition=0;parseExpression;constructor(e){this.tokens=e.tokens,this.position=0}advance(){this.position+=1}tryPeek(){return this.tokens[this.position]}peek(){const e=this.tokens[this.position];if(!e){const e=this.tokens.at(-1),n=e?e[2]:void 0;throw new t("Unexpected end of input",n)}return e}isAtEnd(){return this.position>=this.tokens.length}peekSourceCodeInfo(){const e=this.tryPeek();return e?e[2]:this.tokens.at(-1)?.[2]}storePosition(){return this.storedPosition=this.position}restorePosition(){this.position=this.storedPosition}peekAhead(e){return this.tokens[this.position+e]}getPosition(){return this.position}getTokenAt(e){return this.tokens[e]}}function Tt(e,n){switch(e){case"^":return 12;case"*":case"/":case"%":return 11;case"+":case"-":return 10;case"<<":case">>":case">>>":return 9;case"++":return 8;case"<":case"<=":case"≤":case">":case">=":case"≥":return 7;case"==":case"!=":return 6;case"&":case"xor":case"|":return 5;case"&&":case"||":case"??":return 4;case"|>":return 2;default:throw new t(`Unknown binary operator: ${e}`,n)}}function Bt(e,n){const r=[];for(;!e.isAtEnd()&&!_t(e,n);)lt(e.tryPeek(),";")?e.advance():r.push(e.parseExpression());if(function(e,n){if(!_t(e,n))throw new t(`Expected ${n.map(e=>e[1]).join(" or ")}`,e.peekSourceCodeInfo())}(e,n),0===r.length)throw new t("Expected expression",e.peekSourceCodeInfo());return 1===r.length?r[0]:Pt([s.SpecialExpression,[Tn.block,r,void 0]],e.peekSourceCodeInfo())}function _t(e,n){for(const t of n)if(it(e.tryPeek(),t))return!0;return!1}function Dt(e,n){e.advance();const t=n[1].substring(1,n[1].length-1).replace(/(\\{2})|(\\")|(\\n)|(\\t)|(\\r)|(\\b)|(\\f)|\\(.)/g,(e,n,t,r,o,a,i,s,u)=>n?"\\":r?"\n":o?"\t":a?"\r":i?"\b":s?"\f":t?'"':u);return Pt([s.String,t],n[2])}function Lt(e,n=!1){const r=ut(e.tryPeek(),"do");e.advance();let o="";n&&function(e){return"DocString"===e?.[0]}(e.tryPeek())&&(o=function(e){const n=e.peek(),t=n[2]?["string",n[1].slice(2,-2),n[2]]:["string",n[1].slice(2,-2)],r=Dt(e,t);return ce(r[1])}(e),e.isAtEnd()||it(e.tryPeek(),"end")||it(e.tryPeek(),"with")||(ct(e.tryPeek(),";"),e.advance()));const a=[];for(;!e.isAtEnd()&&!it(e.tryPeek(),"end")&&!it(e.tryPeek(),"with");)if(a.push(e.parseExpression()),lt(e.tryPeek(),";"))e.advance();else if(!it(e.tryPeek(),"end")&&!it(e.tryPeek(),"with"))throw new t("Expected end",e.peekSourceCodeInfo());let i;if(it(e.tryPeek(),"with"))for(e.advance(),i=[];!e.isAtEnd()&&!it(e.tryPeek(),"end");){st(e.tryPeek(),"case"),e.advance();const n=e.parseExpression();st(e.tryPeek(),"then"),e.advance();const t=Bt(e,["case","end"]);i.push([n,t])}return st(e.tryPeek(),"end"),e.advance(),[Pt([s.SpecialExpression,[Tn.block,a,i]],r[2]),o]}function Ft(e){const n=e.peek();if(e.advance(),!ot(n))throw new t(`Expected symbol token, got ${n[0]}`,n[2]);return"'"===n[1][0]?$t(Ct(n[1]),n[2]):$t(n[1],n[2])}function qt(e){const n=e.peek();e.advance();const t=n[1],r="-"===t[0],o=(r?t.substring(1):t).replace(/_/g,"");return Pt([s.Number,r?-Number(o):Number(o)],n[2])}function zt(e,{requireDefaultValue:n,noRest:r,allowLiteralPatterns:o}={}){const a=e.tryPeek();if(o&&it(a,"_"))return e.advance(),Pt([rn,[]],a[2]);if(o&&Yt(a)){if(ft(a)||dt(a)){const n=qt(e);return Pt([tn,[n]],a[2])}if(St(a)){const n=Dt(e,a);return Pt([tn,[n]],a[2])}if(it(a,"true")){e.advance();const n=Pt([s.ReservedSymbol,"true"],a[2]);return Pt([tn,[n]],a[2])}if(it(a,"false")){e.advance();const n=Pt([s.ReservedSymbol,"false"],a[2]);return Pt([tn,[n]],a[2])}if(it(a,"null")){e.advance();const n=Pt([s.ReservedSymbol,"null"],a[2]);return Pt([tn,[n]],a[2])}}if(ot(a)){const r=Ft(e);if(!Fn(r))throw new t("Expected user defined symbol",a[2]);const o=Wt(e);if(n&&!o)throw new t("Expected assignment",e.peekSourceCodeInfo());return Pt([Ze,[r,o]],a[2])}if(lt(a,"...")){if(r)throw new t("Rest element not allowed",a[2]);e.advance();const n=qn(Ft(e));if(lt(e.tryPeek(),"="))throw new t("Rest argument can not have default value",e.peekSourceCodeInfo());return Pt([Qe,[n[1],void 0]],a[2])}if(vt(a)){e.advance();const r=[];let i=e.peek(),s=!1;for(;!bt(i);){if(s)throw new t("Rest argument must be last",i[2]);if(lt(i,",")){r.push(null),e.advance(),i=e.peek();continue}const n=zt(e,{allowLiteralPatterns:o});n[0]===Qe&&(s=!0),r.push(n),i=e.peek(),bt(i)||(ct(i,","),e.advance()),i=e.peek()}e.advance();const u=Wt(e);if(n&&!u)throw new t("Expected assignment",e.peekSourceCodeInfo());return Pt([nn,[r,u]],a[2])}if(xt(a)){e.advance();const r={};let i=e.peek(),s=!1;for(;!Et(i);){if(s)throw new t("Rest argument must be last",i[2]);lt(i,"...")&&(s=!0,e.advance());const n=Ft(e),u=Ot(n);if(i=e.peek(),it(i,"as")){if(s)throw new t("Rest argument can not have alias",i[2]);e.advance();const n=qn(Ft(e));if(r[n[1]])throw new t(`Duplicate binding name: ${n}`,i[2]);r[u]=Pt([Ze,[n,Wt(e)]],a[2])}else if(Et(i)||lt(i,",")||lt(i,"=")){const o=qn(n,n[2]);if(r[o[1]])throw new t(`Duplicate binding name: ${o}`,i[2]);if(s&&lt(e.tryPeek(),"="))throw new t("Rest argument can not have default value",e.peekSourceCodeInfo());r[o[1]]=Pt(s?[Qe,[o[1],Wt(e)]]:[Ze,[o,Wt(e)]],a[2])}else if(lt(i,":")){if(e.advance(),i=e.peek(),o){if(!xt(i)&&!vt(i)&&!Yt(i))throw new t("Expected literal, object or array pattern",i[2])}else if(!xt(i)&&!vt(i))throw new t("Expected object or array",i[2]);r[u]=zt(e,{allowLiteralPatterns:o})}Et(e.peek())||(ct(e.peek(),","),e.advance()),i=e.peek()}e.advance(),i=e.peek();const u=Wt(e);if(n&&!u)throw new t("Expected assignment",i[2]);return Pt([en,[r,u]],a[2])}throw new t("Expected symbol",e.peekSourceCodeInfo())}function Wt(e){if(lt(e.tryPeek(),"="))return e.advance(),e.parseExpression()}function Yt(e){return ft(e)||dt(e)||St(e)||it(e,"true")||it(e,"false")||it(e,"null")}function Gt(e,n){e.advance();const t=zt(e,{requireDefaultValue:!0,noRest:!0}),r=t[1][1];t[1][1]=void 0;const o=Pt([s.Binding,[t,r]],n[2]);return Pt([s.SpecialExpression,[Tn.let,o]],n[2])}function Kt(e){const n=function(e){const n=at(e.tryPeek()),t=qn(Ft(e));st(e.tryPeek(),"in"),e.advance();const r=e.parseExpression();return Pt([s.Binding,[Pt([Ze,[t,void 0]],n[2]),r]],n[2])}(e),r=[];let o=e.peek();Jt(o,["let","when","while"]);const a=[];if("let"===o[1])for(r.push("&let");ot(o,"let");){const n=Gt(e,o),r=a.flatMap(e=>Object.keys(hn(e[1][0])));if(Object.keys(hn(n[1][1][1][0])).some(e=>r.includes(e)))throw new t("Duplicate binding",n[1][1][2]);a.push(n[1][1]),o=e.peek(),Jt(o,["let","when","while"]),o=e.peek()}let i,u;for(;it(o,"when")||it(o,"while");){e.advance(),"when"===o[1]?(r.push("&when"),i=e.parseExpression()):(r.push("&while"),u=e.parseExpression()),o=e.peek();Jt(o,r.includes("&when")&&r.includes("&while")?[]:r.includes("&when")?["while"]:["when"]),o=e.peek()}return Jt(o,[]),[n,a,i,u]}function Jt(e,n){if(!function(e,n){if(lt(e,",")||yt(e))return!0;for(const t of n){if("let"===t&&ot(e,"let"))return!0;if(["when","while"].includes(t)&&it(e,t))return!0}return!1}(e,n)){const r=`${[...n,","].map(e=>`"${e}"`).join(", ")} or ")"`;throw new t(`Expected symbol ${r}`,e[2])}}const Ht=(1+Math.sqrt(5))/2,Xt={E:Math.E,"-E":-Math.E,"ε":Math.E,"-ε":-Math.E,PI:Math.PI,"-PI":-Math.PI,"π":Math.PI,"-π":-Math.PI,PHI:Ht,"-PHI":-Ht,"φ":Ht,"-φ":-Ht,POSITIVE_INFINITY:Number.POSITIVE_INFINITY,"∞":Number.POSITIVE_INFINITY,NEGATIVE_INFINITY:Number.NEGATIVE_INFINITY,"-∞":Number.NEGATIVE_INFINITY,MAX_SAFE_INTEGER:Number.MAX_SAFE_INTEGER,MIN_SAFE_INTEGER:Number.MIN_SAFE_INTEGER,MAX_VALUE:Number.MAX_VALUE,MIN_VALUE:Number.MIN_VALUE,NaN:Number.NaN},Zt={true:!0,false:!1,null:null,do:null,else:null,case:null,each:null,in:null,when:null,while:null,function:null,as:null,then:null,end:null,with:null,_:null,...Xt};function Qt(e){const n=ut(e.tryPeek());e.advance();const t=n[1];return function(e){return e in Xt}(t)?Pt([s.Number,Xt[t]],n[2]):Pt([s.ReservedSymbol,n[1]],n[2])}const er=/^\$([1-9]\d?)?$/;function nr(e){const n=e.peek();if(pt(n)&&ot(e.peekAhead(1))&&lt(e.peekAhead(2),"->"))return null;try{const r=function(e){const n=e.peek();if(ot(n))return[Pt([Ze,[Ft(e),void 0]],n[2])];ht(n),e.advance();let r=!1,o=!1;const a=[];for(;!e.isAtEnd()&&!yt(e.peek())&&!ot(e.peek(),"let");){if(r)throw new t("Rest argument must be last",e.peekSourceCodeInfo());const n=zt(e);if(void 0!==n[1][1]&&(o=!0),n[0]===Qe&&(r=!0),o&&!n[1][1])throw new t("Default arguments must be last",e.peekSourceCodeInfo());if(a.push(n),!lt(e.peek(),",")&&!yt(e.peek())&&!ot(e.peek(),"let"))throw new t("Expected comma or closing parenthesis",e.peekSourceCodeInfo());lt(e.peek(),",")&&e.advance()}if(!yt(e.peek()))throw new t("Expected closing parenthesis",e.peekSourceCodeInfo());return e.advance(),a}(e);if(!lt(e.peek(),"->"))return null;let o;e.advance();let a="";if(it(e.peek(),"do")){const n=Lt(e,!0);a=n[1];const t=n[0],r=t[1][2];o=r&&r.length>0?[t]:t[1][1]}else o=[e.parseExpression()];return Pt([s.SpecialExpression,[Tn["0_lambda"],[r,o],a]],n[2])}catch{return null}}function tr(e,n){if(e.advance(),Wn(n)&&n[1]===Tn.effect)return function(e,n){const r=n[2],o=e.peek();if(!ot(o))throw new t("effect expects a dotted name identifier",o[2]);let a=o[1];e.advance();for(;lt(e.tryPeek(),".");){e.advance();const n=e.peek();if(!ot(n))throw new t("Expected identifier after dot in effect name",n[2]);a+=`.${n[1]}`,e.advance()}if(!yt(e.tryPeek()))throw new t("Expected closing parenthesis after effect name",e.peekSourceCodeInfo());return e.advance(),Pt([s.SpecialExpression,[Tn.effect,a]],r)}(e,n);const r=[];for(;!e.isAtEnd()&&!yt(e.tryPeek());){lt(e.tryPeek(),"...")?(e.advance(),r.push(Pt([s.Spread,e.parseExpression()],e.peekSourceCodeInfo()))):r.push(e.parseExpression());const n=e.tryPeek();if(!lt(n,",")&&!yt(n))throw new t("Expected comma or closing parenthesis",e.tryPeek()?.[2]);lt(n,",")&&e.advance()}if(!yt(e.tryPeek()))throw new t("Expected closing parenthesis",e.peekSourceCodeInfo());if(e.advance(),!Wn(n))return zn(n)||Fn(n)?Mt(n,r,n[2]):Pt([s.NormalExpression,[n,r]],n[2]);{const e=n[1];if(e===Tn.import){if(1!==r.length)throw new t(`import expects exactly 1 argument, got ${r.length}`,n[2]);const o=r[0];if(!Fn(o))throw new t("import expects a module name (symbol), got a non-symbol argument",o[2]??n[2]);const a=o[1];return Pt([s.SpecialExpression,[e,a]],n[2])}const o=e;switch(ee(_n.specialExpressions[o].arity,r.length,n[2]),o){case Tn["||"]:case Tn["&&"]:case Tn.recur:case Tn.array:case Tn.object:case Tn["??"]:return Pt([s.SpecialExpression,[o,r]],n[2]);case Tn["defined?"]:{const[e]=r;return Pt([s.SpecialExpression,[o,e]],n[2])}case Tn.perform:{const[e,...t]=r;return Pt([s.SpecialExpression,[o,e,t]],n[2])}case Tn.parallel:case Tn.race:return Pt([s.SpecialExpression,[o,r]],n[2]);case Tn["0_lambda"]:throw new t(`${o} is not allowed`,n[2]);default:throw new t(`Unknown special expression: ${o}`,n[2])}}}function rr(e){const n=kt(e.tryPeek());e.advance();const r=[];for(;!e.isAtEnd()&&!Et(e.tryPeek());){if(lt(e.tryPeek(),"..."))e.advance(),r.push(Pt([s.Spread,e.parseExpression()],e.peekSourceCodeInfo()));else{const n=e.tryPeek();if(St(n)){const t=Dt(e,n);r.push(Pt([s.String,t[1]],n[2]))}else if(ot(n)){const t=n[1].startsWith("'")?Ct(n[1]):n[1];r.push(Pt([s.String,t],n[2])),e.advance()}else{if(!vt(n))throw new t("Expected key to be a symbol or a string",e.peekSourceCodeInfo());e.advance(),r.push(e.parseExpression()),wt(e.tryPeek()),e.advance()}ct(e.tryPeek(),":"),e.advance(),r.push(e.parseExpression())}const n=e.tryPeek();if(!lt(n,",")&&!Et(n))throw new t("Expected comma or closing brace",e.peekSourceCodeInfo());lt(n,",")&&e.advance()}var o;return Et(o=e.tryPeek())||Nt("RBrace",void 0,o),e.advance(),Pt([s.SpecialExpression,[Tn.object,r]],n[2])}function or(e){let n=function(e){const n=e.peek();if(pt(n)){e.storePosition();const n=nr(e);if(n)return n;e.restorePosition(),e.advance();const r=e.parseExpression();if(!yt(e.peek()))throw new t("Expected closing parenthesis",e.peekSourceCodeInfo());return e.advance(),r}if(lt(n)){const r=n[1];if(nt(r))return e.advance(),Pt(void 0!==Tn[r]?[s.SpecialBuiltinSymbol,Tn[r]]:[s.NormalBuiltinSymbol,Je[r]],n[2]);if("->"===r)return function(e){const n=e.peek();e.advance();const r=e.getPosition();let o,a="";if(it(e.peek(),"do")){const n=Lt(e,!0);a=n[1];const t=n[0],r=t[1][2];o=r&&r.length>0?[t]:t[1][1]}else o=[e.parseExpression()];const i=e.getPosition()-1;let u=0,l="NOT_SET";for(let o=r;o<=i;o+=1){const r=e.getTokenAt(o);if(ot(r)){const e=er.exec(r[1]);if(e){const r=e[1]??"1";if("1"===r){if(!e[1]&&"WITH_1"===l||e[1]&&"NAKED"===l)throw new t("Please make up your mind, either use $ or $1",n[2]);l=e[1]?"WITH_1":"NAKED"}if(u=Math.max(u,Number(r)),u>20)throw new t("Can't specify more than 20 arguments",n[2])}}}const c=[];for(let e=1;e<=u;e+=1)1===e&&"NAKED"===l?c.push(Pt([Ze,[[s.UserDefinedSymbol,"$"],void 0]],n[2])):c.push(Pt([Ze,[[s.UserDefinedSymbol,`$${e}`],void 0]],n[2]));return Pt([s.SpecialExpression,[Tn["0_lambda"],[c,o],a]],n[2])}(e);throw new t(`Illegal operator: ${r}`,n[2])}if(xt(n))return rr(e);if(vt(n))return function(e){const n=gt(e.tryPeek());e.advance();const r=[];for(;!e.isAtEnd()&&!bt(e.tryPeek());){lt(e.tryPeek(),"...")?(e.advance(),r.push(Pt([s.Spread,e.parseExpression()],e.peekSourceCodeInfo()))):r.push(e.parseExpression());const n=e.tryPeek();if(!lt(n,",")&&!bt(n))throw new t("Expected comma or closing parenthesis",e.peekSourceCodeInfo());lt(n,",")&&e.advance()}return wt(e.tryPeek()),e.advance(),Pt([s.SpecialExpression,[Tn.array,r]],n[2])}(e);const r=n[0];switch(r){case"Number":case"BasePrefixedNumber":return qt(e);case"string":return Dt(e,n);case"Symbol":{e.storePosition();const n=nr(e);return n||(e.restorePosition(),Ft(e))}case"ReservedSymbol":return Qt(e);case"RegexpShorthand":return function(e){const n=e.peek();e.advance();const t=n[1].lastIndexOf('"'),r=n[1].substring(2,t),o=n[1].substring(t+1),a=Pt([s.String,r],n[2]),i=Pt([s.String,o],n[2]);return Pt([s.NormalExpression,[Pt([s.NormalBuiltinSymbol,Je.regexp],n[2]),[a,i]]],n[2])}(e);default:throw new t(`Unknown token type: ${r}`,n[2])}}(e),r=e.tryPeek();for(;lt(r,".")||vt(r)||pt(r);)if("."===r[1]){e.advance();const o=e.tryPeek();if(!ot(o))throw new t("Expected symbol",e.peekSourceCodeInfo());n=ar(n,Pt([s.String,o[1]],o[2]),r[2]),e.advance(),r=e.tryPeek()}else if(vt(r)){e.advance();const o=e.parseExpression();if(!bt(e.tryPeek()))throw new t("Expected closing bracket",e.peekSourceCodeInfo());n=ar(n,o,r[2]),e.advance(),r=e.tryPeek()}else pt(r)&&(n=tr(e,n),r=e.tryPeek());return n}function ar(e,n,t){return Pt([s.NormalExpression,[[s.NormalBuiltinSymbol,Je.get],[e,n]]],t)}function ir(e,n=0){const r=e.tryPeek();let o;if(ot(r))switch(r[1]){case"let":return Gt(e,r);case"if":case"unless":o=function(e,n){const t="unless"===n[1];e.advance();const r=e.parseExpression();st(e.tryPeek(),"then"),e.advance();const o=Bt(e,["else","end"]);let a;return it(e.tryPeek(),"else")&&(e.advance(),a=Bt(e,["end"])),e.advance(),Pt(t?[s.SpecialExpression,[Tn.unless,[r,o,a]]]:[s.SpecialExpression,[Tn.if,[r,o,a]]],n[2])}(e,r);break;case"cond":o=function(e,n){e.advance();const t=[];for(;!e.isAtEnd()&&!it(e.tryPeek(),"end");){st(e.tryPeek(),"case"),e.advance();const n=e.parseExpression();st(e.tryPeek(),"then"),e.advance();const r=Bt(e,["case","end"]);if(t.push([n,r]),it(e.tryPeek(),"end"))break}return st(e.tryPeek()),e.advance(),Pt([s.SpecialExpression,[Tn.cond,t]],n[2])}(e,r);break;case"match":o=function(e,n){e.advance();const t=e.parseExpression(),r=[];for(;!e.isAtEnd()&&!it(e.tryPeek(),"end");){st(e.tryPeek(),"case"),e.advance();const n=zt(e,{allowLiteralPatterns:!0});let t;it(e.tryPeek(),"when")&&(e.advance(),t=e.parseExpression()),st(e.tryPeek(),"then"),e.advance();const o=Bt(e,["case","end"]);if(r.push([n,o,t]),it(e.tryPeek(),"end"))break}return st(e.tryPeek(),"end"),e.advance(),Pt([s.SpecialExpression,[Tn.match,t,r]],n[2])}(e,r);break;case"for":case"doseq":o=function(e,n){const r="doseq"===n[1];e.advance(),ht(e.tryPeek()),e.advance();const o=[];for(;!e.isAtEnd()&&!yt(e.tryPeek());){const n=Kt(e),r=o.flatMap(e=>Object.keys(hn(e[0][1][0]))),a=hn(n[0][1][0]);if(Object.keys(a).some(e=>r.includes(e)))throw new t("Duplicate binding",n[0][2]);o.push(n),lt(e.tryPeek(),",")&&e.advance()}mt(e.tryPeek()),e.advance(),ct(e.tryPeek(),"->"),e.advance();const a=e.parseExpression();return Pt(r?[s.SpecialExpression,[Tn.doseq,o,a]]:[s.SpecialExpression,[Tn.for,o,a]],n[2])}(e,r);break;case"loop":o=function(e,n){e.advance(),ht(e.tryPeek()),e.advance();const r=[];let o=e.tryPeek();for(;!e.isAtEnd()&&!yt(o);){const n=zt(e,{requireDefaultValue:!0,noRest:!0}),t=n[1][1];n[1][1]=void 0,r.push(Pt([s.Binding,[n,t]],n[2])),lt(e.tryPeek(),",")&&e.advance(),o=e.tryPeek()}if(0===r.length)throw new t("Expected binding",e.peekSourceCodeInfo());mt(o),e.advance(),ct(e.tryPeek(),"->"),e.advance();const a=e.parseExpression();return Pt([s.SpecialExpression,[Tn.loop,r,a]],n[2])}(e,r)}else it(r,"do")&&(o=Lt(e)[0]);o||=or(e);let a=e.tryPeek();for(;!Ut(e);){if(It(a)){const t=a[1],r=Tt(t,a[2]);if(r<=n&&(12!==r||12!==n))break;const i=Pt(Tn[t]?[s.SpecialBuiltinSymbol,Tn[t]]:[s.NormalBuiltinSymbol,Je[t]],a[2]);e.advance();o=Vt(a,i,o,ir(e,r),a[2])}else if(ot(a)){if(!Qn(a[1]))break;const r=3;if(r<=n)break;const i=Ft(e),s=ir(e,r);if(Wn(i))throw new t("Special expressions are not allowed in binary functional operators",i[2]);o=Mt(i,[o,s],a[2])}else{if("?"!==a?.[1])break;{if(1<=n)break;e.advance();const r=ir(e);if(!lt(e.tryPeek(),":"))throw new t("Expected :",e.peekSourceCodeInfo());e.advance();const a=ir(e);o=Pt([s.SpecialExpression,[Tn.if,[o,r,a]]],o[2])}}a=e.tryPeek()}return o}function sr(e){e.tokens.forEach(e=>{if("Error"===e[0])throw new t(e[3],e[2])});const n=[],r=function(e){const n=new Rt(e);return n.parseExpression=(e=0)=>ir(n,e),n}(e);for(;!r.isAtEnd();)if(n.push(ir(r,0)),lt(r.tryPeek(),";"))r.advance();else if(!r.isAtEnd())throw new t("Expected ;",r.peekSourceCodeInfo());return n}function ur(e,{removeWhiteSpace:n}){const t=e.tokens.filter(e=>!(function(e){return"SingleLineComment"===e?.[0]}(e)||function(e){return"MultiLineComment"===e?.[0]}(e)||function(e){return"Shebang"===e?.[0]}(e)||n&&function(e){return"Whitespace"===e?.[0]}(e)));return{...e,tokens:t}}const lr=["(",")","[","]","{","}","'",'"',"`",",",".",";"," ","\n","\r","\t"],cr=["0","1","2","3","4","5","6","7","8","9",...lr],fr=new Set(lr),dr=new Set(cr),pr=/\s/,hr=[0],yr=(e,n)=>{if('"'!==e[n])return hr;let t='"',r=1,o=e[n+r],a=!1;for(;o&&('"'!==o||a);)r+=1,a?(a=!1,t+=o):("\\"===o&&(a=!0),t+=o),o=e[n+r];return o?(t+='"',[r+1,["string",t]]):[r,["Error",t,void 0,`Unclosed string at position ${n}`]]};function mr(e,n,t,r){return n===t.slice(r,r+n.length)?[n.length,[e,n]]:hr}const vr=/\d/,gr=/[0-7]/,br=/[0-9a-f]/i,wr=/[01]/,xr=/[\s)\]}(,;]/,kr=(e,n)=>{let t=e[n];if("'"===t){let r=1,o=e[n+r],a=!1;for(;"'"!==o||a;){if(void 0===o)return[r,["Error",t,void 0,`Unclosed quoted symbol at position ${n}`]];r+=1,a?(a=!1,t+=o):("\\"===o&&(a=!0),t+=o),o=e[n+r]}return t+="'",[r+1,["Symbol",t]]}if(!dr.has(t)){const r=n;let o=e[n+=1];for(;o&&!fr.has(o);)t+=o,o=e[n+=1];return t.endsWith(":")?[n-r-1,["Symbol",t.slice(0,-1)]]:[n-r,["Symbol",t]]}return hr},Er=[(e,n)=>{let t=e[n];if(!t||!pr.test(t))return hr;let r=t;for(t=e[n+=1];t&&pr.test(t);)r+=t,t=e[n+=1];return[r.length,["Whitespace",r]]},(e,n)=>{if("/"===e[n]&&"*"===e[n+1]){let t=2,r="/*";for(;("*"!==e[n+t]||"/"!==e[n+t+1])&&n+t+1<e.length;)r+=e[n+t],t+=1;return n+t+1>=e.length?[t,["Error",r,void 0,`Unclosed multi-line comment at position ${n}`]]:(r+="*/",t+=2,[t,["MultiLineComment",r]])}return hr},(e,n)=>{if("/"===e[n]&&"/"===e[n+1]){let t=2,r="//";for(;"\n"!==e[n+t]&&n+t<e.length;)r+=e[n+t],t+=1;return[t,["SingleLineComment",r]]}return hr},(e,n)=>{const t=kr(e,n);if(0===t[0]||!t[1])return hr;let r=t[1][1];r=r.startsWith("'")?r.slice(1,r.length-1):r;return void 0===Zt[r]?hr:[t[0],["ReservedSymbol",r]]},(e,n)=>mr("LParen","(",e,n),(e,n)=>mr("RParen",")",e,n),(e,n)=>mr("LBracket","[",e,n),(e,n)=>mr("RBracket","]",e,n),(e,n)=>mr("LBrace","{",e,n),(e,n)=>mr("RBrace","}",e,n),(e,n)=>{if('"'!==e[n]||'"'!==e[n+1]||'"'!==e[n+2])return hr;let t='"""',r=3,o=e[n+r],a=e.slice(n+r,n+r+3),i=!1;for(;o&&('"""'!==a||i);)r+=1,i?(i=!1,t+=o):("\\"===o&&(i=!0),t+=o),o=e[n+r],a=e.slice(n+r,n+r+3);return o?(t+='"""',[r+3,["DocString",t]]):[r,["Error",t,void 0,`Unclosed doc string at position ${n}`]]},yr,(e,n)=>{if("#"!==e[n])return hr;const[t,r]=yr(e,n+1);if(!r)return hr;if("Error"===r[0]){return[t+1,["Error",`#${r[1]}`,void 0,`Unclosed regexp at position ${n}`]]}n+=t+1;let o=t+1,a="";for(;"g"===e[n]||"i"===e[n];)if(a+=e[n],o+=1,n+=1,a.includes(e[n]))return[o,["Error",`#${r[1]}${a}`,void 0,`Duplicated regexp option "${e[n]}"`]];return[o,["RegexpShorthand",`#${r[1]}${a}`]]},(e,n)=>{if("0"!==e[n])return hr;const t=e[n+1],r="b"===t||"B"===t?"binary":"o"===t||"O"===t?"octal":"x"===t||"X"===t?"hex":null;if(null===r)return hr;let o;for(o=n+2;o<e.length;o+=1){const n=e[o];if("binary"===r&&!wr.test(n))break;if("octal"===r&&!gr.test(n))break;if("hex"===r&&!br.test(n))break}const a=o-n;if(a<=2)return hr;const i=e[o];return i&&!xr.test(i)?hr:[a,["BasePrefixedNumber",e.substring(n,o)]]},(e,n)=>{let t;const r="-"===e[n],o="+"===e[n],a=r||o?n+1:n;let i=!1,s=!1;for(t=a;t<e.length;t+=1){const r=e[t];if("_"===r){if(!vr.test(e[t-1])||!vr.test(e[t+1]))return t===a?hr:[t-n+1,["Error",e.substring(n,t+1),void 0,`Invalid number format at position ${t+1}`]]}else if("."===r){if(t===a)return hr;if(i||s)return[t-n+1,["Error",e.substring(n,t+1),void 0,`Invalid number format at position ${t+1}`]];i=!0}else if("e"===r||"E"===r){if(t===a)return hr;if(s)return[t-n+1,["Error",e.substring(n,t+1),void 0,`Invalid number format at position ${t+1}`]];if("."===e[t-1]||"+"===e[t-1]||"-"===e[t-1])return[t-n+1,["Error",e.substring(n,t+1),void 0,`Invalid number format at position ${t+1}`]];"+"!==e[t+1]&&"-"!==e[t+1]||(t+=1),s=!0}else if(!vr.test(r))break}if((r||o)&&t===a)return hr;const u=t-n;if(0===u)return hr;const l=e[t];return l&&":"!==l&&!xr.test(l)?[t-n+1,["Error",e.substring(n,t+1),void 0,`Invalid number format at position ${t+1}`]]:[u,["Number",e.substring(n,t)]]},(e,n)=>{const t=e.slice(n,n+3);if(n+2<e.length&&rt(t))return[3,["Operator",t]];const r=e.slice(n,n+2);if(n+1<e.length&&rt(r))return[2,["Operator",r]];const o=e[n]??"";return rt(o)?[1,["Operator",o]]:hr},kr];function Sr(e,n,t){let r=0;const o={tokens:[],filePath:t,hasDebugData:n};for(;r<e.length;){const a=n?Ir(e,r,t):void 0,i=Nr(e,r),[s,u]=i;r+=s,u&&(a&&(u[2]=a),o.tokens.push(u))}return o}function Ir(e,n,t){const r=e.substring(0,n+1).split(/\r\n|\r|\n/),o=r[r.length-1],a=function(e,n){return e.split(/\r\n|\r|\n/)[n]}(e,r.length-1);return{code:a,position:{line:r.length,column:o.length},filePath:t}}function Nr(e,n){const t=n;if(0===n){const[r,o]=((e,n)=>{if("#"===e[n]&&"!"===e[n+1]){let t=2,r="#!";for(;"\n"!==e[n+t]&&n+t<e.length;)r+=e[n+t],t+=1;return[t,["SingleLineComment",r]]}return hr})(e,n);if(n+=r,r>0)return[n-t,o]}for(const r of Er){const[o,a]=r(e,n);if(n+=o,0!==o)return[n-t,a]}return[1,["Error",e[t],void 0,"Unrecognized character"]]}function Pr(e,n){if("*"===n)return!0;if(n.endsWith(".*")){const t=n.slice(0,-2);return e===t||e.startsWith(`${t}.`)}return e===n}function $r(e,n){if(!n)return[];const t=[];for(const[r,o]of Object.entries(n))Pr(e,r)&&t.push([r,o]);return t}class Cr{k;snapshots;nextSnapshotIndex;meta;_brand="SuspensionSignal";constructor(e,n,t,r){this.k=e,this.snapshots=n,this.nextSnapshotIndex=t,this.meta=r}}function Ar(e){return e instanceof Cr}class jr{continuation;value;trimToIndex;_brand="ResumeFromSignal";constructor(e,n,t){this.continuation=e,this.value=n,this.trimToIndex=t}}function Or(e){return e instanceof jr}const Mr=new Map;function Ur(e){let n=Mr.get(e);return n||(n={[p]:!0,name:e},Mr.set(e,n)),n}class Vr{_contexts;globalContext;values;modules;valueModules;pure;constructor({contexts:e,values:n,modules:t,valueModules:r,pure:o}){this.globalContext=b(e[0]),this._contexts=e,this.values=n,this.modules=t??new Map,this.valueModules=r??new Map,this.pure=o??!1}getContextsRaw(){return this._contexts}getHostValues(){return this.values}getGlobalContextIndex(){return this._contexts.indexOf(this.globalContext)}static fromDeserialized(e){const n=new Vr({contexts:e.contexts,values:e.values,modules:e.modules,pure:e.pure});return e.globalContextIndex>=0&&e.globalContextIndex<e.contexts.length&&(n.globalContext=e.contexts[e.globalContextIndex]),n}setContextsFromDeserialized(e,n){this._contexts=e,n>=0&&n<e.length&&(this.globalContext=e[n])}getModule(e){return this.modules.get(e)}getValueModule(e){return this.valueModules.has(e)?{value:this.valueModules.get(e),found:!0}:{value:void 0,found:!1}}registerValueModule(e,n){this.valueModules.set(e,n)}create(e){const n=this.globalContext,t=new Vr({contexts:[e,...this._contexts],values:this.values,modules:this.modules,valueModules:this.valueModules,pure:this.pure});return t.globalContext=n,t}new(e){return new Vr({contexts:[{},e],modules:this.modules,valueModules:this.valueModules,pure:this.pure})}addValues(e,n){const r=this._contexts[0];for(const[o,a]of Object.entries(e)){if(r[o])throw new t(`Cannot redefine value "${o}"`,n);const e=Rr(o);if(e)throw new t(`Cannot shadow ${e}`,n);r[o]={value:ie(a)}}}getValue(e){for(const n of this._contexts){const t=n[e];if(t)return t.value}return this.values?.[e]}lookUp(e){const n=e[1];for(const e of this._contexts){const t=e[n];if(t)return t}const t=this.values?.[n];return void 0!==t?{value:ie(t)}:null}evaluateSymbol(e){if(Wn(e)){const n=e[1];switch(n){case Tn["&&"]:case Tn["||"]:case Tn.array:case Tn.object:case Tn["defined?"]:case Tn.recur:case Tn["??"]:{const t=b(_n.specialExpressions[n],e[2]);return{[f]:!0,functionType:"SpecialBuiltin",specialBuiltinSymbolType:n,sourceCodeInfo:e[2],arity:t.arity}}default:throw new t(`Unknown special builtin symbol type: ${n}`,e[2])}}if(zn(e)){const n=e[1],t=He[n],r=t.name;return{[f]:!0,functionType:"Builtin",normalBuiltinSymbolType:n,sourceCodeInfo:e[2],arity:t.arity,name:r}}const n=this.lookUp(e);if(x(r=n)&&void 0!==r.value)return n.value;var r;throw new a(e[1],e[2])}}function Rr(e){return Ln.includes(e)?`special expression "${e}"`:Dn.includes(e)?`builtin function "${e}"`:"self"===e?`builtin value "${e}"`:null}function Tr(e){const n=Rr(e);if(n)throw new t(`Cannot shadow ${n}`,void 0)}function Br(e={},n,r){const o=e.globalContext??{},a=e.contexts?[o,...e.contexts]:[o];let i;if(e.bindings)for(const[n,r]of Object.entries(e.bindings)){if(n.includes("."))throw new t(`Dots are not allowed in binding keys: "${n}"`,void 0);Tr(n),i||(i={}),i[n]=r}const s=new Vr({contexts:a,values:i,modules:n,pure:r});return e.globalModuleScope?s:s.create({})}function _r(e,n){return Math.imul(e^255&n,16777619)}function Dr(e,n){return e=_r(e,n),e=_r(e,n>>>8),e=_r(e,n>>>16),e=_r(e,n>>>24)}function Lr(e,n){for(let t=0;t<n.length;t++){const r=n.charCodeAt(t);e=_r(e,r),e=_r(e,r>>>8)}return e}function Fr(e){let n=2166136261;if(null===e)return n=_r(n,0),n>>>0;if(void 0===e)return n=_r(n,7),n>>>0;const t=typeof e;if("boolean"===t)return n=_r(n,e?1:2),n>>>0;if("number"===t)return n=_r(n,3),n=Lr(n,Object.is(e,-0)?"-0":String(e)),n>>>0;if("string"===t)return n=_r(n,4),n=Lr(n,e),n>>>0;if(Array.isArray(e)){n=_r(n,5),n=Dr(n,e.length);for(let t=0;t<e.length;t++)n=Dr(n,Fr(e[t]));return n>>>0}n=_r(n,6);const r=Object.keys(e).sort();n=Dr(n,r.length);for(const t of r)n=Lr(n,t),n=Dr(n,Fr(e[t]));return n>>>0}function qr(e,n){if(e===n)return!0;if(null===e||null===n)return!1;if(typeof e!=typeof n)return!1;if(Array.isArray(e)){if(!Array.isArray(n))return!1;if(e.length!==n.length)return!1;for(let t=0;t<e.length;t++)if(!qr(e[t],n[t]))return!1;return!0}if("object"!=typeof e)return!1;const t=e,r=n,o=Object.keys(t),a=Object.keys(r);if(o.length!==a.length)return!1;for(const e of o){if(!(e in r))return!1;if(!qr(t[e],r[e]))return!1}return!0}function zr(e){if(null===e)return 4;if(void 0===e)return 9;const n=typeof e;if("boolean"===n)return e?4:5;if("number"===n)return String(e).length;if("string"===n)return e.length+2;if(Array.isArray(e)){let n=2;for(let t=0;t<e.length;t++)n+=zr(e[t])+1;return n}const t=e,r=Object.keys(t);let o=2;for(const e of r)o+=e.length+2+1+zr(t[e])+1;return o}function Wr(e,n,t,r){if(null===e||"object"!=typeof e)return Fr(e);if(Array.isArray(e))for(let t=0;t<e.length;t++)Wr(e[t],n,{parent:e,key:t});else{const t=e;for(const e of Object.keys(t))Wr(t[e],n,{parent:t,key:e})}const o=Fr(e),a=zr(e);if(t&&a>=1){let r,i=n.get(o);i||(i=[],n.set(o,i));for(const n of i)if(qr(n.value,e)){r=n;break}r?r.locations.push(t):i.push({hash:o,value:Gr(e),size:a,locations:[t]})}return o}function Yr(e,n){if(null===e||"object"!=typeof e)return e;if(function(e){return null!==e&&"object"==typeof e&&"__poolRef"in e&&"number"==typeof e.__poolRef&&1===Object.keys(e).length}(e)){const t=e.__poolRef;if(!(t in n))throw new Error(`Unknown pool ref: ${t}`);return Yr(n[t],n)}if(Array.isArray(e))return e.map(e=>Yr(e,n));const t=e,r={};for(const e of Object.keys(t))r[e]=Yr(t[e],n);return r}function Gr(e){if(null===e||"object"!=typeof e)return e;if(Array.isArray(e))return e.map(e=>Gr(e));const n=e,t={};for(const e of Object.keys(n))t[e]=Gr(n[e]);return t}function Kr(e,n){const t=new Map;let r=0;function o(e){if(e instanceof Vr){if(t.has(e))return;t.set(e,r++);for(const n of e.getContextsRaw())for(const e of Object.values(n))o(e.value)}else if(Array.isArray(e))for(const n of e)o(n);else if(null!==e&&"object"==typeof e)for(const n of Object.values(e))o(n)}function a(e,n){if(e instanceof Vr)return{__csRef:t.get(e)};if(Array.isArray(e))return e.map((e,n)=>a(e));if(null!==e&&"object"==typeof e){const n={};for(const[t,r]of Object.entries(e))n[t]=a(r);return n}return e}o(e),void 0!==n&&o(n);const i=Array.from(t.entries()).map(([e,n])=>({id:n,contexts:e.getContextsRaw().map((e,n)=>{const t={};for(const[n,r]of Object.entries(e))t[n]={value:a(r.value)};return t}),globalContextIndex:e.getGlobalContextIndex(),pure:e.pure})),s=a(e),u=void 0!==n?a(n):void 0;return{version:2,contextStacks:i,k:s,...void 0!==u?{meta:u}:{}}}function Jr(e,n,t,r){const o=Kr(e,r);n.length>0&&(o.snapshots=n),o.nextSnapshotIndex=t;const a=[o.contextStacks,o.k];if(void 0!==o.meta&&a.push(o.meta),o.snapshots)for(const e of o.snapshots)a.push(e);const{roots:i,pool:s}=function(e,n=200){const t=e.map(e=>Gr(e)),r=new Map;for(let e=0;e<t.length;e++)Wr(t[e],r,null);const o={};let a=0;const i=Array.from(r.values()).flat().filter(e=>e.locations.length>1&&e.size>=n).sort((e,n)=>n.size-e.size),s=new Map;for(const e of i){if(s.has(e))continue;const n=a++;o[n]=e.value,s.set(e,n);for(const t of e.locations)Array.isArray(t.parent),t.parent[t.key]={__poolRef:n}}return{roots:t,pool:o}}(a,200);let u=0;if(o.contextStacks=i[u++],o.k=i[u++],void 0!==o.meta&&(o.meta=i[u++]),o.snapshots)for(let e=0;e<o.snapshots.length;e++)o.snapshots[e]=i[u++];return Object.keys(s).length>0&&(o.pool=s),o}function Hr(e,n){let r=e;if(2!==r.version)throw new t(`Unsupported suspension blob version: ${r.version} (expected 2)`,void 0);if(r.pool&&Object.keys(r.pool).length>0){const e=r.pool;r={...r,contextStacks:Yr(r.contextStacks,e),k:Yr(r.k,e),...void 0!==r.meta?{meta:Yr(r.meta,e)}:{},...r.snapshots?{snapshots:r.snapshots.map(n=>Yr(n,e))}:{}},delete r.pool}const o=new Map;for(const e of r.contextStacks){const t=e.contexts.map(()=>({})),r=Vr.fromDeserialized({contexts:t,globalContextIndex:e.globalContextIndex,values:n?.values,modules:n?.modules,pure:e.pure});o.set(e.id,r)}function a(e){if(function(e){return null!==e&&"object"==typeof e&&"__csRef"in e&&"number"==typeof e.__csRef}(e)){const n=o.get(e.__csRef);if(!n)throw new t(`Invalid suspension blob: unknown context stack ref ${e.__csRef}`,void 0);return n}if(Array.isArray(e))return e.map(a);if(null!==e&&"object"==typeof e){const n={};for(const[t,r]of Object.entries(e))n[t]=a(r);return n}return e}for(const e of r.contextStacks){const n=o.get(e.id),t=e.contexts.map(e=>{const n=e,t={};for(const[e,r]of Object.entries(n))t[e]={value:a(r.value)};return t});n.setContextsFromDeserialized(t,e.globalContextIndex)}return{k:a(r.k),meta:void 0!==r.meta?a(r.meta):void 0,snapshots:r.snapshots??[],nextSnapshotIndex:r.nextSnapshotIndex??0}}function Xr(){return"undefined"!=typeof process&&"function"==typeof process.stdout?.write}function Zr(e){return"string"==typeof e?e:null===e?"null":"number"==typeof e||"boolean"==typeof e?String(e):k(e)?"Builtin"===e.functionType?`<builtin function ${e.normalBuiltinSymbolType}>`:`<function ${e.n??"λ"}>`:D(e)?`<effect ${e.name}>`:B(e)?`/${e.s}/${e.f}`:"object"==typeof e&&e instanceof RegExp?`${e}`:JSON.stringify(Qr(e),null,2)}function Qr(e){if(e===Number.POSITIVE_INFINITY)return"∞";if(e===Number.NEGATIVE_INFINITY)return"-∞";if(k(e))return Zr(e);if(D(e))return Zr(e);if(B(e))return Zr(e);if(Array.isArray(e))return e.map(Qr);if("object"==typeof e&&null!==e){const n={};for(const[t,r]of Object.entries(e))n[t]=Qr(r);return n}return e}const eo={"dvala.io.print":{handler:function(e,n){const t=e[0],r=Zr(t);return Xr()?process.stdout.write(r):console.log(r),{type:"Value",value:t,k:n}},arity:ne(1)},"dvala.io.println":{handler:function(e,n){const t=e[0],r=Zr(t);return Xr()?process.stdout.write(`${r}\n`):"function"==typeof globalThis.alert?globalThis.alert(r):console.log(r),{type:"Value",value:t,k:n}},arity:ne(1)},"dvala.io.error":{handler:(e,n)=>{const t=e[0],r=Zr(t);return Xr()?process.stderr.write(`${r}\n`):console.error(r),{type:"Value",value:t,k:n}},arity:ne(1)},"dvala.io.read-line":{handler:(e,n,r)=>{const o="string"==typeof e[0]?e[0]:"";if("function"==typeof globalThis.prompt){return{type:"Value",value:globalThis.prompt(o)??null,k:n}}throw new t('dvala.io.read-line is not supported in this environment. In Node.js, register a "dvala.io.read-line" host handler.',r)},arity:{min:0,max:1}},"dvala.io.read-stdin":{handler:(e,n,r)=>{if(!Xr()||!process.stdin)throw new t("dvala.io.read-stdin is not supported in this environment. Node.js is required.",r);return new Promise((e,t)=>{const r=[];process.stdin.setEncoding("utf-8"),process.stdin.on("data",e=>r.push(e)),process.stdin.on("end",()=>e({type:"Value",value:r.join(""),k:n})),process.stdin.on("error",e=>t(e)),process.stdin.resume()})},arity:ne(0)},"dvala.random":{handler:(e,n)=>({type:"Value",value:Math.random(),k:n}),arity:ne(0)},"dvala.random.uuid":{handler:(e,n)=>({type:"Value",value:"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const n=16*Math.random()|0;return("x"===e?n:3&n|8).toString(16)}),k:n}),arity:ne(0)},"dvala.random.int":{handler:(e,n,r)=>{const o=e[0],a=e[1];if("number"!=typeof o||!Number.isInteger(o))throw new t(`dvala.random.int: min must be an integer, got ${"number"==typeof o?o:typeof o}`,r);if("number"!=typeof a||!Number.isInteger(a))throw new t(`dvala.random.int: max must be an integer, got ${"number"==typeof a?a:typeof a}`,r);if(a<=o)throw new t(`dvala.random.int: max (${a}) must be greater than min (${o})`,r);return{type:"Value",value:Math.floor(Math.random()*(a-o))+o,k:n}},arity:ne(2)},"dvala.random.item":{handler:(e,n,r)=>{const o=e[0];if(!Array.isArray(o))throw new t("dvala.random.item: argument must be an array, got "+typeof o,r);if(0===o.length)throw new t("dvala.random.item: cannot pick from an empty array",r);return{type:"Value",value:o[Math.floor(Math.random()*o.length)],k:n}},arity:ne(1)},"dvala.random.shuffle":{handler:(e,n,r)=>{const o=e[0];if(!Array.isArray(o))throw new t("dvala.random.shuffle: argument must be an array, got "+typeof o,r);const a=Array.from(o);for(let e=a.length-1;e>0;e--){const n=Math.floor(Math.random()*(e+1)),t=a[e];a[e]=a[n],a[n]=t}return{type:"Value",value:a,k:n}},arity:ne(1)},"dvala.time.now":{handler:(e,n)=>({type:"Value",value:Date.now(),k:n}),arity:ne(0)},"dvala.time.zone":{handler:(e,n)=>({type:"Value",value:Intl.DateTimeFormat().resolvedOptions().timeZone,k:n}),arity:ne(0)},"dvala.checkpoint":{handler:(e,n)=>({type:"Value",value:null,k:n}),arity:{min:0,max:1}},"dvala.sleep":{handler:(e,n,r)=>{const o=e[0];if("number"!=typeof o||o<0)throw new t(`dvala.sleep requires a non-negative number argument, got ${"number"==typeof o?o:typeof o}`,r);return new Promise(e=>{setTimeout(()=>e({type:"Value",value:null,k:n}),o)})},arity:ne(1)}};function no(e,n){switch(e[0]){case s.Number:case s.String:return e[1];case s.NormalBuiltinSymbol:case s.SpecialBuiltinSymbol:case s.UserDefinedSymbol:return n.evaluateSymbol(e);case s.ReservedSymbol:return lo(e);case s.NormalExpression:{const r=function(e,n){const r=e[2];return on(function(e,n){const r=[],o=[],a=ln(e,(e,a)=>Gn(e)?on(no(e[1],n),n=>{if(!Array.isArray(n))throw new t(`Spread operator requires an array, got ${m(e)}`,e[2]);r.push(...n)}):e[0]!==s.ReservedSymbol||"_"!==e[1]?on(no(e,n),e=>{r.push(e)}):void o.push(a));return on(a,()=>({params:r,placeholders:o}))}(e[1][1],n),({params:o,placeholders:i})=>{if(Yn(e)){const s=e[1][0];if(i.length>0){return on(no(s,n),e=>({[f]:!0,function:F(e,r),functionType:"Partial",params:o,placeholders:i,sourceCodeInfo:r,arity:ne(i.length)}))}if(zn(s)){const r=s[1],a=_n.allNormalExpressions[r];if(n.pure&&!1===a.pure)throw new t(`Cannot call impure function '${a.name}' in pure mode`,e[2]);return a.dvalaImpl?oo(a.dvalaImpl,o,n,e[2]):a.evaluate(o,e[2],n,{executeFunction:to})}{const t=n.getValue(s[1]);if(void 0!==t)return to(F(t,r),o,n,r);throw new a(s[1],e[2])}}return on(no(e[1][0],n),e=>{const t=F(e,r);if(i.length>0){return{[f]:!0,function:t,functionType:"Partial",params:o,placeholders:i,sourceCodeInfo:r,arity:ne(i.length)}}return to(t,o,n,r)})})}(e,n);return on(r,n=>{if("number"==typeof n&&Number.isNaN(n))throw new t("Number is NaN",e[2]);return Se(n)})}case s.SpecialExpression:{const r={type:"Eval",node:e,env:n,k:[]};try{return Se(Uo(r))}catch(r){if(r instanceof t&&r.message.includes("Unexpected async operation")){return Vo({type:"Eval",node:e,env:n,k:[]}).then(e=>Se(e))}throw r}}default:throw new t(`${l(e[0])}-node cannot be evaluated`,e[2])}}function to(e,n,r,o){if(k(e))return ro(e,n,r,o);if(Array.isArray(e))return io(e,n,o);if(U(e))return ao(e,n,o);if("string"==typeof e)return so(e,n,o);if(X(e))return uo(e,n,o);throw new t("Unexpected function type",o)}function ro(e,n,r,o){switch(e.functionType){case"UserDefined":return oo(e,n,r,o);case"Partial":return function(e,n,r,o){const a=[...e.params];if(n.length!==e.placeholders.length)throw new t(`(partial) expects ${e.placeholders.length} arguments, got ${n.length}.`,o);const i=[...n];for(const n of e.placeholders)a.splice(n,0,i.shift());return to(e.function,a,r,o)}(e,n,r,o);case"Comp":return function(e,n,r,o){const{params:a}=e;if(0===a.length){if(1!==n.length)throw new t(`(comp) expects one argument, got ${m(n.length)}.`,o);return A(n[0],o)}let i=n;for(let e=a.length-1;e>=0;e--){const n=a[e];i=on(i,e=>on(to(F(n,o),e,r,o),e=>[e]))}return on(i,e=>A(e[0],o))}(e,n,r,o);case"Constantly":return e.value;case"Juxt":return function(e,n,t,r){return function(e,n){const t=[];for(let r=0;r<e.length;r++){const o=n(e[r],r);if(o instanceof Promise)return an(o,t,e,n,r);t.push(o)}return t}(e.params,e=>to(F(e,r),n,t,r))}(e,n,r,o);case"Complement":return on(to(e.function,n,r,o),e=>!e);case"EveryPred":return function(e,n,t,r){const o=[];for(const a of e.params)for(const e of n)o.push(()=>to(F(a,r),[e],t,r));return sn(o,(e,n)=>!!e&&on(n(),e=>!!e),!0)}(e,n,r,o);case"SomePred":return function(e,n,t,r){const o=[];for(const a of e.params)for(const e of n)o.push(()=>to(F(a,r),[e],t,r));return sn(o,(e,n)=>!!e||on(n(),e=>!!e),!1)}(e,n,r,o);case"Fnull":return function(e,n,t,r){const o=n.map((n,t)=>null===n?ie(e.params[t]):n);return to(F(e.function,r),o,t,r)}(e,n,r,o);case"EffectMatcher":return function(e,n,t){ee({min:1,max:1},n.length,e.sourceCodeInfo??t);const r=n[0];L(r,t);const o=r.name;if("string"===e.matchType)return Pr(o,e.pattern);const a=new RegExp(e.pattern,e.flags);return a.test(o)}(e,n,o);case"Builtin":{const a=_n.allNormalExpressions[e.normalBuiltinSymbolType];return a.dvalaImpl?oo(a.dvalaImpl,n,r,o):function(e,n,r,o){const a=b(_n.allNormalExpressions[e.normalBuiltinSymbolType],o);if(r.pure&&!1===a.pure)throw new t(`Cannot call impure function '${e.name}' in pure mode`,o);if(a.dvalaImpl)return oo(a.dvalaImpl,n,r,o);return a.evaluate(n,o,r,{executeFunction:to})}(e,n,r,o)}case"SpecialBuiltin":return function(e,n,r,o){const a=b(_n.specialExpressions[e.specialBuiltinSymbolType],o);if(a.evaluateAsNormalExpression)return a.evaluateAsNormalExpression(n,o,r,{executeFunction:to});throw new t(`Special builtin function ${e.specialBuiltinSymbolType} is not supported as normal expression.`,o)}(e,n,r,o);case"Module":return function(e,n,r,o){const a=r.getModule(e.moduleName);if(!a)throw new t(`Module '${e.moduleName}' not found.`,o);const i=a.functions[e.functionName];if(!i)throw new t(`Function '${e.functionName}' not found in module '${e.moduleName}'.`,o);if(r.pure&&!1===i.pure)throw new t(`Cannot call impure function '${e.functionName}' in pure mode`,o);if(ee(i.arity,n.length,o),i.dvalaImpl)return oo(i.dvalaImpl,n,r,o);return i.evaluate(n,o,r,{executeFunction:to})}(e,n,r,o)}}function oo(e,r,o,a){function i(r){if(!Q(e.arity,r.length))throw new t(`Expected ${e.arity} arguments, got ${r.length}.`,a);const s=e.evaluatedfunction,u=s[0],l=u.filter(e=>e[0]!==Qe).length,c=o.create(e.evaluatedfunction[2]),f={self:{value:e}},d=[];let p,h;for(let e=0;e<r.length;e+=1)if(e<l){const n=e;p=on(p,()=>{const e=ie(r[n]);return on(dn(u[n],e,e=>no(e,c.create(f))),e=>{Object.entries(e).forEach(([e,n])=>{f[e]={value:n}})})})}else d.push(ie(r[e]));for(let e=r.length;e<l;e++){const n=e;h=on(h,()=>{const e=u[n];return on(no(e[1][1],o.create(f)),n=>on(dn(e,n,e=>no(e,o.create(f))),e=>{Object.entries(e).forEach(([e,n])=>{f[e]={value:n}})}))})}return on(p,()=>on(h,()=>{const e=u.find(e=>e[0]===Qe),t=void 0!==e?on(dn(e,d,e=>no(e,o.create(f))),e=>{Object.entries(e).forEach(([e,n])=>{f[e]={value:n}})}):void 0;return on(t,()=>{const e=c.create(f),t=sn(s[1],(n,t)=>no(t,e),null);return t instanceof Promise?t.catch(e=>{if(e instanceof n)return i(e.params);throw e}):t})}))}for(;;)try{return i(r)}catch(e){if(e instanceof n){r=e.params;continue}throw e}}function ao(e,n,r){if(1!==n.length)throw new t("Object as function requires one string parameter.",r);const o=n[0];return W(o,r),ie(e[o])}function io(e,n,r){if(1!==n.length)throw new t("Array as function requires one non negative integer parameter.",r);const o=n[0];return Z(o,r,{integer:!0,nonNegative:!0}),ie(e[o])}function so(e,n,r){if(1!==n.length)throw new t("String as function requires one Obj parameter.",r);const o=ie(n[0]);if(U(o))return ie(o[e]);if(X(o,{integer:!0}))return ie(e[o]);throw new t(`string as function expects Obj or integer parameter, got ${m(o)}`,r)}function uo(e,n,r){if(Z(e,void 0,{integer:!0}),1!==n.length)throw new t("Number as function requires one Arr parameter.",r);const o=n[0];return M(o,r),ie(o[e])}function lo(e){const n=e[1];if(!["true","false","null"].includes(n))throw new t(`Reserved symbol ${n} cannot be evaluated`,e[2]);return b(Zt[n],e[2])}function co(e,n,r){switch(e[0]){case s.Number:case s.String:return{type:"Value",value:e[1],k:r};case s.NormalBuiltinSymbol:case s.SpecialBuiltinSymbol:case s.UserDefinedSymbol:return{type:"Value",value:n.evaluateSymbol(e),k:r};case s.ReservedSymbol:return{type:"Value",value:lo(e),k:r};case s.NormalExpression:return function(e,n,t){const r=e[1][1],o=e[2],a={type:"NanCheck",sourceCodeInfo:o},i={type:"EvalArgs",node:e,index:0,params:[],placeholders:[],env:n,sourceCodeInfo:o};let u=0;for(;u<r.length;){const e=r[u];if(e[0]!==s.ReservedSymbol||"_"!==e[1])break;i.placeholders.push(i.params.length),u++}if(i.index=u,u>=r.length)return fo(i,[a,...t]);const l=r[u],c=[i,a,...t];if(Gn(l))return{type:"Eval",node:l[1],env:n,k:c};return{type:"Eval",node:l,env:n,k:c}}(e,n,r);case s.SpecialExpression:return function(e,n,r){const o=e[2],a=e[1][0];switch(a){case Tn.if:case Tn.unless:{const[t,i,s]=e[1][1];return{type:"Eval",node:t,env:n,k:[{type:"IfBranch",thenNode:i,elseNode:s,inverted:a===Tn.unless,env:n,sourceCodeInfo:o},...r]}}case Tn["&&"]:{const t=e[1][1];if(0===t.length)return{type:"Value",value:!0,k:r};const a={type:"And",nodes:t,index:1,env:n,sourceCodeInfo:o};return 1===t.length?{type:"Eval",node:t[0],env:n,k:r}:{type:"Eval",node:t[0],env:n,k:[a,...r]}}case Tn["||"]:{const t=e[1][1];if(0===t.length)return{type:"Value",value:!1,k:r};const a={type:"Or",nodes:t,index:1,env:n,sourceCodeInfo:o};return 1===t.length?{type:"Eval",node:t[0],env:n,k:r}:{type:"Eval",node:t[0],env:n,k:[a,...r]}}case Tn["??"]:{const t=e[1][1];if(0===t.length)return{type:"Value",value:null,k:r};const a=t[0];if(Fn(a)&&null===n.lookUp(a)){if(1===t.length)return{type:"Value",value:null,k:r};const e={type:"Qq",nodes:t,index:2,env:n,sourceCodeInfo:o},a=t[1];return Fn(a)&&null===n.lookUp(a)?function(e,n){return vo(e,n)}(e,r):2===t.length?{type:"Eval",node:a,env:n,k:r}:{type:"Eval",node:a,env:n,k:[e,...r]}}const i={type:"Qq",nodes:t,index:1,env:n,sourceCodeInfo:o};return 1===t.length?{type:"Eval",node:a,env:n,k:r}:{type:"Eval",node:a,env:n,k:[i,...r]}}case Tn.cond:{const t=e[1][1];if(0===t.length)return{type:"Value",value:null,k:r};const a={type:"Cond",phase:"test",cases:t,index:0,env:n,sourceCodeInfo:o};return{type:"Eval",node:t[0][0],env:n,k:[a,...r]}}case Tn.match:{const t=e[1][1],a=e[1][2];return{type:"Eval",node:t,env:n,k:[{type:"Match",phase:"matchValue",matchValue:null,cases:a,index:0,bindings:{},env:n,sourceCodeInfo:o},...r]}}case Tn.block:{const t=e[1][1],a=e[1][2],i={},s=n.create(i);let u=r;if(a&&a.length>0){u=[{type:"TryWith",handlers:a.map(([e,t])=>({effectRef:no(e,n),handlerNode:t})),env:n,sourceCodeInfo:o},...r]}if(0===t.length)return{type:"Value",value:null,k:u};if(1===t.length)return{type:"Eval",node:t[0],env:s,k:u};const l={type:"Sequence",nodes:t,index:1,env:s,sourceCodeInfo:o};return{type:"Eval",node:t[0],env:s,k:[l,...u]}}case Tn.let:{const t=e[1][1],a=t[1][0];return{type:"Eval",node:t[1][1],env:n,k:[{type:"LetBind",target:a,env:n,sourceCodeInfo:o},...r]}}case Tn.loop:{const t=e[1][1],a=e[1][2];if(0===t.length){const e={},i={type:"LoopIterate",bindingNodes:t,bindingContext:e,body:a,env:n.create(e),sourceCodeInfo:o};return{type:"Eval",node:a,env:n.create(e),k:[i,...r]}}const i={type:"LoopBind",phase:"value",bindingNodes:t,index:0,context:{},body:a,env:n,sourceCodeInfo:o};return{type:"Eval",node:t[0][1][1],env:n,k:[i,...r]}}case Tn.for:case Tn.doseq:{const t=e[1][1],i=e[1][2],s=a===Tn.for;if(0===t.length)return{type:"Value",value:s?[]:null,k:r};const u={},l=n.create(u),c={type:"ForLoop",returnResult:s,bindingNodes:t,body:i,result:[],phase:"evalCollection",bindingLevel:0,levelStates:[],context:u,env:l,sourceCodeInfo:o};return{type:"Eval",node:t[0][0][1][1],env:l,k:[c,...r]}}case Tn.recur:{const t=e[1][1];if(0===t.length)return So([],r,o);const a={type:"Recur",nodes:t,index:1,params:[],env:n,sourceCodeInfo:o};if(1===t.length){const e={...a,index:1};return{type:"Eval",node:t[0],env:n,k:[e,...r]}}return{type:"Eval",node:t[0],env:n,k:[a,...r]}}case Tn.array:{const t=e[1][1];if(0===t.length)return{type:"Value",value:[],k:r};const a=t[0],i=Gn(a),s={type:"ArrayBuild",nodes:t,index:0,result:[],isSpread:i,env:n,sourceCodeInfo:o};return{type:"Eval",node:i?a[1]:a,env:n,k:[s,...r]}}case Tn.object:{const t=e[1][1];if(0===t.length)return{type:"Value",value:{},k:r};const a=t[0],i=Gn(a),s={type:"ObjectBuild",nodes:t,index:0,result:{},currentKey:null,isSpread:i,env:n,sourceCodeInfo:o};return{type:"Eval",node:i?a[1]:a,env:n,k:[s,...r]}}case Tn["0_lambda"]:{const t=e[1][1],o=e[1][2]??"",a=function(e,n){const t={},r=e[0].reduce((e,n)=>(Object.keys(hn(n)).forEach(n=>{e[n]={value:null}}),e),{});return Kn(e[1],n.new(r),_n,no).forEach(e=>{const r=n.getValue(e);C(r)&&(t[e]={value:r})}),[e[0],e[1],t]}(t,n),i=a[0].filter(e=>e[0]!==Qe&&void 0===e[1][1]).length,s={min:i>0?i:void 0,max:a[0].some(e=>e[0]===Qe)?void 0:a[0].length};return{type:"Value",value:{[f]:!0,sourceCodeInfo:e[2],functionType:"UserDefined",name:void 0,evaluatedfunction:a,arity:s,docString:o},k:r}}case Tn["defined?"]:{const t=e[1][1];if(!Fn(t))return{type:"Value",value:!0,k:r};return{type:"Value",value:null!==n.lookUp(t),k:r}}case Tn.import:{const a=e[1][1],i=n.getValueModule(a);if(i.found)return{type:"Value",value:i.value,k:r};const s=n.getModule(a);if(!s)throw new t(`Unknown module: '${a}'`,o);const u={};for(const[e,n]of Object.entries(s.functions))u[e]={[f]:!0,sourceCodeInfo:o,functionType:"Module",moduleName:a,functionName:e,arity:n.arity};if(s.source){const e=sr(ur(Sr(s.source,!1,void 0),{removeWhiteSpace:!0})),t=n.create({}),i={type:"ImportMerge",tsFunctions:u,moduleName:a,module:s,env:n,sourceCodeInfo:o};if(1===e.length)return{type:"Eval",node:e[0],env:t,k:[i,...r]};const l={type:"Sequence",nodes:e,index:1,env:t};return{type:"Eval",node:e[0],env:t,k:[l,i,...r]}}return n.registerValueModule(a,u),{type:"Value",value:u,k:r}}case Tn.effect:return{type:"Value",value:Ur(e[1][1]),k:r};case Tn.perform:{const t=[e[1][1],...e[1][2]];if(1===t.length){const e={type:"PerformArgs",argNodes:t,index:1,params:[],env:n,sourceCodeInfo:o};return{type:"Eval",node:t[0],env:n,k:[e,...r]}}const a={type:"PerformArgs",argNodes:t,index:1,params:[],env:n,sourceCodeInfo:o};return{type:"Eval",node:t[0],env:n,k:[a,...r]}}case Tn.parallel:return{type:"Parallel",branches:e[1][1],env:n,k:r};case Tn.race:return{type:"Race",branches:e[1][1],env:n,k:r};default:throw new t(`Unknown special expression type: ${a}`,o)}}(e,n,r);default:throw new t(`${l(e[0])}-node cannot be evaluated`,e[2])}}function fo(e,n){const{node:r,params:o,placeholders:i,env:s,sourceCodeInfo:u}=e;if(Yn(r)){const e=r[1][0];if(i.length>0){const t=s.evaluateSymbol(e);return{type:"Value",value:{[f]:!0,function:F(t,u),functionType:"Partial",params:o,placeholders:i,sourceCodeInfo:u,arity:ne(i.length)},k:n}}if(zn(e)){const r=e[1],a=_n.allNormalExpressions[r];if(s.pure&&!1===a.pure)throw new t(`Cannot call impure function '${a.name}' in pure mode`,u);if(a.dvalaImpl)return ho(a.dvalaImpl,o,s,u,n);return Oo(a.evaluate(o,u,s,{executeFunction:to}),n)}const l=s.getValue(e[1]);if(void 0!==l)return po(F(l,u),o,i,s,u,n);throw new a(e[1],u)}return{type:"Eval",node:r[1][0],env:s,k:[{type:"CallFn",params:o,placeholders:i,env:s,sourceCodeInfo:u},...n]}}function po(e,n,r,o,a,i){if(r.length>0){return{type:"Value",value:{[f]:!0,function:e,functionType:"Partial",params:n,placeholders:r,sourceCodeInfo:a,arity:ne(r.length)},k:i}}if(k(e))return function(e,n,t,r,o){switch(e.functionType){case"UserDefined":return ho(e,n,t,r,o);case"Partial":case"Comp":case"Constantly":case"Juxt":case"Complement":case"EveryPred":case"SomePred":case"Fnull":case"EffectMatcher":case"SpecialBuiltin":return Oo(ro(e,n,t,r),o);case"Module":{const a=t.getModule(e.moduleName),i=a?.functions[e.functionName];if(i?.dvalaImpl)return ee(i.arity,n.length,r),ho(i.dvalaImpl,n,t,r,o);return Oo(ro(e,n,t,r),o)}case"Builtin":{const a=_n.allNormalExpressions[e.normalBuiltinSymbolType];if(a.dvalaImpl)return ho(a.dvalaImpl,n,t,r,o);return Oo(ro(e,n,t,r),o)}}}(e,n,o,a,i);if(Array.isArray(e))return{type:"Value",value:io(e,n,a),k:i};if(U(e))return{type:"Value",value:ao(e,n,a),k:i};if("string"==typeof e)return{type:"Value",value:so(e,n,a),k:i};if(X(e))return{type:"Value",value:uo(e,n,a),k:i};throw new t("Unexpected function type",a)}function ho(e,n,r,o,a){if(!Q(e.arity,n.length))throw new t(`Expected ${e.arity} arguments, got ${n.length}.`,o);const i=e.evaluatedfunction,s=i[0],u=s.filter(e=>e[0]!==Qe).length,l=r.create(e.evaluatedfunction[2]),c={self:{value:e}},f=[];for(let t=0;t<n.length;t+=1)if(t<u){const i=ie(n[t]),u=dn(s[t],i,e=>no(e,l.create(c)));if(u instanceof Promise){return Oo(oo(e,n,r,o),a)}Object.entries(u).forEach(([e,n])=>{c[e]={value:n}})}else f.push(ie(n[t]));for(let t=n.length;t<u;t++){const i=s[t],u=no(i[1][1],l.create(c));if(u instanceof Promise){return Oo(oo(e,n,r,o),a)}const f=dn(i,u,e=>no(e,l.create(c)));if(f instanceof Promise){return Oo(oo(e,n,r,o),a)}Object.entries(f).forEach(([e,n])=>{c[e]={value:n}})}const d=s.find(e=>e[0]===Qe);if(d){const t=dn(d,f,e=>no(e,l.create(c)));if(t instanceof Promise){return Oo(oo(e,n,r,o),a)}Object.entries(t).forEach(([e,n])=>{c[e]={value:n}})}const p=i[1],h=l.create(c);if(0===p.length)return{type:"Value",value:null,k:a};const y={type:"FnBody",fn:e,bodyIndex:1,env:h,outerEnv:r,sourceCodeInfo:o};return p.length,{type:"Eval",node:p[0],env:h,k:[y,...a]}}function yo(e,n,r){switch(e.type){case"Sequence":return function(e,n,t){const{nodes:r,index:o,env:a}=e;if(o>=r.length)return{type:"Value",value:n,k:t};const i={...e,index:o+1};if(o===r.length-1)return{type:"Eval",node:r[o],env:a,k:t};return{type:"Eval",node:r[o],env:a,k:[i,...t]}}(e,n,r);case"IfBranch":return function(e,n,t){const{thenNode:r,elseNode:o,inverted:a,env:i}=e,s=a?!n:n;if(s)return{type:"Eval",node:r,env:i,k:t};if(o)return{type:"Eval",node:o,env:i,k:t};return{type:"Value",value:null,k:t}}(e,n,r);case"Cond":return function(e,n,t){const{cases:r,index:o,env:a}=e;if("test"===e.phase){if(n)return{type:"Eval",node:r[o][1],env:a,k:t};const i=o+1;if(i>=r.length)return{type:"Value",value:null,k:t};const s={...e,index:i};return{type:"Eval",node:r[i][0],env:a,k:[s,...t]}}return{type:"Value",value:n,k:t}}(e,n,r);case"Match":return function(e,n,t){const{cases:r,env:o}=e;if("matchValue"===e.phase){const r=n;return mo({...e,matchValue:r,phase:"guard"},t)}if("guard"===e.phase){if(!n){return mo({...e,index:e.index+1,bindings:{}},t)}const a={};for(const[n,t]of Object.entries(e.bindings))a[n]={value:t};const i=o.create(a);return{type:"Eval",node:r[e.index][1],env:i,k:t}}return{type:"Value",value:n,k:t}}(e,n,r);case"And":return function(e,n,t){if(!n)return{type:"Value",value:n,k:t};const{nodes:r,index:o,env:a}=e;if(o>=r.length)return{type:"Value",value:n,k:t};if(o===r.length-1)return{type:"Eval",node:r[o],env:a,k:t};const i={...e,index:o+1};return{type:"Eval",node:r[o],env:a,k:[i,...t]}}(e,n,r);case"Or":return function(e,n,t){if(n)return{type:"Value",value:n,k:t};const{nodes:r,index:o,env:a}=e;if(o>=r.length)return{type:"Value",value:n,k:t};if(o===r.length-1)return{type:"Eval",node:r[o],env:a,k:t};const i={...e,index:o+1};return{type:"Eval",node:r[o],env:a,k:[i,...t]}}(e,n,r);case"Qq":return function(e,n,t){if(null!==n)return{type:"Value",value:n,k:t};return vo(e,t)}(e,n,r);case"ArrayBuild":return function(e,n,r){const{nodes:o,result:a,env:i,sourceCodeInfo:s}=e;if(e.isSpread){if(!Array.isArray(n))throw new t("Spread value is not an array",s);a.push(...n)}else a.push(n);const u=e.index+1;if(u>=o.length)return{type:"Value",value:a,k:r};const l=o[u],c=Gn(l),f={...e,index:u,isSpread:c};return{type:"Eval",node:c?l[1]:l,env:i,k:[f,...r]}}(e,n,r);case"ObjectBuild":return function(e,n,r){const{nodes:o,result:a,env:i,sourceCodeInfo:s}=e;if(e.isSpread){if(!x(n))throw new t("Spread value is not an object",s);Object.assign(a,n);const u=e.index+1;if(u>=o.length)return{type:"Value",value:a,k:r};const l=o[u],c=Gn(l),f={...e,index:u,currentKey:null,isSpread:c};return{type:"Eval",node:c?l[1]:l,env:i,k:[f,...r]}}if(null===e.currentKey){W(n,s);const a=o[e.index+1];if(void 0===a)throw new t("Missing value for key",s);return{type:"Eval",node:a,env:i,k:[{...e,currentKey:n},...r]}}{a[e.currentKey]=n;const t=e.index+2;if(t>=o.length)return{type:"Value",value:a,k:r};const s=o[t],u=Gn(s),l={...e,index:t,currentKey:null,isSpread:u};return{type:"Eval",node:u?s[1]:s,env:i,k:[l,...r]}}}(e,n,r);case"LetBind":return function(e,n,t){const{target:r,env:o,sourceCodeInfo:a}=e,i=dn(r,n,e=>no(e,o));return on(i,e=>(o.addValues(e,a),{type:"Value",value:n,k:t}))}(e,n,r);case"LoopBind":return function(e,n,t){const{bindingNodes:r,index:o,context:a,body:i,env:s,sourceCodeInfo:u}=e,l=r[o],c=dn(l[1][0],n,e=>no(e,s.create(a)));return on(c,n=>{Object.entries(n).forEach(([e,n])=>{a[e]={value:n}});const l=o+1;if(l>=r.length){const e=s.create(a);return{type:"Eval",node:i,env:e,k:[{type:"LoopIterate",bindingNodes:r,bindingContext:a,body:i,env:e,sourceCodeInfo:u},...t]}}const c={...e,index:l};return{type:"Eval",node:r[l][1][1],env:s.create(a),k:[c,...t]}})}(e,n,r);case"LoopIterate":return function(e,n,t){return{type:"Value",value:n,k:t}}(0,n,r);case"ForLoop":return function(e,n,r){const{returnResult:o,bindingNodes:a,result:i,env:s,sourceCodeInfo:u,context:l}=e,{asColl:c,isSeq:f}={asColl:(e,n)=>{if("string"==typeof e||Array.isArray(e)||U(e))return e;throw new t(`Expected collection, got ${m(e)}`,n)},isSeq:e=>"string"==typeof e||Array.isArray(e)};switch(e.phase){case"evalCollection":{const t=c(n,u),o=f(t)?t:Object.entries(t);if(0===o.length)return go(e,r);const i=[...e.levelStates];i[e.bindingLevel]={collection:o,index:0};const d=a[e.bindingLevel];return on(dn(d[0][1][0],A(o[0],u),e=>no(e,s)),n=>{Object.entries(n).forEach(([e,n])=>{l[e]={value:n}});const t=d[1];return t.length>0?wo(e,i,t,0,r):xo(e,i,r)})}case"evalLet":throw new t("ForLoop evalLet should not reach applyFrame",u);case"evalWhen":{if(!n)return bo(e,r);const t=a[e.bindingLevel][3];if(t){const n={...e,phase:"evalWhile"};return{type:"Eval",node:t,env:s,k:[n,...r]}}return ko(e,r)}case"evalWhile":if(!n){const n=[...e.levelStates];return n[e.bindingLevel]={...n[e.bindingLevel],index:Number.POSITIVE_INFINITY},bo({...e,levelStates:n},r)}return ko(e,r);case"evalBody":return o&&i.push(n),bo(e,r);case"evalElement":throw new t(`Unexpected ForLoop phase: ${e.phase}`,u)}return{type:"Value",value:null,k:r}}(e,n,r);case"Recur":return function(e,n,t){const{nodes:r,index:o,params:a,env:i}=e;if(a.push(n),o>=r.length)return So(a,t,e.sourceCodeInfo);const s={...e,index:o+1};return{type:"Eval",node:r[o],env:i,k:[s,...t]}}(e,n,r);case"PerformArgs":return function(e,n,t){const{argNodes:r,index:o,params:a,env:i}=e;if(a.push(n),o>=r.length){const n=a[0];L(n,e.sourceCodeInfo);return{type:"Perform",effect:n,args:a.slice(1),k:t,sourceCodeInfo:e.sourceCodeInfo}}const s={...e,index:o+1};return{type:"Eval",node:r[o],env:i,k:[s,...t]}}(e,n,r);case"TryWith":return function(e,n){return{type:"Value",value:e,k:n}}(n,r);case"EffectResume":return function(e,n){return{type:"Value",value:n,k:e.resumeK}}(e,n);case"ParallelResume":return function(e,n,t){return{type:"ParallelResume",value:n,branchCount:e.branchCount,completedBranches:e.completedBranches,suspendedBranches:e.suspendedBranches,k:t}}(e,n,r);case"EvalArgs":return function(e,n,r){const{node:o,params:a,placeholders:i,env:u}=e,l=o[1][1],c=l[e.index];if(Gn(c)){if(!Array.isArray(n))throw new t(`Spread operator requires an array, got ${m(n)}`,c[2]);a.push(...n)}else a.push(n);let f=e.index+1;for(;f<l.length;){const e=l[f];if(e[0]!==s.ReservedSymbol||"_"!==e[1])break;i.push(a.length),f++}if(f>=l.length)return fo({...e,index:f},r);const d={...e,index:f},p=l[f];if(Gn(p))return{type:"Eval",node:p[1],env:u,k:[d,...r]};return{type:"Eval",node:p,env:u,k:[d,...r]}}(e,n,r);case"CallFn":return function(e,n,t){const r=F(n,e.sourceCodeInfo);return po(r,e.params,e.placeholders,e.env,e.sourceCodeInfo,t)}(e,n,r);case"FnBody":return function(e,n,t){const{fn:r,bodyIndex:o,env:a}=e,i=r.evaluatedfunction[1];if(o>=i.length)return{type:"Value",value:n,k:t};const s={...e,bodyIndex:o+1};return{type:"Eval",node:i[o],env:a,k:[s,...t]}}(e,n,r);case"BindingDefault":return function(e,n,r){const{target:o,record:a,env:i,sourceCodeInfo:s}=e,u=dn(o,n,e=>no(e,i));if(u instanceof Promise)throw new t("Async binding default evaluation not supported in trampoline yet",s);return Object.assign(a,u),{type:"Value",value:n,k:r}}(e,n,r);case"NanCheck":return function(e,n,r){if("number"==typeof n&&Number.isNaN(n))throw new t("Number is NaN",e.sourceCodeInfo);return{type:"Value",value:Se(n),k:r}}(e,n,r);case"DebugStep":return function(e,n,t){if("awaitValue"===e.phase){const r={expression:e.sourceCodeInfo?.code??"",value:n,location:e.sourceCodeInfo?{line:e.sourceCodeInfo.position.line,column:e.sourceCodeInfo.position.column}:{line:0,column:0},env:jo(e.env)},o={type:"DebugStep",phase:"awaitPerform",sourceCodeInfo:e.sourceCodeInfo,env:e.env};return{type:"Perform",effect:Ur("dvala.debug.step"),args:[r],k:[o,...t]}}return{type:"Value",value:n,k:t}}(e,n,r);case"ImportMerge":{const t=U(n)?n:{};for(const[n,r]of Object.entries(t)){const t=e.module.functions[n];t&&I(r)&&(t.dvalaImpl=r)}const o={};for(const[n,r]of Object.entries(t))e.module.functions[n]||(o[n]=r);const a={...e.tsFunctions,...o};return e.env.registerValueModule(e.moduleName,a),{type:"Value",value:a,k:r}}default:throw new t(`Unhandled frame type: ${e.type}`,void 0)}}function mo(e,n){const{matchValue:r,cases:o,index:a,env:i,sourceCodeInfo:s}=e;for(let u=a;u<o.length;u++){const[a,l,c]=o[u],f=mn(a,r,e=>no(e,i));if(f instanceof Promise)throw new t("Async pattern matching not supported in trampoline yet",s);if(null===f)continue;if(c){const t={};for(const[e,n]of Object.entries(f))t[e]={value:n};return{type:"Eval",node:c,env:i.create(t),k:[{...e,phase:"guard",index:u,bindings:f},...n]}}const d={};for(const[e,n]of Object.entries(f))d[e]={value:n};return{type:"Eval",node:l,env:i.create(d),k:n}}return{type:"Value",value:null,k:n}}function vo(e,n){const{nodes:t,env:r}=e;let{index:o}=e;for(;o<t.length;){const e=t[o];if(!Fn(e)||null!==r.lookUp(e))break;o++}if(o>=t.length)return{type:"Value",value:null,k:n};if(o===t.length-1)return{type:"Eval",node:t[o],env:r,k:n};const a={...e,index:o+1};return{type:"Eval",node:t[o],env:r,k:[a,...n]}}function go(e,n){return{type:"Value",value:e.returnResult?e.result:null,k:n}}function bo(e,n){const{bindingNodes:t,env:r,sourceCodeInfo:o,context:a}=e,i=[...e.levelStates],s=e.bindingLevel,u=i[s],l=u.index+1;if(l>=u.collection.length)return 0===s?go(e,n):bo({...e,bindingLevel:s-1},n);i[s]={...u,index:l};const c=t[s];return on(dn(c[0][1][0],A(u.collection[l],o),e=>no(e,r)),t=>{Object.entries(t).forEach(([e,n])=>{a[e]={value:n}});const r=c[1];return r.length>0?wo({...e,levelStates:i,bindingLevel:s},i,r,0,n):xo({...e,levelStates:i,bindingLevel:s},i,n)})}function wo(e,n,t,r,o){const{env:a,context:i}=e;let s;for(let e=r;e<t.length;e++){const n=e;s=on(s,()=>{const e=t[n],[r,o]=e[1];return on(no(o,a),e=>on(dn(r,e,e=>no(e,a)),e=>{Object.entries(e).forEach(([e,n])=>{i[e]={value:n}})}))})}return on(s,()=>xo({...e,levelStates:n},n,o))}function xo(e,n,t){const{bindingNodes:r,env:o}=e,a=r[e.bindingLevel],i=a[2],s=a[3];if(i){return{type:"Eval",node:i,env:o,k:[{...e,levelStates:n,phase:"evalWhen"},...t]}}if(s){return{type:"Eval",node:s,env:o,k:[{...e,levelStates:n,phase:"evalWhile"},...t]}}return ko({...e,levelStates:n},t)}function ko(e,n){const{bindingNodes:t,body:r,env:o}=e,a=e.bindingLevel+1;if(a<t.length){return{type:"Eval",node:t[a][0][1][1],env:o,k:[{...e,phase:"evalCollection",bindingLevel:a},...n]}}const i={...e,phase:"evalBody"};return{type:"Eval",node:r,env:o.create(e.context),k:[i,...n]}}function Eo(e,n,t,r,o){const a=Ur("dvala.error"),i=[e.shortMessage];for(let t=0;t<n.length;t++){const r=n[t];if("TryWith"===r.type)for(const o of r.handlers)if(Io(o,a,r.env,e.sourceCodeInfo))return No(o,r,i,n,t,e.sourceCodeInfo)}const s=$r("dvala.error",t);return s.length>0?$o("dvala.error",s,i,n,r,e.sourceCodeInfo,o):null}function So(e,n,r){for(let o=0;o<n.length;o++){const a=n[o];if("LoopIterate"===a.type){const{bindingNodes:i,bindingContext:s,body:u,env:l}=a,c=n.slice(o+1);if(e.length!==i.length)throw new t(`recur expected ${i.length} parameters, got ${e.length}`,r);const f=ln(i,(n,t)=>on(dn(n[1][0],ie(e[t]),e=>no(e,l)),e=>{Object.entries(e).forEach(([e,n])=>{s[e]={value:n}})}));return on(f,()=>{const e=l.getContextsRaw()[0];if(e!==s)for(const[n,t]of Object.entries(s))e[n]=t;const n={type:"LoopIterate",bindingNodes:i,bindingContext:s,body:u,env:l,sourceCodeInfo:a.sourceCodeInfo};return{type:"Eval",node:u,env:l,k:[n,...c]}})}if("FnBody"===a.type){const{fn:t,outerEnv:r}=a,i=n.slice(o+1);return ho(t,e,r,a.sourceCodeInfo,i)}}throw new t("recur called outside of loop or function body",r)}function Io(e,n,r,o){if(D(e.effectRef))return e.effectRef.name===n.name;if(k(e.effectRef)){const a=to(e.effectRef,[n],r,o);if(a instanceof Promise)throw new t("Effect handler predicates must be synchronous",o);return!!a}return!1}function No(e,n,t,r,o,a){const i=[{type:"EffectResume",resumeK:r,sourceCodeInfo:a},...r.slice(o+1)];return po(F(no(e.handlerNode,n.env),n.sourceCodeInfo),[t],[],n.env,a,i)}function Po(e,n,o,a,i,s,u){if("dvala.checkpoint"===e.name&&u){const e=n[0],t={continuation:Kr(o),timestamp:Date.now(),index:u.nextSnapshotIndex++,runId:u.runId,...void 0!==e?{meta:e}:{}};u.snapshots.push(t),void 0!==u.maxSnapshots&&u.snapshots.length>u.maxSnapshots&&u.snapshots.shift()}for(let t=0;t<o.length;t++){const r=o[t];if("TryWith"===r.type)for(const i of r.handlers)if(Io(i,e,r.env,a))return No(i,r,n,o,t,a)}const l=$r(e.name,i);if(l.length>0)return $o(e.name,l,n,o,s,a,u);const c=function(e){const n=eo[e];if(n)return(e,t,r)=>(ee(n.arity,e.length,r),n.handler(e,t,r))}(e.name);if(c)return c(n,o,a);if("dvala.error"===e.name){const e="string"==typeof n[0]?n[0]:String(n[0]??"Unknown error");throw new r(e,a)}throw new t(`Unhandled effect: '${e.name}'`,a)}function $o(e,n,o,a,i,s,u){const l=i??(new AbortController).signal,c=Array.from(o);return function o(i){if(i>=n.length){if("dvala.error"===e){const e="string"==typeof c[0]?c[0]:String(c[0]??"Unknown error");return Promise.reject(new r(e,s))}return Promise.reject(new t(`Unhandled effect: '${e}'`,s))}const[,f]=n[i];return new Promise((n,r)=>{let d=!1;function p(e){if(d)throw new t(`Effect handler called ${e}() after already calling another operation`,s);d=!0}f({effectName:e,args:c,signal:l,resume:e=>{p("resume"),e instanceof Promise?e.then(e=>{n({type:"Value",value:e,k:a})},e=>{n({type:"Error",error:e instanceof t?e:new t(e instanceof Error?e:`${e}`,s),k:a})}):n({type:"Value",value:e,k:a})},fail:r=>{p("fail");n({type:"Error",error:new t(r??`Effect handler failed for '${e}'`,s),k:a})},suspend:e=>{p("suspend"),r(new Cr(a,u?u.snapshots:[],u?u.nextSnapshotIndex:0,e))},next:()=>{p("next"),o(i+1).then(n,r)},get snapshots(){return u?[...u.snapshots]:[]},checkpoint:e=>{if(!u)throw new t("checkpoint is not available outside effect-enabled execution",s);const n={continuation:Kr(a),timestamp:Date.now(),index:u.nextSnapshotIndex++,runId:u.runId,...void 0!==e?{meta:e}:{}};return u.snapshots.push(n),void 0!==u.maxSnapshots&&u.snapshots.length>u.maxSnapshots&&u.snapshots.shift(),n},resumeFrom:(e,n)=>{if(d)throw new t("Effect handler called resumeFrom() after already calling another operation",s);if(!u)throw new t("resumeFrom is not available outside effect-enabled execution",s);const o=u.snapshots.find(n=>n.index===e.index&&n.runId===e.runId);if(!o)throw new t(`Invalid snapshot: no snapshot with index ${e.index} found in current run`,s);d=!0,r(new jr(o.continuation,n,o.index))}}).catch(e=>{d||(d=!0,Ar(e)||Or(e)?r(e):n({type:"Error",error:e instanceof t?e:new t(e instanceof Error?e:`${e}`,s),k:a}))})})}(0)}function Co(e,n){throw new Cr(e,[],0,n)}async function Ao(e,n,t,r){return Do({type:"Eval",node:e,env:n,k:[]},t,r)}function jo(e){const n={},t=e.getHostValues();if(t)for(const[e,r]of Object.entries(t))n[e]=r;const r=e.getContextsRaw();for(let e=r.length-1;e>=0;e--)for(const[t,o]of Object.entries(r[e]))n[t]=o.value;return n}function Oo(e,n){return e instanceof Promise?e.then(e=>({type:"Value",value:e,k:n}),e=>({type:"Error",error:e instanceof t?e:new t(`${e}`,void 0),k:n})):{type:"Value",value:e,k:n}}function Mo(e,n,r,o){try{switch(e.type){case"Value":{if(0===e.k.length)return e;const[n,...t]=e.k;return yo(n,e.value,t)}case"Eval":return co(e.node,e.env,e.k);case"Apply":return yo(e.frame,e.value,e.k);case"Perform":return Po(e.effect,e.args,e.k,e.sourceCodeInfo,n,r,o);case"Parallel":return async function(e,n,r,o,a){const i=a??(new AbortController).signal,s=e.map(e=>Ao(e,n,o,i)),u=await Promise.allSettled(s),l=[],c=[],f=[];for(let e=0;e<u.length;e++){const n=u[e];if("rejected"===n.status)f.push(new t(`${n.reason}`,void 0));else{const t=n.value;switch(t.type){case"completed":l.push({index:e,value:t.value});break;case"suspended":c.push({index:e,snapshot:t.snapshot});break;case"error":f.push(t.error)}}}if(f.length>0)throw f[0];if(c.length>0)return Co([{type:"ParallelResume",branchCount:e.length,completedBranches:l,suspendedBranches:c.slice(1)},...r],c[0].snapshot.meta);const d=Array.from({length:e.length});for(const{index:e,value:n}of l)d[e]=n;return{type:"Value",value:d,k:r}}(e.branches,e.env,e.k,n,r);case"Race":return async function(e,n,r,o,a){const i=a??(new AbortController).signal,s=e.map(()=>new AbortController),u=()=>{for(const e of s)e.abort(i.reason)};i.addEventListener("abort",u,{once:!0});try{let a=-1,i=null;const u=e.map(async(e,t)=>{const r=s[t].signal,u=await Ao(e,n,o,r);if("completed"===u.type&&a<0){a=t,i=u.value;for(let e=0;e<s.length;e++)e!==t&&s[e].abort("race: branch lost")}return u}),l=await Promise.allSettled(u);if(a>=0)return{type:"Value",value:i,k:r};const c=[],f=[];for(let e=0;e<l.length;e++){const n=l[e];if("rejected"===n.status)f.push(new t(`${n.reason}`,void 0));else{const e=n.value;switch(e.type){case"suspended":c.push(e.snapshot.meta??null);break;case"error":f.push(e.error)}}}c.length>0&&Co(r,{type:"race",branches:c});const d=f.map(e=>e.message).join("; ");throw new t(`race: all branches failed: ${d}`,void 0)}finally{i.removeEventListener("abort",u)}}(e.branches,e.env,e.k,n,r);case"ParallelResume":return function(e){const{value:n,branchCount:t,completedBranches:r,suspendedBranches:o,k:a}=e,i=new Set(r.map(e=>e.index)),s=new Set(o.map(e=>e.index));let u=-1;for(let e=0;e<t;e++)if(!i.has(e)&&!s.has(e)){u=e;break}const l=[...r,{index:u,value:n}];if(o.length>0){const e=o[0];return Co([{type:"ParallelResume",branchCount:t,completedBranches:l,suspendedBranches:o.slice(1)},...a],e.snapshot.meta)}const c=Array.from({length:t});for(const{index:e,value:n}of l)c[e]=n;return{type:"Value",value:c,k:a}}(e);case"Error":{const t=Eo(e.error,e.k,n,r,o);if(null!==t)return t;throw e.error}}}catch(a){if(Ar(a))throw a;if(a instanceof t){const t=Eo(a,"Value"===e.type?e.k.slice(1):e.k,n,r,o);if(null!==t)return t}throw a}}function Uo(e){let n=e;for(;;){if(n instanceof Promise)throw new t("Unexpected async operation in synchronous context. Use async.run() for async operations.",void 0);if("Value"===n.type&&0===n.k.length)return n.value;n=Mo(n)}}async function Vo(e){let n=e;for(;;){if(n instanceof Promise&&(n=await n),"Value"===n.type&&0===n.k.length)return n.value;n=Mo(n)}}function Ro(e,n){if(0===e.length)return{type:"Value",value:null,k:[]};if(1===e.length)return{type:"Eval",node:e[0],env:n,k:[]};const t={type:"Sequence",nodes:e,index:1,env:n};return{type:"Eval",node:e[0],env:n,k:[t]}}function To(e,n){const r=Ro(e.body,n);try{return Uo(r)}catch(r){if(r instanceof t&&r.message.includes("Unexpected async operation")){return Vo(Ro(e.body,n))}throw r}}function Bo(e,n){const r={type:"Eval",node:e,env:n,k:[]};try{return Uo(r)}catch(r){if(r instanceof t&&r.message.includes("Unexpected async operation")){return Vo({type:"Eval",node:e,env:n,k:[]})}throw r}}async function _o(e,n,t,r,o){const a=(new AbortController).signal;return Do(Ro(e.body,n),t,a,void 0,r,o)}async function Do(e,n,r,o,a,i){const u=null!=n&&"dvala.debug.step"in n,l={snapshots:o?o.snapshots:[],nextSnapshotIndex:o?o.nextSnapshotIndex:0,runId:"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const n=16*Math.random()|0;return("x"===e?n:3&n|8).toString(16)}),...void 0!==a?{maxSnapshots:a}:{}};let c=e;for(;;)try{for(;;){if(c instanceof Promise&&(c=await c),"Value"===c.type&&0===c.k.length)return{type:"completed",value:c.value};if(u&&"Eval"===c.type&&c.node[2]){const e=c.node[0];if(e===s.NormalExpression||e===s.SpecialExpression){const e={type:"DebugStep",phase:"awaitValue",sourceCodeInfo:c.node[2],env:c.env};c={...c,k:[e,...c.k]}}}c=Mo(c,n,r,l)}}catch(e){if(Or(e)){const{k:n}=Hr(e.continuation,i),t=l.snapshots.findIndex(n=>n.index>e.trimToIndex);-1!==t&&l.snapshots.splice(t),c={type:"Value",value:e.value,k:n};continue}if(Ar(e)){return{type:"suspended",snapshot:{continuation:Jr(e.k,e.snapshots,e.nextSnapshotIndex,e.meta),timestamp:Date.now(),index:l.nextSnapshotIndex++,runId:l.runId,meta:e.meta}}}return e instanceof t?{type:"error",error:e}:{type:"error",error:new t(`${e}`,void 0)}}}new Set(Object.keys(eo));const Lo=new Set([...Dn,...Ln,...Object.keys(Zt)]);class Fo{originalProgram;originalPosition;prefixProgram="";suffixProgram="";searchString="";suggestions=[];suggestionIndex=null;constructor(e,n,t,r){this.originalProgram=e,this.originalPosition=n;const o=this.originalProgram.slice(0,this.originalPosition),a=t.tokenize(o).tokens.at(-1);a&&"Error"!==a[0]&&(this.searchString=a[1],this.prefixProgram=this.originalProgram.slice(0,this.originalPosition-this.searchString.length),this.suffixProgram=this.originalProgram.slice(this.prefixProgram.length+this.searchString.length),this.originalProgram.slice(this.prefixProgram.length+this.searchString.length),this.suggestions=this.generateSuggestions(r))}getNextSuggestion(){return this.getAutoCompleteSuggestionResult(this.getNextSuggestionSymbol())}getPreviousSuggestion(){return this.getAutoCompleteSuggestionResult(this.getPreviousSuggestionSymbol())}getAutoCompleteSuggestionResult(e){return null===e?null:{program:this.prefixProgram+e+this.suffixProgram,position:this.prefixProgram.length+e.length}}getNextSuggestionSymbol(){return 0===this.suggestions.length?null:(null===this.suggestionIndex?this.suggestionIndex=0:(this.suggestionIndex+=1,this.suggestionIndex>=this.suggestions.length&&(this.suggestionIndex=0)),this.suggestions[this.suggestionIndex])}getPreviousSuggestionSymbol(){return 0===this.suggestions.length?null:(null===this.suggestionIndex?this.suggestionIndex=this.suggestions.length-1:(this.suggestionIndex-=1,this.suggestionIndex<0&&(this.suggestionIndex=this.suggestions.length-1)),this.suggestions[this.suggestionIndex])}getSuggestions(){return[...this.suggestions]}getSearchString(){return this.searchString}generateSuggestions(e){const n=new Set(["0_defn","0_lambda"]),t=this.generateWithPredicate(e,e=>!n.has(e)&&e.startsWith(this.searchString));t.forEach(e=>n.add(e));const r=this.generateWithPredicate(e,e=>!n.has(e)&&e.toLowerCase().startsWith(this.searchString.toLowerCase()));r.forEach(e=>n.add(e));const o=this.generateWithPredicate(e,e=>!n.has(e)&&e.includes(this.searchString));o.forEach(e=>n.add(e));const a=this.generateWithPredicate(e,e=>!n.has(e)&&e.includes(this.searchString.toLowerCase()));return a.forEach(e=>n.add(e)),[...t,...r,...o,...a]}generateWithPredicate(e,n){const t=new Set;return Lo.forEach(e=>{n(e)&&t.add(e)}),Object.keys(e.globalContext??{}).filter(n).forEach(e=>t.add(e)),e.contexts?.forEach(e=>{Object.keys(e).filter(n).forEach(e=>t.add(e))}),Object.keys(e.bindings??{}).filter(n).forEach(e=>t.add(e)),[...t].sort((e,n)=>e.localeCompare(n))}}function qo(e){return"object"==typeof e&&null!==e&&"string"==typeof e.program&&Array.isArray(e.fileModules)}const zo={collection:'{\n map: (first-coll, ...args) -> do\n let fn = last(args);\n let other-colls = slice(args, 0, count(args) - 1);\n let all-colls = [first-coll, ...other-colls];\n\n cond\n case object?(first-coll) then do\n let expected-keys = keys(first-coll) |> sort;\n doseq (obj in other-colls) -> do\n if not(object?(obj)) then\n perform(effect(dvala.error), "Expected object")\n end;\n let obj-keys = keys(obj) |> sort;\n if not(obj-keys == expected-keys) then\n perform(effect(dvala.error), ++(\n "All objects must have the same keys. Expected: ",\n join(expected-keys, ", "),\n ". Found: ",\n join(obj-keys, ", ")\n ))\n end\n end;\n reduce(keys(first-coll), (acc, k) -> do\n let a = for (coll in all-colls) -> coll(k);\n assoc(acc, k, apply(fn, a))\n end, {})\n end\n\n case string?(first-coll) then do\n doseq (s in other-colls) -> do\n if not(string?(s)) then\n perform(effect(dvala.error), "Expected string")\n end\n end;\n let len = reduce(other-colls, (m, s) -> min(m, count(s)), count(first-coll));\n let mapped = for (i in range(len)) -> do\n let a = for (coll in all-colls) -> nth(coll, i);\n apply(fn, a)\n end;\n reduce(mapped, (acc, ch) -> do\n if not(string?(ch)) then\n perform(effect(dvala.error), "Expected string")\n end;\n ++(acc, ch)\n end, "")\n end\n\n case true then do\n doseq (x in other-colls) -> do\n if not(array?(x)) then\n perform(effect(dvala.error), "Expected array")\n end\n end;\n let len = reduce(other-colls, (m, x) -> min(m, count(x)), count(first-coll));\n for (i in range(len)) -> do\n let a = for (coll in all-colls) -> nth(coll, i);\n apply(fn, a)\n end\n end\n end\n end,\n\n filter: (coll, fn) -> do\n cond\n case array?(coll) then\n reduce(coll, (acc, elem) -> if fn(elem) then [...acc, elem] else acc end, [])\n\n case string?(coll) then\n reduce(coll, (acc, ch) -> if fn(ch) then ++(acc, ch) else acc end, "")\n\n case object?(coll) then\n reduce(keys(coll), (acc, k) -> do\n if fn(coll(k)) then\n assoc(acc, k, coll(k))\n else\n acc\n end\n end, {})\n\n case true then\n perform(effect(dvala.error), "Expected collection")\n end\n end,\n\n reduce: (coll, fn, initial) -> do\n cond\n case string?(coll) then\n loop (acc = initial, i = 0) -> do\n if i >= count(coll) then\n acc\n else\n recur(fn(acc, nth(coll, i)), i + 1)\n end\n end\n\n case array?(coll) then\n loop (acc = initial, i = 0) -> do\n if i >= count(coll) then\n acc\n else\n recur(fn(acc, nth(coll, i)), i + 1)\n end\n end\n\n case object?(coll) then do\n let values = vals(coll);\n loop (acc = initial, i = 0) -> do\n if i >= count(values) then\n acc\n else\n recur(fn(acc, nth(values, i)), i + 1)\n end\n end\n end\n\n case true then\n perform(effect(dvala.error), "Expected collection")\n end\n end\n}',sequence:'{\n some: (seq, fn) -> do\n if null?(seq) then null\n else do\n loop (i = 0) -> do\n if i >= count(seq) then\n null\n else do\n let elem = nth(seq, i);\n if fn(elem) then elem\n else recur(i + 1)\n end\n end\n end\n end\n end\n end\n end,\n\n take-while: (seq, fn) -> do\n let is-str = string?(seq);\n let len = count(seq);\n let idx = loop (i = 0) -> do\n if i >= len then\n len\n else if fn(nth(seq, i)) then\n recur(i + 1)\n else\n i\n end\n end\n end;\n slice(seq, 0, idx)\n end,\n\n drop-while: (seq, fn) -> do\n let is-str = string?(seq);\n let len = count(seq);\n let idx = loop (i = 0) -> do\n if i >= len then\n len\n else if fn(nth(seq, i)) then\n recur(i + 1)\n else\n i\n end\n end\n end;\n slice(seq, idx)\n end,\n\n sort: (seq, ...args) -> do\n let cmp = if count(args) == 0 then compare else first(args) end;\n let is-str = string?(seq);\n let arr = if is-str then split(seq, "") else seq end;\n let len = count(arr);\n\n // merge two sorted arrays\n let merge-arrays = (left, right) -> do\n let left-len = count(left);\n let right-len = count(right);\n loop (result = [], li = 0, ri = 0) -> do\n if li >= left-len then\n ++(result, slice(right, ri))\n else if ri >= right-len then\n ++(result, slice(left, li))\n else do\n let l = nth(left, li);\n let r = nth(right, ri);\n if cmp(l, r) <= 0 then\n recur(push(result, l), li + 1, ri)\n else\n recur(push(result, r), li, ri + 1)\n end\n end\n end\n end\n end\n end;\n\n // recursive merge-sort\n let merge-sort = (a) -> do\n let n = count(a);\n if n <= 1 then a\n else do\n let mid = floor(n / 2);\n let left = merge-sort(slice(a, 0, mid));\n let right = merge-sort(slice(a, mid));\n merge-arrays(left, right)\n end\n end\n end;\n\n let sorted = merge-sort(arr);\n if is-str then join(sorted, "") else sorted end\n end\n}\n',array:'{\n mapcat: (arr, fn) -> do\n flatten(map(arr, fn), 1)\n end,\n\n moving-fn: (arr, window-size, fn) -> do\n if window-size > count(arr) then\n perform(effect(dvala.error), "Expected window-size <= array length")\n end;\n for (i in range(count(arr) - window-size + 1)) -> do\n fn(slice(arr, i, i + window-size))\n end\n end,\n\n running-fn: (arr, fn) -> do\n for (i in range(count(arr))) -> do\n fn(slice(arr, 0, i + 1))\n end\n end\n}\n',functional:'{\n "|>": (a, b) -> b(a),\n\n apply: (fn, ...args) -> do\n let arr = last(args);\n let leading = slice(args, 0, count(args) - 1);\n fn(...leading, ...arr)\n end\n}\n',object:'{\n merge-with: (...args) -> do\n let fn = last(args);\n let objs = slice(args, 0, count(args) - 1);\n if not(function?(fn)) then\n perform(effect(dvala.error), str("Expected function, got: ", type(fn)))\n end;\n if count(objs) == 0 then\n perform(effect(dvala.error), "Expected at least one object argument")\n end;\n reduce(rest(objs), (result, obj) -> do\n if not(object?(obj)) then\n perform(effect(dvala.error), str("Expected object, got: ", type(obj)))\n end;\n reduce(keys(obj), (res, key) -> do\n if contains?(res, key) then\n assoc(res, key, fn(get(res, key), get(obj, key)))\n else\n assoc(res, key, get(obj, key))\n end\n end, result)\n end, do\n let f = first(objs);\n if not(object?(f)) then\n perform(effect(dvala.error), str("Expected object, got: ", type(f)))\n end;\n f\n end)\n end\n}\n'};let Wo=!1;function Yo(){if(!Wo){Wo=!0;for(const[,e]of Object.entries(zo)){const n=To({body:sr(ur(Sr(e,!1,void 0),{removeWhiteSpace:!0})),hasDebugData:!1},Br());if(n instanceof Promise)throw new TypeError("Core dvala sources must be synchronous");if(!U(n))continue;const t=n;for(const[e,n]of Object.entries(t)){const t=Ke[e];t&&k(n)&&"UserDefined"===n.functionType&&(t.dvalaImpl=n)}}}}class Go{cache={};firstEntry=void 0;lastEntry=void 0;_size=0;maxSize;constructor(e){var n;if(this.maxSize=null===e?null:(n=e,Math.max(0,Math.ceil(n))),"number"==typeof this.maxSize&&this.maxSize<1)throw new Error(`1 is the minimum maxSize, got ${m(e)}`)}getContent(){return Object.entries(this.cache).reduce((e,[n,t])=>(e[n]=t.value,e),{})}get size(){return this._size}get(e){return this.cache[e]?.value}clear(){this.cache={},this.firstEntry=void 0,this.lastEntry=void 0,this._size=0}has(e){return!!this.cache[e]}set(e,n){if(this.has(e))throw new Error(`AstCache - key already present: ${e}`);const t={value:n,nextEntry:void 0,key:e};for(this.cache[e]=t,this._size+=1,this.lastEntry&&(this.lastEntry.nextEntry=t),this.lastEntry=t,this.firstEntry||(this.firstEntry=this.lastEntry);null!==this.maxSize&&this.size>this.maxSize;)this.dropFirstEntry()}dropFirstEntry(){const e=this.firstEntry;delete this.cache[e.key],this._size-=1,this.firstEntry=e.nextEntry}}class Ko{astCache;astCacheSize;debug;modules;constructor(e={}){if(Yo(),this.debug=e.debug??!1,this.astCacheSize=e.astCacheSize??null,this.astCacheSize){this.astCache=new Go(this.astCacheSize);const n=e.initialCache??{};for(const e of Object.keys(n))this.astCache.set(e,n[e])}else this.astCache=null;const n=e.modules??[];this.modules=new Map(n.map(e=>[e.name,e]))}getRuntimeInfo(){return{astCacheSize:this.astCacheSize,astCache:this.astCache,debug:this.debug}}async={run:async(e,n={})=>{if(Jo(n.bindings),qo(e))return this.runBundle(e,n);const t=this.generateAst(e,n);if(n.handlers){const e=Br(n,this.modules,n.pure),r=await _o(t,e,n.handlers);if("completed"===r.type)return r.value;if("error"===r.type)throw r.error;throw new TypeError("Unexpected suspension in Dvala.async.run(). Use the standalone effects API for suspend/resume.")}return this.evaluateAsync(t,n)},apply:async(e,n,t={})=>this.apply(e,n,t)};run(e,n={}){if(Jo(n.bindings),qo(e))return this.runBundle(e,n);const t=this.generateAst(e,n),r=this.evaluate(t,n);if(r instanceof Promise)throw new TypeError("Unexpected async result in synchronous run(). Use dvala.async.run() for async operations.");return r}runBundle(e,n={}){const t=Br(n,this.modules,n.pure),r=t.pure;t.pure=!0;for(const[r,o]of e.fileModules){const e=To(this.generateAst(o,n),t.create({}));t.registerValueModule(r,e)}t.pure=r;const o=To(this.generateAst(e.program,n),t);if(o instanceof Promise)throw new TypeError("Unexpected async result in synchronous runBundle(). Use dvala.async.run() for async operations.");return o}getUndefinedSymbols(e,n={}){const t="string"==typeof e?this.generateAst(e,n):e,r=Br(n,this.modules);return Kn(t,r,_n,Bo)}tokenize(e,n={}){const t=Sr(e,this.debug,n.filePath);return n.minify?ur(t,{removeWhiteSpace:!1}):t}parse(e){const n={body:[],hasDebugData:(e=ur(e,{removeWhiteSpace:!0})).hasDebugData};return n.body=sr(e),n}evaluate(e,n){return To(e,Br(n,this.modules,n.pure))}evaluateAsync(e,n){return function(e,n){return Vo(Ro(e.body,n))}(e,Br(n,this.modules,n.pure))}transformSymbols(e,n){return function(e,n){return{...e,tokens:e.tokens.map(e=>ot(e)?[e[0],n(e[1])]:e)}}(e,n)}untokenize(e){return function(e){return e.tokens.reduce((e,n)=>`${e}${n[1]}`,"")}(e)}apply(e,n,t={}){const r="FN_2eb7b316_471c_5bfa_90cb_d3dfd9164a59",o=this.generateApplyFunctionCall(r,n),a=this.generateAst(o,t),i=n.reduce((e,n,t)=>(e[`${r}_${t}`]=n,e),{[r]:e});return t.bindings={...t.bindings,...i},this.evaluate(a,t)}generateApplyFunctionCall(e,n){const t=n.map((n,t)=>`${e}_${t}`).join(", ");return`${e}(${t})`}generateAst(e,n){if(this.astCache){const n=this.astCache.get(e);if(n)return n}const t=this.tokenize(e,{filePath:n.filePath}),r=this.parse(t);return this.astCache?.set(e,r),r}getAutoCompleter(e,n,t={}){return new Fo(e,n,this,t)}}function Jo(e){if(e)for(const[n,t]of Object.entries(e))Ho(t,`bindings["${n}"]`)}function Ho(e,n){if(null!=e&&"boolean"!=typeof e&&"string"!=typeof e)if("number"!=typeof e){if("function"==typeof e)throw new TypeError(`${n} is not serializable (function)`);if("object"!=typeof e)throw new TypeError(`${n} is not serializable`);if(f in e)return;if(d in e||p in e)return;if(Array.isArray(e))return void e.forEach((e,t)=>Ho(e,`${n}[${t}]`));if(Object.getPrototypeOf(e)!==Object.prototype)throw new TypeError(`${n} is not serializable (not a plain object)`);for(const[t,r]of Object.entries(e))Ho(r,`${n}.${t}`)}else if(!Number.isFinite(e))throw new TypeError(`${n} is not serializable (${e})`)}function Xo(e){return{body:sr(ur(Sr(e,!1,void 0),{removeWhiteSpace:!0})),hasDebugData:!1}}function Zo(e,n){Yo();const t=n?.modules?new Map(n.modules.map(e=>[e.name,e])):void 0,r=Br({bindings:n?.bindings},t),o=To(Xo(e),r);if(o instanceof Promise)throw new TypeError("Unexpected async operation in runSync(). Use run() for async operations.");return o}async function Qo(e,n){try{Yo();const t=n?.modules?new Map(n.modules.map(e=>[e.name,e])):void 0,r=Br({bindings:n?.bindings},t),o=Xo(e),a={values:n?.bindings,modules:t};return await _o(o,r,n?.handlers,n?.maxSnapshots,a)}catch(e){return e instanceof t?{type:"error",error:e}:{type:"error",error:new t(`${e}`,void 0)}}}async function ea(e,n,r){try{const t=r?.modules?new Map(r.modules.map(e=>[e.name,e])):void 0,o=Hr(e.continuation,{values:r?.bindings,modules:t}),a={values:r?.bindings,modules:t};return await async function(e,n,t,r,o){return Do({type:"Value",value:n,k:e},t,(new AbortController).signal,r,r?.maxSnapshots,o)}(o.k,n,r?.handlers,{snapshots:o.snapshots,nextSnapshotIndex:o.nextSnapshotIndex,maxSnapshots:r?.maxSnapshots},a)}catch(e){return e instanceof t?{type:"error",error:e}:{type:"error",error:new t(`${e}`,void 0)}}}export{Ko as Dvala,E as asDvalaFunction,N as asUserDefinedFunction,S as assertDvalaFunction,P as assertUserDefinedFunction,$ as isBuiltinFunction,qo as isDvalaBundle,i as isDvalaError,k as isDvalaFunction,$e as isGrid,Ce as isMatrix,I as isUserDefinedFunction,Ie as isVector,Dn as normalExpressionKeys,ea as resume,Qo as run,Zo as runSync,Ln as specialExpressionKeys};
1
+ function e(e){if(!e.position||!e.code)return"";const n=e.position.column-1,t=e.code.length-n-1;return`${" ".repeat(Math.max(n,0))}^${" ".repeat(Math.max(t,0))}`}class n extends Error{params;constructor(e){super(`recur, params: ${e}`),Object.setPrototypeOf(this,n.prototype),this.name="RecurSignal",this.params=e}}class t extends Error{sourceCodeInfo;shortMessage;constructor(n,r){const o=n instanceof Error?n.message:`${n}`;super(function(n,t){if(!t)return n;const r=`${t.position.line}:${t.position.column}`;return`${n}${t.filePath?`\n${t.filePath}:${r}`:`\nLocation ${r}`}\n${t.code}\n${e(t)}`}(o,r)),this.shortMessage=o,this.sourceCodeInfo=r,Object.setPrototypeOf(this,t.prototype),this.name="DvalaError"}getCodeMarker(){return this.sourceCodeInfo&&e(this.sourceCodeInfo)}}class r extends t{userMessage;constructor(e,n){super(e,n),this.userMessage=e,Object.setPrototypeOf(this,r.prototype),this.name="UserDefinedError"}}class o extends t{constructor(e,n){super(e,n),Object.setPrototypeOf(this,o.prototype),this.name="AssertionError"}}class a extends t{symbol;constructor(e,n){super(`Undefined symbol '${e}'.`,n),this.symbol=e,Object.setPrototypeOf(this,a.prototype),this.name="UndefinedSymbolError"}}function s(e){return e instanceof t}const i={Number:1,String:2,NormalExpression:3,SpecialExpression:4,UserDefinedSymbol:5,NormalBuiltinSymbol:6,SpecialBuiltinSymbol:7,ReservedSymbol:8,Binding:9,Spread:10},u=new Set(Object.values(i));function c(e){return Object.keys(i).find(n=>i[n]===e)}const l=new Set(["UserDefined","Partial","Comp","Constantly","Juxt","Complement","EveryPred","SomePred","Fnull","EffectMatcher","Builtin","SpecialBuiltin","Module"]);const f="^^fn^^",d="^^re^^",p="^^ef^^";function h(e){return null!==e&&"object"==typeof e&&(f in e&&"functionType"in e&&function(e){return"string"==typeof e&&l.has(e)}(e.functionType))}function y(e){return!(!Array.isArray(e)||e.length<2)&&function(e){return"number"==typeof e&&u.has(e)}(e[0])}function m(e){return h(e)?`<function ${e.name||"λ"}>`:y(e)?`${c(e[0])}-node`:null===e?"null":"object"==typeof e&&e instanceof RegExp?`${e}`:"object"==typeof e&&e instanceof Error?e.toString():JSON.stringify(e)}function v(e,n){return e?.sourceCodeInfo??n}function g(e,n,r){return new t(`Expected ${e}, got ${m(n)}.`,v(n,r))}function b(e,n){return x(e,n),e}function x(e,n){if(!function(e){return void 0!==e}(e))throw new t("Unexpected undefined",v(e,n))}function w(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function k(e){return null!==e&&"object"==typeof e&&!!e[f]}function E(e,n){return S(e,n),e}function S(e,n){if(!k(e))throw g("DvalaFunction",e,n)}function I(e){return k(e)&&"UserDefined"===e.functionType}function N(e,n){return A(e,n),e}function A(e,n){if(!I(e))throw g("UserDefinedFunction",e,n)}function P(e){return w(e)&&"Builtin"===e.functionType}function $(e){return void 0!==e}function C(e,n){return j(e,n),e}function j(e,n){if(!$(e))throw g("not undefined",e,n)}function O(e){return Array.isArray(e)||"string"==typeof e}function M(e,n){if(!O(e))throw g("string or array",e,n)}function V(e){return!(null===e||"object"!=typeof e||Array.isArray(e)||e instanceof RegExp||k(e)||T(e)||_(e))}function U(e,n){if(!V(e))throw g("object",e,n)}function R(e){return O(e)||V(e)}function B(e,n){if(!R(e))throw g("string, array or object",e,n)}function T(e){return null!==e&&"object"==typeof e&&!!e[d]}function D(e,n){if(!function(e){return T(e)||"string"==typeof e}(e))throw g("string or RegularExpression",e,n)}function _(e){return null!==e&&"object"==typeof e&&!!e[p]}function L(e,n){if(!_(e))throw g("Effect",e,n)}function q(e,n){return F(e,n),e}function F(e,n){if(!function(e){return"number"==typeof e||!!R(e)||!!k(e)}(e))throw g("FunctionLike",e,n)}function W(e,n={}){return"string"==typeof e&&((!n.nonEmpty||0!==e.length)&&(!n.char||1===e.length))}function z(e,n,t={}){if(!W(e,t))throw g(""+(t.nonEmpty?"non empty string":t.char?"character":"string"),e,n)}function Y(e,n,t={}){return z(e,n,t),e}function G(e){return"string"==typeof e||"number"==typeof e}function K(e,n){return H(e,n),e}function H(e,n){if(!G(e))throw g("string or number",e,n)}const J={assert:{evaluate:(e,n)=>{const t=e[0],r=2===e.length?e[1]:`${t}`;if(z(r,n),!t)throw new o(r,n);return C(t,n)},arity:{min:1,max:2}}};function X(e,n={}){return"number"==typeof e&&(!Number.isNaN(e)&&(!(n.integer&&!Number.isInteger(e))&&(!(n.finite&&!Number.isFinite(e))&&((!n.zero||0===e)&&((!n.nonZero||0!==e)&&(!(n.positive&&e<=0)&&(!(n.negative&&e>=0)&&(!(n.nonPositive&&e>0)&&(!(n.nonNegative&&e<0)&&(!("number"==typeof n.gt&&e<=n.gt)&&(!("number"==typeof n.gte&&e<n.gte)&&(!("number"==typeof n.lt&&e>=n.lt)&&!("number"==typeof n.lte&&e>n.lte)))))))))))))}function Z(e,n,r={}){if(!X(e,r))throw new t(`Expected ${function(e){if(e.zero)return"zero";const n=function(e){return e.positive?"positive":e.negative?"negative":e.nonNegative?"non negative":e.nonPositive?"non positive":e.nonZero?"non zero":""}(e),t=e.integer?"integer":"number",r=e.finite?"finite":"",o=function(e){return"number"!=typeof e.gt&&"number"!=typeof e.gte||"number"!=typeof e.lt&&"number"!=typeof e.lte?"number"==typeof e.gt||"number"==typeof e.gte?"number"==typeof e.gt?`n > ${e.gt}`:`n >= ${e.gte}`:"number"==typeof e.lt||"number"==typeof e.lte?"number"==typeof e.lt?`n < ${e.lt}`:`n <= ${e.lte}`:"":`${"number"==typeof e.gt?`${e.gt} < n `:`${e.gte} <= n `}${"number"==typeof e.lt?`< ${e.lt}`:`<= ${e.lte}`}`}(e);return[n,r,t,o].filter(e=>!!e).join(" ")}(r)}, got ${m(e)}.`,v(e,n))}function Q(e,n){const{min:t}=e;return!("number"==typeof t&&n<t)}function ee(e,n,r){const{min:o,max:a}=e;if("number"==typeof o&&n<o)throw new t(`Wrong number of arguments, expected at least ${o}, got ${m(n)}.`,r);if("number"==typeof a&&n>a)throw new t(`Wrong number of arguments, expected at most ${a}, got ${m(n)}.`,r)}function ne(e){return{min:e,max:e}}const te={"<<":{evaluate:([e,n],t)=>(Z(e,t,{integer:!0}),Z(n,t,{integer:!0,nonNegative:!0}),e<<n),arity:ne(2)},">>":{evaluate:([e,n],t)=>(Z(e,t,{integer:!0}),Z(n,t,{integer:!0,nonNegative:!0}),e>>n),arity:ne(2)},">>>":{evaluate:([e,n],t)=>(Z(e,t,{integer:!0}),Z(n,t,{integer:!0,nonNegative:!0}),e>>>n),arity:ne(2)},"&":{evaluate:([e,...n],t)=>(Z(e,t,{integer:!0}),n.reduce((e,n)=>(Z(n,t,{integer:!0}),e&n),e)),arity:{min:2}},"|":{evaluate:([e,...n],t)=>(Z(e,t,{integer:!0}),n.reduce((e,n)=>(Z(n,t,{integer:!0}),e|n),e)),arity:{min:2}},xor:{evaluate:([e,...n],t)=>(Z(e,t,{integer:!0}),n.reduce((e,n)=>(Z(n,t,{integer:!0}),e^n),e)),arity:{min:2}}};function re(e,n){return!!R(e)&&("string"==typeof e||Array.isArray(e)?!!X(n,{integer:!0})&&(n>=0&&n<e.length):!!Object.getOwnPropertyDescriptor(e,n))}function oe(e,n,r){if(H(e,r),H(n,r),"string"==typeof e&&"string"==typeof n)return e<n?-1:e>n?1:0;if("number"==typeof e&&"number"==typeof n)return Math.sign(e-n);throw new t(`Cannot compare values of different types: ${typeof e} and ${typeof n}`,r)}function ae(e,n,t){if(e===n)return!0;if("number"==typeof e&&"number"==typeof n)return function(e,n,t=ce){if(e===n)return!0;const r=Math.abs(e-n);if(0===e||0===n||r<t)return r<t;const o=Math.abs(e),a=Math.abs(n);return r/(o+a)<t}(e,n);if(Array.isArray(e)&&Array.isArray(n)){if(e.length!==n.length)return!1;for(let r=0;r<e.length;r+=1)if(!ae(C(e[r],t),C(n[r],t),t))return!1;return!0}if(T(e)&&T(n))return e.s===n.s&&e.f===n.f;if(w(e)&&w(n)){const r=Object.keys(e),o=Object.keys(n);if(r.length!==o.length)return!1;for(let o=0;o<r.length;o+=1){const a=Y(r[o],t);if(!ae(e[a],n[a],t))return!1}return!0}return!1}function se(e){return e??null}function ie(...e){const n=new Set;for(const t of e)t.forEach(e=>n.add(e));return n}function ue(e,n){n.forEach(n=>e.add(n))}const ce=1e-10;function le(e,n=0){const t=e.split("\n");for(;t[0]?.match(/^\s*$/);)t.shift();for(;t[t.length-1]?.match(/^\s*$/);)t.pop();const r=t.reduce((e,n)=>{if(n.match(/^\s*$/))return e;const t=n.match(/^\s*/)[0].length;return Math.min(e,t)},1/0);return t.map(e=>" ".repeat(n)+e.slice(r)).join("\n").trimEnd()}function fe(e,n){if(!Array.isArray(e))throw g("array",e,n)}function de(e,n){if(!function(e){return Array.isArray(e)&&e.every(e=>"string"==typeof e)}(e))throw g("array of strings",e,n)}function pe(e,n){if(!function(e){return Array.isArray(e)&&e.every(e=>"string"==typeof e&&1===e.length)}(e))throw g("array of strings",e,n)}const he={filter:{evaluate:()=>{throw new Error("filter is implemented in Dvala")},arity:ne(2)},map:{evaluate:()=>{throw new Error("map is implemented in Dvala")},arity:{min:2}},reduce:{evaluate:()=>{throw new Error("reduce is implemented in Dvala")},arity:ne(3)},get:{evaluate:(e,n)=>{const[t,r]=e,o=se(e[2]);if(H(r,n),null===t)return o;B(t,n);const a=function(e,n){if(V(e)){if("string"==typeof n&&re(e,n))return se(e[n])}else if(X(n,{nonNegative:!0,integer:!0})&&n>=0&&n<e.length)return se(e[n])}(t,r);return void 0===a?o:a},arity:{min:2,max:3}},count:{evaluate:([e],n)=>null===e?0:"string"==typeof e?e.length:(B(e,n),Array.isArray(e)?e.length:Object.keys(e).length),arity:ne(1)},"contains?":{evaluate:([e,n],t)=>null!==e&&(B(e,t),W(e)?(z(n,t),e.includes(n)):O(e)?(j(n,t),!!e.find(e=>ae(C(e),n,t))):(z(n,t),n in e)),arity:ne(2)},assoc:{evaluate:([e,n,t],r)=>(B(e,r),H(n,r),j(t,r),function(e,n,t,r){if(B(e,r),H(n,r),Array.isArray(e)||"string"==typeof e){if(Z(n,r,{integer:!0}),Z(n,r,{gte:0}),Z(n,r,{lte:e.length}),"string"==typeof e)return z(t,r,{char:!0}),`${e.slice(0,n)}${t}${e.slice(n+1)}`;const o=[...e];return o[n]=t,o}z(n,r);const o={...e};return o[n]=t,o}(e,n,t,r)),arity:ne(3)},"++":{evaluate:(e,n)=>(X(e[0])||B(e[0],n),Array.isArray(e[0])?e.reduce((e,t)=>(fe(t,n),e.concat(t)),[]):G(e[0])?e.reduce((e,t)=>(H(t,n),`${e}${t}`),""):e.reduce((e,t)=>(U(t,n),Object.assign(e,t)),{})),arity:{min:1}}},ye={range:{evaluate:(e,n)=>{const[t,r,o]=e;let a,s,i;Z(t,n,{finite:!0}),1===e.length?(a=0,s=t,i=s>=0?1:-1):2===e.length?(Z(r,n,{finite:!0}),a=t,s=r,i=s>=a?1:-1):(Z(r,n,{finite:!0}),Z(o,n,{finite:!0}),a=t,s=r,i=o,Z(i,n,s>a?{positive:!0}:s<a?{negative:!0}:{nonZero:!0}));const u=[];for(let e=a;i<0?e>s:e<s;e+=i)u.push(e);return u},arity:{min:1,max:3}},repeat:{evaluate:([e,n],t)=>{Z(n,t,{integer:!0,nonNegative:!0});const r=[];for(let t=0;t<n;t+=1)r.push(e);return r},arity:ne(2)},flatten:{evaluate:([e,n],t)=>{fe(e,t);const r=void 0===n||n===Number.POSITIVE_INFINITY?Number.POSITIVE_INFINITY:function(e,n,t={}){return Z(e,n,t),e}(n,t,{integer:!0,nonNegative:!0});return e.flat(r)},arity:{min:1,max:2}},mapcat:{evaluate:()=>{throw new Error("mapcat is implemented in Dvala")},arity:ne(2)},"moving-fn":{evaluate:()=>{throw new Error("moving-fn is implemented in Dvala")},arity:ne(3)},"running-fn":{evaluate:()=>{throw new Error("running-fn is implemented in Dvala")},arity:ne(2)}},me={nth:{evaluate:(e,n)=>{const[t,r]=e,o=se(e[2]);if(Z(r,n,{integer:!0}),null===t)return o;if(M(t,n),r>=0&&r<t.length){return se(t[r])}return o},arity:{min:2,max:3}},first:{evaluate:([e],n)=>{if(null===e)return null;M(e,n);return se(e[0])},arity:ne(1)},last:{evaluate:([e],n)=>{if(null===e)return null;M(e,n);return se(e.at(-1))},arity:ne(1)},pop:{evaluate:([e],n)=>(M(e,n),"string"==typeof e?e.substring(0,e.length-1):e.slice(0,e.length-1)),arity:ne(1)},"index-of":{evaluate:([e,n],t)=>{if(j(n,t),null===e)return null;if(M(e,t),"string"==typeof e){z(n,t);const r=e.indexOf(n);return-1!==r?r:null}{const r=e.findIndex(e=>ae(C(e,t),n),t);return-1!==r?r:null}},arity:ne(2)},push:{evaluate:([e,...n],t)=>(M(e,t),"string"==typeof e?(pe(n,t),[e,...n].join("")):[...e,...n]),arity:{min:2}},rest:{evaluate:([e],n)=>(M(e,n),Array.isArray(e)?e.length<=1?[]:e.slice(1):e.substring(1)),arity:ne(1)},next:{evaluate:([e],n)=>(M(e,n),Array.isArray(e)?e.length<=1?null:e.slice(1):e.length<=1?null:e.substring(1)),arity:ne(1)},reverse:{evaluate:([e],n)=>null===e?null:(M(e,n),Array.isArray(e)?[...e].reverse():e.split("").reverse().join("")),arity:ne(1)},second:{evaluate:([e],n)=>null===e?null:(M(e,n),se(e[1])),arity:ne(1)},slice:{evaluate:(e,n)=>{const[t,r,o]=e;return M(t,n),Z(r,n,{integer:!0}),2===e.length?(Array.isArray(t),t.slice(r)):(Z(o,n,{integer:!0}),Array.isArray(t),t.slice(r,o))},arity:{min:2,max:3}},some:{evaluate:()=>{throw new Error("some is implemented in Dvala")},arity:ne(2)},sort:{evaluate:()=>{throw new Error("sort is implemented in Dvala")},arity:{min:1,max:2}},take:{evaluate:([e,n],t)=>{Z(n,t),M(e,t);const r=Math.max(Math.ceil(n),0);return e.slice(0,r)},arity:ne(2)},"take-last":{evaluate:([e,n],t)=>{M(e,t),Z(n,t);const r=Math.max(Math.ceil(n),0),o=e.length-r;return e.slice(o)},arity:ne(2)},drop:{evaluate:([e,n],t)=>{Z(n,t);const r=Math.max(Math.ceil(n),0);return M(e,t),e.slice(r)},arity:ne(2)},"drop-last":{evaluate:([e,n],t)=>{M(e,t),Z(n,t);const r=Math.max(Math.ceil(n),0),o=e.length-r;return e.slice(0,o)},arity:ne(2)},"take-while":{evaluate:()=>{throw new Error("take-while is implemented in Dvala")},arity:ne(2)},"drop-while":{evaluate:()=>{throw new Error("drop-while is implemented in Dvala")},arity:ne(2)}},ve=new WeakSet,ge=new WeakSet,be=new WeakSet,xe=new WeakSet,we=new WeakSet,ke=new WeakSet,Ee=new WeakSet;function Se(e){return Array.isArray(e)?(ve.has(e)||(Ie(e),$e(e)||Pe(e)),e):e}function Ie(e){return!!Array.isArray(e)&&(!!ge.has(e)||!be.has(e)&&(e.every(e=>X(e))?(ve.add(e),ge.add(e),!0):(be.add(e),!1)))}function Ne(e,n){if(!Ie(e))throw new t(`Expected a vector, but got ${e}`,n)}function Ae(e,n){if(Ne(e,n),0===e.length)throw new t(`Expected a non empty vector, but got ${e}`,n)}function Pe(e,n){if(!Array.isArray(e))return!1;if(ke.has(e))return!0;if(Ee.has(e))return!1;if(0===e.length)return Ee.add(e),!1;if(!Array.isArray(e[0]))return Ee.add(e),!1;const t=e[0].length;if(0===t)return Ee.add(e),!1;for(const r of e){if(!Array.isArray(r))return Ee.add(e),!1;if(r.length!==t)return Ee.add(e),!1;if(n&&r.some(e=>!n(e)))return!1}return ve.add(e),ke.add(e),!0}function $e(e){return Pe(e,X)?(xe.add(e),!0):(Array.isArray(e)&&we.add(e),!1)}function Ce(e,n){let r=!1,o=!1;for(const a of e)if(Ie(a))r=!0;else if($e(a))o=!0;else if(!X(a))throw new t("Invalid parameter type: "+typeof a,n);if(o){if(r)throw new t("Cannot mix vector and matrix types",n);let o=null,a=null;for(const r of e)if($e(r))if(null===o)o=r.length,a=r[0].length;else if(r.length!==o||r[0].length!==a)throw new t("Matrix dimensions do not match",n);return["matrix",e.map(e=>$e(e)?e:Array.from({length:o},()=>Array.from({length:a},()=>e)))]}if(r){let r=null;for(const o of e)if(Ie(o))if(null===r)r=o.length;else if(o.length!==r)throw new t("Vector lengths do not match",n);return["vector",e.map(e=>Ie(e)?e:Array.from({length:r},()=>e))]}return["number",e]}function je(e){return(n,t)=>{const[r,o]=Ce(n,t);return"number"===r?e(o[0]):"vector"===r?o[0].map(n=>e(n)):o[0].map(n=>n.map(n=>e(n)))}}function Oe(e){return(n,t)=>{const[r,o]=Ce(n,t);return"number"===r?e(o[0],o[1]):"vector"===r?o[0].map((n,t)=>e(n,o[1][t])):o[0].map((n,t)=>n.map((n,r)=>e(n,o[1][t][r])))}}function Me(e,n){return(t,r)=>{if(0===t.length)return e;const[o,a]=Ce(t,r);if("number"===o)return a.reduce((e,t)=>n(e,t),e);if("vector"===o){const[e,...t]=a;return t.reduce((e,t)=>e.map((e,r)=>n(e,t[r])),e)}{const[e,...t]=a;return t.reduce((e,t)=>e.map((e,r)=>e.map((e,o)=>n(e,t[r][o]))),e)}}}const Ve={inc:{evaluate:je(e=>e+1),arity:ne(1)},dec:{evaluate:je(e=>e-1),arity:ne(1)},"+":{evaluate:Me(0,(e,n)=>e+n),arity:{}},"*":{evaluate:Me(1,(e,n)=>e*n),arity:{}},"/":{evaluate:(e,n)=>{if(0===e.length)return 1;const[t,r]=Ce(e,n);if("number"===t){const[e,...n]=r;return 0===n.length?1/e:n.reduce((e,n)=>e/n,e)}if("vector"===t){const e=r[0];return r.slice(1).reduce((e,n)=>e.map((e,t)=>e/n[t]),e)}{const e=r[0];return r.slice(1).reduce((e,n)=>e.map((e,t)=>e.map((e,r)=>e/n[t][r])),e)}},arity:{}},"-":{evaluate:(e,n)=>{if(0===e.length)return 0;const[t,r]=Ce(e,n);if("number"===t){const[e,...n]=r;return 0===n.length?-e:n.reduce((e,n)=>e-n,e)}if("vector"===t){const e=r[0];return r.slice(1).reduce((e,n)=>e.map((e,t)=>e-n[t]),e)}{const e=r[0];return r.slice(1).reduce((e,n)=>e.map((e,t)=>e.map((e,r)=>e-n[t][r])),e)}},arity:{}},quot:{evaluate:Oe((e,n)=>Math.trunc(e/n)),arity:ne(2)},mod:{evaluate:Oe((e,n)=>e-n*Math.floor(e/n)),arity:ne(2)},"%":{evaluate:Oe((e,n)=>e%n),arity:ne(2)},sqrt:{evaluate:je(e=>Math.sqrt(e)),arity:ne(1)},cbrt:{evaluate:je(e=>Math.cbrt(e)),arity:ne(1)},"^":{evaluate:Oe((e,n)=>e**n),arity:ne(2)},round:{evaluate:([e,n],t)=>{const[r,o]=Ce([e],t);if("number"===r){if(void 0===n||0===n)return Math.round(o[0]);{Z(n,t,{integer:!0,positive:!0});const e=10**n;return Math.round(o[0]*e)/e}}if("vector"===r){const e=o[0];if(void 0===n||0===n)return e.map(e=>Math.round(e));{Z(n,t,{integer:!0,positive:!0});const r=10**n;return e.map(e=>Math.round(e*r)/r)}}{const e=o[0];if(void 0===n||0===n)return e.map(e=>e.map(e=>Math.round(e)));{Z(n,t,{integer:!0,positive:!0});const r=10**n;return e.map(e=>e.map(e=>Math.round(e*r)/r))}}},arity:{min:1,max:2}},trunc:{evaluate:je(e=>Math.trunc(e)),arity:ne(1)},floor:{evaluate:je(e=>Math.floor(e)),arity:ne(1)},ceil:{evaluate:je(e=>Math.ceil(e)),arity:ne(1)},min:{evaluate:(e,n)=>{if(1===e.length&&Ie(e[0])){const t=e[0];return Ae(t,n),t.reduce((e,n)=>Math.min(e,n),1/0)}const[t,...r]=e;return Z(t,n),r.reduce((e,t)=>(Z(t,n),Math.min(e,t)),t)},arity:{min:1}},max:{evaluate:(e,n)=>{if(1===e.length&&Ie(e[0])){const t=e[0];return Ae(t,n),t.reduce((e,n)=>Math.max(e,n),-1/0)}const[t,...r]=e;return Z(t,n),r.reduce((e,t)=>(Z(t,n),Math.max(e,t)),t)},arity:{min:1}},abs:{evaluate:je(e=>Math.abs(e)),arity:ne(1)},sign:{evaluate:je(e=>Math.sign(e)),arity:ne(1)}};function Ue([e,...n],t){const r=C(e,t);for(const e of n)if(!ae(r,C(e,t),t))return!1;return!0}const Re={"==":{evaluate:(e,n)=>Ue(e,n),arity:{min:1}},"!=":{evaluate:(e,n)=>!Ue(e,n),arity:{min:1}},"identical?":{evaluate:e=>function([e,...n]){for(const t of n)if(t!==e)return!1;return!0}(e),arity:{min:1}},">":{evaluate:([e,...n],t)=>{let r=K(e);for(const e of n){if(oe(r,K(e),t)<=0)return!1;r=K(e)}return!0},arity:{min:1}},"<":{evaluate:([e,...n],t)=>{let r=K(e);for(const e of n){if(oe(r,K(e),t)>=0)return!1;r=K(e)}return!0},arity:{min:1}},">=":{evaluate:([e,...n],t)=>{let r=K(e);for(const e of n){if(oe(r,K(e),t)<0)return!1;r=K(e)}return!0},arity:{min:1}},"<=":{evaluate:([e,...n],t)=>{let r=K(e);for(const e of n){if(oe(r,K(e),t)>0)return!1;r=K(e)}return!0},arity:{min:1}},not:{evaluate:([e])=>!e,arity:ne(1)},"epoch->iso-date":{evaluate:([e],n)=>(Z(e,n),new Date(e).toISOString()),arity:ne(1)},"iso-date->epoch":{evaluate:([e],n)=>{z(e,n);const t=new Date(e).valueOf();return Z(t,n,{finite:!0}),t},arity:ne(1)},boolean:{evaluate:([e])=>!!e,arity:ne(1)},compare:{evaluate:([e,n],t)=>(H(e,t),H(n,t),oe(e,n,t)),arity:ne(2)},"json-parse":{evaluate:([e],n)=>(z(e,n),JSON.parse(e)),arity:ne(1)},"json-stringify":{evaluate:([e,n],t)=>(j(e,t),void 0===n?JSON.stringify(e):(Z(n,t),JSON.stringify(e,null,n))),arity:{min:1,max:2}},"effect-name":{evaluate:([e],n)=>function(e,n){return L(e,n),e}(e,n).name,arity:ne(1)},"effect-matcher":{evaluate:([e],n)=>{if("string"==typeof e)return{[f]:!0,sourceCodeInfo:n,functionType:"EffectMatcher",matchType:"string",pattern:e,flags:"",arity:ne(1)};if(T(e))return{[f]:!0,sourceCodeInfo:n,functionType:"EffectMatcher",matchType:"regexp",pattern:e.s,flags:e.f,arity:ne(1)};throw new t("effect-matcher expects a string or regexp pattern",n)},arity:ne(1)},"type-of":{evaluate:([e])=>null==e?"null":"boolean"==typeof e?"boolean":"number"==typeof e?"number":"string"==typeof e?"string":_(e)?"effect":T(e)?"regexp":k(e)?"function":Array.isArray(e)?"array":"object",arity:ne(1)}},Be={keys:{evaluate:([e],n)=>(U(e,n),Object.keys(e)),arity:ne(1)},vals:{evaluate:([e],n)=>(U(e,n),Object.values(e)),arity:ne(1)},entries:{evaluate:([e],n)=>(U(e,n),Object.entries(e)),arity:ne(1)},find:{evaluate:([e,n],t)=>(U(e,t),z(n,t),re(e,n)?[n,e[n]]:null),arity:ne(2)},dissoc:{evaluate:([e,n],t)=>{U(e,t),z(n,t);const r={...e};return delete r[n],r},arity:ne(2)},merge:{evaluate:(e,n)=>{if(0===e.length)return null;const[t,...r]=e;return U(t,n),r.reduce((e,t)=>(U(t,n),{...e,...t}),{...t})},arity:{min:0}},"merge-with":{evaluate:()=>{throw new Error("merge-with is implemented in Dvala")},arity:{min:2}},zipmap:{evaluate:([e,n],t)=>{de(e,t),fe(n,t);const r=Math.min(e.length,n.length),o={};for(let a=0;a<r;a+=1){o[Y(e[a],t)]=se(n[a])}return o},arity:ne(2)},"select-keys":{evaluate:([e,n],t)=>(de(n,t),U(e,t),n.reduce((n,t)=>(re(e,t)&&(n[t]=se(e[t])),n),{})),arity:ne(2)}},Te={"function?":{evaluate:([e])=>k(e),arity:ne(1)},"string?":{evaluate:([e])=>"string"==typeof e,arity:ne(1)},"number?":{evaluate:([e])=>"number"==typeof e,arity:ne(1)},"integer?":{evaluate:([e])=>"number"==typeof e&&X(e,{integer:!0}),arity:ne(1)},"boolean?":{evaluate:([e])=>"boolean"==typeof e,arity:ne(1)},"null?":{evaluate:([e])=>null==e,arity:ne(1)},"zero?":{evaluate:([e],n)=>(Z(e,n,{finite:!0}),Math.abs(e)<ce),arity:ne(1)},"pos?":{evaluate:([e],n)=>(Z(e,n,{finite:!0}),e>0),arity:ne(1)},"neg?":{evaluate:([e],n)=>(Z(e,n,{finite:!0}),e<0),arity:ne(1)},"even?":{evaluate:([e],n)=>(Z(e,n,{finite:!0}),e%2==0),arity:ne(1)},"odd?":{evaluate:([e],n)=>(Z(e,n,{finite:!0}),X(e,{integer:!0})&&e%2!=0),arity:ne(1)},"array?":{evaluate:([e])=>Array.isArray(e),arity:ne(1)},"collection?":{evaluate:([e])=>R(e),arity:ne(1)},"sequence?":{evaluate:([e])=>O(e),arity:ne(1)},"object?":{evaluate:([e])=>V(e),arity:ne(1)},"regexp?":{evaluate:([e])=>T(e),arity:ne(1)},"effect?":{evaluate:([e])=>_(e),arity:ne(1)},"finite?":{evaluate:([e],n)=>(Z(e,n),Number.isFinite(e)),arity:ne(1)},"positive-infinity?":{evaluate:([e],n)=>(Z(e,n),e===Number.POSITIVE_INFINITY),arity:ne(1)},"negative-infinity?":{evaluate:([e],n)=>(Z(e,n),e===Number.NEGATIVE_INFINITY),arity:ne(1)},"true?":{evaluate:([e])=>!0===e,arity:ne(1)},"false?":{evaluate:([e])=>!1===e,arity:ne(1)},"empty?":{evaluate:([e],n)=>null===e||(B(e,n),"string"==typeof e||Array.isArray(e)?0===e.length:0===Object.keys(e).length),arity:ne(1)},"not-empty?":{evaluate:([e],n)=>null!==e&&(B(e,n),"string"==typeof e||Array.isArray(e)?e.length>0:Object.keys(e).length>0),arity:ne(1)},"vector?":{evaluate:([e])=>Ie(e),arity:ne(1)},"matrix?":{evaluate:([e])=>$e(e),arity:ne(1)},"grid?":{evaluate:([e])=>Pe(e),arity:ne(1)}},De={regexp:{evaluate:([e,n],r)=>{z(e,r);const o=e||"(?:)",a="string"==typeof n?n:"";try{new RegExp(o,a)}catch(e){throw new t(`Invalid regular expression: ${o} ${a}`,r)}return{[d]:!0,sourceCodeInfo:r,s:o,f:a}},arity:{min:1,max:2}},"re-match":{evaluate:([e,n],t)=>{if(function(e,n){if(!T(e))throw g("RegularExpression",e,n)}(n,t),!W(e))return null;const r=new RegExp(n.s,n.f).exec(e);return r?[...r]:null},arity:ne(2)},replace:{evaluate:([e,n,t],r)=>{z(e,r),D(n,r),z(t,r);const o=T(n)?new RegExp(n.s,`${n.f}`):n;return e.replace(o,t)},arity:ne(3)},"replace-all":{evaluate:([e,n,t],r)=>{z(e,r),D(n,r),z(t,r);const o=T(n)?new RegExp(n.s,`${n.f.includes("g")?n.f:`${n.f}g`}`):n;return e.replaceAll(o,t)},arity:ne(3)}},_e=/^\s*$/,Le={str:{evaluate:e=>e.reduce((e,n)=>e+(null==n?"":V(n)||Array.isArray(n)?JSON.stringify(n):`${n}`),""),arity:{}},number:{evaluate:([e],n)=>{z(e,n);const r=Number(e);if(Number.isNaN(r))throw new t(`Could not convert '${e}' to a number.`,n);return r},arity:ne(1)},"lower-case":{evaluate:([e],n)=>(z(e,n),e.toLowerCase()),arity:ne(1)},"upper-case":{evaluate:([e],n)=>(z(e,n),e.toUpperCase()),arity:ne(1)},trim:{evaluate:([e],n)=>(z(e,n),e.trim()),arity:ne(1)},join:{evaluate:([e,n],t)=>(fe(e,t),e.forEach(e=>H(e,t)),z(n,t),e.join(n)),arity:ne(2)},split:{evaluate:([e,n,t],r)=>{z(e,r),D(n,r),void 0!==t&&Z(t,r,{integer:!0,nonNegative:!0});const o="string"==typeof n?n:new RegExp(n.s,n.f);return e.split(o,t)},arity:{min:2,max:3}},"blank?":{evaluate:([e],n)=>null===e||(z(e,n),_e.test(e)),arity:ne(1)}},qe={"|>":{evaluate:()=>{throw new Error("|> is implemented in Dvala")},arity:ne(2)},apply:{evaluate:()=>{throw new Error("apply is implemented in Dvala")},arity:{min:2}},identity:{evaluate:([e])=>se(e),arity:ne(1)},comp:{evaluate:(e,n)=>{return e.forEach(e=>F(e,n)),{[f]:!0,sourceCodeInfo:n,functionType:"Comp",params:e,arity:e.length>0?(t=e.at(-1),"number"==typeof t||R(t)?ne(1):t.arity):{min:1,max:1}};var t},arity:{}},constantly:{evaluate:([e],n)=>({[f]:!0,sourceCodeInfo:n,functionType:"Constantly",value:se(e),arity:{}}),arity:ne(1)}};function Fe(e){return le(`\n ${e.title}\n\n ${e.description.replace(/`(.+?)`/g,"$1").replace(/\$(\w+)/g,"$1").replace(/\*\*\*(.+)\*\*\*/g,"$1").replace(/\*\*(.+)\*\*/g,"$1")}\n\n Signature:\n ${function(e){const{title:n,variants:t,args:r,returns:o}=e,a=!We(e)&&e._isOperator,s=t.map(t=>{if(We(e)){const e=t.argumentNames.length>0?`, ${t.argumentNames.map(e=>{let n="";return r[e].rest&&(n+="..."),n+=e,n}).join(", ")}`:"";return` perform(effect(${n})${e}) -> ${ze(o)}`}return`${` ${n}(${t.argumentNames.map(e=>{let n="";return r[e].rest&&(n+="..."),n+=e,n}).join(", ")})`} -> ${ze(o)}`}),i=a?["","Operator:",` a ${n} b -> ${ze(o)}`]:[];return[...s,...i]}(e).join("\n ")}\n\n Arguments:\n ${function(e){return Object.entries(e.args).map(([e,n])=>`${e}: ${ze(n)}`)}(e).join("\n ")}\n\n Examples:\n${e.examples.map(e=>le(e,4)).join("\n\n")}`)}function We(e){return"effect"in e}function ze(e){const n=e.type,t=(Array.isArray(n)?n:[n]).join(" | ");return e.array||e.rest?`Array<${t}>`:t}const Ye={sum:{evaluate:([e],n)=>(Ne(e,n),e.reduce((e,n)=>e+n,0)),arity:ne(1)},prod:{evaluate:([e],n)=>(Ne(e,n),e.reduce((e,n)=>e*n,1)),arity:ne(1)},mean:{evaluate:([e],n)=>(Ae(e,n),e.reduce((e,n)=>e+n,0)/e.length),arity:ne(1)},median:{evaluate:([e],n)=>(Ae(e,n),function(e){const n=[...e].sort((e,n)=>e-n),t=Math.floor(n.length/2);return n.length%2==0?(n[t-1]+n[t])/2:n[t]}(e)),arity:ne(1)}},Ge={...J,...te,...he,...ye,...me,...Ve,...function(e,n){return{doc:{evaluate:([t],r)=>{if(x(e),_(t)){const e=`-effect-${t.name}`,r=n[e];return r?Fe(r):""}if(F(t,r),!k(t))return"";if("Builtin"===t.functionType){const n=e[t.name];return n?Fe(n):""}return"UserDefined"===t.functionType?t.docString:""},arity:ne(1)},"with-doc":{evaluate:([e,n],t)=>{if(F(e,t),z(n,t),!k(e)||"UserDefined"!==e.functionType)throw new Error("with-doc can only be used with user-defined functions");return{...e,[f]:!0,docString:n}},arity:ne(2)},arity:{evaluate:([e],t)=>{if(_(e)){const t=`-effect-${e.name}`,r=n[t];if(!r)return{};const o=r.variants.map(e=>e.argumentNames.length);return{min:Math.min(...o),max:Math.max(...o)}}return F(e,t),k(e)?e.arity:ne(1)},arity:ne(1)}}}({},{}),...Re,...Be,...Te,...De,...Le,...qe,...Ye};Object.entries(Ge).forEach(([e,n])=>{n.name=e});const Ke={...Ge},He={},Je=[];Object.entries(Ke).forEach(([e,n],t)=>{He[e]=t,Je.push(n)});const Xe={arity:{},evaluateAsNormalExpression:(e,n)=>{let t=!0;for(const r of e)if(t=C(r,n),!t)break;return t},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1],n,r,o)},Ze=11,Qe=12,en=13,nn=14,tn=15,rn=16;function on(e,n){return e instanceof Promise?e.then(n):n(e)}async function an(e,n,t,r,o){n.push(await e);for(let e=o+1;e<t.length;e++)n.push(await r(t[e],e));return n}function sn(e,n,t){let r=t;for(let t=0;t<e.length;t++){const o=n(r,e[t],t);if(o instanceof Promise)return un(o,e,n,t);r=o}return r}async function un(e,n,t,r){let o=await e;for(let e=r+1;e<n.length;e++)o=await t(o,n[e],e);return o}function cn(e,n){for(let t=0;t<e.length;t++){const r=n(e[t],t);if(r instanceof Promise)return ln(r,e,n,t)}}async function ln(e,n,t,r){await e;for(let e=r+1;e<n.length;e++)await t(n[e],e)}function fn(e,n){if(e[0]===en)Object.values(e[1][0]).forEach(e=>{e[1][1]&&n(e[1][1]),fn(e,n)});else if(e[0]===nn)for(let t=0;t<e[1][0].length;t+=1){const r=e[1][0][t]??null;null!==r&&(r[1][1]&&n(r[1][1]),fn(r,n))}}function dn(e,n,t){const r=e[2],o={};return on(pn(e,n,t,r,o),()=>o)}function pn(e,n,r,o,a){if(e[0]===en){!function(e,n){if(!w(e))throw new t(`Expected UnknownRecord, got ${m(e)}.`,v(e,n))}(n,o);const s=new Set;let i;return on(cn(Object.entries(e[1][0]),([e,t])=>{if(t[0]===Qe)return void(i=t);s.add(e);const u=n[e];return on(void 0!==u?u:t[1][1]?r(t[1][1]):null,e=>{const n=e??null;return j(n,o),pn(t,n,r,o,a)})}),()=>{if(i){const e=Object.entries(n).filter(([e])=>!s.has(e)).reduce((e,[n,t])=>(e[n]=C(t),e),{});a[i[1][0]]=e}})}if(e[0]===nn){let t=null;fe(n,o);const s=[];for(let n=0;n<e[1][0].length;n+=1){const r=e[1][0][n]??null;if(null!==r){if(r[0]===Qe){t=n;break}s.push({element:r,index:n})}}return on(cn(s,({element:e,index:t})=>{const s=n[t];return on(void 0!==s?s:e[1][1]?r(e[1][1]):null,n=>{const t=n??null;return j(t,o),pn(e,t,r,o,a)})}),()=>{if(null!==t){const r=n.slice(t),o=e[1][0][t];a[o[1][0]]=r}})}e[0]===Qe?a[e[1][0]]=C(n):a[e[1][0][1]]=C(n)}function hn(e){const n={};return yn(e,n),n}function yn(e,n){if(null!==e)if(e[0]===nn)for(const t of e[1][0])yn(t,n);else if(e[0]===en)for(const t of Object.values(e[1][0]))yn(t,n);else if(e[0]===Qe){if(n[e[1][0]])throw new t(`Duplicate binding name: ${e[1][0]}`,e[2]);n[e[1][0]]=!0}else if(e[0]===Ze){if(n[e[1][0][1]])throw new t(`Duplicate binding name: ${e[1][0]}`,e[2]);n[e[1][0][1]]=!0}}function mn(e,n,t){const r={};return on(vn(e,n,t,r),e=>e?r:null)}function vn(e,n,t,r){if(e[0]===rn)return!0;if(e[0]===tn){const r=e[1][0];return on(t(r),e=>ae(n,e))}if(e[0]===Ze){const o=e[1][0],a=e[1][1];if(null==n){if(a)return on(t(a),e=>(r[o[1]]=C(e),!0));r[o[1]]=n??null}else r[o[1]]=C(n);return!0}if(e[0]===en){if(!w(n))return!1;const o=new Set;let a;const s=Object.entries(e[1][0]);let i=!0;for(const[e,u]of s)i=on(i,s=>{if(!s)return!1;if(u[0]===Qe)return a=u,!0;o.add(e);const i=n[e];if(void 0===i&&u[0]===tn)return on(t(u[1][0]),e=>ae(void 0,e));return on(void 0!==i?i:u[1]&&u[1][1]?t(u[1][1]):null,e=>vn(u,e??null,t,r))});return on(i,e=>{if(!e)return!1;if(a){const e=Object.entries(n).filter(([e])=>!o.has(e)).reduce((e,[n,t])=>(e[n]=C(t),e),{});r[a[1][0]]=e}return!0})}{const o=e;if(!Array.isArray(n))return!1;const a=o[1][0];let s=null;for(let e=0;e<a.length;e+=1){const n=a[e];if(null!==n&&n[0]===Qe){s=e;break}}if(null===s&&n.length!==a.length)return!1;if(null!==s&&n.length<s)return!1;let i=!0;for(let e=0;e<a.length;e+=1){const o=a[e];if(null===o)continue;if(o[0]===Qe){r[o[1][0]]=n.slice(e);break}const s=o;i=on(i,o=>!!o&&vn(s,C(n[e]),t,r))}return i}}const gn={arity:{},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>{const a=new Set;t([e[1][1]],n,r,o).forEach(e=>a.add(e));for(const[s,i,u]of e[1][2]){const e={};Object.assign(e,hn(s));const c=n.create(e);u&&t([u],c,r,o).forEach(e=>a.add(e)),t([i],c,r,o).forEach(e=>a.add(e))}return a}},bn={arity:ne(1),getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t([e[1][1]],n,r,o)},xn={arity:{},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>{const a=t(e[1][1],n.create({}),r,o),s=e[1][2];if(!s||0===s.length)return a;let i=new Set;for(const[e,a]of s){i=ie(i,t([e],n,r,o),t([a],n,r,o))}return ie(a,i)}},wn={arity:{},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>function(e,n,t,r,o){const a=new Set,s={self:{value:null}};e[0].forEach(e=>{Object.assign(s,hn(e)),fn(e,e=>{ue(a,t([e],n,r,o))})});const i=n.create(s),u=t(e[1],i,r,o);return ue(a,u),a}(e[1][1],n,t,r,o)};const kn={arity:ne(0),getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>{const a=e[1][1],s=a[1][0],i=a[1][1],u=t([i],n,r,o);return fn(s,e=>{ue(u,t([e],n,r,o))}),n.addValues(hn(s),s[2]),u}},En={arity:{},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>{const a=e[1][1],s=a.reduce((e,n)=>{const t=hn(n[1][0]);return Object.keys(t).forEach(n=>{e[n]={value:!0}}),e},{});return ie(t(a.map(e=>e[1][1]),n,r,o),t([e[1][2]],n.create(s),r,o))}};function Sn(e,n,t,r,o){const a=new Set,s={},[,i,u]=e[1];return i.forEach(e=>{const[i,u,c,l]=e,[f,d]=i[1];t([d],n.create(s),r,o).forEach(e=>a.add(e)),Object.assign(s,hn(f)),u&&u.forEach(e=>{const[i,u]=e[1];t([u],n.create(s),r,o).forEach(e=>a.add(e)),Object.assign(s,hn(i))}),c&&t([c],n.create(s),r,o).forEach(e=>a.add(e)),l&&t([l],n.create(s),r,o).forEach(e=>a.add(e))}),t([u],n.create(s),r,o).forEach(e=>a.add(e)),a}const In={arity:ne(1),getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>Sn(e,n,t,r,o)},Nn={arity:ne(1),getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>Sn(e,n,t,r,o)},An={arity:{},evaluateAsNormalExpression:(e,n)=>{let t=!1;for(const r of e)if(t=C(r,n),t)break;return t},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1],n,r,o)},Pn={arity:{min:1},evaluateAsNormalExpression:(e,n)=>{for(const t of e){const e=C(t,n);if(null!==e)return e}return null},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1],n,r,o)},$n={arity:{},evaluateAsNormalExpression:e=>{throw new n(e)},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1],n,r,o)},Cn={arity:{},evaluateAsNormalExpression:(e,n)=>{const t=[];for(const r of e)t.push(C(r,n));return t},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1],n,r,o)},jn={arity:{},getUndefinedSymbols:()=>new Set},On={arity:{},evaluateAsNormalExpression:(e,n)=>{const t={};for(let r=0;r<e.length;r+=2){const o=e[r],a=e[r+1];z(o,n),t[o]=a??null}return t},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1],n,r,o)},Mn={arity:ne(1),getUndefinedSymbols:()=>new Set},Vn={arity:{min:1},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>ie(...e[1][1].map(e=>t([e],n,r,o)))},Un={arity:{min:1},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>{const[,a,s]=e[1];return ie(t([a],n,r,o),t(s,n,r,o))}},Rn={arity:{min:1},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>ie(...e[1][1].map(e=>t([e],n,r,o)))},Bn={"??":0,"&&":1,"||":2,array:3,cond:4,"defined?":5,block:6,doseq:7,"0_lambda":8,for:9,if:10,let:11,loop:12,object:13,recur:14,match:15,unless:16,import:17,effect:18,perform:19,parallel:20,race:21},Tn=[Pn,Xe,An,Cn,{arity:{},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1].flat(),n,r,o)},bn,xn,Nn,wn,In,{arity:{min:2,max:3},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1].filter(e=>!!e),n,r,o)},kn,En,On,$n,gn,{arity:{},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1].filter(e=>!!e),n,r,o)},Mn,jn,Un,Vn,Rn],Dn={normalExpressions:Ke,specialExpressions:Tn,allNormalExpressions:Je},_n=Object.keys(Ke),Ln=Object.keys(Bn);function qn(e){return"object"==typeof e&&null!==e&&"string"==typeof e.program&&Array.isArray(e.fileModules)}function Fn(e){return i.UserDefinedSymbol===e[0]}function Wn(e,n){return function(e,n){if(!Fn(e))throw g("UserDefinedSymbolNode",e,n)}(e,n),e}function zn(e){return i.NormalBuiltinSymbol===e[0]}function Yn(e){return i.SpecialBuiltinSymbol===e[0]}function Gn(e){return!!function(e){return e[0]===i.NormalExpression}(e)&&function(e){const n=e[0];return i.UserDefinedSymbol===n||i.NormalBuiltinSymbol===n||i.SpecialBuiltinSymbol===n}(e[1][0])}function Kn(e){return e[0]===i.Spread}const Hn=(e,n,t,r)=>{const o=Array.isArray(e)?e:[[i.SpecialExpression,[Bn.block,e.body,void 0]]],a=new Set;for(const e of o)Jn(e,n,t,r)?.forEach(e=>a.add(e));return a};function Jn(e,n,r,o){const a=e[0];switch(a){case i.UserDefinedSymbol:{const t=e;return null===n.lookUp(t)?new Set([t[1]]):null}case i.NormalBuiltinSymbol:case i.SpecialBuiltinSymbol:case i.String:case i.Number:case i.ReservedSymbol:case i.Binding:return null;case i.NormalExpression:{const t=e,a=new Set;if(Gn(t)){const[,[e]]=t;if(Fn(e)){null===n.lookUp(e)&&a.add(e[1])}}else{const[,[e]]=t;Jn(e,n,r,o)?.forEach(e=>a.add(e))}for(const e of t[1][1])Jn(e,n,r,o)?.forEach(e=>a.add(e));return a}case i.SpecialExpression:{const t=e,a=t[1][0];return(0,r.specialExpressions[a].getUndefinedSymbols)(t,n,{getUndefinedSymbols:Hn,builtin:r,evaluateNode:o})}case i.Spread:return Jn(e[1],n,r,o);default:throw new t(`Unhandled node type: ${a}`,e[2])}}const Xn=["^","*","/","%","+","-","<<",">>",">>>","++","<","<=","≤",">",">=","≥","==","!=","!=","&","xor","|","&&","||","??","|>"],Zn=[...Xn,"?",":","->","...",".",",","=",":",";"],Qn=new Set(["comment","cond","defined?","block","doseq","if","let","loop","recur","unless","while"]);function et(e){return!Qn.has(e)}const nt=new Set(Xn);function tt(e){return nt.has(e)}const rt=new Set(Zn);function ot(e){return rt.has(e)}function at(e,n){return"Symbol"===e?.[0]&&(!n||e[1]===n)}function st(e,n){return function(e,n){at(e,n)||At("Symbol",void 0,e)}(e,n),e}function it(e,n){return"ReservedSymbol"===e?.[0]&&(!n||e[1]===n)}function ut(e,n){it(e,n)||At("ReservedSymbol",n,e)}function ct(e,n){return ut(e,n),e}function lt(e,n){return"Operator"===e?.[0]&&(!n||e[1]===n)}function ft(e,n){lt(e,n)||At("Operator",n,e)}function dt(e){return"Number"===e?.[0]}function pt(e){return"BasePrefixedNumber"===e?.[0]}function ht(e){return"LParen"===e?.[0]}function yt(e){ht(e)||At("LParen",void 0,e)}function mt(e){return"RParen"===e?.[0]}function vt(e){mt(e)||At("RParen",void 0,e)}function gt(e){return"LBracket"===e?.[0]}function bt(e){return function(e){gt(e)||At("LBracket",void 0,e)}(e),e}function xt(e){return"RBracket"===e?.[0]}function wt(e){xt(e)||At("RBracket",void 0,e)}function kt(e){return"LBrace"===e?.[0]}function Et(e){return function(e){kt(e)||At("LBrace",void 0,e)}(e),e}function St(e){return"RBrace"===e?.[0]}function It(e){return"string"===e?.[0]}function Nt(e){return"Operator"===e?.[0]&&tt(e[1])}function At(e,n,r){const o=r?`${r[0]} '${r[1]}'`:"end of input";throw new t(`Unexpected token: ${o}, expected ${e}${n?` '${n}'`:""}`,r?.[2])}function Pt(e,n){return n&&(e[2]=n),e}function $t(e,n){return void 0!==Bn[e]&&"fn"!==e&&"defn"!==e?Pt([i.SpecialBuiltinSymbol,Bn[e]],n):void 0!==He[e]?Pt([i.NormalBuiltinSymbol,He[e]],n):Pt([i.UserDefinedSymbol,e],n)}function Ct(e){return e.substring(1,e.length-1).replace(/(\\{2})|(\\')|\\(.)/g,(e,n,t,r)=>n?"\\":t?"'":`\\${r}`)}const jt=Object.entries(He).reduce((e,[n,t])=>(e[t]=n,e),[]),Ot=Object.entries(Bn).reduce((e,[n,t])=>(e[t]=n,e),[]);function Mt(e){return Fn(e)?e[1]:zn(e)?jt[e[1]]:Ot[e[1]]}function Vt(e,n,t){const r=Pt([i.NormalExpression,[e,n]],t);return zn(e)&&ee(Je[e[1]].arity,r[1][1].length,t),r}function Ut(e){if(e.isAtEnd())return!0;const n=e.tryPeek();return lt(n)?[";",",",":"].includes(n[1]):!!it(n)&&["else","when","while","case","let","then","end","do"].includes(n[1])}function Rt(e,n,r,o,a){const s=e[1];switch(s){case"^":case"*":case"/":case"%":case"+":case"-":case"<<":case">>":case">>>":case"++":case"<":case"<=":case"≤":case">":case">=":case"≥":case"==":case"!=":case"&":case"xor":case"|":case"|>":return Vt(n,[r,o],a);case"&&":case"||":case"??":return Pt([i.SpecialExpression,[Bn[s],[r,o]]],a);default:throw new t(`Unknown binary operator: ${s}`,a)}}class Bt{tokens;position;storedPosition=0;parseExpression;constructor(e){this.tokens=e.tokens,this.position=0}advance(){this.position+=1}tryPeek(){return this.tokens[this.position]}peek(){const e=this.tokens[this.position];if(!e){const e=this.tokens.at(-1),n=e?e[2]:void 0;throw new t("Unexpected end of input",n)}return e}isAtEnd(){return this.position>=this.tokens.length}peekSourceCodeInfo(){const e=this.tryPeek();return e?e[2]:this.tokens.at(-1)?.[2]}storePosition(){return this.storedPosition=this.position}restorePosition(){this.position=this.storedPosition}peekAhead(e){return this.tokens[this.position+e]}getPosition(){return this.position}getTokenAt(e){return this.tokens[e]}}function Tt(e,n){switch(e){case"^":return 12;case"*":case"/":case"%":return 11;case"+":case"-":return 10;case"<<":case">>":case">>>":return 9;case"++":return 8;case"<":case"<=":case"≤":case">":case">=":case"≥":return 7;case"==":case"!=":return 6;case"&":case"xor":case"|":return 5;case"&&":case"||":case"??":return 4;case"|>":return 2;default:throw new t(`Unknown binary operator: ${e}`,n)}}function Dt(e,n){const r=[];for(;!e.isAtEnd()&&!_t(e,n);)lt(e.tryPeek(),";")?e.advance():r.push(e.parseExpression());if(function(e,n){if(!_t(e,n))throw new t(`Expected ${n.map(e=>e[1]).join(" or ")}`,e.peekSourceCodeInfo())}(e,n),0===r.length)throw new t("Expected expression",e.peekSourceCodeInfo());return 1===r.length?r[0]:Pt([i.SpecialExpression,[Bn.block,r,void 0]],e.peekSourceCodeInfo())}function _t(e,n){for(const t of n)if(it(e.tryPeek(),t))return!0;return!1}function Lt(e){const n=ct(e.tryPeek(),"do");e.advance();const r=[];for(;!e.isAtEnd()&&!it(e.tryPeek(),"end")&&!it(e.tryPeek(),"with");)if(r.push(e.parseExpression()),lt(e.tryPeek(),";"))e.advance();else if(!it(e.tryPeek(),"end")&&!it(e.tryPeek(),"with"))throw new t("Expected end",e.peekSourceCodeInfo());let o;if(it(e.tryPeek(),"with"))for(e.advance(),o=[];!e.isAtEnd()&&!it(e.tryPeek(),"end");){ut(e.tryPeek(),"case"),e.advance();const n=e.parseExpression();ut(e.tryPeek(),"then"),e.advance();const t=Dt(e,["case","end"]);o.push([n,t])}return ut(e.tryPeek(),"end"),e.advance(),Pt([i.SpecialExpression,[Bn.block,r,o]],n[2])}function qt(e){const n=e.peek();if(e.advance(),!at(n))throw new t(`Expected symbol token, got ${n[0]}`,n[2]);return"'"===n[1][0]?$t(Ct(n[1]),n[2]):$t(n[1],n[2])}function Ft(e,n){e.advance();const t=n[1].substring(1,n[1].length-1).replace(/(\\{2})|(\\")|(\\n)|(\\t)|(\\r)|(\\b)|(\\f)|\\(.)/g,(e,n,t,r,o,a,s,i,u)=>n?"\\":r?"\n":o?"\t":a?"\r":s?"\b":i?"\f":t?'"':u);return Pt([i.String,t],n[2])}function Wt(e){const n=e.peek();e.advance();const t=n[1],r="-"===t[0],o=(r?t.substring(1):t).replace(/_/g,"");return Pt([i.Number,r?-Number(o):Number(o)],n[2])}function zt(e,{requireDefaultValue:n,noRest:r,allowLiteralPatterns:o}={}){const a=e.tryPeek();if(o&&it(a,"_"))return e.advance(),Pt([rn,[]],a[2]);if(o&&Gt(a)){if(dt(a)||pt(a)){const n=Wt(e);return Pt([tn,[n]],a[2])}if(It(a)){const n=Ft(e,a);return Pt([tn,[n]],a[2])}if(it(a,"true")){e.advance();const n=Pt([i.ReservedSymbol,"true"],a[2]);return Pt([tn,[n]],a[2])}if(it(a,"false")){e.advance();const n=Pt([i.ReservedSymbol,"false"],a[2]);return Pt([tn,[n]],a[2])}if(it(a,"null")){e.advance();const n=Pt([i.ReservedSymbol,"null"],a[2]);return Pt([tn,[n]],a[2])}}if(at(a)){const r=qt(e);if(!Fn(r))throw new t("Expected user defined symbol",a[2]);const o=Yt(e);if(n&&!o)throw new t("Expected assignment",e.peekSourceCodeInfo());return Pt([Ze,[r,o]],a[2])}if(lt(a,"...")){if(r)throw new t("Rest element not allowed",a[2]);e.advance();const n=Wn(qt(e));if(lt(e.tryPeek(),"="))throw new t("Rest argument can not have default value",e.peekSourceCodeInfo());return Pt([Qe,[n[1],void 0]],a[2])}if(gt(a)){e.advance();const r=[];let s=e.peek(),i=!1;for(;!xt(s);){if(i)throw new t("Rest argument must be last",s[2]);if(lt(s,",")){r.push(null),e.advance(),s=e.peek();continue}const n=zt(e,{allowLiteralPatterns:o});n[0]===Qe&&(i=!0),r.push(n),s=e.peek(),xt(s)||(ft(s,","),e.advance()),s=e.peek()}e.advance();const u=Yt(e);if(n&&!u)throw new t("Expected assignment",e.peekSourceCodeInfo());return Pt([nn,[r,u]],a[2])}if(kt(a)){e.advance();const r={};let s=e.peek(),i=!1;for(;!St(s);){if(i)throw new t("Rest argument must be last",s[2]);lt(s,"...")&&(i=!0,e.advance());const n=qt(e),u=Mt(n);if(s=e.peek(),it(s,"as")){if(i)throw new t("Rest argument can not have alias",s[2]);e.advance();const n=Wn(qt(e));if(r[n[1]])throw new t(`Duplicate binding name: ${n}`,s[2]);r[u]=Pt([Ze,[n,Yt(e)]],a[2])}else if(St(s)||lt(s,",")||lt(s,"=")){const o=Wn(n,n[2]);if(r[o[1]])throw new t(`Duplicate binding name: ${o}`,s[2]);if(i&&lt(e.tryPeek(),"="))throw new t("Rest argument can not have default value",e.peekSourceCodeInfo());r[o[1]]=Pt(i?[Qe,[o[1],Yt(e)]]:[Ze,[o,Yt(e)]],a[2])}else if(lt(s,":")){if(e.advance(),s=e.peek(),o){if(!kt(s)&&!gt(s)&&!Gt(s))throw new t("Expected literal, object or array pattern",s[2])}else if(!kt(s)&&!gt(s))throw new t("Expected object or array",s[2]);r[u]=zt(e,{allowLiteralPatterns:o})}St(e.peek())||(ft(e.peek(),","),e.advance()),s=e.peek()}e.advance(),s=e.peek();const u=Yt(e);if(n&&!u)throw new t("Expected assignment",s[2]);return Pt([en,[r,u]],a[2])}throw new t("Expected symbol",e.peekSourceCodeInfo())}function Yt(e){if(lt(e.tryPeek(),"="))return e.advance(),e.parseExpression()}function Gt(e){return dt(e)||pt(e)||It(e)||it(e,"true")||it(e,"false")||it(e,"null")}function Kt(e,n){e.advance();const t=zt(e,{requireDefaultValue:!0,noRest:!0}),r=t[1][1];t[1][1]=void 0;const o=Pt([i.Binding,[t,r]],n[2]);return Pt([i.SpecialExpression,[Bn.let,o]],n[2])}function Ht(e){const n=function(e){const n=st(e.tryPeek()),t=Wn(qt(e));ut(e.tryPeek(),"in"),e.advance();const r=e.parseExpression();return Pt([i.Binding,[Pt([Ze,[t,void 0]],n[2]),r]],n[2])}(e),r=[];let o=e.peek();Jt(o,["let","when","while"]);const a=[];if("let"===o[1])for(r.push("&let");at(o,"let");){const n=Kt(e,o),r=a.flatMap(e=>Object.keys(hn(e[1][0])));if(Object.keys(hn(n[1][1][1][0])).some(e=>r.includes(e)))throw new t("Duplicate binding",n[1][1][2]);a.push(n[1][1]),o=e.peek(),Jt(o,["let","when","while"]),o=e.peek()}let s,u;for(;it(o,"when")||it(o,"while");){e.advance(),"when"===o[1]?(r.push("&when"),s=e.parseExpression()):(r.push("&while"),u=e.parseExpression()),o=e.peek();Jt(o,r.includes("&when")&&r.includes("&while")?[]:r.includes("&when")?["while"]:["when"]),o=e.peek()}return Jt(o,[]),[n,a,s,u]}function Jt(e,n){if(!function(e,n){if(lt(e,",")||mt(e))return!0;for(const t of n){if("let"===t&&at(e,"let"))return!0;if(["when","while"].includes(t)&&it(e,t))return!0}return!1}(e,n)){const r=`${[...n,","].map(e=>`"${e}"`).join(", ")} or ")"`;throw new t(`Expected symbol ${r}`,e[2])}}const Xt=(1+Math.sqrt(5))/2,Zt={E:Math.E,"-E":-Math.E,"ε":Math.E,"-ε":-Math.E,PI:Math.PI,"-PI":-Math.PI,"π":Math.PI,"-π":-Math.PI,PHI:Xt,"-PHI":-Xt,"φ":Xt,"-φ":-Xt,POSITIVE_INFINITY:Number.POSITIVE_INFINITY,"∞":Number.POSITIVE_INFINITY,NEGATIVE_INFINITY:Number.NEGATIVE_INFINITY,"-∞":Number.NEGATIVE_INFINITY,MAX_SAFE_INTEGER:Number.MAX_SAFE_INTEGER,MIN_SAFE_INTEGER:Number.MIN_SAFE_INTEGER,MAX_VALUE:Number.MAX_VALUE,MIN_VALUE:Number.MIN_VALUE,NaN:Number.NaN},Qt={true:!0,false:!1,null:null,do:null,else:null,case:null,each:null,in:null,when:null,while:null,function:null,as:null,then:null,end:null,with:null,_:null,...Zt};function er(e){const n=ct(e.tryPeek());e.advance();const t=n[1];return function(e){return e in Zt}(t)?Pt([i.Number,Zt[t]],n[2]):Pt([i.ReservedSymbol,n[1]],n[2])}const nr=/^\$([1-9]\d?)?$/;function tr(e){const n=e.peek();if(ht(n)&&at(e.peekAhead(1))&&lt(e.peekAhead(2),"->"))return null;try{const r=function(e){const n=e.peek();if(at(n))return[Pt([Ze,[qt(e),void 0]],n[2])];yt(n),e.advance();let r=!1,o=!1;const a=[];for(;!e.isAtEnd()&&!mt(e.peek())&&!at(e.peek(),"let");){if(r)throw new t("Rest argument must be last",e.peekSourceCodeInfo());const n=zt(e);if(void 0!==n[1][1]&&(o=!0),n[0]===Qe&&(r=!0),o&&!n[1][1])throw new t("Default arguments must be last",e.peekSourceCodeInfo());if(a.push(n),!lt(e.peek(),",")&&!mt(e.peek())&&!at(e.peek(),"let"))throw new t("Expected comma or closing parenthesis",e.peekSourceCodeInfo());lt(e.peek(),",")&&e.advance()}if(!mt(e.peek()))throw new t("Expected closing parenthesis",e.peekSourceCodeInfo());return e.advance(),a}(e);if(!lt(e.peek(),"->"))return null;let o;if(e.advance(),it(e.peek(),"do")){const n=Lt(e),t=n[1][2];o=t&&t.length>0?[n]:n[1][1]}else o=[e.parseExpression()];return Pt([i.SpecialExpression,[Bn["0_lambda"],[r,o]]],n[2])}catch{return null}}function rr(e,n){if(e.advance(),Yn(n)&&n[1]===Bn.effect)return function(e,n){const r=n[2],o=e.peek();if(!at(o))throw new t("effect expects a dotted name identifier",o[2]);let a=o[1];e.advance();for(;lt(e.tryPeek(),".");){e.advance();const n=e.peek();if(!at(n))throw new t("Expected identifier after dot in effect name",n[2]);a+=`.${n[1]}`,e.advance()}if(!mt(e.tryPeek()))throw new t("Expected closing parenthesis after effect name",e.peekSourceCodeInfo());return e.advance(),Pt([i.SpecialExpression,[Bn.effect,a]],r)}(e,n);const r=[];for(;!e.isAtEnd()&&!mt(e.tryPeek());){lt(e.tryPeek(),"...")?(e.advance(),r.push(Pt([i.Spread,e.parseExpression()],e.peekSourceCodeInfo()))):r.push(e.parseExpression());const n=e.tryPeek();if(!lt(n,",")&&!mt(n))throw new t("Expected comma or closing parenthesis",e.tryPeek()?.[2]);lt(n,",")&&e.advance()}if(!mt(e.tryPeek()))throw new t("Expected closing parenthesis",e.peekSourceCodeInfo());if(e.advance(),!Yn(n))return zn(n)||Fn(n)?Vt(n,r,n[2]):Pt([i.NormalExpression,[n,r]],n[2]);{const e=n[1];if(e===Bn.import){if(1!==r.length)throw new t(`import expects exactly 1 argument, got ${r.length}`,n[2]);const o=r[0];if(!Fn(o))throw new t("import expects a module name (symbol), got a non-symbol argument",o[2]??n[2]);const a=o[1];return Pt([i.SpecialExpression,[e,a]],n[2])}const o=e;switch(ee(Dn.specialExpressions[o].arity,r.length,n[2]),o){case Bn["||"]:case Bn["&&"]:case Bn.recur:case Bn.array:case Bn.object:case Bn["??"]:return Pt([i.SpecialExpression,[o,r]],n[2]);case Bn["defined?"]:{const[e]=r;return Pt([i.SpecialExpression,[o,e]],n[2])}case Bn.perform:{const[e,...t]=r;return Pt([i.SpecialExpression,[o,e,t]],n[2])}case Bn.parallel:case Bn.race:return Pt([i.SpecialExpression,[o,r]],n[2]);case Bn["0_lambda"]:throw new t(`${o} is not allowed`,n[2]);default:throw new t(`Unknown special expression: ${o}`,n[2])}}}function or(e){const n=Et(e.tryPeek());e.advance();const r=[];for(;!e.isAtEnd()&&!St(e.tryPeek());){if(lt(e.tryPeek(),"..."))e.advance(),r.push(Pt([i.Spread,e.parseExpression()],e.peekSourceCodeInfo()));else{const n=e.tryPeek();if(It(n)){const t=Ft(e,n);r.push(Pt([i.String,t[1]],n[2]))}else if(at(n)){const t=n[1].startsWith("'")?Ct(n[1]):n[1];r.push(Pt([i.String,t],n[2])),e.advance()}else{if(!gt(n))throw new t("Expected key to be a symbol or a string",e.peekSourceCodeInfo());e.advance(),r.push(e.parseExpression()),wt(e.tryPeek()),e.advance()}ft(e.tryPeek(),":"),e.advance(),r.push(e.parseExpression())}const n=e.tryPeek();if(!lt(n,",")&&!St(n))throw new t("Expected comma or closing brace",e.peekSourceCodeInfo());lt(n,",")&&e.advance()}var o;return St(o=e.tryPeek())||At("RBrace",void 0,o),e.advance(),Pt([i.SpecialExpression,[Bn.object,r]],n[2])}function ar(e){let n=function(e){const n=e.peek();if(ht(n)){e.storePosition();const n=tr(e);if(n)return n;e.restorePosition(),e.advance();const r=e.parseExpression();if(!mt(e.peek()))throw new t("Expected closing parenthesis",e.peekSourceCodeInfo());return e.advance(),r}if(lt(n)){const r=n[1];if(tt(r))return e.advance(),Pt(void 0!==Bn[r]?[i.SpecialBuiltinSymbol,Bn[r]]:[i.NormalBuiltinSymbol,He[r]],n[2]);if("->"===r)return function(e){const n=e.peek();e.advance();const r=e.getPosition();let o;if(it(e.peek(),"do")){const n=Lt(e),t=n[1][2];o=t&&t.length>0?[n]:n[1][1]}else o=[e.parseExpression()];const a=e.getPosition()-1;let s=0,u="NOT_SET";for(let o=r;o<=a;o+=1){const r=e.getTokenAt(o);if(at(r)){const e=nr.exec(r[1]);if(e){const r=e[1]??"1";if("1"===r){if(!e[1]&&"WITH_1"===u||e[1]&&"NAKED"===u)throw new t("Please make up your mind, either use $ or $1",n[2]);u=e[1]?"WITH_1":"NAKED"}if(s=Math.max(s,Number(r)),s>20)throw new t("Can't specify more than 20 arguments",n[2])}}}const c=[];for(let e=1;e<=s;e+=1)1===e&&"NAKED"===u?c.push(Pt([Ze,[[i.UserDefinedSymbol,"$"],void 0]],n[2])):c.push(Pt([Ze,[[i.UserDefinedSymbol,`$${e}`],void 0]],n[2]));return Pt([i.SpecialExpression,[Bn["0_lambda"],[c,o]]],n[2])}(e);throw new t(`Illegal operator: ${r}`,n[2])}if(kt(n))return or(e);if(gt(n))return function(e){const n=bt(e.tryPeek());e.advance();const r=[];for(;!e.isAtEnd()&&!xt(e.tryPeek());){lt(e.tryPeek(),"...")?(e.advance(),r.push(Pt([i.Spread,e.parseExpression()],e.peekSourceCodeInfo()))):r.push(e.parseExpression());const n=e.tryPeek();if(!lt(n,",")&&!xt(n))throw new t("Expected comma or closing parenthesis",e.peekSourceCodeInfo());lt(n,",")&&e.advance()}return wt(e.tryPeek()),e.advance(),Pt([i.SpecialExpression,[Bn.array,r]],n[2])}(e);const r=n[0];switch(r){case"Number":case"BasePrefixedNumber":return Wt(e);case"string":return Ft(e,n);case"Symbol":{e.storePosition();const n=tr(e);return n||(e.restorePosition(),qt(e))}case"ReservedSymbol":return er(e);case"RegexpShorthand":return function(e){const n=e.peek();e.advance();const t=n[1].lastIndexOf('"'),r=n[1].substring(2,t),o=n[1].substring(t+1),a=Pt([i.String,r],n[2]),s=Pt([i.String,o],n[2]);return Pt([i.NormalExpression,[Pt([i.NormalBuiltinSymbol,He.regexp],n[2]),[a,s]]],n[2])}(e);default:throw new t(`Unknown token type: ${r}`,n[2])}}(e),r=e.tryPeek();for(;lt(r,".")||gt(r)||ht(r);)if("."===r[1]){e.advance();const o=e.tryPeek();if(!at(o))throw new t("Expected symbol",e.peekSourceCodeInfo());n=sr(n,Pt([i.String,o[1]],o[2]),r[2]),e.advance(),r=e.tryPeek()}else if(gt(r)){e.advance();const o=e.parseExpression();if(!xt(e.tryPeek()))throw new t("Expected closing bracket",e.peekSourceCodeInfo());n=sr(n,o,r[2]),e.advance(),r=e.tryPeek()}else ht(r)&&(n=rr(e,n),r=e.tryPeek());return n}function sr(e,n,t){return Pt([i.NormalExpression,[[i.NormalBuiltinSymbol,He.get],[e,n]]],t)}function ir(e,n=0){const r=e.tryPeek();let o;if(at(r))switch(r[1]){case"let":return Kt(e,r);case"if":case"unless":o=function(e,n){const t="unless"===n[1];e.advance();const r=e.parseExpression();ut(e.tryPeek(),"then"),e.advance();const o=Dt(e,["else","end"]);let a;return it(e.tryPeek(),"else")&&(e.advance(),a=Dt(e,["end"])),e.advance(),Pt(t?[i.SpecialExpression,[Bn.unless,[r,o,a]]]:[i.SpecialExpression,[Bn.if,[r,o,a]]],n[2])}(e,r);break;case"cond":o=function(e,n){e.advance();const t=[];for(;!e.isAtEnd()&&!it(e.tryPeek(),"end");){ut(e.tryPeek(),"case"),e.advance();const n=e.parseExpression();ut(e.tryPeek(),"then"),e.advance();const r=Dt(e,["case","end"]);if(t.push([n,r]),it(e.tryPeek(),"end"))break}return ut(e.tryPeek()),e.advance(),Pt([i.SpecialExpression,[Bn.cond,t]],n[2])}(e,r);break;case"match":o=function(e,n){e.advance();const t=e.parseExpression(),r=[];for(;!e.isAtEnd()&&!it(e.tryPeek(),"end");){ut(e.tryPeek(),"case"),e.advance();const n=zt(e,{allowLiteralPatterns:!0});let t;it(e.tryPeek(),"when")&&(e.advance(),t=e.parseExpression()),ut(e.tryPeek(),"then"),e.advance();const o=Dt(e,["case","end"]);if(r.push([n,o,t]),it(e.tryPeek(),"end"))break}return ut(e.tryPeek(),"end"),e.advance(),Pt([i.SpecialExpression,[Bn.match,t,r]],n[2])}(e,r);break;case"for":case"doseq":o=function(e,n){const r="doseq"===n[1];e.advance(),yt(e.tryPeek()),e.advance();const o=[];for(;!e.isAtEnd()&&!mt(e.tryPeek());){const n=Ht(e),r=o.flatMap(e=>Object.keys(hn(e[0][1][0]))),a=hn(n[0][1][0]);if(Object.keys(a).some(e=>r.includes(e)))throw new t("Duplicate binding",n[0][2]);o.push(n),lt(e.tryPeek(),",")&&e.advance()}vt(e.tryPeek()),e.advance(),ft(e.tryPeek(),"->"),e.advance();const a=e.parseExpression();return Pt(r?[i.SpecialExpression,[Bn.doseq,o,a]]:[i.SpecialExpression,[Bn.for,o,a]],n[2])}(e,r);break;case"loop":o=function(e,n){e.advance(),yt(e.tryPeek()),e.advance();const r=[];let o=e.tryPeek();for(;!e.isAtEnd()&&!mt(o);){const n=zt(e,{requireDefaultValue:!0,noRest:!0}),t=n[1][1];n[1][1]=void 0,r.push(Pt([i.Binding,[n,t]],n[2])),lt(e.tryPeek(),",")&&e.advance(),o=e.tryPeek()}if(0===r.length)throw new t("Expected binding",e.peekSourceCodeInfo());vt(o),e.advance(),ft(e.tryPeek(),"->"),e.advance();const a=e.parseExpression();return Pt([i.SpecialExpression,[Bn.loop,r,a]],n[2])}(e,r)}else it(r,"do")&&(o=Lt(e));o||=ar(e);let a=e.tryPeek();for(;!Ut(e);){if(Nt(a)){const t=a[1],r=Tt(t,a[2]);if(r<=n&&(12!==r||12!==n))break;const s=Pt(Bn[t]?[i.SpecialBuiltinSymbol,Bn[t]]:[i.NormalBuiltinSymbol,He[t]],a[2]);e.advance();o=Rt(a,s,o,ir(e,r),a[2])}else if(at(a)){if(!et(a[1]))break;const r=3;if(r<=n)break;const s=qt(e),i=ir(e,r);if(Yn(s))throw new t("Special expressions are not allowed in binary functional operators",s[2]);o=Vt(s,[o,i],a[2])}else{if("?"!==a?.[1])break;{if(1<=n)break;e.advance();const r=ir(e);if(!lt(e.tryPeek(),":"))throw new t("Expected :",e.peekSourceCodeInfo());e.advance();const a=ir(e);o=Pt([i.SpecialExpression,[Bn.if,[o,r,a]]],o[2])}}a=e.tryPeek()}return o}function ur(e){e.tokens.forEach(e=>{if("Error"===e[0])throw new t(e[3],e[2])});const n=[],r=function(e){const n=new Bt(e);return n.parseExpression=(e=0)=>ir(n,e),n}(e);for(;!r.isAtEnd();)if(n.push(ir(r,0)),lt(r.tryPeek(),";"))r.advance();else if(!r.isAtEnd())throw new t("Expected ;",r.peekSourceCodeInfo());return n}function cr(e,{removeWhiteSpace:n}){const t=e.tokens.filter(e=>!(function(e){return"SingleLineComment"===e?.[0]}(e)||function(e){return"MultiLineComment"===e?.[0]}(e)||function(e){return"Shebang"===e?.[0]}(e)||n&&function(e){return"Whitespace"===e?.[0]}(e)));return{...e,tokens:t}}const lr=["(",")","[","]","{","}","'",'"',"`",",",".",";"," ","\n","\r","\t"],fr=["0","1","2","3","4","5","6","7","8","9",...lr],dr=new Set(lr),pr=new Set(fr),hr=/\s/,yr=[0],mr=(e,n)=>{if('"'!==e[n])return yr;let t='"',r=1,o=e[n+r],a=!1;for(;o&&('"'!==o||a);)r+=1,a?(a=!1,t+=o):("\\"===o&&(a=!0),t+=o),o=e[n+r];return o?(t+='"',[r+1,["string",t]]):[r,["Error",t,void 0,`Unclosed string at position ${n}`]]};function vr(e,n,t,r){return n===t.slice(r,r+n.length)?[n.length,[e,n]]:yr}const gr=/\d/,br=/[0-7]/,xr=/[0-9a-f]/i,wr=/[01]/,kr=/[\s)\]}(,;]/,Er=(e,n)=>{let t=e[n];if("'"===t){let r=1,o=e[n+r],a=!1;for(;"'"!==o||a;){if(void 0===o)return[r,["Error",t,void 0,`Unclosed quoted symbol at position ${n}`]];r+=1,a?(a=!1,t+=o):("\\"===o&&(a=!0),t+=o),o=e[n+r]}return t+="'",[r+1,["Symbol",t]]}if(!pr.has(t)){const r=n;let o=e[n+=1];for(;o&&!dr.has(o);)t+=o,o=e[n+=1];return t.endsWith(":")?[n-r-1,["Symbol",t.slice(0,-1)]]:[n-r,["Symbol",t]]}return yr},Sr=[(e,n)=>{let t=e[n];if(!t||!hr.test(t))return yr;let r=t;for(t=e[n+=1];t&&hr.test(t);)r+=t,t=e[n+=1];return[r.length,["Whitespace",r]]},(e,n)=>{if("/"===e[n]&&"*"===e[n+1]){let t=2,r="/*";for(;("*"!==e[n+t]||"/"!==e[n+t+1])&&n+t+1<e.length;)r+=e[n+t],t+=1;return n+t+1>=e.length?[t,["Error",r,void 0,`Unclosed multi-line comment at position ${n}`]]:(r+="*/",t+=2,[t,["MultiLineComment",r]])}return yr},(e,n)=>{if("/"===e[n]&&"/"===e[n+1]){let t=2,r="//";for(;"\n"!==e[n+t]&&n+t<e.length;)r+=e[n+t],t+=1;return[t,["SingleLineComment",r]]}return yr},(e,n)=>{const t=Er(e,n);if(0===t[0]||!t[1])return yr;let r=t[1][1];r=r.startsWith("'")?r.slice(1,r.length-1):r;return void 0===Qt[r]?yr:[t[0],["ReservedSymbol",r]]},(e,n)=>vr("LParen","(",e,n),(e,n)=>vr("RParen",")",e,n),(e,n)=>vr("LBracket","[",e,n),(e,n)=>vr("RBracket","]",e,n),(e,n)=>vr("LBrace","{",e,n),(e,n)=>vr("RBrace","}",e,n),mr,(e,n)=>{if("#"!==e[n])return yr;const[t,r]=mr(e,n+1);if(!r)return yr;if("Error"===r[0]){return[t+1,["Error",`#${r[1]}`,void 0,`Unclosed regexp at position ${n}`]]}n+=t+1;let o=t+1,a="";for(;"g"===e[n]||"i"===e[n];)if(a+=e[n],o+=1,n+=1,a.includes(e[n]))return[o,["Error",`#${r[1]}${a}`,void 0,`Duplicated regexp option "${e[n]}"`]];return[o,["RegexpShorthand",`#${r[1]}${a}`]]},(e,n)=>{if("0"!==e[n])return yr;const t=e[n+1],r="b"===t||"B"===t?"binary":"o"===t||"O"===t?"octal":"x"===t||"X"===t?"hex":null;if(null===r)return yr;let o;for(o=n+2;o<e.length;o+=1){const n=e[o];if("binary"===r&&!wr.test(n))break;if("octal"===r&&!br.test(n))break;if("hex"===r&&!xr.test(n))break}const a=o-n;if(a<=2)return yr;const s=e[o];return s&&!kr.test(s)?yr:[a,["BasePrefixedNumber",e.substring(n,o)]]},(e,n)=>{let t;const r="-"===e[n],o="+"===e[n],a=r||o?n+1:n;let s=!1,i=!1;for(t=a;t<e.length;t+=1){const r=e[t];if("_"===r){if(!gr.test(e[t-1])||!gr.test(e[t+1]))return t===a?yr:[t-n+1,["Error",e.substring(n,t+1),void 0,`Invalid number format at position ${t+1}`]]}else if("."===r){if(t===a)return yr;if(s||i)return[t-n+1,["Error",e.substring(n,t+1),void 0,`Invalid number format at position ${t+1}`]];s=!0}else if("e"===r||"E"===r){if(t===a)return yr;if(i)return[t-n+1,["Error",e.substring(n,t+1),void 0,`Invalid number format at position ${t+1}`]];if("."===e[t-1]||"+"===e[t-1]||"-"===e[t-1])return[t-n+1,["Error",e.substring(n,t+1),void 0,`Invalid number format at position ${t+1}`]];"+"!==e[t+1]&&"-"!==e[t+1]||(t+=1),i=!0}else if(!gr.test(r))break}if((r||o)&&t===a)return yr;const u=t-n;if(0===u)return yr;const c=e[t];return c&&":"!==c&&!kr.test(c)?[t-n+1,["Error",e.substring(n,t+1),void 0,`Invalid number format at position ${t+1}`]]:[u,["Number",e.substring(n,t)]]},(e,n)=>{const t=e.slice(n,n+3);if(n+2<e.length&&ot(t))return[3,["Operator",t]];const r=e.slice(n,n+2);if(n+1<e.length&&ot(r))return[2,["Operator",r]];const o=e[n]??"";return ot(o)?[1,["Operator",o]]:yr},Er];function Ir(e,n,t){let r=0;const o={tokens:[],filePath:t,hasDebugData:n};for(;r<e.length;){const a=n?Nr(e,r,t):void 0,s=Ar(e,r),[i,u]=s;r+=i,u&&(a&&(u[2]=a),o.tokens.push(u))}return o}function Nr(e,n,t){const r=e.substring(0,n+1).split(/\r\n|\r|\n/),o=r[r.length-1],a=function(e,n){return e.split(/\r\n|\r|\n/)[n]}(e,r.length-1);return{code:a,position:{line:r.length,column:o.length},filePath:t}}function Ar(e,n){const t=n;if(0===n){const[r,o]=((e,n)=>{if("#"===e[n]&&"!"===e[n+1]){let t=2,r="#!";for(;"\n"!==e[n+t]&&n+t<e.length;)r+=e[n+t],t+=1;return[t,["SingleLineComment",r]]}return yr})(e,n);if(n+=r,r>0)return[n-t,o]}for(const r of Sr){const[o,a]=r(e,n);if(n+=o,0!==o)return[n-t,a]}return[1,["Error",e[t],void 0,"Unrecognized character"]]}function Pr(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const n=16*Math.random()|0;return("x"===e?n:3&n|8).toString(16)})}function $r(e,n){if("*"===n)return!0;if(n.endsWith(".*")){const t=n.slice(0,-2);return e===t||e.startsWith(`${t}.`)}return e===n}function Cr(e,n){if(!n)return[];const t=[];for(const[r,o]of Object.entries(n))$r(e,r)&&t.push([r,o]);return t}class jr{k;snapshots;nextSnapshotIndex;meta;effectName;effectArgs;_brand="SuspensionSignal";constructor(e,n,t,r,o,a){this.k=e,this.snapshots=n,this.nextSnapshotIndex=t,this.meta=r,this.effectName=o,this.effectArgs=a}}function Or(e){return e instanceof jr}class Mr{continuation;value;trimToIndex;_brand="ResumeFromSignal";constructor(e,n,t){this.continuation=e,this.value=n,this.trimToIndex=t}}function Vr(e){return e instanceof Mr}const Ur=new Map;function Rr(e){let n=Ur.get(e);return n||(n={[p]:!0,name:e},Ur.set(e,n)),n}class Br{_contexts;globalContext;values;modules;valueModules;pure;constructor({contexts:e,values:n,modules:t,valueModules:r,pure:o}){this.globalContext=b(e[0]),this._contexts=e,this.values=n,this.modules=t??new Map,this.valueModules=r??new Map,this.pure=o??!1}getContextsRaw(){return this._contexts}getHostValues(){return this.values}getModuleScopeBindings(){const e=this._contexts[0],n={};for(const[t,r]of Object.entries(e))n[t]=r.value;return n}getGlobalContextIndex(){return this._contexts.indexOf(this.globalContext)}static fromDeserialized(e){const n=new Br({contexts:e.contexts,values:e.values,modules:e.modules,pure:e.pure});return e.globalContextIndex>=0&&e.globalContextIndex<e.contexts.length&&(n.globalContext=e.contexts[e.globalContextIndex]),n}setContextsFromDeserialized(e,n){this._contexts=e,n>=0&&n<e.length&&(this.globalContext=e[n])}getModule(e){return this.modules.get(e)}getValueModule(e){return this.valueModules.has(e)?{value:this.valueModules.get(e),found:!0}:{value:void 0,found:!1}}registerValueModule(e,n){this.valueModules.set(e,n)}create(e){const n=this.globalContext,t=new Br({contexts:[e,...this._contexts],values:this.values,modules:this.modules,valueModules:this.valueModules,pure:this.pure});return t.globalContext=n,t}new(e){return new Br({contexts:[{},e],modules:this.modules,valueModules:this.valueModules,pure:this.pure})}addValues(e,n){const r=this._contexts[0];for(const[o,a]of Object.entries(e)){if(r[o])throw new t(`Cannot redefine value "${o}"`,n);const e=Tr(o);if(e)throw new t(`Cannot shadow ${e}`,n);r[o]={value:se(a)}}}getValue(e){for(const n of this._contexts){const t=n[e];if(t)return t.value}return this.values?.[e]}lookUp(e){const n=e[1];for(const e of this._contexts){const t=e[n];if(t)return t}const t=this.values?.[n];return void 0!==t?{value:se(t)}:null}evaluateSymbol(e){if(Yn(e)){const n=e[1];switch(n){case Bn["&&"]:case Bn["||"]:case Bn.array:case Bn.object:case Bn["defined?"]:case Bn.recur:case Bn["??"]:{const t=b(Dn.specialExpressions[n],e[2]);return{[f]:!0,functionType:"SpecialBuiltin",specialBuiltinSymbolType:n,sourceCodeInfo:e[2],arity:t.arity}}default:throw new t(`Unknown special builtin symbol type: ${n}`,e[2])}}if(zn(e)){const n=e[1],t=Je[n],r=t.name;return{[f]:!0,functionType:"Builtin",normalBuiltinSymbolType:n,sourceCodeInfo:e[2],arity:t.arity,name:r}}const n=this.lookUp(e);if(w(r=n)&&void 0!==r.value)return n.value;var r;throw new a(e[1],e[2])}}function Tr(e){return Ln.includes(e)?`special expression "${e}"`:_n.includes(e)?`builtin function "${e}"`:"self"===e?`builtin value "${e}"`:null}function Dr(e){const n=Tr(e);if(n)throw new t(`Cannot shadow ${n}`,void 0)}function _r(e={},n,r){const o=e.globalContext??{},a=e.contexts?[o,...e.contexts]:[o];let s;if(e.bindings)for(const[n,r]of Object.entries(e.bindings)){if(n.includes("."))throw new t(`Dots are not allowed in binding keys: "${n}"`,void 0);Dr(n),s||(s={}),s[n]=r}const i=new Br({contexts:a,values:s,modules:n,pure:r});return e.globalModuleScope?i:i.create({})}function Lr(e,n){return Math.imul(e^255&n,16777619)}function qr(e,n){return e=Lr(e,n),e=Lr(e,n>>>8),e=Lr(e,n>>>16),e=Lr(e,n>>>24)}function Fr(e,n){for(let t=0;t<n.length;t++){const r=n.charCodeAt(t);e=Lr(e,r),e=Lr(e,r>>>8)}return e}function Wr(e){let n=2166136261;if(null===e)return n=Lr(n,0),n>>>0;if(void 0===e)return n=Lr(n,7),n>>>0;const t=typeof e;if("boolean"===t)return n=Lr(n,e?1:2),n>>>0;if("number"===t)return n=Lr(n,3),n=Fr(n,Object.is(e,-0)?"-0":String(e)),n>>>0;if("string"===t)return n=Lr(n,4),n=Fr(n,e),n>>>0;if(Array.isArray(e)){n=Lr(n,5),n=qr(n,e.length);for(let t=0;t<e.length;t++)n=qr(n,Wr(e[t]));return n>>>0}n=Lr(n,6);const r=Object.keys(e).sort();n=qr(n,r.length);for(const t of r)n=Fr(n,t),n=qr(n,Wr(e[t]));return n>>>0}function zr(e,n){if(e===n)return!0;if(null===e||null===n)return!1;if(typeof e!=typeof n)return!1;if(Array.isArray(e)){if(!Array.isArray(n))return!1;if(e.length!==n.length)return!1;for(let t=0;t<e.length;t++)if(!zr(e[t],n[t]))return!1;return!0}if("object"!=typeof e)return!1;const t=e,r=n,o=Object.keys(t),a=Object.keys(r);if(o.length!==a.length)return!1;for(const e of o){if(!(e in r))return!1;if(!zr(t[e],r[e]))return!1}return!0}function Yr(e){if(null===e)return 4;if(void 0===e)return 9;const n=typeof e;if("boolean"===n)return e?4:5;if("number"===n)return String(e).length;if("string"===n)return e.length+2;if(Array.isArray(e)){let n=2;for(let t=0;t<e.length;t++)n+=Yr(e[t])+1;return n}const t=e,r=Object.keys(t);let o=2;for(const e of r)o+=e.length+2+1+Yr(t[e])+1;return o}function Gr(e,n,t,r){if(null===e||"object"!=typeof e)return Wr(e);if(Array.isArray(e))for(let t=0;t<e.length;t++)Gr(e[t],n,{parent:e,key:t});else{const t=e;for(const e of Object.keys(t))Gr(t[e],n,{parent:t,key:e})}const o=Wr(e),a=Yr(e);if(t&&a>=1){let r,s=n.get(o);s||(s=[],n.set(o,s));for(const n of s)if(zr(n.value,e)){r=n;break}r?r.locations.push(t):s.push({hash:o,value:Hr(e),size:a,locations:[t]})}return o}function Kr(e,n){if(null===e||"object"!=typeof e)return e;if(function(e){return null!==e&&"object"==typeof e&&"__poolRef"in e&&"number"==typeof e.__poolRef&&1===Object.keys(e).length}(e)){const t=e.__poolRef;if(!(t in n))throw new Error(`Unknown pool ref: ${t}`);return Kr(n[t],n)}if(Array.isArray(e))return e.map(e=>Kr(e,n));const t=e,r={};for(const e of Object.keys(t))r[e]=Kr(t[e],n);return r}function Hr(e){if(null===e||"object"!=typeof e)return e;if(Array.isArray(e))return e.map(e=>Hr(e));const n=e,t={};for(const e of Object.keys(n))t[e]=Hr(n[e]);return t}function Jr(e,n){const t=new Map;let r=0;function o(e){if(e instanceof Br){if(t.has(e))return;t.set(e,r++);for(const n of e.getContextsRaw())for(const e of Object.values(n))o(e.value)}else if(Array.isArray(e))for(const n of e)o(n);else if(null!==e&&"object"==typeof e)for(const n of Object.values(e))o(n)}function a(e,n){if(e instanceof Br)return{__csRef:t.get(e)};if(Array.isArray(e))return e.map((e,n)=>a(e));if(null!==e&&"object"==typeof e){const n={};for(const[t,r]of Object.entries(e))n[t]=a(r);return n}return e}o(e),void 0!==n&&o(n);const s=Array.from(t.entries()).map(([e,n])=>({id:n,contexts:e.getContextsRaw().map((e,n)=>{const t={};for(const[n,r]of Object.entries(e))t[n]={value:a(r.value)};return t}),globalContextIndex:e.getGlobalContextIndex(),pure:e.pure})),i=a(e),u=void 0!==n?a(n):void 0;return{version:2,contextStacks:s,k:i,...void 0!==u?{meta:u}:{}}}function Xr(e,n,t,r){const o=Jr(e,r);n.length>0&&(o.snapshots=n),o.nextSnapshotIndex=t;const a=[o.contextStacks,o.k];if(void 0!==o.meta&&a.push(o.meta),o.snapshots)for(const e of o.snapshots)a.push(e);const{roots:s,pool:i}=function(e,n=200){const t=e.map(e=>Hr(e)),r=new Map;for(let e=0;e<t.length;e++)Gr(t[e],r,null);const o={};let a=0;const s=Array.from(r.values()).flat().filter(e=>e.locations.length>1&&e.size>=n).sort((e,n)=>n.size-e.size),i=new Map;for(const e of s){if(i.has(e))continue;const n=a++;o[n]=e.value,i.set(e,n);for(const t of e.locations)Array.isArray(t.parent),t.parent[t.key]={__poolRef:n}}return{roots:t,pool:o}}(a,200);let u=0;if(o.contextStacks=s[u++],o.k=s[u++],void 0!==o.meta&&(o.meta=s[u++]),o.snapshots)for(let e=0;e<o.snapshots.length;e++)o.snapshots[e]=s[u++];return Object.keys(i).length>0&&(o.pool=i),o}function Zr(e,n){let r=e;if(2!==r.version)throw new t(`Unsupported suspension blob version: ${r.version} (expected 2)`,void 0);if(r.pool&&Object.keys(r.pool).length>0){const e=r.pool;r={...r,contextStacks:Kr(r.contextStacks,e),k:Kr(r.k,e),...void 0!==r.meta?{meta:Kr(r.meta,e)}:{},...r.snapshots?{snapshots:r.snapshots.map(n=>Kr(n,e))}:{}},delete r.pool}const o=new Map;for(const e of r.contextStacks){const t=e.contexts.map(()=>({})),r=Br.fromDeserialized({contexts:t,globalContextIndex:e.globalContextIndex,values:n?.values,modules:n?.modules,pure:e.pure});o.set(e.id,r)}function a(e){if(function(e){return null!==e&&"object"==typeof e&&"__csRef"in e&&"number"==typeof e.__csRef}(e)){const n=o.get(e.__csRef);if(!n)throw new t(`Invalid suspension blob: unknown context stack ref ${e.__csRef}`,void 0);return n}if(Array.isArray(e))return e.map(a);if(null!==e&&"object"==typeof e){const n={};for(const[t,r]of Object.entries(e))n[t]=a(r);return n}return e}for(const e of r.contextStacks){const n=o.get(e.id),t=e.contexts.map(e=>{const n=e,t={};for(const[e,r]of Object.entries(n))t[e]={value:a(r.value)};return t});n.setContextsFromDeserialized(t,e.globalContextIndex)}return{k:a(r.k),meta:void 0!==r.meta?a(r.meta):void 0,snapshots:r.snapshots??[],nextSnapshotIndex:r.nextSnapshotIndex??0}}function Qr(){return"undefined"!=typeof process&&"function"==typeof process.stdout?.write}function eo(e){return"string"==typeof e?e:null===e?"null":"number"==typeof e||"boolean"==typeof e?String(e):k(e)?"Builtin"===e.functionType?`<builtin function ${e.normalBuiltinSymbolType}>`:`<function ${e.n??"λ"}>`:_(e)?`<effect ${e.name}>`:T(e)?`/${e.s}/${e.f}`:"object"==typeof e&&e instanceof RegExp?`${e}`:JSON.stringify(no(e),null,2)}function no(e){if(e===Number.POSITIVE_INFINITY)return"∞";if(e===Number.NEGATIVE_INFINITY)return"-∞";if(k(e))return eo(e);if(_(e))return eo(e);if(T(e))return eo(e);if(Array.isArray(e))return e.map(no);if("object"==typeof e&&null!==e){const n={};for(const[t,r]of Object.entries(e))n[t]=no(r);return n}return e}const to={"dvala.io.print":{handler:function(e,n){const t=e[0],r=eo(t);return Qr()?process.stdout.write(r):console.log(r),{type:"Value",value:t,k:n}},arity:ne(1)},"dvala.io.println":{handler:function(e,n){const t=e[0],r=eo(t);return Qr()?process.stdout.write(`${r}\n`):"function"==typeof globalThis.alert?globalThis.alert(r):console.log(r),{type:"Value",value:t,k:n}},arity:ne(1)},"dvala.io.error":{handler:(e,n)=>{const t=e[0],r=eo(t);return Qr()?process.stderr.write(`${r}\n`):console.error(r),{type:"Value",value:t,k:n}},arity:ne(1)},"dvala.io.read-line":{handler:(e,n,r)=>{const o="string"==typeof e[0]?e[0]:"";if("function"==typeof globalThis.prompt){return{type:"Value",value:globalThis.prompt(o)??null,k:n}}throw new t('dvala.io.read-line is not supported in this environment. In Node.js, register a "dvala.io.read-line" host handler.',r)},arity:{min:0,max:1}},"dvala.io.read-stdin":{handler:(e,n,r)=>{if(!Qr()||!process.stdin)throw new t("dvala.io.read-stdin is not supported in this environment. Node.js is required.",r);return new Promise((e,t)=>{const r=[];process.stdin.setEncoding("utf-8"),process.stdin.on("data",e=>r.push(e)),process.stdin.on("end",()=>e({type:"Value",value:r.join(""),k:n})),process.stdin.on("error",e=>t(e)),process.stdin.resume()})},arity:ne(0)},"dvala.random":{handler:(e,n)=>({type:"Value",value:Math.random(),k:n}),arity:ne(0)},"dvala.random.uuid":{handler:(e,n)=>({type:"Value",value:"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const n=16*Math.random()|0;return("x"===e?n:3&n|8).toString(16)}),k:n}),arity:ne(0)},"dvala.random.int":{handler:(e,n,r)=>{const o=e[0],a=e[1];if("number"!=typeof o||!Number.isInteger(o))throw new t(`dvala.random.int: min must be an integer, got ${"number"==typeof o?o:typeof o}`,r);if("number"!=typeof a||!Number.isInteger(a))throw new t(`dvala.random.int: max must be an integer, got ${"number"==typeof a?a:typeof a}`,r);if(a<=o)throw new t(`dvala.random.int: max (${a}) must be greater than min (${o})`,r);return{type:"Value",value:Math.floor(Math.random()*(a-o))+o,k:n}},arity:ne(2)},"dvala.random.item":{handler:(e,n,r)=>{const o=e[0];if(!Array.isArray(o))throw new t("dvala.random.item: argument must be an array, got "+typeof o,r);if(0===o.length)throw new t("dvala.random.item: cannot pick from an empty array",r);return{type:"Value",value:o[Math.floor(Math.random()*o.length)],k:n}},arity:ne(1)},"dvala.random.shuffle":{handler:(e,n,r)=>{const o=e[0];if(!Array.isArray(o))throw new t("dvala.random.shuffle: argument must be an array, got "+typeof o,r);const a=Array.from(o);for(let e=a.length-1;e>0;e--){const n=Math.floor(Math.random()*(e+1)),t=a[e];a[e]=a[n],a[n]=t}return{type:"Value",value:a,k:n}},arity:ne(1)},"dvala.time.now":{handler:(e,n)=>({type:"Value",value:Date.now(),k:n}),arity:ne(0)},"dvala.time.zone":{handler:(e,n)=>({type:"Value",value:Intl.DateTimeFormat().resolvedOptions().timeZone,k:n}),arity:ne(0)},"dvala.checkpoint":{handler:(e,n)=>({type:"Value",value:null,k:n}),arity:{min:0,max:1}},"dvala.sleep":{handler:(e,n,r)=>{const o=e[0];if("number"!=typeof o||o<0)throw new t(`dvala.sleep requires a non-negative number argument, got ${"number"==typeof o?o:typeof o}`,r);return new Promise(e=>{setTimeout(()=>e({type:"Value",value:null,k:n}),o)})},arity:ne(1)}};function ro(e){const n=to[e];if(n)return(e,t,r)=>(ee(n.arity,e.length,r),n.handler(e,t,r))}function oo(e,n){switch(e[0]){case i.Number:case i.String:return e[1];case i.NormalBuiltinSymbol:case i.SpecialBuiltinSymbol:case i.UserDefinedSymbol:return n.evaluateSymbol(e);case i.ReservedSymbol:return po(e);case i.NormalExpression:{const r=function(e,n){const r=e[2];return on(function(e,n){const r=[],o=[],a=cn(e,(e,a)=>Kn(e)?on(oo(e[1],n),n=>{if(!Array.isArray(n))throw new t(`Spread operator requires an array, got ${m(e)}`,e[2]);r.push(...n)}):e[0]!==i.ReservedSymbol||"_"!==e[1]?on(oo(e,n),e=>{r.push(e)}):void o.push(a));return on(a,()=>({params:r,placeholders:o}))}(e[1][1],n),({params:o,placeholders:s})=>{if(Gn(e)){const i=e[1][0];if(s.length>0){return on(oo(i,n),e=>({[f]:!0,function:q(e,r),functionType:"Partial",params:o,placeholders:s,sourceCodeInfo:r,arity:ne(s.length)}))}if(zn(i)){const r=i[1],a=Dn.allNormalExpressions[r];if(n.pure&&!1===a.pure)throw new t(`Cannot call impure function '${a.name}' in pure mode`,e[2]);return a.dvalaImpl?io(a.dvalaImpl,o,n,e[2]):a.evaluate(o,e[2],n,{executeFunction:ao})}{const t=n.getValue(i[1]);if(void 0!==t)return ao(q(t,r),o,n,r);throw new a(i[1],e[2])}}return on(oo(e[1][0],n),e=>{const t=q(e,r);if(s.length>0){return{[f]:!0,function:t,functionType:"Partial",params:o,placeholders:s,sourceCodeInfo:r,arity:ne(s.length)}}return ao(t,o,n,r)})})}(e,n);return on(r,n=>{if("number"==typeof n&&Number.isNaN(n))throw new t("Number is NaN",e[2]);return Se(n)})}case i.SpecialExpression:{const r={type:"Eval",node:e,env:n,k:[]};try{return Se(Bo(r))}catch(r){if(r instanceof t&&r.message.includes("Unexpected async operation")){return To({type:"Eval",node:e,env:n,k:[]}).then(e=>Se(e))}throw r}}default:throw new t(`${c(e[0])}-node cannot be evaluated`,e[2])}}function ao(e,n,r,o){if(k(e))return so(e,n,r,o);if(Array.isArray(e))return co(e,n,o);if(V(e))return uo(e,n,o);if("string"==typeof e)return lo(e,n,o);if(X(e))return fo(e,n,o);throw new t("Unexpected function type",o)}function so(e,n,r,o){switch(e.functionType){case"UserDefined":return io(e,n,r,o);case"Partial":return function(e,n,r,o){const a=[...e.params];if(n.length!==e.placeholders.length)throw new t(`(partial) expects ${e.placeholders.length} arguments, got ${n.length}.`,o);const s=[...n];for(const n of e.placeholders)a.splice(n,0,s.shift());return ao(e.function,a,r,o)}(e,n,r,o);case"Comp":return function(e,n,r,o){const{params:a}=e;if(0===a.length){if(1!==n.length)throw new t(`(comp) expects one argument, got ${m(n.length)}.`,o);return C(n[0],o)}let s=n;for(let e=a.length-1;e>=0;e--){const n=a[e];s=on(s,e=>on(ao(q(n,o),e,r,o),e=>[e]))}return on(s,e=>C(e[0],o))}(e,n,r,o);case"Constantly":return e.value;case"Juxt":return function(e,n,t,r){return function(e,n){const t=[];for(let r=0;r<e.length;r++){const o=n(e[r],r);if(o instanceof Promise)return an(o,t,e,n,r);t.push(o)}return t}(e.params,e=>ao(q(e,r),n,t,r))}(e,n,r,o);case"Complement":return on(ao(e.function,n,r,o),e=>!e);case"EveryPred":return function(e,n,t,r){const o=[];for(const a of e.params)for(const e of n)o.push(()=>ao(q(a,r),[e],t,r));return sn(o,(e,n)=>!!e&&on(n(),e=>!!e),!0)}(e,n,r,o);case"SomePred":return function(e,n,t,r){const o=[];for(const a of e.params)for(const e of n)o.push(()=>ao(q(a,r),[e],t,r));return sn(o,(e,n)=>!!e||on(n(),e=>!!e),!1)}(e,n,r,o);case"Fnull":return function(e,n,t,r){const o=n.map((n,t)=>null===n?se(e.params[t]):n);return ao(q(e.function,r),o,t,r)}(e,n,r,o);case"EffectMatcher":return function(e,n,t){ee({min:1,max:1},n.length,e.sourceCodeInfo??t);const r=n[0];L(r,t);const o=r.name;if("string"===e.matchType)return $r(o,e.pattern);const a=new RegExp(e.pattern,e.flags);return a.test(o)}(e,n,o);case"Builtin":{const a=Dn.allNormalExpressions[e.normalBuiltinSymbolType];return a.dvalaImpl?io(a.dvalaImpl,n,r,o):function(e,n,r,o){const a=b(Dn.allNormalExpressions[e.normalBuiltinSymbolType],o);if(r.pure&&!1===a.pure)throw new t(`Cannot call impure function '${e.name}' in pure mode`,o);if(a.dvalaImpl)return io(a.dvalaImpl,n,r,o);return a.evaluate(n,o,r,{executeFunction:ao})}(e,n,r,o)}case"SpecialBuiltin":return function(e,n,r,o){const a=b(Dn.specialExpressions[e.specialBuiltinSymbolType],o);if(a.evaluateAsNormalExpression)return a.evaluateAsNormalExpression(n,o,r,{executeFunction:ao});throw new t(`Special builtin function ${e.specialBuiltinSymbolType} is not supported as normal expression.`,o)}(e,n,r,o);case"Module":return function(e,n,r,o){const a=r.getModule(e.moduleName);if(!a)throw new t(`Module '${e.moduleName}' not found.`,o);const s=a.functions[e.functionName];if(!s)throw new t(`Function '${e.functionName}' not found in module '${e.moduleName}'.`,o);if(r.pure&&!1===s.pure)throw new t(`Cannot call impure function '${e.functionName}' in pure mode`,o);if(ee(s.arity,n.length,o),s.dvalaImpl)return io(s.dvalaImpl,n,r,o);return s.evaluate(n,o,r,{executeFunction:ao})}(e,n,r,o)}}function io(e,r,o,a){function s(r){if(!Q(e.arity,r.length))throw new t(`Expected ${e.arity} arguments, got ${r.length}.`,a);const i=e.evaluatedfunction,u=i[0],c=u.filter(e=>e[0]!==Qe).length,l=o.create(e.evaluatedfunction[2]),f={self:{value:e}},d=[];let p,h;for(let e=0;e<r.length;e+=1)if(e<c){const n=e;p=on(p,()=>{const e=se(r[n]);return on(dn(u[n],e,e=>oo(e,l.create(f))),e=>{Object.entries(e).forEach(([e,n])=>{f[e]={value:n}})})})}else d.push(se(r[e]));for(let e=r.length;e<c;e++){const n=e;h=on(h,()=>{const e=u[n];return on(oo(e[1][1],o.create(f)),n=>on(dn(e,n,e=>oo(e,o.create(f))),e=>{Object.entries(e).forEach(([e,n])=>{f[e]={value:n}})}))})}return on(p,()=>on(h,()=>{const e=u.find(e=>e[0]===Qe),t=void 0!==e?on(dn(e,d,e=>oo(e,o.create(f))),e=>{Object.entries(e).forEach(([e,n])=>{f[e]={value:n}})}):void 0;return on(t,()=>{const e=l.create(f),t=sn(i[1],(n,t)=>oo(t,e),null);return t instanceof Promise?t.catch(e=>{if(e instanceof n)return s(e.params);throw e}):t})}))}for(;;)try{return s(r)}catch(e){if(e instanceof n){r=e.params;continue}throw e}}function uo(e,n,r){if(1!==n.length)throw new t("Object as function requires one string parameter.",r);const o=n[0];return z(o,r),se(e[o])}function co(e,n,r){if(1!==n.length)throw new t("Array as function requires one non negative integer parameter.",r);const o=n[0];return Z(o,r,{integer:!0,nonNegative:!0}),se(e[o])}function lo(e,n,r){if(1!==n.length)throw new t("String as function requires one Obj parameter.",r);const o=se(n[0]);if(V(o))return se(o[e]);if(X(o,{integer:!0}))return se(e[o]);throw new t(`string as function expects Obj or integer parameter, got ${m(o)}`,r)}function fo(e,n,r){if(Z(e,void 0,{integer:!0}),1!==n.length)throw new t("Number as function requires one Arr parameter.",r);const o=n[0];return M(o,r),se(o[e])}function po(e){const n=e[1];if(!["true","false","null"].includes(n))throw new t(`Reserved symbol ${n} cannot be evaluated`,e[2]);return b(Qt[n],e[2])}function ho(e,n,r){switch(e[0]){case i.Number:case i.String:return{type:"Value",value:e[1],k:r};case i.NormalBuiltinSymbol:case i.SpecialBuiltinSymbol:case i.UserDefinedSymbol:return{type:"Value",value:n.evaluateSymbol(e),k:r};case i.ReservedSymbol:return{type:"Value",value:po(e),k:r};case i.NormalExpression:return function(e,n,t){const r=e[1][1],o=e[2],a={type:"NanCheck",sourceCodeInfo:o},s={type:"EvalArgs",node:e,index:0,params:[],placeholders:[],env:n,sourceCodeInfo:o};let u=0;for(;u<r.length;){const e=r[u];if(e[0]!==i.ReservedSymbol||"_"!==e[1])break;s.placeholders.push(s.params.length),u++}if(s.index=u,u>=r.length)return yo(s,[a,...t]);const c=r[u],l=[s,a,...t];if(Kn(c))return{type:"Eval",node:c[1],env:n,k:l};return{type:"Eval",node:c,env:n,k:l}}(e,n,r);case i.SpecialExpression:return function(e,n,r){const o=e[2],a=e[1][0];switch(a){case Bn.if:case Bn.unless:{const[t,s,i]=e[1][1];return{type:"Eval",node:t,env:n,k:[{type:"IfBranch",thenNode:s,elseNode:i,inverted:a===Bn.unless,env:n,sourceCodeInfo:o},...r]}}case Bn["&&"]:{const t=e[1][1];if(0===t.length)return{type:"Value",value:!0,k:r};const a={type:"And",nodes:t,index:1,env:n,sourceCodeInfo:o};return 1===t.length?{type:"Eval",node:t[0],env:n,k:r}:{type:"Eval",node:t[0],env:n,k:[a,...r]}}case Bn["||"]:{const t=e[1][1];if(0===t.length)return{type:"Value",value:!1,k:r};const a={type:"Or",nodes:t,index:1,env:n,sourceCodeInfo:o};return 1===t.length?{type:"Eval",node:t[0],env:n,k:r}:{type:"Eval",node:t[0],env:n,k:[a,...r]}}case Bn["??"]:{const t=e[1][1];if(0===t.length)return{type:"Value",value:null,k:r};const a=t[0];if(Fn(a)&&null===n.lookUp(a)){if(1===t.length)return{type:"Value",value:null,k:r};const e={type:"Qq",nodes:t,index:2,env:n,sourceCodeInfo:o},a=t[1];return Fn(a)&&null===n.lookUp(a)?function(e,n){return xo(e,n)}(e,r):2===t.length?{type:"Eval",node:a,env:n,k:r}:{type:"Eval",node:a,env:n,k:[e,...r]}}const s={type:"Qq",nodes:t,index:1,env:n,sourceCodeInfo:o};return 1===t.length?{type:"Eval",node:a,env:n,k:r}:{type:"Eval",node:a,env:n,k:[s,...r]}}case Bn.cond:{const t=e[1][1];if(0===t.length)return{type:"Value",value:null,k:r};const a={type:"Cond",phase:"test",cases:t,index:0,env:n,sourceCodeInfo:o};return{type:"Eval",node:t[0][0],env:n,k:[a,...r]}}case Bn.match:{const t=e[1][1],a=e[1][2];return{type:"Eval",node:t,env:n,k:[{type:"Match",phase:"matchValue",matchValue:null,cases:a,index:0,bindings:{},env:n,sourceCodeInfo:o},...r]}}case Bn.block:{const t=e[1][1],a=e[1][2],s={},i=n.create(s);let u=r;if(a&&a.length>0){u=[{type:"TryWith",handlers:a.map(([e,t])=>({effectRef:oo(e,n),handlerNode:t})),env:n,sourceCodeInfo:o},...r]}if(0===t.length)return{type:"Value",value:null,k:u};if(1===t.length)return{type:"Eval",node:t[0],env:i,k:u};const c={type:"Sequence",nodes:t,index:1,env:i,sourceCodeInfo:o};return{type:"Eval",node:t[0],env:i,k:[c,...u]}}case Bn.let:{const t=e[1][1],a=t[1][0];return{type:"Eval",node:t[1][1],env:n,k:[{type:"LetBind",target:a,env:n,sourceCodeInfo:o},...r]}}case Bn.loop:{const t=e[1][1],a=e[1][2];if(0===t.length){const e={},s={type:"LoopIterate",bindingNodes:t,bindingContext:e,body:a,env:n.create(e),sourceCodeInfo:o};return{type:"Eval",node:a,env:n.create(e),k:[s,...r]}}const s={type:"LoopBind",phase:"value",bindingNodes:t,index:0,context:{},body:a,env:n,sourceCodeInfo:o};return{type:"Eval",node:t[0][1][1],env:n,k:[s,...r]}}case Bn.for:case Bn.doseq:{const t=e[1][1],s=e[1][2],i=a===Bn.for;if(0===t.length)return{type:"Value",value:i?[]:null,k:r};const u={},c=n.create(u),l={type:"ForLoop",returnResult:i,bindingNodes:t,body:s,result:[],phase:"evalCollection",bindingLevel:0,levelStates:[],context:u,env:c,sourceCodeInfo:o};return{type:"Eval",node:t[0][0][1][1],env:c,k:[l,...r]}}case Bn.recur:{const t=e[1][1];if(0===t.length)return Ao([],r,o);const a={type:"Recur",nodes:t,index:1,params:[],env:n,sourceCodeInfo:o};if(1===t.length){const e={...a,index:1};return{type:"Eval",node:t[0],env:n,k:[e,...r]}}return{type:"Eval",node:t[0],env:n,k:[a,...r]}}case Bn.array:{const t=e[1][1];if(0===t.length)return{type:"Value",value:[],k:r};const a=t[0],s=Kn(a),i={type:"ArrayBuild",nodes:t,index:0,result:[],isSpread:s,env:n,sourceCodeInfo:o};return{type:"Eval",node:s?a[1]:a,env:n,k:[i,...r]}}case Bn.object:{const t=e[1][1];if(0===t.length)return{type:"Value",value:{},k:r};const a=t[0],s=Kn(a),i={type:"ObjectBuild",nodes:t,index:0,result:{},currentKey:null,isSpread:s,env:n,sourceCodeInfo:o};return{type:"Eval",node:s?a[1]:a,env:n,k:[i,...r]}}case Bn["0_lambda"]:{const t=function(e,n){const t={},r=e[0].reduce((e,n)=>(Object.keys(hn(n)).forEach(n=>{e[n]={value:null}}),e),{});return Hn(e[1],n.new(r),Dn,oo).forEach(e=>{const r=n.getValue(e);$(r)&&(t[e]={value:r})}),[e[0],e[1],t]}(e[1][1],n),o=t[0].filter(e=>e[0]!==Qe&&void 0===e[1][1]).length,a={min:o>0?o:void 0,max:t[0].some(e=>e[0]===Qe)?void 0:t[0].length};return{type:"Value",value:{[f]:!0,sourceCodeInfo:e[2],functionType:"UserDefined",name:void 0,evaluatedfunction:t,arity:a,docString:""},k:r}}case Bn["defined?"]:{const t=e[1][1];if(!Fn(t))return{type:"Value",value:!0,k:r};return{type:"Value",value:null!==n.lookUp(t),k:r}}case Bn.import:{const a=e[1][1],s=n.getValueModule(a);if(s.found)return{type:"Value",value:s.value,k:r};const i=n.getModule(a);if(!i)throw new t(`Unknown module: '${a}'`,o);const u={};for(const[e,n]of Object.entries(i.functions))u[e]={[f]:!0,sourceCodeInfo:o,functionType:"Module",moduleName:a,functionName:e,arity:n.arity};if(i.source){const e=ur(cr(Ir(i.source,!1,void 0),{removeWhiteSpace:!0})),t=n.create({}),s={type:"ImportMerge",tsFunctions:u,moduleName:a,module:i,env:n,sourceCodeInfo:o};if(1===e.length)return{type:"Eval",node:e[0],env:t,k:[s,...r]};const c={type:"Sequence",nodes:e,index:1,env:t};return{type:"Eval",node:e[0],env:t,k:[c,s,...r]}}return n.registerValueModule(a,u),{type:"Value",value:u,k:r}}case Bn.effect:return{type:"Value",value:Rr(e[1][1]),k:r};case Bn.perform:{const t=[e[1][1],...e[1][2]];if(1===t.length){const e={type:"PerformArgs",argNodes:t,index:1,params:[],env:n,sourceCodeInfo:o};return{type:"Eval",node:t[0],env:n,k:[e,...r]}}const a={type:"PerformArgs",argNodes:t,index:1,params:[],env:n,sourceCodeInfo:o};return{type:"Eval",node:t[0],env:n,k:[a,...r]}}case Bn.parallel:return{type:"Parallel",branches:e[1][1],env:n,k:r};case Bn.race:return{type:"Race",branches:e[1][1],env:n,k:r};default:throw new t(`Unknown special expression type: ${a}`,o)}}(e,n,r);default:throw new t(`${c(e[0])}-node cannot be evaluated`,e[2])}}function yo(e,n){const{node:r,params:o,placeholders:s,env:i,sourceCodeInfo:u}=e;if(Gn(r)){const e=r[1][0];if(s.length>0){const t=i.evaluateSymbol(e);return{type:"Value",value:{[f]:!0,function:q(t,u),functionType:"Partial",params:o,placeholders:s,sourceCodeInfo:u,arity:ne(s.length)},k:n}}if(zn(e)){const r=e[1],a=Dn.allNormalExpressions[r];if(i.pure&&!1===a.pure)throw new t(`Cannot call impure function '${a.name}' in pure mode`,u);if(a.dvalaImpl)return vo(a.dvalaImpl,o,i,u,n);return Uo(a.evaluate(o,u,i,{executeFunction:ao}),n)}const c=i.getValue(e[1]);if(void 0!==c)return mo(q(c,u),o,s,i,u,n);throw new a(e[1],u)}return{type:"Eval",node:r[1][0],env:i,k:[{type:"CallFn",params:o,placeholders:s,env:i,sourceCodeInfo:u},...n]}}function mo(e,n,r,o,a,s){if(r.length>0){return{type:"Value",value:{[f]:!0,function:e,functionType:"Partial",params:n,placeholders:r,sourceCodeInfo:a,arity:ne(r.length)},k:s}}if(k(e))return function(e,n,t,r,o){switch(e.functionType){case"UserDefined":return vo(e,n,t,r,o);case"Partial":case"Comp":case"Constantly":case"Juxt":case"Complement":case"EveryPred":case"SomePred":case"Fnull":case"EffectMatcher":case"SpecialBuiltin":return Uo(so(e,n,t,r),o);case"Module":{const a=t.getModule(e.moduleName),s=a?.functions[e.functionName];if(s?.dvalaImpl)return ee(s.arity,n.length,r),vo(s.dvalaImpl,n,t,r,o);return Uo(so(e,n,t,r),o)}case"Builtin":{const a=Dn.allNormalExpressions[e.normalBuiltinSymbolType];if(a.dvalaImpl)return vo(a.dvalaImpl,n,t,r,o);return Uo(so(e,n,t,r),o)}}}(e,n,o,a,s);if(Array.isArray(e))return{type:"Value",value:co(e,n,a),k:s};if(V(e))return{type:"Value",value:uo(e,n,a),k:s};if("string"==typeof e)return{type:"Value",value:lo(e,n,a),k:s};if(X(e))return{type:"Value",value:fo(e,n,a),k:s};throw new t("Unexpected function type",a)}function vo(e,n,r,o,a){if(!Q(e.arity,n.length))throw new t(`Expected ${e.arity} arguments, got ${n.length}.`,o);const s=e.evaluatedfunction,i=s[0],u=i.filter(e=>e[0]!==Qe).length,c=r.create(e.evaluatedfunction[2]),l={self:{value:e}},f=[];for(let t=0;t<n.length;t+=1)if(t<u){const s=se(n[t]),u=dn(i[t],s,e=>oo(e,c.create(l)));if(u instanceof Promise){return Uo(io(e,n,r,o),a)}Object.entries(u).forEach(([e,n])=>{l[e]={value:n}})}else f.push(se(n[t]));for(let t=n.length;t<u;t++){const s=i[t],u=oo(s[1][1],c.create(l));if(u instanceof Promise){return Uo(io(e,n,r,o),a)}const f=dn(s,u,e=>oo(e,c.create(l)));if(f instanceof Promise){return Uo(io(e,n,r,o),a)}Object.entries(f).forEach(([e,n])=>{l[e]={value:n}})}const d=i.find(e=>e[0]===Qe);if(d){const t=dn(d,f,e=>oo(e,c.create(l)));if(t instanceof Promise){return Uo(io(e,n,r,o),a)}Object.entries(t).forEach(([e,n])=>{l[e]={value:n}})}const p=s[1],h=c.create(l);if(0===p.length)return{type:"Value",value:null,k:a};const y={type:"FnBody",fn:e,bodyIndex:1,env:h,outerEnv:r,sourceCodeInfo:o};return p.length,{type:"Eval",node:p[0],env:h,k:[y,...a]}}function go(e,n,r){switch(e.type){case"Sequence":return function(e,n,t){const{nodes:r,index:o,env:a}=e;if(o>=r.length)return{type:"Value",value:n,k:t};const s={...e,index:o+1};if(o===r.length-1)return{type:"Eval",node:r[o],env:a,k:t};return{type:"Eval",node:r[o],env:a,k:[s,...t]}}(e,n,r);case"IfBranch":return function(e,n,t){const{thenNode:r,elseNode:o,inverted:a,env:s}=e,i=a?!n:n;if(i)return{type:"Eval",node:r,env:s,k:t};if(o)return{type:"Eval",node:o,env:s,k:t};return{type:"Value",value:null,k:t}}(e,n,r);case"Cond":return function(e,n,t){const{cases:r,index:o,env:a}=e;if("test"===e.phase){if(n)return{type:"Eval",node:r[o][1],env:a,k:t};const s=o+1;if(s>=r.length)return{type:"Value",value:null,k:t};const i={...e,index:s};return{type:"Eval",node:r[s][0],env:a,k:[i,...t]}}return{type:"Value",value:n,k:t}}(e,n,r);case"Match":return function(e,n,t){const{cases:r,env:o}=e;if("matchValue"===e.phase){const r=n;return bo({...e,matchValue:r,phase:"guard"},t)}if("guard"===e.phase){if(!n){return bo({...e,index:e.index+1,bindings:{}},t)}const a={};for(const[n,t]of Object.entries(e.bindings))a[n]={value:t};const s=o.create(a);return{type:"Eval",node:r[e.index][1],env:s,k:t}}return{type:"Value",value:n,k:t}}(e,n,r);case"And":return function(e,n,t){if(!n)return{type:"Value",value:n,k:t};const{nodes:r,index:o,env:a}=e;if(o>=r.length)return{type:"Value",value:n,k:t};if(o===r.length-1)return{type:"Eval",node:r[o],env:a,k:t};const s={...e,index:o+1};return{type:"Eval",node:r[o],env:a,k:[s,...t]}}(e,n,r);case"Or":return function(e,n,t){if(n)return{type:"Value",value:n,k:t};const{nodes:r,index:o,env:a}=e;if(o>=r.length)return{type:"Value",value:n,k:t};if(o===r.length-1)return{type:"Eval",node:r[o],env:a,k:t};const s={...e,index:o+1};return{type:"Eval",node:r[o],env:a,k:[s,...t]}}(e,n,r);case"Qq":return function(e,n,t){if(null!==n)return{type:"Value",value:n,k:t};return xo(e,t)}(e,n,r);case"ArrayBuild":return function(e,n,r){const{nodes:o,result:a,env:s,sourceCodeInfo:i}=e;if(e.isSpread){if(!Array.isArray(n))throw new t("Spread value is not an array",i);a.push(...n)}else a.push(n);const u=e.index+1;if(u>=o.length)return{type:"Value",value:a,k:r};const c=o[u],l=Kn(c),f={...e,index:u,isSpread:l};return{type:"Eval",node:l?c[1]:c,env:s,k:[f,...r]}}(e,n,r);case"ObjectBuild":return function(e,n,r){const{nodes:o,result:a,env:s,sourceCodeInfo:i}=e;if(e.isSpread){if(!w(n))throw new t("Spread value is not an object",i);Object.assign(a,n);const u=e.index+1;if(u>=o.length)return{type:"Value",value:a,k:r};const c=o[u],l=Kn(c),f={...e,index:u,currentKey:null,isSpread:l};return{type:"Eval",node:l?c[1]:c,env:s,k:[f,...r]}}if(null===e.currentKey){z(n,i);const a=o[e.index+1];if(void 0===a)throw new t("Missing value for key",i);return{type:"Eval",node:a,env:s,k:[{...e,currentKey:n},...r]}}{a[e.currentKey]=n;const t=e.index+2;if(t>=o.length)return{type:"Value",value:a,k:r};const i=o[t],u=Kn(i),c={...e,index:t,currentKey:null,isSpread:u};return{type:"Eval",node:u?i[1]:i,env:s,k:[c,...r]}}}(e,n,r);case"LetBind":return function(e,n,t){const{target:r,env:o,sourceCodeInfo:a}=e,s=dn(r,n,e=>oo(e,o));return on(s,e=>(o.addValues(e,a),{type:"Value",value:n,k:t}))}(e,n,r);case"LoopBind":return function(e,n,t){const{bindingNodes:r,index:o,context:a,body:s,env:i,sourceCodeInfo:u}=e,c=r[o],l=dn(c[1][0],n,e=>oo(e,i.create(a)));return on(l,n=>{Object.entries(n).forEach(([e,n])=>{a[e]={value:n}});const c=o+1;if(c>=r.length){const e=i.create(a);return{type:"Eval",node:s,env:e,k:[{type:"LoopIterate",bindingNodes:r,bindingContext:a,body:s,env:e,sourceCodeInfo:u},...t]}}const l={...e,index:c};return{type:"Eval",node:r[c][1][1],env:i.create(a),k:[l,...t]}})}(e,n,r);case"LoopIterate":return function(e,n,t){return{type:"Value",value:n,k:t}}(0,n,r);case"ForLoop":return function(e,n,r){const{returnResult:o,bindingNodes:a,result:s,env:i,sourceCodeInfo:u,context:c}=e,{asColl:l,isSeq:f}={asColl:(e,n)=>{if("string"==typeof e||Array.isArray(e)||V(e))return e;throw new t(`Expected collection, got ${m(e)}`,n)},isSeq:e=>"string"==typeof e||Array.isArray(e)};switch(e.phase){case"evalCollection":{const t=l(n,u),o=f(t)?t:Object.entries(t);if(0===o.length)return wo(e,r);const s=[...e.levelStates];s[e.bindingLevel]={collection:o,index:0};const d=a[e.bindingLevel];return on(dn(d[0][1][0],C(o[0],u),e=>oo(e,i)),n=>{Object.entries(n).forEach(([e,n])=>{c[e]={value:n}});const t=d[1];return t.length>0?Eo(e,s,t,0,r):So(e,s,r)})}case"evalLet":throw new t("ForLoop evalLet should not reach applyFrame",u);case"evalWhen":{if(!n)return ko(e,r);const t=a[e.bindingLevel][3];if(t){const n={...e,phase:"evalWhile"};return{type:"Eval",node:t,env:i,k:[n,...r]}}return Io(e,r)}case"evalWhile":if(!n){const n=[...e.levelStates];return n[e.bindingLevel]={...n[e.bindingLevel],index:Number.POSITIVE_INFINITY},ko({...e,levelStates:n},r)}return Io(e,r);case"evalBody":return o&&s.push(n),ko(e,r);case"evalElement":throw new t(`Unexpected ForLoop phase: ${e.phase}`,u)}return{type:"Value",value:null,k:r}}(e,n,r);case"Recur":return function(e,n,t){const{nodes:r,index:o,params:a,env:s}=e;if(a.push(n),o>=r.length)return Ao(a,t,e.sourceCodeInfo);const i={...e,index:o+1};return{type:"Eval",node:r[o],env:s,k:[i,...t]}}(e,n,r);case"PerformArgs":return function(e,n,t){const{argNodes:r,index:o,params:a,env:s}=e;if(a.push(n),o>=r.length){const n=a[0];L(n,e.sourceCodeInfo);return{type:"Perform",effect:n,args:a.slice(1),k:t,sourceCodeInfo:e.sourceCodeInfo}}const i={...e,index:o+1};return{type:"Eval",node:r[o],env:s,k:[i,...t]}}(e,n,r);case"TryWith":return function(e,n){return{type:"Value",value:e,k:n}}(n,r);case"EffectResume":return function(e,n){return{type:"Value",value:n,k:e.resumeK}}(e,n);case"ParallelResume":return function(e,n,t){return{type:"ParallelResume",value:n,branchCount:e.branchCount,completedBranches:e.completedBranches,suspendedBranches:e.suspendedBranches,k:t}}(e,n,r);case"EvalArgs":return function(e,n,r){const{node:o,params:a,placeholders:s,env:u}=e,c=o[1][1],l=c[e.index];if(Kn(l)){if(!Array.isArray(n))throw new t(`Spread operator requires an array, got ${m(n)}`,l[2]);a.push(...n)}else a.push(n);let f=e.index+1;for(;f<c.length;){const e=c[f];if(e[0]!==i.ReservedSymbol||"_"!==e[1])break;s.push(a.length),f++}if(f>=c.length)return yo({...e,index:f},r);const d={...e,index:f},p=c[f];if(Kn(p))return{type:"Eval",node:p[1],env:u,k:[d,...r]};return{type:"Eval",node:p,env:u,k:[d,...r]}}(e,n,r);case"CallFn":return function(e,n,t){const r=q(n,e.sourceCodeInfo);return mo(r,e.params,e.placeholders,e.env,e.sourceCodeInfo,t)}(e,n,r);case"FnBody":return function(e,n,t){const{fn:r,bodyIndex:o,env:a}=e,s=r.evaluatedfunction[1];if(o>=s.length)return{type:"Value",value:n,k:t};const i={...e,bodyIndex:o+1};return{type:"Eval",node:s[o],env:a,k:[i,...t]}}(e,n,r);case"BindingDefault":return function(e,n,r){const{target:o,record:a,env:s,sourceCodeInfo:i}=e,u=dn(o,n,e=>oo(e,s));if(u instanceof Promise)throw new t("Async binding default evaluation not supported in trampoline yet",i);return Object.assign(a,u),{type:"Value",value:n,k:r}}(e,n,r);case"NanCheck":return function(e,n,r){if("number"==typeof n&&Number.isNaN(n))throw new t("Number is NaN",e.sourceCodeInfo);return{type:"Value",value:Se(n),k:r}}(e,n,r);case"DebugStep":return function(e,n,t){if("awaitValue"===e.phase){const r={expression:e.sourceCodeInfo?.code??"",value:n,location:e.sourceCodeInfo?{line:e.sourceCodeInfo.position.line,column:e.sourceCodeInfo.position.column}:{line:0,column:0},env:Vo(e.env)},o={type:"DebugStep",phase:"awaitPerform",sourceCodeInfo:e.sourceCodeInfo,env:e.env};return{type:"Perform",effect:Rr("dvala.debug.step"),args:[r],k:[o,...t]}}return{type:"Value",value:n,k:t}}(e,n,r);case"ImportMerge":{const t=V(n)?n:{};for(const[n,r]of Object.entries(t)){const t=e.module.functions[n];t&&I(r)&&(t.dvalaImpl=r)}const o={};for(const[n,r]of Object.entries(t))e.module.functions[n]||(o[n]=r);const a={...e.tsFunctions,...o};return e.env.registerValueModule(e.moduleName,a),{type:"Value",value:a,k:r}}default:throw new t(`Unhandled frame type: ${e.type}`,void 0)}}function bo(e,n){const{matchValue:r,cases:o,index:a,env:s,sourceCodeInfo:i}=e;for(let u=a;u<o.length;u++){const[a,c,l]=o[u],f=mn(a,r,e=>oo(e,s));if(f instanceof Promise)throw new t("Async pattern matching not supported in trampoline yet",i);if(null===f)continue;if(l){const t={};for(const[e,n]of Object.entries(f))t[e]={value:n};return{type:"Eval",node:l,env:s.create(t),k:[{...e,phase:"guard",index:u,bindings:f},...n]}}const d={};for(const[e,n]of Object.entries(f))d[e]={value:n};return{type:"Eval",node:c,env:s.create(d),k:n}}return{type:"Value",value:null,k:n}}function xo(e,n){const{nodes:t,env:r}=e;let{index:o}=e;for(;o<t.length;){const e=t[o];if(!Fn(e)||null!==r.lookUp(e))break;o++}if(o>=t.length)return{type:"Value",value:null,k:n};if(o===t.length-1)return{type:"Eval",node:t[o],env:r,k:n};const a={...e,index:o+1};return{type:"Eval",node:t[o],env:r,k:[a,...n]}}function wo(e,n){return{type:"Value",value:e.returnResult?e.result:null,k:n}}function ko(e,n){const{bindingNodes:t,env:r,sourceCodeInfo:o,context:a}=e,s=[...e.levelStates],i=e.bindingLevel,u=s[i],c=u.index+1;if(c>=u.collection.length)return 0===i?wo(e,n):ko({...e,bindingLevel:i-1},n);s[i]={...u,index:c};const l=t[i];return on(dn(l[0][1][0],C(u.collection[c],o),e=>oo(e,r)),t=>{Object.entries(t).forEach(([e,n])=>{a[e]={value:n}});const r=l[1];return r.length>0?Eo({...e,levelStates:s,bindingLevel:i},s,r,0,n):So({...e,levelStates:s,bindingLevel:i},s,n)})}function Eo(e,n,t,r,o){const{env:a,context:s}=e;let i;for(let e=r;e<t.length;e++){const n=e;i=on(i,()=>{const e=t[n],[r,o]=e[1];return on(oo(o,a),e=>on(dn(r,e,e=>oo(e,a)),e=>{Object.entries(e).forEach(([e,n])=>{s[e]={value:n}})}))})}return on(i,()=>So({...e,levelStates:n},n,o))}function So(e,n,t){const{bindingNodes:r,env:o}=e,a=r[e.bindingLevel],s=a[2],i=a[3];if(s){return{type:"Eval",node:s,env:o,k:[{...e,levelStates:n,phase:"evalWhen"},...t]}}if(i){return{type:"Eval",node:i,env:o,k:[{...e,levelStates:n,phase:"evalWhile"},...t]}}return Io({...e,levelStates:n},t)}function Io(e,n){const{bindingNodes:t,body:r,env:o}=e,a=e.bindingLevel+1;if(a<t.length){return{type:"Eval",node:t[a][0][1][1],env:o,k:[{...e,phase:"evalCollection",bindingLevel:a},...n]}}const s={...e,phase:"evalBody"};return{type:"Eval",node:r,env:o.create(e.context),k:[s,...n]}}function No(e,n,t,r,o){const a=Rr("dvala.error"),s=[e.shortMessage];for(let t=0;t<n.length;t++){const r=n[t];if("TryWith"===r.type)for(const o of r.handlers)if(Po(o,a,r.env,e.sourceCodeInfo))return $o(o,r,s,n,t,e.sourceCodeInfo)}const i=Cr("dvala.error",t);return i.length>0?Co("dvala.error",i,s,n,r,e.sourceCodeInfo,o):null}function Ao(e,n,r){for(let o=0;o<n.length;o++){const a=n[o];if("LoopIterate"===a.type){const{bindingNodes:s,bindingContext:i,body:u,env:c}=a,l=n.slice(o+1);if(e.length!==s.length)throw new t(`recur expected ${s.length} parameters, got ${e.length}`,r);const f=cn(s,(n,t)=>on(dn(n[1][0],se(e[t]),e=>oo(e,c)),e=>{Object.entries(e).forEach(([e,n])=>{i[e]={value:n}})}));return on(f,()=>{const e=c.getContextsRaw()[0];if(e!==i)for(const[n,t]of Object.entries(i))e[n]=t;const n={type:"LoopIterate",bindingNodes:s,bindingContext:i,body:u,env:c,sourceCodeInfo:a.sourceCodeInfo};return{type:"Eval",node:u,env:c,k:[n,...l]}})}if("FnBody"===a.type){const{fn:t,outerEnv:r}=a,s=n.slice(o+1);return vo(t,e,r,a.sourceCodeInfo,s)}}throw new t("recur called outside of loop or function body",r)}function Po(e,n,r,o){if(_(e.effectRef))return e.effectRef.name===n.name;if(k(e.effectRef)){const a=ao(e.effectRef,[n],r,o);if(a instanceof Promise)throw new t("Effect handler predicates must be synchronous",o);return!!a}return!1}function $o(e,n,t,r,o,a){const s=[{type:"EffectResume",resumeK:r,sourceCodeInfo:a},...r.slice(o+1)];return mo(q(oo(e.handlerNode,n.env),n.sourceCodeInfo),[t],[],n.env,a,s)}function Co(e,n,o,a,s,i,u){const c=s??(new AbortController).signal,l=Array.from(o);function f(e,n){switch(e.kind){case"step":return e.step;case"asyncResume":return e.promise.then(e=>({type:"Value",value:e,k:a}),e=>({type:"Error",error:e instanceof t?e:new t(e instanceof Error?e:`${e}`,i),k:a}));case"throw":throw e.error;case"next":return d(n)}}function d(s){if(s>=n.length){if("dvala.error"===e){const e="string"==typeof l[0]?l[0]:String(l[0]??"Unknown error");throw new r(e,i)}if("dvala.checkpoint"===e)return{type:"Value",value:null,k:a};throw new t(`Unhandled effect: '${e}'`,i)}const[d,p]=n[s];if("*"===d){const n=ro(e);if(n)return n(o,a,i)}let h,y=!1;function m(e){if(y)throw new t(`Effect handler called ${e}() after already calling another operation`,i);y=!0}const v=p({effectName:e,args:l,signal:c,resume:e=>{m("resume"),h=e instanceof Promise?{kind:"asyncResume",promise:e}:{kind:"step",step:{type:"Value",value:e,k:a}}},fail:n=>{m("fail");h={kind:"step",step:{type:"Error",error:new t(n??`Effect handler failed for '${e}'`,i),k:a}}},suspend:n=>{m("suspend"),h={kind:"throw",error:new jr(a,u?u.snapshots:[],u?u.nextSnapshotIndex:0,n,e,l)}},next:()=>{m("next"),h={kind:"next"}},get snapshots(){return u?[...u.snapshots]:[]},checkpoint:e=>{if(!u)throw new t("checkpoint is not available outside effect-enabled execution",i);const n={continuation:Jr(a),timestamp:Date.now(),index:u.nextSnapshotIndex++,runId:u.runId,...void 0!==e?{meta:e}:{}};return u.snapshots.push(n),void 0!==u.maxSnapshots&&u.snapshots.length>u.maxSnapshots&&u.snapshots.shift(),n},resumeFrom:(e,n)=>{if(y)throw new t("Effect handler called resumeFrom() after already calling another operation",i);if(!u)throw new t("resumeFrom is not available outside effect-enabled execution",i);const r=u.snapshots.find(n=>n.index===e.index&&n.runId===e.runId);if(!r)throw new t(`Invalid snapshot: no snapshot with index ${e.index} found in current run`,i);y=!0,h={kind:"throw",error:new Mr(r.continuation,n,r.index)}}});if(!(v instanceof Promise)){if(!h)throw new t(`Effect handler for '${e}' did not call resume(), fail(), suspend(), or next()`,i);return f(h,s+1)}return h?(v.catch(()=>{}),f(h,s+1)):v.then(()=>{if(!h)throw new t(`Effect handler for '${e}' did not call resume(), fail(), suspend(), or next()`,i);return f(h,s+1)},e=>{if(h)return f(h,s+1);if(Or(e)||Vr(e))throw e;return{type:"Error",error:e instanceof t?e:new t(e instanceof Error?e:`${e}`,i),k:a}})}return c.aborted&&Oo(a,void 0,e,l),d(0)}function jo(e,n){const t=new AbortController;return e.aborted||n.aborted?(t.abort(),t.signal):(e.addEventListener("abort",()=>t.abort(),{once:!0}),n.addEventListener("abort",()=>t.abort(),{once:!0}),t.signal)}function Oo(e,n,t,r){throw new jr(e,[],0,n,t,r)}async function Mo(e,n,t,r){return Fo({type:"Eval",node:e,env:n,k:[]},t,r)}function Vo(e){const n={},t=e.getHostValues();if(t)for(const[e,r]of Object.entries(t))n[e]=r;const r=e.getContextsRaw();for(let e=r.length-1;e>=0;e--)for(const[t,o]of Object.entries(r[e]))n[t]=o.value;return n}function Uo(e,n){return e instanceof Promise?e.then(e=>({type:"Value",value:e,k:n}),e=>({type:"Error",error:e instanceof t?e:new t(`${e}`,void 0),k:n})):{type:"Value",value:e,k:n}}function Ro(e,n,o,a){try{switch(e.type){case"Value":{if(0===e.k.length)return e;const[n,...t]=e.k;return go(n,e.value,t)}case"Eval":return ho(e.node,e.env,e.k);case"Apply":return go(e.frame,e.value,e.k);case"Perform":return function(e,n,o,a,s,i,u){if("dvala.checkpoint"===e.name&&u){const e=n[0],t={continuation:Jr(o),timestamp:Date.now(),index:u.nextSnapshotIndex++,runId:u.runId,...void 0!==e?{meta:e}:{}};u.snapshots.push(t),void 0!==u.maxSnapshots&&u.snapshots.length>u.maxSnapshots&&u.snapshots.shift()}for(let t=0;t<o.length;t++){const r=o[t];if("TryWith"===r.type)for(const s of r.handlers)if(Po(s,e,r.env,a))return $o(s,r,n,o,t,a)}const c=Cr(e.name,s);if(c.length>0)return Co(e.name,c,n,o,i,a,u);const l=ro(e.name);if(l)return l(n,o,a);if("dvala.error"===e.name){const e="string"==typeof n[0]?n[0]:String(n[0]??"Unknown error");throw new r(e,a)}throw new t(`Unhandled effect: '${e.name}'`,a)}(e.effect,e.args,e.k,e.sourceCodeInfo,n,o,a);case"Parallel":return async function(e,n,r,o,a){const s=new AbortController,i=a?jo(a,s.signal):s.signal,u=e.map(async(e,t)=>{const r=await Mo(e,n,o,i);return"suspended"===r.type&&s.abort(),{index:t,result:r}}),c=await Promise.allSettled(u),l=[],f=[],d=[];for(const e of c)if("rejected"===e.status)d.push(new t(`${e.reason}`,void 0));else{const{index:n,result:t}=e.value;switch(t.type){case"completed":l.push({index:n,value:t.value});break;case"suspended":f.push({index:n,snapshot:t.snapshot});break;case"error":d.push(t.error)}}if(d.length>0)throw d[0];if(f.length>0){const n=[{type:"ParallelResume",branchCount:e.length,completedBranches:l,suspendedBranches:f.slice(1)},...r],t=f[0];return Oo(n,t.snapshot.meta,t.snapshot.effectName,t.snapshot.effectArgs)}const p=Array.from({length:e.length});for(const{index:e,value:n}of l)p[e]=n;return{type:"Value",value:p,k:r}}(e.branches,e.env,e.k,n,o);case"Race":return async function(e,n,r,o,a){const s=a??(new AbortController).signal,i=e.map(()=>new AbortController),u=()=>{for(const e of i)e.abort(s.reason)};s.addEventListener("abort",u,{once:!0});try{let a=-1,s=null;const u=e.map(async(e,t)=>{const r=i[t].signal,u=await Mo(e,n,o,r);if("completed"===u.type&&a<0){a=t,s=u.value;for(let e=0;e<i.length;e++)e!==t&&i[e].abort("race: branch lost")}return u}),c=await Promise.allSettled(u);if(a>=0)return{type:"Value",value:s,k:r};const l=[],f=[];for(let e=0;e<c.length;e++){const n=c[e];if("rejected"===n.status)f.push(new t(`${n.reason}`,void 0));else{const e=n.value;switch(e.type){case"suspended":l.push(e.snapshot.meta??null);break;case"error":f.push(e.error)}}}l.length>0&&Oo(r,{type:"race",branches:l});const d=f.map(e=>e.message).join("; ");throw new t(`race: all branches failed: ${d}`,void 0)}finally{s.removeEventListener("abort",u)}}(e.branches,e.env,e.k,n,o);case"ParallelResume":return function(e){const{value:n,branchCount:t,completedBranches:r,suspendedBranches:o,k:a}=e,s=new Set(r.map(e=>e.index)),i=new Set(o.map(e=>e.index));let u=-1;for(let e=0;e<t;e++)if(!s.has(e)&&!i.has(e)){u=e;break}const c=[...r,{index:u,value:n}];if(o.length>0){const e=o[0];return Oo([{type:"ParallelResume",branchCount:t,completedBranches:c,suspendedBranches:o.slice(1)},...a],e.snapshot.meta,e.snapshot.effectName,e.snapshot.effectArgs)}const l=Array.from({length:t});for(const{index:e,value:n}of c)l[e]=n;return{type:"Value",value:l,k:a}}(e);case"Error":{const t=No(e.error,e.k,n,o,a);if(null!==t)return t;throw e.error}}}catch(r){if(Or(r))throw r;if(r instanceof t){const t=No(r,"Value"===e.type?e.k.slice(1):e.k,n,o,a);if(null!==t)return t}throw r}}function Bo(e,n){let r=e;for(;;){if(r instanceof Promise)throw new t("Unexpected async operation in synchronous context. Use async.run() for async operations.",void 0);if("Value"===r.type&&0===r.k.length)return r.value;r=Ro(r,n)}}async function To(e){let n=e;for(;;){if(n instanceof Promise&&(n=await n),"Value"===n.type&&0===n.k.length)return n.value;n=Ro(n)}}function Do(e,n){if(0===e.length)return{type:"Value",value:null,k:[]};if(1===e.length)return{type:"Eval",node:e[0],env:n,k:[]};const t={type:"Sequence",nodes:e,index:1,env:n};return{type:"Eval",node:e[0],env:n,k:[t]}}function _o(e,n){const r=Do(e.body,n);try{return Bo(r)}catch(r){if(r instanceof t&&r.message.includes("Unexpected async operation")){return To(Do(e.body,n))}throw r}}function Lo(e,n){const r={type:"Eval",node:e,env:n,k:[]};try{return Bo(r)}catch(r){if(r instanceof t&&r.message.includes("Unexpected async operation")){return To({type:"Eval",node:e,env:n,k:[]})}throw r}}async function qo(e,n,r,o,a,s,i){const u=new AbortController,c=i?jo(i,u.signal):u.signal,l={snapshots:a?.snapshots??[],nextSnapshotIndex:a?.nextSnapshotIndex??0,runId:Pr(),maxSnapshots:a?.maxSnapshots};if(e.length>0&&"ParallelResume"===e[0].type)return async function(e,n,r,o,a,s,i,u){const{branchCount:c,completedBranches:l,suspendedBranches:f}=e,d=new Set(l.map(e=>e.index)),p=new Set(f.map(e=>e.index));let h=-1;for(let e=0;e<c;e++)if(!d.has(e)&&!p.has(e)){h=e;break}const y=new AbortController,m=jo(s,y.signal),v=Cr(r,a),g=(async()=>{let e;try{e=await Promise.resolve(Co(r,v,o,[],m,void 0,i))}catch(e){if(Or(e)){y.abort();const n={continuation:Xr(e.k,e.snapshots,e.nextSnapshotIndex,e.meta),timestamp:Date.now(),index:i.nextSnapshotIndex++,runId:i.runId,meta:e.meta,effectName:e.effectName,effectArgs:e.effectArgs};return{index:h,result:{type:"suspended",snapshot:n}}}const n=e instanceof t?e:new t(`${e}`,void 0);return{index:h,result:{type:"error",error:n}}}const n=await Fo(e,a,m,i,void 0,u);return"suspended"===n.type&&y.abort(),{index:h,result:n}})(),b=f.map(async e=>{const{effectName:n,effectArgs:t}=e.snapshot;if(!n||!t)return{index:e.index,result:{type:"suspended",snapshot:e.snapshot}};const r=Zr(e.snapshot.continuation,u),o=await qo(r.k,n,t,a,{snapshots:r.snapshots,nextSnapshotIndex:r.nextSnapshotIndex},u,m);return"suspended"===o.type&&y.abort(),{index:e.index,result:o}}),x=await Promise.allSettled([g,...b]),w=[...l],k=[],E=[];for(const e of x)if("rejected"===e.status)E.push(new t(`${e.reason}`,void 0));else{const{index:n,result:t}=e.value;"completed"===t.type?w.push({index:n,value:t.value}):"suspended"===t.type?k.push({index:n,snapshot:t.snapshot}):E.push(t.error)}if(E.length>0)return{type:"error",error:E[0]};if(k.length>0){const e=k[0];return{type:"suspended",snapshot:{continuation:Xr([{type:"ParallelResume",branchCount:c,completedBranches:w,suspendedBranches:k.slice(1)},...n],i.snapshots,i.nextSnapshotIndex,e.snapshot.meta),timestamp:Date.now(),index:i.nextSnapshotIndex++,runId:i.runId,meta:e.snapshot.meta,effectName:e.snapshot.effectName,effectArgs:e.snapshot.effectArgs}}}const S=Array.from({length:c});for(const{index:e,value:n}of w)S[e]=n;return Fo({type:"Value",value:S,k:n},a,s,i,void 0,u)}(e[0],e.slice(1),n,r,o,c,l,s);const f=Cr(n,o);let d;try{d=await Promise.resolve(Co(n,f,r,e,c,void 0,l))}catch(e){if(Or(e)){return{type:"suspended",snapshot:{continuation:Xr(e.k,e.snapshots,e.nextSnapshotIndex,e.meta),timestamp:Date.now(),index:l.nextSnapshotIndex++,runId:l.runId,meta:e.meta,effectName:e.effectName,effectArgs:e.effectArgs}}}return e instanceof t?{type:"error",error:e}:{type:"error",error:new t(`${e}`,void 0)}}return Fo(d,o,c,l,l.maxSnapshots,s)}async function Fo(e,n,r,o,a,s){const u=null!=n&&"dvala.debug.step"in n,c={snapshots:o?o.snapshots:[],nextSnapshotIndex:o?o.nextSnapshotIndex:0,runId:Pr(),...void 0!==a?{maxSnapshots:a}:{}};let l=e;for(;;)try{for(;;){if(l instanceof Promise&&(l=await l),"Value"===l.type&&0===l.k.length)return{type:"completed",value:l.value};if(u&&"Eval"===l.type&&l.node[2]){const e=l.node[0];if(e===i.NormalExpression||e===i.SpecialExpression){const e={type:"DebugStep",phase:"awaitValue",sourceCodeInfo:l.node[2],env:l.env};l={...l,k:[e,...l.k]}}}l=Ro(l,n,r,c)}}catch(e){if(Vr(e)){const{k:n}=Zr(e.continuation,s),t=c.snapshots.findIndex(n=>n.index>e.trimToIndex);-1!==t&&c.snapshots.splice(t),l={type:"Value",value:e.value,k:n};continue}if(Or(e)){return{type:"suspended",snapshot:{continuation:Xr(e.k,e.snapshots,e.nextSnapshotIndex,e.meta),timestamp:Date.now(),index:c.nextSnapshotIndex++,runId:c.runId,meta:e.meta,effectName:e.effectName,effectArgs:e.effectArgs}}}return e instanceof t?{type:"error",error:e}:{type:"error",error:new t(`${e}`,void 0)}}}async function Wo(e,n,r){try{const t=r?.modules?new Map(r.modules.map(e=>[e.name,e])):void 0,o=Zr(e.continuation,{values:r?.bindings,modules:t}),a={values:r?.bindings,modules:t};return await async function(e,n,t,r,o){return Fo({type:"Value",value:n,k:e},t,(new AbortController).signal,r,r?.maxSnapshots,o)}(o.k,n,r?.handlers,{snapshots:o.snapshots,nextSnapshotIndex:o.nextSnapshotIndex,maxSnapshots:r?.maxSnapshots},a)}catch(e){return e instanceof t?{type:"error",error:e}:{type:"error",error:new t(`${e}`,void 0)}}}async function zo(e,n){if(!e.effectName||!e.effectArgs)return{type:"error",error:new t("Cannot retrigger: snapshot has no captured effect (suspended outside of an effect handler)",void 0)};try{const t=n?.modules?new Map(n.modules.map(e=>[e.name,e])):void 0,r={values:n?.bindings,modules:t},o=Zr(e.continuation,r);return await qo(o.k,e.effectName,e.effectArgs,n?.handlers,{snapshots:o.snapshots,nextSnapshotIndex:o.nextSnapshotIndex,maxSnapshots:n?.maxSnapshots},r)}catch(e){return e instanceof t?{type:"error",error:e}:{type:"error",error:new t(`${e}`,void 0)}}}new Set(Object.keys(to));const Yo=new Set([..._n,...Ln,...Object.keys(Qt)]);class Go{originalProgram;originalPosition;prefixProgram="";suffixProgram="";searchString="";suggestions=[];suggestionIndex=null;constructor(e,n,t={}){this.originalProgram=e,this.originalPosition=n;const r=Ir(this.originalProgram.slice(0,this.originalPosition),!1,void 0).tokens.at(-1);r&&"Error"!==r[0]&&(this.searchString=r[1],this.prefixProgram=this.originalProgram.slice(0,this.originalPosition-this.searchString.length),this.suffixProgram=this.originalProgram.slice(this.prefixProgram.length+this.searchString.length),this.originalProgram.slice(this.prefixProgram.length+this.searchString.length),this.suggestions=this.generateSuggestions(t))}getNextSuggestion(){return this.getAutoCompleteSuggestionResult(this.getNextSuggestionSymbol())}getPreviousSuggestion(){return this.getAutoCompleteSuggestionResult(this.getPreviousSuggestionSymbol())}getAutoCompleteSuggestionResult(e){return null===e?null:{program:this.prefixProgram+e+this.suffixProgram,position:this.prefixProgram.length+e.length}}getNextSuggestionSymbol(){return 0===this.suggestions.length?null:(null===this.suggestionIndex?this.suggestionIndex=0:(this.suggestionIndex+=1,this.suggestionIndex>=this.suggestions.length&&(this.suggestionIndex=0)),this.suggestions[this.suggestionIndex])}getPreviousSuggestionSymbol(){return 0===this.suggestions.length?null:(null===this.suggestionIndex?this.suggestionIndex=this.suggestions.length-1:(this.suggestionIndex-=1,this.suggestionIndex<0&&(this.suggestionIndex=this.suggestions.length-1)),this.suggestions[this.suggestionIndex])}getSuggestions(){return[...this.suggestions]}getSearchString(){return this.searchString}generateSuggestions(e){const n=new Set(["0_defn","0_lambda"]),t=this.generateWithPredicate(e,e=>!n.has(e)&&e.startsWith(this.searchString));t.forEach(e=>n.add(e));const r=this.generateWithPredicate(e,e=>!n.has(e)&&e.toLowerCase().startsWith(this.searchString.toLowerCase()));r.forEach(e=>n.add(e));const o=this.generateWithPredicate(e,e=>!n.has(e)&&e.includes(this.searchString));o.forEach(e=>n.add(e));const a=this.generateWithPredicate(e,e=>!n.has(e)&&e.includes(this.searchString.toLowerCase()));return a.forEach(e=>n.add(e)),[...t,...r,...o,...a]}generateWithPredicate(e,n){const t=new Set;return Yo.forEach(e=>{n(e)&&t.add(e)}),Object.keys(e.bindings??{}).filter(n).forEach(e=>t.add(e)),[...t].sort((e,n)=>e.localeCompare(n))}}const Ko={collection:'{\n map: (first-coll, ...args) -> do\n let fn = last(args);\n let other-colls = slice(args, 0, count(args) - 1);\n let all-colls = [first-coll, ...other-colls];\n\n cond\n case object?(first-coll) then do\n let expected-keys = keys(first-coll) |> sort;\n doseq (obj in other-colls) -> do\n if not(object?(obj)) then\n perform(effect(dvala.error), "Expected object")\n end;\n let obj-keys = keys(obj) |> sort;\n if not(obj-keys == expected-keys) then\n perform(effect(dvala.error), ++(\n "All objects must have the same keys. Expected: ",\n join(expected-keys, ", "),\n ". Found: ",\n join(obj-keys, ", ")\n ))\n end\n end;\n reduce(keys(first-coll), (acc, k) -> do\n let a = for (coll in all-colls) -> coll(k);\n assoc(acc, k, apply(fn, a))\n end, {})\n end\n\n case string?(first-coll) then do\n doseq (s in other-colls) -> do\n if not(string?(s)) then\n perform(effect(dvala.error), "Expected string")\n end\n end;\n let len = reduce(other-colls, (m, s) -> min(m, count(s)), count(first-coll));\n let mapped = for (i in range(len)) -> do\n let a = for (coll in all-colls) -> nth(coll, i);\n apply(fn, a)\n end;\n reduce(mapped, (acc, ch) -> do\n if not(string?(ch)) then\n perform(effect(dvala.error), "Expected string")\n end;\n ++(acc, ch)\n end, "")\n end\n\n case true then do\n doseq (x in other-colls) -> do\n if not(array?(x)) then\n perform(effect(dvala.error), "Expected array")\n end\n end;\n let len = reduce(other-colls, (m, x) -> min(m, count(x)), count(first-coll));\n for (i in range(len)) -> do\n let a = for (coll in all-colls) -> nth(coll, i);\n apply(fn, a)\n end\n end\n end\n end,\n\n filter: (coll, fn) -> do\n cond\n case array?(coll) then\n reduce(coll, (acc, elem) -> if fn(elem) then [...acc, elem] else acc end, [])\n\n case string?(coll) then\n reduce(coll, (acc, ch) -> if fn(ch) then ++(acc, ch) else acc end, "")\n\n case object?(coll) then\n reduce(keys(coll), (acc, k) -> do\n if fn(coll(k)) then\n assoc(acc, k, coll(k))\n else\n acc\n end\n end, {})\n\n case true then\n perform(effect(dvala.error), "Expected collection")\n end\n end,\n\n reduce: (coll, fn, initial) -> do\n cond\n case string?(coll) then\n loop (acc = initial, i = 0) -> do\n if i >= count(coll) then\n acc\n else\n recur(fn(acc, nth(coll, i)), i + 1)\n end\n end\n\n case array?(coll) then\n loop (acc = initial, i = 0) -> do\n if i >= count(coll) then\n acc\n else\n recur(fn(acc, nth(coll, i)), i + 1)\n end\n end\n\n case object?(coll) then do\n let values = vals(coll);\n loop (acc = initial, i = 0) -> do\n if i >= count(values) then\n acc\n else\n recur(fn(acc, nth(values, i)), i + 1)\n end\n end\n end\n\n case true then\n perform(effect(dvala.error), "Expected collection")\n end\n end\n}',sequence:'{\n some: (seq, fn) -> do\n if null?(seq) then null\n else do\n loop (i = 0) -> do\n if i >= count(seq) then\n null\n else do\n let elem = nth(seq, i);\n if fn(elem) then elem\n else recur(i + 1)\n end\n end\n end\n end\n end\n end\n end,\n\n take-while: (seq, fn) -> do\n let is-str = string?(seq);\n let len = count(seq);\n let idx = loop (i = 0) -> do\n if i >= len then\n len\n else if fn(nth(seq, i)) then\n recur(i + 1)\n else\n i\n end\n end\n end;\n slice(seq, 0, idx)\n end,\n\n drop-while: (seq, fn) -> do\n let is-str = string?(seq);\n let len = count(seq);\n let idx = loop (i = 0) -> do\n if i >= len then\n len\n else if fn(nth(seq, i)) then\n recur(i + 1)\n else\n i\n end\n end\n end;\n slice(seq, idx)\n end,\n\n sort: (seq, ...args) -> do\n let cmp = if count(args) == 0 then compare else first(args) end;\n let is-str = string?(seq);\n let arr = if is-str then split(seq, "") else seq end;\n let len = count(arr);\n\n // merge two sorted arrays\n let merge-arrays = (left, right) -> do\n let left-len = count(left);\n let right-len = count(right);\n loop (result = [], li = 0, ri = 0) -> do\n if li >= left-len then\n ++(result, slice(right, ri))\n else if ri >= right-len then\n ++(result, slice(left, li))\n else do\n let l = nth(left, li);\n let r = nth(right, ri);\n if cmp(l, r) <= 0 then\n recur(push(result, l), li + 1, ri)\n else\n recur(push(result, r), li, ri + 1)\n end\n end\n end\n end\n end\n end;\n\n // recursive merge-sort\n let merge-sort = (a) -> do\n let n = count(a);\n if n <= 1 then a\n else do\n let mid = floor(n / 2);\n let left = merge-sort(slice(a, 0, mid));\n let right = merge-sort(slice(a, mid));\n merge-arrays(left, right)\n end\n end\n end;\n\n let sorted = merge-sort(arr);\n if is-str then join(sorted, "") else sorted end\n end\n}\n',array:'{\n mapcat: (arr, fn) -> do\n flatten(map(arr, fn), 1)\n end,\n\n moving-fn: (arr, window-size, fn) -> do\n if window-size > count(arr) then\n perform(effect(dvala.error), "Expected window-size <= array length")\n end;\n for (i in range(count(arr) - window-size + 1)) -> do\n fn(slice(arr, i, i + window-size))\n end\n end,\n\n running-fn: (arr, fn) -> do\n for (i in range(count(arr))) -> do\n fn(slice(arr, 0, i + 1))\n end\n end\n}\n',functional:'{\n "|>": (a, b) -> b(a),\n\n apply: (fn, ...args) -> do\n let arr = last(args);\n let leading = slice(args, 0, count(args) - 1);\n fn(...leading, ...arr)\n end\n}\n',object:'{\n merge-with: (...args) -> do\n let fn = last(args);\n let objs = slice(args, 0, count(args) - 1);\n if not(function?(fn)) then\n perform(effect(dvala.error), str("Expected function, got: ", type(fn)))\n end;\n if count(objs) == 0 then\n perform(effect(dvala.error), "Expected at least one object argument")\n end;\n reduce(rest(objs), (result, obj) -> do\n if not(object?(obj)) then\n perform(effect(dvala.error), str("Expected object, got: ", type(obj)))\n end;\n reduce(keys(obj), (res, key) -> do\n if contains?(res, key) then\n assoc(res, key, fn(get(res, key), get(obj, key)))\n else\n assoc(res, key, get(obj, key))\n end\n end, result)\n end, do\n let f = first(objs);\n if not(object?(f)) then\n perform(effect(dvala.error), str("Expected object, got: ", type(f)))\n end;\n f\n end)\n end\n}\n'};let Ho=!1;class Jo{cache={};firstEntry=void 0;lastEntry=void 0;_size=0;maxSize;constructor(e){var n;if(this.maxSize=null===e?null:(n=e,Math.max(0,Math.ceil(n))),"number"==typeof this.maxSize&&this.maxSize<1)throw new Error(`1 is the minimum maxSize, got ${m(e)}`)}getContent(){return Object.entries(this.cache).reduce((e,[n,t])=>(e[n]=t.value,e),{})}get size(){return this._size}get(e){return this.cache[e]?.value}clear(){this.cache={},this.firstEntry=void 0,this.lastEntry=void 0,this._size=0}has(e){return!!this.cache[e]}set(e,n){if(this.has(e))throw new Error(`AstCache - key already present: ${e}`);const t={value:n,nextEntry:void 0,key:e};for(this.cache[e]=t,this._size+=1,this.lastEntry&&(this.lastEntry.nextEntry=t),this.lastEntry=t,this.firstEntry||(this.firstEntry=this.lastEntry);null!==this.maxSize&&this.size>this.maxSize;)this.dropFirstEntry()}dropFirstEntry(){const e=this.firstEntry;delete this.cache[e.key],this._size-=1,this.firstEntry=e.nextEntry}}function Xo(e){return e.tokens.reduce((e,n)=>`${e}${n[1]}`,"")}function Zo(e,n=!1,t){return Ir(e,n,t)}function Qo(e){return{body:ur(cr(e,{removeWhiteSpace:!0})),hasDebugData:e.hasDebugData}}function ea(e,n){return function(e,n){return{...e,tokens:e.tokens.map(e=>at(e)?[e[0],n(e[1])]:e)}}(e,n)}function na(e,n){const t=n?.modules?new Map(n.modules.map(e=>[e.name,e])):void 0,r=_r({bindings:n?.bindings},t),o={body:ur(cr(Ir(e,!1,void 0),{removeWhiteSpace:!0})),hasDebugData:!1};return Hn(o,r,Dn,Lo)}function ta(e,n,t={}){return new Go(e,n,t)}function ra(e){if(e)for(const[n,t]of Object.entries(e))oa(t,`bindings["${n}"]`)}function oa(e,n){if(null!=e&&"boolean"!=typeof e&&"string"!=typeof e)if("number"!=typeof e){if("function"==typeof e)throw new TypeError(`${n} is not serializable (function)`);if("object"!=typeof e)throw new TypeError(`${n} is not serializable`);if(f in e||d in e||p in e)return;if(Array.isArray(e))return void e.forEach((e,t)=>oa(e,`${n}[${t}]`));if(Object.getPrototypeOf(e)!==Object.prototype)throw new TypeError(`${n} is not serializable (not a plain object)`);for(const[t,r]of Object.entries(e))oa(r,`${n}.${t}`)}else if(!Number.isFinite(e))throw new TypeError(`${n} is not serializable (${e})`)}function aa(e){!function(){if(!Ho){Ho=!0;for(const[,e]of Object.entries(Ko)){const n=_o({body:ur(cr(Ir(e,!1,void 0),{removeWhiteSpace:!0})),hasDebugData:!1},_r());if(n instanceof Promise)throw new TypeError("Core dvala sources must be synchronous");if(!V(n))continue;const t=n;for(const[e,n]of Object.entries(t)){const t=Ke[e];t&&k(n)&&"UserDefined"===n.functionType&&(t.dvalaImpl=n)}}}}();const n=e?.modules?new Map(e.modules.map(e=>[e.name,e])):void 0,r=e?.bindings,o=e?.effectHandlers,a=e?.debug??!1,s=e?.cache?new Jo(e.cache):null;function i(e,n){if(!n&&s){const n=s.get(e);if(n)return n}const t={body:ur(cr(Ir(e,a,n),{removeWhiteSpace:!0})),hasDebugData:a};return n||s?.set(e,t),t}function u(e){if(r||e)return{...r,...e}}function c(e){if(!o&&!e)return;const n={...e};if(o)for(const[e,t]of Object.entries(o))e in n||(n[e]=t);return n}function l(e,n){if(!e)return;if(n&&Object.keys(n).length>0)throw new TypeError("Cannot use pure mode with effect handlers")}return{run(e,r){ra(r?.bindings);const o=u(r?.bindings),a=c(r?.effectHandlers),s=r?.pure??!1;l(s,a);const f=_r({bindings:o},n,s);if(qn(e)){const n=f.pure;f.pure=!0;for(const[n,t]of e.fileModules){const e=i(t),r=f.create({});f.registerValueModule(n,_o(e,r))}f.pure=n;const t=_o(i(e.program),f);if(t instanceof Promise)throw new TypeError("Unexpected async result in run(). Use runAsync() for async operations.");return t}const d=i(e,r?.filePath);if(a)return function(e,n,r){const o=Do(e.body,n);try{return Bo(o,r)}catch(o){if(o instanceof t&&o.message.includes("Unexpected async operation"))return Bo(Do(e.body,n),r);throw o}}(d,f,a);const p=_o(d,f);if(p instanceof Promise)throw new TypeError("Unexpected async result in run(). Use runAsync() for async operations.");return p},async runAsync(e,r){ra(r?.bindings);const o=u(r?.bindings),a=c(r?.effectHandlers),s=r?.pure??!1;l(s,a);try{const t=_r({bindings:o},n,s);if(qn(e)){const n=t.pure;t.pure=!0;for(const[n,r]of e.fileModules){const e=i(r),o=t.create({});t.registerValueModule(n,_o(e,o))}t.pure=n}const u=i(qn(e)?e.program:e),c=await async function(e,n,t,r,o){const a=(new AbortController).signal;return Fo(Do(e.body,n),t,a,void 0,r,o)}(u,t,a,r?.maxSnapshots,{values:o,modules:n});return"completed"===c.type?{...c,definedBindings:t.getModuleScopeBindings()}:c}catch(e){if(e instanceof t)return{type:"error",error:e};if(e instanceof TypeError)throw e;return{type:"error",error:new t(`${e}`,void 0)}}},getUndefinedSymbols(e){const t=n?[...n.values()]:void 0;return na(e,{bindings:r,modules:t})},getAutoCompleter:(e,n)=>new Go(e,n,{bindings:r})}}export{E as asDvalaFunction,N as asUserDefinedFunction,S as assertDvalaFunction,A as assertUserDefinedFunction,aa as createDvala,ta as getAutoCompleter,na as getUndefinedSymbols,P as isBuiltinFunction,qn as isDvalaBundle,s as isDvalaError,k as isDvalaFunction,Pe as isGrid,$e as isMatrix,I as isUserDefinedFunction,Ie as isVector,_n as normalExpressionKeys,Qo as parseTokenStream,Wo as resume,zo as retrigger,Ln as specialExpressionKeys,Zo as tokenizeSource,ea as transformSymbols,Xo as untokenize};
2
2
  //# sourceMappingURL=index.esm.js.map