Design by contract Javascript and Typescript library
Design by contract javascript library
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.
$ 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';
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.
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
There are many interesting projects out there implementing design by contract. Search more in NPM.
This project is licensed under the MIT License - see the LICENSE file for details.
See CHANGELOG file for details.