@jay-js/system
Version:
A powerful and flexible TypeScript library for UI, state management, lazy loading, routing and managing draggable elements in modern web applications.
93 lines (92 loc) • 3.16 kB
JavaScript
// components
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 _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;
}
import { ErrorImport, NotFound, ModuleWrapper } from "./components/index.js";
// collector
import { ImportedModules } from "./utils/collector.js";
export function LazyModule(module, loader) {
if (!module) {
return NotFound();
}
let moduleSection;
if (module.module in ImportedModules) {
moduleSection = ImportedModules[module.module].module(_object_spread({}, module.props));
ImportedModules[module.module].lastUsed = 0;
return moduleSection;
} else {
moduleSection = loader || ModuleWrapper();
}
module.import().then(function() {
var _ref = _async_to_generator(function*(moduleImported) {
var _module_collect;
ImportedModules[module.module] = {
module: moduleImported[module.module],
lastUsed: 0,
collect: (_module_collect = module.collect) !== null && _module_collect !== void 0 ? _module_collect : true
};
moduleSection.replaceWith((yield ImportedModules[module.module].module(_object_spread({}, module.props))));
});
return function(moduleImported) {
return _ref.apply(this, arguments);
};
}()).catch((_error)=>{
console.error(`Error importing module ${module.module}:`, _error);
moduleSection.replaceWith(ErrorImport());
});
return moduleSection;
}