@sme.up/doc-alchemist 1.7.0-SNAPSHOT-20251218135616 → 1.7.0-SNAPSHOT-20251218155723

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.
@@ -6,4 +6,4 @@ import { ChartOptions } from "./charts-converter-types";
6
6
  * @param chartType - Type of chart (bar, line, pie, scatter)
7
7
  * @returns Promise<string> containing the chart SVG
8
8
  */
9
- export declare const dataTableToChart: (dataTable: SmeupDataTable, chartOptions: ChartOptions) => Promise<string>;
9
+ export declare const dataTableToChart: (dataTable: SmeupDataTable, chartOptions: ChartOptions, onMergeOptions?: (merged: ChartOptions) => void) => Promise<string>;
@@ -43,21 +43,25 @@ const datastructure_utility_1 = require("../../utils/datastructure-utility");
43
43
  * @param chartType - Type of chart (bar, line, pie, scatter)
44
44
  * @returns Promise<string> containing the chart SVG
45
45
  */
46
- const dataTableToChart = async (dataTable, chartOptions) => {
47
- return await generateChart(dataTable, chartOptions);
46
+ const dataTableToChart = async (dataTable, chartOptions, onMergeOptions) => {
47
+ return await generateChart(dataTable, chartOptions, onMergeOptions);
48
48
  };
49
49
  exports.dataTableToChart = dataTableToChart;
50
50
  /**
51
51
  * Generate chart in Node.js environment using SVG renderer
52
52
  */
53
- async function generateChart(dataTable, chartOptions) {
53
+ async function generateChart(dataTable, chartOptions, onMergeOptions) {
54
54
  try {
55
55
  const options = (0, datastructure_utility_1.mergeSetupOptions)(dataTable.setup?.options?.["EXA"]?.[0] ?? {}, chartOptions ?? {});
56
- if (!chartOptions) {
57
- throw new Error("Chart options must be provided");
56
+ if (!options ||
57
+ (typeof options === "object" && Object.keys(options).length === 0)) {
58
+ throw new Error("Chart options must be provided and not be empty");
58
59
  }
59
- const width = Number(options.ForceWidth ?? 400);
60
- const height = Number(options.ForceHeight ?? 300);
60
+ options.ForceWidth = options.ForceWidth ?? "400";
61
+ options.ForceHeight = options.ForceHeight ?? "300";
62
+ const width = Number(options.ForceWidth);
63
+ const height = Number(options.ForceHeight);
64
+ onMergeOptions?.(options);
61
65
  // Initialize ECharts with SVG renderer (no canvas needed in recent versions)
62
66
  const chart = echarts.init(null, null, {
63
67
  renderer: "svg",
@@ -1 +1 @@
1
- {"version":3,"file":"charts-converter.js","sourceRoot":"","sources":["../../../src/converters/images/charts-converter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAmC;AAGnC,mEAAwE;AAExE,6EAAsE;AAEtE;;;;;GAKG;AACI,MAAM,gBAAgB,GAAG,KAAK,EACnC,SAAyB,EACzB,YAA0B,EACT,EAAE;IACnB,OAAO,MAAM,aAAa,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AACtD,CAAC,CAAC;AALW,QAAA,gBAAgB,oBAK3B;AAEF;;GAEG;AACH,KAAK,UAAU,aAAa,CAC1B,SAAyB,EACzB,YAA0B;IAE1B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,yCAAiB,EAC/B,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAC5C,YAAY,IAAI,EAAE,CACnB,CAAC;QAEF,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC;QAElD,6EAA6E;QAC7E,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE;YACrC,QAAQ,EAAE,KAAK;YACf,GAAG,EAAE,IAAI;YACT,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QAEH,4CAA4C;QAC5C,MAAM,MAAM,GAAG,IAAA,qDAA6B,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAEjE,oBAAoB;QACpB,KAAK,CAAC,SAAS,CAAC,MAAuB,CAAC,CAAC;QAEzC,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAEhE,iBAAiB;QACjB,MAAM,SAAS,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAE5C,UAAU;QACV,KAAK,CAAC,OAAO,EAAE,CAAC;QAEhB,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;QAC3D,MAAM,IAAI,KAAK,CACb,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CACxF,CAAC;IACJ,CAAC;AACH,CAAC","sourcesContent":["import * as echarts from \"echarts\";\nimport type { EChartsOption } from \"echarts\";\nimport { SmeupDataTable } from \"../../types/data-structures/smeupDataTable\";\nimport { convertDataTableToChartConfig } from \"./charts-data-converter\";\nimport { ChartOptions } from \"./charts-converter-types\";\nimport { mergeSetupOptions } from \"../../utils/datastructure-utility\";\n\n/**\n * Converts SmeupDataTable to chart SVG string\n * @param dataTable - SmeupDataTable containing the data\n * @param chartType - Type of chart (bar, line, pie, scatter)\n * @returns Promise<string> containing the chart SVG\n */\nexport const dataTableToChart = async (\n dataTable: SmeupDataTable,\n chartOptions: ChartOptions,\n): Promise<string> => {\n return await generateChart(dataTable, chartOptions);\n};\n\n/**\n * Generate chart in Node.js environment using SVG renderer\n */\nasync function generateChart(\n dataTable: SmeupDataTable,\n chartOptions: ChartOptions,\n): Promise<string> {\n try {\n const options = mergeSetupOptions<ChartOptions>(\n dataTable.setup?.options?.[\"EXA\"]?.[0] ?? {},\n chartOptions ?? {},\n );\n\n if (!chartOptions) {\n throw new Error(\"Chart options must be provided\");\n }\n\n const width = Number(options.ForceWidth ?? 400);\n const height = Number(options.ForceHeight ?? 300);\n\n // Initialize ECharts with SVG renderer (no canvas needed in recent versions)\n const chart = echarts.init(null, null, {\n renderer: \"svg\",\n ssr: true,\n width: width,\n height: height,\n });\n\n // Convert data table to chart configuration\n const config = convertDataTableToChartConfig(dataTable, options);\n\n // Set chart options\n chart.setOption(config as EChartsOption);\n\n console.debug(\"Chart options\", JSON.stringify(config, null, 2));\n\n // Get SVG string\n const svgString = chart.renderToSVGString();\n\n // Cleanup\n chart.dispose();\n\n return svgString;\n } catch (error) {\n console.error(\"Error generating chart in Node.js:\", error);\n throw new Error(\n `Failed to generate chart: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n );\n }\n}\n"]}
1
+ {"version":3,"file":"charts-converter.js","sourceRoot":"","sources":["../../../src/converters/images/charts-converter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAmC;AAGnC,mEAAwE;AAExE,6EAAsE;AAEtE;;;;;GAKG;AACI,MAAM,gBAAgB,GAAG,KAAK,EACnC,SAAyB,EACzB,YAA0B,EAC1B,cAA+C,EAC9B,EAAE;IACnB,OAAO,MAAM,aAAa,CAAC,SAAS,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;AACtE,CAAC,CAAC;AANW,QAAA,gBAAgB,oBAM3B;AAEF;;GAEG;AACH,KAAK,UAAU,aAAa,CAC1B,SAAyB,EACzB,YAA0B,EAC1B,cAA+C;IAE/C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,yCAAiB,EAC/B,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAC5C,YAAY,IAAI,EAAE,CACnB,CAAC;QAEF,IACE,CAAC,OAAO;YACR,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,EAClE,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QAED,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC;QACjD,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,KAAK,CAAC;QAEnD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAE3C,cAAc,EAAE,CAAC,OAAO,CAAC,CAAC;QAE1B,6EAA6E;QAC7E,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE;YACrC,QAAQ,EAAE,KAAK;YACf,GAAG,EAAE,IAAI;YACT,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QAEH,4CAA4C;QAC5C,MAAM,MAAM,GAAG,IAAA,qDAA6B,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAEjE,oBAAoB;QACpB,KAAK,CAAC,SAAS,CAAC,MAAuB,CAAC,CAAC;QAEzC,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAEhE,iBAAiB;QACjB,MAAM,SAAS,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAE5C,UAAU;QACV,KAAK,CAAC,OAAO,EAAE,CAAC;QAEhB,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;QAC3D,MAAM,IAAI,KAAK,CACb,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CACxF,CAAC;IACJ,CAAC;AACH,CAAC","sourcesContent":["import * as echarts from \"echarts\";\nimport type { EChartsOption } from \"echarts\";\nimport { SmeupDataTable } from \"../../types/data-structures/smeupDataTable\";\nimport { convertDataTableToChartConfig } from \"./charts-data-converter\";\nimport { ChartOptions } from \"./charts-converter-types\";\nimport { mergeSetupOptions } from \"../../utils/datastructure-utility\";\n\n/**\n * Converts SmeupDataTable to chart SVG string\n * @param dataTable - SmeupDataTable containing the data\n * @param chartType - Type of chart (bar, line, pie, scatter)\n * @returns Promise<string> containing the chart SVG\n */\nexport const dataTableToChart = async (\n dataTable: SmeupDataTable,\n chartOptions: ChartOptions,\n onMergeOptions?: (merged: ChartOptions) => void,\n): Promise<string> => {\n return await generateChart(dataTable, chartOptions, onMergeOptions);\n};\n\n/**\n * Generate chart in Node.js environment using SVG renderer\n */\nasync function generateChart(\n dataTable: SmeupDataTable,\n chartOptions: ChartOptions,\n onMergeOptions?: (merged: ChartOptions) => void,\n): Promise<string> {\n try {\n const options = mergeSetupOptions<ChartOptions>(\n dataTable.setup?.options?.[\"EXA\"]?.[0] ?? {},\n chartOptions ?? {},\n );\n\n if (\n !options ||\n (typeof options === \"object\" && Object.keys(options).length === 0)\n ) {\n throw new Error(\"Chart options must be provided and not be empty\");\n }\n\n options.ForceWidth = options.ForceWidth ?? \"400\";\n options.ForceHeight = options.ForceHeight ?? \"300\";\n\n const width = Number(options.ForceWidth);\n const height = Number(options.ForceHeight);\n\n onMergeOptions?.(options);\n\n // Initialize ECharts with SVG renderer (no canvas needed in recent versions)\n const chart = echarts.init(null, null, {\n renderer: \"svg\",\n ssr: true,\n width: width,\n height: height,\n });\n\n // Convert data table to chart configuration\n const config = convertDataTableToChartConfig(dataTable, options);\n\n // Set chart options\n chart.setOption(config as EChartsOption);\n\n console.debug(\"Chart options\", JSON.stringify(config, null, 2));\n\n // Get SVG string\n const svgString = chart.renderToSVGString();\n\n // Cleanup\n chart.dispose();\n\n return svgString;\n } catch (error) {\n console.error(\"Error generating chart in Node.js:\", error);\n throw new Error(\n `Failed to generate chart: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n );\n }\n}\n"]}
@@ -35,16 +35,17 @@ const smeupChartToPdfMakeSvgAdapter = () => {
35
35
  }
36
36
  const elementWithChart = element;
37
37
  const options = elementWithChart.chart.smeup.options;
38
- const svg = await (0, charts_converter_1.dataTableToChart)(elementWithChart.chart.smeup.data, options);
39
- const width = options.ForceWidth ? Number(options.ForceWidth) : undefined;
40
- const height = options.ForceHeight
41
- ? Number(options.ForceHeight)
42
- : undefined;
38
+ let mergedOptions;
39
+ const svg = await (0, charts_converter_1.dataTableToChart)(elementWithChart.chart.smeup.data, options, (merged) => {
40
+ mergedOptions = merged;
41
+ });
42
+ const width = mergedOptions.ForceWidth;
43
+ const height = mergedOptions.ForceHeight;
43
44
  return {
44
45
  ...elementWithChart,
45
46
  svg: svg,
46
- ...(width ? { width } : {}),
47
- ...(height ? { height } : {}),
47
+ ...width,
48
+ ...height,
48
49
  };
49
50
  };
50
51
  };
@@ -1 +1 @@
1
- {"version":3,"file":"chart-adapter.js","sourceRoot":"","sources":["../../../../../src/converters/pdf/pdfmake/adapters/chart-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["// ...\n\nimport {\n PdfMakeConverterContext,\n ContentChartExtension,\n ElementWithChartExtension,\n} from \"../pdfmake.types\";\n\nimport { SmeupDataStructureType } from \"../../../../types/data-structures/smeupDataStructure\";\nimport { SmeupDataTable } from \"../../../../types/data-structures/smeupDataTable\";\nimport { ChartOptions } from \"../../../images/charts-converter-types\";\nimport { dataTableToChart } from \"../../../images/charts-converter\";\n\nconst hasChartWithData = (\n element: unknown,\n): element is ElementWithChartExtension => {\n const chart = (element as Record<string, unknown>)\n ?.chart as ContentChartExtension;\n const data = chart?.smeup?.data as SmeupDataTable | undefined;\n return (\n data?.type === SmeupDataStructureType.SmeupDataTable &&\n Array.isArray(data?.rows) &&\n Array.isArray(data?.columns)\n );\n};\n\nconst hasChartWithFun = (\n element: unknown,\n): element is ElementWithChartExtension => {\n const chart = (element as Record<string, unknown>)\n ?.chart as ContentChartExtension;\n const fun = chart?.smeup?.fun;\n return typeof fun === \"string\" && fun.length > 0;\n};\n\n/**\n * Adapts a Smeup chart structure to the PDFMake SVG format.\n *\n * This adapter function checks if the provided element contains a chart with data.\n * If so, it generates an SVG representation from the chart data and replaces the chart\n * object with an svg property. All properties of the original chart except `data` are preserved.\n *\n * @returns A function that takes an element and returns the adapted element for PDFMake,\n * or the original element if it does not contain a valid chart with data.\n */\nexport const smeupChartToPdfMakeSvgAdapter = () => {\n return async (\n element: unknown,\n _context: PdfMakeConverterContext,\n ): Promise<ElementWithChartExtension> => {\n if (!hasChartWithData(element)) {\n return element as ElementWithChartExtension;\n }\n\n const elementWithChart = element as ElementWithChartExtension;\n const options = elementWithChart.chart.smeup!.options as ChartOptions;\n\n const svg = await dataTableToChart(\n elementWithChart.chart.smeup!.data!,\n options,\n );\n\n const width = options.ForceWidth ? Number(options.ForceWidth) : undefined;\n const height = options.ForceHeight\n ? Number(options.ForceHeight)\n : undefined;\n\n return {\n ...elementWithChart,\n svg: svg,\n ...(width ? { width } : {}),\n ...(height ? { height } : {}),\n } as ElementWithChartExtension;\n };\n};\n\n/**\n * Adapter function for converting a chart element with a `fun` property to a Smeup chart structure.\n *\n * This function returns an asynchronous converter that checks if the provided element contains\n * a chart with a `fun` property. If present, it uses the `getSmeupDataStructure` function from\n * the context to fetch the chart data corresponding to the `fun` string, and replaces the original\n * chart's `fun` property with the fetched data under the `data` property. All other properties\n * of the chart are preserved.\n *\n * @returns An asynchronous function that takes an element and a context, and returns the adapted element.\n *\n * @throws If the context does not provide a `getSmeupDataStructure` function when the `fun` property is used.\n *\n * @param element - The input element to be adapted.\n * @param context - The conversion context, which must provide `getSmeupDataStructure` if the `fun` property is present.\n */\nexport const funToSmeupChartAdapter = () => {\n return async (\n element: unknown,\n context: PdfMakeConverterContext,\n ): Promise<ElementWithChartExtension> => {\n if (!hasChartWithFun(element)) {\n return element as ElementWithChartExtension;\n } else {\n if (!context.getSmeupDataStructure) {\n throw new Error(\n \"getSmeupDataStructure function is required in context when the fun property is used\",\n );\n } else {\n const elementWithChart = element as ElementWithChartExtension;\n const funStr = elementWithChart.chart.smeup!.fun!;\n const chartData = (await context.getSmeupDataStructure(\n funStr,\n )) as SmeupDataTable;\n\n // Extract all properties except 'fun' from the smeup object\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { fun, ...smeupRest } = elementWithChart.chart.smeup!;\n // Extract all properties except 'smeup' from the chart object\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { smeup, ...chartRest } = elementWithChart.chart;\n\n return {\n ...elementWithChart,\n chart: {\n ...chartRest,\n smeup: {\n ...smeupRest,\n data: chartData,\n },\n },\n };\n }\n }\n };\n};\n\n/**\n * Main chart adapter that chains all chart transformation adapters.\n *\n * This adapter first converts a `fun` property to chart data using funToSmeupChartAdapter,\n * then transforms the chart data to an SVG format using smeupChartToPdfMakeSvgAdapter.\n *\n * @returns An asynchronous function that applies all chart adapters in sequence.\n */\nexport const chartAdapter = () => {\n return async (\n element: unknown,\n context: PdfMakeConverterContext,\n ): Promise<ElementWithChartExtension> => {\n const adaptedElement = await funToSmeupChartAdapter()(element, context);\n return (await smeupChartToPdfMakeSvgAdapter()(\n adaptedElement,\n context,\n )) as ElementWithChartExtension;\n };\n};\n"]}
1
+ {"version":3,"file":"chart-adapter.js","sourceRoot":"","sources":["../../../../../src/converters/pdf/pdfmake/adapters/chart-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["// ...\n\nimport {\n PdfMakeConverterContext,\n ContentChartExtension,\n ElementWithChartExtension,\n} from \"../pdfmake.types\";\n\nimport { SmeupDataStructureType } from \"../../../../types/data-structures/smeupDataStructure\";\nimport { SmeupDataTable } from \"../../../../types/data-structures/smeupDataTable\";\nimport { ChartOptions } from \"../../../images/charts-converter-types\";\nimport { dataTableToChart } from \"../../../images/charts-converter\";\n\nconst hasChartWithData = (\n element: unknown,\n): element is ElementWithChartExtension => {\n const chart = (element as Record<string, unknown>)\n ?.chart as ContentChartExtension;\n const data = chart?.smeup?.data as SmeupDataTable | undefined;\n return (\n data?.type === SmeupDataStructureType.SmeupDataTable &&\n Array.isArray(data?.rows) &&\n Array.isArray(data?.columns)\n );\n};\n\nconst hasChartWithFun = (\n element: unknown,\n): element is ElementWithChartExtension => {\n const chart = (element as Record<string, unknown>)\n ?.chart as ContentChartExtension;\n const fun = chart?.smeup?.fun;\n return typeof fun === \"string\" && fun.length > 0;\n};\n\n/**\n * Adapts a Smeup chart structure to the PDFMake SVG format.\n *\n * This adapter function checks if the provided element contains a chart with data.\n * If so, it generates an SVG representation from the chart data and replaces the chart\n * object with an svg property. All properties of the original chart except `data` are preserved.\n *\n * @returns A function that takes an element and returns the adapted element for PDFMake,\n * or the original element if it does not contain a valid chart with data.\n */\nexport const smeupChartToPdfMakeSvgAdapter = () => {\n return async (\n element: unknown,\n _context: PdfMakeConverterContext,\n ): Promise<ElementWithChartExtension> => {\n if (!hasChartWithData(element)) {\n return element as ElementWithChartExtension;\n }\n\n const elementWithChart = element as ElementWithChartExtension;\n const options = elementWithChart.chart.smeup!.options as ChartOptions;\n\n let mergedOptions;\n\n const svg = await dataTableToChart(\n elementWithChart.chart.smeup!.data!,\n options,\n (merged: ChartOptions) => {\n mergedOptions = merged;\n },\n );\n\n const width = mergedOptions!.ForceWidth;\n const height = mergedOptions!.ForceHeight;\n\n return {\n ...elementWithChart,\n svg: svg,\n ...width,\n ...height,\n } as ElementWithChartExtension;\n };\n};\n\n/**\n * Adapter function for converting a chart element with a `fun` property to a Smeup chart structure.\n *\n * This function returns an asynchronous converter that checks if the provided element contains\n * a chart with a `fun` property. If present, it uses the `getSmeupDataStructure` function from\n * the context to fetch the chart data corresponding to the `fun` string, and replaces the original\n * chart's `fun` property with the fetched data under the `data` property. All other properties\n * of the chart are preserved.\n *\n * @returns An asynchronous function that takes an element and a context, and returns the adapted element.\n *\n * @throws If the context does not provide a `getSmeupDataStructure` function when the `fun` property is used.\n *\n * @param element - The input element to be adapted.\n * @param context - The conversion context, which must provide `getSmeupDataStructure` if the `fun` property is present.\n */\nexport const funToSmeupChartAdapter = () => {\n return async (\n element: unknown,\n context: PdfMakeConverterContext,\n ): Promise<ElementWithChartExtension> => {\n if (!hasChartWithFun(element)) {\n return element as ElementWithChartExtension;\n } else {\n if (!context.getSmeupDataStructure) {\n throw new Error(\n \"getSmeupDataStructure function is required in context when the fun property is used\",\n );\n } else {\n const elementWithChart = element as ElementWithChartExtension;\n const funStr = elementWithChart.chart.smeup!.fun!;\n const chartData = (await context.getSmeupDataStructure(\n funStr,\n )) as SmeupDataTable;\n\n // Extract all properties except 'fun' from the smeup object\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { fun, ...smeupRest } = elementWithChart.chart.smeup!;\n // Extract all properties except 'smeup' from the chart object\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { smeup, ...chartRest } = elementWithChart.chart;\n\n return {\n ...elementWithChart,\n chart: {\n ...chartRest,\n smeup: {\n ...smeupRest,\n data: chartData,\n },\n },\n };\n }\n }\n };\n};\n\n/**\n * Main chart adapter that chains all chart transformation adapters.\n *\n * This adapter first converts a `fun` property to chart data using funToSmeupChartAdapter,\n * then transforms the chart data to an SVG format using smeupChartToPdfMakeSvgAdapter.\n *\n * @returns An asynchronous function that applies all chart adapters in sequence.\n */\nexport const chartAdapter = () => {\n return async (\n element: unknown,\n context: PdfMakeConverterContext,\n ): Promise<ElementWithChartExtension> => {\n const adaptedElement = await funToSmeupChartAdapter()(element, context);\n return (await smeupChartToPdfMakeSvgAdapter()(\n adaptedElement,\n context,\n )) as ElementWithChartExtension;\n };\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sme.up/doc-alchemist",
3
- "version": "1.7.0-SNAPSHOT-20251218135616",
3
+ "version": "1.7.0-SNAPSHOT-20251218155723",
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/)",