arcanajs 2.1.6 → 2.2.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 (52) hide show
  1. package/README.md +169 -2
  2. package/framework/cli/index.js +110 -17
  3. package/framework/cli/webpack.config.js +69 -42
  4. package/framework/lib/client/index.js +22 -6
  5. package/framework/lib/index.d.ts +2 -0
  6. package/framework/lib/index.js +42 -17
  7. package/framework/lib/server/ArcanaJSMiddleware.js +17 -10
  8. package/framework/lib/server/ArcanaJSServer.js +45 -29
  9. package/framework/lib/server/ControllerBinder.js +4 -1
  10. package/framework/lib/server/CsrfMiddleware.js +10 -3
  11. package/framework/lib/server/DynamicRouter.js +5 -1
  12. package/framework/lib/server/ResponseHandlerMiddleware.js +5 -1
  13. package/framework/lib/server/Router.js +15 -7
  14. package/framework/lib/server.d.ts +9 -0
  15. package/framework/lib/server.js +40 -6
  16. package/framework/lib/shared/components/Body.js +7 -3
  17. package/framework/lib/shared/components/Head.js +47 -10
  18. package/framework/lib/shared/components/Link.js +9 -5
  19. package/framework/lib/shared/components/NavLink.js +10 -6
  20. package/framework/lib/shared/components/Page.js +9 -5
  21. package/framework/lib/shared/context/HeadContext.js +5 -2
  22. package/framework/lib/shared/context/PageContext.js +5 -2
  23. package/framework/lib/shared/context/RouterContext.js +9 -5
  24. package/framework/lib/shared/core/ArcanaJSApp.js +18 -14
  25. package/framework/lib/shared/hooks/useDynamicComponents.js +8 -4
  26. package/framework/lib/shared/hooks/useHead.d.ts +1 -1
  27. package/framework/lib/shared/hooks/useHead.js +7 -3
  28. package/framework/lib/shared/hooks/useLocation.js +7 -3
  29. package/framework/lib/shared/hooks/usePage.js +7 -3
  30. package/framework/lib/shared/hooks/useParams.js +8 -4
  31. package/framework/lib/shared/hooks/useQuery.js +7 -3
  32. package/framework/lib/shared/hooks/useRouter.d.ts +1 -1
  33. package/framework/lib/shared/hooks/useRouter.js +8 -4
  34. package/framework/lib/shared/utils/createSingletonContext.js +6 -3
  35. package/framework/lib/shared/views/ErrorPage.d.ts +7 -0
  36. package/framework/lib/shared/views/ErrorPage.js +11 -0
  37. package/framework/lib/shared/views/NotFoundPage.d.ts +5 -0
  38. package/framework/lib/shared/views/NotFoundPage.js +12 -0
  39. package/framework/templates/ErrorPage.tsx +137 -0
  40. package/framework/templates/HomePage.tsx +325 -0
  41. package/framework/templates/NotFoundPage.tsx +109 -0
  42. package/framework/templates/arcanajs.png +0 -0
  43. package/framework/templates/arcanajs.svg +12 -0
  44. package/framework/templates/client-index.tsx +7 -0
  45. package/framework/templates/favicon.ico +0 -0
  46. package/framework/templates/globals.css +198 -0
  47. package/framework/templates/package.json +15 -0
  48. package/framework/templates/postcss.config.js +6 -0
  49. package/framework/templates/server-controller-home.ts +7 -0
  50. package/framework/templates/server-index.ts +10 -0
  51. package/framework/templates/server-routes-web.ts +7 -0
  52. package/package.json +2 -2
@@ -1,17 +1,42 @@
1
- export * from "./client";
2
- export * from "./shared/components/Body";
3
- export * from "./shared/components/Head";
4
- export * from "./shared/components/Link";
5
- export * from "./shared/components/NavLink";
6
- export * from "./shared/components/Page";
7
- export * from "./shared/context/HeadContext";
8
- export * from "./shared/context/PageContext";
9
- export * from "./shared/context/RouterContext";
10
- export * from "./shared/core/ArcanaJSApp";
11
- export * from "./shared/hooks/useDynamicComponents";
12
- export * from "./shared/hooks/useHead";
13
- export * from "./shared/hooks/useLocation";
14
- export * from "./shared/hooks/usePage";
15
- export * from "./shared/hooks/useParams";
16
- export * from "./shared/hooks/useQuery";
17
- export * from "./shared/hooks/useRouter";
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ var __importDefault = (this && this.__importDefault) || function (mod) {
17
+ return (mod && mod.__esModule) ? mod : { "default": mod };
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.ErrorPage = exports.NotFoundPage = void 0;
21
+ __exportStar(require("./client"), exports);
22
+ __exportStar(require("./shared/components/Body"), exports);
23
+ __exportStar(require("./shared/components/Head"), exports);
24
+ __exportStar(require("./shared/components/Link"), exports);
25
+ __exportStar(require("./shared/components/NavLink"), exports);
26
+ __exportStar(require("./shared/components/Page"), exports);
27
+ __exportStar(require("./shared/context/HeadContext"), exports);
28
+ __exportStar(require("./shared/context/PageContext"), exports);
29
+ __exportStar(require("./shared/context/RouterContext"), exports);
30
+ __exportStar(require("./shared/core/ArcanaJSApp"), exports);
31
+ __exportStar(require("./shared/hooks/useDynamicComponents"), exports);
32
+ __exportStar(require("./shared/hooks/useHead"), exports);
33
+ __exportStar(require("./shared/hooks/useLocation"), exports);
34
+ __exportStar(require("./shared/hooks/usePage"), exports);
35
+ __exportStar(require("./shared/hooks/useParams"), exports);
36
+ __exportStar(require("./shared/hooks/useQuery"), exports);
37
+ __exportStar(require("./shared/hooks/useRouter"), exports);
38
+ // Default error views
39
+ var NotFoundPage_1 = require("./shared/views/NotFoundPage");
40
+ Object.defineProperty(exports, "NotFoundPage", { enumerable: true, get: function () { return __importDefault(NotFoundPage_1).default; } });
41
+ var ErrorPage_1 = require("./shared/views/ErrorPage");
42
+ Object.defineProperty(exports, "ErrorPage", { enumerable: true, get: function () { return __importDefault(ErrorPage_1).default; } });
@@ -1,8 +1,14 @@
1
- import fs from "fs";
2
- import React from "react";
3
- import { renderToString } from "react-dom/server";
4
- import { HeadContext } from "../shared/context/HeadContext";
5
- import { ArcanaJSApp } from "../shared/core/ArcanaJSApp";
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createArcanaJSMiddleware = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const react_1 = __importDefault(require("react"));
9
+ const server_1 = require("react-dom/server");
10
+ const HeadContext_1 = require("../shared/context/HeadContext");
11
+ const ArcanaJSApp_1 = require("../shared/core/ArcanaJSApp");
6
12
  const DEFAULT_HTML_TEMPLATE = `<!DOCTYPE html>
7
13
  <html lang="en">
8
14
  <head>
@@ -19,15 +25,15 @@ const DEFAULT_HTML_TEMPLATE = `<!DOCTYPE html>
19
25
  const safeStringify = (obj) => {
20
26
  return JSON.stringify(obj).replace(/</g, "\\u003c");
21
27
  };
22
- export const createArcanaJSMiddleware = (options) => {
28
+ const createArcanaJSMiddleware = (options) => {
23
29
  const { views, indexFile, layout } = options;
24
30
  let cachedIndexHtml = null;
25
31
  const getIndexHtml = (callback) => {
26
32
  if (process.env.NODE_ENV === "production" && cachedIndexHtml) {
27
33
  return callback(null, cachedIndexHtml);
28
34
  }
29
- if (indexFile && fs.existsSync(indexFile)) {
30
- fs.readFile(indexFile, "utf8", (err, htmlData) => {
35
+ if (indexFile && fs_1.default.existsSync(indexFile)) {
36
+ fs_1.default.readFile(indexFile, "utf8", (err, htmlData) => {
31
37
  if (!err && process.env.NODE_ENV === "production") {
32
38
  cachedIndexHtml = htmlData;
33
39
  }
@@ -53,7 +59,7 @@ export const createArcanaJSMiddleware = (options) => {
53
59
  tags: headTags,
54
60
  push: (nodes) => headTags.push(nodes),
55
61
  };
56
- const appHtml = renderToString(React.createElement(HeadContext.Provider, { value: headManager }, React.createElement(ArcanaJSApp, {
62
+ const appHtml = (0, server_1.renderToString)(react_1.default.createElement(HeadContext_1.HeadContext.Provider, { value: headManager }, react_1.default.createElement(ArcanaJSApp_1.ArcanaJSApp, {
57
63
  initialPage: page,
58
64
  initialData: data,
59
65
  initialParams: params,
@@ -62,7 +68,7 @@ export const createArcanaJSMiddleware = (options) => {
62
68
  views: views,
63
69
  layout: layout,
64
70
  })));
65
- const headHtml = renderToString(React.createElement(React.Fragment, null, ...headTags));
71
+ const headHtml = (0, server_1.renderToString)(react_1.default.createElement(react_1.default.Fragment, null, ...headTags));
66
72
  getIndexHtml((err, htmlData) => {
67
73
  if (err) {
68
74
  console.error("Error reading index.html", err);
@@ -90,3 +96,4 @@ export const createArcanaJSMiddleware = (options) => {
90
96
  next();
91
97
  };
92
98
  };
99
+ exports.createArcanaJSMiddleware = createArcanaJSMiddleware;
@@ -1,17 +1,25 @@
1
- import compression from "compression";
2
- import cookieParser from "cookie-parser";
3
- import express from "express";
4
- import fs from "fs";
5
- import helmet from "helmet";
6
- import path from "path";
7
- import { createArcanaJSMiddleware } from "./ArcanaJSMiddleware";
8
- import { createCsrfMiddleware } from "./CsrfMiddleware";
9
- import { createDynamicRouter } from "./DynamicRouter";
10
- import { responseHandler } from "./ResponseHandlerMiddleware";
11
- export class ArcanaJSServer {
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ArcanaJSServer = void 0;
7
+ const compression_1 = __importDefault(require("compression"));
8
+ const cookie_parser_1 = __importDefault(require("cookie-parser"));
9
+ const express_1 = __importDefault(require("express"));
10
+ const fs_1 = __importDefault(require("fs"));
11
+ const helmet_1 = __importDefault(require("helmet"));
12
+ const path_1 = __importDefault(require("path"));
13
+ const ArcanaJSMiddleware_1 = require("./ArcanaJSMiddleware");
14
+ const CsrfMiddleware_1 = require("./CsrfMiddleware");
15
+ const DynamicRouter_1 = require("./DynamicRouter");
16
+ const ResponseHandlerMiddleware_1 = require("./ResponseHandlerMiddleware");
17
+ const NotFoundPage_1 = __importDefault(require("../shared/views/NotFoundPage"));
18
+ const ErrorPage_1 = __importDefault(require("../shared/views/ErrorPage"));
19
+ class ArcanaJSServer {
12
20
  constructor(config) {
13
21
  this.config = config;
14
- this.app = express();
22
+ this.app = (0, express_1.default)();
15
23
  this.initialize();
16
24
  }
17
25
  initialize() {
@@ -45,27 +53,34 @@ export class ArcanaJSServer {
45
53
  console.warn("No views found. Please check your views directory.");
46
54
  views = {};
47
55
  }
56
+ // Add default error views if not already present
57
+ if (!views.NotFoundPage) {
58
+ views.NotFoundPage = NotFoundPage_1.default;
59
+ }
60
+ if (!views.ErrorPage) {
61
+ views.ErrorPage = ErrorPage_1.default;
62
+ }
48
63
  // Security and Performance
49
- this.app.use(helmet({
64
+ this.app.use((0, helmet_1.default)({
50
65
  contentSecurityPolicy: false,
51
66
  }));
52
- this.app.use(compression());
53
- this.app.use(cookieParser());
54
- this.app.use(createCsrfMiddleware());
55
- this.app.use(responseHandler);
67
+ this.app.use((0, compression_1.default)());
68
+ this.app.use((0, cookie_parser_1.default)());
69
+ this.app.use((0, CsrfMiddleware_1.createCsrfMiddleware)());
70
+ this.app.use(ResponseHandlerMiddleware_1.responseHandler);
56
71
  // Static files
57
- this.app.use(express.static(path.resolve(process.cwd(), distDir), {
72
+ this.app.use(express_1.default.static(path_1.default.resolve(process.cwd(), distDir), {
58
73
  index: false,
59
74
  maxAge: "1y",
60
75
  }));
61
- this.app.use(express.static(path.resolve(process.cwd(), staticDir), {
76
+ this.app.use(express_1.default.static(path_1.default.resolve(process.cwd(), staticDir), {
62
77
  index: false,
63
78
  maxAge: "1d",
64
79
  }));
65
80
  // ArcanaJS Middleware
66
- this.app.use(createArcanaJSMiddleware({
81
+ this.app.use((0, ArcanaJSMiddleware_1.createArcanaJSMiddleware)({
67
82
  views,
68
- indexFile: path.resolve(process.cwd(), indexFile),
83
+ indexFile: path_1.default.resolve(process.cwd(), indexFile),
69
84
  layout,
70
85
  }));
71
86
  // Custom Routes
@@ -78,7 +93,7 @@ export class ArcanaJSServer {
78
93
  }
79
94
  }
80
95
  // Dynamic Router
81
- this.app.use(createDynamicRouter(views));
96
+ this.app.use((0, DynamicRouter_1.createDynamicRouter)(views));
82
97
  // 404 Fallback
83
98
  this.app.use((req, res) => {
84
99
  res.status(404).renderPage("NotFoundPage");
@@ -95,20 +110,20 @@ export class ArcanaJSServer {
95
110
  discoverViews() {
96
111
  const views = {};
97
112
  const viewsDir = this.config.viewsDir
98
- ? path.resolve(process.cwd(), this.config.viewsDir)
99
- : path.resolve(process.cwd(), "src/views");
113
+ ? path_1.default.resolve(process.cwd(), this.config.viewsDir)
114
+ : path_1.default.resolve(process.cwd(), "src/views");
100
115
  const traverse = (dir) => {
101
- if (!fs.existsSync(dir))
116
+ if (!fs_1.default.existsSync(dir))
102
117
  return;
103
- const files = fs.readdirSync(dir);
118
+ const files = fs_1.default.readdirSync(dir);
104
119
  files.forEach((file) => {
105
- const fullPath = path.join(dir, file);
106
- const stat = fs.statSync(fullPath);
120
+ const fullPath = path_1.default.join(dir, file);
121
+ const stat = fs_1.default.statSync(fullPath);
107
122
  if (stat.isDirectory()) {
108
123
  traverse(fullPath);
109
124
  }
110
125
  else if (file.endsWith(".tsx") || file.endsWith(".jsx")) {
111
- const relativePath = path.relative(viewsDir, fullPath);
126
+ const relativePath = path_1.default.relative(viewsDir, fullPath);
112
127
  const viewName = relativePath.replace(/\.(tsx|jsx)$/, "");
113
128
  try {
114
129
  // Use __non_webpack_require__ if available to avoid Webpack bundling issues
@@ -145,3 +160,4 @@ export class ArcanaJSServer {
145
160
  });
146
161
  }
147
162
  }
163
+ exports.ArcanaJSServer = ArcanaJSServer;
@@ -1,4 +1,6 @@
1
- export default class ControllerBinder {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class ControllerBinder {
2
4
  static handle(controller, method) {
3
5
  // Instantiate the controller once (Singleton pattern) for performance
4
6
  // This assumes controllers are stateless, which is best practice.
@@ -27,3 +29,4 @@ export default class ControllerBinder {
27
29
  };
28
30
  }
29
31
  }
32
+ exports.default = ControllerBinder;
@@ -1,11 +1,17 @@
1
- import crypto from "crypto";
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createCsrfMiddleware = void 0;
7
+ const crypto_1 = __importDefault(require("crypto"));
2
8
  const CSRF_COOKIE_NAME = "_csrf";
3
- export const createCsrfMiddleware = () => {
9
+ const createCsrfMiddleware = () => {
4
10
  return (req, res, next) => {
5
11
  // 1. Generate or retrieve token
6
12
  let token = req.cookies[CSRF_COOKIE_NAME];
7
13
  if (!token) {
8
- token = crypto.randomBytes(32).toString("hex");
14
+ token = crypto_1.default.randomBytes(32).toString("hex");
9
15
  res.cookie(CSRF_COOKIE_NAME, token, {
10
16
  httpOnly: true,
11
17
  secure: process.env.NODE_ENV === "production",
@@ -25,3 +31,4 @@ export const createCsrfMiddleware = () => {
25
31
  next();
26
32
  };
27
33
  };
34
+ exports.createCsrfMiddleware = createCsrfMiddleware;
@@ -1,4 +1,7 @@
1
- export const createDynamicRouter = (views) => {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createDynamicRouter = void 0;
4
+ const createDynamicRouter = (views) => {
2
5
  return (req, res, next) => {
3
6
  // Remove leading slash
4
7
  let path = req.path.substring(1);
@@ -44,3 +47,4 @@ export const createDynamicRouter = (views) => {
44
47
  next();
45
48
  };
46
49
  };
50
+ exports.createDynamicRouter = createDynamicRouter;
@@ -1,4 +1,7 @@
1
- export const responseHandler = (req, res, next) => {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.responseHandler = void 0;
4
+ const responseHandler = (req, res, next) => {
2
5
  res.success = (data = {}, message = "Success", status = 200) => {
3
6
  return res.status(status).json({
4
7
  success: true,
@@ -24,3 +27,4 @@ export const responseHandler = (req, res, next) => {
24
27
  };
25
28
  next();
26
29
  };
30
+ exports.responseHandler = responseHandler;
@@ -1,11 +1,17 @@
1
- import express from "express";
2
- import ControllerBinder from "./ControllerBinder";
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Route = exports.Router = void 0;
7
+ const express_1 = __importDefault(require("express"));
8
+ const ControllerBinder_1 = __importDefault(require("./ControllerBinder"));
3
9
  /**
4
10
  * Provides Routing syntax for defining routes with prefixes, middlewares, and groups
5
11
  */
6
- export class Router {
12
+ class Router {
7
13
  constructor() {
8
- this.router = express.Router();
14
+ this.router = express_1.default.Router();
9
15
  this.middlewareStack = [];
10
16
  this.prefixStack = [];
11
17
  }
@@ -142,15 +148,16 @@ export class Router {
142
148
  }
143
149
  if (Array.isArray(action) && action.length === 2) {
144
150
  const [controller, method] = action;
145
- return ControllerBinder.handle(controller, method);
151
+ return ControllerBinder_1.default.handle(controller, method);
146
152
  }
147
153
  throw new Error('Action must be a function or array [Controller, "method"]');
148
154
  }
149
155
  }
156
+ exports.Router = Router;
150
157
  /**
151
158
  * Static Route class for Laravel-like syntax
152
159
  */
153
- export class Route {
160
+ class Route {
154
161
  static create() {
155
162
  return Router.create();
156
163
  }
@@ -191,5 +198,6 @@ export class Route {
191
198
  this._router = new Router();
192
199
  }
193
200
  }
201
+ exports.Route = Route;
194
202
  Route._router = new Router();
195
- export default Route;
203
+ exports.default = Route;
@@ -1,6 +1,15 @@
1
+ import { Express } from "express";
2
+ import { ArcanaJSServer, ArcanaJSConfig } from "./server/ArcanaJSServer";
1
3
  export * from "./server/ArcanaJSMiddleware";
2
4
  export * from "./server/ArcanaJSServer";
3
5
  export { default as ControllerBinder } from "./server/ControllerBinder";
4
6
  export * from "./server/DynamicRouter";
5
7
  export * from "./server/Router";
6
8
  export { default as Route } from "./server/Router";
9
+ /**
10
+ * Create an ArcanaJS server with the given Express app
11
+ * @param app Express application instance
12
+ * @param config Optional ArcanaJS configuration
13
+ * @returns ArcanaJSServer instance
14
+ */
15
+ export declare function createArcanaServer(app: Express, config?: Partial<ArcanaJSConfig>): ArcanaJSServer;
@@ -1,6 +1,40 @@
1
- export * from "./server/ArcanaJSMiddleware";
2
- export * from "./server/ArcanaJSServer";
3
- export { default as ControllerBinder } from "./server/ControllerBinder";
4
- export * from "./server/DynamicRouter";
5
- export * from "./server/Router";
6
- export { default as Route } from "./server/Router";
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ var __importDefault = (this && this.__importDefault) || function (mod) {
17
+ return (mod && mod.__esModule) ? mod : { "default": mod };
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.Route = exports.ControllerBinder = void 0;
21
+ exports.createArcanaServer = createArcanaServer;
22
+ const ArcanaJSServer_1 = require("./server/ArcanaJSServer");
23
+ __exportStar(require("./server/ArcanaJSMiddleware"), exports);
24
+ __exportStar(require("./server/ArcanaJSServer"), exports);
25
+ var ControllerBinder_1 = require("./server/ControllerBinder");
26
+ Object.defineProperty(exports, "ControllerBinder", { enumerable: true, get: function () { return __importDefault(ControllerBinder_1).default; } });
27
+ __exportStar(require("./server/DynamicRouter"), exports);
28
+ __exportStar(require("./server/Router"), exports);
29
+ var Router_1 = require("./server/Router");
30
+ Object.defineProperty(exports, "Route", { enumerable: true, get: function () { return __importDefault(Router_1).default; } });
31
+ /**
32
+ * Create an ArcanaJS server with the given Express app
33
+ * @param app Express application instance
34
+ * @param config Optional ArcanaJS configuration
35
+ * @returns ArcanaJSServer instance
36
+ */
37
+ function createArcanaServer(app, config) {
38
+ const server = new ArcanaJSServer_1.ArcanaJSServer({ ...config });
39
+ return server;
40
+ }
@@ -1,4 +1,8 @@
1
- import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
2
- export const Body = ({ children }) => {
3
- return _jsx(_Fragment, { children: children });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Body = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const Body = ({ children }) => {
6
+ return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: children });
4
7
  };
8
+ exports.Body = Body;
@@ -1,22 +1,58 @@
1
- import React, { useEffect } from "react";
2
- import { useHead } from "../hooks/useHead";
3
- export const Head = ({ children }) => {
4
- const headManager = useHead();
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.Head = void 0;
37
+ const react_1 = __importStar(require("react"));
38
+ const useHead_1 = require("../hooks/useHead");
39
+ const Head = ({ children }) => {
40
+ const headManager = (0, useHead_1.useHead)();
5
41
  // Server-side: Push tags to context
6
42
  if (typeof window === "undefined" && headManager) {
7
- React.Children.forEach(children, (child) => {
8
- if (React.isValidElement(child)) {
9
- headManager.push(React.cloneElement(child, {
43
+ react_1.default.Children.forEach(children, (child) => {
44
+ if (react_1.default.isValidElement(child)) {
45
+ headManager.push(react_1.default.cloneElement(child, {
10
46
  "data-arcanajs-head": "true",
11
47
  }));
12
48
  }
13
49
  });
14
50
  }
15
51
  // Client-side: Update DOM
16
- useEffect(() => {
52
+ (0, react_1.useEffect)(() => {
17
53
  const managedElements = [];
18
- React.Children.forEach(children, (child) => {
19
- if (React.isValidElement(child)) {
54
+ react_1.default.Children.forEach(children, (child) => {
55
+ if (react_1.default.isValidElement(child)) {
20
56
  const reactElement = child;
21
57
  if (reactElement.type === "title") {
22
58
  document.title = reactElement.props.children;
@@ -86,3 +122,4 @@ export const Head = ({ children }) => {
86
122
  }, [children]);
87
123
  return null;
88
124
  };
125
+ exports.Head = Head;
@@ -1,10 +1,14 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useRouter } from "../hooks/useRouter";
3
- export const Link = ({ href, children, ...props }) => {
4
- const { navigateTo } = useRouter();
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Link = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const useRouter_1 = require("../hooks/useRouter");
6
+ const Link = ({ href, children, ...props }) => {
7
+ const { navigateTo } = (0, useRouter_1.useRouter)();
5
8
  const handleClick = (e) => {
6
9
  e.preventDefault();
7
10
  navigateTo(href);
8
11
  };
9
- return (_jsx("a", { href: href, onClick: handleClick, ...props, children: children }));
12
+ return ((0, jsx_runtime_1.jsx)("a", { href: href, onClick: handleClick, ...props, children: children }));
10
13
  };
14
+ exports.Link = Link;
@@ -1,9 +1,13 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { Link } from "./Link";
3
- import { useRouter } from "../hooks/useRouter";
4
- export const NavLink = ({ href, activeClassName = "active", className = "", exact = false, children, ...props }) => {
5
- const { currentUrl } = useRouter();
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NavLink = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const Link_1 = require("./Link");
6
+ const useRouter_1 = require("../hooks/useRouter");
7
+ const NavLink = ({ href, activeClassName = "active", className = "", exact = false, children, ...props }) => {
8
+ const { currentUrl } = (0, useRouter_1.useRouter)();
6
9
  const isActive = exact ? currentUrl === href : currentUrl.startsWith(href);
7
10
  const combinedClassName = `${className} ${isActive ? activeClassName : ""}`.trim();
8
- return (_jsx(Link, { href: href, className: combinedClassName, ...props, children: children }));
11
+ return ((0, jsx_runtime_1.jsx)(Link_1.Link, { href: href, className: combinedClassName, ...props, children: children }));
9
12
  };
13
+ exports.NavLink = NavLink;
@@ -1,6 +1,10 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { PageContext } from "../context/PageContext";
3
- import { Head } from "./Head";
4
- export const Page = ({ data, title, children }) => {
5
- return (_jsxs(PageContext.Provider, { value: data, children: [title && (_jsx(Head, { children: _jsx("title", { children: title }) })), children] }));
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Page = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const PageContext_1 = require("../context/PageContext");
6
+ const Head_1 = require("./Head");
7
+ const Page = ({ data, title, children }) => {
8
+ return ((0, jsx_runtime_1.jsxs)(PageContext_1.PageContext.Provider, { value: data, children: [title && ((0, jsx_runtime_1.jsx)(Head_1.Head, { children: (0, jsx_runtime_1.jsx)("title", { children: title }) })), children] }));
6
9
  };
10
+ exports.Page = Page;
@@ -1,2 +1,5 @@
1
- import { createSingletonContext } from "../utils/createSingletonContext";
2
- export const HeadContext = createSingletonContext("HeadContext", null);
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HeadContext = void 0;
4
+ const createSingletonContext_1 = require("../utils/createSingletonContext");
5
+ exports.HeadContext = (0, createSingletonContext_1.createSingletonContext)("HeadContext", null);
@@ -1,2 +1,5 @@
1
- import { createSingletonContext } from "../utils/createSingletonContext";
2
- export const PageContext = createSingletonContext("PageContext", null);
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PageContext = void 0;
4
+ const createSingletonContext_1 = require("../utils/createSingletonContext");
5
+ exports.PageContext = (0, createSingletonContext_1.createSingletonContext)("PageContext", null);
@@ -1,6 +1,10 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { createSingletonContext } from "../utils/createSingletonContext";
3
- export const RouterContext = createSingletonContext("RouterContext", null);
4
- export const RouterProvider = ({ value, children }) => {
5
- return (_jsx(RouterContext.Provider, { value: value, children: children }));
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RouterProvider = exports.RouterContext = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const createSingletonContext_1 = require("../utils/createSingletonContext");
6
+ exports.RouterContext = (0, createSingletonContext_1.createSingletonContext)("RouterContext", null);
7
+ const RouterProvider = ({ value, children }) => {
8
+ return ((0, jsx_runtime_1.jsx)(exports.RouterContext.Provider, { value: value, children: children }));
6
9
  };
10
+ exports.RouterProvider = RouterProvider;