js-connection-uri
A robust connection URI parser/stringifier - for JavaScript/Node.
Introduction
This connection URI library was implemented in lack of robust JavaScript/Node.js alternatives. This one supports absolute/relative multi-host connection URIs with smart fallbacks.
Install
Install using npm:
$ npm install @grimen/connection-uri
Install using yarn:
$ yarn add @grimen/connection-uri
Use
Very basic example:
const connectionURI = require('@grimen/connection-uri')
basicConnectionURI = 'localhost:3000/namespace/foo/'
basicConnectionOptions = connectionURI.unpack(basicConnectionURI)
console.log(`\n\`connectionURI.unpack("${basicConnectionURI}")\`\n\nRESULT:`, basicConnectionOptions, '\n')
//
// {
// 'protocol': 'http',
// 'auth': None,
//
// 'endpoint': 'localhost:3000',
// 'endpoints': ['localhost:3000'],
//
// 'host': 'localhost',
// 'hosts': ['localhost'],
//
// 'port': 3000,
// 'ports': [3000],
//
// 'path': '/namespace/foo/',
// 'query': {},
//
// 'credentials': {
// 'username': None,
// 'password': None,
// },
// 'key': 'namespace/foo',
// 'namespace': 'namespace/foo',
//
// 'url': 'http://localhost:3000/namespace/foo/',
// 'urls': [
// 'http://localhost:3000/namespace/foo/'
// ],
// }
//
basicConnectionURI = connectionURI.pack(basicConnectionOptions)
console.log(`\n\`connectionURI.pack(${JSON.stringify(basicConnectionOptions)})\`\n\nRESULT:`, JSON.stringify(basicConnectionURI), '\n')
//
// 'http://localhost:3000/namespace/foo/'
//
complexMultihostURI = 'foo://m+4.gTe~5e^(:m+4.gTe~5e^(@ds143144-a0.mlab.com:43144,ds143144-a1.mlab.com:43145/bar-baz'
complexMultihostOptions = connectionURI.unpack(complexMultihostURI)
console.log(`\n\`connectionURI.unpack("${complexMultihostURI}")\`\n\nRESULT:`, complexMultihostOptions, '\n')
//
// {
// 'protocol': 'foo',
// 'auth': 'm+4.gTe~5e^(:m+4.gTe~5e^(',
//
// 'host': 'ds143144-a0.mlab.com',
// 'port': 43144,
//
// 'endpoint': 'ds143144-a0.mlab.com:43144',
// 'endpoints': ['ds143144-a0.mlab.com:43144', 'ds143144-a1.mlab.com:43145'],
//
// 'host': 'ds143144-a0.mlab.com',
// 'hosts': ['ds143144-a0.mlab.com', 'ds143144-a1.mlab.com'],
//
// 'port': 43144,
// 'ports': [43144, 43145],
//
// 'path': '/bar-baz',
// 'query': {},
//
// 'credentials': {
// 'username': 'm+4.gTe~5e^(',
// 'password': 'm+4.gTe~5e^(',
// },
// 'key': 'bar-baz',
// 'namespace': 'bar-baz',
//
// 'url': 'foo://m+4.gTe~5e^(:m+4.gTe~5e^(@ds143144-a0.mlab.com:43144,ds143144-a1.mlab.com:43145/bar-baz',
// 'urls': [
// 'foo://m+4.gTe~5e^(:m+4.gTe~5e^(@ds143144-a0.mlab.com:43144/bar-baz',
// 'foo://m+4.gTe~5e^(:m+4.gTe~5e^(@ds143144-a1.mlab.com:43145/bar-baz'
// ],
// }
//
complexMultihostURI = connectionURI.pack(complexMultihostOptions)
console.log(`\n\`connectionURI.pack(${JSON.stringify(complexMultihostOptions)})\`\n\nRESULT:`, JSON.stringify(complexMultihostURI), '\n')
//
// 'foo://m+4.gTe~5e^(:m+4.gTe~5e^(@ds143144-a0.mlab.com:43144,ds143144-a1.mlab.com:43145/bar-baz'
//
// NOTE: see tests for more advanced examples, e.g. the library handles absolute and relative URIs, etc.
Test
Clone down source code:
$ make install
Run colorful tests using jest:
$ make test
Related
-
python-connection-uri
- "A robust connection URI parser/stringifier - for Python"
About
This project was mainly initiated - in lack of solid existing alternatives - to be used at our work at Markable.ai to have common code conventions between various programming environments where Node.js (for I/O heavy operations) is heavily used.
License
Released under the MIT license.