@platform/cell.schema
Version:
URI and database schemas for the `cell.os`.
77 lines (76 loc) • 2.83 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.parse = void 0;
function parse(input) {
var _a, _b;
var _c = parseUrl(input), url = _c.url, error = _c.error;
var domain = (_a = url === null || url === void 0 ? void 0 : url.host) !== null && _a !== void 0 ? _a : '';
var protocol = (url === null || url === void 0 ? void 0 : url.hostname) === 'localhost' ? 'http' : 'https';
var api = {
ok: true,
href: (_b = url === null || url === void 0 ? void 0 : url.href) !== null && _b !== void 0 ? _b : '',
protocol: protocol,
domain: domain,
cell: '',
path: '',
dir: '',
filename: '',
error: error,
params: {
entry: (url === null || url === void 0 ? void 0 : url.searchParams.get('entry')) || '',
},
};
(function () {
var _a;
var error = function (detail) { return (api.error = "Invalid manifest URL '".concat(input, "' - ").concat(detail)); };
var path = ((_a = url === null || url === void 0 ? void 0 : url.pathname) !== null && _a !== void 0 ? _a : '').replace(/^\//, '');
if (!path)
return error('no path');
var uri = path.match(/^cell:[\d\w]+:[A-Z]+[1-9]+/);
api.cell = (uri ? uri[0] : '').trim();
var isCell = Boolean(api.cell);
if (isCell) {
path = path.substring(api.cell.length);
if (!path.startsWith('/fs/'))
return error('no filesystem path');
path = path.substring('/fs/'.length);
if (!path)
return error('no filesystem path');
}
api.path = path;
if (!path.endsWith('.json'))
return error('not a ".json" file.');
var index = path.lastIndexOf('/');
if (index < 0)
api.filename = path;
if (index >= 0) {
api.dir = path.substring(0, index);
api.filename = path.substring(index + 1);
}
return;
})();
api.ok = !api.error;
return api;
}
exports.parse = parse;
function parseUrl(input) {
var error = function (detail) { return ({ error: "Invalid manifest URL '".concat(input, "' - ").concat(detail) }); };
try {
if (typeof input !== 'string')
return error('not a string');
input = input.trim();
if (!input)
return error('empty');
if (!(input.startsWith('http://') || input.startsWith('https://'))) {
var localhost = input.startsWith('localhost');
var protocol = localhost ? 'http' : 'https';
input = "".concat(protocol, "://").concat(input);
}
return {
url: new URL(input),
};
}
catch (err) {
return error('unable to parse');
}
}