cardcanvas 1.0.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/LICENSE +7 -0
- package/README.md +5 -0
- package/dist/canvas.d.ts +26 -0
- package/dist/canvas.js +81 -0
- package/dist/chunk-7TX4ORLH.js +28 -0
- package/dist/chunk-CXTIBO3Z.js +50 -0
- package/dist/chunk-KA7UFNGN.js +20 -0
- package/dist/chunk-OBYBROK5.js +19 -0
- package/dist/chunk-OPQZLRHJ.js +17 -0
- package/dist/chunk-OYOUQYQT.js +6 -0
- package/dist/color.d.ts +10 -0
- package/dist/color.js +8 -0
- package/dist/encoding.d.ts +11 -0
- package/dist/encoding.js +46 -0
- package/dist/loader.d.ts +9 -0
- package/dist/loader.js +7 -0
- package/dist/memory-manager.d.ts +8 -0
- package/dist/memory-manager.js +8 -0
- package/dist/native-image.d.ts +17 -0
- package/dist/native-image.js +10 -0
- package/dist/native-object.d.ts +7 -0
- package/dist/native-object.js +0 -0
- package/dist/native-string.d.ts +12 -0
- package/dist/native-string.js +8 -0
- package/dist/wasm.d.ts +31 -0
- package/dist/wasm.js +6 -0
- package/package.json +36 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
Copyright 2026 Reimnop
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
4
|
+
|
|
5
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
6
|
+
|
|
7
|
+
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/README.md
ADDED
package/dist/canvas.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { NativeImage } from './native-image.js';
|
|
2
|
+
import { Color } from './color.js';
|
|
3
|
+
import { NativeObject, Pointer } from './native-object.js';
|
|
4
|
+
|
|
5
|
+
declare class Canvas implements NativeObject {
|
|
6
|
+
ptr: Pointer;
|
|
7
|
+
private wasm;
|
|
8
|
+
private image;
|
|
9
|
+
private constructor();
|
|
10
|
+
static create(image: NativeImage): Promise<Canvas>;
|
|
11
|
+
setPixel(xPx: number, yPx: number, color: Color): void;
|
|
12
|
+
setBlock(x: number, y: number, color: Color): void;
|
|
13
|
+
fillRect(x: number, y: number, width: number, height: number, color: Color): void;
|
|
14
|
+
drawGlyph(x: number, y: number, size: number, c: string, color: Color): void;
|
|
15
|
+
drawText(x: number, y: number, size: number, text: string, color: Color): void;
|
|
16
|
+
drawTextCenterAligned(x: number, y: number, size: number, text: string, color: Color): void;
|
|
17
|
+
drawTextRightAligned(x: number, y: number, size: number, text: string, color: Color): void;
|
|
18
|
+
drawSubImage(xPx: number, yPx: number, subImage: NativeImage): void;
|
|
19
|
+
calculateTextRectSize(length: number, size: number): {
|
|
20
|
+
width: number;
|
|
21
|
+
height: number;
|
|
22
|
+
};
|
|
23
|
+
free(): void;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export { Canvas };
|
package/dist/canvas.js
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import {
|
|
2
|
+
packColor
|
|
3
|
+
} from "./chunk-OPQZLRHJ.js";
|
|
4
|
+
import {
|
|
5
|
+
getInstance
|
|
6
|
+
} from "./chunk-KA7UFNGN.js";
|
|
7
|
+
import "./chunk-OYOUQYQT.js";
|
|
8
|
+
import {
|
|
9
|
+
registerNativeObject,
|
|
10
|
+
releaseNativeObject
|
|
11
|
+
} from "./chunk-7TX4ORLH.js";
|
|
12
|
+
import {
|
|
13
|
+
allocNativeString,
|
|
14
|
+
freeNativeString
|
|
15
|
+
} from "./chunk-OBYBROK5.js";
|
|
16
|
+
|
|
17
|
+
// src/canvas.ts
|
|
18
|
+
var Canvas = class _Canvas {
|
|
19
|
+
ptr;
|
|
20
|
+
wasm;
|
|
21
|
+
image;
|
|
22
|
+
constructor(ptr, wasm, image) {
|
|
23
|
+
this.ptr = ptr;
|
|
24
|
+
this.wasm = wasm;
|
|
25
|
+
this.image = image;
|
|
26
|
+
registerNativeObject(wasm, this);
|
|
27
|
+
}
|
|
28
|
+
static async create(image) {
|
|
29
|
+
const wasm = await getInstance();
|
|
30
|
+
const canvasPtr = wasm.exports.malloc(12);
|
|
31
|
+
const pxPerCu = image.width / 256;
|
|
32
|
+
wasm.exports.canvas_init(canvasPtr, image.ptr, pxPerCu, image.width);
|
|
33
|
+
return new _Canvas(canvasPtr, wasm, image);
|
|
34
|
+
}
|
|
35
|
+
setPixel(xPx, yPx, color) {
|
|
36
|
+
this.wasm.exports.canvas_set_pixel(this.ptr, xPx, yPx, packColor(color));
|
|
37
|
+
}
|
|
38
|
+
setBlock(x, y, color) {
|
|
39
|
+
this.wasm.exports.canvas_set_block(this.ptr, x, y, packColor(color));
|
|
40
|
+
}
|
|
41
|
+
fillRect(x, y, width, height, color) {
|
|
42
|
+
this.wasm.exports.canvas_fill_rect(this.ptr, x, y, width, height, packColor(color));
|
|
43
|
+
}
|
|
44
|
+
drawGlyph(x, y, size, c, color) {
|
|
45
|
+
this.wasm.exports.canvas_draw_glyph(this.ptr, x, y, size, c.charCodeAt(0), packColor(color));
|
|
46
|
+
}
|
|
47
|
+
drawText(x, y, size, text, color) {
|
|
48
|
+
const str = allocNativeString(this.wasm, text);
|
|
49
|
+
this.wasm.exports.canvas_draw_text(this.ptr, x, y, size, str.ptr, str.size, packColor(color));
|
|
50
|
+
freeNativeString(this.wasm, str);
|
|
51
|
+
}
|
|
52
|
+
drawTextCenterAligned(x, y, size, text, color) {
|
|
53
|
+
const str = allocNativeString(this.wasm, text);
|
|
54
|
+
this.wasm.exports.canvas_draw_text_center_aligned(this.ptr, x, y, size, str.ptr, str.size, packColor(color));
|
|
55
|
+
freeNativeString(this.wasm, str);
|
|
56
|
+
}
|
|
57
|
+
drawTextRightAligned(x, y, size, text, color) {
|
|
58
|
+
const str = allocNativeString(this.wasm, text);
|
|
59
|
+
this.wasm.exports.canvas_draw_text_right_aligned(this.ptr, x, y, size, str.ptr, str.size, packColor(color));
|
|
60
|
+
freeNativeString(this.wasm, str);
|
|
61
|
+
}
|
|
62
|
+
drawSubImage(xPx, yPx, subImage) {
|
|
63
|
+
this.wasm.exports.canvas_draw_sub_image(this.ptr, xPx, yPx, subImage.width, subImage.height, subImage.ptr);
|
|
64
|
+
}
|
|
65
|
+
calculateTextRectSize(length, size) {
|
|
66
|
+
const outPtr = this.wasm.exports.malloc(8);
|
|
67
|
+
this.wasm.exports.canvas_calculate_text_rect_size(length, size, outPtr, outPtr + 4);
|
|
68
|
+
const result = {
|
|
69
|
+
width: this.wasm.memoryView.getUint32(outPtr, true),
|
|
70
|
+
height: this.wasm.memoryView.getUint32(outPtr + 4, true)
|
|
71
|
+
};
|
|
72
|
+
this.wasm.exports.free(outPtr);
|
|
73
|
+
return result;
|
|
74
|
+
}
|
|
75
|
+
free() {
|
|
76
|
+
releaseNativeObject(this.wasm, this);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
export {
|
|
80
|
+
Canvas
|
|
81
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// src/memory-manager.ts
|
|
2
|
+
var finalizationRegistry = null;
|
|
3
|
+
function getFinalizationRegistry(wasm) {
|
|
4
|
+
if (!finalizationRegistry) {
|
|
5
|
+
finalizationRegistry = new FinalizationRegistry((ptr) => {
|
|
6
|
+
wasm.exports.free(ptr);
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
return finalizationRegistry;
|
|
10
|
+
}
|
|
11
|
+
function registerNativeObject(wasm, obj) {
|
|
12
|
+
const registry = getFinalizationRegistry(wasm);
|
|
13
|
+
registry.register(obj, obj.ptr, obj);
|
|
14
|
+
}
|
|
15
|
+
function releaseNativeObject(wasm, obj) {
|
|
16
|
+
if (obj.ptr === 0) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
wasm.exports.free(obj.ptr);
|
|
20
|
+
const registry = getFinalizationRegistry(wasm);
|
|
21
|
+
registry.unregister(obj);
|
|
22
|
+
obj.ptr = 0;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export {
|
|
26
|
+
registerNativeObject,
|
|
27
|
+
releaseNativeObject
|
|
28
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import {
|
|
2
|
+
packColor,
|
|
3
|
+
unpackColor
|
|
4
|
+
} from "./chunk-OPQZLRHJ.js";
|
|
5
|
+
import {
|
|
6
|
+
getInstance
|
|
7
|
+
} from "./chunk-KA7UFNGN.js";
|
|
8
|
+
import {
|
|
9
|
+
registerNativeObject,
|
|
10
|
+
releaseNativeObject
|
|
11
|
+
} from "./chunk-7TX4ORLH.js";
|
|
12
|
+
|
|
13
|
+
// src/native-image.ts
|
|
14
|
+
var NativeImage = class _NativeImage {
|
|
15
|
+
ptr;
|
|
16
|
+
width;
|
|
17
|
+
height;
|
|
18
|
+
wasm;
|
|
19
|
+
constructor(ptr, wasm, width, height) {
|
|
20
|
+
this.ptr = ptr;
|
|
21
|
+
this.wasm = wasm;
|
|
22
|
+
this.width = width;
|
|
23
|
+
this.height = height;
|
|
24
|
+
registerNativeObject(this.wasm, this);
|
|
25
|
+
}
|
|
26
|
+
static async create(width, height) {
|
|
27
|
+
const wasm = await getInstance();
|
|
28
|
+
const size = width * height * 4;
|
|
29
|
+
const ptr = wasm.exports.malloc(size);
|
|
30
|
+
return new _NativeImage(ptr, wasm, width, height);
|
|
31
|
+
}
|
|
32
|
+
getPixel(x, y) {
|
|
33
|
+
const packed = this.wasm.memoryView.getUint32(this.ptr + (y * this.width + x) * 4, true);
|
|
34
|
+
return unpackColor(packed);
|
|
35
|
+
}
|
|
36
|
+
setPixel(x, y, color) {
|
|
37
|
+
const packed = packColor(color);
|
|
38
|
+
this.wasm.memoryView.setUint32(this.ptr + (y * this.width + x) * 4, packed, true);
|
|
39
|
+
}
|
|
40
|
+
asUint32Array() {
|
|
41
|
+
return new Uint32Array(this.wasm.exports.memory.buffer, this.ptr, this.width * this.height);
|
|
42
|
+
}
|
|
43
|
+
free() {
|
|
44
|
+
releaseNativeObject(this.wasm, this);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
export {
|
|
49
|
+
NativeImage
|
|
50
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import {
|
|
2
|
+
WASM_BASE64
|
|
3
|
+
} from "./chunk-OYOUQYQT.js";
|
|
4
|
+
|
|
5
|
+
// src/loader.ts
|
|
6
|
+
var instance = null;
|
|
7
|
+
async function getInstance() {
|
|
8
|
+
if (instance) {
|
|
9
|
+
return instance;
|
|
10
|
+
}
|
|
11
|
+
const bytes = Uint8Array.fromBase64(WASM_BASE64);
|
|
12
|
+
const result = await WebAssembly.instantiate(bytes);
|
|
13
|
+
instance = result.instance;
|
|
14
|
+
instance.memoryView = new DataView(instance.exports.memory.buffer);
|
|
15
|
+
return instance;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export {
|
|
19
|
+
getInstance
|
|
20
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// src/native-string.ts
|
|
2
|
+
var encoder = null;
|
|
3
|
+
function allocNativeString(wasm, str) {
|
|
4
|
+
if (!encoder) {
|
|
5
|
+
encoder = new TextEncoder();
|
|
6
|
+
}
|
|
7
|
+
const bytes = encoder.encode(str);
|
|
8
|
+
const ptr = wasm.exports.malloc(bytes.length);
|
|
9
|
+
new Uint8Array(wasm.exports.memory.buffer, ptr, bytes.length).set(bytes);
|
|
10
|
+
return { ptr, size: bytes.length };
|
|
11
|
+
}
|
|
12
|
+
function freeNativeString(wasm, nativeStr) {
|
|
13
|
+
wasm.exports.free(nativeStr.ptr);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export {
|
|
17
|
+
allocNativeString,
|
|
18
|
+
freeNativeString
|
|
19
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// src/color.ts
|
|
2
|
+
function unpackColor(packed) {
|
|
3
|
+
return {
|
|
4
|
+
r: packed & 255,
|
|
5
|
+
g: packed >>> 8 & 255,
|
|
6
|
+
b: packed >>> 16 & 255,
|
|
7
|
+
a: packed >>> 24 & 255
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
function packColor(color) {
|
|
11
|
+
return color.r & 255 | (color.g & 255) << 8 | (color.b & 255) << 16 | (color.a & 255) << 24;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export {
|
|
15
|
+
unpackColor,
|
|
16
|
+
packColor
|
|
17
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// src/wasm.ts
|
|
2
|
+
var WASM_BASE64 = "AGFzbQEAAAABQQlgAABgAX8Bf2AEf39/fwBgA39/fwF/YAZ/f39/f38AYAh/f39/f39/fwBgB39/f39/f38AYAR/f39/AX9gAX8AAx8eAAEBAQIDAwIBAQICAgQFBAQGAgYGBwEBAQEBAQgABQMBAAIGSAt/AUGAgAQLfwBB4IYEC38AQYCABAt/AEHYhgQLfwBBAAt/AEGAgAQLfwBBgIAEC38AQYCACAt/AEEAC38AQQELfwBBgIAECwfXBSUGbWVtb3J5AgARX193YXNtX2NhbGxfY3RvcnMAAA9fX3N0YWNrX3BvaW50ZXIDAB9lbmNvZGluZ19jYWxjdWxhdGVfZGltZW5zaW9uX3B4AAEhZW5jb2RpbmdfY2FsY3VsYXRlX3RvdGFsX2NhcGFjaXR5AAIlZW5jb2RpbmdfY2FsY3VsYXRlX3JlcXVpcmVkX3B4X3Blcl9jdQADGWVuY29kaW5nX2VuY29kZV9jYXJkX2RhdGEABApjb2xvcl9tYWtlABUZZW5jb2RpbmdfZGVjb2RlX2NhcmRfZGF0YQAHC2NvbG9yX2dldF9yABYLY29sb3JfZ2V0X2cAFwtjb2xvcl9nZXRfYgAYCWdldF9nbHlwaAAJC2NhbnZhc19pbml0AAoQY2FudmFzX3NldF9waXhlbAALEGNhbnZhc19zZXRfYmxvY2sADBBjYW52YXNfZmlsbF9yZWN0AA0XY2FudmFzX2ZpbGxfcmVjdF9tYXNrZWQADhFjYW52YXNfZHJhd19nbHlwaAAPFWNhbnZhc19kcmF3X3N1Yl9pbWFnZQAQC2NvbG9yX2dldF9hABkQY2FudmFzX2RyYXdfdGV4dAARH2NhbnZhc19jYWxjdWxhdGVfdGV4dF9yZWN0X3NpemUAEh9jYW52YXNfZHJhd190ZXh0X2NlbnRlcl9hbGlnbmVkABMeY2FudmFzX2RyYXdfdGV4dF9yaWdodF9hbGlnbmVkABQGbWFsbG9jABoEZnJlZQAcC19faGVhcF9iYXNlAwEMX19kc29faGFuZGxlAwIKX19kYXRhX2VuZAMDC19fc3RhY2tfbG93AwQMX19zdGFja19oaWdoAwUNX19nbG9iYWxfYmFzZQMGCl9faGVhcF9lbmQDBw1fX21lbW9yeV9iYXNlAwgMX190YWJsZV9iYXNlAwkVX193YXNt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";
|
|
3
|
+
|
|
4
|
+
export {
|
|
5
|
+
WASM_BASE64
|
|
6
|
+
};
|
package/dist/color.d.ts
ADDED
package/dist/color.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { NativeImage } from './native-image.js';
|
|
2
|
+
import './color.js';
|
|
3
|
+
import './native-object.js';
|
|
4
|
+
|
|
5
|
+
declare function calculateDimensionPx(pxPerCu: number): Promise<number>;
|
|
6
|
+
declare function calculateTotalCapacity(pxPerCu: number): Promise<number>;
|
|
7
|
+
declare function calculateRequiredPxPerCu(size: number): Promise<number>;
|
|
8
|
+
declare function encodeCardData(image: NativeImage, pxPerCu: number, data: Uint8Array): Promise<void>;
|
|
9
|
+
declare function decodeCardData(image: NativeImage): Promise<Uint8Array>;
|
|
10
|
+
|
|
11
|
+
export { calculateDimensionPx, calculateRequiredPxPerCu, calculateTotalCapacity, decodeCardData, encodeCardData };
|
package/dist/encoding.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import "./chunk-CXTIBO3Z.js";
|
|
2
|
+
import "./chunk-OPQZLRHJ.js";
|
|
3
|
+
import {
|
|
4
|
+
getInstance
|
|
5
|
+
} from "./chunk-KA7UFNGN.js";
|
|
6
|
+
import "./chunk-OYOUQYQT.js";
|
|
7
|
+
import "./chunk-7TX4ORLH.js";
|
|
8
|
+
|
|
9
|
+
// src/encoding.ts
|
|
10
|
+
async function calculateDimensionPx(pxPerCu) {
|
|
11
|
+
const wasm = await getInstance();
|
|
12
|
+
return wasm.exports.encoding_calculate_dimension_px(pxPerCu);
|
|
13
|
+
}
|
|
14
|
+
async function calculateTotalCapacity(pxPerCu) {
|
|
15
|
+
const wasm = await getInstance();
|
|
16
|
+
return wasm.exports.encoding_calculate_total_capacity(pxPerCu);
|
|
17
|
+
}
|
|
18
|
+
async function calculateRequiredPxPerCu(size) {
|
|
19
|
+
const wasm = await getInstance();
|
|
20
|
+
return wasm.exports.encoding_calculate_required_px_per_cu(size);
|
|
21
|
+
}
|
|
22
|
+
async function encodeCardData(image, pxPerCu, data) {
|
|
23
|
+
const wasm = await getInstance();
|
|
24
|
+
const inputPtr = wasm.exports.malloc(data.length);
|
|
25
|
+
new Uint8Array(wasm.exports.memory.buffer, inputPtr, data.length).set(data);
|
|
26
|
+
wasm.exports.encoding_encode_card_data(pxPerCu, inputPtr, data.length, image.ptr);
|
|
27
|
+
wasm.exports.free(inputPtr);
|
|
28
|
+
}
|
|
29
|
+
async function decodeCardData(image) {
|
|
30
|
+
const wasm = await getInstance();
|
|
31
|
+
const pxPerCu = image.width / 256;
|
|
32
|
+
const capacity = wasm.exports.encoding_calculate_total_capacity(pxPerCu);
|
|
33
|
+
const outputPtr = wasm.exports.malloc(capacity + 4);
|
|
34
|
+
wasm.exports.encoding_decode_card_data(image.ptr, image.width, outputPtr + 4, outputPtr);
|
|
35
|
+
const outputLen = wasm.memoryView.getUint32(outputPtr, true);
|
|
36
|
+
const result = new Uint8Array(wasm.exports.memory.buffer, outputPtr + 4, outputLen).slice();
|
|
37
|
+
wasm.exports.free(outputPtr);
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
export {
|
|
41
|
+
calculateDimensionPx,
|
|
42
|
+
calculateRequiredPxPerCu,
|
|
43
|
+
calculateTotalCapacity,
|
|
44
|
+
decodeCardData,
|
|
45
|
+
encodeCardData
|
|
46
|
+
};
|
package/dist/loader.d.ts
ADDED
package/dist/loader.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { WasmInstance } from './loader.js';
|
|
2
|
+
import { NativeObject } from './native-object.js';
|
|
3
|
+
import './wasm.js';
|
|
4
|
+
|
|
5
|
+
declare function registerNativeObject(wasm: WasmInstance, obj: NativeObject): void;
|
|
6
|
+
declare function releaseNativeObject(wasm: WasmInstance, obj: NativeObject): void;
|
|
7
|
+
|
|
8
|
+
export { registerNativeObject, releaseNativeObject };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Color } from './color.js';
|
|
2
|
+
import { NativeObject, Pointer } from './native-object.js';
|
|
3
|
+
|
|
4
|
+
declare class NativeImage implements NativeObject {
|
|
5
|
+
ptr: Pointer;
|
|
6
|
+
readonly width: number;
|
|
7
|
+
readonly height: number;
|
|
8
|
+
private wasm;
|
|
9
|
+
private constructor();
|
|
10
|
+
static create(width: number, height: number): Promise<NativeImage>;
|
|
11
|
+
getPixel(x: number, y: number): Color;
|
|
12
|
+
setPixel(x: number, y: number, color: Color): void;
|
|
13
|
+
asUint32Array(): Uint32Array;
|
|
14
|
+
free(): void;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export { NativeImage };
|
|
File without changes
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { WasmInstance } from './loader.js';
|
|
2
|
+
import { Pointer } from './native-object.js';
|
|
3
|
+
import './wasm.js';
|
|
4
|
+
|
|
5
|
+
interface NativeString {
|
|
6
|
+
ptr: Pointer;
|
|
7
|
+
size: number;
|
|
8
|
+
}
|
|
9
|
+
declare function allocNativeString(wasm: WasmInstance, str: string): NativeString;
|
|
10
|
+
declare function freeNativeString(wasm: WasmInstance, nativeStr: NativeString): void;
|
|
11
|
+
|
|
12
|
+
export { type NativeString, allocNativeString, freeNativeString };
|
package/dist/wasm.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
declare const WASM_BASE64 = "AGFzbQEAAAABQQlgAABgAX8Bf2AEf39/fwBgA39/fwF/YAZ/f39/f38AYAh/f39/f39/fwBgB39/f39/f38AYAR/f39/AX9gAX8AAx8eAAEBAQIDAwIBAQICAgQFBAQGAgYGBwEBAQEBAQgABQMBAAIGSAt/AUGAgAQLfwBB4IYEC38AQYCABAt/AEHYhgQLfwBBAAt/AEGAgAQLfwBBgIAEC38AQYCACAt/AEEAC38AQQELfwBBgIAECwfXBSUGbWVtb3J5AgARX193YXNtX2NhbGxfY3RvcnMAAA9fX3N0YWNrX3BvaW50ZXIDAB9lbmNvZGluZ19jYWxjdWxhdGVfZGltZW5zaW9uX3B4AAEhZW5jb2RpbmdfY2FsY3VsYXRlX3RvdGFsX2NhcGFjaXR5AAIlZW5jb2RpbmdfY2FsY3VsYXRlX3JlcXVpcmVkX3B4X3Blcl9jdQADGWVuY29kaW5nX2VuY29kZV9jYXJkX2RhdGEABApjb2xvcl9tYWtlABUZZW5jb2RpbmdfZGVjb2RlX2NhcmRfZGF0YQAHC2NvbG9yX2dldF9yABYLY29sb3JfZ2V0X2cAFwtjb2xvcl9nZXRfYgAYCWdldF9nbHlwaAAJC2NhbnZhc19pbml0AAoQY2FudmFzX3NldF9waXhlbAALEGNhbnZhc19zZXRfYmxvY2sADBBjYW52YXNfZmlsbF9yZWN0AA0XY2FudmFzX2ZpbGxfcmVjdF9tYXNrZWQADhFjYW52YXNfZHJhd19nbHlwaAAPFWNhbnZhc19kcmF3X3N1Yl9pbWFnZQAQC2NvbG9yX2dldF9hABkQY2FudmFzX2RyYXdfdGV4dAARH2NhbnZhc19jYWxjdWxhdGVfdGV4dF9yZWN0X3NpemUAEh9jYW52YXNfZHJhd190ZXh0X2NlbnRlcl9hbGlnbmVkABMeY2FudmFzX2RyYXdfdGV4dF9yaWdodF9hbGlnbmVkABQGbWFsbG9jABoEZnJlZQAcC19faGVhcF9iYXNlAwEMX19kc29faGFuZGxlAwIKX19kYXRhX2VuZAMDC19fc3RhY2tfbG93AwQMX19zdGFja19oaWdoAwUNX19nbG9iYWxfYmFzZQMGCl9faGVhcF9lbmQDBw1fX21lbW9yeV9iYXNlAwgMX190YWJsZV9iYXNlAwkVX193YXNt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";
|
|
2
|
+
interface WasmExports {
|
|
3
|
+
memory: WebAssembly.Memory;
|
|
4
|
+
__wasm_call_ctors: () => void;
|
|
5
|
+
encoding_calculate_dimension_px: (arg0: number) => number;
|
|
6
|
+
encoding_calculate_total_capacity: (arg0: number) => number;
|
|
7
|
+
encoding_calculate_required_px_per_cu: (arg0: number) => number;
|
|
8
|
+
encoding_encode_card_data: (arg0: number, arg1: number, arg2: number, arg3: number) => void;
|
|
9
|
+
color_make: (arg0: number, arg1: number, arg2: number, arg3: number) => number;
|
|
10
|
+
encoding_decode_card_data: (arg0: number, arg1: number, arg2: number, arg3: number) => void;
|
|
11
|
+
color_get_r: (arg0: number) => number;
|
|
12
|
+
color_get_g: (arg0: number) => number;
|
|
13
|
+
color_get_b: (arg0: number) => number;
|
|
14
|
+
get_glyph: (arg0: number) => number;
|
|
15
|
+
canvas_init: (arg0: number, arg1: number, arg2: number, arg3: number) => void;
|
|
16
|
+
canvas_set_pixel: (arg0: number, arg1: number, arg2: number, arg3: number) => void;
|
|
17
|
+
canvas_set_block: (arg0: number, arg1: number, arg2: number, arg3: number) => void;
|
|
18
|
+
canvas_fill_rect: (arg0: number, arg1: number, arg2: number, arg3: number, arg4: number, arg5: number) => void;
|
|
19
|
+
canvas_fill_rect_masked: (arg0: number, arg1: number, arg2: number, arg3: number, arg4: number, arg5: number, arg6: number, arg7: number) => void;
|
|
20
|
+
canvas_draw_glyph: (arg0: number, arg1: number, arg2: number, arg3: number, arg4: number, arg5: number) => void;
|
|
21
|
+
canvas_draw_sub_image: (arg0: number, arg1: number, arg2: number, arg3: number, arg4: number, arg5: number) => void;
|
|
22
|
+
color_get_a: (arg0: number) => number;
|
|
23
|
+
canvas_draw_text: (arg0: number, arg1: number, arg2: number, arg3: number, arg4: number, arg5: number, arg6: number) => void;
|
|
24
|
+
canvas_calculate_text_rect_size: (arg0: number, arg1: number, arg2: number, arg3: number) => void;
|
|
25
|
+
canvas_draw_text_center_aligned: (arg0: number, arg1: number, arg2: number, arg3: number, arg4: number, arg5: number, arg6: number) => void;
|
|
26
|
+
canvas_draw_text_right_aligned: (arg0: number, arg1: number, arg2: number, arg3: number, arg4: number, arg5: number, arg6: number) => void;
|
|
27
|
+
malloc: (arg0: number) => number;
|
|
28
|
+
free: (arg0: number) => void;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export { WASM_BASE64, type WasmExports };
|
package/dist/wasm.js
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "cardcanvas",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Canvas rendering library for Afterbeat prefab cards",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/Reimnop/cardcanvas"
|
|
9
|
+
},
|
|
10
|
+
"author": {
|
|
11
|
+
"name": "Reimnop"
|
|
12
|
+
},
|
|
13
|
+
"type": "module",
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"exports": {
|
|
18
|
+
"./*": {
|
|
19
|
+
"import": "./dist/*.js",
|
|
20
|
+
"types": "./dist/*.d.ts"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"scripts": {
|
|
24
|
+
"build:wasm": "tsx util/build-wasm.ts",
|
|
25
|
+
"build:js": "tsup src/**/*.ts --format esm --dts --splitting --out-dir dist",
|
|
26
|
+
"build": "npm run build:wasm && npm run build:js",
|
|
27
|
+
"demo": "tsx demo/index.ts"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@types/node": "^25.9.3",
|
|
31
|
+
"sharp": "^0.35.1",
|
|
32
|
+
"tsup": "^8.5.1",
|
|
33
|
+
"tsx": "^4.22.4",
|
|
34
|
+
"typescript": "^6.0.3"
|
|
35
|
+
}
|
|
36
|
+
}
|