UNPKG

@platform/cell.schema

Version:

URI and database schemas for the `cell.os`.

77 lines (76 loc) 2.83 kB
"use strict"; 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'); } }