UNPKG

lively.storage

Version:
1,659 lines (1,430 loc) 1.21 MB
// INLINED /Users/robert/Lively/lively-dev2/lively.storage/node_modules/babel-regenerator-runtime/runtime.js /** * Copyright (c) 2014, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * https://raw.github.com/facebook/regenerator/master/LICENSE file. An * additional grant of patent rights can be found in the PATENTS file in * the same directory. */ !(function(global) { "use strict"; var hasOwn = Object.prototype.hasOwnProperty; var undefined; // More compressible than void 0. var iteratorSymbol = typeof Symbol === "function" && Symbol.iterator || "@@iterator"; var inModule = typeof module === "object"; var runtime = global.regeneratorRuntime; if (runtime) { if (inModule) { // If regeneratorRuntime is defined globally and we're in a module, // make the exports object identical to regeneratorRuntime. module.exports = runtime; } // Don't bother evaluating the rest of this file if the runtime was // already defined globally. return; } // Define the runtime globally (as expected by generated code) as either // module.exports (if we're in a module) or a new, empty object. runtime = global.regeneratorRuntime = inModule ? module.exports : {}; function wrap(innerFn, outerFn, self, tryLocsList) { // If outerFn provided, then outerFn.prototype instanceof Generator. var generator = Object.create((outerFn || Generator).prototype); var context = new Context(tryLocsList || []); // The ._invoke method unifies the implementations of the .next, // .throw, and .return methods. generator._invoke = makeInvokeMethod(innerFn, self, context); return generator; } runtime.wrap = wrap; // Try/catch helper to minimize deoptimizations. Returns a completion // record like context.tryEntries[i].completion. This interface could // have been (and was previously) designed to take a closure to be // invoked without arguments, but in all the cases we care about we // already have an existing method we want to call, so there's no need // to create a new function object. We can even get away with assuming // the method takes exactly one argument, since that happens to be true // in every case, so we don't have to touch the arguments object. The // only additional allocation required is the completion record, which // has a stable shape and so hopefully should be cheap to allocate. function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } var GenStateSuspendedStart = "suspendedStart"; var GenStateSuspendedYield = "suspendedYield"; var GenStateExecuting = "executing"; var GenStateCompleted = "completed"; // Returning this object from the innerFn has the same effect as // breaking out of the dispatch switch statement. var ContinueSentinel = {}; // Dummy constructor functions that we use as the .constructor and // .constructor.prototype properties for functions that return Generator // objects. For full spec compliance, you may wish to configure your // minifier not to mangle the names of these two functions. function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype; GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; GeneratorFunctionPrototype.constructor = GeneratorFunction; GeneratorFunction.displayName = "GeneratorFunction"; // Helper for defining the .next, .throw, and .return methods of the // Iterator interface in terms of a single ._invoke method. function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function(method) { prototype[method] = function(arg) { return this._invoke(method, arg); }; }); } runtime.isGeneratorFunction = function(genFun) { var ctor = typeof genFun === "function" && genFun.constructor; return ctor ? ctor === GeneratorFunction || // For the native GeneratorFunction constructor, the best we can // do is to check its .name property. (ctor.displayName || ctor.name) === "GeneratorFunction" : false; }; runtime.mark = function(genFun) { if (Object.setPrototypeOf) { Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); } else { genFun.__proto__ = GeneratorFunctionPrototype; } genFun.prototype = Object.create(Gp); return genFun; }; // Within the body of any async function, `await x` is transformed to // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test // `value instanceof AwaitArgument` to determine if the yielded value is // meant to be awaited. Some may consider the name of this method too // cutesy, but they are curmudgeons. runtime.awrap = function(arg) { return new AwaitArgument(arg); }; function AwaitArgument(arg) { this.arg = arg; } function AsyncIterator(generator) { // This invoke function is written in a style that assumes some // calling function (or Promise) will handle exceptions. function invoke(method, arg) { var result = generator[method](arg); var value = result.value; return value instanceof AwaitArgument ? Promise.resolve(value.arg).then(invokeNext, invokeThrow) : Promise.resolve(value).then(function(unwrapped) { // When a yielded Promise is resolved, its final value becomes // the .value of the Promise<{value,done}> result for the // current iteration. If the Promise is rejected, however, the // result for this iteration will be rejected with the same // reason. Note that rejections of yielded Promises are not // thrown back into the generator function, as is the case // when an awaited Promise is rejected. This difference in // behavior between yield and await is important, because it // allows the consumer to decide what to do with the yielded // rejection (swallow it and continue, manually .throw it back // into the generator, abandon iteration, whatever). With // await, by contrast, there is no opportunity to examine the // rejection reason outside the generator function, so the // only option is to throw it from the await expression, and // let the generator function handle the exception. result.value = unwrapped; return result; }); } if (typeof process === "object" && process.domain) { invoke = process.domain.bind(invoke); } var invokeNext = invoke.bind(generator, "next"); var invokeThrow = invoke.bind(generator, "throw"); var invokeReturn = invoke.bind(generator, "return"); var previousPromise; function enqueue(method, arg) { function callInvokeWithMethodAndArg() { return invoke(method, arg); } return previousPromise = // If enqueue has been called before, then we want to wait until // all previous Promises have been resolved before calling invoke, // so that results are always delivered in the correct order. If // enqueue has not been called before, then it is important to // call invoke immediately, without waiting on a callback to fire, // so that the async generator function has the opportunity to do // any necessary setup in a predictable way. This predictability // is why the Promise constructor synchronously invokes its // executor callback, and why async functions synchronously // execute code before the first await. Since we implement simple // async functions in terms of async generators, it is especially // important to get this right, even though it requires care. previousPromise ? previousPromise.then( callInvokeWithMethodAndArg, // Avoid propagating failures to Promises returned by later // invocations of the iterator. callInvokeWithMethodAndArg ) : new Promise(function (resolve) { resolve(callInvokeWithMethodAndArg()); }); } // Define the unified helper method that is used to implement .next, // .throw, and .return (see defineIteratorMethods). this._invoke = enqueue; } defineIteratorMethods(AsyncIterator.prototype); // Note that simple async functions are implemented on top of // AsyncIterator objects; they just return a Promise for the value of // the final result produced by the iterator. runtime.async = function(innerFn, outerFn, self, tryLocsList) { var iter = new AsyncIterator( wrap(innerFn, outerFn, self, tryLocsList) ); return runtime.isGeneratorFunction(outerFn) ? iter // If outerFn is a generator, return the full iterator. : iter.next().then(function(result) { return result.done ? result.value : iter.next(); }); }; function makeInvokeMethod(innerFn, self, context) { var state = GenStateSuspendedStart; return function invoke(method, arg) { if (state === GenStateExecuting) { throw new Error("Generator is already running"); } if (state === GenStateCompleted) { if (method === "throw") { throw arg; } // Be forgiving, per 25.3.3.3.3 of the spec: // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume return doneResult(); } while (true) { var delegate = context.delegate; if (delegate) { if (method === "return" || (method === "throw" && delegate.iterator[method] === undefined)) { // A return or throw (when the delegate iterator has no throw // method) always terminates the yield* loop. context.delegate = null; // If the delegate iterator has a return method, give it a // chance to clean up. var returnMethod = delegate.iterator["return"]; if (returnMethod) { var record = tryCatch(returnMethod, delegate.iterator, arg); if (record.type === "throw") { // If the return method threw an exception, let that // exception prevail over the original return or throw. method = "throw"; arg = record.arg; continue; } } if (method === "return") { // Continue with the outer return, now that the delegate // iterator has been terminated. continue; } } var record = tryCatch( delegate.iterator[method], delegate.iterator, arg ); if (record.type === "throw") { context.delegate = null; // Like returning generator.throw(uncaught), but without the // overhead of an extra function call. method = "throw"; arg = record.arg; continue; } // Delegate generator ran and handled its own exceptions so // regardless of what the method was, we continue as if it is // "next" with an undefined arg. method = "next"; arg = undefined; var info = record.arg; if (info.done) { context[delegate.resultName] = info.value; context.next = delegate.nextLoc; } else { state = GenStateSuspendedYield; return info; } context.delegate = null; } if (method === "next") { context._sent = arg; if (state === GenStateSuspendedYield) { context.sent = arg; } else { context.sent = undefined; } } else if (method === "throw") { if (state === GenStateSuspendedStart) { state = GenStateCompleted; throw arg; } if (context.dispatchException(arg)) { // If the dispatched exception was caught by a catch block, // then let that catch block handle the exception normally. method = "next"; arg = undefined; } } else if (method === "return") { context.abrupt("return", arg); } state = GenStateExecuting; var record = tryCatch(innerFn, self, context); if (record.type === "normal") { // If an exception is thrown from innerFn, we leave state === // GenStateExecuting and loop back for another invocation. state = context.done ? GenStateCompleted : GenStateSuspendedYield; var info = { value: record.arg, done: context.done }; if (record.arg === ContinueSentinel) { if (context.delegate && method === "next") { // Deliberately forget the last sent value so that we don't // accidentally pass it on to the delegate. arg = undefined; } } else { return info; } } else if (record.type === "throw") { state = GenStateCompleted; // Dispatch the exception by looping back around to the // context.dispatchException(arg) call above. method = "throw"; arg = record.arg; } } }; } // Define Generator.prototype.{next,throw,return} in terms of the // unified ._invoke helper method. defineIteratorMethods(Gp); Gp[iteratorSymbol] = function() { return this; }; Gp.toString = function() { return "[object Generator]"; }; function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; if (1 in locs) { entry.catchLoc = locs[1]; } if (2 in locs) { entry.finallyLoc = locs[2]; entry.afterLoc = locs[3]; } this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal"; delete record.arg; entry.completion = record; } function Context(tryLocsList) { // The root entry object (effectively a try statement without a catch // or a finally block) gives us a place to store values thrown from // locations where there is no enclosing try statement. this.tryEntries = [{ tryLoc: "root" }]; tryLocsList.forEach(pushTryEntry, this); this.reset(true); } runtime.keys = function(object) { var keys = []; for (var key in object) { keys.push(key); } keys.reverse(); // Rather than returning an object with a next method, we keep // things simple and return the next function itself. return function next() { while (keys.length) { var key = keys.pop(); if (key in object) { next.value = key; next.done = false; return next; } } // To avoid creating an additional object, we just hang the .value // and .done properties off the next function object itself. This // also ensures that the minifier will not anonymize the function. next.done = true; return next; }; }; function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) { return iteratorMethod.call(iterable); } if (typeof iterable.next === "function") { return iterable; } if (!isNaN(iterable.length)) { var i = -1, next = function next() { while (++i < iterable.length) { if (hasOwn.call(iterable, i)) { next.value = iterable[i]; next.done = false; return next; } } next.value = undefined; next.done = true; return next; }; return next.next = next; } } // Return an iterator with no values. return { next: doneResult }; } runtime.values = values; function doneResult() { return { value: undefined, done: true }; } Context.prototype = { constructor: Context, reset: function(skipTempReset) { this.prev = 0; this.next = 0; this.sent = undefined; this.done = false; this.delegate = null; this.tryEntries.forEach(resetTryEntry); if (!skipTempReset) { for (var name in this) { // Not sure about the optimal order of these conditions: if (name.charAt(0) === "t" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) { this[name] = undefined; } } } }, stop: function() { this.done = true; var rootEntry = this.tryEntries[0]; var rootRecord = rootEntry.completion; if (rootRecord.type === "throw") { throw rootRecord.arg; } return this.rval; }, dispatchException: function(exception) { if (this.done) { throw exception; } var context = this; function handle(loc, caught) { record.type = "throw"; record.arg = exception; context.next = loc; return !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; var record = entry.completion; if (entry.tryLoc === "root") { // Exception thrown outside of any try block that could handle // it, so set the completion value of the entire function to // throw the exception. return handle("end"); } if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"); var hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) { return handle(entry.catchLoc, true); } else if (this.prev < entry.finallyLoc) { return handle(entry.finallyLoc); } } else if (hasCatch) { if (this.prev < entry.catchLoc) { return handle(entry.catchLoc, true); } } else if (hasFinally) { if (this.prev < entry.finallyLoc) { return handle(entry.finallyLoc); } } else { throw new Error("try statement without catch or finally"); } } } }, abrupt: function(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } if (finallyEntry && (type === "break" || type === "continue") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) { // Ignore the finally entry if control is not jumping to a // location outside the try/catch block. finallyEntry = null; } var record = finallyEntry ? finallyEntry.completion : {}; record.type = type; record.arg = arg; if (finallyEntry) { this.next = finallyEntry.finallyLoc; } else { this.complete(record); } return ContinueSentinel; }, complete: function(record, afterLoc) { if (record.type === "throw") { throw record.arg; } if (record.type === "break" || record.type === "continue") { this.next = record.arg; } else if (record.type === "return") { this.rval = record.arg; this.next = "end"; } else if (record.type === "normal" && afterLoc) { this.next = afterLoc; } }, finish: function(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) { this.complete(entry.completion, entry.afterLoc); resetTryEntry(entry); return ContinueSentinel; } } }, "catch": function(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if (record.type === "throw") { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } // The context.catch method must only be called with a location // argument that corresponds to a known catch block. throw new Error("illegal catch attempt"); }, delegateYield: function(iterable, resultName, nextLoc) { this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }; return ContinueSentinel; } }; })( // Among the various tricks for obtaining a reference to the global // object, this seems to be the most reliable technique that does not // use indirect eval (which violates Content Security Policy). typeof global === "object" ? global : typeof window === "object" ? window : typeof self === "object" ? self : this ); // INLINED END /Users/robert/Lively/lively-dev2/lively.storage/node_modules/babel-regenerator-runtime/runtime.js // INLINED /Users/robert/Lively/lively-dev2/lively.storage/node_modules/lively.resources/dist/lively.resources_no-deps.js (function() { var GLOBAL = typeof window !== "undefined" ? window : typeof global!=="undefined" ? global : typeof self!=="undefined" ? self : this; this.lively = this.lively || {}; (function (exports,fs) { 'use strict'; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var asyncToGenerator = function (fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }; var classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }; var createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var get$1 = function get$1(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get$1(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; var inherits = function (subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }; var possibleConstructorReturn = function (self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }; var set$1 = function set$1(object, property, value, receiver) { var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent !== null) { set$1(parent, property, value, receiver); } } else if ("value" in desc && desc.writable) { desc.value = value; } else { var setter = desc.set; if (setter !== undefined) { setter.call(receiver, value); } } return value; }; var slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); var slashEndRe = /\/+$/; var slashStartRe = /^\/+/; var protocolRe = /^[a-z0-9-_\.]+:/; var slashslashRe = /^\/\/[^\/]+/; var pathDotRe = /\/\.\//g; var pathDoubleDotRe = /\/[^\/]+\/\.\./; var pathDoubleSlashRe = /(^|[^:])[\/]+/g; function nyi(obj, name) { throw new Error(name + " for " + obj.constructor.name + " not yet implemented"); } var Resource$$1 = function () { createClass(Resource$$1, null, [{ key: "fromProps", value: function fromProps() { var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; // props can have the keys contentType, type, size, etag, created, lastModified, url // it should have at least url return new this(props.url).assignProperties(props); } }]); function Resource$$1(url) { var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; classCallCheck(this, Resource$$1); if (!url) throw new Error("Cannot create resource without url"); this.url = String(url); this.binary = false; this.lastModified = undefined; this.created = undefined; this.etag = undefined; this.size = undefined; this.type = undefined; this.contentType = undefined; this.user = undefined; this.group = undefined; this.mode = undefined; this._isDirectory = undefined; this._isLink = undefined; this.linkCount = undefined; } createClass(Resource$$1, [{ key: "equals", value: function equals(otherResource) { if (!otherResource || this.constructor !== otherResource.constructor) return false; var myURL = this.url, otherURL = otherResource.url; if (myURL[myURL.length - 1] === "/") myURL = myURL.slice(0, -1); if (otherURL[otherURL.length - 1] === "/") otherURL = otherURL.slice(0, -1); return myURL === otherURL; } }, { key: "toString", value: function toString() { return this.constructor.name + "(\"" + this.url + "\")"; } }, { key: "newResource", value: function newResource(url) { return resource(url); } }, { key: "path", value: function path() { var path = this.url.replace(protocolRe, "").replace(slashslashRe, ""); return path === "" ? "/" : path; } }, { key: "pathWithoutQuery", value: function pathWithoutQuery() { return this.path().split("?")[0]; } }, { key: "name", value: function name() { var path = this.path(), queryIndex = path.lastIndexOf("?"); if (queryIndex > -1) path = path.slice(0, queryIndex); if (path.endsWith("/")) path = path.slice(0, -1); var parts = path.split("/"), lastPart = parts[parts.length - 1]; return decodeURIComponent(lastPart); } }, { key: "nameWithoutExt", value: function nameWithoutExt() { var name = this.name(), extIndex = name.lastIndexOf("."); if (extIndex > 0) name = name.slice(0, extIndex); return name; } }, { key: "scheme", value: function scheme() { return this.url.split(":")[0]; } }, { key: "host", value: function host() { var idx = this.url.indexOf("://"); if (idx === -1) return null; var noScheme = this.url.slice(idx + 3), slashIdx = noScheme.indexOf("/"); return noScheme.slice(0, slashIdx > -1 ? slashIdx : noScheme.length); } }, { key: "schemeAndHost", value: function schemeAndHost() { if (this.isRoot()) return this.asFile().url; return this.url.slice(0, this.url.length - this.path().length); } }, { key: "parent", value: function parent() { if (this.isRoot()) return null; return this.newResource(this.url.replace(slashEndRe, "").split("/").slice(0, -1).join("/") + "/"); } }, { key: "parents", value: function parents() { var result = [], p = this.parent(); while (p) { result.unshift(p);p = p.parent(); } return result; } }, { key: "isParentOf", value: function isParentOf(otherRes) { var _this = this; return otherRes.schemeAndHost() === this.schemeAndHost() && otherRes.parents().some(function (p) { return p.equals(_this); }); } }, { key: "query", value: function query() { var url = this.url; var _url$split = this.url.split("?"), _url$split2 = slicedToArray(_url$split, 2), _ = _url$split2[0], search = _url$split2[1], query = {}; if (!search) return query; var args = search && search.split("&"); if (args) for (var i = 0; i < args.length; i++) { var keyAndVal = args[i].split("="), key = keyAndVal[0], val = true; if (keyAndVal.length > 1) { val = decodeURIComponent(keyAndVal.slice(1).join("=")); if (val.match(/^(true|false|null|[0-9"[{].*)$/)) try { val = JSON.parse(val); } catch (e) { if (val[0] === "[") val = val.slice(1, -1).split(","); // handle string arrays // if not JSON use string itself } } query[key] = val; } return query; } }, { key: "withQuery", value: function withQuery(queryObj) { var query = _extends({}, this.query(), queryObj), _url$split3 = this.url.split("?"), _url$split4 = slicedToArray(_url$split3, 1), url = _url$split4[0], queryString = Object.keys(query).map(function (key) { return key + "=" + encodeURIComponent(String(query[key])); }).join("&"); return this.newResource(url + "?" + queryString); } }, { key: "commonDirectory", value: function commonDirectory(other) { if (other.schemeAndHost() !== this.schemeAndHost()) return null; if (this.isDirectory() && this.equals(other)) return this; if (this.isRoot()) return this.asDirectory(); if (other.isRoot()) return other.asDirectory(); var otherParents = other.parents(), myParents = this.parents(), common = this.root(); for (var i = 0; i < myParents.length; i++) { var myP = myParents[i], otherP = otherParents[i]; if (!otherP || !myP.equals(otherP)) return common; common = myP; } return common; } }, { key: "withRelativePartsResolved", value: function withRelativePartsResolved() { var path = this.path(), result = path; // /foo/../bar --> /bar do { path = result; result = path.replace(pathDoubleDotRe, ''); } while (result != path); // foo//bar --> foo/bar result = result.replace(pathDoubleSlashRe, '$1/'); // foo/./bar --> foo/bar result = result.replace(pathDotRe, '/'); if (result === this.path()) return this; if (result.startsWith("/")) result = result.slice(1); return this.newResource(this.root().url + result); } }, { key: "relativePathFrom", value: function relativePathFrom(fromResource) { if (fromResource.root().url != this.root().url) throw new Error('hostname differs in relativePathFrom ' + fromResource + ' vs ' + this); var myPath = this.withRelativePartsResolved().path(), otherPath = fromResource.withRelativePartsResolved().path(); if (myPath == otherPath) return ''; var relPath = checkPathes(myPath, otherPath); if (!relPath) throw new Error('pathname differs in relativePathFrom ' + fromResource + ' vs ' + this); return relPath; // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- function checkPathes(path1, path2) { var paths1 = path1.split('/'), paths2 = path2.split('/'); paths1.shift(); paths2.shift(); for (var i = 0; i < paths2.length; i++) { if (!paths1[i] || paths1[i] != paths2[i]) break; } // now that's some JavaScript FOO var result = '../'.repeat(Math.max(0, paths2.length - i - 1)) + paths1.splice(i, paths1.length).join('/'); return result; } } }, { key: "join", value: function join(path) { return this.newResource(this.url.replace(slashEndRe, "") + "/" + path.replace(slashStartRe, "")); } }, { key: "withPath", value: function withPath(path) { var root = this.isRoot() ? this : this.root(); return root.join(path); } }, { key: "isRoot", value: function isRoot() { return this.path() === "/"; } }, { key: "isFile", value: function isFile() { return !this.isRoot() && !this.url.match(slashEndRe); } }, { key: "isDirectory", value: function isDirectory() { return !this.isFile(); } }, { key: "asDirectory", value: function asDirectory() { if (this.url.endsWith("/")) return this; return this.newResource(this.url.replace(slashEndRe, "") + "/"); } }, { key: "root", value: function root() { if (this.isRoot()) return this; var toplevel = this.url.slice(0, -this.path().length); return this.newResource(toplevel + "/"); } }, { key: "asFile", value: function asFile() { if (!this.url.endsWith("/")) return this; return this.newResource(this.url.replace(slashEndRe, "")); } }, { key: "assignProperties", value: function assignProperties(props) { // lastModified, etag, ... for (var name in props) { if (name === "url") continue; // rename some properties to not create conflicts var myPropName = name; if (name === "isLink" || name === "isDirectory") myPropName = "_" + name; this[myPropName] = props[name]; } return this; } }, { key: "ensureExistance", value: function () { var _ref = asyncToGenerator(regeneratorRuntime.mark(function _callee(optionalContent) { return regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return this.exists(); case 2: if (!_context.sent) { _context.next = 4; break; } return _context.abrupt("return", this); case 4: _context.next = 6; return this.parent().ensureExistance(); case 6: if (!this.isFile()) { _context.next = 11; break; } _context.next = 9; return this.write(optionalContent || ""); case 9: _context.next = 13; break; case 11: _context.next = 13; return this.mkdir(); case 13: return _context.abrupt("return", this); case 14: case "end": return _context.stop(); } } }, _callee, this); })); function ensureExistance(_x3) { return _ref.apply(this, arguments); } return ensureExistance; }() }, { key: "copyTo", value: function () { var _ref2 = asyncToGenerator(regeneratorRuntime.mark(function _callee2(otherResource) { var _this2 = this; var toFile, fromResources, toResources; return regeneratorRuntime.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: if (!this.isFile()) { _context2.next = 10; break; } toFile = otherResource.isFile() ? otherResource : otherResource.join(this.name()); _context2.t0 = toFile; _context2.next = 5; return this.read(); case 5: _context2.t1 = _context2.sent; _context2.next = 8; return _context2.t0.write.call(_context2.t0, _context2.t1); case 8: _context2.next = 22; break; case 10: if (otherResource.isDirectory()) { _context2.next = 12; break; } throw new Error("Cannot copy a directory to a file!"); case 12: _context2.next = 14; return this.dirList('infinity'); case 14: fromResources = _context2.sent; toResources = fromResources.map(function (ea) { return otherResource.join(ea.relativePathFrom(_this2)); }); _context2.next = 18; return otherResource.ensureExistance(); case 18: _context2.next = 20; return fromResources.reduceRight(function (next, ea, i) { return function () { return Promise.resolve(ea.isDirectory() && toResources[i].ensureExistance()).then(next); }; }, function () { return Promise.resolve(); })(); case 20: _context2.next = 22; return fromResources.reduceRight(function (next, ea, i) { return function () { return Promise.resolve(ea.isFile() && ea.copyTo(toResources[i])).then(next); }; }, function () { return Promise.resolve(); })(); case 22: return _context2.abrupt("return", this); case 23: case "end": return _context2.stop(); } } }, _callee2, this); })); function copyTo(_x4) { return _ref2.apply(this, arguments); } return copyTo; }() }, { key: "rename", value: function () { var _ref3 = asyncToGenerator(regeneratorRuntime.mark(function _callee3(otherResource) { return regeneratorRuntime.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: _context3.next = 2; return this.copyTo(otherResource); case 2: this.remove(); return _context3.abrupt("return", otherResource); case 4: case "end": return _context3.stop(); } } }, _callee3, this); })); function rename$$1(_x5) { return _ref3.apply(this, arguments); } return rename$$1; }() }, { key: "beBinary", value: function beBinary(bool) { return this.setBinary(true); } }, { key: "setBinary", value: function setBinary(bool) { this.binary = bool; return this; } }, { key: "read", value: function () { var _ref4 = asyncToGenerator(regeneratorRuntime.mark(function _callee4() { return regeneratorRuntime.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: nyi(this, "read"); case 1: case "end": return _context4.stop(); } } }, _callee4, this); })); function read() { return _ref4.apply(this, arguments); } return read; }() }, { key: "write", value: function () { var _ref5 = asyncToGenerator(regeneratorRuntime.mark(function _callee5() { return regeneratorRuntime.wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: nyi(this, "write"); case 1: case "end": return _context5.stop(); } } }, _callee5, this); })); function write() { return _ref5.apply(this, arguments); } return write; }() }, { key: "mkdir", value: function () { var _ref6 = asyncToGenerator(regeneratorRuntime.mark(function _callee6() { return regeneratorRuntime.wrap(function _callee6$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: nyi(this, "mkdir"); case 1: case "end": return _context6.stop(); } } }, _callee6, this); })); function mkdir() { return _ref6.apply(this, arguments); } return mkdir; }() }, { key: "exists", value: function () { var _ref7 = asyncToGenerator(regeneratorRuntime.mark(function _callee7() { return regeneratorRuntime.wrap(function _callee7$(_context7) { while (1) { switch (_context7.prev = _context7.next) { case 0: nyi(this, "exists"); case 1: case "end": return _context7.stop(); } } }, _callee7, this); })); function exists() { return _ref7.apply(this, arguments); } return exists; }() }, { key: "remove", value: function () { var _ref8 = asyncToGenerator(regeneratorRuntime.mark(function _callee8() { return regeneratorRuntime.wrap(function _callee8$(_context8) { while (1) { switch (_context8.prev = _context8.next) { case 0: nyi(this, "remove"); case 1: case "end": return _context8.stop(); } } }, _callee8, this); })); function remove() { return _ref8.apply(this, arguments); } return remove; }() }, { key: "dirList", value: function () { var _ref9 = asyncToGenerator(regeneratorRuntime.mark(function _callee9(depth, opts) { return regeneratorRuntime.wrap(function _callee9$(_context9) { while (1) { switch (_context9.prev = _context9.next) { case 0: nyi(this, "dirList"); case 1: case "end": return _context9.stop(); } } }, _callee9, this); })); function dirList(_x6, _x7) { return _ref9.apply(this, arguments); } return dirList; }() }, { key: "readProperties", value: function () { var _ref10 = asyncToGenerator(regeneratorRuntime.mark(function _callee10(opts) { return regeneratorRuntime.wrap(function _callee10$(_context10) { while (1) { switch (_context10.prev = _context10.next) { case 0: nyi(this, "readProperties"); case 1: case "end": return _context10.stop(); } } }, _callee10, this); })); function readProperties(_x8) { return _ref10.apply(this, arguments); } return readProperties; }() }, { key: "writeJson", value: function writeJson(obj) { var pretty = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; return this.write(pretty ? JSON.stringify(obj, null, 2) : JSON.stringify(obj)); } }, { key: "readJson", value: function () { var _ref11 = asyncToGenerator(regeneratorRuntime.mark(function _callee11(obj) { return regeneratorRuntime.wrap(function _callee11$(_context11) { while (1) { switch (_context11.prev = _context11.next) { case 0: _context11.t0 = JSON; _context11.next = 3; return this.read(); case 3: _context11.t1 = _context11.sent; return _context11.abrupt("return", _context11.t0.parse.call(_context11.t0, _context11.t1)); case 5: case "end": return _context11.stop(); } } }, _callee11, this); })); function readJson(_x10) { return _ref11.apply(this, arguments); } return readJson; }() // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- // serialization // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- }, { key: "__serialize__", value: function __serialize__() { return { __expr__: "var r = null; try { r = resource(\"" + this.url + "\");} catch (err) {}; r", bindings: { "lively.resources": ["resource"] } }; } }, { key: "isResource", get: function get() { return true; } }]); return Resource$$1; }(); function applyExclude(exclude, resources) { if (Array.isArray(exclude)) return exclude.reduce(function (intersect, exclude) { return applyExclude(exclude, intersect); }, resources); if (typeof exclude === "string") return resources.filter(function (ea) { return ea.path() !== exclude && ea.name() !== exclude; }); if (exclude instanceof RegExp) return resources.filter(function (ea) { return !exclude.test(ea.path()) && !exclude.test(ea.name()); }); if (typeof exclude === "function") return resources.filter(function (ea) { return !exclude(ea); }); return resources; } /* applyExclude(["foo", "foo"], [ {path: () => "foo", name: () => "foo"}, {path: () => "bar", name: () => "bar"}, {path: () => "baz", name: () => "baz"} ]) applyExclude(["bar", "foo"], [ {path: () => "foo", name: () => "foo"}, {path: () => "bar", name: () => "bar"}, {path: () => "baz", name: () => "baz"} ]) */ /*global fetch, DOMParser, XPathEvaluator, XPathResult, Namespace*/ var XPathQuery = function () { function XPathQuery(expression) { classCallCheck(this, XPathQuery); this.expression = expression; this.contextNode = null; this.xpe = new XPathEvaluator(); } createClass(XPathQuery, [{ key: "establishContext", value: function establishContext(node) { if (this.nsResolver) return; var ctx = node.ownerDocument ? node.ownerDocument.documentElement : node.documentElement; if (ctx !== this.contextNode) { this.contextNode = ctx; this.nsResolver = this.xpe.createNSResolver(ctx); } } }, { key: "manualNSLookup", value: function manualNSLookup() { this.nsResolver = function (prefix) { return Namespace[prefix.toUpperCase()] || null; }; return this; } }, { key: "findAll", value: function findAll(node, defaultValue) { this.establishContext(node); var result = this.xpe.evaluate(this.expression, node, this.nsResolver, XPathResult.ANY_TYPE, null), accumulator = [], res = null; while (res = result.iterateNext()) { accumulator.push(res); }return accumulator.length > 0 || defaultValue === undefined ? accumulator : defaultValue; } }, { key: "findFirst",