diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..5c72b61 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,55 @@ +{ + "env": { + "es6": true + }, + "extends": ["airbnb-base", "prettier"], + "globals": { + "Atomics": "readonly", + "SharedArrayBuffer": "readonly" + }, + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2018, + "sourceType": "module", + "allowImportExportEverywhere": true + }, + "plugins": [ + "prettier", + "@typescript-eslint" + ], + "rules": { + "prettier/prettier": "error", + "class-methods-use-this": [ + "error", + {"exceptMethods": ["requestDidStart", "willSendRequest", "willSendResponse", "errorFromResponse"]} + ], + "camelcase": 0, + "no-undef": 0, + "no-new": 0, + "no-shadow": 0, + "@typescript-eslint/no-shadow": ["error", { "allow": ["err"] }], + "no-console": "off", + "no-use-before-define": "warn", + "no-constant-condition": "off", + "import/no-unresolved": "off", + "import/prefer-default-export": "warn", + "import/extensions": "off", + "class-methods-use-this": "off", + "@typescript-eslint/array-type": [2, { "default": "array" }], + "@typescript-eslint/consistent-type-definitions": [2, "interface"], + "@typescript-eslint/no-explicit-any": "error", + "@typescript-eslint/no-for-in-array": "error", + "@typescript-eslint/no-inferrable-types": "error", + "@typescript-eslint/no-use-before-define": "warn", + "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": "warn", + "no-underscore-dangle": "off", + "prefer-destructuring": "off" + }, + "settings": { + "import/extensions": [".js", ".ts"], + "import/parsers": { + "@typescript-eslint/parser": [".ts", ".tsx"] + } + } +} diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2631594..0fd2474 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -25,10 +25,6 @@ build: script: - npm install - npm run build - artifacts: - expire_in: 1 hour - paths: - - lib pages: stage: deploy @@ -49,8 +45,6 @@ npm_publish: script: - npm config set '//registry.npmjs.org/:_authToken' "${NPM_TOKEN}" - npm publish - dependencies: - - build clean: when: always diff --git a/README.md b/README.md index a7bdec2..9a1c36b 100644 --- a/README.md +++ b/README.md @@ -5,15 +5,17 @@ API Docs [here](https://riksolo.pages.riksolo.com/ts-osc/) ## Usage example ```javascript -import {OSCClient, OSCType, OSCServer} from 'ts-osc'; +import {OSCClient, OSCType} from 'ts-osc'; -const client = new OSCClient("localhost", 8000); +const client = new OSCClient({ + outHost: "localhost", + outPort: 8000, + inPort: 8000 +}) client.send('/hello', OSCType.String, "hello"); -const server = new OSCServer("0.0.0.0", 8000); - -server.on('message', (msg)=>{ +client.on('message', (msg)=>{ console.log(msg); }) ``` diff --git a/package-lock.json b/package-lock.json index 6cfd086..17bc7c4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "ts-osc", - "version": "0.2.3", + "version": "0.1.2", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -460,17 +460,6 @@ } } }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -510,27 +499,6 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "copyfiles": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-2.4.1.tgz", - "integrity": "sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==", - "dev": true, - "requires": { - "glob": "^7.0.5", - "minimatch": "^3.0.3", - "mkdirp": "^1.0.4", - "noms": "0.0.0", - "through2": "^2.0.1", - "untildify": "^4.0.0", - "yargs": "^16.1.0" - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, "cosmiconfig": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", @@ -699,12 +667,6 @@ "is-symbol": "^1.0.2" } }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -1196,12 +1158,6 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, "get-intrinsic": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz", @@ -1541,12 +1497,6 @@ "has-symbols": "^1.0.1" } }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -1976,12 +1926,6 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -2006,16 +1950,6 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, - "noms": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz", - "integrity": "sha1-2o69nzr51nYJGbJ9nNyAkqczKFk=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "~1.0.31" - } - }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -2283,12 +2217,6 @@ "fast-diff": "^1.1.2" } }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -2322,18 +2250,6 @@ "path-type": "^3.0.0" } }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, "rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", @@ -2349,12 +2265,6 @@ "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", "dev": true }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, "require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -2417,12 +2327,6 @@ "tslib": "^1.9.0" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -2645,12 +2549,6 @@ "define-properties": "^1.1.3" } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, "stringify-object": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", @@ -2742,48 +2640,6 @@ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -2867,12 +2723,6 @@ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, - "untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true - }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -2882,12 +2732,6 @@ "punycode": "^2.1.0" } }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, "v8-compile-cache": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", @@ -2980,18 +2824,6 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "y18n": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", - "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", - "dev": true - }, "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", @@ -3004,27 +2836,6 @@ "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", "dev": true }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 460c438..9855161 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ts-osc", - "version": "0.3.2", + "version": "0.2.1", "description": "Fully TypeScript-native OSC Client based on osc-min", "main": "./lib/index.js", "types": "./lib/index.d.ts", @@ -9,9 +9,8 @@ "compile": "tsc", "watch": "tsc --watch", "docs": "typedoc --out docs ./src/index.ts", - "copy": "copyfiles -u 1 -f ./src/**/*.d.ts ./lib", "clean": "rimraf lib", - "build": "run-s clean compile copy docs", + "build": "run-s clean compile docs", "lint": "eslint ./src --ext .js,.ts", "lint:fix": "npm run lint -- --fix" }, @@ -34,7 +33,6 @@ "@types/node": "^14.14.22", "@typescript-eslint/eslint-plugin": "^4.14.0", "@typescript-eslint/parser": "^4.14.0", - "copyfiles": "^2.4.1", "eslint": "^7.18.0", "eslint-config-prettier": "^7.2.0", "eslint-plugin-prettier": "^3.3.1", diff --git a/src/index.ts b/src/index.ts index a6817fa..14d58ea 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,3 +1,3 @@ export * from './oscClient'; export * from './oscServer'; -export { OSCType, OSCArgumentType } from './types'; +export { OSCType, OSCArgumentType } from 'osc-min'; diff --git a/src/oscClient.ts b/src/oscClient.ts index a8774d9..d51c7ac 100644 --- a/src/oscClient.ts +++ b/src/oscClient.ts @@ -1,16 +1,16 @@ import * as dgram from 'dgram'; -import { toBuffer } from 'osc-min'; -import { OSCArgument, OSCType, OSCArgumentType } from './types'; +import { OSCArgument, OSCType, toBuffer, OSCArgumentType } from 'osc-min'; +import { EventEmitter } from 'events'; /** - * OSC Client, handles sending OSC messages + * OSC Client base class, handles sending and receiving OSC messages ``` - const osc = new OSCClient("192.168.0.44", 8000); + const osc = new OSCClient("192.168.0.44", 8000) ``` */ export class OSCClient { - public socket: dgram.Socket; + private socket: dgram.Socket; private host: string; private port: number; constructor(host: string, port: number) { @@ -19,14 +19,14 @@ export class OSCClient { this.socket = dgram.createSocket({ type: 'udp4', reuseAddr: true }); } - public sendPacket(packet: Buffer): void { + private sendPacket(packet: Buffer): void { this.socket.send(packet, 0, packet.length, this.port, this.host); } /** * Send an OSC message ``` - osc.send("/osc/url", OSCType.String, "hello"); + osc.send("/osc/url", OSCType.String, "hello") ``` */ @@ -39,12 +39,4 @@ export class OSCClient { const encoded = toBuffer(address, [arg]); this.sendPacket(encoded); } - - /** - * Close the connection - */ - - public close(): void { - this.socket.close(); - } } diff --git a/src/oscServer.ts b/src/oscServer.ts index c4ebbbc..3f87397 100644 --- a/src/oscServer.ts +++ b/src/oscServer.ts @@ -1,7 +1,6 @@ import EventEmitter = require('events'); import * as dgram from 'dgram'; -import { fromBuffer } from 'osc-min'; -import { OSCType, OSCArgumentType } from './types'; +import { OSCType, OSCArgumentType, fromBuffer } from 'osc-min'; export interface ReceivedOSCMessage { address: string; @@ -15,58 +14,27 @@ export declare interface OSCServer { Emitted whenever an OSC message is received on inPort @event */ - on(event: 'message', listener: (message: ReceivedOSCMessage) => void): this; + on(event: 'message', listener: (message: ReceivedOSCMessage) => void): this; /** Emitted when OSC client is listening on inPort @event */ on(event: 'listening', listener: () => void): this; - - /** - * Emitted when OSC socket is closed - @event - */ - - on(event: 'close', listener: () => void): this; - - /** - * Emitted whenever an error occurs - @event - */ - - on(event: 'error', listener: (exception: Error) => void): this; } -/** - * OSC Server, handles receiving OSC messages - - ``` - const osc = new OSCServer("192.168.0.44", 8000); - ``` - */ export class OSCServer extends EventEmitter { - public socket: dgram.Socket; + private socket: dgram.Socket; - constructor(bindAddress: string, port: number) { + constructor(address: string, port: number) { super(); this.socket = dgram.createSocket({ type: 'udp4', reuseAddr: true }); - this.socket.bind({ - port, - address: bindAddress, - exclusive: true, - }); + this.socket.bind(port, address); this.socket.on('listening', () => { this.emit('listening'); }); - this.socket.on('close', () => { - this.emit('close'); - }); - this.socket.on('error', (e) => { - this.emit('error', e); - }); this.socket.on('message', (msg) => { const decoded = fromBuffer(msg); @@ -81,12 +49,4 @@ export class OSCServer extends EventEmitter { } }); } - - /** - * close the server - */ - - public close(): void { - this.socket.close(); - } } diff --git a/src/types.ts b/src/types.ts deleted file mode 100644 index df1c10a..0000000 --- a/src/types.ts +++ /dev/null @@ -1,31 +0,0 @@ -export interface OSCArgument { - type: T; - value: OSCArgumentType; -} - -export enum OSCType { - String = 'string', - Float = 'float', - Integer = 'integer', - Blob = 'blob', - True = 'true', - False = 'false', - Null = 'null', - Bang = 'bang', - Timetag = 'timetag', - Array = 'array', -} - -export type OSCArgumentType = T extends OSCType.String - ? string - : T extends OSCType.Float | OSCType.Integer | OSCType.Timetag - ? number - : T extends OSCType.True - ? true - : T extends OSCType.False - ? false - : T extends OSCType.Blob - ? Buffer - : T extends OSCType.Array - ? OSCArgument[] - : null; diff --git a/src/types/osc-min.d.ts b/src/types/osc-min.d.ts index c1b49b8..dec8f5f 100644 --- a/src/types/osc-min.d.ts +++ b/src/types/osc-min.d.ts @@ -1,5 +1,16 @@ declare module 'osc-min' { - import { OSCType, OSCArgumentType, OSCArgument } from '../types'; + export const enum OSCType { + String = 'string', + Float = 'float', + Integer = 'integer', + Blob = 'blob', + True = 'true', + False = 'false', + Null = 'null', + Bang = 'bang', + Timetag = 'timetag', + Array = 'array', + } export type OSCTimeTag = [number, number]; export type OutgoingOSCArgsTypes = (OSCArgument | Buffer | boolean | string | number)[]; @@ -20,6 +31,25 @@ declare module 'osc-min' { elements: (OSCMessage | OSCBundle)[]; } + export type OSCArgumentType = T extends OSCType.String + ? string + : T extends OSCType.Float | OSCType.Integer | OSCType.Timetag + ? number + : T extends OSCType.True + ? true + : T extends OSCType.False + ? false + : T extends OSCType.Blob + ? Buffer + : T extends OSCType.Array + ? OSCArgument[] + : null; + + export interface OSCArgument { + type: T; + value: OSCArgumentType; + } + type OSCPacket = OSCMessage | OSCBundle; export function fromBuffer(buffer: Buffer, strict?: boolean): OSCPacket;