@ac-kit/format-osc 0.0.0-stage → 0.1.1
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 +40 -0
- package/LICENSE +28 -0
- package/README.md +132 -2
- package/dist/errors.d.ts +34 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +40 -0
- package/dist/errors.js.map +1 -0
- package/dist/framing/_decode-framed-packet.d.ts +9 -0
- package/dist/framing/_decode-framed-packet.d.ts.map +1 -0
- package/dist/framing/_decode-framed-packet.js +23 -0
- package/dist/framing/_decode-framed-packet.js.map +1 -0
- package/dist/framing/osc-datagram-codec.d.ts +17 -0
- package/dist/framing/osc-datagram-codec.d.ts.map +1 -0
- package/dist/framing/osc-datagram-codec.js +21 -0
- package/dist/framing/osc-datagram-codec.js.map +1 -0
- package/dist/framing/osc-datagram-decoder.d.ts +22 -0
- package/dist/framing/osc-datagram-decoder.d.ts.map +1 -0
- package/dist/framing/osc-datagram-decoder.js +26 -0
- package/dist/framing/osc-datagram-decoder.js.map +1 -0
- package/dist/framing/osc-datagram-encoder.d.ts +8 -0
- package/dist/framing/osc-datagram-encoder.d.ts.map +1 -0
- package/dist/framing/osc-datagram-encoder.js +9 -0
- package/dist/framing/osc-datagram-encoder.js.map +1 -0
- package/dist/framing/osc-size-prefixed-codec.d.ts +19 -0
- package/dist/framing/osc-size-prefixed-codec.d.ts.map +1 -0
- package/dist/framing/osc-size-prefixed-codec.js +23 -0
- package/dist/framing/osc-size-prefixed-codec.js.map +1 -0
- package/dist/framing/osc-size-prefixed-decoder.d.ts +40 -0
- package/dist/framing/osc-size-prefixed-decoder.d.ts.map +1 -0
- package/dist/framing/osc-size-prefixed-decoder.js +59 -0
- package/dist/framing/osc-size-prefixed-decoder.js.map +1 -0
- package/dist/framing/osc-size-prefixed-encoder.d.ts +10 -0
- package/dist/framing/osc-size-prefixed-encoder.d.ts.map +1 -0
- package/dist/framing/osc-size-prefixed-encoder.js +20 -0
- package/dist/framing/osc-size-prefixed-encoder.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/packet/_bundle-marker.d.ts +3 -0
- package/dist/packet/_bundle-marker.d.ts.map +1 -0
- package/dist/packet/_bundle-marker.js +3 -0
- package/dist/packet/_bundle-marker.js.map +1 -0
- package/dist/packet/_osc-writer.d.ts +31 -0
- package/dist/packet/_osc-writer.d.ts.map +1 -0
- package/dist/packet/_osc-writer.js +72 -0
- package/dist/packet/_osc-writer.js.map +1 -0
- package/dist/packet/_read-osc-packet.d.ts +19 -0
- package/dist/packet/_read-osc-packet.d.ts.map +1 -0
- package/dist/packet/_read-osc-packet.js +290 -0
- package/dist/packet/_read-osc-packet.js.map +1 -0
- package/dist/packet/_write-osc-packet.d.ts +12 -0
- package/dist/packet/_write-osc-packet.d.ts.map +1 -0
- package/dist/packet/_write-osc-packet.js +155 -0
- package/dist/packet/_write-osc-packet.js.map +1 -0
- package/dist/packet/decode-osc-packet.d.ts +48 -0
- package/dist/packet/decode-osc-packet.d.ts.map +1 -0
- package/dist/packet/decode-osc-packet.js +39 -0
- package/dist/packet/decode-osc-packet.js.map +1 -0
- package/dist/packet/encode-osc-packet.d.ts +32 -0
- package/dist/packet/encode-osc-packet.d.ts.map +1 -0
- package/dist/packet/encode-osc-packet.js +37 -0
- package/dist/packet/encode-osc-packet.js.map +1 -0
- package/dist/packet/osc-packet.d.ts +104 -0
- package/dist/packet/osc-packet.d.ts.map +1 -0
- package/dist/packet/osc-packet.js +2 -0
- package/dist/packet/osc-packet.js.map +1 -0
- package/dist/time-tag/_ntp.d.ts +13 -0
- package/dist/time-tag/_ntp.d.ts.map +1 -0
- package/dist/time-tag/_ntp.js +19 -0
- package/dist/time-tag/_ntp.js.map +1 -0
- package/dist/time-tag/osc-time-tag-from-date.d.ts +29 -0
- package/dist/time-tag/osc-time-tag-from-date.d.ts.map +1 -0
- package/dist/time-tag/osc-time-tag-from-date.js +48 -0
- package/dist/time-tag/osc-time-tag-from-date.js.map +1 -0
- package/dist/time-tag/osc-time-tag-to-date.d.ts +21 -0
- package/dist/time-tag/osc-time-tag-to-date.d.ts.map +1 -0
- package/dist/time-tag/osc-time-tag-to-date.js +26 -0
- package/dist/time-tag/osc-time-tag-to-date.js.map +1 -0
- package/dist/time-tag/osc-time-tag.d.ts +29 -0
- package/dist/time-tag/osc-time-tag.d.ts.map +1 -0
- package/dist/time-tag/osc-time-tag.js +16 -0
- package/dist/time-tag/osc-time-tag.js.map +1 -0
- package/package.json +60 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"osc-size-prefixed-encoder.d.ts","sourceRoot":"","sources":["../../src/framing/osc-size-prefixed-encoder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAInD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD;;;;;GAKG;AACH,wBAAgB,4BAA4B,IAAI,OAAO,CAAC,SAAS,CAAC,CAWjE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { OscWriter_ } from "../packet/_osc-writer.js";
|
|
2
|
+
import { writeOscPacket_ } from "../packet/_write-osc-packet.js";
|
|
3
|
+
/**
|
|
4
|
+
* Creates the write half of OSC 1.0's stream framing: each packet preceded by
|
|
5
|
+
* its size as a big-endian int32, in one buffer.
|
|
6
|
+
*
|
|
7
|
+
* @throws {RangeError} From `encode`, as {@link encodeOscPacket}.
|
|
8
|
+
*/
|
|
9
|
+
export function createOscSizePrefixedEncoder() {
|
|
10
|
+
return {
|
|
11
|
+
encode(packet) {
|
|
12
|
+
const writer = new OscWriter_();
|
|
13
|
+
const sizeOffset = writer.allocate(4);
|
|
14
|
+
writeOscPacket_(writer, packet);
|
|
15
|
+
writer.patchUint32(sizeOffset, writer.length - 4);
|
|
16
|
+
return writer.finish();
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=osc-size-prefixed-encoder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"osc-size-prefixed-encoder.js","sourceRoot":"","sources":["../../src/framing/osc-size-prefixed-encoder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAGjE;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B;IAC3C,OAAO;QACN,MAAM,CAAC,MAAiB;YACvB,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAChC,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACtC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAChC,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAElD,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC;QACxB,CAAC;KACD,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export * from "./errors.js";
|
|
2
|
+
export * from "./framing/osc-datagram-codec.js";
|
|
3
|
+
export * from "./framing/osc-datagram-decoder.js";
|
|
4
|
+
export * from "./framing/osc-datagram-encoder.js";
|
|
5
|
+
export * from "./framing/osc-size-prefixed-codec.js";
|
|
6
|
+
export * from "./framing/osc-size-prefixed-decoder.js";
|
|
7
|
+
export * from "./framing/osc-size-prefixed-encoder.js";
|
|
8
|
+
export * from "./packet/decode-osc-packet.js";
|
|
9
|
+
export * from "./packet/encode-osc-packet.js";
|
|
10
|
+
export * from "./packet/osc-packet.js";
|
|
11
|
+
export * from "./time-tag/osc-time-tag-from-date.js";
|
|
12
|
+
export * from "./time-tag/osc-time-tag-to-date.js";
|
|
13
|
+
export * from "./time-tag/osc-time-tag.js";
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,sCAAsC,CAAC;AACrD,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sCAAsC,CAAC;AACrD,cAAc,oCAAoC,CAAC;AACnD,cAAc,4BAA4B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export * from "./errors.js";
|
|
2
|
+
export * from "./framing/osc-datagram-codec.js";
|
|
3
|
+
export * from "./framing/osc-datagram-decoder.js";
|
|
4
|
+
export * from "./framing/osc-datagram-encoder.js";
|
|
5
|
+
export * from "./framing/osc-size-prefixed-codec.js";
|
|
6
|
+
export * from "./framing/osc-size-prefixed-decoder.js";
|
|
7
|
+
export * from "./framing/osc-size-prefixed-encoder.js";
|
|
8
|
+
export * from "./packet/decode-osc-packet.js";
|
|
9
|
+
export * from "./packet/encode-osc-packet.js";
|
|
10
|
+
export * from "./packet/osc-packet.js";
|
|
11
|
+
export * from "./time-tag/osc-time-tag-from-date.js";
|
|
12
|
+
export * from "./time-tag/osc-time-tag-to-date.js";
|
|
13
|
+
export * from "./time-tag/osc-time-tag.js";
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,sCAAsC,CAAC;AACrD,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sCAAsC,CAAC;AACrD,cAAc,oCAAoC,CAAC;AACnD,cAAc,4BAA4B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_bundle-marker.d.ts","sourceRoot":"","sources":["../../src/packet/_bundle-marker.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,eAAO,MAAM,cAAc,yBAS1B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_bundle-marker.js","sourceRoot":"","sources":["../../src/packet/_bundle-marker.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC,EAAE,CAC1C,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,CACJ,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A growable big-endian byte buffer for the OSC encoder.
|
|
3
|
+
*
|
|
4
|
+
* Doubling growth keeps a whole packet at one amortised O(n) copy. The size of
|
|
5
|
+
* a bundle element is only known once it is written, so its prefix is reserved
|
|
6
|
+
* and patched afterwards rather than measured in a separate pass that would
|
|
7
|
+
* have to agree with this one.
|
|
8
|
+
*
|
|
9
|
+
* Bytes past `length` are never written before they are allocated, so every
|
|
10
|
+
* allocation arrives zeroed and padding needs no explicit write.
|
|
11
|
+
*/
|
|
12
|
+
export declare class OscWriter_ {
|
|
13
|
+
private bytes;
|
|
14
|
+
private length_;
|
|
15
|
+
get length(): number;
|
|
16
|
+
/** Reserves `count` bytes and returns their offset. */
|
|
17
|
+
allocate(count: number): number;
|
|
18
|
+
writeUint32(value: number): void;
|
|
19
|
+
writeUint64(value: bigint): void;
|
|
20
|
+
writeFloat32(value: number): void;
|
|
21
|
+
writeFloat64(value: number): void;
|
|
22
|
+
writeBytes4(byte0: number, byte1: number, byte2: number, byte3: number): void;
|
|
23
|
+
patchUint32(offset: number, value: number): void;
|
|
24
|
+
/**
|
|
25
|
+
* Writes `data`, then `terminator` NUL bytes, then NUL bytes up to the next
|
|
26
|
+
* multiple of 4: an OSC-string with `terminator` 1, a blob's data with 0.
|
|
27
|
+
*/
|
|
28
|
+
writePadded(data: Uint8Array, terminator: 0 | 1): void;
|
|
29
|
+
finish(): Uint8Array<ArrayBuffer>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=_osc-writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_osc-writer.d.ts","sourceRoot":"","sources":["../../src/packet/_osc-writer.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;GAUG;AACH,qBAAa,UAAU;IACtB,OAAO,CAAC,KAAK,CAAsB;IAEnC,OAAO,CAAC,OAAO,CAAK;IAEpB,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,uDAAuD;IACvD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAW9B;IAID,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAG/B;IAED,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAG/B;IAED,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAGhC;IAED,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAGhC;IAED,WAAW,CACV,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACX,IAAI,CAMN;IAED,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAE/C;IAED;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAIrD;IAED,MAAM,IAAI,UAAU,CAAC,WAAW,CAAC,CAEhC;CACD"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { setBigUint64Be, setFloat32Be, setFloat64Be, setUint32Be, } from "@ac-kit/core";
|
|
2
|
+
/**
|
|
3
|
+
* A growable big-endian byte buffer for the OSC encoder.
|
|
4
|
+
*
|
|
5
|
+
* Doubling growth keeps a whole packet at one amortised O(n) copy. The size of
|
|
6
|
+
* a bundle element is only known once it is written, so its prefix is reserved
|
|
7
|
+
* and patched afterwards rather than measured in a separate pass that would
|
|
8
|
+
* have to agree with this one.
|
|
9
|
+
*
|
|
10
|
+
* Bytes past `length` are never written before they are allocated, so every
|
|
11
|
+
* allocation arrives zeroed and padding needs no explicit write.
|
|
12
|
+
*/
|
|
13
|
+
export class OscWriter_ {
|
|
14
|
+
bytes = new Uint8Array(64);
|
|
15
|
+
length_ = 0;
|
|
16
|
+
get length() {
|
|
17
|
+
return this.length_;
|
|
18
|
+
}
|
|
19
|
+
/** Reserves `count` bytes and returns their offset. */
|
|
20
|
+
allocate(count) {
|
|
21
|
+
const offset = this.length_;
|
|
22
|
+
const needed = offset + count;
|
|
23
|
+
if (needed > this.bytes.length) {
|
|
24
|
+
const grown = new Uint8Array(Math.max(needed, this.bytes.length * 2));
|
|
25
|
+
grown.set(this.bytes.subarray(0, offset));
|
|
26
|
+
this.bytes = grown;
|
|
27
|
+
}
|
|
28
|
+
this.length_ = needed;
|
|
29
|
+
return offset;
|
|
30
|
+
}
|
|
31
|
+
// Each write allocates first: `allocate` may replace `bytes`, so reading the
|
|
32
|
+
// field in the same argument list as the call would write to the old buffer.
|
|
33
|
+
writeUint32(value) {
|
|
34
|
+
const offset = this.allocate(4);
|
|
35
|
+
setUint32Be(this.bytes, offset, value);
|
|
36
|
+
}
|
|
37
|
+
writeUint64(value) {
|
|
38
|
+
const offset = this.allocate(8);
|
|
39
|
+
setBigUint64Be(this.bytes, offset, value);
|
|
40
|
+
}
|
|
41
|
+
writeFloat32(value) {
|
|
42
|
+
const offset = this.allocate(4);
|
|
43
|
+
setFloat32Be(this.bytes, offset, value);
|
|
44
|
+
}
|
|
45
|
+
writeFloat64(value) {
|
|
46
|
+
const offset = this.allocate(8);
|
|
47
|
+
setFloat64Be(this.bytes, offset, value);
|
|
48
|
+
}
|
|
49
|
+
writeBytes4(byte0, byte1, byte2, byte3) {
|
|
50
|
+
const offset = this.allocate(4);
|
|
51
|
+
this.bytes[offset] = byte0;
|
|
52
|
+
this.bytes[offset + 1] = byte1;
|
|
53
|
+
this.bytes[offset + 2] = byte2;
|
|
54
|
+
this.bytes[offset + 3] = byte3;
|
|
55
|
+
}
|
|
56
|
+
patchUint32(offset, value) {
|
|
57
|
+
setUint32Be(this.bytes, offset, value);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Writes `data`, then `terminator` NUL bytes, then NUL bytes up to the next
|
|
61
|
+
* multiple of 4: an OSC-string with `terminator` 1, a blob's data with 0.
|
|
62
|
+
*/
|
|
63
|
+
writePadded(data, terminator) {
|
|
64
|
+
// Arithmetic, not `& ~3`, which wraps for a blob near 2^31 bytes.
|
|
65
|
+
const offset = this.allocate(Math.ceil((data.length + terminator) / 4) * 4);
|
|
66
|
+
this.bytes.set(data, offset);
|
|
67
|
+
}
|
|
68
|
+
finish() {
|
|
69
|
+
return this.bytes.slice(0, this.length_);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=_osc-writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_osc-writer.js","sourceRoot":"","sources":["../../src/packet/_osc-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { OscPacket } from "./osc-packet.js";
|
|
2
|
+
/** Resolves and validates the `maxDepth` decode option. */
|
|
3
|
+
export declare function resolveMaxDepth_(maxDepth: number | undefined): number;
|
|
4
|
+
/**
|
|
5
|
+
* Decodes the whole of `bytes` as one OSC packet — the single implementation of
|
|
6
|
+
* the OSC read grammar, OSC 1.0 §"OSC Packets" through §"OSC Bundles", with the
|
|
7
|
+
* OSC 1.1 type tags.
|
|
8
|
+
*
|
|
9
|
+
* Every read is bounds-checked against the end of the enclosing packet or
|
|
10
|
+
* bundle element before it happens, so a hostile size can make it throw but
|
|
11
|
+
* never read past `bytes` or allocate more than `bytes` holds. Bundles recurse,
|
|
12
|
+
* at most `maxDepth` deep; arrays are walked iteratively against the same
|
|
13
|
+
* bound. Time is O(n) in `bytes.length`; memory is O(n) for the result plus
|
|
14
|
+
* O(maxDepth) of stack.
|
|
15
|
+
*
|
|
16
|
+
* @throws {OscPacketError} On any malformed input, with the offset in `bytes`.
|
|
17
|
+
*/
|
|
18
|
+
export declare function readOscPacket_(bytes: Uint8Array, maxDepth: number): OscPacket;
|
|
19
|
+
//# sourceMappingURL=_read-osc-packet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_read-osc-packet.d.ts","sourceRoot":"","sources":["../../src/packet/_read-osc-packet.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAIX,SAAS,EACT,MAAM,iBAAiB,CAAC;AAazB,2DAA2D;AAC3D,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAWrE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,CAE7E"}
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
import { ByteReader, bytesIsEqual, COMMA, decodeText, getBigUint64Be, getFloat32Be, getFloat64Be, getUint32Be, HASH, LEFT_SQUARE_BRACKET, NUL, RIGHT_SQUARE_BRACKET, SLASH, } from "@ac-kit/core";
|
|
2
|
+
import { OscPacketError } from "../errors.js";
|
|
3
|
+
import { BUNDLE_MARKER_ } from "./_bundle-marker.js";
|
|
4
|
+
/**
|
|
5
|
+
* Default bound on nested bundles and arrays together.
|
|
6
|
+
*
|
|
7
|
+
* Bundles recurse on the call stack, and a 64 KiB datagram could otherwise nest
|
|
8
|
+
* about 4,000 of them, or 65,000 arrays in a type tag string; no OSC
|
|
9
|
+
* implementation in use sends more than two or three levels. 32 leaves an order
|
|
10
|
+
* of magnitude of headroom for real traffic while keeping a hostile packet far
|
|
11
|
+
* below any engine's stack limit.
|
|
12
|
+
*/
|
|
13
|
+
const DEFAULT_MAX_DEPTH_ = 32;
|
|
14
|
+
/** Resolves and validates the `maxDepth` decode option. */
|
|
15
|
+
export function resolveMaxDepth_(maxDepth) {
|
|
16
|
+
if (maxDepth === undefined) {
|
|
17
|
+
return DEFAULT_MAX_DEPTH_;
|
|
18
|
+
}
|
|
19
|
+
if (!Number.isInteger(maxDepth) || maxDepth < 0) {
|
|
20
|
+
throw new RangeError(`maxDepth must be a non-negative integer, got ${maxDepth}`);
|
|
21
|
+
}
|
|
22
|
+
return maxDepth;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Decodes the whole of `bytes` as one OSC packet — the single implementation of
|
|
26
|
+
* the OSC read grammar, OSC 1.0 §"OSC Packets" through §"OSC Bundles", with the
|
|
27
|
+
* OSC 1.1 type tags.
|
|
28
|
+
*
|
|
29
|
+
* Every read is bounds-checked against the end of the enclosing packet or
|
|
30
|
+
* bundle element before it happens, so a hostile size can make it throw but
|
|
31
|
+
* never read past `bytes` or allocate more than `bytes` holds. Bundles recurse,
|
|
32
|
+
* at most `maxDepth` deep; arrays are walked iteratively against the same
|
|
33
|
+
* bound. Time is O(n) in `bytes.length`; memory is O(n) for the result plus
|
|
34
|
+
* O(maxDepth) of stack.
|
|
35
|
+
*
|
|
36
|
+
* @throws {OscPacketError} On any malformed input, with the offset in `bytes`.
|
|
37
|
+
*/
|
|
38
|
+
export function readOscPacket_(bytes, maxDepth) {
|
|
39
|
+
return readPacket_(new ByteReader(bytes), bytes.length, 0, maxDepth);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Reads the packet occupying `[reader.position, end)`; `depth` is the number of
|
|
43
|
+
* bundles enclosing it.
|
|
44
|
+
*/
|
|
45
|
+
function readPacket_(reader, end, depth, maxDepth) {
|
|
46
|
+
const start = reader.position;
|
|
47
|
+
const size = end - start;
|
|
48
|
+
if (size === 0) {
|
|
49
|
+
throw new OscPacketError("Empty OSC packet", start);
|
|
50
|
+
}
|
|
51
|
+
if (size % 4 !== 0) {
|
|
52
|
+
throw new OscPacketError(`OSC packet size ${size} is not a multiple of 4`, start);
|
|
53
|
+
}
|
|
54
|
+
const first = reader.peekByte();
|
|
55
|
+
if (first === SLASH) {
|
|
56
|
+
return readMessage_(reader, end, depth, maxDepth);
|
|
57
|
+
}
|
|
58
|
+
if (first === HASH) {
|
|
59
|
+
return readBundle_(reader, end, depth, maxDepth);
|
|
60
|
+
}
|
|
61
|
+
throw new OscPacketError('OSC packet begins with neither "/" nor "#bundle"', start);
|
|
62
|
+
}
|
|
63
|
+
function readBundle_(reader, end, depth, maxDepth) {
|
|
64
|
+
const start = reader.position;
|
|
65
|
+
if (depth >= maxDepth) {
|
|
66
|
+
throw new OscPacketError(`Bundle nesting exceeds maxDepth ${maxDepth}`, start);
|
|
67
|
+
}
|
|
68
|
+
need_(reader, end, 16, "bundle header");
|
|
69
|
+
if (!bytesIsEqual(reader.read(8), BUNDLE_MARKER_)) {
|
|
70
|
+
throw new OscPacketError('Expected "#bundle"', start);
|
|
71
|
+
}
|
|
72
|
+
const timeTag = reader.read(8);
|
|
73
|
+
const elements = [];
|
|
74
|
+
while (reader.position < end) {
|
|
75
|
+
const sizeOffset = reader.position;
|
|
76
|
+
need_(reader, end, 4, "bundle element size");
|
|
77
|
+
const size = getUint32Be(reader.read(4), 0) | 0;
|
|
78
|
+
if (size < 0 || size > end - reader.position) {
|
|
79
|
+
throw new OscPacketError(`Bundle element size ${size} does not fit the ${end - reader.position} bytes left in its bundle`, sizeOffset);
|
|
80
|
+
}
|
|
81
|
+
elements.push(readPacket_(reader, reader.position + size, depth + 1, maxDepth));
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
kind: "bundle",
|
|
85
|
+
timeTag: {
|
|
86
|
+
seconds: getUint32Be(timeTag, 0),
|
|
87
|
+
fraction: getUint32Be(timeTag, 4),
|
|
88
|
+
},
|
|
89
|
+
elements,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
function readMessage_(reader, end, depth, maxDepth) {
|
|
93
|
+
const address = readText_(reader, end, "address");
|
|
94
|
+
// OSC 1.0 asks receivers to accept a message from an older sender that has
|
|
95
|
+
// no type tag string; only one with nothing after its address can be read
|
|
96
|
+
// without guessing the types of what follows.
|
|
97
|
+
if (reader.position === end) {
|
|
98
|
+
return { kind: "message", address, arguments: [] };
|
|
99
|
+
}
|
|
100
|
+
if (reader.peekByte() !== COMMA) {
|
|
101
|
+
throw new OscPacketError('Expected a type tag string beginning with ","', reader.position);
|
|
102
|
+
}
|
|
103
|
+
const tagsOffset = reader.position;
|
|
104
|
+
const tags = readStringBytes_(reader, end, "type tag string");
|
|
105
|
+
const root = [];
|
|
106
|
+
const stack = [root];
|
|
107
|
+
for (let index = 1; index < tags.length; index++) {
|
|
108
|
+
const tag = tags[index];
|
|
109
|
+
const tagOffset = tagsOffset + index;
|
|
110
|
+
// `stack` always holds at least `root`.
|
|
111
|
+
const items = stack[stack.length - 1];
|
|
112
|
+
if (tag === LEFT_SQUARE_BRACKET) {
|
|
113
|
+
if (depth + stack.length > maxDepth) {
|
|
114
|
+
throw new OscPacketError(`Array nesting exceeds maxDepth ${maxDepth}`, tagOffset);
|
|
115
|
+
}
|
|
116
|
+
const nested = [];
|
|
117
|
+
items.push({ type: "array", items: nested });
|
|
118
|
+
stack.push(nested);
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
if (tag === RIGHT_SQUARE_BRACKET) {
|
|
122
|
+
if (stack.length === 1) {
|
|
123
|
+
throw new OscPacketError('Unmatched "]" in type tag string', tagOffset);
|
|
124
|
+
}
|
|
125
|
+
stack.pop();
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
items.push(readArgument_(reader, end, tag, tagOffset));
|
|
129
|
+
}
|
|
130
|
+
if (stack.length > 1) {
|
|
131
|
+
throw new OscPacketError('Unclosed "[" in type tag string', tagsOffset);
|
|
132
|
+
}
|
|
133
|
+
if (reader.position !== end) {
|
|
134
|
+
throw new OscPacketError(`${end - reader.position} bytes follow the last argument`, reader.position);
|
|
135
|
+
}
|
|
136
|
+
return { kind: "message", address, arguments: root };
|
|
137
|
+
}
|
|
138
|
+
function readArgument_(reader, end, tag, tagOffset) {
|
|
139
|
+
const tagChar = String.fromCharCode(tag);
|
|
140
|
+
switch (tagChar) {
|
|
141
|
+
case "i":
|
|
142
|
+
need_(reader, end, 4, "int32");
|
|
143
|
+
return { type: "int32", value: getUint32Be(reader.read(4), 0) | 0 };
|
|
144
|
+
case "f":
|
|
145
|
+
need_(reader, end, 4, "float32");
|
|
146
|
+
return { type: "float32", value: getFloat32Be(reader.read(4), 0) };
|
|
147
|
+
case "s":
|
|
148
|
+
return { type: "string", value: readText_(reader, end, "string") };
|
|
149
|
+
case "S":
|
|
150
|
+
return { type: "symbol", value: readText_(reader, end, "symbol") };
|
|
151
|
+
case "b":
|
|
152
|
+
return { type: "blob", value: readBlob_(reader, end) };
|
|
153
|
+
case "h":
|
|
154
|
+
need_(reader, end, 8, "int64");
|
|
155
|
+
return {
|
|
156
|
+
type: "int64",
|
|
157
|
+
value: BigInt.asIntN(64, getBigUint64Be(reader.read(8), 0)),
|
|
158
|
+
};
|
|
159
|
+
case "t": {
|
|
160
|
+
need_(reader, end, 8, "timeTag");
|
|
161
|
+
const field = reader.read(8);
|
|
162
|
+
return {
|
|
163
|
+
type: "timeTag",
|
|
164
|
+
value: {
|
|
165
|
+
seconds: getUint32Be(field, 0),
|
|
166
|
+
fraction: getUint32Be(field, 4),
|
|
167
|
+
},
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
case "d":
|
|
171
|
+
need_(reader, end, 8, "float64");
|
|
172
|
+
return { type: "float64", value: getFloat64Be(reader.read(8), 0) };
|
|
173
|
+
case "c":
|
|
174
|
+
return { type: "char", value: readChar_(reader, end) };
|
|
175
|
+
case "r": {
|
|
176
|
+
need_(reader, end, 4, "rgba");
|
|
177
|
+
const field = reader.read(4);
|
|
178
|
+
return {
|
|
179
|
+
type: "rgba",
|
|
180
|
+
red: field[0],
|
|
181
|
+
green: field[1],
|
|
182
|
+
blue: field[2],
|
|
183
|
+
alpha: field[3],
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
case "m": {
|
|
187
|
+
need_(reader, end, 4, "midi");
|
|
188
|
+
const field = reader.read(4);
|
|
189
|
+
return {
|
|
190
|
+
type: "midi",
|
|
191
|
+
port: field[0],
|
|
192
|
+
status: field[1],
|
|
193
|
+
data1: field[2],
|
|
194
|
+
data2: field[3],
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
case "T":
|
|
198
|
+
return { type: "true" };
|
|
199
|
+
case "F":
|
|
200
|
+
return { type: "false" };
|
|
201
|
+
case "N":
|
|
202
|
+
return { type: "nil" };
|
|
203
|
+
case "I":
|
|
204
|
+
return { type: "impulse" };
|
|
205
|
+
default:
|
|
206
|
+
throw new OscPacketError(`Unknown type tag 0x${tag.toString(16).padStart(2, "0")}`, tagOffset);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
function readChar_(reader, end) {
|
|
210
|
+
const start = reader.position;
|
|
211
|
+
need_(reader, end, 4, "char");
|
|
212
|
+
const codePoint = getUint32Be(reader.read(4), 0);
|
|
213
|
+
if (codePoint > 0x10ffff || (codePoint >= 0xd800 && codePoint <= 0xdfff)) {
|
|
214
|
+
throw new OscPacketError(`char 0x${codePoint.toString(16)} is not a Unicode scalar value`, start);
|
|
215
|
+
}
|
|
216
|
+
return String.fromCodePoint(codePoint);
|
|
217
|
+
}
|
|
218
|
+
/** Reads a blob: an int32 size, the bytes, and NUL padding to a multiple of 4. */
|
|
219
|
+
function readBlob_(reader, end) {
|
|
220
|
+
const start = reader.position;
|
|
221
|
+
need_(reader, end, 4, "blob size");
|
|
222
|
+
const size = getUint32Be(reader.read(4), 0) | 0;
|
|
223
|
+
if (size < 0) {
|
|
224
|
+
throw new OscPacketError(`Negative blob size ${size}`, start);
|
|
225
|
+
}
|
|
226
|
+
const padded = roundUp4_(size);
|
|
227
|
+
if (padded > end - reader.position) {
|
|
228
|
+
throw new OscPacketError(`Truncated blob: needs ${padded} bytes, ${end - reader.position} remain`, start);
|
|
229
|
+
}
|
|
230
|
+
const field = reader.read(padded);
|
|
231
|
+
checkPadding_(field, size, start + 4, "blob");
|
|
232
|
+
// Copy: the input is a caller's or a driver's buffer and may be reused.
|
|
233
|
+
return field.slice(0, size);
|
|
234
|
+
}
|
|
235
|
+
/** Reads an OSC-string as UTF-8. */
|
|
236
|
+
function readText_(reader, end, what) {
|
|
237
|
+
const start = reader.position;
|
|
238
|
+
const bytes = readStringBytes_(reader, end, what);
|
|
239
|
+
try {
|
|
240
|
+
return decodeText(bytes, "utf-8", { fatal: true, ignoreBOM: true });
|
|
241
|
+
}
|
|
242
|
+
catch (error) {
|
|
243
|
+
throw new OscPacketError(`Invalid UTF-8 in ${what}`, start, {
|
|
244
|
+
cause: error,
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Reads an OSC-string — bytes, a NUL, and NUL padding to a multiple of 4 — and
|
|
250
|
+
* returns the bytes before the terminator as a view into the input.
|
|
251
|
+
*/
|
|
252
|
+
function readStringBytes_(reader, end, what) {
|
|
253
|
+
const start = reader.position;
|
|
254
|
+
const length = reader
|
|
255
|
+
.peekRemaining()
|
|
256
|
+
.subarray(0, end - start)
|
|
257
|
+
.indexOf(NUL);
|
|
258
|
+
if (length === -1) {
|
|
259
|
+
throw new OscPacketError(`Unterminated ${what}`, start);
|
|
260
|
+
}
|
|
261
|
+
const padded = roundUp4_(length + 1);
|
|
262
|
+
if (padded > end - start) {
|
|
263
|
+
throw new OscPacketError(`Truncated ${what} padding`, start + length + 1);
|
|
264
|
+
}
|
|
265
|
+
const field = reader.read(padded);
|
|
266
|
+
checkPadding_(field, length + 1, start, what);
|
|
267
|
+
return field.subarray(0, length);
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Padding is checked strictly: every OSC implementation pads with NUL, so any
|
|
271
|
+
* other byte means the packet is misframed, not merely untidy.
|
|
272
|
+
*/
|
|
273
|
+
function checkPadding_(field, from, fieldOffset, what) {
|
|
274
|
+
for (let index = from; index < field.length; index++) {
|
|
275
|
+
if (field[index] !== NUL) {
|
|
276
|
+
throw new OscPacketError(`Non-zero padding byte after ${what}`, fieldOffset + index);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
function need_(reader, end, count, what) {
|
|
281
|
+
const remaining = end - reader.position;
|
|
282
|
+
if (remaining < count) {
|
|
283
|
+
throw new OscPacketError(`Truncated ${what}: needs ${count} bytes, ${remaining} remain`, reader.position);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
/** Bitwise `& ~3` would wrap above 2^31; a blob size may reach 2^31 − 1. */
|
|
287
|
+
function roundUp4_(value) {
|
|
288
|
+
return Math.ceil(value / 4) * 4;
|
|
289
|
+
}
|
|
290
|
+
//# sourceMappingURL=_read-osc-packet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_read-osc-packet.js","sourceRoot":"","sources":["../../src/packet/_read-osc-packet.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { OscWriter_ } from "./_osc-writer.js";
|
|
2
|
+
import type { OscPacket } from "./osc-packet.js";
|
|
3
|
+
/**
|
|
4
|
+
* Appends `packet` to `writer` — the single implementation of the OSC write
|
|
5
|
+
* grammar, OSC 1.0 §"OSC Packets" through §"OSC Bundles".
|
|
6
|
+
*
|
|
7
|
+
* A type tag string is always written, `,` alone for no arguments, as OSC 1.1
|
|
8
|
+
* requires. Recursion depth is the caller's own nesting; nothing here bounds
|
|
9
|
+
* it.
|
|
10
|
+
*/
|
|
11
|
+
export declare function writeOscPacket_(writer: OscWriter_, packet: OscPacket): void;
|
|
12
|
+
//# sourceMappingURL=_write-osc-packet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_write-osc-packet.d.ts","sourceRoot":"","sources":["../../src/packet/_write-osc-packet.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAe,SAAS,EAAE,MAAM,iBAAiB,CAAC;AA0B9D;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAuB3E"}
|