@sme.up/doc-alchemist 1.5.0-SNAPSHOT-20251126095204 → 1.5.0-SNAPSHOT-20251126145720
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.
|
@@ -11,6 +11,24 @@ const isPlainObject = (value) => {
|
|
|
11
11
|
!Array.isArray(value) &&
|
|
12
12
|
Object.prototype.toString.call(value) === "[object Object]");
|
|
13
13
|
};
|
|
14
|
+
/**
|
|
15
|
+
* Properties of pdfmake document that should not be processed by adapters.
|
|
16
|
+
* These are configuration properties, not content.
|
|
17
|
+
*/
|
|
18
|
+
const EXCLUDED_PROPERTIES = new Set([
|
|
19
|
+
"styles",
|
|
20
|
+
"defaultStyle",
|
|
21
|
+
"pageSize",
|
|
22
|
+
"pageMargins",
|
|
23
|
+
"pageOrientation",
|
|
24
|
+
"pageBreakBefore",
|
|
25
|
+
"info",
|
|
26
|
+
"permissions",
|
|
27
|
+
"compress",
|
|
28
|
+
"userPassword",
|
|
29
|
+
"ownerPassword",
|
|
30
|
+
"version",
|
|
31
|
+
]);
|
|
14
32
|
/**
|
|
15
33
|
* Processes a document recursively, applying adapters to matching elements.
|
|
16
34
|
*
|
|
@@ -63,7 +81,13 @@ const processDocument = async (element, adapters, context) => {
|
|
|
63
81
|
// Recursively process all properties
|
|
64
82
|
const processed = {};
|
|
65
83
|
for (const [key, value] of Object.entries(element)) {
|
|
66
|
-
|
|
84
|
+
// Skip excluded properties (don't process them recursively)
|
|
85
|
+
if (EXCLUDED_PROPERTIES.has(key)) {
|
|
86
|
+
processed[key] = value;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
processed[key] = await (0, exports.processDocument)(value, adapters, context);
|
|
90
|
+
}
|
|
67
91
|
}
|
|
68
92
|
return processed;
|
|
69
93
|
}
|
|
@@ -80,22 +104,8 @@ const preProcessPdfMakeDocument = async (documentDefinition, context, registry)
|
|
|
80
104
|
return Promise.resolve(documentDefinition);
|
|
81
105
|
}
|
|
82
106
|
else {
|
|
107
|
+
documentDefinition.images = documentDefinition.images || {};
|
|
83
108
|
const processedDoc = (await registry?.process(documentDefinition, context));
|
|
84
|
-
// Merge all first-level properties from pdfDocument
|
|
85
|
-
// (excluding content, header, footer which are already processed)
|
|
86
|
-
if (context.pdfDocument) {
|
|
87
|
-
for (const [key, value] of Object.entries(context.pdfDocument)) {
|
|
88
|
-
if (key === "content" || key === "header" || key === "footer") {
|
|
89
|
-
continue;
|
|
90
|
-
}
|
|
91
|
-
if (value !== undefined && isPlainObject(value)) {
|
|
92
|
-
processedDoc[key] = {
|
|
93
|
-
...(documentDefinition[key] || {}),
|
|
94
|
-
...value,
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
109
|
return processedDoc;
|
|
100
110
|
}
|
|
101
111
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-processor.js","sourceRoot":"","sources":["../../../../src/converters/pdf/pdfmake/adapter-processor.ts"],"names":[],"mappings":";;;AAAA,mDAKyB;AAGzB;;GAEG;AACH,MAAM,aAAa,GAAG,CAAC,KAAc,EAAoC,EAAE;IACzE,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,iBAAiB,CAC5D,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;GAOG;AACI,MAAM,eAAe,GAAG,KAAK,EAClC,OAAgB,EAChB,QAAqC,EACrC,OAAgC,EACd,EAAE;IACpB,wBAAwB;IACxB,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,CAAC;QACH,oCAAoC;QACpC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,OAAO,MAAM,OAAO,CAAC,GAAG,CACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAA,uBAAe,EAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAC9D,CAAC;QACJ,CAAC;QAED,uBAAuB;QACvB,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,8CAA8C;YAC9C,MAAM,WAAW,GAAG,OAAO,CAAC,IAA0B,CAAC;YACvD,IAAI,WAAW,IAAI,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAE,CAAC;gBAC3C,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAE1C,oEAAoE;gBACpE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC5B,OAAO,OAAO,CAAC;gBACjB,CAAC;YACH,CAAC;YAED,iEAAiE;YACjE,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;gBAChD,6CAA6C;gBAC7C,IAAI,GAAG,KAAK,WAAW;oBAAE,SAAS;gBAElC,8CAA8C;gBAC9C,IAAI,GAAG,IAAI,OAAO,EAAE,CAAC;oBACnB,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;oBACpD,mEAAmE;oBACnE,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;wBAC5B,OAAO,GAAG,WAAW,CAAC;wBACtB,oEAAoE;wBACpE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;4BAC5B,OAAO,OAAO,CAAC;wBACjB,CAAC;wBACD,kEAAkE;oBACpE,CAAC;gBACH,CAAC;YACH,CAAC;YAED,qCAAqC;YACrC,MAAM,SAAS,GAA4B,EAAE,CAAC;YAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CACvC,OAAkC,CACnC,EAAE,CAAC;gBACF,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,IAAA,uBAAe,EAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"adapter-processor.js","sourceRoot":"","sources":["../../../../src/converters/pdf/pdfmake/adapter-processor.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n PdfMakeConverterContext,\n AdapterError,\n PdfmakeAdapter,\n AdapterRegistry,\n} from \"./pdfmake.types\";\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\n/**\n * Helper to check if a value is a plain object\n */\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n Object.prototype.toString.call(value) === \"[object Object]\"\n );\n};\n\n/**\n * Properties of pdfmake document that should not be processed by adapters.\n * These are configuration properties, not content.\n */\nconst EXCLUDED_PROPERTIES = new Set([\n \"styles\",\n \"defaultStyle\",\n \"pageSize\",\n \"pageMargins\",\n \"pageOrientation\",\n \"pageBreakBefore\",\n \"info\",\n \"permissions\",\n \"compress\",\n \"userPassword\",\n \"ownerPassword\",\n \"version\",\n]);\n\n/**\n * Processes a document recursively, applying adapters to matching elements.\n *\n * @param element - The current element to process\n * @param adapters - Map of element types to their adapter functions\n * @param context - Current processing context\n * @returns The transformed element\n */\nexport const processDocument = async (\n element: unknown,\n adapters: Map<string, PdfmakeAdapter>,\n context: PdfMakeConverterContext,\n): Promise<unknown> => {\n // Handle null/undefined\n if (element == null) {\n return element;\n }\n try {\n // Handle arrays - process each item\n if (Array.isArray(element)) {\n return await Promise.all(\n element.map(item => processDocument(item, adapters, context)),\n );\n }\n\n // Handle plain objects\n if (isPlainObject(element)) {\n // Try to apply adapters based on element type\n const elementType = element.type as string | undefined;\n if (elementType && adapters.has(elementType)) {\n const adapter = adapters.get(elementType)!;\n element = await adapter(element, context);\n\n // After transformation, element might not be a plain object anymore\n if (!isPlainObject(element)) {\n return element;\n }\n }\n\n // Also try adapters based on properties (e.g., \"table\" property)\n for (const [key, adapter] of adapters.entries()) {\n // Skip type-based adapters already processed\n if (key === elementType) continue;\n\n // Apply adapter if it matches a property name\n if (key in element) {\n const transformed = await adapter(element, context);\n // Only accept transformation if adapter actually changed something\n if (transformed !== element) {\n element = transformed;\n // After transformation, element might not be a plain object anymore\n if (!isPlainObject(element)) {\n return element;\n }\n // Continue to apply other adapters (e.g., both header and footer)\n }\n }\n }\n\n // Recursively process all properties\n const processed: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(\n element as Record<string, unknown>,\n )) {\n // Skip excluded properties (don't process them recursively)\n if (EXCLUDED_PROPERTIES.has(key)) {\n processed[key] = value;\n } else {\n processed[key] = await processDocument(value, adapters, context);\n }\n }\n return processed;\n }\n\n // Primitive values - return as-is\n return element;\n } catch (err) {\n throw new AdapterError(err as string, element);\n }\n};\n\nexport const preProcessPdfMakeDocument = async (\n documentDefinition: TDocumentDefinitions,\n context: Partial<PdfMakeConverterContext>,\n registry?: AdapterRegistry,\n): Promise<TDocumentDefinitions> => {\n if (!registry) {\n return Promise.resolve(documentDefinition);\n } else {\n documentDefinition.images = documentDefinition.images || {};\n\n const processedDoc = (await registry?.process(\n documentDefinition,\n context,\n )) as TDocumentDefinitions;\n\n return processedDoc;\n }\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sme.up/doc-alchemist",
|
|
3
|
-
"version": "1.5.0-SNAPSHOT-
|
|
3
|
+
"version": "1.5.0-SNAPSHOT-20251126145720",
|
|
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/)",
|