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.
Files changed (38) hide show
  1. package/dist/jk_data/index.d.ts +40 -0
  2. package/dist/jk_data/index.js +76 -0
  3. package/dist/jk_data/index.js.map +1 -0
  4. package/dist/jk_fs/jBundler_ifServer.d.ts +1 -1
  5. package/dist/jk_schemas/index.d.ts +76 -6
  6. package/dist/jk_schemas/index.js +82 -47
  7. package/dist/jk_schemas/index.js.map +1 -1
  8. package/dist/jk_schemas/jkSchemas.d.ts +188 -0
  9. package/dist/jk_schemas/jkSchemas.js +257 -0
  10. package/dist/jk_schemas/jkSchemas.js.map +1 -0
  11. package/dist/jk_timer/index.d.ts +2 -0
  12. package/dist/jk_timer/index.js +2 -0
  13. package/dist/jk_timer/index.js.map +1 -1
  14. package/dist/jk_tools/jBundler_ifServer.d.ts +1 -0
  15. package/dist/jk_tools/jBundler_ifServer.js +40 -10
  16. package/dist/jk_tools/jBundler_ifServer.js.map +1 -1
  17. package/package.json +10 -5
  18. package/src/jk_app/common.js +442 -0
  19. package/src/jk_crypto/jBundler_ifServer.js +16 -0
  20. package/src/jk_data/index.js +117 -0
  21. package/src/jk_data/index.ts +129 -0
  22. package/src/jk_events/index.js +213 -0
  23. package/src/jk_fs/index.js +2 -0
  24. package/src/jk_fs/jBundler_ifServer.js +729 -0
  25. package/src/jk_logs/index.js +371 -0
  26. package/src/jk_logs/jBundler_ifServer.js +24 -0
  27. package/src/jk_schemas/index.js +84 -47
  28. package/src/jk_schemas/index.ts +196 -69
  29. package/src/jk_thread/common.js +7 -0
  30. package/src/jk_timer/index.js +2 -0
  31. package/src/jk_timer/index.ts +3 -0
  32. package/src/jk_tools/common.js +101 -0
  33. package/src/jk_tools/index.js +1 -0
  34. package/src/jk_tools/jBundler_ifServer.js +215 -0
  35. package/src/jk_tools/jBundler_ifServer.ts +49 -11
  36. package/src/jk_translate/index.js +56 -0
  37. package/src/jk_what/jBundler_ifServer.js +5 -0
  38. 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
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./jBundler_ifServer.ts";
2
+ export * from "./common.ts";