@magek/core 0.0.6 → 0.0.8

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 (104) hide show
  1. package/dist/authorizer.js +1 -1
  2. package/dist/command-dispatcher.js +47 -41
  3. package/dist/core-concepts/data-migration/entities/data-migration-entity.js +5 -2
  4. package/dist/core-concepts/data-migration/events/data-migration-finished.js +3 -1
  5. package/dist/core-concepts/data-migration/events/data-migration-started.js +3 -1
  6. package/dist/core-concepts/data-migration/events/entity-migrated.js +4 -0
  7. package/dist/core-concepts/touch-entity/events/entity-touched.js +2 -0
  8. package/dist/data-migrations.js +59 -54
  9. package/dist/decorators/command.d.ts +4 -11
  10. package/dist/decorators/command.js +10 -18
  11. package/dist/decorators/data-migration.d.ts +4 -1
  12. package/dist/decorators/data-migration.js +3 -1
  13. package/dist/decorators/decorator-types.d.ts +50 -0
  14. package/dist/decorators/decorator-types.js +11 -0
  15. package/dist/decorators/decorator-utils.d.ts +1 -0
  16. package/dist/decorators/decorator-utils.js +2 -0
  17. package/dist/decorators/entity.d.ts +7 -15
  18. package/dist/decorators/entity.js +27 -37
  19. package/dist/decorators/event-handler.d.ts +11 -1
  20. package/dist/decorators/event-handler.js +13 -1
  21. package/dist/decorators/event.d.ts +4 -1
  22. package/dist/decorators/event.js +3 -2
  23. package/dist/decorators/field-metadata-reader.d.ts +8 -3
  24. package/dist/decorators/field-metadata-reader.js +61 -62
  25. package/dist/decorators/field.d.ts +23 -0
  26. package/dist/decorators/field.js +41 -0
  27. package/dist/decorators/global-error-handler.d.ts +10 -1
  28. package/dist/decorators/global-error-handler.js +9 -1
  29. package/dist/decorators/global-event-handler.d.ts +10 -1
  30. package/dist/decorators/global-event-handler.js +9 -1
  31. package/dist/decorators/health-sensor.d.ts +4 -1
  32. package/dist/decorators/health-sensor.js +3 -2
  33. package/dist/decorators/index.d.ts +4 -0
  34. package/dist/decorators/index.js +3 -0
  35. package/dist/decorators/metadata.d.ts +17 -1
  36. package/dist/decorators/metadata.js +22 -22
  37. package/dist/decorators/non-exposed.d.ts +13 -2
  38. package/dist/decorators/non-exposed.js +22 -20
  39. package/dist/decorators/notification.d.ts +6 -18
  40. package/dist/decorators/notification.js +10 -50
  41. package/dist/decorators/projects.d.ts +5 -18
  42. package/dist/decorators/projects.js +23 -54
  43. package/dist/decorators/query.d.ts +11 -1
  44. package/dist/decorators/query.js +18 -4
  45. package/dist/decorators/read-model.d.ts +13 -27
  46. package/dist/decorators/read-model.js +45 -77
  47. package/dist/decorators/returns.d.ts +37 -0
  48. package/dist/decorators/returns.js +154 -0
  49. package/dist/decorators/role.d.ts +9 -3
  50. package/dist/decorators/role.js +8 -3
  51. package/dist/decorators/scheduled-command.d.ts +4 -1
  52. package/dist/decorators/scheduled-command.js +3 -1
  53. package/dist/decorators/schema-migration.d.ts +11 -27
  54. package/dist/decorators/schema-migration.js +32 -77
  55. package/dist/decorators/sequenced-by.d.ts +7 -25
  56. package/dist/decorators/sequenced-by.js +11 -71
  57. package/dist/event-dispatcher.js +29 -24
  58. package/dist/event-processor.js +107 -103
  59. package/dist/event-stream-consumer.js +25 -20
  60. package/dist/event-stream-producer.js +22 -17
  61. package/dist/events-reader.js +1 -0
  62. package/dist/global-error-dispatcher.js +3 -2
  63. package/dist/graphql-dispatcher.js +161 -156
  64. package/dist/index.js +4 -0
  65. package/dist/instrumentation/decorator/trace.d.ts +11 -3
  66. package/dist/instrumentation/decorator/trace.js +17 -71
  67. package/dist/magek.js +2 -2
  68. package/dist/query-dispatcher.js +2 -0
  69. package/dist/read-model-schema-migrator.js +71 -68
  70. package/dist/read-models-reader.js +178 -180
  71. package/dist/register-handler.js +3 -3
  72. package/dist/scheduled-command-dispatcher.js +48 -42
  73. package/dist/schema-migrator.js +63 -59
  74. package/dist/sensor/health/health-service.js +2 -1
  75. package/dist/services/event-store.js +221 -224
  76. package/dist/services/graphql/graphql-generator.js +11 -8
  77. package/dist/services/graphql/graphql-mutation-generator.js +4 -0
  78. package/dist/services/graphql/graphql-query-generator.js +14 -0
  79. package/dist/services/graphql/graphql-subcriptions-generator.js +7 -0
  80. package/dist/services/graphql/graphql-type-informer.js +4 -3
  81. package/dist/services/graphql/query-generators/graphql-query-by-keys-generator.js +4 -0
  82. package/dist/services/graphql/query-generators/graphql-query-events-generator.js +3 -0
  83. package/dist/services/graphql/query-generators/graphql-query-filters-generator.js +6 -0
  84. package/dist/services/graphql/query-generators/graphql-query-generator.js +4 -0
  85. package/dist/services/graphql/query-generators/graphql-query-listed-generator.js +7 -0
  86. package/dist/services/graphql/query-helpers/graphql-handled-fields-generator.js +5 -2
  87. package/dist/services/graphql/query-helpers/graphql-query-filter-arguments-builder.js +3 -0
  88. package/dist/services/graphql/query-helpers/graphql-query-filter-fields-builder.js +4 -0
  89. package/dist/services/graphql/query-helpers/graphql-query-sort-builder.js +4 -2
  90. package/dist/services/graphql/websocket-protocol/graphql-websocket-protocol.js +5 -3
  91. package/dist/services/pub-sub/read-model-pub-sub.js +1 -0
  92. package/dist/services/raw-events-parser.js +1 -1
  93. package/dist/services/read-model-store.js +20 -20
  94. package/dist/services/token-verifiers/jwks-uri-token-verifier.js +8 -4
  95. package/dist/services/token-verifiers/public-key-token-verifier.js +4 -2
  96. package/dist/services/token-verifiers/role-based-token-verifier.js +2 -1
  97. package/dist/services/token-verifiers/utilities.js +1 -1
  98. package/dist/subscribers-notifier.js +99 -92
  99. package/dist/token-verifier.js +2 -1
  100. package/dist/utils/promises.d.ts +25 -0
  101. package/dist/utils/promises.js +43 -0
  102. package/package.json +4 -4
  103. package/dist/decorators/stage3-utils.d.ts +0 -6
  104. package/dist/decorators/stage3-utils.js +0 -25
@@ -0,0 +1,25 @@
1
+ export declare class Promises {
2
+ /**
3
+ * Waits until all the passed promise-like values are settled, no matter if they were fulfilled or rejected.
4
+ * If some rejected were found, an array with all the rejected promises is thrown.
5
+ * If all were fulfilled, an array of PromiseFulfilledResult is returned
6
+ * @param values Array of promise-like values to be wait for
7
+ * @throws an array of PromiseRejectedResult with all the rejected promises, if any
8
+ *
9
+ * Comparison with other similar Promise methods:
10
+ * - `Promise.all`: This has an "all-or-nothing" behavior. As long as one of the promises is rejected, the result is
11
+ * rejected. More importantly, **it does not wait for al the promises to finish**, which could lead to undesired behaviors
12
+ * - `Promise.allSettled`: This method waits for all the promises to finish and then returns an array of results. Some
13
+ * of them will be fulfilled and some rejected. More importantly, **it never throws an error**, which could lead to
14
+ * unexpected consequences. For example if you do "await Promise.allSettle(...)" expecting it to throw if some of them
15
+ * failed, you won't get that.
16
+ *
17
+ * In brief, `Promises.allSettledAndFulfilled` behaves exactly the same way as `Promise.allSettle` but it throws with
18
+ * an array of the failed promises, only if there are any.
19
+ */
20
+ static allSettledAndFulfilled<TValue>(values: Iterable<TValue>): ReturnType<PromiseConstructor['allSettled']>;
21
+ }
22
+ export declare class PromisesError extends Error {
23
+ readonly failedReasons: Array<unknown>;
24
+ constructor(rejectedResults: Array<PromiseRejectedResult>);
25
+ }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PromisesError = exports.Promises = void 0;
4
+ class Promises {
5
+ /**
6
+ * Waits until all the passed promise-like values are settled, no matter if they were fulfilled or rejected.
7
+ * If some rejected were found, an array with all the rejected promises is thrown.
8
+ * If all were fulfilled, an array of PromiseFulfilledResult is returned
9
+ * @param values Array of promise-like values to be wait for
10
+ * @throws an array of PromiseRejectedResult with all the rejected promises, if any
11
+ *
12
+ * Comparison with other similar Promise methods:
13
+ * - `Promise.all`: This has an "all-or-nothing" behavior. As long as one of the promises is rejected, the result is
14
+ * rejected. More importantly, **it does not wait for al the promises to finish**, which could lead to undesired behaviors
15
+ * - `Promise.allSettled`: This method waits for all the promises to finish and then returns an array of results. Some
16
+ * of them will be fulfilled and some rejected. More importantly, **it never throws an error**, which could lead to
17
+ * unexpected consequences. For example if you do "await Promise.allSettle(...)" expecting it to throw if some of them
18
+ * failed, you won't get that.
19
+ *
20
+ * In brief, `Promises.allSettledAndFulfilled` behaves exactly the same way as `Promise.allSettle` but it throws with
21
+ * an array of the failed promises, only if there are any.
22
+ */
23
+ static async allSettledAndFulfilled(values) {
24
+ const results = await Promise.allSettled(values); // Promise.allSettled never throws
25
+ // Get all the failed promises
26
+ const failed = results.filter((result) => result.status === 'rejected');
27
+ // Throw if we found any failed ones
28
+ if (failed.length > 0) {
29
+ throw new PromisesError(failed);
30
+ }
31
+ return results;
32
+ }
33
+ }
34
+ exports.Promises = Promises;
35
+ class PromisesError extends Error {
36
+ failedReasons;
37
+ constructor(rejectedResults) {
38
+ const reasons = rejectedResults.map((res) => res.reason);
39
+ super(reasons.join('. '));
40
+ this.failedReasons = reasons;
41
+ }
42
+ }
43
+ exports.PromisesError = PromisesError;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@magek/core",
3
- "version": "0.0.6",
3
+ "version": "0.0.8",
4
4
  "description": "Library for your Magek apps",
5
5
  "author": "Boosterin Labs SLU",
6
6
  "homepage": "https://magek.ai",
@@ -23,19 +23,19 @@
23
23
  "node": ">=22.0.0 <23.0.0"
24
24
  },
25
25
  "dependencies": {
26
- "@magek/common": "^0.0.6",
26
+ "@magek/common": "^0.0.8",
27
27
  "fp-ts": "2.16.11",
28
28
  "graphql-scalars": "1.25.0",
29
29
  "inflected": "2.1.0",
30
30
  "iterall": "1.3.0",
31
31
  "jsonwebtoken": "9.0.3",
32
- "jwks-rsa": "3.2.1",
32
+ "jwks-rsa": "3.2.2",
33
33
  "tslib": "2.8.1",
34
34
  "validator": "13.15.26",
35
35
  "fast-check": "4.5.3"
36
36
  },
37
37
  "devDependencies": {
38
- "@magek/eslint-config": "^0.0.6",
38
+ "@magek/eslint-config": "^0.0.8",
39
39
  "@types/chai": "5.2.3",
40
40
  "@types/chai-as-promised": "8.0.2",
41
41
  "@types/inflected": "2.1.3",
@@ -1,6 +0,0 @@
1
- /**
2
- * Transfer field metadata from Stage 3 decorator context.metadata to the class constructor.
3
- * This is needed because Symbol.metadata is not available in Node.js, so Stage 3 decorators
4
- * need an explicit step to make field metadata accessible on the class.
5
- */
6
- export declare function transferStage3FieldMetadata(classType: Function, contextMetadata: Record<string | symbol, unknown>): void;
@@ -1,25 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transferStage3FieldMetadata = transferStage3FieldMetadata;
4
- // Symbol used by Stage 3 decorators to store field metadata
5
- const FIELDS_KEY = Symbol.for('magek:fields');
6
- /**
7
- * Transfer field metadata from Stage 3 decorator context.metadata to the class constructor.
8
- * This is needed because Symbol.metadata is not available in Node.js, so Stage 3 decorators
9
- * need an explicit step to make field metadata accessible on the class.
10
- */
11
- function transferStage3FieldMetadata(classType, contextMetadata) {
12
- const fields = contextMetadata[FIELDS_KEY];
13
- if (fields && fields.length > 0) {
14
- const ctorWithFields = classType;
15
- if (!ctorWithFields.__magek_fields__) {
16
- ctorWithFields.__magek_fields__ = [];
17
- }
18
- // Add fields that aren't already present
19
- for (const field of fields) {
20
- if (!ctorWithFields.__magek_fields__.some((f) => f.name === field.name)) {
21
- ctorWithFields.__magek_fields__.push(field);
22
- }
23
- }
24
- }
25
- }