uicore-ts 1.0.521 → 1.0.527
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.
- package/compiledScripts/UIButton.d.ts +2 -2
- package/compiledScripts/UIButton.js +1 -0
- package/compiledScripts/UIButton.js.map +2 -2
- package/compiledScripts/UICore.js +3 -1
- package/compiledScripts/UICore.js.map +2 -2
- package/compiledScripts/UICoreExtensions.d.ts +4 -1
- package/compiledScripts/UICoreExtensions.js +29 -3
- package/compiledScripts/UICoreExtensions.js.map +2 -2
- package/compiledScripts/UIDialogView.d.ts +2 -2
- package/compiledScripts/UIDialogView.js +1 -0
- package/compiledScripts/UIDialogView.js.map +2 -2
- package/compiledScripts/UIImageView.js +4 -1
- package/compiledScripts/UIImageView.js.map +2 -2
- package/compiledScripts/UIKeyValueSorter.d.ts +42 -0
- package/compiledScripts/UIKeyValueSorter.js +155 -0
- package/compiledScripts/UIKeyValueSorter.js.map +7 -0
- package/compiledScripts/UIKeyValueSorterWebWorker.worker.d.ts +10 -0
- package/compiledScripts/UIKeyValueSorterWebWorker.worker.js +78 -0
- package/compiledScripts/UIKeyValueSorterWebWorker.worker.js.map +7 -0
- package/compiledScripts/UILinkButton.d.ts +1 -1
- package/compiledScripts/UINativeScrollView.d.ts +1 -0
- package/compiledScripts/UINativeScrollView.js +7 -3
- package/compiledScripts/UINativeScrollView.js.map +2 -2
- package/compiledScripts/UIObject.d.ts +14 -4
- package/compiledScripts/UIObject.js +4 -0
- package/compiledScripts/UIObject.js.map +2 -2
- package/compiledScripts/UIRootViewController.js +8 -9
- package/compiledScripts/UIRootViewController.js.map +2 -2
- package/compiledScripts/UITableView.d.ts +1 -0
- package/compiledScripts/UITableView.js +3 -1
- package/compiledScripts/UITableView.js.map +2 -2
- package/compiledScripts/UITextField.d.ts +1 -1
- package/compiledScripts/UITextField.js.map +2 -2
- package/compiledScripts/UITextView.js +4 -2
- package/compiledScripts/UITextView.js.map +2 -2
- package/compiledScripts/UIView.d.ts +12 -3
- package/compiledScripts/UIView.js +101 -40
- package/compiledScripts/UIView.js.map +2 -2
- package/compiledScripts/UIViewController.js +4 -2
- package/compiledScripts/UIViewController.js.map +2 -2
- package/compiledScripts/index.d.ts +1 -1
- package/compiledScripts/index.js +1 -1
- package/compiledScripts/index.js.map +2 -2
- package/package.json +1 -1
- package/scripts/UIButton.ts +2 -2
- package/scripts/UICore.ts +37 -36
- package/scripts/UICoreExtensions.ts +41 -4
- package/scripts/UIDialogView.ts +2 -2
- package/scripts/UIImageView.ts +1 -1
- package/scripts/{UIKeyValueStringSorter.ts → UIKeyValueSorter.ts} +10 -9
- package/scripts/{UIKeyValueStringSorterWebWorker.worker.ts → UIKeyValueSorterWebWorker.worker.ts} +15 -4
- package/scripts/UINativeScrollView.ts +10 -4
- package/scripts/UIObject.ts +24 -6
- package/scripts/UIRootViewController.ts +16 -5
- package/scripts/UITableView.ts +4 -5
- package/scripts/UITextField.ts +1 -1
- package/scripts/UITextView.ts +20 -12
- package/scripts/UIView.ts +165 -65
- package/scripts/UIViewController.ts +7 -3
- package/scripts/index.ts +1 -1
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { UIObject } from "./UIObject";
|
|
2
|
+
export interface UIKeyValueStringSorterSortingInstruction {
|
|
3
|
+
keyPath: string;
|
|
4
|
+
dataType: string;
|
|
5
|
+
direction: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class UIKeyValueSorter extends UIObject {
|
|
8
|
+
static _sharedWebWorkerHolder: {
|
|
9
|
+
UICore_completionFunctions: {};
|
|
10
|
+
UICore_isWorking: boolean;
|
|
11
|
+
UICore_messagesToPost: undefined;
|
|
12
|
+
webWorker: any;
|
|
13
|
+
};
|
|
14
|
+
static _instanceNumber: number;
|
|
15
|
+
_instanceNumber: number;
|
|
16
|
+
_isThreadClosed: boolean;
|
|
17
|
+
private readonly _webWorkerHolder;
|
|
18
|
+
constructor(useSeparateWebWorkerHolder?: boolean);
|
|
19
|
+
get instanceIdentifier(): number;
|
|
20
|
+
get completionFunctions(): {
|
|
21
|
+
[x: string]: (sortedData: any[], sortedIndexes: number[], identifier: any) => void;
|
|
22
|
+
};
|
|
23
|
+
get messagesToPost(): any[];
|
|
24
|
+
set isWorkerBusy(isWorkerBusy: boolean);
|
|
25
|
+
get isWorkerBusy(): boolean;
|
|
26
|
+
postNextMessageIfNeeded(): void;
|
|
27
|
+
static dataType: {
|
|
28
|
+
string: string;
|
|
29
|
+
number: string;
|
|
30
|
+
};
|
|
31
|
+
static direction: {
|
|
32
|
+
descending: string;
|
|
33
|
+
ascending: string;
|
|
34
|
+
};
|
|
35
|
+
sortData<T>(data: T[], sortingInstructions: UIKeyValueStringSorterSortingInstruction[], identifier: any, completion: (sortedData: T[], sortedIndexes: number[], identifier: any) => void): void;
|
|
36
|
+
sortedData<T>(data: T[], sortingInstructions: UIKeyValueStringSorterSortingInstruction[], identifier?: any): Promise<{
|
|
37
|
+
sortedData: T[];
|
|
38
|
+
sortedIndexes: number[];
|
|
39
|
+
identifier: any;
|
|
40
|
+
}>;
|
|
41
|
+
closeThread(): void;
|
|
42
|
+
}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
22
|
+
mod
|
|
23
|
+
));
|
|
24
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
25
|
+
var UIKeyValueSorter_exports = {};
|
|
26
|
+
__export(UIKeyValueSorter_exports, {
|
|
27
|
+
UIKeyValueSorter: () => UIKeyValueSorter
|
|
28
|
+
});
|
|
29
|
+
module.exports = __toCommonJS(UIKeyValueSorter_exports);
|
|
30
|
+
var import_UIKeyValueSorterWebWorker = __toESM(require("./UIKeyValueSorterWebWorker.worker"));
|
|
31
|
+
var import_UIObject = require("./UIObject");
|
|
32
|
+
const _UIKeyValueSorter = class extends import_UIObject.UIObject {
|
|
33
|
+
constructor(useSeparateWebWorkerHolder = import_UIObject.NO) {
|
|
34
|
+
super();
|
|
35
|
+
this._isThreadClosed = import_UIObject.NO;
|
|
36
|
+
this._webWorkerHolder = _UIKeyValueSorter._sharedWebWorkerHolder;
|
|
37
|
+
if (useSeparateWebWorkerHolder) {
|
|
38
|
+
this._webWorkerHolder = {
|
|
39
|
+
webWorker: new import_UIKeyValueSorterWebWorker.default(),
|
|
40
|
+
UICore_isWorking: false,
|
|
41
|
+
UICore_messagesToPost: void 0,
|
|
42
|
+
UICore_completionFunctions: {}
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
_UIKeyValueSorter._instanceNumber = _UIKeyValueSorter._instanceNumber + 1;
|
|
46
|
+
this._instanceNumber = _UIKeyValueSorter._instanceNumber;
|
|
47
|
+
if ((0, import_UIObject.IS_NOT)(this._webWorkerHolder.webWorker.onmessage)) {
|
|
48
|
+
this._webWorkerHolder.webWorker.onmessage = (message) => {
|
|
49
|
+
this.isWorkerBusy = import_UIObject.NO;
|
|
50
|
+
this.postNextMessageIfNeeded();
|
|
51
|
+
const key = "" + message.data.identifier + message.data.instanceIdentifier;
|
|
52
|
+
const completionFunction = this.completionFunctions[key];
|
|
53
|
+
if ((0, import_UIObject.IS)(completionFunction)) {
|
|
54
|
+
completionFunction(message.data.sortedData, message.data.sortedIndexes, message.data.identifier);
|
|
55
|
+
}
|
|
56
|
+
delete this.completionFunctions[key];
|
|
57
|
+
var asd = 1;
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
get instanceIdentifier() {
|
|
62
|
+
return this._instanceNumber;
|
|
63
|
+
}
|
|
64
|
+
get completionFunctions() {
|
|
65
|
+
const key = "UICore_completionFunctions";
|
|
66
|
+
var result = this._webWorkerHolder[key];
|
|
67
|
+
if ((0, import_UIObject.IS_NOT)(result)) {
|
|
68
|
+
result = {};
|
|
69
|
+
this._webWorkerHolder[key] = result;
|
|
70
|
+
}
|
|
71
|
+
return result;
|
|
72
|
+
}
|
|
73
|
+
get messagesToPost() {
|
|
74
|
+
const key = "UICore_messagesToPost";
|
|
75
|
+
var result = this._webWorkerHolder[key];
|
|
76
|
+
if ((0, import_UIObject.IS_NOT)(result)) {
|
|
77
|
+
result = [];
|
|
78
|
+
this._webWorkerHolder[key] = result;
|
|
79
|
+
}
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
set isWorkerBusy(isWorkerBusy) {
|
|
83
|
+
this._webWorkerHolder["UICore_isWorking"] = isWorkerBusy;
|
|
84
|
+
}
|
|
85
|
+
get isWorkerBusy() {
|
|
86
|
+
return (0, import_UIObject.IS)(this._webWorkerHolder["UICore_isWorking"]);
|
|
87
|
+
}
|
|
88
|
+
postNextMessageIfNeeded() {
|
|
89
|
+
if (this.messagesToPost.length && (0, import_UIObject.IS_NOT)(this.isWorkerBusy)) {
|
|
90
|
+
this._webWorkerHolder.webWorker.postMessage(this.messagesToPost.firstElement);
|
|
91
|
+
this.messagesToPost.removeElementAtIndex(0);
|
|
92
|
+
this.isWorkerBusy = import_UIObject.YES;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
sortData(data, sortingInstructions, identifier, completion) {
|
|
96
|
+
if (this._isThreadClosed) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const instanceIdentifier = this.instanceIdentifier;
|
|
100
|
+
const key = "" + identifier + instanceIdentifier;
|
|
101
|
+
this.completionFunctions[key] = completion;
|
|
102
|
+
try {
|
|
103
|
+
this.messagesToPost.push({
|
|
104
|
+
"data": data,
|
|
105
|
+
"sortingInstructions": sortingInstructions,
|
|
106
|
+
"identifier": identifier,
|
|
107
|
+
"instanceIdentifier": instanceIdentifier
|
|
108
|
+
});
|
|
109
|
+
this.postNextMessageIfNeeded();
|
|
110
|
+
} catch (exception) {
|
|
111
|
+
completion([], [], identifier);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
sortedData(data, sortingInstructions, identifier = (0, import_UIObject.MAKE_ID)()) {
|
|
115
|
+
const result = new Promise((resolve, reject) => {
|
|
116
|
+
this.sortData(data, sortingInstructions, identifier, (sortedData, sortedIndexes, sortedIdentifier) => {
|
|
117
|
+
if (sortedIdentifier == identifier) {
|
|
118
|
+
resolve({
|
|
119
|
+
sortedData,
|
|
120
|
+
sortedIndexes,
|
|
121
|
+
identifier: sortedIdentifier
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
return result;
|
|
127
|
+
}
|
|
128
|
+
closeThread() {
|
|
129
|
+
this._isThreadClosed = import_UIObject.YES;
|
|
130
|
+
if (this._webWorkerHolder != _UIKeyValueSorter._sharedWebWorkerHolder) {
|
|
131
|
+
this._webWorkerHolder.webWorker.terminate();
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
let UIKeyValueSorter = _UIKeyValueSorter;
|
|
136
|
+
UIKeyValueSorter._sharedWebWorkerHolder = {
|
|
137
|
+
UICore_completionFunctions: {},
|
|
138
|
+
UICore_isWorking: false,
|
|
139
|
+
UICore_messagesToPost: void 0,
|
|
140
|
+
webWorker: new import_UIKeyValueSorterWebWorker.default()
|
|
141
|
+
};
|
|
142
|
+
UIKeyValueSorter._instanceNumber = -1;
|
|
143
|
+
UIKeyValueSorter.dataType = {
|
|
144
|
+
"string": "string",
|
|
145
|
+
"number": "number"
|
|
146
|
+
};
|
|
147
|
+
UIKeyValueSorter.direction = {
|
|
148
|
+
"descending": "descending",
|
|
149
|
+
"ascending": "ascending"
|
|
150
|
+
};
|
|
151
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
152
|
+
0 && (module.exports = {
|
|
153
|
+
UIKeyValueSorter
|
|
154
|
+
});
|
|
155
|
+
//# sourceMappingURL=UIKeyValueSorter.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../scripts/UIKeyValueSorter.ts"],
|
|
4
|
+
"sourcesContent": ["// @ts-ignore\nimport UIKeyValueSorterWebWorker from \"./UIKeyValueSorterWebWorker.worker\"\nimport { IS, IS_NOT, MAKE_ID, NO, UIObject, YES } from \"./UIObject\"\n\n\nexport interface UIKeyValueStringSorterSortingInstruction {\n \n keyPath: string;\n \n dataType: string;\n \n direction: string;\n \n \n}\n\n\nexport class UIKeyValueSorter extends UIObject {\n \n static _sharedWebWorkerHolder = {\n UICore_completionFunctions: {},\n UICore_isWorking: false,\n UICore_messagesToPost: undefined,\n webWorker: new UIKeyValueSorterWebWorker()\n }\n \n static _instanceNumber = -1\n \n _instanceNumber: number\n _isThreadClosed = NO\n \n private readonly _webWorkerHolder: {\n webWorker: any;\n UICore_isWorking: boolean\n UICore_messagesToPost: any\n UICore_completionFunctions: Record<string, (\n filteredData: string[],\n filteredIndexes: number[],\n identifier: any\n ) => void>\n } = UIKeyValueSorter._sharedWebWorkerHolder\n \n \n constructor(useSeparateWebWorkerHolder = NO) {\n \n super()\n \n if (useSeparateWebWorkerHolder) {\n \n this._webWorkerHolder = {\n webWorker: new UIKeyValueSorterWebWorker(),\n UICore_isWorking: false,\n UICore_messagesToPost: undefined,\n UICore_completionFunctions: {}\n }\n \n }\n \n UIKeyValueSorter._instanceNumber = UIKeyValueSorter._instanceNumber + 1\n this._instanceNumber = UIKeyValueSorter._instanceNumber\n \n if (IS_NOT(this._webWorkerHolder.webWorker.onmessage)) {\n \n this._webWorkerHolder.webWorker.onmessage = (message: { data: { identifier: string; instanceIdentifier: string; sortedData: any[]; sortedIndexes: number[]; }; }) => {\n \n this.isWorkerBusy = NO\n this.postNextMessageIfNeeded()\n \n const key = \"\" + message.data.identifier + message.data.instanceIdentifier\n \n const completionFunction = this.completionFunctions[key]\n \n if (IS(completionFunction)) {\n \n //console.log(\"Filtering took \" + (Date.now() - startTime) + \" ms\");\n \n completionFunction(message.data.sortedData, message.data.sortedIndexes, message.data.identifier)\n \n }\n \n delete this.completionFunctions[key]\n \n var asd = 1\n \n }\n \n }\n \n \n }\n \n \n get instanceIdentifier() {\n \n return this._instanceNumber\n \n }\n \n \n get completionFunctions() {\n \n const key = \"UICore_completionFunctions\"\n var result: {\n \n [x: string]: (sortedData: any[], sortedIndexes: number[], identifier: any) => void\n \n } = this._webWorkerHolder[key]\n \n if (IS_NOT(result)) {\n \n result = {}\n this._webWorkerHolder[key] = result\n \n }\n \n return result\n \n }\n \n get messagesToPost() {\n \n const key = \"UICore_messagesToPost\"\n var result: any[] = this._webWorkerHolder[key]\n \n if (IS_NOT(result)) {\n \n result = []\n this._webWorkerHolder[key] = result\n \n }\n \n return result\n \n }\n \n \n set isWorkerBusy(isWorkerBusy: boolean) {\n \n this._webWorkerHolder[\"UICore_isWorking\"] = isWorkerBusy\n \n }\n \n get isWorkerBusy() {\n \n return IS(this._webWorkerHolder[\"UICore_isWorking\"])\n \n }\n \n \n postNextMessageIfNeeded() {\n \n if (this.messagesToPost.length && IS_NOT(this.isWorkerBusy)) {\n \n this._webWorkerHolder.webWorker.postMessage(this.messagesToPost.firstElement)\n this.messagesToPost.removeElementAtIndex(0)\n \n this.isWorkerBusy = YES\n \n }\n \n }\n \n \n static dataType = {\n \n \"string\": \"string\",\n \"number\": \"number\"\n \n }\n \n \n static direction = {\n \n \"descending\": \"descending\",\n \"ascending\": \"ascending\"\n \n }\n \n \n sortData<T>(\n data: T[],\n sortingInstructions: UIKeyValueStringSorterSortingInstruction[],\n identifier: any,\n completion: (sortedData: T[], sortedIndexes: number[], identifier: any) => void\n ) {\n \n \n if (this._isThreadClosed) {\n \n return\n \n }\n \n \n const instanceIdentifier = this.instanceIdentifier\n \n const key = \"\" + identifier + instanceIdentifier\n \n this.completionFunctions[key] = completion\n \n \n try {\n \n this.messagesToPost.push({\n \n \"data\": data,\n \"sortingInstructions\": sortingInstructions,\n \"identifier\": identifier,\n \"instanceIdentifier\": instanceIdentifier\n \n })\n \n this.postNextMessageIfNeeded()\n \n } catch (exception) {\n \n completion([], [], identifier)\n \n }\n \n \n }\n \n \n sortedData<T>(\n data: T[],\n sortingInstructions: UIKeyValueStringSorterSortingInstruction[],\n identifier: any = MAKE_ID()\n ) {\n \n const result: Promise<{\n \n sortedData: T[],\n sortedIndexes: number[],\n identifier: any\n \n }> = new Promise((resolve, reject) => {\n \n this.sortData(data, sortingInstructions, identifier, (sortedData, sortedIndexes, sortedIdentifier) => {\n \n if (sortedIdentifier == identifier) {\n \n resolve({\n \n sortedData: sortedData,\n sortedIndexes: sortedIndexes,\n identifier: sortedIdentifier\n \n })\n \n }\n \n \n })\n \n \n })\n \n return result\n \n }\n \n \n closeThread() {\n \n this._isThreadClosed = YES\n \n if (this._webWorkerHolder != UIKeyValueSorter._sharedWebWorkerHolder) {\n \n this._webWorkerHolder.webWorker.terminate()\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\n\n\n\n\n\n\n\n\n\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["UIKeyValueSorterWebWorker"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
declare function valueForKeyPath(keyPath: string, object: any): any;
|
|
2
|
+
declare function compare(firstObject: {
|
|
3
|
+
[x: string]: any;
|
|
4
|
+
}, secondObject: {
|
|
5
|
+
[x: string]: any;
|
|
6
|
+
}, sortingInstructions: string | any[]): number;
|
|
7
|
+
declare function sortData(data: any[], sortingInstructions: any[]): {
|
|
8
|
+
sortedData: any[];
|
|
9
|
+
sortedIndexes: any[];
|
|
10
|
+
};
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
onmessage = function(event) {
|
|
3
|
+
const workerResult = sortData(
|
|
4
|
+
event.data.data,
|
|
5
|
+
event.data.sortingInstructions
|
|
6
|
+
);
|
|
7
|
+
workerResult.identifier = event.data.identifier;
|
|
8
|
+
workerResult.instanceIdentifier = event.data.instanceIdentifier;
|
|
9
|
+
postMessage(workerResult);
|
|
10
|
+
};
|
|
11
|
+
function valueForKeyPath(keyPath, object) {
|
|
12
|
+
var keys = keyPath.split(".");
|
|
13
|
+
var currentObject = object;
|
|
14
|
+
for (var i = 0; i < keys.length; i++) {
|
|
15
|
+
var key = keys[i];
|
|
16
|
+
if (key.substring(0, 2) == "[]") {
|
|
17
|
+
currentObject = currentObject[key.substring(2)];
|
|
18
|
+
var remainingKeyPath = keys.slice(i + 1).join(".");
|
|
19
|
+
var currentArray = currentObject;
|
|
20
|
+
currentObject = currentArray.map(function(subObject, index, array) {
|
|
21
|
+
var result = valueForKeyPath(remainingKeyPath, subObject);
|
|
22
|
+
return result;
|
|
23
|
+
});
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
26
|
+
currentObject = (currentObject || {})[key];
|
|
27
|
+
}
|
|
28
|
+
return currentObject;
|
|
29
|
+
}
|
|
30
|
+
function compare(firstObject, secondObject, sortingInstructions) {
|
|
31
|
+
if (sortingInstructions.length == 0) {
|
|
32
|
+
return 0;
|
|
33
|
+
}
|
|
34
|
+
const sortingInstruction = sortingInstructions[0];
|
|
35
|
+
let directionMultiplier = 1;
|
|
36
|
+
if (sortingInstruction.direction == "descending") {
|
|
37
|
+
directionMultiplier = -1;
|
|
38
|
+
}
|
|
39
|
+
const firstDataString = firstObject[sortingInstruction.keyPath];
|
|
40
|
+
const secondDataString = secondObject[sortingInstruction.keyPath];
|
|
41
|
+
if (firstDataString < secondDataString) {
|
|
42
|
+
return -1 * directionMultiplier;
|
|
43
|
+
}
|
|
44
|
+
if (firstDataString > secondDataString) {
|
|
45
|
+
return directionMultiplier;
|
|
46
|
+
}
|
|
47
|
+
if (sortingInstructions.length > 1) {
|
|
48
|
+
const remainingSortingInstructions = sortingInstructions.slice(1);
|
|
49
|
+
return compare(firstObject, secondObject, remainingSortingInstructions);
|
|
50
|
+
}
|
|
51
|
+
return 0;
|
|
52
|
+
}
|
|
53
|
+
function sortData(data, sortingInstructions) {
|
|
54
|
+
const sortingObjects = data.map(function(dataItem, index, array) {
|
|
55
|
+
const result = {
|
|
56
|
+
"_UIKeyValueStringSorterWebWorkerSortingObjectIndex": index
|
|
57
|
+
};
|
|
58
|
+
sortingInstructions.forEach((instruction) => {
|
|
59
|
+
if (instruction.dataType == "string") {
|
|
60
|
+
result[instruction.keyPath] = JSON.stringify(valueForKeyPath("" + instruction.keyPath, dataItem) || {}).toLowerCase();
|
|
61
|
+
} else if (instruction.dataType == "number") {
|
|
62
|
+
result[instruction.keyPath] = JSON.stringify(valueForKeyPath("" + instruction.keyPath, dataItem) || {}).toLowerCase().numericalValue;
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
return result;
|
|
66
|
+
});
|
|
67
|
+
const sortedData = sortingObjects.sort((firstObject, secondObject) => compare(
|
|
68
|
+
firstObject,
|
|
69
|
+
secondObject,
|
|
70
|
+
sortingInstructions
|
|
71
|
+
));
|
|
72
|
+
const sortedIndexes = sortedData.map((object) => object._UIKeyValueStringSorterWebWorkerSortingObjectIndex);
|
|
73
|
+
return {
|
|
74
|
+
"sortedData": sortedIndexes.map((sortedIndex) => data[sortedIndex]),
|
|
75
|
+
"sortedIndexes": sortedIndexes
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=UIKeyValueSorterWebWorker.worker.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../scripts/UIKeyValueSorterWebWorker.worker.ts"],
|
|
4
|
+
"sourcesContent": ["onmessage = function (event) {\n \n //console.log('Message received from main script');\n const workerResult = sortData(\n event.data.data,\n event.data.sortingInstructions\n )\n \n // @ts-ignore\n workerResult.identifier = event.data.identifier\n // @ts-ignore\n workerResult.instanceIdentifier = event.data.instanceIdentifier\n \n \n // @ts-ignore\n postMessage(workerResult)\n \n}\n\n\nfunction valueForKeyPath(keyPath: string, object: any) {\n \n var keys = keyPath.split(\".\")\n var currentObject = object\n \n for (var i = 0; i < keys.length; i++) {\n \n var 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 \n currentObject = currentObject[key.substring(2)]\n \n // CurrentObject is now an array\n \n var remainingKeyPath = keys.slice(i + 1).join(\".\")\n \n var currentArray = currentObject\n \n currentObject = currentArray.map(function (subObject: any, index: any, array: any) {\n \n var result = valueForKeyPath(remainingKeyPath, subObject)\n \n return result\n \n })\n \n break\n \n }\n \n currentObject = (currentObject || {})[key]\n \n \n }\n \n return currentObject\n \n}\n\n\nfunction compare(\n firstObject: { [x: string]: any },\n secondObject: { [x: string]: any },\n sortingInstructions: string | any[]\n): number {\n \n if (sortingInstructions.length == 0) {\n return 0\n }\n \n const sortingInstruction = sortingInstructions[0]\n \n let directionMultiplier = 1\n if (sortingInstruction.direction == \"descending\") {\n directionMultiplier = -1\n }\n \n const firstDataString = firstObject[sortingInstruction.keyPath]\n const secondDataString = secondObject[sortingInstruction.keyPath]\n \n if (firstDataString < secondDataString) {\n return -1 * directionMultiplier\n }\n \n if (firstDataString > secondDataString) {\n return directionMultiplier\n }\n \n if (sortingInstructions.length > 1) {\n const remainingSortingInstructions = sortingInstructions.slice(1)\n return compare(firstObject, secondObject, remainingSortingInstructions)\n }\n \n return 0\n \n}\n\n\nfunction sortData(data: any[], sortingInstructions: any[]) {\n \n \n const sortingObjects = data.map(function (dataItem: any, index: any, array: any) {\n \n const result: { _UIKeyValueStringSorterWebWorkerSortingObjectIndex: any } & Record<string, string | number> = {\n \n \"_UIKeyValueStringSorterWebWorkerSortingObjectIndex\": index\n \n }\n \n \n sortingInstructions.forEach((instruction: { keyPath: string | number, dataType:string }) => {\n \n if (instruction.dataType == \"string\") {\n \n result[instruction.keyPath] = JSON.stringify(valueForKeyPath(\"\" + instruction.keyPath, dataItem) || {})\n .toLowerCase()\n \n }\n else if (instruction.dataType == \"number\") {\n \n result[instruction.keyPath] = JSON.stringify(valueForKeyPath(\"\" + instruction.keyPath, dataItem) || {})\n .toLowerCase().numericalValue\n \n }\n \n })\n \n return result\n \n })\n \n \n const sortedData = sortingObjects.sort((firstObject: any, secondObject: any) => compare(\n firstObject,\n secondObject,\n sortingInstructions\n ))\n \n const sortedIndexes = sortedData.map((\n object: { _UIKeyValueStringSorterWebWorkerSortingObjectIndex: any }\n ) => object._UIKeyValueStringSorterWebWorkerSortingObjectIndex)\n \n return {\n \n \"sortedData\": sortedIndexes.map(sortedIndex => data[sortedIndex]),\n \"sortedIndexes\": sortedIndexes\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": ";AAAA,YAAY,SAAU,OAAO;AAGzB,QAAM,eAAe;AAAA,IACjB,MAAM,KAAK;AAAA,IACX,MAAM,KAAK;AAAA,EACf;AAGA,eAAa,aAAa,MAAM,KAAK;AAErC,eAAa,qBAAqB,MAAM,KAAK;AAI7C,cAAY,YAAY;AAE5B;AAGA,SAAS,gBAAgB,SAAiB,QAAa;AAEnD,MAAI,OAAO,QAAQ,MAAM,GAAG;AAC5B,MAAI,gBAAgB;AAEpB,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAElC,QAAI,MAAM,KAAK;AAEf,QAAI,IAAI,UAAU,GAAG,CAAC,KAAK,MAAM;AAI7B,sBAAgB,cAAc,IAAI,UAAU,CAAC;AAI7C,UAAI,mBAAmB,KAAK,MAAM,IAAI,CAAC,EAAE,KAAK,GAAG;AAEjD,UAAI,eAAe;AAEnB,sBAAgB,aAAa,IAAI,SAAU,WAAgB,OAAY,OAAY;AAE/E,YAAI,SAAS,gBAAgB,kBAAkB,SAAS;AAExD,eAAO;AAAA,MAEX,CAAC;AAED;AAAA,IAEJ;AAEA,qBAAiB,iBAAiB,CAAC,GAAG;AAAA,EAG1C;AAEA,SAAO;AAEX;AAGA,SAAS,QACL,aACA,cACA,qBACM;AAEN,MAAI,oBAAoB,UAAU,GAAG;AACjC,WAAO;AAAA,EACX;AAEA,QAAM,qBAAqB,oBAAoB;AAE/C,MAAI,sBAAsB;AAC1B,MAAI,mBAAmB,aAAa,cAAc;AAC9C,0BAAsB;AAAA,EAC1B;AAEA,QAAM,kBAAkB,YAAY,mBAAmB;AACvD,QAAM,mBAAmB,aAAa,mBAAmB;AAEzD,MAAI,kBAAkB,kBAAkB;AACpC,WAAO,KAAK;AAAA,EAChB;AAEA,MAAI,kBAAkB,kBAAkB;AACpC,WAAO;AAAA,EACX;AAEA,MAAI,oBAAoB,SAAS,GAAG;AAChC,UAAM,+BAA+B,oBAAoB,MAAM,CAAC;AAChE,WAAO,QAAQ,aAAa,cAAc,4BAA4B;AAAA,EAC1E;AAEA,SAAO;AAEX;AAGA,SAAS,SAAS,MAAa,qBAA4B;AAGvD,QAAM,iBAAiB,KAAK,IAAI,SAAU,UAAe,OAAY,OAAY;AAE7E,UAAM,SAAwG;AAAA,MAE1G,sDAAsD;AAAA,IAE1D;AAGA,wBAAoB,QAAQ,CAAC,gBAA+D;AAExF,UAAI,YAAY,YAAY,UAAU;AAElC,eAAO,YAAY,WAAW,KAAK,UAAU,gBAAgB,KAAK,YAAY,SAAS,QAAQ,KAAK,CAAC,CAAC,EACjG,YAAY;AAAA,MAErB,WACS,YAAY,YAAY,UAAU;AAEvC,eAAO,YAAY,WAAW,KAAK,UAAU,gBAAgB,KAAK,YAAY,SAAS,QAAQ,KAAK,CAAC,CAAC,EACjG,YAAY,EAAE;AAAA,MAEvB;AAAA,IAEJ,CAAC;AAED,WAAO;AAAA,EAEX,CAAC;AAGD,QAAM,aAAa,eAAe,KAAK,CAAC,aAAkB,iBAAsB;AAAA,IAC5E;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AAED,QAAM,gBAAgB,WAAW,IAAI,CACjC,WACC,OAAO,kDAAkD;AAE9D,SAAO;AAAA,IAEH,cAAc,cAAc,IAAI,iBAAe,KAAK,YAAY;AAAA,IAChE,iBAAiB;AAAA,EAErB;AAGJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -3,7 +3,7 @@ import { UILink } from "./UILink";
|
|
|
3
3
|
export declare class UILinkButton extends UILink {
|
|
4
4
|
button: UIButton;
|
|
5
5
|
constructor(elementID?: string, elementType?: string, titleType?: string);
|
|
6
|
-
get titleLabel(): import("./UITextView").UITextView
|
|
6
|
+
get titleLabel(): import("./UITextView").UITextView;
|
|
7
7
|
get imageView(): import("./UIImageView").UIImageView;
|
|
8
8
|
set colors(colors: UIButtonColorSpecifier);
|
|
9
9
|
get colors(): UIButtonColorSpecifier;
|
|
@@ -2,6 +2,7 @@ import { UIPoint } from "./UIPoint";
|
|
|
2
2
|
import { LooseObject, UIView } from "./UIView";
|
|
3
3
|
export declare class UINativeScrollView extends UIView {
|
|
4
4
|
animationDuration: number;
|
|
5
|
+
private _contentOffset?;
|
|
5
6
|
constructor(elementID?: string, viewHTMLElement?: (HTMLElement & LooseObject) | null | undefined);
|
|
6
7
|
didScrollToPosition(offsetPosition: UIPoint): void;
|
|
7
8
|
get scrollsX(): boolean;
|
|
@@ -39,7 +39,8 @@ class UINativeScrollView extends import_UIView.UIView {
|
|
|
39
39
|
""
|
|
40
40
|
) + "translateX(" + this.viewHTMLElement.scrollLeft + "px) translateY(" + this.viewHTMLElement.scrollTop + "px)"
|
|
41
41
|
);
|
|
42
|
-
this.
|
|
42
|
+
this._contentOffset = new import_UIPoint.UIPoint(this.viewHTMLElement.scrollLeft, this.viewHTMLElement.scrollTop);
|
|
43
|
+
this.didScrollToPosition(this._contentOffset);
|
|
43
44
|
this.broadcastEventInSubtree({
|
|
44
45
|
name: import_UIView.UIView.broadcastEventName.PageDidScroll,
|
|
45
46
|
parameters: void 0
|
|
@@ -71,10 +72,13 @@ class UINativeScrollView extends import_UIView.UIView {
|
|
|
71
72
|
}
|
|
72
73
|
}
|
|
73
74
|
get contentOffset() {
|
|
74
|
-
|
|
75
|
-
|
|
75
|
+
if (!this._contentOffset) {
|
|
76
|
+
this._contentOffset = new import_UIPoint.UIPoint(this.viewHTMLElement.scrollLeft, this.viewHTMLElement.scrollTop);
|
|
77
|
+
}
|
|
78
|
+
return this._contentOffset;
|
|
76
79
|
}
|
|
77
80
|
set contentOffset(offsetPoint) {
|
|
81
|
+
this._contentOffset = offsetPoint.copy();
|
|
78
82
|
if (this.animationDuration) {
|
|
79
83
|
this.scrollXTo(this.viewHTMLElement, offsetPoint.x, this.animationDuration);
|
|
80
84
|
this.scrollYTo(this.viewHTMLElement, offsetPoint.y, this.animationDuration);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../scripts/UINativeScrollView.ts"],
|
|
4
|
-
"sourcesContent": ["import { UIPoint } from \"./UIPoint\"\nimport { LooseObject, UIView } from \"./UIView\"\n\n\nexport class UINativeScrollView extends UIView {\n \n animationDuration = 0\n \n constructor(elementID?: string, viewHTMLElement?: (HTMLElement & LooseObject) | null | undefined) {\n \n super(elementID, viewHTMLElement)\n \n this.style.cssText = this.style.cssText + \"-webkit-overflow-scrolling: touch;\"\n this.style.overflow = \"auto\"\n \n this.viewHTMLElement.addEventListener(\"scroll\", () => {\n \n this.resizingHandles.forEach(\n handle => handle.style.transform = (\"\" + handle.style.transform).replace(\n new RegExp(\"translateX\\\\(([^)]+)\\\\)\"),\n \"\"\n ).replace(\n new RegExp(\"translateY\\\\(([^)]+)\\\\)\"),\n \"\"\n ) + \"translateX(\" + this.viewHTMLElement.scrollLeft + \"px)\" + \" translateY(\" + this.viewHTMLElement.scrollTop + \"px)\"\n )\n \n this.
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAwB;AACxB,oBAAoC;AAG7B,MAAM,2BAA2B,qBAAO;AAAA,
|
|
4
|
+
"sourcesContent": ["import { UIPoint } from \"./UIPoint\"\nimport { LooseObject, UIView } from \"./UIView\"\n\n\nexport class UINativeScrollView extends UIView {\n \n animationDuration = 0\n private _contentOffset?: UIPoint\n \n constructor(elementID?: string, viewHTMLElement?: (HTMLElement & LooseObject) | null | undefined) {\n \n super(elementID, viewHTMLElement)\n \n this.style.cssText = this.style.cssText + \"-webkit-overflow-scrolling: touch;\"\n this.style.overflow = \"auto\"\n \n this.viewHTMLElement.addEventListener(\"scroll\", () => {\n \n this.resizingHandles.forEach(\n handle => handle.style.transform = (\"\" + handle.style.transform).replace(\n new RegExp(\"translateX\\\\(([^)]+)\\\\)\"),\n \"\"\n ).replace(\n new RegExp(\"translateY\\\\(([^)]+)\\\\)\"),\n \"\"\n ) + \"translateX(\" + this.viewHTMLElement.scrollLeft + \"px)\" + \" translateY(\" + this.viewHTMLElement.scrollTop + \"px)\"\n )\n \n this._contentOffset = new UIPoint(this.viewHTMLElement.scrollLeft, this.viewHTMLElement.scrollTop)\n \n this.didScrollToPosition(this._contentOffset)\n \n this.broadcastEventInSubtree({\n name: UIView.broadcastEventName.PageDidScroll,\n parameters: undefined\n })\n \n })\n \n }\n \n \n didScrollToPosition(offsetPosition: UIPoint) {\n \n \n }\n \n \n get scrollsX() {\n const result = (this.style.overflowX == \"scroll\")\n return result\n }\n \n set scrollsX(scrolls: boolean) {\n if (scrolls) {\n this.style.overflowX = \"scroll\"\n }\n else {\n this.style.overflowX = \"hidden\"\n }\n }\n \n \n get scrollsY() {\n const result = (this.style.overflowY == \"scroll\")\n return result\n }\n \n set scrollsY(scrolls: boolean) {\n if (scrolls) {\n this.style.overflowY = \"scroll\"\n }\n else {\n this.style.overflowY = \"hidden\"\n }\n }\n \n \n get contentOffset() {\n if (!this._contentOffset) {\n this._contentOffset = new UIPoint(this.viewHTMLElement.scrollLeft, this.viewHTMLElement.scrollTop)\n }\n return this._contentOffset\n }\n \n \n set contentOffset(offsetPoint: UIPoint) {\n \n this._contentOffset = offsetPoint.copy()\n \n if (this.animationDuration) {\n \n this.scrollXTo(this.viewHTMLElement, offsetPoint.x, this.animationDuration)\n this.scrollYTo(this.viewHTMLElement, offsetPoint.y, this.animationDuration)\n \n return\n \n }\n \n this.viewHTMLElement.scrollLeft = offsetPoint.x\n this.viewHTMLElement.scrollTop = offsetPoint.y\n \n }\n \n \n scrollToBottom() {\n \n this.contentOffset = new UIPoint(this.contentOffset.x, this.scrollSize.height - this.frame.height)\n \n }\n \n scrollToTop() {\n \n this.contentOffset = new UIPoint(this.contentOffset.x, 0)\n \n }\n \n get isScrolledToBottom() {\n \n return this.contentOffset.isEqualTo(new UIPoint(this.contentOffset.x, this.scrollSize.height -\n this.frame.height))\n \n }\n \n get isScrolledToTop() {\n \n return this.contentOffset.isEqualTo(new UIPoint(this.contentOffset.x, 0))\n \n }\n \n \n scrollYTo(element: HTMLElement & LooseObject, to: number, duration: number) {\n \n duration = duration * 1000\n \n const start = element.scrollTop\n const change = to - start\n const increment = 10\n \n const animateScroll = (elapsedTime: number) => {\n elapsedTime += increment\n const position = this.easeInOut(elapsedTime, start, change, duration)\n element.scrollTop = position\n if (elapsedTime < duration) {\n setTimeout(function () {\n animateScroll(elapsedTime)\n }, increment)\n }\n }\n \n animateScroll(0)\n }\n \n scrollXTo(element: HTMLElement & LooseObject, to: number, duration: number) {\n \n duration = duration * 1000\n \n const start = element.scrollTop\n const change = to - start\n const increment = 10\n \n const animateScroll = (elapsedTime: number) => {\n elapsedTime += increment\n const position = this.easeInOut(elapsedTime, start, change, duration)\n element.scrollLeft = position\n if (elapsedTime < duration) {\n setTimeout(function () {\n animateScroll(elapsedTime)\n }, increment)\n }\n }\n \n animateScroll(0)\n }\n \n easeInOut(currentTime: number, start: number, change: number, duration: number) {\n currentTime /= duration / 2\n if (currentTime < 1) {\n return change / 2 * currentTime * currentTime + start\n }\n currentTime -= 1\n return -change / 2 * (currentTime * (currentTime - 2) - 1) + start\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\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": []
|
|
7
7
|
}
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
export declare var nil: any;
|
|
2
|
-
|
|
2
|
+
declare global {
|
|
3
|
+
interface Window {
|
|
4
|
+
nil: any;
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export type RecursiveRequired<T> = Required<{
|
|
8
|
+
[P in keyof T]: T[P] extends object | undefined ? RecursiveRequired<Required<T[P]>> : T[P];
|
|
9
|
+
}>;
|
|
10
|
+
export declare function wrapInNil<T>(object?: T): Required<T>;
|
|
3
11
|
export declare const YES = true;
|
|
4
12
|
export declare const NO = false;
|
|
5
13
|
export declare function IS<T>(object: T | undefined | null | false): object is T;
|
|
@@ -32,9 +40,11 @@ export declare function CALL<T extends (...args: any) => any>(...objects: Parame
|
|
|
32
40
|
export declare class UIFunctionExtender<T extends (...args: any) => any> {
|
|
33
41
|
isAUIFunctionExtenderObject: boolean;
|
|
34
42
|
extendingFunction: T;
|
|
43
|
+
static functionByExtendingFunction<T extends (...args: any) => any>(functionToExtend: T, extendingFunction: T): T & {
|
|
44
|
+
extendedFunction: T;
|
|
45
|
+
};
|
|
35
46
|
constructor(extendingFunction: T);
|
|
36
|
-
extendedFunction(functionToExtend: T): {
|
|
37
|
-
(this: any, ...objects: any[]): void;
|
|
47
|
+
extendedFunction(functionToExtend: T): T & {
|
|
38
48
|
extendedFunction: T;
|
|
39
49
|
};
|
|
40
50
|
}
|
|
@@ -47,7 +57,7 @@ export declare class UILazyPropertyValue<T> {
|
|
|
47
57
|
}
|
|
48
58
|
export declare function LAZY_VALUE<T>(initFunction: () => T): UILazyPropertyValue<T>;
|
|
49
59
|
export type UIInitializerObject<T> = {
|
|
50
|
-
[P in keyof T]?: T[P] extends (...args: any) => any ? UIFunctionCall<T[P]> | UIFunctionExtender<T[P]> | T[P] : T[P] extends object ? UIInitializerObject<T[P]> | UILazyPropertyValue<T[P]> : T[P]
|
|
60
|
+
[P in keyof T]?: T[P] extends (...args: any) => any ? UIFunctionCall<T[P]> | UIFunctionExtender<T[P]> | T[P] : T[P] extends object ? UIInitializerObject<T[P]> | UILazyPropertyValue<T[P]> : Partial<T[P]>;
|
|
51
61
|
};
|
|
52
62
|
export declare class UIObject {
|
|
53
63
|
constructor();
|
|
@@ -74,6 +74,7 @@ var nil = new Proxy(Object.assign(NilFunction, { "class": null, "className": "Ni
|
|
|
74
74
|
return NilFunction();
|
|
75
75
|
}
|
|
76
76
|
});
|
|
77
|
+
window.nil = nil;
|
|
77
78
|
function wrapInNil(object) {
|
|
78
79
|
let result = FIRST_OR_NIL(object);
|
|
79
80
|
if (object instanceof Object && !(object instanceof Function)) {
|
|
@@ -208,6 +209,9 @@ class UIFunctionExtender {
|
|
|
208
209
|
this.isAUIFunctionExtenderObject = YES;
|
|
209
210
|
this.extendingFunction = extendingFunction;
|
|
210
211
|
}
|
|
212
|
+
static functionByExtendingFunction(functionToExtend, extendingFunction) {
|
|
213
|
+
return EXTEND(extendingFunction).extendedFunction(functionToExtend);
|
|
214
|
+
}
|
|
211
215
|
extendedFunction(functionToExtend) {
|
|
212
216
|
const extendingFunction = this.extendingFunction;
|
|
213
217
|
function extendedFunction(...objects) {
|
|
@@ -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\"\nimport { UIComponentView } from \"./UIView\"\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 extendedFunction.extendedFunction = functionToExtend\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 \n static annotationsMap: WeakMap<any, Function[]> = new WeakMap<ClassDecoratorContext, Function[]>()\n static recordAnnotation(annotation: Function, target: Function) {\n if (!UIObject.annotationsMap.has(target)) {\n UIObject.annotationsMap.set(target, [])\n }\n UIObject.annotationsMap.get(target)!.push(annotation)\n }\n static classHasAnnotation(classObject: Function, annotation: Function) {\n return UIObject.annotationsMap.get(classObject)?.contains(annotation)\n }\n static annotationsOnClass(classObject: Function) {\n return UIObject.annotationsMap.get(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<T = any>(keyPath: string, defaultValue?: T): T | undefined {\n return UIObject.valueForKeyPath(keyPath, this, defaultValue)\n }\n \n static valueForKeyPath<T = any>(keyPath: string, object: any, defaultValue?: T): T | undefined {\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 = defaultValue\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 \n return UIObject.configureWithObject(this, object)\n \n }\n \n configuredWithObject(object: UIInitializerObject<this>): this {\n \n this.configureWithObject(object)\n return this\n \n }\n \n \n static configureWithObject<TargetObjectType extends object, ConfigurationObjectType extends UIInitializerObject<TargetObjectType>>(\n configurationTarget: TargetObjectType,\n object: ConfigurationObjectType\n ): ConfigurationObjectType {\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 const result = {} as ConfigurationObjectType\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, UIObject.valueForKeyPath(keyPath, configurationTarget), result, YES)\n UIObject.setValueForKeyPath(keyPath, value, configurationTarget, YES)\n \n })\n \n \n return result\n \n }\n \n static configuredWithObject<T extends object>(configurationTarget: T, object: UIInitializerObject<T>) {\n this.configureWithObject(configurationTarget, object)\n return configurationTarget\n }\n \n \n get methods(): MethodsOnly<Omit<this, \"methods\">> {\n const thisObject = this as object\n const result = {} as any\n thisObject.forEach((value, key) => {\n if (value instanceof Function && key != \"methods\") {\n result[key] = value.bind(thisObject)\n }\n })\n return result\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\nexport type MethodsOnly<T> =\n Pick<T, { [K in keyof T]: T[K] extends Function ? K : never }[keyof T]>;\n\nexport type ValueOf<T> = T[keyof T];\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": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wCAA2C;AAC3C,qBAAwB;
|
|
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})\nwindow.nil = nil\n\ndeclare global {\n interface Window {\n nil: any;\n }\n}\n\n\nexport type RecursiveRequired<T> = Required<{\n [P in keyof T]: T[P] extends object | undefined ? RecursiveRequired<Required<T[P]>> : T[P];\n}>;\n\nexport function wrapInNil<T>(object?: T): Required<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 as any\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 static functionByExtendingFunction<T extends (...args: any) => any>(functionToExtend: T, extendingFunction: T) {\n return EXTEND(extendingFunction).extendedFunction(functionToExtend)\n }\n \n constructor(extendingFunction: T) {\n this.extendingFunction = extendingFunction\n }\n \n extendedFunction(functionToExtend: T): T & { extendedFunction: 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 extendedFunction.extendedFunction = functionToExtend\n return extendedFunction as any\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 Partial<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 \n static annotationsMap: WeakMap<any, Function[]> = new WeakMap<ClassDecoratorContext, Function[]>()\n \n static recordAnnotation(annotation: Function, target: Function) {\n if (!UIObject.annotationsMap.has(target)) {\n UIObject.annotationsMap.set(target, [])\n }\n UIObject.annotationsMap.get(target)!.push(annotation)\n }\n \n static classHasAnnotation(classObject: Function, annotation: Function) {\n return UIObject.annotationsMap.get(classObject)?.contains(annotation)\n }\n \n static annotationsOnClass(classObject: Function) {\n return UIObject.annotationsMap.get(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<T = any>(keyPath: string, defaultValue?: T): T | undefined {\n return UIObject.valueForKeyPath(keyPath, this, defaultValue)\n }\n \n static valueForKeyPath<T = any>(keyPath: string, object: any, defaultValue?: T): T | undefined {\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 = defaultValue\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 \n return UIObject.configureWithObject(this, object)\n \n }\n \n configuredWithObject(object: UIInitializerObject<this>): this {\n \n this.configureWithObject(object)\n return this\n \n }\n \n \n static configureWithObject<TargetObjectType extends object, ConfigurationObjectType extends UIInitializerObject<TargetObjectType>>(\n configurationTarget: TargetObjectType,\n object: ConfigurationObjectType\n ): ConfigurationObjectType {\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 const result = {} as ConfigurationObjectType\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, UIObject.valueForKeyPath(keyPath, configurationTarget), result, YES)\n UIObject.setValueForKeyPath(keyPath, value, configurationTarget, YES)\n \n })\n \n \n return result\n \n }\n \n static configuredWithObject<T extends object>(configurationTarget: T, object: UIInitializerObject<T>) {\n this.configureWithObject(configurationTarget, object)\n return configurationTarget\n }\n \n \n get methods(): MethodsOnly<Omit<this, \"methods\">> {\n const thisObject = this as object\n const result = {} as any\n thisObject.forEach((value, key) => {\n if (value instanceof Function && key != \"methods\") {\n result[key] = value.bind(thisObject)\n }\n })\n return result\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\nexport type MethodsOnly<T> =\n Pick<T, { [K in keyof T]: T[K] extends Function ? K : never }[keyof T]>;\n\nexport type ValueOf<T> = T[keyof T];\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", "result"]
|
|
7
7
|
}
|