import { scope, type } from "arktype";
import { number } from "arktype/internal/keywords/number.ts";
import { string } from "arktype/internal/keywords/string.ts";
export const extensionToStringScope = scope({
host: "string.ip | 'localhost'",
});
export const extensionToNumberScope = scope({
port: type("string", "=>", (data, ctx) => {
const asNumber = Number.parseInt(data);
const isInteger = Number.isInteger(asNumber);
const isBetween = 0 <= asNumber && asNumber <= 65535;
if (!isInteger || !isBetween) {
ctx.mustBe("an integer between 0 and 65535");
}
return asNumber;
}),
});
const extendedStringModule = type.module({
...string,
...extensionToStringScope.export(),
});
const extendedNumberModule = type.module({
...number,
...extensionToNumberScope.export(),
});
export const rootScope = scope({
string: extendedStringModule,
number: extendedNumberModule,
});
const CoolHost = rootScope.type("string.host");
import { scope, type } from "arktype";
import { number } from "arktype/internal/keywords/number.ts";
import { string } from "arktype/internal/keywords/string.ts";
export const extensionToStringScope = scope({
host: "string.ip | 'localhost'",
});
export const extensionToNumberScope = scope({
port: type("string", "=>", (data, ctx) => {
const asNumber = Number.parseInt(data);
const isInteger = Number.isInteger(asNumber);
const isBetween = 0 <= asNumber && asNumber <= 65535;
if (!isInteger || !isBetween) {
ctx.mustBe("an integer between 0 and 65535");
}
return asNumber;
}),
});
const extendedStringModule = type.module({
...string,
...extensionToStringScope.export(),
});
const extendedNumberModule = type.module({
...number,
...extensionToNumberScope.export(),
});
export const rootScope = scope({
string: extendedStringModule,
number: extendedNumberModule,
});
const CoolHost = rootScope.type("string.host");