@dxos/functions 0.5.3-main.427f0a3 → 0.5.3-main.4490e2f

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 (38) hide show
  1. package/dist/lib/browser/{chunk-P3HPDHNI.mjs → chunk-4D4I3YMJ.mjs} +4 -4
  2. package/dist/lib/browser/{chunk-P3HPDHNI.mjs.map → chunk-4D4I3YMJ.mjs.map} +3 -3
  3. package/dist/lib/browser/index.mjs +145 -108
  4. package/dist/lib/browser/index.mjs.map +3 -3
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/types.mjs +1 -1
  7. package/dist/lib/node/{chunk-KTLM3JNV.cjs → chunk-3UYUR5N5.cjs} +7 -7
  8. package/dist/lib/node/{chunk-KTLM3JNV.cjs.map → chunk-3UYUR5N5.cjs.map} +3 -3
  9. package/dist/lib/node/index.cjs +156 -119
  10. package/dist/lib/node/index.cjs.map +3 -3
  11. package/dist/lib/node/meta.json +1 -1
  12. package/dist/lib/node/types.cjs +5 -5
  13. package/dist/lib/node/types.cjs.map +1 -1
  14. package/dist/types/src/handler.d.ts.map +1 -1
  15. package/dist/types/src/runtime/dev-server.d.ts.map +1 -1
  16. package/dist/types/src/testing/setup.d.ts.map +1 -1
  17. package/dist/types/src/trigger/trigger-registry.d.ts +2 -5
  18. package/dist/types/src/trigger/trigger-registry.d.ts.map +1 -1
  19. package/dist/types/src/trigger/type/subscription-trigger.d.ts.map +1 -1
  20. package/dist/types/src/trigger/type/timer-trigger.d.ts.map +1 -1
  21. package/dist/types/src/trigger/type/webhook-trigger.d.ts.map +1 -1
  22. package/dist/types/src/trigger/type/websocket-trigger.d.ts.map +1 -1
  23. package/dist/types/src/types.d.ts +15 -3
  24. package/dist/types/src/types.d.ts.map +1 -1
  25. package/package.json +14 -14
  26. package/schema/functions.json +5 -0
  27. package/src/runtime/dev-server.ts +3 -3
  28. package/src/runtime/scheduler.test.ts +14 -9
  29. package/src/runtime/scheduler.ts +7 -7
  30. package/src/testing/functions-integration.test.ts +1 -0
  31. package/src/testing/setup.ts +8 -10
  32. package/src/trigger/trigger-registry.test.ts +30 -13
  33. package/src/trigger/trigger-registry.ts +49 -39
  34. package/src/trigger/type/subscription-trigger.ts +13 -7
  35. package/src/trigger/type/timer-trigger.ts +4 -3
  36. package/src/trigger/type/webhook-trigger.ts +3 -2
  37. package/src/trigger/type/websocket-trigger.ts +4 -3
  38. package/src/types.ts +6 -3
@@ -5,7 +5,7 @@ import {
5
5
  FunctionManifestSchema,
6
6
  FunctionTrigger,
7
7
  __require
8
- } from "./chunk-P3HPDHNI.mjs";
8
+ } from "./chunk-4D4I3YMJ.mjs";
9
9
 
10
10
  // packages/core/functions/src/function/function-registry.ts
11
11
  import { Event } from "@dxos/async";
@@ -161,7 +161,7 @@ var DevServer = class {
161
161
  added
162
162
  }, {
163
163
  F: __dxlog_file3,
164
- L: 52,
164
+ L: 53,
165
165
  S: this,
166
166
  C: (f, a) => f(...a)
167
167
  });
@@ -175,7 +175,7 @@ var DevServer = class {
175
175
  get endpoint() {
176
176
  invariant(this._port, void 0, {
177
177
  F: __dxlog_file3,
178
- L: 63,
178
+ L: 64,
179
179
  S: this,
180
180
  A: [
181
181
  "this._port",
@@ -193,7 +193,7 @@ var DevServer = class {
193
193
  async start() {
194
194
  invariant(!this._server, void 0, {
195
195
  F: __dxlog_file3,
196
- L: 76,
196
+ L: 77,
197
197
  S: this,
198
198
  A: [
199
199
  "!this._server",
@@ -202,7 +202,7 @@ var DevServer = class {
202
202
  });
203
203
  log3.info("starting...", void 0, {
204
204
  F: __dxlog_file3,
205
- L: 77,
205
+ L: 78,
206
206
  S: this,
207
207
  C: (f, a) => f(...a)
208
208
  });
@@ -216,7 +216,7 @@ var DevServer = class {
216
216
  path: path2
217
217
  }, {
218
218
  F: __dxlog_file3,
219
- L: 87,
219
+ L: 88,
220
220
  S: this,
221
221
  C: (f, a) => f(...a)
222
222
  });
@@ -229,7 +229,7 @@ var DevServer = class {
229
229
  } catch (err) {
230
230
  log3.catch(err, void 0, {
231
231
  F: __dxlog_file3,
232
- L: 97,
232
+ L: 98,
233
233
  S: this,
234
234
  C: (f, a) => f(...a)
235
235
  });
@@ -254,7 +254,7 @@ var DevServer = class {
254
254
  endpoint
255
255
  }, {
256
256
  F: __dxlog_file3,
257
- L: 112,
257
+ L: 113,
258
258
  S: this,
259
259
  C: (f, a) => f(...a)
260
260
  });
@@ -269,7 +269,7 @@ var DevServer = class {
269
269
  port: this._port
270
270
  }, {
271
271
  F: __dxlog_file3,
272
- L: 123,
272
+ L: 124,
273
273
  S: this,
274
274
  C: (f, a) => f(...a)
275
275
  });
@@ -277,7 +277,7 @@ var DevServer = class {
277
277
  async stop() {
278
278
  invariant(this._server, void 0, {
279
279
  F: __dxlog_file3,
280
- L: 127,
280
+ L: 128,
281
281
  S: this,
282
282
  A: [
283
283
  "this._server",
@@ -286,7 +286,7 @@ var DevServer = class {
286
286
  });
287
287
  log3.info("stopping...", void 0, {
288
288
  F: __dxlog_file3,
289
- L: 128,
289
+ L: 129,
290
290
  S: this,
291
291
  C: (f, a) => f(...a)
292
292
  });
@@ -294,7 +294,7 @@ var DevServer = class {
294
294
  this._server.close(async () => {
295
295
  log3.info("server stopped", void 0, {
296
296
  F: __dxlog_file3,
297
- L: 132,
297
+ L: 133,
298
298
  S: this,
299
299
  C: (f, a) => f(...a)
300
300
  });
@@ -302,7 +302,7 @@ var DevServer = class {
302
302
  if (this._functionServiceRegistration) {
303
303
  invariant(this._client.services.services.FunctionRegistryService, void 0, {
304
304
  F: __dxlog_file3,
305
- L: 135,
305
+ L: 136,
306
306
  S: this,
307
307
  A: [
308
308
  "this._client.services.services.FunctionRegistryService",
@@ -316,7 +316,7 @@ var DevServer = class {
316
316
  registrationId: this._functionServiceRegistration
317
317
  }, {
318
318
  F: __dxlog_file3,
319
- L: 140,
319
+ L: 141,
320
320
  S: this,
321
321
  C: (f, a) => f(...a)
322
322
  });
@@ -333,7 +333,7 @@ var DevServer = class {
333
333
  this._server = void 0;
334
334
  log3.info("stopped", void 0, {
335
335
  F: __dxlog_file3,
336
- L: 154,
336
+ L: 155,
337
337
  S: this,
338
338
  C: (f, a) => f(...a)
339
339
  });
@@ -349,7 +349,7 @@ var DevServer = class {
349
349
  force
350
350
  }, {
351
351
  F: __dxlog_file3,
352
- L: 163,
352
+ L: 164,
353
353
  S: this,
354
354
  C: (f, a) => f(...a)
355
355
  });
@@ -370,7 +370,7 @@ var DevServer = class {
370
370
  async _safeUpdateRegistration() {
371
371
  invariant(this._functionServiceRegistration, void 0, {
372
372
  F: __dxlog_file3,
373
- L: 185,
373
+ L: 186,
374
374
  S: this,
375
375
  A: [
376
376
  "this._functionServiceRegistration",
@@ -385,10 +385,10 @@ var DevServer = class {
385
385
  route
386
386
  }))
387
387
  });
388
- } catch (e) {
389
- log3.catch(e, void 0, {
388
+ } catch (err) {
389
+ log3.catch(err, void 0, {
390
390
  F: __dxlog_file3,
391
- L: 192,
391
+ L: 193,
392
392
  S: this,
393
393
  C: (f, a) => f(...a)
394
394
  });
@@ -405,7 +405,7 @@ var DevServer = class {
405
405
  path: path2
406
406
  }, {
407
407
  F: __dxlog_file3,
408
- L: 203,
408
+ L: 204,
409
409
  S: this,
410
410
  C: (f, a) => f(...a)
411
411
  });
@@ -419,7 +419,7 @@ var DevServer = class {
419
419
  duration: Date.now() - now
420
420
  }, {
421
421
  F: __dxlog_file3,
422
- L: 206,
422
+ L: 207,
423
423
  S: this,
424
424
  C: (f, a) => f(...a)
425
425
  });
@@ -430,7 +430,7 @@ var DevServer = class {
430
430
  const { handler } = this._handlers[path2] ?? {};
431
431
  invariant(handler, `invalid path: ${path2}`, {
432
432
  F: __dxlog_file3,
433
- L: 213,
433
+ L: 214,
434
434
  S: this,
435
435
  A: [
436
436
  "handler",
@@ -502,11 +502,11 @@ var Scheduler = class {
502
502
  });
503
503
  await Promise.all(mountTasks).catch(log4.catch);
504
504
  }
505
- async activate(space, functions, fnTrigger) {
506
- const definition = functions.find((def) => def.uri === fnTrigger.function);
505
+ async activate(space, functions, trigger) {
506
+ const definition = functions.find((def) => def.uri === trigger.function);
507
507
  if (!definition) {
508
508
  log4.info("function is not found for trigger", {
509
- fnTrigger
509
+ trigger
510
510
  }, {
511
511
  F: __dxlog_file4,
512
512
  L: 78,
@@ -515,9 +515,7 @@ var Scheduler = class {
515
515
  });
516
516
  return;
517
517
  }
518
- await this.triggers.activate({
519
- space
520
- }, fnTrigger, async (args) => {
518
+ await this.triggers.activate(space, trigger, async (args) => {
521
519
  const mutex = this._functionUriToCallMutex.get(definition.uri) ?? new Mutex();
522
520
  this._functionUriToCallMutex.set(definition.uri, mutex);
523
521
  log4.info("function triggered, waiting for mutex", {
@@ -537,8 +535,8 @@ var Scheduler = class {
537
535
  S: this,
538
536
  C: (f, a) => f(...a)
539
537
  });
540
- return this._execFunction(definition, fnTrigger, {
541
- meta: fnTrigger.meta,
538
+ return this._execFunction(definition, trigger, {
539
+ meta: trigger.meta ?? {},
542
540
  data: {
543
541
  ...args,
544
542
  spaceKey: space.key
@@ -548,7 +546,7 @@ var Scheduler = class {
548
546
  });
549
547
  log4("activated trigger", {
550
548
  space: space.key,
551
- trigger: fnTrigger
549
+ trigger
552
550
  }, {
553
551
  F: __dxlog_file4,
554
552
  L: 96,
@@ -629,19 +627,20 @@ var createContext2 = () => new Context2({
629
627
  import { Event as Event3 } from "@dxos/async";
630
628
  import { create as create2, Filter as Filter3, getMeta } from "@dxos/client/echo";
631
629
  import { Context as Context3, Resource as Resource2 } from "@dxos/context";
632
- import { ECHO_ATTR_META, foreignKey, foreignKeyEquals, splitMeta } from "@dxos/echo-schema";
630
+ import { compareForeignKeys, ECHO_ATTR_META, foreignKey } from "@dxos/echo-schema";
633
631
  import { invariant as invariant2 } from "@dxos/invariant";
634
632
  import { PublicKey as PublicKey3 } from "@dxos/keys";
635
633
  import { log as log9 } from "@dxos/log";
636
- import { ComplexMap as ComplexMap2, diff as diff2, intersection } from "@dxos/util";
634
+ import { ComplexMap as ComplexMap2, diff as diff2 } from "@dxos/util";
637
635
 
638
636
  // packages/core/functions/src/trigger/type/subscription-trigger.ts
639
637
  import { TextV0Type } from "@braneframe/types";
640
638
  import { debounce, UpdateScheduler } from "@dxos/async";
641
- import { createSubscription, Filter as Filter2, getAutomergeObjectCore } from "@dxos/echo-db";
639
+ import { Filter as Filter2 } from "@dxos/client/echo";
640
+ import { createSubscription, getAutomergeObjectCore } from "@dxos/echo-db";
642
641
  import { log as log5 } from "@dxos/log";
643
642
  var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/core/functions/src/trigger/type/subscription-trigger.ts";
644
- var createSubscriptionTrigger = async (ctx, triggerCtx, spec, callback) => {
643
+ var createSubscriptionTrigger = async (ctx, space, spec, callback) => {
645
644
  const objectIds = /* @__PURE__ */ new Set();
646
645
  const task = new UpdateScheduler(ctx, async () => {
647
646
  if (objectIds.size > 0) {
@@ -669,7 +668,7 @@ var createSubscriptionTrigger = async (ctx, triggerCtx, spec, callback) => {
669
668
  updated: updated.length
670
669
  }, {
671
670
  F: __dxlog_file5,
672
- L: 45,
671
+ L: 47,
673
672
  S: void 0,
674
673
  C: (f, a) => f(...a)
675
674
  });
@@ -679,16 +678,16 @@ var createSubscriptionTrigger = async (ctx, triggerCtx, spec, callback) => {
679
678
  subscriptions.push(() => subscription.unsubscribe());
680
679
  const { filter, options: { deep, delay } = {} } = spec;
681
680
  const update = ({ objects }) => {
681
+ log5.info("update", {
682
+ objects: objects.length
683
+ }, {
684
+ F: __dxlog_file5,
685
+ L: 57,
686
+ S: void 0,
687
+ C: (f, a) => f(...a)
688
+ });
682
689
  subscription.update(objects);
683
690
  if (deep) {
684
- log5.info("update", {
685
- objects: objects.length
686
- }, {
687
- F: __dxlog_file5,
688
- L: 59,
689
- S: void 0,
690
- C: (f, a) => f(...a)
691
- });
692
691
  for (const object of objects) {
693
692
  const content = object.content;
694
693
  if (content instanceof TextV0Type) {
@@ -699,8 +698,18 @@ var createSubscriptionTrigger = async (ctx, triggerCtx, spec, callback) => {
699
698
  }
700
699
  }
701
700
  };
702
- const query = triggerCtx.space.db.query(Filter2.or(filter.map(({ type, props }) => Filter2.typename(type, props))));
703
- subscriptions.push(query.subscribe(delay ? debounce(update, delay) : update));
701
+ log5.info("subscription", {
702
+ filter
703
+ }, {
704
+ F: __dxlog_file5,
705
+ L: 76,
706
+ S: void 0,
707
+ C: (f, a) => f(...a)
708
+ });
709
+ if (filter) {
710
+ const query = space.db.query(Filter2.typename(filter[0].type, filter[0].props));
711
+ subscriptions.push(query.subscribe(delay ? debounce(update, delay) : update));
712
+ }
704
713
  ctx.onDispose(() => {
705
714
  subscriptions.forEach((unsubscribe) => unsubscribe());
706
715
  });
@@ -711,7 +720,7 @@ import { CronJob } from "cron";
711
720
  import { DeferredTask } from "@dxos/async";
712
721
  import { log as log6 } from "@dxos/log";
713
722
  var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/core/functions/src/trigger/type/timer-trigger.ts";
714
- var createTimerTrigger = async (ctx, triggerContext, spec, callback) => {
723
+ var createTimerTrigger = async (ctx, space, spec, callback) => {
715
724
  const task = new DeferredTask(ctx, async () => {
716
725
  await callback({});
717
726
  });
@@ -726,12 +735,12 @@ var createTimerTrigger = async (ctx, triggerContext, spec, callback) => {
726
735
  last = now;
727
736
  run++;
728
737
  log6.info("tick", {
729
- space: triggerContext.space.key.truncate(),
738
+ space: space.key.truncate(),
730
739
  count: run,
731
740
  delta
732
741
  }, {
733
742
  F: __dxlog_file6,
734
- L: 37,
743
+ L: 38,
735
744
  S: void 0,
736
745
  C: (f, a) => f(...a)
737
746
  });
@@ -747,7 +756,7 @@ import { getPort as getPort2 } from "get-port-please";
747
756
  import http from "@dxos/node-std/http";
748
757
  import { log as log7 } from "@dxos/log";
749
758
  var __dxlog_file7 = "/home/runner/work/dxos/dxos/packages/core/functions/src/trigger/type/webhook-trigger.ts";
750
- var createWebhookTrigger = async (ctx, _, spec, callback) => {
759
+ var createWebhookTrigger = async (ctx, space, spec, callback) => {
751
760
  const server = http.createServer(async (req, res) => {
752
761
  if (req.method !== spec.method) {
753
762
  res.statusCode = 405;
@@ -764,7 +773,7 @@ var createWebhookTrigger = async (ctx, _, spec, callback) => {
764
773
  port
765
774
  }, {
766
775
  F: __dxlog_file7,
767
- L: 40,
776
+ L: 41,
768
777
  S: void 0,
769
778
  C: (f, a) => f(...a)
770
779
  });
@@ -780,7 +789,7 @@ import WebSocket from "ws";
780
789
  import { sleep, Trigger as Trigger2 } from "@dxos/async";
781
790
  import { log as log8 } from "@dxos/log";
782
791
  var __dxlog_file8 = "/home/runner/work/dxos/dxos/packages/core/functions/src/trigger/type/websocket-trigger.ts";
783
- var createWebsocketTrigger = async (ctx, triggerCtx, spec, callback, options = {
792
+ var createWebsocketTrigger = async (ctx, space, spec, callback, options = {
784
793
  retryDelay: 2,
785
794
  maxAttempts: 5
786
795
  }) => {
@@ -795,7 +804,7 @@ var createWebsocketTrigger = async (ctx, triggerCtx, spec, callback, options = {
795
804
  url
796
805
  }, {
797
806
  F: __dxlog_file8,
798
- L: 39,
807
+ L: 40,
799
808
  S: void 0,
800
809
  C: (f, a) => f(...a)
801
810
  });
@@ -810,7 +819,7 @@ var createWebsocketTrigger = async (ctx, triggerCtx, spec, callback, options = {
810
819
  code: event.code
811
820
  }, {
812
821
  F: __dxlog_file8,
813
- L: 48,
822
+ L: 49,
814
823
  S: void 0,
815
824
  C: (f, a) => f(...a)
816
825
  });
@@ -820,11 +829,11 @@ var createWebsocketTrigger = async (ctx, triggerCtx, spec, callback, options = {
820
829
  url
821
830
  }, {
822
831
  F: __dxlog_file8,
823
- L: 53,
832
+ L: 54,
824
833
  S: void 0,
825
834
  C: (f, a) => f(...a)
826
835
  });
827
- await createWebsocketTrigger(ctx, triggerCtx, spec, callback, options);
836
+ await createWebsocketTrigger(ctx, space, spec, callback, options);
828
837
  }, options.retryDelay * 1e3);
829
838
  }
830
839
  open.wake(false);
@@ -834,7 +843,7 @@ var createWebsocketTrigger = async (ctx, triggerCtx, spec, callback, options = {
834
843
  url
835
844
  }, {
836
845
  F: __dxlog_file8,
837
- L: 62,
846
+ L: 63,
838
847
  S: void 0,
839
848
  C: (f, a) => f(...a)
840
849
  });
@@ -843,7 +852,7 @@ var createWebsocketTrigger = async (ctx, triggerCtx, spec, callback, options = {
843
852
  try {
844
853
  log8.info("message", void 0, {
845
854
  F: __dxlog_file8,
846
- L: 67,
855
+ L: 68,
847
856
  S: void 0,
848
857
  C: (f, a) => f(...a)
849
858
  });
@@ -856,7 +865,7 @@ var createWebsocketTrigger = async (ctx, triggerCtx, spec, callback, options = {
856
865
  url
857
866
  }, {
858
867
  F: __dxlog_file8,
859
- L: 71,
868
+ L: 72,
860
869
  S: void 0,
861
870
  C: (f, a) => f(...a)
862
871
  });
@@ -873,7 +882,7 @@ var createWebsocketTrigger = async (ctx, triggerCtx, spec, callback, options = {
873
882
  attempt
874
883
  }, {
875
884
  F: __dxlog_file8,
876
- L: 82,
885
+ L: 83,
877
886
  S: void 0,
878
887
  C: (f, a) => f(...a)
879
888
  });
@@ -909,24 +918,24 @@ var TriggerRegistry = class extends Resource2 {
909
918
  getInactiveTriggers(space) {
910
919
  return this._getTriggers(space, (t) => t.activationCtx == null);
911
920
  }
912
- async activate(triggerCtx, trigger, callback) {
921
+ async activate(space, trigger, callback) {
913
922
  log9("activate", {
914
- space: triggerCtx.space.key,
923
+ space: space.key,
915
924
  trigger
916
925
  }, {
917
926
  F: __dxlog_file9,
918
- L: 74,
927
+ L: 72,
919
928
  S: this,
920
929
  C: (f, a) => f(...a)
921
930
  });
922
931
  const activationCtx = new Context3({
923
- name: `trigger_${trigger.function}`
932
+ name: `FunctionTrigger-${trigger.function}`
924
933
  });
925
934
  this._ctx.onDispose(() => activationCtx.dispose());
926
- const registeredTrigger = this._triggersBySpaceKey.get(triggerCtx.space.key)?.find((reg) => reg.trigger.id === trigger.id);
935
+ const registeredTrigger = this._triggersBySpaceKey.get(space.key)?.find((reg) => reg.trigger.id === trigger.id);
927
936
  invariant2(registeredTrigger, `Trigger is not registered: ${trigger.function}`, {
928
937
  F: __dxlog_file9,
929
- L: 80,
938
+ L: 77,
930
939
  S: this,
931
940
  A: [
932
941
  "registeredTrigger",
@@ -936,7 +945,7 @@ var TriggerRegistry = class extends Resource2 {
936
945
  registeredTrigger.activationCtx = activationCtx;
937
946
  try {
938
947
  const options = this._options?.[trigger.spec.type];
939
- await triggerHandlers[trigger.spec.type](activationCtx, triggerCtx, trigger.spec, callback, options);
948
+ await triggerHandlers[trigger.spec.type](activationCtx, space, trigger.spec, callback, options);
940
949
  } catch (err) {
941
950
  delete registeredTrigger.activationCtx;
942
951
  throw err;
@@ -950,7 +959,7 @@ var TriggerRegistry = class extends Resource2 {
950
959
  space: space.key
951
960
  }, {
952
961
  F: __dxlog_file9,
953
- L: 96,
962
+ L: 93,
954
963
  S: this,
955
964
  C: (f, a) => f(...a)
956
965
  });
@@ -960,25 +969,42 @@ var TriggerRegistry = class extends Resource2 {
960
969
  if (!space.db.graph.runtimeSchemaRegistry.hasSchema(FunctionTrigger)) {
961
970
  space.db.graph.runtimeSchemaRegistry.registerSchema(FunctionTrigger);
962
971
  }
963
- const { objects: existing } = await space.db.query(Filter3.schema(FunctionTrigger)).run();
964
- const { added } = diff2(existing, manifest.triggers, (a, b) => {
965
- const keys = b[ECHO_ATTR_META]?.keys ?? [
966
- foreignKey("manifest", [
967
- b.function,
968
- b.spec.type
969
- ].join("-"))
970
- ];
971
- return intersection(getMeta(a)?.keys ?? [], keys, foreignKeyEquals).length > 0;
972
+ const manifestTriggers = manifest.triggers.map((trigger) => {
973
+ let keys = trigger[ECHO_ATTR_META]?.keys;
974
+ delete trigger[ECHO_ATTR_META];
975
+ if (!keys?.length) {
976
+ keys = [
977
+ foreignKey("manifest", [
978
+ trigger.function,
979
+ trigger.spec.type
980
+ ].join(":"))
981
+ ];
982
+ }
983
+ return create2(FunctionTrigger, trigger, {
984
+ keys
985
+ });
972
986
  });
987
+ const { objects: existing } = await space.db.query(Filter3.schema(FunctionTrigger)).run();
988
+ const { added } = diff2(existing, manifestTriggers, compareForeignKeys);
973
989
  added.forEach((trigger) => {
974
- const { meta, object } = splitMeta(trigger);
975
- space.db.add(create2(FunctionTrigger, object, meta));
990
+ space.db.add(trigger);
991
+ log9.info("added", {
992
+ meta: getMeta(trigger)
993
+ }, {
994
+ F: __dxlog_file9,
995
+ L: 120,
996
+ S: this,
997
+ C: (f, a) => f(...a)
998
+ });
976
999
  });
1000
+ if (added.length > 0) {
1001
+ await space.db.flush();
1002
+ }
977
1003
  }
978
1004
  async _open() {
979
1005
  log9.info("open...", void 0, {
980
1006
  F: __dxlog_file9,
981
- L: 121,
1007
+ L: 129,
982
1008
  S: this,
983
1009
  C: (f, a) => f(...a)
984
1010
  });
@@ -993,78 +1019,89 @@ var TriggerRegistry = class extends Resource2 {
993
1019
  if (this._ctx.disposed) {
994
1020
  break;
995
1021
  }
996
- this._ctx.onDispose(space.db.query(Filter3.schema(FunctionTrigger)).subscribe(async (triggers) => {
1022
+ this._ctx.onDispose(space.db.query(Filter3.schema(FunctionTrigger)).subscribe(async ({ objects: current }) => {
997
1023
  log9.info("update", {
998
1024
  space: space.key,
999
- triggers: triggers.objects.length
1025
+ registered: registered.length,
1026
+ current: current.length
1000
1027
  }, {
1001
1028
  F: __dxlog_file9,
1002
- L: 138,
1029
+ L: 146,
1003
1030
  S: this,
1004
1031
  C: (f, a) => f(...a)
1005
1032
  });
1006
- await this._handleRemovedTriggers(space, triggers.objects, registered);
1007
- this._handleNewTriggers(space, triggers.objects, registered);
1033
+ await this._handleRemovedTriggers(space, current, registered);
1034
+ this._handleNewTriggers(space, current, registered);
1008
1035
  }));
1009
1036
  }
1010
1037
  });
1011
1038
  this._ctx.onDispose(() => spaceListSubscription.unsubscribe());
1039
+ log9.info("opened", void 0, {
1040
+ F: __dxlog_file9,
1041
+ L: 155,
1042
+ S: this,
1043
+ C: (f, a) => f(...a)
1044
+ });
1012
1045
  }
1013
1046
  async _close(_) {
1014
1047
  log9.info("close...", void 0, {
1015
1048
  F: __dxlog_file9,
1016
- L: 150,
1049
+ L: 159,
1017
1050
  S: this,
1018
1051
  C: (f, a) => f(...a)
1019
1052
  });
1020
1053
  this._triggersBySpaceKey.clear();
1054
+ log9.info("closed", void 0, {
1055
+ F: __dxlog_file9,
1056
+ L: 161,
1057
+ S: this,
1058
+ C: (f, a) => f(...a)
1059
+ });
1021
1060
  }
1022
- _handleNewTriggers(space, allTriggers, registered) {
1023
- const newTriggers = allTriggers.filter((candidate) => {
1024
- return registered.find((reg) => reg.trigger.id === candidate.id) == null;
1061
+ _handleNewTriggers(space, current, registered) {
1062
+ const added = current.filter((candidate) => {
1063
+ return candidate.enabled && registered.find((reg) => reg.trigger.id === candidate.id) == null;
1025
1064
  });
1026
- if (newTriggers.length > 0) {
1027
- const newRegisteredTriggers = newTriggers.map((trigger) => ({
1065
+ if (added.length > 0) {
1066
+ const newRegisteredTriggers = added.map((trigger) => ({
1028
1067
  trigger
1029
1068
  }));
1030
1069
  registered.push(...newRegisteredTriggers);
1031
1070
  log9.info("added", () => ({
1032
1071
  spaceKey: space.key,
1033
- triggers: newTriggers.map((trigger) => trigger.function)
1072
+ triggers: added.map((trigger) => trigger.function)
1034
1073
  }), {
1035
1074
  F: __dxlog_file9,
1036
- L: 162,
1075
+ L: 172,
1037
1076
  S: this,
1038
1077
  C: (f, a) => f(...a)
1039
1078
  });
1040
1079
  this.registered.emit({
1041
1080
  space,
1042
- triggers: newTriggers
1081
+ triggers: added
1043
1082
  });
1044
1083
  }
1045
1084
  }
1046
- async _handleRemovedTriggers(space, allTriggers, registered) {
1085
+ async _handleRemovedTriggers(space, current, registered) {
1047
1086
  const removed = [];
1048
1087
  for (let i = registered.length - 1; i >= 0; i--) {
1049
- const wasRemoved = allTriggers.find((trigger) => trigger.id === registered[i].trigger.id) == null;
1088
+ const wasRemoved = current.filter((trigger) => trigger.enabled).find((trigger) => trigger.id === registered[i].trigger.id) == null;
1050
1089
  if (wasRemoved) {
1051
- if (removed.length) {
1052
- log9.info("removed", () => ({
1053
- spaceKey: space.key,
1054
- triggers: removed.map((trigger) => trigger.function)
1055
- }), {
1056
- F: __dxlog_file9,
1057
- L: 181,
1058
- S: this,
1059
- C: (f, a) => f(...a)
1060
- });
1061
- }
1062
1090
  const unregistered = registered.splice(i, 1)[0];
1063
1091
  await unregistered.activationCtx?.dispose();
1064
1092
  removed.push(unregistered.trigger);
1065
1093
  }
1066
1094
  }
1067
1095
  if (removed.length > 0) {
1096
+ log9.info("removed", () => ({
1097
+ spaceKey: space.key,
1098
+ triggers: removed.map((trigger) => trigger.function)
1099
+ }), {
1100
+ F: __dxlog_file9,
1101
+ L: 198,
1102
+ S: this,
1103
+ C: (f, a) => f(...a)
1104
+ });
1068
1105
  this.removed.emit({
1069
1106
  space,
1070
1107
  triggers: removed