Skip to content

Commit

Permalink
replace url-parse lib with native URL interface
Browse files Browse the repository at this point in the history
  • Loading branch information
jonaswalden committed Apr 9, 2022
1 parent b4943cd commit 5534fba
Show file tree
Hide file tree
Showing 5 changed files with 269 additions and 900 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Change log for amqplib

## Unreleased

* Replace url-parse lib with native URL interface

## Changes in v0.8.0

git log v0.7.1..v0.8.0
Expand Down
32 changes: 12 additions & 20 deletions lib/connect.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@

'use strict';

var URL = require('url-parse');
var QS = require('querystring');
var Connection = require('./connection').Connection;
var fmt = require('util').format;
Expand Down Expand Up @@ -43,16 +42,16 @@ var CLIENT_PROPERTIES = {
};

// Construct the main frames used in the opening handshake
function openFrames(vhost, query, credentials, extraClientProperties) {
function openFrames(vhost, searchParams, credentials, extraClientProperties) {
if (!vhost)
vhost = '/';
else
vhost = QS.unescape(vhost);

var query = query || {};
var searchParams = searchParams || new URLSearchParams();

function intOrDefault(val, def) {
return (val === undefined) ? def : parseInt(val);
return (val === null) ? def : parseInt(val);
}

var clientProperties = Object.create(CLIENT_PROPERTIES);
Expand All @@ -62,12 +61,12 @@ function openFrames(vhost, query, credentials, extraClientProperties) {
'clientProperties': copyInto(extraClientProperties, clientProperties),
'mechanism': credentials.mechanism,
'response': credentials.response(),
'locale': query.locale || 'en_US',
'locale': searchParams.get('locale') || 'en_US',

// tune-ok
'channelMax': intOrDefault(query.channelMax, 0),
'frameMax': intOrDefault(query.frameMax, 0x1000),
'heartbeat': intOrDefault(query.heartbeat, 0),
'channelMax': intOrDefault(searchParams.get('channelMax'), 0),
'frameMax': intOrDefault(searchParams.get('frameMax'), 0x1000),
'heartbeat': intOrDefault(searchParams.get('heartbeat'), 0),

// open
'virtualHost': vhost,
Expand Down Expand Up @@ -104,37 +103,30 @@ function connect(url, socketOptions, openCallback) {

var protocol, fields;
if (typeof url === 'object') {
protocol = (url.protocol || 'amqp') + ':';
protocol = url.protocol || 'amqp:';
sockopts.host = url.hostname;
sockopts.servername = url.hostname;
sockopts.port = url.port || ((protocol === 'amqp:') ? 5672 : 5671);

var user, pass;
// Only default if both are missing, to have the same behaviour as
// the stringly URL.
if (url.username == undefined && url.password == undefined) {
if (!url.username && !url.password) {
user = 'guest'; pass = 'guest';
} else {
user = url.username || '';
pass = url.password || '';
}

var config = {
locale: url.locale,
channelMax: url.channelMax,
frameMax: url.frameMax,
heartbeat: url.heartbeat,
};

fields = openFrames(url.vhost, config, sockopts.credentials || credentials.plain(user, pass), extraClientProperties);
fields = openFrames(url.vhost, url.searchParams, sockopts.credentials || credentials.plain(user, pass), extraClientProperties);
} else {
var parts = URL(url, true); // yes, parse the query string
var parts = new URL(url);
protocol = parts.protocol;
sockopts.host = parts.hostname;
sockopts.servername = parts.hostname;
sockopts.port = parseInt(parts.port) || ((protocol === 'amqp:') ? 5672 : 5671);
var vhost = parts.pathname ? parts.pathname.substr(1) : null;
fields = openFrames(vhost, parts.query, sockopts.credentials || credentialsFromUrl(parts), extraClientProperties);
fields = openFrames(vhost, parts.searchParams, sockopts.credentials || credentialsFromUrl(parts), extraClientProperties);
}

var sockok = false;
Expand Down
Loading

0 comments on commit 5534fba

Please sign in to comment.