UNPKG

solid-ui

Version:

UI library for writing Solid read-write-web applications

407 lines (317 loc) • 16.8 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports.DateFolder = void 0; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var debug = _interopRequireWildcard(require("../debug")); var _logic = require("../logic"); var ns = _interopRequireWildcard(require("../ns")); var $rdf = _interopRequireWildcard(require("rdflib")); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } /** * Contains the [[DateFolder]] class * @packageDocumentation */ // pull in first avoid cross-refs var kb = _logic.store; /** * Track back through the YYYY/MM/DD tree to find the previous/next day */ var DateFolder = /*#__PURE__*/function () { function DateFolder(rootThing, leafFileName, membershipProperty) { (0, _classCallCheck2["default"])(this, DateFolder); this.root = rootThing; this.rootFolder = rootThing.dir(); this.leafFileName = leafFileName || 'index.ttl'; // typically chat.ttl this.membershipProperty = membershipProperty || ns.wf('leafObject'); } /* Generate the leaf document (rdf object) from date * @returns: <NamedNode> - document */ (0, _createClass2["default"])(DateFolder, [{ key: "leafDocumentFromDate", value: function leafDocumentFromDate(date) { // debug.log('incoming date: ' + date) var isoDate = date.toISOString(); // Like "2018-05-07T17:42:46.576Z" var path = isoDate.split('T')[0].replace(/-/g, '/'); // Like "2018/05/07" path = this.root.dir().uri + path + '/' + this.leafFileName; return kb.sym(path); } /* Generate a date object from the leaf file name */ }, { key: "dateFromLeafDocument", value: function dateFromLeafDocument(doc) { var head = this.rootFolder.uri.length; var str = doc.uri.slice(head, head + 10).replace(/\//g, '-'); // let date = new Date(str + 'Z') // GMT - but fails in FF - invalid format :-( var date = new Date(str); // not explicitly UTC but is assumed so in spec // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse debug.log('Date for ' + doc + ':' + date.toISOString()); return date; } }, { key: "loadPrevious", value: function () { var _loadPrevious = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(date, backwards) { var thisDateFolder, previousPeriod, _previousPeriod, folder, found, doc; return _regenerator["default"].wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: _previousPeriod = function _previousPeriod3() { _previousPeriod = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(file, level) { var younger, suitable, lastNonEmpty, _lastNonEmpty, parent, siblings, folder, uncle, cousins, result; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _lastNonEmpty = function _lastNonEmpty3() { _lastNonEmpty = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(siblings) { var _folder, leafDocument; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: siblings = siblings.filter(suitable); siblings.sort(); // chronological order if (!backwards) siblings.reverse(); if (!(level !== 3)) { _context.next = 5; break; } return _context.abrupt("return", siblings.pop()); case 5: if (!siblings.length) { _context.next = 14; break; } _folder = siblings.pop(); leafDocument = kb.sym(_folder.uri + thisDateFolder.leafFileName); _context.next = 10; return kb.fetcher.load(leafDocument); case 10: if (!(kb.statementsMatching(null, ns.dct('created'), null, leafDocument).length > 0)) { _context.next = 12; break; } return _context.abrupt("return", _folder); case 12: _context.next = 5; break; case 14: return _context.abrupt("return", null); case 15: case "end": return _context.stop(); } } }, _callee); })); return _lastNonEmpty.apply(this, arguments); }; lastNonEmpty = function _lastNonEmpty2(_x5) { return _lastNonEmpty.apply(this, arguments); }; suitable = function _suitable(x) { var tail = x.uri.slice(0, -1).split('/').slice(-1)[0]; if (!'0123456789'.includes(tail[0])) return false; // not numeric return true; }; younger = function _younger(x) { if (backwards ? x.uri >= file.uri : x.uri <= file.uri) return false; // later than we want or same -- looking for different return true; }; // debug.log(' previousPeriod level' + level + ' file ' + file) parent = file.dir(); _context2.next = 7; return kb.fetcher.load(parent); case 7: siblings = kb.each(parent, ns.ldp('contains')); siblings = siblings.filter(younger); _context2.next = 11; return lastNonEmpty(siblings); case 11: folder = _context2.sent; if (!folder) { _context2.next = 14; break; } return _context2.abrupt("return", folder); case 14: if (!(level === 0)) { _context2.next = 16; break; } return _context2.abrupt("return", null); case 16: _context2.next = 18; return previousPeriod(parent, level - 1); case 18: uncle = _context2.sent; if (uncle) { _context2.next = 21; break; } return _context2.abrupt("return", null); case 21: _context2.next = 23; return kb.fetcher.load(uncle); case 23: cousins = kb.each(uncle, ns.ldp('contains')); _context2.next = 26; return lastNonEmpty(cousins); case 26: result = _context2.sent; return _context2.abrupt("return", result); case 28: case "end": return _context2.stop(); } } }, _callee2); })); return _previousPeriod.apply(this, arguments); }; previousPeriod = function _previousPeriod2(_x3, _x4) { return _previousPeriod.apply(this, arguments); }; thisDateFolder = this; // previousPeriod folder = this.leafDocumentFromDate(date).dir(); _context3.next = 6; return previousPeriod(folder, 3); case 6: found = _context3.sent; if (!found) { _context3.next = 10; break; } doc = kb.sym(found.uri + this.leafFileName); return _context3.abrupt("return", this.dateFromLeafDocument(doc)); case 10: return _context3.abrupt("return", null); case 11: case "end": return _context3.stop(); } } }, _callee3, this); })); function loadPrevious(_x, _x2) { return _loadPrevious.apply(this, arguments); } return loadPrevious; }() // loadPrevious }, { key: "firstLeaf", value: function () { var _firstLeaf = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(backwards) { var folderStore, folderFetcher, earliestSubfolder, _earliestSubfolder, y, month, d, leafDocument, leafObjects, msg, sortMe; return _regenerator["default"].wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: _earliestSubfolder = function _earliestSubfolder3() { _earliestSubfolder = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(parent) { var suitable, kids; return _regenerator["default"].wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: suitable = function _suitable2(x) { var tail = x.uri.slice(0, -1).split('/').slice(-1)[0]; if (!'0123456789'.includes(tail[0])) return false; // not numeric return true; }; debug.log(' parent ' + parent); delete folderFetcher.requested[parent.uri]; // try { _context4.next = 5; return folderFetcher.load(parent, { force: true }); case 5: // Force fetch as will have changed // }catch (err) { // } kids = folderStore.each(parent, ns.ldp('contains')); kids = kids.filter(suitable); if (!(kids.length === 0)) { _context4.next = 9; break; } throw new Error(' @@@ No children to parent2 ' + parent); case 9: kids.sort(); if (backwards) kids.reverse(); return _context4.abrupt("return", kids[0]); case 12: case "end": return _context4.stop(); } } }, _callee4); })); return _earliestSubfolder.apply(this, arguments); }; earliestSubfolder = function _earliestSubfolder2(_x7) { return _earliestSubfolder.apply(this, arguments); }; // backwards -> last leafObject folderStore = $rdf.graph(); folderFetcher = new $rdf.Fetcher(folderStore); _context5.next = 6; return earliestSubfolder(this.root.dir()); case 6: y = _context5.sent; _context5.next = 9; return earliestSubfolder(y); case 9: month = _context5.sent; _context5.next = 12; return earliestSubfolder(month); case 12: d = _context5.sent; leafDocument = $rdf.sym(d.uri + 'chat.ttl'); _context5.next = 16; return folderFetcher.load(leafDocument); case 16: leafObjects = folderStore.each(this.root, this.membershipProperty, null, leafDocument); if (!(leafObjects.length === 0)) { _context5.next = 21; break; } msg = ' INCONSISTENCY -- no chat leafObject in file ' + leafDocument; debug.trace(msg); throw new Error(msg); case 21: sortMe = leafObjects.map(function (leafObject) { return [folderStore.any(leafObject, ns.dct('created')), leafObject]; }); sortMe.sort(); if (backwards) sortMe.reverse(); debug.log((backwards ? 'Latest' : 'Earliest') + ' leafObject is ' + sortMe[0][1]); return _context5.abrupt("return", sortMe[0][1]); case 26: case "end": return _context5.stop(); } } }, _callee5, this); })); function firstLeaf(_x6) { return _firstLeaf.apply(this, arguments); } return firstLeaf; }() // firstleafObject }]); return DateFolder; }(); // class exports.DateFolder = DateFolder; //# sourceMappingURL=dateFolder.js.map