abstract-image 13.0.61 → 13.1.0
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/CHANGELOG.md +4 -0
- package/README.md +1 -6
- package/lib/__stories__/react-svg-export/example-1.stories.d.ts +2 -2
- package/lib/__stories__/react-svg-export/example-1.stories.d.ts.map +1 -1
- package/lib/__stories__/react-svg-export/example-1.stories.js.map +1 -1
- package/lib/__stories__/svg-export/example-1.stories.d.ts +2 -2
- package/lib/__stories__/svg-export/example-1.stories.d.ts.map +1 -1
- package/lib/__stories__/svg-export/example-1.stories.js.map +1 -1
- package/lib/abstract-image-jsx/index.d.ts +2 -3
- package/lib/abstract-image-jsx/index.d.ts.map +1 -1
- package/lib/abstract-image-jsx/index.js +11 -8
- package/lib/abstract-image-jsx/index.js.map +1 -1
- package/lib/dynamic-image/components.d.ts +1 -1
- package/lib/dynamic-image/components.d.ts.map +1 -1
- package/lib/dynamic-image/components.js +3 -4
- package/lib/dynamic-image/components.js.map +1 -1
- package/lib/dynamic-image/dynamic-image.d.ts.map +1 -1
- package/lib/dynamic-image/dynamic-image.js +2 -4
- package/lib/dynamic-image/dynamic-image.js.map +1 -1
- package/lib/dynamic-image/utils.d.ts +2 -1
- package/lib/dynamic-image/utils.d.ts.map +1 -1
- package/lib/dynamic-image/utils.js.map +1 -1
- package/lib/exporters/dxf2d-export-image.d.ts +3 -2
- package/lib/exporters/dxf2d-export-image.d.ts.map +1 -1
- package/lib/exporters/dxf2d-export-image.js +13 -23
- package/lib/exporters/dxf2d-export-image.js.map +1 -1
- package/lib/exporters/eps-export-image.d.ts +1 -2
- package/lib/exporters/eps-export-image.d.ts.map +1 -1
- package/lib/exporters/eps-export-image.js +5 -16
- package/lib/exporters/eps-export-image.js.map +1 -1
- package/lib/exporters/react-svg-export-image.d.ts.map +1 -1
- package/lib/exporters/react-svg-export-image.js +10 -10
- package/lib/exporters/react-svg-export-image.js.map +1 -1
- package/lib/exporters/svg-export-image.d.ts.map +1 -1
- package/lib/exporters/svg-export-image.js +7 -5
- package/lib/exporters/svg-export-image.js.map +1 -1
- package/lib/model/abstract-image.d.ts +1 -1
- package/lib/model/abstract-image.d.ts.map +1 -1
- package/lib/model/abstract-image.js.map +1 -1
- package/lib/model/color.d.ts.map +1 -1
- package/lib/model/color.js +3 -5
- package/lib/model/color.js.map +1 -1
- package/lib/model/component.d.ts +3 -5
- package/lib/model/component.d.ts.map +1 -1
- package/lib/model/component.js +1 -1
- package/lib/model/component.js.map +1 -1
- package/package.json +17 -17
- package/src/__stories__/react-svg-export/example-1.stories.tsx +4 -14
- package/src/__stories__/svg-export/example-1.stories.tsx +4 -15
- package/src/abstract-image-jsx/index.ts +27 -32
- package/src/dynamic-image/components.ts +6 -19
- package/src/dynamic-image/dynamic-image.ts +6 -23
- package/src/dynamic-image/utils.ts +7 -5
- package/src/exporters/dxf2d-export-image.ts +22 -65
- package/src/exporters/eps-export-image.ts +8 -18
- package/src/exporters/react-svg-export-image.tsx +24 -49
- package/src/exporters/svg-export-image.ts +10 -15
- package/src/model/abstract-image.ts +2 -7
- package/src/model/color.ts +4 -13
- package/src/model/component.ts +5 -13
package/lib/model/color.js
CHANGED
|
@@ -2,19 +2,17 @@ export function fromArgb(a, r, g, b) {
|
|
|
2
2
|
return { a: a, r: r, g: g, b: b };
|
|
3
3
|
}
|
|
4
4
|
export function toString6Hex(color) {
|
|
5
|
-
return (
|
|
6
|
-
("00" + color.g.toString(16)).substr(-2) +
|
|
7
|
-
("00" + color.b.toString(16)).substr(-2));
|
|
5
|
+
return ("00" + color.r.toString(16)).substr(-2) + ("00" + color.g.toString(16)).substr(-2) + ("00" + color.b.toString(16)).substr(-2);
|
|
8
6
|
}
|
|
9
7
|
export function fromString(s) {
|
|
10
|
-
if (s
|
|
8
|
+
if (s?.length !== 9 || !s.startsWith("#")) {
|
|
11
9
|
return undefined;
|
|
12
10
|
}
|
|
13
11
|
const a = parseInt(s.substring(1, 1 + 2), 16);
|
|
14
12
|
const r = parseInt(s.substring(3, 3 + 2), 16);
|
|
15
13
|
const g = parseInt(s.substring(5, 5 + 2), 16);
|
|
16
14
|
const b = parseInt(s.substring(7, 7 + 2), 16);
|
|
17
|
-
if (isNaN(a) || isNaN(r) || isNaN(g) || isNaN(b)) {
|
|
15
|
+
if (Number.isNaN(a) || Number.isNaN(r) || Number.isNaN(g) || Number.isNaN(b)) {
|
|
18
16
|
return undefined;
|
|
19
17
|
}
|
|
20
18
|
return fromArgb(a, r, g, b);
|
package/lib/model/color.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color.js","sourceRoot":"","sources":["../../src/model/color.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;IACjE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAY;IACvC,OAAO,
|
|
1
|
+
{"version":3,"file":"color.js","sourceRoot":"","sources":["../../src/model/color.ts"],"names":[],"mappings":"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"}
|
package/lib/model/component.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { AbstractImage } from "./abstract-image.js";
|
|
2
2
|
import type { Color } from "./color.js";
|
|
3
3
|
import type { DashStyle } from "./dash-style.js";
|
|
4
|
-
import type {
|
|
4
|
+
import type { Point } from "./point.js";
|
|
5
5
|
import type { Size } from "./size.js";
|
|
6
6
|
export type Component = BinaryImage | Ellipse | Line | PolyLine | Polygon | Rectangle | Text | SubImage | Group;
|
|
7
7
|
export interface Group {
|
|
@@ -10,9 +10,7 @@ export interface Group {
|
|
|
10
10
|
readonly children: Array<Component>;
|
|
11
11
|
}
|
|
12
12
|
export declare function createGroup(name: string, children: Array<Component>): Group;
|
|
13
|
-
/**
|
|
14
|
-
* Embed a foreign binary image in any suported format.
|
|
15
|
-
*/
|
|
13
|
+
/** Embed a foreign binary image in any suported format. */
|
|
16
14
|
export type BinaryFormat = "svg" | "png" | "dxf";
|
|
17
15
|
export interface BinaryImage {
|
|
18
16
|
readonly type: "binaryimage";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../src/model/component.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../src/model/component.ts"],"names":[],"mappings":"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"}
|
package/lib/model/component.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sourceRoot":"","sources":["../../src/model/component.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"component.js","sourceRoot":"","sources":["../../src/model/component.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,17 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "abstract-image",
|
|
3
|
-
"version": "13.0
|
|
3
|
+
"version": "13.1.0",
|
|
4
|
+
"gitHead": "17921b59da5eee6cc446fd37a2134165af4d1901",
|
|
4
5
|
"description": "Dynamically create images using code or JSX and render to any format",
|
|
5
|
-
"repository": "https://github.com/dividab/abstract-visuals/tree/master/packages/abstract-image",
|
|
6
|
-
"main": "lib/index.js",
|
|
7
|
-
"types": "lib/index",
|
|
8
|
-
"sideEffects": false,
|
|
9
|
-
"type": "module",
|
|
10
6
|
"license": "MIT",
|
|
11
|
-
"
|
|
12
|
-
".": "./lib/index.js",
|
|
13
|
-
"./dynamic-image": "./lib/dynamic-image/index.js"
|
|
14
|
-
},
|
|
7
|
+
"repository": "https://github.com/dividab/abstract-visuals/tree/master/packages/abstract-image",
|
|
15
8
|
"files": [
|
|
16
9
|
"/lib",
|
|
17
10
|
"/src",
|
|
@@ -21,15 +14,20 @@
|
|
|
21
14
|
"README.md",
|
|
22
15
|
"!/**/__tests__"
|
|
23
16
|
],
|
|
17
|
+
"type": "module",
|
|
18
|
+
"sideEffects": false,
|
|
19
|
+
"main": "lib/index.js",
|
|
20
|
+
"types": "lib/index",
|
|
21
|
+
"exports": {
|
|
22
|
+
".": "./lib/index.js",
|
|
23
|
+
"./dynamic-image": "./lib/dynamic-image/index.js"
|
|
24
|
+
},
|
|
24
25
|
"dependencies": {
|
|
25
26
|
"base64-js": "^1.5.1",
|
|
26
27
|
"fast-xml-parser": "^4.5.0",
|
|
27
28
|
"handlebars": "4.7.8",
|
|
28
|
-
"handlebars-xml": "^0.
|
|
29
|
-
"jsxpression": "^0.
|
|
30
|
-
},
|
|
31
|
-
"peerDependencies": {
|
|
32
|
-
"react": ">=17.0.0 <20.0.0"
|
|
29
|
+
"handlebars-xml": "^0.5.0",
|
|
30
|
+
"jsxpression": "^0.2.0"
|
|
33
31
|
},
|
|
34
32
|
"devDependencies": {
|
|
35
33
|
"@types/base64-js": "^1.3.2",
|
|
@@ -38,5 +36,7 @@
|
|
|
38
36
|
"vite": "^6.0.1",
|
|
39
37
|
"vitest": "^2.1.6"
|
|
40
38
|
},
|
|
41
|
-
"
|
|
42
|
-
|
|
39
|
+
"peerDependencies": {
|
|
40
|
+
"react": ">=17.0.0 <20.0.0"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -1,21 +1,11 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
1
|
import type { Meta } from "@storybook/react";
|
|
2
|
+
import * as React from "react";
|
|
3
3
|
import * as AbstractImage from "../../index.js";
|
|
4
4
|
|
|
5
|
-
export function ReactSvgExportExample1(): React.ReactElement<
|
|
5
|
+
export function ReactSvgExportExample1(): React.ReactElement<object> {
|
|
6
6
|
const components = [
|
|
7
|
-
AbstractImage.createLine(
|
|
8
|
-
|
|
9
|
-
AbstractImage.createPoint(400, 200),
|
|
10
|
-
AbstractImage.black,
|
|
11
|
-
1
|
|
12
|
-
),
|
|
13
|
-
AbstractImage.createLine(
|
|
14
|
-
AbstractImage.createPoint(200, 0),
|
|
15
|
-
AbstractImage.createPoint(200, 400),
|
|
16
|
-
AbstractImage.black,
|
|
17
|
-
1
|
|
18
|
-
),
|
|
7
|
+
AbstractImage.createLine(AbstractImage.createPoint(0, 200), AbstractImage.createPoint(400, 200), AbstractImage.black, 1),
|
|
8
|
+
AbstractImage.createLine(AbstractImage.createPoint(200, 0), AbstractImage.createPoint(200, 400), AbstractImage.black, 1),
|
|
19
9
|
AbstractImage.createText(
|
|
20
10
|
AbstractImage.createPoint(200, 200),
|
|
21
11
|
"Testing texting",
|
|
@@ -1,22 +1,11 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
1
|
import type { Meta } from "@storybook/react";
|
|
2
|
+
import * as React from "react";
|
|
3
3
|
import * as AbstractImage from "../../index.js";
|
|
4
4
|
|
|
5
|
-
export function SvgExportExample1(): React.ReactElement<
|
|
5
|
+
export function SvgExportExample1(): React.ReactElement<object> {
|
|
6
6
|
const components = [
|
|
7
|
-
AbstractImage.createLine(
|
|
8
|
-
|
|
9
|
-
AbstractImage.createPoint(80, 60),
|
|
10
|
-
AbstractImage.black,
|
|
11
|
-
2
|
|
12
|
-
),
|
|
13
|
-
AbstractImage.createRectangle(
|
|
14
|
-
AbstractImage.createPoint(10, 50),
|
|
15
|
-
AbstractImage.createPoint(40, 80),
|
|
16
|
-
AbstractImage.blue,
|
|
17
|
-
2,
|
|
18
|
-
AbstractImage.red
|
|
19
|
-
),
|
|
7
|
+
AbstractImage.createLine(AbstractImage.createPoint(25, 25), AbstractImage.createPoint(80, 60), AbstractImage.black, 2),
|
|
8
|
+
AbstractImage.createRectangle(AbstractImage.createPoint(10, 50), AbstractImage.createPoint(40, 80), AbstractImage.blue, 2, AbstractImage.red),
|
|
20
9
|
];
|
|
21
10
|
const image = AbstractImage.createAbstractImage(
|
|
22
11
|
AbstractImage.createPoint(0, 0),
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type React from "react";
|
|
2
|
-
|
|
3
2
|
import type {
|
|
4
3
|
Group as GroupComponent,
|
|
5
4
|
BinaryImage as BinaryImageComponent,
|
|
@@ -27,34 +26,19 @@ export interface ChildrenProp {
|
|
|
27
26
|
readonly children?: Child;
|
|
28
27
|
}
|
|
29
28
|
export type Child = React.JSX.Element | Children;
|
|
30
|
-
export
|
|
29
|
+
export type Children = ReadonlyArray<Child>;
|
|
31
30
|
|
|
32
31
|
export const Group = (props: GroupComponent): GroupComponent => createGroup(props.name, props.children);
|
|
33
32
|
export const BinaryImage = (props: BinaryImageComponent): BinaryImageComponent =>
|
|
34
33
|
createBinaryImage(props.topLeft, props.bottomRight, props.format, props.data, props.id);
|
|
35
34
|
export const Ellipse = (props: EllipseComponent): EllipseComponent =>
|
|
36
|
-
createEllipse(
|
|
37
|
-
props.topLeft,
|
|
38
|
-
props.bottomRight,
|
|
39
|
-
props.strokeColor,
|
|
40
|
-
props.strokeThickness,
|
|
41
|
-
props.fillColor,
|
|
42
|
-
props.id,
|
|
43
|
-
props.strokeDashStyle
|
|
44
|
-
);
|
|
35
|
+
createEllipse(props.topLeft, props.bottomRight, props.strokeColor, props.strokeThickness, props.fillColor, props.id, props.strokeDashStyle);
|
|
45
36
|
export const Line = (props: LineComponent): LineComponent =>
|
|
46
37
|
createLine(props.start, props.end, props.strokeColor, props.strokeThickness, props.id, props.strokeDashStyle);
|
|
47
38
|
export const PolyLine = (props: PolyLineComponent): PolyLineComponent =>
|
|
48
39
|
createPolyLine(props.points, props.strokeColor, props.strokeThickness, props.id, props.strokeDashStyle);
|
|
49
40
|
export const Polygon = (props: PolygonComponent): PolygonComponent =>
|
|
50
|
-
createPolygon(
|
|
51
|
-
props.points,
|
|
52
|
-
props.strokeColor,
|
|
53
|
-
props.strokeThickness,
|
|
54
|
-
props.fillColor,
|
|
55
|
-
props.id,
|
|
56
|
-
props.strokeDashStyle
|
|
57
|
-
);
|
|
41
|
+
createPolygon(props.points, props.strokeColor, props.strokeThickness, props.fillColor, props.id, props.strokeDashStyle);
|
|
58
42
|
export const Rectangle = (props: RectangleComponent): RectangleComponent =>
|
|
59
43
|
createRectangle(
|
|
60
44
|
props.topLeft,
|
|
@@ -83,29 +67,40 @@ export const Text = (props: TextComponent): TextComponent =>
|
|
|
83
67
|
props.italic,
|
|
84
68
|
props.id
|
|
85
69
|
);
|
|
86
|
-
export const SubImage = (props: SubImageComponent): SubImageComponent =>
|
|
87
|
-
|
|
70
|
+
export const SubImage = (props: SubImageComponent): SubImageComponent => createSubImage(props.topLeft, props.size, props.image);
|
|
71
|
+
|
|
72
|
+
// Shape actually accessed when walking the fake element tree at runtime; `type`'s props param and
|
|
73
|
+
// `props` itself are a genuinely arbitrary bag of component props, not a fixed structural type.
|
|
74
|
+
interface FakeElement {
|
|
75
|
+
readonly type: string | ((props: Record<string, unknown>) => unknown);
|
|
76
|
+
readonly props?: { readonly type?: unknown; readonly children?: unknown; readonly [key: string]: unknown };
|
|
77
|
+
}
|
|
88
78
|
|
|
89
|
-
export function render(element:
|
|
90
|
-
|
|
91
|
-
|
|
79
|
+
export function render(element: unknown): unknown {
|
|
80
|
+
const el = element as FakeElement;
|
|
81
|
+
if (typeof el.type !== "function") {
|
|
82
|
+
return el;
|
|
92
83
|
}
|
|
93
|
-
const props =
|
|
94
|
-
const children = renderChildren(
|
|
95
|
-
return
|
|
84
|
+
const props = el.props ?? {};
|
|
85
|
+
const children = renderChildren(el);
|
|
86
|
+
return el.type({ ...props, children });
|
|
96
87
|
}
|
|
97
88
|
|
|
98
|
-
function renderChildren(element:
|
|
99
|
-
if (!element.props
|
|
89
|
+
function renderChildren(element: FakeElement): Array<unknown> {
|
|
90
|
+
if (!element.props?.children) {
|
|
100
91
|
return [];
|
|
101
92
|
}
|
|
102
93
|
|
|
103
94
|
if (element.props.type === "group") {
|
|
104
95
|
const children = element.props.children;
|
|
105
96
|
if (Array.isArray(children)) {
|
|
106
|
-
return children.flatMap((c:
|
|
107
|
-
if (!c)
|
|
108
|
-
|
|
97
|
+
return children.flatMap((c: unknown) => {
|
|
98
|
+
if (!c) {
|
|
99
|
+
return [];
|
|
100
|
+
}
|
|
101
|
+
if (Array.isArray(c)) {
|
|
102
|
+
return c.map(render);
|
|
103
|
+
}
|
|
109
104
|
return render(c);
|
|
110
105
|
});
|
|
111
106
|
} else {
|
|
@@ -27,7 +27,8 @@ import {
|
|
|
27
27
|
white,
|
|
28
28
|
} from "../model/index.js";
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
// oxlint-disable-next-line typescript/no-explicit-any -- component functions receive arbitrary JSX-like template props (jsxpression's own Component type is likewise untyped); typing props precisely would require rewriting every component body
|
|
31
|
+
export const createComponents = (mutableImageUrls: Array<string>): Record<string, (...args: Array<any>) => any> => ({
|
|
31
32
|
AbstractImage: (props): AbstractImage => ({
|
|
32
33
|
topLeft: { x: 0, y: 0 },
|
|
33
34
|
size: { width: props.width ?? 800, height: props.height ?? 600 },
|
|
@@ -45,13 +46,7 @@ export const createComponents = (mutableImageUrls: Array<string>): Record<string
|
|
|
45
46
|
const y = props.y ?? 0;
|
|
46
47
|
const width = props.width ?? 100;
|
|
47
48
|
const height = props.height ?? 100;
|
|
48
|
-
return createBinaryImage(
|
|
49
|
-
{ x, y },
|
|
50
|
-
{ x: x + width, y: y + height },
|
|
51
|
-
"png",
|
|
52
|
-
{ type: "url", url: props.src },
|
|
53
|
-
undefined
|
|
54
|
-
);
|
|
49
|
+
return createBinaryImage({ x, y }, { x: x + width, y: y + height }, "png", { type: "url", url: props.src }, undefined);
|
|
55
50
|
},
|
|
56
51
|
Rectangle: (props): Rectangle => {
|
|
57
52
|
const x = props.x ?? 0;
|
|
@@ -95,13 +90,7 @@ export const createComponents = (mutableImageUrls: Array<string>): Record<string
|
|
|
95
90
|
);
|
|
96
91
|
},
|
|
97
92
|
Polyline: (props): PolyLine => {
|
|
98
|
-
return createPolyLine(
|
|
99
|
-
parsePointsString(props.points),
|
|
100
|
-
fromString2(props.stroke ?? "#000", black),
|
|
101
|
-
props.strokeWidth ?? 1,
|
|
102
|
-
undefined,
|
|
103
|
-
solidLine
|
|
104
|
-
);
|
|
93
|
+
return createPolyLine(parsePointsString(props.points), fromString2(props.stroke ?? "#000", black), props.strokeWidth ?? 1, undefined, solidLine);
|
|
105
94
|
},
|
|
106
95
|
Polygon: (props): Polygon => {
|
|
107
96
|
return createPolygon(
|
|
@@ -116,9 +105,7 @@ export const createComponents = (mutableImageUrls: Array<string>): Record<string
|
|
|
116
105
|
Text: (props): Text => {
|
|
117
106
|
const fontWeight = mapFontWeight(props.fontWeight);
|
|
118
107
|
const children = props.children ?? [];
|
|
119
|
-
const filteredChildren = Array.isArray(children)
|
|
120
|
-
? children.flat().filter((c: any) => c !== null && c !== undefined)
|
|
121
|
-
: [];
|
|
108
|
+
const filteredChildren = Array.isArray(children) ? children.flat().filter((c) => c !== null && c !== undefined) : [];
|
|
122
109
|
const text = filteredChildren.length > 0 ? String(filteredChildren[0]) : "";
|
|
123
110
|
return createText(
|
|
124
111
|
{ x: props.x ?? 0, y: props.y ?? 0 },
|
|
@@ -162,6 +149,6 @@ function mapFontWeight(weight?: string | number): AbstractFontWeight {
|
|
|
162
149
|
function parsePointsString(pointsString: string): Array<Point> {
|
|
163
150
|
return pointsString.split(" ").map((tuple): Point => {
|
|
164
151
|
const [xString, yString] = tuple.split(",");
|
|
165
|
-
return { x: Number(xString
|
|
152
|
+
return { x: Number(xString), y: Number(yString) };
|
|
166
153
|
});
|
|
167
154
|
}
|
|
@@ -1,12 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
AnalysisError,
|
|
3
|
-
evaluate,
|
|
4
|
-
compile,
|
|
5
|
-
render,
|
|
6
|
-
type FunctionSchema,
|
|
7
|
-
type PropertySchema,
|
|
8
|
-
type Schema,
|
|
9
|
-
} from "jsxpression";
|
|
1
|
+
import { AnalysisError, evaluate, compile, render, type FunctionSchema, type PropertySchema, type Schema } from "jsxpression";
|
|
10
2
|
import type { AbstractImage } from "../model/abstract-image.js";
|
|
11
3
|
import { createComponents } from "./components.js";
|
|
12
4
|
import { baseSchema } from "./schema.js";
|
|
@@ -34,7 +26,7 @@ export function dynamicImage(
|
|
|
34
26
|
funcSchema?: Record<string, FunctionSchema>
|
|
35
27
|
): DynamicImageResult {
|
|
36
28
|
try {
|
|
37
|
-
const imageUrls: string
|
|
29
|
+
const imageUrls: Array<string> = [];
|
|
38
30
|
const schema: Schema = dataSchema ? { ...baseSchema, data: dataSchema, functions: funcSchema } : baseSchema;
|
|
39
31
|
|
|
40
32
|
const image = render<AbstractImage>(source, schema, {
|
|
@@ -56,9 +48,7 @@ export function dynamicImage(
|
|
|
56
48
|
}
|
|
57
49
|
}
|
|
58
50
|
|
|
59
|
-
export type CompileDynamicImageResult =
|
|
60
|
-
| { readonly type: "Ok"; value: string }
|
|
61
|
-
| { readonly type: "Err"; readonly error: DynamicImageError };
|
|
51
|
+
export type CompileDynamicImageResult = { readonly type: "Ok"; value: string } | { readonly type: "Err"; readonly error: DynamicImageError };
|
|
62
52
|
|
|
63
53
|
export function compileDynamicImage(
|
|
64
54
|
source: string,
|
|
@@ -76,22 +66,15 @@ export function compileDynamicImage(
|
|
|
76
66
|
error: {
|
|
77
67
|
type: "RENDER_ERROR",
|
|
78
68
|
message: error instanceof Error ? error.message : String(error),
|
|
79
|
-
issues:
|
|
80
|
-
error instanceof AnalysisError
|
|
81
|
-
? error.report.issues.map((i) => ({ code: i.code, message: i.message }))
|
|
82
|
-
: undefined,
|
|
69
|
+
issues: error instanceof AnalysisError ? error.report.issues.map((i) => ({ code: i.code, message: i.message })) : undefined,
|
|
83
70
|
cause: error,
|
|
84
71
|
},
|
|
85
72
|
};
|
|
86
73
|
}
|
|
87
74
|
}
|
|
88
75
|
|
|
89
|
-
export function renderDynamicImage(
|
|
90
|
-
|
|
91
|
-
data: Record<string, unknown>,
|
|
92
|
-
functions?: Record<string, Function>
|
|
93
|
-
): DynamicImageResult {
|
|
94
|
-
const imageUrls: string[] = [];
|
|
76
|
+
export function renderDynamicImage(jsString: string, data: Record<string, unknown>, functions?: Record<string, Function>): DynamicImageResult {
|
|
77
|
+
const imageUrls: Array<string> = [];
|
|
95
78
|
try {
|
|
96
79
|
return {
|
|
97
80
|
type: "Ok",
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import type { PropertySchema } from "jsxpression";
|
|
2
|
+
|
|
3
|
+
export function generateDataSchema(data: Record<string, unknown>): Record<string, PropertySchema> {
|
|
4
|
+
const schema: Record<string, PropertySchema> = {};
|
|
3
5
|
|
|
4
6
|
for (const [key, value] of Object.entries(data)) {
|
|
5
7
|
schema[key] = inferPropertySchema(value);
|
|
@@ -8,7 +10,7 @@ export function generateDataSchema(data: Record<string, unknown>): Record<string
|
|
|
8
10
|
return schema;
|
|
9
11
|
}
|
|
10
12
|
|
|
11
|
-
function inferPropertySchema(value: unknown):
|
|
13
|
+
function inferPropertySchema(value: unknown): PropertySchema {
|
|
12
14
|
if (value === null || value === undefined) {
|
|
13
15
|
return {
|
|
14
16
|
type: "string",
|
|
@@ -40,7 +42,7 @@ function inferPropertySchema(value: unknown): any {
|
|
|
40
42
|
}
|
|
41
43
|
|
|
42
44
|
if (Array.isArray(value)) {
|
|
43
|
-
const itemSchema = value.length > 0 ? inferPropertySchema(value[0]) : { type: "string" };
|
|
45
|
+
const itemSchema: PropertySchema = value.length > 0 ? inferPropertySchema(value[0]) : { type: "string" };
|
|
44
46
|
return {
|
|
45
47
|
type: "array",
|
|
46
48
|
shape: itemSchema,
|
|
@@ -48,7 +50,7 @@ function inferPropertySchema(value: unknown): any {
|
|
|
48
50
|
}
|
|
49
51
|
|
|
50
52
|
if (typeof value === "object") {
|
|
51
|
-
const shape: Record<string,
|
|
53
|
+
const shape: Record<string, PropertySchema> = {};
|
|
52
54
|
for (const [k, v] of Object.entries(value)) {
|
|
53
55
|
shape[k] = inferPropertySchema(v);
|
|
54
56
|
}
|