@orchestr-sh/orchestr 1.0.1
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/LICENSE +21 -0
- package/README.md +344 -0
- package/dist/Container/Container.d.ts +90 -0
- package/dist/Container/Container.d.ts.map +1 -0
- package/dist/Container/Container.js +193 -0
- package/dist/Container/Container.js.map +1 -0
- package/dist/Facades/Route.d.ts +20 -0
- package/dist/Facades/Route.d.ts.map +1 -0
- package/dist/Facades/Route.js +50 -0
- package/dist/Facades/Route.js.map +1 -0
- package/dist/Foundation/Application.d.ts +97 -0
- package/dist/Foundation/Application.d.ts.map +1 -0
- package/dist/Foundation/Application.js +184 -0
- package/dist/Foundation/Application.js.map +1 -0
- package/dist/Foundation/Http/Kernel.d.ts +50 -0
- package/dist/Foundation/Http/Kernel.d.ts.map +1 -0
- package/dist/Foundation/Http/Kernel.js +122 -0
- package/dist/Foundation/Http/Kernel.js.map +1 -0
- package/dist/Foundation/ServiceProvider.d.ts +24 -0
- package/dist/Foundation/ServiceProvider.d.ts.map +1 -0
- package/dist/Foundation/ServiceProvider.js +15 -0
- package/dist/Foundation/ServiceProvider.js.map +1 -0
- package/dist/Providers/RouteServiceProvider.d.ts +9 -0
- package/dist/Providers/RouteServiceProvider.d.ts.map +1 -0
- package/dist/Providers/RouteServiceProvider.js +22 -0
- package/dist/Providers/RouteServiceProvider.js.map +1 -0
- package/dist/Routing/Controller.d.ts +17 -0
- package/dist/Routing/Controller.d.ts.map +1 -0
- package/dist/Routing/Controller.js +26 -0
- package/dist/Routing/Controller.js.map +1 -0
- package/dist/Routing/Request.d.ts +109 -0
- package/dist/Routing/Request.d.ts.map +1 -0
- package/dist/Routing/Request.js +212 -0
- package/dist/Routing/Request.js.map +1 -0
- package/dist/Routing/Response.d.ts +78 -0
- package/dist/Routing/Response.d.ts.map +1 -0
- package/dist/Routing/Response.js +174 -0
- package/dist/Routing/Response.js.map +1 -0
- package/dist/Routing/Route.d.ts +51 -0
- package/dist/Routing/Route.d.ts.map +1 -0
- package/dist/Routing/Route.js +94 -0
- package/dist/Routing/Route.js.map +1 -0
- package/dist/Routing/Router.d.ts +114 -0
- package/dist/Routing/Router.d.ts.map +1 -0
- package/dist/Routing/Router.js +216 -0
- package/dist/Routing/Router.js.map +1 -0
- package/dist/Support/Facade.d.ts +44 -0
- package/dist/Support/Facade.d.ts.map +1 -0
- package/dist/Support/Facade.js +101 -0
- package/dist/Support/Facade.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Route = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Route - Represents a single route in the application
|
|
6
|
+
* Laravel's Illuminate\Routing\Route
|
|
7
|
+
*/
|
|
8
|
+
class Route {
|
|
9
|
+
uri;
|
|
10
|
+
methods;
|
|
11
|
+
action;
|
|
12
|
+
middleware = [];
|
|
13
|
+
name;
|
|
14
|
+
parameters = {};
|
|
15
|
+
compiled;
|
|
16
|
+
parameterNames = [];
|
|
17
|
+
constructor(methods, uri, action) {
|
|
18
|
+
this.methods = Array.isArray(methods) ? methods : [methods];
|
|
19
|
+
this.uri = uri;
|
|
20
|
+
this.action = action;
|
|
21
|
+
this.compileRoute();
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Compile the route pattern into a regex
|
|
25
|
+
*/
|
|
26
|
+
compileRoute() {
|
|
27
|
+
// Extract parameter names from the URI
|
|
28
|
+
const paramPattern = /:([a-zA-Z_][a-zA-Z0-9_]*)/g;
|
|
29
|
+
let match;
|
|
30
|
+
while ((match = paramPattern.exec(this.uri)) !== null) {
|
|
31
|
+
this.parameterNames.push(match[1]);
|
|
32
|
+
}
|
|
33
|
+
// Convert Laravel-style parameters to regex
|
|
34
|
+
// :id -> ([^/]+)
|
|
35
|
+
// :id? -> ([^/]*)
|
|
36
|
+
let pattern = this.uri
|
|
37
|
+
.replace(/\//g, '\\/')
|
|
38
|
+
.replace(/:([a-zA-Z_][a-zA-Z0-9_]*)\?/g, '([^/]*)')
|
|
39
|
+
.replace(/:([a-zA-Z_][a-zA-Z0-9_]*)/g, '([^/]+)');
|
|
40
|
+
this.compiled = new RegExp(`^${pattern}$`);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Determine if the route matches the given request
|
|
44
|
+
*/
|
|
45
|
+
matches(method, path) {
|
|
46
|
+
if (!this.methods.includes(method)) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
return this.compiled?.test(path) || false;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Bind the route parameters from the path
|
|
53
|
+
*/
|
|
54
|
+
bind(path) {
|
|
55
|
+
const match = this.compiled?.exec(path);
|
|
56
|
+
if (match) {
|
|
57
|
+
this.parameters = {};
|
|
58
|
+
this.parameterNames.forEach((name, index) => {
|
|
59
|
+
this.parameters[name] = match[index + 1];
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Add middleware to the route
|
|
65
|
+
* Laravel: Route::middleware('auth')
|
|
66
|
+
*/
|
|
67
|
+
addMiddleware(middleware) {
|
|
68
|
+
const middlewares = Array.isArray(middleware) ? middleware : [middleware];
|
|
69
|
+
this.middleware.push(...middlewares);
|
|
70
|
+
return this;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Set the route name
|
|
74
|
+
* Laravel: Route::name('users.index')
|
|
75
|
+
*/
|
|
76
|
+
setName(name) {
|
|
77
|
+
this.name = name;
|
|
78
|
+
return this;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Get the route parameters
|
|
82
|
+
*/
|
|
83
|
+
getParameters() {
|
|
84
|
+
return this.parameters;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Get a specific parameter value
|
|
88
|
+
*/
|
|
89
|
+
parameter(name, defaultValue) {
|
|
90
|
+
return this.parameters[name] ?? defaultValue;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
exports.Route = Route;
|
|
94
|
+
//# sourceMappingURL=Route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Route.js","sourceRoot":"","sources":["../../src/Routing/Route.ts"],"names":[],"mappings":";;;AAQA;;;GAGG;AACH,MAAa,KAAK;IACT,GAAG,CAAS;IACZ,OAAO,CAAe;IACtB,MAAM,CAAc;IACpB,UAAU,GAAiB,EAAE,CAAC;IAC9B,IAAI,CAAU;IACd,UAAU,GAA2B,EAAE,CAAC;IACvC,QAAQ,CAAU;IAClB,cAAc,GAAa,EAAE,CAAC;IAEtC,YAAY,OAAkC,EAAE,GAAW,EAAE,MAAmB;QAC9E,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC5D,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED;;OAEG;IACK,YAAY;QAClB,uCAAuC;QACvC,MAAM,YAAY,GAAG,4BAA4B,CAAC;QAClD,IAAI,KAAK,CAAC;QAEV,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACtD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,CAAC;QAED,4CAA4C;QAC5C,iBAAiB;QACjB,kBAAkB;QAClB,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG;aACnB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;aACrB,OAAO,CAAC,8BAA8B,EAAE,SAAS,CAAC;aAClD,OAAO,CAAC,4BAA4B,EAAE,SAAS,CAAC,CAAC;QAEpD,IAAI,CAAC,QAAQ,GAAG,IAAI,MAAM,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,MAAc,EAAE,IAAY;QAClC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAoB,CAAC,EAAE,CAAC;YACjD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,IAAY;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAExC,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBAC1C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,aAAa,CAAC,UAAqC;QACjD,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAC1E,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,IAAY;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,IAAY,EAAE,YAAqB;QAC3C,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC;IAC/C,CAAC;CACF;AAjGD,sBAiGC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { Application } from '../Foundation/Application';
|
|
2
|
+
import { Route, HttpMethod, RouteAction, Middleware } from './Route';
|
|
3
|
+
import { Request } from './Request';
|
|
4
|
+
import { Response } from './Response';
|
|
5
|
+
/**
|
|
6
|
+
* Route group attributes
|
|
7
|
+
*/
|
|
8
|
+
export interface RouteGroupAttributes {
|
|
9
|
+
prefix?: string;
|
|
10
|
+
middleware?: Middleware | Middleware[];
|
|
11
|
+
namespace?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Router - Laravel's routing system
|
|
15
|
+
* Illuminate\Routing\Router
|
|
16
|
+
*/
|
|
17
|
+
export declare class Router {
|
|
18
|
+
private app;
|
|
19
|
+
private routes;
|
|
20
|
+
private groupStack;
|
|
21
|
+
private namedRoutes;
|
|
22
|
+
constructor(app: Application);
|
|
23
|
+
/**
|
|
24
|
+
* Register a new GET route
|
|
25
|
+
* Laravel: Route::get('/path', action)
|
|
26
|
+
*/
|
|
27
|
+
get(uri: string, action: RouteAction): Route;
|
|
28
|
+
/**
|
|
29
|
+
* Register a new POST route
|
|
30
|
+
* Laravel: Route::post('/path', action)
|
|
31
|
+
*/
|
|
32
|
+
post(uri: string, action: RouteAction): Route;
|
|
33
|
+
/**
|
|
34
|
+
* Register a new PUT route
|
|
35
|
+
* Laravel: Route::put('/path', action)
|
|
36
|
+
*/
|
|
37
|
+
put(uri: string, action: RouteAction): Route;
|
|
38
|
+
/**
|
|
39
|
+
* Register a new PATCH route
|
|
40
|
+
* Laravel: Route::patch('/path', action)
|
|
41
|
+
*/
|
|
42
|
+
patch(uri: string, action: RouteAction): Route;
|
|
43
|
+
/**
|
|
44
|
+
* Register a new DELETE route
|
|
45
|
+
* Laravel: Route::delete('/path', action)
|
|
46
|
+
*/
|
|
47
|
+
delete(uri: string, action: RouteAction): Route;
|
|
48
|
+
/**
|
|
49
|
+
* Register a new route responding to all verbs
|
|
50
|
+
* Laravel: Route::any('/path', action)
|
|
51
|
+
*/
|
|
52
|
+
any(uri: string, action: RouteAction): Route;
|
|
53
|
+
/**
|
|
54
|
+
* Register a new route with the given methods
|
|
55
|
+
* Laravel: Route::match(['get', 'post'], '/path', action)
|
|
56
|
+
*/
|
|
57
|
+
match(methods: HttpMethod[], uri: string, action: RouteAction): Route;
|
|
58
|
+
/**
|
|
59
|
+
* Add a route to the collection
|
|
60
|
+
*/
|
|
61
|
+
private addRoute;
|
|
62
|
+
/**
|
|
63
|
+
* Create a route group with shared attributes
|
|
64
|
+
* Laravel: Route::group(['middleware' => 'auth'], function() {...})
|
|
65
|
+
*/
|
|
66
|
+
group(attributes: RouteGroupAttributes, callback: () => void): void;
|
|
67
|
+
/**
|
|
68
|
+
* Register a route with a name
|
|
69
|
+
* Laravel: Route::get('/users', action)->name('users.index')
|
|
70
|
+
*/
|
|
71
|
+
name(name: string, route: Route): void;
|
|
72
|
+
/**
|
|
73
|
+
* Get a route by name
|
|
74
|
+
*/
|
|
75
|
+
getByName(name: string): Route | undefined;
|
|
76
|
+
/**
|
|
77
|
+
* Apply group attributes to a route
|
|
78
|
+
*/
|
|
79
|
+
private applyGroupAttributes;
|
|
80
|
+
/**
|
|
81
|
+
* Get the prefix from the last group on the stack
|
|
82
|
+
*/
|
|
83
|
+
private prefix;
|
|
84
|
+
/**
|
|
85
|
+
* Determine if the router currently has a group stack
|
|
86
|
+
*/
|
|
87
|
+
private hasGroupStack;
|
|
88
|
+
/**
|
|
89
|
+
* Find the route matching a given request
|
|
90
|
+
*/
|
|
91
|
+
findRoute(method: string, path: string): Route | null;
|
|
92
|
+
/**
|
|
93
|
+
* Dispatch the request to a route
|
|
94
|
+
*/
|
|
95
|
+
dispatch(req: Request, res: Response): Promise<void>;
|
|
96
|
+
/**
|
|
97
|
+
* Run the route middleware pipeline
|
|
98
|
+
*/
|
|
99
|
+
private runMiddleware;
|
|
100
|
+
/**
|
|
101
|
+
* Run the route action
|
|
102
|
+
*/
|
|
103
|
+
private runRoute;
|
|
104
|
+
/**
|
|
105
|
+
* Call a controller action
|
|
106
|
+
* Laravel: 'UserController@index'
|
|
107
|
+
*/
|
|
108
|
+
private callControllerAction;
|
|
109
|
+
/**
|
|
110
|
+
* Get all registered routes
|
|
111
|
+
*/
|
|
112
|
+
getRoutes(): Route[];
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=Router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Router.d.ts","sourceRoot":"","sources":["../../src/Routing/Router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,WAAW,CAAiC;gBAExC,GAAG,EAAE,WAAW;IAI5B;;;OAGG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,KAAK;IAI5C;;;OAGG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,KAAK;IAI7C;;;OAGG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,KAAK;IAI5C;;;OAGG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,KAAK;IAI9C;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,KAAK;IAI/C;;;OAGG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,KAAK;IAI5C;;;OAGG;IACH,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,KAAK;IAIrE;;OAEG;IACH,OAAO,CAAC,QAAQ;IAahB;;;OAGG;IACH,KAAK,CAAC,UAAU,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAMnE;;;OAGG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAKtC;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAI1C;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAS5B;;OAEG;IACH,OAAO,CAAC,MAAM;IASd;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI;IAWrD;;OAEG;IACG,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB1D;;OAEG;YACW,aAAa;IAqB3B;;OAEG;YACW,QAAQ;IAmBtB;;;OAGG;YACW,oBAAoB;IAWlC;;OAEG;IACH,SAAS,IAAI,KAAK,EAAE;CAGrB"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Router = void 0;
|
|
4
|
+
const Route_1 = require("./Route");
|
|
5
|
+
/**
|
|
6
|
+
* Router - Laravel's routing system
|
|
7
|
+
* Illuminate\Routing\Router
|
|
8
|
+
*/
|
|
9
|
+
class Router {
|
|
10
|
+
app;
|
|
11
|
+
routes = [];
|
|
12
|
+
groupStack = [];
|
|
13
|
+
namedRoutes = new Map();
|
|
14
|
+
constructor(app) {
|
|
15
|
+
this.app = app;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Register a new GET route
|
|
19
|
+
* Laravel: Route::get('/path', action)
|
|
20
|
+
*/
|
|
21
|
+
get(uri, action) {
|
|
22
|
+
return this.addRoute(['GET', 'HEAD'], uri, action);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Register a new POST route
|
|
26
|
+
* Laravel: Route::post('/path', action)
|
|
27
|
+
*/
|
|
28
|
+
post(uri, action) {
|
|
29
|
+
return this.addRoute(['POST'], uri, action);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Register a new PUT route
|
|
33
|
+
* Laravel: Route::put('/path', action)
|
|
34
|
+
*/
|
|
35
|
+
put(uri, action) {
|
|
36
|
+
return this.addRoute(['PUT'], uri, action);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Register a new PATCH route
|
|
40
|
+
* Laravel: Route::patch('/path', action)
|
|
41
|
+
*/
|
|
42
|
+
patch(uri, action) {
|
|
43
|
+
return this.addRoute(['PATCH'], uri, action);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Register a new DELETE route
|
|
47
|
+
* Laravel: Route::delete('/path', action)
|
|
48
|
+
*/
|
|
49
|
+
delete(uri, action) {
|
|
50
|
+
return this.addRoute(['DELETE'], uri, action);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Register a new route responding to all verbs
|
|
54
|
+
* Laravel: Route::any('/path', action)
|
|
55
|
+
*/
|
|
56
|
+
any(uri, action) {
|
|
57
|
+
return this.addRoute(['GET', 'HEAD', 'POST', 'PUT', 'PATCH', 'DELETE'], uri, action);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Register a new route with the given methods
|
|
61
|
+
* Laravel: Route::match(['get', 'post'], '/path', action)
|
|
62
|
+
*/
|
|
63
|
+
match(methods, uri, action) {
|
|
64
|
+
return this.addRoute(methods, uri, action);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Add a route to the collection
|
|
68
|
+
*/
|
|
69
|
+
addRoute(methods, uri, action) {
|
|
70
|
+
const route = new Route_1.Route(methods, this.prefix(uri), action);
|
|
71
|
+
// Apply group middleware
|
|
72
|
+
if (this.hasGroupStack()) {
|
|
73
|
+
this.applyGroupAttributes(route);
|
|
74
|
+
}
|
|
75
|
+
this.routes.push(route);
|
|
76
|
+
return route;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Create a route group with shared attributes
|
|
80
|
+
* Laravel: Route::group(['middleware' => 'auth'], function() {...})
|
|
81
|
+
*/
|
|
82
|
+
group(attributes, callback) {
|
|
83
|
+
this.groupStack.push(attributes);
|
|
84
|
+
callback();
|
|
85
|
+
this.groupStack.pop();
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Register a route with a name
|
|
89
|
+
* Laravel: Route::get('/users', action)->name('users.index')
|
|
90
|
+
*/
|
|
91
|
+
name(name, route) {
|
|
92
|
+
this.namedRoutes.set(name, route);
|
|
93
|
+
route.setName(name);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get a route by name
|
|
97
|
+
*/
|
|
98
|
+
getByName(name) {
|
|
99
|
+
return this.namedRoutes.get(name);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Apply group attributes to a route
|
|
103
|
+
*/
|
|
104
|
+
applyGroupAttributes(route) {
|
|
105
|
+
for (const group of this.groupStack) {
|
|
106
|
+
if (group.middleware) {
|
|
107
|
+
const middleware = Array.isArray(group.middleware) ? group.middleware : [group.middleware];
|
|
108
|
+
route.addMiddleware(middleware);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Get the prefix from the last group on the stack
|
|
114
|
+
*/
|
|
115
|
+
prefix(uri) {
|
|
116
|
+
const prefix = this.groupStack
|
|
117
|
+
.filter(group => group.prefix)
|
|
118
|
+
.map(group => group.prefix)
|
|
119
|
+
.join('/');
|
|
120
|
+
return prefix ? `/${prefix}/${uri}`.replace(/\/+/g, '/') : uri;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Determine if the router currently has a group stack
|
|
124
|
+
*/
|
|
125
|
+
hasGroupStack() {
|
|
126
|
+
return this.groupStack.length > 0;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Find the route matching a given request
|
|
130
|
+
*/
|
|
131
|
+
findRoute(method, path) {
|
|
132
|
+
for (const route of this.routes) {
|
|
133
|
+
if (route.matches(method, path)) {
|
|
134
|
+
route.bind(path);
|
|
135
|
+
return route;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Dispatch the request to a route
|
|
142
|
+
*/
|
|
143
|
+
async dispatch(req, res) {
|
|
144
|
+
const route = this.findRoute(req.method, req.path);
|
|
145
|
+
if (!route) {
|
|
146
|
+
res.status(404).send('Not Found');
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
// Store the route on the request
|
|
150
|
+
req.route = route;
|
|
151
|
+
req.params = route.getParameters();
|
|
152
|
+
try {
|
|
153
|
+
// Run through middleware pipeline
|
|
154
|
+
await this.runMiddleware(route, req, res, async () => {
|
|
155
|
+
// Execute the route action
|
|
156
|
+
await this.runRoute(route, req, res);
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
res.status(500).send(error instanceof Error ? error.message : 'Internal Server Error');
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Run the route middleware pipeline
|
|
165
|
+
*/
|
|
166
|
+
async runMiddleware(route, req, res, finalHandler) {
|
|
167
|
+
const middleware = [...route.middleware];
|
|
168
|
+
const runNext = async (index) => {
|
|
169
|
+
if (index >= middleware.length) {
|
|
170
|
+
await finalHandler();
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
const currentMiddleware = middleware[index];
|
|
174
|
+
await currentMiddleware(req, res, () => runNext(index + 1));
|
|
175
|
+
};
|
|
176
|
+
await runNext(0);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Run the route action
|
|
180
|
+
*/
|
|
181
|
+
async runRoute(route, req, res) {
|
|
182
|
+
const action = route.action;
|
|
183
|
+
let result;
|
|
184
|
+
if (typeof action === 'function') {
|
|
185
|
+
// Direct closure
|
|
186
|
+
result = await action(req, res);
|
|
187
|
+
}
|
|
188
|
+
else if (typeof action === 'string') {
|
|
189
|
+
// Controller@method string
|
|
190
|
+
result = await this.callControllerAction(action, req, res);
|
|
191
|
+
}
|
|
192
|
+
// If the handler returned a value and response wasn't sent, send it
|
|
193
|
+
if (result !== undefined && !res.finished) {
|
|
194
|
+
res.send(result);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Call a controller action
|
|
199
|
+
* Laravel: 'UserController@index'
|
|
200
|
+
*/
|
|
201
|
+
async callControllerAction(action, req, res) {
|
|
202
|
+
const [controllerName, methodName] = action.split('@');
|
|
203
|
+
// This would normally resolve the controller from the container
|
|
204
|
+
// For now, throw an error indicating controllers need to be registered
|
|
205
|
+
throw new Error(`Controller action [${action}] not yet implemented. ` +
|
|
206
|
+
`Use closures or register controllers in the container.`);
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Get all registered routes
|
|
210
|
+
*/
|
|
211
|
+
getRoutes() {
|
|
212
|
+
return this.routes;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
exports.Router = Router;
|
|
216
|
+
//# sourceMappingURL=Router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Router.js","sourceRoot":"","sources":["../../src/Routing/Router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Application } from '../Foundation/Application';
|
|
2
|
+
/**
|
|
3
|
+
* Facade - Laravel's Facade base class
|
|
4
|
+
* Provides static proxy to underlying service in the container
|
|
5
|
+
*/
|
|
6
|
+
export declare abstract class Facade {
|
|
7
|
+
private static app;
|
|
8
|
+
private static resolvedInstances;
|
|
9
|
+
/**
|
|
10
|
+
* Set the application instance for facades
|
|
11
|
+
*/
|
|
12
|
+
static setFacadeApplication(app: Application): void;
|
|
13
|
+
/**
|
|
14
|
+
* Get the application instance
|
|
15
|
+
*/
|
|
16
|
+
static getFacadeApplication(): Application;
|
|
17
|
+
/**
|
|
18
|
+
* Get the registered name of the component
|
|
19
|
+
* This should be overridden by child classes
|
|
20
|
+
*/
|
|
21
|
+
protected static getFacadeAccessor(): string;
|
|
22
|
+
/**
|
|
23
|
+
* Resolve the facade root instance from the container
|
|
24
|
+
*/
|
|
25
|
+
protected static resolveFacadeInstance(name: string): any;
|
|
26
|
+
/**
|
|
27
|
+
* Get the root object behind the facade
|
|
28
|
+
*/
|
|
29
|
+
protected static getFacadeRoot(): any;
|
|
30
|
+
/**
|
|
31
|
+
* Clear a resolved facade instance
|
|
32
|
+
*/
|
|
33
|
+
static clearResolvedInstance(name: string): void;
|
|
34
|
+
/**
|
|
35
|
+
* Clear all resolved instances
|
|
36
|
+
*/
|
|
37
|
+
static clearResolvedInstances(): void;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Create a Facade class dynamically with proxy support
|
|
41
|
+
* This allows calling methods statically: MyFacade.method()
|
|
42
|
+
*/
|
|
43
|
+
export declare function createFacade<T extends object>(accessor: string): new () => T;
|
|
44
|
+
//# sourceMappingURL=Facade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Facade.d.ts","sourceRoot":"","sources":["../../src/Support/Facade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD;;;GAGG;AACH,8BAAsB,MAAM;IAC1B,OAAO,CAAC,MAAM,CAAC,GAAG,CAAc;IAChC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAA+B;IAE/D;;OAEG;IACH,MAAM,CAAC,oBAAoB,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI;IAInD;;OAEG;IACH,MAAM,CAAC,oBAAoB,IAAI,WAAW;IAI1C;;;OAGG;IACH,SAAS,CAAC,MAAM,CAAC,iBAAiB,IAAI,MAAM;IAI5C;;OAEG;IACH,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG;IAczD;;OAEG;IACH,SAAS,CAAC,MAAM,CAAC,aAAa,IAAI,GAAG;IAIrC;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIhD;;OAEG;IACH,MAAM,CAAC,sBAAsB,IAAI,IAAI;CAGtC;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAC,CAkC5E"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Facade = void 0;
|
|
4
|
+
exports.createFacade = createFacade;
|
|
5
|
+
/**
|
|
6
|
+
* Facade - Laravel's Facade base class
|
|
7
|
+
* Provides static proxy to underlying service in the container
|
|
8
|
+
*/
|
|
9
|
+
class Facade {
|
|
10
|
+
static app;
|
|
11
|
+
static resolvedInstances = new Map();
|
|
12
|
+
/**
|
|
13
|
+
* Set the application instance for facades
|
|
14
|
+
*/
|
|
15
|
+
static setFacadeApplication(app) {
|
|
16
|
+
Facade.app = app;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Get the application instance
|
|
20
|
+
*/
|
|
21
|
+
static getFacadeApplication() {
|
|
22
|
+
return Facade.app;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get the registered name of the component
|
|
26
|
+
* This should be overridden by child classes
|
|
27
|
+
*/
|
|
28
|
+
static getFacadeAccessor() {
|
|
29
|
+
throw new Error('Facade does not implement getFacadeAccessor method.');
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Resolve the facade root instance from the container
|
|
33
|
+
*/
|
|
34
|
+
static resolveFacadeInstance(name) {
|
|
35
|
+
if (Facade.resolvedInstances.has(name)) {
|
|
36
|
+
return Facade.resolvedInstances.get(name);
|
|
37
|
+
}
|
|
38
|
+
if (Facade.app) {
|
|
39
|
+
const instance = Facade.app.make(name);
|
|
40
|
+
Facade.resolvedInstances.set(name, instance);
|
|
41
|
+
return instance;
|
|
42
|
+
}
|
|
43
|
+
throw new Error('A facade root has not been set.');
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get the root object behind the facade
|
|
47
|
+
*/
|
|
48
|
+
static getFacadeRoot() {
|
|
49
|
+
return Facade.resolveFacadeInstance(this.getFacadeAccessor());
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Clear a resolved facade instance
|
|
53
|
+
*/
|
|
54
|
+
static clearResolvedInstance(name) {
|
|
55
|
+
Facade.resolvedInstances.delete(name);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Clear all resolved instances
|
|
59
|
+
*/
|
|
60
|
+
static clearResolvedInstances() {
|
|
61
|
+
Facade.resolvedInstances.clear();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.Facade = Facade;
|
|
65
|
+
/**
|
|
66
|
+
* Create a Facade class dynamically with proxy support
|
|
67
|
+
* This allows calling methods statically: MyFacade.method()
|
|
68
|
+
*/
|
|
69
|
+
function createFacade(accessor) {
|
|
70
|
+
class DynamicFacade extends Facade {
|
|
71
|
+
static getFacadeAccessor() {
|
|
72
|
+
return accessor;
|
|
73
|
+
}
|
|
74
|
+
constructor() {
|
|
75
|
+
super();
|
|
76
|
+
return new Proxy(this, {
|
|
77
|
+
get(target, prop, receiver) {
|
|
78
|
+
const root = DynamicFacade.getFacadeRoot();
|
|
79
|
+
if (root && typeof root[prop] === 'function') {
|
|
80
|
+
return (...args) => root[prop](...args);
|
|
81
|
+
}
|
|
82
|
+
return root[prop];
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Create a Proxy on the class itself for static method calls
|
|
88
|
+
return new Proxy(DynamicFacade, {
|
|
89
|
+
get(target, prop) {
|
|
90
|
+
if (prop in target) {
|
|
91
|
+
return target[prop];
|
|
92
|
+
}
|
|
93
|
+
const root = target.getFacadeRoot();
|
|
94
|
+
if (root && typeof root[prop] === 'function') {
|
|
95
|
+
return (...args) => root[prop](...args);
|
|
96
|
+
}
|
|
97
|
+
return root[prop];
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=Facade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Facade.js","sourceRoot":"","sources":["../../src/Support/Facade.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Laravel-Next - A 1:1 Laravel replica in TypeScript
|
|
3
|
+
* Main exports
|
|
4
|
+
*/
|
|
5
|
+
export { Application } from './Foundation/Application';
|
|
6
|
+
export { ServiceProvider } from './Foundation/ServiceProvider';
|
|
7
|
+
export { Kernel } from './Foundation/Http/Kernel';
|
|
8
|
+
export { Container } from './Container/Container';
|
|
9
|
+
export { Router } from './Routing/Router';
|
|
10
|
+
export { Route as RouteClass } from './Routing/Route';
|
|
11
|
+
export { Request } from './Routing/Request';
|
|
12
|
+
export { Response } from './Routing/Response';
|
|
13
|
+
export { Controller } from './Routing/Controller';
|
|
14
|
+
export { Facade } from './Support/Facade';
|
|
15
|
+
export { Route } from './Facades/Route';
|
|
16
|
+
export { RouteServiceProvider } from './Providers/RouteServiceProvider';
|
|
17
|
+
export type { HttpMethod, RouteAction, Middleware } from './Routing/Route';
|
|
18
|
+
export type { Abstract, Concrete, Binding } from './Container/Container';
|
|
19
|
+
export type { CookieOptions } from './Routing/Response';
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAGlD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGlD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGlD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAGxE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC3E,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACzE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Laravel-Next - A 1:1 Laravel replica in TypeScript
|
|
4
|
+
* Main exports
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.RouteServiceProvider = exports.Route = exports.Facade = exports.Controller = exports.Response = exports.Request = exports.RouteClass = exports.Router = exports.Container = exports.Kernel = exports.ServiceProvider = exports.Application = void 0;
|
|
8
|
+
// Foundation
|
|
9
|
+
var Application_1 = require("./Foundation/Application");
|
|
10
|
+
Object.defineProperty(exports, "Application", { enumerable: true, get: function () { return Application_1.Application; } });
|
|
11
|
+
var ServiceProvider_1 = require("./Foundation/ServiceProvider");
|
|
12
|
+
Object.defineProperty(exports, "ServiceProvider", { enumerable: true, get: function () { return ServiceProvider_1.ServiceProvider; } });
|
|
13
|
+
var Kernel_1 = require("./Foundation/Http/Kernel");
|
|
14
|
+
Object.defineProperty(exports, "Kernel", { enumerable: true, get: function () { return Kernel_1.Kernel; } });
|
|
15
|
+
// Container
|
|
16
|
+
var Container_1 = require("./Container/Container");
|
|
17
|
+
Object.defineProperty(exports, "Container", { enumerable: true, get: function () { return Container_1.Container; } });
|
|
18
|
+
// Routing
|
|
19
|
+
var Router_1 = require("./Routing/Router");
|
|
20
|
+
Object.defineProperty(exports, "Router", { enumerable: true, get: function () { return Router_1.Router; } });
|
|
21
|
+
var Route_1 = require("./Routing/Route");
|
|
22
|
+
Object.defineProperty(exports, "RouteClass", { enumerable: true, get: function () { return Route_1.Route; } });
|
|
23
|
+
var Request_1 = require("./Routing/Request");
|
|
24
|
+
Object.defineProperty(exports, "Request", { enumerable: true, get: function () { return Request_1.Request; } });
|
|
25
|
+
var Response_1 = require("./Routing/Response");
|
|
26
|
+
Object.defineProperty(exports, "Response", { enumerable: true, get: function () { return Response_1.Response; } });
|
|
27
|
+
var Controller_1 = require("./Routing/Controller");
|
|
28
|
+
Object.defineProperty(exports, "Controller", { enumerable: true, get: function () { return Controller_1.Controller; } });
|
|
29
|
+
// Facades
|
|
30
|
+
var Facade_1 = require("./Support/Facade");
|
|
31
|
+
Object.defineProperty(exports, "Facade", { enumerable: true, get: function () { return Facade_1.Facade; } });
|
|
32
|
+
var Route_2 = require("./Facades/Route");
|
|
33
|
+
Object.defineProperty(exports, "Route", { enumerable: true, get: function () { return Route_2.Route; } });
|
|
34
|
+
// Providers
|
|
35
|
+
var RouteServiceProvider_1 = require("./Providers/RouteServiceProvider");
|
|
36
|
+
Object.defineProperty(exports, "RouteServiceProvider", { enumerable: true, get: function () { return RouteServiceProvider_1.RouteServiceProvider; } });
|
|
37
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,aAAa;AACb,wDAAuD;AAA9C,0GAAA,WAAW,OAAA;AACpB,gEAA+D;AAAtD,kHAAA,eAAe,OAAA;AACxB,mDAAkD;AAAzC,gGAAA,MAAM,OAAA;AAEf,YAAY;AACZ,mDAAkD;AAAzC,sGAAA,SAAS,OAAA;AAElB,UAAU;AACV,2CAA0C;AAAjC,gGAAA,MAAM,OAAA;AACf,yCAAsD;AAA7C,mGAAA,KAAK,OAAc;AAC5B,6CAA4C;AAAnC,kGAAA,OAAO,OAAA;AAChB,+CAA8C;AAArC,oGAAA,QAAQ,OAAA;AACjB,mDAAkD;AAAzC,wGAAA,UAAU,OAAA;AAEnB,UAAU;AACV,2CAA0C;AAAjC,gGAAA,MAAM,OAAA;AACf,yCAAwC;AAA/B,8FAAA,KAAK,OAAA;AAEd,YAAY;AACZ,yEAAwE;AAA/D,4HAAA,oBAAoB,OAAA"}
|