@stratal/inertia 0.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/README.md ADDED
@@ -0,0 +1,91 @@
1
+ # @stratal/inertia
2
+
3
+ Inertia.js v3 server adapter for [Stratal](https://github.com/strataljs/stratal) framework — build server-driven React SPAs on Cloudflare Workers.
4
+
5
+ [![npm version](https://img.shields.io/npm/v/@stratal/inertia)](https://www.npmjs.com/package/@stratal/inertia)
6
+ [![CI](https://github.com/strataljs/stratal/actions/workflows/ci.yml/badge.svg)](https://github.com/strataljs/stratal/actions/workflows/ci.yml)
7
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
8
+ [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/strataljs/stratal/badge)](https://securityscorecards.dev/viewer/?uri=github.com/strataljs/stratal)
9
+ [![Known Vulnerabilities](https://snyk.io/test/github/strataljs/stratal/badge.svg)](https://snyk.io/test/github/strataljs/stratal)
10
+ [![npm downloads](https://img.shields.io/npm/dm/@stratal/inertia)](https://www.npmjs.com/package/@stratal/inertia)
11
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5-blue?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
12
+ [![Bundle size](https://img.shields.io/bundlephobia/minzip/@stratal/inertia)](https://bundlephobia.com/package/@stratal/inertia)
13
+ [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/strataljs/stratal/pulls)
14
+ [![GitHub stars](https://img.shields.io/github/stars/strataljs/stratal?style=social)](https://github.com/strataljs/stratal)
15
+
16
+ ## Features
17
+
18
+ - **InertiaModule** — Drop-in Stratal module with `forRoot()` / `forRootAsync()` configuration
19
+ - **Server-Side Rendering** — SSR support with configurable per-route disabling
20
+ - **Shared Data** — Global shared props with static values or request-scoped resolvers
21
+ - **@InertiaRoute Decorator** — Convention-based Inertia page routes with auto-applied response schema
22
+ - **Partial Reloads** — Optional, deferred, and merge props for efficient data loading
23
+ - **Quarry CLI Commands** — `inertia:install`, `inertia:dev`, `inertia:build`, and `inertia:types`
24
+
25
+ ## Installation
26
+
27
+ ```bash
28
+ npm install @stratal/inertia
29
+ # or
30
+ yarn add @stratal/inertia
31
+ ```
32
+
33
+ ### AI Agent Skills
34
+
35
+ Stratal provides [Agent Skills](https://agentskills.io) for AI coding assistants like Claude Code and Cursor. Install to give your AI agent knowledge of Stratal patterns, conventions, and APIs:
36
+
37
+ ```bash
38
+ npx skills add strataljs/stratal
39
+ ```
40
+
41
+ | Skill | Description |
42
+ |---|---|
43
+ | `stratal` | Build Cloudflare Workers apps with the Stratal framework — modules, DI, controllers, routing, OpenAPI, queues, cron, events, seeders, CLI, auth, database, RBAC, testing, and more |
44
+
45
+ ## Quick Start
46
+
47
+ ### Module setup
48
+
49
+ ```typescript
50
+ import { Stratal } from 'stratal'
51
+ import { Module } from 'stratal/module'
52
+ import { InertiaModule } from '@stratal/inertia'
53
+
54
+ @Module({
55
+ imports: [
56
+ InertiaModule.forRoot({
57
+ rootView: 'app',
58
+ entryClientPath: 'src/inertia/app.tsx',
59
+ sharedData: {
60
+ appName: 'My App',
61
+ },
62
+ }),
63
+ ],
64
+ })
65
+ class AppModule {}
66
+
67
+ export default new Stratal({ module: AppModule })
68
+ ```
69
+
70
+ ### Controller with @InertiaRoute
71
+
72
+ ```typescript
73
+ import { Controller, type RouterContext } from 'stratal/router'
74
+ import { InertiaRoute } from '@stratal/inertia'
75
+
76
+ @Controller('/notes')
77
+ export class NotesController {
78
+ @InertiaRoute({ summary: 'List notes' })
79
+ async index(ctx: RouterContext) {
80
+ return ctx.inertia('notes/Index', { notes: [] })
81
+ }
82
+ }
83
+ ```
84
+
85
+ ## Documentation
86
+
87
+ Full guides and examples are available at **[stratal.dev](https://stratal.dev)**.
88
+
89
+ ## License
90
+
91
+ MIT
@@ -0,0 +1,259 @@
1
+ /// <reference path="../global.d.ts" />
2
+ import { AsyncModuleOptions, DynamicModule, OnInitialize } from "stratal/module";
3
+ import { Middleware, RouteConfig, RouterContext } from "stratal/router";
4
+ import { Command } from "stratal/quarry";
5
+ import { z } from "stratal/validation";
6
+ import { MiddlewareConfigurable, MiddlewareConsumer } from "stratal/middleware";
7
+ import { SharedPageProps } from "@inertiajs/core";
8
+
9
+ //#region src/types.d.ts
10
+ interface InertiaPageRegistry {}
11
+ type InertiaSharedProps = SharedPageProps;
12
+ type InertiaPageComponent = keyof InertiaPageRegistry extends never ? string : Extract<keyof InertiaPageRegistry, string>;
13
+ type AllowInertiaWrappers<T> = { [K in keyof T]: T[K] | InertiaDeferredProp | InertiaMergeProp | InertiaOptionalProp };
14
+ type ResolvedInertiaPageProps<C extends InertiaPageComponent> = C extends keyof InertiaPageRegistry ? AllowInertiaWrappers<InertiaPageRegistry[C]> : Record<string, unknown>;
15
+ type InertiaFullPageProps<C extends InertiaPageComponent> = (C extends keyof InertiaPageRegistry ? InertiaPageRegistry[C] : Record<string, unknown>) & InertiaSharedProps;
16
+ interface InertiaPage {
17
+ component: string;
18
+ props: Record<string, unknown>;
19
+ url: string;
20
+ version: string;
21
+ mergeProps: string[];
22
+ deferredProps: Record<string, string[]>;
23
+ encryptHistory?: boolean;
24
+ clearHistory?: boolean;
25
+ }
26
+ interface InertiaRenderOptions {
27
+ encryptHistory?: boolean;
28
+ clearHistory?: boolean;
29
+ }
30
+ interface InertiaSsrResult {
31
+ head: string[];
32
+ body: string;
33
+ }
34
+ interface InertiaSsrBundle {
35
+ render(page: InertiaPage): Promise<InertiaSsrResult>;
36
+ }
37
+ type SharedDataResolver = (ctx: RouterContext) => any;
38
+ interface ViteManifestEntry {
39
+ file: string;
40
+ css?: string[];
41
+ isEntry?: boolean;
42
+ imports?: string[];
43
+ dynamicImports?: string[];
44
+ src?: string;
45
+ }
46
+ type ViteManifest = Record<string, ViteManifestEntry>;
47
+ declare const INERTIA_PROP_OPTIONAL: unique symbol;
48
+ declare const INERTIA_PROP_DEFERRED: unique symbol;
49
+ declare const INERTIA_PROP_MERGE: unique symbol;
50
+ interface InertiaOptionalProp {
51
+ [INERTIA_PROP_OPTIONAL]: true;
52
+ callback: () => unknown;
53
+ }
54
+ interface InertiaDeferredProp {
55
+ [INERTIA_PROP_DEFERRED]: true;
56
+ callback: () => unknown;
57
+ group: string;
58
+ }
59
+ interface InertiaMergeProp {
60
+ [INERTIA_PROP_MERGE]: true;
61
+ callback: () => unknown;
62
+ }
63
+ //#endregion
64
+ //#region src/inertia.options.d.ts
65
+ interface SsrBundleModule {
66
+ render(page: InertiaPage): Promise<InertiaSsrResult>;
67
+ }
68
+ interface InertiaSsrOptions {
69
+ bundle: () => Promise<SsrBundleModule | {
70
+ default: SsrBundleModule;
71
+ }>;
72
+ /**
73
+ * Route patterns where SSR is disabled (e.g., `"admin/*"`).
74
+ * Uses simple glob matching against the request pathname.
75
+ */
76
+ disabled?: string[];
77
+ }
78
+ interface InertiaModuleOptions {
79
+ rootView: string;
80
+ version?: string;
81
+ ssr?: InertiaSsrOptions;
82
+ sharedData?: Record<string, unknown>;
83
+ /**
84
+ * Vite manifest for production builds. When omitted, dev mode is assumed
85
+ * and Vite client + entry scripts are injected with same-origin paths.
86
+ */
87
+ manifest?: ViteManifest;
88
+ /**
89
+ * Client entry path relative to project root (default: `src/inertia/app.tsx`).
90
+ * Used in dev mode to inject the entry script tag.
91
+ */
92
+ entryClientPath?: string;
93
+ }
94
+ //#endregion
95
+ //#region src/inertia.module.d.ts
96
+ declare class InertiaModule implements MiddlewareConfigurable, OnInitialize {
97
+ static forRoot(options: InertiaModuleOptions): DynamicModule;
98
+ static forRootAsync(options: AsyncModuleOptions<InertiaModuleOptions>): DynamicModule;
99
+ configure(consumer: MiddlewareConsumer): void;
100
+ onInitialize(): void;
101
+ }
102
+ //#endregion
103
+ //#region src/inertia.tokens.d.ts
104
+ declare const INERTIA_TOKENS: {
105
+ readonly Options: symbol;
106
+ readonly InertiaService: symbol;
107
+ readonly TemplateService: symbol;
108
+ readonly ManifestService: symbol;
109
+ readonly SsrRenderer: symbol;
110
+ };
111
+ //#endregion
112
+ //#region src/services/ssr-renderer.service.d.ts
113
+ declare class SsrRendererService {
114
+ private readonly options;
115
+ private bundle;
116
+ private loadPromise;
117
+ constructor(options: InertiaModuleOptions);
118
+ render(page: InertiaPage): Promise<InertiaSsrResult>;
119
+ private ensureBundle;
120
+ private loadBundle;
121
+ }
122
+ //#endregion
123
+ //#region src/services/manifest.service.d.ts
124
+ declare class ManifestService {
125
+ private readonly manifest;
126
+ private readonly entryClientPath;
127
+ constructor(options: InertiaModuleOptions);
128
+ private get isDev();
129
+ getHeadTags(): string;
130
+ getScriptTags(): string;
131
+ }
132
+ //#endregion
133
+ //#region src/services/template.service.d.ts
134
+ declare class TemplateService {
135
+ private readonly options;
136
+ private readonly manifest;
137
+ constructor(options: InertiaModuleOptions, manifest: ManifestService);
138
+ render(page: InertiaPage, ssrHead: string[], ssrBody: string): string;
139
+ private buildClientOnlyBody;
140
+ }
141
+ //#endregion
142
+ //#region src/services/inertia.service.d.ts
143
+ declare class InertiaService {
144
+ private readonly options;
145
+ private readonly template;
146
+ private readonly ssr;
147
+ private sharedData;
148
+ constructor(options: InertiaModuleOptions, template: TemplateService, ssr: SsrRendererService);
149
+ share(key: string, value: unknown): void;
150
+ location(url: string): Response;
151
+ optional(callback: () => unknown): InertiaOptionalProp;
152
+ defer(callback: () => unknown, group?: string): InertiaDeferredProp;
153
+ merge(callback: () => unknown): InertiaMergeProp;
154
+ render(ctx: RouterContext, component: string, props?: Record<string, unknown>, renderOptions?: InertiaRenderOptions): Promise<Response>;
155
+ private resolveSharedData;
156
+ private processProps;
157
+ /**
158
+ * Check if a prop key is requested — supports dot-notation (e.g., `user.permissions`
159
+ * matches the top-level `user` key).
160
+ */
161
+ private isRequested;
162
+ private isOptionalProp;
163
+ private isDeferredProp;
164
+ private isMergeProp;
165
+ private isSsrDisabled;
166
+ }
167
+ //#endregion
168
+ //#region src/decorators/inertia-route.decorator.d.ts
169
+ type InertiaRouteConfig = Omit<RouteConfig, 'response' | 'statusCode' | 'hideFromDocs'> & {
170
+ hideFromDocs?: boolean;
171
+ };
172
+ /**
173
+ * Decorator for Inertia page routes.
174
+ *
175
+ * Wraps `@Route()` with:
176
+ * - Auto-applied Inertia page response schema
177
+ * - `hideFromDocs: true` by default (overridable)
178
+ *
179
+ * Accepts `query`, `params`, `body`, `tags`, `summary`, `description`, `security`.
180
+ *
181
+ * @example
182
+ * ```typescript
183
+ * @Controller('/notes')
184
+ * export class NotesController implements IController {
185
+ * @InertiaRoute({ query: z.object({ page: z.string().optional() }) })
186
+ * async index(ctx: RouterContext) {
187
+ * return ctx.inertia('notes/Index', { notes: [] })
188
+ * }
189
+ * }
190
+ * ```
191
+ */
192
+ declare function InertiaRoute(config?: InertiaRouteConfig): (target: object, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
193
+ //#endregion
194
+ //#region src/middleware/inertia.middleware.d.ts
195
+ declare class InertiaMiddleware implements Middleware {
196
+ private readonly options;
197
+ constructor(options: InertiaModuleOptions);
198
+ handle(ctx: RouterContext, next: () => Promise<void>): Promise<void>;
199
+ }
200
+ //#endregion
201
+ //#region src/commands/inertia-build.command.d.ts
202
+ declare class InertiaBuildCommand extends Command {
203
+ static command: string;
204
+ static description: string;
205
+ handle(): Promise<number | undefined>;
206
+ }
207
+ //#endregion
208
+ //#region src/commands/inertia-dev.command.d.ts
209
+ declare class InertiaDevCommand extends Command {
210
+ static command: string;
211
+ static description: string;
212
+ handle(): Promise<number | undefined>;
213
+ }
214
+ //#endregion
215
+ //#region src/commands/inertia-install.command.d.ts
216
+ declare class InertiaInstallCommand extends Command {
217
+ static command: string;
218
+ static description: string;
219
+ handle(): Promise<number | undefined>;
220
+ private updateAppModule;
221
+ }
222
+ //#endregion
223
+ //#region src/commands/inertia-types.command.d.ts
224
+ declare class InertiaTypesCommand extends Command {
225
+ static command: string;
226
+ static description: string;
227
+ handle(): Promise<number | undefined>;
228
+ private generate;
229
+ private watchForChanges;
230
+ }
231
+ //#endregion
232
+ //#region src/generator/type-generator.d.ts
233
+ declare function runTypeGeneration(cwd: string): Promise<{
234
+ outputPath: string;
235
+ pageCount: number;
236
+ }>;
237
+ //#endregion
238
+ //#region src/augment/router-context.d.ts
239
+ declare module 'stratal/router' {
240
+ interface RouterContext {
241
+ inertia<C extends InertiaPageComponent>(component: C, ...args: keyof InertiaPageRegistry extends never ? [props?: Record<string, unknown>, options?: InertiaRenderOptions] : Record<string, never> extends ResolvedInertiaPageProps<C> ? [props?: ResolvedInertiaPageProps<C>, options?: InertiaRenderOptions] : [props: ResolvedInertiaPageProps<C>, options?: InertiaRenderOptions]): Promise<Response>;
242
+ defer(callback: () => unknown, group?: string): InertiaDeferredProp;
243
+ optional(callback: () => unknown): InertiaOptionalProp;
244
+ merge(callback: () => unknown): InertiaMergeProp;
245
+ withoutSsr(): void;
246
+ }
247
+ }
248
+ //#endregion
249
+ //#region src/augment/router-variables.d.ts
250
+ declare module 'stratal/router' {
251
+ interface RouterVariables {
252
+ inertia: boolean;
253
+ inertiaPrefetch: boolean;
254
+ withoutSsr: boolean;
255
+ }
256
+ }
257
+ //#endregion
258
+ export { INERTIA_TOKENS, InertiaBuildCommand, type InertiaDeferredProp, InertiaDevCommand, type InertiaFullPageProps, InertiaInstallCommand, type InertiaMergeProp, InertiaMiddleware, InertiaModule, type InertiaModuleOptions, type InertiaOptionalProp, type InertiaPage, type InertiaPageComponent, type InertiaPageRegistry, type InertiaRenderOptions, InertiaRoute, type InertiaRouteConfig, InertiaService, type InertiaSharedProps, type InertiaSsrBundle, type InertiaSsrOptions, type InertiaSsrResult, InertiaTypesCommand, ManifestService, type ResolvedInertiaPageProps, type SharedDataResolver, SsrRendererService, TemplateService, type ViteManifest, type ViteManifestEntry, runTypeGeneration };
259
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/inertia.options.ts","../src/inertia.module.ts","../src/inertia.tokens.ts","../src/services/ssr-renderer.service.ts","../src/services/manifest.service.ts","../src/services/template.service.ts","../src/services/inertia.service.ts","../src/decorators/inertia-route.decorator.ts","../src/middleware/inertia.middleware.ts","../src/commands/inertia-build.command.ts","../src/commands/inertia-dev.command.ts","../src/commands/inertia-install.command.ts","../src/commands/inertia-types.command.ts","../src/generator/type-generator.ts","../src/augment/router-context.ts","../src/augment/router-variables.ts"],"mappings":"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"}