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.
Files changed (246) hide show
  1. package/dist/addFilter.d.ts +1 -0
  2. package/dist/extensions/index.d.ts +7 -0
  3. package/dist/extensions/index.js +20 -0
  4. package/dist/extensions/logic/content copy.d.ts +7 -0
  5. package/dist/extensions/logic/content copy.js +32 -0
  6. package/dist/extensions/logic/content.d.ts +10 -0
  7. package/dist/extensions/logic/content.js +74 -0
  8. package/dist/extensions/logic/footer copy.d.ts +10 -0
  9. package/dist/extensions/logic/footer copy.js +43 -0
  10. package/dist/extensions/logic/footer.d.ts +10 -0
  11. package/dist/extensions/logic/footer.js +51 -0
  12. package/dist/extensions/logic/form.d.ts +8 -0
  13. package/dist/extensions/logic/form.js +41 -0
  14. package/dist/extensions/logic/header copy.d.ts +10 -0
  15. package/dist/extensions/logic/header copy.js +33 -0
  16. package/dist/extensions/logic/header.d.ts +10 -0
  17. package/dist/extensions/logic/header.js +51 -0
  18. package/dist/extensions/logic/qumra-head.d.ts +7 -0
  19. package/dist/extensions/logic/qumra-head.js +34 -0
  20. package/dist/extensions/logic/schema.d.ts +6 -0
  21. package/dist/extensions/logic/schema.js +26 -0
  22. package/dist/extensions/logic/schemaExtension.d.ts +0 -0
  23. package/dist/extensions/logic/schemaExtension.js +1 -0
  24. package/dist/extensions/logic/seo copy.d.ts +7 -0
  25. package/dist/extensions/logic/seo copy.js +32 -0
  26. package/dist/extensions/logic/seo.d.ts +7 -0
  27. package/dist/extensions/logic/seo.js +32 -0
  28. package/dist/extensions/logic/t.d.ts +1 -0
  29. package/dist/extensions/logic/t.js +10 -0
  30. package/dist/extensions/logic/widget copy.d.ts +10 -0
  31. package/dist/extensions/logic/widget copy.js +33 -0
  32. package/dist/extensions/logic/widget.d.ts +10 -0
  33. package/dist/extensions/logic/widget.js +47 -0
  34. package/dist/extensions/logic/widgets copy.d.ts +10 -0
  35. package/dist/extensions/logic/widgets copy.js +33 -0
  36. package/dist/extensions/logic/widgets.d.ts +10 -0
  37. package/dist/extensions/logic/widgets.js +33 -0
  38. package/dist/extensions/registerAllExtensions.d.ts +2 -0
  39. package/dist/extensions/registerAllExtensions.js +50 -0
  40. package/dist/extensions/registerAllGlobals.d.ts +2 -0
  41. package/dist/extensions/registerAllGlobals.js +47 -0
  42. package/dist/filters/addFilter.d.ts +1 -0
  43. package/dist/filters/capitalize.d.ts +1 -0
  44. package/dist/filters/discountLabel.d.ts +1 -0
  45. package/dist/filters/formatDate.d.ts +1 -0
  46. package/dist/filters/formatMoney.d.ts +1 -0
  47. package/dist/filters/index.d.ts +22 -0
  48. package/dist/filters/index.js +43 -9
  49. package/dist/filters/logic/array/compact.d.ts +1 -0
  50. package/dist/filters/logic/array/compact.js +6 -0
  51. package/dist/filters/logic/array/concat.d.ts +1 -0
  52. package/dist/filters/logic/array/concat.js +6 -0
  53. package/dist/filters/logic/array/find.d.ts +1 -0
  54. package/dist/filters/logic/array/find.js +8 -0
  55. package/dist/filters/logic/array/first.d.ts +1 -0
  56. package/dist/filters/logic/array/first.js +6 -0
  57. package/dist/filters/logic/array/join.d.ts +1 -0
  58. package/dist/filters/logic/array/join.js +8 -0
  59. package/dist/filters/logic/array/last.d.ts +1 -0
  60. package/dist/filters/logic/array/last.js +8 -0
  61. package/dist/filters/logic/array/size.d.ts +1 -0
  62. package/dist/filters/logic/array/size.js +12 -0
  63. package/dist/filters/logic/array/split.d.ts +1 -0
  64. package/dist/filters/logic/array/split.js +6 -0
  65. package/dist/filters/logic/array/where.d.ts +1 -0
  66. package/dist/filters/logic/array/where.js +8 -0
  67. package/dist/filters/logic/capitalize.d.ts +1 -0
  68. package/dist/filters/logic/color_to_hex.d.ts +1 -0
  69. package/dist/filters/logic/color_to_hex.js +15 -0
  70. package/dist/filters/logic/colors/color_to_hex.d.ts +1 -0
  71. package/dist/filters/logic/colors/color_to_hex.js +15 -0
  72. package/dist/filters/logic/component.d.ts +2 -0
  73. package/dist/filters/logic/data/formatDate.d.ts +1 -0
  74. package/dist/filters/logic/data/formatDate.js +7 -0
  75. package/dist/filters/logic/discountLabel.d.ts +1 -0
  76. package/dist/filters/logic/first.d.ts +1 -0
  77. package/dist/filters/logic/first.js +6 -0
  78. package/dist/filters/logic/formatDate.d.ts +1 -0
  79. package/dist/filters/logic/formatDate.js +4 -6
  80. package/dist/filters/logic/formatMoney.d.ts +1 -0
  81. package/dist/filters/logic/json/json.d.ts +2 -0
  82. package/dist/filters/logic/json/json.js +15 -0
  83. package/dist/filters/logic/json.d.ts +2 -0
  84. package/dist/filters/logic/json.js +15 -0
  85. package/dist/filters/logic/money/discountLabel.d.ts +1 -0
  86. package/dist/filters/logic/money/discountLabel.js +8 -0
  87. package/dist/filters/logic/money/money_with_currency.d.ts +1 -0
  88. package/dist/filters/logic/money/money_with_currency.js +8 -0
  89. package/dist/filters/logic/money/money_without_trailing_zeros.d.ts +1 -0
  90. package/dist/filters/logic/money/money_without_trailing_zeros.js +8 -0
  91. package/dist/filters/logic/money_with_currency.d.ts +1 -0
  92. package/dist/filters/logic/money_with_currency.js +8 -0
  93. package/dist/filters/logic/money_without_trailing_zeros.d.ts +1 -0
  94. package/dist/filters/logic/money_without_trailing_zeros.js +8 -0
  95. package/dist/filters/logic/split.d.ts +1 -0
  96. package/dist/filters/logic/split.js +6 -0
  97. package/dist/filters/logic/strings/capitalize.d.ts +1 -0
  98. package/dist/filters/logic/strings/capitalize.js +8 -0
  99. package/dist/filters/logic/strings/downcase.d.ts +1 -0
  100. package/dist/filters/logic/strings/downcase.js +6 -0
  101. package/dist/filters/logic/strings/remove.d.ts +1 -0
  102. package/dist/filters/logic/strings/remove.js +8 -0
  103. package/dist/filters/logic/strings/split.d.ts +1 -0
  104. package/dist/filters/logic/strings/split.js +6 -0
  105. package/dist/filters/logic/strings/strip.d.ts +1 -0
  106. package/dist/filters/logic/strings/strip.js +6 -0
  107. package/dist/filters/logic/strings/truncate.d.ts +1 -0
  108. package/dist/filters/logic/strings/truncate.js +10 -0
  109. package/dist/filters/logic/strings/upcase.d.ts +1 -0
  110. package/dist/filters/logic/strings/upcase.js +8 -0
  111. package/dist/filters/logic/urls/assets.d.ts +1 -0
  112. package/dist/filters/logic/urls/assets.js +6 -0
  113. package/dist/filters/logic/urls/capitalize.d.ts +1 -0
  114. package/dist/filters/logic/urls/capitalize.js +8 -0
  115. package/dist/filters/registerAllFilters.d.ts +2 -0
  116. package/dist/globals/index.d.ts +1 -0
  117. package/dist/globals/index.js +8 -0
  118. package/dist/globals/logic/capitalize.d.ts +1 -0
  119. package/dist/globals/logic/capitalize.js +8 -0
  120. package/dist/globals/logic/component.d.ts +2 -0
  121. package/dist/globals/logic/component.js +6 -0
  122. package/dist/globals/logic/discountLabel.d.ts +1 -0
  123. package/dist/globals/logic/discountLabel.js +8 -0
  124. package/dist/globals/logic/formatDate.d.ts +1 -0
  125. package/dist/globals/logic/formatDate.js +9 -0
  126. package/dist/globals/logic/formatMoney.d.ts +1 -0
  127. package/dist/globals/logic/formatMoney.js +8 -0
  128. package/dist/globals/logic/t.d.ts +1 -0
  129. package/dist/globals/logic/t.js +10 -0
  130. package/dist/globals/registerAllFilters.d.ts +2 -0
  131. package/dist/globals/registerAllFilters.js +47 -0
  132. package/dist/globals/registerAllGlobals.d.ts +2 -0
  133. package/dist/globals/registerAllGlobals.js +47 -0
  134. package/dist/globals copy/index.d.ts +1 -0
  135. package/dist/globals copy/index.js +8 -0
  136. package/dist/globals copy/logic/t.d.ts +1 -0
  137. package/dist/globals copy/logic/t.js +10 -0
  138. package/dist/globals copy/registerAllGlobals.d.ts +2 -0
  139. package/dist/globals copy/registerAllGlobals.js +47 -0
  140. package/dist/index.d.ts +2 -0
  141. package/dist/index.js +2 -1
  142. package/dist/middleware/extension.middleware.d.ts +2 -0
  143. package/dist/middleware/extension.middleware.js +12 -0
  144. package/dist/middleware/extensions.middleware.d.ts +2 -0
  145. package/dist/middleware/extensions.middleware.js +12 -0
  146. package/dist/middleware/filters.middleware copy.d.ts +2 -0
  147. package/dist/middleware/filters.middleware copy.js +12 -0
  148. package/dist/middleware/filters.middleware.d.ts +2 -0
  149. package/dist/middleware/filters.middleware.js +12 -0
  150. package/dist/middleware/globals.middleware copy.d.ts +2 -0
  151. package/dist/middleware/globals.middleware copy.js +12 -0
  152. package/dist/middleware/globals.middleware.d.ts +2 -0
  153. package/dist/middleware/globals.middleware.js +12 -0
  154. package/dist/middleware/init.middleware.d.ts +9 -0
  155. package/dist/middleware/init.middleware.js +23 -0
  156. package/dist/middleware/initPaths.middleware.d.ts +2 -0
  157. package/dist/middleware/initPaths.middleware.js +28 -0
  158. package/dist/middleware/locals.middleware.d.ts +2 -0
  159. package/dist/middleware/locals.middleware.js +29 -0
  160. package/dist/middleware/mergeData.middleware.d.ts +2 -0
  161. package/dist/middleware/mergeData.middleware.js +55 -0
  162. package/dist/middleware/nunjucks.d.ts +2 -0
  163. package/dist/middleware/nunjucks.js +22 -0
  164. package/dist/middleware/nunjucks.middleware copy.d.ts +2 -0
  165. package/dist/middleware/nunjucks.middleware copy.js +26 -0
  166. package/dist/middleware/nunjucks.middleware.d.ts +2 -0
  167. package/dist/middleware/nunjucks.middleware.js +36 -0
  168. package/dist/middleware/nunjucksFilters.middleware.d.ts +2 -0
  169. package/dist/middleware/nunjucksFilters.middleware.js +12 -0
  170. package/dist/middleware/prepareData.d.ts +2 -0
  171. package/dist/middleware/prepareData.js +46 -0
  172. package/dist/middleware/prepareData.middleware copy.d.ts +2 -0
  173. package/dist/middleware/prepareData.middleware copy.js +49 -0
  174. package/dist/middleware/prepareData.middleware.d.ts +2 -0
  175. package/dist/middleware/prepareData.middleware.js +49 -0
  176. package/dist/middleware/prepareDataMiddleware.d.ts +2 -0
  177. package/dist/middleware/prepareDataMiddleware.js +46 -0
  178. package/dist/middleware/render.d.ts +2 -0
  179. package/dist/middleware/render.js +24 -0
  180. package/dist/middleware/render.middleware copy.d.ts +2 -0
  181. package/dist/middleware/render.middleware copy.js +39 -0
  182. package/dist/middleware/render.middleware.d.ts +2 -0
  183. package/dist/middleware/render.middleware.js +24 -0
  184. package/dist/middleware/serve-assets.middleware.d.ts +2 -0
  185. package/dist/middleware/serve-assets.middleware.js +6 -0
  186. package/dist/middleware.d.ts +8 -0
  187. package/dist/middleware.js +53 -8
  188. package/dist/middlewares/errorHandler.d.ts +8 -0
  189. package/dist/middlewares/pathMiddleware.d.ts +2 -0
  190. package/dist/middlewares/prepareDataMiddleware.d.ts +2 -0
  191. package/dist/middlewares/themeMiddleware.d.ts +2 -0
  192. package/dist/nunjucksEnv.d.ts +6 -0
  193. package/dist/nunjucksEnv.js +0 -2
  194. package/dist/registerAllFilters.d.ts +2 -0
  195. package/dist/render.d.ts +1 -0
  196. package/dist/services/getRenderData.d.ts +3 -0
  197. package/dist/services/prepareData.d.ts +2 -0
  198. package/dist/services/prepareData.js +34 -20
  199. package/dist/services/prepareDataMiddleware.d.ts +2 -0
  200. package/dist/services/renderHandler.d.ts +2 -0
  201. package/dist/services/renderHandler.js +27 -25
  202. package/dist/store/globals.d.ts +2 -0
  203. package/dist/store/globals.js +12 -0
  204. package/dist/store/locals.d.ts +2 -0
  205. package/dist/store/locals.js +12 -0
  206. package/dist/types/sharedTypes.d.ts +26 -0
  207. package/dist/utils/asyncHandler.d.ts +0 -0
  208. package/dist/utils/asyncHandler.js +1 -0
  209. package/dist/utils/findAvailablePort.d.ts +1 -0
  210. package/dist/utils/findAvailablePort.js +28 -0
  211. package/dist/utils/getLocalData.d.ts +4 -0
  212. package/dist/utils/getLocalData.js +21 -0
  213. package/dist/utils/getLocalFooterData copy.d.ts +4 -0
  214. package/dist/utils/getLocalFooterData copy.js +22 -0
  215. package/dist/utils/getLocalFooterData.d.ts +4 -0
  216. package/dist/utils/getLocalFooterData.js +22 -0
  217. package/dist/utils/getLocalHeaderData.d.ts +4 -0
  218. package/dist/utils/getLocalHeaderData.js +22 -0
  219. package/dist/utils/getLocalWidgetData copy.d.ts +4 -0
  220. package/dist/utils/getLocalWidgetData copy.js +22 -0
  221. package/dist/utils/getLocalWidgetData.d.ts +4 -0
  222. package/dist/utils/getLocalWidgetData.js +22 -0
  223. package/dist/utils/getNestedValue.d.ts +1 -0
  224. package/dist/utils/getNestedValue.js +7 -0
  225. package/dist/utils/isPathAllowedToRender.d.ts +1 -0
  226. package/dist/utils/isPathAllowedToRender.js +8 -0
  227. package/dist/utils/logger.d.ts +5 -0
  228. package/dist/utils/mergeNestedSchemaWithData.d.ts +16 -0
  229. package/dist/utils/mergeNestedSchemaWithData.js +34 -0
  230. package/dist/utils/mergeObjects.d.ts +1 -0
  231. package/dist/utils/mergeObjects.js +28 -0
  232. package/dist/utils/mergeSchemaWithData.d.ts +14 -0
  233. package/dist/utils/mergeSchemaWithData.js +11 -0
  234. package/dist/utils/mergeWidgetSources.d.ts +1 -0
  235. package/dist/utils/mergeWidgetSources.js +21 -0
  236. package/dist/utils/normalizeWidgetPath.d.ts +1 -0
  237. package/dist/utils/normalizeWidgetPath.js +19 -0
  238. package/dist/utils/parseUrl.d.ts +2 -0
  239. package/dist/utils/parseUrl.js +46 -0
  240. package/dist/utils/render.d.ts +2 -0
  241. package/dist/utils/render.js +21 -20
  242. package/dist/utils/resolveTranslations.d.ts +1 -0
  243. package/dist/utils/resolveTranslations.js +21 -0
  244. package/package.json +5 -3
  245. package/todo.txt +1 -0
  246. package/views/home.njk +0 -15
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mergeObjects = void 0;
4
+ const mergeObjects = (base, override, priority = "override") => {
5
+ const result = {};
6
+ const keys = new Set([...Object.keys(base), ...Object.keys(override)]);
7
+ for (const key of keys) {
8
+ const baseValue = base[key];
9
+ const overrideValue = override[key];
10
+ if (typeof baseValue === "object" &&
11
+ typeof overrideValue === "object" &&
12
+ baseValue !== null &&
13
+ overrideValue !== null &&
14
+ !Array.isArray(baseValue) &&
15
+ !Array.isArray(overrideValue)) {
16
+ // merge nested objects recursively
17
+ result[key] = (0, exports.mergeObjects)(baseValue, overrideValue, priority);
18
+ }
19
+ else {
20
+ result[key] =
21
+ priority === "override"
22
+ ? overrideValue ?? baseValue
23
+ : baseValue ?? overrideValue;
24
+ }
25
+ }
26
+ return result;
27
+ };
28
+ exports.mergeObjects = mergeObjects;
@@ -0,0 +1,14 @@
1
+ interface SchemaField {
2
+ key: string;
3
+ type: string;
4
+ label: string;
5
+ default: any;
6
+ }
7
+ interface Schema {
8
+ name: string;
9
+ description: string;
10
+ data: SchemaField[];
11
+ }
12
+ type InputData = Record<string, any>;
13
+ export declare const mergeSchemaWithData: (schema: Schema, data: InputData) => Record<string, any>;
14
+ export {};
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mergeSchemaWithData = void 0;
4
+ const mergeSchemaWithData = (schema, data) => {
5
+ const result = {};
6
+ for (const field of schema.data) {
7
+ result[field.key] = data[field.key] ?? field.default;
8
+ }
9
+ return result;
10
+ };
11
+ exports.mergeSchemaWithData = mergeSchemaWithData;
@@ -0,0 +1 @@
1
+ export declare const mergeWidgetSources: (fileWidgets: any[], onlineWidgets: any[]) => any[];
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mergeWidgetSources = void 0;
4
+ const mergeObjects_1 = require("./mergeObjects");
5
+ const mergeWidgetSources = (fileWidgets, onlineWidgets) => {
6
+ const onlineMap = new Map();
7
+ onlineWidgets.forEach((w) => onlineMap.set(w.key, w));
8
+ return fileWidgets.map((fileWidget) => {
9
+ const matchedOnline = onlineMap.get(fileWidget.key);
10
+ const mergedData = matchedOnline
11
+ ? (0, mergeObjects_1.mergeObjects)(fileWidget.data || {}, matchedOnline.data || {}, "override")
12
+ : fileWidget.data;
13
+ return {
14
+ ...fileWidget,
15
+ data: mergedData,
16
+ schema: fileWidget.schema, // نستخدم الـ schema من الملفات دائمًا
17
+ ...(matchedOnline?._id && { _id: matchedOnline._id }), // لو موجود حطه
18
+ };
19
+ });
20
+ };
21
+ exports.mergeWidgetSources = mergeWidgetSources;
@@ -0,0 +1 @@
1
+ export declare function normalizeWidgetPath(input: string): string | null;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeWidgetPath = normalizeWidgetPath;
4
+ function normalizeWidgetPath(input) {
5
+ if (!input || typeof input !== 'string') {
6
+ return null;
7
+ }
8
+ const trimmed = input.trim().replace(/^['"]|['"]$/g, '');
9
+ // إزالة أي امتداد .njk لو موجود
10
+ let base = trimmed.replace(/\.njk$/, '');
11
+ // لو بيبدأ بـ widgets/ نشيله مؤقتًا
12
+ if (base.startsWith('widgets/')) {
13
+ base = base.replace(/^widgets\//, '');
14
+ }
15
+ // إزالة /widget لو موجودة في الآخر
16
+ base = base.replace(/\/widget$/, '');
17
+ // الناتج النهائي
18
+ return `widgets/${base}/widget.njk`;
19
+ }
@@ -0,0 +1,2 @@
1
+ import { ParsedUrl } from "../types/sharedTypes";
2
+ export declare const parseUrlString: (urlString: string) => ParsedUrl;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseUrlString = void 0;
4
+ const parseUrlString = (urlString) => {
5
+ const url = new URL(urlString);
6
+ // تحويل الكويري لأوبجكت
7
+ const query = {};
8
+ url.searchParams.forEach((value, key) => {
9
+ query[key] = value;
10
+ });
11
+ // استخراج أجزاء المسار
12
+ const pathParts = url.pathname.split('/').filter(Boolean);
13
+ // قائمة اللغات المسموحة
14
+ const supportedLanguages = ['ar', 'en', 'fr', 'de'];
15
+ // اللغة الافتراضية
16
+ let language = 'ar';
17
+ let country = undefined;
18
+ let cleanPathname = url.pathname;
19
+ if (pathParts.length > 0) {
20
+ const langParts = pathParts[0].split('-');
21
+ // لو اللغة موجودة ضمن اللغات المدعومة
22
+ if (supportedLanguages.includes(langParts[0])) {
23
+ language = langParts[0];
24
+ if (langParts.length === 2) {
25
+ country = langParts[1];
26
+ }
27
+ // حذف اللغة من المسار
28
+ cleanPathname = '/' + pathParts.slice(1).join('/');
29
+ if (cleanPathname === '')
30
+ cleanPathname = '/';
31
+ }
32
+ }
33
+ // بناء رابط بدون اللغة
34
+ const fullUrlWithoutLang = url.protocol + '//' + url.host + cleanPathname + (url.search || '');
35
+ return {
36
+ protocol: url.protocol.replace(':', ''),
37
+ host: url.host,
38
+ pathname: cleanPathname,
39
+ language,
40
+ country,
41
+ query,
42
+ fullUrl: url.href,
43
+ fullUrlWithoutLang,
44
+ };
45
+ };
46
+ exports.parseUrlString = parseUrlString;
@@ -0,0 +1,2 @@
1
+ import { Request, Response, NextFunction } from "express";
2
+ export declare const renderMiddleware: (req: Request, res: Response, next: NextFunction) => void;
@@ -1,23 +1,24 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.render = render;
7
- const nunjucksEnv_1 = require("../nunjucksEnv");
8
- const path_1 = __importDefault(require("path"));
9
- function render(view, context = {}, res) {
10
- return new Promise((resolve, reject) => {
11
- const viewsPath = path_1.default.join(res.locals.themesPath ?? process.cwd(), "views");
12
- const env = (0, nunjucksEnv_1.configureNunjucks)(viewsPath);
13
- env.render(view, context, (err, html) => {
14
- if (err)
15
- return reject(err);
16
- if (html !== null) {
17
- res.send(html);
18
- return resolve();
19
- }
20
- return reject(new Error('Nunjucks returned null HTML'));
21
- });
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
22
  });
23
- }
23
+ };
24
+ exports.renderMiddleware = renderMiddleware;
@@ -0,0 +1 @@
1
+ export declare const resolveTranslations: (data: any, t: (key: string) => string) => any;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveTranslations = void 0;
4
+ const resolveTranslations = (data, t) => {
5
+ if (Array.isArray(data)) {
6
+ return data.map((item) => (0, exports.resolveTranslations)(item, t));
7
+ }
8
+ if (data && typeof data === "object") {
9
+ const result = {};
10
+ for (const key in data) {
11
+ result[key] = (0, exports.resolveTranslations)(data[key], t);
12
+ }
13
+ return result;
14
+ }
15
+ if (typeof data === "string" && data.startsWith("t:")) {
16
+ const translationKey = data.slice(2); // remove "t:"
17
+ return t(translationKey); // use as-is
18
+ }
19
+ return data;
20
+ };
21
+ exports.resolveTranslations = resolveTranslations;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qumra-engine",
3
- "version": "2.0.2",
3
+ "version": "2.0.4",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "scripts": {
@@ -10,11 +10,13 @@
10
10
  },
11
11
  "dependencies": {
12
12
  "chalk": "^5.4.1",
13
- "express": "^4.18.2",
13
+ "color": "^5.0.0",
14
+ "express": "^5.1.0",
14
15
  "morgan": "^1.10.0",
15
16
  "nunjucks": "^3.2.4",
16
17
  "pino": "^9.7.0",
17
- "pino-pretty": "^13.0.0"
18
+ "pino-pretty": "^13.0.0",
19
+ "qumra-utils": "^1.0.30"
18
20
  },
19
21
  "devDependencies": {
20
22
  "@types/chalk": "^0.4.31",
package/todo.txt ADDED
@@ -0,0 +1 @@
1
+ [check if you realy need this function] => resolveTranslations;
package/views/home.njk DELETED
@@ -1,15 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="ar">
3
- <head>
4
- <meta charset="UTF-8">
5
- <title>{{ title }}</title>
6
- </head>
7
- <body>
8
- <h1>{{ title }}</h1>
9
- <p>تم عرض هذا القالب باستخدام Nunjucks وExpress Middleware!</p>
10
- <p>سعر المنتج: {{ 1234.5 | formatMoney('aaa') }}</p>
11
- <p>تاريخ الطلب: {{ '2024-06-01' | formatDate('ar-EG') }}</p>
12
- <p>اسم العميل: {{ 'ahmed' | capitalize }}</p>
13
- <p>اsdssdلخصم: {{ 20 | discountLabel }}</p>
14
- </body>
15
- </html>