@kabyeon/nexusjs 0.6.5 → 0.6.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 CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  **Bun Native Fullstack Framework** — NestJS structure × Adonis productivity × Hono edge performance.
4
4
 
5
- > **v0.6.5 — env-aware config + db:generate.** All 27 modules ship. Tier 1 and
5
+ > **v0.6.6 — env-aware config + db:generate.** All 27 modules ship. Tier 1 and
6
6
  > Tier 2 gaps from the NestJS / AdonisJS gap analyses are now fully
7
- > closed. The view engine has moved to `nexusjs/view` as its own bundle
7
+ > closed. The view engine has moved to `@kabyeon/nexusjs/view` as its own bundle
8
8
  > entry point, with Rendu (default), Edge, and Eta adapters. See
9
9
  > [CHANGELOG.md](./CHANGELOG.md) for the full v0.6 release notes.
10
10
 
@@ -19,35 +19,35 @@ fully closed.
19
19
 
20
20
  | Module | Purpose |
21
21
  | ------ | ------- |
22
- | `nexusjs` (core) | MVC + DI + validation + 3 routing styles + view engines + Inertia.js |
23
- | `nexusjs/cli` (`nx`) | Adonis ACE-style command runner — `new`, `init`, `make:*`, `migrate`, `info` |
24
- | `nexusjs/auth` | better-auth integration with `@CurrentUser` and `authMiddleware` |
25
- | `nexusjs/queue` | BullMQ + Cloudflare Queues + memory backends. `@OnQueueReady` decorator |
26
- | `nexusjs/schedule` | Custom cron parser. `@Cron` / `@Interval` / `@Timeout` decorators |
27
- | `nexusjs/events` | `NexusEventEmitter` with wildcards, priorities, guards. `@OnEvent` decorator |
28
- | `nexusjs/session` | Cookie (HMAC) + memory + **Drizzle** backends. Sliding expiry, rotation |
29
- | `nexusjs/health` | `/health/live` · `/health/ready` · `/health/startup`. Built-in indicators |
30
- | `nexusjs/config` | Zod-validated configuration. Layered loading from env, `.env`, `load()` |
31
- | `nexusjs/logger` | Pino-backed structured logging. Pretty-print in dev, JSON in prod |
32
- | `nexusjs/static` | Static file serving with ETag, Range, path-traversal protection |
33
- | `nexusjs/limiter` | Rate limiting. 3 strategies × memory / **Drizzle** storage |
34
- | `nexusjs/shield` | Security suite: CSRF + HSTS + CSP + X-Frame-Options + Referrer-Policy |
35
- | `nexusjs/cache` | Application cache. Memory (LRU) / **Drizzle** backends. Tag invalidation |
36
- | `nexusjs/drive` | File storage abstraction. Memory / Local / S3 / R2 drivers |
37
- | `nexusjs/mail` | Outbound email. Null / File / SMTP transports. MJML rendering |
38
- | `nexusjs/drizzle` | **Default ORM.** 5 dialects, `DrizzleModel`, `DrizzleRepository`, migrations, raw SQL (injection-safe) |
39
- | `nexusjs/openapi` | OpenAPI 3.1 spec generation + Scalar UI. Auto-derives from Zod validation schemas |
40
- | `nexusjs/upload` | Multipart file upload. `@Upload()` / `@UploadedFile()` decorators. Size, MIME, count validation |
41
- | `nexusjs/sse` | Server-Sent Events. `SseStream` with pending-write tracking. `sse(c, handler)` helper |
42
- | `nexusjs/tracing` | OpenTelemetry distributed tracing. Lazy SDK loading. `@Trace()` decorator. W3C + B3 propagation |
43
- | `nexusjs/metrics` | Prometheus / OpenMetrics. Counter / Gauge / Histogram / Summary. `@Counted()` / `@Timed()` decorators |
22
+ | `@kabyeon/nexusjs` (core) | MVC + DI + validation + 3 routing styles + view engines + Inertia.js |
23
+ | `@kabyeon/nexusjs/cli` (`nx`) | Adonis ACE-style command runner — `new`, `init`, `make:*`, `migrate`, `info` |
24
+ | `@kabyeon/nexusjs/auth` | better-auth integration with `@CurrentUser` and `authMiddleware` |
25
+ | `@kabyeon/nexusjs/queue` | BullMQ + Cloudflare Queues + memory backends. `@OnQueueReady` decorator |
26
+ | `@kabyeon/nexusjs/schedule` | Custom cron parser. `@Cron` / `@Interval` / `@Timeout` decorators |
27
+ | `@kabyeon/nexusjs/events` | `NexusEventEmitter` with wildcards, priorities, guards. `@OnEvent` decorator |
28
+ | `@kabyeon/nexusjs/session` | Cookie (HMAC) + memory + **Drizzle** backends. Sliding expiry, rotation |
29
+ | `@kabyeon/nexusjs/health` | `/health/live` · `/health/ready` · `/health/startup`. Built-in indicators |
30
+ | `@kabyeon/nexusjs/config` | Zod-validated configuration. Layered loading from env, `.env`, `load()` |
31
+ | `@kabyeon/nexusjs/logger` | Pino-backed structured logging. Pretty-print in dev, JSON in prod |
32
+ | `@kabyeon/nexusjs/static` | Static file serving with ETag, Range, path-traversal protection |
33
+ | `@kabyeon/nexusjs/limiter` | Rate limiting. 3 strategies × memory / **Drizzle** storage |
34
+ | `@kabyeon/nexusjs/shield` | Security suite: CSRF + HSTS + CSP + X-Frame-Options + Referrer-Policy |
35
+ | `@kabyeon/nexusjs/cache` | Application cache. Memory (LRU) / **Drizzle** backends. Tag invalidation |
36
+ | `@kabyeon/nexusjs/drive` | File storage abstraction. Memory / Local / S3 / R2 drivers |
37
+ | `@kabyeon/nexusjs/mail` | Outbound email. Null / File / SMTP transports. MJML rendering |
38
+ | `@kabyeon/nexusjs/drizzle` | **Default ORM.** 5 dialects, `DrizzleModel`, `DrizzleRepository`, migrations, raw SQL (injection-safe) |
39
+ | `@kabyeon/nexusjs/openapi` | OpenAPI 3.1 spec generation + Scalar UI. Auto-derives from Zod validation schemas |
40
+ | `@kabyeon/nexusjs/upload` | Multipart file upload. `@Upload()` / `@UploadedFile()` decorators. Size, MIME, count validation |
41
+ | `@kabyeon/nexusjs/sse` | Server-Sent Events. `SseStream` with pending-write tracking. `sse(c, handler)` helper |
42
+ | `@kabyeon/nexusjs/tracing` | OpenTelemetry distributed tracing. Lazy SDK loading. `@Trace()` decorator. W3C + B3 propagation |
43
+ | `@kabyeon/nexusjs/metrics` | Prometheus / OpenMetrics. Counter / Gauge / Histogram / Summary. `@Counted()` / `@Timed()` decorators |
44
44
  | **Request-scoped DI** *(core)* | `@Injectable({ scope: 'request' })` for per-request provider lifetime via `AsyncLocalStorage` |
45
- | `nexusjs/ws` | WebSockets on Bun (primary) and Node (via `ws`). `@WebSocketGateway()`, `@OnWebSocketMessage()`, rooms, broadcast |
46
- | `nexusjs/crypto` | AES-256-GCM encryption + HMAC + scrypt/argon2 password hashing. Single APP_KEY for sessions, CSRF, encrypted data |
47
- | `nexusjs/i18n` | Locale-aware translations + date/number/currency formatters via `Intl`. `I18nService`, `@CurrentLocale()`, JSON message catalogs |
48
- | `nexusjs/redis` | Runtime-aware Redis client (Bun / Node / Workers KV). Powers `redis` / `cloudflare-kv` session & cache backends |
49
- | `nexusjs/grpc` | Reflection-based gRPC server + typed client. Loads `.proto` files at runtime via `@grpc/proto-loader`. Unary methods (streaming deferred to v2) |
50
- | **`nexusjs/view`** *(extracted in v0.6.3)* | View engine with 3 adapters: Rendu (default, every runtime), Edge (Adonis-style `.edge`), Eta (EJS-style `.eta`). Auto-detects adapter by file extension. `setViewPaths()` for file-based templates |
45
+ | `@kabyeon/nexusjs/ws` | WebSockets on Bun (primary) and Node (via `ws`). `@WebSocketGateway()`, `@OnWebSocketMessage()`, rooms, broadcast |
46
+ | `@kabyeon/nexusjs/crypto` | AES-256-GCM encryption + HMAC + scrypt/argon2 password hashing. Single APP_KEY for sessions, CSRF, encrypted data |
47
+ | `@kabyeon/nexusjs/i18n` | Locale-aware translations + date/number/currency formatters via `Intl`. `I18nService`, `@CurrentLocale()`, JSON message catalogs |
48
+ | `@kabyeon/nexusjs/redis` | Runtime-aware Redis client (Bun / Node / Workers KV). Powers `redis` / `cloudflare-kv` session & cache backends |
49
+ | `@kabyeon/nexusjs/grpc` | Reflection-based gRPC server + typed client. Loads `.proto` files at runtime via `@grpc/proto-loader`. Unary methods (streaming deferred to v2) |
50
+ | **`@kabyeon/nexusjs/view`** *(extracted in v0.6.3)* | View engine with 3 adapters: Rendu (default, every runtime), Edge (Adonis-style `.edge`), Eta (EJS-style `.eta`). Auto-detects adapter by file extension. `setViewPaths()` for file-based templates |
51
51
 
52
52
  See [docs/user-guide/drizzle.md](./docs/user-guide/drizzle.md) for the
53
53
  Drizzle integration guide, [docs/user-guide/tracing.md](./docs/user-guide/tracing.md)
@@ -55,7 +55,7 @@ for OpenTelemetry, [docs/user-guide/metrics.md](./docs/user-guide/metrics.md)
55
55
  for Prometheus, and [CHANGELOG.md](./CHANGELOG.md) for the detailed
56
56
  v0.4 release notes.
57
57
 
58
- > The module table now includes `nexusjs/grpc` and `nexusjs/view`,
58
+ > The module table now includes `@kabyeon/nexusjs/grpc` and `@kabyeon/nexusjs/view`,
59
59
 
60
60
  ---
61
61
 
@@ -88,20 +88,21 @@ bun install
88
88
  bun run dev
89
89
  ```
90
90
 
91
- Or use it as a library in an existing project:
91
+ Or install it in an existing project:
92
92
 
93
93
  ```bash
94
- bun add nexus reflect-metadata zod hono
94
+ bun add @kabyeon/nexusjs reflect-metadata zod hono
95
95
  # Add the modules you need:
96
- bun add nexus/auth nexus/queue nexus/drizzle
96
+ bun add @kabyeon/nexusjs/drizzle # the default ORM
97
+ bun add @kabyeon/nexusjs/auth # authentication
98
+ bun add @kabyeon/nexusjs/queue # background jobs
99
+ bun add @kabyeon/nexusjs/openapi # OpenAPI docs
100
+ # ... see the module table above for all 27 modules
97
101
  ```
98
102
 
99
103
  Every module is its own bundle entry point — install only what you
100
- use. The CLI (`nx`) is shipped as the `nx` bin and the `nexusjs/cli`
101
- import:
104
+ use. The CLI (`nx`) is included with `@kabyeon/nexusjs`:
102
105
 
103
- ```bash
104
- bun add nexus/cli # optional — for the `nx` command runner
105
106
  ```
106
107
 
107
108
  ---
@@ -124,22 +125,22 @@ export const users = pgTable('users', {
124
125
 
125
126
  ```ts
126
127
  // app/app.module.ts
127
- import { Module } from 'nexusjs';
128
- import { DrizzleModule } from 'nexusjs/drizzle';
129
- import { ConfigModule } from 'nexusjs/config';
130
- import { LoggerModule } from 'nexusjs/logger';
131
- import { HealthModule } from 'nexusjs/health';
132
- import { LimiterModule } from 'nexusjs/limiter';
133
- import { SessionModule } from 'nexusjs/session';
134
- import { CacheModule } from 'nexusjs/cache';
135
- import { DriveModule } from 'nexusjs/drive';
136
- import { MailModule } from 'nexusjs/mail';
137
- import { ShieldModule } from 'nexusjs/shield';
138
- import { AuthModule } from 'nexusjs/auth';
139
- import { OpenAPIModule } from 'nexusjs/openapi';
140
- import { UploadModule } from 'nexusjs/upload';
141
- import { TracingModule } from 'nexusjs/tracing';
142
- import { MetricsModule } from 'nexusjs/metrics';
128
+ import { Module } from '@kabyeon/nexusjs';
129
+ import { DrizzleModule } from '@kabyeon/nexusjs/drizzle';
130
+ import { ConfigModule } from '@kabyeon/nexusjs/config';
131
+ import { LoggerModule } from '@kabyeon/nexusjs/logger';
132
+ import { HealthModule } from '@kabyeon/nexusjs/health';
133
+ import { LimiterModule } from '@kabyeon/nexusjs/limiter';
134
+ import { SessionModule } from '@kabyeon/nexusjs/session';
135
+ import { CacheModule } from '@kabyeon/nexusjs/cache';
136
+ import { DriveModule } from '@kabyeon/nexusjs/drive';
137
+ import { MailModule } from '@kabyeon/nexusjs/mail';
138
+ import { ShieldModule } from '@kabyeon/nexusjs/shield';
139
+ import { AuthModule } from '@kabyeon/nexusjs/auth';
140
+ import { OpenAPIModule } from '@kabyeon/nexusjs/openapi';
141
+ import { UploadModule } from '@kabyeon/nexusjs/upload';
142
+ import { TracingModule } from '@kabyeon/nexusjs/tracing';
143
+ import { MetricsModule } from '@kabyeon/nexusjs/metrics';
143
144
  import { UserModule } from './modules/user.module.js';
144
145
  import { configSchema } from './config/schema.js';
145
146
 
@@ -172,7 +173,7 @@ export class AppModule {}
172
173
  ```ts
173
174
  // app/main.ts
174
175
  import 'reflect-metadata';
175
- import { Application } from 'nexusjs';
176
+ import { Application } from '@kabyeon/nexusjs';
176
177
  import { AppModule } from './app.module.js';
177
178
 
178
179
  const app = new Application(AppModule);
@@ -181,7 +182,7 @@ await app.listen(3000);
181
182
 
182
183
  ```ts
183
184
  // app/modules/user/user.module.ts
184
- import { Module } from 'nexusjs';
185
+ import { Module } from '@kabyeon/nexusjs';
185
186
  import { UserController } from './user.controller.js';
186
187
  import { UserService } from './user.service.js';
187
188
  import { UserRepository } from './user.repository.js';
@@ -195,8 +196,8 @@ export class UserModule {}
195
196
 
196
197
  ```ts
197
198
  // app/modules/user/user.service.ts
198
- import { Inject, Injectable } from 'nexusjs';
199
- import { DrizzleService } from 'nexusjs/drizzle';
199
+ import { Inject, Injectable } from '@kabyeon/nexusjs';
200
+ import { DrizzleService } from '@kabyeon/nexusjs/drizzle';
200
201
  import { eq } from 'drizzle-orm';
201
202
  import { users } from '../../db/schema.js';
202
203
 
@@ -215,7 +216,7 @@ export class UserService {
215
216
  ```ts
216
217
  // app/modules/user/user.controller.ts
217
218
  import { z } from 'zod';
218
- import { Body, Controller, Delete, Get, Inject, Param, Post, Query, Validate } from 'nexusjs';
219
+ import { Body, Controller, Delete, Get, Inject, Param, Post, Query, Validate } from '@kabyeon/nexusjs';
219
220
  import { UserService } from './user.service.js';
220
221
 
221
222
  const CreateUserSchema = z.object({
@@ -552,8 +553,8 @@ is the classic **Post/Redirect/Get**:
552
553
 
553
554
  ```ts
554
555
  import { z } from 'zod';
555
- import { Body, Controller, Post } from 'nexusjs';
556
- import { Inertia } from 'nexusjs/view/inertia';
556
+ import { Body, Controller, Post } from '@kabyeon/nexusjs';
557
+ import { Inertia } from '@kabyeon/nexusjs/view/inertia';
557
558
 
558
559
  const UserSchema = z.object({
559
560
  name: z.string().min(2),
@@ -620,7 +621,7 @@ and Solid. Each lazy-imports its engine — install only what you
620
621
  use:
621
622
 
622
623
  ```ts
623
- import { createReactAdapter, ComponentRegistry } from 'nexusjs/view/inertia/ssr';
624
+ import { createReactAdapter, ComponentRegistry } from '@kabyeon/nexusjs/view/inertia/ssr';
624
625
 
625
626
  const components = new ComponentRegistry()
626
627
  .register('Home', HomePage)
@@ -639,7 +640,7 @@ app.inertia.setSsrAdapter(createReactAdapter({ components }));
639
640
  ### Form middleware (CSRF)
640
641
 
641
642
  ```ts
642
- import { inertiaFormMiddleware } from 'nexusjs/view/inertia';
643
+ import { inertiaFormMiddleware } from '@kabyeon/nexusjs/view/inertia';
643
644
 
644
645
  app.server.app.use('*', inertiaFormMiddleware({
645
646
  validateCsrf: true,
@@ -656,9 +657,9 @@ the per-field validation flow; this is the upstream CSRF gate.
656
657
 
657
658
  ---
658
659
 
659
- ## View engine — `nexusjs/view`
660
+ ## View engine — `@kabyeon/nexusjs/view`
660
661
 
661
- The view engine is available as `nexusjs/view` — its own bundle entry
662
+ The view engine is available as `@kabyeon/nexusjs/view` — its own bundle entry
662
663
  point. It ships three adapters:
663
664
 
664
665
  | Adapter | Extension | Style | Runtime support |
@@ -710,7 +711,7 @@ app.setViewAdapter(new EdgeAdapter());
710
711
  Or implement the `ViewAdapter` interface for a custom engine:
711
712
 
712
713
  ```ts
713
- import type { ViewAdapter } from 'nexusjs/view';
714
+ import type { ViewAdapter } from '@kabyeon/nexusjs/view';
714
715
 
715
716
  class MyEngine implements ViewAdapter {
716
717
  readonly name = 'my-engine';
@@ -774,21 +775,21 @@ src/
774
775
  │ ├── commands/ # new, init, make:*, migrate, info
775
776
  │ ├── templates/ # mustache-lite scaffolds
776
777
  │ └── core/ # arg parser, prompts, fs helpers
777
- ├── auth/ # `nexusjs/auth` (better-auth wrapper)
778
- ├── queue/ # `nexusjs/queue` (BullMQ / Cloudflare / memory)
779
- ├── schedule/ # `nexusjs/schedule` (custom cron parser)
780
- ├── events/ # `nexusjs/events` (typed emitter)
781
- ├── session/ # `nexusjs/session` (cookie / memory / drizzle backends)
782
- ├── health/ # `nexusjs/health` (live/ready/startup + indicators)
783
- ├── config/ # `nexusjs/config` (Zod-validated env config)
784
- ├── logger/ # `nexusjs/logger` (Pino transports)
785
- ├── static/ # `nexusjs/static` (file serving)
786
- ├── limiter/ # `nexusjs/limiter` (rate limiting)
787
- ├── shield/ # `nexusjs/shield` (CSRF + security headers)
788
- ├── cache/ # `nexusjs/cache` (LRU + drizzle)
789
- ├── drive/ # `nexusjs/drive` (storage abstraction)
790
- ├── mail/ # `nexusjs/mail` (SMTP / File / Null)
791
- └── drizzle/ # `nexusjs/drizzle` (default ORM)
778
+ ├── auth/ # `@kabyeon/nexusjs/auth` (better-auth wrapper)
779
+ ├── queue/ # `@kabyeon/nexusjs/queue` (BullMQ / Cloudflare / memory)
780
+ ├── schedule/ # `@kabyeon/nexusjs/schedule` (custom cron parser)
781
+ ├── events/ # `@kabyeon/nexusjs/events` (typed emitter)
782
+ ├── session/ # `@kabyeon/nexusjs/session` (cookie / memory / drizzle backends)
783
+ ├── health/ # `@kabyeon/nexusjs/health` (live/ready/startup + indicators)
784
+ ├── config/ # `@kabyeon/nexusjs/config` (Zod-validated env config)
785
+ ├── logger/ # `@kabyeon/nexusjs/logger` (Pino transports)
786
+ ├── static/ # `@kabyeon/nexusjs/static` (file serving)
787
+ ├── limiter/ # `@kabyeon/nexusjs/limiter` (rate limiting)
788
+ ├── shield/ # `@kabyeon/nexusjs/shield` (CSRF + security headers)
789
+ ├── cache/ # `@kabyeon/nexusjs/cache` (LRU + drizzle)
790
+ ├── drive/ # `@kabyeon/nexusjs/drive` (storage abstraction)
791
+ ├── mail/ # `@kabyeon/nexusjs/mail` (SMTP / File / Null)
792
+ └── drizzle/ # `@kabyeon/nexusjs/drizzle` (default ORM)
792
793
  ├── drivers/ # postgres / mysql / sqlite / bun-sqlite / d1
793
794
  ├── repository/ # DrizzleRepository (Lucid-style)
794
795
  ├── decorators/ # @Table / @Column / @PrimaryKey
@@ -809,20 +810,20 @@ v1.0, only major bumps will.
809
810
  ### Shipped
810
811
 
811
812
  - **v0.1** (2026-04-30) — MVC core, DI, validation, Rendu / Edge / Inertia adapters, CLI bootstrap.
812
- - **v0.2** (2026-05-15) — `nexusjs/auth`, `nexusjs/queue`, `nexusjs/schedule`, `nexusjs/events`, `nexusjs/session`, full `nx` CLI.
813
- - **v0.3** (2026-06-21) — production basics, cross-cutting features, `nexusjs/drizzle` as the default ORM.
814
- - **v0.4** (2026-06-22) — observability + DX: `nexusjs/openapi`, `nexusjs/upload`, `nexusjs/sse`, `nexusjs/tracing`, `nexusjs/metrics`, request-scoped DI in core.
815
- - **v0.5** (2026-06-23) — realtime + crypto + i18n + redis: `nexusjs/ws`, `nexusjs/crypto`, `nexusjs/i18n`, `nexusjs/redis`.
816
- - **v0.6** (2026-06-24) — gRPC + tooling: `nexusjs/grpc` (reflection-based server + typed client) and a publishable `dist/` pipeline (`bin` field, `dist/src/*` flatten).
817
- - **v0.6.1** (2026-06-25) — patch: `nexus` → `nexusjs` rename across all sources (191 files), `bin` field fix, `dist/src/*` flatten, docs in sync with the published name. No new features.
818
- - **v0.6.3** (2026-06-26) — view engine extracted to `nexusjs/view`, Eta adapter, file-based view paths, auto-detection by extension.
813
+ - **v0.2** (2026-05-15) — `@kabyeon/nexusjs/auth`, `@kabyeon/nexusjs/queue`, `@kabyeon/nexusjs/schedule`, `@kabyeon/nexusjs/events`, `@kabyeon/nexusjs/session`, full `nx` CLI.
814
+ - **v0.3** (2026-06-21) — production basics, cross-cutting features, `@kabyeon/nexusjs/drizzle` as the default ORM.
815
+ - **v0.4** (2026-06-22) — observability + DX: `@kabyeon/nexusjs/openapi`, `@kabyeon/nexusjs/upload`, `@kabyeon/nexusjs/sse`, `@kabyeon/nexusjs/tracing`, `@kabyeon/nexusjs/metrics`, request-scoped DI in core.
816
+ - **v0.5** (2026-06-23) — realtime + crypto + i18n + redis: `@kabyeon/nexusjs/ws`, `@kabyeon/nexusjs/crypto`, `@kabyeon/nexusjs/i18n`, `@kabyeon/nexusjs/redis`.
817
+ - **v0.6** (2026-06-24) — gRPC + tooling: `@kabyeon/nexusjs/grpc` (reflection-based server + typed client) and a publishable `dist/` pipeline (`bin` field, `dist/src/*` flatten).
818
+ - **v0.6.1** (2026-06-25) — patch: `nexus` → `@kabyeon/nexusjs` rename across all sources (191 files), `bin` field fix, `dist/src/*` flatten, docs in sync with the published name. No new features.
819
+ - **v0.6.3** (2026-06-26) — view engine extracted to `@kabyeon/nexusjs/view`, Eta adapter, file-based view paths, auto-detection by extension.
819
820
  - **v0.6.4** (2026-06-22) — default view engine to Rendu, CLI view options include eta, Application auto-loads viewPaths from nx.config.ts, static file path fix, scaffold deduplication.
820
- - **v0.6.5** (2026-06-22) — env-aware config, `nx db:generate`, built-in `sessionMiddleware()`, scaffold generates `.env`/`.env.local`/`.gitignore`, drizzle model import fix, `make:crud` repository fix.
821
+ - **v0.6.6** (2026-06-22) — env-aware config, `nx db:generate`, built-in `sessionMiddleware()`, scaffold generates `.env`/`.env.local`/`.gitignore`, drizzle model import fix, `make:crud` repository fix.
821
822
 
822
823
  ### Planned
823
824
 
824
- - **v0.7** — `nexusjs/graphql` (code-first schema) and `nexusjs/resilience` (circuit breaker, retry, bulkhead).
825
- - **v0.8** — `nexusjs/feature-flag` (canary / A/B testing), runtime parity test suite, performance benchmarks across Bun / Node / Workers.
825
+ - **v0.7** — `@kabyeon/nexusjs/graphql` (code-first schema) and `@kabyeon/nexusjs/resilience` (circuit breaker, retry, bulkhead).
826
+ - **v0.8** — `@kabyeon/nexusjs/feature-flag` (canary / A/B testing), runtime parity test suite, performance benchmarks across Bun / Node / Workers.
826
827
  - **v1.0** — stable public API surface with semver guarantees, removal of all v0.1 deprecated aliases, long-term LTS support plan.
827
828
 
828
829
  Detailed release notes for every version live in
@@ -23,7 +23,7 @@
23
23
  * Seed file example:
24
24
  *
25
25
  * // db/seeds/01_users.ts
26
- * import type { SeedContext } from "nexusjs/cli";
26
+ * import type { SeedContext } from "@kabyeon/nexusjs/cli";
27
27
  *
28
28
  * export default async function seed(ctx: SeedContext) {
29
29
  * await ctx.db.insert(users).values([
package/dist/cli/index.js CHANGED
@@ -2441,7 +2441,7 @@ export const {{ camel }}Routes = {
2441
2441
 
2442
2442
  // src/cli/templates/controller/nest.ts
2443
2443
  var nest_default = `
2444
- import { Body, Controller, Delete, Get, Inject, Param, Post, Put } from 'nexusjs';
2444
+ import { Body, Controller, Delete, Get, Inject, Param, Post, Put } from '@kabyeon/nexusjs';
2445
2445
  import { {{ service }} } from '../services/{{ kebab }}.service.js';
2446
2446
 
2447
2447
  @Controller('/{{ kebab }}s')
@@ -2477,11 +2477,11 @@ export class {{ name }}Controller {
2477
2477
 
2478
2478
  // src/cli/templates/crud/controller.ts
2479
2479
  var controller_default = `
2480
- import { Body, Controller, Delete, Get, Inject, Param, Post, Put } from 'nexusjs';
2480
+ import { Body, Controller, Delete, Get, Inject, Param, Post, Put } from '@kabyeon/nexusjs';
2481
2481
  import { z } from 'zod';
2482
- import { Validate } from 'nexusjs';
2482
+ import { Validate } from '@kabyeon/nexusjs';
2483
2483
  import { {{ service }} } from '../services/{{ kebab }}.service.js';
2484
- {{#hasInertia}}import { Inertia } from 'nexusjs/view/inertia';{{/hasInertia}}
2484
+ {{#hasInertia}}import { Inertia } from '@kabyeon/nexusjs/view/inertia';{{/hasInertia}}
2485
2485
 
2486
2486
  const Create{{ name }}Schema = z.object({
2487
2487
  // TODO: define fields
@@ -2557,7 +2557,7 @@ export type Update{{ name }} = z.infer<typeof Update{{ name }}Dto>;
2557
2557
 
2558
2558
  // src/cli/templates/crud/module.ts
2559
2559
  var module_default = `
2560
- import { Module } from 'nexusjs';
2560
+ import { Module } from '@kabyeon/nexusjs';
2561
2561
  import { {{ controller }} } from '../controllers/{{ kebab }}.controller.js';
2562
2562
  import { {{ service }} } from '../services/{{ kebab }}.service.js';
2563
2563
  {{#hasRepo}}import { {{ repository }} } from '../repositories/{{ kebab }}.repository.js';{{/hasRepo}}
@@ -2576,7 +2576,7 @@ export class {{ name }}Module {}
2576
2576
  // src/cli/templates/crud/test.ts
2577
2577
  var test_default = `
2578
2578
  import { describe, it, expect, beforeEach } from 'vitest';
2579
- import { Application } from 'nexusjs';
2579
+ import { Application } from '@kabyeon/nexusjs';
2580
2580
  import { {{ name }}Module } from '../{{ kebab }}.module.js';
2581
2581
 
2582
2582
  describe('{{ controller }}', () => {
@@ -2606,7 +2606,7 @@ describe('{{ controller }}', () => {
2606
2606
 
2607
2607
  // src/cli/templates/middleware/middleware.ts
2608
2608
  var middleware_default = `
2609
- import { Injectable } from 'nexusjs';
2609
+ import { Injectable } from '@kabyeon/nexusjs';
2610
2610
  import type { Context, Next } from 'hono';
2611
2611
 
2612
2612
  /**
@@ -2674,7 +2674,7 @@ export type New{{ name }} = typeof {{ snake }}.$inferInsert;
2674
2674
  var kysely_default = `
2675
2675
  import type { Generated, Insertable, Selectable, Updateable } from 'kysely';
2676
2676
  import { Kysely } from 'kysely';
2677
- import { Inject, Injectable } from 'nexusjs';
2677
+ import { Inject, Injectable } from '@kabyeon/nexusjs';
2678
2678
 
2679
2679
  export interface {{ name }}Table {
2680
2680
  id: Generated<number>;
@@ -2733,7 +2733,7 @@ var prisma_default = `
2733
2733
  */
2734
2734
 
2735
2735
  import { PrismaClient } from '@prisma/client';
2736
- import { Inject, Injectable } from 'nexusjs';
2736
+ import { Inject, Injectable } from '@kabyeon/nexusjs';
2737
2737
 
2738
2738
  @Injectable()
2739
2739
  export class {{ name }}Repository {
@@ -2763,7 +2763,7 @@ export class {{ name }}Repository {
2763
2763
 
2764
2764
  // src/cli/templates/module/module.ts
2765
2765
  var module_default2 = `
2766
- import { Module } from 'nexusjs';
2766
+ import { Module } from '@kabyeon/nexusjs';
2767
2767
  import { {{ controller }} } from '../controllers/{{ kebab }}.controller.js';
2768
2768
  {{#hasService}}import { {{ service }} } from '../services/{{ kebab }}.service.js';{{/hasService}}
2769
2769
  {{#hasRepo}}import { {{ repository }} } from '../repositories/{{ kebab }}.repository.js';{{/hasRepo}}
@@ -2864,8 +2864,8 @@ export default defineConfig({
2864
2864
 
2865
2865
  // src/cli/templates/repository/repository.ts
2866
2866
  var repository_default = `
2867
- import { Injectable } from 'nexusjs';
2868
- import { DrizzleRepository } from 'nexusjs/drizzle';
2867
+ import { Injectable } from '@kabyeon/nexusjs';
2868
+ import { DrizzleRepository } from '@kabyeon/nexusjs/drizzle';
2869
2869
  import { {{ tableName }} } from '../models/{{ kebab }}.model.js';
2870
2870
  import type { {{ name }}, New{{ name }} } from '../models/{{ kebab }}.model.js';
2871
2871
 
@@ -2879,7 +2879,7 @@ export class {{ repository }} extends DrizzleRepository<typeof {{ tableName }},
2879
2879
 
2880
2880
  // src/cli/templates/service/service.ts
2881
2881
  var service_default = `
2882
- import { Inject, Injectable } from 'nexusjs';
2882
+ import { Inject, Injectable } from '@kabyeon/nexusjs';
2883
2883
  {{#hasRepo}}import { {{ repository }} } from '../repositories/{{ kebab }}.repository.js';{{/hasRepo}}
2884
2884
 
2885
2885
  @Injectable()
@@ -3053,7 +3053,7 @@ var initCommand = {
3053
3053
  if (entry.mode === "merge-pkg") {
3054
3054
  if (exists) {
3055
3055
  mergePackageJson(abs, {
3056
- nexusjs: "*",
3056
+ "@kabyeon/nexusjs": "*",
3057
3057
  "reflect-metadata": "^0.2.2",
3058
3058
  hono: "^4.6.0",
3059
3059
  zod: "^3.23.8"
@@ -3073,7 +3073,7 @@ var initCommand = {
3073
3073
  nx: "nx"
3074
3074
  },
3075
3075
  dependencies: {
3076
- nexusjs: "*",
3076
+ "@kabyeon/nexusjs": "*",
3077
3077
  "reflect-metadata": "^0.2.2",
3078
3078
  hono: "^4.6.0",
3079
3079
  zod: "^3.23.8"
@@ -3206,8 +3206,8 @@ DATABASE_URL=app.db
3206
3206
  `;
3207
3207
  case "app/main.ts":
3208
3208
  return `import 'reflect-metadata';
3209
- import { Application } from 'nexusjs';
3210
- import { StaticModule } from 'nexusjs/static';
3209
+ import { Application } from '@kabyeon/nexusjs';
3210
+ import { StaticModule } from '@kabyeon/nexusjs/static';
3211
3211
  import { AppModule } from './app.module.js';
3212
3212
 
3213
3213
  const app = new Application(AppModule);
@@ -3219,7 +3219,7 @@ await app.listen(port);
3219
3219
  console.log("[nexusjs] Listening on http://localhost:" + port);
3220
3220
  `;
3221
3221
  case "app/app.module.ts":
3222
- return `import { Module } from 'nexusjs';
3222
+ return `import { Module } from '@kabyeon/nexusjs';
3223
3223
  import { HomeController } from './controllers/home.controller.js';
3224
3224
 
3225
3225
  @Module({
@@ -3229,7 +3229,7 @@ import { HomeController } from './controllers/home.controller.js';
3229
3229
  export class AppModule {}
3230
3230
  `;
3231
3231
  case "app/controllers/home.controller.ts":
3232
- return `import { Controller, Get } from 'nexusjs';
3232
+ return `import { Controller, Get } from '@kabyeon/nexusjs';
3233
3233
 
3234
3234
  @Controller('/')
3235
3235
  export class HomeController {
@@ -3360,7 +3360,7 @@ var AUTH_INSTANCE_TEMPLATE = `/**
3360
3360
  * Edit \`nx.config.ts\` (\`auth\` section) instead of this file when possible.
3361
3361
  */
3362
3362
  import 'reflect-metadata';
3363
- import { createAuth } from 'nexusjs/auth';
3363
+ import { createAuth } from '@kabyeon/nexusjs/auth';
3364
3364
 
3365
3365
  export const auth = createAuth({
3366
3366
  {{^jwt}}
@@ -3400,7 +3400,7 @@ BETTER_AUTH_URL=http://localhost:3000
3400
3400
  {{/entries}}
3401
3401
  {{/providers}}
3402
3402
  `;
3403
- var MODULE_UPDATE_HINT = `import { AuthModule } from 'nexusjs/auth';
3403
+ var MODULE_UPDATE_HINT = `import { AuthModule } from '@kabyeon/nexusjs/auth';
3404
3404
  // In your AppModule.imports:
3405
3405
  imports: [AuthModule.forRoot({ /* ... */ })],
3406
3406
  `;
@@ -3883,8 +3883,8 @@ var make_crud_default = makeCrudCommand;
3883
3883
  // src/cli/commands/make-listener.ts
3884
3884
  import { resolve as resolve8 } from "path";
3885
3885
  var LISTENER_TEMPLATE = `
3886
- import { Inject, Injectable } from 'nexusjs';
3887
- import { EventService, OnEvent } from 'nexusjs/events';
3886
+ import { Inject, Injectable } from '@kabyeon/nexusjs';
3887
+ import { EventService, OnEvent } from '@kabyeon/nexusjs/events';
3888
3888
 
3889
3889
  /**
3890
3890
  * {{ name }} listener \u2014 generated by \`nx make:listener {{ name }}\`.
@@ -3904,7 +3904,7 @@ export class {{ name }}Listener {
3904
3904
  // }
3905
3905
  }
3906
3906
 
3907
- import { scanForListeners } from 'nexusjs/events';
3907
+ import { scanForListeners } from '@kabyeon/nexusjs/events';
3908
3908
 
3909
3909
  /**
3910
3910
  * Bootstrap helper \u2014 call this from your main.ts (or wherever you
@@ -4316,8 +4316,8 @@ var make_module_default = makeModuleCommand;
4316
4316
  // src/cli/commands/make-queue.ts
4317
4317
  import { resolve as resolve13 } from "path";
4318
4318
  var WORKER_TEMPLATE = `
4319
- import { Inject, Injectable } from 'nexusjs';
4320
- import { QueueService, OnQueueReady } from 'nexusjs/queue';
4319
+ import { Inject, Injectable } from '@kabyeon/nexusjs';
4320
+ import { QueueService, OnQueueReady } from '@kabyeon/nexusjs/queue';
4321
4321
 
4322
4322
  /**
4323
4323
  * {{ name }} worker \u2014 generated by \`nx make:queue {{ name }}\`.
@@ -4362,8 +4362,8 @@ export interface {{ name }}Data {
4362
4362
  }
4363
4363
  `.trimStart();
4364
4364
  var JOB_HELPER_TEMPLATE = `
4365
- import { Inject, Injectable } from 'nexusjs';
4366
- import { QueueService } from 'nexusjs/queue';
4365
+ import { Inject, Injectable } from '@kabyeon/nexusjs';
4366
+ import { QueueService } from '@kabyeon/nexusjs/queue';
4367
4367
  import type { {{ name }}Data } from './{{ kebab }}.worker.js';
4368
4368
 
4369
4369
  /**
@@ -4391,7 +4391,7 @@ export class {{ name }}Job {
4391
4391
  }
4392
4392
  `.trimStart();
4393
4393
  var WIRE_HINT = `
4394
- import { QueueService } from 'nexusjs/queue';
4394
+ import { QueueService } from '@kabyeon/nexusjs/queue';
4395
4395
  import { %%NAME%%Job } from './queue/jobs/%%KEBAB%%.job.js';
4396
4396
  import { %%NAME%%Worker } from './queue/workers/%%KEBAB%%.worker.js';
4397
4397
 
@@ -4479,8 +4479,8 @@ var make_queue_default = makeQueueCommand;
4479
4479
  // src/cli/commands/make-schedule.ts
4480
4480
  import { resolve as resolve14 } from "path";
4481
4481
  var TASK_TEMPLATE = `
4482
- import { Inject, Injectable } from 'nexusjs';
4483
- import { Cron, Interval, Timeout, ScheduleService } from 'nexusjs/schedule';
4482
+ import { Inject, Injectable } from '@kabyeon/nexusjs';
4483
+ import { Cron, Interval, Timeout, ScheduleService } from '@kabyeon/nexusjs/schedule';
4484
4484
 
4485
4485
  /**
4486
4486
  * {{ name }} task \u2014 generated by \`nx make:schedule {{ name }}\`.
@@ -4506,7 +4506,7 @@ export class {{ name }}Task {
4506
4506
  // async startup() { /* ... */ }
4507
4507
  }
4508
4508
 
4509
- import { scanForSchedulers } from 'nexusjs/schedule';
4509
+ import { scanForSchedulers } from '@kabyeon/nexusjs/schedule';
4510
4510
 
4511
4511
  /**
4512
4512
  * Bootstrap helper \u2014 call from main.ts to register every @Cron /
@@ -4594,9 +4594,9 @@ var make_service_default = makeServiceCommand;
4594
4594
  // src/cli/commands/make-session.ts
4595
4595
  import { resolve as resolve16 } from "path";
4596
4596
  var SESSION_TEMPLATE = `
4597
- import { Inject, Injectable } from 'nexusjs';
4598
- import { SessionService } from 'nexusjs/session';
4599
- import type { SessionRecord } from 'nexusjs/session';
4597
+ import { Inject, Injectable } from '@kabyeon/nexusjs';
4598
+ import { SessionService } from '@kabyeon/nexusjs/session';
4599
+ import type { SessionRecord } from '@kabyeon/nexusjs/session';
4600
4600
 
4601
4601
  /**
4602
4602
  * {{ name }} session helper \u2014 generated by \`nx make:session {{ name }}\`.
@@ -4785,7 +4785,7 @@ async function runStatus(cwd, folder, dialect, configUrl = "") {
4785
4785
  }
4786
4786
  const script = `
4787
4787
  import 'reflect-metadata';
4788
- import { DrizzleService } from 'nexusjs/drizzle';
4788
+ import { DrizzleService } from '@kabyeon/nexusjs/drizzle';
4789
4789
 
4790
4790
  const url = ${JSON.stringify(url)};
4791
4791
  const dialect = ${JSON.stringify(dialect)};
@@ -4906,7 +4906,7 @@ var SEED_TEMPLATE = `/**
4906
4906
  * Use ctx.db.insert(table).values([...]) etc. for inserts.
4907
4907
  */
4908
4908
 
4909
- import type { SeedContext } from "nexusjs/cli";
4909
+ import type { SeedContext } from "@kabyeon/nexusjs/cli";
4910
4910
 
4911
4911
  export default async function seed(ctx: SeedContext): Promise<void> {
4912
4912
  ctx.logger.info("Running seed: {name}");
@@ -5187,7 +5187,7 @@ var newCommand = {
5187
5187
  nx: "nx"
5188
5188
  },
5189
5189
  dependencies: {
5190
- nexusjs: "*",
5190
+ "@kabyeon/nexusjs": "*",
5191
5191
  "reflect-metadata": "^0.2.2",
5192
5192
  hono: "^4.6.0",
5193
5193
  zod: "^3.23.8"
@@ -5209,8 +5209,8 @@ var newCommand = {
5209
5209
  }
5210
5210
  `);
5211
5211
  writeFileSync3(resolve21(target, "app/main.ts"), `import 'reflect-metadata';
5212
- import { Application } from 'nexusjs';
5213
- import { StaticModule } from 'nexusjs/static';
5212
+ import { Application } from '@kabyeon/nexusjs';
5213
+ import { StaticModule } from '@kabyeon/nexusjs/static';
5214
5214
  import { AppModule } from './app.module.js';
5215
5215
 
5216
5216
  const app = new Application(AppModule);
@@ -5221,7 +5221,7 @@ const port = Number(process.env["PORT"] ?? 3000);
5221
5221
  await app.listen(port);
5222
5222
  console.log("[nexusjs] Listening on http://localhost:" + port);
5223
5223
  `);
5224
- writeFileSync3(resolve21(target, "app/app.module.ts"), `import { Module } from 'nexusjs';
5224
+ writeFileSync3(resolve21(target, "app/app.module.ts"), `import { Module } from '@kabyeon/nexusjs';
5225
5225
  import { HomeController } from './controllers/home.controller.js';
5226
5226
 
5227
5227
  @Module({
@@ -5231,7 +5231,7 @@ import { HomeController } from './controllers/home.controller.js';
5231
5231
  export class AppModule {}
5232
5232
  `);
5233
5233
  mkdirSync4(resolve21(target, "app/controllers"), { recursive: true });
5234
- writeFileSync3(resolve21(target, "app/controllers/home.controller.ts"), `import { Controller, Get } from 'nexusjs';
5234
+ writeFileSync3(resolve21(target, "app/controllers/home.controller.ts"), `import { Controller, Get } from '@kabyeon/nexusjs';
5235
5235
 
5236
5236
  @Controller('/')
5237
5237
  export class HomeController {
@@ -6132,5 +6132,5 @@ main().then((code) => process.exit(code)).catch((err) => {
6132
6132
  process.exit(1);
6133
6133
  });
6134
6134
 
6135
- //# debugId=48BFAAFA2E0D62F964756E2164756E21
6135
+ //# debugId=00B12A131A811EBF64756E2164756E21
6136
6136
  //# sourceMappingURL=index.js.map