arcanajs 2.1.3 → 2.1.4

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.
@@ -9,7 +9,6 @@ const html_webpack_plugin_1 = __importDefault(require("html-webpack-plugin"));
9
9
  const mini_css_extract_plugin_1 = __importDefault(require("mini-css-extract-plugin"));
10
10
  const path_1 = __importDefault(require("path"));
11
11
  const webpack_node_externals_1 = __importDefault(require("webpack-node-externals"));
12
- const isProduction = process.env.NODE_ENV === "production";
13
12
  const cwd = process.cwd();
14
13
  // Helper to resolve loaders from the framework's node_modules
15
14
  const resolveLoader = (loader) => require.resolve(loader);
@@ -43,6 +42,7 @@ const findEntry = (searchPaths) => {
43
42
  throw new Error(`Could not find entry point. Searched in: ${searchPaths.join(", ")}`);
44
43
  };
45
44
  const createClientConfig = () => {
45
+ const isProduction = process.env.NODE_ENV === "production";
46
46
  const clientEntry = findEntry([
47
47
  "src/client",
48
48
  "src/client/index",
@@ -143,11 +143,26 @@ const createClientConfig = () => {
143
143
  };
144
144
  exports.createClientConfig = createClientConfig;
145
145
  const createServerConfig = () => {
146
+ const isProduction = process.env.NODE_ENV === "production";
146
147
  const serverEntry = findEntry([
147
148
  "src/server",
148
149
  "src/server/index",
149
150
  "src/server/main",
150
151
  ]);
152
+ // View Injection Logic
153
+ const viewsDir = path_1.default.resolve(cwd, "src/views");
154
+ const hasViews = fs_1.default.existsSync(viewsDir);
155
+ const viewsLoaderPath = path_1.default.resolve(__dirname, "../../node_modules/.cache/arcanajs/views-loader.js");
156
+ // Ensure cache directory exists
157
+ const cacheDir = path_1.default.dirname(viewsLoaderPath);
158
+ if (!fs_1.default.existsSync(cacheDir)) {
159
+ fs_1.default.mkdirSync(cacheDir, { recursive: true });
160
+ }
161
+ // Generate the loader file
162
+ const loaderContent = hasViews
163
+ ? `module.exports = require.context('${viewsDir}', true, /\\.(tsx|jsx)$/);`
164
+ : `module.exports = null;`;
165
+ fs_1.default.writeFileSync(viewsLoaderPath, loaderContent);
151
166
  return {
152
167
  mode: isProduction ? "production" : "development",
153
168
  target: "node",
@@ -156,9 +171,16 @@ const createServerConfig = () => {
156
171
  path: path_1.default.resolve(cwd, "dist"),
157
172
  filename: "server.js",
158
173
  },
159
- externals: [(0, webpack_node_externals_1.default)()],
174
+ externals: [
175
+ (0, webpack_node_externals_1.default)({
176
+ allowlist: ["arcanajs"],
177
+ }),
178
+ ],
160
179
  resolve: {
161
180
  extensions: [".ts", ".tsx", ".js", ".jsx"],
181
+ alias: {
182
+ "arcana-views": viewsLoaderPath,
183
+ },
162
184
  },
163
185
  resolveLoader: {
164
186
  modules: ["node_modules", path_1.default.resolve(__dirname, "../../node_modules")],
@@ -30,8 +30,22 @@ class ArcanaJSServer {
30
30
  });
31
31
  }
32
32
  if (!views) {
33
- // Auto-discovery using fs (Server-side only)
34
- views = this.discoverViews();
33
+ // Try to load from injected alias (Webpack)
34
+ try {
35
+ // @ts-ignore - This alias is injected by Webpack
36
+ const injectedViews = require("arcana-views");
37
+ if (injectedViews) {
38
+ views = {};
39
+ injectedViews.keys().forEach((key) => {
40
+ const viewName = key.replace(/^\.\/(.*)\.tsx$/, "$1");
41
+ views[viewName] = injectedViews(key).default;
42
+ });
43
+ }
44
+ }
45
+ catch (e) {
46
+ // Fallback to auto-discovery using fs (Server-side only, non-bundled)
47
+ views = this.discoverViews();
48
+ }
35
49
  }
36
50
  if (!views || Object.keys(views).length === 0) {
37
51
  console.warn("No views found. Please check your views directory.");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "arcanajs",
3
- "version": "2.1.3",
3
+ "version": "2.1.4",
4
4
  "description": "ArcanaJS Framework",
5
5
  "main": "framework/lib/index.js",
6
6
  "types": "framework/lib/index.d.ts",
@@ -1,11 +0,0 @@
1
- import React from "react";
2
- export interface ArcanaJSAppProps {
3
- initialPage: string;
4
- initialData: any;
5
- initialUrl?: string;
6
- views: Record<string, React.FC<any>>;
7
- layout?: React.FC<{
8
- children: React.ReactNode;
9
- }>;
10
- }
11
- export declare const ArcanaJSApp: React.FC<ArcanaJSAppProps>;
@@ -1,79 +0,0 @@
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.ArcanaJSApp = void 0;
37
- const react_1 = __importStar(require("react"));
38
- const Page_1 = require("./components/Page");
39
- const RouterContext_1 = require("./context/RouterContext");
40
- const ArcanaJSApp = ({ initialPage, initialData, initialUrl, views, layout: Layout, }) => {
41
- const [page, setPage] = (0, react_1.useState)(initialPage);
42
- const [data, setData] = (0, react_1.useState)(initialData);
43
- const [url, setUrl] = (0, react_1.useState)(initialUrl ||
44
- (typeof window !== "undefined" ? window.location.pathname : "/"));
45
- (0, react_1.useEffect)(() => {
46
- const handlePopState = (event) => {
47
- if (event.state) {
48
- setPage(event.state.page);
49
- setData(event.state.data);
50
- setUrl(window.location.pathname);
51
- }
52
- };
53
- window.addEventListener("popstate", handlePopState);
54
- return () => window.removeEventListener("popstate", handlePopState);
55
- }, []);
56
- const navigateTo = async (newUrl) => {
57
- try {
58
- const response = await fetch(newUrl, {
59
- headers: { "x-arcanajs-request": "true" },
60
- });
61
- const json = await response.json();
62
- setPage(json.page);
63
- setData(json.data);
64
- setUrl(newUrl);
65
- window.history.pushState({ page: json.page, data: json.data }, "", newUrl);
66
- }
67
- catch (error) {
68
- console.error("Navigation failed", error);
69
- }
70
- };
71
- const renderPage = () => {
72
- const Component = views[page] || views["NotFoundPage"] || (() => react_1.default.createElement("div", null, "404 Not Found"));
73
- return (react_1.default.createElement(Page_1.Page, { data: data },
74
- react_1.default.createElement(Component, { data: data, navigateTo: navigateTo })));
75
- };
76
- const content = renderPage();
77
- return (react_1.default.createElement(RouterContext_1.RouterProvider, { value: { navigateTo, currentPage: page, currentUrl: url, params: {} } }, Layout ? react_1.default.createElement(Layout, null, content) : react_1.default.createElement(react_1.default.Fragment, null, content)));
78
- };
79
- exports.ArcanaJSApp = ArcanaJSApp;