prettier write

This commit is contained in:
2024-10-09 17:32:13 -05:00
parent 1556867e7c
commit d5098d718e
5 changed files with 166 additions and 168 deletions
+11 -12
View File
@@ -1,13 +1,12 @@
module.exports = { module.exports = {
env: { env: {
node: true, node: true,
commonjs: true, commonjs: true,
es2021: true, es2021: true,
}, },
extends: ['airbnb', 'prettier'], extends: ['airbnb', 'prettier'],
parserOptions: { parserOptions: {
ecmaVersion: 'latest', ecmaVersion: 'latest',
}, },
ignorePatterns: ["**/node_modules", "**/dist"] ignorePatterns: ['**/node_modules', '**/dist'],
}; };
+1 -1
View File
@@ -1,7 +1,7 @@
name: Publish @jwetzell/osc to npmjs name: Publish @jwetzell/osc to npmjs
on: on:
push: push:
tags: tags:
- 'osc/*' - 'osc/*'
jobs: jobs:
publish-lib: publish-lib:
+1 -1
View File
@@ -22,4 +22,4 @@ jobs:
- name: Install Node.js dependencies - name: Install Node.js dependencies
run: npm ci --workspace @jwetzell/osc run: npm ci --workspace @jwetzell/osc
- run: npm run test --workspace @jwetzell/osc - run: npm run test --workspace @jwetzell/osc
+85 -85
View File
@@ -1,89 +1,89 @@
import { messageFromBuffer, messageToBuffer } from "./message"; import { messageFromBuffer, messageToBuffer } from './message';
import { OSCBundle } from "./models"; import { OSCBundle } from './models';
import { oscTypeConverterMap } from "./osc-types"; import { oscTypeConverterMap } from './osc-types';
export function bundleFromBuffer(bytes: Buffer): OSCBundle | undefined { export function bundleFromBuffer(bytes: Buffer): OSCBundle | undefined {
if (bytes.length < 8) { if (bytes.length < 8) {
throw new Error('bundle has to be at least 20 bytes'); throw new Error('bundle has to be at least 20 bytes');
}
if (bytes.subarray(0, 7).toString('ascii') !== '#bundle') {
throw new Error('bundle must start with #bundle');
}
const [bundleHeader, bytesAfterHeader] = oscTypeConverterMap.s.fromBuffer(bytes);
let [timeTag, bytesAfterTimeTag] = oscTypeConverterMap.t.fromBuffer(bytesAfterHeader);
if (!Array.isArray(timeTag)) {
throw new Error('problem getting bundle time tag');
}
const bundleContents = [];
let endOfBundle = false;
let [contentSize, remainingBytes] = oscTypeConverterMap.i.fromBuffer(bytesAfterTimeTag);
if (typeof contentSize === 'number') {
while (!endOfBundle) {
if (remainingBytes.length < contentSize) {
throw new Error('bundle does not contain enough data');
}
const bundleContentBytes = remainingBytes.subarray(0, contentSize);
if (bundleContentBytes[0] === 35) {
// # character indicating contents is a bundle
const content = bundleFromBuffer(bundleContentBytes);
if (content) {
bundleContents.push(content);
}
} else if (bundleContentBytes[0] === 47) {
const content = messageFromBuffer(bundleContentBytes);
if (content) {
bundleContents.push(content);
}
} else {
throw new Error('bundle contents does not look like a OSC message or bundle');
}
remainingBytes = remainingBytes.subarray(contentSize);
if (remainingBytes.length === 0) {
endOfBundle = true;
}
}
}
return {
timeTag,
contents: bundleContents,
};
} }
export function bundleToBuffer(bundle: OSCBundle): Buffer { if (bytes.subarray(0, 7).toString('ascii') !== '#bundle') {
const headerBuffer = oscTypeConverterMap.s.toBuffer('#bundle'); throw new Error('bundle must start with #bundle');
}
if (headerBuffer === undefined) {
throw new Error('problem encoding buffer header'); const [bundleHeader, bytesAfterHeader] = oscTypeConverterMap.s.fromBuffer(bytes);
} let [timeTag, bytesAfterTimeTag] = oscTypeConverterMap.t.fromBuffer(bytesAfterHeader);
const timeTagBuffer = oscTypeConverterMap.t.toBuffer(bundle.timeTag); if (!Array.isArray(timeTag)) {
throw new Error('problem getting bundle time tag');
if (timeTagBuffer === undefined) { }
throw new Error('problem encoding buffer time tag');
} const bundleContents = [];
const contentsBuffers: Buffer[] = []; let endOfBundle = false;
bundle.contents.forEach((bundleContent) => { let [contentSize, remainingBytes] = oscTypeConverterMap.i.fromBuffer(bytesAfterTimeTag);
if ('address' in bundleContent) { if (typeof contentSize === 'number') {
const contentBuffer = messageToBuffer(bundleContent); while (!endOfBundle) {
const contentSizeBuffer = oscTypeConverterMap.i.toBuffer(contentBuffer.length); if (remainingBytes.length < contentSize) {
throw new Error('bundle does not contain enough data');
if (contentBuffer && contentSizeBuffer) {
contentsBuffers.push(Buffer.concat([contentSizeBuffer, contentBuffer]));
}
} }
});
const bundleContentBytes = remainingBytes.subarray(0, contentSize);
return Buffer.concat([headerBuffer, timeTagBuffer, ...contentsBuffers]);
} if (bundleContentBytes[0] === 35) {
// # character indicating contents is a bundle
const content = bundleFromBuffer(bundleContentBytes);
if (content) {
bundleContents.push(content);
}
} else if (bundleContentBytes[0] === 47) {
const content = messageFromBuffer(bundleContentBytes);
if (content) {
bundleContents.push(content);
}
} else {
throw new Error('bundle contents does not look like a OSC message or bundle');
}
remainingBytes = remainingBytes.subarray(contentSize);
if (remainingBytes.length === 0) {
endOfBundle = true;
}
}
}
return {
timeTag,
contents: bundleContents,
};
}
export function bundleToBuffer(bundle: OSCBundle): Buffer {
const headerBuffer = oscTypeConverterMap.s.toBuffer('#bundle');
if (headerBuffer === undefined) {
throw new Error('problem encoding buffer header');
}
const timeTagBuffer = oscTypeConverterMap.t.toBuffer(bundle.timeTag);
if (timeTagBuffer === undefined) {
throw new Error('problem encoding buffer time tag');
}
const contentsBuffers: Buffer[] = [];
bundle.contents.forEach((bundleContent) => {
if ('address' in bundleContent) {
const contentBuffer = messageToBuffer(bundleContent);
const contentSizeBuffer = oscTypeConverterMap.i.toBuffer(contentBuffer.length);
if (contentBuffer && contentSizeBuffer) {
contentsBuffers.push(Buffer.concat([contentSizeBuffer, contentBuffer]));
}
}
});
return Buffer.concat([headerBuffer, timeTagBuffer, ...contentsBuffers]);
}
+68 -69
View File
@@ -1,77 +1,76 @@
import { OSCMessage, OSCArg, OSCType } from "./models"; import { OSCMessage, OSCArg, OSCType } from './models';
import { oscTypeConverterMap } from "./osc-types"; import { oscTypeConverterMap } from './osc-types';
function argsToBuffer(args: OSCArg[]) { function argsToBuffer(args: OSCArg[]) {
const argBuffers: Buffer[] = []; const argBuffers: Buffer[] = [];
for (let index = 0; index < args.length; index += 1) { for (let index = 0; index < args.length; index += 1) {
const arg = args[index]; const arg = args[index];
const typeConverter = oscTypeConverterMap[arg.type]; const typeConverter = oscTypeConverterMap[arg.type];
if (typeConverter === undefined) { if (typeConverter === undefined) {
throw new TypeError('unknown type '.concat(arg.type)); throw new TypeError('unknown type '.concat(arg.type));
}
const buffer = typeConverter.toBuffer(arg.value);
if (buffer !== undefined) {
argBuffers.push(buffer);
}
} }
return Buffer.concat(argBuffers);
const buffer = typeConverter.toBuffer(arg.value);
if (buffer !== undefined) {
argBuffers.push(buffer);
}
}
return Buffer.concat(argBuffers);
}
export function messageToBuffer(message: OSCMessage): Buffer {
const addressBuffer = oscTypeConverterMap.s.toBuffer(message.address);
if (addressBuffer === undefined) {
throw new Error('problem encoding address');
} }
const typeString = message.args.map((arg) => arg.type).join('');
export function messageToBuffer(message: OSCMessage): Buffer { const typesBuffer = oscTypeConverterMap.s.toBuffer(`,${typeString}`);
const addressBuffer = oscTypeConverterMap.s.toBuffer(message.address); if (typesBuffer === undefined) {
if (addressBuffer === undefined) { throw new Error('problem encoding types');
throw new Error('problem encoding address');
}
const typeString = message.args.map((arg) => arg.type).join('');
const typesBuffer = oscTypeConverterMap.s.toBuffer(`,${typeString}`);
if (typesBuffer === undefined) {
throw new Error('problem encoding types');
}
const argsBuffer = argsToBuffer(message.args);
return Buffer.concat([addressBuffer, typesBuffer, argsBuffer]);
} }
const argsBuffer = argsToBuffer(message.args);
export function messageFromBuffer(bytes: Buffer): OSCMessage | undefined { return Buffer.concat([addressBuffer, typesBuffer, argsBuffer]);
if (bytes[0] !== 47) { }
throw new Error('osc message must start with a /');
} export function messageFromBuffer(bytes: Buffer): OSCMessage | undefined {
if (bytes[0] !== 47) {
const oscArgs: OSCArg[] = []; throw new Error('osc message must start with a /');
}
const [address, bytesAfterAddress] = oscTypeConverterMap.s.fromBuffer(bytes);
if (typeof address === 'string') { const oscArgs: OSCArg[] = [];
let [typeString, bytesAfterType] = oscTypeConverterMap.s.fromBuffer(bytesAfterAddress);
if (typeof typeString === 'string') { const [address, bytesAfterAddress] = oscTypeConverterMap.s.fromBuffer(bytes);
if (!typeString.startsWith(',')) { if (typeof address === 'string') {
throw new Error('osc type string must start with a ,'); let [typeString, bytesAfterType] = oscTypeConverterMap.s.fromBuffer(bytesAfterAddress);
} if (typeof typeString === 'string') {
let argsBuffer = bytesAfterType; if (!typeString.startsWith(',')) {
for (let index = 1; index < typeString.length; index++) { throw new Error('osc type string must start with a ,');
const argType = typeString.charAt(index) as OSCType;
const oscTypeConverter = oscTypeConverterMap[argType];
if (oscTypeConverter === undefined) {
throw new Error('unknown OSC type');
}
const [value, remainingBytes] = oscTypeConverter.fromBuffer(argsBuffer);
if (value !== undefined) {
const arg: OSCArg = {
type: argType,
value: value,
};
oscArgs.push(arg);
}
argsBuffer = remainingBytes;
}
return {
address,
args: oscArgs,
};
} }
let argsBuffer = bytesAfterType;
for (let index = 1; index < typeString.length; index++) {
const argType = typeString.charAt(index) as OSCType;
const oscTypeConverter = oscTypeConverterMap[argType];
if (oscTypeConverter === undefined) {
throw new Error('unknown OSC type');
}
const [value, remainingBytes] = oscTypeConverter.fromBuffer(argsBuffer);
if (value !== undefined) {
const arg: OSCArg = {
type: argType,
value: value,
};
oscArgs.push(arg);
}
argsBuffer = remainingBytes;
}
return {
address,
args: oscArgs,
};
} }
} }
}