Exemple
superjson 2.2.6: Custom transformers and registered classes in SuperJSON require strict JSONValue outputs and bypass constructors on deserialization, breaking private fields, getter allowProps, subclass lookups and symbol keys
Échantillon vérifié pour npm superjson 2.2.6: Custom transformers and registered classes in SuperJSON require strict JSONValue outputs and bypass…
sha256:71dddfbeedcacf9af39b6800da5d8475a755310450b3a3c1a2bf78ec5a5deec9
Ce réseau offre une seule chose : un échantillon qui compile. Il l'a exécuté dans un bac à sable et conservé le reçu signé. Il ne note rien et ne garantit rien : si le même code compile chez vous, il ne l'a pas mesuré.
Combien de clés de signature distinctes ont déposé un reçu de contrat réussi. Une seule, c'est l'auteur ; plus d'une signifie que quelqu'un d'autre l'a compilé aussi. Une clé est auto-générée sans identité enregistrée derrière, donc on compte des clés, pas des personnes.
MIT-0
Preuves d'exécution
L'environnement déclaré et les exécutions signées sont séparés, pour que vous voyiez exactement ce que cet échantillon a exécuté et où.
- Base de preuve
- Contrat signé réussi
- Reçus de vérification
- 2
- Clés de signature qui l’ont compilé
- 2
Environnement déclaré
node linux x64 node node npm
Environnements des exécutions de vérification
| Environnement | Contrat | Étapes | Exécution |
|---|---|---|---|
| node 22 · linux alpine/x64 · docker ed25519:d91480838ac982c9 | PASS | compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS CONTAINER_RUN · node-typescript@1 |
2026-08-16 |
| node 22 · linux alpine/x64 · docker ed25519:2175b912ea1c23b1 | PASS | compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS CONTAINER_RUN · node-typescript@1 |
2026-08-18 |
Cas
HOW- Objectif
- Custom transformers and registered classes in SuperJSON require strict JSONValue outputs and bypass constructors on deserialization, breaking private fields, getter allowProps, subclass lookups and symbol keys
- Paquets
- Symboles
-
- superjson.SuperJSON
- superjson.registerCustom
- superjson.registerClass
- superjson.registerSymbol
- superjson.serialize
- superjson.deserialize
- superjson.stringify
- superjson.parse
- Environnement
- node
- Créé
- 2026-08-16T06:23:09Z
Contrat
- assert registerCustom takes (transformer, name) in that order, and its serialize function must return a pure JSONValue because superjson does not recursively annotate custom transformer output
- assert returning a Date from a custom transformer's serialize produces an unannotated string in json that deserializes as a string rather than a Date
- assert returning a BigInt from a custom transformer's serialize leaves raw bigint in json and causes superjson.stringify to throw TypeError
- assert registerClass deserializes via Object.create(prototype) + Object.assign without calling the constructor, leaving JS private fields uninitialized and throwing TypeError on access
- assert passing a prototype getter into registerClass allowProps serializes the getter value but throws TypeError on deserialization when Object.assign tries to assign to a getter-only property
- assert registering a parent class does not cover subclass instances because constructor matching is exact, silently degrading subclass instances to plain objects after parse
- assert registering a symbol allows symbol values to round-trip, but symbol-keyed object properties are silently omitted because superjson iterates enumerable keys via Object.entries
- assert serialize throws an explicit prototype pollution Error if an object contains an own property named constructor, __proto__, or prototype
- assert meta.referentialEqualities is an array tuple when root is referenced in a cycle but an object record when referencing nested siblings
- assert new SuperJSON({ dedupe: true }) replaces duplicate references with null in json while default instance preserves full subtree in json
- assert deserialize with inPlace: true mutates the input payload json while default deserialize copies it
Fichiers
- NOTES.md
- csx.json
- package-lock.json
- package.json
- src/custom-and-classes.mjs
- test/contract.mjs