Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork9
Releases: lxsmnsyc/seroval
v1.3.0
Compare
- Move
AbortSignal
toseroval-plugins/web
- This was an implementation mistake in 1.2.0,
AbortSignal
is a web standard.
- This was an implementation mistake in 1.2.0,
- expose
onParse
,pushPendingState
,popPendingState
andparseWithError
in Plugin API. - Rework serialized Promise format
- Instead of assigning resolver methods to a Promise, seroval will now keep track of an object that contains those methods and instead will reference that object when resolving in a streaming format.
status
andvalue
is now replaced withs
(0, 1, 2 as pending, success, failure) andv
respectively.
- Fix support for invalid Dates.
- Turns out,
new Date(NaN)
is a thing.
- Turns out,
Assets2
Uh oh!
There was an error while loading.Please reload this page.
v1.2.0
Compare
- Add
AbortSignal
to serializable values
Assets2
Uh oh!
There was an error while loading.Please reload this page.
v1.1.0
Compare
This feature adds a very basicOpaqueReference
class. The purpose of this class is to wrap user-specified values into "opaque references": references that are hidden from the serializer. AnOpaqueReference
contains two values: the original value it is trying to hide, and an optional replacement value, which is what the serializer "sees".
A replacement value can only bea value that seroval can serialize. By default, a replacement value isundefined
.
Example:
import{serialize,deserialize,OpaqueReference}from'seroval';constexample={transparent:"This is a transparent value.",opaque:newOpaqueReference('This is an opaque value.'),};// You can still access the original value:console.log(example.opaque.value);// but now it's differentconstdeserialized=deserialize(serialize(example));console.log(deserialized.opaque);// undefined
Assets2
Uh oh!
There was an error while loading.Please reload this page.
v1.0.0
Compare
What's Changed
- Introduce
createStream
a403955- This function provides a universal streaming primitive that users can use.
ReadableStream
isn't a JS standard and so there was no counterpart toPromise
when it comes to streaming data, so I had to introduce a minimal streaming primitive that is both portable and serializable.
- This function provides a universal streaming primitive that users can use.
- Create
seroval-plugins
22dcc59- This package is dedicated for authoring plugins.
- Given that
createStream
has been introduced, seroval is no longer dependent from theReadableStream
API, which makes seroval no longer tied to the Web API too.
- Move the following Web API support to
seroval-plugins/web
Blob
CustomEvent
DOMException
Event
File
FormData
Headers
ReadableStream
Request
Response
URLSearchParams
URL
- Deprecate some feature flags. The following features can no longer be disabled:
Set
Map
Promise
BigInt
TypedArray
Symbol
WebAPI
- Plugin parsing is now on a higher priority, which would allow users to customize serialization for things like plain objects.
Promise
andAsyncIterable
is now supported in sync mode, but will only generate a non-resolving instance.- Add
extends
option to Plugins API. This allows the plugins to require other plugins in case the feature is required (e.g.Request
relies on bothHeaders
andReadableStream
)
Fixes
- Fix
RegExp
serialization - Fix string deserialization
- Fix plugin tag deserialization check
- Fix treeshaking for top-level variables
Full Changelog:v0.15.1...v1.0.0
Assets2
Uh oh!
There was an error while loading.Please reload this page.
0.13.0
Compare
- Add the following APIs:
toCrossJSON
toCrossJSONAsync
toCrossJSONStream
fromCrossJSON
- Add support for
ReadableStream
in async modes - Add support for
AsyncIterable
in async and streaming modes - Add
Symbol.toStringTag
andSymbol.isConcatSpreadable
in serialized properties - Deprecate
MethodShorthand
andArrayPrototypeValues
inFeature
- Rework
Iterable
serialization output - Dedupe hidden references
- Fix Plugin API-related behavior
- Remove Plugin API's
isIterable
Assets2
Uh oh!
There was an error while loading.Please reload this page.
v0.12.0
Compare
- Add the Plugin API
- This feature allows custom serialization/deserialization API in seroval. The feature required massive restructuring in the core, such as moving the whole parser, serializer and deserializer code from functions to class-based, which will allow deduping and a lot more. It's required so that the underlying methods can be exposed for the plugin methods.
- This resolves#17
- This resolves#14
- Example:
import{createPlugin,serialize,typeSerovalNode,}from'seroval';constBufferPlugin=createPlugin<Buffer,SerovalNode>({tag:'Buffer',test(value){returnvalueinstanceofBuffer;},parse:{sync(value,ctx){returnctx.parse(value.toString('base64'));},asyncasync(value,ctx){returnctx.parse(value.toString('base64'));},stream(value,ctx){returnctx.parse(value.toString('base64'));},},serialize(node,ctx){return`Buffer.from(${ctx.serialize(node)}, "base64")`;},deserialize(node,ctx){returnBuffer.from(ctx.deserialize(node)asstring,'base64');},isIterable(){returntrue;},});constserializedJS=serialize(Buffer.from('Hello World','utf-8'),{plugins:[BufferPlugin],},);
- Fixes#27
- Fixes#28
Assets2
Uh oh!
There was an error while loading.Please reload this page.
v0.11.0
Compare
- Add
Request
support - Add
Response
support - Add
Event
support - Add
CustomEvent
support - Add
DOMException
support - Fix runtime feature flag check during parsing process
- This way, the feature flag not only applies to the target runtime of the compiled output, but also for the parsing runtime.
- This change affects the following behavior:
Map
andSet
now falls back toSymbol.iterator
if disabled.ArrayBuffer
andDataView
to requireFeature.TypedArray
(due to how both requiresUint8Array
)- Indirectly, classes like
Blob
andFile
is now indirectly affected by theFeature.TypedArray
Assets2
Uh oh!
There was an error while loading.Please reload this page.
v0.10.0
Compare
- Add the cross-referencing serializer mode
- This mode allows multiple calls of serialization to share the same reference maps, a behavior that's not present in current existing modes. This introduces
crossSerialize
andcrossSerializeAsync
. JSON variants will be introduced in the future.
- This mode allows multiple calls of serialization to share the same reference maps, a behavior that's not present in current existing modes. This introduces
- Add the streaming serializer mode (#5)
- With the addition of the cross-referencing serializer, it's now possible for
seroval
to stream serialized data but with a new API. This release introduces thecrossSerializeStream
and theSerializer
class, both provides two kinds of streaming format (the former being a one-time read-only stream, while the latter allowing push data).
- With the addition of the cross-referencing serializer, it's now possible for
- Fix
Promise
serialization to consider rejected instances.- Previously
seroval
throws on rejected Promises, which shouldn't be the case and is most likely a bad design, given thatseroval
can also serialize Error instances.
- Previously
- Add
ReadableStream
support.- Currently only available in
crossSerializeStream
andSerializer
class.
- Currently only available in
- Restructure docs
- Since there are two READMEs in the repo, it's a bit of redundant work to maintain one of it (and paste it to the other) so I've decided to separate the docs. Docs are still a WIP but most of it is still usable.
Full Changelog:v0.9.0...v0.10.0
Assets2
Uh oh!
There was an error while loading.Please reload this page.
v0.9.0
Compare
- Adds support for serializing object state (e.g.
Object.freeze
,Object.seal
andObject.preventExtensions
) - Fix object assign compat
Assets2
Uh oh!
There was an error while loading.Please reload this page.
v0.8.0
Compare
- Resolves#16
Iterable
is no longer a separate kind of node, it's now a subset of eitherObject
orNullConstructor
(depending onconstructor
).Feature.Symbol
no longer disables the use ofSymbol.iterator
inIterable
. Iterable protocol is now skipped.
- Replace
Undefined
,Null
,Boolean
,NaN
,NegativeZero
,Infinity
andNegativeInfinity
with theConstant
Node. - Fix deserialization step for objects with zero properties returning a different reference.
- Drop support for
PromiseLike
(akaThenables
) due to the potential DoS - Add support for boxed primitives
- Fix parsing errors to be descriptive
- optimize serialization
What's Changed
- fix "logical OR" when mean "bitwise OR" by@samualtnorman in#20
- 0.8.0 by@lxsmnsyc in#18
New Contributors
- @samualtnorman made their first contribution in#20
Full Changelog:v0.7.0...v0.8.0
Assets2
Uh oh!
There was an error while loading.Please reload this page.