uicore-ts 1.0.138 → 1.0.142

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -33,7 +33,10 @@ export declare class UIFunctionExtender<T extends (...args: any) => any> {
33
33
  isAUIFunctionExtenderObject: boolean;
34
34
  extendingFunction: T;
35
35
  constructor(extendingFunction: T);
36
- extendedFunction(functionToExtend: T): (this: any, ...objects: any[]) => void;
36
+ extendedFunction(functionToExtend: T): {
37
+ (this: any, ...objects: any[]): void;
38
+ extendedFunction: T;
39
+ };
37
40
  }
38
41
  export declare function EXTEND<T extends (...args: any) => any>(extendingFunction: T): UIFunctionExtender<T>;
39
42
  export declare class UILazyPropertyValue<T> {
@@ -216,6 +216,7 @@ class UIFunctionExtender {
216
216
  const boundExtendingFunction = extendingFunction.bind(this);
217
217
  boundExtendingFunction(...objects);
218
218
  }
219
+ extendedFunction.extendedFunction = functionToExtend;
219
220
  return extendedFunction;
220
221
  }
221
222
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../scripts/UIObject.ts"],
4
- "sourcesContent": ["import { UICoreExtensionValueObject } from \"./UICoreExtensionValueObject\"\nimport { UITimer } from \"./UITimer\"\n\n\nfunction NilFunction() {\n return nil\n}\n\n\n// The nil object avoids unnecessary crashes by allowing you to call any function or access any variable on it, returning nil\nexport var nil: any = new Proxy(Object.assign(NilFunction, { \"class\": null, \"className\": \"Nil\" }), {\n get(target, name) {\n if (name == Symbol.toPrimitive) {\n return function (hint: string) {\n if (hint == \"number\") {\n return 0\n }\n if (hint == \"string\") {\n return \"\"\n }\n return false\n }\n }\n if (name == \"toString\") {\n return function toString() {\n return \"\"\n }\n }\n return NilFunction()\n },\n set() {\n return NilFunction()\n }\n})\n\n\nexport function wrapInNil<T>(object?: T): T {\n let result = FIRST_OR_NIL(object)\n if (object instanceof Object && !(object instanceof Function)) {\n result = new Proxy(object as Object & T, {\n get(target, name) {\n if (name == \"wrapped_nil_target\") {\n return target\n }\n const value = Reflect.get(target, name)\n if (typeof value === \"object\") {\n return wrapInNil(value)\n }\n if (IS_NOT_LIKE_NULL(value)) {\n return value\n }\n return nil\n },\n set(target: Record<string, any> & T, name: string, value: any) {\n if (IS(target)) {\n // @ts-ignore\n target[name] = value\n }\n return YES\n }\n })\n }\n return result\n}\n\n\nexport const YES = true\nexport const NO = false\n\nexport function IS<T>(object: T | undefined | null | false): object is T {\n if (object && object !== nil) {\n return YES\n }\n return NO\n}\n\nexport function IS_NOT(object: any): object is undefined | null | false {\n return !IS(object)\n}\n\nexport function IS_DEFINED<T>(object: T | undefined): object is T {\n if (object != undefined) {\n return YES\n }\n return NO\n}\n\nexport function IS_UNDEFINED(object: any): object is undefined {\n return !IS_DEFINED(object)\n}\n\nexport function IS_NIL(object: any): object is typeof nil {\n if (object === nil) {\n return YES\n }\n return NO\n}\n\nexport function IS_NOT_NIL<T>(object: T | undefined | null): object is T | undefined | null {\n return !IS_NIL(object)\n}\n\n\nexport function IS_LIKE_NULL(object: any): object is undefined | null {\n return (IS_UNDEFINED(object) || IS_NIL(object) || object == null)\n}\n\nexport function IS_NOT_LIKE_NULL<T>(object: T | null | undefined): object is T {\n return !IS_LIKE_NULL(object)\n}\n\n\nexport function IS_AN_EMAIL_ADDRESS(email: string) {\n const re = /\\S+@\\S+\\.\\S+/\n return re.test(email)\n}\n\n\nexport function FIRST_OR_NIL<T>(...objects: (T | undefined | null)[]): T {\n const result = objects.find(object => IS(object))\n return result || nil\n}\n\nexport function FIRST<T>(...objects: (T | undefined | null)[]): T {\n const result = objects.find(object => IS(object))\n return result || IF(IS_DEFINED(objects.lastElement))(RETURNER(objects.lastElement))()\n}\n\n\nexport function MAKE_ID(randomPartLength = 15) {\n let result = \"\"\n const characters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\"\n for (let i = 0; i < randomPartLength; i++) {\n result = result + characters.charAt(Math.floor(Math.random() * characters.length))\n }\n result = result + Date.now()\n return result\n}\n\n\nexport function RETURNER<T>(value?: T) {\n return (..._objects: any[]) => value\n}\n\n\nexport type UIIFBlockReceiver<T> = (functionToCall: () => any) => UIIFEvaluator<T>;\nexport type UIIFEvaluatorBase<T> = () => T;\n\n\nexport interface UIIFEvaluator<T> extends UIIFEvaluatorBase<T> {\n ELSE_IF: (otherValue: any) => UIIFBlockReceiver<T>;\n ELSE: (functionToCall: () => any) => T;\n}\n\n\nexport function IF<T = any>(value: any): UIIFBlockReceiver<T> {\n \n let thenFunction = nil\n let elseFunction = nil\n \n const result: any = function (functionToCall: () => T) {\n thenFunction = functionToCall\n return result.evaluateConditions\n }\n \n result.evaluateConditions = function () {\n if (IS(value)) {\n return thenFunction()\n }\n return elseFunction()\n }\n \n result.evaluateConditions.ELSE_IF = function (otherValue: any) {\n \n const functionResult = IF(otherValue) as (UIIFBlockReceiver<T> & { evaluateConditions: UIIFEvaluator<T> })\n elseFunction = functionResult.evaluateConditions\n \n const functionResultEvaluateConditionsFunction: any = function () {\n return result.evaluateConditions()\n }\n functionResultEvaluateConditionsFunction.ELSE_IF = functionResult.evaluateConditions.ELSE_IF\n functionResultEvaluateConditionsFunction.ELSE = functionResult.evaluateConditions.ELSE\n \n functionResult.evaluateConditions = functionResultEvaluateConditionsFunction\n \n return functionResult\n \n }\n \n result.evaluateConditions.ELSE = function (functionToCall: () => T) {\n elseFunction = functionToCall\n return result.evaluateConditions()\n }\n \n return result\n}\n\n\nexport class UIFunctionCall<T extends (...args: any) => any> {\n \n isAUIFunctionCallObject = YES\n parameters: Parameters<T>[]\n \n constructor(...parameters: Parameters<T>) {\n this.parameters = parameters\n }\n \n callFunction(functionToCall: T) {\n const parameters = this.parameters\n functionToCall(...parameters)\n }\n \n}\n\n\nexport function CALL<T extends (...args: any) => any>(...objects: Parameters<T>) {\n return new UIFunctionCall<T>(...objects)\n}\n\n\nexport class UIFunctionExtender<T extends (...args: any) => any> {\n \n isAUIFunctionExtenderObject = YES\n extendingFunction: T\n \n constructor(extendingFunction: T) {\n this.extendingFunction = extendingFunction\n }\n \n extendedFunction(functionToExtend: T) {\n const extendingFunction = this.extendingFunction\n \n function extendedFunction(this: any, ...objects: any[]) {\n const boundFunctionToExtend = functionToExtend.bind(this)\n boundFunctionToExtend(...objects)\n const boundExtendingFunction = extendingFunction.bind(this)\n boundExtendingFunction(...objects)\n }\n \n return extendedFunction\n }\n \n}\n\n\nexport function EXTEND<T extends (...args: any) => any>(extendingFunction: T) {\n return new UIFunctionExtender(extendingFunction)\n}\n\n\nexport class UILazyPropertyValue<T> {\n \n isAUILazyPropertyValueObject = YES\n initFunction: () => T\n \n constructor(initFunction: () => T) {\n this.initFunction = initFunction\n }\n \n setLazyPropertyValue(key: string, target: object) {\n \n let isValueInitialized = NO\n \n // property value\n let _value = nil\n \n const initValue = () => {\n _value = this.initFunction()\n isValueInitialized = YES\n this.initFunction = nil\n }\n \n // @ts-ignore\n if (delete target[key]) {\n \n // Create new property with getter and setter\n Object.defineProperty(target, key, {\n get: function () {\n if (IS_NOT(isValueInitialized)) {\n initValue()\n }\n return _value\n },\n set: function (newValue) {\n _value = newValue\n },\n enumerable: true,\n configurable: true\n })\n \n }\n \n }\n \n}\n\n\nexport function LAZY_VALUE<T>(initFunction: () => T) {\n return new UILazyPropertyValue(initFunction)\n}\n\n\nexport type UIInitializerObject<T> = {\n \n [P in keyof T]?:\n //T[P] extends (infer U)[] ? UIInitializerObject<U>[] :\n T[P] extends (...args: any) => any ? UIFunctionCall<T[P]> | UIFunctionExtender<T[P]> | T[P] :\n T[P] extends object ? UIInitializerObject<T[P]> | UILazyPropertyValue<T[P]> :\n T[P];\n \n}\n\n\nexport class UIObject {\n \n constructor() {\n \n // Do something here if needed\n \n }\n \n public get class(): any {\n return Object.getPrototypeOf(this).constructor\n }\n \n public get superclass(): any {\n return Object.getPrototypeOf(Object.getPrototypeOf(this)).constructor\n }\n \n isKindOfClass(classObject: any) {\n if (this.isMemberOfClass(classObject)) {\n return YES\n }\n for (let superclassObject = this.superclass; IS(superclassObject); superclassObject = superclassObject.superclass) {\n if (superclassObject == classObject) {\n return YES\n }\n }\n return NO\n }\n \n \n isMemberOfClass(classObject: any) {\n return (this.class == classObject)\n }\n \n public static wrapObject<T>(object: T): UIObject & T {\n if (IS_NOT(object)) {\n return nil\n }\n \n if ((object as any) instanceof UIObject) {\n // @ts-ignore\n return object\n }\n \n return Object.assign(new UIObject(), object)\n }\n \n \n valueForKey(key: string) {\n // @ts-ignore\n return this[key]\n }\n \n valueForKeyPath(keyPath: string): any {\n return UIObject.valueForKeyPath(keyPath, this)\n }\n \n static valueForKeyPath(keyPath: string, object: any): any {\n \n if (IS_NOT(keyPath)) {\n return object\n }\n \n const keys = keyPath.split(\".\")\n let currentObject = object\n \n for (let i = 0; i < keys.length; i++) {\n \n const key = keys[i]\n \n if (key.substring(0, 2) == \"[]\") {\n \n // This next object will be an array and the rest of the keys need to be run for each of the elements\n currentObject = currentObject[key.substring(2)]\n \n // CurrentObject is now an array\n \n const remainingKeyPath = keys.slice(i + 1).join(\".\")\n const currentArray = currentObject as unknown as any[]\n currentObject = currentArray.map(subObject => UIObject.valueForKeyPath(remainingKeyPath, subObject))\n \n break\n \n }\n \n currentObject = currentObject[key]\n if (IS_LIKE_NULL(currentObject)) {\n currentObject = nil\n }\n \n }\n \n return currentObject\n \n }\n \n setValueForKeyPath(keyPath: string, value: any, createPath = YES) {\n return UIObject.setValueForKeyPath(keyPath, value, this, createPath)\n }\n \n static setValueForKeyPath(keyPath: string, value: any, currentObject: any, createPath: boolean) {\n \n const keys = keyPath.split(\".\")\n let didSetValue = NO\n \n keys.forEach((key, index, array) => {\n if (index == array.length - 1 && IS_NOT_LIKE_NULL(currentObject)) {\n currentObject[key] = value\n didSetValue = YES\n return\n }\n else if (IS_NOT(currentObject)) {\n return\n }\n \n const currentObjectValue = currentObject[key]\n if (IS_LIKE_NULL(currentObjectValue) && createPath) {\n currentObject[key] = {}\n }\n currentObject = currentObject[key]\n })\n \n return didSetValue\n \n }\n \n \n configureWithObject(object: UIInitializerObject<this>) {\n this.configuredWithObject(object)\n }\n \n configuredWithObject(object: UIInitializerObject<this>): this {\n return UIObject.configureWithObject(this, object)\n }\n \n \n static configureWithObject<T extends object>(configurationTarget: T, object: UIInitializerObject<T>) {\n \n const isAnObject = (item: any) => (item && typeof item === \"object\" && !Array.isArray(item) && !(item instanceof UICoreExtensionValueObject))\n const isAPureObject = (item: any) => isAnObject(item) && Object.getPrototypeOf(item) === Object.getPrototypeOf({})\n \n function isAClass(funcOrClass: object) {\n if (IS_NOT(funcOrClass)) {\n return NO\n }\n const isFunction = (functionToCheck: object) => (functionToCheck && {}.toString.call(functionToCheck) ===\n \"[object Function]\")\n const propertyNames = Object.getOwnPropertyNames(funcOrClass)\n return (isFunction(funcOrClass) && !propertyNames.includes(\"arguments\") &&\n propertyNames.includes(\"prototype\"))\n }\n \n let keyPathsAndValues: { value: any, keyPath: string }[] = []\n \n function prepareKeyPathsAndValues(target: Record<string, any>, source: object, keyPath = \"\") {\n \n if ((isAnObject(target) || isAClass(target)) && isAnObject(source)) {\n \n source.forEach((sourceValue, key) => {\n \n const valueKeyPath = keyPath + \".\" + key\n \n function addValueAndKeyPath(sourceValue: any) {\n keyPathsAndValues.push({\n value: sourceValue,\n keyPath: valueKeyPath.replace(\".\", \"\")\n })\n }\n \n \n if (isAPureObject(sourceValue) || isAClass(sourceValue)) {\n if (!(key in target) || target[key] instanceof Function) {\n addValueAndKeyPath(sourceValue)\n }\n else {\n prepareKeyPathsAndValues(target[key], sourceValue, valueKeyPath)\n }\n }\n else if (sourceValue instanceof UICoreExtensionValueObject) {\n addValueAndKeyPath(sourceValue.value)\n }\n else {\n addValueAndKeyPath(sourceValue)\n }\n \n })\n \n }\n \n }\n \n prepareKeyPathsAndValues(configurationTarget, object)\n \n // Sort based on key path lengths\n keyPathsAndValues = keyPathsAndValues.sort((a, b) => {\n \n const firstKeyPath = (a.keyPath as string).split(\".\").length\n const secondKeyPath = (b.keyPath as string).split(\".\").length\n \n if (firstKeyPath < secondKeyPath) {\n return -1\n }\n if (firstKeyPath > secondKeyPath) {\n return 1\n }\n return 0\n \n })\n \n keyPathsAndValues.forEach((valueAndKeyPath) => {\n \n const keyPath: string = valueAndKeyPath.keyPath\n let value = valueAndKeyPath.value\n \n const getTargetFunction = (bindThis = NO) => {\n let result = (UIObject.valueForKeyPath(keyPath, configurationTarget) as Function)\n if (bindThis) {\n const indexOfDot = keyPath.lastIndexOf(\".\")\n const thisObject = UIObject.valueForKeyPath(keyPath.substring(0, indexOfDot), configurationTarget)\n result = result.bind(thisObject)\n }\n return result\n }\n \n if (value instanceof UILazyPropertyValue) {\n const indexOfDot = keyPath.lastIndexOf(\".\")\n const thisObject = UIObject.valueForKeyPath(keyPath.substring(0, indexOfDot), configurationTarget)\n const key = keyPath.substring(indexOfDot + 1)\n value.setLazyPropertyValue(key, thisObject)\n return\n }\n \n if (value instanceof UIFunctionCall) {\n value.callFunction(getTargetFunction(YES))\n return\n }\n \n if (value instanceof UIFunctionExtender) {\n value = value.extendedFunction(getTargetFunction())\n }\n \n UIObject.setValueForKeyPath(keyPath, value, configurationTarget, YES)\n \n })\n \n \n return configurationTarget\n \n }\n \n \n performFunctionWithSelf<T>(functionToPerform: (self: this) => T): T {\n return functionToPerform(this)\n }\n \n performingFunctionWithSelf(functionToPerform: (self: this) => void): this {\n functionToPerform(this)\n return this\n }\n \n performFunctionWithDelay(delay: number, functionToCall: Function) {\n \n new UITimer(delay, NO, functionToCall)\n \n }\n \n \n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { UICoreExtensionValueObject } from \"./UICoreExtensionValueObject\"\nimport { UITimer } from \"./UITimer\"\n\n\nfunction NilFunction() {\n return nil\n}\n\n\n// The nil object avoids unnecessary crashes by allowing you to call any function or access any variable on it, returning nil\nexport var nil: any = new Proxy(Object.assign(NilFunction, { \"class\": null, \"className\": \"Nil\" }), {\n get(target, name) {\n if (name == Symbol.toPrimitive) {\n return function (hint: string) {\n if (hint == \"number\") {\n return 0\n }\n if (hint == \"string\") {\n return \"\"\n }\n return false\n }\n }\n if (name == \"toString\") {\n return function toString() {\n return \"\"\n }\n }\n return NilFunction()\n },\n set() {\n return NilFunction()\n }\n})\n\n\nexport function wrapInNil<T>(object?: T): T {\n let result = FIRST_OR_NIL(object)\n if (object instanceof Object && !(object instanceof Function)) {\n result = new Proxy(object as Object & T, {\n get(target, name) {\n if (name == \"wrapped_nil_target\") {\n return target\n }\n const value = Reflect.get(target, name)\n if (typeof value === \"object\") {\n return wrapInNil(value)\n }\n if (IS_NOT_LIKE_NULL(value)) {\n return value\n }\n return nil\n },\n set(target: Record<string, any> & T, name: string, value: any) {\n if (IS(target)) {\n // @ts-ignore\n target[name] = value\n }\n return YES\n }\n })\n }\n return result\n}\n\n\nexport const YES = true\nexport const NO = false\n\nexport function IS<T>(object: T | undefined | null | false): object is T {\n if (object && object !== nil) {\n return YES\n }\n return NO\n}\n\nexport function IS_NOT(object: any): object is undefined | null | false {\n return !IS(object)\n}\n\nexport function IS_DEFINED<T>(object: T | undefined): object is T {\n if (object != undefined) {\n return YES\n }\n return NO\n}\n\nexport function IS_UNDEFINED(object: any): object is undefined {\n return !IS_DEFINED(object)\n}\n\nexport function IS_NIL(object: any): object is typeof nil {\n if (object === nil) {\n return YES\n }\n return NO\n}\n\nexport function IS_NOT_NIL<T>(object: T | undefined | null): object is T | undefined | null {\n return !IS_NIL(object)\n}\n\n\nexport function IS_LIKE_NULL(object: any): object is undefined | null {\n return (IS_UNDEFINED(object) || IS_NIL(object) || object == null)\n}\n\nexport function IS_NOT_LIKE_NULL<T>(object: T | null | undefined): object is T {\n return !IS_LIKE_NULL(object)\n}\n\n\nexport function IS_AN_EMAIL_ADDRESS(email: string) {\n const re = /\\S+@\\S+\\.\\S+/\n return re.test(email)\n}\n\n\nexport function FIRST_OR_NIL<T>(...objects: (T | undefined | null)[]): T {\n const result = objects.find(object => IS(object))\n return result || nil\n}\n\nexport function FIRST<T>(...objects: (T | undefined | null)[]): T {\n const result = objects.find(object => IS(object))\n return result || IF(IS_DEFINED(objects.lastElement))(RETURNER(objects.lastElement))()\n}\n\n\nexport function MAKE_ID(randomPartLength = 15) {\n let result = \"\"\n const characters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\"\n for (let i = 0; i < randomPartLength; i++) {\n result = result + characters.charAt(Math.floor(Math.random() * characters.length))\n }\n result = result + Date.now()\n return result\n}\n\n\nexport function RETURNER<T>(value?: T) {\n return (..._objects: any[]) => value\n}\n\n\nexport type UIIFBlockReceiver<T> = (functionToCall: () => any) => UIIFEvaluator<T>;\nexport type UIIFEvaluatorBase<T> = () => T;\n\n\nexport interface UIIFEvaluator<T> extends UIIFEvaluatorBase<T> {\n ELSE_IF: (otherValue: any) => UIIFBlockReceiver<T>;\n ELSE: (functionToCall: () => any) => T;\n}\n\n\nexport function IF<T = any>(value: any): UIIFBlockReceiver<T> {\n \n let thenFunction = nil\n let elseFunction = nil\n \n const result: any = function (functionToCall: () => T) {\n thenFunction = functionToCall\n return result.evaluateConditions\n }\n \n result.evaluateConditions = function () {\n if (IS(value)) {\n return thenFunction()\n }\n return elseFunction()\n }\n \n result.evaluateConditions.ELSE_IF = function (otherValue: any) {\n \n const functionResult = IF(otherValue) as (UIIFBlockReceiver<T> & { evaluateConditions: UIIFEvaluator<T> })\n elseFunction = functionResult.evaluateConditions\n \n const functionResultEvaluateConditionsFunction: any = function () {\n return result.evaluateConditions()\n }\n functionResultEvaluateConditionsFunction.ELSE_IF = functionResult.evaluateConditions.ELSE_IF\n functionResultEvaluateConditionsFunction.ELSE = functionResult.evaluateConditions.ELSE\n \n functionResult.evaluateConditions = functionResultEvaluateConditionsFunction\n \n return functionResult\n \n }\n \n result.evaluateConditions.ELSE = function (functionToCall: () => T) {\n elseFunction = functionToCall\n return result.evaluateConditions()\n }\n \n return result\n}\n\n\nexport class UIFunctionCall<T extends (...args: any) => any> {\n \n isAUIFunctionCallObject = YES\n parameters: Parameters<T>[]\n \n constructor(...parameters: Parameters<T>) {\n this.parameters = parameters\n }\n \n callFunction(functionToCall: T) {\n const parameters = this.parameters\n functionToCall(...parameters)\n }\n \n}\n\n\nexport function CALL<T extends (...args: any) => any>(...objects: Parameters<T>) {\n return new UIFunctionCall<T>(...objects)\n}\n\n\nexport class UIFunctionExtender<T extends (...args: any) => any> {\n \n isAUIFunctionExtenderObject = YES\n extendingFunction: T\n \n constructor(extendingFunction: T) {\n this.extendingFunction = extendingFunction\n }\n \n extendedFunction(functionToExtend: T) {\n \n const extendingFunction = this.extendingFunction\n \n function extendedFunction(this: any, ...objects: any[]) {\n const boundFunctionToExtend = functionToExtend.bind(this)\n boundFunctionToExtend(...objects)\n const boundExtendingFunction = extendingFunction.bind(this)\n boundExtendingFunction(...objects)\n }\n \n extendedFunction.extendedFunction = functionToExtend\n \n return extendedFunction\n \n }\n \n}\n\n\nexport function EXTEND<T extends (...args: any) => any>(extendingFunction: T) {\n return new UIFunctionExtender(extendingFunction)\n}\n\n\nexport class UILazyPropertyValue<T> {\n \n isAUILazyPropertyValueObject = YES\n initFunction: () => T\n \n constructor(initFunction: () => T) {\n this.initFunction = initFunction\n }\n \n setLazyPropertyValue(key: string, target: object) {\n \n let isValueInitialized = NO\n \n // property value\n let _value = nil\n \n const initValue = () => {\n _value = this.initFunction()\n isValueInitialized = YES\n this.initFunction = nil\n }\n \n // @ts-ignore\n if (delete target[key]) {\n \n // Create new property with getter and setter\n Object.defineProperty(target, key, {\n get: function () {\n if (IS_NOT(isValueInitialized)) {\n initValue()\n }\n return _value\n },\n set: function (newValue) {\n _value = newValue\n },\n enumerable: true,\n configurable: true\n })\n \n }\n \n }\n \n}\n\n\nexport function LAZY_VALUE<T>(initFunction: () => T) {\n return new UILazyPropertyValue(initFunction)\n}\n\n\nexport type UIInitializerObject<T> = {\n \n [P in keyof T]?:\n //T[P] extends (infer U)[] ? UIInitializerObject<U>[] :\n T[P] extends (...args: any) => any ? UIFunctionCall<T[P]> | UIFunctionExtender<T[P]> | T[P] :\n T[P] extends object ? UIInitializerObject<T[P]> | UILazyPropertyValue<T[P]> :\n T[P];\n \n}\n\n\nexport class UIObject {\n \n constructor() {\n \n // Do something here if needed\n \n }\n \n public get class(): any {\n return Object.getPrototypeOf(this).constructor\n }\n \n public get superclass(): any {\n return Object.getPrototypeOf(Object.getPrototypeOf(this)).constructor\n }\n \n isKindOfClass(classObject: any) {\n if (this.isMemberOfClass(classObject)) {\n return YES\n }\n for (let superclassObject = this.superclass; IS(superclassObject); superclassObject = superclassObject.superclass) {\n if (superclassObject == classObject) {\n return YES\n }\n }\n return NO\n }\n \n \n isMemberOfClass(classObject: any) {\n return (this.class == classObject)\n }\n \n public static wrapObject<T>(object: T): UIObject & T {\n if (IS_NOT(object)) {\n return nil\n }\n \n if ((object as any) instanceof UIObject) {\n // @ts-ignore\n return object\n }\n \n return Object.assign(new UIObject(), object)\n }\n \n \n valueForKey(key: string) {\n // @ts-ignore\n return this[key]\n }\n \n valueForKeyPath(keyPath: string): any {\n return UIObject.valueForKeyPath(keyPath, this)\n }\n \n static valueForKeyPath(keyPath: string, object: any): any {\n \n if (IS_NOT(keyPath)) {\n return object\n }\n \n const keys = keyPath.split(\".\")\n let currentObject = object\n \n for (let i = 0; i < keys.length; i++) {\n \n const key = keys[i]\n \n if (key.substring(0, 2) == \"[]\") {\n \n // This next object will be an array and the rest of the keys need to be run for each of the elements\n currentObject = currentObject[key.substring(2)]\n \n // CurrentObject is now an array\n \n const remainingKeyPath = keys.slice(i + 1).join(\".\")\n const currentArray = currentObject as unknown as any[]\n currentObject = currentArray.map(subObject => UIObject.valueForKeyPath(remainingKeyPath, subObject))\n \n break\n \n }\n \n currentObject = currentObject[key]\n if (IS_LIKE_NULL(currentObject)) {\n currentObject = nil\n }\n \n }\n \n return currentObject\n \n }\n \n setValueForKeyPath(keyPath: string, value: any, createPath = YES) {\n return UIObject.setValueForKeyPath(keyPath, value, this, createPath)\n }\n \n static setValueForKeyPath(keyPath: string, value: any, currentObject: any, createPath: boolean) {\n \n const keys = keyPath.split(\".\")\n let didSetValue = NO\n \n keys.forEach((key, index, array) => {\n if (index == array.length - 1 && IS_NOT_LIKE_NULL(currentObject)) {\n currentObject[key] = value\n didSetValue = YES\n return\n }\n else if (IS_NOT(currentObject)) {\n return\n }\n \n const currentObjectValue = currentObject[key]\n if (IS_LIKE_NULL(currentObjectValue) && createPath) {\n currentObject[key] = {}\n }\n currentObject = currentObject[key]\n })\n \n return didSetValue\n \n }\n \n \n configureWithObject(object: UIInitializerObject<this>) {\n this.configuredWithObject(object)\n }\n \n configuredWithObject(object: UIInitializerObject<this>): this {\n return UIObject.configureWithObject(this, object)\n }\n \n \n static configureWithObject<T extends object>(configurationTarget: T, object: UIInitializerObject<T>) {\n \n const isAnObject = (item: any) => (item && typeof item === \"object\" && !Array.isArray(item) && !(item instanceof UICoreExtensionValueObject))\n const isAPureObject = (item: any) => isAnObject(item) && Object.getPrototypeOf(item) === Object.getPrototypeOf({})\n \n function isAClass(funcOrClass: object) {\n if (IS_NOT(funcOrClass)) {\n return NO\n }\n const isFunction = (functionToCheck: object) => (functionToCheck && {}.toString.call(functionToCheck) ===\n \"[object Function]\")\n const propertyNames = Object.getOwnPropertyNames(funcOrClass)\n return (isFunction(funcOrClass) && !propertyNames.includes(\"arguments\") &&\n propertyNames.includes(\"prototype\"))\n }\n \n let keyPathsAndValues: { value: any, keyPath: string }[] = []\n \n function prepareKeyPathsAndValues(target: Record<string, any>, source: object, keyPath = \"\") {\n \n if ((isAnObject(target) || isAClass(target)) && isAnObject(source)) {\n \n source.forEach((sourceValue, key) => {\n \n const valueKeyPath = keyPath + \".\" + key\n \n function addValueAndKeyPath(sourceValue: any) {\n keyPathsAndValues.push({\n value: sourceValue,\n keyPath: valueKeyPath.replace(\".\", \"\")\n })\n }\n \n \n if (isAPureObject(sourceValue) || isAClass(sourceValue)) {\n if (!(key in target) || target[key] instanceof Function) {\n addValueAndKeyPath(sourceValue)\n }\n else {\n prepareKeyPathsAndValues(target[key], sourceValue, valueKeyPath)\n }\n }\n else if (sourceValue instanceof UICoreExtensionValueObject) {\n addValueAndKeyPath(sourceValue.value)\n }\n else {\n addValueAndKeyPath(sourceValue)\n }\n \n })\n \n }\n \n }\n \n prepareKeyPathsAndValues(configurationTarget, object)\n \n // Sort based on key path lengths\n keyPathsAndValues = keyPathsAndValues.sort((a, b) => {\n \n const firstKeyPath = (a.keyPath as string).split(\".\").length\n const secondKeyPath = (b.keyPath as string).split(\".\").length\n \n if (firstKeyPath < secondKeyPath) {\n return -1\n }\n if (firstKeyPath > secondKeyPath) {\n return 1\n }\n return 0\n \n })\n \n keyPathsAndValues.forEach((valueAndKeyPath) => {\n \n const keyPath: string = valueAndKeyPath.keyPath\n let value = valueAndKeyPath.value\n \n const getTargetFunction = (bindThis = NO) => {\n let result = (UIObject.valueForKeyPath(keyPath, configurationTarget) as Function)\n if (bindThis) {\n const indexOfDot = keyPath.lastIndexOf(\".\")\n const thisObject = UIObject.valueForKeyPath(keyPath.substring(0, indexOfDot), configurationTarget)\n result = result.bind(thisObject)\n }\n return result\n }\n \n if (value instanceof UILazyPropertyValue) {\n const indexOfDot = keyPath.lastIndexOf(\".\")\n const thisObject = UIObject.valueForKeyPath(keyPath.substring(0, indexOfDot), configurationTarget)\n const key = keyPath.substring(indexOfDot + 1)\n value.setLazyPropertyValue(key, thisObject)\n return\n }\n \n if (value instanceof UIFunctionCall) {\n value.callFunction(getTargetFunction(YES))\n return\n }\n \n if (value instanceof UIFunctionExtender) {\n value = value.extendedFunction(getTargetFunction())\n }\n \n UIObject.setValueForKeyPath(keyPath, value, configurationTarget, YES)\n \n })\n \n \n return configurationTarget\n \n }\n \n \n performFunctionWithSelf<T>(functionToPerform: (self: this) => T): T {\n return functionToPerform(this)\n }\n \n performingFunctionWithSelf(functionToPerform: (self: this) => void): this {\n functionToPerform(this)\n return this\n }\n \n performFunctionWithDelay(delay: number, functionToCall: Function) {\n \n new UITimer(delay, NO, functionToCall)\n \n }\n \n \n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"],
5
+ "mappings": "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",
6
6
  "names": ["sourceValue"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "uicore-ts",
3
- "version": "1.0.138",
3
+ "version": "1.0.142",
4
4
  "description": "UICore is a library to build native-like user interfaces using pure Typescript. No HTML is needed at all. Components are described as TS classes and all user interactions are handled explicitly. This library is strongly inspired by the UIKit framework that is used in IOS. In addition, UICore has tools to handle URL based routing, array sorting and filtering and adds a number of other utilities for convenience.",
5
5
  "main": "compiledScripts/index.js",
6
6
  "types": "compiledScripts/index.d.ts",
@@ -228,6 +228,7 @@ export class UIFunctionExtender<T extends (...args: any) => any> {
228
228
  }
229
229
 
230
230
  extendedFunction(functionToExtend: T) {
231
+
231
232
  const extendingFunction = this.extendingFunction
232
233
 
233
234
  function extendedFunction(this: any, ...objects: any[]) {
@@ -237,7 +238,10 @@ export class UIFunctionExtender<T extends (...args: any) => any> {
237
238
  boundExtendingFunction(...objects)
238
239
  }
239
240
 
241
+ extendedFunction.extendedFunction = functionToExtend
242
+
240
243
  return extendedFunction
244
+
241
245
  }
242
246
 
243
247
  }