@zymbol/qr 0.0.0-bootstrap.0 → 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/dist/engine.js ADDED
@@ -0,0 +1,449 @@
1
+ import { ZymbolError } from './errors.js';
2
+ const EC_LEVELS = ['L', 'M', 'Q', 'H'];
3
+ const MICRO_VERSIONS = ['M1', 'M2', 'M3', 'M4'];
4
+ const META_FIELDS = 18;
5
+ function invalid(reason, operation) {
6
+ throw new ZymbolError('INVALID_INPUT', operation, reason, { reason });
7
+ }
8
+ function invalidOption(reason) {
9
+ throw new ZymbolError('INVALID_OPTIONS', 'encode', reason, { reason });
10
+ }
11
+ function isIndex(value, max) {
12
+ return typeof value === 'number' && Number.isInteger(value) && value >= 0 && value <= max;
13
+ }
14
+ function versionNumber(value, micro, fallback) {
15
+ if (value === undefined)
16
+ return fallback;
17
+ if (micro) {
18
+ const position = MICRO_VERSIONS.indexOf(value);
19
+ if (position === -1)
20
+ return invalidOption('Invalid Micro QR version');
21
+ return position + 1;
22
+ }
23
+ if (!isIndex(value, 40) || value < 1)
24
+ return invalidOption('Invalid QR version');
25
+ return value;
26
+ }
27
+ function qrHeaderFields(fnc1, append) {
28
+ let fnc1Kind = 0;
29
+ let indicator = 0;
30
+ if (fnc1 !== undefined) {
31
+ if (!fnc1 || typeof fnc1 !== 'object')
32
+ invalidOption('Invalid FNC1 header');
33
+ if (fnc1.position === 'first')
34
+ fnc1Kind = 1;
35
+ else if (fnc1.position === 'second') {
36
+ fnc1Kind = 2;
37
+ const raw = fnc1.applicationIndicator;
38
+ if (typeof raw === 'number' && isIndex(raw, 99))
39
+ indicator = raw;
40
+ else if (typeof raw === 'string' && /^[A-Za-z]$/.test(raw))
41
+ indicator = raw.charCodeAt(0) + 100;
42
+ else
43
+ invalidOption('Invalid FNC1 application indicator');
44
+ }
45
+ else
46
+ invalidOption('Invalid FNC1 position');
47
+ }
48
+ if (append !== undefined && (!append || typeof append !== 'object'
49
+ || !isIndex(append.index, 15) || !isIndex(append.count, 16)
50
+ || append.count < 1 || append.index >= append.count || !isIndex(append.parity, 255))) {
51
+ invalidOption('Invalid Structured Append header');
52
+ }
53
+ return [fnc1Kind, indicator, append ? 1 : 0, append?.index ?? 0, append?.count ?? 0, append?.parity ?? 0];
54
+ }
55
+ function validateUnicode(value) {
56
+ for (let i = 0; i < value.length; i++) {
57
+ const code = value.charCodeAt(i);
58
+ if (code >= 0xd800 && code <= 0xdbff) {
59
+ if (++i >= value.length || value.charCodeAt(i) < 0xdc00 || value.charCodeAt(i) > 0xdfff) {
60
+ invalid('Unpaired UTF-16 high surrogate', 'encode');
61
+ }
62
+ }
63
+ else if (code >= 0xdc00 && code <= 0xdfff) {
64
+ invalid('Unpaired UTF-16 low surrogate', 'encode');
65
+ }
66
+ }
67
+ }
68
+ function memoryView(memory, pointer, length) {
69
+ if (!isIndex(pointer, memory.buffer.byteLength) || !isIndex(length, memory.buffer.byteLength - pointer)) {
70
+ throw new ZymbolError('WASM_ABI_MISMATCH', 'initialize', 'Invalid WebAssembly buffer bounds');
71
+ }
72
+ return new Uint8Array(memory.buffer, pointer, length);
73
+ }
74
+ export function createEngine(wasm, limits = {}) {
75
+ const maxOutputBytes = limits.maxOutputBytes ?? (16 * 1024 * 1024);
76
+ const maxImageSide = limits.maxImageSide ?? 4096;
77
+ if (!Number.isSafeInteger(maxOutputBytes) || maxOutputBytes < 1 || maxOutputBytes > 64 * 1024 * 1024 ||
78
+ !Number.isSafeInteger(maxImageSide) || maxImageSide < 1 || maxImageSide > 65535) {
79
+ throw new ZymbolError('INVALID_OPTIONS', 'initialize', 'Invalid output limits');
80
+ }
81
+ const bridge = wasm;
82
+ const functions = [
83
+ 'zymbol_input_ptr', 'zymbol_grid_ptr', 'zymbol_payload_ptr',
84
+ 'zymbol_meta_ptr', 'zymbol_input_capacity', 'zymbol_grid_capacity',
85
+ 'zymbol_encode', 'zymbol_decode', 'zymbol_render',
86
+ 'zymbol_output_ptr', 'zymbol_output_len', 'zymbol_output_side',
87
+ 'zymbol_structured_append_parity', 'zymbol_controls_ptr', 'zymbol_encode_segments',
88
+ ];
89
+ for (const name of functions) {
90
+ if (typeof bridge[name] !== 'function') {
91
+ throw new ZymbolError('WASM_ABI_MISMATCH', 'initialize', `Missing WebAssembly export: ${name}`);
92
+ }
93
+ }
94
+ const capacity = bridge.zymbol_input_capacity();
95
+ const gridCapacity = bridge.zymbol_grid_capacity();
96
+ if (!isIndex(capacity, 1 << 20) || capacity < 8192 || gridCapacity < 177 * 177) {
97
+ throw new ZymbolError('WASM_ABI_MISMATCH', 'initialize', 'Invalid WebAssembly workspace capacity');
98
+ }
99
+ let alive = true;
100
+ function call(operation, run) {
101
+ if (!alive)
102
+ throw new ZymbolError('INSTANCE_UNUSABLE', operation, 'WebAssembly instance is unusable after a trap');
103
+ let code;
104
+ try {
105
+ code = run();
106
+ }
107
+ catch (cause) {
108
+ alive = false;
109
+ throw new ZymbolError('WASM_TRAP', operation, 'WebAssembly operation trapped', { cause });
110
+ }
111
+ if (code === 0)
112
+ return;
113
+ const errorCodes = {
114
+ 1: 'INVALID_INPUT', 2: 'INVALID_OPTIONS', 3: 'DATA_TOO_LONG',
115
+ 4: 'DECODE_FAILED', 5: 'INTERNAL_ERROR',
116
+ 6: 'OUTPUT_LIMIT', 7: 'OUT_OF_MEMORY',
117
+ };
118
+ const errorCode = errorCodes[code];
119
+ if (!errorCode) {
120
+ alive = false;
121
+ throw new ZymbolError('WASM_ABI_MISMATCH', operation, `Unknown WebAssembly status: ${code}`);
122
+ }
123
+ throw new ZymbolError(errorCode, operation, `Zymbol ${operation} failed (${errorCode})`);
124
+ }
125
+ function metadata() {
126
+ const bytes = memoryView(bridge.memory, bridge.zymbol_meta_ptr(), META_FIELDS * 4);
127
+ const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
128
+ return Array.from({ length: META_FIELDS }, (_, i) => view.getUint32(i * 4, true));
129
+ }
130
+ function getField(fields, index) {
131
+ const value = fields[index];
132
+ if (value === undefined)
133
+ throw new ZymbolError('WASM_ABI_MISMATCH', 'initialize', 'Incomplete metadata');
134
+ return value;
135
+ }
136
+ function encode(input, options = {}) {
137
+ if (typeof input !== 'string' && !(input instanceof Uint8Array))
138
+ invalid('Expected a string or Uint8Array', 'encode');
139
+ if (!options || typeof options !== 'object')
140
+ invalidOption('Expected encode options');
141
+ const micro = options.family === 'micro';
142
+ if (options.family !== undefined && options.family !== 'qr' && !micro)
143
+ invalidOption('Invalid symbol family');
144
+ if (options.version !== undefined && (options.minVersion !== undefined || options.maxVersion !== undefined)) {
145
+ invalidOption('Exact version cannot be combined with version ranges');
146
+ }
147
+ if (micro && ('fnc1' in options || 'structuredAppend' in options))
148
+ invalidOption('Micro QR does not support QR control headers');
149
+ const first = versionNumber(options.version ?? options.minVersion, micro, 1);
150
+ const last = versionNumber(options.version ?? options.maxVersion, micro, micro ? 4 : 40);
151
+ if (first > last)
152
+ invalidOption('Invalid version range');
153
+ const level = options.errorCorrection ?? (micro ? 'L' : 'M');
154
+ const ec = EC_LEVELS.indexOf(level);
155
+ if (ec < 0 || (micro && ec > 2))
156
+ invalidOption('Invalid error correction level');
157
+ const boost = options.boostErrorCorrection ?? true;
158
+ if (typeof boost !== 'boolean')
159
+ invalidOption('boostErrorCorrection must be boolean');
160
+ const mask = options.mask ?? -1;
161
+ if (mask !== -1 && !isIndex(mask, micro ? 3 : 7))
162
+ invalidOption('Invalid mask');
163
+ if (typeof input === 'string') {
164
+ validateUnicode(input);
165
+ if (micro && /[^\x00-\x7f]/.test(input))
166
+ invalid('Micro QR text must be ASCII', 'encode');
167
+ }
168
+ const bytes = typeof input === 'string' ? new TextEncoder().encode(input) : input;
169
+ if (bytes.byteLength > capacity)
170
+ throw new ZymbolError('DATA_TOO_LONG', 'encode', 'Payload exceeds WebAssembly input workspace');
171
+ memoryView(bridge.memory, bridge.zymbol_input_ptr(), bytes.byteLength).set(bytes);
172
+ const headers = micro ? [0, 0, 0, 0, 0, 0] : qrHeaderFields(options.fnc1, options.structuredAppend);
173
+ const headerMemory = memoryView(bridge.memory, bridge.zymbol_controls_ptr() + 6 * 4, 6 * 4);
174
+ const headerView = new DataView(headerMemory.buffer, headerMemory.byteOffset, headerMemory.byteLength);
175
+ headers.forEach((value, index) => headerView.setUint32(index * 4, value, true));
176
+ call('encode', () => bridge.zymbol_encode(bytes.byteLength, typeof input === 'string' ? 0 : 1, Number(micro), first, last, ec, Number(boost), mask));
177
+ return readSymbol(micro, first, last);
178
+ }
179
+ function readSymbol(micro, first, last) {
180
+ const fields = metadata();
181
+ const size = getField(fields, 0);
182
+ const version = getField(fields, 1);
183
+ const outputLevel = getField(fields, 2);
184
+ const outputMask = getField(fields, 3);
185
+ const outputFamily = getField(fields, 4);
186
+ if ((micro ? size < 11 || size > 17 || (size % 2) === 0 : size < 21 || size > 177 || (size - 17) % 4 !== 0)
187
+ || size * size > gridCapacity || version < first || version > last
188
+ || size !== (micro ? 9 + 2 * version : 17 + 4 * version)
189
+ || !isIndex(outputLevel, micro ? 2 : 3) || !isIndex(outputMask, micro ? 3 : 7)
190
+ || outputFamily !== Number(micro)) {
191
+ throw new ZymbolError('WASM_ABI_MISMATCH', 'encode', 'WebAssembly returned invalid symbol metadata');
192
+ }
193
+ const modules = memoryView(bridge.memory, bridge.zymbol_grid_ptr(), size * size).slice();
194
+ if (modules.some(cell => cell > 1))
195
+ throw new ZymbolError('WASM_ABI_MISMATCH', 'encode', 'WebAssembly returned non-binary modules');
196
+ return micro
197
+ ? { family: 'micro', size, version: MICRO_VERSIONS[version - 1], errorCorrection: EC_LEVELS[outputLevel], mask: outputMask, modules }
198
+ : { family: 'qr', size, version: version, errorCorrection: EC_LEVELS[outputLevel], mask: outputMask, modules };
199
+ }
200
+ function encodeSegments(segments, options) {
201
+ if (!Array.isArray(segments) || segments.length > 128 || !options || typeof options !== 'object') {
202
+ throw new ZymbolError('INVALID_OPTIONS', 'encodeSegments', 'Expected at most 128 segments and encoding options');
203
+ }
204
+ const micro = options.family === 'micro';
205
+ const first = versionNumber(options.version ?? (micro ? options.minVersion : undefined), micro, 1);
206
+ const last = versionNumber(options.version ?? (micro ? options.maxVersion : undefined), micro, micro ? 4 : first);
207
+ if (first > last || (!micro && !options.version))
208
+ invalidOption('QR manual segments require an exact version');
209
+ const level = EC_LEVELS.indexOf((options.errorCorrection ?? (micro ? 'L' : 'M')));
210
+ if (level < 0 || (micro && level > 2))
211
+ invalidOption('Invalid error correction level');
212
+ const mask = options.mask ?? -1;
213
+ if (mask !== -1 && !isIndex(mask, micro ? 3 : 7))
214
+ invalidOption('Invalid mask');
215
+ if (!micro && options.errorCorrection === undefined)
216
+ invalidOption('QR manual segments require error correction');
217
+ const boost = micro && (options.boostErrorCorrection ?? true) ? 1 : 0;
218
+ const fnc1 = !micro ? options.fnc1 : undefined;
219
+ const structured = !micro ? options.structuredAppend : undefined;
220
+ let fnc1Kind = 0;
221
+ let indicator = 0;
222
+ if (fnc1 !== undefined) {
223
+ if (fnc1.position === 'first')
224
+ fnc1Kind = 1;
225
+ else if (fnc1.position === 'second') {
226
+ fnc1Kind = 2;
227
+ const raw = fnc1.applicationIndicator;
228
+ if (typeof raw === 'number' && isIndex(raw, 99))
229
+ indicator = raw;
230
+ else if (typeof raw === 'string' && /^[A-Za-z]$/.test(raw))
231
+ indicator = raw.charCodeAt(0) + 100;
232
+ else
233
+ invalidOption('Invalid FNC1 application indicator');
234
+ }
235
+ else
236
+ invalidOption('Invalid FNC1 position');
237
+ }
238
+ if (structured !== undefined && (!isIndex(structured.index, 15) || !isIndex(structured.count, 16)
239
+ || structured.count < 1 || structured.index >= structured.count || !isIndex(structured.parity, 255))) {
240
+ invalidOption('Invalid Structured Append header');
241
+ }
242
+ const packets = [];
243
+ let bytesNeeded = 0;
244
+ const tags = { numeric: 0, alphanumeric: 1, byte: 2, kanji: 3, eci: 4 };
245
+ for (const segment of segments) {
246
+ if (!segment || typeof segment !== 'object' || !('mode' in segment) || !(segment.mode in tags)) {
247
+ invalid('Invalid segment mode', 'encode');
248
+ }
249
+ const mode = segment.mode;
250
+ if (micro && mode === 'eci')
251
+ invalidOption('Micro QR does not support ECI');
252
+ let data;
253
+ if (mode === 'eci') {
254
+ const assignment = segment.assignment;
255
+ if (!isIndex(assignment, 999999))
256
+ invalidOption('Invalid ECI assignment');
257
+ data = new Uint8Array(4);
258
+ new DataView(data.buffer).setUint32(0, assignment, true);
259
+ }
260
+ else if (mode === 'numeric' || mode === 'alphanumeric') {
261
+ const value = segment.data;
262
+ if (typeof value !== 'string' || /[^\x00-\x7f]/.test(value))
263
+ invalid('Expected ASCII segment text', 'encode');
264
+ data = new TextEncoder().encode(value);
265
+ }
266
+ else {
267
+ data = segment.data;
268
+ if (!(data instanceof Uint8Array))
269
+ invalid('Expected bytes for byte or Kanji segment', 'encode');
270
+ }
271
+ if (data.length > 65535)
272
+ throw new ZymbolError('DATA_TOO_LONG', 'encodeSegments', 'Segment exceeds packet size');
273
+ const packet = new Uint8Array(data.length + 3);
274
+ packet[0] = tags[mode];
275
+ packet[1] = data.length & 255;
276
+ packet[2] = data.length >>> 8;
277
+ packet.set(data, 3);
278
+ packets.push(packet);
279
+ bytesNeeded += packet.length;
280
+ }
281
+ if (bytesNeeded > capacity)
282
+ throw new ZymbolError('DATA_TOO_LONG', 'encodeSegments', 'Segments exceed WASM input workspace');
283
+ const data = memoryView(bridge.memory, bridge.zymbol_input_ptr(), bytesNeeded);
284
+ let offset = 0;
285
+ for (const packet of packets) {
286
+ data.set(packet, offset);
287
+ offset += packet.length;
288
+ }
289
+ const control = memoryView(bridge.memory, bridge.zymbol_controls_ptr(), 14 * 4);
290
+ const view = new DataView(control.buffer, control.byteOffset, control.byteLength);
291
+ const values = [Number(micro), first, last, level, mask < 0 ? 0xffffffff : mask, boost,
292
+ fnc1Kind, indicator, structured ? 1 : 0, structured?.index ?? 0,
293
+ structured?.count ?? 0, structured?.parity ?? 0, bytesNeeded, segments.length];
294
+ values.forEach((value, index) => view.setUint32(index * 4, value, true));
295
+ call('encodeSegments', () => bridge.zymbol_encode_segments());
296
+ return readSymbol(micro, first, last);
297
+ }
298
+ function decode(grid) {
299
+ if (!grid || typeof grid !== 'object' || !isIndex(grid.size, 177))
300
+ invalid('Expected a sampled module grid', 'decode');
301
+ const side = grid.size;
302
+ if (!(side === 11 || side === 13 || side === 15 || side === 17 || (side >= 21 && (side - 17) % 4 === 0))) {
303
+ invalid('Invalid symbol size', 'decode');
304
+ }
305
+ if (!(grid.modules instanceof Uint8Array) || grid.modules.byteLength !== side * side || side * side > gridCapacity) {
306
+ invalid('Expected exactly size x size modules', 'decode');
307
+ }
308
+ if (grid.modules.some(value => value > 1))
309
+ invalid('Module values must be 0 or 1', 'decode');
310
+ memoryView(bridge.memory, bridge.zymbol_grid_ptr(), grid.modules.length).set(grid.modules);
311
+ call('decode', () => bridge.zymbol_decode(side));
312
+ const fields = metadata();
313
+ const family = getField(fields, 4);
314
+ const version = getField(fields, 1);
315
+ const level = getField(fields, 2);
316
+ const mask = getField(fields, 3);
317
+ const length = getField(fields, 5);
318
+ if (getField(fields, 0) !== side || (family !== 0 && family !== 1) || !isIndex(level, family ? 2 : 3)
319
+ || !isIndex(mask, family ? 3 : 7) || length > capacity
320
+ || (family === 0 && (version < 1 || version > 40 || 17 + version * 4 !== side))
321
+ || (family === 1 && (version < 1 || version > 4 || 9 + version * 2 !== side))) {
322
+ throw new ZymbolError('WASM_ABI_MISMATCH', 'decode', 'WebAssembly returned invalid decode metadata');
323
+ }
324
+ const bytes = memoryView(bridge.memory, bridge.zymbol_payload_ptr(), length).slice();
325
+ const mirrored = getField(fields, 15);
326
+ const reversed = getField(fields, 16);
327
+ if (!isIndex(mirrored, 1) || !isIndex(reversed, 1)) {
328
+ throw new ZymbolError('WASM_ABI_MISMATCH', 'decode', 'Invalid decoded transform metadata');
329
+ }
330
+ const common = {
331
+ bytes,
332
+ mirrored: mirrored === 1,
333
+ reflectanceReversed: reversed === 1,
334
+ errorsCorrected: getField(fields, 17),
335
+ };
336
+ if (family === 1) {
337
+ return { ...common, family: 'micro', version: MICRO_VERSIONS[version - 1],
338
+ errorCorrection: EC_LEVELS[level], mask: mask, symbologyIdentifier: ']Q1' };
339
+ }
340
+ const eciKind = getField(fields, 6);
341
+ if (eciKind === 1 && !isIndex(getField(fields, 7), 999999)) {
342
+ throw new ZymbolError('WASM_ABI_MISMATCH', 'decode', 'Invalid ECI assignment');
343
+ }
344
+ const eci = eciKind === 0 ? { kind: 'none' }
345
+ : eciKind === 1 ? { kind: 'assignment', assignment: getField(fields, 7) }
346
+ : eciKind === 2 ? { kind: 'multiple' } : invalid('Invalid decoded ECI metadata', 'decode');
347
+ const fnc1Kind = getField(fields, 8);
348
+ const indicator = getField(fields, 9);
349
+ if (fnc1Kind === 2 && !(isIndex(indicator, 99) || (indicator >= 165 && indicator <= 190) || (indicator >= 197 && indicator <= 222))) {
350
+ throw new ZymbolError('WASM_ABI_MISMATCH', 'decode', 'Invalid FNC1 indicator');
351
+ }
352
+ const appendFlag = getField(fields, 10);
353
+ const appendIndex = getField(fields, 11);
354
+ const appendCount = getField(fields, 12);
355
+ const appendParity = getField(fields, 13);
356
+ if (!isIndex(appendFlag, 1) || (appendFlag === 1
357
+ && (!isIndex(appendIndex, 15) || !isIndex(appendCount, 16) || appendCount < 1
358
+ || appendIndex >= appendCount || !isIndex(appendParity, 255)))) {
359
+ throw new ZymbolError('WASM_ABI_MISMATCH', 'decode', 'Invalid Structured Append metadata');
360
+ }
361
+ const fnc1 = fnc1Kind === 0 ? null : fnc1Kind === 1 ? { position: 'first' }
362
+ : fnc1Kind === 2 ? { position: 'second', applicationIndicator: indicator <= 99 ? indicator : String.fromCharCode(indicator - 100) }
363
+ : invalid('Invalid decoded FNC1 metadata', 'decode');
364
+ const structuredAppend = appendFlag === 0 ? null : {
365
+ index: appendIndex, count: appendCount, parity: appendParity,
366
+ };
367
+ const modifier = getField(fields, 14);
368
+ if (!isIndex(modifier, 6) || modifier < 1)
369
+ throw new ZymbolError('WASM_ABI_MISMATCH', 'decode', 'Invalid symbology modifier');
370
+ return { ...common, family: 'qr', version: version, errorCorrection: EC_LEVELS[level],
371
+ mask: mask, eci, fnc1, structuredAppend,
372
+ symbologyIdentifier: `]Q${modifier}` };
373
+ }
374
+ function packRgb(rgb) {
375
+ if (rgb === undefined)
376
+ return 0;
377
+ if (!Array.isArray(rgb) || rgb.length !== 3 || !rgb.every(value => isIndex(value, 255))) {
378
+ throw new ZymbolError('INVALID_OPTIONS', 'renderPng', 'RGB must contain three integer channels from 0 to 255');
379
+ }
380
+ return rgb[0] | (rgb[1] << 8) | (rgb[2] << 16);
381
+ }
382
+ function renderBytes(symbol, format, options = {}) {
383
+ const operation = format === 0 ? 'renderSvg' : format === 1 ? 'renderPng' : 'renderRaster';
384
+ if (!symbol || (symbol.family !== 'qr' && symbol.family !== 'micro') || !(symbol.modules instanceof Uint8Array)) {
385
+ throw new ZymbolError('INVALID_SYMBOL', operation, 'Expected a QR or Micro QR symbol');
386
+ }
387
+ const micro = symbol.family === 'micro';
388
+ const version = micro ? MICRO_VERSIONS.indexOf(symbol.version) + 1 : symbol.version;
389
+ const expectedSide = micro ? 9 + version * 2 : 17 + version * 4;
390
+ const level = EC_LEVELS.indexOf(symbol.errorCorrection);
391
+ if (version < 1 || version > (micro ? 4 : 40) || level < 0 || (micro && level > 2)
392
+ || !isIndex(symbol.mask, micro ? 3 : 7) || symbol.size !== expectedSide
393
+ || symbol.modules.length !== expectedSide * expectedSide || symbol.modules.some(value => value > 1)) {
394
+ throw new ZymbolError('INVALID_SYMBOL', operation, 'Invalid symbol geometry or metadata');
395
+ }
396
+ const quiet = options.quietZone ?? -1;
397
+ const scale = 'scale' in options ? (options.scale ?? (format === 1 ? 4 : 1)) : 1;
398
+ const intrinsic = 'size' in options ? (options.size ?? 0) : 0;
399
+ if (!Number.isInteger(quiet) || quiet < -1 || quiet > 65535 || (format !== 0 && (!Number.isInteger(scale) || scale < 1 || scale > 65535))
400
+ || !isIndex(intrinsic, 0xffffffff)) {
401
+ throw new ZymbolError('INVALID_OPTIONS', operation, 'Invalid rendering dimensions');
402
+ }
403
+ const foreground = packRgb(options.foreground);
404
+ const background = options.background === null ? -1 : options.background === undefined ? 0xffffff : packRgb(options.background);
405
+ const reversed = options.reflectance === 'reversed' ? 1 : 0;
406
+ if ((options.reflectance !== undefined && options.reflectance !== 'normal' && options.reflectance !== 'reversed')
407
+ || (reversed === 1 && background === -1)) {
408
+ throw new ZymbolError('INVALID_OPTIONS', operation, 'Invalid reflectance settings');
409
+ }
410
+ memoryView(bridge.memory, bridge.zymbol_grid_ptr(), symbol.modules.length).set(symbol.modules);
411
+ call(operation, () => bridge.zymbol_render(format, symbol.size, Number(micro), version, level, symbol.mask, scale, quiet, foreground, background, reversed, intrinsic, maxOutputBytes, maxImageSide));
412
+ const length = bridge.zymbol_output_len();
413
+ const side = bridge.zymbol_output_side();
414
+ if (!isIndex(length, maxOutputBytes) || (format !== 0 && (!isIndex(side, maxImageSide) || side < 1))
415
+ || (format === 2 && length !== side * side * 4)) {
416
+ throw new ZymbolError('WASM_ABI_MISMATCH', operation, 'Invalid WASM rendering output dimensions');
417
+ }
418
+ return { bytes: memoryView(bridge.memory, bridge.zymbol_output_ptr(), length).slice(), side };
419
+ }
420
+ function renderSvg(symbol, options) {
421
+ return new TextDecoder('utf-8', { fatal: true }).decode(renderBytes(symbol, 0, options).bytes);
422
+ }
423
+ function renderPng(symbol, options) {
424
+ return renderBytes(symbol, 1, options).bytes;
425
+ }
426
+ function renderRaster(symbol, options) {
427
+ const { bytes, side } = renderBytes(symbol, 2, options);
428
+ return { width: side, height: side, data: Uint8ClampedArray.from(bytes) };
429
+ }
430
+ function structuredAppendParity(bytes) {
431
+ if (!(bytes instanceof Uint8Array))
432
+ invalid('Expected bytes', 'encode');
433
+ if (bytes.byteLength > capacity)
434
+ throw new ZymbolError('DATA_TOO_LONG', 'structuredAppendParity', 'Payload exceeds WebAssembly input workspace');
435
+ memoryView(bridge.memory, bridge.zymbol_input_ptr(), bytes.length).set(bytes);
436
+ const parity = bridge.zymbol_structured_append_parity(bytes.length);
437
+ if (!isIndex(parity, 255))
438
+ throw new ZymbolError('WASM_ABI_MISMATCH', 'structuredAppendParity', 'Invalid native parity result');
439
+ return parity;
440
+ }
441
+ function svg(input, options) {
442
+ return renderSvg(encode(input, options?.encode), options?.render);
443
+ }
444
+ function png(input, options) {
445
+ return renderPng(encode(input, options?.encode), options?.render);
446
+ }
447
+ return { encode, encodeSegments, decode, renderSvg, renderPng, renderRaster, svg, png, structuredAppendParity };
448
+ }
449
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export type ZymbolErrorCode = 'INVALID_INPUT' | 'INVALID_OPTIONS' | 'DATA_TOO_LONG' | 'INVALID_SYMBOL' | 'DECODE_FAILED' | 'OUTPUT_LIMIT' | 'OUT_OF_MEMORY' | 'WASM_LOAD_FAILED' | 'WASM_ABI_MISMATCH' | 'WASM_TRAP' | 'INSTANCE_UNUSABLE' | 'INTERNAL_ERROR';
2
+ export type Operation = 'initialize' | 'encode' | 'encodeSegments' | 'decode' | 'renderSvg' | 'renderPng' | 'renderRaster' | 'svg' | 'png' | 'structuredAppendParity';
3
+ export declare class ZymbolError extends Error {
4
+ readonly code: ZymbolErrorCode;
5
+ readonly operation: Operation;
6
+ readonly name = "ZymbolError";
7
+ readonly reason: string | undefined;
8
+ constructor(code: ZymbolErrorCode, operation: Operation, message: string, options?: {
9
+ readonly reason?: string;
10
+ readonly cause?: unknown;
11
+ });
12
+ }
13
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GACvB,eAAe,GACf,iBAAiB,GACjB,eAAe,GACf,gBAAgB,GAChB,eAAe,GACf,cAAc,GACd,eAAe,GACf,kBAAkB,GAClB,mBAAmB,GACnB,WAAW,GACX,mBAAmB,GACnB,gBAAgB,CAAC;AAErB,MAAM,MAAM,SAAS,GACjB,YAAY,GAAG,QAAQ,GAAG,gBAAgB,GAAG,QAAQ,GACrD,WAAW,GAAG,WAAW,GAAG,cAAc,GAC1C,KAAK,GAAG,KAAK,GAAG,wBAAwB,CAAC;AAE7C,qBAAa,WAAY,SAAQ,KAAK;IAKlC,QAAQ,CAAC,IAAI,EAAE,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,SAAS;IAL/B,SAAkB,IAAI,iBAAiB;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAEpC,YACW,IAAI,EAAE,eAAe,EACrB,SAAS,EAAE,SAAS,EAC7B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO,EAIrE;CACF"}
package/dist/errors.js ADDED
@@ -0,0 +1,13 @@
1
+ export class ZymbolError extends Error {
2
+ code;
3
+ operation;
4
+ name = 'ZymbolError';
5
+ reason;
6
+ constructor(code, operation, message, options = {}) {
7
+ super(message, { cause: options.cause });
8
+ this.code = code;
9
+ this.operation = operation;
10
+ this.reason = options.reason;
11
+ }
12
+ }
13
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAmBA,MAAM,OAAO,WAAY,SAAQ,KAAK;IAKzB,IAAI;IACJ,SAAS;IALF,IAAI,GAAG,aAAa,CAAC;IAC9B,MAAM,CAAqB;IAEpC,YACW,IAAqB,EACrB,SAAoB,EAC7B,OAAe,EACf,OAAO,GAA2D,EAAE;QAEpE,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;oBALhC,IAAI;yBACJ,SAAS;QAKlB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC/B,CAAC;CACF"}
package/dist/node.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ import type { InitOptions, Zymbol } from './types.js';
2
+ export { ZymbolError } from './errors.js';
3
+ export type * from './types.js';
4
+ /** Load the packaged WASM asset from disk and create an isolated runtime. */
5
+ export declare function createZymbol(options?: InitOptions): Promise<Zymbol>;
6
+ //# sourceMappingURL=node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGtD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,mBAAmB,YAAY,CAAC;AAiBhC,6EAA6E;AAC7E,wBAAsB,YAAY,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAI7E"}
package/dist/node.js ADDED
@@ -0,0 +1,23 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { createEngine } from './engine.js';
3
+ export { ZymbolError } from './errors.js';
4
+ import { compileWasm, instantiateWasm } from './wasm.js';
5
+ let defaultModule;
6
+ async function loadDefault() {
7
+ if (!defaultModule) {
8
+ defaultModule = readFile(new URL('./zymbol.wasm', import.meta.url))
9
+ .then(bytes => compileWasm({ wasm: bytes }))
10
+ .catch(error => {
11
+ defaultModule = undefined;
12
+ throw error;
13
+ });
14
+ }
15
+ return defaultModule;
16
+ }
17
+ /** Load the packaged WASM asset from disk and create an isolated runtime. */
18
+ export async function createZymbol(options = {}) {
19
+ const explicit = 'wasm' in options || 'module' in options;
20
+ const module = explicit ? await compileWasm(options) : await loadDefault();
21
+ return createEngine(await instantiateWasm(module), options.limits);
22
+ }
23
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEzD,IAAI,aAAsD,CAAC;AAE3D,KAAK,UAAU,WAAW;IACxB,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,aAAa,GAAG,QAAQ,CAAC,IAAI,GAAG,CAAC,eAAe,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;aAChE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;aAC3C,KAAK,CAAC,KAAK,CAAC,EAAE;YACb,aAAa,GAAG,SAAS,CAAC;YAC1B,MAAM,KAAK,CAAC;QACd,CAAC,CAAC,CAAC;IACP,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,6EAA6E;AAC7E,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAO,GAAgB,EAAE;IAC1D,MAAM,QAAQ,GAAG,MAAM,IAAI,OAAO,IAAI,QAAQ,IAAI,OAAO,CAAC;IAC1D,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,WAAW,CAAC,OAAmB,CAAC,CAAC,CAAC,CAAC,MAAM,WAAW,EAAE,CAAC;IACvF,OAAO,YAAY,CAAC,MAAM,eAAe,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AACrE,CAAC"}