@rainfw/core 0.1.0

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.
Files changed (94) hide show
  1. package/LICENSE +21 -0
  2. package/cli/commands/db.js +399 -0
  3. package/cli/index.js +206 -0
  4. package/cli/templates/drizzle-config.js +15 -0
  5. package/cli/templates/schema.js +16 -0
  6. package/cli/utils/process.js +23 -0
  7. package/cli/utils/sanitize.d.ts +1 -0
  8. package/cli/utils/sanitize.js +8 -0
  9. package/cli/utils/toml-parser.d.ts +10 -0
  10. package/cli/utils/toml-parser.js +58 -0
  11. package/dist/bindings.d.ts +3 -0
  12. package/dist/bindings.d.ts.map +1 -0
  13. package/dist/bindings.js +17 -0
  14. package/dist/bindings.js.map +1 -0
  15. package/dist/context.d.ts +53 -0
  16. package/dist/context.d.ts.map +1 -0
  17. package/dist/context.js +246 -0
  18. package/dist/context.js.map +1 -0
  19. package/dist/cookie.d.ts +12 -0
  20. package/dist/cookie.d.ts.map +1 -0
  21. package/dist/cookie.js +68 -0
  22. package/dist/cookie.js.map +1 -0
  23. package/dist/errors.d.ts +5 -0
  24. package/dist/errors.d.ts.map +1 -0
  25. package/dist/errors.js +8 -0
  26. package/dist/errors.js.map +1 -0
  27. package/dist/index.d.ts +14 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +9 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/jsx/createElement.d.ts +4 -0
  32. package/dist/jsx/createElement.d.ts.map +1 -0
  33. package/dist/jsx/createElement.js +19 -0
  34. package/dist/jsx/createElement.js.map +1 -0
  35. package/dist/jsx/escape.d.ts +2 -0
  36. package/dist/jsx/escape.d.ts.map +1 -0
  37. package/dist/jsx/escape.js +12 -0
  38. package/dist/jsx/escape.js.map +1 -0
  39. package/dist/jsx/index.d.ts +6 -0
  40. package/dist/jsx/index.d.ts.map +1 -0
  41. package/dist/jsx/index.js +5 -0
  42. package/dist/jsx/index.js.map +1 -0
  43. package/dist/jsx/jsx-namespace.d.ts +23 -0
  44. package/dist/jsx/jsx-namespace.d.ts.map +1 -0
  45. package/dist/jsx/jsx-namespace.js +2 -0
  46. package/dist/jsx/jsx-namespace.js.map +1 -0
  47. package/dist/jsx/jsx-runtime.d.ts +6 -0
  48. package/dist/jsx/jsx-runtime.d.ts.map +1 -0
  49. package/dist/jsx/jsx-runtime.js +20 -0
  50. package/dist/jsx/jsx-runtime.js.map +1 -0
  51. package/dist/jsx/render.d.ts +4 -0
  52. package/dist/jsx/render.d.ts.map +1 -0
  53. package/dist/jsx/render.js +134 -0
  54. package/dist/jsx/render.js.map +1 -0
  55. package/dist/jsx/types.d.ts +11 -0
  56. package/dist/jsx/types.d.ts.map +1 -0
  57. package/dist/jsx/types.js +2 -0
  58. package/dist/jsx/types.js.map +1 -0
  59. package/dist/jsx-runtime.d.ts +23 -0
  60. package/dist/jsx-runtime.d.ts.map +1 -0
  61. package/dist/jsx-runtime.js +2 -0
  62. package/dist/jsx-runtime.js.map +1 -0
  63. package/dist/middleware/cors.d.ts +12 -0
  64. package/dist/middleware/cors.d.ts.map +1 -0
  65. package/dist/middleware/cors.js +75 -0
  66. package/dist/middleware/cors.js.map +1 -0
  67. package/dist/middleware/session.d.ts +24 -0
  68. package/dist/middleware/session.d.ts.map +1 -0
  69. package/dist/middleware/session.js +124 -0
  70. package/dist/middleware/session.js.map +1 -0
  71. package/dist/package.json +1 -0
  72. package/dist/renderers/react.d.ts +9 -0
  73. package/dist/renderers/react.d.ts.map +1 -0
  74. package/dist/renderers/react.js +40 -0
  75. package/dist/renderers/react.js.map +1 -0
  76. package/dist/router.d.ts +36 -0
  77. package/dist/router.d.ts.map +1 -0
  78. package/dist/router.js +363 -0
  79. package/dist/router.js.map +1 -0
  80. package/dist/types.d.ts +29 -0
  81. package/dist/types.d.ts.map +1 -0
  82. package/dist/types.js +4 -0
  83. package/dist/types.js.map +1 -0
  84. package/dist/utils/regexp.d.ts +2 -0
  85. package/dist/utils/regexp.d.ts.map +1 -0
  86. package/dist/utils/regexp.js +4 -0
  87. package/dist/utils/regexp.js.map +1 -0
  88. package/dist/utils/url.d.ts +2 -0
  89. package/dist/utils/url.d.ts.map +1 -0
  90. package/dist/utils/url.js +9 -0
  91. package/dist/utils/url.js.map +1 -0
  92. package/package.json +81 -0
  93. package/scripts/dev.js +58 -0
  94. package/scripts/generate.js +660 -0
@@ -0,0 +1,5 @@
1
+ export { createElement, Fragment } from "./createElement";
2
+ export { escapeHtml } from "./escape";
3
+ export { isRainElement, renderToString } from "./render";
4
+ export { RAIN_ELEMENT } from "./types";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/framework/jsx/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAOzD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { RainElement } from "./types";
2
+ type HtmlAttributes = {
3
+ [key: string]: unknown;
4
+ children?: unknown;
5
+ dangerouslySetInnerHTML?: {
6
+ __html: string;
7
+ };
8
+ className?: string;
9
+ id?: string;
10
+ style?: Record<string, string | number> | string;
11
+ };
12
+ type HtmlTag = string;
13
+ export declare namespace RainJSX {
14
+ type Element = RainElement;
15
+ type ElementChildrenAttribute = {
16
+ children: unknown;
17
+ };
18
+ type IntrinsicElements = {
19
+ [K in HtmlTag]: HtmlAttributes;
20
+ };
21
+ }
22
+ export {};
23
+ //# sourceMappingURL=jsx-namespace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx-namespace.d.ts","sourceRoot":"","sources":["../../src/framework/jsx/jsx-namespace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,KAAK,cAAc,GAAG;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uBAAuB,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;CAClD,CAAC;AAEF,KAAK,OAAO,GAAG,MAAM,CAAC;AAEtB,MAAM,CAAC,OAAO,WAAW,OAAO,CAAC;IAC/B,KAAK,OAAO,GAAG,WAAW,CAAC;IAC3B,KAAK,wBAAwB,GAAG;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;IACtD,KAAK,iBAAiB,GAAG;SACtB,CAAC,IAAI,OAAO,GAAG,cAAc;KAC/B,CAAC;CACH"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=jsx-namespace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx-namespace.js","sourceRoot":"","sources":["../../src/framework/jsx/jsx-namespace.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import { type RainComponent, type RainElement } from "./types";
2
+ export { Fragment } from "./createElement";
3
+ export declare function jsx(tag: string | RainComponent, props: Record<string, unknown>): RainElement;
4
+ export declare const jsxs: typeof jsx;
5
+ export declare const jsxDEV: typeof jsx;
6
+ //# sourceMappingURL=jsx-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx-runtime.d.ts","sourceRoot":"","sources":["../../src/framework/jsx/jsx-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,WAAW,EAEjB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,wBAAgB,GAAG,CACjB,GAAG,EAAE,MAAM,GAAG,aAAa,EAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,WAAW,CAgBb;AAED,eAAO,MAAM,IAAI,YAAM,CAAC;AACxB,eAAO,MAAM,MAAM,YAAM,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { RAIN_ELEMENT, } from "./types";
2
+ export { Fragment } from "./createElement";
3
+ export function jsx(tag, props) {
4
+ const children = props["children"];
5
+ const resolvedChildren = children === undefined
6
+ ? []
7
+ : Array.isArray(children)
8
+ ? children
9
+ : [children];
10
+ const { children: _children, ...rest } = props;
11
+ return {
12
+ $$typeof: RAIN_ELEMENT,
13
+ tag,
14
+ props: rest,
15
+ children: resolvedChildren,
16
+ };
17
+ }
18
+ export const jsxs = jsx;
19
+ export const jsxDEV = jsx;
20
+ //# sourceMappingURL=jsx-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx-runtime.js","sourceRoot":"","sources":["../../src/framework/jsx/jsx-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,GAKb,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,MAAM,UAAU,GAAG,CACjB,GAA2B,EAC3B,KAA8B;IAE9B,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAwC,CAAC;IAC1E,MAAM,gBAAgB,GACpB,QAAQ,KAAK,SAAS;QACpB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;YACvB,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAEnB,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IAC/C,OAAO;QACL,QAAQ,EAAE,YAAY;QACtB,GAAG;QACH,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,gBAAgB;KAC3B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG,CAAC;AACxB,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type RainElement } from "./types";
2
+ export declare function isRainElement(value: unknown): value is RainElement;
3
+ export declare function renderToString(element: RainElement): string;
4
+ //# sourceMappingURL=render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/framework/jsx/render.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,WAAW,EAAiB,MAAM,SAAS,CAAC;AAwFxE,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAMlE;AAoDD,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAE3D"}
@@ -0,0 +1,134 @@
1
+ import { Fragment } from "./createElement";
2
+ import { escapeHtml } from "./escape";
3
+ import { RAIN_ELEMENT } from "./types";
4
+ const VOID_ELEMENTS = new Set([
5
+ "area",
6
+ "base",
7
+ "br",
8
+ "col",
9
+ "embed",
10
+ "hr",
11
+ "img",
12
+ "input",
13
+ "link",
14
+ "meta",
15
+ "param",
16
+ "source",
17
+ "track",
18
+ "wbr",
19
+ ]);
20
+ const BOOLEAN_ATTRS = new Set([
21
+ "allowfullscreen",
22
+ "async",
23
+ "autofocus",
24
+ "autoplay",
25
+ "checked",
26
+ "controls",
27
+ "default",
28
+ "defer",
29
+ "disabled",
30
+ "formnovalidate",
31
+ "hidden",
32
+ "inert",
33
+ "ismap",
34
+ "loop",
35
+ "multiple",
36
+ "muted",
37
+ "nomodule",
38
+ "novalidate",
39
+ "open",
40
+ "playsinline",
41
+ "readonly",
42
+ "required",
43
+ "reversed",
44
+ "selected",
45
+ ]);
46
+ function styleToCss(style) {
47
+ const parts = [];
48
+ for (const key of Object.keys(style)) {
49
+ const value = style[key];
50
+ if (value === undefined || value === null)
51
+ continue;
52
+ const cssKey = key.replace(/[A-Z]/g, (ch) => `-${ch.toLowerCase()}`);
53
+ const cssValue = typeof value === "number" ? `${String(value)}px` : value;
54
+ parts.push(`${cssKey}:${String(cssValue)}`);
55
+ }
56
+ return parts.join(";");
57
+ }
58
+ function renderAttrs(props) {
59
+ const parts = [];
60
+ for (const key of Object.keys(props)) {
61
+ if (key === "children" || key === "dangerouslySetInnerHTML") {
62
+ continue;
63
+ }
64
+ const value = props[key];
65
+ if (value === false || value === undefined || value === null) {
66
+ continue;
67
+ }
68
+ const attrName = key === "className" ? "class" : key;
69
+ if (BOOLEAN_ATTRS.has(attrName) && value === true) {
70
+ parts.push(` ${attrName}`);
71
+ continue;
72
+ }
73
+ if (attrName === "style" && typeof value === "object") {
74
+ const css = styleToCss(value);
75
+ parts.push(` style="${escapeHtml(css)}"`);
76
+ continue;
77
+ }
78
+ parts.push(` ${attrName}="${escapeHtml(String(value))}"`);
79
+ }
80
+ return parts.join("");
81
+ }
82
+ export function isRainElement(value) {
83
+ return (typeof value === "object" &&
84
+ value !== null &&
85
+ value.$$typeof === RAIN_ELEMENT);
86
+ }
87
+ function renderChildren(children) {
88
+ const parts = [];
89
+ for (const child of children) {
90
+ if (child === null || child === undefined)
91
+ continue;
92
+ if (typeof child === "boolean")
93
+ continue;
94
+ if (Array.isArray(child)) {
95
+ parts.push(renderChildren(child));
96
+ continue;
97
+ }
98
+ if (isRainElement(child)) {
99
+ parts.push(renderElement(child));
100
+ continue;
101
+ }
102
+ parts.push(escapeHtml(String(child)));
103
+ }
104
+ return parts.join("");
105
+ }
106
+ function renderElement(element) {
107
+ const { tag, props, children } = element;
108
+ if (typeof tag === "function") {
109
+ if (tag === Fragment) {
110
+ return renderChildren(children);
111
+ }
112
+ const result = tag({ ...props, children });
113
+ if (result === null)
114
+ return "";
115
+ if (typeof result === "string")
116
+ return escapeHtml(result);
117
+ return renderElement(result);
118
+ }
119
+ const attrs = renderAttrs(props);
120
+ const isVoid = VOID_ELEMENTS.has(tag);
121
+ if (isVoid) {
122
+ return `<${tag}${attrs}>`;
123
+ }
124
+ const dangerousHtml = props["dangerouslySetInnerHTML"];
125
+ if (dangerousHtml) {
126
+ return `<${tag}${attrs}>${dangerousHtml.__html}</${tag}>`;
127
+ }
128
+ const inner = renderChildren(children);
129
+ return `<${tag}${attrs}>${inner}</${tag}>`;
130
+ }
131
+ export function renderToString(element) {
132
+ return renderElement(element);
133
+ }
134
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/framework/jsx/render.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare const RAIN_ELEMENT: unique symbol;
2
+ export interface RainElement {
3
+ readonly $$typeof: typeof RAIN_ELEMENT;
4
+ readonly tag: string | RainComponent;
5
+ readonly props: Record<string, unknown>;
6
+ readonly children: RainNode[];
7
+ }
8
+ export type RainComponent = (props: Record<string, unknown>) => RainElement | string | null;
9
+ export type RainChild = RainElement | string | number | boolean | null | undefined;
10
+ export type RainNode = RainChild | RainChild[];
11
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/framework/jsx/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,eAA6B,CAAC;AAEvD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,YAAY,CAAC;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC;CAC/B;AAED,MAAM,MAAM,aAAa,GAAG,CAC1B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC3B,WAAW,GAAG,MAAM,GAAG,IAAI,CAAC;AAEjC,MAAM,MAAM,SAAS,GACjB,WAAW,GACX,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,CAAC;AAEd,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,SAAS,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export const RAIN_ELEMENT = Symbol.for("rain.element");
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/framework/jsx/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { RainElement } from "./jsx/types";
2
+ export { Fragment, jsx, jsxDEV, jsxs } from "./jsx/jsx-runtime";
3
+ type HtmlAttributes = {
4
+ [key: string]: unknown;
5
+ children?: unknown;
6
+ dangerouslySetInnerHTML?: {
7
+ __html: string;
8
+ };
9
+ className?: string;
10
+ id?: string;
11
+ style?: Record<string, string | number> | string;
12
+ };
13
+ type HtmlTag = string;
14
+ export declare namespace JSX {
15
+ type Element = RainElement;
16
+ type ElementChildrenAttribute = {
17
+ children: unknown;
18
+ };
19
+ type IntrinsicElements = {
20
+ [K in HtmlTag]: HtmlAttributes;
21
+ };
22
+ }
23
+ //# sourceMappingURL=jsx-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx-runtime.d.ts","sourceRoot":"","sources":["../src/framework/jsx-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEhE,KAAK,cAAc,GAAG;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uBAAuB,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;CAClD,CAAC;AAEF,KAAK,OAAO,GAAG,MAAM,CAAC;AAEtB,MAAM,CAAC,OAAO,WAAW,GAAG,CAAC;IAC3B,KAAK,OAAO,GAAG,WAAW,CAAC;IAC3B,KAAK,wBAAwB,GAAG;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;IACtD,KAAK,iBAAiB,GAAG;SACtB,CAAC,IAAI,OAAO,GAAG,cAAc;KAC/B,CAAC;CACH"}
@@ -0,0 +1,2 @@
1
+ export { Fragment, jsx, jsxDEV, jsxs } from "./jsx/jsx-runtime";
2
+ //# sourceMappingURL=jsx-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx-runtime.js","sourceRoot":"","sources":["../src/framework/jsx-runtime.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { Context } from "../context";
2
+ import type { Middleware } from "../types";
3
+ export interface CorsOptions {
4
+ origin: string | string[] | ((origin: string, ctx: Context) => boolean);
5
+ methods?: string[];
6
+ allowHeaders?: string[];
7
+ exposeHeaders?: string[];
8
+ maxAge?: number;
9
+ credentials?: boolean;
10
+ }
11
+ export declare function cors(options: CorsOptions): Middleware;
12
+ //# sourceMappingURL=cors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cors.d.ts","sourceRoot":"","sources":["../../src/framework/middleware/cors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC;IACxE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAiFD,wBAAgB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,CAkCrD"}
@@ -0,0 +1,75 @@
1
+ const DEFAULT_METHODS = ["GET", "HEAD", "POST"];
2
+ const DEFAULT_MAX_AGE = 86400;
3
+ function isOriginAllowed(requestOrigin, allowed, ctx) {
4
+ if (allowed === "*")
5
+ return true;
6
+ if (typeof allowed === "string")
7
+ return requestOrigin === allowed;
8
+ if (typeof allowed === "function")
9
+ return allowed(requestOrigin, ctx);
10
+ return allowed.includes(requestOrigin);
11
+ }
12
+ function resolveAllowOriginHeader(requestOrigin, allowed) {
13
+ if (allowed === "*")
14
+ return "*";
15
+ return requestOrigin;
16
+ }
17
+ function setCorsHeaders(headers, requestOrigin, options) {
18
+ headers.set("Access-Control-Allow-Origin", resolveAllowOriginHeader(requestOrigin, options.origin));
19
+ if (options.origin !== "*") {
20
+ headers.append("Vary", "Origin");
21
+ }
22
+ if (options.credentials) {
23
+ headers.set("Access-Control-Allow-Credentials", "true");
24
+ }
25
+ if (options.exposeHeaders && options.exposeHeaders.length > 0) {
26
+ headers.set("Access-Control-Expose-Headers", options.exposeHeaders.join(", "));
27
+ }
28
+ }
29
+ function handlePreflight(ctx, requestOrigin, options) {
30
+ const headers = new Headers();
31
+ setCorsHeaders(headers, requestOrigin, options);
32
+ const methods = options.methods ?? DEFAULT_METHODS;
33
+ headers.set("Access-Control-Allow-Methods", methods.join(", "));
34
+ if (options.allowHeaders && options.allowHeaders.length > 0) {
35
+ headers.set("Access-Control-Allow-Headers", options.allowHeaders.join(", "));
36
+ }
37
+ else {
38
+ const requested = ctx.req.headers.get("Access-Control-Request-Headers");
39
+ if (requested) {
40
+ headers.set("Access-Control-Allow-Headers", requested);
41
+ headers.append("Vary", "Access-Control-Request-Headers");
42
+ }
43
+ }
44
+ const maxAge = options.maxAge ?? DEFAULT_MAX_AGE;
45
+ headers.set("Access-Control-Max-Age", String(maxAge));
46
+ return new Response(null, { status: 204, headers });
47
+ }
48
+ export function cors(options) {
49
+ if (options.origin === "*" && options.credentials) {
50
+ throw new Error('[Rain] CORS misconfiguration: origin "*" cannot be used ' +
51
+ "with credentials: true. Browsers will reject this " +
52
+ "combination. Use a specific origin or origin list instead.");
53
+ }
54
+ return async (ctx, next) => {
55
+ const requestOrigin = ctx.req.headers.get("Origin");
56
+ if (!requestOrigin) {
57
+ return next();
58
+ }
59
+ if (!isOriginAllowed(requestOrigin, options.origin, ctx)) {
60
+ return next();
61
+ }
62
+ if (ctx.method === "OPTIONS") {
63
+ return handlePreflight(ctx, requestOrigin, options);
64
+ }
65
+ const response = await next();
66
+ const headers = new Headers(response.headers);
67
+ setCorsHeaders(headers, requestOrigin, options);
68
+ return new Response(response.body, {
69
+ status: response.status,
70
+ statusText: response.statusText,
71
+ headers,
72
+ });
73
+ };
74
+ }
75
+ //# sourceMappingURL=cors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cors.js","sourceRoot":"","sources":["../../src/framework/middleware/cors.ts"],"names":[],"mappings":"AAYA,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAChD,MAAM,eAAe,GAAG,KAAK,CAAC;AAE9B,SAAS,eAAe,CACtB,aAAqB,EACrB,OAA8B,EAC9B,GAAY;IAEZ,IAAI,OAAO,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACjC,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,aAAa,KAAK,OAAO,CAAC;IAClE,IAAI,OAAO,OAAO,KAAK,UAAU;QAAE,OAAO,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IACtE,OAAO,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,wBAAwB,CAC/B,aAAqB,EACrB,OAA8B;IAE9B,IAAI,OAAO,KAAK,GAAG;QAAE,OAAO,GAAG,CAAC;IAChC,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,SAAS,cAAc,CACrB,OAAgB,EAChB,aAAqB,EACrB,OAAoB;IAEpB,OAAO,CAAC,GAAG,CACT,6BAA6B,EAC7B,wBAAwB,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,CACxD,CAAC;IAEF,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC3B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9D,OAAO,CAAC,GAAG,CACT,+BAA+B,EAC/B,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CACjC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CACtB,GAAY,EACZ,aAAqB,EACrB,OAAoB;IAEpB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;IAEhD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,eAAe,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAEhE,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5D,OAAO,CAAC,GAAG,CACT,8BAA8B,EAC9B,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAChC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QACxE,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,SAAS,CAAC,CAAC;YACvD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,gCAAgC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,eAAe,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAEtD,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,OAAoB;IACvC,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CACb,0DAA0D;YACxD,oDAAoD;YACpD,4DAA4D,CAC/D,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,EAAE,GAAY,EAAE,IAA6B,EAAE,EAAE;QAC3D,MAAM,aAAa,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEpD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;YACzD,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QAED,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,eAAe,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC9C,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;QAEhD,OAAO,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE;YACjC,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,OAAO;SACR,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { Context } from "../context";
2
+ import type { Middleware } from "../types";
3
+ export interface SessionData {
4
+ [key: string]: unknown;
5
+ }
6
+ export interface SessionOptions {
7
+ kvBinding: string;
8
+ cookieName?: string;
9
+ maxAge?: number;
10
+ prefix?: string;
11
+ }
12
+ export interface Session {
13
+ get<T = unknown>(key: string): T | undefined;
14
+ set(key: string, value: unknown): void;
15
+ delete(key: string): void;
16
+ has(key: string): boolean;
17
+ clear(): void;
18
+ flash(key: string, value?: unknown): unknown | undefined;
19
+ readonly id: string;
20
+ readonly isNew: boolean;
21
+ }
22
+ export declare function getSession(ctx: Context): Session;
23
+ export declare function session(options: SessionOptions): Middleware;
24
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/framework/middleware/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAY,MAAM,UAAU,CAAC;AAGrD,MAAM,WAAW,WAAW;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IAC7C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACvC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,KAAK,IAAI,IAAI,CAAC;IACd,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;IACzD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAID,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAUhD;AAsFD,wBAAgB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,UAAU,CAiD3D"}
@@ -0,0 +1,124 @@
1
+ import { defineKey } from "../types";
2
+ const SESSION_KEY = defineKey("rain:session");
3
+ export function getSession(ctx) {
4
+ const current = ctx.get(SESSION_KEY);
5
+ if (!current) {
6
+ throw new Error("[Rain] Session not found. Ensure the session " +
7
+ "middleware is applied to this route. " +
8
+ "Usage: app.use(session({ kvBinding: 'SESSIONS' }))");
9
+ }
10
+ return current;
11
+ }
12
+ const DEFAULT_COOKIE_NAME = "__rain_session";
13
+ const DEFAULT_MAX_AGE = 86400;
14
+ const DEFAULT_PREFIX = "session:";
15
+ const SESSION_ID_LENGTH = 32;
16
+ function generateSessionId() {
17
+ const bytes = crypto.getRandomValues(new Uint8Array(SESSION_ID_LENGTH));
18
+ return Array.from(bytes, (b) => b.toString(16).padStart(2, "0")).join("");
19
+ }
20
+ function resolveKv(ctx, binding) {
21
+ const kv = ctx.bindings[binding];
22
+ if (!kv) {
23
+ throw new Error(`[Rain] KV binding "${binding}" not found. ` +
24
+ "Add it to your wrangler.toml: " +
25
+ `[[kv_namespaces]]\nbinding = "${binding}"`);
26
+ }
27
+ return kv;
28
+ }
29
+ class KvSession {
30
+ id;
31
+ isNew;
32
+ data;
33
+ dirty;
34
+ constructor(id, data, isNew) {
35
+ this.id = id;
36
+ this.data = data;
37
+ this.isNew = isNew;
38
+ this.dirty = isNew;
39
+ }
40
+ get(key) {
41
+ return this.data[key];
42
+ }
43
+ set(key, value) {
44
+ this.data[key] = value;
45
+ this.dirty = true;
46
+ }
47
+ delete(key) {
48
+ if (key in this.data) {
49
+ delete this.data[key];
50
+ this.dirty = true;
51
+ }
52
+ }
53
+ has(key) {
54
+ return key in this.data;
55
+ }
56
+ clear() {
57
+ this.data = {};
58
+ this.dirty = true;
59
+ }
60
+ flash(key, value) {
61
+ const flashKey = `__flash:${key}`;
62
+ if (value !== undefined) {
63
+ this.set(flashKey, value);
64
+ return undefined;
65
+ }
66
+ const stored = this.get(flashKey);
67
+ if (stored !== undefined) {
68
+ this.delete(flashKey);
69
+ }
70
+ return stored;
71
+ }
72
+ isDirty() {
73
+ return this.dirty;
74
+ }
75
+ toJSON() {
76
+ return { ...this.data };
77
+ }
78
+ }
79
+ export function session(options) {
80
+ const cookieName = options.cookieName ?? DEFAULT_COOKIE_NAME;
81
+ const maxAge = options.maxAge ?? DEFAULT_MAX_AGE;
82
+ const prefix = options.prefix ?? DEFAULT_PREFIX;
83
+ return async (ctx, next) => {
84
+ const kv = resolveKv(ctx, options.kvBinding);
85
+ const existingId = ctx.cookie(cookieName);
86
+ let sessionData = {};
87
+ let isNew = true;
88
+ let sessionId;
89
+ if (existingId && /^[0-9a-f]{64}$/.test(existingId)) {
90
+ const stored = await kv.get(`${prefix}${existingId}`, "json");
91
+ if (stored) {
92
+ sessionData = stored;
93
+ isNew = false;
94
+ sessionId = existingId;
95
+ }
96
+ else {
97
+ sessionId = generateSessionId();
98
+ }
99
+ }
100
+ else {
101
+ sessionId = generateSessionId();
102
+ }
103
+ const kvSession = new KvSession(sessionId, sessionData, isNew);
104
+ ctx.set(SESSION_KEY, kvSession);
105
+ const response = await next();
106
+ if (kvSession.isDirty()) {
107
+ const kvKey = `${prefix}${sessionId}`;
108
+ await kv.put(kvKey, JSON.stringify(kvSession.toJSON()), {
109
+ expirationTtl: maxAge,
110
+ });
111
+ }
112
+ if (isNew) {
113
+ ctx.setCookie(cookieName, sessionId, {
114
+ maxAge,
115
+ httpOnly: true,
116
+ secure: true,
117
+ sameSite: "Lax",
118
+ path: "/",
119
+ });
120
+ }
121
+ return response;
122
+ };
123
+ }
124
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/framework/middleware/session.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAwBrC,MAAM,WAAW,GAAsB,SAAS,CAAU,cAAc,CAAC,CAAC;AAE1E,MAAM,UAAU,UAAU,CAAC,GAAY;IACrC,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACrC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,+CAA+C;YAC7C,uCAAuC;YACvC,oDAAoD,CACvD,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AAC7C,MAAM,eAAe,GAAG,KAAK,CAAC;AAC9B,MAAM,cAAc,GAAG,UAAU,CAAC;AAClC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B,SAAS,iBAAiB;IACxB,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACxE,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,SAAS,CAAC,GAAY,EAAE,OAAe;IAC9C,MAAM,EAAE,GAAI,GAAG,CAAC,QAA+C,CAAC,OAAO,CAE1D,CAAC;IACd,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,MAAM,IAAI,KAAK,CACb,sBAAsB,OAAO,eAAe;YAC1C,gCAAgC;YAChC,iCAAiC,OAAO,GAAG,CAC9C,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,SAAS;IACJ,EAAE,CAAS;IACX,KAAK,CAAU;IAChB,IAAI,CAAc;IAClB,KAAK,CAAU;IAEvB,YAAY,EAAU,EAAE,IAAiB,EAAE,KAAc;QACvD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,GAAG,CAAc,GAAW;QAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAkB,CAAC;IACzC,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAc;QAC7B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;IACH,CAAC;IAED,GAAG,CAAC,GAAW;QACb,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;IAC1B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,GAAW,EAAE,KAAe;QAChC,MAAM,QAAQ,GAAG,WAAW,GAAG,EAAE,CAAC;QAClC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAC1B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,MAAM;QACJ,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;CACF;AAED,MAAM,UAAU,OAAO,CAAC,OAAuB;IAC7C,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,mBAAmB,CAAC;IAC7D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,eAAe,CAAC;IACjD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,cAAc,CAAC;IAEhD,OAAO,KAAK,EAAE,GAAY,EAAE,IAAI,EAAE,EAAE;QAClC,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAI,WAAW,GAAgB,EAAE,CAAC;QAClC,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,IAAI,SAAiB,CAAC;QAEtB,IAAI,UAAU,IAAI,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACpD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,UAAU,EAAE,EAAE,MAAM,CAAC,CAAC;YAC9D,IAAI,MAAM,EAAE,CAAC;gBACX,WAAW,GAAG,MAAqB,CAAC;gBACpC,KAAK,GAAG,KAAK,CAAC;gBACd,SAAS,GAAG,UAAU,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,SAAS,GAAG,iBAAiB,EAAE,CAAC;YAClC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,iBAAiB,EAAE,CAAC;QAClC,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;QAC/D,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAEhC,MAAM,QAAQ,GAAG,MAAM,IAAI,EAAE,CAAC;QAE9B,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,GAAG,MAAM,GAAG,SAAS,EAAE,CAAC;YACtC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE;gBACtD,aAAa,EAAE,MAAM;aACtB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,EAAE;gBACnC,MAAM;gBACN,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE,KAAK;gBACf,IAAI,EAAE,GAAG;aACV,CAAC,CAAC;QACL,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1 @@
1
+ {"type":"module"}
@@ -0,0 +1,9 @@
1
+ import type { Context } from "../context";
2
+ interface RenderReactOptions {
3
+ status?: number;
4
+ headers?: HeadersInit;
5
+ streaming?: boolean;
6
+ }
7
+ export declare function renderReact(_ctx: Context, element: unknown, options?: RenderReactOptions): Promise<Response>;
8
+ export {};
9
+ //# sourceMappingURL=react.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/framework/renderers/react.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,UAAU,kBAAkB;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AA2BD,wBAAsB,WAAW,CAC/B,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,QAAQ,CAAC,CA0BnB"}
@@ -0,0 +1,40 @@
1
+ let cachedServer;
2
+ async function getReactDOMServer() {
3
+ if (cachedServer)
4
+ return cachedServer;
5
+ try {
6
+ const mod = "react-dom/server";
7
+ cachedServer = (await import(mod));
8
+ return cachedServer;
9
+ }
10
+ catch {
11
+ throw new Error("[Rain] renderReact() requires 'react' and 'react-dom'. " +
12
+ "Install them: npm install react react-dom " +
13
+ "and their types: npm install -D @types/react @types/react-dom");
14
+ }
15
+ }
16
+ export async function renderReact(_ctx, element, options) {
17
+ const server = await getReactDOMServer();
18
+ const status = options?.status ?? 200;
19
+ const streaming = options?.streaming ?? true;
20
+ const baseHeaders = {
21
+ "content-type": "text/html; charset=UTF-8",
22
+ };
23
+ const mergedHeaders = options?.headers
24
+ ? {
25
+ ...baseHeaders,
26
+ ...Object.fromEntries(new Headers(options.headers).entries()),
27
+ }
28
+ : baseHeaders;
29
+ if (streaming && typeof server.renderToReadableStream === "function") {
30
+ const stream = await server.renderToReadableStream(element, {
31
+ onError(error) {
32
+ console.error("[Rain] React SSR streaming error:", error);
33
+ },
34
+ });
35
+ return new Response(stream, { status, headers: mergedHeaders });
36
+ }
37
+ const html = server.renderToString(element);
38
+ return new Response(html, { status, headers: mergedHeaders });
39
+ }
40
+ //# sourceMappingURL=react.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react.js","sourceRoot":"","sources":["../../src/framework/renderers/react.ts"],"names":[],"mappings":"AAgBA,IAAI,YAAwC,CAAC;AAE7C,KAAK,UAAU,iBAAiB;IAC9B,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IACtC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,kBAAkB,CAAC;QAC/B,YAAY,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,CAA8B,CAAC;QAChE,OAAO,YAAY,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,yDAAyD;YACvD,4CAA4C;YAC5C,+DAA+D,CAClE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAa,EACb,OAAgB,EAChB,OAA4B;IAE5B,MAAM,MAAM,GAAG,MAAM,iBAAiB,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,GAAG,CAAC;IACtC,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC;IAC7C,MAAM,WAAW,GAA2B;QAC1C,cAAc,EAAE,0BAA0B;KAC3C,CAAC;IAEF,MAAM,aAAa,GAAG,OAAO,EAAE,OAAO;QACpC,CAAC,CAAC;YACE,GAAG,WAAW;YACd,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;SAC9D;QACH,CAAC,CAAC,WAAW,CAAC;IAEhB,IAAI,SAAS,IAAI,OAAO,MAAM,CAAC,sBAAsB,KAAK,UAAU,EAAE,CAAC;QACrE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,OAAO,EAAE;YAC1D,OAAO,CAAC,KAAc;gBACpB,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;YAC5D,CAAC;SACF,CAAC,CAAC;QACH,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAC5C,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;AAChE,CAAC"}