UNPKG

@cloudbase/app

Version:
121 lines 14.3 kB
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; import { constants } from '@cloudbase/utilities'; var ERRORS = constants.ERRORS; var components = {}; export function registerComponent(app, component) { var name = component.name, namespace = component.namespace, entity = component.entity, injectEvents = component.injectEvents, _a = component.IIFE, IIFE = _a === void 0 ? false : _a; if (components[name] || (namespace && app[namespace])) { throw new Error(JSON.stringify({ code: ERRORS.INVALID_OPERATION, msg: "Duplicate component ".concat(name), })); } if (IIFE) { if (!entity || typeof entity !== 'function') { throw new Error(JSON.stringify({ code: ERRORS.INVALID_PARAMS, msg: 'IIFE component\'s entity must be a function', })); } entity.call(app); } components[name] = component; if (namespace) { app.prototype[namespace] = entity; } else { deepExtend(app.prototype, entity); } if (injectEvents) { var bus = injectEvents.bus, events = injectEvents.events; if (!bus || !events || events.length === 0) { return; } var originCallback_1 = app.prototype.fire || function () { }; if (!app.prototype.events) { app.prototype.events = {}; } var originEvents = app.prototype.events || {}; if (originEvents[name]) { app.prototype.events[name].events = __spreadArray(__spreadArray([], app.prototype.events[name].events, true), events, true); } else { app.prototype.events[name] = { bus: bus, events: events }; } app.prototype.fire = function (eventName, data) { originCallback_1(eventName, data); var eventNames = Object.keys(this.events); for (var _i = 0, eventNames_1 = eventNames; _i < eventNames_1.length; _i++) { var name_1 = eventNames_1[_i]; var _a = this.events[name_1], bus_1 = _a.bus, eventList = _a.events; if (eventList.includes(eventName)) { bus_1.fire(eventName, data); break; } } }; } } function deepExtend(target, source) { if (!(source instanceof Object)) { return source; } switch (source.constructor) { case Date: { var dateValue = source; return new Date(dateValue.getTime()); } case Object: if (target === undefined) { target = {}; } break; case Array: target = []; break; default: return source; } var sourceKeys = Object.keys(source); for (var _i = 0, sourceKeys_1 = sourceKeys; _i < sourceKeys_1.length; _i++) { var key = sourceKeys_1[_i]; if (!Object.prototype.hasOwnProperty.call(source, key)) { continue; } target[key] = deepExtend(target[key], source[key]); } return target; } export function registerHook(app, hook) { var entity = hook.entity, target = hook.target; if (Object.prototype.hasOwnProperty.call(app, target)) { throw new Error(JSON.stringify({ code: ERRORS.INVALID_OPERATION, msg: "target:".concat(target, " is not exist"), })); } var originMethod = app.prototype[target]; if (typeof originMethod !== 'function') { throw new Error(JSON.stringify({ code: ERRORS.INVALID_OPERATION, msg: "target:".concat(target, " is not a function which is the only type supports hook"), })); } app.prototype[target] = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } entity.call.apply(entity, __spreadArray([this], args, false)); return originMethod.call.apply(originMethod, __spreadArray([this], args, false)); }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYnMvY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUVBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUV4QyxJQUFBLE1BQU0sR0FBSyxTQUFTLE9BQWQsQ0FBYztBQUU1QixJQUFNLFVBQVUsR0FBNEIsRUFBRSxDQUFBO0FBRTlDLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxHQUFRLEVBQUUsU0FBOEI7SUFDaEUsSUFBQSxJQUFJLEdBQW9ELFNBQVMsS0FBN0QsRUFBRSxTQUFTLEdBQXlDLFNBQVMsVUFBbEQsRUFBRSxNQUFNLEdBQWlDLFNBQVMsT0FBMUMsRUFBRSxZQUFZLEdBQW1CLFNBQVMsYUFBNUIsRUFBRSxLQUFpQixTQUFTLEtBQWQsRUFBWixJQUFJLG1CQUFHLEtBQUssS0FBQSxDQUFjO0lBRXpFLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFO1FBQ3JELE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUM3QixJQUFJLEVBQUUsTUFBTSxDQUFDLGlCQUFpQjtZQUM5QixHQUFHLEVBQUUsOEJBQXVCLElBQUksQ0FBRTtTQUNuQyxDQUFDLENBQUMsQ0FBQTtLQUNKO0lBRUQsSUFBSSxJQUFJLEVBQUU7UUFDUixJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFVBQVUsRUFBRTtZQUMzQyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQzdCLElBQUksRUFBRSxNQUFNLENBQUMsY0FBYztnQkFDM0IsR0FBRyxFQUFFLDZDQUE2QzthQUNuRCxDQUFDLENBQUMsQ0FBQTtTQUNKO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMs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QUc7UUFBVSxjQUFZO2FBQVosVUFBWSxFQUFaLHFCQUFZLEVBQVosSUFBWTtZQUFaLHlCQUFZOztRQUM1QyxNQUFNLENBQUMsSUFBSSxPQUFYLE1BQU0saUJBQU0sSUFBSSxHQUFLLElBQUksVUFBQztRQUMxQixPQUFPLFlBQVksQ0FBQyxJQUFJLE9BQWpCLFlBQVksaUJBQU0sSUFBSSxHQUFLLElBQUksVUFBQztJQUN6QyxDQUFDLENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgS1YgfSBmcm9tICdAY2xvdWRiYXNlL3R5cGVzJ1xuaW1wb3J0IHsgSUNsb3VkYmFzZUNvbXBvbmVudCwgSUNsb3VkYmFzZUhvb2sgfSBmcm9tICdAY2xvdWRiYXNlL3R5cGVzL2NvbXBvbmVudCdcbmltcG9ydCB7IGNvbnN0YW50cyB9IGZyb20gJ0BjbG91ZGJhc2UvdXRpbGl0aWVzJ1xuXG5jb25zdCB7IEVSUk9SUyB9ID0gY29uc3RhbnRzXG5cbmNvbnN0IGNvbXBvbmVudHM6IEtWPElDbG91ZGJhc2VDb21wb25lbnQ+ID0ge31cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQ29tcG9uZW50KGFwcDogYW55LCBjb21wb25lbnQ6IElDbG91ZGJhc2VDb21wb25lbnQpIHtcbiAgY29uc3QgeyBuYW1lLCBuYW1lc3BhY2UsIGVudGl0eSwgaW5qZWN0RXZlbnRzLCBJSUZFID0gZmFsc2UgfSA9IGNvbXBvbmVudFxuICAvLyDkuI3lhYHorrjph43lpI3ms6jlhozmiJblkb3lkI3nqbrpl7Tph43lkI1cbiAgaWYgKGNvbXBvbmVudHNbbmFtZV0gfHwgKG5hbWVzcGFjZSAmJiBhcHBbbmFtZXNwYWNlXSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgY29kZTogRVJST1JTLklOVkFMSURfT1BFUkFUSU9OLFxuICAgICAgbXNnOiBgRHVwbGljYXRlIGNvbXBvbmVudCAke25hbWV9YCxcbiAgICB9KSlcbiAgfVxuICAvLyBJSUZF57G75Z6L55qE57uE5Lu25LulYXBw5Li6c2NvcGXmiafooYxlbnRpdHnlh73mlbDvvIzkuI3mjILovb3liLBhcHAucHJvdG90eXBl5LiKXG4gIGlmIChJSUZFKSB7XG4gICAgaWYgKCFlbnRpdHkgfHwgdHlwZW9mIGVudGl0eSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgY29kZTogRVJST1JTLklOVkFMSURfUEFSQU1TLFxuICAgICAgICBtc2c6ICdJSUZFIGNvbXBvbmVudFxcJ3MgZW50aXR5IG11c3QgYmUgYSBmdW5jdGlvbicsXG4gICAgICB9KSlcbiAgICB9XG4gICAgZW50aXR5LmNhbGwoYXBwKVxuICB9XG5cbiAgY29tcG9uZW50c1tuYW1lXSA9IGNvbXBvbmVudFxuXG4gIGlmIChuYW1lc3BhY2UpIHtcbiAgICAoYXBwIGFzIGFueSkucHJvdG90eXBlW25hbWVzcGFjZV0gPSBlbnRpdHlcbiAgfSBlbHNlIHtcbiAgICBkZWVwRXh0ZW5kKChhcHAgYXMgYW55KS5wcm90b3R5cGUsIGVudGl0eSlcbiAgfVxuICBpZiAoaW5qZWN0RXZlbnRzKSB7XG4gICAgY29uc3QgeyBidXMsIGV2ZW50cyB9ID0gaW5qZWN0RXZlbnRzXG4gICAgaWYgKCFidXMgfHwgIWV2ZW50cyB8fCBldmVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3Qgb3JpZ2luQ2FsbGJhY2sgPSAoYXBwIGFzIGFueSkucHJvdG90eXBlLmZpcmUgfHwgZnVuY3Rpb24gKCkge31cbiAgICBpZiAoIShhcHAgYXMgYW55KS5wcm90b3R5cGUuZXZlbnRzKSB7XG4gICAgICAoYXBwIGFzIGFueSkucHJvdG90eXBlLmV2ZW50cyA9IHt9XG4gICAgfVxuICAgIGNvbnN0IG9yaWdpbkV2ZW50czogS1Y8YW55PiA9IChhcHAgYXMgYW55KS5wcm90b3R5cGUuZXZlbnRzIHx8IHt9XG4gICAgaWYgKG9yaWdpbkV2ZW50c1tuYW1lXSkge1xuICAgICAgKGFwcCBhcyBhbnkpLnByb3RvdHlwZS5ldmVudHNbbmFtZV0uZXZlbnRzID0gWy4uLihhcHAgYXMgYW55KS5wcm90b3R5cGUuZXZlbnRzW25hbWVdLmV2ZW50cywgLi4uZXZlbnRzXVxuICAgIH0gZWxzZSB7XG4gICAgICAoYXBwIGFzIGFueSkucHJvdG90eXBlLmV2ZW50c1tuYW1lXSA9IHsgYnVzLCBldmVudHMgfVxuICAgIH1cbiAgICAoYXBwIGFzIGFueSkucHJvdG90eXBlLmZpcmUgPSBmdW5jdGlvbiAoZXZlbnROYW1lOiBzdHJpbmcsIGRhdGE/OiBhbnkpIHtcbiAgICAgIG9yaWdpbkNhbGxiYWNrKGV2ZW50TmFtZSwgZGF0YSlcbiAgICAgIGNvbnN0IGV2ZW50TmFtZXMgPSBPYmplY3Qua2V5cyh0aGlzLmV2ZW50cylcbiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBldmVudE5hbWVzKSB7XG4gICAgICAgIGNvbnN0IHsgYnVzLCBldmVudHM6IGV2ZW50TGlzdCB9ID0gdGhpcy5ldmVudHNbbmFtZV1cbiAgICAgICAgaWYgKGV2ZW50TGlzdC5pbmNsdWRlcyhldmVudE5hbWUpKSB7XG4gICAgICAgICAgYnVzLmZpcmUoZXZlbnROYW1lLCBkYXRhKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVlcEV4dGVuZCh0YXJnZXQ6IGFueSwgc291cmNlOiBhbnkpOiBLVjxhbnk+IHtcbiAgaWYgKCEoc291cmNlIGluc3RhbmNlb2YgT2JqZWN0KSkge1xuICAgIHJldHVybiBzb3VyY2VcbiAgfVxuXG4gIHN3aXRjaCAoc291cmNlLmNvbnN0cnVjdG9yKSB7XG4gICAgY2FzZSBEYXRlOiB7XG4gICAgICBjb25zdCBkYXRlVmFsdWUgPSBzb3VyY2UgYXMgRGF0ZVxuICAgICAgcmV0dXJuIG5ldyBEYXRlKGRhdGVWYWx1ZS5nZXRUaW1lKCkpXG4gICAgfVxuICAgIGNhc2UgT2JqZWN0OlxuICAgICAgaWYgKHRhcmdldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRhcmdldCA9IHt9XG4gICAgICB9XG4gICAgICBicmVha1xuICAgIGNhc2UgQXJyYXk6XG4gICAgICB0YXJnZXQgPSBbXVxuICAgICAgYnJlYWtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHNvdXJjZVxuICB9XG4gIGNvbnN0IHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpXG4gIGZvciAoY29uc3Qga2V5IG9mIHNvdXJjZUtleXMpIHtcbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIHRhcmdldFtrZXldID0gZGVlcEV4dGVuZCh0YXJnZXRba2V5XSwgc291cmNlW2tleV0pXG4gIH1cblxuICByZXR1cm4gdGFyZ2V0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3Rlckhvb2soYXBwOiBhbnksIGhvb2s6IElDbG91ZGJhc2VIb29rKSB7XG4gIGNvbnN0IHsgZW50aXR5LCB0YXJnZXQgfSA9IGhvb2tcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcHAsIHRhcmdldCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgY29kZTogRVJST1JTLklOVkFMSURfT1BFUkFUSU9OLFxuICAgICAgbXNnOiBgdGFyZ2V0OiR7dGFyZ2V0fSBpcyBub3QgZXhpc3RgLFxuICAgIH0pKVxuICB9XG4gIGNvbnN0IG9yaWdpbk1ldGhvZCA9IGFwcC5wcm90b3R5cGVbdGFyZ2V0XVxuICBpZiAodHlwZW9mIG9yaWdpbk1ldGhvZCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFcnJvcihKU09OLnN0cmluZ2lmeSh7XG4gICAgICBjb2RlOiBFUlJPUlMuSU5WQUxJRF9PUEVSQVRJT04sXG4gICAgICBtc2c6IGB0YXJnZXQ6JHt0YXJnZXR9IGlzIG5vdCBhIGZ1bmN0aW9uIHdoaWNoIGlzIHRoZSBvbmx5IHR5cGUgc3VwcG9ydHMgaG9va2AsXG4gICAgfSkpXG4gIH1cbiAgYXBwLnByb3RvdHlwZVt0YXJnZXRdID0gZnVuY3Rpb24gKC4uLmFyZ3M6IGFueSkge1xuICAgIGVudGl0eS5jYWxsKHRoaXMsIC4uLmFyZ3MpXG4gICAgcmV0dXJuIG9yaWdpbk1ldGhvZC5jYWxsKHRoaXMsIC4uLmFyZ3MpXG4gIH1cbn1cbiJdfQ==