Skip to content

grimen/js-connection-uri

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ed12169 · Feb 3, 2021

History

10 Commits
Oct 14, 2019
Oct 14, 2019
Oct 14, 2019
Oct 14, 2019
Oct 14, 2019
Oct 14, 2019
Oct 14, 2019
Feb 3, 2021
Oct 14, 2019
Oct 14, 2019
Oct 14, 2019
Oct 14, 2019
Feb 3, 2021
Feb 3, 2021

Repository files navigation

js-connection-uri NPM version Build Status Coverage Status

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

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.