topsyde-utils 1.0.3 → 1.0.5
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/README.md +12 -3
- package/dist/application.d.ts +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +1035 -74
- package/dist/index.js.map +22 -1
- package/dist/initializable.d.ts +2 -2
- package/dist/router/index.d.ts +3 -3
- package/dist/router/router.d.ts +2 -5
- package/dist/router/router.internal.d.ts +2 -1
- package/dist/router/routes.d.ts +4 -4
- package/dist/server/controller.d.ts +60 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/types.d.ts +5 -0
- package/package.json +5 -3
- package/dist/application.js +0 -32
- package/dist/application.js.map +0 -1
- package/dist/consts.js +0 -34
- package/dist/consts.js.map +0 -1
- package/dist/enums.js +0 -19
- package/dist/enums.js.map +0 -1
- package/dist/errors.js +0 -46
- package/dist/errors.js.map +0 -1
- package/dist/guards.js +0 -42
- package/dist/guards.js.map +0 -1
- package/dist/initializable.js +0 -309
- package/dist/initializable.js.map +0 -1
- package/dist/lib.js +0 -460
- package/dist/lib.js.map +0 -1
- package/dist/router/index.js +0 -30
- package/dist/router/index.js.map +0 -1
- package/dist/router/router.internal.js +0 -47
- package/dist/router/router.internal.js.map +0 -1
- package/dist/router/router.js +0 -43
- package/dist/router/router.js.map +0 -1
- package/dist/router/routes.js +0 -10
- package/dist/router/routes.js.map +0 -1
- package/dist/singleton.js +0 -142
- package/dist/singleton.js.map +0 -1
- package/dist/throwable.js +0 -70
- package/dist/throwable.js.map +0 -1
- package/dist/types.js +0 -3
- package/dist/types.js.map +0 -1
package/dist/initializable.js
DELETED
@@ -1,309 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
/* class Initializable {
|
3
|
-
retries: number;
|
4
|
-
initialized: boolean;
|
5
|
-
constructor(retries: number = 25) {
|
6
|
-
this.retries = retries;
|
7
|
-
this.initialized = false;
|
8
|
-
this.initialize();
|
9
|
-
}
|
10
|
-
|
11
|
-
protected initialize() {
|
12
|
-
this.initialized = true;
|
13
|
-
}
|
14
|
-
|
15
|
-
protected async isInitialized(): Promise<boolean> {
|
16
|
-
let retries = this.retries; // 5 seconds / 200ms = 25 retries
|
17
|
-
|
18
|
-
while (!this.initialized && retries > 0) {
|
19
|
-
await new Promise((resolve) => setTimeout(resolve, 200));
|
20
|
-
retries--;
|
21
|
-
}
|
22
|
-
|
23
|
-
if (!this.initialized) {
|
24
|
-
throw new Error("Initialization failed after 5 seconds");
|
25
|
-
}
|
26
|
-
|
27
|
-
return true;
|
28
|
-
}
|
29
|
-
}
|
30
|
-
|
31
|
-
export default Initializable;
|
32
|
-
*/
|
33
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
34
|
-
/**
|
35
|
-
* Base class for objects that require asynchronous initialization
|
36
|
-
*
|
37
|
-
* @example
|
38
|
-
* class Database extends Initializable {
|
39
|
-
* private connection: any;
|
40
|
-
*
|
41
|
-
* constructor() {
|
42
|
-
* super({ retries: 10, retryInterval: 500 });
|
43
|
-
* }
|
44
|
-
*
|
45
|
-
* protected async doInitialize(): Promise<void> {
|
46
|
-
* this.connection = await connectToDatabase();
|
47
|
-
* }
|
48
|
-
* }
|
49
|
-
*
|
50
|
-
* // Usage
|
51
|
-
* const db = new Database();
|
52
|
-
* await db.initialize();
|
53
|
-
* // or check status
|
54
|
-
* if (await db.isInitialized()) {
|
55
|
-
* // use the database
|
56
|
-
* }
|
57
|
-
*/
|
58
|
-
class Initializable {
|
59
|
-
/**
|
60
|
-
* Creates a new Initializable instance
|
61
|
-
* @param options Configuration options
|
62
|
-
*/
|
63
|
-
constructor(options = {}) {
|
64
|
-
/** Whether initialization has completed successfully */
|
65
|
-
this._initialized = false;
|
66
|
-
/** Whether initialization is in progress */
|
67
|
-
this.initializing = false;
|
68
|
-
/** Whether initialization has failed */
|
69
|
-
this.failed = false;
|
70
|
-
/** Event listeners */
|
71
|
-
this.listeners = new Map();
|
72
|
-
/** Abort controller for cancellation */
|
73
|
-
this.abortController = null;
|
74
|
-
this.retries = options.retries ?? 25;
|
75
|
-
this.retryInterval = options.retryInterval ?? 200;
|
76
|
-
this.timeout = options.timeout;
|
77
|
-
if (options.autoInitialize) {
|
78
|
-
// Schedule initialization on next tick to allow subclass construction to complete
|
79
|
-
setTimeout(() => this.initialize(), 0);
|
80
|
-
}
|
81
|
-
}
|
82
|
-
/**
|
83
|
-
* Initialize the object
|
84
|
-
* @returns Promise that resolves when initialization is complete
|
85
|
-
* @throws Error if initialization fails
|
86
|
-
*/
|
87
|
-
async initialize() {
|
88
|
-
// If already initialized, return immediately
|
89
|
-
if (this._initialized) {
|
90
|
-
return;
|
91
|
-
}
|
92
|
-
// If already initializing, wait for it to complete
|
93
|
-
if (this.initializing) {
|
94
|
-
return this.waitForInitialization();
|
95
|
-
}
|
96
|
-
// Start initialization
|
97
|
-
this.initializing = true;
|
98
|
-
this.failed = false;
|
99
|
-
this.abortController = new AbortController();
|
100
|
-
try {
|
101
|
-
// Emit initializing event
|
102
|
-
this.emit("initializing");
|
103
|
-
// Call the implementation-specific initialization
|
104
|
-
await this.doInitialize();
|
105
|
-
// Mark as initialized
|
106
|
-
this._initialized = true;
|
107
|
-
this.initializing = false;
|
108
|
-
// Emit initialized event
|
109
|
-
this.emit("initialized");
|
110
|
-
}
|
111
|
-
catch (error) {
|
112
|
-
// Mark as failed
|
113
|
-
this.failed = true;
|
114
|
-
this.initializing = false;
|
115
|
-
// Emit failed event
|
116
|
-
this.emit("failed", error);
|
117
|
-
// Re-throw the error
|
118
|
-
throw error instanceof Error ? error : new Error(`Initialization failed: ${String(error)}`);
|
119
|
-
}
|
120
|
-
finally {
|
121
|
-
this.abortController = null;
|
122
|
-
}
|
123
|
-
}
|
124
|
-
/**
|
125
|
-
* Implementation-specific initialization logic
|
126
|
-
* Override this method in subclasses to provide custom initialization
|
127
|
-
*/
|
128
|
-
async doInitialize() {
|
129
|
-
// Default implementation does nothing
|
130
|
-
// Subclasses should override this method
|
131
|
-
this._initialized = true;
|
132
|
-
}
|
133
|
-
/**
|
134
|
-
* Check if the object is initialized
|
135
|
-
* @param waitForIt Whether to wait for initialization to complete
|
136
|
-
* @returns Promise that resolves to true if initialized, false otherwise
|
137
|
-
*/
|
138
|
-
async isInitialized(waitForIt = false) {
|
139
|
-
// If already initialized, return immediately
|
140
|
-
if (this._initialized) {
|
141
|
-
return true;
|
142
|
-
}
|
143
|
-
// If not waiting or already failed, return current status
|
144
|
-
if (!waitForIt || this.failed) {
|
145
|
-
return this._initialized;
|
146
|
-
}
|
147
|
-
// Wait for initialization to complete
|
148
|
-
try {
|
149
|
-
await this.waitForInitialization();
|
150
|
-
return true;
|
151
|
-
}
|
152
|
-
catch (error) {
|
153
|
-
return false;
|
154
|
-
}
|
155
|
-
}
|
156
|
-
/**
|
157
|
-
* Wait for initialization to complete
|
158
|
-
* @returns Promise that resolves when initialization is complete
|
159
|
-
* @throws Error if initialization fails or times out
|
160
|
-
*/
|
161
|
-
async waitForInitialization() {
|
162
|
-
// If already initialized, return immediately
|
163
|
-
if (this._initialized) {
|
164
|
-
return;
|
165
|
-
}
|
166
|
-
// If not initializing, start initialization
|
167
|
-
if (!this.initializing) {
|
168
|
-
return this.initialize();
|
169
|
-
}
|
170
|
-
const className = this.constructor.name;
|
171
|
-
const maxTime = this.timeout ?? this.retries * this.retryInterval;
|
172
|
-
let retries = this.retries;
|
173
|
-
// Create a promise that resolves when initialization completes
|
174
|
-
return new Promise((resolve, reject) => {
|
175
|
-
// One-time event listeners for completion
|
176
|
-
const onInitialized = () => {
|
177
|
-
this.off("initialized", onInitialized);
|
178
|
-
this.off("failed", onFailed);
|
179
|
-
this.off("timeout", onTimeout);
|
180
|
-
resolve();
|
181
|
-
};
|
182
|
-
const onFailed = (error) => {
|
183
|
-
this.off("initialized", onInitialized);
|
184
|
-
this.off("failed", onFailed);
|
185
|
-
this.off("timeout", onTimeout);
|
186
|
-
reject(error);
|
187
|
-
};
|
188
|
-
const onTimeout = () => {
|
189
|
-
this.off("initialized", onInitialized);
|
190
|
-
this.off("failed", onFailed);
|
191
|
-
this.off("timeout", onTimeout);
|
192
|
-
reject(new Error(`Initialization of ${className} timed out after ${maxTime}ms`));
|
193
|
-
};
|
194
|
-
// Register event listeners
|
195
|
-
this.on("initialized", onInitialized);
|
196
|
-
this.on("failed", onFailed);
|
197
|
-
this.on("timeout", onTimeout);
|
198
|
-
// Set up polling to check for timeout
|
199
|
-
const checkInterval = setInterval(() => {
|
200
|
-
retries--;
|
201
|
-
if (this._initialized) {
|
202
|
-
clearInterval(checkInterval);
|
203
|
-
// Will be handled by event
|
204
|
-
}
|
205
|
-
else if (retries <= 0) {
|
206
|
-
clearInterval(checkInterval);
|
207
|
-
this.emit("timeout");
|
208
|
-
}
|
209
|
-
}, this.retryInterval);
|
210
|
-
});
|
211
|
-
}
|
212
|
-
/**
|
213
|
-
* Cancel initialization if in progress
|
214
|
-
*/
|
215
|
-
cancel() {
|
216
|
-
if (this.initializing && this.abortController) {
|
217
|
-
this.abortController.abort();
|
218
|
-
this.initializing = false;
|
219
|
-
this.failed = true;
|
220
|
-
this.emit("failed", new Error("Initialization cancelled"));
|
221
|
-
}
|
222
|
-
}
|
223
|
-
/**
|
224
|
-
* Reset initialization state
|
225
|
-
* Allows re-initialization after failure
|
226
|
-
*/
|
227
|
-
reset() {
|
228
|
-
if (this.initializing) {
|
229
|
-
this.cancel();
|
230
|
-
}
|
231
|
-
this._initialized = false;
|
232
|
-
this.initializing = false;
|
233
|
-
this.failed = false;
|
234
|
-
}
|
235
|
-
/**
|
236
|
-
* Register an event listener
|
237
|
-
* @param event Event name
|
238
|
-
* @param callback Function to call when event is emitted
|
239
|
-
* @returns this for chaining
|
240
|
-
*/
|
241
|
-
on(event, callback) {
|
242
|
-
if (!this.listeners.has(event)) {
|
243
|
-
this.listeners.set(event, []);
|
244
|
-
}
|
245
|
-
this.listeners.get(event).push(callback);
|
246
|
-
return this;
|
247
|
-
}
|
248
|
-
/**
|
249
|
-
* Remove an event listener
|
250
|
-
* @param event Event name
|
251
|
-
* @param callback Function to remove
|
252
|
-
* @returns this for chaining
|
253
|
-
*/
|
254
|
-
off(event, callback) {
|
255
|
-
if (this.listeners.has(event)) {
|
256
|
-
const callbacks = this.listeners.get(event);
|
257
|
-
const index = callbacks.indexOf(callback);
|
258
|
-
if (index !== -1) {
|
259
|
-
callbacks.splice(index, 1);
|
260
|
-
}
|
261
|
-
}
|
262
|
-
return this;
|
263
|
-
}
|
264
|
-
/**
|
265
|
-
* Emit an event
|
266
|
-
* @param event Event name
|
267
|
-
* @param args Arguments to pass to listeners
|
268
|
-
*/
|
269
|
-
emit(event, ...args) {
|
270
|
-
if (this.listeners.has(event)) {
|
271
|
-
const callbacks = [...this.listeners.get(event)];
|
272
|
-
callbacks.forEach((callback) => {
|
273
|
-
try {
|
274
|
-
callback(...args);
|
275
|
-
}
|
276
|
-
catch (error) {
|
277
|
-
console.error(`Error in ${event} event listener:`, error);
|
278
|
-
}
|
279
|
-
});
|
280
|
-
}
|
281
|
-
}
|
282
|
-
/**
|
283
|
-
* Get the abort signal for cancellation
|
284
|
-
* Can be passed to fetch or other cancellable operations
|
285
|
-
*/
|
286
|
-
get abortSignal() {
|
287
|
-
return this.abortController?.signal;
|
288
|
-
}
|
289
|
-
/**
|
290
|
-
* Check if initialization has been completed
|
291
|
-
*/
|
292
|
-
get initialized() {
|
293
|
-
return this._initialized;
|
294
|
-
}
|
295
|
-
/**
|
296
|
-
* Check if initialization is in progress
|
297
|
-
*/
|
298
|
-
get isInitializing() {
|
299
|
-
return this.initializing;
|
300
|
-
}
|
301
|
-
/**
|
302
|
-
* Check if initialization has failed
|
303
|
-
*/
|
304
|
-
get hasFailed() {
|
305
|
-
return this.failed;
|
306
|
-
}
|
307
|
-
}
|
308
|
-
exports.default = Initializable;
|
309
|
-
//# sourceMappingURL=initializable.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"initializable.js","sourceRoot":"","sources":["../src/initializable.ts"],"names":[],"mappings":"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"}
|