ConstraintsOptionsExtensions.cs 1.7 KB

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