Compare commits
10 commits
5fda0ab204
...
11b1702726
| Author | SHA1 | Date | |
|---|---|---|---|
| 11b1702726 | |||
| ac2b4c4a67 | |||
| bdfcf47aca | |||
| 56338f2262 | |||
| 2261bf8b3e | |||
| 8ae1307a17 | |||
| 10074e197f | |||
| 8df7656eee | |||
| 019329fd8f | |||
| 6419b3f162 |
10 changed files with 299 additions and 110 deletions
|
|
@ -1,55 +0,0 @@
|
|||
{
|
||||
"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"]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -25,6 +25,10 @@ build:
|
|||
script:
|
||||
- npm install
|
||||
- npm run build
|
||||
artifacts:
|
||||
expire_in: 1 hour
|
||||
paths:
|
||||
- lib
|
||||
|
||||
pages:
|
||||
stage: deploy
|
||||
|
|
@ -45,6 +49,8 @@ npm_publish:
|
|||
script:
|
||||
- npm config set '//registry.npmjs.org/:_authToken' "${NPM_TOKEN}"
|
||||
- npm publish
|
||||
dependencies:
|
||||
- build
|
||||
|
||||
clean:
|
||||
when: always
|
||||
|
|
|
|||
12
README.md
12
README.md
|
|
@ -5,17 +5,15 @@ API Docs [here](https://riksolo.pages.riksolo.com/ts-osc/)
|
|||
|
||||
## Usage example
|
||||
```javascript
|
||||
import {OSCClient, OSCType} from 'ts-osc';
|
||||
import {OSCClient, OSCType, OSCServer} from 'ts-osc';
|
||||
|
||||
const client = new OSCClient({
|
||||
outHost: "localhost",
|
||||
outPort: 8000,
|
||||
inPort: 8000
|
||||
})
|
||||
const client = new OSCClient("localhost", 8000);
|
||||
|
||||
client.send('/hello', OSCType.String, "hello");
|
||||
|
||||
client.on('message', (msg)=>{
|
||||
const server = new OSCServer("0.0.0.0", 8000);
|
||||
|
||||
server.on('message', (msg)=>{
|
||||
console.log(msg);
|
||||
})
|
||||
```
|
||||
|
|
|
|||
191
package-lock.json
generated
191
package-lock.json
generated
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "ts-osc",
|
||||
"version": "0.1.2",
|
||||
"version": "0.2.3",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
|
|
@ -460,6 +460,17 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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",
|
||||
|
|
@ -499,6 +510,27 @@
|
|||
"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",
|
||||
|
|
@ -667,6 +699,12 @@
|
|||
"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",
|
||||
|
|
@ -1158,6 +1196,12 @@
|
|||
"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",
|
||||
|
|
@ -1497,6 +1541,12 @@
|
|||
"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",
|
||||
|
|
@ -1926,6 +1976,12 @@
|
|||
"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",
|
||||
|
|
@ -1950,6 +2006,16 @@
|
|||
"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",
|
||||
|
|
@ -2217,6 +2283,12 @@
|
|||
"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",
|
||||
|
|
@ -2250,6 +2322,18 @@
|
|||
"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",
|
||||
|
|
@ -2265,6 +2349,12 @@
|
|||
"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",
|
||||
|
|
@ -2327,6 +2417,12 @@
|
|||
"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",
|
||||
|
|
@ -2549,6 +2645,12 @@
|
|||
"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",
|
||||
|
|
@ -2640,6 +2742,48 @@
|
|||
"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",
|
||||
|
|
@ -2723,6 +2867,12 @@
|
|||
"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",
|
||||
|
|
@ -2732,6 +2882,12 @@
|
|||
"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",
|
||||
|
|
@ -2824,6 +2980,18 @@
|
|||
"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",
|
||||
|
|
@ -2836,6 +3004,27 @@
|
|||
"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",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "ts-osc",
|
||||
"version": "0.2.1",
|
||||
"version": "0.3.2",
|
||||
"description": "Fully TypeScript-native OSC Client based on osc-min",
|
||||
"main": "./lib/index.js",
|
||||
"types": "./lib/index.d.ts",
|
||||
|
|
@ -9,8 +9,9 @@
|
|||
"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 docs",
|
||||
"build": "run-s clean compile copy docs",
|
||||
"lint": "eslint ./src --ext .js,.ts",
|
||||
"lint:fix": "npm run lint -- --fix"
|
||||
},
|
||||
|
|
@ -33,6 +34,7 @@
|
|||
"@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",
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
export * from './oscClient';
|
||||
export * from './oscServer';
|
||||
export { OSCType, OSCArgumentType } from 'osc-min';
|
||||
export { OSCType, OSCArgumentType } from './types';
|
||||
|
|
|
|||
|
|
@ -1,16 +1,16 @@
|
|||
import * as dgram from 'dgram';
|
||||
import { OSCArgument, OSCType, toBuffer, OSCArgumentType } from 'osc-min';
|
||||
import { EventEmitter } from 'events';
|
||||
import { toBuffer } from 'osc-min';
|
||||
import { OSCArgument, OSCType, OSCArgumentType } from './types';
|
||||
|
||||
/**
|
||||
* OSC Client base class, handles sending and receiving OSC messages
|
||||
* OSC Client, handles sending OSC messages
|
||||
|
||||
```
|
||||
const osc = new OSCClient("192.168.0.44", 8000)
|
||||
const osc = new OSCClient("192.168.0.44", 8000);
|
||||
```
|
||||
*/
|
||||
export class OSCClient {
|
||||
private socket: dgram.Socket;
|
||||
public 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 });
|
||||
}
|
||||
|
||||
private sendPacket(packet: Buffer): void {
|
||||
public 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,4 +39,12 @@ export class OSCClient {
|
|||
const encoded = toBuffer(address, [arg]);
|
||||
this.sendPacket(encoded);
|
||||
}
|
||||
|
||||
/**
|
||||
* Close the connection
|
||||
*/
|
||||
|
||||
public close(): void {
|
||||
this.socket.close();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import EventEmitter = require('events');
|
||||
import * as dgram from 'dgram';
|
||||
import { OSCType, OSCArgumentType, fromBuffer } from 'osc-min';
|
||||
import { fromBuffer } from 'osc-min';
|
||||
import { OSCType, OSCArgumentType } from './types';
|
||||
|
||||
export interface ReceivedOSCMessage<T extends OSCType> {
|
||||
address: string;
|
||||
|
|
@ -14,27 +15,58 @@ export declare interface OSCServer {
|
|||
Emitted whenever an OSC message is received on inPort
|
||||
@event
|
||||
*/
|
||||
on(event: 'message', listener: (message: ReceivedOSCMessage<OSCType>) => void): this;
|
||||
on(event: 'message', listener: <T extends OSCType>(message: ReceivedOSCMessage<T>) => 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;
|
||||
}
|
||||
|
||||
export class OSCServer extends EventEmitter {
|
||||
private socket: dgram.Socket;
|
||||
/**
|
||||
* OSC Server, handles receiving OSC messages
|
||||
|
||||
constructor(address: string, port: number) {
|
||||
```
|
||||
const osc = new OSCServer("192.168.0.44", 8000);
|
||||
```
|
||||
*/
|
||||
export class OSCServer extends EventEmitter {
|
||||
public socket: dgram.Socket;
|
||||
|
||||
constructor(bindAddress: string, port: number) {
|
||||
super();
|
||||
|
||||
this.socket = dgram.createSocket({ type: 'udp4', reuseAddr: true });
|
||||
this.socket.bind(port, address);
|
||||
this.socket.bind({
|
||||
port,
|
||||
address: bindAddress,
|
||||
exclusive: true,
|
||||
});
|
||||
|
||||
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);
|
||||
|
|
@ -49,4 +81,12 @@ export class OSCServer extends EventEmitter {
|
|||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* close the server
|
||||
*/
|
||||
|
||||
public close(): void {
|
||||
this.socket.close();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
31
src/types.ts
Normal file
31
src/types.ts
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
export interface OSCArgument<T extends OSCType> {
|
||||
type: T;
|
||||
value: OSCArgumentType<T>;
|
||||
}
|
||||
|
||||
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> = 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<OSCType>[]
|
||||
: null;
|
||||
32
src/types/osc-min.d.ts
vendored
32
src/types/osc-min.d.ts
vendored
|
|
@ -1,16 +1,5 @@
|
|||
declare module 'osc-min' {
|
||||
export const enum OSCType {
|
||||
String = 'string',
|
||||
Float = 'float',
|
||||
Integer = 'integer',
|
||||
Blob = 'blob',
|
||||
True = 'true',
|
||||
False = 'false',
|
||||
Null = 'null',
|
||||
Bang = 'bang',
|
||||
Timetag = 'timetag',
|
||||
Array = 'array',
|
||||
}
|
||||
import { OSCType, OSCArgumentType, OSCArgument } from '../types';
|
||||
|
||||
export type OSCTimeTag = [number, number];
|
||||
export type OutgoingOSCArgsTypes = (OSCArgument<OSCType> | Buffer | boolean | string | number)[];
|
||||
|
|
@ -31,25 +20,6 @@ declare module 'osc-min' {
|
|||
elements: (OSCMessage | OSCBundle)[];
|
||||
}
|
||||
|
||||
export type OSCArgumentType<T extends OSCType> = 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<OSCType>[]
|
||||
: null;
|
||||
|
||||
export interface OSCArgument<T extends OSCType> {
|
||||
type: T;
|
||||
value: OSCArgumentType<T>;
|
||||
}
|
||||
|
||||
type OSCPacket = OSCMessage | OSCBundle;
|
||||
|
||||
export function fromBuffer(buffer: Buffer, strict?: boolean): OSCPacket;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue