53 lines
1.8 KiB
Plaintext
53 lines
1.8 KiB
Plaintext
import { GLOBAL_TSR } from "../constants.js";
|
|
import { createPlugin } from "seroval";
|
|
//#region src/ssr/serializer/transformer.ts
|
|
/**
|
|
* Create a strongly-typed serialization adapter for SSR hydration.
|
|
* Use to register custom types with the router serializer.
|
|
*/
|
|
function createSerializationAdapter(opts) {
|
|
return opts;
|
|
}
|
|
/** Create a Seroval plugin for server-side serialization only. */
|
|
/* @__NO_SIDE_EFFECTS__ */
|
|
function makeSsrSerovalPlugin(serializationAdapter, options) {
|
|
return /* @__PURE__ */ createPlugin({
|
|
tag: "$TSR/t/" + serializationAdapter.key,
|
|
test: serializationAdapter.test,
|
|
parse: { stream(value, ctx, _data) {
|
|
return { v: ctx.parse(serializationAdapter.toSerializable(value)) };
|
|
} },
|
|
serialize(node, ctx, _data) {
|
|
options.didRun = true;
|
|
return GLOBAL_TSR + ".t.get(\"" + serializationAdapter.key + "\")(" + ctx.serialize(node.v) + ")";
|
|
},
|
|
deserialize: void 0
|
|
});
|
|
}
|
|
/** Create a Seroval plugin for client/server symmetric (de)serialization. */
|
|
/* @__NO_SIDE_EFFECTS__ */
|
|
function makeSerovalPlugin(serializationAdapter) {
|
|
return /* @__PURE__ */ createPlugin({
|
|
tag: "$TSR/t/" + serializationAdapter.key,
|
|
test: serializationAdapter.test,
|
|
parse: {
|
|
sync(value, ctx, _data) {
|
|
return { v: ctx.parse(serializationAdapter.toSerializable(value)) };
|
|
},
|
|
async async(value, ctx, _data) {
|
|
return { v: await ctx.parse(serializationAdapter.toSerializable(value)) };
|
|
},
|
|
stream(value, ctx, _data) {
|
|
return { v: ctx.parse(serializationAdapter.toSerializable(value)) };
|
|
}
|
|
},
|
|
serialize: void 0,
|
|
deserialize(node, ctx, _data) {
|
|
return serializationAdapter.fromSerializable(ctx.deserialize(node.v));
|
|
}
|
|
});
|
|
}
|
|
//#endregion
|
|
export { createSerializationAdapter, makeSerovalPlugin, makeSsrSerovalPlugin };
|
|
|
|
//# sourceMappingURL=transformer.js.map |