UNPKG

@wener/console

Version:
504 lines (503 loc) 17.2 kB
function _array_like_to_array(arr, len) { if (len == null || len > arr.length) len = arr.length; for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i]; return arr2; } function _array_with_holes(arr) { if (Array.isArray(arr)) return arr; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _async_to_generator(fn) { return function() { var self = this, args = arguments; return new Promise(function(resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _define_property(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _iterable_to_array(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _iterable_to_array_limit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for(_i = _i.call(arr); !(_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"] != null) _i["return"](); } finally{ if (_d) throw _e; } } return _arr; } function _non_iterable_rest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _object_spread(target) { for(var i = 1; i < arguments.length; i++){ var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === "function") { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function(key) { _define_property(target, key, source[key]); }); } return target; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function(sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _object_spread_props(target, source) { source = source != null ? source : {}; if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function(key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _object_without_properties(source, excluded) { if (source == null) return {}; var target = {}, sourceKeys, key, i; if (typeof Reflect !== "undefined" && Reflect.ownKeys) { sourceKeys = Reflect.ownKeys(source); for(i = 0; i < sourceKeys.length; i++){ key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } return target; } target = _object_without_properties_loose(source, excluded); if (Object.getOwnPropertySymbols) { sourceKeys = Object.getOwnPropertySymbols(source); for(i = 0; i < sourceKeys.length; i++){ key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } function _object_without_properties_loose(source, excluded) { if (source == null) return {}; var target = {}, sourceKeys = Object.getOwnPropertyNames(source), key, i; for(i = 0; i < sourceKeys.length; i++){ key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } return target; } function _sliced_to_array(arr, i) { return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest(); } function _to_array(arr) { return _array_with_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_rest(); } function _unsupported_iterable_to_array(o, minLen) { if (!o) return; if (typeof o === "string") return _array_like_to_array(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen); } function _ts_generator(thisArg, body) { var f, y, t, _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty; return d(g, "next", { value: verb(0) }), d(g, "throw", { value: verb(1) }), d(g, "return", { value: verb(2) }), typeof Symbol === "function" && d(g, Symbol.iterator, { value: function() { return this; } }), g; function verb(n) { return function(v) { return step([ n, v ]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while(g && (g = 0, op[0] && (_ = 0)), _)try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [ op[0] & 2, t.value ]; switch(op[0]){ case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [ 0 ]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [ 6, e ]; y = 0; } finally{ f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } } import React, { createContext, forwardRef, Fragment, lazy, useContext, useMemo, useRef } from 'react'; var _components = []; export function defineComponent(_0) { var _Component = _0.Component, load = _0.load, opts = _object_without_properties(_0, [ "Component", "load" ]); { var Component = createComponent({ Component: _Component, load: load }); // if (Component === Fragment) { // console.warn(`Component ${opts.name} not resolved`); // } var def = _object_spread_props(_object_spread({ title: opts.title || opts.name }, opts), { Component: Component, metadata: {} }); var last = _components.find(function(v) { return v.name === def.name; }); if (last) { console.error("Component ".concat(def.name, " already defined")); // last.schema = def.schema; // last.props = def.props; // last.metadata = def.metadata; } _components.unshift(def); } var name = opts.name; var component = Object.assign(/*#__PURE__*/ forwardRef(function(props, ref) { return /*#__PURE__*/ React.createElement(ConsumeComponent, _object_spread_props(_object_spread({ $name: name }, props), { ref: ref })); }), _define_property({}, ComponentNamePropKey, name)); return component; } export function getComponents() { return _components; } export var ConsumeComponent = /*#__PURE__*/ forwardRef(function(_0, _1) { var _ref = [ _0, _1 ], _ref1 = _to_array(_ref), _ref2 = _ref1[0], _rest = _ref1.slice(1), $name = _ref2.$name, props = _object_without_properties(_ref2, [ "$name" ]), _rest1 = _sliced_to_array(_rest, 1), ref = _rest1[0]; var _useComponent = _sliced_to_array(useComponent($name), 1), Component = _useComponent[0]; return /*#__PURE__*/ React.createElement(Component, _object_spread_props(_object_spread({}, props), { ref: ref })); }); var ComponentNamePropKey = '$ContextComponentName'; export function createContextComponent(name) { var component = Object.assign(/*#__PURE__*/ forwardRef(function(props, ref) { return /*#__PURE__*/ React.createElement(ConsumeComponent, _object_spread_props(_object_spread({ $name: name }, props), { ref: ref })); }), _define_property({}, ComponentNamePropKey, name)); component.displayName = "".concat(ComponentNamePropKey, "(").concat(name, ")"); return component; } var RootValue = { get components () { return _components.map(function(v) { return { provide: v.name, Component: v.Component }; }); }, useComponent: function(name) { return resolveComponent(name, RootValue); } }; var ComponentContext = /*#__PURE__*/ createContext(RootValue); function resolveName(def) { var name; if (typeof def === 'string') { name = def; } else { name = def[ComponentNamePropKey] || def.displayName || // (def as ComponentType).name || // this is not reliable ''; } return name; } export function useComponent(comp, def) { var useComponent = useContext(ComponentContext).useComponent; var _useComponent = _sliced_to_array(useComponent(comp), 2), o = _useComponent[0], r = _useComponent[1]; return [ r.found ? o : def || o, r ]; } export var ComponentProvider = function(param) { var components = param.components, children = param.children; var parent = useContext(ComponentContext); var provideRef = useRef(components); var parentRef = useRef(parent); provideRef.current = components; parentRef.current = parent; var val = useMemo(function() { return { get parent () { return parentRef.current; }, get components () { return provideRef.current; }, useComponent: function(comp) { return resolveComponent(comp, val); } }; }, []); return /*#__PURE__*/ React.createElement(ComponentContext.Provider, { value: val }, children); }; function resolveComponent(comp, obj) { var cur = obj; var Component = Fragment; var found = false; var name = resolveName(comp); var isMatch = function(provide) { if (provide === comp) { return true; } return name && resolveName(provide) === name; }; outer: while(cur){ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined; try { for(var _iterator = cur.components[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){ var item = _step.value; if (isMatch(item.provide)) { Component = createComponent(item); found = true; break outer; } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally{ try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally{ if (_didIteratorError) { throw _iteratorError; } } } cur = cur.parent; } if (Component === Fragment || !found) { console.warn("Component ".concat(name || String(comp), " not found")); } return [ Component, { found: found } ]; } function createComponent(param) { var Component = param.Component, load = param.load; if (Component) { return Component; } if (load) { return /*#__PURE__*/ lazy(function() { return _async_to_generator(function() { var v, e; return _ts_generator(this, function(_state) { switch(_state.label){ case 0: _state.trys.push([ 0, 2, , 3 ]); return [ 4, load() ]; case 1: v = _state.sent(); if ('default' in v) { return [ 2, v ]; } if (!v) { throw new Error("Component not found"); } return [ 2, { default: v } ]; case 2: e = _state.sent(); console.error("Failed to load component", { load: load, Component: Component }, e); return [ 2, { default: Fragment } ]; case 3: return [ 2 ]; } }); })(); }); } return Fragment; }