@cloudbase/app
Version:
cloudbase javascript sdk core
121 lines • 14.3 kB
JavaScript
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==