JavaScript Code Contract Libraries?

后端 未结 4 823
花落未央
花落未央 2021-02-01 08:11

I am just starting up a new web application and I want to implement some form of contract\'esque style validation in my JavaScript. I did some quick googling, and came across Js

4条回答
  •  感情败类
    2021-02-01 09:06

    Given that no one has recommended any existing libraries, or that I am crazy for thinking this is a good idea I went ahead and threw together a basic library. The code isn't fancy, but it does what I want, and it is reasonably fast to run (approx 40 chained checks per ms in IE).

    I settled on a final syntax like:

    function syncTime(serverTime, now) {
      Verify.value(serverTime).always().isDate();   // Cannot be undefined or null.
      Verify.value(now).whenDefined().isDate();     // Cannot be null, but must be date when defined.
    
      //Code
    }
    
    function searchForUser(firstName, middleInit, lastName) {
      Verify.value(firstName).always().isString().withMinimumLengthOf(2);  // Cannot be undefined or null.
      Verify.value(lastName).always().isString().withMinimumLengthOf(2);   // Cannot be undefined or null.
      Verify.value(middleInit).whenNotNull().isChar().between('A', 'Z');   // Cannot be undefined, but must be single char string when not null.
    
      //Code
    }
    

    I opted for an explicit 'Must Have Value' via the .always() check, personally I found it nicer to read; but I could see some going another way.

    Given that the source is more than I want to post in this answer, please head to this CodePlex Wiki Page if you are interested in the source. I guess it turned in to more of a fluent assertion library; but it does what I need.

    Update

    I updated the source on the linked CodePlex page above. Specifically, I restructed the Verify class to make use of a 'value context' rather than always building new Verifier objects; improved IE's performance greatly (never was an issue with FireFox or Chrome)... now handles about 100 chained checks per ms in IE.

提交回复
热议问题