@zauso-ai/capstan-react 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/dist/hooks.d.ts +9 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +11 -0
- package/dist/hooks.js.map +1 -0
- package/dist/hydrate.d.ts +3 -0
- package/dist/hydrate.d.ts.map +1 -0
- package/dist/hydrate.js +22 -0
- package/dist/hydrate.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/layout.d.ts +7 -0
- package/dist/layout.d.ts.map +1 -0
- package/dist/layout.js +11 -0
- package/dist/layout.js.map +1 -0
- package/dist/loader.d.ts +5 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +15 -0
- package/dist/loader.js.map +1 -0
- package/dist/ssr.d.ts +3 -0
- package/dist/ssr.d.ts.map +1 -0
- package/dist/ssr.js +65 -0
- package/dist/ssr.js.map +1 -0
- package/dist/types.d.ts +49 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +45 -0
package/dist/hooks.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function useAuth(): {
|
|
2
|
+
isAuthenticated: boolean;
|
|
3
|
+
type: "human" | "agent" | "anonymous";
|
|
4
|
+
userId?: string;
|
|
5
|
+
role?: string;
|
|
6
|
+
email?: string;
|
|
7
|
+
};
|
|
8
|
+
export declare function useParams(): Record<string, string>;
|
|
9
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAGA,wBAAgB,OAAO;;;;;;EAGtB;AAED,wBAAgB,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAGlD"}
|
package/dist/hooks.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { useContext } from "react";
|
|
2
|
+
import { PageContext } from "./loader.js";
|
|
3
|
+
export function useAuth() {
|
|
4
|
+
const ctx = useContext(PageContext);
|
|
5
|
+
return ctx.auth;
|
|
6
|
+
}
|
|
7
|
+
export function useParams() {
|
|
8
|
+
const ctx = useContext(PageContext);
|
|
9
|
+
return ctx.params;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,UAAU,OAAO;IACrB,MAAM,GAAG,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACpC,OAAO,GAAG,CAAC,IAAI,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,MAAM,GAAG,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACpC,OAAO,GAAG,CAAC,MAAM,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hydrate.d.ts","sourceRoot":"","sources":["../src/hydrate.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,OAAO,EACpB,aAAa,EAAE,KAAK,CAAC,aAAa,EAClC,OAAO,EAAE,KAAK,CAAC,aAAa,EAAE,EAC9B,IAAI,EAAE,kBAAkB,GACvB,IAAI,CAoBN"}
|
package/dist/hydrate.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// Client-side hydration entry point.
|
|
2
|
+
// Used by the dev server / production build to hydrate a server-rendered page
|
|
3
|
+
// in the browser.
|
|
4
|
+
import { createElement } from "react";
|
|
5
|
+
import { hydrateRoot } from "react-dom/client";
|
|
6
|
+
import { PageContext } from "./loader.js";
|
|
7
|
+
import { OutletProvider } from "./layout.js";
|
|
8
|
+
export function hydrateCapstanPage(rootElement, PageComponent, layouts, data) {
|
|
9
|
+
// Build the component tree identically to SSR so React can hydrate cleanly
|
|
10
|
+
let content = createElement(PageComponent, {});
|
|
11
|
+
// Wrap in layouts from innermost to outermost
|
|
12
|
+
for (let i = layouts.length - 1; i >= 0; i--) {
|
|
13
|
+
const Layout = layouts[i];
|
|
14
|
+
content = createElement(OutletProvider, {
|
|
15
|
+
outlet: content,
|
|
16
|
+
children: createElement(Layout, {}),
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
const tree = createElement(PageContext.Provider, { value: data }, content);
|
|
20
|
+
hydrateRoot(rootElement, tree);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=hydrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hydrate.js","sourceRoot":"","sources":["../src/hydrate.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,8EAA8E;AAC9E,kBAAkB;AAElB,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,MAAM,UAAU,kBAAkB,CAChC,WAAoB,EACpB,aAAkC,EAClC,OAA8B,EAC9B,IAAwB;IAExB,2EAA2E;IAC3E,IAAI,OAAO,GAAiB,aAAa,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAE7D,8CAA8C;IAC9C,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;QAC3B,OAAO,GAAG,aAAa,CAAC,cAAc,EAAE;YACtC,MAAM,EAAE,OAAO;YACf,QAAQ,EAAE,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC;SACpC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,IAAI,GAAG,aAAa,CACxB,WAAW,CAAC,QAAQ,EACpB,EAAE,KAAK,EAAE,IAAI,EAAE,EACf,OAAO,CACR,CAAC;IAEF,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AACjC,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { renderPage } from "./ssr.js";
|
|
2
|
+
export { defineLoader, useLoaderData, PageContext } from "./loader.js";
|
|
3
|
+
export { Outlet, OutletProvider } from "./layout.js";
|
|
4
|
+
export { useAuth, useParams } from "./hooks.js";
|
|
5
|
+
export { hydrateCapstanPage } from "./hydrate.js";
|
|
6
|
+
export type { LoaderArgs, LoaderFunction, PageModule, LayoutModule, RenderPageOptions, RenderResult, CapstanPageContext, } from "./types.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,YAAY,EACV,UAAU,EACV,cAAc,EACd,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { renderPage } from "./ssr.js";
|
|
2
|
+
export { defineLoader, useLoaderData, PageContext } from "./loader.js";
|
|
3
|
+
export { Outlet, OutletProvider } from "./layout.js";
|
|
4
|
+
export { useAuth, useParams } from "./hooks.js";
|
|
5
|
+
export { hydrateCapstanPage } from "./hydrate.js";
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/layout.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ReactNode, ReactElement } from "react";
|
|
2
|
+
export declare function OutletProvider({ children, outlet, }: {
|
|
3
|
+
children: ReactElement;
|
|
4
|
+
outlet: ReactNode;
|
|
5
|
+
}): import("react").FunctionComponentElement<import("react").ProviderProps<ReactNode>>;
|
|
6
|
+
export declare function Outlet(): ReactElement;
|
|
7
|
+
//# sourceMappingURL=layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAKrD,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,MAAM,GACP,EAAE;IACD,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,EAAE,SAAS,CAAC;CACnB,sFAEA;AAED,wBAAgB,MAAM,IAAI,YAAY,CAGrC"}
|
package/dist/layout.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createContext, useContext, createElement } from "react";
|
|
2
|
+
// Outlet renders child content in a layout
|
|
3
|
+
const OutletContext = createContext(null);
|
|
4
|
+
export function OutletProvider({ children, outlet, }) {
|
|
5
|
+
return createElement(OutletContext.Provider, { value: outlet }, children);
|
|
6
|
+
}
|
|
7
|
+
export function Outlet() {
|
|
8
|
+
const outlet = useContext(OutletContext);
|
|
9
|
+
return outlet;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAGjE,2CAA2C;AAC3C,MAAM,aAAa,GAAG,aAAa,CAAY,IAAI,CAAC,CAAC;AAErD,MAAM,UAAU,cAAc,CAAC,EAC7B,QAAQ,EACR,MAAM,GAIP;IACC,OAAO,aAAa,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,MAAM;IACpB,MAAM,MAAM,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IACzC,OAAO,MAAsB,CAAC;AAChC,CAAC"}
|
package/dist/loader.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { LoaderFunction, CapstanPageContext } from "./types.js";
|
|
2
|
+
export declare const PageContext: import("react").Context<CapstanPageContext>;
|
|
3
|
+
export declare function defineLoader<T>(fn: LoaderFunction<T>): LoaderFunction<T>;
|
|
4
|
+
export declare function useLoaderData<T extends LoaderFunction>(): Awaited<ReturnType<T>>;
|
|
5
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGrE,eAAO,MAAM,WAAW,6CAItB,CAAC;AAEH,wBAAgB,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAExE;AAED,wBAAgB,aAAa,CAAC,CAAC,SAAS,cAAc,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAGhF"}
|
package/dist/loader.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { createContext, useContext } from "react";
|
|
2
|
+
// Context for passing loader data and page context to components
|
|
3
|
+
export const PageContext = createContext({
|
|
4
|
+
loaderData: null,
|
|
5
|
+
params: {},
|
|
6
|
+
auth: { isAuthenticated: false, type: "anonymous" },
|
|
7
|
+
});
|
|
8
|
+
export function defineLoader(fn) {
|
|
9
|
+
return fn;
|
|
10
|
+
}
|
|
11
|
+
export function useLoaderData() {
|
|
12
|
+
const ctx = useContext(PageContext);
|
|
13
|
+
return ctx.loaderData;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAGlD,iEAAiE;AACjE,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAqB;IAC3D,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,EAAE;IACV,IAAI,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE;CACpD,CAAC,CAAC;AAEH,MAAM,UAAU,YAAY,CAAI,EAAqB;IACnD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,MAAM,GAAG,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACpC,OAAO,GAAG,CAAC,UAAoC,CAAC;AAClD,CAAC"}
|
package/dist/ssr.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssr.d.ts","sourceRoot":"","sources":["../src/ssr.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAelE,wBAAsB,UAAU,CAC9B,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,YAAY,CAAC,CA8DvB"}
|
package/dist/ssr.js
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { renderToString } from "react-dom/server";
|
|
2
|
+
import { createElement } from "react";
|
|
3
|
+
import { PageContext } from "./loader.js";
|
|
4
|
+
import { OutletProvider } from "./layout.js";
|
|
5
|
+
/**
|
|
6
|
+
* Escapes a string for safe embedding inside a <script> tag.
|
|
7
|
+
* Prevents XSS via </script> injection or HTML comment breakout.
|
|
8
|
+
*/
|
|
9
|
+
function escapeJsonForScript(json) {
|
|
10
|
+
return json
|
|
11
|
+
.replace(/</g, "\\u003c")
|
|
12
|
+
.replace(/>/g, "\\u003e")
|
|
13
|
+
.replace(/&/g, "\\u0026")
|
|
14
|
+
.replace(/\u2028/g, "\\u2028")
|
|
15
|
+
.replace(/\u2029/g, "\\u2029");
|
|
16
|
+
}
|
|
17
|
+
export async function renderPage(options) {
|
|
18
|
+
const { pageModule, layouts, loaderArgs, params } = options;
|
|
19
|
+
// 1. Run loader if present
|
|
20
|
+
let loaderData = null;
|
|
21
|
+
if (pageModule.loader) {
|
|
22
|
+
loaderData = await pageModule.loader(loaderArgs);
|
|
23
|
+
}
|
|
24
|
+
// 2. Create the page context value
|
|
25
|
+
const contextValue = {
|
|
26
|
+
loaderData,
|
|
27
|
+
params,
|
|
28
|
+
auth: loaderArgs.ctx.auth,
|
|
29
|
+
};
|
|
30
|
+
// 3. Render page component
|
|
31
|
+
let content = createElement(pageModule.default, {});
|
|
32
|
+
// 4. Wrap in layouts from innermost to outermost
|
|
33
|
+
for (let i = layouts.length - 1; i >= 0; i--) {
|
|
34
|
+
const layout = layouts[i];
|
|
35
|
+
content = createElement(OutletProvider, {
|
|
36
|
+
outlet: content,
|
|
37
|
+
children: createElement(layout.default, {}),
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
// 5. Wrap in PageContext provider
|
|
41
|
+
const tree = createElement(PageContext.Provider, { value: contextValue }, content);
|
|
42
|
+
// 6. Render to HTML string
|
|
43
|
+
const html = renderToString(tree);
|
|
44
|
+
// 7. Build serialised data payload, escaped for safe script embedding
|
|
45
|
+
const serializedData = escapeJsonForScript(JSON.stringify({ loaderData, params, auth: contextValue.auth }));
|
|
46
|
+
// 8. Create full HTML document with embedded loader data for hydration
|
|
47
|
+
const fullHtml = `<!DOCTYPE html>
|
|
48
|
+
<html lang="en">
|
|
49
|
+
<head>
|
|
50
|
+
<meta charset="utf-8" />
|
|
51
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
52
|
+
</head>
|
|
53
|
+
<body>
|
|
54
|
+
<div id="capstan-root">${html}</div>
|
|
55
|
+
<script>window.__CAPSTAN_DATA__ = ${serializedData}</script>
|
|
56
|
+
<script type="module" src="/_capstan/client.js"></script>
|
|
57
|
+
</body>
|
|
58
|
+
</html>`;
|
|
59
|
+
return {
|
|
60
|
+
html: fullHtml,
|
|
61
|
+
loaderData,
|
|
62
|
+
statusCode: 200,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=ssr.js.map
|
package/dist/ssr.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssr.js","sourceRoot":"","sources":["../src/ssr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C;;;GAGG;AACH,SAAS,mBAAmB,CAAC,IAAY;IACvC,OAAO,IAAI;SACR,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC;SACxB,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC;SACxB,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC;SACxB,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;SAC7B,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,OAA0B;IAE1B,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAE5D,2BAA2B;IAC3B,IAAI,UAAU,GAAY,IAAI,CAAC;IAC/B,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QACtB,UAAU,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACnD,CAAC;IAED,mCAAmC;IACnC,MAAM,YAAY,GAAG;QACnB,UAAU;QACV,MAAM;QACN,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI;KAC1B,CAAC;IAEF,2BAA2B;IAC3B,IAAI,OAAO,GAAiB,aAAa,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAElE,iDAAiD;IACjD,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;QAC3B,OAAO,GAAG,aAAa,CAAC,cAAc,EAAE;YACtC,MAAM,EAAE,OAAO;YACf,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;SAC5C,CAAC,CAAC;IACL,CAAC;IAED,kCAAkC;IAClC,MAAM,IAAI,GAAG,aAAa,CACxB,WAAW,CAAC,QAAQ,EACpB,EAAE,KAAK,EAAE,YAAY,EAAE,EACvB,OAAO,CACR,CAAC;IAEF,2BAA2B;IAC3B,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAElC,sEAAsE;IACtE,MAAM,cAAc,GAAG,mBAAmB,CACxC,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,CAAC,CAChE,CAAC;IAEF,uEAAuE;IACvE,MAAM,QAAQ,GAAG;;;;;;;2BAOQ,IAAI;sCACO,cAAc;;;QAG5C,CAAC;IAEP,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,UAAU;QACV,UAAU,EAAE,GAAG;KAChB,CAAC;AACJ,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { ReactNode, ReactElement } from "react";
|
|
2
|
+
export interface LoaderArgs {
|
|
3
|
+
params: Record<string, string>;
|
|
4
|
+
request: Request;
|
|
5
|
+
ctx: {
|
|
6
|
+
auth: {
|
|
7
|
+
isAuthenticated: boolean;
|
|
8
|
+
type: "human" | "agent" | "anonymous";
|
|
9
|
+
userId?: string;
|
|
10
|
+
role?: string;
|
|
11
|
+
email?: string;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
/** In-process fetch to call API routes without HTTP round-trip */
|
|
15
|
+
fetch: {
|
|
16
|
+
get: <T = unknown>(path: string, params?: Record<string, string>) => Promise<T>;
|
|
17
|
+
post: <T = unknown>(path: string, body?: unknown) => Promise<T>;
|
|
18
|
+
put: <T = unknown>(path: string, body?: unknown) => Promise<T>;
|
|
19
|
+
delete: <T = unknown>(path: string) => Promise<T>;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export type LoaderFunction<T = unknown> = (args: LoaderArgs) => Promise<T>;
|
|
23
|
+
export interface PageModule {
|
|
24
|
+
default: (props: Record<string, unknown>) => ReactElement;
|
|
25
|
+
loader?: LoaderFunction;
|
|
26
|
+
}
|
|
27
|
+
export interface LayoutModule {
|
|
28
|
+
default: (props: {
|
|
29
|
+
children?: ReactNode;
|
|
30
|
+
}) => ReactElement;
|
|
31
|
+
}
|
|
32
|
+
export interface RenderPageOptions {
|
|
33
|
+
pageModule: PageModule;
|
|
34
|
+
layouts: LayoutModule[];
|
|
35
|
+
params: Record<string, string>;
|
|
36
|
+
request: Request;
|
|
37
|
+
loaderArgs: LoaderArgs;
|
|
38
|
+
}
|
|
39
|
+
export interface RenderResult {
|
|
40
|
+
html: string;
|
|
41
|
+
loaderData: unknown;
|
|
42
|
+
statusCode: number;
|
|
43
|
+
}
|
|
44
|
+
export interface CapstanPageContext {
|
|
45
|
+
loaderData: unknown;
|
|
46
|
+
params: Record<string, string>;
|
|
47
|
+
auth: LoaderArgs["ctx"]["auth"];
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAErD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE;QACH,IAAI,EAAE;YACJ,eAAe,EAAE,OAAO,CAAC;YACzB,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,WAAW,CAAC;YACtC,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,KAAK,CAAC,EAAE,MAAM,CAAC;SAChB,CAAC;KACH,CAAC;IACF,kEAAkE;IAClE,KAAK,EAAE;QACL,GAAG,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;QAChF,IAAI,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;QAChE,GAAG,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/D,MAAM,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;KACnD,CAAC;CACH;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAE3E,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,YAAY,CAAC;IAC1D,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,EAAE,SAAS,CAAA;KAAE,KAAK,YAAY,CAAC;CAC5D;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;CACjC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@zauso-ai/capstan-react",
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"types": "./dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"import": "./dist/index.js",
|
|
10
|
+
"types": "./dist/index.d.ts"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsc -p tsconfig.json",
|
|
15
|
+
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
16
|
+
},
|
|
17
|
+
"peerDependencies": {
|
|
18
|
+
"react": "^19.0.0",
|
|
19
|
+
"react-dom": "^19.0.0"
|
|
20
|
+
},
|
|
21
|
+
"description": "React SSR integration for Capstan — loaders, layouts, Outlet, hydration",
|
|
22
|
+
"files": [
|
|
23
|
+
"dist"
|
|
24
|
+
],
|
|
25
|
+
"repository": {
|
|
26
|
+
"type": "git",
|
|
27
|
+
"url": "https://github.com/barry3406/capstan.git",
|
|
28
|
+
"directory": "packages/react"
|
|
29
|
+
},
|
|
30
|
+
"license": "MIT",
|
|
31
|
+
"author": "barry3406",
|
|
32
|
+
"homepage": "https://github.com/barry3406/capstan",
|
|
33
|
+
"keywords": [
|
|
34
|
+
"capstan",
|
|
35
|
+
"ai-agent",
|
|
36
|
+
"full-stack",
|
|
37
|
+
"framework",
|
|
38
|
+
"mcp",
|
|
39
|
+
"a2a",
|
|
40
|
+
"typescript"
|
|
41
|
+
],
|
|
42
|
+
"publishConfig": {
|
|
43
|
+
"access": "public"
|
|
44
|
+
}
|
|
45
|
+
}
|