@ereo/router 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +73 -0
- package/dist/file-router.d.ts +122 -0
- package/dist/file-router.d.ts.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1507 -0
- package/dist/matcher.d.ts +67 -0
- package/dist/matcher.d.ts.map +1 -0
- package/dist/middleware-chain.d.ts +249 -0
- package/dist/middleware-chain.d.ts.map +1 -0
- package/dist/route-config.d.ts +27 -0
- package/dist/route-config.d.ts.map +1 -0
- package/dist/route-tree.d.ts +86 -0
- package/dist/route-tree.d.ts.map +1 -0
- package/dist/types.d.ts +140 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/validation.d.ts +127 -0
- package/dist/validation.d.ts.map +1 -0
- package/package.json +41 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @ereo/router - Parameter Validation
|
|
3
|
+
*
|
|
4
|
+
* Validates route params and search params against schemas.
|
|
5
|
+
*/
|
|
6
|
+
import type { ParamValidationSchema, SearchParamValidationSchema, RouteParams } from '@ereo/core';
|
|
7
|
+
/** Validation error for parameters */
|
|
8
|
+
export declare class ParamValidationError extends Error {
|
|
9
|
+
field: string;
|
|
10
|
+
value: unknown;
|
|
11
|
+
constructor(message: string, field: string, value: unknown);
|
|
12
|
+
}
|
|
13
|
+
/** Validation result */
|
|
14
|
+
export interface ValidationResult<T> {
|
|
15
|
+
valid: boolean;
|
|
16
|
+
data?: T;
|
|
17
|
+
errors?: ParamValidationError[];
|
|
18
|
+
}
|
|
19
|
+
/** Built-in validators */
|
|
20
|
+
export declare const validators: {
|
|
21
|
+
/** String validator */
|
|
22
|
+
string: (options?: {
|
|
23
|
+
min?: number;
|
|
24
|
+
max?: number;
|
|
25
|
+
regex?: RegExp;
|
|
26
|
+
}) => {
|
|
27
|
+
parse: (value: string | string[] | undefined) => string;
|
|
28
|
+
};
|
|
29
|
+
/** Number validator */
|
|
30
|
+
number: (options?: {
|
|
31
|
+
min?: number;
|
|
32
|
+
max?: number;
|
|
33
|
+
integer?: boolean;
|
|
34
|
+
}) => {
|
|
35
|
+
parse: (value: string | string[] | undefined) => number;
|
|
36
|
+
};
|
|
37
|
+
/** Integer validator (convenience) */
|
|
38
|
+
int: (options?: {
|
|
39
|
+
min?: number;
|
|
40
|
+
max?: number;
|
|
41
|
+
}) => {
|
|
42
|
+
parse: (value: string | string[] | undefined) => number;
|
|
43
|
+
};
|
|
44
|
+
/** Boolean validator */
|
|
45
|
+
boolean: () => {
|
|
46
|
+
parse: (value: string | string[] | undefined) => boolean;
|
|
47
|
+
};
|
|
48
|
+
/** Enum validator */
|
|
49
|
+
enum: <T extends string>(values: T[]) => {
|
|
50
|
+
parse: (value: string | string[] | undefined) => T;
|
|
51
|
+
};
|
|
52
|
+
/** Array validator */
|
|
53
|
+
array: <T>(itemValidator: {
|
|
54
|
+
parse: (value: string) => T;
|
|
55
|
+
}) => {
|
|
56
|
+
parse: (value: string | string[] | undefined) => T[];
|
|
57
|
+
};
|
|
58
|
+
/** Optional wrapper */
|
|
59
|
+
optional: <T>(validator: {
|
|
60
|
+
parse: (value: string | string[] | undefined) => T;
|
|
61
|
+
}) => {
|
|
62
|
+
parse: (value: string | string[] | undefined) => T | undefined;
|
|
63
|
+
};
|
|
64
|
+
/** Default value wrapper */
|
|
65
|
+
default: <T>(validator: {
|
|
66
|
+
parse: (value: string | string[] | undefined) => T;
|
|
67
|
+
}, defaultValue: T) => {
|
|
68
|
+
parse: (value: string | string[] | undefined) => T;
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Validate route parameters against a schema.
|
|
73
|
+
*
|
|
74
|
+
* @param params Raw parameters from URL
|
|
75
|
+
* @param schema Validation schema
|
|
76
|
+
* @returns Validated parameters
|
|
77
|
+
* @throws ParamValidationError if validation fails
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* const schema = {
|
|
81
|
+
* slug: validators.string({ regex: /^[a-z0-9-]+$/ }),
|
|
82
|
+
* id: validators.int({ min: 1 }),
|
|
83
|
+
* };
|
|
84
|
+
* const validated = validateParams(params, schema);
|
|
85
|
+
*/
|
|
86
|
+
export declare function validateParams<T extends ParamValidationSchema>(params: RouteParams, schema: T): {
|
|
87
|
+
[K in keyof T]: ReturnType<T[K]['parse']>;
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* Safely validate parameters, returning result instead of throwing.
|
|
91
|
+
*/
|
|
92
|
+
export declare function safeValidateParams<T extends ParamValidationSchema>(params: RouteParams, schema: T): ValidationResult<{
|
|
93
|
+
[K in keyof T]: ReturnType<T[K]['parse']>;
|
|
94
|
+
}>;
|
|
95
|
+
/**
|
|
96
|
+
* Validate search parameters against a schema.
|
|
97
|
+
*/
|
|
98
|
+
export declare function validateSearchParams<T extends SearchParamValidationSchema>(searchParams: URLSearchParams | string | Record<string, string | string[]>, schema: T): Record<string, unknown>;
|
|
99
|
+
/**
|
|
100
|
+
* Create a combined validator for params and search params.
|
|
101
|
+
*/
|
|
102
|
+
export declare function createRouteValidator<P extends ParamValidationSchema, S extends SearchParamValidationSchema>(options: {
|
|
103
|
+
params?: P;
|
|
104
|
+
searchParams?: S;
|
|
105
|
+
}): {
|
|
106
|
+
validate: (routeParams: RouteParams, searchParams: URLSearchParams | string) => {
|
|
107
|
+
params: { [K in keyof P]: ReturnType<P[K]["parse"]>; };
|
|
108
|
+
searchParams: Record<string, unknown>;
|
|
109
|
+
};
|
|
110
|
+
safeValidate: (routeParams: RouteParams, searchParams: URLSearchParams | string) => {
|
|
111
|
+
valid: true;
|
|
112
|
+
data: {
|
|
113
|
+
params: { [K in keyof P]: ReturnType<P[K]["parse"]>; };
|
|
114
|
+
searchParams: Record<string, unknown>;
|
|
115
|
+
};
|
|
116
|
+
error?: undefined;
|
|
117
|
+
} | {
|
|
118
|
+
valid: false;
|
|
119
|
+
error: ParamValidationError;
|
|
120
|
+
data?: undefined;
|
|
121
|
+
};
|
|
122
|
+
};
|
|
123
|
+
/** Match a param pattern against a value */
|
|
124
|
+
export declare function matchParamPattern(pattern: string, value: string): boolean;
|
|
125
|
+
/** Extract param names from a route path */
|
|
126
|
+
export declare function extractParamNames(path: string): string[];
|
|
127
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ereo/router",
|
|
3
|
+
"version": "0.1.6",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"author": "Ereo Team",
|
|
6
|
+
"homepage": "https://ereo.dev",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/ereojs/ereo.git",
|
|
10
|
+
"directory": "packages/router"
|
|
11
|
+
},
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/ereojs/ereo/issues"
|
|
14
|
+
},
|
|
15
|
+
"type": "module",
|
|
16
|
+
"main": "./dist/index.js",
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"exports": {
|
|
19
|
+
".": {
|
|
20
|
+
"types": "./dist/index.d.ts",
|
|
21
|
+
"import": "./dist/index.js"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"dist"
|
|
26
|
+
],
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "bun build ./src/index.ts --outdir ./dist --target bun --external @ereo/core && bun run build:types",
|
|
29
|
+
"build:types": "tsc --emitDeclarationOnly --outDir dist",
|
|
30
|
+
"dev": "bun build ./src/index.ts --outdir ./dist --target bun --watch",
|
|
31
|
+
"test": "bun test",
|
|
32
|
+
"typecheck": "tsc --noEmit"
|
|
33
|
+
},
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"@ereo/core": "workspace:*"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@types/bun": "^1.1.0",
|
|
39
|
+
"typescript": "^5.4.0"
|
|
40
|
+
}
|
|
41
|
+
}
|