@rudderjs/core 0.1.1 → 0.1.2
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
CHANGED
|
@@ -26,7 +26,12 @@ export default Application.configure({
|
|
|
26
26
|
commands: () => import('../routes/console.js'),
|
|
27
27
|
})
|
|
28
28
|
.withMiddleware((m) => {
|
|
29
|
+
// Global — runs on every request
|
|
29
30
|
m.use(RateLimit.perMinute(60))
|
|
31
|
+
|
|
32
|
+
// Group-scoped — only runs on routes loaded via withRouting({ web } / { api })
|
|
33
|
+
m.web(CsrfMiddleware())
|
|
34
|
+
m.api(RateLimit.perMinute(120))
|
|
30
35
|
})
|
|
31
36
|
.withExceptions((e) => {
|
|
32
37
|
// Custom error type → custom response
|
|
@@ -53,6 +58,7 @@ export default Application.configure({
|
|
|
53
58
|
- `Application`, `AppConfig`
|
|
54
59
|
- `ConfigureOptions`, `RoutingOptions`
|
|
55
60
|
- `MiddlewareConfigurator`, `ExceptionConfigurator`
|
|
61
|
+
- `appendToGroup(group, handler)` — provider-facing helper to install middleware into the `web` or `api` group
|
|
56
62
|
- `AppBuilder`, `RudderJS`
|
|
57
63
|
- `app()`, `resolve()`
|
|
58
64
|
- `defineConfig()`
|
|
@@ -74,6 +80,32 @@ export default Application.configure({
|
|
|
74
80
|
- `ConfigureOptions`
|
|
75
81
|
- `server`, `config?`, `providers?`
|
|
76
82
|
|
|
83
|
+
## Middleware Groups
|
|
84
|
+
|
|
85
|
+
Routes loaded via `withRouting({ web })` are tagged `web`; via `withRouting({ api })` tagged `api`. The server adapter prepends the matching group's middleware stack before per-route middleware — Laravel-style.
|
|
86
|
+
|
|
87
|
+
```ts
|
|
88
|
+
.withMiddleware((m) => {
|
|
89
|
+
m.use(RateLimit.perMinute(60)) // global — every request
|
|
90
|
+
m.web(CsrfMiddleware()) // only on web routes
|
|
91
|
+
m.api(RateLimit.perMinute(120)) // only on api routes
|
|
92
|
+
})
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**Execution order:** `m.use(...)` → group (`m.web` / `m.api`) → per-route middleware → handler.
|
|
96
|
+
|
|
97
|
+
Framework packages install into a group during `boot()` via `appendToGroup('web', handler)` from `@rudderjs/core` — this is how `@rudderjs/session` and `@rudderjs/auth` keep session + user resolution on web routes only, leaving api routes stateless by default.
|
|
98
|
+
|
|
99
|
+
```ts
|
|
100
|
+
import { ServiceProvider, appendToGroup } from '@rudderjs/core'
|
|
101
|
+
|
|
102
|
+
export class MyPackageProvider extends ServiceProvider {
|
|
103
|
+
async boot() {
|
|
104
|
+
appendToGroup('web', myWebOnlyMiddleware)
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
77
109
|
## Dynamic Provider Registration
|
|
78
110
|
|
|
79
111
|
Providers can register other providers at runtime — useful for modules, conditional features, and package composition:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-providers.d.ts","sourceRoot":"","sources":["../src/default-providers.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAoB,MAAM,wBAAwB,CAAA;AAI7E,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,EAAE,WAAW,KAAK,eAAe,CAAA;AAErE,MAAM,WAAW,uBAAuB;IACtC,wEAAwE;IACxE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAChB;
|
|
1
|
+
{"version":3,"file":"default-providers.d.ts","sourceRoot":"","sources":["../src/default-providers.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAoB,MAAM,wBAAwB,CAAA;AAI7E,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,EAAE,WAAW,KAAK,eAAe,CAAA;AAErE,MAAM,WAAW,uBAAuB;IACtC,wEAAwE;IACxE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAChB;AASD,4FAA4F;AAC5F,wBAAgB,4BAA4B,IAAI,aAAa,EAAE,CAE9D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CA0DtG"}
|
|
@@ -5,11 +5,14 @@
|
|
|
5
5
|
import { resolveOptionalPeer, config } from '@rudderjs/support';
|
|
6
6
|
import { BUILTIN_REGISTRY } from './provider-registry.js';
|
|
7
7
|
import { sortByStageAndDepends } from './provider-sort.js';
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
// Cached on globalThis (not a module-level let) because Vite SSR can isolate the
|
|
9
|
+
// writer (bootstrap/providers.ts) and the reader (Application._bootstrapProviders())
|
|
10
|
+
// into different module instances — the read would see [] and the boot log would
|
|
11
|
+
// silently not print. Same pattern as __rudderjs_app__, __rudderjs_telescope_recording__.
|
|
12
|
+
const LAST_LOADED_KEY = '__rudderjs_last_loaded_providers__';
|
|
10
13
|
/** @internal — read by Application._bootstrapProviders() to print the dev-mode boot log. */
|
|
11
14
|
export function getLastLoadedProviderEntries() {
|
|
12
|
-
return
|
|
15
|
+
return globalThis[LAST_LOADED_KEY] ?? [];
|
|
13
16
|
}
|
|
14
17
|
/**
|
|
15
18
|
* Returns the framework's default provider classes, sorted by stage + depends.
|
|
@@ -91,7 +94,8 @@ export async function defaultProviders(options = {}) {
|
|
|
91
94
|
providers.push(ProviderClass);
|
|
92
95
|
loaded.push(entry);
|
|
93
96
|
}
|
|
94
|
-
|
|
97
|
+
;
|
|
98
|
+
globalThis[LAST_LOADED_KEY] = loaded;
|
|
95
99
|
return providers;
|
|
96
100
|
}
|
|
97
101
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-providers.js","sourceRoot":"","sources":["../src/default-providers.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,+EAA+E;AAC/E,+EAA+E;AAC/E,mEAAmE;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAI/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAS1D,
|
|
1
|
+
{"version":3,"file":"default-providers.js","sourceRoot":"","sources":["../src/default-providers.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rudderjs/core",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -31,10 +31,10 @@
|
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"reflect-metadata": "^0.2.2",
|
|
33
33
|
"zod": "^4.0.0",
|
|
34
|
-
"@rudderjs/rudder": "0.0.3",
|
|
35
|
-
"@rudderjs/
|
|
36
|
-
"@rudderjs/
|
|
37
|
-
"@rudderjs/support": "0.0.4"
|
|
34
|
+
"@rudderjs/rudder": "^0.0.3",
|
|
35
|
+
"@rudderjs/contracts": "^0.2.0",
|
|
36
|
+
"@rudderjs/router": "^0.3.1",
|
|
37
|
+
"@rudderjs/support": "^0.0.4"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@types/node": "^20.0.0",
|