ConstraintsOptionsExtensions.cs 1.6 KB

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