uicore-ts 1.0.105 → 1.0.107
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.
|
@@ -347,6 +347,9 @@ class UIObject {
|
|
|
347
347
|
const isAnObject = (item) => item && typeof item === "object" && !Array.isArray(item) && !(item instanceof import_UICoreExtensionValueObject.UICoreExtensionValueObject);
|
|
348
348
|
const isAPureObject = (item) => isAnObject(item) && Object.getPrototypeOf(item) === Object.getPrototypeOf({});
|
|
349
349
|
function isAClass(funcOrClass) {
|
|
350
|
+
if (IS_NOT(funcOrClass)) {
|
|
351
|
+
return NO;
|
|
352
|
+
}
|
|
350
353
|
const isFunction = (functionToCheck) => functionToCheck && {}.toString.call(functionToCheck) === "[object Function]";
|
|
351
354
|
const propertyNames = Object.getOwnPropertyNames(funcOrClass);
|
|
352
355
|
return isFunction(funcOrClass) && !propertyNames.includes("arguments") && propertyNames.includes("prototype");
|
|
@@ -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 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 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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",
|
|
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.
|
|
3
|
+
"version": "1.0.107",
|
|
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",
|
package/scripts/UIObject.ts
CHANGED
|
@@ -229,14 +229,14 @@ export class UIFunctionExtender<T extends (...args: any) => any> {
|
|
|
229
229
|
|
|
230
230
|
extendedFunction(functionToExtend: T) {
|
|
231
231
|
const extendingFunction = this.extendingFunction
|
|
232
|
-
|
|
232
|
+
|
|
233
233
|
function extendedFunction(this: any, ...objects: any[]) {
|
|
234
234
|
const boundFunctionToExtend = functionToExtend.bind(this)
|
|
235
235
|
boundFunctionToExtend(...objects)
|
|
236
236
|
const boundExtendingFunction = extendingFunction.bind(this)
|
|
237
237
|
boundExtendingFunction(...objects)
|
|
238
238
|
}
|
|
239
|
-
|
|
239
|
+
|
|
240
240
|
return extendedFunction
|
|
241
241
|
}
|
|
242
242
|
|
|
@@ -269,7 +269,7 @@ export class UILazyPropertyValue<T> {
|
|
|
269
269
|
isValueInitialized = YES
|
|
270
270
|
this.initFunction = nil
|
|
271
271
|
}
|
|
272
|
-
|
|
272
|
+
|
|
273
273
|
// @ts-ignore
|
|
274
274
|
if (delete target[key]) {
|
|
275
275
|
|
|
@@ -314,7 +314,7 @@ export type UIInitializerObject<T> = {
|
|
|
314
314
|
export class UIObject {
|
|
315
315
|
|
|
316
316
|
constructor() {
|
|
317
|
-
|
|
317
|
+
|
|
318
318
|
// Do something here if needed
|
|
319
319
|
|
|
320
320
|
}
|
|
@@ -375,7 +375,7 @@ export class UIObject {
|
|
|
375
375
|
|
|
376
376
|
const keys = keyPath.split(".")
|
|
377
377
|
let currentObject = object
|
|
378
|
-
|
|
378
|
+
|
|
379
379
|
for (let i = 0; i < keys.length; i++) {
|
|
380
380
|
|
|
381
381
|
const key = keys[i]
|
|
@@ -447,36 +447,39 @@ export class UIObject {
|
|
|
447
447
|
|
|
448
448
|
|
|
449
449
|
static configureWithObject<T extends object>(configurationTarget: T, object: UIInitializerObject<T>) {
|
|
450
|
-
|
|
450
|
+
|
|
451
451
|
const isAnObject = (item: any) => (item && typeof item === "object" && !Array.isArray(item) && !(item instanceof UICoreExtensionValueObject))
|
|
452
452
|
const isAPureObject = (item: any) => isAnObject(item) && Object.getPrototypeOf(item) === Object.getPrototypeOf({})
|
|
453
|
-
|
|
453
|
+
|
|
454
454
|
function isAClass(funcOrClass: object) {
|
|
455
|
+
if (IS_NOT(funcOrClass)) {
|
|
456
|
+
return NO
|
|
457
|
+
}
|
|
455
458
|
const isFunction = (functionToCheck: object) => (functionToCheck && {}.toString.call(functionToCheck) ===
|
|
456
459
|
"[object Function]")
|
|
457
460
|
const propertyNames = Object.getOwnPropertyNames(funcOrClass)
|
|
458
461
|
return (isFunction(funcOrClass) && !propertyNames.includes("arguments") &&
|
|
459
462
|
propertyNames.includes("prototype"))
|
|
460
463
|
}
|
|
461
|
-
|
|
464
|
+
|
|
462
465
|
let keyPathsAndValues: { value: any, keyPath: string }[] = []
|
|
463
|
-
|
|
464
|
-
function prepareKeyPathsAndValues(target: Record<string, any>, source: object, keyPath = "") {
|
|
465
466
|
|
|
466
|
-
|
|
467
|
+
function prepareKeyPathsAndValues(target: Record<string, any>, source: object, keyPath = "") {
|
|
467
468
|
|
|
468
|
-
|
|
469
|
+
if ((isAnObject(target) || isAClass(target)) && isAnObject(source)) {
|
|
469
470
|
|
|
471
|
+
source.forEach((sourceValue, key) => {
|
|
472
|
+
|
|
470
473
|
const valueKeyPath = keyPath + "." + key
|
|
471
|
-
|
|
474
|
+
|
|
472
475
|
function addValueAndKeyPath(sourceValue: any) {
|
|
473
476
|
keyPathsAndValues.push({
|
|
474
477
|
value: sourceValue,
|
|
475
478
|
keyPath: valueKeyPath.replace(".", "")
|
|
476
479
|
})
|
|
477
480
|
}
|
|
478
|
-
|
|
479
|
-
|
|
481
|
+
|
|
482
|
+
|
|
480
483
|
if (isAPureObject(sourceValue) || isAClass(sourceValue)) {
|
|
481
484
|
if (!(key in target) || target[key] instanceof Function) {
|
|
482
485
|
addValueAndKeyPath(sourceValue)
|
|
@@ -499,7 +502,7 @@ export class UIObject {
|
|
|
499
502
|
}
|
|
500
503
|
|
|
501
504
|
prepareKeyPathsAndValues(configurationTarget, object)
|
|
502
|
-
|
|
505
|
+
|
|
503
506
|
// Sort based on key path lengths
|
|
504
507
|
keyPathsAndValues = keyPathsAndValues.sort((a, b) => {
|
|
505
508
|
|