ConstraintsOptionsExtensions.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using System.Threading;
  2. using Jint.Constraints;
  3. namespace Jint
  4. {
  5. public static class ConstraintsOptionsExtensions
  6. {
  7. /// <summary>
  8. /// Limits the allowed statement count that can be run as part of the program.
  9. /// </summary>
  10. public static Options MaxStatements(this Options options, int maxStatements = 0)
  11. {
  12. options.WithoutConstraint(x => x is MaxStatements);
  13. if (maxStatements > 0 && maxStatements < int.MaxValue)
  14. {
  15. options.Constraint(new MaxStatements(maxStatements));
  16. }
  17. return options;
  18. }
  19. public static Options LimitMemory(this Options options, long memoryLimit)
  20. {
  21. options.WithoutConstraint(x => x is MemoryLimit);
  22. if (memoryLimit > 0 && memoryLimit < int.MaxValue)
  23. {
  24. options.Constraint(new MemoryLimit(memoryLimit));
  25. }
  26. return options;
  27. }
  28. public static Options TimeoutInterval(this Options options, TimeSpan timeoutInterval)
  29. {
  30. options.WithoutConstraint(x => x is TimeConstraint);
  31. if (timeoutInterval > TimeSpan.Zero && timeoutInterval < TimeSpan.MaxValue)
  32. {
  33. options.Constraint(new TimeConstraint2(timeoutInterval));
  34. }
  35. return options;
  36. }
  37. public static Options CancellationToken(this Options options, CancellationToken cancellationToken)
  38. {
  39. options.WithoutConstraint(x => x is CancellationConstraint);
  40. if (cancellationToken != default)
  41. {
  42. options.Constraint(new CancellationConstraint(cancellationToken));
  43. }
  44. return options;
  45. }
  46. }
  47. }