@alfonsofilho/specjs
    TypeScript icon, indicating that this package has built-in type declarations

    0.0.2 • Public • Published

    SpecJS

    Design by contract javascript library

    JavaScript Style Guide Build Status npm version Try match-toy on RunKit codecov

    THIS LIBRARY STILL IN EARLY DEVELOPMENT, IT'S NOT STABLE, AND USAGE IN PRODUCTION IS NOT RECOMMENDED YET.

    SpecJS is a tiny (≈0.7KB) to implement design by contract in Javascript and Typescript projects. To start learning how to use the library, take a look at the usage section. Afterward you'll find more information in the examples and reading the tests.

    Try it now.

    Installation

    From NPM

    $ npm install @alfonsofilho/specjs --save

    Or yarn:

    $ yarn add @alfonsofilho/specjs

    Then import/require the module.

    const SpecJS = require('@alfonsofilho/specjs');
    // or
    import { bindSpec } from '@alfonsofilho/specjs';

    From CDN

    Place the snippet into your html:

    <script src="https://unpkg.com/@alfonsofilho/specjs@0.0.1/dist/specjs.umd.js"></script>

    This file is a bundle in the UMD format. In the browser's environments, the module name is in available in window.SpecJS.

    See more in examples.

    Usage

    Most basic usage:

    import { Sign, conditions, isRequired, check } from '@alfonsofilho/specjs';
     
    // 1. Write the Contract
    const toUpperContract = (text: string) => ({
      pre: conditions(
        isRequired(text),
        check(() => text.length > 0)
      ),
      post: conditions(
        check((result: string) => result === text.toUpperCase())
      )
    })
     
    // 2. Write the function or class
    function toUpper(text: string): string {
      return text.toUppercase(text)
    }
     
    // 3. Bind the implementation and the contract
    const toUpperSigned = Sign(toUpper, toUpperContract)
     
    // 4. Use the signed function with the runtime
    //    guarantees provided by the contract
    toUpperSigned('test') === 'TEST' // OK
    toUpperSigner('') === 'TEST' // Precondition fails
     
     

    Built with

    Other nice JavaScript libraries:

    There are many interesting projects out there implementing design by contract. Search more in NPM.

    Learn more about design by contract

    Contributing

    • Improving or correcting the documentation.
    • Translating.
    • Finding bugs
    • Sharing this project.
    • PRs are very welcome.

    License

    This project is licensed under the MIT License - see the LICENSE file for details.

    Changelog

    See CHANGELOG file for details.

    Install

    npm i @alfonsofilho/specjs

    DownloadsWeekly Downloads

    4

    Version

    0.0.2

    License

    MIT

    Unpacked Size

    62.1 kB

    Total Files

    23

    Last publish

    Collaborators

    • alfonsofilho