Skip to content

Commit

Permalink
Validator fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
Vorlias committed Oct 12, 2022
1 parent 596bdb5 commit 6c0d9e8
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 11 deletions.
11 changes: 8 additions & 3 deletions example/server/index.server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ import { ExecutionAction } from "Class/ZirconConfigurationBuilder";
import { ZirconEnumBuilder } from "Class/ZirconEnumBuilder";
import { ZirconFunctionBuilder } from "Class/ZirconFunctionBuilder";
import { ZirconNamespaceBuilder } from "Class/ZirconNamespaceBuilder";
import { $print } from "rbxts-transform-debug";
import { $NODE_ENV } from "rbxts-transform-env";
import { ZirconOptionalValidator, ZirconString } from "Class/ZirconTypeValidator";
import { $package, $print } from "rbxts-transform-debug";

Log.SetLogger(
Logger.configure()
.WriteTo(Log.RobloxOutput())
.WriteTo(Zircon.Log.Console())
.EnrichWithProperty("Version", PKG_VERSION)
.EnrichWithProperty("Version", $package.version)
.Create(),
);

Expand Down Expand Up @@ -210,3 +210,8 @@ ZirconServer.Registry.RegisterFunction(
}),
[ZirconDefaultGroup.User],
);


const test = ZirconOptionalValidator(ZirconString);

test.Validate()
9 changes: 5 additions & 4 deletions src/Class/Validators/OptionalValidator.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
import ZrUndefined from "@rbxts/zirconium/out/Data/Undefined";
import { StatefulZirconValidator } from "../StatefulZirconValidator";
import { InferTypeFromValidator2, ZirconValidator } from "../ZirconTypeValidator";

export class OptionalValidator<T, U = T> extends StatefulZirconValidator<T | undefined, U | undefined> {
export class OptionalValidator<T, U = T> extends StatefulZirconValidator<T | ZrUndefined, U | undefined> {
public constructor(private innerValidator: ZirconValidator<T, U>) {
super(innerValidator.Type + "?");
}

public Validate(value: unknown): value is T | undefined {
return this.innerValidator.Validate(value) || value === undefined;
public Validate(value: unknown): value is T | ZrUndefined {
return this.innerValidator.Validate(value) || value === ZrUndefined;
}

public Transform(value: T): U | undefined {
return this.innerValidator.Transform?.(value);
return value !== ZrUndefined ? this.innerValidator.Transform?.(value) : undefined;
}
}
8 changes: 4 additions & 4 deletions src/Class/ZirconTypeValidator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -92,17 +92,17 @@ export const NativeEnumItem: ZirconValidator<ZrEnumItem> = {
ErrorMessage: (value) => `Expected enum item, got ${zirconTypeOf(value)}`,
};

export interface ZirconOptionalValidator<T, U = T> extends ZirconValidator<T | undefined, U | undefined> {}
export interface ZirconOptionalValidator<T, U = T> extends ZirconValidator<T | ZrUndefined, U | undefined> {}
export function ZirconOptionalValidator<I, O>(validator: ZirconValidator<I, O>) {
return {
Type: validator.Type + "?",
Validate(value: unknown, player?: Player): value is I | undefined {
return validator.Validate(value, player) || value === undefined;
Validate(value: unknown, player?: Player): value is I | ZrUndefined {
return validator.Validate(value, player) || value === ZrUndefined;
},
Transform(value: unknown, player?: Player) {
if (validator.Validate(value, player)) {
if (validator.Transform !== undefined) {
return (validator.Transform(value, player) ?? undefined) as O | undefined;
return value !== ZrUndefined ? (validator.Transform(value, player) ?? undefined) as O : undefined;
} else {
return (value as unknown) as O | undefined;
}
Expand Down

0 comments on commit 6c0d9e8

Please sign in to comment.