@sme.up/doc-alchemist 1.4.0 → 1.5.0-20251209090900

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 (56) hide show
  1. package/README.md +39 -48
  2. package/dist/converters/excel/commons.d.ts +2 -2
  3. package/dist/converters/excel/commons.js +19 -13
  4. package/dist/converters/excel/commons.js.map +1 -1
  5. package/dist/converters/excel/excel-converter.types.d.ts +2 -0
  6. package/dist/converters/excel/excel-converter.types.js +3 -1
  7. package/dist/converters/excel/excel-converter.types.js.map +1 -1
  8. package/dist/converters/excel/matrix-converter.d.ts +1 -1
  9. package/dist/converters/excel/matrix-converter.js +33 -11
  10. package/dist/converters/excel/matrix-converter.js.map +1 -1
  11. package/dist/converters/excel/tree-converter.d.ts +1 -1
  12. package/dist/converters/excel/tree-converter.js +3 -3
  13. package/dist/converters/excel/tree-converter.js.map +1 -1
  14. package/dist/converters/excel-converter.d.ts +1 -1
  15. package/dist/converters/excel-converter.js +2 -2
  16. package/dist/converters/excel-converter.js.map +1 -1
  17. package/dist/converters/pdf/form-filler.d.ts +24 -0
  18. package/dist/converters/pdf/form-filler.js +187 -0
  19. package/dist/converters/pdf/form-filler.js.map +1 -0
  20. package/dist/converters/pdf/pdfmake/adapter-processor.d.ts +12 -0
  21. package/dist/converters/pdf/pdfmake/adapter-processor.js +113 -0
  22. package/dist/converters/pdf/pdfmake/adapter-processor.js.map +1 -0
  23. package/dist/converters/pdf/pdfmake/adapter-registry.d.ts +22 -0
  24. package/dist/converters/pdf/pdfmake/adapter-registry.js +48 -0
  25. package/dist/converters/pdf/pdfmake/adapter-registry.js.map +1 -0
  26. package/dist/converters/pdf/pdfmake/image-adapter.d.ts +19 -0
  27. package/dist/converters/pdf/pdfmake/image-adapter.js +150 -0
  28. package/dist/converters/pdf/pdfmake/image-adapter.js.map +1 -0
  29. package/dist/converters/pdf/pdfmake/page-element-adapter.d.ts +8 -0
  30. package/dist/converters/pdf/pdfmake/page-element-adapter.js +83 -0
  31. package/dist/converters/pdf/pdfmake/page-element-adapter.js.map +1 -0
  32. package/dist/converters/pdf/pdfmake/pdfmake.types.d.ts +60 -0
  33. package/dist/converters/pdf/pdfmake/pdfmake.types.js +13 -0
  34. package/dist/converters/pdf/pdfmake/pdfmake.types.js.map +1 -0
  35. package/dist/converters/pdf/pdfmake/table-adapter.d.ts +31 -0
  36. package/dist/converters/pdf/pdfmake/table-adapter.js +126 -0
  37. package/dist/converters/pdf/pdfmake/table-adapter.js.map +1 -0
  38. package/dist/converters/pdf/pdfmake-renderer.d.ts +21 -0
  39. package/dist/converters/pdf/pdfmake-renderer.js +87 -0
  40. package/dist/converters/pdf/pdfmake-renderer.js.map +1 -0
  41. package/dist/converters/pdf-converter.d.ts +6 -0
  42. package/dist/converters/pdf-converter.js +24 -1
  43. package/dist/converters/pdf-converter.js.map +1 -1
  44. package/dist/index.d.ts +7 -1
  45. package/dist/index.js +12 -1
  46. package/dist/index.js.map +1 -1
  47. package/dist/utils/commons-utility.d.ts +3 -2
  48. package/dist/utils/commons-utility.js +23 -79
  49. package/dist/utils/commons-utility.js.map +1 -1
  50. package/dist/utils/dates-utility.d.ts +7 -0
  51. package/dist/utils/dates-utility.js +25 -0
  52. package/dist/utils/dates-utility.js.map +1 -1
  53. package/dist/utils/filters-utility.d.ts +6 -0
  54. package/dist/utils/filters-utility.js +189 -0
  55. package/dist/utils/filters-utility.js.map +1 -0
  56. package/package.json +5 -3
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isFilterMatchValue = void 0;
4
+ const dates_utility_1 = require("./dates-utility");
5
+ const math_utility_1 = require("./math-utility");
6
+ const objects_utility_1 = require("./objects-utility");
7
+ const parseFilterExpression = (filter) => {
8
+ const regex = /^\s*(<=|>=|!|>|<)?\s*'?(%)?(.*?)(%)?'?\s*$/;
9
+ const match = filter.match(regex);
10
+ if (!match) {
11
+ return null;
12
+ }
13
+ return {
14
+ operator: match[1],
15
+ startWildcard: match[2] === "%",
16
+ filterText: match[3] ?? "",
17
+ endWildcard: match[4] === "%",
18
+ };
19
+ };
20
+ const handleVoidFilter = (filterText, filterExpression, operator, value) => {
21
+ if (filterText === "" && filterExpression.includes("''")) {
22
+ if (operator === "!") {
23
+ return value !== "";
24
+ }
25
+ return value === "";
26
+ }
27
+ return null;
28
+ };
29
+ const convertToTypedValues = (value, filterText, obj, webupManagerData) => {
30
+ let typedValue = value;
31
+ let typedFilter = filterText;
32
+ let isTypedComparison = false;
33
+ if (obj &&
34
+ (0, objects_utility_1.objectsIsNumber)(obj) &&
35
+ !Number.isNaN((0, math_utility_1.mathNumberify)(filterText, webupManagerData.mathLocale))) {
36
+ // Convert to numbers for numeric comparison
37
+ typedValue = parseFloat(value);
38
+ typedFilter = (0, math_utility_1.mathNumberify)(filterText, webupManagerData.mathLocale, true);
39
+ // If parsing fails, treat as 0 for comparison
40
+ if (isNaN(typedValue))
41
+ typedValue = 0;
42
+ if (isNaN(typedFilter))
43
+ typedFilter = 0;
44
+ isTypedComparison = true;
45
+ }
46
+ else if (obj &&
47
+ (0, objects_utility_1.objectsIsDate)(obj) &&
48
+ (0, dates_utility_1.datesIsIsoDate)(value) &&
49
+ (0, dates_utility_1.parseDateByLocale)(filterText, webupManagerData.datesLocale)) {
50
+ // Convert to Date objects for date comparison
51
+ typedValue = new Date(value);
52
+ typedValue.setHours(0, 0, 0, 0);
53
+ typedFilter =
54
+ (0, dates_utility_1.parseDateByLocale)(filterText, webupManagerData.datesLocale) ?? filterText;
55
+ isTypedComparison = true;
56
+ }
57
+ // If conversion to typed comparison failed, fallback to string comparison
58
+ if (!isTypedComparison) {
59
+ typedFilter = filterText;
60
+ switch (true) {
61
+ case (0, objects_utility_1.objectsIsDate)(obj):
62
+ typedValue = (0, dates_utility_1.datesFormat)(value, webupManagerData.datesLocale);
63
+ break;
64
+ case (0, objects_utility_1.objectsIsNumber)(obj):
65
+ typedValue = (0, math_utility_1.mathFormat)(parseFloat(value), null, webupManagerData.mathLocale);
66
+ break;
67
+ default:
68
+ typedValue = value;
69
+ }
70
+ }
71
+ return { typedValue, typedFilter, isTypedComparison };
72
+ };
73
+ const handleComparisonOperator = (operator, typedValue, typedFilter) => {
74
+ if (!operator || ![">", ">=", "<", "<="].includes(operator)) {
75
+ return null;
76
+ }
77
+ switch (operator) {
78
+ case ">":
79
+ return typedValue > typedFilter;
80
+ case ">=":
81
+ return typedValue >= typedFilter;
82
+ case "<":
83
+ return typedValue < typedFilter;
84
+ case "<=":
85
+ return typedValue <= typedFilter;
86
+ default:
87
+ return null;
88
+ }
89
+ };
90
+ const handleNegationOperator = (value, filterText, typedValue, typedFilter, isTypedComparison, startWildcard, endWildcard) => {
91
+ // For numeric or date types, use typed comparison
92
+ if (isTypedComparison) {
93
+ const returnValue = typedValue.valueOf() !== typedFilter.valueOf();
94
+ console.log(typedValue.valueOf(), typedFilter.valueOf(), returnValue);
95
+ return returnValue;
96
+ }
97
+ // Match negation for strings
98
+ if (startWildcard && endWildcard) {
99
+ return !value.includes(filterText);
100
+ }
101
+ if (startWildcard) {
102
+ return !value.endsWith(filterText);
103
+ }
104
+ if (endWildcard) {
105
+ return !value.startsWith(filterText);
106
+ }
107
+ // Exact match negation
108
+ return value !== filterText;
109
+ };
110
+ const handleWildcardMatch = (value, filterText, startWildcard, endWildcard) => {
111
+ if (!startWildcard && !endWildcard) {
112
+ return null;
113
+ }
114
+ if (startWildcard && endWildcard) {
115
+ return value.includes(filterText);
116
+ }
117
+ if (startWildcard) {
118
+ return value.endsWith(filterText);
119
+ }
120
+ if (endWildcard) {
121
+ return value.startsWith(filterText);
122
+ }
123
+ return null;
124
+ };
125
+ const handleDefaultMatch = (value, filter, filterText, typedValue, typedFilter, isTypedComparison) => {
126
+ if (!isTypedComparison) {
127
+ // Non-typed exact match
128
+ if (filter.startsWith("'") && filter.endsWith("'")) {
129
+ return value === filterText;
130
+ }
131
+ else {
132
+ return value.toLowerCase().includes(filterText.toLowerCase());
133
+ }
134
+ }
135
+ else {
136
+ return typedValue.valueOf() === typedFilter.valueOf();
137
+ }
138
+ };
139
+ const isSingleFilterMatchValue = (value, filter, obj = { t: "", p: "", k: "" }, webupManagerData) => {
140
+ if (value == null)
141
+ value = "";
142
+ if (filter == null)
143
+ filter = "";
144
+ value = value.trim();
145
+ filter = filter.trim();
146
+ // Parse filter expression
147
+ const filterParts = parseFilterExpression(filter);
148
+ if (!filterParts) {
149
+ // fallback: inclusion - Non case sensitive
150
+ return value.toLowerCase().includes(filter.toLowerCase());
151
+ }
152
+ const { operator, startWildcard, filterText, endWildcard } = filterParts;
153
+ // Handle void filter (empty string with quotes)
154
+ const voidResult = handleVoidFilter(filterText, filter, operator, value);
155
+ if (voidResult !== null) {
156
+ return voidResult;
157
+ }
158
+ // Convert to appropriate type based on obj.t
159
+ const { typedValue, typedFilter, isTypedComparison } = convertToTypedValues(value, filterText, obj, webupManagerData);
160
+ // Handle comparison operators (>, >=, <, <=)
161
+ const comparisonResult = handleComparisonOperator(operator, typedValue, typedFilter);
162
+ if (comparisonResult !== null) {
163
+ return comparisonResult;
164
+ }
165
+ // Handle negation operator (!)
166
+ if (operator === "!") {
167
+ return handleNegationOperator(value, filterText, typedValue, typedFilter, isTypedComparison, startWildcard, endWildcard);
168
+ }
169
+ // Handle wildcard matching
170
+ const wildcardResult = handleWildcardMatch(value, filterText, startWildcard, endWildcard);
171
+ if (wildcardResult !== null) {
172
+ return wildcardResult;
173
+ }
174
+ // Default match (exact or inclusion)
175
+ return handleDefaultMatch(value, filter, filterText, typedValue, typedFilter, isTypedComparison);
176
+ };
177
+ const isFilterMatchValue = (value, filter, obj = { t: "", p: "", k: "" }, webupManagerData = {
178
+ mathLocale: "it",
179
+ datesLocale: "it",
180
+ themeBackground: "",
181
+ }) => {
182
+ const filters = filter
183
+ .split(";")
184
+ .map(f => f.trim())
185
+ .filter(f => f.length > 0);
186
+ return filters.every(f => isSingleFilterMatchValue(value, f, obj, webupManagerData));
187
+ };
188
+ exports.isFilterMatchValue = isFilterMatchValue;
189
+ //# sourceMappingURL=filters-utility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters-utility.js","sourceRoot":"","sources":["../../src/utils/filters-utility.ts"],"names":[],"mappings":"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","sourcesContent":["import { WebupManagerData } from \"../types\";\nimport {\n datesIsIsoDate,\n parseDateByLocale,\n datesFormat,\n} from \"./dates-utility\";\nimport { mathFormat, mathNumberify } from \"./math-utility\";\nimport { objectsIsDate, objectsIsNumber } from \"./objects-utility\";\n\ninterface FilterParts {\n operator: string | undefined;\n startWildcard: boolean;\n filterText: string;\n endWildcard: boolean;\n}\n\ninterface TypedValues {\n typedValue: string | Date | number;\n typedFilter: string | Date | number;\n isTypedComparison: boolean;\n}\n\nconst parseFilterExpression = (filter: string): FilterParts | null => {\n const regex = /^\\s*(<=|>=|!|>|<)?\\s*'?(%)?(.*?)(%)?'?\\s*$/;\n const match = filter.match(regex);\n\n if (!match) {\n return null;\n }\n\n return {\n operator: match[1],\n startWildcard: match[2] === \"%\",\n filterText: match[3] ?? \"\",\n endWildcard: match[4] === \"%\",\n };\n};\n\nconst handleVoidFilter = (\n filterText: string,\n filterExpression: string,\n operator: string | undefined,\n value: string,\n): boolean | null => {\n if (filterText === \"\" && filterExpression.includes(\"''\")) {\n if (operator === \"!\") {\n return value !== \"\";\n }\n return value === \"\";\n }\n return null;\n};\n\nconst convertToTypedValues = (\n value: string,\n filterText: string,\n obj: { t: string; p: string; k: string },\n webupManagerData: WebupManagerData,\n): TypedValues => {\n let typedValue: string | Date | number = value;\n let typedFilter: string | Date | number = filterText;\n let isTypedComparison = false;\n\n if (\n obj &&\n objectsIsNumber(obj) &&\n !Number.isNaN(mathNumberify(filterText, webupManagerData.mathLocale))\n ) {\n // Convert to numbers for numeric comparison\n typedValue = parseFloat(value);\n typedFilter = mathNumberify(filterText, webupManagerData.mathLocale, true);\n\n // If parsing fails, treat as 0 for comparison\n if (isNaN(typedValue)) typedValue = 0;\n if (isNaN(typedFilter)) typedFilter = 0;\n isTypedComparison = true;\n } else if (\n obj &&\n objectsIsDate(obj) &&\n datesIsIsoDate(value) &&\n parseDateByLocale(filterText, webupManagerData.datesLocale)\n ) {\n // Convert to Date objects for date comparison\n typedValue = new Date(value);\n typedValue.setHours(0, 0, 0, 0);\n typedFilter =\n parseDateByLocale(filterText, webupManagerData.datesLocale) ?? filterText;\n isTypedComparison = true;\n }\n\n // If conversion to typed comparison failed, fallback to string comparison\n if (!isTypedComparison) {\n typedFilter = filterText;\n switch (true) {\n case objectsIsDate(obj):\n typedValue = datesFormat(value, webupManagerData.datesLocale);\n break;\n case objectsIsNumber(obj):\n typedValue = mathFormat(\n parseFloat(value),\n null as unknown as string,\n webupManagerData.mathLocale,\n );\n break;\n default:\n typedValue = value;\n }\n }\n\n return { typedValue, typedFilter, isTypedComparison };\n};\n\nconst handleComparisonOperator = (\n operator: string | undefined,\n typedValue: string | Date | number,\n typedFilter: string | Date | number,\n): boolean | null => {\n if (!operator || ![\">\", \">=\", \"<\", \"<=\"].includes(operator)) {\n return null;\n }\n\n switch (operator) {\n case \">\":\n return typedValue > typedFilter;\n case \">=\":\n return typedValue >= typedFilter;\n case \"<\":\n return typedValue < typedFilter;\n case \"<=\":\n return typedValue <= typedFilter;\n default:\n return null;\n }\n};\n\nconst handleNegationOperator = (\n value: string,\n filterText: string,\n typedValue: string | Date | number,\n typedFilter: string | Date | number,\n isTypedComparison: boolean,\n startWildcard: boolean,\n endWildcard: boolean,\n): boolean => {\n // For numeric or date types, use typed comparison\n if (isTypedComparison) {\n const returnValue = typedValue.valueOf() !== typedFilter.valueOf();\n console.log(typedValue.valueOf(), typedFilter.valueOf(), returnValue);\n return returnValue;\n }\n\n // Match negation for strings\n if (startWildcard && endWildcard) {\n return !value.includes(filterText);\n }\n if (startWildcard) {\n return !value.endsWith(filterText);\n }\n if (endWildcard) {\n return !value.startsWith(filterText);\n }\n\n // Exact match negation\n return value !== filterText;\n};\n\nconst handleWildcardMatch = (\n value: string,\n filterText: string,\n startWildcard: boolean,\n endWildcard: boolean,\n): boolean | null => {\n if (!startWildcard && !endWildcard) {\n return null;\n }\n\n if (startWildcard && endWildcard) {\n return value.includes(filterText);\n }\n if (startWildcard) {\n return value.endsWith(filterText);\n }\n if (endWildcard) {\n return value.startsWith(filterText);\n }\n\n return null;\n};\n\nconst handleDefaultMatch = (\n value: string,\n filter: string,\n filterText: string,\n typedValue: string | Date | number,\n typedFilter: string | Date | number,\n isTypedComparison: boolean,\n): boolean => {\n if (!isTypedComparison) {\n // Non-typed exact match\n if (filter.startsWith(\"'\") && filter.endsWith(\"'\")) {\n return value === filterText;\n } else {\n return value.toLowerCase().includes(filterText.toLowerCase());\n }\n } else {\n return typedValue.valueOf() === typedFilter.valueOf();\n }\n};\n\nconst isSingleFilterMatchValue = (\n value: string,\n filter: string,\n obj: { t: string; p: string; k: string } = { t: \"\", p: \"\", k: \"\" },\n webupManagerData: WebupManagerData,\n): boolean => {\n if (value == null) value = \"\";\n if (filter == null) filter = \"\";\n\n value = value.trim();\n filter = filter.trim();\n\n // Parse filter expression\n const filterParts = parseFilterExpression(filter);\n if (!filterParts) {\n // fallback: inclusion - Non case sensitive\n return value.toLowerCase().includes(filter.toLowerCase());\n }\n\n const { operator, startWildcard, filterText, endWildcard } = filterParts;\n\n // Handle void filter (empty string with quotes)\n const voidResult = handleVoidFilter(filterText, filter, operator, value);\n if (voidResult !== null) {\n return voidResult;\n }\n\n // Convert to appropriate type based on obj.t\n const { typedValue, typedFilter, isTypedComparison } = convertToTypedValues(\n value,\n filterText,\n obj,\n webupManagerData,\n );\n\n // Handle comparison operators (>, >=, <, <=)\n const comparisonResult = handleComparisonOperator(\n operator,\n typedValue,\n typedFilter,\n );\n if (comparisonResult !== null) {\n return comparisonResult;\n }\n\n // Handle negation operator (!)\n if (operator === \"!\") {\n return handleNegationOperator(\n value,\n filterText,\n typedValue,\n typedFilter,\n isTypedComparison,\n startWildcard,\n endWildcard,\n );\n }\n\n // Handle wildcard matching\n const wildcardResult = handleWildcardMatch(\n value,\n filterText,\n startWildcard,\n endWildcard,\n );\n if (wildcardResult !== null) {\n return wildcardResult;\n }\n\n // Default match (exact or inclusion)\n return handleDefaultMatch(\n value,\n filter,\n filterText,\n typedValue,\n typedFilter,\n isTypedComparison,\n );\n};\n\nexport const isFilterMatchValue = (\n value: string,\n filter: string,\n obj: { t: string; p: string; k: string } = { t: \"\", p: \"\", k: \"\" },\n webupManagerData: WebupManagerData = {\n mathLocale: \"it\",\n datesLocale: \"it\",\n themeBackground: \"\",\n },\n): boolean => {\n const filters = filter\n .split(\";\")\n .map(f => f.trim())\n .filter(f => f.length > 0);\n return filters.every(f =>\n isSingleFilterMatchValue(value, f, obj, webupManagerData),\n );\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sme.up/doc-alchemist",
3
- "version": "1.4.0",
3
+ "version": "1.5.0-20251209090900",
4
4
  "description": "Library for generating documents in various formats, including Excel and PDF.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Smeup LAB <info@smeup.com> (https://www.smeup.com/)",
@@ -24,6 +24,7 @@
24
24
  "@eslint/js": "^9.28.0",
25
25
  "@types/jest": "^29.5.14",
26
26
  "@types/node": "^22.15.30",
27
+ "@types/pdfmake": "^0.2.12",
27
28
  "csstype": "^3.1.3",
28
29
  "eslint": "^9.28.0",
29
30
  "globals": "^16.2.0",
@@ -44,6 +45,7 @@
44
45
  "jspdf": "^3.0.1",
45
46
  "jspdf-autotable": "^5.0.2",
46
47
  "math-expression-evaluator": "^2.0.7",
47
- "pdf-lib": "^1.17.1"
48
+ "pdf-lib": "^1.17.1",
49
+ "pdfmake": "^0.2.20"
48
50
  }
49
- }
51
+ }