🏛️ sdasx

teste1w12sqw12

12e1x12s12s

12312312312312312312

📦 Resource Package (src/resource/)

All operations on resources go through the Handlers system — an onion/middleware model where each handler can run before, after, or produce the response. Handlers use next() to delegate to the next handler in the chain.

BCause Resource Engine

resource/
├── types.ts          Resource, ResourceStore, User
├── result.ts         HandlerResult, ok(), fail(), isError()
├── handlers.ts       createHandlers() — onion/next() model
├── matcher.ts        createMatcher() — pattern matching
├── engine.ts         createResourceEngine() + ResourceEngine interface
├── http.ts           createHttpHandler() + resultToResponse()
└── index.ts          barrel exports

Interactive Counter

This sliver is hydrated on the client.

0

⚡ Request Flow11wswqq

🔗 Handlers System

// Register for multiple actions
engine.handlers.on('render', 'GET', ['render', 'default'], handler, {
    resourceType: 'Page'
});

// BEFORE — check, then call next()
engine.handlers.on('auth', 'POST', '*', async (ctx, next) => {
    if (!ctx.user) return fail('Unauthorized', 401);
    return next();
}, { priority: 100 });
HTTP Request
  → createHttpHandler(engine)
    → path = URL pathname (JCR-style)
    → action = ?action= or 'default'
    → engine.resolve(path)  [virtuals → D1 store]
    → handlers.execute({ method, action, resource })
      → onion chain: auth → validate → handler → audit
        → HandlerResult → resultToResponse() → Response

Handlers use the onion/next() pattern. Priority determines wrapping order: highest priority = outermost layer. Handlers return HandlerResult — ok(data) or fail(error) — not Response objects.