@nmmty/lazycanvas 0.2.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.
Files changed (53) hide show
  1. package/LICENSE +21 -0
  2. package/ReadMe.md +20 -0
  3. package/dist/helpers/Fonts.d.ts +7 -0
  4. package/dist/helpers/Fonts.js +32 -0
  5. package/dist/helpers/filters.d.ts +68 -0
  6. package/dist/helpers/filters.js +91 -0
  7. package/dist/index.d.ts +14 -0
  8. package/dist/index.js +39 -0
  9. package/dist/structures/LazyCanvas.d.ts +41 -0
  10. package/dist/structures/LazyCanvas.js +84 -0
  11. package/dist/structures/components/BaseLayer.d.ts +81 -0
  12. package/dist/structures/components/BaseLayer.js +157 -0
  13. package/dist/structures/components/Group.d.ts +50 -0
  14. package/dist/structures/components/Group.js +87 -0
  15. package/dist/structures/components/ImageLayer.d.ts +24 -0
  16. package/dist/structures/components/ImageLayer.js +106 -0
  17. package/dist/structures/components/MorphLayer.d.ts +39 -0
  18. package/dist/structures/components/MorphLayer.js +140 -0
  19. package/dist/structures/components/TextLayer.d.ts +69 -0
  20. package/dist/structures/components/TextLayer.js +225 -0
  21. package/dist/structures/helpers/Font.d.ts +35 -0
  22. package/dist/structures/helpers/Font.js +65 -0
  23. package/dist/structures/helpers/Gradient.d.ts +29 -0
  24. package/dist/structures/helpers/Gradient.js +72 -0
  25. package/dist/structures/helpers/Pattern.d.ts +24 -0
  26. package/dist/structures/helpers/Pattern.js +76 -0
  27. package/dist/structures/managers/FontsManager.d.ts +75 -0
  28. package/dist/structures/managers/FontsManager.js +150 -0
  29. package/dist/structures/managers/LayersManager.d.ts +71 -0
  30. package/dist/structures/managers/LayersManager.js +119 -0
  31. package/dist/structures/managers/RenderManager.d.ts +14 -0
  32. package/dist/structures/managers/RenderManager.js +44 -0
  33. package/dist/types/LazyCanvas.d.ts +16 -0
  34. package/dist/types/components/BaseLayer.d.ts +48 -0
  35. package/dist/types/components/Group.d.ts +6 -0
  36. package/dist/types/components/ImageLayer.d.ts +15 -0
  37. package/dist/types/components/MorphLayer.d.ts +14 -0
  38. package/dist/types/components/TextLayer.d.ts +26 -0
  39. package/dist/types/enum.d.ts +88 -0
  40. package/dist/types/enum.js +104 -0
  41. package/dist/types/helpers/Font.d.ts +12 -0
  42. package/dist/types/helpers/Gradient.d.ts +19 -0
  43. package/dist/types/helpers/Pattern.d.ts +7 -0
  44. package/dist/types/index.d.ts +13 -0
  45. package/dist/types/managers/FontsManager.d.ts +5 -0
  46. package/dist/types/managers/LayersManager.d.ts +6 -0
  47. package/dist/types/managers/RenderManager.d.ts +5 -0
  48. package/dist/types/types.d.ts +12 -0
  49. package/dist/utils/LazyUtil.d.ts +7 -0
  50. package/dist/utils/LazyUtil.js +27 -0
  51. package/dist/utils/utils.d.ts +39 -0
  52. package/dist/utils/utils.js +261 -0
  53. package/package.json +51 -0
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PatternType = exports.Centring = exports.SaveFormat = exports.Export = exports.LineJoin = exports.LineCap = exports.TextDirection = exports.TextBaseline = exports.TextAlign = exports.FontWeight = exports.GradientType = exports.LayerScaleType = exports.LayerType = void 0;
4
+ var LayerType;
5
+ (function (LayerType) {
6
+ LayerType["Base"] = "base";
7
+ LayerType["Arc"] = "arc";
8
+ LayerType["ArcTo"] = "arcTo";
9
+ LayerType["BezierCurve"] = "bezierCurve";
10
+ LayerType["Clip"] = "clip";
11
+ LayerType["Image"] = "image";
12
+ LayerType["Line"] = "line";
13
+ LayerType["Path"] = "path";
14
+ LayerType["QuadraticCurve"] = "quadraticCurve";
15
+ LayerType["Morph"] = "morph";
16
+ LayerType["Text"] = "text";
17
+ LayerType["Group"] = "group";
18
+ })(LayerType || (exports.LayerType = LayerType = {}));
19
+ var LayerScaleType;
20
+ (function (LayerScaleType) {
21
+ LayerScaleType["Pixel"] = "px";
22
+ LayerScaleType["Percent"] = "%";
23
+ LayerScaleType["Canvas"] = "canvas";
24
+ LayerScaleType["None"] = "none";
25
+ })(LayerScaleType || (exports.LayerScaleType = LayerScaleType = {}));
26
+ var GradientType;
27
+ (function (GradientType) {
28
+ GradientType["Linear"] = "linear";
29
+ GradientType["Radial"] = "radial";
30
+ GradientType["Conic"] = "conic";
31
+ })(GradientType || (exports.GradientType = GradientType = {}));
32
+ var FontWeight;
33
+ (function (FontWeight) {
34
+ FontWeight[FontWeight["Thin"] = 100] = "Thin";
35
+ FontWeight[FontWeight["ExtraLight"] = 200] = "ExtraLight";
36
+ FontWeight[FontWeight["Light"] = 300] = "Light";
37
+ FontWeight[FontWeight["Normal"] = 400] = "Normal";
38
+ FontWeight[FontWeight["Medium"] = 500] = "Medium";
39
+ FontWeight[FontWeight["SemiBold"] = 600] = "SemiBold";
40
+ FontWeight[FontWeight["Bold"] = 700] = "Bold";
41
+ FontWeight[FontWeight["ExtraBold"] = 800] = "ExtraBold";
42
+ FontWeight[FontWeight["Black"] = 900] = "Black";
43
+ FontWeight[FontWeight["ExtraBlack"] = 950] = "ExtraBlack";
44
+ })(FontWeight || (exports.FontWeight = FontWeight = {}));
45
+ var TextAlign;
46
+ (function (TextAlign) {
47
+ TextAlign["Left"] = "left";
48
+ TextAlign["Right"] = "right";
49
+ TextAlign["Center"] = "center";
50
+ TextAlign["Start"] = "start";
51
+ TextAlign["End"] = "end";
52
+ })(TextAlign || (exports.TextAlign = TextAlign = {}));
53
+ var TextBaseline;
54
+ (function (TextBaseline) {
55
+ TextBaseline["Top"] = "top";
56
+ TextBaseline["Hanging"] = "hanging";
57
+ TextBaseline["Middle"] = "middle";
58
+ TextBaseline["Alphabetic"] = "alphabetic";
59
+ TextBaseline["Ideographic"] = "ideographic";
60
+ TextBaseline["Bottom"] = "bottom";
61
+ })(TextBaseline || (exports.TextBaseline = TextBaseline = {}));
62
+ var TextDirection;
63
+ (function (TextDirection) {
64
+ TextDirection["LeftToRight"] = "ltr";
65
+ TextDirection["RightToLeft"] = "rtl";
66
+ TextDirection["Inherit"] = "inherit";
67
+ })(TextDirection || (exports.TextDirection = TextDirection = {}));
68
+ var LineCap;
69
+ (function (LineCap) {
70
+ LineCap["Butt"] = "butt";
71
+ LineCap["Round"] = "round";
72
+ LineCap["Square"] = "square";
73
+ })(LineCap || (exports.LineCap = LineCap = {}));
74
+ var LineJoin;
75
+ (function (LineJoin) {
76
+ LineJoin["Bevel"] = "bevel";
77
+ LineJoin["Round"] = "round";
78
+ LineJoin["Miter"] = "miter";
79
+ })(LineJoin || (exports.LineJoin = LineJoin = {}));
80
+ var Export;
81
+ (function (Export) {
82
+ Export["Buffer"] = "buffer";
83
+ Export["SVG"] = "svg";
84
+ Export["CTX"] = "ctx";
85
+ })(Export || (exports.Export = Export = {}));
86
+ var SaveFormat;
87
+ (function (SaveFormat) {
88
+ SaveFormat["PNG"] = "png";
89
+ SaveFormat["JPEG"] = "jpeg";
90
+ SaveFormat["JPG"] = "jpg";
91
+ SaveFormat["SVG"] = "svg";
92
+ })(SaveFormat || (exports.SaveFormat = SaveFormat = {}));
93
+ var Centring;
94
+ (function (Centring) {
95
+ Centring["Start"] = "start";
96
+ Centring["Center"] = "center";
97
+ })(Centring || (exports.Centring = Centring = {}));
98
+ var PatternType;
99
+ (function (PatternType) {
100
+ PatternType["Repeat"] = "repeat";
101
+ PatternType["RepeatX"] = "repeat-x";
102
+ PatternType["RepeatY"] = "repeat-y";
103
+ PatternType["NoRepeat"] = "no-repeat";
104
+ })(PatternType || (exports.PatternType = PatternType = {}));
@@ -0,0 +1,12 @@
1
+ import { FontWeight } from "../enum";
2
+
3
+ export interface IFont {
4
+ family: string;
5
+ weight: FontWeight;
6
+ path?: string;
7
+ base64?: Buffer;
8
+ }
9
+
10
+ export interface IFonts {
11
+ [family: string]: Record<number, Buffer>;
12
+ }
@@ -0,0 +1,19 @@
1
+ import { GradientType } from "../enum";
2
+
3
+ export interface IGradient {
4
+ type: GradientType;
5
+ points: Array<GradientPoint>;
6
+ stops: Array<GradientColorStop>;
7
+ }
8
+
9
+ export interface GradientColorStop {
10
+ color: string;
11
+ offset: number;
12
+ }
13
+
14
+ export interface GradientPoint {
15
+ x: number;
16
+ y: number;
17
+ r?: number;
18
+ startAngle?: number;
19
+ }
@@ -0,0 +1,7 @@
1
+ import { LazyCanvas } from '../../';
2
+ import { PatternType } from '../enum';
3
+
4
+ export interface IPattern {
5
+ type: PatternType;
6
+ src: string | LazyCanvas;
7
+ }
@@ -0,0 +1,13 @@
1
+ export * from "./types";
2
+ export * from "./components/BaseLayer";
3
+ export * from "./components/TextLayer";
4
+ export * from "./components/ImageLayer";
5
+ export * from "./components/MorphLayer";
6
+ export * from "./components/Group";
7
+ export * from "./helpers/Font";
8
+ export * from "./helpers/Gradient";
9
+ export * from "./helpers/Pattern";
10
+ export * from "./managers/LayersManager";
11
+ export * from "./managers/RenderManager";
12
+ export * from "./managers/FontsManager";
13
+ export * from "./LazyCanvas";
@@ -0,0 +1,5 @@
1
+ import { Font } from "../../structures/helpers/Font";
2
+
3
+ export interface IFontsManager {
4
+ map: Map<string, Font>;
5
+ }
@@ -0,0 +1,6 @@
1
+ import { AnyLayer } from "../";
2
+ import { Group } from "../../structures/components/Group";
3
+
4
+ export interface ILayersManager {
5
+ map: Map<string, AnyLayer | Group>;
6
+ }
@@ -0,0 +1,5 @@
1
+ import { LazyCanvas } from "../../structures/LazyCanvas";
2
+
3
+ export interface IRenderManager {
4
+ lazyCanvas: LazyCanvas;
5
+ }
@@ -0,0 +1,12 @@
1
+ import { Gradient } from "../structures/helpers/Gradient";
2
+ import { Pattern } from "../structures/helpers/Pattern";
3
+ import { MorphLayer } from "../structures/components/MorphLayer";
4
+ import { ImageLayer } from "../structures/components/ImageLayer";
5
+ import { TextLayer } from "../structures/components/TextLayer";
6
+ import { Group } from "../structures/components/Group";
7
+
8
+ export type ScaleType = string | number;
9
+
10
+ export type ColorType = string | Gradient | Pattern;
11
+
12
+ export type AnyLayer = MorphLayer | ImageLayer | TextLayer | Group;
@@ -0,0 +1,7 @@
1
+ export declare class LazyError extends Error {
2
+ message: string;
3
+ constructor(message: string);
4
+ }
5
+ export declare class LazyLog {
6
+ static log(message: string, type?: string): void;
7
+ }
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LazyLog = exports.LazyError = void 0;
4
+ class LazyError extends Error {
5
+ message;
6
+ constructor(message) {
7
+ super(message);
8
+ this.message = "[LazyCanvas] [ERROR] " + message;
9
+ }
10
+ }
11
+ exports.LazyError = LazyError;
12
+ class LazyLog {
13
+ static log(message, type = "info") {
14
+ switch (type) {
15
+ case "info":
16
+ console.log("[LazyCanvas] [INFO] " + message);
17
+ break;
18
+ case "warn":
19
+ console.warn("[LazyCanvas] [WARN] " + message);
20
+ break;
21
+ default:
22
+ console.log("[LazyCanvas] [INFO] " + message);
23
+ break;
24
+ }
25
+ }
26
+ }
27
+ exports.LazyLog = LazyLog;
@@ -0,0 +1,39 @@
1
+ import { Centring, LayerType, SaveFormat, TextAlign } from "../types/enum";
2
+ import { Transform, ScaleType, ColorType } from "../types";
3
+ import { Gradient } from "../structures/helpers/Gradient";
4
+ import { Canvas, SKRSContext2D } from "@napi-rs/canvas";
5
+ import { Pattern } from "../structures/helpers/Pattern";
6
+ export declare function generateID(type: string): string;
7
+ export declare function isColor(v: ColorType): "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function";
8
+ export declare function parseHex(v: string): string;
9
+ export declare function parseColor(v: ColorType): string | Pattern | Gradient;
10
+ export declare function parseToNormal(v: ScaleType, canvas: Canvas, layer?: {
11
+ width: number;
12
+ height: number;
13
+ }, options?: {
14
+ vertical?: boolean;
15
+ layer?: boolean;
16
+ }): number;
17
+ export declare function drawShadow(ctx: SKRSContext2D, shadow: any): void;
18
+ export declare function opacity(ctx: SKRSContext2D, opacity: number): void;
19
+ export declare function filters(ctx: SKRSContext2D, filters: string): void;
20
+ export declare function parseFillStyle(ctx: SKRSContext2D, color: ColorType): string | Promise<CanvasPattern> | CanvasGradient;
21
+ export declare function transform(ctx: SKRSContext2D, transform: Transform, layer?: {
22
+ width: number;
23
+ height: number;
24
+ x: number;
25
+ y: number;
26
+ type: LayerType;
27
+ }, extra?: {
28
+ text: string;
29
+ textAlign: TextAlign;
30
+ fontSize: number;
31
+ multiline: boolean;
32
+ }): void;
33
+ export declare function saveFile(buffer: any, extension: SaveFormat, name: string): Promise<void>;
34
+ export declare function generateRandomName(): string;
35
+ export declare function isImageUrlValid(src: string): boolean;
36
+ export declare function centring(centring: Centring, type: LayerType, width: number, height: number, x: number, y: number): {
37
+ x: number;
38
+ y: number;
39
+ };
@@ -0,0 +1,261 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.centring = exports.isImageUrlValid = exports.generateRandomName = exports.saveFile = exports.transform = exports.parseFillStyle = exports.filters = exports.opacity = exports.drawShadow = exports.parseToNormal = exports.parseColor = exports.parseHex = exports.isColor = exports.generateID = void 0;
27
+ const enum_1 = require("../types/enum");
28
+ const Gradient_1 = require("../structures/helpers/Gradient");
29
+ const LazyUtil_1 = require("./LazyUtil");
30
+ const fs = __importStar(require("fs"));
31
+ const jimp = __importStar(require("jimp"));
32
+ const Pattern_1 = require("../structures/helpers/Pattern");
33
+ function generateID(type) {
34
+ return `${type}-${Math.random().toString(36).substr(2, 9)}`;
35
+ }
36
+ exports.generateID = generateID;
37
+ let percentReg = /^(\d+)%$/;
38
+ let pxReg = /^(\d+)px$/;
39
+ let canvasReg = /^(vw|vh|vmin|vmax)$/;
40
+ let hexReg = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;
41
+ let rgbReg = /^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/;
42
+ let rgbaReg = /^rgba\((\d+),\s*(\d+),\s*(\d+),\s*(0|0?\.\d+|1(\.0)?)\)$/;
43
+ let hslReg = /^hsl\((\d+),\s*(\d+)%,\s*(\d+)%\)$/;
44
+ let hslaReg = /^hsla\((\d+),\s*(\d+)%,\s*(\d+)%,\s*(0|0?\.\d+|1(\.0)?)\)$/;
45
+ function isColor(v) {
46
+ return typeof (v === 'string' && (hexReg.test(v) || rgbReg.test(v) || rgbaReg.test(v) || hslReg.test(v) || hslaReg.test(v))) || v instanceof Gradient_1.Gradient || v instanceof Pattern_1.Pattern;
47
+ }
48
+ exports.isColor = isColor;
49
+ function tooShort(v) {
50
+ return v.length < 2 ? `0${v}` : v;
51
+ }
52
+ function parseHex(v) {
53
+ if (hexReg.test(v)) {
54
+ return v;
55
+ }
56
+ else if (rgbReg.test(v)) {
57
+ let match = v.match(rgbReg);
58
+ let r = parseInt(match[1]);
59
+ let g = parseInt(match[2]);
60
+ let b = parseInt(match[3]);
61
+ return `#${tooShort(r.toString(16))}${tooShort(g.toString(16))}${tooShort(b.toString(16))}`;
62
+ }
63
+ else if (rgbaReg.test(v)) {
64
+ let match = v.match(rgbaReg);
65
+ let r = parseInt(match[1]);
66
+ let g = parseInt(match[2]);
67
+ let b = parseInt(match[3]);
68
+ let a = parseFloat(match[4]);
69
+ return `#${tooShort(r.toString(16))}${tooShort(g.toString(16))}${tooShort(b.toString(16))}:${a}`;
70
+ }
71
+ else if (hslReg.test(v)) {
72
+ let match = v.match(hslReg);
73
+ let h = parseInt(match[1]);
74
+ let s = parseInt(match[2]);
75
+ let l = parseInt(match[3]);
76
+ l /= 100;
77
+ const b = s * Math.min(l, 1 - l) / 100;
78
+ const f = (n) => {
79
+ const k = (n + h / 30) % 12;
80
+ const color = l - b * Math.max(Math.min(k - 3, 9 - k, 1), -1);
81
+ return Math.round(255 * color).toString(16).padStart(2, '0');
82
+ };
83
+ return `#${f(0)}${f(8)}${f(4)}`;
84
+ }
85
+ else if (hslaReg.test(v)) {
86
+ let match = v.match(hslaReg);
87
+ let h = parseInt(match[1]);
88
+ let s = parseInt(match[2]);
89
+ let l = parseInt(match[3]);
90
+ let a = parseFloat(match[4]);
91
+ l /= 100;
92
+ const b = s * Math.min(l, 1 - l) / 100;
93
+ const f = (n) => {
94
+ const k = (n + h / 30) % 12;
95
+ const color = l - b * Math.max(Math.min(k - 3, 9 - k, 1), -1);
96
+ return Math.round(255 * color).toString(16).padStart(2, '0');
97
+ };
98
+ return `#${f(0)}${f(8)}${f(4)}:${a}`;
99
+ }
100
+ else {
101
+ return '#000000';
102
+ }
103
+ }
104
+ exports.parseHex = parseHex;
105
+ function parseColor(v) {
106
+ if (typeof v === 'string') {
107
+ return parseHex(v);
108
+ }
109
+ else if (v instanceof Gradient_1.Gradient || v instanceof Pattern_1.Pattern) {
110
+ return v;
111
+ }
112
+ else {
113
+ return '#000000';
114
+ }
115
+ }
116
+ exports.parseColor = parseColor;
117
+ function parseToNormal(v, canvas, layer = { width: 0, height: 0 }, options = { vertical: false, layer: false }) {
118
+ if (typeof v === 'number') {
119
+ return v;
120
+ }
121
+ else if (percentReg.test(v)) {
122
+ return parseFloat(v) * (options.layer ? (options.vertical ? layer.width : layer.height) : (options.vertical ? canvas.width : canvas.height));
123
+ }
124
+ else if (pxReg.test(v)) {
125
+ return parseFloat(v);
126
+ }
127
+ else if (canvasReg.test(v)) {
128
+ if (v === 'vw') {
129
+ return (options.layer ? layer.width : canvas.width);
130
+ }
131
+ else if (v === 'vh') {
132
+ return (options.layer ? layer.height : canvas.height);
133
+ }
134
+ else if (v === 'vmin') {
135
+ return (options.layer ? Math.max(layer.width, layer.height) : Math.min(canvas.width, canvas.height));
136
+ }
137
+ else if (v === 'vmax') {
138
+ return (options.layer ? Math.max(layer.width, layer.height) : Math.max(canvas.width, canvas.height));
139
+ }
140
+ }
141
+ return 0;
142
+ }
143
+ exports.parseToNormal = parseToNormal;
144
+ function drawShadow(ctx, shadow) {
145
+ if (shadow) {
146
+ ctx.shadowColor = shadow.color;
147
+ ctx.shadowBlur = shadow.blur || 0;
148
+ ctx.shadowOffsetX = shadow.offsetX || 0;
149
+ ctx.shadowOffsetY = shadow.offsetY || 0;
150
+ }
151
+ }
152
+ exports.drawShadow = drawShadow;
153
+ function opacity(ctx, opacity) {
154
+ if (opacity < 1) {
155
+ ctx.globalAlpha = opacity;
156
+ }
157
+ }
158
+ exports.opacity = opacity;
159
+ function filters(ctx, filters) {
160
+ if (filters) {
161
+ ctx.filter = filters;
162
+ }
163
+ }
164
+ exports.filters = filters;
165
+ function parseFillStyle(ctx, color) {
166
+ if (color instanceof Gradient_1.Gradient || color instanceof Pattern_1.Pattern) {
167
+ return color.draw(ctx);
168
+ }
169
+ else {
170
+ return color;
171
+ }
172
+ }
173
+ exports.parseFillStyle = parseFillStyle;
174
+ function transform(ctx, transform, layer = { width: 0, height: 0, x: 0, y: 0, type: enum_1.LayerType.Morph }, extra = { text: '', textAlign: enum_1.TextAlign.Left, fontSize: 0, multiline: false }) {
175
+ if (transform) {
176
+ if (transform.translate) {
177
+ ctx.translate(transform.translate.x, transform.translate.y);
178
+ }
179
+ if (transform.rotate) {
180
+ switch (layer.type) {
181
+ case enum_1.LayerType.Image:
182
+ case enum_1.LayerType.Morph:
183
+ ctx.translate(layer.x + (layer.width / 2), layer.y + (layer.height / 2));
184
+ ctx.rotate((Math.PI / 180) * transform.rotate);
185
+ ctx.translate(-(layer.x + (layer.width / 2)), -(layer.y + (layer.height / 2)));
186
+ break;
187
+ case enum_1.LayerType.Text:
188
+ if (extra.multiline) {
189
+ ctx.translate(layer.x + (layer.width / 2), layer.y + (layer.height / 2));
190
+ ctx.rotate((Math.PI / 180) * transform.rotate);
191
+ ctx.translate(-(layer.x + (layer.width / 2)), -(layer.y + (layer.height / 2)));
192
+ }
193
+ else {
194
+ if (extra.textAlign === enum_1.TextAlign.Center) {
195
+ ctx.translate(layer.x, layer.y);
196
+ ctx.rotate((Math.PI / 180) * transform.rotate);
197
+ ctx.translate(-layer.x, -layer.y);
198
+ }
199
+ else if (extra.textAlign === enum_1.TextAlign.Left || extra.textAlign === enum_1.TextAlign.Start) {
200
+ ctx.translate(layer.x + (extra.fontSize * extra.text.length) / 2, layer.y);
201
+ ctx.rotate((Math.PI / 180) * transform.rotate);
202
+ ctx.translate(-(layer.x + (extra.fontSize * extra.text.length) / 2), -layer.y);
203
+ }
204
+ else if (extra.textAlign === enum_1.TextAlign.Right || extra.textAlign === enum_1.TextAlign.End) {
205
+ ctx.translate(layer.x - (extra.fontSize * extra.text.length) / 2, layer.y);
206
+ ctx.rotate((Math.PI / 180) * transform.rotate);
207
+ ctx.translate(-(layer.x - (extra.fontSize * extra.text.length) / 2), -layer.y);
208
+ }
209
+ }
210
+ break;
211
+ }
212
+ }
213
+ if (transform.scale) {
214
+ ctx.scale(transform.scale.x, transform.scale.y);
215
+ }
216
+ if (transform.matrix) {
217
+ if (!transform.matrix.a || !transform.matrix.b || !transform.matrix.c || !transform.matrix.d || !transform.matrix.e || !transform.matrix.f)
218
+ throw new LazyUtil_1.LazyError('The matrix transformation must be a valid matrix');
219
+ ctx.transform(transform.matrix.a, transform.matrix.b, transform.matrix.c, transform.matrix.d, transform.matrix.e, transform.matrix.f);
220
+ }
221
+ }
222
+ }
223
+ exports.transform = transform;
224
+ async function saveFile(buffer, extension, name) {
225
+ if (!buffer)
226
+ throw new LazyUtil_1.LazyError('Buffer must be provided');
227
+ if (!extension)
228
+ throw new LazyUtil_1.LazyError('Extension must be provided');
229
+ fs.writeFileSync(`${name === undefined ? generateRandomName() : name}.${extension}`, buffer);
230
+ }
231
+ exports.saveFile = saveFile;
232
+ function generateRandomName() {
233
+ return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
234
+ }
235
+ exports.generateRandomName = generateRandomName;
236
+ function isImageUrlValid(src) {
237
+ try {
238
+ jimp.read(src);
239
+ return true;
240
+ }
241
+ catch (error) {
242
+ return false;
243
+ }
244
+ }
245
+ exports.isImageUrlValid = isImageUrlValid;
246
+ function centring(centring, type, width, height, x, y) {
247
+ if (centring === enum_1.Centring.Center) {
248
+ switch (type) {
249
+ case enum_1.LayerType.Image:
250
+ case enum_1.LayerType.Morph:
251
+ x -= width / 2;
252
+ y -= height / 2;
253
+ break;
254
+ }
255
+ return { x, y };
256
+ }
257
+ else {
258
+ return { x, y };
259
+ }
260
+ }
261
+ exports.centring = centring;
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@nmmty/lazycanvas",
3
+ "version": "0.2.0",
4
+ "description": "A simple way to interact with @napi-rs/canvas in an advanced way!",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "scripts": {
8
+ "test": "tsc ./test/test.ts && node ./test/test.js",
9
+ "logo": "tsc ./test/logo.ts && node ./test/logo.js",
10
+ "text": "tsc ./test/text.ts && node ./test/text.js",
11
+ "doc": "tsx docgen.ts",
12
+ "build": "tsc"
13
+ },
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "git+https://github.com/NMMTY/LazyCanvas.git"
17
+ },
18
+ "keywords": [
19
+ "canvas",
20
+ "@napi-rs/canvas",
21
+ "node-canvas",
22
+ "easy",
23
+ "simple"
24
+ ],
25
+ "author": "NMMTY",
26
+ "license": "MIT",
27
+ "bugs": {
28
+ "url": "https://github.com/NMMTY/LazyCanvas/issues"
29
+ },
30
+ "homepage": "https://github.com/NMMTY/LazyCanvas#readme",
31
+ "dependencies": {
32
+ "@napi-rs/canvas": "^0.1.65",
33
+ "jimp": "0.22.12",
34
+ "path": "^0.12.7",
35
+ "svgson": "^5.3.1"
36
+ },
37
+ "devDependencies": {
38
+ "@hitomihiumi/micro-docgen": "^0.3.0",
39
+ "@types/jimp": "^0.2.28",
40
+ "@types/node": "^22.10.2",
41
+ "@types/react": "^19.0.2",
42
+ "ava": "^6.2.0",
43
+ "globals": "^15.14.0",
44
+ "tslib": "^2.8.1",
45
+ "tsx": "^4.19.2",
46
+ "typescript": "^5.4.5"
47
+ },
48
+ "publishConfig": {
49
+ "access": "public"
50
+ }
51
+ }