@ereo/core 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 +99 -0
- package/dist/app.d.ts +91 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/cache.d.ts +195 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/context.d.ts +65 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/env.d.ts +156 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +959 -0
- package/dist/plugin.d.ts +73 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/types/path-parser.d.ts +200 -0
- package/dist/types/path-parser.d.ts.map +1 -0
- package/dist/types.d.ts +651 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +42 -0
package/dist/plugin.d.ts
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @ereo/core - Plugin System
|
|
3
|
+
*
|
|
4
|
+
* A simple yet powerful plugin system inspired by Vite.
|
|
5
|
+
* Plugins can hook into various lifecycle events and transform code.
|
|
6
|
+
*/
|
|
7
|
+
import type { Plugin, DevServer, FrameworkConfig } from './types';
|
|
8
|
+
/**
|
|
9
|
+
* Plugin registry for managing framework plugins.
|
|
10
|
+
*/
|
|
11
|
+
export declare class PluginRegistry {
|
|
12
|
+
private plugins;
|
|
13
|
+
private context;
|
|
14
|
+
constructor(config: FrameworkConfig, mode: 'development' | 'production', root: string);
|
|
15
|
+
/**
|
|
16
|
+
* Register a plugin.
|
|
17
|
+
*/
|
|
18
|
+
register(plugin: Plugin): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Register multiple plugins.
|
|
21
|
+
*/
|
|
22
|
+
registerAll(plugins: Plugin[]): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Get all registered plugins.
|
|
25
|
+
*/
|
|
26
|
+
getPlugins(): readonly Plugin[];
|
|
27
|
+
/**
|
|
28
|
+
* Get a plugin by name.
|
|
29
|
+
*/
|
|
30
|
+
getPlugin(name: string): Plugin | undefined;
|
|
31
|
+
/**
|
|
32
|
+
* Run transform hooks on code.
|
|
33
|
+
*/
|
|
34
|
+
transform(code: string, id: string): Promise<string>;
|
|
35
|
+
/**
|
|
36
|
+
* Resolve a module ID (for virtual modules).
|
|
37
|
+
*/
|
|
38
|
+
resolveId(id: string): string | null;
|
|
39
|
+
/**
|
|
40
|
+
* Load a virtual module.
|
|
41
|
+
*/
|
|
42
|
+
load(id: string): Promise<string | null>;
|
|
43
|
+
/**
|
|
44
|
+
* Configure the dev server with all plugins.
|
|
45
|
+
*/
|
|
46
|
+
configureServer(server: DevServer): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Run buildStart hooks.
|
|
49
|
+
*/
|
|
50
|
+
buildStart(): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Run buildEnd hooks.
|
|
53
|
+
*/
|
|
54
|
+
buildEnd(): Promise<void>;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Helper to create a plugin with proper typing.
|
|
58
|
+
*/
|
|
59
|
+
export declare function definePlugin(plugin: Plugin): Plugin;
|
|
60
|
+
/**
|
|
61
|
+
* Compose multiple plugins into one.
|
|
62
|
+
*/
|
|
63
|
+
export declare function composePlugins(name: string, plugins: Plugin[]): Plugin;
|
|
64
|
+
/**
|
|
65
|
+
* Built-in security headers plugin.
|
|
66
|
+
* Adds sensible security defaults to all responses.
|
|
67
|
+
*/
|
|
68
|
+
export declare const securityHeadersPlugin: Plugin;
|
|
69
|
+
/**
|
|
70
|
+
* Check if a value is a valid plugin.
|
|
71
|
+
*/
|
|
72
|
+
export declare function isPlugin(value: unknown): value is Plugin;
|
|
73
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAiB,SAAS,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAEjF;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,OAAO,CAAgB;gBAEnB,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,GAAG,YAAY,EAAE,IAAI,EAAE,MAAM;IAIrF;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB7C;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnD;;OAEG;IACH,UAAU,IAAI,SAAS,MAAM,EAAE;IAI/B;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI3C;;OAEG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAe1D;;OAEG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAYpC;;OAEG;IACG,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAY9C;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQjC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAOhC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAkEtE;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,QAKhC,CAAC;AAEH;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAOxD"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @ereo/core - Compile-Time Path Parser Types
|
|
3
|
+
*
|
|
4
|
+
* Template literal types for parsing route paths and extracting typed parameters.
|
|
5
|
+
* Infers { id: string; postId: string } from '/users/[id]/posts/[postId]'.
|
|
6
|
+
*
|
|
7
|
+
* Supports:
|
|
8
|
+
* - Dynamic params: [id] → { id: string }
|
|
9
|
+
* - Optional params: [[page]] → { page?: string }
|
|
10
|
+
* - Catch-all params: [...path] → { path: string[] }
|
|
11
|
+
*
|
|
12
|
+
* Performance optimizations:
|
|
13
|
+
* - Object maps instead of tuples for better TypeScript compiler performance
|
|
14
|
+
* - Lazy evaluation patterns to defer computation
|
|
15
|
+
* - Maximum depth guards to prevent infinite recursion
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Trim leading slashes from a path string.
|
|
19
|
+
*/
|
|
20
|
+
type TrimLeadingSlash<T extends string> = T extends `/${infer Rest}` ? TrimLeadingSlash<Rest> : T;
|
|
21
|
+
/**
|
|
22
|
+
* Trim trailing slashes from a path string.
|
|
23
|
+
*/
|
|
24
|
+
type TrimTrailingSlash<T extends string> = T extends `${infer Rest}/` ? TrimTrailingSlash<Rest> : T;
|
|
25
|
+
/**
|
|
26
|
+
* Normalize a path by removing leading/trailing slashes.
|
|
27
|
+
*/
|
|
28
|
+
type NormalizePath<T extends string> = TrimLeadingSlash<TrimTrailingSlash<T>>;
|
|
29
|
+
/**
|
|
30
|
+
* Represents a parsed path segment.
|
|
31
|
+
*/
|
|
32
|
+
type ParsedSegment = {
|
|
33
|
+
type: 'static';
|
|
34
|
+
value: string;
|
|
35
|
+
} | {
|
|
36
|
+
type: 'dynamic';
|
|
37
|
+
name: string;
|
|
38
|
+
} | {
|
|
39
|
+
type: 'optional';
|
|
40
|
+
name: string;
|
|
41
|
+
} | {
|
|
42
|
+
type: 'catchAll';
|
|
43
|
+
name: string;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Parse a single path segment into its type.
|
|
47
|
+
*
|
|
48
|
+
* Examples:
|
|
49
|
+
* - 'users' → { type: 'static'; value: 'users' }
|
|
50
|
+
* - '[id]' → { type: 'dynamic'; name: 'id' }
|
|
51
|
+
* - '[[page]]' → { type: 'optional'; name: 'page' }
|
|
52
|
+
* - '[...path]' → { type: 'catchAll'; name: 'path' }
|
|
53
|
+
*/
|
|
54
|
+
type ParseSegment<S extends string> = S extends `[[${infer Name}]]` ? {
|
|
55
|
+
type: 'optional';
|
|
56
|
+
name: Name;
|
|
57
|
+
} : S extends `[...${infer Name}]` ? {
|
|
58
|
+
type: 'catchAll';
|
|
59
|
+
name: Name;
|
|
60
|
+
} : S extends `[${infer Name}]` ? {
|
|
61
|
+
type: 'dynamic';
|
|
62
|
+
name: Name;
|
|
63
|
+
} : {
|
|
64
|
+
type: 'static';
|
|
65
|
+
value: S;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Split a path string into an array of segment strings.
|
|
69
|
+
*/
|
|
70
|
+
type SplitPath<Path extends string, Acc extends string[] = []> = Path extends `${infer Segment}/${infer Rest}` ? Segment extends '' ? SplitPath<Rest, Acc> : SplitPath<Rest, [...Acc, Segment]> : Path extends '' ? Acc : [...Acc, Path];
|
|
71
|
+
/**
|
|
72
|
+
* Parse all segments of a path into ParsedSegment types.
|
|
73
|
+
*/
|
|
74
|
+
type ParsePathSegments<Path extends string, Segments extends string[] = SplitPath<NormalizePath<Path>>> = {
|
|
75
|
+
[K in keyof Segments]: ParseSegment<Segments[K] & string>;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Extract a single parameter entry from a parsed segment.
|
|
79
|
+
* Returns empty object for static segments.
|
|
80
|
+
*/
|
|
81
|
+
type ExtractParamFromSegment<Seg> = Seg extends {
|
|
82
|
+
type: 'dynamic';
|
|
83
|
+
name: infer N extends string;
|
|
84
|
+
} ? {
|
|
85
|
+
[K in N]: string;
|
|
86
|
+
} : Seg extends {
|
|
87
|
+
type: 'optional';
|
|
88
|
+
name: infer N extends string;
|
|
89
|
+
} ? {
|
|
90
|
+
[K in N]?: string;
|
|
91
|
+
} : Seg extends {
|
|
92
|
+
type: 'catchAll';
|
|
93
|
+
name: infer N extends string;
|
|
94
|
+
} ? {
|
|
95
|
+
[K in N]: string[];
|
|
96
|
+
} : {};
|
|
97
|
+
/**
|
|
98
|
+
* Merge two types into one, combining their properties.
|
|
99
|
+
* Uses intersection and simplification for cleaner output.
|
|
100
|
+
*/
|
|
101
|
+
type Merge<A, B> = {
|
|
102
|
+
[K in keyof A | keyof B]: K extends keyof B ? B[K] : K extends keyof A ? A[K] : never;
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* Extract parameters from a tuple of parsed segments.
|
|
106
|
+
* Uses recursive type with accumulator for performance.
|
|
107
|
+
*/
|
|
108
|
+
type ExtractParamsFromSegments<Segments extends readonly unknown[], Acc = {}> = Segments extends readonly [infer First, ...infer Rest] ? ExtractParamsFromSegments<Rest, Merge<Acc, ExtractParamFromSegment<First>>> : Acc;
|
|
109
|
+
/**
|
|
110
|
+
* Extract all parameters from parsed path segments.
|
|
111
|
+
*/
|
|
112
|
+
type ExtractParams<Segments> = Segments extends readonly unknown[] ? ExtractParamsFromSegments<Segments> : {};
|
|
113
|
+
/**
|
|
114
|
+
* Infer parameter types from a route path pattern.
|
|
115
|
+
*
|
|
116
|
+
* This is the main entry point for path parameter inference.
|
|
117
|
+
*
|
|
118
|
+
* @example
|
|
119
|
+
* type Params1 = InferParams<'/users/[id]'>;
|
|
120
|
+
* // { id: string }
|
|
121
|
+
*
|
|
122
|
+
* type Params2 = InferParams<'/users/[id]/posts/[postId]'>;
|
|
123
|
+
* // { id: string; postId: string }
|
|
124
|
+
*
|
|
125
|
+
* type Params3 = InferParams<'/docs/[...path]'>;
|
|
126
|
+
* // { path: string[] }
|
|
127
|
+
*
|
|
128
|
+
* type Params4 = InferParams<'/blog/[[page]]'>;
|
|
129
|
+
* // { page?: string }
|
|
130
|
+
*
|
|
131
|
+
* type Params5 = InferParams<'/users/[id]/posts/[[postId]]/[...tags]'>;
|
|
132
|
+
* // { id: string; postId?: string; tags: string[] }
|
|
133
|
+
*/
|
|
134
|
+
export type InferParams<Path extends string> = ExtractParams<ParsePathSegments<Path>>;
|
|
135
|
+
/**
|
|
136
|
+
* Check if a path has any dynamic parameters.
|
|
137
|
+
*/
|
|
138
|
+
export type HasParams<Path extends string> = keyof InferParams<Path> extends never ? false : true;
|
|
139
|
+
/**
|
|
140
|
+
* Get the parameter names from a path.
|
|
141
|
+
*/
|
|
142
|
+
export type ParamNames<Path extends string> = keyof InferParams<Path>;
|
|
143
|
+
/**
|
|
144
|
+
* Check if a parameter is optional.
|
|
145
|
+
*/
|
|
146
|
+
export type IsOptionalParam<Path extends string, Name extends string> = {} extends Pick<InferParams<Path>, Name & keyof InferParams<Path>> ? true : false;
|
|
147
|
+
/**
|
|
148
|
+
* Check if a parameter is a catch-all.
|
|
149
|
+
*/
|
|
150
|
+
export type IsCatchAllParam<Path extends string, Name extends string> = Name extends keyof InferParams<Path> ? InferParams<Path>[Name] extends string[] ? true : false : false;
|
|
151
|
+
/**
|
|
152
|
+
* Build a concrete path from a pattern and params.
|
|
153
|
+
* This is a type-level representation; actual building happens at runtime.
|
|
154
|
+
*/
|
|
155
|
+
export type BuildPath<Pattern extends string, Params extends InferParams<Pattern>> = string;
|
|
156
|
+
/**
|
|
157
|
+
* Validate that params match the expected shape for a path.
|
|
158
|
+
* Returns true if valid, error message if invalid.
|
|
159
|
+
*/
|
|
160
|
+
export type ValidateParams<Path extends string, Params> = Params extends InferParams<Path> ? true : `Invalid params for path "${Path}". Expected: ${keyof InferParams<Path> & string}`;
|
|
161
|
+
/**
|
|
162
|
+
* Extract the static prefix of a path (before first dynamic segment).
|
|
163
|
+
*
|
|
164
|
+
* @example
|
|
165
|
+
* type Prefix = StaticPrefix<'/users/[id]/posts'>;
|
|
166
|
+
* // '/users'
|
|
167
|
+
*/
|
|
168
|
+
export type StaticPrefix<Path extends string> = Path extends `${infer Static}[${string}` ? TrimTrailingSlash<Static> : Path;
|
|
169
|
+
/**
|
|
170
|
+
* Check if a path is fully static (no dynamic segments).
|
|
171
|
+
*/
|
|
172
|
+
export type IsStaticPath<Path extends string> = Path extends `${string}[${string}` ? false : true;
|
|
173
|
+
/**
|
|
174
|
+
* Get the parent path (remove last segment).
|
|
175
|
+
*/
|
|
176
|
+
export type ParentPath<Path extends string> = NormalizePath<Path> extends `${infer Parent}/${string}` ? `/${Parent}` : '/';
|
|
177
|
+
/**
|
|
178
|
+
* Check if a path pattern can match a concrete path.
|
|
179
|
+
* This is a simplified type-level check.
|
|
180
|
+
*/
|
|
181
|
+
export type PathMatches<Pattern extends string, Path extends string> = InferParams<Pattern> extends Record<string, never> ? Pattern extends Path ? true : false : boolean;
|
|
182
|
+
/**
|
|
183
|
+
* Union of all possible concrete paths for static paths.
|
|
184
|
+
* Dynamic paths return string as they can match many concrete paths.
|
|
185
|
+
*/
|
|
186
|
+
export type PossiblePaths<Pattern extends string> = IsStaticPath<Pattern> extends true ? Pattern : string;
|
|
187
|
+
/**
|
|
188
|
+
* Branded type to preserve path information through transformations.
|
|
189
|
+
* Used by the builder pattern to maintain type safety.
|
|
190
|
+
*/
|
|
191
|
+
declare const PathBrand: unique symbol;
|
|
192
|
+
export type BrandedPath<Path extends string> = string & {
|
|
193
|
+
readonly [PathBrand]: Path;
|
|
194
|
+
};
|
|
195
|
+
/**
|
|
196
|
+
* Extract the original path from a branded path type.
|
|
197
|
+
*/
|
|
198
|
+
export type UnbrandPath<T> = T extends BrandedPath<infer Path> ? Path : never;
|
|
199
|
+
export type { ParsedSegment, ParseSegment, ParsePathSegments, SplitPath, ExtractParams, };
|
|
200
|
+
//# sourceMappingURL=path-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-parser.d.ts","sourceRoot":"","sources":["../../src/types/path-parser.ts"],"names":[],"mappings":"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"}
|