@dashkite/monterey
Version:
Browser-friendly URL-template-based routing
130 lines (129 loc) • 13.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "default" //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiL0BkYXNoa2l0ZS9tb250ZXJleS9zcmMvaW5kZXguY29mZmVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLElBQUE7O0FBQUEsT0FBTyxDQUFBLE1BQVAsTUFBQTs7QUFDQSxPQUFPLENBQUEsT0FBUCxNQUFBOztBQUNBLE9BQU8sT0FBUCxNQUFBOztBQUNBLE9BQUE7RUFBUyxNQUFUO0NBQUEsTUFBQTs7QUFDQSxPQUFBO0VBQVMsTUFBVDtDQUFBLE1BQUE7O0FBQ0EsT0FBQTtFQUNFLE9BREY7RUFFRSxLQUZGO0VBR0UsR0FIRjtDQUFBLE1BQUE7O0FBTU07RUFBTixNQUFBLFNBQUE7SUFFUyxPQUFOLElBQU0sQ0FBQSxDQUFBO2FBQ0wsTUFBTSxDQUFDLE1BQVAsQ0FBZ0IsSUFBQSxDQUFJLElBQUosQ0FBQSxDQUFBLENBQWhCLEVBQXlCO1FBQUEsTUFBQSxFQUFRLElBQUksTUFBSixDQUFBO01BQVIsQ0FBekI7SUFESzs7SUFHUCxNQUFRLENBQUUsUUFBRixFQUFZLElBQVosQ0FBQTthQUNOLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBUixDQUFlLENBQUUsUUFBRixFQUFZLElBQVosQ0FBZjtJQURNOztJQUdSLE9BQVMsQ0FBRSxRQUFGLEVBQVksSUFBWixDQUFBO2FBQ1AsSUFBQyxDQUFBLE1BQU0sQ0FBQyxPQUFSLENBQWdCLENBQUUsUUFBRixFQUFZLElBQVosQ0FBaEI7SUFETzs7SUFHVCxHQUFLLENBQUUsUUFBRixFQUFZLElBQVosQ0FBQTthQUNILElBQUMsQ0FBQSxPQUFELENBQVMsUUFBVCxFQUFtQixJQUFuQjtJQURHOztJQW9CTCxJQUFNLENBQUMsQ0FBWSxRQUFaLEVBQUUsR0FBQSxLQUFGLENBQUQsQ0FBQTtBQUNSLFVBQUEsTUFBQSxFQUFBLElBQUEsRUFBQTtNQUFJLElBQUcsa0NBQUg7UUFDRSxNQUFBLEdBQVMsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUN6QixJQUFBLEdBQU8sTUFBQSxDQUFPLElBQUksQ0FBQyxRQUFaLEVBQXNCLE9BQUEsQ0FBUSxRQUFSLENBQXRCO2VBQ1AsSUFBSSxHQUFKLENBQVEsSUFBUixFQUFjLE1BQWQsRUFIRjtPQUFBLE1BQUE7UUFLRSxPQUFPLENBQUMsSUFBUixDQUFhLEtBQUEsQ0FBTSxnQkFBTixDQUFiO1FBQ0EsT0FBTyxDQUFDLElBQVIsQ0FBYSxLQUFiO1FBQ0EsTUFBTSxLQUFBLENBQU0sV0FBTixFQVBSOztJQURJOztJQVVOLFFBQVUsQ0FBRSxNQUFGLENBQUE7YUFDUixVQUFVLENBQUMsUUFBWCxDQUFvQixJQUFDLENBQUEsSUFBRCxDQUFNLE1BQU4sQ0FBcEI7SUFEUTs7RUF6Q1o7O3FCQWNFLEtBQUEsR0FBVSxDQUFBLFFBQUEsQ0FBQSxDQUFBO1dBRVIsQ0FBRSxPQUFPLENBQUMsSUFBUixDQUFhLGlCQUFiLENBQUYsQ0FFRSxDQUFDLE1BRkgsQ0FFVSxDQUFFLE1BQUYsQ0FGVixFQUVzQixRQUFBLENBQUUsS0FBRixDQUFBO2FBQ2xCLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQWYsQ0FBb0IsUUFBQSxDQUFFLElBQUYsQ0FBQTtlQUNqQixHQUFHLENBQUMsS0FBSixDQUFVLEtBQVYsRUFBaUIsSUFBSSxDQUFDLElBQXRCO01BRGlCLENBQXBCO0lBRGtCLENBRnRCLENBTUUsQ0FBQyxNQU5ILENBTVUsQ0FBRSxHQUFGLENBTlYsRUFNbUIsUUFBQSxDQUFFLEdBQUYsQ0FBQTthQUNmLElBQUMsQ0FBQSxNQUFNLENBQUMsS0FBUixDQUFjLEdBQUcsQ0FBQyxNQUFKLENBQVcsR0FBWCxDQUFkO0lBRGUsQ0FObkIsQ0FTRSxDQUFDLE1BVEgsQ0FTVSxDQUFFLFFBQUYsQ0FUVixFQVN3QixRQUFBLENBQUUsR0FBRixDQUFBO2FBQ3BCLElBQUMsQ0FBQSxNQUFNLENBQUMsS0FBUixDQUFjLEdBQUcsQ0FBQyxNQUFKLENBQVcsR0FBWCxDQUFkO0lBRG9CLENBVHhCLENBWUUsQ0FBQyxNQVpILENBWVUsQ0FBRSxNQUFGLENBWlYsRUFZc0IsUUFBQSxDQUFFLE1BQUYsQ0FBQTthQUNsQixJQUFDLENBQUEsS0FBRCxDQUFPLEdBQUcsQ0FBQyxJQUFKLENBQVMsTUFBVCxDQUFQO0lBRGtCLENBWnRCO0VBRlEsQ0FBQTs7Ozs7O0FBZ0NaLE9BQUEsUUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIEZuICBmcm9tIFwiQGRhc2hraXRlL2pveS9mdW5jdGlvblwiXG5pbXBvcnQgKiBhcyBPYmogIGZyb20gXCJAZGFzaGtpdGUvam95L29iamVjdFwiXG5pbXBvcnQgR2VuZXJpYyBmcm9tIFwiQGRhc2hraXRlL2dlbmVyaWNcIlxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSBcIkBkYXNoa2l0ZS91cmwtcm91dGVyXCJcbmltcG9ydCB7IGVuY29kZSB9IGZyb20gXCJAZGFzaGtpdGUvdXJsLWNvZGV4XCJcbmltcG9ydCB7IFxuICBjb21wYWN0XG4gIGVycm9yXG4gIFhSTFxufSBmcm9tIFwiLi9oZWxwZXJzXCJcblxuY2xhc3MgUmVnaXN0cnlcblxuICBAbWFrZTogLT5cbiAgICBPYmplY3QuYXNzaWduICggbmV3IEAgKSwgcm91dGVyOiBuZXcgUm91dGVyXG5cbiAgYXBwZW5kOiAoIHRlbXBsYXRlLCBkYXRhICkgLT5cbiAgICBAcm91dGVyLmFwcGVuZCB7IHRlbXBsYXRlLCBkYXRhIH1cblxuICBwcmVwZW5kOiAoIHRlbXBsYXRlLCBkYXRhICkgLT5cbiAgICBAcm91dGVyLnByZXBlbmQgeyB0ZW1wbGF0ZSwgZGF0YSB9XG5cbiAgYWRkOiAoIHRlbXBsYXRlLCBkYXRhICkgLT4gXG4gICAgQHByZXBlbmQgdGVtcGxhdGUsIGRhdGFcblxuICBxdWVyeTogZG8gLT5cblxuICAgICggR2VuZXJpYy5tYWtlIFwibW9udGVyZXk6OnF1ZXJ5XCIgKVxuXG4gICAgICAuZGVmaW5lIFsgT2JqZWN0IF0sICggcXVlcnkgKSAtPlxuICAgICAgICBAcm91dGVyLnJvdXRlcy5maW5kICggcGFnZSApIC0+XG4gICAgICAgICAgIE9iai5xdWVyeSBxdWVyeSwgcGFnZS5kYXRhXG5cbiAgICAgIC5kZWZpbmUgWyBVUkwgXSwgKCB1cmwgKSAtPlxuICAgICAgICBAcm91dGVyLm1hdGNoIFhSTC50YXJnZXQgdXJsXG5cbiAgICAgIC5kZWZpbmUgWyBMb2NhdGlvbiBdLCAoIHVybCApIC0+XG4gICAgICAgIEByb3V0ZXIubWF0Y2ggWFJMLnRhcmdldCB1cmxcblxuICAgICAgLmRlZmluZSBbIFN0cmluZyBdLCAoIHRhcmdldCApIC0+XG4gICAgICAgIEBxdWVyeSBYUkwubWFrZSB0YXJnZXRcblxuICBsaW5rOiAoeyBxdWVyeS4uLiwgYmluZGluZ3MgfSkgLT5cbiAgICBpZiAoIHBhZ2UgPSBAcXVlcnkgcXVlcnkgKT9cbiAgICAgIG9yaWdpbiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmICAgIFxuICAgICAgcGF0aCA9IGVuY29kZSBwYWdlLnRlbXBsYXRlLCBjb21wYWN0IGJpbmRpbmdzXG4gICAgICBuZXcgVVJMIHBhdGgsIG9yaWdpblxuICAgIGVsc2VcbiAgICAgIGNvbnNvbGUud2FybiBlcnJvciBcInBhZ2Ugbm90IGZvdW5kXCJcbiAgICAgIGNvbnNvbGUud2FybiBxdWVyeVxuICAgICAgdGhyb3cgZXJyb3IgXCJub3QgZm91bmRcIlxuXG4gIG5hdmlnYXRlOiAoIHRhcmdldCApIC0+XG4gICAgbmF2aWdhdGlvbi5uYXZpZ2F0ZSBAbGluayB0YXJnZXRcblxuXG4gIFxuZXhwb3J0IGRlZmF1bHQgUmVnaXN0cnlcbiJdfQ==
//# sourceURL=/@dashkite/monterey/src/index.coffee
, {
enumerable: true,
get: function() {
return _default;
}
});
const _function = /*#__PURE__*/ _interop_require_wildcard(require("@dashkite/joy/function"));
const _object = /*#__PURE__*/ _interop_require_wildcard(require("@dashkite/joy/object"));
const _generic = /*#__PURE__*/ _interop_require_default(require("@dashkite/generic"));
const _urlrouter = require("@dashkite/url-router");
const _urlcodex = require("@dashkite/url-codex");
const _helpers = require("./helpers");
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
function _getRequireWildcardCache(nodeInterop) {
if (typeof WeakMap !== "function") return null;
var cacheBabelInterop = new WeakMap();
var cacheNodeInterop = new WeakMap();
return (_getRequireWildcardCache = function(nodeInterop) {
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
})(nodeInterop);
}
function _interop_require_wildcard(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 = {
__proto__: null
};
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;
}
var Registry;
Registry = (function() {
class Registry {
static make() {
return Object.assign(new this(), {
router: new _urlrouter.Router()
});
}
append(template, data) {
return this.router.append({
template,
data
});
}
prepend(template, data) {
return this.router.prepend({
template,
data
});
}
add(template, data) {
return this.prepend(template, data);
}
link({ bindings, ...query }) {
var origin, page, path;
if ((page = this.query(query)) != null) {
origin = window.location.href;
path = (0, _urlcodex.encode)(page.template, (0, _helpers.compact)(bindings));
return new URL(path, origin);
} else {
console.warn((0, _helpers.error)("page not found"));
console.warn(query);
throw (0, _helpers.error)("not found");
}
}
navigate(target) {
return navigation.navigate(this.link(target));
}
}
;
Registry.prototype.query = function() {
return _generic.default.make("monterey::query").define([
Object
], function(query) {
return this.router.routes.find(function(page) {
return _object.query(query, page.data);
});
}).define([
URL
], function(url) {
return this.router.match(_helpers.XRL.target(url));
}).define([
Location
], function(url) {
return this.router.match(_helpers.XRL.target(url));
}).define([
String
], function(target) {
return this.query(_helpers.XRL.make(target));
});
}();
return Registry;
}).call(void 0);
const _default = Registry;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlcyI6WyIvQGRhc2hraXRlL21vbnRlcmV5L3NyYy9pbmRleC5jb2ZmZWUiXSwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIEZuICBmcm9tIFwiQGRhc2hraXRlL2pveS9mdW5jdGlvblwiXG5pbXBvcnQgKiBhcyBPYmogIGZyb20gXCJAZGFzaGtpdGUvam95L29iamVjdFwiXG5pbXBvcnQgR2VuZXJpYyBmcm9tIFwiQGRhc2hraXRlL2dlbmVyaWNcIlxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSBcIkBkYXNoa2l0ZS91cmwtcm91dGVyXCJcbmltcG9ydCB7IGVuY29kZSB9IGZyb20gXCJAZGFzaGtpdGUvdXJsLWNvZGV4XCJcbmltcG9ydCB7IFxuICBjb21wYWN0XG4gIGVycm9yXG4gIFhSTFxufSBmcm9tIFwiLi9oZWxwZXJzXCJcblxuY2xhc3MgUmVnaXN0cnlcblxuICBAbWFrZTogLT5cbiAgICBPYmplY3QuYXNzaWduICggbmV3IEAgKSwgcm91dGVyOiBuZXcgUm91dGVyXG5cbiAgYXBwZW5kOiAoIHRlbXBsYXRlLCBkYXRhICkgLT5cbiAgICBAcm91dGVyLmFwcGVuZCB7IHRlbXBsYXRlLCBkYXRhIH1cblxuICBwcmVwZW5kOiAoIHRlbXBsYXRlLCBkYXRhICkgLT5cbiAgICBAcm91dGVyLnByZXBlbmQgeyB0ZW1wbGF0ZSwgZGF0YSB9XG5cbiAgYWRkOiAoIHRlbXBsYXRlLCBkYXRhICkgLT4gXG4gICAgQHByZXBlbmQgdGVtcGxhdGUsIGRhdGFcblxuICBxdWVyeTogZG8gLT5cblxuICAgICggR2VuZXJpYy5tYWtlIFwibW9udGVyZXk6OnF1ZXJ5XCIgKVxuXG4gICAgICAuZGVmaW5lIFsgT2JqZWN0IF0sICggcXVlcnkgKSAtPlxuICAgICAgICBAcm91dGVyLnJvdXRlcy5maW5kICggcGFnZSApIC0+XG4gICAgICAgICAgIE9iai5xdWVyeSBxdWVyeSwgcGFnZS5kYXRhXG5cbiAgICAgIC5kZWZpbmUgWyBVUkwgXSwgKCB1cmwgKSAtPlxuICAgICAgICBAcm91dGVyLm1hdGNoIFhSTC50YXJnZXQgdXJsXG5cbiAgICAgIC5kZWZpbmUgWyBMb2NhdGlvbiBdLCAoIHVybCApIC0+XG4gICAgICAgIEByb3V0ZXIubWF0Y2ggWFJMLnRhcmdldCB1cmxcblxuICAgICAgLmRlZmluZSBbIFN0cmluZyBdLCAoIHRhcmdldCApIC0+XG4gICAgICAgIEBxdWVyeSBYUkwubWFrZSB0YXJnZXRcblxuICBsaW5rOiAoeyBxdWVyeS4uLiwgYmluZGluZ3MgfSkgLT5cbiAgICBpZiAoIHBhZ2UgPSBAcXVlcnkgcXVlcnkgKT9cbiAgICAgIG9yaWdpbiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmICAgIFxuICAgICAgcGF0aCA9IGVuY29kZSBwYWdlLnRlbXBsYXRlLCBjb21wYWN0IGJpbmRpbmdzXG4gICAgICBuZXcgVVJMIHBhdGgsIG9yaWdpblxuICAgIGVsc2VcbiAgICAgIGNvbnNvbGUud2FybiBlcnJvciBcInBhZ2Ugbm90IGZvdW5kXCJcbiAgICAgIGNvbnNvbGUud2FybiBxdWVyeVxuICAgICAgdGhyb3cgZXJyb3IgXCJub3QgZm91bmRcIlxuXG4gIG5hdmlnYXRlOiAoIHRhcmdldCApIC0+XG4gICAgbmF2aWdhdGlvbi5uYXZpZ2F0ZSBAbGluayB0YXJnZXRcblxuXG4gIFxuZXhwb3J0IGRlZmF1bHQgUmVnaXN0cnlcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7a0VBQUE7Z0VBQ0E7Z0VBQ0E7MkJBQ0E7MEJBQ0E7eUJBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTEEsSUFBQTtBQVdNLFdBQUEsQ0FBQTtJQUFOLE1BQUEsU0FBQTtRQUVTLE9BQU4sSUFBTSxDQUFBLENBQUEsQ0FBQTttQkFDTCxNQUFNLENBQUMsTUFBUCxDQUFnQixJQUFJLEFBQUosSUFBQSxDQUFBLENBQUEsQ0FBaEIsQ0FBeUI7Z0JBQUEsTUFBQSxFQUFRLElBQUksaUJB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