@platform/cell.schema
Version:
URI and database schemas for the `cell.os`.
56 lines (55 loc) • 2.02 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.KeyEncoding = void 0;
exports.KeyEncoding = {
escape: function (input) {
var ILLEGAL = [':'];
ILLEGAL.forEach(function (char) {
if (input.includes(char)) {
throw new Error("Link key cannot contain \"".concat(char, "\" character."));
}
});
input = trimSlashes(input);
var escapeMultiPeriods = function (input) {
var regex = new RegExp(/\.{2,}/g);
var match = regex.exec(input);
if (match && match[0]) {
var left = input.substring(0, match.index);
var middle = ':'.repeat(match[0].length);
var right = input.substring(match.index + match[0].length);
input = "".concat(left, "[").concat(middle, "]").concat(right);
return escapeMultiPeriods(input);
}
else {
return input;
}
};
input = escapeMultiPeriods(input)
.replace(/\//g, '::')
.replace(/\./g, ':');
return input;
},
unescape: function (input) {
var unescapeMultiPeriods = function (input) {
var regex = new RegExp(/\[:{2,}\]/g);
var match = regex.exec(input);
if (match && match[0]) {
var left = input.substring(0, match.index);
var middle = '.'.repeat(match[0].length - 2);
var right = input.substring(match.index + match[0].length);
input = "".concat(left).concat(middle).concat(right);
return unescapeMultiPeriods(input);
}
else {
return input;
}
};
input = unescapeMultiPeriods(input)
.replace(/::/g, '/')
.replace(/:/g, '.');
return input;
},
};
function trimSlashes(input) {
return (input || '').replace(/^\/*/, '').replace(/\/*$/, '');
}