redis-smq-common 8.0.0-rc.30 → 8.0.0-rc.31

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 (66) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/data/redis-stable/deps/hiredis/test.sh +0 -0
  3. package/data/redis-stable/deps/jemalloc/autogen.sh +0 -0
  4. package/data/redis-stable/deps/jemalloc/build-aux/config.guess +0 -0
  5. package/data/redis-stable/deps/jemalloc/build-aux/config.sub +0 -0
  6. package/data/redis-stable/deps/jemalloc/build-aux/install-sh +0 -0
  7. package/data/redis-stable/deps/jemalloc/include/jemalloc/internal/private_namespace.sh +0 -0
  8. package/data/redis-stable/deps/jemalloc/include/jemalloc/internal/private_symbols.sh +0 -0
  9. package/data/redis-stable/deps/jemalloc/include/jemalloc/internal/public_namespace.sh +0 -0
  10. package/data/redis-stable/deps/jemalloc/include/jemalloc/internal/public_unnamespace.sh +0 -0
  11. package/data/redis-stable/deps/jemalloc/include/jemalloc/internal/smoothstep.sh +0 -0
  12. package/data/redis-stable/deps/jemalloc/include/jemalloc/jemalloc.sh +0 -0
  13. package/data/redis-stable/deps/jemalloc/include/jemalloc/jemalloc_mangle.sh +0 -0
  14. package/data/redis-stable/deps/jemalloc/include/jemalloc/jemalloc_rename.sh +0 -0
  15. package/data/redis-stable/deps/jemalloc/run_tests.sh +0 -0
  16. package/data/redis-stable/deps/jemalloc/scripts/check-formatting.sh +0 -0
  17. package/data/redis-stable/deps/jemalloc/scripts/gen_run_tests.py +0 -0
  18. package/data/redis-stable/deps/jemalloc/scripts/gen_travis.py +0 -0
  19. package/data/redis-stable/deps/jemalloc/src/ticker.py +0 -0
  20. package/data/redis-stable/runtest +0 -0
  21. package/data/redis-stable/runtest-cluster +0 -0
  22. package/data/redis-stable/runtest-moduleapi +0 -0
  23. package/data/redis-stable/runtest-sentinel +0 -0
  24. package/data/redis-stable/src/mkreleasehdr.sh +0 -0
  25. package/data/redis-stable/src/redis-trib.rb +0 -0
  26. package/data/redis-stable/tests/sentinel/tests/helpers/check_leaked_fds.tcl +0 -0
  27. package/data/redis-stable/utils/create-cluster/create-cluster +0 -0
  28. package/data/redis-stable/utils/gen-test-certs.sh +0 -0
  29. package/data/redis-stable/utils/generate-command-code.py +0 -0
  30. package/data/redis-stable/utils/generate-commands-json.py +0 -0
  31. package/data/redis-stable/utils/generate-fmtargs.py +0 -0
  32. package/data/redis-stable/utils/generate-module-api-doc.rb +0 -0
  33. package/data/redis-stable/utils/graphs/commits-over-time/genhtml.tcl +0 -0
  34. package/data/redis-stable/utils/install_server.sh +0 -0
  35. package/data/redis-stable/utils/redis_init_script +0 -0
  36. package/data/redis-stable/utils/redis_init_script.tpl +0 -0
  37. package/data/redis-stable/utils/releasetools/01_create_tarball.sh +0 -0
  38. package/data/redis-stable/utils/releasetools/02_upload_tarball.sh +0 -0
  39. package/data/redis-stable/utils/releasetools/03_test_release.sh +0 -0
  40. package/data/redis-stable/utils/releasetools/04_release_hash.sh +0 -0
  41. package/data/redis-stable/utils/releasetools/changelog.tcl +0 -0
  42. package/data/redis-stable/utils/req-res-log-validator.py +0 -0
  43. package/data/redis-stable/utils/speed-regression.tcl +0 -0
  44. package/data/redis-stable/utils/whatisdoing.sh +0 -0
  45. package/dist/cjs/index.d.ts +2 -0
  46. package/dist/cjs/index.js +2 -0
  47. package/dist/cjs/src/env/index.d.ts +1 -1
  48. package/dist/cjs/src/env/index.js +32 -15
  49. package/dist/cjs/src/net/index.d.ts +8 -0
  50. package/dist/cjs/src/net/index.js +52 -0
  51. package/dist/cjs/src/redis-server/index.d.ts +6 -0
  52. package/dist/cjs/src/redis-server/index.js +119 -0
  53. package/dist/esm/index.d.ts +2 -0
  54. package/dist/esm/index.js +2 -0
  55. package/dist/esm/src/env/index.d.ts +1 -1
  56. package/dist/esm/src/env/index.js +31 -1
  57. package/dist/esm/src/net/index.d.ts +8 -0
  58. package/dist/esm/src/net/index.js +36 -0
  59. package/dist/esm/src/redis-server/index.d.ts +6 -0
  60. package/dist/esm/src/redis-server/index.js +99 -0
  61. package/package.json +7 -11
  62. package/LICENSE +0 -22
  63. package/dist/cjs/src/env/environment.d.ts +0 -2
  64. package/dist/cjs/src/env/environment.js +0 -28
  65. package/dist/esm/src/env/environment.d.ts +0 -2
  66. package/dist/esm/src/env/environment.js +0 -25
package/CHANGELOG.md CHANGED
@@ -3,6 +3,16 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [8.0.0-rc.31](https://github.com/weyoss/redis-smq/compare/v8.0.0-rc.30...v8.0.0-rc.31) (2025-03-22)
7
+
8
+ ### ⚠ BREAKING CHANGES
9
+
10
+ - merge redis-server and net utils into redis-smq-common
11
+
12
+ ### ♻️ Code Refactoring
13
+
14
+ - merge redis-server and net utils into redis-smq-common ([3591e20](https://github.com/weyoss/redis-smq/commit/3591e2060dec07ed05d13dba7b3a6154b5bc8057))
15
+
6
16
  ## [8.0.0-rc.30](https://github.com/weyoss/redis-smq/compare/v8.0.0-rc.29...v8.0.0-rc.30) (2025-03-21)
7
17
 
8
18
  ### 🚀 Chore
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -11,4 +11,6 @@ export * from './src/redis-client/index.js';
11
11
  export * from './src/runnable/index.js';
12
12
  export * from './src/timer/index.js';
13
13
  export * from './src/worker/index.js';
14
+ export * from './src/net/index.js';
15
+ export * from './src/redis-server/index.js';
14
16
  //# sourceMappingURL=index.d.ts.map
package/dist/cjs/index.js CHANGED
@@ -27,4 +27,6 @@ __exportStar(require("./src/redis-client/index.js"), exports);
27
27
  __exportStar(require("./src/runnable/index.js"), exports);
28
28
  __exportStar(require("./src/timer/index.js"), exports);
29
29
  __exportStar(require("./src/worker/index.js"), exports);
30
+ __exportStar(require("./src/net/index.js"), exports);
31
+ __exportStar(require("./src/redis-server/index.js"), exports);
30
32
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- export * from './environment.js';
1
+ export declare function getDirname(): string;
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1,18 +1,35 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
2
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./environment.js"), exports);
3
+ exports.getDirname = getDirname;
4
+ const path_1 = require("path");
5
+ function isStackTraces(stack) {
6
+ return Array.isArray(stack);
7
+ }
8
+ function getDirname() {
9
+ const originalPrepareStackTrace = Error.prepareStackTrace;
10
+ try {
11
+ Error.prepareStackTrace = (_, stackTraces) => stackTraces;
12
+ const err = new Error();
13
+ const stack = err.stack;
14
+ if (!isStackTraces(stack) || stack.length < 2) {
15
+ throw new Error('Invalid stack trace');
16
+ }
17
+ const callSite = stack[1];
18
+ const filename = callSite.getFileName();
19
+ if (!filename) {
20
+ throw new Error('Unable to determine filename from stack trace');
21
+ }
22
+ const cleanFilename = filename.startsWith('file://')
23
+ ? filename.slice(7)
24
+ : filename;
25
+ return (0, path_1.dirname)(cleanFilename);
26
+ }
27
+ catch (error) {
28
+ const errorMessage = error instanceof Error ? error.message : String(error);
29
+ throw new Error(`Failed to get current directory: ${errorMessage}`);
30
+ }
31
+ finally {
32
+ Error.prepareStackTrace = originalPrepareStackTrace;
33
+ }
34
+ }
18
35
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,8 @@
1
+ declare function isPortInUse(port: number): Promise<boolean>;
2
+ declare function getRandomPort(): Promise<number>;
3
+ export declare const net: {
4
+ isPortInUse: typeof isPortInUse;
5
+ getRandomPort: typeof getRandomPort;
6
+ };
7
+ export {};
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.net = void 0;
13
+ const net_1 = require("net");
14
+ function isPortInUse(port) {
15
+ return __awaiter(this, void 0, void 0, function* () {
16
+ return new Promise((resolve) => {
17
+ const server = (0, net_1.createServer)()
18
+ .once('error', (err) => {
19
+ if (err.code === 'EADDRINUSE') {
20
+ resolve(true);
21
+ }
22
+ else {
23
+ resolve(false);
24
+ }
25
+ })
26
+ .once('listening', () => {
27
+ server.close();
28
+ resolve(false);
29
+ })
30
+ .listen(port, '127.0.0.1');
31
+ });
32
+ });
33
+ }
34
+ function getRandomPort() {
35
+ return __awaiter(this, void 0, void 0, function* () {
36
+ const MIN_PORT = 1024;
37
+ const MAX_PORT = 65535;
38
+ const MAX_ATTEMPTS = 100;
39
+ for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {
40
+ const port = Math.floor(Math.random() * (MAX_PORT - MIN_PORT + 1)) + MIN_PORT;
41
+ if (!(yield isPortInUse(port))) {
42
+ return port;
43
+ }
44
+ }
45
+ throw new Error('Unable to find an available port after multiple attempts');
46
+ });
47
+ }
48
+ exports.net = {
49
+ isPortInUse,
50
+ getRandomPort,
51
+ };
52
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,6 @@
1
+ export declare const redisServer: {
2
+ startRedisServer(redisPort?: number): Promise<number>;
3
+ shutdownRedisServer(port: number): Promise<void>;
4
+ cleanUp(): Promise<void>;
5
+ };
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.redisServer = void 0;
13
+ const child_process_1 = require("child_process");
14
+ const node_util_1 = require("node:util");
15
+ const index_js_1 = require("../net/index.js");
16
+ const execPromise = (0, node_util_1.promisify)(child_process_1.exec);
17
+ const PROCESS_MAP = new Map();
18
+ function getRedisBinPath() {
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ try {
21
+ const { stdout } = yield execPromise('which redis-server || where redis-server');
22
+ return stdout.trim() || null;
23
+ }
24
+ catch (_a) {
25
+ return null;
26
+ }
27
+ });
28
+ }
29
+ function handleExit() {
30
+ return () => __awaiter(this, void 0, void 0, function* () {
31
+ yield exports.redisServer.cleanUp();
32
+ process.exit(0);
33
+ });
34
+ }
35
+ exports.redisServer = {
36
+ startRedisServer(redisPort) {
37
+ return __awaiter(this, void 0, void 0, function* () {
38
+ const redisBinPath = yield getRedisBinPath();
39
+ if (!redisBinPath) {
40
+ throw new Error('Redis binary not found.');
41
+ }
42
+ const port = redisPort !== null && redisPort !== void 0 ? redisPort : (yield index_js_1.net.getRandomPort());
43
+ if (PROCESS_MAP.has(port)) {
44
+ throw new Error(`Redis server is already running on port ${port}.`);
45
+ }
46
+ const process = (0, child_process_1.spawn)(redisBinPath, [
47
+ '--appendonly',
48
+ 'no',
49
+ '--save',
50
+ '',
51
+ '--port',
52
+ port.toString(),
53
+ ]);
54
+ PROCESS_MAP.set(port, process);
55
+ process.stderr.on('data', (data) => {
56
+ console.error(`Redis stderr (${port}): ${data.toString().trim()}`);
57
+ });
58
+ return new Promise((resolve, reject) => {
59
+ const timeout = setTimeout(() => {
60
+ cleanup();
61
+ reject(new Error('Redis server start timeout'));
62
+ }, 10000);
63
+ const cleanup = () => {
64
+ clearTimeout(timeout);
65
+ process.stdout.removeListener('data', dataListener);
66
+ process.removeListener('error', errorListener);
67
+ process.removeListener('exit', exitListener);
68
+ };
69
+ const dataListener = (data) => {
70
+ if (data.toString().includes('Ready to accept connections')) {
71
+ cleanup();
72
+ resolve(port);
73
+ }
74
+ };
75
+ const errorListener = (error) => {
76
+ cleanup();
77
+ PROCESS_MAP.delete(port);
78
+ reject(error);
79
+ };
80
+ const exitListener = (code) => {
81
+ cleanup();
82
+ PROCESS_MAP.delete(port);
83
+ reject(new Error(`Redis server exited with code ${code}`));
84
+ };
85
+ process.stdout.on('data', dataListener);
86
+ process.on('error', errorListener);
87
+ process.on('exit', exitListener);
88
+ });
89
+ });
90
+ },
91
+ shutdownRedisServer(port) {
92
+ return __awaiter(this, void 0, void 0, function* () {
93
+ const process = PROCESS_MAP.get(port);
94
+ if (!process)
95
+ return;
96
+ return new Promise((resolve, reject) => {
97
+ const timeout = setTimeout(() => {
98
+ process.kill('SIGKILL');
99
+ reject(new Error(`Redis server at port ${port} did not shut down gracefully.`));
100
+ }, 5000);
101
+ const cleanup = () => {
102
+ clearTimeout(timeout);
103
+ PROCESS_MAP.delete(port);
104
+ resolve();
105
+ };
106
+ process.once('close', cleanup);
107
+ process.kill('SIGTERM');
108
+ });
109
+ });
110
+ },
111
+ cleanUp() {
112
+ return __awaiter(this, void 0, void 0, function* () {
113
+ yield Promise.all(Array.from(PROCESS_MAP.keys()).map(this.shutdownRedisServer));
114
+ });
115
+ },
116
+ };
117
+ process.on('SIGINT', handleExit);
118
+ process.on('SIGTERM', handleExit);
119
+ //# sourceMappingURL=index.js.map
@@ -11,4 +11,6 @@ export * from './src/redis-client/index.js';
11
11
  export * from './src/runnable/index.js';
12
12
  export * from './src/timer/index.js';
13
13
  export * from './src/worker/index.js';
14
+ export * from './src/net/index.js';
15
+ export * from './src/redis-server/index.js';
14
16
  //# sourceMappingURL=index.d.ts.map
package/dist/esm/index.js CHANGED
@@ -11,4 +11,6 @@ export * from './src/redis-client/index.js';
11
11
  export * from './src/runnable/index.js';
12
12
  export * from './src/timer/index.js';
13
13
  export * from './src/worker/index.js';
14
+ export * from './src/net/index.js';
15
+ export * from './src/redis-server/index.js';
14
16
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- export * from './environment.js';
1
+ export declare function getDirname(): string;
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1,2 +1,32 @@
1
- export * from './environment.js';
1
+ import { dirname } from 'path';
2
+ function isStackTraces(stack) {
3
+ return Array.isArray(stack);
4
+ }
5
+ export function getDirname() {
6
+ const originalPrepareStackTrace = Error.prepareStackTrace;
7
+ try {
8
+ Error.prepareStackTrace = (_, stackTraces) => stackTraces;
9
+ const err = new Error();
10
+ const stack = err.stack;
11
+ if (!isStackTraces(stack) || stack.length < 2) {
12
+ throw new Error('Invalid stack trace');
13
+ }
14
+ const callSite = stack[1];
15
+ const filename = callSite.getFileName();
16
+ if (!filename) {
17
+ throw new Error('Unable to determine filename from stack trace');
18
+ }
19
+ const cleanFilename = filename.startsWith('file://')
20
+ ? filename.slice(7)
21
+ : filename;
22
+ return dirname(cleanFilename);
23
+ }
24
+ catch (error) {
25
+ const errorMessage = error instanceof Error ? error.message : String(error);
26
+ throw new Error(`Failed to get current directory: ${errorMessage}`);
27
+ }
28
+ finally {
29
+ Error.prepareStackTrace = originalPrepareStackTrace;
30
+ }
31
+ }
2
32
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,8 @@
1
+ declare function isPortInUse(port: number): Promise<boolean>;
2
+ declare function getRandomPort(): Promise<number>;
3
+ export declare const net: {
4
+ isPortInUse: typeof isPortInUse;
5
+ getRandomPort: typeof getRandomPort;
6
+ };
7
+ export {};
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,36 @@
1
+ import { createServer } from 'net';
2
+ async function isPortInUse(port) {
3
+ return new Promise((resolve) => {
4
+ const server = createServer()
5
+ .once('error', (err) => {
6
+ if (err.code === 'EADDRINUSE') {
7
+ resolve(true);
8
+ }
9
+ else {
10
+ resolve(false);
11
+ }
12
+ })
13
+ .once('listening', () => {
14
+ server.close();
15
+ resolve(false);
16
+ })
17
+ .listen(port, '127.0.0.1');
18
+ });
19
+ }
20
+ async function getRandomPort() {
21
+ const MIN_PORT = 1024;
22
+ const MAX_PORT = 65535;
23
+ const MAX_ATTEMPTS = 100;
24
+ for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {
25
+ const port = Math.floor(Math.random() * (MAX_PORT - MIN_PORT + 1)) + MIN_PORT;
26
+ if (!(await isPortInUse(port))) {
27
+ return port;
28
+ }
29
+ }
30
+ throw new Error('Unable to find an available port after multiple attempts');
31
+ }
32
+ export const net = {
33
+ isPortInUse,
34
+ getRandomPort,
35
+ };
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,6 @@
1
+ export declare const redisServer: {
2
+ startRedisServer(redisPort?: number): Promise<number>;
3
+ shutdownRedisServer(port: number): Promise<void>;
4
+ cleanUp(): Promise<void>;
5
+ };
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,99 @@
1
+ import { spawn, exec } from 'child_process';
2
+ import { promisify } from 'node:util';
3
+ import { net } from '../net/index.js';
4
+ const execPromise = promisify(exec);
5
+ const PROCESS_MAP = new Map();
6
+ async function getRedisBinPath() {
7
+ try {
8
+ const { stdout } = await execPromise('which redis-server || where redis-server');
9
+ return stdout.trim() || null;
10
+ }
11
+ catch {
12
+ return null;
13
+ }
14
+ }
15
+ function handleExit() {
16
+ return async () => {
17
+ await redisServer.cleanUp();
18
+ process.exit(0);
19
+ };
20
+ }
21
+ export const redisServer = {
22
+ async startRedisServer(redisPort) {
23
+ const redisBinPath = await getRedisBinPath();
24
+ if (!redisBinPath) {
25
+ throw new Error('Redis binary not found.');
26
+ }
27
+ const port = redisPort ?? (await net.getRandomPort());
28
+ if (PROCESS_MAP.has(port)) {
29
+ throw new Error(`Redis server is already running on port ${port}.`);
30
+ }
31
+ const process = spawn(redisBinPath, [
32
+ '--appendonly',
33
+ 'no',
34
+ '--save',
35
+ '',
36
+ '--port',
37
+ port.toString(),
38
+ ]);
39
+ PROCESS_MAP.set(port, process);
40
+ process.stderr.on('data', (data) => {
41
+ console.error(`Redis stderr (${port}): ${data.toString().trim()}`);
42
+ });
43
+ return new Promise((resolve, reject) => {
44
+ const timeout = setTimeout(() => {
45
+ cleanup();
46
+ reject(new Error('Redis server start timeout'));
47
+ }, 10000);
48
+ const cleanup = () => {
49
+ clearTimeout(timeout);
50
+ process.stdout.removeListener('data', dataListener);
51
+ process.removeListener('error', errorListener);
52
+ process.removeListener('exit', exitListener);
53
+ };
54
+ const dataListener = (data) => {
55
+ if (data.toString().includes('Ready to accept connections')) {
56
+ cleanup();
57
+ resolve(port);
58
+ }
59
+ };
60
+ const errorListener = (error) => {
61
+ cleanup();
62
+ PROCESS_MAP.delete(port);
63
+ reject(error);
64
+ };
65
+ const exitListener = (code) => {
66
+ cleanup();
67
+ PROCESS_MAP.delete(port);
68
+ reject(new Error(`Redis server exited with code ${code}`));
69
+ };
70
+ process.stdout.on('data', dataListener);
71
+ process.on('error', errorListener);
72
+ process.on('exit', exitListener);
73
+ });
74
+ },
75
+ async shutdownRedisServer(port) {
76
+ const process = PROCESS_MAP.get(port);
77
+ if (!process)
78
+ return;
79
+ return new Promise((resolve, reject) => {
80
+ const timeout = setTimeout(() => {
81
+ process.kill('SIGKILL');
82
+ reject(new Error(`Redis server at port ${port} did not shut down gracefully.`));
83
+ }, 5000);
84
+ const cleanup = () => {
85
+ clearTimeout(timeout);
86
+ PROCESS_MAP.delete(port);
87
+ resolve();
88
+ };
89
+ process.once('close', cleanup);
90
+ process.kill('SIGTERM');
91
+ });
92
+ },
93
+ async cleanUp() {
94
+ await Promise.all(Array.from(PROCESS_MAP.keys()).map(this.shutdownRedisServer));
95
+ },
96
+ };
97
+ process.on('SIGINT', handleExit);
98
+ process.on('SIGTERM', handleExit);
99
+ //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "redis-smq-common",
3
- "version": "8.0.0-rc.30",
3
+ "version": "8.0.0-rc.31",
4
4
  "description": "RedisSMQ Common Library provides many components that are mainly used by RedisSMQ and RedisSMQ Monitor.",
5
5
  "author": "Weyoss <weyoss@protonmail.com>",
6
6
  "license": "MIT",
@@ -67,14 +67,6 @@
67
67
  "lodash": "4.17.21",
68
68
  "uuid": "11.1.0"
69
69
  },
70
- "devDependencies": {
71
- "redis-smq-tools": "^8.0.0-rc.30"
72
- },
73
- "scripts": {
74
- "test": "../../scripts/test_workspace_esm.sh",
75
- "build": "scripts/build.sh",
76
- "document": "scripts/document.sh"
77
- },
78
70
  "engineStrict": true,
79
71
  "engines": {
80
72
  "node": ">=20"
@@ -86,5 +78,9 @@
86
78
  "type": "git",
87
79
  "url": "https://github.com/weyoss/redis-smq.git"
88
80
  },
89
- "gitHead": "e04865007e982e10b31d77a469a85f78d41182ab"
90
- }
81
+ "scripts": {
82
+ "test": "../../scripts/test_workspace_esm.sh",
83
+ "build": "scripts/build.sh",
84
+ "document": "scripts/document.sh"
85
+ }
86
+ }
package/LICENSE DELETED
@@ -1,22 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) Weyoss <weyoss@protonmail.com>, https://github.com/weyoss
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining
6
- a copy of this software and associated documentation files (the
7
- "Software"), to deal in the Software without restriction, including
8
- without limitation the rights to use, copy, modify, merge, publish,
9
- distribute, sublicense, and/or sell copies of the Software, and to
10
- permit persons to whom the Software is furnished to do so, subject to
11
- the following conditions:
12
-
13
- The above copyright notice and this permission notice shall be
14
- included in all copies or substantial portions of the Software.
15
-
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1,2 +0,0 @@
1
- export declare function getDirname(): string;
2
- //# sourceMappingURL=environment.d.ts.map
@@ -1,28 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getDirname = getDirname;
4
- const path_1 = require("path");
5
- const index_js_1 = require("../errors/index.js");
6
- function isStackTraces(stack) {
7
- return !!(stack && Array.isArray(stack));
8
- }
9
- function getDirname() {
10
- const prepareStackTrace = Error.prepareStackTrace;
11
- Error.prepareStackTrace = (err, stackTraces) => {
12
- return stackTraces;
13
- };
14
- const err = new Error();
15
- const stack = err.stack;
16
- Error.prepareStackTrace = prepareStackTrace;
17
- if (isStackTraces(stack)) {
18
- const filename = stack[1].getFileName();
19
- if (filename) {
20
- const cleanFilename = filename.startsWith('file://')
21
- ? filename.substring(7)
22
- : filename;
23
- return (0, path_1.dirname)(cleanFilename);
24
- }
25
- }
26
- throw new index_js_1.PanicError(`Could not get current dir`);
27
- }
28
- //# sourceMappingURL=environment.js.map
@@ -1,2 +0,0 @@
1
- export declare function getDirname(): string;
2
- //# sourceMappingURL=environment.d.ts.map
@@ -1,25 +0,0 @@
1
- import { dirname } from 'path';
2
- import { PanicError } from '../errors/index.js';
3
- function isStackTraces(stack) {
4
- return !!(stack && Array.isArray(stack));
5
- }
6
- export function getDirname() {
7
- const prepareStackTrace = Error.prepareStackTrace;
8
- Error.prepareStackTrace = (err, stackTraces) => {
9
- return stackTraces;
10
- };
11
- const err = new Error();
12
- const stack = err.stack;
13
- Error.prepareStackTrace = prepareStackTrace;
14
- if (isStackTraces(stack)) {
15
- const filename = stack[1].getFileName();
16
- if (filename) {
17
- const cleanFilename = filename.startsWith('file://')
18
- ? filename.substring(7)
19
- : filename;
20
- return dirname(cleanFilename);
21
- }
22
- }
23
- throw new PanicError(`Could not get current dir`);
24
- }
25
- //# sourceMappingURL=environment.js.map