joist-core 2.4.0-next.58 → 2.4.0-next.59

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 (93) hide show
  1. package/build/EntityManager.cjs +27 -6
  2. package/build/EntityManager.cjs.map +1 -1
  3. package/build/EntityManager.d.cts +4 -0
  4. package/build/EntityManager.d.cts.map +1 -1
  5. package/build/EntityManager.d.mts +4 -0
  6. package/build/EntityManager.d.mts.map +1 -1
  7. package/build/EntityManager.js +27 -6
  8. package/build/EntityManager.js.map +1 -1
  9. package/build/EntityMetadata.cjs.map +1 -1
  10. package/build/EntityMetadata.d.cts +5 -0
  11. package/build/EntityMetadata.d.cts.map +1 -1
  12. package/build/EntityMetadata.d.mts +5 -0
  13. package/build/EntityMetadata.d.mts.map +1 -1
  14. package/build/EntityMetadata.js.map +1 -1
  15. package/build/config.cjs +71 -12
  16. package/build/config.cjs.map +1 -1
  17. package/build/config.d.cts.map +1 -1
  18. package/build/config.d.mts.map +1 -1
  19. package/build/config.js +71 -12
  20. package/build/config.js.map +1 -1
  21. package/build/configure.cjs +13 -0
  22. package/build/configure.cjs.map +1 -1
  23. package/build/configure.d.cts.map +1 -1
  24. package/build/configure.d.mts.map +1 -1
  25. package/build/configure.js +13 -0
  26. package/build/configure.js.map +1 -1
  27. package/build/index.cjs +2 -0
  28. package/build/index.cjs.map +1 -1
  29. package/build/index.d.cts +2 -1
  30. package/build/index.d.cts.map +1 -1
  31. package/build/index.d.mts +2 -1
  32. package/build/index.d.mts.map +1 -1
  33. package/build/index.js +2 -1
  34. package/build/index.js.map +1 -1
  35. package/build/metrics/EntityMetrics.cjs +81 -0
  36. package/build/metrics/EntityMetrics.cjs.map +1 -0
  37. package/build/metrics/EntityMetrics.d.cts +55 -0
  38. package/build/metrics/EntityMetrics.d.cts.map +1 -0
  39. package/build/metrics/EntityMetrics.d.mts +55 -0
  40. package/build/metrics/EntityMetrics.d.mts.map +1 -0
  41. package/build/metrics/EntityMetrics.js +79 -0
  42. package/build/metrics/EntityMetrics.js.map +1 -0
  43. package/build/reactivity/ReactionsManager.cjs +2 -2
  44. package/build/reactivity/ReactionsManager.cjs.map +1 -1
  45. package/build/reactivity/ReactionsManager.js +2 -2
  46. package/build/reactivity/ReactionsManager.js.map +1 -1
  47. package/build/relations/AsyncReactiveField.cjs +21 -3
  48. package/build/relations/AsyncReactiveField.cjs.map +1 -1
  49. package/build/relations/AsyncReactiveField.d.cts +3 -1
  50. package/build/relations/AsyncReactiveField.d.cts.map +1 -1
  51. package/build/relations/AsyncReactiveField.d.mts +3 -1
  52. package/build/relations/AsyncReactiveField.d.mts.map +1 -1
  53. package/build/relations/AsyncReactiveField.js +21 -3
  54. package/build/relations/AsyncReactiveField.js.map +1 -1
  55. package/build/relations/ReactiveField.cjs +22 -4
  56. package/build/relations/ReactiveField.cjs.map +1 -1
  57. package/build/relations/ReactiveField.d.cts +3 -1
  58. package/build/relations/ReactiveField.d.cts.map +1 -1
  59. package/build/relations/ReactiveField.d.mts +3 -1
  60. package/build/relations/ReactiveField.d.mts.map +1 -1
  61. package/build/relations/ReactiveField.js +22 -4
  62. package/build/relations/ReactiveField.js.map +1 -1
  63. package/build/relations/hasAsyncMethod.cjs +22 -4
  64. package/build/relations/hasAsyncMethod.cjs.map +1 -1
  65. package/build/relations/hasAsyncMethod.d.cts +3 -1
  66. package/build/relations/hasAsyncMethod.d.cts.map +1 -1
  67. package/build/relations/hasAsyncMethod.d.mts +3 -1
  68. package/build/relations/hasAsyncMethod.d.mts.map +1 -1
  69. package/build/relations/hasAsyncMethod.js +22 -4
  70. package/build/relations/hasAsyncMethod.js.map +1 -1
  71. package/build/relations/hasReactiveAsyncMethod.cjs +21 -3
  72. package/build/relations/hasReactiveAsyncMethod.cjs.map +1 -1
  73. package/build/relations/hasReactiveAsyncMethod.d.cts +3 -1
  74. package/build/relations/hasReactiveAsyncMethod.d.cts.map +1 -1
  75. package/build/relations/hasReactiveAsyncMethod.d.mts +3 -1
  76. package/build/relations/hasReactiveAsyncMethod.d.mts.map +1 -1
  77. package/build/relations/hasReactiveAsyncMethod.js +21 -3
  78. package/build/relations/hasReactiveAsyncMethod.js.map +1 -1
  79. package/build/rules.cjs.map +1 -1
  80. package/build/rules.d.cts +5 -0
  81. package/build/rules.d.cts.map +1 -1
  82. package/build/rules.d.mts +5 -0
  83. package/build/rules.d.mts.map +1 -1
  84. package/build/rules.js.map +1 -1
  85. package/build/transitions.cjs +2 -0
  86. package/build/transitions.cjs.map +1 -1
  87. package/build/transitions.d.cts +9 -3
  88. package/build/transitions.d.cts.map +1 -1
  89. package/build/transitions.d.mts +9 -3
  90. package/build/transitions.d.mts.map +1 -1
  91. package/build/transitions.js +2 -0
  92. package/build/transitions.js.map +1 -1
  93. package/package.json +2 -2
@@ -142,6 +142,7 @@ var EntityManager = class EntityManager {
142
142
  #readSet = /* @__PURE__ */ new Set();
143
143
  #preloader;
144
144
  #fieldLogger = require_logging_FieldLogger.noopFieldLogger;
145
+ #metrics;
145
146
  #isLoadedCache = new require_loading_IsLoadedCache.IsLoadedCache();
146
147
  #merging;
147
148
  /** Track `a#1`, `a#2`, etc indexes for `em.create`-d entities. */
@@ -217,6 +218,9 @@ var EntityManager = class EntityManager {
217
218
  get fieldLogger() {
218
219
  return em.#fieldLogger;
219
220
  },
221
+ get metrics() {
222
+ return em.#metrics;
223
+ },
220
224
  clearDataloaders() {
221
225
  em.#dataloaders = {};
222
226
  em.#batchLoaders = {};
@@ -963,7 +967,7 @@ var EntityManager = class EntityManager {
963
967
  this.#preloadedRelations = /* @__PURE__ */ new Map();
964
968
  try {
965
969
  this.#isValidating = true;
966
- await validateSimpleRules(entityTodos, (config) => config.commitRules);
970
+ await validateSimpleRules(entityTodos, (meta) => meta.simpleCommitRules);
967
971
  await validateReactiveRules(this, this.#rm.logger, entityTodos, joinRowTodos, (meta) => meta.reactiveCommitRules);
968
972
  } finally {
969
973
  this.#isValidating = false;
@@ -1336,6 +1340,10 @@ var EntityManager = class EntityManager {
1336
1340
  }
1337
1341
  await Promise.all(relationsToCleanup.map((r) => r.cleanupOnEntityDeleted()));
1338
1342
  }
1343
+ /** Attaches request-owned metrics, or disables collection without resetting the collector. */
1344
+ setMetrics(metrics) {
1345
+ this.#metrics = metrics;
1346
+ }
1339
1347
  setReactionLogging(arg) {
1340
1348
  this.#rm.setLogger(typeof arg === "boolean" ? arg ? new require_logging_ReactionLogger.ReactionLogger() : void 0 : arg);
1341
1349
  }
@@ -1666,16 +1674,13 @@ async function validateReactiveRules(em, logger, todos, joinRowTodos, getRules =
1666
1674
  const errors = require_utils.failIfAnyRejected(await Promise.allSettled(p3)).flat();
1667
1675
  if (errors.length > 0) throw new require_rules.ValidationErrors(errors);
1668
1676
  }
1669
- async function validateSimpleRules(todos, getRules = (config) => config.rules) {
1677
+ async function validateSimpleRules(todos, getRules = (meta) => meta.simpleRules) {
1670
1678
  let p = void 0;
1671
1679
  for (const todoKey in todos) {
1672
1680
  const { inserts, updates } = todos[todoKey];
1673
1681
  for (const entities of [inserts, updates]) for (const entity of entities) {
1674
1682
  if (entity.isDeletedEntity) continue;
1675
- for (const m of require_EntityMetadata.getBaseAndSelfMetas(require_EntityMetadata.getMetadata(entity))) for (const rule of getRules(m.config.__data)) {
1676
- if (rule.hint !== void 0) continue;
1677
- (p ??= []).push(invokeRule(entity, rule.fn));
1678
- }
1683
+ for (const rule of getRules(require_EntityMetadata.getMetadata(entity))) (p ??= []).push(invokeSimpleRule(entity, rule));
1679
1684
  }
1680
1685
  }
1681
1686
  if (!p) return;
@@ -1686,6 +1691,22 @@ async function validateSimpleRules(todos, getRules = (config) => config.rules) {
1686
1691
  async function invokeRule(entity, fn) {
1687
1692
  return coerceError(entity, await fn(entity));
1688
1693
  }
1694
+ /** Evaluates a non-reactive validation or commit rule using its required registration name. */
1695
+ async function invokeSimpleRule(entity, rule) {
1696
+ const { fn } = rule;
1697
+ const metrics = getEmInternalApi(entity.em).metrics;
1698
+ if (!metrics) return coerceError(entity, await fn(entity));
1699
+ const totals = metrics.start(rule.evaluation);
1700
+ const started = performance.now();
1701
+ let value;
1702
+ try {
1703
+ value = fn(entity);
1704
+ } catch (error) {
1705
+ metrics.finish(totals, started);
1706
+ throw error;
1707
+ }
1708
+ return coerceError(entity, await metrics.finish(totals, started, value));
1709
+ }
1689
1710
  function driverBeforeBegin(em, txn) {
1690
1711
  return Promise.all(getEmInternalApi(em).hooks.beforeBegin.map((fn) => fn(em, txn)));
1691
1712
  }