};
+/**
+ * Return a set containing non-shared items between two sets.
+ * @param {Set} a
+ * @param {Set} b
+ * @returns {Set}
+ */
+const setSymmetricDifference = (a, b) => {
+ const d = new Set(a);
+ for (const x of b) {
+ if (d.has(x)) {
+ d.delete(x);
+ } else {
+ d.add(x);
+ }
+ }
+ return d;
+};
+
+
+/**
+ * URL objects have weird names.
+ * @param {String} component
+ * @returns {String}
+ */
+const properURLComponentName = (component) => {
+ // eslint-disable-next-line security/detect-object-injection
+ return {
+ hash: 'fragment',
+ protocol: 'scheme',
+ }[component] || component;
+}
+
+
module.exports = {
fileScope,
axiosResponseLogData,
logTruncate,
pick,
+ setSymmetricDifference,
+ properURLComponentName,
};
\ No newline at end of file