qcobjects
Version:
QCObjects is an Open-source framework that empowers full-stack developers to make micro-services and micro-frontends into an N-Tier architecture.
209 lines (183 loc) • 5.67 kB
text/typescript
import { IComplexStorageCache, IComponent, IConfigService, IQCObjectsElement } from "types";
import { buildComponents } from "./ComponentFactory";
import { _CastProps } from "./Cast";
import { GlobalSettings } from "./globalSettings";
import { Class } from "./Class";
import { ClassFactory } from "./ClassFactory";
import { Export } from "./Export";
import { isBrowser } from "./platform";
import { _QC_CLASSES, getPackagesNamesList, getPackagesList, getClassesList, getClassesNamesList } from "./PrimaryCollections";
import { logger } from "./Logger";
type QCObjects = {
lastCache?:IComplexStorageCache,
componentsStack:IComponent[],
Microservice:any,
Route:any,
BackendMicroservice:any,
QCObjectsElement:any,
QCObjectsShadowedElement:any,
Logger:any,
Class:any,
_Crypt:any,
TagElements:any,
DefaultTemplateHandler:any,
SourceJS:any,
SourceCSS:any,
ArrayList:any,
ArrayCollection:any,
GlobalSettings:any,
GLOBAL:any,
DDO:any,
CacheController:any,
ComplexCacheParams:any,
ComplexStorageCache:any,
ComponentWidget:any,
asyncLoad:any,
RegisterClass:any,
ComponentURI:any,
waitUntil:any,
super:any,
_DOMCreateElement:any,
shortCode:any,
getType:any,
is_a:any,
_DataStringify:any,
serviceLoader:any,
componentLoader:any,
ObjectName:any,
isQCObjects_Class:any,
isQCObjects_Object:any,
NamespaceRef:any,
RegisterWidget:any,
RegisterWidgets:any,
range:any,
getDocumentLayout:any,
Export:any,
New:any,
Tag:any,
Ready:any,
methods:any,
// eslint-disable-next-line no-unused-vars
set:(name:string, value:any) => void,
// eslint-disable-next-line no-unused-vars
get:(name:string, _default?:any) => any,
start:any,
InheritClass:any,
Processor:any,
ComponentParams:any,
ComponentDoneResponse:any,
Component:any,
CONFIG:any,
ControllerParams:any,
Controller:any,
ViewParams:any,
View:any,
Service:any,
JSONService:any,
ConfigService:any,
VO:any,
EffectParams:any,
Effect:any,
TransitionEffect:any,
TimerParams:any,
Timer:any,
Toggle:any,
logger:any,
sdk:any,
global:any,
ClassFactory:any,
Package:any,
Import:any,
_sdk_:any,
ClassesList:any[],
PackagesList:any[],
PackagesNameList:any[],
ClassesNameList:any[]
} & typeof self & typeof global ;
export var _top: QCObjects = (
(typeof module !== "undefined" && typeof module.exports !== "undefined" && module.exports) ||
(typeof global !== "undefined" && global) ||
(typeof globalThis !== "undefined" && globalThis) ||
(typeof window !== "undefined" && window) ||
(typeof self !== "undefined" && self !== null && self) ||
this
) as QCObjects;
(_top as any).lastCache = undefined;
export let componentsStack:IComponent[] = [];
export const resetTop = ():void => {
const globalSettings = GlobalSettings.instance;
_top = _CastProps(globalSettings, _top, true);
};
export const buildComponentsStack = ():void => {
componentsStack = buildComponents(document as unknown as IQCObjectsElement);
};
export let configService:IConfigService;
export const setConfigService = (_configService:IConfigService):void => {
_top.global.configService = _configService;
configService = _configService;
};
export const set = (name:string, value:any):void => {
_top[name as never] = value;
};
export const get = (name:string, _defaultValue?:any):any => {
return _top[name as never] || _defaultValue;
};
resetTop();
const _define_props = function (_top: any) {
if (!Object.hasOwn(_top, "PackagesList")) {
Object.defineProperty(_top, "PackagesList", {
// eslint-disable-next-line no-unused-vars
set:(value) => {
logger.debug("PackagesList is readonly");
},
get:():any => {
return getPackagesList();
}
});
}
if (!Object.hasOwn(_top, "PackagesNameList")) {
Object.defineProperty(_top, "PackagesNameList", {
// eslint-disable-next-line no-unused-vars
set:(val) => {
logger.debug("PackagesNameList is readonly");
},
get:():any =>{
return getPackagesNamesList();
}
});
}
if (!Object.hasOwn(_top, "ClassesList")) {
Object.defineProperty(_top, "ClassesList", {
// eslint-disable-next-line no-unused-vars
set:(value) => {
logger.debug("ClassesList is readonly");
},
get:(): any => {
return getClassesList();
}
});
}
if (!Object.hasOwn(_top, "ClassesNameList")) {
Object.defineProperty(_top, "ClassesNameList", {
// eslint-disable-next-line no-unused-vars
set(value):any {
logger.debug("ClassesNameList is readonly");
},
get:(): any => {
return getClassesNamesList();
}
});
}
};
if (isBrowser) {
// use of GLOBAL word is deprecated in node.js
// this is only for compatibility purpose with old versions of QCObjects in browsers
Class("GLOBAL", (_QC_CLASSES as any).global); // case insensitive for compatibility con old versions;
Export(ClassFactory("GLOBAL"));
}
if (isBrowser && typeof window !== "undefined") {
set("global", window);
} else if (isBrowser && typeof globalThis !== "undefined") {
set("global", globalThis);
}
_define_props(_top);