包详细信息

structure

talyssonoc8.3kMIT2.0.1

A simple schema/attributes library built on top of modern JavaScript

entity, model, domain

自述文件

A simple schema/attributes library built on top of modern JavaScript

npm Build Status Coverage Status Code Climate JS.ORG

Structure provides a simple interface which allows you to add attributes to your ES6 classes based on a schema, with validations and type coercion.

Use cases

You can use Structure for a lot of different cases, including:

  • Domain entities and value objects
  • Model business rules
  • Validation and coercion of request data
  • Map pure objects and JSON to your application classes
  • Add attributes to classes that you can't change the class hierarchy

What Structure is not:

  • It's not a database abstraction
  • It's not a Model of a MVC framework
  • It's not an attempt to simulate classic inheritance in JavaScript

Documentation

Example usage

For each attribute on your schema, a getter and a setter will be created into the given class. It'll also auto-assign those attributes passed to the constructor.

const { attributes } = require('structure');

const User = attributes({
  name: String,
  age: {
    type: Number,
    default: 18,
  },
  birthday: Date,
})(
  class User {
    greet() {
      return `Hello ${this.name}`;
    }
  }
);

/* The attributes "wraps" the Class, still providing access to its methods: */

const user = new User({
  name: 'John Foo',
});

user.name; // 'John Foo'
user.greet(); // 'Hello John Foo'

Contributing

LICENSE

更新日志

2.0.1 - 2020-06-15

Fix:

  • Fix deep nested dynamic types validation [#132]

2.0.0 - 2020-03-31

Refactors:

  • The whole part of schemas and attribute definitions was refactored
  • Tests are now run by Jest (and Electron for browser tests)
  • Prettier was added
  • Move to mono-repo

Enhancements

  • Implement jest-structure assertions
  • It's possible to set custom getters e setters directly in the structure class
  • Allows to disable coercion

Breaking changes:

  • Joi is updated to v16
    • Attribute path in validation errors is an array instead of a string
    • Attribute path in validation messages contains the whole path joined by '.'
    • The name used for the dynamic import should aways be the same as the name of its type or else a custom identifier must be used
  • Non-nullable attributes with value null will use default value the same way undefined does
  • Structure classes now have two methods to generically set and get the value of the attributes, .get(attributeName) and .set(attributeName, attributeValue)
  • Minimum Node version is now 10

Docs:

  • Rename the term type descriptor to attribute definition in the docs and in the code
  • Reorganize and add more specific pages to docs

2.0.0-alpha.4 - 2020-03-21

  • Publish only src folder for jest-structure

2.0.0-alpha.3 - 2020-03-20

  • Reorganize md files

2.0.0-alpha.2 - 2020-03-19

  • Invert symlinks

2.0.0-alpha.1 - 2020-03-19

  • Add symlinks to md files to packages/structure

2.0.0-alpha.0 - 2020-03-19

Refactors:

  • The whole part of schemas and attribute definitions was refactored
  • Tests are now run by Jest (and Electron for browser tests)
  • Prettier was added
  • Move to mono-repo

Enhancements

  • Implement jest-structure assertions
  • It's possible to set custom getters e setters directly in the structure class

Breaking changes:

  • Joi is updated to v16
    • Attribute path in validation errors is an array instead of a string
    • Attribute path in validation messages contains the whole path joined by '.'
    • The name used for the dynamic import should aways be the same as the name of its type or else a custom identifier must be used
  • Non-nullable attributes with value null will use default value the same way undefined does
  • Structure classes now have two methods to generically set and get the value of the attributes, .get(attributeName) and .set(attributeName, attributeValue)
  • Minimum Node version is now 10

1.8.0 - 2019-09-16

Enhancements:

  • Add unique validation to arrays

1.7.0 - 2019-09-14

Enhancements:

  • Add method to clone structures

1.6.0 - 2019-08-27

Enhancements:

  • Allow custom error class to static mode

1.5.0 - 2019-07-08

Enhancements:

  • Add buildStrict static method

1.4.0 - 2019-03-26

Enhancements:

  • Add nullable option

1.3.2 - 2019-03-22

Fix:

  • The actual instance is passed to the dynamic defaults

1.3.0 - 2018-03-23

Enhancements:

  • When using default function to initialize attributes you can now refer to another attribute values to compose value

1.2.0 - 2017-02-01

Features:

  • Allow circular reference on type definitions (@talyssonoc)

Enhancements:

Dependencies update:

1.1.0 - 2017-01-17

  • Added static method validate() to structures (@talyssonoc)