Skip to content

Commit 17c3a3a

Browse files
committed
Release 0.13.25
1 parent 55d8d32 commit 17c3a3a

13 files changed

Lines changed: 103 additions & 75 deletions

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "pave",
33
"type": "module",
4-
"version": "0.13.24",
4+
"version": "0.13.25",
55
"author": "Casey Foster <c@sey.me>",
66
"license": "MIT",
77
"repository": {

src/execute.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@ const { Promise } = globalThis;
1010
const { isArray } = Array;
1111

1212
/**
13-
* @template {Schema<any, any, any>} S
13+
* @template {Schema<any>} S
1414
* @param {{
1515
* context?: any;
1616
* object?: any;
1717
* path?: string[];
1818
* query: Query;
1919
* schema: S;
20-
* type: Type<S, any, any, any, any>;
20+
* type: Type<S, any>;
2121
* value?: any;
2222
* }} options
2323
*/

src/get-query-cost.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ import { isObject } from '#src/is-object.js';
55
const { isArray } = Array;
66

77
/**
8-
* @template {Schema<any, any, any>} S
8+
* @template {Schema<any>} S
99
* @param {{
1010
* context?: SchemaContext<S>;
1111
* path?: string[];
1212
* query: Query;
1313
* schema: S;
14-
* type: Type<S, any, any, any, any>;
14+
* type: Type<S, any>;
1515
* }} options
1616
*/
1717
export const getQueryCost = ({ context, path = [], query, schema, type }) => {

src/index.js

Lines changed: 51 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -15,62 +15,75 @@
1515
*/
1616

1717
/**
18-
* @template {string} [TypeName=''] Default is `''`
19-
* @template [Context=unknown] Default is `unknown`
20-
* @template {{ [K: string]: any }} [Extensions={}] Default is `{}`
18+
* @template {{
19+
* context?: any;
20+
* extensions?: { [K: string]: any };
21+
* typeName?: string;
22+
* }} [A={}]
23+
* Default is `{}`
24+
* @template [_Context=A['context'] extends undefined ? unknown: A['context']]
25+
* Default is `A['context'] extends undefined ? unknown: A['context']`
26+
* @template [_Extensions=A['extensions'] extends undefined ? {} : A['extensions']]
27+
* Default is `A['extensions'] extends undefined ? {} : A['extensions']`
28+
* @template [TypeName=A['typeName'] extends undefined ? never : A['typeName']]
29+
* Default is `A['typeName'] extends undefined ? never : A['typeName']`
2130
* @typedef {{
22-
* [K in TypeName]: Type<
23-
* Schema<TypeName, Context, Extensions>,
24-
* any,
25-
* any,
26-
* any,
27-
* any
28-
* >;
31+
* [K in TypeName extends string ? TypeName : never]: Type<Schema<A>, any>;
2932
* }} Schema
3033
*/
3134

3235
/**
33-
* @template {Schema<any, any, any>} S
34-
* @typedef {S extends Schema<infer TypeName, infer _, infer __> ? TypeName : never} SchemaTypeName
36+
* @template {Schema<any>} S
37+
* @typedef {S extends Schema<infer _, infer Context> ? Context : never} SchemaContext
3538
*/
3639

3740
/**
38-
* @template {Schema<any, any, any>} S
39-
* @typedef {S extends Schema<infer _, infer Context, infer __> ? Context : never} SchemaContext
41+
* @template {Schema<any>} S
42+
* @typedef {S extends Schema<infer _, infer __, infer Extensions> ? Extensions : never} SchemaExtensions
4043
*/
4144

4245
/**
43-
* @template {Schema<any, any, any>} S
44-
* @typedef {S extends Schema<infer _, infer __, infer Extensions> ? Extensions : never} SchemaExtensions
46+
* @template {Schema<any>} S
47+
* @typedef {S extends Schema<infer _, infer __, infer ___, infer TypeName>
48+
* ? TypeName
49+
* : never} SchemaTypeName
50+
*/
51+
52+
/**
53+
* @typedef {{
54+
* input: unknown;
55+
* object: unknown;
56+
* resolvedValue: {};
57+
* value: unknown;
58+
* }} DefaultTypeArg
4559
*/
4660

4761
/**
48-
* @template {Schema<any, any, any>} [S=Schema] Default is `Schema`
49-
* @template [Input=unknown] Default is `unknown`
50-
* @template [Object=unknown] Default is `unknown`
51-
* @template [Value=unknown] Default is. Default is `unknown`
52-
* @template [ResolvedValue={}] Default is `{}`
62+
* @template {Schema<any>} [S=Schema] Default is `Schema`
63+
* @template {{ input?: any; object?: any; resolvedValue?: {}; value?: any }} [A={}]
64+
* Default is `{}`
65+
* @template [Input=A['input'] extends undefined ? unknown : A['input']]
66+
* Default is `A['input'] extends undefined ? unknown : A['input']`
67+
* @template [Object=A['object'] extends undefined ? unknown : A['object']]
68+
* Default is `A['object'] extends undefined ? unknown : A['object']`
69+
* @template [ResolvedValue=A['resolvedValue'] extends undefined ? {} : A['resolvedValue']]
70+
* Default is `A['resolvedValue'] extends undefined ? {} : A['resolvedValue']`
71+
* @template [Value=A['value'] extends undefined ? undefined : A['value']]
72+
* Default is `A['value'] extends undefined ? undefined : A['value']`
5373
* @typedef {Recursive<
5474
* | SchemaTypeName<S>
5575
* | ((
56-
* | { optional: Type<S, any, any, any, any> }
57-
* | { nullable: Type<S, any, any, any, any> }
58-
* | {
59-
* arrayOf: Type<S, any, any, any, any>;
60-
* minLength?: number;
61-
* maxLength?: number;
62-
* }
76+
* | { optional: Type<S, any> }
77+
* | { nullable: Type<S, any> }
78+
* | { arrayOf: Type<S, any>; minLength?: number; maxLength?: number }
6379
* | {
64-
* oneOf: { [K: string]: Type<S, any, any, any, any> };
80+
* oneOf: { [K: string]: Type<S, any> };
6581
* resolveType: (value: {}) => string;
6682
* }
83+
* | { object: { [K: string]: Type<S, any> }; defaultType?: Type<S, any> }
6784
* | {
68-
* object: { [K: string]: Type<S, any, any, any, any> };
69-
* defaultType?: Type<S, any, any, any, any>;
70-
* }
71-
* | {
72-
* input?: Type<S, any, any, any, any>;
73-
* type?: Type<S, any, any, any, any>;
85+
* input?: Type<S, any>;
86+
* type?: Type<S, any>;
7487
* typeInput?: any;
7588
* resolve?:
7689
* | ((options: {
@@ -80,7 +93,7 @@
8093
* path: string[];
8194
* query: Query;
8295
* schema: S;
83-
* type: Type<S, any, any, any, any>;
96+
* type: Type<S, any>;
8497
* value: Value;
8598
* }) => any)
8699
* | {}
@@ -97,7 +110,7 @@
97110
* path: string[];
98111
* query: Query;
99112
* schema: S;
100-
* type: Type<S, any, any, any, any>;
113+
* type: Type<S, any>;
101114
* value: Value;
102115
* }) => number);
103116
* defaultValue?: any;
@@ -108,7 +121,7 @@
108121
* path: string[];
109122
* query: Query;
110123
* schema: S;
111-
* type: Type<S, any, any, any, any>;
124+
* type: Type<S, any>;
112125
* value: ResolvedValue;
113126
* }) => any;
114127
* } & SchemaExtensions<S>)

src/validate-query.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ const { isArray } = Array;
99
const skipInput = {};
1010

1111
/**
12-
* @template {Schema<any, any, any>} S
12+
* @template {Schema<any>} S
1313
* @param {{
1414
* context?: any;
1515
* path?: string[];
1616
* query: Query;
1717
* schema: S;
18-
* type: Type<S, any, any, any, any>;
18+
* type: Type<S, any>;
1919
* }} options
2020
* @returns {Query}
2121
*/

src/validate-schema.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ const { Set } = globalThis;
88
const { isArray } = Array;
99

1010
/**
11-
* @template {Schema<any, any, any>} S
11+
* @template {Schema<any>} S
1212
* @param {{ extensions?: { [K: string]: any }; schema: S }} options
1313
*/
1414
export const validateSchema = ({ extensions, schema }) => {

src/validate-value.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@ import { throwPaveError } from '#src/throw-pave-error.js';
77
const { isArray } = Array;
88

99
/**
10-
* @template {Schema<any, any, any>} S
10+
* @template {Schema<any>} S
1111
* @param {{
1212
* context?: any;
1313
* object?: any;
1414
* path?: string[];
1515
* query?: Query;
1616
* schema: S;
17-
* type: Type<S, any, any, any, any>;
17+
* type: Type<S, any>;
1818
* value?: any;
1919
* }} options
2020
*/

types/execute.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
export function execute<S extends Schema<any, any, any>>({ context, object, path, query, schema, type, value }: {
1+
export function execute<S extends Schema<any>>({ context, object, path, query, schema, type, value }: {
22
context?: any;
33
object?: any;
44
path?: string[];
55
query: Query;
66
schema: S;
7-
type: Type<S, any, any, any, any>;
7+
type: Type<S, any>;
88
value?: any;
99
}): Promise<any>;
1010
import type { Schema } from '#types/index.js';

types/get-query-cost.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
export function getQueryCost<S extends Schema<any, any, any>>({ context, path, query, schema, type }: {
1+
export function getQueryCost<S extends Schema<any>>({ context, path, query, schema, type }: {
22
context?: SchemaContext<S>;
33
path?: string[];
44
query: Query;
55
schema: S;
6-
type: Type<S, any, any, any, any>;
6+
type: Type<S, any>;
77
}): any;
88
import type { Schema } from '#types/index.js';
99
import type { SchemaContext } from '#types/index.js';

types/index.d.ts

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -18,33 +18,48 @@ export type Query<T = any> = {
1818
};
1919
export type Recursive<T> = T | RecursiveArray<T>;
2020
export type RecursiveArray<T> = Recursive<T>[];
21-
export type Schema<TypeName extends string = "", Context = unknown, Extensions extends {
22-
[K: string]: any;
23-
} = {}> = { [K in TypeName]: Type<Schema<TypeName, Context, Extensions>, any, any, any, any>; };
24-
export type SchemaTypeName<S extends Schema<any, any, any>> = S extends Schema<infer TypeName, infer _, infer __> ? TypeName : never;
25-
export type SchemaContext<S extends Schema<any, any, any>> = S extends Schema<infer _, infer Context, infer __> ? Context : never;
26-
export type SchemaExtensions<S extends Schema<any, any, any>> = S extends Schema<infer _, infer __, infer Extensions> ? Extensions : never;
27-
export type Type<S extends Schema<any, any, any> = Schema<"", unknown, {}>, Input = unknown, Object = unknown, Value = unknown, ResolvedValue = {}> = Recursive<SchemaTypeName<S> | (({
28-
optional: Type<S, any, any, any, any>;
21+
export type Schema<A extends {
22+
context?: any;
23+
extensions?: {
24+
[K: string]: any;
25+
};
26+
typeName?: string;
27+
} = {}, _Context = A["context"] extends undefined ? unknown : A["context"], _Extensions = A["extensions"] extends undefined ? {} : A["extensions"], TypeName = A["typeName"] extends undefined ? never : A["typeName"]> = { [K in TypeName extends string ? TypeName : never]: Type<Schema<A>, any>; };
28+
export type SchemaContext<S extends Schema<any>> = S extends Schema<infer _, infer Context> ? Context : never;
29+
export type SchemaExtensions<S extends Schema<any>> = S extends Schema<infer _, infer __, infer Extensions> ? Extensions : never;
30+
export type SchemaTypeName<S extends Schema<any>> = S extends Schema<infer _, infer __, infer ___, infer TypeName> ? TypeName : never;
31+
export type DefaultTypeArg = {
32+
input: unknown;
33+
object: unknown;
34+
resolvedValue: {};
35+
value: unknown;
36+
};
37+
export type Type<S extends Schema<any> = Schema<{}, unknown, unknown, unknown>, A extends {
38+
input?: any;
39+
object?: any;
40+
resolvedValue?: {};
41+
value?: any;
42+
} = {}, Input = A["input"] extends undefined ? unknown : A["input"], Object = A["object"] extends undefined ? unknown : A["object"], ResolvedValue = A["resolvedValue"] extends undefined ? {} : A["resolvedValue"], Value = A["value"] extends undefined ? undefined : A["value"]> = Recursive<SchemaTypeName<S> | (({
43+
optional: Type<S, any>;
2944
} | {
30-
nullable: Type<S, any, any, any, any>;
45+
nullable: Type<S, any>;
3146
} | {
32-
arrayOf: Type<S, any, any, any, any>;
47+
arrayOf: Type<S, any>;
3348
minLength?: number;
3449
maxLength?: number;
3550
} | {
3651
oneOf: {
37-
[K: string]: Type<S, any, any, any, any>;
52+
[K: string]: Type<S, any>;
3853
};
3954
resolveType: (value: {}) => string;
4055
} | {
4156
object: {
42-
[K: string]: Type<S, any, any, any, any>;
57+
[K: string]: Type<S, any>;
4358
};
44-
defaultType?: Type<S, any, any, any, any>;
59+
defaultType?: Type<S, any>;
4560
} | {
46-
input?: Type<S, any, any, any, any>;
47-
type?: Type<S, any, any, any, any>;
61+
input?: Type<S, any>;
62+
type?: Type<S, any>;
4863
typeInput?: any;
4964
resolve?: ((options: {
5065
context: SchemaContext<S>;
@@ -53,7 +68,7 @@ export type Type<S extends Schema<any, any, any> = Schema<"", unknown, {}>, Inpu
5368
path: string[];
5469
query: Query;
5570
schema: S;
56-
type: Type<S, any, any, any, any>;
71+
type: Type<S, any>;
5772
value: Value;
5873
}) => any) | {} | null;
5974
}) & {
@@ -65,7 +80,7 @@ export type Type<S extends Schema<any, any, any> = Schema<"", unknown, {}>, Inpu
6580
path: string[];
6681
query: Query;
6782
schema: S;
68-
type: Type<S, any, any, any, any>;
83+
type: Type<S, any>;
6984
value: Value;
7085
}) => number);
7186
defaultValue?: any;
@@ -76,7 +91,7 @@ export type Type<S extends Schema<any, any, any> = Schema<"", unknown, {}>, Inpu
7691
path: string[];
7792
query: Query;
7893
schema: S;
79-
type: Type<S, any, any, any, any>;
94+
type: Type<S, any>;
8095
value: ResolvedValue;
8196
}) => any;
8297
} & SchemaExtensions<S>)>;

0 commit comments

Comments
 (0)