// Copyright (c) 2022 Wayne Parrott. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
'use strict';
/**
* enum style distribution identifiers
*/
const DistroId = {
UNKNOWN: 0,
ELOQUENT: 1911,
FOXY: 2006,
GALACTIC: 2105,
HUMBLE: 2205,
IRON: 2305,
ROLLING: 5000,
};
const DistroNameIdMap = new Map();
DistroNameIdMap.set('eloquent', DistroId.ELOQUENT);
DistroNameIdMap.set('foxy', DistroId.FOXY);
DistroNameIdMap.set('galactic', DistroId.GALACTIC);
DistroNameIdMap.set('humble', DistroId.HUMBLE);
DistroNameIdMap.set('iron', DistroId.IRON);
DistroNameIdMap.set('rolling', DistroId.ROLLING);
const DistroUtils = {
DistroId: DistroId,
/**
* Get the rclnodejs distro ID for a ROS 2 distro name.
* @param {string|undefined} [distroName] - The ROS 2 short distro name, e.g., foxy, Defaults to the value of the ROS_DISTRO envar.
* @return {number} Return the rclnodejs distro identifier
*/
getDistroId: function (distroName) {
const dname = distroName ? distroName.toLowerCase() : this.getDistroName();
return DistroNameIdMap.has(dname)
? DistroNameIdMap.get(dname)
: DistroId.UNKNOWN;
},
/**
* Get the short ROS 2 distro name associated with a rclnodejs distro ID.
* @param {number|undefined} [distroId] - The rclnodejs distro identifier. Defaults to the value of the ROS_DISTRO envar.
* @return {string|undefined} Return the name of the ROS distribution or undefined if unable to identify the distro.
*/
getDistroName: function (distroId) {
if (!distroId) {
return process.env.ROS_DISTRO;
}
return [...DistroNameIdMap].find(([key, val]) => val == distroId)[0];
},
getKnownDistroNames: function () {
return [...DistroNameIdMap.keys()];
},
};
module.exports = DistroUtils;