/* Copyright (c) 2020, 2023, The Unified Company. This code is part of Unify. This program is free software; you can redistribute it and/or modify it under the terms of the ESA Software Community License - Strong Copyleft LICENSE, as published by the ESA. See the ESA Software Community License - Strong Copyleft LICENSE, for more details. https://unifyjs.org */ import tableManager from '../server/tableManager.js'; import datatype from '../unify/datatype.js'; import tools from '../unify/tools.js'; import unify from '../unify/unify.js'; import collection from '../unify/collection.js'; import permissions from '../unify/permissionManager.js'; import moduleLoader from './moduleLoader.js'; import Console from './console.js'; import deepclone from '../unify/clonedeep.js'; import consoleColors from '../unify/consoleColors.js'; export default class core{ __className = "core"; tableManager = new tableManager(); root = false; client = false; propertyNames = new Array(); setUserObjects( user, client ) { var root = client.application; var userInstance = new global.user(); this.user = userInstance; this.extendDefaultObject( userInstance ); userInstance.id = user.id; userInstance.get(); userInstance.userType = "currentUser"; userInstance.parent = false; this.setUserObjectsChildren( userInstance, client, root ); } removeObject( className, id, client ) { if( !this.classObjects ) { return false; } if( this.classObjects ) { var clientClassObjects = this.classObjects; } else { var clientClassObjects = client.classObjects; } if( className && id ) { var classObjects = this.classObjects[ className ]; if( classObjects ) { var object = classObjects[ id ]; if( object ) { // todo bug This causes an infinity loop error //this.removeChildren( object ); delete client.classObjects[ className ][ id ]; } } } } setUserObjectsChildren( user, client, object ) { if( object && object.getChildren ) { var objects = object.getChildren(); for ( var i = 0; i < objects.length; i++ ) { if( user ) { objects[i].user = user; } else { objects[i].user = false; } if( objects[i].permission ) { objects[i].permissionManager.permissions = new Array(); var clone = tools.structuredClone( objects[i] ); objects[i].permission( clone ); } this.setUserObjectsChildren( user, client, objects[i] ); } } } extendDefaultObject( object ) { if( unify.extend( object ) ) { return true; } else { return false; } } prepareObject( object, client ) { object.permissionManager = new permissions(); if( this.user && client ) { object.user = client.user; } if( object.permission ) { object.permissionManager.permissions = new Array(); var clone = tools.structuredClone(object); object.permission( clone ); } if( object.prepare ) { object.prepare(); } } addObject( object, client ) { if( client ) { client.objects.push( object ); if( !this.getObjectByclassName( object.getClassName(), client ) ) { client.classObjects[ object.getClassName() ] = object; } } } parseClient( object, objects ) { objects.push( object ); var children = object.getChildren(); for( var c = 0; c prop !== "constructor" ); for ( const prop of propertiesFiltered ) { try{ structuredClone( object[prop] ) } catch{ if( !this.isClass( object[prop] ) ) { removedMethods[className][prop] = object[prop]; delete object[prop]; //console.log("---------", prop); } } } var methods = tools.getAllFuncs( object ); var skip = new Array("hasOwnProperty", "isPrototypeOf", "__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "length") for (var i = 0; i < methods.length; i++) { var method = methods[i] if( skip.includes( method ) ){ continue; } try{ structuredClone( object[method] ) } catch{ if( !this.isClass( object[method] ) ) { //console.log("??????", method); removedMethods[className][method] = object[method]; delete object[method]; } } } var extendedInstance = new object.constructor(); var prototype = Object.getPrototypeOf( extendedInstance ); var propertyNames = Object.getOwnPropertyNames( prototype ); propertyNames.forEach( methodName => { if( !this.isClass( object[methodName] ) ) { //console.log("---------", methodName); removedMethods[className][methodName] = object[methodName]; delete object[methodName]; } }); var properties = tools.getProperties( object ); for (var i = 0; i < properties.length; i++) { var property = properties[i]; if( tools.isCSSProperty( property.name ) ) { delete object[property.name]; } } if( object.type == "table" ) { //console.log("get table", tools.getTableFromObject( object )); var table = tools.getTableFromObject( object ); if( table ) { object.tableName = tools.getClassName( table ); } //object.tableName = tools.getClassName( ); } if( object.type == "collectionQuery") { //console.log("collectionQuery", className); return true; } var children = tools.getChildren( object ); for( var c = 0; c