This commit is contained in:
Lukian 2023-06-20 15:28:07 +02:00
parent 68f4b60012
commit 41ae7ff4bd
1010 changed files with 38622 additions and 17071 deletions

View file

@ -2,6 +2,35 @@
All notable changes to this project will be documented in this file.
# [3.9.2](https://github.com/sapphiredev/shapeshift/compare/v3.9.1...v3.9.2) - (2023-06-04)
## 🐛 Bug Fixes
- **arrayvalidator:** Fixed runaway type instantiation with TypeScript >=5.1 (#275) ([f59d901](https://github.com/sapphiredev/shapeshift/commit/f59d90112181e6625230c28e6a4f0f065ced6344))
# [3.9.1](https://github.com/sapphiredev/shapeshift/compare/v3.9.0...v3.9.1) - (2023-06-02)
## 🐛 Bug Fixes
- **types:** Move the `types` condition to the front (#273) ([5a3e202](https://github.com/sapphiredev/shapeshift/commit/5a3e202e9ceafb3d330a568e93c060dd5aac1dde))
# [3.9.0](https://github.com/sapphiredev/shapeshift/compare/v3.8.2...v3.9.0) - (2023-05-09)
## 🐛 Bug Fixes
- Resolve minor grammar mistake (#260) ([62df609](https://github.com/sapphiredev/shapeshift/commit/62df6094845ffa118aa93ea3c5f47f81f1c5d99f))
## 🚀 Features
- Add BaseValidator.describe (#267) ([d9e1a2d](https://github.com/sapphiredev/shapeshift/commit/d9e1a2d2f3c5e6378f0025becf8497138ee6d97c))
# [3.8.2](https://github.com/sapphiredev/shapeshift/compare/v3.8.1...v3.8.2) - (2023-04-02)
## 🐛 Bug Fixes
- ***:** TypeScript 5.x compatibility (#253) ([eba2a88](https://github.com/sapphiredev/shapeshift/commit/eba2a88b91fb6631f431313753299ec7a70cf6ce))
- Remove `node:` prefix (#249) ([af766b5](https://github.com/sapphiredev/shapeshift/commit/af766b504c1013f3cd24f7bf803ac9ff7442a8d7))
# [3.8.1](https://github.com/sapphiredev/shapeshift/compare/v3.8.0...v3.8.1) - (2022-12-15)
## 🐛 Bug Fixes

View file

@ -1,6 +1,6 @@
<div align="center">
![Sapphire Logo](https://cdn.skyra.pw/gh-assets/sapphire-banner.png)
![Sapphire Logo](https://raw.githubusercontent.com/sapphiredev/assets/main/banners/SapphireCommunity.png)
# @sapphire/shapeshift
@ -920,36 +920,15 @@ below to donate through your method of choice.
[Back to top][toc]
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
Please make sure to read the [Contributing Guide][contributing] before making a pull request.
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
<tr>
<td align="center"><a href="https://github.com/kyranet"><img src="https://avatars.githubusercontent.com/u/24852502?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Antonio Román</b></sub></a><br /><a href="https://github.com/sapphiredev/shapeshift/commits?author=kyranet" title="Code">💻</a> <a href="https://github.com/sapphiredev/shapeshift/commits?author=kyranet" title="Documentation">📖</a> <a href="#ideas-kyranet" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center"><a href="https://github.com/vladfrangu"><img src="https://avatars.githubusercontent.com/u/17960496?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Vlad Frangu</b></sub></a><br /><a href="https://github.com/sapphiredev/shapeshift/commits?author=vladfrangu" title="Code">💻</a> <a href="https://github.com/sapphiredev/shapeshift/commits?author=vladfrangu" title="Documentation">📖</a> <a href="#ideas-vladfrangu" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center"><a href="https://favware.tech/"><img src="https://avatars.githubusercontent.com/u/4019718?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jeroen Claassens</b></sub></a><br /><a href="https://github.com/sapphiredev/shapeshift/commits?author=favna" title="Documentation">📖</a> <a href="#maintenance-favna" title="Maintenance">🚧</a> <a href="#infra-favna" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
<td align="center"><a href="https://github.com/apps/renovate"><img src="https://avatars.githubusercontent.com/in/2740?v=4?s=100" width="100px;" alt=""/><br /><sub><b>renovate[bot]</b></sub></a><br /><a href="#maintenance-renovate[bot]" title="Maintenance">🚧</a></td>
<td align="center"><a href="https://renovate.whitesourcesoftware.com/"><img src="https://avatars.githubusercontent.com/u/25180681?v=4?s=100" width="100px;" alt=""/><br /><sub><b>WhiteSource Renovate</b></sub></a><br /><a href="#maintenance-renovate-bot" title="Maintenance">🚧</a></td>
<td align="center"><a href="https://github.com/Khasms"><img src="https://avatars.githubusercontent.com/u/36800359?v=4?s=100" width="100px;" alt=""/><br /><sub><b>John</b></sub></a><br /><a href="https://github.com/sapphiredev/shapeshift/commits?author=Khasms" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/imranbarbhuiya"><img src="https://avatars.githubusercontent.com/u/74945038?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Parbez</b></sub></a><br /><a href="https://github.com/sapphiredev/shapeshift/commits?author=imranbarbhuiya" title="Code">💻</a> <a href="https://github.com/sapphiredev/shapeshift/commits?author=imranbarbhuiya" title="Tests">⚠️</a> <a href="https://github.com/sapphiredev/shapeshift/issues?q=author%3Aimranbarbhuiya" title="Bug reports">🐛</a> <a href="https://github.com/sapphiredev/shapeshift/commits?author=imranbarbhuiya" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/apps/allcontributors"><img src="https://avatars.githubusercontent.com/in/23186?v=4?s=100" width="100px;" alt=""/><br /><sub><b>allcontributors[bot]</b></sub></a><br /><a href="https://github.com/sapphiredev/shapeshift/commits?author=allcontributors[bot]" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/RealShadowNova"><img src="https://avatars.githubusercontent.com/u/46537907?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Hezekiah Hendry</b></sub></a><br /><a href="#tool-RealShadowNova" title="Tools">🔧</a></td>
<td align="center"><a href="https://github.com/legendhimslef"><img src="https://avatars.githubusercontent.com/u/69213593?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Voxelli</b></sub></a><br /><a href="https://github.com/sapphiredev/shapeshift/commits?author=legendhimslef" title="Documentation">📖</a></td>
</tr>
</table>
Thank you to all the people who already contributed to Sapphire!
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification.
Contributions of any kind welcome!
<a href="https://github.com/sapphiredev/shapeshift/graphs/contributors">
<img src="https://contrib.rocks/image?repo=sapphiredev/shapeshift" />
</a>
[contributing]: https://github.com/sapphiredev/.github/blob/main/.github/CONTRIBUTING.md
[`zod`]: https://github.com/colinhacks/zod
[documentation]: https://www.sapphirejs.dev/docs/Documentation/api-shapeshift/
[toc]: #table-of-contents

View file

@ -1,4 +1,4 @@
import { InspectOptionsStylized } from 'node:util';
import { InspectOptionsStylized } from 'util';
declare class Result<T, E extends Error = Error> {
readonly success: boolean;
@ -301,7 +301,7 @@ declare class ObjectValidator<T extends object, I = UndefinedToOptional<T>> exte
private handleStrictStrategy;
private handlePassthroughStrategy;
}
declare const enum ObjectValidatorStrategy {
declare enum ObjectValidatorStrategy {
Ignore = 0,
Strict = 1,
Passthrough = 2
@ -500,6 +500,7 @@ declare class ArrayValidator<T extends unknown[], I = T[number]> extends BaseVal
}
declare abstract class BaseValidator<T> {
description?: string;
protected parent?: object;
protected constraints: readonly IConstraint<T>[];
protected isValidationEnabled: boolean | (() => boolean) | null;
@ -517,6 +518,7 @@ declare abstract class BaseValidator<T> {
reshape<R extends Result<unknown>, O = InferResultType<R>>(cb: (input: T) => R): BaseValidator<O>;
default(value: Exclude<T, undefined> | (() => Exclude<T, undefined>)): DefaultValidator<Exclude<T, undefined>>;
when<Key extends WhenKey, This extends BaseValidator<any> = this>(key: Key, options: WhenOptions<This, Key>): this;
describe(description: string): this;
run(value: unknown): Result<T, BaseError>;
parse<R extends T = T>(value: unknown): R;
is<R extends T = T>(value: unknown): value is R;
@ -650,7 +652,7 @@ type ExpandSmallerTuples<T extends [...any[]]> = T extends [T[0], ...infer Tail]
type Shift<A extends Array<any>> = ((...args: A) => void) extends (...args: [A[0], ...infer R]) => void ? R : never;
type GrowExpRev<A extends Array<any>, N extends number, P extends Array<Array<any>>> = A['length'] extends N ? A : GrowExpRev<[...A, ...P[0]][N] extends undefined ? [...A, ...P[0]] : A, N, Shift<P>>;
type GrowExp<A extends Array<any>, N extends number, P extends Array<Array<any>>> = [...A, ...A][N] extends undefined ? GrowExp<[...A, ...A], N, [A, ...P]> : GrowExpRev<A, N, P>;
type Tuple<T, N extends number> = number extends N ? Array<T> : N extends 0 ? [] : N extends 1 ? [T] : GrowExp<[T], N, [[]]>;
type Tuple<T, N extends number> = N extends number ? number extends N ? Array<T> : N extends 0 ? [] : N extends 1 ? [T] : GrowExp<[T], N, [[]]> : never;
declare class LazyValidator<T extends BaseValidator<unknown>, R = Unwrap<T>> extends BaseValidator<R> {
private readonly validator;

View file

@ -20,6 +20,10 @@ var SapphireShapeshift = (function (exports) {
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
@ -1255,7 +1259,7 @@ var SapphireShapeshift = (function (exports) {
// src/constraints/ObjectConstrains.ts
var import_get = __toESM(require_get());
// node-modules-polyfills:node:util
// node-modules-polyfills:util
var e;
var t;
var n;
@ -1823,7 +1827,7 @@ var SapphireShapeshift = (function (exports) {
}, X.isBuffer = i$1;
var Se = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
function Be() {
var e3 = new Date(), t3 = [Oe(e3.getHours()), Oe(e3.getMinutes()), Oe(e3.getSeconds())].join(":");
var e3 = /* @__PURE__ */ new Date(), t3 = [Oe(e3.getHours()), Oe(e3.getMinutes()), Oe(e3.getSeconds())].join(":");
return [e3.getDate(), Se[e3.getMonth()], t3].join(" ");
}
__name(Be, "Be");
@ -2101,6 +2105,11 @@ ${givenBlock}`;
when(key, options) {
return this.addConstraint(whenConstraint(key, options, this));
}
describe(description) {
const clone = this.clone();
clone.description = description;
return clone;
}
run(value) {
let result = this.handle(value);
if (result.isErr())
@ -2121,6 +2130,11 @@ ${givenBlock}`;
is(value) {
return this.run(value).isOk();
}
/**
* Sets if the validator should also run constraints or just do basic checks.
* @param isValidationEnabled Whether this validator should be enabled or disabled. You can pass boolean or a function returning boolean which will be called just before parsing.
* Set to `null` to go off of the global configuration.
*/
setValidationEnabled(isValidationEnabled) {
const clone = this.clone();
clone.isValidationEnabled = isValidationEnabled;
@ -3020,7 +3034,7 @@ ${errors}`;
// src/validators/ObjectValidator.ts
var ObjectValidator = class extends BaseValidator {
constructor(shape, strategy = ObjectValidatorStrategy.Ignore, constraints = []) {
constructor(shape, strategy = 0 /* Ignore */, constraints = []) {
super(constraints);
this.keys = [];
this.requiredKeys = /* @__PURE__ */ new Map();
@ -3029,14 +3043,14 @@ ${errors}`;
this.shape = shape;
this.strategy = strategy;
switch (this.strategy) {
case ObjectValidatorStrategy.Ignore:
case 0 /* Ignore */:
this.handleStrategy = (value) => this.handleIgnoreStrategy(value);
break;
case ObjectValidatorStrategy.Strict: {
case 1 /* Strict */: {
this.handleStrategy = (value) => this.handleStrictStrategy(value);
break;
}
case ObjectValidatorStrategy.Passthrough:
case 2 /* Passthrough */:
this.handleStrategy = (value) => this.handlePassthroughStrategy(value);
break;
}
@ -3074,13 +3088,13 @@ ${errors}`;
}
}
get strict() {
return Reflect.construct(this.constructor, [this.shape, ObjectValidatorStrategy.Strict, this.constraints]);
return Reflect.construct(this.constructor, [this.shape, 1 /* Strict */, this.constraints]);
}
get ignore() {
return Reflect.construct(this.constructor, [this.shape, ObjectValidatorStrategy.Ignore, this.constraints]);
return Reflect.construct(this.constructor, [this.shape, 0 /* Ignore */, this.constraints]);
}
get passthrough() {
return Reflect.construct(this.constructor, [this.shape, ObjectValidatorStrategy.Passthrough, this.constraints]);
return Reflect.construct(this.constructor, [this.shape, 2 /* Passthrough */, this.constraints]);
}
get partial() {
const shape = Object.fromEntries(this.keys.map((key) => [key, this.shape[key].optional]));
@ -3224,12 +3238,6 @@ ${errors}`;
}
};
__name(ObjectValidator, "ObjectValidator");
var ObjectValidatorStrategy = /* @__PURE__ */ ((ObjectValidatorStrategy2) => {
ObjectValidatorStrategy2[ObjectValidatorStrategy2["Ignore"] = 0] = "Ignore";
ObjectValidatorStrategy2[ObjectValidatorStrategy2["Strict"] = 1] = "Strict";
ObjectValidatorStrategy2[ObjectValidatorStrategy2["Passthrough"] = 2] = "Passthrough";
return ObjectValidatorStrategy2;
})(ObjectValidatorStrategy || {});
// src/validators/PassthroughValidator.ts
var PassthroughValidator = class extends BaseValidator {
@ -3522,7 +3530,7 @@ ${givenBlock}`;
try {
url = new URL(input);
} catch {
return Result.err(new ExpectedConstraintError("s.string.url", "Invalid URL", input, "expected to match an URL"));
return Result.err(new ExpectedConstraintError("s.string.url", "Invalid URL", input, "expected to match a URL"));
}
const validatorFnResult = validatorFn(input, url);
if (validatorFnResult === null)

File diff suppressed because one or more lines are too long

View file

@ -5,6 +5,12 @@ var util = require('util');
var fastDeepEqual = require('fast-deep-equal/es6/index.js');
var uniqWith = require('lodash/uniqWith.js');
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
var get__default = /*#__PURE__*/_interopDefault(get);
var fastDeepEqual__default = /*#__PURE__*/_interopDefault(fastDeepEqual);
var uniqWith__default = /*#__PURE__*/_interopDefault(uniqWith);
var __defProp = Object.defineProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
@ -121,7 +127,7 @@ function whenConstraint(key, options, validator) {
return Result.err(new ExpectedConstraintError("s.object(T.when)", "Validator has no parent", parent, "Validator to have a parent"));
}
const isKeyArray = Array.isArray(key);
const value = isKeyArray ? key.map((k) => get(parent, k)) : get(parent, key);
const value = isKeyArray ? key.map((k) => get__default.default(parent, k)) : get__default.default(parent, key);
const predicate = resolveBooleanIs(options, value, isKeyArray) ? options.then : options.otherwise;
if (predicate) {
return predicate(validator).run(input);
@ -183,6 +189,11 @@ var BaseValidator = class {
when(key, options) {
return this.addConstraint(whenConstraint(key, options, this));
}
describe(description) {
const clone = this.clone();
clone.description = description;
return clone;
}
run(value) {
let result = this.handle(value);
if (result.isErr())
@ -203,6 +214,11 @@ var BaseValidator = class {
is(value) {
return this.run(value).isOk();
}
/**
* Sets if the validator should also run constraints or just do basic checks.
* @param isValidationEnabled Whether this validator should be enabled or disabled. You can pass boolean or a function returning boolean which will be called just before parsing.
* Set to `null` to go off of the global configuration.
*/
setValidationEnabled(isValidationEnabled) {
const clone = this.clone();
clone.isValidationEnabled = isValidationEnabled;
@ -229,7 +245,7 @@ __name(BaseValidator, "BaseValidator");
function isUnique(input) {
if (input.length < 2)
return true;
const uniqueArray2 = uniqWith(input, fastDeepEqual);
const uniqueArray2 = uniqWith__default.default(input, fastDeepEqual__default.default);
return uniqueArray2.length === input.length;
}
__name(isUnique, "isUnique");
@ -1092,7 +1108,7 @@ __name(UnionValidator, "UnionValidator");
// src/validators/ObjectValidator.ts
var ObjectValidator = class extends BaseValidator {
constructor(shape, strategy = ObjectValidatorStrategy.Ignore, constraints = []) {
constructor(shape, strategy = 0 /* Ignore */, constraints = []) {
super(constraints);
this.keys = [];
this.requiredKeys = /* @__PURE__ */ new Map();
@ -1101,14 +1117,14 @@ var ObjectValidator = class extends BaseValidator {
this.shape = shape;
this.strategy = strategy;
switch (this.strategy) {
case ObjectValidatorStrategy.Ignore:
case 0 /* Ignore */:
this.handleStrategy = (value) => this.handleIgnoreStrategy(value);
break;
case ObjectValidatorStrategy.Strict: {
case 1 /* Strict */: {
this.handleStrategy = (value) => this.handleStrictStrategy(value);
break;
}
case ObjectValidatorStrategy.Passthrough:
case 2 /* Passthrough */:
this.handleStrategy = (value) => this.handlePassthroughStrategy(value);
break;
}
@ -1146,13 +1162,13 @@ var ObjectValidator = class extends BaseValidator {
}
}
get strict() {
return Reflect.construct(this.constructor, [this.shape, ObjectValidatorStrategy.Strict, this.constraints]);
return Reflect.construct(this.constructor, [this.shape, 1 /* Strict */, this.constraints]);
}
get ignore() {
return Reflect.construct(this.constructor, [this.shape, ObjectValidatorStrategy.Ignore, this.constraints]);
return Reflect.construct(this.constructor, [this.shape, 0 /* Ignore */, this.constraints]);
}
get passthrough() {
return Reflect.construct(this.constructor, [this.shape, ObjectValidatorStrategy.Passthrough, this.constraints]);
return Reflect.construct(this.constructor, [this.shape, 2 /* Passthrough */, this.constraints]);
}
get partial() {
const shape = Object.fromEntries(this.keys.map((key) => [key, this.shape[key].optional]));
@ -1296,12 +1312,6 @@ var ObjectValidator = class extends BaseValidator {
}
};
__name(ObjectValidator, "ObjectValidator");
var ObjectValidatorStrategy = /* @__PURE__ */ ((ObjectValidatorStrategy2) => {
ObjectValidatorStrategy2[ObjectValidatorStrategy2["Ignore"] = 0] = "Ignore";
ObjectValidatorStrategy2[ObjectValidatorStrategy2["Strict"] = 1] = "Strict";
ObjectValidatorStrategy2[ObjectValidatorStrategy2["Passthrough"] = 2] = "Passthrough";
return ObjectValidatorStrategy2;
})(ObjectValidatorStrategy || {});
// src/validators/PassthroughValidator.ts
var PassthroughValidator = class extends BaseValidator {
@ -1592,7 +1602,7 @@ function stringUrl(options) {
try {
url = new URL(input);
} catch {
return Result.err(new ExpectedConstraintError("s.string.url", "Invalid URL", input, "expected to match an URL"));
return Result.err(new ExpectedConstraintError("s.string.url", "Invalid URL", input, "expected to match a URL"));
}
const validatorFnResult = validatorFn(input, url);
if (validatorFnResult === null)

File diff suppressed because one or more lines are too long

View file

@ -1,5 +1,5 @@
import get from 'lodash/get.js';
import { inspect } from 'node:util';
import { inspect } from 'util';
import fastDeepEqual from 'fast-deep-equal/es6/index.js';
import uniqWith from 'lodash/uniqWith.js';
@ -181,6 +181,11 @@ var BaseValidator = class {
when(key, options) {
return this.addConstraint(whenConstraint(key, options, this));
}
describe(description) {
const clone = this.clone();
clone.description = description;
return clone;
}
run(value) {
let result = this.handle(value);
if (result.isErr())
@ -201,6 +206,11 @@ var BaseValidator = class {
is(value) {
return this.run(value).isOk();
}
/**
* Sets if the validator should also run constraints or just do basic checks.
* @param isValidationEnabled Whether this validator should be enabled or disabled. You can pass boolean or a function returning boolean which will be called just before parsing.
* Set to `null` to go off of the global configuration.
*/
setValidationEnabled(isValidationEnabled) {
const clone = this.clone();
clone.isValidationEnabled = isValidationEnabled;
@ -1090,7 +1100,7 @@ __name(UnionValidator, "UnionValidator");
// src/validators/ObjectValidator.ts
var ObjectValidator = class extends BaseValidator {
constructor(shape, strategy = ObjectValidatorStrategy.Ignore, constraints = []) {
constructor(shape, strategy = 0 /* Ignore */, constraints = []) {
super(constraints);
this.keys = [];
this.requiredKeys = /* @__PURE__ */ new Map();
@ -1099,14 +1109,14 @@ var ObjectValidator = class extends BaseValidator {
this.shape = shape;
this.strategy = strategy;
switch (this.strategy) {
case ObjectValidatorStrategy.Ignore:
case 0 /* Ignore */:
this.handleStrategy = (value) => this.handleIgnoreStrategy(value);
break;
case ObjectValidatorStrategy.Strict: {
case 1 /* Strict */: {
this.handleStrategy = (value) => this.handleStrictStrategy(value);
break;
}
case ObjectValidatorStrategy.Passthrough:
case 2 /* Passthrough */:
this.handleStrategy = (value) => this.handlePassthroughStrategy(value);
break;
}
@ -1144,13 +1154,13 @@ var ObjectValidator = class extends BaseValidator {
}
}
get strict() {
return Reflect.construct(this.constructor, [this.shape, ObjectValidatorStrategy.Strict, this.constraints]);
return Reflect.construct(this.constructor, [this.shape, 1 /* Strict */, this.constraints]);
}
get ignore() {
return Reflect.construct(this.constructor, [this.shape, ObjectValidatorStrategy.Ignore, this.constraints]);
return Reflect.construct(this.constructor, [this.shape, 0 /* Ignore */, this.constraints]);
}
get passthrough() {
return Reflect.construct(this.constructor, [this.shape, ObjectValidatorStrategy.Passthrough, this.constraints]);
return Reflect.construct(this.constructor, [this.shape, 2 /* Passthrough */, this.constraints]);
}
get partial() {
const shape = Object.fromEntries(this.keys.map((key) => [key, this.shape[key].optional]));
@ -1294,12 +1304,6 @@ var ObjectValidator = class extends BaseValidator {
}
};
__name(ObjectValidator, "ObjectValidator");
var ObjectValidatorStrategy = /* @__PURE__ */ ((ObjectValidatorStrategy2) => {
ObjectValidatorStrategy2[ObjectValidatorStrategy2["Ignore"] = 0] = "Ignore";
ObjectValidatorStrategy2[ObjectValidatorStrategy2["Strict"] = 1] = "Strict";
ObjectValidatorStrategy2[ObjectValidatorStrategy2["Passthrough"] = 2] = "Passthrough";
return ObjectValidatorStrategy2;
})(ObjectValidatorStrategy || {});
// src/validators/PassthroughValidator.ts
var PassthroughValidator = class extends BaseValidator {
@ -1590,7 +1594,7 @@ function stringUrl(options) {
try {
url = new URL(input);
} catch {
return Result.err(new ExpectedConstraintError("s.string.url", "Invalid URL", input, "expected to match an URL"));
return Result.err(new ExpectedConstraintError("s.string.url", "Invalid URL", input, "expected to match a URL"));
}
const validatorFnResult = validatorFn(input, url);
if (validatorFnResult === null)

File diff suppressed because one or more lines are too long

View file

@ -1,6 +1,6 @@
{
"name": "@sapphire/shapeshift",
"version": "3.8.1",
"version": "3.9.2",
"description": "Blazing fast input validation and transformation ⚡",
"author": "@sapphire",
"license": "MIT",
@ -10,9 +10,9 @@
"unpkg": "dist/index.global.js",
"types": "dist/index.d.ts",
"exports": {
"types": "./dist/index.d.ts",
"import": "./dist/index.mjs",
"require": "./dist/index.js",
"types": "./dist/index.d.ts"
"require": "./dist/index.js"
},
"sideEffects": false,
"homepage": "https://www.sapphirejs.dev",
@ -21,8 +21,6 @@
"format": "prettier --write \"{src,tests}/**/*.ts\"",
"docs": "typedoc-json-parser",
"test": "vitest run",
"test:watch": "vitest",
"update": "yarn upgrade-interactive",
"build": "tsup",
"clean": "node scripts/clean.mjs",
"typecheck": "tsc -p tsconfig.eslint.json",
@ -32,38 +30,42 @@
"prepack": "yarn build && pinst --disable",
"postpack": "pinst --enable"
},
"dependencies": {
"fast-deep-equal": "^3.1.3",
"lodash": "^4.17.21"
},
"devDependencies": {
"@commitlint/cli": "^17.3.0",
"@commitlint/config-conventional": "^17.3.0",
"@favware/cliff-jumper": "^1.9.0",
"@commitlint/cli": "^17.6.5",
"@commitlint/config-conventional": "^17.6.5",
"@favware/cliff-jumper": "^2.0.1",
"@favware/npm-deprecate": "^1.0.7",
"@sapphire/eslint-config": "^4.3.8",
"@sapphire/prettier-config": "^1.4.4",
"@sapphire/ts-config": "^3.3.4",
"@types/jsdom": "^20.0.1",
"@types/lodash": "^4.14.191",
"@types/node": "^18.11.13",
"@typescript-eslint/eslint-plugin": "^5.46.0",
"@typescript-eslint/parser": "^5.46.0",
"@vitest/coverage-c8": "^0.25.7",
"@sapphire/eslint-config": "^4.4.2",
"@sapphire/prettier-config": "^1.4.5",
"@sapphire/ts-config": "^4.0.0",
"@types/jsdom": "^21.1.1",
"@types/lodash": "^4.14.195",
"@types/node": "^18.16.16",
"@typescript-eslint/eslint-plugin": "^5.59.8",
"@typescript-eslint/parser": "^5.59.8",
"@vitest/coverage-c8": "^0.31.4",
"cz-conventional-changelog": "^3.3.0",
"esbuild-plugins-node-modules-polyfill": "^1.0.7",
"eslint": "^8.29.0",
"eslint-config-prettier": "^8.5.0",
"esbuild-plugins-node-modules-polyfill": "^1.0.14",
"eslint": "^8.42.0",
"eslint-config-prettier": "^8.8.0",
"eslint-plugin-prettier": "^4.2.1",
"husky": "^8.0.2",
"jsdom": "^20.0.3",
"lint-staged": "^13.1.0",
"husky": "^8.0.3",
"jsdom": "^22.1.0",
"lint-staged": "^13.2.2",
"pinst": "^3.0.0",
"prettier": "^2.8.1",
"prettier": "^2.8.8",
"pretty-quick": "^3.1.3",
"ts-node": "^10.9.1",
"tsup": "^6.5.0",
"typedoc": "^0.23.22",
"typedoc-json-parser": "^7.0.2",
"typescript": "^4.9.4",
"vite": "^4.0.0",
"vitest": "^0.25.7"
"tsup": "^6.7.0",
"typedoc": "^0.24.7",
"typedoc-json-parser": "^8.1.2",
"typescript": "^5.1.3",
"vite": "^4.3.9",
"vitest": "^0.31.4"
},
"repository": {
"type": "git",
@ -117,11 +119,7 @@
},
"resolutions": {
"ansi-regex": "^5.0.1",
"minimist": "^1.2.7"
"minimist": "^1.2.8"
},
"packageManager": "yarn@3.3.0",
"dependencies": {
"fast-deep-equal": "^3.1.3",
"lodash": "^4.17.21"
}
"packageManager": "yarn@3.6.0"
}