jopi-toolkit 3.0.12 → 3.0.24
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/dist/jk_app/common.d.ts +2 -2
- package/dist/jk_app/common.js +7 -12
- package/dist/jk_app/common.js.map +1 -1
- package/dist/jk_data/index.d.ts +55 -0
- package/dist/jk_data/index.js +106 -0
- package/dist/jk_data/index.js.map +1 -0
- package/dist/jk_events/index.js +14 -6
- package/dist/jk_events/index.js.map +1 -1
- package/dist/jk_fs/jBundler_ifServer.d.ts +3 -3
- package/dist/jk_fs/jBundler_ifServer.js +26 -5
- package/dist/jk_fs/jBundler_ifServer.js.map +1 -1
- package/dist/jk_schemas/index.d.ts +156 -10
- package/dist/jk_schemas/index.js +130 -52
- package/dist/jk_schemas/index.js.map +1 -1
- package/dist/jk_term/index.d.ts +2 -0
- package/dist/jk_term/index.js +2 -0
- package/dist/jk_term/index.js.map +1 -1
- package/dist/jk_timer/index.d.ts +2 -0
- package/dist/jk_timer/index.js +2 -0
- package/dist/jk_timer/index.js.map +1 -1
- package/dist/jk_tools/jBundler_ifServer.d.ts +1 -0
- package/dist/jk_tools/jBundler_ifServer.js +40 -10
- package/dist/jk_tools/jBundler_ifServer.js.map +1 -1
- package/package.json +9 -8
- package/src/jk_app/common.js +442 -0
- package/src/jk_app/common.ts +7 -17
- package/src/jk_crypto/jBundler_ifServer.js +16 -0
- package/src/jk_data/index.js +155 -0
- package/src/jk_data/index.ts +166 -0
- package/src/jk_events/index.js +221 -0
- package/src/jk_events/index.ts +18 -7
- package/src/jk_fs/index.js +2 -0
- package/src/jk_fs/jBundler_ifServer.js +764 -0
- package/src/jk_fs/jBundler_ifServer.ts +26 -5
- package/src/jk_logs/index.js +371 -0
- package/src/jk_logs/jBundler_ifServer.js +24 -0
- package/src/jk_schemas/index.js +134 -52
- package/src/jk_schemas/index.ts +334 -78
- package/src/jk_term/index.js +2 -0
- package/src/jk_term/index.ts +3 -0
- package/src/jk_thread/common.js +7 -0
- package/src/jk_timer/index.js +2 -0
- package/src/jk_timer/index.ts +3 -0
- package/src/jk_tools/common.js +101 -0
- package/src/jk_tools/index.js +1 -0
- package/src/jk_tools/jBundler_ifServer.js +215 -0
- package/src/jk_tools/jBundler_ifServer.ts +49 -11
- package/src/jk_what/jBundler_ifServer.js +5 -0
- package/dist/jk_translate/index.d.ts +0 -21
- package/dist/jk_translate/index.js +0 -56
- package/dist/jk_translate/index.js.map +0 -1
- package/src/jk_os/jBundler_ifServer.js +0 -132
- package/src/jk_translate/index.ts +0 -85
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
12
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Filter the row content according to rules.
|
|
39
|
+
*/
|
|
40
|
+
export function simpleRowArrayFilter(rows, params) {
|
|
41
|
+
// > Apply filter.
|
|
42
|
+
if (params.filter) {
|
|
43
|
+
var f_1 = params.filter;
|
|
44
|
+
rows = rows.filter(function (r) {
|
|
45
|
+
if (f_1.field) {
|
|
46
|
+
var v = r[f_1.field];
|
|
47
|
+
if (v === undefined)
|
|
48
|
+
return false;
|
|
49
|
+
return String(v).includes(f_1.value);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
for (var _i = 0, _a = Object.values(r); _i < _a.length; _i++) {
|
|
53
|
+
var v = _a[_i];
|
|
54
|
+
if (v === undefined)
|
|
55
|
+
continue;
|
|
56
|
+
if (String(v).includes(f_1.value))
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
// > Apply sorting.
|
|
64
|
+
if (params.sorting && params.sorting.length) {
|
|
65
|
+
var sorting = params.sorting[0];
|
|
66
|
+
var sortField_1 = sorting.id;
|
|
67
|
+
var sortDesc_1 = sorting.desc;
|
|
68
|
+
rows = rows.sort(function (a, b) {
|
|
69
|
+
var av = a[sortField_1];
|
|
70
|
+
var bv = b[sortField_1];
|
|
71
|
+
if (av === undefined)
|
|
72
|
+
av = "";
|
|
73
|
+
if (bv === undefined)
|
|
74
|
+
bv = "";
|
|
75
|
+
var avIsNumber = typeof av === "number";
|
|
76
|
+
var bvIsNumber = typeof bv === "number";
|
|
77
|
+
if (avIsNumber && bvIsNumber) {
|
|
78
|
+
if (sortDesc_1) {
|
|
79
|
+
return bv - av;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
return av - bv;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
var avStr = String(av);
|
|
87
|
+
var bvStr = String(bv);
|
|
88
|
+
if (sortDesc_1) {
|
|
89
|
+
return bvStr.localeCompare(avStr);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
return avStr.localeCompare(bvStr);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
var totalWithoutPagination = rows.length;
|
|
98
|
+
var offset = 0;
|
|
99
|
+
if (params.page) {
|
|
100
|
+
offset = params.page.pageIndex * params.page.pageSize;
|
|
101
|
+
rows = rows.slice(offset, offset + params.page.pageSize);
|
|
102
|
+
}
|
|
103
|
+
return { rows: rows, total: totalWithoutPagination, offset: offset };
|
|
104
|
+
}
|
|
105
|
+
var JTableDs_UseArray = /** @class */ (function () {
|
|
106
|
+
function JTableDs_UseArray(name, schema, rows) {
|
|
107
|
+
this.name = name;
|
|
108
|
+
this.schema = schema;
|
|
109
|
+
this.rows = rows;
|
|
110
|
+
}
|
|
111
|
+
JTableDs_UseArray.prototype.read = function (params) {
|
|
112
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
113
|
+
return __generator(this, function (_a) {
|
|
114
|
+
return [2 /*return*/, simpleRowArrayFilter(this.rows, params)];
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
};
|
|
118
|
+
return JTableDs_UseArray;
|
|
119
|
+
}());
|
|
120
|
+
export { JTableDs_UseArray };
|
|
121
|
+
var JTableDs_HttpProxy = /** @class */ (function () {
|
|
122
|
+
function JTableDs_HttpProxy(name, url, schema) {
|
|
123
|
+
this.name = name;
|
|
124
|
+
this.url = url;
|
|
125
|
+
this.schema = schema;
|
|
126
|
+
}
|
|
127
|
+
JTableDs_HttpProxy.prototype.read = function (params) {
|
|
128
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
129
|
+
var toSend, res, asJson;
|
|
130
|
+
return __generator(this, function (_a) {
|
|
131
|
+
switch (_a.label) {
|
|
132
|
+
case 0:
|
|
133
|
+
toSend = { dsName: this.name, read: params };
|
|
134
|
+
return [4 /*yield*/, fetch(this.url, {
|
|
135
|
+
method: "POST",
|
|
136
|
+
headers: { "Content-Type": "application/json" },
|
|
137
|
+
body: JSON.stringify(toSend)
|
|
138
|
+
})];
|
|
139
|
+
case 1:
|
|
140
|
+
res = _a.sent();
|
|
141
|
+
if (res.status !== 200) {
|
|
142
|
+
throw new Error("Error while reading data source \"".concat(this.name, "\""));
|
|
143
|
+
}
|
|
144
|
+
return [4 /*yield*/, res.json()];
|
|
145
|
+
case 2:
|
|
146
|
+
asJson = _a.sent();
|
|
147
|
+
return [2 /*return*/, asJson];
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
};
|
|
152
|
+
return JTableDs_HttpProxy;
|
|
153
|
+
}());
|
|
154
|
+
export { JTableDs_HttpProxy };
|
|
155
|
+
//endregion
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import {type Schema} from "jopi-toolkit/jk_schema";
|
|
2
|
+
|
|
3
|
+
//region Rows Arrays
|
|
4
|
+
|
|
5
|
+
export interface JFieldSorting {
|
|
6
|
+
id: string;
|
|
7
|
+
desc: boolean;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface JFieldFilter {
|
|
11
|
+
value?: string | number | boolean;
|
|
12
|
+
constraint: JFieldConstraintType;
|
|
13
|
+
caseSensitive?: boolean;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export type JFieldConstraintType =
|
|
17
|
+
| "$eq" // Equals
|
|
18
|
+
| "$ne" // Not equals
|
|
19
|
+
| "$gt" // Greater than
|
|
20
|
+
| "$gte" // Greater than or equals
|
|
21
|
+
| "$lt" // Less than
|
|
22
|
+
| "$lte" // Less than or equals
|
|
23
|
+
| "$in" // In an array of values
|
|
24
|
+
| "$nin" // Not in an array of values
|
|
25
|
+
| "$like" // Like search %endsWith or startsWith%
|
|
26
|
+
|
|
27
|
+
export interface JRowsFilter {
|
|
28
|
+
field?: string;
|
|
29
|
+
value: string;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface JPageExtraction {
|
|
33
|
+
pageIndex: number;
|
|
34
|
+
pageSize: number;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface JRowArrayFilter {
|
|
38
|
+
page?: JPageExtraction;
|
|
39
|
+
filter?: JRowsFilter;
|
|
40
|
+
sorting?: JFieldSorting[];
|
|
41
|
+
fieldFilters?: Record<string, JFieldFilter[]>;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Filter the row content according to rules.
|
|
46
|
+
*/
|
|
47
|
+
export function simpleRowArrayFilter(rows: any[], params: JRowArrayFilter): JTableDs_ReadResult {
|
|
48
|
+
// > Apply filter.
|
|
49
|
+
|
|
50
|
+
if (params.filter) {
|
|
51
|
+
const f = params.filter;
|
|
52
|
+
|
|
53
|
+
rows = rows.filter(r => {
|
|
54
|
+
if (f.field) {
|
|
55
|
+
let v = r[f.field];
|
|
56
|
+
if (v===undefined) return false;
|
|
57
|
+
return String(v).includes(f.value);
|
|
58
|
+
} else {
|
|
59
|
+
for (let v of Object.values(r)) {
|
|
60
|
+
if (v===undefined) continue;
|
|
61
|
+
if (String(v).includes(f.value)) return true;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// > Apply sorting.
|
|
70
|
+
|
|
71
|
+
if (params.sorting && params.sorting.length) {
|
|
72
|
+
const sorting = params.sorting[0];
|
|
73
|
+
const sortField = sorting.id;
|
|
74
|
+
const sortDesc = sorting.desc;
|
|
75
|
+
|
|
76
|
+
rows = rows.sort((a, b) => {
|
|
77
|
+
let av = a[sortField];
|
|
78
|
+
let bv = b[sortField];
|
|
79
|
+
|
|
80
|
+
if (av === undefined) av = "";
|
|
81
|
+
if (bv === undefined) bv = "";
|
|
82
|
+
|
|
83
|
+
const avIsNumber = typeof av === "number";
|
|
84
|
+
const bvIsNumber = typeof bv === "number";
|
|
85
|
+
|
|
86
|
+
if (avIsNumber && bvIsNumber) {
|
|
87
|
+
if (sortDesc) {
|
|
88
|
+
return bv - av;
|
|
89
|
+
} else {
|
|
90
|
+
return av - bv;
|
|
91
|
+
}
|
|
92
|
+
} else {
|
|
93
|
+
const avStr = String(av);
|
|
94
|
+
const bvStr = String(bv);
|
|
95
|
+
|
|
96
|
+
if (sortDesc) {
|
|
97
|
+
return bvStr.localeCompare(avStr);
|
|
98
|
+
} else {
|
|
99
|
+
return avStr.localeCompare(bvStr);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const totalWithoutPagination = rows.length;
|
|
106
|
+
let offset = 0;
|
|
107
|
+
|
|
108
|
+
if (params.page) {
|
|
109
|
+
offset = params.page.pageIndex * params.page.pageSize;
|
|
110
|
+
rows = rows.slice(offset, offset + params.page.pageSize);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return {rows, total: totalWithoutPagination, offset};
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
//endregion
|
|
117
|
+
|
|
118
|
+
//region JTableDs
|
|
119
|
+
|
|
120
|
+
export interface JTableDs_ReadParams extends JRowArrayFilter {
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export interface JTableDs_ReadResult {
|
|
124
|
+
rows: any[];
|
|
125
|
+
total?: number;
|
|
126
|
+
offset?: number;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export interface JTableDs {
|
|
130
|
+
get name(): string;
|
|
131
|
+
get schema(): Schema;
|
|
132
|
+
read(params: JTableDs_ReadParams): Promise<JTableDs_ReadResult>;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export class JTableDs_UseArray implements JTableDs {
|
|
136
|
+
public constructor(public readonly name: string, public readonly schema: Schema, private readonly rows: any[]) {
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
async read(params: JTableDs_ReadParams): Promise<JTableDs_ReadResult> {
|
|
140
|
+
return simpleRowArrayFilter(this.rows, params);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
export class JTableDs_HttpProxy implements JTableDs {
|
|
145
|
+
public constructor(public readonly name: string, private readonly url: string, public readonly schema: Schema) {
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
async read(params: JTableDs_ReadParams): Promise<JTableDs_ReadResult> {
|
|
149
|
+
let toSend = {dsName: this.name, read: params};
|
|
150
|
+
|
|
151
|
+
let res = await fetch(this.url, {
|
|
152
|
+
method: "POST",
|
|
153
|
+
headers: {"Content-Type": "application/json"},
|
|
154
|
+
body: JSON.stringify(toSend)
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
if (res.status !== 200) {
|
|
158
|
+
throw new Error(`Error while reading data source "${this.name}"`);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
let asJson = await res.json();
|
|
162
|
+
return asJson as JTableDs_ReadResult;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
//endregion
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
12
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
import { PriorityLevel as EventPriority } from "jopi-toolkit/jk_tools";
|
|
38
|
+
// Warning: it's export.
|
|
39
|
+
export { PriorityLevel as EventPriority } from "jopi-toolkit/jk_tools";
|
|
40
|
+
var EventGroup = /** @class */ (function () {
|
|
41
|
+
function EventGroup() {
|
|
42
|
+
this.listenersFor = {};
|
|
43
|
+
this.providers = {};
|
|
44
|
+
}
|
|
45
|
+
EventGroup.prototype.newEventGroup = function () {
|
|
46
|
+
return new EventGroup();
|
|
47
|
+
};
|
|
48
|
+
EventGroup.prototype.enableEventSpying = function (spy) {
|
|
49
|
+
this.evenSpy = spy;
|
|
50
|
+
};
|
|
51
|
+
EventGroup.prototype.removeListener = function (eventName, listener) {
|
|
52
|
+
var events = this.listenersFor[eventName];
|
|
53
|
+
if (events)
|
|
54
|
+
events.remove(listener);
|
|
55
|
+
};
|
|
56
|
+
EventGroup.prototype.sendEvent = function (eventName, e) {
|
|
57
|
+
if (this.evenSpy)
|
|
58
|
+
this.evenSpy(eventName, e);
|
|
59
|
+
var events = this.listenersFor[eventName];
|
|
60
|
+
//
|
|
61
|
+
if (events) {
|
|
62
|
+
if (events.value) {
|
|
63
|
+
var values = events.value;
|
|
64
|
+
for (var _i = 0, values_1 = values; _i < values_1.length; _i++) {
|
|
65
|
+
var listener = values_1[_i];
|
|
66
|
+
listener(e, eventName);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
var staticEvent = gStaticEvents[eventName];
|
|
71
|
+
//
|
|
72
|
+
if (staticEvent) {
|
|
73
|
+
staticEvent.send(e);
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
EventGroup.prototype.sendAsyncEvent = function (eventName, e) {
|
|
77
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
78
|
+
var events, provider, listeners, _i, listeners_1, listener, values, _a, values_2, listener, r;
|
|
79
|
+
return __generator(this, function (_b) {
|
|
80
|
+
switch (_b.label) {
|
|
81
|
+
case 0:
|
|
82
|
+
if (eventName[0] !== '@') {
|
|
83
|
+
throw new Error("Async events ".concat(eventName, " must start with @"));
|
|
84
|
+
}
|
|
85
|
+
if (this.evenSpy)
|
|
86
|
+
this.evenSpy(eventName, e);
|
|
87
|
+
events = this.listenersFor[eventName];
|
|
88
|
+
if (!!events) return [3 /*break*/, 3];
|
|
89
|
+
provider = this.providers[eventName];
|
|
90
|
+
events = new PriorityArray();
|
|
91
|
+
if (!provider) return [3 /*break*/, 2];
|
|
92
|
+
return [4 /*yield*/, provider()];
|
|
93
|
+
case 1:
|
|
94
|
+
listeners = _b.sent();
|
|
95
|
+
for (_i = 0, listeners_1 = listeners; _i < listeners_1.length; _i++) {
|
|
96
|
+
listener = listeners_1[_i];
|
|
97
|
+
events.add(EventPriority.default, listener);
|
|
98
|
+
}
|
|
99
|
+
_b.label = 2;
|
|
100
|
+
case 2:
|
|
101
|
+
this.listenersFor[eventName] = events;
|
|
102
|
+
_b.label = 3;
|
|
103
|
+
case 3:
|
|
104
|
+
if (!events.value) return [3 /*break*/, 7];
|
|
105
|
+
values = events.value;
|
|
106
|
+
_a = 0, values_2 = values;
|
|
107
|
+
_b.label = 4;
|
|
108
|
+
case 4:
|
|
109
|
+
if (!(_a < values_2.length)) return [3 /*break*/, 7];
|
|
110
|
+
listener = values_2[_a];
|
|
111
|
+
r = listener(e, eventName);
|
|
112
|
+
if (!(r instanceof Promise)) return [3 /*break*/, 6];
|
|
113
|
+
return [4 /*yield*/, r];
|
|
114
|
+
case 5:
|
|
115
|
+
_b.sent();
|
|
116
|
+
_b.label = 6;
|
|
117
|
+
case 6:
|
|
118
|
+
_a++;
|
|
119
|
+
return [3 /*break*/, 4];
|
|
120
|
+
case 7: return [2 /*return*/];
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
};
|
|
125
|
+
EventGroup.prototype.addListener = function (eventName, priorityOrListener, listener) {
|
|
126
|
+
var priority;
|
|
127
|
+
var actualListener;
|
|
128
|
+
if (typeof priorityOrListener === 'function') {
|
|
129
|
+
// Cas où priority n'est pas fournie, priorityOrListener est le listener
|
|
130
|
+
priority = EventPriority.default;
|
|
131
|
+
actualListener = priorityOrListener;
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
// Cas où priority est fournie
|
|
135
|
+
priority = priorityOrListener;
|
|
136
|
+
actualListener = listener;
|
|
137
|
+
}
|
|
138
|
+
var events = this.listenersFor[eventName];
|
|
139
|
+
if (!events)
|
|
140
|
+
this.listenersFor[eventName] = events = new PriorityArray();
|
|
141
|
+
events.add(priority, actualListener);
|
|
142
|
+
};
|
|
143
|
+
/**
|
|
144
|
+
* For async events, allow loading some elements (import)
|
|
145
|
+
* only when the event is emitted for the time.
|
|
146
|
+
*/
|
|
147
|
+
EventGroup.prototype.addProvider = function (eventName, provider) {
|
|
148
|
+
this.providers[eventName] = provider;
|
|
149
|
+
};
|
|
150
|
+
return EventGroup;
|
|
151
|
+
}());
|
|
152
|
+
export { EventGroup };
|
|
153
|
+
//region PriorityArray
|
|
154
|
+
/**
|
|
155
|
+
* Allows building an array which entries are sorted by priority.
|
|
156
|
+
*/
|
|
157
|
+
var PriorityArray = /** @class */ (function () {
|
|
158
|
+
function PriorityArray() {
|
|
159
|
+
this.entries = [];
|
|
160
|
+
}
|
|
161
|
+
PriorityArray.prototype.add = function (priority, value) {
|
|
162
|
+
this.build = undefined;
|
|
163
|
+
this.entries.push({ priority: priority, value: value });
|
|
164
|
+
};
|
|
165
|
+
PriorityArray.prototype.remove = function (value) {
|
|
166
|
+
this.build = undefined;
|
|
167
|
+
this.entries = this.entries.filter(function (e) { return e.value !== value; });
|
|
168
|
+
};
|
|
169
|
+
Object.defineProperty(PriorityArray.prototype, "value", {
|
|
170
|
+
get: function () {
|
|
171
|
+
if (this.build) {
|
|
172
|
+
return this.build;
|
|
173
|
+
}
|
|
174
|
+
return this.build = this.entries
|
|
175
|
+
.sort(function (a, b) { return Number(a.priority) - Number(b.priority); })
|
|
176
|
+
.map(function (e) { return e.value; });
|
|
177
|
+
},
|
|
178
|
+
enumerable: false,
|
|
179
|
+
configurable: true
|
|
180
|
+
});
|
|
181
|
+
return PriorityArray;
|
|
182
|
+
}());
|
|
183
|
+
var StaticEventImpl = /** @class */ (function () {
|
|
184
|
+
function StaticEventImpl(eventName, eventItems) {
|
|
185
|
+
this.eventName = eventName;
|
|
186
|
+
this.eventItems = eventItems;
|
|
187
|
+
gStaticEvents[eventName] = this;
|
|
188
|
+
}
|
|
189
|
+
StaticEventImpl.prototype.send = function (data) {
|
|
190
|
+
for (var _i = 0, _a = this.eventItems; _i < _a.length; _i++) {
|
|
191
|
+
var listener = _a[_i];
|
|
192
|
+
listener(data, this.eventName);
|
|
193
|
+
}
|
|
194
|
+
return data;
|
|
195
|
+
};
|
|
196
|
+
StaticEventImpl.prototype.addListener = function (listener) {
|
|
197
|
+
var _this = this;
|
|
198
|
+
this.eventItems.push(listener);
|
|
199
|
+
return function () {
|
|
200
|
+
var idx = _this.eventItems.indexOf(listener);
|
|
201
|
+
if (idx >= 0)
|
|
202
|
+
_this.eventItems.splice(idx, 1);
|
|
203
|
+
};
|
|
204
|
+
};
|
|
205
|
+
return StaticEventImpl;
|
|
206
|
+
}());
|
|
207
|
+
export function createStaticEvent(eventName, eventItems) {
|
|
208
|
+
return new StaticEventImpl(eventName, eventItems);
|
|
209
|
+
}
|
|
210
|
+
export var defaultEventGroup = new EventGroup();
|
|
211
|
+
export function newEventGroup() {
|
|
212
|
+
return new EventGroup();
|
|
213
|
+
}
|
|
214
|
+
export var enableEventSpying = defaultEventGroup.enableEventSpying.bind(defaultEventGroup);
|
|
215
|
+
export var removeListener = defaultEventGroup.removeListener.bind(defaultEventGroup);
|
|
216
|
+
export var sendEvent = defaultEventGroup.sendEvent.bind(defaultEventGroup);
|
|
217
|
+
export var sendAsyncEvent = defaultEventGroup.sendAsyncEvent.bind(defaultEventGroup);
|
|
218
|
+
export function addListener(eventName, priorityOrListener, listener) {
|
|
219
|
+
defaultEventGroup.addListener(eventName, priorityOrListener, listener);
|
|
220
|
+
}
|
|
221
|
+
var gStaticEvents = {};
|
package/src/jk_events/index.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {PriorityLevel as EventPriority} from "jopi-toolkit/jk_tools";
|
|
2
|
+
|
|
2
3
|
// Warning: it's export.
|
|
3
4
|
export {PriorityLevel as EventPriority} from "jopi-toolkit/jk_tools";
|
|
4
5
|
|
|
@@ -31,15 +32,22 @@ export class EventGroup {
|
|
|
31
32
|
if (this.evenSpy) this.evenSpy(eventName, e);
|
|
32
33
|
|
|
33
34
|
const events = this.listenersFor[eventName];
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
35
|
+
//
|
|
36
|
+
if (events) {
|
|
37
|
+
if (events.value) {
|
|
38
|
+
const values = events.value;
|
|
39
|
+
|
|
40
|
+
for (const listener of values) {
|
|
41
|
+
listener(e, eventName);
|
|
42
|
+
}
|
|
41
43
|
}
|
|
42
44
|
}
|
|
45
|
+
|
|
46
|
+
let staticEvent = gStaticEvents[eventName];
|
|
47
|
+
//
|
|
48
|
+
if (staticEvent) {
|
|
49
|
+
staticEvent.send(e);
|
|
50
|
+
}
|
|
43
51
|
}
|
|
44
52
|
|
|
45
53
|
async sendAsyncEvent(eventName: string, e?: any|undefined): Promise<void> {
|
|
@@ -149,6 +157,7 @@ export interface SEventController {
|
|
|
149
157
|
|
|
150
158
|
class StaticEventImpl implements StaticEvent, SEventController {
|
|
151
159
|
constructor(public readonly eventName: string, private readonly eventItems: SyncEventListener[]) {
|
|
160
|
+
gStaticEvents[eventName] = this;
|
|
152
161
|
}
|
|
153
162
|
|
|
154
163
|
send<T>(data: T): T {
|
|
@@ -187,3 +196,5 @@ export const sendAsyncEvent = defaultEventGroup.sendAsyncEvent.bind(defaultEvent
|
|
|
187
196
|
export function addListener<T = any|undefined>(eventName: string, priorityOrListener: EventPriority | EventListener<T>, listener?: EventListener<T>): void {
|
|
188
197
|
defaultEventGroup.addListener(eventName, priorityOrListener as EventPriority, listener as EventListener<T>);
|
|
189
198
|
}
|
|
199
|
+
|
|
200
|
+
let gStaticEvents: Record<string, StaticEventImpl> = {};
|