uplot-webgpu 0.1.0 → 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 (42) hide show
  1. package/index.js +0 -17
  2. package/index.ts +5 -0
  3. package/package.json +4 -69
  4. package/paths/ts/bars.ts +253 -0
  5. package/paths/ts/catmullRomCentrip.ts +127 -0
  6. package/paths/ts/index.ts +9 -0
  7. package/paths/ts/linear.ts +172 -0
  8. package/paths/ts/monotoneCubic.ts +70 -0
  9. package/paths/ts/points.ts +70 -0
  10. package/paths/ts/spline.ts +105 -0
  11. package/paths/ts/stepped.ts +126 -0
  12. package/paths/ts/types.ts +143 -0
  13. package/paths/ts/utils.ts +303 -0
  14. package/scripts/ts/uPlot.ts +3732 -0
  15. package/scripts/ts/utils/dom.ts +124 -0
  16. package/scripts/ts/utils/domClasses.ts +22 -0
  17. package/scripts/ts/utils/feats.ts +13 -0
  18. package/scripts/ts/utils/fmtDate.ts +398 -0
  19. package/scripts/ts/utils/opts.ts +844 -0
  20. package/scripts/ts/utils/strings.ts +22 -0
  21. package/scripts/ts/utils/sync.ts +27 -0
  22. package/scripts/ts/utils/utils.ts +692 -0
  23. package/scripts/{webgpu → ts/webgpu}/GPUPath.ts +92 -41
  24. package/scripts/{webgpu → ts/webgpu}/WebGPURenderer.ts +176 -84
  25. package/scripts/ts/webgpu/exporters.ts +221 -0
  26. package/scripts/ts/webgpu/index.ts +31 -0
  27. package/scripts/{webgpu → ts/webgpu}/shaders.ts +0 -1
  28. package/scripts/uPlot.js +0 -2
  29. package/scripts/webgpu/GPUPath.js +513 -606
  30. package/scripts/webgpu/WebGPURenderer.js +3484 -4018
  31. package/scripts/webgpu/exporters.js +191 -201
  32. package/scripts/webgpu/index.js +12 -0
  33. package/scripts/webgpu/shaders.js +6 -3
  34. package/tinybuild.config.js +6 -6
  35. package/tsconfig.json +64 -0
  36. package/scripts/uPlot.d.ts +0 -26
  37. package/scripts/webgpu/GPUPath.d.ts +0 -46
  38. package/scripts/webgpu/WebGPURenderer.d.ts +0 -176
  39. package/scripts/webgpu/exporters.d.ts +0 -8
  40. package/scripts/webgpu/shaders.d.ts +0 -2
  41. package/scripts/webgpu/smokeTest.d.ts +0 -2
  42. package/scripts/webgpu/webgpu-ambient.d.ts +0 -41
@@ -0,0 +1,221 @@
1
+ declare const Buffer: any;
2
+ export function rgbaImageDataToBmpBytes(imageData: ImageData | {width: number; height: number; data: Uint8ClampedArray | Uint8Array}): Uint8Array {
3
+ let width = Math.max(0, Math.floor(Number(imageData?.width) || 0));
4
+ let height = Math.max(0, Math.floor(Number(imageData?.height) || 0));
5
+ let data = imageData?.data || new Uint8ClampedArray(0);
6
+ let rowStride = Math.ceil((width * 4) / 4) * 4;
7
+ let pixelBytes = rowStride * height;
8
+ let bytes = new Uint8Array(14 + 40 + pixelBytes);
9
+ let view = new DataView(bytes.buffer);
10
+
11
+ bytes[0] = 0x42;
12
+ bytes[1] = 0x4d;
13
+ view.setUint32(2, bytes.length, true);
14
+ view.setUint32(10, 54, true);
15
+ view.setUint32(14, 40, true);
16
+ view.setInt32(18, width, true);
17
+ view.setInt32(22, -height, true);
18
+ view.setUint16(26, 1, true);
19
+ view.setUint16(28, 32, true);
20
+ view.setUint32(34, pixelBytes, true);
21
+
22
+ let out = 54;
23
+ for (let y = 0; y < height; y++) {
24
+ let src = y * width * 4;
25
+ for (let x = 0; x < width; x++) {
26
+ let si = src + x * 4;
27
+ let di = out + x * 4;
28
+ bytes[di + 0] = data[si + 2] || 0;
29
+ bytes[di + 1] = data[si + 1] || 0;
30
+ bytes[di + 2] = data[si + 0] || 0;
31
+ bytes[di + 3] = data[si + 3] == null ? 255 : data[si + 3];
32
+ }
33
+ out += rowStride;
34
+ }
35
+
36
+ return bytes;
37
+ }
38
+
39
+
40
+ function makeCrc32Table() {
41
+ let table = new Uint32Array(256);
42
+ for (let i = 0; i < 256; i++) {
43
+ let c = i;
44
+ for (let j = 0; j < 8; j++)
45
+ c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
46
+ table[i] = c >>> 0;
47
+ }
48
+ return table;
49
+ }
50
+
51
+ const CRC32_TABLE = makeCrc32Table();
52
+
53
+ function crc32(bytes) {
54
+ let c = 0xffffffff;
55
+ for (let i = 0; i < bytes.length; i++)
56
+ c = CRC32_TABLE[(c ^ bytes[i]) & 255] ^ (c >>> 8);
57
+ return (c ^ 0xffffffff) >>> 0;
58
+ }
59
+
60
+ function adler32(bytes) {
61
+ let a = 1;
62
+ let b = 0;
63
+ for (let i = 0; i < bytes.length; i++) {
64
+ a = (a + bytes[i]) % 65521;
65
+ b = (b + a) % 65521;
66
+ }
67
+ return ((b << 16) | a) >>> 0;
68
+ }
69
+
70
+ function writeU32(bytes, offset, value) {
71
+ bytes[offset + 0] = (value >>> 24) & 255;
72
+ bytes[offset + 1] = (value >>> 16) & 255;
73
+ bytes[offset + 2] = (value >>> 8) & 255;
74
+ bytes[offset + 3] = value & 255;
75
+ }
76
+
77
+ function asciiBytes(text) {
78
+ let out = new Uint8Array(text.length);
79
+ for (let i = 0; i < text.length; i++)
80
+ out[i] = text.charCodeAt(i) & 255;
81
+ return out;
82
+ }
83
+
84
+ function pngChunk(type, data) {
85
+ let name = asciiBytes(type);
86
+ let out = new Uint8Array(12 + data.length);
87
+ writeU32(out, 0, data.length);
88
+ out.set(name, 4);
89
+ out.set(data, 8);
90
+ let crcInput = new Uint8Array(name.length + data.length);
91
+ crcInput.set(name, 0);
92
+ crcInput.set(data, name.length);
93
+ writeU32(out, out.length - 4, crc32(crcInput));
94
+ return out;
95
+ }
96
+
97
+ function zlibStore(bytes) {
98
+ let blocks = [];
99
+ let total = 2 + 4;
100
+ for (let pos = 0; pos < bytes.length; pos += 65535) {
101
+ let len = Math.min(65535, bytes.length - pos);
102
+ let block = new Uint8Array(5 + len);
103
+ block[0] = pos + len >= bytes.length ? 1 : 0;
104
+ block[1] = len & 255;
105
+ block[2] = (len >>> 8) & 255;
106
+ let nlen = (~len) & 65535;
107
+ block[3] = nlen & 255;
108
+ block[4] = (nlen >>> 8) & 255;
109
+ block.set(bytes.subarray(pos, pos + len), 5);
110
+ blocks.push(block);
111
+ total += block.length;
112
+ }
113
+
114
+ let out = new Uint8Array(total);
115
+ out[0] = 0x78;
116
+ out[1] = 0x01;
117
+ let o = 2;
118
+ for (let block of blocks) {
119
+ out.set(block, o);
120
+ o += block.length;
121
+ }
122
+ writeU32(out, o, adler32(bytes));
123
+ return out;
124
+ }
125
+
126
+ export function rgbaImageDataToPngBytes(imageData: ImageData | {width: number; height: number; data: Uint8ClampedArray | Uint8Array}): Uint8Array {
127
+ let width = Math.max(0, Math.floor(Number(imageData?.width) || 0));
128
+ let height = Math.max(0, Math.floor(Number(imageData?.height) || 0));
129
+ let data = imageData?.data || new Uint8ClampedArray(0);
130
+ let raw = new Uint8Array((width * 4 + 1) * height);
131
+ let dst = 0;
132
+ let src = 0;
133
+ for (let y = 0; y < height; y++) {
134
+ raw[dst++] = 0;
135
+ for (let x = 0; x < width; x++) {
136
+ raw[dst++] = data[src++] || 0;
137
+ raw[dst++] = data[src++] || 0;
138
+ raw[dst++] = data[src++] || 0;
139
+ let a = data[src++];
140
+ raw[dst++] = a == null ? 255 : a;
141
+ }
142
+ }
143
+
144
+ let ihdr = new Uint8Array(13);
145
+ writeU32(ihdr, 0, width);
146
+ writeU32(ihdr, 4, height);
147
+ ihdr[8] = 8;
148
+ ihdr[9] = 6;
149
+ ihdr[10] = 0;
150
+ ihdr[11] = 0;
151
+ ihdr[12] = 0;
152
+
153
+ let signature = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);
154
+ let chunks = [signature, pngChunk('IHDR', ihdr), pngChunk('IDAT', zlibStore(raw)), pngChunk('IEND', new Uint8Array(0))];
155
+ let total = chunks.reduce((sum, chunk) => sum + chunk.length, 0);
156
+ let out = new Uint8Array(total);
157
+ let offset = 0;
158
+ for (let chunk of chunks) {
159
+ out.set(chunk, offset);
160
+ offset += chunk.length;
161
+ }
162
+ return out;
163
+ }
164
+
165
+ export function normalizeExportType(type?: string): string {
166
+ type = String(type || 'image/png').toLowerCase();
167
+ return type == 'image/bmp' || type == 'image/x-ms-bmp' ? 'image/bmp' : 'image/png';
168
+ }
169
+
170
+ export function bytesToBase64(bytes: Uint8Array): string {
171
+ if (typeof Buffer != 'undefined')
172
+ return Buffer.from(bytes).toString('base64');
173
+
174
+ let s = '';
175
+ let chunk = 0x8000;
176
+ for (let i = 0; i < bytes.length; i += chunk)
177
+ s += String.fromCharCode(...bytes.subarray(i, i + chunk));
178
+ return btoa(s);
179
+ }
180
+
181
+ export function bytesToArrayBuffer(bytes: Uint8Array): ArrayBuffer {
182
+ let out = new ArrayBuffer(bytes.byteLength);
183
+ new Uint8Array(out).set(bytes);
184
+ return out;
185
+ }
186
+
187
+ export function bytesToBlob(bytes: Uint8Array, type: string): Blob | {type: string; size: number; arrayBuffer(): Promise<ArrayBuffer>} {
188
+ let buffer = bytesToArrayBuffer(bytes);
189
+
190
+ if (typeof Blob != 'undefined')
191
+ return new Blob([buffer], {type});
192
+
193
+ return {
194
+ type,
195
+ size: bytes.byteLength,
196
+ async arrayBuffer() {
197
+ return buffer.slice(0);
198
+ },
199
+ };
200
+ }
201
+
202
+ export function textToBlob(text: string, type: string): Blob | {type: string; size: number; arrayBuffer(): Promise<ArrayBuffer>} {
203
+ if (typeof Blob != 'undefined')
204
+ return new Blob([text], {type});
205
+
206
+ let bytes = new TextEncoder().encode(text);
207
+ return bytesToBlob(bytes, type);
208
+ }
209
+
210
+ export function escapeXmlAttr(value: unknown): string {
211
+ return String(value).replace(/&/g, '&amp;').replace(/"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
212
+ }
213
+
214
+ export function encodeTextBase64(text: string): string {
215
+ if (typeof Buffer != 'undefined')
216
+ return Buffer.from(text, 'utf8').toString('base64');
217
+
218
+ let bytes = new TextEncoder().encode(text);
219
+ return bytesToBase64(bytes);
220
+ }
221
+
@@ -0,0 +1,31 @@
1
+ export { GPUPath } from './GPUPath';
2
+ export type {
3
+ GPUPathArcCommand,
4
+ GPUPathArcFlag,
5
+ GPUPathBounds,
6
+ GPUPathCloseCommand,
7
+ GPUPathCommand,
8
+ GPUPathCubicCommand,
9
+ GPUPathEllipseCommand,
10
+ GPUPathLike,
11
+ GPUPathLineCommand,
12
+ GPUPathMoveCommand,
13
+ GPUPathPoint,
14
+ GPUPathRect,
15
+ GPUPathRectCommand,
16
+ GPUPathSubpath,
17
+ } from './GPUPath';
18
+ export { default, WebGPURenderer, WebGPURendererInternals } from './WebGPURenderer';
19
+ export type {
20
+ CanvasGradientLike,
21
+ CanvasPatternLike,
22
+ RGBA,
23
+ WebGPUMemoryMode,
24
+ WebGPURendererFrameStats,
25
+ WebGPURendererMemoryStats,
26
+ WebGPURendererOptions,
27
+ WebGPURuntimeStats,
28
+ WebGPUWarmupStats,
29
+ } from './WebGPURenderer';
30
+ export { CHART_WGSL, IMAGE_WGSL } from './shaders';
31
+ export * from './exporters';
@@ -1,4 +1,3 @@
1
- // @ts-nocheck
2
1
  export const CHART_WGSL = `
3
2
  struct Uniforms {
4
3
  resolution: vec2<f32>,
package/scripts/uPlot.js CHANGED
@@ -3683,5 +3683,3 @@ if (FEAT_PATHS) {
3683
3683
  FEAT_PATHS_SPLINE && (paths.spline = spline);
3684
3684
  FEAT_PATHS_SPLINE2 && (paths.spline2 = spline2);
3685
3685
  }
3686
-
3687
- globalThis.uPlot = uPlot;