@stacksjs/router 0.75.190 → 0.75.192
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/dist/body.d.ts +2 -0
- package/dist/body.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/package.json +16 -16
package/dist/body.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export declare function readJsonBody(request: Request, maxBytes?: unknown): Promise<unknown>;
|
|
2
|
+
/** Bounded UTF-8 for form and text protocols, counted from actual streamed bytes. */
|
|
3
|
+
export declare function readTextBody(request: Request, maxBytes?: unknown): Promise<string>;
|
|
2
4
|
/** Bounded body reads for protocol handlers that need the original wire body. */
|
|
3
5
|
export declare class RequestBodyError extends Error {
|
|
4
6
|
readonly status: 400 | 413 | 415;
|
package/dist/body.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export class RequestBodyError extends Error{status;constructor(message,status){super(message);this.status=status;this.name="RequestBodyError"}}export async function readJsonBody(request,maxBytes=1048576){if(!Number.isSafeInteger(maxBytes)||maxBytes<1)throw RangeError("maxBytes must be a positive safe integer");if(request.headers.get("content-type")?.split(";")[0]?.trim().toLowerCase()!=="application/json")throw new RequestBodyError("Content-Type must be application/json",415);const declared=request.headers.get("content-length");if(declared&&(!/^\d+$/.test(declared)||Number(declared)>maxBytes))throw new RequestBodyError("Request body is too large",413);if(!request.body)throw new RequestBodyError("Send a
|
|
1
|
+
export class RequestBodyError extends Error{status;constructor(message,status){super(message);this.status=status;this.name="RequestBodyError"}}export async function readJsonBody(request,maxBytes=1048576){if(!Number.isSafeInteger(maxBytes)||maxBytes<1)throw RangeError("maxBytes must be a positive safe integer");if(request.headers.get("content-type")?.split(";")[0]?.trim().toLowerCase()!=="application/json")throw new RequestBodyError("Content-Type must be application/json",415);const text=await readTextBody(request,maxBytes);try{return JSON.parse(text)}catch{throw new RequestBodyError("Send valid UTF-8 JSON",400)}}export async function readTextBody(request,maxBytes=1048576){if(!Number.isSafeInteger(maxBytes)||maxBytes<1)throw RangeError("maxBytes must be a positive safe integer");const declared=request.headers.get("content-length");if(declared&&(!/^\d+$/.test(declared)||Number(declared)>maxBytes))throw new RequestBodyError("Request body is too large",413);if(!request.body)throw new RequestBodyError("Send a request body",400);const reader=request.body.getReader();let bytes=new Uint8Array(Math.min(maxBytes,8192)),size=0;try{while(!0){const{done,value}=await reader.read();if(done)break;const offset=size;size+=value.byteLength;if(size>maxBytes){reader.cancel().catch(()=>{});throw new RequestBodyError("Request body is too large",413)}if(size>bytes.length){const grown=new Uint8Array(Math.min(maxBytes,Math.max(size,bytes.length*2)));grown.set(bytes);bytes=grown}bytes.set(value,offset)}}finally{reader.releaseLock()}try{return new TextDecoder("utf-8",{fatal:!0}).decode(bytes.subarray(0,size))}catch{throw new RequestBodyError("Send valid UTF-8",400)}}
|
package/dist/index.d.ts
CHANGED
|
@@ -26,7 +26,7 @@ export type {
|
|
|
26
26
|
SessionStore,
|
|
27
27
|
StacksSessionConfig,
|
|
28
28
|
} from './session-factory';
|
|
29
|
-
export { readJsonBody, RequestBodyError } from './body';
|
|
29
|
+
export { readJsonBody, readTextBody, RequestBodyError } from './body';
|
|
30
30
|
// Re-export everything from bun-router (includes response factory)
|
|
31
31
|
export * from '@stacksjs/bun-router';
|
|
32
32
|
// Export Stacks-specific action resolver and URL helper
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./request-augmentation";export{readJsonBody,RequestBodyError}from"./body";export*from"@stacksjs/bun-router";export{assertRouteMiddlewareResolvable,configureViewDirectories,clearCsrfModuleCache,clearMiddlewareCache,createStacksRouter,disableViewRouting,enhanceRequest,findUnresolvableRouteMiddleware,installMiddlewareHotReload,loadMiddlewareHandlers,resetBootHooks,route,runBootHooks,serve,serverResponse,url,warnOnMultipleRouterInstances}from"./stacks-router";export{cacheRequestQuery,clearCurrentRequest,getCurrentRequest,getTraceId,request,runWithRequest,setCurrentRequest,withTraceId}from"./request-context";export{defineMiddleware,Middleware}from"./middleware";export{appRouteRegistry,bundleMounts,DEFAULT_ROUTE_BUNDLE_FEATURES,DEFAULT_ROUTE_REGISTRY,listRootMountedAppRoutes,loadRoutes,mountedDefaultRouteBundles}from"./route-loader";export{clearTrackedQueries,createErrorResponse,createMiddlewareErrorResponse,createNotFoundResponse,createValidationErrorResponse,getQueryShapeCounts,trackQuery}from"./error-handler";export{listNamedRoutes,listRegisteredRoutes,routeParams}from"./stacks-router";export{DASHBOARD_ROUTE_GROUPS,dashboardGroupMiddleware,describeUnknownDashboardGroups,resolveDashboardAccess}from"./dashboard-access";export{isRouterAction,wrapAction}from"./stacks-router";export{createTypedRouter}from"./typed-router";export{clearRouteModelBindings,defineRouteModelBinding,resolveRouteModel,routeModelBindings,setRouteModelFallback}from"./route-model-binding";export{isApiRequest,JSON_CONTENT_TYPE}from"./api-shape";export{rateLimit,rateLimitStatus,clearRateLimit}from"./rate-limit";export{PathParamError,safePathParam,sanitizePathParam}from"./path-sanitize";export{checkApplicationHealth,runHealthProbes}from"./health";export{stream}from"./stacks-router";export{signedUrl,signUrl,verifySignedUrl,verifySignedUrlMiddleware}from"./signed-url";export{EncryptedSessionStore}from"./encrypted-session-store";export{createSessionStore,createStacksSessionStore,DatabaseSessionStore,FileSessionStore,MemorySessionStore,RedisSessionStore}from"./session-factory";
|
|
1
|
+
import"./request-augmentation";export{readJsonBody,readTextBody,RequestBodyError}from"./body";export*from"@stacksjs/bun-router";export{assertRouteMiddlewareResolvable,configureViewDirectories,clearCsrfModuleCache,clearMiddlewareCache,createStacksRouter,disableViewRouting,enhanceRequest,findUnresolvableRouteMiddleware,installMiddlewareHotReload,loadMiddlewareHandlers,resetBootHooks,route,runBootHooks,serve,serverResponse,url,warnOnMultipleRouterInstances}from"./stacks-router";export{cacheRequestQuery,clearCurrentRequest,getCurrentRequest,getTraceId,request,runWithRequest,setCurrentRequest,withTraceId}from"./request-context";export{defineMiddleware,Middleware}from"./middleware";export{appRouteRegistry,bundleMounts,DEFAULT_ROUTE_BUNDLE_FEATURES,DEFAULT_ROUTE_REGISTRY,listRootMountedAppRoutes,loadRoutes,mountedDefaultRouteBundles}from"./route-loader";export{clearTrackedQueries,createErrorResponse,createMiddlewareErrorResponse,createNotFoundResponse,createValidationErrorResponse,getQueryShapeCounts,trackQuery}from"./error-handler";export{listNamedRoutes,listRegisteredRoutes,routeParams}from"./stacks-router";export{DASHBOARD_ROUTE_GROUPS,dashboardGroupMiddleware,describeUnknownDashboardGroups,resolveDashboardAccess}from"./dashboard-access";export{isRouterAction,wrapAction}from"./stacks-router";export{createTypedRouter}from"./typed-router";export{clearRouteModelBindings,defineRouteModelBinding,resolveRouteModel,routeModelBindings,setRouteModelFallback}from"./route-model-binding";export{isApiRequest,JSON_CONTENT_TYPE}from"./api-shape";export{rateLimit,rateLimitStatus,clearRateLimit}from"./rate-limit";export{PathParamError,safePathParam,sanitizePathParam}from"./path-sanitize";export{checkApplicationHealth,runHealthProbes}from"./health";export{stream}from"./stacks-router";export{signedUrl,signUrl,verifySignedUrl,verifySignedUrlMiddleware}from"./signed-url";export{EncryptedSessionStore}from"./encrypted-session-store";export{createSessionStore,createStacksSessionStore,DatabaseSessionStore,FileSessionStore,MemorySessionStore,RedisSessionStore}from"./session-factory";
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@stacksjs/router",
|
|
3
3
|
"type": "module",
|
|
4
4
|
"sideEffects": false,
|
|
5
|
-
"version": "0.75.
|
|
5
|
+
"version": "0.75.192",
|
|
6
6
|
"description": "The Stacks framework router.",
|
|
7
7
|
"author": "Chris Breuer",
|
|
8
8
|
"contributors": [
|
|
@@ -67,27 +67,27 @@
|
|
|
67
67
|
},
|
|
68
68
|
"dependencies": {
|
|
69
69
|
"@stacksjs/bun-router": "^0.1.24",
|
|
70
|
-
"@stacksjs/cache": "0.75.
|
|
71
|
-
"@stacksjs/collections": "0.75.
|
|
72
|
-
"@stacksjs/config": "0.75.
|
|
73
|
-
"@stacksjs/error-handling": "0.75.
|
|
74
|
-
"@stacksjs/logging": "0.75.
|
|
75
|
-
"@stacksjs/pagination": "0.75.
|
|
76
|
-
"@stacksjs/path": "0.75.
|
|
77
|
-
"@stacksjs/security": "0.75.
|
|
78
|
-
"@stacksjs/storage": "0.75.
|
|
70
|
+
"@stacksjs/cache": "0.75.192",
|
|
71
|
+
"@stacksjs/collections": "0.75.192",
|
|
72
|
+
"@stacksjs/config": "0.75.192",
|
|
73
|
+
"@stacksjs/error-handling": "0.75.192",
|
|
74
|
+
"@stacksjs/logging": "0.75.192",
|
|
75
|
+
"@stacksjs/pagination": "0.75.192",
|
|
76
|
+
"@stacksjs/path": "0.75.192",
|
|
77
|
+
"@stacksjs/security": "0.75.192",
|
|
78
|
+
"@stacksjs/storage": "0.75.192",
|
|
79
79
|
"ts-rate-limiter": "^0.4.10"
|
|
80
80
|
},
|
|
81
81
|
"devDependencies": {
|
|
82
|
-
"@stacksjs/actions": "0.75.
|
|
83
|
-
"@stacksjs/types": "0.75.
|
|
82
|
+
"@stacksjs/actions": "0.75.192",
|
|
83
|
+
"@stacksjs/types": "0.75.192",
|
|
84
84
|
"better-dx": "^0.2.24"
|
|
85
85
|
},
|
|
86
86
|
"peerDependencies": {
|
|
87
|
-
"@stacksjs/api": "0.75.
|
|
88
|
-
"@stacksjs/auth": "0.75.
|
|
89
|
-
"@stacksjs/database": "0.75.
|
|
90
|
-
"@stacksjs/validation": "0.75.
|
|
87
|
+
"@stacksjs/api": "0.75.192",
|
|
88
|
+
"@stacksjs/auth": "0.75.192",
|
|
89
|
+
"@stacksjs/database": "0.75.192",
|
|
90
|
+
"@stacksjs/validation": "0.75.192"
|
|
91
91
|
},
|
|
92
92
|
"peerDependenciesMeta": {
|
|
93
93
|
"@stacksjs/api": {
|