qumra-engine 2.0.78 → 2.0.79
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/extensions/logic/qumra-scripts.js +37 -2
- package/dist/extensions/logic/template.js +1 -0
- package/dist/middleware/init.middleware.d.ts +1 -1
- package/dist/middleware/init.middleware.js +1 -1
- package/dist/middleware/setGlobals.middleware.js +1 -0
- package/dist/middleware.d.ts +1 -1
- package/dist/middleware.js +1 -1
- package/package.json +1 -1
- package/dist/addFilter.d.ts +0 -1
- package/dist/addFilter.js +0 -10
- package/dist/extensions/logic/content copy.d.ts +0 -10
- package/dist/extensions/logic/content copy.js +0 -66
- package/dist/extensions/logic/footer copy.d.ts +0 -10
- package/dist/extensions/logic/footer copy.js +0 -43
- package/dist/extensions/logic/header copy.d.ts +0 -10
- package/dist/extensions/logic/header copy.js +0 -33
- package/dist/extensions/logic/include.d.ts +0 -10
- package/dist/extensions/logic/include.js +0 -17
- package/dist/extensions/logic/qumra-head copy.d.ts +0 -7
- package/dist/extensions/logic/qumra-head copy.js +0 -37
- package/dist/extensions/logic/schema.d.ts +0 -6
- package/dist/extensions/logic/schema.js +0 -26
- package/dist/extensions/logic/schemaExtension.d.ts +0 -0
- package/dist/extensions/logic/schemaExtension.js +0 -1
- package/dist/extensions/logic/seo copy.d.ts +0 -7
- package/dist/extensions/logic/seo copy.js +0 -32
- package/dist/extensions/logic/t.d.ts +0 -1
- package/dist/extensions/logic/t.js +0 -10
- package/dist/extensions/logic/widget copy.d.ts +0 -10
- package/dist/extensions/logic/widget copy.js +0 -33
- package/dist/extensions/logic/widgets copy.d.ts +0 -10
- package/dist/extensions/logic/widgets copy.js +0 -33
- package/dist/extensions/logic/widgets.d.ts +0 -10
- package/dist/extensions/logic/widgets.js +0 -33
- package/dist/extensions/registerAllGlobals.d.ts +0 -2
- package/dist/extensions/registerAllGlobals.js +0 -47
- package/dist/filters/addFilter.d.ts +0 -1
- package/dist/filters/addFilter.js +0 -6
- package/dist/filters/capitalize.d.ts +0 -1
- package/dist/filters/capitalize.js +0 -8
- package/dist/filters/discountLabel.d.ts +0 -1
- package/dist/filters/discountLabel.js +0 -8
- package/dist/filters/formatDate.d.ts +0 -1
- package/dist/filters/formatDate.js +0 -9
- package/dist/filters/formatMoney.d.ts +0 -1
- package/dist/filters/formatMoney.js +0 -8
- package/dist/filters/logic/capitalize.d.ts +0 -1
- package/dist/filters/logic/capitalize.js +0 -8
- package/dist/filters/logic/color_to_hex.d.ts +0 -1
- package/dist/filters/logic/color_to_hex.js +0 -15
- package/dist/filters/logic/component.d.ts +0 -2
- package/dist/filters/logic/component.js +0 -6
- package/dist/filters/logic/discountLabel.d.ts +0 -1
- package/dist/filters/logic/discountLabel.js +0 -8
- package/dist/filters/logic/first.d.ts +0 -1
- package/dist/filters/logic/first.js +0 -6
- package/dist/filters/logic/formatDate.d.ts +0 -1
- package/dist/filters/logic/formatDate.js +0 -7
- package/dist/filters/logic/formatMoney.d.ts +0 -1
- package/dist/filters/logic/formatMoney.js +0 -8
- package/dist/filters/logic/json.d.ts +0 -2
- package/dist/filters/logic/json.js +0 -15
- package/dist/filters/logic/money_with_currency.d.ts +0 -1
- package/dist/filters/logic/money_with_currency.js +0 -8
- package/dist/filters/logic/money_without_trailing_zeros.d.ts +0 -1
- package/dist/filters/logic/money_without_trailing_zeros.js +0 -8
- package/dist/filters/logic/split.d.ts +0 -1
- package/dist/filters/logic/split.js +0 -6
- package/dist/filters/logic/strings/split.d.ts +0 -1
- package/dist/filters/logic/strings/split.js +0 -6
- package/dist/filters/logic/urls/capitalize.d.ts +0 -1
- package/dist/filters/logic/urls/capitalize.js +0 -8
- package/dist/globals/logic/capitalize.d.ts +0 -1
- package/dist/globals/logic/capitalize.js +0 -8
- package/dist/globals/logic/component.d.ts +0 -2
- package/dist/globals/logic/component.js +0 -6
- package/dist/globals/logic/discountLabel.d.ts +0 -1
- package/dist/globals/logic/discountLabel.js +0 -8
- package/dist/globals/logic/formatDate.d.ts +0 -1
- package/dist/globals/logic/formatDate.js +0 -9
- package/dist/globals/logic/formatMoney.d.ts +0 -1
- package/dist/globals/logic/formatMoney.js +0 -8
- package/dist/globals/registerAllFilters.d.ts +0 -2
- package/dist/globals/registerAllFilters.js +0 -47
- package/dist/globals copy/index.d.ts +0 -1
- package/dist/globals copy/index.js +0 -8
- package/dist/globals copy/logic/t.d.ts +0 -1
- package/dist/globals copy/logic/t.js +0 -10
- package/dist/globals copy/registerAllGlobals.d.ts +0 -2
- package/dist/globals copy/registerAllGlobals.js +0 -47
- package/dist/middleware/extension.middleware.d.ts +0 -2
- package/dist/middleware/extension.middleware.js +0 -12
- package/dist/middleware/filters.middleware copy.d.ts +0 -2
- package/dist/middleware/filters.middleware copy.js +0 -12
- package/dist/middleware/globals.middleware copy.d.ts +0 -2
- package/dist/middleware/globals.middleware copy.js +0 -12
- package/dist/middleware/initPaths.middleware.d.ts +0 -2
- package/dist/middleware/initPaths.middleware.js +0 -28
- package/dist/middleware/mergeData.middleware copy.d.ts +0 -2
- package/dist/middleware/mergeData.middleware copy.js +0 -55
- package/dist/middleware/mergeData.middleware.d.ts +0 -2
- package/dist/middleware/mergeData.middleware.js +0 -29
- package/dist/middleware/nunjucks.d.ts +0 -2
- package/dist/middleware/nunjucks.js +0 -22
- package/dist/middleware/nunjucks.middleware copy.d.ts +0 -2
- package/dist/middleware/nunjucks.middleware copy.js +0 -26
- package/dist/middleware/nunjucksFilters.middleware.d.ts +0 -2
- package/dist/middleware/nunjucksFilters.middleware.js +0 -12
- package/dist/middleware/prepareData.d.ts +0 -2
- package/dist/middleware/prepareData.js +0 -46
- package/dist/middleware/prepareData.middleware copy.d.ts +0 -2
- package/dist/middleware/prepareData.middleware copy.js +0 -49
- package/dist/middleware/prepareDataMiddleware.d.ts +0 -2
- package/dist/middleware/prepareDataMiddleware.js +0 -46
- package/dist/middleware/render.d.ts +0 -2
- package/dist/middleware/render.js +0 -24
- package/dist/middlewares/errorHandler.d.ts +0 -8
- package/dist/middlewares/errorHandler.js +0 -33
- package/dist/middlewares/pathMiddleware.d.ts +0 -2
- package/dist/middlewares/pathMiddleware.js +0 -19
- package/dist/middlewares/prepareDataMiddleware.d.ts +0 -2
- package/dist/middlewares/prepareDataMiddleware.js +0 -28
- package/dist/middlewares/themeMiddleware.d.ts +0 -2
- package/dist/middlewares/themeMiddleware.js +0 -29
- package/dist/registerAllFilters.d.ts +0 -2
- package/dist/registerAllFilters.js +0 -44
- package/dist/render.d.ts +0 -1
- package/dist/render.js +0 -19
- package/dist/services/getRenderData.d.ts +0 -3
- package/dist/services/getRenderData.js +0 -9
- package/dist/services/prepareData.d.ts +0 -2
- package/dist/services/prepareData.js +0 -46
- package/dist/services/prepareDataMiddleware.d.ts +0 -2
- package/dist/services/prepareDataMiddleware.js +0 -28
- package/dist/utils/asyncHandler.d.ts +0 -0
- package/dist/utils/asyncHandler.js +0 -1
- package/dist/utils/getLocalData.d.ts +0 -4
- package/dist/utils/getLocalData.js +0 -21
- package/dist/utils/getLocalFooterData copy.d.ts +0 -4
- package/dist/utils/getLocalFooterData copy.js +0 -22
- package/dist/utils/getLocalFooterData.d.ts +0 -4
- package/dist/utils/getLocalFooterData.js +0 -22
- package/dist/utils/getLocalHeaderData.d.ts +0 -4
- package/dist/utils/getLocalHeaderData.js +0 -22
- package/dist/utils/getLocalWidgetData copy.d.ts +0 -4
- package/dist/utils/getLocalWidgetData copy.js +0 -22
- package/dist/utils/normalizeIncludesPath.d.ts +0 -1
- package/dist/utils/normalizeIncludesPath.js +0 -19
- package/dist/utils/parseUrl.d.ts +0 -2
- package/dist/utils/parseUrl.js +0 -46
- package/dist/utils/render.d.ts +0 -2
- package/dist/utils/render.js +0 -24
- package/dist/utils/serverStartLog.d.ts +0 -5
- package/dist/utils/serverStartLog.js +0 -12
- package/dist/utils/validateWidgetData.d.ts +0 -1
- package/dist/utils/validateWidgetData.js +0 -23
|
@@ -1,55 +0,0 @@
|
|
|
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.mergeDataMiddleware = void 0;
|
|
7
|
-
const path_1 = __importDefault(require("path"));
|
|
8
|
-
const mergeObjects_1 = require("../utils/mergeObjects");
|
|
9
|
-
const mergeNestedSchemaWithData_1 = require("../utils/mergeNestedSchemaWithData");
|
|
10
|
-
const fs_1 = __importDefault(require("fs"));
|
|
11
|
-
const mergeWidgetSources_1 = require("../utils/mergeWidgetSources");
|
|
12
|
-
const mergeDataMiddleware = async (req, res, next) => {
|
|
13
|
-
try {
|
|
14
|
-
const pageHandle = res.locals.render.context?.page.handle;
|
|
15
|
-
const pageJsonPath = path_1.default.join(res.locals.env.getGlobal("pagesPath"), `${pageHandle}.json`);
|
|
16
|
-
const hasJson = fs_1.default.existsSync(pageJsonPath);
|
|
17
|
-
if (!hasJson) {
|
|
18
|
-
console.warn(`❌ No JSON file found for '${pageHandle}' at ${pageJsonPath}`);
|
|
19
|
-
return next(new Error(`No JSON file found for '${pageHandle}'`));
|
|
20
|
-
}
|
|
21
|
-
const jsonData = fs_1.default.readFileSync(pageJsonPath, "utf-8");
|
|
22
|
-
const fileContent = JSON.parse(jsonData);
|
|
23
|
-
const onlineWidgets = res.locals.render.engine.page?.widgets ?? [];
|
|
24
|
-
const fileWidgets = fileContent?.widgets || [];
|
|
25
|
-
const widgets = (0, mergeWidgetSources_1.mergeWidgetSources)(fileWidgets, onlineWidgets);
|
|
26
|
-
res.locals.env.addGlobal("engineData", res.locals.render.engine);
|
|
27
|
-
res.locals.env.addGlobal("widgets", widgets);
|
|
28
|
-
res.locals.env.addGlobal("pageData", {
|
|
29
|
-
layout: res.locals.render.engine.page?.layout ?? fileContent.layout,
|
|
30
|
-
title: res.locals.render.engine.page?.title ?? fileContent.title,
|
|
31
|
-
handle: res.locals.render.engine.page?.handle ?? fileContent.handle,
|
|
32
|
-
});
|
|
33
|
-
const settingSchemaPath = path_1.default.join(res.locals.env.getGlobal("settingsPath"), "settings-schema.json");
|
|
34
|
-
const settingDataPath = path_1.default.join(res.locals.env.getGlobal("settingsPath"), "settings-data.json");
|
|
35
|
-
let schemaJson = {};
|
|
36
|
-
let dataJson = {};
|
|
37
|
-
if (fs_1.default.existsSync(settingSchemaPath)) {
|
|
38
|
-
const content = fs_1.default.readFileSync(settingSchemaPath, "utf-8");
|
|
39
|
-
schemaJson = JSON.parse(content);
|
|
40
|
-
}
|
|
41
|
-
if (fs_1.default.existsSync(settingDataPath)) {
|
|
42
|
-
const content = fs_1.default.readFileSync(settingDataPath, "utf-8");
|
|
43
|
-
dataJson = JSON.parse(content);
|
|
44
|
-
}
|
|
45
|
-
const mergedData = (0, mergeObjects_1.mergeObjects)(dataJson, res.locals.render.engine.settings || {}, "override");
|
|
46
|
-
const settingsData = (0, mergeNestedSchemaWithData_1.mergeNestedSchemaWithData)(schemaJson, mergedData);
|
|
47
|
-
res.locals.env.addGlobal("settings", settingsData);
|
|
48
|
-
next();
|
|
49
|
-
}
|
|
50
|
-
catch (err) {
|
|
51
|
-
console.error("❌ mergeDataMiddleware error:", err);
|
|
52
|
-
return next(err);
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
exports.mergeDataMiddleware = mergeDataMiddleware;
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.mergeDataMiddleware = void 0;
|
|
4
|
-
const mergeDataMiddleware = async (req, res, next) => {
|
|
5
|
-
try {
|
|
6
|
-
if (res.locals.preview && res.locals.themeWidget) {
|
|
7
|
-
res.locals.env.addGlobal("widget", res.locals.render.engine?.widget ?? []);
|
|
8
|
-
}
|
|
9
|
-
else {
|
|
10
|
-
res.locals.env.addGlobal("widget", null);
|
|
11
|
-
}
|
|
12
|
-
const widgets = res.locals.render.engine?.page?.widgets ?? [];
|
|
13
|
-
res.locals.env.addGlobal("engineData", res.locals.render.engine);
|
|
14
|
-
res.locals.env.addGlobal("widgets", widgets);
|
|
15
|
-
res.locals.env.addGlobal("pageData", {
|
|
16
|
-
layout: res.locals.render.engine?.page?.layout,
|
|
17
|
-
title: res.locals.render.engine?.page?.title,
|
|
18
|
-
handle: res.locals.render.engine?.page?.handle,
|
|
19
|
-
});
|
|
20
|
-
const settingsData = res.locals.render.engine?.settings;
|
|
21
|
-
res.locals.env.addGlobal("settings", settingsData);
|
|
22
|
-
next();
|
|
23
|
-
}
|
|
24
|
-
catch (err) {
|
|
25
|
-
console.error("❌ mergeDataMiddleware error:", err);
|
|
26
|
-
return next(err);
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
exports.mergeDataMiddleware = mergeDataMiddleware;
|
|
@@ -1,22 +0,0 @@
|
|
|
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.nunjucksMiddleWare = void 0;
|
|
7
|
-
const nunjucksEnv_1 = require("../nunjucksEnv");
|
|
8
|
-
const path_1 = __importDefault(require("path"));
|
|
9
|
-
const nunjucksMiddleWare = (req, res, next) => {
|
|
10
|
-
var pagesPath;
|
|
11
|
-
if (res.locals.mode === "devlopment") {
|
|
12
|
-
pagesPath = path_1.default.join(process.cwd(), "src", "pages");
|
|
13
|
-
}
|
|
14
|
-
else {
|
|
15
|
-
pagesPath = path_1.default.join(res.locals.themesPath, "pages");
|
|
16
|
-
}
|
|
17
|
-
console.log("🚀 ~ returnnewPromise ~ pagesPath:", pagesPath);
|
|
18
|
-
const env = (0, nunjucksEnv_1.configureNunjucks)(pagesPath);
|
|
19
|
-
res.locals.env = env;
|
|
20
|
-
next();
|
|
21
|
-
};
|
|
22
|
-
exports.nunjucksMiddleWare = nunjucksMiddleWare;
|
|
@@ -1,26 +0,0 @@
|
|
|
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.nunjucksMiddleWare = void 0;
|
|
7
|
-
const nunjucksEnv_1 = require("../nunjucksEnv");
|
|
8
|
-
const path_1 = __importDefault(require("path"));
|
|
9
|
-
const nunjucksMiddleWare = (req, res, next) => {
|
|
10
|
-
const isDev = res.locals.mode === "devlopment";
|
|
11
|
-
const mainPath = isDev ? path_1.default.join(process.cwd(), "src") : path_1.default.join(res.locals.themesPath, "src");
|
|
12
|
-
const pagesPath = path_1.default.join(mainPath, "pages");
|
|
13
|
-
const localsPath = path_1.default.join(mainPath, "locals");
|
|
14
|
-
const assetsPath = path_1.default.join(mainPath, "assets");
|
|
15
|
-
const widgetsPath = path_1.default.join(mainPath, "widgets");
|
|
16
|
-
res.locals.pagesPath = pagesPath;
|
|
17
|
-
res.locals.localsPath = localsPath;
|
|
18
|
-
res.locals.assetsPath = assetsPath;
|
|
19
|
-
res.locals.widgetsPath = widgetsPath;
|
|
20
|
-
res.locals.mainPath = mainPath;
|
|
21
|
-
console.log("🚀 ~ pagesPath:", pagesPath);
|
|
22
|
-
const env = (0, nunjucksEnv_1.configureNunjucks)(mainPath);
|
|
23
|
-
res.locals.env = env;
|
|
24
|
-
next();
|
|
25
|
-
};
|
|
26
|
-
exports.nunjucksMiddleWare = nunjucksMiddleWare;
|
|
@@ -1,12 +0,0 @@
|
|
|
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.nunjucksFiltersMiddleWare = void 0;
|
|
7
|
-
const registerAllFilters_1 = __importDefault(require("../filters/registerAllFilters"));
|
|
8
|
-
const nunjucksFiltersMiddleWare = (req, res, next) => {
|
|
9
|
-
(0, registerAllFilters_1.default)(res.locals.env);
|
|
10
|
-
next();
|
|
11
|
-
};
|
|
12
|
-
exports.nunjucksFiltersMiddleWare = nunjucksFiltersMiddleWare;
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.prepareDataMiddleware = void 0;
|
|
4
|
-
const prepareDataMiddleware = async (req, res, next) => {
|
|
5
|
-
const parsedUrl = res.locals.parsedUrl;
|
|
6
|
-
try {
|
|
7
|
-
const { getRender, setRender } = res.locals.cache;
|
|
8
|
-
// حاول تجيب البيانات من الكاش الأول
|
|
9
|
-
if (typeof getRender === "function") {
|
|
10
|
-
const dataFromCache = await getRender(res.locals.mode, parsedUrl.fullUrl);
|
|
11
|
-
if (dataFromCache) {
|
|
12
|
-
res.locals.render = dataFromCache;
|
|
13
|
-
return next(); // البيانات موجودة، نكمل
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
const api = false
|
|
17
|
-
? "https://store-gate.qumra-dev.site/render"
|
|
18
|
-
: "http://192.168.1.5:4019/v1/render";
|
|
19
|
-
console.log("🚀 ~ prepareDataMiddleware ~ api:", api);
|
|
20
|
-
// لو مش موجودة في الكاش، أجيبها من السيرفر
|
|
21
|
-
const engineResponse = await fetch(api, {
|
|
22
|
-
method: "POST",
|
|
23
|
-
headers: { "Content-Type": "application/json" },
|
|
24
|
-
body: JSON.stringify({
|
|
25
|
-
url: parsedUrl.fullUrl,
|
|
26
|
-
}),
|
|
27
|
-
});
|
|
28
|
-
if (engineResponse.ok) {
|
|
29
|
-
const data = await engineResponse.json();
|
|
30
|
-
// خزّن البيانات في الكاش لو دالة setRender موجودة
|
|
31
|
-
if (typeof setRender === "function") {
|
|
32
|
-
await setRender(res.locals.mode, parsedUrl.fullUrl, data);
|
|
33
|
-
}
|
|
34
|
-
res.locals.render = data;
|
|
35
|
-
return next();
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
throw new Error("Engine response not OK");
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
catch (err) {
|
|
42
|
-
console.error("❌ prepareDataMiddleware error:", err);
|
|
43
|
-
return next(err);
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
|
-
exports.prepareDataMiddleware = prepareDataMiddleware;
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.prepareDataMiddleware = void 0;
|
|
4
|
-
const isPathAllowedToRender_1 = require("../utils/isPathAllowedToRender");
|
|
5
|
-
const prepareDataMiddleware = async (req, res, next) => {
|
|
6
|
-
if (res.locals.mode === "production") {
|
|
7
|
-
if ((0, isPathAllowedToRender_1.isPathAllowedToRender)(res.locals.parsedUrl.pathname)) {
|
|
8
|
-
next();
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
const parsedUrl = res.locals.parsedUrl;
|
|
12
|
-
try {
|
|
13
|
-
const { getRender, setRender } = res.locals.cache;
|
|
14
|
-
// حاول تجيب البيانات من الكاش الأول
|
|
15
|
-
if (typeof getRender === "function") {
|
|
16
|
-
const dataFromCache = await getRender(res.locals.mode, parsedUrl.fullUrl);
|
|
17
|
-
if (dataFromCache) {
|
|
18
|
-
res.locals.render = dataFromCache;
|
|
19
|
-
return next(); // البيانات موجودة، نكمل
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
const api = true
|
|
23
|
-
? "https://store-gate.qumra-dev.site/render"
|
|
24
|
-
: "http://192.168.1.5:4019/v1/render";
|
|
25
|
-
const engineResponse = await fetch(api, {
|
|
26
|
-
method: "POST",
|
|
27
|
-
headers: { "Content-Type": "application/json" },
|
|
28
|
-
body: JSON.stringify({
|
|
29
|
-
url: parsedUrl.fullUrl,
|
|
30
|
-
}),
|
|
31
|
-
});
|
|
32
|
-
if (engineResponse.ok) {
|
|
33
|
-
const data = await engineResponse.json();
|
|
34
|
-
if (typeof setRender === "function") {
|
|
35
|
-
await setRender(res.locals.mode, parsedUrl.fullUrl, data);
|
|
36
|
-
}
|
|
37
|
-
res.locals.render = data;
|
|
38
|
-
return next();
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
throw new Error("Engine response not OK");
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
catch (err) {
|
|
45
|
-
console.error("❌ prepareDataMiddleware error:", err);
|
|
46
|
-
return next(err);
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
exports.prepareDataMiddleware = prepareDataMiddleware;
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.prepareDataMiddleware = void 0;
|
|
4
|
-
const prepareDataMiddleware = async (req, res, next) => {
|
|
5
|
-
const parsedUrl = res.locals.parsedUrl;
|
|
6
|
-
try {
|
|
7
|
-
const { getRender, setRender } = res.locals.cache;
|
|
8
|
-
// حاول تجيب البيانات من الكاش الأول
|
|
9
|
-
if (typeof getRender === "function") {
|
|
10
|
-
const dataFromCache = await getRender(res.locals.mode, parsedUrl.fullUrl);
|
|
11
|
-
if (dataFromCache) {
|
|
12
|
-
res.locals.render = dataFromCache;
|
|
13
|
-
return next(); // البيانات موجودة، نكمل
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
const api = false
|
|
17
|
-
? "https://store-gate.qumra-dev.site/render"
|
|
18
|
-
: "http://192.168.1.5:4019/v1/render";
|
|
19
|
-
console.log("🚀 ~ prepareDataMiddleware ~ api:", api);
|
|
20
|
-
// لو مش موجودة في الكاش، أجيبها من السيرفر
|
|
21
|
-
const engineResponse = await fetch(api, {
|
|
22
|
-
method: "POST",
|
|
23
|
-
headers: { "Content-Type": "application/json" },
|
|
24
|
-
body: JSON.stringify({
|
|
25
|
-
url: parsedUrl.fullUrl,
|
|
26
|
-
}),
|
|
27
|
-
});
|
|
28
|
-
if (engineResponse.ok) {
|
|
29
|
-
const data = await engineResponse.json();
|
|
30
|
-
// خزّن البيانات في الكاش لو دالة setRender موجودة
|
|
31
|
-
if (typeof setRender === "function") {
|
|
32
|
-
await setRender(res.locals.mode, parsedUrl.fullUrl, data);
|
|
33
|
-
}
|
|
34
|
-
res.locals.render = data;
|
|
35
|
-
return next();
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
throw new Error("Engine response not OK");
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
catch (err) {
|
|
42
|
-
console.error("❌ prepareDataMiddleware error:", err);
|
|
43
|
-
return next(err);
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
|
-
exports.prepareDataMiddleware = prepareDataMiddleware;
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.renderMiddleware = void 0;
|
|
4
|
-
const renderMiddleware = (req, res, next) => {
|
|
5
|
-
const fileName = res.locals.render?.context?.page?.fileName;
|
|
6
|
-
const context = res.locals.render?.context || {};
|
|
7
|
-
if (!fileName) {
|
|
8
|
-
return next(new Error("Page fileName not found in res.locals.render"));
|
|
9
|
-
}
|
|
10
|
-
const env = res.locals.env;
|
|
11
|
-
if (!env) {
|
|
12
|
-
return next(new Error("Nunjucks environment not found in res.locals.env"));
|
|
13
|
-
}
|
|
14
|
-
env.render(fileName, context, (err, html) => {
|
|
15
|
-
if (err)
|
|
16
|
-
return next(err);
|
|
17
|
-
if (html !== null) {
|
|
18
|
-
res.send(html);
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
return next(new Error("Nunjucks rendered null HTML"));
|
|
22
|
-
});
|
|
23
|
-
};
|
|
24
|
-
exports.renderMiddleware = renderMiddleware;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { Request, Response, NextFunction } from 'express';
|
|
2
|
-
export declare class AppError extends Error {
|
|
3
|
-
statusCode: number;
|
|
4
|
-
status: string;
|
|
5
|
-
isOperational: boolean;
|
|
6
|
-
constructor(message: string, statusCode: number);
|
|
7
|
-
}
|
|
8
|
-
export declare const errorHandler: (err: Error | AppError, req: Request, res: Response, next: NextFunction) => Response<any, Record<string, any>>;
|
|
@@ -1,33 +0,0 @@
|
|
|
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.errorHandler = exports.AppError = void 0;
|
|
7
|
-
const logger_1 = __importDefault(require("../config/logger"));
|
|
8
|
-
class AppError extends Error {
|
|
9
|
-
constructor(message, statusCode) {
|
|
10
|
-
super(message);
|
|
11
|
-
this.statusCode = statusCode;
|
|
12
|
-
this.status = `${statusCode}`.startsWith('4') ? 'fail' : 'error';
|
|
13
|
-
this.isOperational = true;
|
|
14
|
-
Error.captureStackTrace(this, this.constructor);
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
exports.AppError = AppError;
|
|
18
|
-
const errorHandler = (err, req, res, next) => {
|
|
19
|
-
if (err instanceof AppError) {
|
|
20
|
-
logger_1.default.error(`[${err.statusCode}] ${err.message}`);
|
|
21
|
-
return res.status(err.statusCode).json({
|
|
22
|
-
status: err.status,
|
|
23
|
-
message: err.message,
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
// Programming or other unknown error: don't leak error details
|
|
27
|
-
logger_1.default.error('Unhandled Error:', err);
|
|
28
|
-
return res.status(500).json({
|
|
29
|
-
status: 'error',
|
|
30
|
-
message: 'Something went wrong!',
|
|
31
|
-
});
|
|
32
|
-
};
|
|
33
|
-
exports.errorHandler = errorHandler;
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.pathMiddleware = void 0;
|
|
4
|
-
const pathMiddleware = async (req, res, next) => {
|
|
5
|
-
try {
|
|
6
|
-
// تكوين الـ URL الكامل
|
|
7
|
-
let fullUrl = `${req.protocol}://${req.get("host")}${req.originalUrl}`;
|
|
8
|
-
if (fullUrl.includes("localhost")) {
|
|
9
|
-
fullUrl = 'https://qumra-electronics.qumra.store/';
|
|
10
|
-
}
|
|
11
|
-
res.locals.fullUrl = fullUrl;
|
|
12
|
-
next();
|
|
13
|
-
}
|
|
14
|
-
catch (err) {
|
|
15
|
-
console.error("🚀 ~ Middleware error:", err);
|
|
16
|
-
return res.status(500).json({ message: "Internal Server Error" });
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
exports.pathMiddleware = pathMiddleware;
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.prepareDataMiddleware = void 0;
|
|
4
|
-
const node_consul_service_1 = require("node-consul-service");
|
|
5
|
-
const prepareDataMiddleware = async (req, res, next) => {
|
|
6
|
-
try {
|
|
7
|
-
const engineResponse = await (0, node_consul_service_1.callService)("engine-service", {
|
|
8
|
-
path: "/v1/render",
|
|
9
|
-
method: "POST",
|
|
10
|
-
data: {
|
|
11
|
-
url: res.locals.fullUrl,
|
|
12
|
-
},
|
|
13
|
-
});
|
|
14
|
-
if (engineResponse.success) {
|
|
15
|
-
res.locals.render = engineResponse.data;
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
res.locals.render = null;
|
|
19
|
-
}
|
|
20
|
-
console.log("🚀 ~ prepareDataMiddleware ~ res.locals:", res.locals);
|
|
21
|
-
next();
|
|
22
|
-
}
|
|
23
|
-
catch (err) {
|
|
24
|
-
console.error("🚀 ~ Middleware error:", err);
|
|
25
|
-
return res.status(500).json({ message: "Internal Server Error" });
|
|
26
|
-
}
|
|
27
|
-
};
|
|
28
|
-
exports.prepareDataMiddleware = prepareDataMiddleware;
|
|
@@ -1,29 +0,0 @@
|
|
|
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.themeMiddleware = void 0;
|
|
7
|
-
const path_1 = __importDefault(require("path"));
|
|
8
|
-
const themeMiddleware = (req, res, next) => {
|
|
9
|
-
try {
|
|
10
|
-
if (!res.locals.render.theme) {
|
|
11
|
-
throw new Error("Theme data not found in res.locals");
|
|
12
|
-
}
|
|
13
|
-
const folderPath = process.env.THEMES_REPO;
|
|
14
|
-
if (!folderPath) {
|
|
15
|
-
throw new Error("THEMES_REPO is not defined in environment variables");
|
|
16
|
-
}
|
|
17
|
-
const themePath = path_1.default.join(__dirname, folderPath, res.locals.render.theme);
|
|
18
|
-
res.locals.themePath = themePath;
|
|
19
|
-
console.log("🚀 ~ Theme Path Set To:", themePath);
|
|
20
|
-
next();
|
|
21
|
-
}
|
|
22
|
-
catch (error) {
|
|
23
|
-
console.log("🚀 ~ res.locals:", res.locals.render);
|
|
24
|
-
console.log("🚀 ~ res.locals:", res.locals.render.theme);
|
|
25
|
-
console.error("Error setting theme path:", error.message);
|
|
26
|
-
res.status(500).send("An error occurred while setting the theme path");
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
exports.themeMiddleware = themeMiddleware;
|
|
@@ -1,44 +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.default = registerAllFilters;
|
|
37
|
-
const filters = __importStar(require("./filters"));
|
|
38
|
-
function registerAllFilters(env) {
|
|
39
|
-
Object.entries(filters).forEach(([name, fn]) => {
|
|
40
|
-
if (typeof fn === 'function') {
|
|
41
|
-
env.addFilter(name, fn);
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
}
|
package/dist/render.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function render(view: string, context?: object): Promise<string>;
|
package/dist/render.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
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.render = render;
|
|
7
|
-
const nunjucksEnv_1 = __importDefault(require("./nunjucksEnv"));
|
|
8
|
-
function render(view, context = {}) {
|
|
9
|
-
return new Promise((resolve, reject) => {
|
|
10
|
-
nunjucksEnv_1.default.render(view, context, (err, html) => {
|
|
11
|
-
if (err)
|
|
12
|
-
reject(err);
|
|
13
|
-
else if (html !== null)
|
|
14
|
-
resolve(html);
|
|
15
|
-
else
|
|
16
|
-
reject(new Error('Nunjucks returned null HTML'));
|
|
17
|
-
});
|
|
18
|
-
});
|
|
19
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.prepareDataMiddleware = void 0;
|
|
4
|
-
const prepareDataMiddleware = async (req, res, next) => {
|
|
5
|
-
const parsedUrl = res.locals.parsedUrl;
|
|
6
|
-
try {
|
|
7
|
-
const { getRender, setRender } = res.locals.cache;
|
|
8
|
-
// حاول تجيب البيانات من الكاش الأول
|
|
9
|
-
if (typeof getRender === "function") {
|
|
10
|
-
const dataFromCache = await getRender(res.locals.mode, parsedUrl.fullUrl);
|
|
11
|
-
if (dataFromCache) {
|
|
12
|
-
res.locals.render = dataFromCache;
|
|
13
|
-
return next(); // البيانات موجودة، نكمل
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
const api = false
|
|
17
|
-
? "https://store-gate.qumra-dev.site/render"
|
|
18
|
-
: "http://192.168.1.5:4019/v1/render";
|
|
19
|
-
console.log("🚀 ~ prepareDataMiddleware ~ api:", api);
|
|
20
|
-
// لو مش موجودة في الكاش، أجيبها من السيرفر
|
|
21
|
-
const engineResponse = await fetch(api, {
|
|
22
|
-
method: "POST",
|
|
23
|
-
headers: { "Content-Type": "application/json" },
|
|
24
|
-
body: JSON.stringify({
|
|
25
|
-
url: parsedUrl.fullUrl,
|
|
26
|
-
}),
|
|
27
|
-
});
|
|
28
|
-
if (engineResponse.ok) {
|
|
29
|
-
const data = await engineResponse.json();
|
|
30
|
-
// خزّن البيانات في الكاش لو دالة setRender موجودة
|
|
31
|
-
if (typeof setRender === "function") {
|
|
32
|
-
await setRender(res.locals.mode, parsedUrl.fullUrl, data);
|
|
33
|
-
}
|
|
34
|
-
res.locals.render = data;
|
|
35
|
-
return next();
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
throw new Error("Engine response not OK");
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
catch (err) {
|
|
42
|
-
console.error("❌ prepareDataMiddleware error:", err);
|
|
43
|
-
return next(err);
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
|
-
exports.prepareDataMiddleware = prepareDataMiddleware;
|