jopi-toolkit 3.0.11 → 3.0.15
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_data/index.d.ts +40 -0
- package/dist/jk_data/index.js +76 -0
- package/dist/jk_data/index.js.map +1 -0
- package/dist/jk_fs/jBundler_ifServer.d.ts +1 -1
- package/dist/jk_schemas/index.d.ts +76 -6
- package/dist/jk_schemas/index.js +82 -47
- package/dist/jk_schemas/index.js.map +1 -1
- package/dist/jk_schemas/jkSchemas.d.ts +188 -0
- package/dist/jk_schemas/jkSchemas.js +257 -0
- package/dist/jk_schemas/jkSchemas.js.map +1 -0
- 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 +10 -5
- package/src/jk_app/common.js +442 -0
- package/src/jk_crypto/jBundler_ifServer.js +16 -0
- package/src/jk_data/index.js +117 -0
- package/src/jk_data/index.ts +129 -0
- package/src/jk_events/index.js +213 -0
- package/src/jk_fs/index.js +2 -0
- package/src/jk_fs/jBundler_ifServer.js +729 -0
- package/src/jk_logs/index.js +371 -0
- package/src/jk_logs/jBundler_ifServer.js +24 -0
- package/src/jk_schemas/index.js +84 -47
- package/src/jk_schemas/index.ts +196 -69
- 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_translate/index.js +56 -0
- package/src/jk_what/jBundler_ifServer.js +5 -0
- package/src/jk_os/jBundler_ifServer.js +0 -132
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import type {Schema} from "jopi-toolkit/jk_schema";
|
|
2
|
+
|
|
3
|
+
export interface JFieldSorting {
|
|
4
|
+
field: string;
|
|
5
|
+
direction: "asc" | "desc";
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export interface JRowsFilter {
|
|
9
|
+
field?: string;
|
|
10
|
+
value: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface JFieldFilter {
|
|
14
|
+
value?: string | number | boolean;
|
|
15
|
+
constraint: JFieldConstraintType;
|
|
16
|
+
caseSensitive?: boolean;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export type JFieldConstraintType =
|
|
20
|
+
| "$eq" // Equals
|
|
21
|
+
| "$ne" // Not equals
|
|
22
|
+
| "$gt" // Greater than
|
|
23
|
+
| "$gte" // Greater than or equals
|
|
24
|
+
| "$lt" // Less than
|
|
25
|
+
| "$lte" // Less than or equals
|
|
26
|
+
| "$in" // In an array of values
|
|
27
|
+
| "$nin" // Not in an array of values
|
|
28
|
+
| "$like" // Like search %endsWith or startsWith%
|
|
29
|
+
|
|
30
|
+
export interface JRowArrayFilter {
|
|
31
|
+
offset: number;
|
|
32
|
+
count: number;
|
|
33
|
+
|
|
34
|
+
filter?: JRowsFilter;
|
|
35
|
+
sorting?: JFieldSorting[];
|
|
36
|
+
fieldFilters?: Record<string, JFieldFilter[]>;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface JDataRowSource_ReadParams extends JRowArrayFilter {
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface JDataRowSource_ReadResult {
|
|
43
|
+
rows: any[];
|
|
44
|
+
total?: number;
|
|
45
|
+
offset?: number;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface JDataRowSource {
|
|
49
|
+
get schema(): Schema;
|
|
50
|
+
read(params: JDataRowSource_ReadParams): Promise<JDataRowSource_ReadResult>;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export class JDataRowSource_UseArray implements JDataRowSource {
|
|
54
|
+
public constructor(public readonly schema: Schema, private readonly rows: any[]) {
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
async read(params: JDataRowSource_ReadParams): Promise<JDataRowSource_ReadResult> {
|
|
58
|
+
return simpleRowArrayFilter(this.rows, params);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export function simpleRowArrayFilter(rows: any[], params: JRowArrayFilter): JDataRowSource_ReadResult {
|
|
63
|
+
// > Apply filter.
|
|
64
|
+
|
|
65
|
+
if (params.filter) {
|
|
66
|
+
const f = params.filter;
|
|
67
|
+
|
|
68
|
+
rows = rows.filter(r => {
|
|
69
|
+
if (f.field) {
|
|
70
|
+
let v = r[f.field];
|
|
71
|
+
if (v===undefined) return false;
|
|
72
|
+
return String(v).includes(f.value);
|
|
73
|
+
} else {
|
|
74
|
+
for (let v of Object.values(r)) {
|
|
75
|
+
if (v===undefined) continue;
|
|
76
|
+
if (String(v).includes(f.value)) return true;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// > Apply sorting.
|
|
85
|
+
|
|
86
|
+
if (params.sorting && params.sorting.length) {
|
|
87
|
+
debugger;
|
|
88
|
+
const sorting = params.sorting[0];
|
|
89
|
+
const sortField = sorting.field;
|
|
90
|
+
const sortDir = sorting.direction;
|
|
91
|
+
|
|
92
|
+
rows = rows.sort((a, b) => {
|
|
93
|
+
let av = a[sortField];
|
|
94
|
+
let bv = b[sortField];
|
|
95
|
+
|
|
96
|
+
if (av === undefined) av = "";
|
|
97
|
+
if (bv === undefined) bv = "";
|
|
98
|
+
|
|
99
|
+
const avIsNumber = typeof av === "number";
|
|
100
|
+
const bvIsNumber = typeof bv === "number";
|
|
101
|
+
|
|
102
|
+
if (avIsNumber && bvIsNumber) {
|
|
103
|
+
if (sortDir === "asc") {
|
|
104
|
+
return av - bv;
|
|
105
|
+
} else {
|
|
106
|
+
return bv - av;
|
|
107
|
+
}
|
|
108
|
+
} else {
|
|
109
|
+
const avStr = String(av);
|
|
110
|
+
const bvStr = String(bv);
|
|
111
|
+
|
|
112
|
+
if (sortDir === "asc") {
|
|
113
|
+
return avStr.localeCompare(bvStr);
|
|
114
|
+
} else {
|
|
115
|
+
return bvStr.localeCompare(avStr);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
const totalWithoutPagination = rows.length;
|
|
122
|
+
|
|
123
|
+
rows = rows.slice(params.offset, params.offset + params.count);
|
|
124
|
+
|
|
125
|
+
return {
|
|
126
|
+
rows, total: totalWithoutPagination,
|
|
127
|
+
offset: params.offset
|
|
128
|
+
}
|
|
129
|
+
}
|
|
@@ -0,0 +1,213 @@
|
|
|
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
|
+
if (!events)
|
|
61
|
+
return;
|
|
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
|
+
EventGroup.prototype.sendAsyncEvent = function (eventName, e) {
|
|
71
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
72
|
+
var events, provider, listeners, _i, listeners_1, listener, values, _a, values_2, listener, r;
|
|
73
|
+
return __generator(this, function (_b) {
|
|
74
|
+
switch (_b.label) {
|
|
75
|
+
case 0:
|
|
76
|
+
if (eventName[0] !== '@') {
|
|
77
|
+
throw new Error("Async events ".concat(eventName, " must start with @"));
|
|
78
|
+
}
|
|
79
|
+
if (this.evenSpy)
|
|
80
|
+
this.evenSpy(eventName, e);
|
|
81
|
+
events = this.listenersFor[eventName];
|
|
82
|
+
if (!!events) return [3 /*break*/, 3];
|
|
83
|
+
provider = this.providers[eventName];
|
|
84
|
+
events = new PriorityArray();
|
|
85
|
+
if (!provider) return [3 /*break*/, 2];
|
|
86
|
+
return [4 /*yield*/, provider()];
|
|
87
|
+
case 1:
|
|
88
|
+
listeners = _b.sent();
|
|
89
|
+
for (_i = 0, listeners_1 = listeners; _i < listeners_1.length; _i++) {
|
|
90
|
+
listener = listeners_1[_i];
|
|
91
|
+
events.add(EventPriority.default, listener);
|
|
92
|
+
}
|
|
93
|
+
_b.label = 2;
|
|
94
|
+
case 2:
|
|
95
|
+
this.listenersFor[eventName] = events;
|
|
96
|
+
_b.label = 3;
|
|
97
|
+
case 3:
|
|
98
|
+
if (!events.value) return [3 /*break*/, 7];
|
|
99
|
+
values = events.value;
|
|
100
|
+
_a = 0, values_2 = values;
|
|
101
|
+
_b.label = 4;
|
|
102
|
+
case 4:
|
|
103
|
+
if (!(_a < values_2.length)) return [3 /*break*/, 7];
|
|
104
|
+
listener = values_2[_a];
|
|
105
|
+
r = listener(e, eventName);
|
|
106
|
+
if (!(r instanceof Promise)) return [3 /*break*/, 6];
|
|
107
|
+
return [4 /*yield*/, r];
|
|
108
|
+
case 5:
|
|
109
|
+
_b.sent();
|
|
110
|
+
_b.label = 6;
|
|
111
|
+
case 6:
|
|
112
|
+
_a++;
|
|
113
|
+
return [3 /*break*/, 4];
|
|
114
|
+
case 7: return [2 /*return*/];
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
};
|
|
119
|
+
EventGroup.prototype.addListener = function (eventName, priorityOrListener, listener) {
|
|
120
|
+
var priority;
|
|
121
|
+
var actualListener;
|
|
122
|
+
if (typeof priorityOrListener === 'function') {
|
|
123
|
+
// Cas où priority n'est pas fournie, priorityOrListener est le listener
|
|
124
|
+
priority = EventPriority.default;
|
|
125
|
+
actualListener = priorityOrListener;
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
// Cas où priority est fournie
|
|
129
|
+
priority = priorityOrListener;
|
|
130
|
+
actualListener = listener;
|
|
131
|
+
}
|
|
132
|
+
var events = this.listenersFor[eventName];
|
|
133
|
+
if (!events)
|
|
134
|
+
this.listenersFor[eventName] = events = new PriorityArray();
|
|
135
|
+
events.add(priority, actualListener);
|
|
136
|
+
};
|
|
137
|
+
/**
|
|
138
|
+
* For async events, allow loading some elements (import)
|
|
139
|
+
* only when the event is emitted for the time.
|
|
140
|
+
*/
|
|
141
|
+
EventGroup.prototype.addProvider = function (eventName, provider) {
|
|
142
|
+
this.providers[eventName] = provider;
|
|
143
|
+
};
|
|
144
|
+
return EventGroup;
|
|
145
|
+
}());
|
|
146
|
+
export { EventGroup };
|
|
147
|
+
//region PriorityArray
|
|
148
|
+
/**
|
|
149
|
+
* Allows building an array which entries are sorted by priority.
|
|
150
|
+
*/
|
|
151
|
+
var PriorityArray = /** @class */ (function () {
|
|
152
|
+
function PriorityArray() {
|
|
153
|
+
this.entries = [];
|
|
154
|
+
}
|
|
155
|
+
PriorityArray.prototype.add = function (priority, value) {
|
|
156
|
+
this.build = undefined;
|
|
157
|
+
this.entries.push({ priority: priority, value: value });
|
|
158
|
+
};
|
|
159
|
+
PriorityArray.prototype.remove = function (value) {
|
|
160
|
+
this.build = undefined;
|
|
161
|
+
this.entries = this.entries.filter(function (e) { return e.value !== value; });
|
|
162
|
+
};
|
|
163
|
+
Object.defineProperty(PriorityArray.prototype, "value", {
|
|
164
|
+
get: function () {
|
|
165
|
+
if (this.build) {
|
|
166
|
+
return this.build;
|
|
167
|
+
}
|
|
168
|
+
return this.build = this.entries
|
|
169
|
+
.sort(function (a, b) { return Number(a.priority) - Number(b.priority); })
|
|
170
|
+
.map(function (e) { return e.value; });
|
|
171
|
+
},
|
|
172
|
+
enumerable: false,
|
|
173
|
+
configurable: true
|
|
174
|
+
});
|
|
175
|
+
return PriorityArray;
|
|
176
|
+
}());
|
|
177
|
+
var StaticEventImpl = /** @class */ (function () {
|
|
178
|
+
function StaticEventImpl(eventName, eventItems) {
|
|
179
|
+
this.eventName = eventName;
|
|
180
|
+
this.eventItems = eventItems;
|
|
181
|
+
}
|
|
182
|
+
StaticEventImpl.prototype.send = function (data) {
|
|
183
|
+
for (var _i = 0, _a = this.eventItems; _i < _a.length; _i++) {
|
|
184
|
+
var listener = _a[_i];
|
|
185
|
+
listener(data, this.eventName);
|
|
186
|
+
}
|
|
187
|
+
return data;
|
|
188
|
+
};
|
|
189
|
+
StaticEventImpl.prototype.addListener = function (listener) {
|
|
190
|
+
var _this = this;
|
|
191
|
+
this.eventItems.push(listener);
|
|
192
|
+
return function () {
|
|
193
|
+
var idx = _this.eventItems.indexOf(listener);
|
|
194
|
+
if (idx >= 0)
|
|
195
|
+
_this.eventItems.splice(idx, 1);
|
|
196
|
+
};
|
|
197
|
+
};
|
|
198
|
+
return StaticEventImpl;
|
|
199
|
+
}());
|
|
200
|
+
export function createStaticEvent(eventName, eventItems) {
|
|
201
|
+
return new StaticEventImpl(eventName, eventItems);
|
|
202
|
+
}
|
|
203
|
+
export var defaultEventGroup = new EventGroup();
|
|
204
|
+
export function newEventGroup() {
|
|
205
|
+
return new EventGroup();
|
|
206
|
+
}
|
|
207
|
+
export var enableEventSpying = defaultEventGroup.enableEventSpying.bind(defaultEventGroup);
|
|
208
|
+
export var removeListener = defaultEventGroup.removeListener.bind(defaultEventGroup);
|
|
209
|
+
export var sendEvent = defaultEventGroup.sendEvent.bind(defaultEventGroup);
|
|
210
|
+
export var sendAsyncEvent = defaultEventGroup.sendAsyncEvent.bind(defaultEventGroup);
|
|
211
|
+
export function addListener(eventName, priorityOrListener, listener) {
|
|
212
|
+
defaultEventGroup.addListener(eventName, priorityOrListener, listener);
|
|
213
|
+
}
|