Files
NapCatQQ/.pnpm-store/v3/files/d8/b49eb9f7bf7a24e0a5fc642c1a1ec5f97018c0a191d1df08b42a291da031e9b63a00868ae8dab99b921a7fa97abb82bbf3c6c79e0d410ee9fd6038eebec724
T
TanTan e311ca3275
Build NapCat Artifacts / Type Check & Test (push) Waiting to run
docs: 仓库链接指向本镜像仓库
2026-11-13 09:25:58 +08:00

41 lines
1.5 KiB
Plaintext

import { TransformKind } from '../symbols/index.mjs';
// ------------------------------------------------------------------
// TypeGuard
// ------------------------------------------------------------------
import { IsTransform } from '../guard/kind.mjs';
// ------------------------------------------------------------------
// TransformBuilders
// ------------------------------------------------------------------
export class TransformDecodeBuilder {
constructor(schema) {
this.schema = schema;
}
Decode(decode) {
return new TransformEncodeBuilder(this.schema, decode);
}
}
// prettier-ignore
export class TransformEncodeBuilder {
constructor(schema, decode) {
this.schema = schema;
this.decode = decode;
}
EncodeTransform(encode, schema) {
const Encode = (value) => schema[TransformKind].Encode(encode(value));
const Decode = (value) => this.decode(schema[TransformKind].Decode(value));
const Codec = { Encode: Encode, Decode: Decode };
return { ...schema, [TransformKind]: Codec };
}
EncodeSchema(encode, schema) {
const Codec = { Decode: this.decode, Encode: encode };
return { ...schema, [TransformKind]: Codec };
}
Encode(encode) {
return (IsTransform(this.schema) ? this.EncodeTransform(encode, this.schema) : this.EncodeSchema(encode, this.schema));
}
}
/** `[Json]` Creates a Transform type */
export function Transform(schema) {
return new TransformDecodeBuilder(schema);
}