This document maintains a list of changes to the superstruct
package with each new version. Until 1.0.0
is released, breaking changes will be added as minor version bumps, and smaller changes and fixes won't be detailed.
-
object
structs are no longer optional-ish. Previously object struct types would not throw ifundefined
was passed and no properties were required. This was not only confusing, but complex to maintain. Now if you want an object struct to be optional, use thestruct.optional(...)
helper. -
Removed the
Struct.default
method. If you need to get the default value, use theStruct.validate
orStruct.assert
methods's return value instead.
- Added the
dict
,enum
,intersection
,union
andtuple
structs. These are all available asstruct.dict
,struct.enum
, etc.
-
The
validate()
method now returns[ error, result ]
. Previously it only had a single return value, which necessitated extra type checking to see if the value was an error or a result. Now you can just destructure the array to get either return value, for easier coding. -
Errors have been simplified, removing "codes". Previously there were multiple types of errors that were thrown and you could differentiate between them with the
error.code
property. But the other properties of the error already let you infer the code, so having multiple types of errors made for a larger API surface without much benefit.
- Structs are now functions again. 😄 They are built on the same underlying schema classes underneath though, since that helps the code structure. But to allow for the
struct = Struct({ ... })
syntax the structs themselves have changed to be function.
- The basic case is now
Struct(data)
. Previously you had to useStruct.assert(data)
. Although theassert
method (and others) are still there, the basic case is a bit terser and more similar to the struct-initializing APIs in other languages.
- Structs are now classes instead of functions. This is better in terms of the API being a bit less magic-y. It's also useful so that we can add other helpful methods to structs besides the
assert
method. What was previouslystruct(data)
is nowstruct.assert(data)
.
🎉