@sera4/essentia 3.0.13-rc.1 → 3.0.13

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 (154) hide show
  1. package/package.json +1 -1
  2. package/package.tar.gz +0 -0
  3. package/dist/cache/index.d.ts +0 -22
  4. package/dist/cache/index.js +0 -166
  5. package/dist/cache/index.js.map +0 -1
  6. package/dist/constants/index.d.ts +0 -6
  7. package/dist/constants/index.js +0 -9
  8. package/dist/constants/index.js.map +0 -1
  9. package/dist/formatter/index.d.ts +0 -37
  10. package/dist/formatter/index.js +0 -75
  11. package/dist/formatter/index.js.map +0 -1
  12. package/dist/hal/index.d.ts +0 -5
  13. package/dist/hal/index.js +0 -69
  14. package/dist/hal/index.js.map +0 -1
  15. package/dist/health/health-logger.d.ts +0 -9
  16. package/dist/health/health-logger.js +0 -34
  17. package/dist/health/health-logger.js.map +0 -1
  18. package/dist/health/index.d.ts +0 -19
  19. package/dist/health/index.js +0 -175
  20. package/dist/health/index.js.map +0 -1
  21. package/dist/helpers/index.d.ts +0 -1
  22. package/dist/helpers/index.js +0 -2
  23. package/dist/helpers/index.js.map +0 -1
  24. package/dist/helpers/test-server-wrapper.d.ts +0 -120
  25. package/dist/helpers/test-server-wrapper.js +0 -165
  26. package/dist/helpers/test-server-wrapper.js.map +0 -1
  27. package/dist/index.d.ts +0 -1
  28. package/dist/index.js +0 -17
  29. package/dist/index.js.map +0 -1
  30. package/dist/last-commit.d.ts +0 -1
  31. package/dist/last-commit.js.map +0 -1
  32. package/dist/last_commit/index.d.ts +0 -7
  33. package/dist/last_commit/index.js +0 -83
  34. package/dist/last_commit/index.js.map +0 -1
  35. package/dist/paginator/s4-pagination.d.ts +0 -9
  36. package/dist/paginator/s4-pagination.js +0 -49
  37. package/dist/paginator/s4-pagination.js.map +0 -1
  38. package/dist/paginator/sql-pagination.d.ts +0 -27
  39. package/dist/paginator/sql-pagination.js +0 -166
  40. package/dist/paginator/sql-pagination.js.map +0 -1
  41. package/dist/paper-trail/helpers.d.ts +0 -11
  42. package/dist/paper-trail/helpers.js +0 -74
  43. package/dist/paper-trail/helpers.js.map +0 -1
  44. package/dist/paper-trail/index.d.ts +0 -13
  45. package/dist/paper-trail/index.js +0 -662
  46. package/dist/paper-trail/index.js.map +0 -1
  47. package/dist/prompts/index.d.ts +0 -14
  48. package/dist/prompts/index.js +0 -63
  49. package/dist/prompts/index.js.map +0 -1
  50. package/dist/queue/index.d.ts +0 -166
  51. package/dist/queue/index.js +0 -371
  52. package/dist/queue/index.js.map +0 -1
  53. package/dist/queue/publisher.d.ts +0 -31
  54. package/dist/queue/publisher.js +0 -84
  55. package/dist/queue/publisher.js.map +0 -1
  56. package/dist/queue/queue-logger.d.ts +0 -9
  57. package/dist/queue/queue-logger.js +0 -35
  58. package/dist/queue/queue-logger.js.map +0 -1
  59. package/dist/queue/subscriber.d.ts +0 -39
  60. package/dist/queue/subscriber.js +0 -97
  61. package/dist/queue/subscriber.js.map +0 -1
  62. package/dist/safe_proxy/index.d.ts +0 -13
  63. package/dist/safe_proxy/index.js +0 -54
  64. package/dist/safe_proxy/index.js.map +0 -1
  65. package/dist/serializer/index.d.ts +0 -5
  66. package/dist/serializer/index.js +0 -83
  67. package/dist/serializer/index.js.map +0 -1
  68. package/dist/ts/cache/index.d.ts +0 -33
  69. package/dist/ts/cache/index.js +0 -171
  70. package/dist/ts/cache/index.js.map +0 -1
  71. package/dist/ts/configurations/server-config.d.ts +0 -4
  72. package/dist/ts/configurations/server-config.js +0 -2
  73. package/dist/ts/configurations/server-config.js.map +0 -1
  74. package/dist/ts/constants/index.d.ts +0 -7
  75. package/dist/ts/constants/index.js +0 -8
  76. package/dist/ts/constants/index.js.map +0 -1
  77. package/dist/ts/cycle/index.d.ts +0 -53
  78. package/dist/ts/cycle/index.js +0 -169
  79. package/dist/ts/cycle/index.js.map +0 -1
  80. package/dist/ts/dns/DnsCache.d.ts +0 -50
  81. package/dist/ts/dns/DnsCache.js +0 -137
  82. package/dist/ts/dns/DnsCache.js.map +0 -1
  83. package/dist/ts/dns/index.d.ts +0 -4
  84. package/dist/ts/dns/index.js +0 -4
  85. package/dist/ts/dns/index.js.map +0 -1
  86. package/dist/ts/formatter/index.d.ts +0 -44
  87. package/dist/ts/formatter/index.js +0 -76
  88. package/dist/ts/formatter/index.js.map +0 -1
  89. package/dist/ts/hal/index.d.ts +0 -26
  90. package/dist/ts/hal/index.js +0 -70
  91. package/dist/ts/hal/index.js.map +0 -1
  92. package/dist/ts/health/index.d.ts +0 -53
  93. package/dist/ts/health/index.js +0 -165
  94. package/dist/ts/health/index.js.map +0 -1
  95. package/dist/ts/helpers/index.d.ts +0 -1
  96. package/dist/ts/helpers/index.js +0 -2
  97. package/dist/ts/helpers/index.js.map +0 -1
  98. package/dist/ts/helpers/test-server-wrapper.d.ts +0 -56
  99. package/dist/ts/helpers/test-server-wrapper.js +0 -144
  100. package/dist/ts/helpers/test-server-wrapper.js.map +0 -1
  101. package/dist/ts/index.d.ts +0 -22
  102. package/dist/ts/index.js +0 -27
  103. package/dist/ts/index.js.map +0 -1
  104. package/dist/ts/last-commit/index.d.ts +0 -12
  105. package/dist/ts/last-commit/index.js +0 -82
  106. package/dist/ts/last-commit/index.js.map +0 -1
  107. package/dist/ts/logger/index.d.ts +0 -3
  108. package/dist/ts/logger/index.js +0 -4
  109. package/dist/ts/logger/index.js.map +0 -1
  110. package/dist/ts/logger/s4-logger.d.ts +0 -23
  111. package/dist/ts/logger/s4-logger.js +0 -105
  112. package/dist/ts/logger/s4-logger.js.map +0 -1
  113. package/dist/ts/paginator/index.d.ts +0 -2
  114. package/dist/ts/paginator/index.js +0 -3
  115. package/dist/ts/paginator/index.js.map +0 -1
  116. package/dist/ts/paginator/s4-pagination.d.ts +0 -26
  117. package/dist/ts/paginator/s4-pagination.js +0 -49
  118. package/dist/ts/paginator/s4-pagination.js.map +0 -1
  119. package/dist/ts/paginator/sql-pagination.d.ts +0 -52
  120. package/dist/ts/paginator/sql-pagination.js +0 -157
  121. package/dist/ts/paginator/sql-pagination.js.map +0 -1
  122. package/dist/ts/paper-trail/helpers.d.ts +0 -14
  123. package/dist/ts/paper-trail/helpers.js +0 -74
  124. package/dist/ts/paper-trail/helpers.js.map +0 -1
  125. package/dist/ts/paper-trail/index.d.ts +0 -54
  126. package/dist/ts/paper-trail/index.js +0 -236
  127. package/dist/ts/paper-trail/index.js.map +0 -1
  128. package/dist/ts/prompts/index.d.ts +0 -21
  129. package/dist/ts/prompts/index.js +0 -68
  130. package/dist/ts/prompts/index.js.map +0 -1
  131. package/dist/ts/queue/index.d.ts +0 -232
  132. package/dist/ts/queue/index.js +0 -440
  133. package/dist/ts/queue/index.js.map +0 -1
  134. package/dist/ts/queue/publisher.d.ts +0 -41
  135. package/dist/ts/queue/publisher.js +0 -84
  136. package/dist/ts/queue/publisher.js.map +0 -1
  137. package/dist/ts/queue/queue-logger.d.ts +0 -10
  138. package/dist/ts/queue/queue-logger.js +0 -35
  139. package/dist/ts/queue/queue-logger.js.map +0 -1
  140. package/dist/ts/queue/subscriber.d.ts +0 -55
  141. package/dist/ts/queue/subscriber.js +0 -98
  142. package/dist/ts/queue/subscriber.js.map +0 -1
  143. package/dist/ts/safe-proxy/index.d.ts +0 -35
  144. package/dist/ts/safe-proxy/index.js +0 -54
  145. package/dist/ts/safe-proxy/index.js.map +0 -1
  146. package/dist/ts/serializer/index.d.ts +0 -52
  147. package/dist/ts/serializer/index.js +0 -83
  148. package/dist/ts/serializer/index.js.map +0 -1
  149. package/dist/ts/task-scheduler/index.d.ts +0 -130
  150. package/dist/ts/task-scheduler/index.js +0 -259
  151. package/dist/ts/task-scheduler/index.js.map +0 -1
  152. package/dist/ts/utils/index.d.ts +0 -49
  153. package/dist/ts/utils/index.js +0 -157
  154. package/dist/ts/utils/index.js.map +0 -1
@@ -1,130 +0,0 @@
1
- /**
2
- * Task function type definition
3
- */
4
- export type TaskFunction = () => Promise<void> | void;
5
- /**
6
- * Task options interface
7
- */
8
- export interface TaskOptions {
9
- scheduled?: boolean;
10
- timezone?: string;
11
- }
12
- /**
13
- * Scheduler initialization options
14
- */
15
- export interface SchedulerOptions {
16
- timezone?: string;
17
- scheduled?: boolean;
18
- }
19
- /**
20
- * Task information interface
21
- */
22
- export interface TaskInfo {
23
- name: string;
24
- cronExpression: string;
25
- isRunning: boolean;
26
- createdAt: Date;
27
- options: TaskOptions;
28
- }
29
- /**
30
- * TaskScheduler - Singleton class for managing cron-based scheduled tasks
31
- * Provides helper functions around node-cron for easy task scheduling
32
- */
33
- export declare class TaskScheduler {
34
- private static instance;
35
- private readonly tasks;
36
- private isInitialized;
37
- private options;
38
- private constructor();
39
- /**
40
- * Get the singleton instance of TaskScheduler
41
- * @returns {TaskScheduler} The singleton instance
42
- */
43
- static getInstance(): TaskScheduler;
44
- /**
45
- * Initialize the task scheduler
46
- * @param {SchedulerOptions} options - Configuration options
47
- * @param {string} options.timezone - Timezone for cron jobs (default: 'UTC')
48
- * @param {boolean} options.scheduled - Whether to start tasks immediately (default: true)
49
- */
50
- init(options?: SchedulerOptions): void;
51
- /**
52
- * Add a scheduled task
53
- * @param {string} name - Unique name for the task
54
- * @param {string} cronExpression - Cron expression (e.g., '0 0 * * *' for daily at midnight)
55
- * @param {TaskFunction} taskFunction - Function to execute
56
- * @param {TaskOptions} options - Additional options
57
- * @param {boolean} options.scheduled - Whether to start the task immediately (default: true)
58
- * @param {string} options.timezone - Timezone override for this task
59
- * @returns {boolean} - Success status
60
- */
61
- addTask(name: string, cronExpression: string, taskFunction: TaskFunction, options?: TaskOptions): boolean;
62
- /**
63
- * Update an existing scheduled task
64
- * @param {string} name - Name of the task to update
65
- * @param {string} cronExpression - New cron expression
66
- * @param {TaskFunction} taskFunction - New function to execute
67
- * @param {TaskOptions} options - Additional options
68
- * @returns {boolean} - Success status
69
- */
70
- updateTask(name: string, cronExpression: string, taskFunction: TaskFunction, options?: TaskOptions): boolean;
71
- /**
72
- * Remove a scheduled task
73
- * @param {string} name - Name of the task to remove
74
- * @returns {boolean} - Success status
75
- */
76
- removeTask(name: string): boolean;
77
- /**
78
- * Start a specific task
79
- * @param {string} name - Name of the task to start
80
- * @returns {boolean} - Success status
81
- */
82
- startTask(name: string): boolean;
83
- /**
84
- * Stop a specific task
85
- * @param {string} name - Name of the task to stop
86
- * @returns {boolean} - Success status
87
- */
88
- stopTask(name: string): boolean;
89
- /**
90
- * Start all tasks
91
- */
92
- startAll(): void;
93
- /**
94
- * Stop all tasks
95
- */
96
- stopAll(): void;
97
- /**
98
- * Get information about all scheduled tasks
99
- * @returns {TaskInfo[]} - Array of task information objects
100
- */
101
- getTasks(): TaskInfo[];
102
- /**
103
- * Get information about a specific task
104
- * @param {string} name - Name of the task
105
- * @returns {TaskInfo | null} - Task information or null if not found
106
- */
107
- getTask(name: string): TaskInfo | null;
108
- /**
109
- * Validate a cron expression
110
- * @param {string} cronExpression - Cron expression to validate
111
- * @returns {boolean} - Whether the expression is valid
112
- */
113
- validateCronExpression(cronExpression: string): boolean;
114
- /**
115
- * Check if the scheduler is initialized
116
- * @returns {boolean} - Whether the scheduler is initialized
117
- */
118
- isSchedulerInitialized(): boolean;
119
- /**
120
- * Get the number of active tasks
121
- * @returns {number} - Number of active tasks
122
- */
123
- getTaskCount(): number;
124
- /**
125
- * Shutdown the scheduler and clean up all tasks
126
- */
127
- shutdown(): void;
128
- }
129
- declare const _default: TaskScheduler;
130
- export default _default;
@@ -1,259 +0,0 @@
1
- import cron from 'node-cron';
2
- import { S4Logger } from '../logger/index.js';
3
- const logger = new S4Logger();
4
- /**
5
- * TaskScheduler - Singleton class for managing cron-based scheduled tasks
6
- * Provides helper functions around node-cron for easy task scheduling
7
- */
8
- export class TaskScheduler {
9
- constructor() {
10
- this.tasks = new Map();
11
- this.isInitialized = false;
12
- this.options = {};
13
- }
14
- /**
15
- * Get the singleton instance of TaskScheduler
16
- * @returns {TaskScheduler} The singleton instance
17
- */
18
- static getInstance() {
19
- if (!TaskScheduler.instance) {
20
- TaskScheduler.instance = new TaskScheduler();
21
- }
22
- return TaskScheduler.instance;
23
- }
24
- /**
25
- * Initialize the task scheduler
26
- * @param {SchedulerOptions} options - Configuration options
27
- * @param {string} options.timezone - Timezone for cron jobs (default: 'UTC')
28
- * @param {boolean} options.scheduled - Whether to start tasks immediately (default: true)
29
- */
30
- init(options = {}) {
31
- if (this.isInitialized) {
32
- logger.warn('TaskScheduler already initialized');
33
- return;
34
- }
35
- this.options = {
36
- timezone: options.timezone || 'UTC',
37
- scheduled: options.scheduled !== false
38
- };
39
- this.isInitialized = true;
40
- logger.info('TaskScheduler initialized', {
41
- timezone: this.options.timezone,
42
- scheduled: this.options.scheduled
43
- });
44
- }
45
- /**
46
- * Add a scheduled task
47
- * @param {string} name - Unique name for the task
48
- * @param {string} cronExpression - Cron expression (e.g., '0 0 * * *' for daily at midnight)
49
- * @param {TaskFunction} taskFunction - Function to execute
50
- * @param {TaskOptions} options - Additional options
51
- * @param {boolean} options.scheduled - Whether to start the task immediately (default: true)
52
- * @param {string} options.timezone - Timezone override for this task
53
- * @returns {boolean} - Success status
54
- */
55
- addTask(name, cronExpression, taskFunction, options = {}) {
56
- if (!this.isInitialized) {
57
- logger.error('TaskScheduler not initialized. Call init() first.');
58
- return false;
59
- }
60
- if (this.tasks.has(name)) {
61
- logger.warn(`Task '${name}' already exists. Use updateTask() to modify it.`);
62
- return false;
63
- }
64
- if (!cron.validate(cronExpression)) {
65
- logger.error(`Invalid cron expression for task '${name}': ${cronExpression}`);
66
- return false;
67
- }
68
- const taskOptions = {
69
- scheduled: options.scheduled !== false && this.options.scheduled,
70
- timezone: options.timezone || this.options.timezone
71
- };
72
- try {
73
- const task = cron.schedule(cronExpression, async () => {
74
- const startTime = Date.now();
75
- logger.info(`Starting scheduled task: ${name}`);
76
- try {
77
- await taskFunction();
78
- const duration = Date.now() - startTime;
79
- logger.info(`Completed scheduled task: ${name} (${duration}ms)`);
80
- }
81
- catch (error) {
82
- const duration = Date.now() - startTime;
83
- logger.error(`Failed scheduled task: ${name} (${duration}ms)`, error);
84
- }
85
- }, taskOptions);
86
- this.tasks.set(name, {
87
- task,
88
- cronExpression,
89
- taskFunction,
90
- options: taskOptions,
91
- createdAt: new Date()
92
- });
93
- logger.info(`Added scheduled task: ${name}`, {
94
- cronExpression,
95
- scheduled: taskOptions.scheduled,
96
- timezone: taskOptions.timezone
97
- });
98
- return true;
99
- }
100
- catch (error) {
101
- logger.error(`Failed to add scheduled task: ${name}`, error);
102
- return false;
103
- }
104
- }
105
- /**
106
- * Update an existing scheduled task
107
- * @param {string} name - Name of the task to update
108
- * @param {string} cronExpression - New cron expression
109
- * @param {TaskFunction} taskFunction - New function to execute
110
- * @param {TaskOptions} options - Additional options
111
- * @returns {boolean} - Success status
112
- */
113
- updateTask(name, cronExpression, taskFunction, options = {}) {
114
- if (!this.tasks.has(name)) {
115
- logger.error(`Task '${name}' not found. Use addTask() to create it.`);
116
- return false;
117
- }
118
- // Remove existing task
119
- this.removeTask(name);
120
- // Add updated task
121
- return this.addTask(name, cronExpression, taskFunction, options);
122
- }
123
- /**
124
- * Remove a scheduled task
125
- * @param {string} name - Name of the task to remove
126
- * @returns {boolean} - Success status
127
- */
128
- removeTask(name) {
129
- if (!this.tasks.has(name)) {
130
- logger.warn(`Task '${name}' not found`);
131
- return false;
132
- }
133
- const taskInfo = this.tasks.get(name);
134
- taskInfo.task.destroy();
135
- this.tasks.delete(name);
136
- logger.info(`Removed scheduled task: ${name}`);
137
- return true;
138
- }
139
- /**
140
- * Start a specific task
141
- * @param {string} name - Name of the task to start
142
- * @returns {boolean} - Success status
143
- */
144
- startTask(name) {
145
- if (!this.tasks.has(name)) {
146
- logger.error(`Task '${name}' not found`);
147
- return false;
148
- }
149
- const taskInfo = this.tasks.get(name);
150
- taskInfo.task.start();
151
- logger.info(`Started scheduled task: ${name}`);
152
- return true;
153
- }
154
- /**
155
- * Stop a specific task
156
- * @param {string} name - Name of the task to stop
157
- * @returns {boolean} - Success status
158
- */
159
- stopTask(name) {
160
- if (!this.tasks.has(name)) {
161
- logger.error(`Task '${name}' not found`);
162
- return false;
163
- }
164
- const taskInfo = this.tasks.get(name);
165
- taskInfo.task.stop();
166
- logger.info(`Stopped scheduled task: ${name}`);
167
- return true;
168
- }
169
- /**
170
- * Start all tasks
171
- */
172
- startAll() {
173
- this.tasks.forEach((taskInfo, name) => {
174
- taskInfo.task.start();
175
- });
176
- logger.info(`Started all scheduled tasks (${this.tasks.size} tasks)`);
177
- }
178
- /**
179
- * Stop all tasks
180
- */
181
- stopAll() {
182
- this.tasks.forEach((taskInfo, name) => {
183
- taskInfo.task.stop();
184
- });
185
- logger.info(`Stopped all scheduled tasks (${this.tasks.size} tasks)`);
186
- }
187
- /**
188
- * Get information about all scheduled tasks
189
- * @returns {TaskInfo[]} - Array of task information objects
190
- */
191
- getTasks() {
192
- const tasks = [];
193
- this.tasks.forEach((taskInfo, name) => {
194
- tasks.push({
195
- name,
196
- cronExpression: taskInfo.cronExpression,
197
- isRunning: taskInfo.task.running || false,
198
- createdAt: taskInfo.createdAt,
199
- options: taskInfo.options
200
- });
201
- });
202
- return tasks;
203
- }
204
- /**
205
- * Get information about a specific task
206
- * @param {string} name - Name of the task
207
- * @returns {TaskInfo | null} - Task information or null if not found
208
- */
209
- getTask(name) {
210
- if (!this.tasks.has(name)) {
211
- return null;
212
- }
213
- const taskInfo = this.tasks.get(name);
214
- return {
215
- name,
216
- cronExpression: taskInfo.cronExpression,
217
- isRunning: taskInfo.task.running || false,
218
- createdAt: taskInfo.createdAt,
219
- options: taskInfo.options
220
- };
221
- }
222
- /**
223
- * Validate a cron expression
224
- * @param {string} cronExpression - Cron expression to validate
225
- * @returns {boolean} - Whether the expression is valid
226
- */
227
- validateCronExpression(cronExpression) {
228
- return cron.validate(cronExpression);
229
- }
230
- /**
231
- * Check if the scheduler is initialized
232
- * @returns {boolean} - Whether the scheduler is initialized
233
- */
234
- isSchedulerInitialized() {
235
- return this.isInitialized;
236
- }
237
- /**
238
- * Get the number of active tasks
239
- * @returns {number} - Number of active tasks
240
- */
241
- getTaskCount() {
242
- return this.tasks.size;
243
- }
244
- /**
245
- * Shutdown the scheduler and clean up all tasks
246
- */
247
- shutdown() {
248
- logger.info('Shutting down TaskScheduler...');
249
- this.tasks.forEach((taskInfo, name) => {
250
- taskInfo.task.destroy();
251
- });
252
- this.tasks.clear();
253
- this.isInitialized = false;
254
- logger.info('TaskScheduler shutdown complete');
255
- }
256
- }
257
- // Export singleton instance
258
- export default TaskScheduler.getInstance();
259
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../ts/task-scheduler/index.ts"],"names":[],"mappings":"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"}
@@ -1,49 +0,0 @@
1
- interface RecursiveIteratorMeta {
2
- node: any;
3
- parent: any;
4
- path: string[];
5
- }
6
- export declare const utils: {
7
- isValidUuidV4: (input: any) => boolean;
8
- convertToIntegerArray(input: any): number[];
9
- convertToArray: (input: any) => string[];
10
- isBlank: (str: any) => boolean;
11
- getRouteType: (domain: string) => number;
12
- isWebRoute: (sessionType: any) => boolean;
13
- isApiRoute: (sessionType: any) => boolean;
14
- isMobileRoute: (sessionType: any) => boolean;
15
- isOtherRoute: (sessionType: any) => boolean;
16
- recursiveOmitBy: (object: any, callback: (meta: RecursiveIteratorMeta) => boolean, ...recursiveIteratorOpts: any[]) => any;
17
- /**
18
- * Helper function to safely update JSONB columns in Sequelize models
19
- *
20
- * @param model - The Sequelize model instance
21
- * @param columnName - The name of the JSONB column to update
22
- * @param obj - The object to merge with existing column data
23
- *
24
- * Features:
25
- * - Merges new data with existing data
26
- * - Removes null/undefined values recursively
27
- * - Only updates if data actually changed
28
- * - Handles errors gracefully
29
- * - Triggers sequelize's changed method to mark the column as changed *** VERY IMPORTANT ***
30
- *
31
- * Usage:
32
- * // In a model prototype method
33
- * Account.prototype.setOptions = function(obj) {
34
- * utils.setJSONBOptionsForColumn(this, "options", obj);
35
- * };
36
- *
37
- * // Direct usage
38
- * utils.setJSONBOptionsForColumn(account, "auth_options", { field: null }); // will remove the field
39
- * utils.setJSONBOptionsForColumn(account, "auth_options", { field: undefined }); // will remove the field
40
- * utils.setJSONBOptionsForColumn(account, "auth_options", { field: "value" }); // will set the field
41
- * utils.setJSONBOptionsForColumn(account, "auth_options", { field: { subfield: "value" } }); // will set the subfield
42
- * utils.setJSONBOptionsForColumn(account, "auth_options", { field: { subfield: null } }); // will remove the subfield
43
- * utils.setJSONBOptionsForColumn(account, "auth_options", { field: { subfield: undefined } }); // will remove the subfield
44
- * utils.setJSONBOptionsForColumn(account, "auth_options", { field: { subfield: "value" } }); // will set the subfield
45
- * utils.setJSONBOptionsForColumn(account, "auth_options", { field: { subfield: null } }); // will remove the subfield
46
- */
47
- setJSONBOptionsForColumn: (model: any, columnName: string, obj: any) => void;
48
- };
49
- export {};
@@ -1,157 +0,0 @@
1
- import RecursiveIterator from 'recursive-iterator';
2
- import { TWS_ROUTE_TYPES } from "../constants/index.js";
3
- import _ from "lodash";
4
- const { merge, isEqual } = _;
5
- import logger from "../logger/s4-logger.js";
6
- // Helper function to delete object properties by path
7
- const delObjectPath = (obj, path) => {
8
- const keys = path.split('.');
9
- const lastKey = keys.pop();
10
- const target = keys.reduce((current, key) => current && current[key], obj);
11
- if (target && target.hasOwnProperty(lastKey)) {
12
- delete target[lastKey];
13
- }
14
- };
15
- export const utils = {
16
- isValidUuidV4: (input) => {
17
- if (!input) {
18
- return false;
19
- }
20
- else {
21
- return /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(input);
22
- }
23
- },
24
- // convert a regular string or Array to array (ie, "[1,2,3, 0xA]", "1,2,3,10")
25
- // useful for controller inputs
26
- // - also accepts hex
27
- convertToIntegerArray(input) {
28
- return this.convertToArray(input)
29
- .filter((el) => /^[0-9]+/.test(el))
30
- .map((el) => parseInt(el))
31
- .filter((el) => Number.isInteger(el));
32
- },
33
- convertToArray: (input) => {
34
- if (Array.isArray(input)) {
35
- return input;
36
- }
37
- else {
38
- if (!!input) {
39
- if (typeof input === "number") {
40
- return [input.toString()];
41
- }
42
- let matches;
43
- if (matches = input.match(/\[(.*?)\]/)) {
44
- input = matches[1];
45
- }
46
- input = input.replace(/[\[\]]/, '');
47
- return input.replace(/\s+/, '').split(',').filter((el) => /^[0-9A-Za-z-.]+/.test(el));
48
- }
49
- else {
50
- return [];
51
- }
52
- }
53
- },
54
- isBlank: (str) => {
55
- return ((str === null) || (str === undefined) || /^\s*$/.test(str));
56
- },
57
- getRouteType: (domain) => {
58
- if (!domain)
59
- return -1;
60
- let routeType;
61
- switch (true) {
62
- case /^(tws-web|local-gateway)/i.test(domain):
63
- routeType = TWS_ROUTE_TYPES['web'];
64
- break;
65
- case /^tws-mob/i.test(domain):
66
- routeType = TWS_ROUTE_TYPES['mobile'];
67
- break;
68
- case /^(tws-api-)/i.test(domain):
69
- routeType = TWS_ROUTE_TYPES['api'];
70
- break;
71
- default:
72
- routeType = TWS_ROUTE_TYPES['other'];
73
- }
74
- return routeType;
75
- },
76
- isWebRoute: (sessionType) => (parseInt(sessionType) === TWS_ROUTE_TYPES['web']),
77
- isApiRoute: (sessionType) => (parseInt(sessionType) === TWS_ROUTE_TYPES['api']),
78
- isMobileRoute: (sessionType) => (parseInt(sessionType) === TWS_ROUTE_TYPES['mobile']),
79
- isOtherRoute: (sessionType) => {
80
- const value = parseInt(sessionType);
81
- return ((value === TWS_ROUTE_TYPES['other']) || isNaN(value)) ? true : false;
82
- },
83
- recursiveOmitBy: (object, callback, ...recursiveIteratorOpts) => {
84
- const results = merge({}, object);
85
- for (let meta of new RecursiveIterator(object, ...recursiveIteratorOpts)) {
86
- const shouldOmit = callback(meta);
87
- if (shouldOmit) {
88
- // Check if this is an array element
89
- const pathParts = meta.path;
90
- const lastPart = pathParts[pathParts.length - 1];
91
- if (!isNaN(Number(lastPart)) && Array.isArray(meta.parent)) {
92
- // This is an array element, remove it from the array
93
- const parentPath = pathParts.slice(0, -1).join('.');
94
- const parent = parentPath ? pathParts.slice(0, -1).reduce((current, key) => current && current[key], results) : results;
95
- if (parent && Array.isArray(parent[pathParts[pathParts.length - 2]])) {
96
- const arrayIndex = parseInt(lastPart);
97
- parent[pathParts[pathParts.length - 2]].splice(arrayIndex, 1);
98
- }
99
- }
100
- else {
101
- // This is an object property, delete it
102
- delObjectPath(results, meta.path.join('.'));
103
- }
104
- }
105
- }
106
- return results;
107
- },
108
- /**
109
- * Helper function to safely update JSONB columns in Sequelize models
110
- *
111
- * @param model - The Sequelize model instance
112
- * @param columnName - The name of the JSONB column to update
113
- * @param obj - The object to merge with existing column data
114
- *
115
- * Features:
116
- * - Merges new data with existing data
117
- * - Removes null/undefined values recursively
118
- * - Only updates if data actually changed
119
- * - Handles errors gracefully
120
- * - Triggers sequelize's changed method to mark the column as changed *** VERY IMPORTANT ***
121
- *
122
- * Usage:
123
- * // In a model prototype method
124
- * Account.prototype.setOptions = function(obj) {
125
- * utils.setJSONBOptionsForColumn(this, "options", obj);
126
- * };
127
- *
128
- * // Direct usage
129
- * utils.setJSONBOptionsForColumn(account, "auth_options", { field: null }); // will remove the field
130
- * utils.setJSONBOptionsForColumn(account, "auth_options", { field: undefined }); // will remove the field
131
- * utils.setJSONBOptionsForColumn(account, "auth_options", { field: "value" }); // will set the field
132
- * utils.setJSONBOptionsForColumn(account, "auth_options", { field: { subfield: "value" } }); // will set the subfield
133
- * utils.setJSONBOptionsForColumn(account, "auth_options", { field: { subfield: null } }); // will remove the subfield
134
- * utils.setJSONBOptionsForColumn(account, "auth_options", { field: { subfield: undefined } }); // will remove the subfield
135
- * utils.setJSONBOptionsForColumn(account, "auth_options", { field: { subfield: "value" } }); // will set the subfield
136
- * utils.setJSONBOptionsForColumn(account, "auth_options", { field: { subfield: null } }); // will remove the subfield
137
- */
138
- setJSONBOptionsForColumn: (model, columnName, obj) => {
139
- try {
140
- if (!model[columnName])
141
- model[columnName] = {};
142
- // Merge incoming options
143
- const newOptions = merge({}, model[columnName], obj);
144
- // Clean null/undefined values
145
- const cleaned = utils.recursiveOmitBy(newOptions, ({ node }) => node === undefined || node === null);
146
- const isEqualResult = isEqual(model[columnName], cleaned);
147
- if (!isEqualResult) {
148
- model.set(columnName, JSON.parse(JSON.stringify(cleaned)));
149
- }
150
- }
151
- catch (e) {
152
- logger.warn(`Error setting ${columnName}:`, e);
153
- throw e;
154
- }
155
- }
156
- };
157
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../ts/utils/index.ts"],"names":[],"mappings":"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"}