@break-point/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.

Versions

Current Tags

  • Version
    Downloads (Last 7 Days)
    • Tag
  • 0.0.2
    0
    • latest

Version History

  • Version
    Downloads (Last 7 Days)
    • Published
  • 0.0.2
    0

Package Sidebar

Install

npm i @break-point/specjs

Weekly Downloads

0

Version

0.0.2

License

MIT

Unpacked Size

62.2 kB

Total Files

23

Last publish

Collaborators

  • alfonsofilho