qumra-engine 2.0.2 → 2.0.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.
- package/dist/addFilter.d.ts +1 -0
- package/dist/extensions/index.d.ts +7 -0
- package/dist/extensions/index.js +20 -0
- package/dist/extensions/logic/content copy.d.ts +7 -0
- package/dist/extensions/logic/content copy.js +32 -0
- package/dist/extensions/logic/content.d.ts +10 -0
- package/dist/extensions/logic/content.js +74 -0
- package/dist/extensions/logic/footer copy.d.ts +10 -0
- package/dist/extensions/logic/footer copy.js +43 -0
- package/dist/extensions/logic/footer.d.ts +10 -0
- package/dist/extensions/logic/footer.js +51 -0
- package/dist/extensions/logic/form.d.ts +8 -0
- package/dist/extensions/logic/form.js +41 -0
- package/dist/extensions/logic/header copy.d.ts +10 -0
- package/dist/extensions/logic/header copy.js +33 -0
- package/dist/extensions/logic/header.d.ts +10 -0
- package/dist/extensions/logic/header.js +51 -0
- package/dist/extensions/logic/qumra-head.d.ts +7 -0
- package/dist/extensions/logic/qumra-head.js +34 -0
- package/dist/extensions/logic/schema.d.ts +6 -0
- package/dist/extensions/logic/schema.js +26 -0
- package/dist/extensions/logic/schemaExtension.d.ts +0 -0
- package/dist/extensions/logic/schemaExtension.js +1 -0
- package/dist/extensions/logic/seo copy.d.ts +7 -0
- package/dist/extensions/logic/seo copy.js +32 -0
- package/dist/extensions/logic/seo.d.ts +7 -0
- package/dist/extensions/logic/seo.js +32 -0
- package/dist/extensions/logic/t.d.ts +1 -0
- package/dist/extensions/logic/t.js +10 -0
- package/dist/extensions/logic/widget copy.d.ts +10 -0
- package/dist/extensions/logic/widget copy.js +33 -0
- package/dist/extensions/logic/widget.d.ts +10 -0
- package/dist/extensions/logic/widget.js +47 -0
- package/dist/extensions/logic/widgets copy.d.ts +10 -0
- package/dist/extensions/logic/widgets copy.js +33 -0
- package/dist/extensions/logic/widgets.d.ts +10 -0
- package/dist/extensions/logic/widgets.js +33 -0
- package/dist/extensions/registerAllExtensions.d.ts +2 -0
- package/dist/extensions/registerAllExtensions.js +50 -0
- package/dist/extensions/registerAllGlobals.d.ts +2 -0
- package/dist/extensions/registerAllGlobals.js +47 -0
- package/dist/filters/addFilter.d.ts +1 -0
- package/dist/filters/capitalize.d.ts +1 -0
- package/dist/filters/discountLabel.d.ts +1 -0
- package/dist/filters/formatDate.d.ts +1 -0
- package/dist/filters/formatMoney.d.ts +1 -0
- package/dist/filters/index.d.ts +22 -0
- package/dist/filters/index.js +43 -9
- package/dist/filters/logic/array/compact.d.ts +1 -0
- package/dist/filters/logic/array/compact.js +6 -0
- package/dist/filters/logic/array/concat.d.ts +1 -0
- package/dist/filters/logic/array/concat.js +6 -0
- package/dist/filters/logic/array/find.d.ts +1 -0
- package/dist/filters/logic/array/find.js +8 -0
- package/dist/filters/logic/array/first.d.ts +1 -0
- package/dist/filters/logic/array/first.js +6 -0
- package/dist/filters/logic/array/join.d.ts +1 -0
- package/dist/filters/logic/array/join.js +8 -0
- package/dist/filters/logic/array/last.d.ts +1 -0
- package/dist/filters/logic/array/last.js +8 -0
- package/dist/filters/logic/array/size.d.ts +1 -0
- package/dist/filters/logic/array/size.js +12 -0
- package/dist/filters/logic/array/split.d.ts +1 -0
- package/dist/filters/logic/array/split.js +6 -0
- package/dist/filters/logic/array/where.d.ts +1 -0
- package/dist/filters/logic/array/where.js +8 -0
- package/dist/filters/logic/capitalize.d.ts +1 -0
- package/dist/filters/logic/color_to_hex.d.ts +1 -0
- package/dist/filters/logic/color_to_hex.js +15 -0
- package/dist/filters/logic/colors/color_to_hex.d.ts +1 -0
- package/dist/filters/logic/colors/color_to_hex.js +15 -0
- package/dist/filters/logic/component.d.ts +2 -0
- package/dist/filters/logic/data/formatDate.d.ts +1 -0
- package/dist/filters/logic/data/formatDate.js +7 -0
- package/dist/filters/logic/discountLabel.d.ts +1 -0
- package/dist/filters/logic/first.d.ts +1 -0
- package/dist/filters/logic/first.js +6 -0
- package/dist/filters/logic/formatDate.d.ts +1 -0
- package/dist/filters/logic/formatDate.js +4 -6
- package/dist/filters/logic/formatMoney.d.ts +1 -0
- package/dist/filters/logic/json/json.d.ts +2 -0
- package/dist/filters/logic/json/json.js +15 -0
- package/dist/filters/logic/json.d.ts +2 -0
- package/dist/filters/logic/json.js +15 -0
- package/dist/filters/logic/money/discountLabel.d.ts +1 -0
- package/dist/filters/logic/money/discountLabel.js +8 -0
- package/dist/filters/logic/money/money_with_currency.d.ts +1 -0
- package/dist/filters/logic/money/money_with_currency.js +8 -0
- package/dist/filters/logic/money/money_without_trailing_zeros.d.ts +1 -0
- package/dist/filters/logic/money/money_without_trailing_zeros.js +8 -0
- package/dist/filters/logic/money_with_currency.d.ts +1 -0
- package/dist/filters/logic/money_with_currency.js +8 -0
- package/dist/filters/logic/money_without_trailing_zeros.d.ts +1 -0
- package/dist/filters/logic/money_without_trailing_zeros.js +8 -0
- package/dist/filters/logic/split.d.ts +1 -0
- package/dist/filters/logic/split.js +6 -0
- package/dist/filters/logic/strings/capitalize.d.ts +1 -0
- package/dist/filters/logic/strings/capitalize.js +8 -0
- package/dist/filters/logic/strings/downcase.d.ts +1 -0
- package/dist/filters/logic/strings/downcase.js +6 -0
- package/dist/filters/logic/strings/remove.d.ts +1 -0
- package/dist/filters/logic/strings/remove.js +8 -0
- package/dist/filters/logic/strings/split.d.ts +1 -0
- package/dist/filters/logic/strings/split.js +6 -0
- package/dist/filters/logic/strings/strip.d.ts +1 -0
- package/dist/filters/logic/strings/strip.js +6 -0
- package/dist/filters/logic/strings/truncate.d.ts +1 -0
- package/dist/filters/logic/strings/truncate.js +10 -0
- package/dist/filters/logic/strings/upcase.d.ts +1 -0
- package/dist/filters/logic/strings/upcase.js +8 -0
- package/dist/filters/logic/urls/assets.d.ts +1 -0
- package/dist/filters/logic/urls/assets.js +6 -0
- package/dist/filters/logic/urls/capitalize.d.ts +1 -0
- package/dist/filters/logic/urls/capitalize.js +8 -0
- package/dist/filters/registerAllFilters.d.ts +2 -0
- package/dist/globals/index.d.ts +1 -0
- package/dist/globals/index.js +8 -0
- package/dist/globals/logic/capitalize.d.ts +1 -0
- package/dist/globals/logic/capitalize.js +8 -0
- package/dist/globals/logic/component.d.ts +2 -0
- package/dist/globals/logic/component.js +6 -0
- package/dist/globals/logic/discountLabel.d.ts +1 -0
- package/dist/globals/logic/discountLabel.js +8 -0
- package/dist/globals/logic/formatDate.d.ts +1 -0
- package/dist/globals/logic/formatDate.js +9 -0
- package/dist/globals/logic/formatMoney.d.ts +1 -0
- package/dist/globals/logic/formatMoney.js +8 -0
- package/dist/globals/logic/t.d.ts +1 -0
- package/dist/globals/logic/t.js +10 -0
- package/dist/globals/registerAllFilters.d.ts +2 -0
- package/dist/globals/registerAllFilters.js +47 -0
- package/dist/globals/registerAllGlobals.d.ts +2 -0
- package/dist/globals/registerAllGlobals.js +47 -0
- package/dist/globals copy/index.d.ts +1 -0
- package/dist/globals copy/index.js +8 -0
- package/dist/globals copy/logic/t.d.ts +1 -0
- package/dist/globals copy/logic/t.js +10 -0
- package/dist/globals copy/registerAllGlobals.d.ts +2 -0
- package/dist/globals copy/registerAllGlobals.js +47 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -1
- package/dist/middleware/extension.middleware.d.ts +2 -0
- package/dist/middleware/extension.middleware.js +12 -0
- package/dist/middleware/extensions.middleware.d.ts +2 -0
- package/dist/middleware/extensions.middleware.js +12 -0
- package/dist/middleware/filters.middleware copy.d.ts +2 -0
- package/dist/middleware/filters.middleware copy.js +12 -0
- package/dist/middleware/filters.middleware.d.ts +2 -0
- package/dist/middleware/filters.middleware.js +12 -0
- package/dist/middleware/globals.middleware copy.d.ts +2 -0
- package/dist/middleware/globals.middleware copy.js +12 -0
- package/dist/middleware/globals.middleware.d.ts +2 -0
- package/dist/middleware/globals.middleware.js +12 -0
- package/dist/middleware/init.middleware.d.ts +9 -0
- package/dist/middleware/init.middleware.js +23 -0
- package/dist/middleware/initPaths.middleware.d.ts +2 -0
- package/dist/middleware/initPaths.middleware.js +28 -0
- package/dist/middleware/locals.middleware.d.ts +2 -0
- package/dist/middleware/locals.middleware.js +29 -0
- package/dist/middleware/mergeData.middleware.d.ts +2 -0
- package/dist/middleware/mergeData.middleware.js +55 -0
- package/dist/middleware/nunjucks.d.ts +2 -0
- package/dist/middleware/nunjucks.js +22 -0
- package/dist/middleware/nunjucks.middleware copy.d.ts +2 -0
- package/dist/middleware/nunjucks.middleware copy.js +26 -0
- package/dist/middleware/nunjucks.middleware.d.ts +2 -0
- package/dist/middleware/nunjucks.middleware.js +36 -0
- package/dist/middleware/nunjucksFilters.middleware.d.ts +2 -0
- package/dist/middleware/nunjucksFilters.middleware.js +12 -0
- package/dist/middleware/prepareData.d.ts +2 -0
- package/dist/middleware/prepareData.js +46 -0
- package/dist/middleware/prepareData.middleware copy.d.ts +2 -0
- package/dist/middleware/prepareData.middleware copy.js +49 -0
- package/dist/middleware/prepareData.middleware.d.ts +2 -0
- package/dist/middleware/prepareData.middleware.js +49 -0
- package/dist/middleware/prepareDataMiddleware.d.ts +2 -0
- package/dist/middleware/prepareDataMiddleware.js +46 -0
- package/dist/middleware/render.d.ts +2 -0
- package/dist/middleware/render.js +24 -0
- package/dist/middleware/render.middleware copy.d.ts +2 -0
- package/dist/middleware/render.middleware copy.js +39 -0
- package/dist/middleware/render.middleware.d.ts +2 -0
- package/dist/middleware/render.middleware.js +24 -0
- package/dist/middleware/serve-assets.middleware.d.ts +2 -0
- package/dist/middleware/serve-assets.middleware.js +6 -0
- package/dist/middleware.d.ts +8 -0
- package/dist/middleware.js +53 -8
- package/dist/middlewares/errorHandler.d.ts +8 -0
- package/dist/middlewares/pathMiddleware.d.ts +2 -0
- package/dist/middlewares/prepareDataMiddleware.d.ts +2 -0
- package/dist/middlewares/themeMiddleware.d.ts +2 -0
- package/dist/nunjucksEnv.d.ts +6 -0
- package/dist/nunjucksEnv.js +0 -2
- package/dist/registerAllFilters.d.ts +2 -0
- package/dist/render.d.ts +1 -0
- package/dist/services/getRenderData.d.ts +3 -0
- package/dist/services/prepareData.d.ts +2 -0
- package/dist/services/prepareData.js +34 -20
- package/dist/services/prepareDataMiddleware.d.ts +2 -0
- package/dist/services/renderHandler.d.ts +2 -0
- package/dist/services/renderHandler.js +27 -25
- package/dist/store/globals.d.ts +2 -0
- package/dist/store/globals.js +12 -0
- package/dist/store/locals.d.ts +2 -0
- package/dist/store/locals.js +12 -0
- package/dist/types/sharedTypes.d.ts +26 -0
- package/dist/utils/asyncHandler.d.ts +0 -0
- package/dist/utils/asyncHandler.js +1 -0
- package/dist/utils/findAvailablePort.d.ts +1 -0
- package/dist/utils/findAvailablePort.js +28 -0
- package/dist/utils/getLocalData.d.ts +4 -0
- package/dist/utils/getLocalData.js +21 -0
- package/dist/utils/getLocalFooterData copy.d.ts +4 -0
- package/dist/utils/getLocalFooterData copy.js +22 -0
- package/dist/utils/getLocalFooterData.d.ts +4 -0
- package/dist/utils/getLocalFooterData.js +22 -0
- package/dist/utils/getLocalHeaderData.d.ts +4 -0
- package/dist/utils/getLocalHeaderData.js +22 -0
- package/dist/utils/getLocalWidgetData copy.d.ts +4 -0
- package/dist/utils/getLocalWidgetData copy.js +22 -0
- package/dist/utils/getLocalWidgetData.d.ts +4 -0
- package/dist/utils/getLocalWidgetData.js +22 -0
- package/dist/utils/getNestedValue.d.ts +1 -0
- package/dist/utils/getNestedValue.js +7 -0
- package/dist/utils/isPathAllowedToRender.d.ts +1 -0
- package/dist/utils/isPathAllowedToRender.js +8 -0
- package/dist/utils/logger.d.ts +5 -0
- package/dist/utils/mergeNestedSchemaWithData.d.ts +16 -0
- package/dist/utils/mergeNestedSchemaWithData.js +34 -0
- package/dist/utils/mergeObjects.d.ts +1 -0
- package/dist/utils/mergeObjects.js +28 -0
- package/dist/utils/mergeSchemaWithData.d.ts +14 -0
- package/dist/utils/mergeSchemaWithData.js +11 -0
- package/dist/utils/mergeWidgetSources.d.ts +1 -0
- package/dist/utils/mergeWidgetSources.js +21 -0
- package/dist/utils/normalizeWidgetPath.d.ts +1 -0
- package/dist/utils/normalizeWidgetPath.js +19 -0
- package/dist/utils/parseUrl.d.ts +2 -0
- package/dist/utils/parseUrl.js +46 -0
- package/dist/utils/render.d.ts +2 -0
- package/dist/utils/render.js +21 -20
- package/dist/utils/resolveTranslations.d.ts +1 -0
- package/dist/utils/resolveTranslations.js +21 -0
- package/package.json +5 -3
- package/todo.txt +1 -0
- package/views/home.njk +0 -15
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.initMiddleware = void 0;
|
|
4
|
+
const qumra_utils_1 = require("qumra-utils");
|
|
5
|
+
const initMiddleware = ({ mode, getRender, setRender }) => {
|
|
6
|
+
return (req, res, next) => {
|
|
7
|
+
res.locals.mode = mode;
|
|
8
|
+
res.locals.cache = {};
|
|
9
|
+
const fullUrl = mode === "production"
|
|
10
|
+
? req.protocol + "://" + req.get("host") + req.originalUrl
|
|
11
|
+
: "https://qumra-electronics.qumra.onlone" + req.originalUrl;
|
|
12
|
+
const parsedUrl = (0, qumra_utils_1.parseUrlString)(fullUrl);
|
|
13
|
+
res.locals.parsedUrl = parsedUrl;
|
|
14
|
+
if (typeof getRender === "function") {
|
|
15
|
+
res.locals.cache.getRender = getRender;
|
|
16
|
+
}
|
|
17
|
+
if (typeof setRender === "function") {
|
|
18
|
+
res.locals.cache.setRender = setRender;
|
|
19
|
+
}
|
|
20
|
+
next();
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
exports.initMiddleware = initMiddleware;
|
|
@@ -0,0 +1,28 @@
|
|
|
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 path_1 = __importDefault(require("path"));
|
|
8
|
+
const nunjucksMiddleware = (req, res, next) => {
|
|
9
|
+
try {
|
|
10
|
+
const isDev = res.locals.mode === "devlopment";
|
|
11
|
+
const mainPath = isDev ? process.cwd() : res.locals.themesPath;
|
|
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
|
+
next();
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
console.error("❌ nunjucksMiddleware error:", error);
|
|
25
|
+
next(error);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
exports.nunjucksMiddleware = nunjucksMiddleware;
|
|
@@ -0,0 +1,29 @@
|
|
|
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.localesMiddleware = void 0;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const locals_1 = require("../store/locals");
|
|
10
|
+
const localesMiddleware = (req, res, next) => {
|
|
11
|
+
const localesDirectory = res.locals.localesPath;
|
|
12
|
+
console.log("🚀 ~ localesDirectory:", localesDirectory);
|
|
13
|
+
const lang = res.locals.parsedUrl.language;
|
|
14
|
+
if (!lang)
|
|
15
|
+
return next();
|
|
16
|
+
try {
|
|
17
|
+
const filePath = path_1.default.join(localesDirectory, `${lang}.json`);
|
|
18
|
+
if (fs_1.default.existsSync(filePath)) {
|
|
19
|
+
const fileContent = fs_1.default.readFileSync(filePath, "utf-8");
|
|
20
|
+
const parsed = JSON.parse(fileContent);
|
|
21
|
+
(0, locals_1.setLocales)("locales", parsed);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
console.warn(`⚠️ خطأ أثناء تحميل ملف اللغة ${lang}:`, error);
|
|
26
|
+
}
|
|
27
|
+
next();
|
|
28
|
+
};
|
|
29
|
+
exports.localesMiddleware = localesMiddleware;
|
|
@@ -0,0 +1,55 @@
|
|
|
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;
|
|
@@ -0,0 +1,22 @@
|
|
|
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;
|
|
@@ -0,0 +1,26 @@
|
|
|
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;
|
|
@@ -0,0 +1,36 @@
|
|
|
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 path_1 = __importDefault(require("path"));
|
|
8
|
+
const nunjucksEnv_1 = require("../nunjucksEnv");
|
|
9
|
+
const nunjucksMiddleWare = (req, res, next) => {
|
|
10
|
+
const isDev = res.locals.mode === "devlopment";
|
|
11
|
+
console.log("🚀 ~ res:", res.locals.render);
|
|
12
|
+
console.log("🚀 ~ res.locals:", res.locals);
|
|
13
|
+
console.log("🚀 ~ isDev:", isDev);
|
|
14
|
+
console.log("🚀 ~ res.locals.themesPath:", res.locals.themesPath);
|
|
15
|
+
const mainPath = isDev ? path_1.default.join(process.cwd()) : res.locals.themesPath;
|
|
16
|
+
const paths = {
|
|
17
|
+
pagesPath: path_1.default.join(mainPath, "pages"),
|
|
18
|
+
layoutsPath: path_1.default.join(mainPath, "layouts"),
|
|
19
|
+
localesPath: path_1.default.join(mainPath, "locales"),
|
|
20
|
+
assetsPath: path_1.default.join(mainPath, "assets"),
|
|
21
|
+
widgetsPath: path_1.default.join(mainPath, "widgets"),
|
|
22
|
+
settingsPath: path_1.default.join(mainPath, "settings"),
|
|
23
|
+
};
|
|
24
|
+
Object.entries(paths).forEach(([key, value]) => {
|
|
25
|
+
res.locals[key] = value;
|
|
26
|
+
});
|
|
27
|
+
res.locals.mainPath = mainPath;
|
|
28
|
+
const env = (0, nunjucksEnv_1.configureNunjucks)(mainPath);
|
|
29
|
+
for (const [key, value] of Object.entries(paths)) {
|
|
30
|
+
env.addGlobal(key, value);
|
|
31
|
+
}
|
|
32
|
+
env.addGlobal("mainPath", mainPath);
|
|
33
|
+
res.locals.env = env;
|
|
34
|
+
next();
|
|
35
|
+
};
|
|
36
|
+
exports.nunjucksMiddleWare = nunjucksMiddleWare;
|
|
@@ -0,0 +1,12 @@
|
|
|
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;
|
|
@@ -0,0 +1,46 @@
|
|
|
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;
|
|
@@ -0,0 +1,49 @@
|
|
|
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;
|
|
@@ -0,0 +1,49 @@
|
|
|
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;
|
|
@@ -0,0 +1,46 @@
|
|
|
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;
|
|
@@ -0,0 +1,24 @@
|
|
|
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;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderMiddleware = void 0;
|
|
4
|
+
const renderMiddleware = (req, res, next) => {
|
|
5
|
+
const render = res.locals.render;
|
|
6
|
+
console.log("🚀 ~ render:", render);
|
|
7
|
+
const env = res.locals.env;
|
|
8
|
+
// if (!render?.context?.page?.fileName) {
|
|
9
|
+
// return next(
|
|
10
|
+
// new Error("❌ Missing fileName in res.locals.render.context.page")
|
|
11
|
+
// );
|
|
12
|
+
// }
|
|
13
|
+
// if (!env) {
|
|
14
|
+
// return next(
|
|
15
|
+
// new Error("❌ Nunjucks environment not found in res.locals.env")
|
|
16
|
+
// );
|
|
17
|
+
// }
|
|
18
|
+
// const fileName = render.context.page.fileName;
|
|
19
|
+
// const page = "index";
|
|
20
|
+
// const {context,globals} = render;
|
|
21
|
+
// const templatePath = `pages/${fileName}`;
|
|
22
|
+
// env.render(
|
|
23
|
+
// templatePath,
|
|
24
|
+
// {
|
|
25
|
+
// context,
|
|
26
|
+
// globals
|
|
27
|
+
// },
|
|
28
|
+
// (err: Error | null, html: string | null) => {
|
|
29
|
+
// if (err) {
|
|
30
|
+
// return next(new Error(`❌ Nunjucks render error: ${err.message}`));
|
|
31
|
+
// }
|
|
32
|
+
// if (!html) {
|
|
33
|
+
// return next(new Error("❌ Nunjucks rendered null HTML"));
|
|
34
|
+
// }
|
|
35
|
+
// res.send(html);
|
|
36
|
+
// }
|
|
37
|
+
// );
|
|
38
|
+
};
|
|
39
|
+
exports.renderMiddleware = renderMiddleware;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderMiddleware = void 0;
|
|
4
|
+
const resolveTranslations_1 = require("../utils/resolveTranslations");
|
|
5
|
+
const renderMiddleware = (req, res, next) => {
|
|
6
|
+
const render = res.locals.render;
|
|
7
|
+
const { context, globals } = render;
|
|
8
|
+
const env = res.locals.env;
|
|
9
|
+
const pageLayout = env.getGlobal("pageData").layout ?? "layout";
|
|
10
|
+
env.render(`layouts/${pageLayout}.njk`, (0, resolveTranslations_1.resolveTranslations)({
|
|
11
|
+
context,
|
|
12
|
+
globals,
|
|
13
|
+
settings: env.getGlobal("settings"),
|
|
14
|
+
}, env.getGlobal("t")), (err, html) => {
|
|
15
|
+
if (err) {
|
|
16
|
+
return next(new Error(`❌ Nunjucks render error: ${err.message}`));
|
|
17
|
+
}
|
|
18
|
+
if (!html) {
|
|
19
|
+
return next(new Error("❌ Nunjucks rendered null HTML"));
|
|
20
|
+
}
|
|
21
|
+
res.send(html);
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
exports.renderMiddleware = renderMiddleware;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { CacheGetter, CacheSetter, TMode } from "./types/sharedTypes";
|
|
2
|
+
interface IStartEngine {
|
|
3
|
+
mode: TMode;
|
|
4
|
+
getRender?: CacheGetter;
|
|
5
|
+
setRender?: CacheSetter;
|
|
6
|
+
}
|
|
7
|
+
declare const startEngine: ({ mode, getRender, setRender }: IStartEngine) => Promise<void>;
|
|
8
|
+
export default startEngine;
|