9.0.2 • Published 8 months ago

@haventech/supertype v9.0.2

Weekly downloads
-
License
-
Repository
github
Last release
8 months ago

SuperType

Description

SuperType is a type system for JavaScript that supports:

  • Classical inheritence

  • Mixins

  • Composition including collections

Installation

Include lib/index.js for use in the browser. Install on node via npm:

npm install supertype

It is automatically installed as a dependency for Amorphic

Example

Classes are defined as "templates".

ObjectTemplate = require('supertype');

Animal = ObjectTemplate.create("Animal",
{
    name: {type: String},
    isMammal: {type: Boolean, value: true},
    legs: {type: Number, value: 2}
});

Lion = Animal.extend("Lion",
{
    init: function () {
        Animal.call(this);
        this.name = "Lion";
        this.legs = 4;
    },
    canRoar: function () {return true}
});

Bear = Animal.extend("Bear",
{
    init: function () {
        Animal.call(this);
        this.name = "Bear";
    },
    canHug: function () {return true}
});

Ark = ObjectTemplate.create("Ark",
{
    animals: {type: Array, of: Animal, value: []},
    board: function (animal) {
        animal.ark = this;
        this.animals.push(animal)
    }
});
Animal.mixin(
{
    ark:    {type: Ark}
});

You create objects using new:

var ark1 = new Ark();
ark1.board(new Lion());
ark1.board(new Bear());

var ark2 = new Ark();
ark2.board(new Lion());
ark2.board(new Bear());

Because SuperType knows about the interrelationships between your objects you can serialize and de-serialize even though you have circular references:

var serialArk1 = ark1.toJSONString();
var serialArk2 = ark2.toJSONString();
ark1 = Ark.fromJSON(serialArk1);
ark2 = Ark.fromJSON(serialArk2);

License

SuperType is licensed under the MIT license

9.0.2

8 months ago

9.0.1

8 months ago

9.0.0

11 months ago

7.1.0

1 year ago

8.0.0

1 year ago

6.0.0-beta.n2

1 year ago

6.0.0-beta.n1

1 year ago

6.1.0

1 year ago

7.0.0

1 year ago

7.0.1

1 year ago

6.1.0-beta.0

1 year ago

6.0.1

2 years ago

6.0.1-beta.1

2 years ago

6.0.1-beta.0

2 years ago

6.0.0-beta.7

2 years ago

6.0.0-beta.8

2 years ago

6.0.0-beta.3

2 years ago

6.0.0-beta.4

2 years ago

6.0.0-beta.5

2 years ago

6.0.0-beta.6

2 years ago

6.0.0-beta.0

2 years ago

6.0.0-beta.1

2 years ago

6.0.0

2 years ago

6.0.0-beta.2

2 years ago

5.0.2-beta.1

2 years ago

5.0.2-beta.0

2 years ago

5.1.0-beta.1

2 years ago

5.0.1

2 years ago

5.0.0

2 years ago

5.1.0-beta.0

2 years ago

4.0.0

2 years ago

5.0.0-beta.0

2 years ago

3.5.1

2 years ago

4.0.0-beta.0

2 years ago

3.6.0-beta.0

2 years ago

3.6.0-beta.1

2 years ago

3.5.0

3 years ago

3.3.0

3 years ago

3.4.1

3 years ago

3.0.0

3 years ago

3.4.0

3 years ago

3.3.1

3 years ago