UNPKG

@dashkite/monterey

Version:

Browser-friendly URL-template-based routing

130 lines (129 loc) 13.2 kB
"use strict"; 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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