semola 0.5.2 → 0.5.4

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 (160) hide show
  1. package/README.md +88 -13
  2. package/dist/index-BhGNDjPq.d.mts +13 -0
  3. package/dist/index-DxSbeGP-.d.cts +13 -0
  4. package/dist/lib/api/index.cjs +522 -4
  5. package/dist/lib/api/index.d.cts +270 -4
  6. package/dist/lib/api/index.d.mts +270 -4
  7. package/dist/lib/api/index.mjs +520 -2
  8. package/dist/lib/cache/index.d.cts +19 -7
  9. package/dist/lib/cache/index.d.mts +19 -7
  10. package/dist/lib/cache/index.mjs +0 -2
  11. package/dist/lib/cron/index.cjs +470 -11
  12. package/dist/lib/cron/index.d.cts +112 -5
  13. package/dist/lib/cron/index.d.mts +112 -5
  14. package/dist/lib/cron/index.mjs +461 -12
  15. package/dist/lib/errors/index.d.cts +2 -13
  16. package/dist/lib/errors/index.d.mts +2 -13
  17. package/dist/lib/errors/index.mjs +0 -2
  18. package/dist/lib/i18n/index.cjs +6 -1
  19. package/dist/lib/i18n/index.d.cts +12 -4
  20. package/dist/lib/i18n/index.d.mts +12 -4
  21. package/dist/lib/i18n/index.mjs +6 -3
  22. package/dist/lib/logging/index.cjs +387 -0
  23. package/dist/lib/logging/index.d.cts +108 -0
  24. package/dist/lib/logging/index.d.mts +108 -0
  25. package/dist/lib/logging/index.mjs +374 -0
  26. package/dist/lib/policy/index.cjs +206 -20
  27. package/dist/lib/policy/index.d.cts +61 -5
  28. package/dist/lib/policy/index.d.mts +61 -5
  29. package/dist/lib/policy/index.mjs +187 -3
  30. package/dist/lib/prompts/index.cjs +374 -14
  31. package/dist/lib/prompts/index.d.cts +77 -12
  32. package/dist/lib/prompts/index.d.mts +77 -12
  33. package/dist/lib/prompts/index.mjs +362 -4
  34. package/dist/lib/pubsub/index.cjs +82 -13
  35. package/dist/lib/pubsub/index.d.cts +23 -9
  36. package/dist/lib/pubsub/index.d.mts +23 -9
  37. package/dist/lib/pubsub/index.mjs +82 -15
  38. package/dist/lib/queue/index.d.cts +46 -4
  39. package/dist/lib/queue/index.d.mts +46 -4
  40. package/dist/lib/queue/index.mjs +0 -2
  41. package/dist/lib/workflow/index.cjs +534 -0
  42. package/dist/lib/workflow/index.d.cts +85 -0
  43. package/dist/lib/workflow/index.d.mts +85 -0
  44. package/dist/lib/workflow/index.mjs +533 -0
  45. package/package.json +29 -3
  46. package/dist/api/core/index.cjs +0 -206
  47. package/dist/api/core/index.d.cts +0 -21
  48. package/dist/api/core/index.d.cts.map +0 -1
  49. package/dist/api/core/index.d.mts +0 -21
  50. package/dist/api/core/index.d.mts.map +0 -1
  51. package/dist/api/core/index.mjs +0 -208
  52. package/dist/api/core/index.mjs.map +0 -1
  53. package/dist/api/core/types.d.cts +0 -107
  54. package/dist/api/core/types.d.cts.map +0 -1
  55. package/dist/api/core/types.d.mts +0 -107
  56. package/dist/api/core/types.d.mts.map +0 -1
  57. package/dist/api/middleware/index.cjs +0 -8
  58. package/dist/api/middleware/index.d.cts +0 -11
  59. package/dist/api/middleware/index.d.cts.map +0 -1
  60. package/dist/api/middleware/index.d.mts +0 -11
  61. package/dist/api/middleware/index.d.mts.map +0 -1
  62. package/dist/api/middleware/index.mjs +0 -10
  63. package/dist/api/middleware/index.mjs.map +0 -1
  64. package/dist/api/middleware/types.d.cts +0 -16
  65. package/dist/api/middleware/types.d.cts.map +0 -1
  66. package/dist/api/middleware/types.d.mts +0 -16
  67. package/dist/api/middleware/types.d.mts.map +0 -1
  68. package/dist/api/openapi/index.cjs +0 -254
  69. package/dist/api/openapi/index.mjs +0 -256
  70. package/dist/api/openapi/index.mjs.map +0 -1
  71. package/dist/api/openapi/types.d.cts +0 -60
  72. package/dist/api/openapi/types.d.cts.map +0 -1
  73. package/dist/api/openapi/types.d.mts +0 -60
  74. package/dist/api/openapi/types.d.mts.map +0 -1
  75. package/dist/api/validation/index.cjs +0 -64
  76. package/dist/api/validation/index.mjs +0 -61
  77. package/dist/api/validation/index.mjs.map +0 -1
  78. package/dist/cache/types.d.cts +0 -17
  79. package/dist/cache/types.d.cts.map +0 -1
  80. package/dist/cache/types.d.mts +0 -17
  81. package/dist/cache/types.d.mts.map +0 -1
  82. package/dist/cron/scanner.cjs +0 -237
  83. package/dist/cron/scanner.mjs +0 -238
  84. package/dist/cron/scanner.mjs.map +0 -1
  85. package/dist/cron/types.d.cts +0 -11
  86. package/dist/cron/types.d.cts.map +0 -1
  87. package/dist/cron/types.d.mts +0 -11
  88. package/dist/cron/types.d.mts.map +0 -1
  89. package/dist/errors/types.d.cts +0 -5
  90. package/dist/errors/types.d.cts.map +0 -1
  91. package/dist/errors/types.d.mts +0 -5
  92. package/dist/errors/types.d.mts.map +0 -1
  93. package/dist/i18n/types.d.cts +0 -13
  94. package/dist/i18n/types.d.cts.map +0 -1
  95. package/dist/i18n/types.d.mts +0 -13
  96. package/dist/i18n/types.d.mts.map +0 -1
  97. package/dist/lib/cache/index.d.cts.map +0 -1
  98. package/dist/lib/cache/index.d.mts.map +0 -1
  99. package/dist/lib/cache/index.mjs.map +0 -1
  100. package/dist/lib/cron/index.d.cts.map +0 -1
  101. package/dist/lib/cron/index.d.mts.map +0 -1
  102. package/dist/lib/cron/index.mjs.map +0 -1
  103. package/dist/lib/errors/index.d.cts.map +0 -1
  104. package/dist/lib/errors/index.d.mts.map +0 -1
  105. package/dist/lib/errors/index.mjs.map +0 -1
  106. package/dist/lib/i18n/index.d.cts.map +0 -1
  107. package/dist/lib/i18n/index.d.mts.map +0 -1
  108. package/dist/lib/i18n/index.mjs.map +0 -1
  109. package/dist/lib/policy/index.d.cts.map +0 -1
  110. package/dist/lib/policy/index.d.mts.map +0 -1
  111. package/dist/lib/policy/index.mjs.map +0 -1
  112. package/dist/lib/prompts/index.d.cts.map +0 -1
  113. package/dist/lib/prompts/index.d.mts.map +0 -1
  114. package/dist/lib/prompts/index.mjs.map +0 -1
  115. package/dist/lib/pubsub/index.d.cts.map +0 -1
  116. package/dist/lib/pubsub/index.d.mts.map +0 -1
  117. package/dist/lib/pubsub/index.mjs.map +0 -1
  118. package/dist/lib/queue/index.d.cts.map +0 -1
  119. package/dist/lib/queue/index.d.mts.map +0 -1
  120. package/dist/lib/queue/index.mjs.map +0 -1
  121. package/dist/node_modules/@standard-schema/spec/dist/index.d.cts +0 -80
  122. package/dist/node_modules/@standard-schema/spec/dist/index.d.cts.map +0 -1
  123. package/dist/node_modules/@standard-schema/spec/dist/index.d.mts +0 -80
  124. package/dist/node_modules/@standard-schema/spec/dist/index.d.mts.map +0 -1
  125. package/dist/policy/helpers.cjs +0 -206
  126. package/dist/policy/helpers.d.cts +0 -50
  127. package/dist/policy/helpers.d.cts.map +0 -1
  128. package/dist/policy/helpers.d.mts +0 -50
  129. package/dist/policy/helpers.d.mts.map +0 -1
  130. package/dist/policy/helpers.mjs +0 -190
  131. package/dist/policy/helpers.mjs.map +0 -1
  132. package/dist/policy/types.d.cts +0 -16
  133. package/dist/policy/types.d.cts.map +0 -1
  134. package/dist/policy/types.d.mts +0 -16
  135. package/dist/policy/types.d.mts.map +0 -1
  136. package/dist/prompts/core/keys.cjs +0 -165
  137. package/dist/prompts/core/keys.mjs +0 -167
  138. package/dist/prompts/core/keys.mjs.map +0 -1
  139. package/dist/prompts/core/runtime.cjs +0 -104
  140. package/dist/prompts/core/runtime.mjs +0 -106
  141. package/dist/prompts/core/runtime.mjs.map +0 -1
  142. package/dist/prompts/core/session.cjs +0 -98
  143. package/dist/prompts/core/session.mjs +0 -100
  144. package/dist/prompts/core/session.mjs.map +0 -1
  145. package/dist/prompts/core/types.d.cts +0 -21
  146. package/dist/prompts/core/types.d.cts.map +0 -1
  147. package/dist/prompts/core/types.d.mts +0 -21
  148. package/dist/prompts/core/types.d.mts.map +0 -1
  149. package/dist/prompts/types.d.cts +0 -52
  150. package/dist/prompts/types.d.cts.map +0 -1
  151. package/dist/prompts/types.d.mts +0 -52
  152. package/dist/prompts/types.d.mts.map +0 -1
  153. package/dist/pubsub/types.d.cts +0 -10
  154. package/dist/pubsub/types.d.cts.map +0 -1
  155. package/dist/pubsub/types.d.mts +0 -10
  156. package/dist/pubsub/types.d.mts.map +0 -1
  157. package/dist/queue/types.d.cts +0 -47
  158. package/dist/queue/types.d.cts.map +0 -1
  159. package/dist/queue/types.d.mts +0 -47
  160. package/dist/queue/types.d.mts.map +0 -1
@@ -1,237 +0,0 @@
1
- const require_lib_errors_index = require("../lib/errors/index.cjs");
2
- //#region src/lib/cron/scanner.ts
3
- const FieldAmount = {
4
- min: 5,
5
- max: 6
6
- };
7
- var Token = class {
8
- type;
9
- component;
10
- value;
11
- field;
12
- constructor(component, type, value, field) {
13
- this.component = component;
14
- this.type = type;
15
- this.value = value;
16
- this.field = field;
17
- }
18
- getComponent() {
19
- return this.component;
20
- }
21
- getTokenType() {
22
- return this.type;
23
- }
24
- getTokenValue() {
25
- return this.value;
26
- }
27
- getField() {
28
- return this.field;
29
- }
30
- toString() {
31
- return `Token{${`component="${this.component}", type=${this.type}`}, ${`field="${this.field}", value=${this.value}`}}`;
32
- }
33
- equals(other) {
34
- if (!other) return false;
35
- const isComponentEqual = this.component === other.getComponent();
36
- const isTokenTypeEqual = this.type === other.getTokenType();
37
- const isTokenValueEqual = this.value === other.getTokenValue();
38
- const isFieldEqual = this.field === other.getField();
39
- return isComponentEqual && isTokenTypeEqual && isTokenValueEqual && isFieldEqual;
40
- }
41
- };
42
- var Scanner = class {
43
- expression;
44
- current;
45
- start;
46
- tokens;
47
- constructor(expression) {
48
- this.expression = expression;
49
- this.current = 0;
50
- this.start = 0;
51
- this.tokens = [];
52
- }
53
- scan() {
54
- if (this.expression.length === 0) return require_lib_errors_index.err("EmptyCronExpressionError", "Cron expression have zero length");
55
- const fields = this.expression.trim().split(/\s+/);
56
- const hasMinLen = fields.length === FieldAmount.min;
57
- const hasMaxLen = fields.length === FieldAmount.max;
58
- if (!hasMinLen && !hasMaxLen) return require_lib_errors_index.err("CronLengthError", `Invalid number of fields for '${this.expression}'. Expected 5 or 6 fields but got ${fields.length} field(s)`);
59
- const components = this.createComponent(fields);
60
- for (let idx = 0; idx < components.length; idx++) {
61
- const component = components[idx];
62
- if (!component) return require_lib_errors_index.err("CronExpressionError", `Invalid cron expression: ${this.expression}`);
63
- this.current = 0;
64
- this.start = 0;
65
- const [error, _] = this.scanComponent(component);
66
- if (error) return require_lib_errors_index.err(error.type, error.message);
67
- }
68
- return require_lib_errors_index.ok(this.tokens);
69
- }
70
- scanComponent(component) {
71
- const { field, content } = component;
72
- while (this.current < content.length) {
73
- let currentCh = this.advance(content);
74
- switch (currentCh) {
75
- case "*": {
76
- const ch = this.peek(content);
77
- if (this.match(content, "/")) {
78
- const [error, _] = this.handleStep(component);
79
- if (error) return require_lib_errors_index.err(error.type, error.message);
80
- } else if (!ch || ch === ",") this.addToken("*", "any", "*", field);
81
- else return require_lib_errors_index.err("CronExpressionError", `Invalid any expression '${content}' for field '${field}'`);
82
- break;
83
- }
84
- case "-":
85
- currentCh = this.advance(content);
86
- if (this.isDigit(currentCh)) {
87
- const [error, _] = this.handleRangeWithStep(component);
88
- if (error) return require_lib_errors_index.err(error.type, error.message);
89
- } else return require_lib_errors_index.err("CronExpressionError", `Invalid range expression '${content}' for field '${field}'`);
90
- break;
91
- case ",": {
92
- if (this.current === 1 && this.start === 0) return require_lib_errors_index.err("CronExpressionError", `Invalid list expression '${content}' for field '${field}'`);
93
- const next = this.peek(content);
94
- if (!next || next === ",") return require_lib_errors_index.err("CronExpressionError", `Invalid list expression '${content}' for field '${field}'`);
95
- break;
96
- }
97
- default:
98
- if (this.isDigit(currentCh)) {
99
- const [error, _] = this.handleNumber(component);
100
- if (error) return require_lib_errors_index.err(error.type, error.message);
101
- } else return require_lib_errors_index.err("CronExpressionError", `Invalid cron expression '${this.expression}' in field '${field}'`);
102
- break;
103
- }
104
- this.start = this.current;
105
- }
106
- return require_lib_errors_index.ok(true);
107
- }
108
- addToken(component, type, value, field) {
109
- const token = new Token(component, type, value, field);
110
- this.tokens.push(token);
111
- }
112
- advance(content) {
113
- const currentCh = content.charAt(this.current);
114
- this.current += 1;
115
- return currentCh;
116
- }
117
- match(content, expected) {
118
- if (this.current >= content.length) return false;
119
- if (content.charAt(this.current) !== expected) return false;
120
- this.current += 1;
121
- return true;
122
- }
123
- peek(content) {
124
- if (this.current >= content.length) return void 0;
125
- return content.charAt(this.current);
126
- }
127
- handleStep(component) {
128
- const { field, content } = component;
129
- let ch = this.peek(content);
130
- const slashIdx = this.current - 1;
131
- while (ch && this.isDigit(ch)) {
132
- this.advance(content);
133
- ch = this.peek(content);
134
- }
135
- if (ch && ch !== ",") return require_lib_errors_index.err("CronExpressionError", `Invalid step expression '${content}' for field '${field}'`);
136
- const tokenContent = content.substring(this.start, this.current);
137
- const value = content.slice(slashIdx + 1, this.current);
138
- if (value.length === 0) return require_lib_errors_index.err("CronExpressionError", `Invalid step expression '${content}' for field '${field}'`);
139
- this.addToken(tokenContent, "step", Number(value), field);
140
- return require_lib_errors_index.ok(true);
141
- }
142
- handleRangeWithStep(component) {
143
- const { field, content } = component;
144
- let ch = this.peek(content);
145
- while (ch && this.isDigit(ch)) {
146
- this.advance(content);
147
- ch = this.peek(content);
148
- }
149
- if (!ch) return require_lib_errors_index.err("CronExpressionError", `Invalid range expression '${content}' for field '${field}'`);
150
- if (this.match(content, "/")) {
151
- const [error, _] = this.handleStep(component);
152
- if (error) return require_lib_errors_index.err(error.type, error.message);
153
- return require_lib_errors_index.ok(true);
154
- }
155
- return require_lib_errors_index.err("CronExpressionError", `Invalid range expression '${content}' for field '${field}'`);
156
- }
157
- handleNumber(component) {
158
- const { field, content } = component;
159
- let ch = this.peek(content);
160
- this.start = this.current - 1;
161
- while (ch && this.isDigit(ch)) {
162
- this.advance(content);
163
- ch = this.peek(content);
164
- }
165
- if (!ch) {
166
- const item = content.substring(this.start);
167
- this.addToken(item, "number", Number(item), field);
168
- return require_lib_errors_index.ok(true);
169
- }
170
- if (this.match(content, "-")) {
171
- const [error, _] = this.handleRange(component);
172
- if (error) return require_lib_errors_index.err(error.type, error.message);
173
- return require_lib_errors_index.ok(true);
174
- }
175
- if (this.match(content, "/")) {
176
- const [error, _] = this.handleStep(component);
177
- if (error) return require_lib_errors_index.err(error.type, error.message);
178
- return require_lib_errors_index.ok(true);
179
- }
180
- if (!this.isDigit(ch) && ch !== ",") return require_lib_errors_index.err("CronExpressionError", `Invalid number '${content}' for field '${field}'`);
181
- const item = content.substring(this.start, this.current);
182
- this.addToken(item, "number", Number(item), field);
183
- return require_lib_errors_index.ok(true);
184
- }
185
- handleRange(component) {
186
- const { field, content } = component;
187
- let ch = this.peek(content);
188
- if (!ch) return require_lib_errors_index.err("CronExpressionError", `Invalid range expression '${content}' for field '${field}'`);
189
- while (ch && this.isDigit(ch)) {
190
- this.advance(content);
191
- ch = this.peek(content);
192
- }
193
- if (!ch) {
194
- const tokenContent = content.substring(this.start);
195
- this.addToken(tokenContent, "range", tokenContent, field);
196
- return require_lib_errors_index.ok(true);
197
- }
198
- if (this.match(content, "/")) {
199
- const [error, _] = this.handleStep(component);
200
- if (error) return require_lib_errors_index.err(error.type, error.message);
201
- return require_lib_errors_index.ok(true);
202
- }
203
- if (ch && ch !== ",") return require_lib_errors_index.err("CronExpressionError", `Invalid range expression '${content}' for field '${field}'`);
204
- const tokenContent = content.substring(this.start, this.current);
205
- this.addToken(tokenContent, "range", tokenContent, field);
206
- return require_lib_errors_index.ok(true);
207
- }
208
- isDigit(ch) {
209
- return ch >= "0" && ch <= "9";
210
- }
211
- createComponent(fields) {
212
- const fieldNames = [
213
- "second",
214
- "minute",
215
- "hour",
216
- "day",
217
- "month",
218
- "weekday"
219
- ];
220
- const components = [];
221
- let offset = 1;
222
- if (fields.length === FieldAmount.max) offset = 0;
223
- for (let idx = 0; idx < fields.length; idx++) {
224
- const fieldName = fieldNames[idx + offset];
225
- const content = fields[idx];
226
- if (!fieldName || !content) break;
227
- components.push({
228
- content,
229
- field: fieldName
230
- });
231
- }
232
- return components;
233
- }
234
- };
235
- //#endregion
236
- exports.FieldAmount = FieldAmount;
237
- exports.Scanner = Scanner;
@@ -1,238 +0,0 @@
1
- import { err, ok } from "../lib/errors/index.mjs";
2
- //#region src/lib/cron/scanner.ts
3
- const FieldAmount = {
4
- min: 5,
5
- max: 6
6
- };
7
- var Token = class {
8
- type;
9
- component;
10
- value;
11
- field;
12
- constructor(component, type, value, field) {
13
- this.component = component;
14
- this.type = type;
15
- this.value = value;
16
- this.field = field;
17
- }
18
- getComponent() {
19
- return this.component;
20
- }
21
- getTokenType() {
22
- return this.type;
23
- }
24
- getTokenValue() {
25
- return this.value;
26
- }
27
- getField() {
28
- return this.field;
29
- }
30
- toString() {
31
- return `Token{${`component="${this.component}", type=${this.type}`}, ${`field="${this.field}", value=${this.value}`}}`;
32
- }
33
- equals(other) {
34
- if (!other) return false;
35
- const isComponentEqual = this.component === other.getComponent();
36
- const isTokenTypeEqual = this.type === other.getTokenType();
37
- const isTokenValueEqual = this.value === other.getTokenValue();
38
- const isFieldEqual = this.field === other.getField();
39
- return isComponentEqual && isTokenTypeEqual && isTokenValueEqual && isFieldEqual;
40
- }
41
- };
42
- var Scanner = class {
43
- expression;
44
- current;
45
- start;
46
- tokens;
47
- constructor(expression) {
48
- this.expression = expression;
49
- this.current = 0;
50
- this.start = 0;
51
- this.tokens = [];
52
- }
53
- scan() {
54
- if (this.expression.length === 0) return err("EmptyCronExpressionError", "Cron expression have zero length");
55
- const fields = this.expression.trim().split(/\s+/);
56
- const hasMinLen = fields.length === FieldAmount.min;
57
- const hasMaxLen = fields.length === FieldAmount.max;
58
- if (!hasMinLen && !hasMaxLen) return err("CronLengthError", `Invalid number of fields for '${this.expression}'. Expected 5 or 6 fields but got ${fields.length} field(s)`);
59
- const components = this.createComponent(fields);
60
- for (let idx = 0; idx < components.length; idx++) {
61
- const component = components[idx];
62
- if (!component) return err("CronExpressionError", `Invalid cron expression: ${this.expression}`);
63
- this.current = 0;
64
- this.start = 0;
65
- const [error, _] = this.scanComponent(component);
66
- if (error) return err(error.type, error.message);
67
- }
68
- return ok(this.tokens);
69
- }
70
- scanComponent(component) {
71
- const { field, content } = component;
72
- while (this.current < content.length) {
73
- let currentCh = this.advance(content);
74
- switch (currentCh) {
75
- case "*": {
76
- const ch = this.peek(content);
77
- if (this.match(content, "/")) {
78
- const [error, _] = this.handleStep(component);
79
- if (error) return err(error.type, error.message);
80
- } else if (!ch || ch === ",") this.addToken("*", "any", "*", field);
81
- else return err("CronExpressionError", `Invalid any expression '${content}' for field '${field}'`);
82
- break;
83
- }
84
- case "-":
85
- currentCh = this.advance(content);
86
- if (this.isDigit(currentCh)) {
87
- const [error, _] = this.handleRangeWithStep(component);
88
- if (error) return err(error.type, error.message);
89
- } else return err("CronExpressionError", `Invalid range expression '${content}' for field '${field}'`);
90
- break;
91
- case ",": {
92
- if (this.current === 1 && this.start === 0) return err("CronExpressionError", `Invalid list expression '${content}' for field '${field}'`);
93
- const next = this.peek(content);
94
- if (!next || next === ",") return err("CronExpressionError", `Invalid list expression '${content}' for field '${field}'`);
95
- break;
96
- }
97
- default:
98
- if (this.isDigit(currentCh)) {
99
- const [error, _] = this.handleNumber(component);
100
- if (error) return err(error.type, error.message);
101
- } else return err("CronExpressionError", `Invalid cron expression '${this.expression}' in field '${field}'`);
102
- break;
103
- }
104
- this.start = this.current;
105
- }
106
- return ok(true);
107
- }
108
- addToken(component, type, value, field) {
109
- const token = new Token(component, type, value, field);
110
- this.tokens.push(token);
111
- }
112
- advance(content) {
113
- const currentCh = content.charAt(this.current);
114
- this.current += 1;
115
- return currentCh;
116
- }
117
- match(content, expected) {
118
- if (this.current >= content.length) return false;
119
- if (content.charAt(this.current) !== expected) return false;
120
- this.current += 1;
121
- return true;
122
- }
123
- peek(content) {
124
- if (this.current >= content.length) return void 0;
125
- return content.charAt(this.current);
126
- }
127
- handleStep(component) {
128
- const { field, content } = component;
129
- let ch = this.peek(content);
130
- const slashIdx = this.current - 1;
131
- while (ch && this.isDigit(ch)) {
132
- this.advance(content);
133
- ch = this.peek(content);
134
- }
135
- if (ch && ch !== ",") return err("CronExpressionError", `Invalid step expression '${content}' for field '${field}'`);
136
- const tokenContent = content.substring(this.start, this.current);
137
- const value = content.slice(slashIdx + 1, this.current);
138
- if (value.length === 0) return err("CronExpressionError", `Invalid step expression '${content}' for field '${field}'`);
139
- this.addToken(tokenContent, "step", Number(value), field);
140
- return ok(true);
141
- }
142
- handleRangeWithStep(component) {
143
- const { field, content } = component;
144
- let ch = this.peek(content);
145
- while (ch && this.isDigit(ch)) {
146
- this.advance(content);
147
- ch = this.peek(content);
148
- }
149
- if (!ch) return err("CronExpressionError", `Invalid range expression '${content}' for field '${field}'`);
150
- if (this.match(content, "/")) {
151
- const [error, _] = this.handleStep(component);
152
- if (error) return err(error.type, error.message);
153
- return ok(true);
154
- }
155
- return err("CronExpressionError", `Invalid range expression '${content}' for field '${field}'`);
156
- }
157
- handleNumber(component) {
158
- const { field, content } = component;
159
- let ch = this.peek(content);
160
- this.start = this.current - 1;
161
- while (ch && this.isDigit(ch)) {
162
- this.advance(content);
163
- ch = this.peek(content);
164
- }
165
- if (!ch) {
166
- const item = content.substring(this.start);
167
- this.addToken(item, "number", Number(item), field);
168
- return ok(true);
169
- }
170
- if (this.match(content, "-")) {
171
- const [error, _] = this.handleRange(component);
172
- if (error) return err(error.type, error.message);
173
- return ok(true);
174
- }
175
- if (this.match(content, "/")) {
176
- const [error, _] = this.handleStep(component);
177
- if (error) return err(error.type, error.message);
178
- return ok(true);
179
- }
180
- if (!this.isDigit(ch) && ch !== ",") return err("CronExpressionError", `Invalid number '${content}' for field '${field}'`);
181
- const item = content.substring(this.start, this.current);
182
- this.addToken(item, "number", Number(item), field);
183
- return ok(true);
184
- }
185
- handleRange(component) {
186
- const { field, content } = component;
187
- let ch = this.peek(content);
188
- if (!ch) return err("CronExpressionError", `Invalid range expression '${content}' for field '${field}'`);
189
- while (ch && this.isDigit(ch)) {
190
- this.advance(content);
191
- ch = this.peek(content);
192
- }
193
- if (!ch) {
194
- const tokenContent = content.substring(this.start);
195
- this.addToken(tokenContent, "range", tokenContent, field);
196
- return ok(true);
197
- }
198
- if (this.match(content, "/")) {
199
- const [error, _] = this.handleStep(component);
200
- if (error) return err(error.type, error.message);
201
- return ok(true);
202
- }
203
- if (ch && ch !== ",") return err("CronExpressionError", `Invalid range expression '${content}' for field '${field}'`);
204
- const tokenContent = content.substring(this.start, this.current);
205
- this.addToken(tokenContent, "range", tokenContent, field);
206
- return ok(true);
207
- }
208
- isDigit(ch) {
209
- return ch >= "0" && ch <= "9";
210
- }
211
- createComponent(fields) {
212
- const fieldNames = [
213
- "second",
214
- "minute",
215
- "hour",
216
- "day",
217
- "month",
218
- "weekday"
219
- ];
220
- const components = [];
221
- let offset = 1;
222
- if (fields.length === FieldAmount.max) offset = 0;
223
- for (let idx = 0; idx < fields.length; idx++) {
224
- const fieldName = fieldNames[idx + offset];
225
- const content = fields[idx];
226
- if (!fieldName || !content) break;
227
- components.push({
228
- content,
229
- field: fieldName
230
- });
231
- }
232
- return components;
233
- }
234
- };
235
- //#endregion
236
- export { FieldAmount, Scanner };
237
-
238
- //# sourceMappingURL=scanner.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scanner.mjs","names":[],"sources":["../../src/lib/cron/scanner.ts"],"sourcesContent":["import { err, ok } from \"../errors/index.js\";\nimport type { CronScannerError } from \"./types.js\";\n\nexport const FieldAmount = {\n min: 5,\n max: 6,\n} as const;\n\ntype TokenValueType = string | number;\ntype CronFieldType = \"second\" | \"minute\" | \"hour\" | \"day\" | \"month\" | \"weekday\";\ntype ComponentType = {\n content: string;\n field: CronFieldType;\n};\n\ntype TokenType = \"any\" | \"range\" | \"step\" | \"number\";\n\nexport class Token {\n private readonly type: TokenType;\n private readonly component: string;\n private readonly value: TokenValueType;\n\n private readonly field: CronFieldType;\n\n public constructor(\n component: string,\n type: TokenType,\n value: TokenValueType,\n field: CronFieldType,\n ) {\n this.component = component;\n this.type = type;\n this.value = value;\n this.field = field;\n }\n\n public getComponent() {\n return this.component;\n }\n\n public getTokenType() {\n return this.type;\n }\n\n public getTokenValue() {\n return this.value;\n }\n\n public getField() {\n return this.field;\n }\n\n public toString() {\n const header = `component=\"${this.component}\", type=${this.type}`;\n const body = `field=\"${this.field}\", value=${this.value}`;\n\n return `Token{${header}, ${body}}`;\n }\n\n public equals(other: Token) {\n if (!other) return false;\n\n const isComponentEqual = this.component === other.getComponent();\n const isTokenTypeEqual = this.type === other.getTokenType();\n const isTokenValueEqual = this.value === other.getTokenValue();\n const isFieldEqual = this.field === other.getField();\n\n return (\n isComponentEqual && isTokenTypeEqual && isTokenValueEqual && isFieldEqual\n );\n }\n}\n\nexport class Scanner {\n private expression: string;\n private current: number;\n private start: number;\n private tokens: Token[];\n\n public constructor(expression: string) {\n this.expression = expression;\n this.current = 0;\n this.start = 0;\n this.tokens = [];\n }\n\n public scan() {\n if (this.expression.length === 0) {\n return err<CronScannerError>(\n \"EmptyCronExpressionError\",\n \"Cron expression have zero length\",\n );\n }\n\n const fields = this.expression.trim().split(/\\s+/);\n const hasMinLen = fields.length === FieldAmount.min;\n const hasMaxLen = fields.length === FieldAmount.max;\n\n if (!hasMinLen && !hasMaxLen) {\n return err<CronScannerError>(\n \"CronLengthError\",\n `Invalid number of fields for '${this.expression}'. Expected 5 or 6 fields but got ${fields.length} field(s)`,\n );\n }\n\n const components = this.createComponent(fields);\n\n for (let idx = 0; idx < components.length; idx++) {\n const component = components[idx];\n if (!component) {\n return err<CronScannerError>(\n \"CronExpressionError\",\n `Invalid cron expression: ${this.expression}`,\n );\n }\n\n this.current = 0;\n this.start = 0;\n const [error, _] = this.scanComponent(component);\n if (error) return err<CronScannerError>(error.type, error.message);\n }\n\n return ok(this.tokens);\n }\n\n private scanComponent(component: ComponentType) {\n const { field, content } = component;\n while (this.current < content.length) {\n let currentCh = this.advance(content);\n\n switch (currentCh) {\n case \"*\": {\n const ch = this.peek(content);\n if (this.match(content, \"/\")) {\n const [error, _] = this.handleStep(component);\n if (error) return err<CronScannerError>(error.type, error.message);\n } else if (!ch || ch === \",\") {\n this.addToken(\"*\", \"any\", \"*\", field);\n } else {\n return err<CronScannerError>(\n \"CronExpressionError\",\n `Invalid any expression '${content}' for field '${field}'`,\n );\n }\n\n break;\n }\n case \"-\": {\n currentCh = this.advance(content);\n if (this.isDigit(currentCh)) {\n const [error, _] = this.handleRangeWithStep(component);\n if (error) return err<CronScannerError>(error.type, error.message);\n } else {\n return err<CronScannerError>(\n \"CronExpressionError\",\n `Invalid range expression '${content}' for field '${field}'`,\n );\n }\n break;\n }\n case \",\": {\n if (this.current === 1 && this.start === 0) {\n return err<CronScannerError>(\n \"CronExpressionError\",\n `Invalid list expression '${content}' for field '${field}'`,\n );\n }\n\n const next = this.peek(content);\n if (!next || next === \",\") {\n return err<CronScannerError>(\n \"CronExpressionError\",\n `Invalid list expression '${content}' for field '${field}'`,\n );\n }\n\n break;\n }\n default: {\n if (this.isDigit(currentCh)) {\n const [error, _] = this.handleNumber(component);\n if (error) return err<CronScannerError>(error.type, error.message);\n } else {\n return err<CronScannerError>(\n \"CronExpressionError\",\n `Invalid cron expression '${this.expression}' in field '${field}'`,\n );\n }\n\n break;\n }\n }\n\n this.start = this.current;\n }\n\n return ok(true);\n }\n\n private addToken(\n component: string,\n type: TokenType,\n value: TokenValueType,\n field: CronFieldType,\n ) {\n const token = new Token(component, type, value, field);\n this.tokens.push(token);\n }\n\n private advance(content: string) {\n const currentCh = content.charAt(this.current);\n this.current += 1;\n\n return currentCh;\n }\n\n private match(content: string, expected: string) {\n if (this.current >= content.length) return false;\n if (content.charAt(this.current) !== expected) return false;\n\n this.current += 1;\n return true;\n }\n\n private peek(content: string) {\n if (this.current >= content.length) return undefined;\n\n return content.charAt(this.current);\n }\n\n private handleStep(component: ComponentType) {\n const { field, content } = component;\n let ch = this.peek(content);\n const slashIdx = this.current - 1;\n\n while (ch && this.isDigit(ch)) {\n this.advance(content);\n ch = this.peek(content);\n }\n\n if (ch && ch !== \",\") {\n return err<CronScannerError>(\n \"CronExpressionError\",\n `Invalid step expression '${content}' for field '${field}'`,\n );\n }\n\n const tokenContent = content.substring(this.start, this.current);\n const value = content.slice(slashIdx + 1, this.current);\n\n if (value.length === 0) {\n return err<CronScannerError>(\n \"CronExpressionError\",\n `Invalid step expression '${content}' for field '${field}'`,\n );\n }\n\n this.addToken(tokenContent, \"step\", Number(value), field);\n return ok(true);\n }\n\n private handleRangeWithStep(component: ComponentType) {\n const { field, content } = component;\n let ch = this.peek(content);\n\n while (ch && this.isDigit(ch)) {\n this.advance(content);\n ch = this.peek(content);\n }\n\n if (!ch) {\n return err<CronScannerError>(\n \"CronExpressionError\",\n `Invalid range expression '${content}' for field '${field}'`,\n );\n }\n\n if (this.match(content, \"/\")) {\n const [error, _] = this.handleStep(component);\n if (error) return err<CronScannerError>(error.type, error.message);\n\n return ok(true);\n }\n\n return err<CronScannerError>(\n \"CronExpressionError\",\n `Invalid range expression '${content}' for field '${field}'`,\n );\n }\n\n private handleNumber(component: ComponentType) {\n const { field, content } = component;\n let ch = this.peek(content);\n this.start = this.current - 1;\n\n while (ch && this.isDigit(ch)) {\n this.advance(content);\n ch = this.peek(content);\n }\n\n if (!ch) {\n // Reached the end of the component\n const item = content.substring(this.start);\n this.addToken(item, \"number\", Number(item), field);\n return ok(true);\n }\n\n if (this.match(content, \"-\")) {\n const [error, _] = this.handleRange(component);\n if (error) return err<CronScannerError>(error.type, error.message);\n\n return ok(true);\n }\n\n if (this.match(content, \"/\")) {\n const [error, _] = this.handleStep(component);\n if (error) return err<CronScannerError>(error.type, error.message);\n\n return ok(true);\n }\n\n if (!this.isDigit(ch) && ch !== \",\") {\n return err<CronScannerError>(\n \"CronExpressionError\",\n `Invalid number '${content}' for field '${field}'`,\n );\n }\n\n const item = content.substring(this.start, this.current);\n this.addToken(item, \"number\", Number(item), field);\n return ok(true);\n }\n\n private handleRange(component: ComponentType) {\n const { field, content } = component;\n let ch = this.peek(content);\n\n if (!ch) {\n return err<CronScannerError>(\n \"CronExpressionError\",\n `Invalid range expression '${content}' for field '${field}'`,\n );\n }\n\n while (ch && this.isDigit(ch)) {\n this.advance(content);\n ch = this.peek(content);\n }\n\n if (!ch) {\n // Reached the end of the component\n const tokenContent = content.substring(this.start);\n this.addToken(tokenContent, \"range\", tokenContent, field);\n\n return ok(true);\n }\n\n if (this.match(content, \"/\")) {\n const [error, _] = this.handleStep(component);\n if (error) return err<CronScannerError>(error.type, error.message);\n\n return ok(true);\n }\n\n if (ch && ch !== \",\") {\n return err<CronScannerError>(\n \"CronExpressionError\",\n `Invalid range expression '${content}' for field '${field}'`,\n );\n }\n\n const tokenContent = content.substring(this.start, this.current);\n this.addToken(tokenContent, \"range\", tokenContent, field);\n return ok(true);\n }\n\n private isDigit(ch: string) {\n return ch >= \"0\" && ch <= \"9\";\n }\n\n private createComponent(fields: string[]) {\n const fieldNames = [\n \"second\",\n \"minute\",\n \"hour\",\n \"day\",\n \"month\",\n \"weekday\",\n ] as const;\n const components = [];\n let offset = 1;\n if (fields.length === FieldAmount.max) offset = 0;\n\n for (let idx = 0; idx < fields.length; idx++) {\n const fieldName = fieldNames[idx + offset];\n const content = fields[idx];\n if (!fieldName || !content) break;\n\n components.push({ content, field: fieldName });\n }\n\n return components;\n }\n}\n"],"mappings":";;AAGA,MAAa,cAAc;CACzB,KAAK;CACL,KAAK;CACN;AAWD,IAAa,QAAb,MAAmB;CACjB;CACA;CACA;CAEA;CAEA,YACE,WACA,MACA,OACA,OACA;AACA,OAAK,YAAY;AACjB,OAAK,OAAO;AACZ,OAAK,QAAQ;AACb,OAAK,QAAQ;;CAGf,eAAsB;AACpB,SAAO,KAAK;;CAGd,eAAsB;AACpB,SAAO,KAAK;;CAGd,gBAAuB;AACrB,SAAO,KAAK;;CAGd,WAAkB;AAChB,SAAO,KAAK;;CAGd,WAAkB;AAIhB,SAAO,SAHQ,cAAc,KAAK,UAAU,UAAU,KAAK,OAGpC,IAFV,UAAU,KAAK,MAAM,WAAW,KAAK,QAElB;;CAGlC,OAAc,OAAc;AAC1B,MAAI,CAAC,MAAO,QAAO;EAEnB,MAAM,mBAAmB,KAAK,cAAc,MAAM,cAAc;EAChE,MAAM,mBAAmB,KAAK,SAAS,MAAM,cAAc;EAC3D,MAAM,oBAAoB,KAAK,UAAU,MAAM,eAAe;EAC9D,MAAM,eAAe,KAAK,UAAU,MAAM,UAAU;AAEpD,SACE,oBAAoB,oBAAoB,qBAAqB;;;AAKnE,IAAa,UAAb,MAAqB;CACnB;CACA;CACA;CACA;CAEA,YAAmB,YAAoB;AACrC,OAAK,aAAa;AAClB,OAAK,UAAU;AACf,OAAK,QAAQ;AACb,OAAK,SAAS,EAAE;;CAGlB,OAAc;AACZ,MAAI,KAAK,WAAW,WAAW,EAC7B,QAAO,IACL,4BACA,mCACD;EAGH,MAAM,SAAS,KAAK,WAAW,MAAM,CAAC,MAAM,MAAM;EAClD,MAAM,YAAY,OAAO,WAAW,YAAY;EAChD,MAAM,YAAY,OAAO,WAAW,YAAY;AAEhD,MAAI,CAAC,aAAa,CAAC,UACjB,QAAO,IACL,mBACA,iCAAiC,KAAK,WAAW,oCAAoC,OAAO,OAAO,WACpG;EAGH,MAAM,aAAa,KAAK,gBAAgB,OAAO;AAE/C,OAAK,IAAI,MAAM,GAAG,MAAM,WAAW,QAAQ,OAAO;GAChD,MAAM,YAAY,WAAW;AAC7B,OAAI,CAAC,UACH,QAAO,IACL,uBACA,4BAA4B,KAAK,aAClC;AAGH,QAAK,UAAU;AACf,QAAK,QAAQ;GACb,MAAM,CAAC,OAAO,KAAK,KAAK,cAAc,UAAU;AAChD,OAAI,MAAO,QAAO,IAAsB,MAAM,MAAM,MAAM,QAAQ;;AAGpE,SAAO,GAAG,KAAK,OAAO;;CAGxB,cAAsB,WAA0B;EAC9C,MAAM,EAAE,OAAO,YAAY;AAC3B,SAAO,KAAK,UAAU,QAAQ,QAAQ;GACpC,IAAI,YAAY,KAAK,QAAQ,QAAQ;AAErC,WAAQ,WAAR;IACE,KAAK,KAAK;KACR,MAAM,KAAK,KAAK,KAAK,QAAQ;AAC7B,SAAI,KAAK,MAAM,SAAS,IAAI,EAAE;MAC5B,MAAM,CAAC,OAAO,KAAK,KAAK,WAAW,UAAU;AAC7C,UAAI,MAAO,QAAO,IAAsB,MAAM,MAAM,MAAM,QAAQ;gBACzD,CAAC,MAAM,OAAO,IACvB,MAAK,SAAS,KAAK,OAAO,KAAK,MAAM;SAErC,QAAO,IACL,uBACA,2BAA2B,QAAQ,eAAe,MAAM,GACzD;AAGH;;IAEF,KAAK;AACH,iBAAY,KAAK,QAAQ,QAAQ;AACjC,SAAI,KAAK,QAAQ,UAAU,EAAE;MAC3B,MAAM,CAAC,OAAO,KAAK,KAAK,oBAAoB,UAAU;AACtD,UAAI,MAAO,QAAO,IAAsB,MAAM,MAAM,MAAM,QAAQ;WAElE,QAAO,IACL,uBACA,6BAA6B,QAAQ,eAAe,MAAM,GAC3D;AAEH;IAEF,KAAK,KAAK;AACR,SAAI,KAAK,YAAY,KAAK,KAAK,UAAU,EACvC,QAAO,IACL,uBACA,4BAA4B,QAAQ,eAAe,MAAM,GAC1D;KAGH,MAAM,OAAO,KAAK,KAAK,QAAQ;AAC/B,SAAI,CAAC,QAAQ,SAAS,IACpB,QAAO,IACL,uBACA,4BAA4B,QAAQ,eAAe,MAAM,GAC1D;AAGH;;IAEF;AACE,SAAI,KAAK,QAAQ,UAAU,EAAE;MAC3B,MAAM,CAAC,OAAO,KAAK,KAAK,aAAa,UAAU;AAC/C,UAAI,MAAO,QAAO,IAAsB,MAAM,MAAM,MAAM,QAAQ;WAElE,QAAO,IACL,uBACA,4BAA4B,KAAK,WAAW,cAAc,MAAM,GACjE;AAGH;;AAIJ,QAAK,QAAQ,KAAK;;AAGpB,SAAO,GAAG,KAAK;;CAGjB,SACE,WACA,MACA,OACA,OACA;EACA,MAAM,QAAQ,IAAI,MAAM,WAAW,MAAM,OAAO,MAAM;AACtD,OAAK,OAAO,KAAK,MAAM;;CAGzB,QAAgB,SAAiB;EAC/B,MAAM,YAAY,QAAQ,OAAO,KAAK,QAAQ;AAC9C,OAAK,WAAW;AAEhB,SAAO;;CAGT,MAAc,SAAiB,UAAkB;AAC/C,MAAI,KAAK,WAAW,QAAQ,OAAQ,QAAO;AAC3C,MAAI,QAAQ,OAAO,KAAK,QAAQ,KAAK,SAAU,QAAO;AAEtD,OAAK,WAAW;AAChB,SAAO;;CAGT,KAAa,SAAiB;AAC5B,MAAI,KAAK,WAAW,QAAQ,OAAQ,QAAO,KAAA;AAE3C,SAAO,QAAQ,OAAO,KAAK,QAAQ;;CAGrC,WAAmB,WAA0B;EAC3C,MAAM,EAAE,OAAO,YAAY;EAC3B,IAAI,KAAK,KAAK,KAAK,QAAQ;EAC3B,MAAM,WAAW,KAAK,UAAU;AAEhC,SAAO,MAAM,KAAK,QAAQ,GAAG,EAAE;AAC7B,QAAK,QAAQ,QAAQ;AACrB,QAAK,KAAK,KAAK,QAAQ;;AAGzB,MAAI,MAAM,OAAO,IACf,QAAO,IACL,uBACA,4BAA4B,QAAQ,eAAe,MAAM,GAC1D;EAGH,MAAM,eAAe,QAAQ,UAAU,KAAK,OAAO,KAAK,QAAQ;EAChE,MAAM,QAAQ,QAAQ,MAAM,WAAW,GAAG,KAAK,QAAQ;AAEvD,MAAI,MAAM,WAAW,EACnB,QAAO,IACL,uBACA,4BAA4B,QAAQ,eAAe,MAAM,GAC1D;AAGH,OAAK,SAAS,cAAc,QAAQ,OAAO,MAAM,EAAE,MAAM;AACzD,SAAO,GAAG,KAAK;;CAGjB,oBAA4B,WAA0B;EACpD,MAAM,EAAE,OAAO,YAAY;EAC3B,IAAI,KAAK,KAAK,KAAK,QAAQ;AAE3B,SAAO,MAAM,KAAK,QAAQ,GAAG,EAAE;AAC7B,QAAK,QAAQ,QAAQ;AACrB,QAAK,KAAK,KAAK,QAAQ;;AAGzB,MAAI,CAAC,GACH,QAAO,IACL,uBACA,6BAA6B,QAAQ,eAAe,MAAM,GAC3D;AAGH,MAAI,KAAK,MAAM,SAAS,IAAI,EAAE;GAC5B,MAAM,CAAC,OAAO,KAAK,KAAK,WAAW,UAAU;AAC7C,OAAI,MAAO,QAAO,IAAsB,MAAM,MAAM,MAAM,QAAQ;AAElE,UAAO,GAAG,KAAK;;AAGjB,SAAO,IACL,uBACA,6BAA6B,QAAQ,eAAe,MAAM,GAC3D;;CAGH,aAAqB,WAA0B;EAC7C,MAAM,EAAE,OAAO,YAAY;EAC3B,IAAI,KAAK,KAAK,KAAK,QAAQ;AAC3B,OAAK,QAAQ,KAAK,UAAU;AAE5B,SAAO,MAAM,KAAK,QAAQ,GAAG,EAAE;AAC7B,QAAK,QAAQ,QAAQ;AACrB,QAAK,KAAK,KAAK,QAAQ;;AAGzB,MAAI,CAAC,IAAI;GAEP,MAAM,OAAO,QAAQ,UAAU,KAAK,MAAM;AAC1C,QAAK,SAAS,MAAM,UAAU,OAAO,KAAK,EAAE,MAAM;AAClD,UAAO,GAAG,KAAK;;AAGjB,MAAI,KAAK,MAAM,SAAS,IAAI,EAAE;GAC5B,MAAM,CAAC,OAAO,KAAK,KAAK,YAAY,UAAU;AAC9C,OAAI,MAAO,QAAO,IAAsB,MAAM,MAAM,MAAM,QAAQ;AAElE,UAAO,GAAG,KAAK;;AAGjB,MAAI,KAAK,MAAM,SAAS,IAAI,EAAE;GAC5B,MAAM,CAAC,OAAO,KAAK,KAAK,WAAW,UAAU;AAC7C,OAAI,MAAO,QAAO,IAAsB,MAAM,MAAM,MAAM,QAAQ;AAElE,UAAO,GAAG,KAAK;;AAGjB,MAAI,CAAC,KAAK,QAAQ,GAAG,IAAI,OAAO,IAC9B,QAAO,IACL,uBACA,mBAAmB,QAAQ,eAAe,MAAM,GACjD;EAGH,MAAM,OAAO,QAAQ,UAAU,KAAK,OAAO,KAAK,QAAQ;AACxD,OAAK,SAAS,MAAM,UAAU,OAAO,KAAK,EAAE,MAAM;AAClD,SAAO,GAAG,KAAK;;CAGjB,YAAoB,WAA0B;EAC5C,MAAM,EAAE,OAAO,YAAY;EAC3B,IAAI,KAAK,KAAK,KAAK,QAAQ;AAE3B,MAAI,CAAC,GACH,QAAO,IACL,uBACA,6BAA6B,QAAQ,eAAe,MAAM,GAC3D;AAGH,SAAO,MAAM,KAAK,QAAQ,GAAG,EAAE;AAC7B,QAAK,QAAQ,QAAQ;AACrB,QAAK,KAAK,KAAK,QAAQ;;AAGzB,MAAI,CAAC,IAAI;GAEP,MAAM,eAAe,QAAQ,UAAU,KAAK,MAAM;AAClD,QAAK,SAAS,cAAc,SAAS,cAAc,MAAM;AAEzD,UAAO,GAAG,KAAK;;AAGjB,MAAI,KAAK,MAAM,SAAS,IAAI,EAAE;GAC5B,MAAM,CAAC,OAAO,KAAK,KAAK,WAAW,UAAU;AAC7C,OAAI,MAAO,QAAO,IAAsB,MAAM,MAAM,MAAM,QAAQ;AAElE,UAAO,GAAG,KAAK;;AAGjB,MAAI,MAAM,OAAO,IACf,QAAO,IACL,uBACA,6BAA6B,QAAQ,eAAe,MAAM,GAC3D;EAGH,MAAM,eAAe,QAAQ,UAAU,KAAK,OAAO,KAAK,QAAQ;AAChE,OAAK,SAAS,cAAc,SAAS,cAAc,MAAM;AACzD,SAAO,GAAG,KAAK;;CAGjB,QAAgB,IAAY;AAC1B,SAAO,MAAM,OAAO,MAAM;;CAG5B,gBAAwB,QAAkB;EACxC,MAAM,aAAa;GACjB;GACA;GACA;GACA;GACA;GACA;GACD;EACD,MAAM,aAAa,EAAE;EACrB,IAAI,SAAS;AACb,MAAI,OAAO,WAAW,YAAY,IAAK,UAAS;AAEhD,OAAK,IAAI,MAAM,GAAG,MAAM,OAAO,QAAQ,OAAO;GAC5C,MAAM,YAAY,WAAW,MAAM;GACnC,MAAM,UAAU,OAAO;AACvB,OAAI,CAAC,aAAa,CAAC,QAAS;AAE5B,cAAW,KAAK;IAAE;IAAS,OAAO;IAAW,CAAC;;AAGhD,SAAO"}
@@ -1,11 +0,0 @@
1
- //#region src/lib/cron/types.d.ts
2
- type CronAlias = "@yearly" | "@monthly" | "@weekly" | "@daily" | "@hourly" | "@minutely";
3
- type CronStatus = "idle" | "running" | "paused";
4
- type CronOptions = {
5
- name: string;
6
- schedule: CronAlias | (string & {});
7
- handler: () => void | Promise<void>;
8
- };
9
- //#endregion
10
- export { CronOptions, CronStatus };
11
- //# sourceMappingURL=types.d.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.cts","names":[],"sources":["../../src/lib/cron/types.ts"],"mappings":";KAAY,SAAA;AAAA,KAQA,UAAA;AAAA,KASA,WAAA;EACV,IAAA;EACA,QAAA,EAAU,SAAA;EACV,OAAA,eAAsB,OAAA;AAAA"}
@@ -1,11 +0,0 @@
1
- //#region src/lib/cron/types.d.ts
2
- type CronAlias = "@yearly" | "@monthly" | "@weekly" | "@daily" | "@hourly" | "@minutely";
3
- type CronStatus = "idle" | "running" | "paused";
4
- type CronOptions = {
5
- name: string;
6
- schedule: CronAlias | (string & {});
7
- handler: () => void | Promise<void>;
8
- };
9
- //#endregion
10
- export { CronOptions, CronStatus };
11
- //# sourceMappingURL=types.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.mts","names":[],"sources":["../../src/lib/cron/types.ts"],"mappings":";KAAY,SAAA;AAAA,KAQA,UAAA;AAAA,KASA,WAAA;EACV,IAAA;EACA,QAAA,EAAU,SAAA;EACV,OAAA,eAAsB,OAAA;AAAA"}
@@ -1,5 +0,0 @@
1
- //#region src/lib/errors/types.d.ts
2
- type CommonError = "NotFoundError" | "UnauthorizedError" | "InternalServerError" | "ValidationError" | (string & {});
3
- //#endregion
4
- export { CommonError };
5
- //# sourceMappingURL=types.d.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.cts","names":[],"sources":["../../src/lib/errors/types.ts"],"mappings":";KAAY,WAAA"}
@@ -1,5 +0,0 @@
1
- //#region src/lib/errors/types.d.ts
2
- type CommonError = "NotFoundError" | "UnauthorizedError" | "InternalServerError" | "ValidationError" | (string & {});
3
- //#endregion
4
- export { CommonError };
5
- //# sourceMappingURL=types.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.mts","names":[],"sources":["../../src/lib/errors/types.ts"],"mappings":";KAAY,WAAA"}
@@ -1,13 +0,0 @@
1
- //#region src/lib/i18n/types.d.ts
2
- type ExtractParamType<T extends string> = T extends "string" ? string : T extends "number" ? number : T extends "boolean" ? boolean : never;
3
- type BuildParamObject<T extends string, Acc = {}> = T extends `${infer _Start}{${infer Name}:${infer Type}}${infer Rest}` ? BuildParamObject<Rest, Acc & Record<Name, ExtractParamType<Type>>> : Acc;
4
- type IsString<T> = T extends string ? true : false;
5
- type IsArray<T> = T extends readonly unknown[] ? true : false;
6
- type IsObject<T> = T extends object ? T extends readonly unknown[] ? false : true : false;
7
- type ArrayKeys<T extends readonly unknown[]> = { [K in keyof T & `${number}`]: `${K}` }[keyof T & `${number}`];
8
- type ObjectPropertyKeys<K extends string, V> = IsString<V> extends true ? K : IsArray<V> extends true ? V extends readonly unknown[] ? `${K}.${NestedKeyOf<V>}` : never : IsObject<V> extends true ? `${K}.${NestedKeyOf<V>}` : never;
9
- type NestedKeyOf<T> = IsArray<T> extends true ? T extends readonly unknown[] ? ArrayKeys<T> : never : IsObject<T> extends true ? { [K in keyof T & string]: ObjectPropertyKeys<K, T[K]> }[keyof T & string] : never;
10
- type GetNestedValue<T, K extends string> = K extends `${infer First}.${infer Rest}` ? First extends keyof T ? GetNestedValue<T[First], Rest> : never : K extends keyof T ? T[K] : never;
11
- //#endregion
12
- export { BuildParamObject, GetNestedValue, NestedKeyOf };
13
- //# sourceMappingURL=types.d.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.cts","names":[],"sources":["../../src/lib/i18n/types.ts"],"mappings":";KACY,gBAAA,qBAAqC,CAAA,6BAE7C,CAAA,6BAEE,CAAA;AAAA,KAIM,gBAAA,+BAGR,CAAA,uEACA,gBAAA,CAAiB,IAAA,EAAM,GAAA,GAAM,MAAA,CAAO,IAAA,EAAM,gBAAA,CAAiB,IAAA,MAC3D,GAAA;AAAA,KAGC,QAAA,MAAc,CAAA;AAAA,KACd,OAAA,MAAa,CAAA;AAAA,KACb,QAAA,MAAc,CAAA,kBACf,CAAA;AAAA,KAMC,SAAA,+CACS,CAAA,oBAAqB,CAAA,WAC3B,CAAA;AAAA,KAGH,kBAAA,wBAA0C,QAAA,CAAS,CAAA,iBACpD,CAAA,GACA,OAAA,CAAQ,CAAA,iBACN,CAAA,iCACK,CAAA,IAAK,WAAA,CAAY,CAAA,cAEtB,QAAA,CAAS,CAAA,oBACJ,CAAA,IAAK,WAAA,CAAY,CAAA;AAAA,KAIhB,WAAA,MACV,OAAA,CAAQ,CAAA,iBACJ,CAAA,8BACE,SAAA,CAAU,CAAA,YAEZ,QAAA,CAAS,CAAA,+BAEO,CAAA,YAAa,kBAAA,CAAmB,CAAA,EAAG,CAAA,CAAE,CAAA,WAC3C,CAAA;AAAA,KAIJ,cAAA,wBAGR,CAAA,0CACA,KAAA,eAAoB,CAAA,GAClB,cAAA,CAAe,CAAA,CAAE,KAAA,GAAQ,IAAA,YAE3B,CAAA,eAAgB,CAAA,GACd,CAAA,CAAE,CAAA"}
@@ -1,13 +0,0 @@
1
- //#region src/lib/i18n/types.d.ts
2
- type ExtractParamType<T extends string> = T extends "string" ? string : T extends "number" ? number : T extends "boolean" ? boolean : never;
3
- type BuildParamObject<T extends string, Acc = {}> = T extends `${infer _Start}{${infer Name}:${infer Type}}${infer Rest}` ? BuildParamObject<Rest, Acc & Record<Name, ExtractParamType<Type>>> : Acc;
4
- type IsString<T> = T extends string ? true : false;
5
- type IsArray<T> = T extends readonly unknown[] ? true : false;
6
- type IsObject<T> = T extends object ? T extends readonly unknown[] ? false : true : false;
7
- type ArrayKeys<T extends readonly unknown[]> = { [K in keyof T & `${number}`]: `${K}` }[keyof T & `${number}`];
8
- type ObjectPropertyKeys<K extends string, V> = IsString<V> extends true ? K : IsArray<V> extends true ? V extends readonly unknown[] ? `${K}.${NestedKeyOf<V>}` : never : IsObject<V> extends true ? `${K}.${NestedKeyOf<V>}` : never;
9
- type NestedKeyOf<T> = IsArray<T> extends true ? T extends readonly unknown[] ? ArrayKeys<T> : never : IsObject<T> extends true ? { [K in keyof T & string]: ObjectPropertyKeys<K, T[K]> }[keyof T & string] : never;
10
- type GetNestedValue<T, K extends string> = K extends `${infer First}.${infer Rest}` ? First extends keyof T ? GetNestedValue<T[First], Rest> : never : K extends keyof T ? T[K] : never;
11
- //#endregion
12
- export { BuildParamObject, GetNestedValue, NestedKeyOf };
13
- //# sourceMappingURL=types.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.mts","names":[],"sources":["../../src/lib/i18n/types.ts"],"mappings":";KACY,gBAAA,qBAAqC,CAAA,6BAE7C,CAAA,6BAEE,CAAA;AAAA,KAIM,gBAAA,+BAGR,CAAA,uEACA,gBAAA,CAAiB,IAAA,EAAM,GAAA,GAAM,MAAA,CAAO,IAAA,EAAM,gBAAA,CAAiB,IAAA,MAC3D,GAAA;AAAA,KAGC,QAAA,MAAc,CAAA;AAAA,KACd,OAAA,MAAa,CAAA;AAAA,KACb,QAAA,MAAc,CAAA,kBACf,CAAA;AAAA,KAMC,SAAA,+CACS,CAAA,oBAAqB,CAAA,WAC3B,CAAA;AAAA,KAGH,kBAAA,wBAA0C,QAAA,CAAS,CAAA,iBACpD,CAAA,GACA,OAAA,CAAQ,CAAA,iBACN,CAAA,iCACK,CAAA,IAAK,WAAA,CAAY,CAAA,cAEtB,QAAA,CAAS,CAAA,oBACJ,CAAA,IAAK,WAAA,CAAY,CAAA;AAAA,KAIhB,WAAA,MACV,OAAA,CAAQ,CAAA,iBACJ,CAAA,8BACE,SAAA,CAAU,CAAA,YAEZ,QAAA,CAAS,CAAA,+BAEO,CAAA,YAAa,kBAAA,CAAmB,CAAA,EAAG,CAAA,CAAE,CAAA,WAC3C,CAAA;AAAA,KAIJ,cAAA,wBAGR,CAAA,0CACA,KAAA,eAAoB,CAAA,GAClB,cAAA,CAAe,CAAA,CAAE,KAAA,GAAQ,IAAA,YAE3B,CAAA,eAAgB,CAAA,GACd,CAAA,CAAE,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../../../src/lib/cache/index.ts"],"mappings":";;;cAGa,KAAA;EAAA,QACH,OAAA;EAAA,QACA,SAAA;EAAA,QACA,WAAA;cAEW,OAAA,EAAS,YAAA,CAAa,CAAA;EAM5B,GAAA,CAAI,GAAA,WAAW,OAAA;IAAA;;;;;;EAiCf,GAAA,CAAI,GAAA,UAAa,KAAA,EAAO,CAAA,GAAC,OAAA;IAAA;;;;;;EAoDzB,MAAA,CAAO,GAAA,WAAW,OAAA;IAAA;;;UAgBvB,IAAA;EAAA,YAMI,SAAA,CAAA;EAAA,QAIJ,UAAA;EAAA,QAQA,UAAA;EAAA,QAQA,aAAA;EAAA,QAYA,UAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/lib/cache/index.ts"],"mappings":";;;cAGa,KAAA;EAAA,QACH,OAAA;EAAA,QACA,SAAA;EAAA,QACA,WAAA;cAEW,OAAA,EAAS,YAAA,CAAa,CAAA;EAM5B,GAAA,CAAI,GAAA,WAAW,OAAA;IAAA;;;;;;EAiCf,GAAA,CAAI,GAAA,UAAa,KAAA,EAAO,CAAA,GAAC,OAAA;IAAA;;;;;;EAoDzB,MAAA,CAAO,GAAA,WAAW,OAAA;IAAA;;;UAgBvB,IAAA;EAAA,YAMI,SAAA,CAAA;EAAA,QAIJ,UAAA;EAAA,QAQA,UAAA;EAAA,QAQA,aAAA;EAAA,QAYA,UAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/lib/cache/index.ts"],"sourcesContent":["import { err, mightThrow, mightThrowSync, ok } from \"../errors/index.js\";\nimport type { CacheError, CacheOptions } from \"./types.js\";\n\nexport class Cache<T> {\n private options: CacheOptions<T>;\n private serialize: (value: T) => string;\n private deserialize: (raw: string) => T;\n\n public constructor(options: CacheOptions<T>) {\n this.options = options;\n this.serialize = options.serializer ?? JSON.stringify;\n this.deserialize = options.deserializer ?? ((raw) => JSON.parse(raw));\n }\n\n public async get(key: string) {\n if (!this.isEnabled) {\n return this.fail(\"NotFoundError\", `Key ${key} not found`);\n }\n\n const resolvedKey = this.resolveKey(key);\n\n const [error, value] = await mightThrow(\n this.options.redis.get(resolvedKey),\n );\n\n if (error) {\n return this.fail(\"CacheError\", `Unable to get value for key ${key}`);\n }\n\n if (value === null || value === undefined) {\n return this.fail(\"NotFoundError\", `Key ${key} not found`);\n }\n\n const [deserializeErr, deserialized] = mightThrowSync<T>(() =>\n this.deserialize(value),\n );\n\n if (deserializeErr) {\n return this.fail(\n \"CacheError\",\n `Unable to deserialize value for key ${key}`,\n );\n }\n\n return ok(deserialized);\n }\n\n public async set(key: string, value: T) {\n if (!this.isEnabled) {\n return ok(value);\n }\n\n const [serializeErr, serialized] = mightThrowSync(() =>\n this.serialize(value),\n );\n\n if (serializeErr) {\n return this.fail(\n \"CacheError\",\n `Unable to serialize value for key ${key}`,\n );\n }\n\n if (serialized === null || serialized === undefined) {\n return this.fail(\n \"CacheError\",\n `Unable to serialize value for key ${key}`,\n );\n }\n\n const [ttlErr, ttl] = mightThrowSync(() => this.resolveTTL(key, value));\n\n if (ttlErr) {\n return this.fail(\n \"InvalidTTLError\",\n `Unable to resolve ttl for key ${key}`,\n );\n }\n\n if (!this.isTTLValid(ttl)) {\n return this.fail(\n \"InvalidTTLError\",\n `Unable to save records with ttl equal to ${ttl}`,\n );\n }\n\n const resolvedKey = this.resolveKey(key);\n\n const setPromise = this.getSetPromise(resolvedKey, serialized, ttl);\n\n const [setError] = await mightThrow(setPromise);\n\n if (setError) {\n return this.fail(\"CacheError\", `Unable to set value for key ${key}`);\n }\n\n return ok(value);\n }\n\n public async delete(key: string) {\n if (!this.isEnabled) {\n return ok(0);\n }\n\n const resolvedKey = this.resolveKey(key);\n\n const [error, data] = await mightThrow(this.options.redis.del(resolvedKey));\n\n if (error) {\n return this.fail(\"CacheError\", `Unable to delete key ${key}`);\n }\n\n return ok(data);\n }\n\n private fail<E extends CacheError>(type: E, message: string) {\n this.options.onError?.({ type, message });\n\n return err(type, message);\n }\n\n private get isEnabled() {\n return this.options.enabled !== false;\n }\n\n private resolveKey(key: string) {\n if (this.options.prefix) {\n return `${this.options.prefix}:${key}`;\n }\n\n return key;\n }\n\n private resolveTTL(key: string, value: T) {\n if (typeof this.options.ttl === \"function\") {\n return this.options.ttl(key, value);\n }\n\n return this.options.ttl;\n }\n\n private getSetPromise(\n key: string,\n value: string,\n ttl: number | undefined | null,\n ) {\n if (ttl === undefined || ttl === null) {\n return this.options.redis.set(key, value);\n }\n\n return this.options.redis.set(key, value, \"PX\", ttl);\n }\n\n private isTTLValid(ttl: number | undefined | null) {\n if (ttl === undefined || ttl === null) return true;\n\n if (!Number.isFinite(ttl)) return false;\n\n if (!Number.isInteger(ttl)) return false;\n\n if (ttl < 0) return false;\n\n return true;\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../../../src/lib/cron/index.ts"],"mappings":";;;cA6Ca,IAAA;EAAA,QACH,OAAA;EAAA,QACA,MAAA;EAAA,QACA,SAAA;EAAA,QAGA,MAAA;EAAA,QACA,MAAA;EAAA,QACA,IAAA;EAAA,QACA,GAAA;EAAA,QACA,KAAA;EAAA,QACA,SAAA;EAAA,QACA,UAAA;EAAA,QACA,YAAA;EAAA,QACA,YAAA;EAAA,QAGA,SAAA;EAAA,QAMA,UAAA;EAAA,QAkDA,eAAA;EAAA,QAiEA,gBAAA;EAAA,QAuCA,WAAA;EAAA,QAmEA,YAAA;cAkCW,OAAA,EAAS,WAAA;EAAA,QAoBpB,YAAA;EAAA,QAIA,KAAA;EAAA,QAoIA,WAAA;EAyCD,OAAA,CAAQ,IAAA,EAAM,IAAA;EAkCd,UAAA,CAAA,GAAU,IAAA;EAuCV,KAAA,CAAA;EAOA,IAAA,CAAA;EASA,KAAA,CAAA;EAWA,MAAA,CAAA;EAOA,SAAA,CAAA,GAAS,UAAA;EAAA,QAIR,IAAA;EAAA,QAmBM,GAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/lib/cron/index.ts"],"mappings":";;;cA6Ca,IAAA;EAAA,QACH,OAAA;EAAA,QACA,MAAA;EAAA,QACA,SAAA;EAAA,QAGA,MAAA;EAAA,QACA,MAAA;EAAA,QACA,IAAA;EAAA,QACA,GAAA;EAAA,QACA,KAAA;EAAA,QACA,SAAA;EAAA,QACA,UAAA;EAAA,QACA,YAAA;EAAA,QACA,YAAA;EAAA,QAGA,SAAA;EAAA,QAMA,UAAA;EAAA,QAkDA,eAAA;EAAA,QAiEA,gBAAA;EAAA,QAuCA,WAAA;EAAA,QAmEA,YAAA;cAkCW,OAAA,EAAS,WAAA;EAAA,QAoBpB,YAAA;EAAA,QAIA,KAAA;EAAA,QAoIA,WAAA;EAyCD,OAAA,CAAQ,IAAA,EAAM,IAAA;EAkCd,UAAA,CAAA,GAAU,IAAA;EAuCV,KAAA,CAAA;EAOA,IAAA,CAAA;EASA,KAAA,CAAA;EAWA,MAAA,CAAA;EAOA,SAAA,CAAA,GAAS,UAAA;EAAA,QAIR,IAAA;EAAA,QAmBM,GAAA;AAAA"}