OOP is better with stamps: Composable object factories.
https://github.com/stampit-org/stampit/compare/v4.3.1...v4.3.2
This whole release is @PopGoesTheWza work on fixing and improving the d.ts files. See "types": "./types/index.d.ts",
line in the package.json
and the Pull Requests #348 #350
JavaScript getters and setters are now no different to string or Symbol properties. This means that you can have getters in methods, properties, static properties, configuration, etc.
Example:
const HasFullName = compose({
properties: {
firstName: "",
lastName: ""
},
methods: {
get fullName() {
return this.firstName + " " + this.lastName;
},
set fullName(name) {
var words = name.toString().split(" ");
this.firstName = words[0] || "";
this.lastName = words[1] || "";
}
}
});
const developer = HasFullName();
developer.fullName = "Vasyl Boroviak";
console.log(developer.firstName); // "Vasyl"
console.log(developer.lastName); // "Boroviak"
console.log(developer.fullName); // "Vasyl Boroviak"
Now you can pass "name" property to stampit. It will automatically give your stamp (aka factory) the name. E.g.
const StripeService = stampit({
name: "StripeService",
init(_, {stamp}) {
console.log("Creating an object from the stamp named", stamp.name);
}
});
const SomeStamp = StripeService;
console.log(SomeStamp.name); // "StripeService"
See this blog post.
The stampit.version
is now a string which represents its NPM version. E.g. "4.1.1"
.
To migrate to stampit v4 most likely you won't need to do any changes to your codebase.
Please note that NPM registry do not have stampit v4.0.0, instead use v4.0.2. Sorry about that.
BRAKING CHANGES:
refs
. Please, use props
instead.
(Please note, if you are migrating from stampit v2 to v4 you would need to rename props
-> deepProps
, and then refs
-> props
. Sorry for the inconvenience. But it looks like the last rename in stampit's life.)stampit/*
utility functions.
Please use @stamp/is/stamp
instead of stampit/isStamp
, @stamp/is/composable
instead of stampit/isComposable
, and @stamp/compose
instead of stampit/compose
.Stamp.compose.composers
metadata instead of Stamp.compose.deepConfiguration.composers
.
Should you care? Probably not. Good thing is - this makes stampit fully compatible with @stamp/*
modules ecosystem.Other notable changes:
@stamp/*
modules ecosystem now..min.js
bundle is now twice smaller (2.7KB), the gzipped size is 40% smaller - 1.3KB.The assign
implementation didn't work sometimes.
Community asked. We replied. Support all ES5-compatible environments!
Basically, we added an internal polyfil to not rely on global Object.assign
anymore. This added +100 bytes to the stampit.min.js bundle (or +40 gzipped).
The Array.prototype.includes()
was not polifilled/traspiled. But stampit was using it. Thus, failing to work in some cases under node v4 and IE environments.
The new Composers feature fixes.
stamp.compose()
syntax the stamp
was never passed to composers. Fixed too.