@reventlessdev/reventless-core 3.0.0-alpha.174 → 3.0.0-alpha.176

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 (88) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/package.json +7 -7
  3. package/src/ComponentType.res +4 -4
  4. package/src/ComponentType.res.mjs +6 -6
  5. package/src/RequestContext.res +45 -1
  6. package/src/RequestContext.res.mjs +12 -2
  7. package/src/ResourceAttribution.res +133 -0
  8. package/src/ResourceAttribution.res.mjs +96 -0
  9. package/src/adapter/Runtime/AggregateRuntime_Builder_Common.res +24 -5
  10. package/src/adapter/Runtime/AggregateRuntime_Builder_Common.res.mjs +9 -3
  11. package/src/adapter/Runtime/AggregateRuntime_Builder_Micro.res +6 -0
  12. package/src/adapter/Runtime/AggregateRuntime_Builder_Micro.res.mjs +3 -3
  13. package/src/adapter/Runtime/EventCollectorRuntime_Builder_PerEventCollector.res +6 -1
  14. package/src/adapter/Runtime/EventCollectorRuntime_Builder_PerEventCollector.res.mjs +3 -1
  15. package/src/adapter/Runtime/EventCollectorRuntime_Builder_Single.res +25 -7
  16. package/src/adapter/Runtime/EventCollectorRuntime_Builder_Single.res.mjs +11 -8
  17. package/src/adapter/Runtime/ExtensionPointRuntime_Builder_PerExtensionPoint.res +2 -0
  18. package/src/adapter/Runtime/ExtensionPointRuntime_Builder_PerExtensionPoint.res.mjs +1 -1
  19. package/src/adapter/Runtime/PluginRuntime_Builder_Micro.res +4 -0
  20. package/src/adapter/Runtime/PluginRuntime_Builder_Micro.res.mjs +2 -2
  21. package/src/adapter/Runtime/PluginRuntime_Builder_Single.res +4 -0
  22. package/src/adapter/Runtime/PluginRuntime_Builder_Single.res.mjs +2 -2
  23. package/src/adapter/Runtime/Runtime.res +49 -10
  24. package/src/adapter/Runtime/Runtime.res.mjs +22 -8
  25. package/src/admin/Platform_Admin.res +1 -1
  26. package/src/admin/Platform_Admin.res.mjs +8 -2
  27. package/src/components/Aggregate/Aggregate_Builder.res +10 -2
  28. package/src/components/Aggregate/Aggregate_Builder.res.mjs +8 -2
  29. package/src/components/AutomationSlice/AutomationSlice_Builder.res +12 -2
  30. package/src/components/AutomationSlice/AutomationSlice_Builder.res.mjs +8 -2
  31. package/src/components/CommandTopic/CommandTopic.res +5 -1
  32. package/src/components/CommandTopic/CommandTopic_Adapter.res +1 -0
  33. package/src/components/CommandTopic/CommandTopic_Builder.res +4 -4
  34. package/src/components/CommandTopic/CommandTopic_Builder.res.mjs +29 -30
  35. package/src/components/Counter/Counter_Builder.res +7 -1
  36. package/src/components/Counter/Counter_Builder.res.mjs +5 -2
  37. package/src/components/Dcb/Dcb_Builder.res +2 -2
  38. package/src/components/Dcb/Dcb_Builder.res.mjs +8 -2
  39. package/src/components/DcbEventLog/DcbEventLog_Builder.res +3 -0
  40. package/src/components/DcbEventLog/DcbEventLog_Builder.res.mjs +4 -1
  41. package/src/components/EventCollector/EventCollector.res +1 -0
  42. package/src/components/EventCollector/EventCollector_Adapter.res +1 -0
  43. package/src/components/EventCollector/EventCollector_Builder.res +4 -4
  44. package/src/components/EventCollector/EventCollector_Builder.res.mjs +2 -2
  45. package/src/components/EventLog/EventLog.res +5 -1
  46. package/src/components/EventLog/EventLog_Adapter.res +5 -1
  47. package/src/components/EventLog/EventLog_Builder.res +9 -4
  48. package/src/components/EventLog/EventLog_Builder.res.mjs +7 -8
  49. package/src/components/EventMapper/EventMapper_Builder.res +6 -1
  50. package/src/components/EventMapper/EventMapper_Builder.res.mjs +4 -1
  51. package/src/components/EventTopic/EventTopic.res +1 -0
  52. package/src/components/EventTopic/EventTopic_Adapter.res +1 -0
  53. package/src/components/EventTopic/EventTopic_Builder.res +4 -3
  54. package/src/components/EventTopic/EventTopic_Builder.res.mjs +2 -2
  55. package/src/components/ExtensionPoint/ExtensionPoint_Builder.res +11 -2
  56. package/src/components/ExtensionPoint/ExtensionPoint_Builder.res.mjs +8 -2
  57. package/src/components/InboundTranslationSlice/InboundTranslationSlice_Builder.res +6 -1
  58. package/src/components/InboundTranslationSlice/InboundTranslationSlice_Builder.res.mjs +4 -1
  59. package/src/components/OutboundTranslationSlice/OutboundTranslationSlice_Builder.res +12 -2
  60. package/src/components/OutboundTranslationSlice/OutboundTranslationSlice_Builder.res.mjs +8 -2
  61. package/src/components/QueryDb/QueryDb.res +1 -0
  62. package/src/components/QueryDb/QueryDb_Adapter.res +1 -0
  63. package/src/components/QueryDb/QueryDb_Builder.res +4 -3
  64. package/src/components/QueryDb/QueryDb_Builder.res.mjs +2 -2
  65. package/src/components/ReadModel/ReadModel_Builder.res +12 -2
  66. package/src/components/ReadModel/ReadModel_Builder.res.mjs +8 -2
  67. package/src/components/SideEffectHandler/SideEffectHandler_Builder.res +6 -1
  68. package/src/components/SideEffectHandler/SideEffectHandler_Builder.res.mjs +4 -1
  69. package/src/components/StateViewSlice/StateViewSlice_Builder.res +12 -2
  70. package/src/components/StateViewSlice/StateViewSlice_Builder.res.mjs +8 -2
  71. package/src/plugin/component/Plugin_Builder.res +8 -2
  72. package/src/plugin/component/Plugin_Builder.res.mjs +4 -1
  73. package/src/plugin/component/Plugin_Helpers.res +1 -1
  74. package/src/plugin/component/Plugin_Helpers.res.mjs +4 -1
  75. package/src/plugin/connect/PluginExtensionPoint_Plugin.res +26 -12
  76. package/src/plugin/connect/PluginExtensionPoint_Plugin.res.mjs +8 -8
  77. package/src/util/Interstack.res +1 -1
  78. package/src/util/Interstack.res.mjs +3 -3
  79. package/src/util/Interstack.resi +1 -1
  80. package/src/util/Util_StackRefs.res +2 -2
  81. package/src/util/Util_StackRefs.res.mjs +4 -4
  82. package/tests/ResourceAttributionTest.res +70 -0
  83. package/tests/aggregate/AggregateCacheTest.res +1 -1
  84. package/tests/aggregate/AggregateConflictTest.res +1 -1
  85. package/tests/aggregate/AggregateFixtures.res +1 -1
  86. package/tests/aggregate/AggregateSnapshotTest.res +1 -1
  87. package/tests/eventlog/EventLogFixtures.res +1 -1
  88. package/tests/logger/LogFormatTest.res +43 -0
@@ -57,35 +57,6 @@ function Make(Spec) {
57
57
  return allResults;
58
58
  });
59
59
  })), prim => prim.flat());
60
- let construct = (self, name) => {
61
- let opts_parent = Component$ReventlessCore.toPulumiResource(self);
62
- let opts = {
63
- parent: opts_parent
64
- };
65
- let name$1 = ComponentType$ReventlessCore.name(name, CommandTopic$ReventlessCore.componentType);
66
- let channel = Channel.make(name$1, opts);
67
- self.channel = channel;
68
- Component$ReventlessCore.setOperations(self, Pulumi.all([
69
- channel.publishJsons,
70
- channel.publishJsonsStream,
71
- channel.publishJsonsAndWait
72
- ]).apply(param => {
73
- let Ops = {
74
- publishJsons: param[0]
75
- };
76
- let Operations = CommandTopic_Operations$ReventlessCore.Make(Spec)(Ops);
77
- return {
78
- publish: Operations.publish,
79
- publishJsons: Operations.publishJsons,
80
- publishJsonsStream: param[1],
81
- publishJsonsAndWait: param[2]
82
- };
83
- }));
84
- let outputs = {
85
- resources: channel.resources
86
- };
87
- return Component$ReventlessCore.setOutputs(self, outputs);
88
- };
89
60
  let connect = (runtime, resources, commandTopic) => {
90
61
  let commandTopicResource = Component$ReventlessCore.toPulumiResource(commandTopic);
91
62
  let name = ComponentType$ReventlessCore.name(Stdlib_Option.getOr(commandTopicResource.__name, "Unnamed"), CommandTopic$ReventlessCore.componentType);
@@ -109,7 +80,35 @@ function Make(Spec) {
109
80
  let channel = commandTopic.channel;
110
81
  return channel.handleChannelEvent(filteringHandler);
111
82
  };
112
- let make = (name, opts) => Component$ReventlessCore.make(ComponentType$ReventlessCore.toString(CommandTopic$ReventlessCore.componentType), name, construct, opts);
83
+ let make = (name, owner, opts) => Component$ReventlessCore.make(ComponentType$ReventlessCore.toString(CommandTopic$ReventlessCore.componentType), name, (extra, extra$1) => {
84
+ let opts_parent = Component$ReventlessCore.toPulumiResource(extra);
85
+ let opts = {
86
+ parent: opts_parent
87
+ };
88
+ let name = ComponentType$ReventlessCore.name(extra$1, CommandTopic$ReventlessCore.componentType);
89
+ let channel = Channel.make(name, owner, opts);
90
+ extra.channel = channel;
91
+ Component$ReventlessCore.setOperations(extra, Pulumi.all([
92
+ channel.publishJsons,
93
+ channel.publishJsonsStream,
94
+ channel.publishJsonsAndWait
95
+ ]).apply(param => {
96
+ let Ops = {
97
+ publishJsons: param[0]
98
+ };
99
+ let Operations = CommandTopic_Operations$ReventlessCore.Make(Spec)(Ops);
100
+ return {
101
+ publish: Operations.publish,
102
+ publishJsons: Operations.publishJsons,
103
+ publishJsonsStream: param[1],
104
+ publishJsonsAndWait: param[2]
105
+ };
106
+ }));
107
+ let outputs = {
108
+ resources: channel.resources
109
+ };
110
+ return Component$ReventlessCore.setOutputs(extra, outputs);
111
+ }, opts);
113
112
  return {
114
113
  Spec: Spec,
115
114
  connect: connect,
@@ -63,7 +63,13 @@ module Make = (
63
63
  ~ttl?,
64
64
  ~opts,
65
65
  )
66
- let countsDb = CountsDb.make(~api=Api.api(), ~apiRole=Api.apiRole(), ~ttl?, ~opts)
66
+ let countsDb = CountsDb.make(
67
+ ~api=Api.api(),
68
+ ~apiRole=Api.apiRole(),
69
+ ~ttl?,
70
+ ~owner={kind: ComponentType.Counter, name},
71
+ ~opts,
72
+ )
67
73
 
68
74
  let handler =
69
75
  countsDb
@@ -66,8 +66,11 @@ function Make(QueryDbStorage) {
66
66
  authorization: "AllowAuthenticated",
67
67
  visibility: "Public"
68
68
  })(QueryDbStorage)(QueryDb_Adapter$ReventlessCore.NoResolvers(QueryDbStorage));
69
- let referencesDb = ReferencesDb.make(Api.api(), Api.apiRole(), ttl$1, opts);
70
- let countsDb = CountsDb.make(Api.api(), Api.apiRole(), ttl$1, opts);
69
+ let referencesDb = ReferencesDb.make(Api.api(), Api.apiRole(), ttl$1, undefined, opts);
70
+ let countsDb = CountsDb.make(Api.api(), Api.apiRole(), ttl$1, {
71
+ kind: "Counter",
72
+ name: extra$1
73
+ }, opts);
71
74
  let handler = Component$ReventlessCore.operations(countsDb).apply(param => {
72
75
  let Callback = Counter_Callback$ReventlessCore.Make({
73
76
  name: extra$1,
@@ -353,7 +353,7 @@ module Make = (
353
353
  DcbCommandTopicSpec,
354
354
  DcbCommandTopicChannel,
355
355
  )
356
- let dcbCommandTopic = DcbCommandTopic.make(~name=`${name}Dcb`, ~opts)
356
+ let dcbCommandTopic = DcbCommandTopic.make(~name=`${name}Dcb`, ~owner={kind: ComponentType.Plugin, name}, ~opts)
357
357
 
358
358
  // Notify platform hook that DCB CommandTopic was created (AWS extracts SQS queue URL)
359
359
  HooksConfig.hooks.onDcbCommandTopicCreated->Option.forEach(hook =>
@@ -377,7 +377,7 @@ module Make = (
377
377
  DcbCommandTopicChannelAsync,
378
378
  )
379
379
  let asyncDcbCommandTopicOpt = if asyncSlices->Array.length > 0 {
380
- let t = DcbAsyncCommandTopic.make(~name=`${name}DcbAsync`, ~opts)
380
+ let t = DcbAsyncCommandTopic.make(~name=`${name}DcbAsync`, ~owner={kind: ComponentType.Plugin, name}, ~opts)
381
381
  HooksConfig.hooks.onDcbCommandTopicCreated->Option.forEach(hook => hook(t->Obj.magic))
382
382
  Some(t)
383
383
  } else {
@@ -190,7 +190,10 @@ function Make(DcbEventLogStorage) {
190
190
  name: childName,
191
191
  commandSchema: S.json
192
192
  })(DcbCommandTopicChannel);
193
- let dcbCommandTopic = DcbCommandTopic.make(name + `Dcb`, opts);
193
+ let dcbCommandTopic = DcbCommandTopic.make(name + `Dcb`, {
194
+ kind: "Plugin",
195
+ name: name
196
+ }, opts);
194
197
  Stdlib_Option.forEach(HooksConfig.hooks.onDcbCommandTopicCreated, hook => hook(dcbCommandTopic));
195
198
  let publishJsons = Component$ReventlessCore.operations(dcbCommandTopic).apply(ops => ops.publishJsons);
196
199
  let name$1 = childName + "Async";
@@ -201,7 +204,10 @@ function Make(DcbEventLogStorage) {
201
204
  })(DcbCommandTopicChannelAsync);
202
205
  let asyncDcbCommandTopicOpt;
203
206
  if (asyncSlices.length !== 0) {
204
- let t = DcbAsyncCommandTopic.make(name + `DcbAsync`, opts);
207
+ let t = DcbAsyncCommandTopic.make(name + `DcbAsync`, {
208
+ kind: "Plugin",
209
+ name: name
210
+ }, opts);
205
211
  Stdlib_Option.forEach(HooksConfig.hooks.onDcbCommandTopicCreated, hook => hook(t));
206
212
  asyncDcbCommandTopicOpt = Primitive_option.some(t);
207
213
  } else {
@@ -28,6 +28,9 @@ module Make = (
28
28
  let eventTopic = SpecificEventTopic.make(
29
29
  ~name,
30
30
  ~storageResources=storage.resources,
31
+ // The DCB event log is shared across the plugin's slices, so the plugin
32
+ // owns it — not any one component.
33
+ ~owner={kind: ComponentType.Plugin, name},
31
34
  ~opts=opts->Util.Pulumi.ComponentResourceOptions.ofCustomResourceOptions,
32
35
  )
33
36
 
@@ -26,7 +26,10 @@ function Make(Storage) {
26
26
  name: "DcbEventLog",
27
27
  eventSchema: S.json
28
28
  })(EventTopicPublisher);
29
- let eventTopic = SpecificEventTopic.make(extra$1, storage.resources, Util_Pulumi$ReventlessCore.ComponentResourceOptions.ofCustomResourceOptions(opts));
29
+ let eventTopic = SpecificEventTopic.make(extra$1, storage.resources, {
30
+ kind: "Plugin",
31
+ name: extra$1
32
+ }, Util_Pulumi$ReventlessCore.ComponentResourceOptions.ofCustomResourceOptions(opts));
30
33
  Component$ReventlessCore.setOperations(extra, Pulumi.all([
31
34
  storage.operations,
32
35
  Component$ReventlessCore.operations(eventTopic)
@@ -29,6 +29,7 @@ module type T = {
29
29
  let make: (
30
30
  ~name: string,
31
31
  ~eventTopics: EventTopic.allOutputs,
32
+ ~owner: ResourceAttribution.owner=?,
32
33
  ~opts: Pulumi.ComponentResource.options,
33
34
  ) => component
34
35
  }
@@ -23,6 +23,7 @@ type connect<'callbackEvent, 'context, 'channelParts, 'runtimeParts> = (
23
23
  type channelMaker<'callbackEvent, 'context, 'channelParts> = (
24
24
  ~name: string,
25
25
  ~eventTopics: EventTopic.allOutputs,
26
+ ~owner: option<ResourceAttribution.owner>,
26
27
  ~opts: Pulumi.ComponentResource.options,
27
28
  ) => channel<'callbackEvent, 'context, 'channelParts>
28
29
 
@@ -30,11 +30,11 @@ module Make = (
30
30
  type callbackEvent = Channel.callbackEvent
31
31
  type runtimeParts = RuntimeEnvironment.parts
32
32
 
33
- let construct = (~eventTopics, self, name) => {
33
+ let construct = (~eventTopics, ~owner=?, self, name) => {
34
34
  let opts = {Pulumi.ComponentResource.parent: self->Component.toPulumiResource}
35
35
  let name = name->ComponentType.name(EventCollector.componentType)
36
36
 
37
- let channel = Channel.make(~name, ~eventTopics, ~opts)
37
+ let channel = Channel.make(~name, ~eventTopics, ~owner, ~opts)
38
38
  self->EventCollector_Adapter.setChannel(channel)
39
39
 
40
40
  self->Component.setOperations(
@@ -81,11 +81,11 @@ module Make = (
81
81
  channel.handleChannelEvent(jsonEventsHandler)
82
82
  }
83
83
 
84
- let make = (~name, ~eventTopics, ~opts): EventCollector.component =>
84
+ let make = (~name, ~eventTopics, ~owner=?, ~opts): EventCollector.component =>
85
85
  Component.make(
86
86
  ~componentType=EventCollector.componentType->ComponentType.toString,
87
87
  ~name,
88
- ~construct=construct(~eventTopics, ...),
88
+ ~construct=construct(~eventTopics, ~owner?, ...),
89
89
  ~opts=Some(opts),
90
90
  )
91
91
  }
@@ -31,13 +31,13 @@ function Make(RuntimeEnvironment) {
31
31
  let channel = eventCollector.channel;
32
32
  return channel.handleChannelEvent(jsonEventsHandler);
33
33
  };
34
- let make = (name, eventTopics, opts) => Component$ReventlessCore.make(ComponentType$ReventlessCore.toString(EventCollector$ReventlessCore.componentType), name, (extra, extra$1) => {
34
+ let make = (name, eventTopics, owner, opts) => Component$ReventlessCore.make(ComponentType$ReventlessCore.toString(EventCollector$ReventlessCore.componentType), name, (extra, extra$1) => {
35
35
  let opts_parent = Component$ReventlessCore.toPulumiResource(extra);
36
36
  let opts = {
37
37
  parent: opts_parent
38
38
  };
39
39
  let name = ComponentType$ReventlessCore.name(extra$1, EventCollector$ReventlessCore.componentType);
40
- let channel = Channel.make(name, eventTopics, opts);
40
+ let channel = Channel.make(name, eventTopics, owner, opts);
41
41
  extra.channel = channel;
42
42
  Component$ReventlessCore.setOperations(extra, channel.enqueueEvent.apply(enqueueEvent => ({
43
43
  enqueueEvent: enqueueEvent
@@ -54,5 +54,9 @@ module type T = {
54
54
  }
55
55
  type component = component<operations>
56
56
 
57
- let make: (~name: string, ~opts: Pulumi.ComponentResource.options=?) => component
57
+ let make: (
58
+ ~name: string,
59
+ ~owner: ResourceAttribution.owner=?,
60
+ ~opts: Pulumi.ComponentResource.options=?,
61
+ ) => component
58
62
  }
@@ -10,7 +10,11 @@ type storage = {
10
10
  resources: array<ReventlessInfra.Adapter.resource>,
11
11
  operations: Pulumi.Output.t<operations>,
12
12
  }
13
- type storageMaker = (~name: string, ~opts: Pulumi.CustomResourceOptions.t) => storage
13
+ type storageMaker = (
14
+ ~name: string,
15
+ ~owner: option<ResourceAttribution.owner>,
16
+ ~opts: Pulumi.CustomResourceOptions.t,
17
+ ) => storage
14
18
 
15
19
  module type Storage = {
16
20
  let make: storageMaker
@@ -15,15 +15,20 @@ module Make = (
15
15
  }
16
16
  type component = Component.t<EventLog.t, EventLog.outputs, operations>
17
17
 
18
- let construct = (self, name) => {
18
+ let construct = (~owner=?, self, name) => {
19
19
  let opts = {Pulumi.CustomResourceOptions.parent: self->Component.toPulumiResource}
20
20
 
21
- let storage = Storage.make(~name=name->ComponentType.name(EventLog.componentType), ~opts)
21
+ let storage = Storage.make(
22
+ ~name=name->ComponentType.name(EventLog.componentType),
23
+ ~owner,
24
+ ~opts,
25
+ )
22
26
 
23
27
  module SpecificEventTopic = EventTopic_Builder.Make(Spec, EventTopicPublisher)
24
28
  let eventTopic = SpecificEventTopic.make(
25
29
  ~name,
26
30
  ~storageResources=storage.resources,
31
+ ~owner?,
27
32
  ~opts=opts->Util.Pulumi.ComponentResourceOptions.ofCustomResourceOptions,
28
33
  )
29
34
 
@@ -59,11 +64,11 @@ module Make = (
59
64
  self->Component.setOutputs(outputs)
60
65
  }
61
66
 
62
- let make = (~name, ~opts=?): component =>
67
+ let make = (~name, ~owner=?, ~opts=?): component =>
63
68
  Component.make(
64
69
  ~componentType=EventLog.componentType->ComponentType.toString,
65
70
  ~name,
66
- ~construct,
71
+ ~construct=construct(~owner?, ...),
67
72
  ~opts,
68
73
  )
69
74
  }
@@ -10,15 +10,15 @@ import * as EventLog_Operations$ReventlessCore from "./EventLog_Operations.res.m
10
10
 
11
11
  function Make(Spec) {
12
12
  return Storage => (EventTopicPublisher => {
13
- let construct = (self, name) => {
14
- let opts_parent = Component$ReventlessCore.toPulumiResource(self);
13
+ let make = (name, owner, opts) => Component$ReventlessCore.make(ComponentType$ReventlessCore.toString(EventLog$ReventlessCore.componentType), name, (extra, extra$1) => {
14
+ let opts_parent = Component$ReventlessCore.toPulumiResource(extra);
15
15
  let opts = {
16
16
  parent: opts_parent
17
17
  };
18
- let storage = Storage.make(ComponentType$ReventlessCore.name(name, EventLog$ReventlessCore.componentType), opts);
18
+ let storage = Storage.make(ComponentType$ReventlessCore.name(extra$1, EventLog$ReventlessCore.componentType), owner, opts);
19
19
  let SpecificEventTopic = EventTopic_Builder$ReventlessCore.Make(Spec)(EventTopicPublisher);
20
- let eventTopic = SpecificEventTopic.make(name, storage.resources, Util_Pulumi$ReventlessCore.ComponentResourceOptions.ofCustomResourceOptions(opts));
21
- Component$ReventlessCore.setOperations(self, Pulumi.all([
20
+ let eventTopic = SpecificEventTopic.make(extra$1, storage.resources, owner, Util_Pulumi$ReventlessCore.ComponentResourceOptions.ofCustomResourceOptions(opts));
21
+ Component$ReventlessCore.setOperations(extra, Pulumi.all([
22
22
  storage.operations,
23
23
  Component$ReventlessCore.operations(eventTopic)
24
24
  ]).apply(param => {
@@ -43,9 +43,8 @@ function Make(Spec) {
43
43
  resources: outputs_resources,
44
44
  eventTopic: outputs_eventTopic
45
45
  };
46
- return Component$ReventlessCore.setOutputs(self, outputs);
47
- };
48
- let make = (name, opts) => Component$ReventlessCore.make(ComponentType$ReventlessCore.toString(EventLog$ReventlessCore.componentType), name, construct, opts);
46
+ return Component$ReventlessCore.setOutputs(extra, outputs);
47
+ }, opts);
49
48
  return {
50
49
  Spec: Spec,
51
50
  make: make
@@ -69,7 +69,12 @@ module Make = (
69
69
  let eventCollector = counterOperations->Pulumi.Output.apply(({count, addToCounterTarget}) =>
70
70
  {
71
71
  let eventTopics = allEventTopics->EventTopic.filter(aggregateNames)
72
- let eventCollector = SpecificEventCollector.make(~name, ~eventTopics, ~opts)
72
+ let eventCollector = SpecificEventCollector.make(
73
+ ~name,
74
+ ~eventTopics,
75
+ ~owner={kind: ComponentType.EventMapper, name},
76
+ ~opts,
77
+ )
73
78
 
74
79
  module EventCollectorHandler = EventMapper_Callback.MakeEventCollectorHandler({
75
80
  let publishJsons = publishJsons
@@ -49,7 +49,10 @@ function Make(Target) {
49
49
  }));
50
50
  let eventCollector = match[0].apply(param => {
51
51
  let eventTopics = EventTopic$ReventlessCore.filter(allEventTopics, aggregateNames);
52
- let eventCollector = SpecificEventCollector.make(name, eventTopics, opts);
52
+ let eventCollector = SpecificEventCollector.make(name, eventTopics, {
53
+ kind: "EventMapper",
54
+ name: name
55
+ }, opts);
53
56
  let EventCollectorHandler = EventMapper_Callback$ReventlessCore.MakeEventCollectorHandler({
54
57
  publishJsons: publishJsons,
55
58
  count: param.count,
@@ -27,6 +27,7 @@ module type T = {
27
27
  let make: (
28
28
  ~name: string,
29
29
  ~storageResources: array<ReventlessInfra.Adapter.resource>,
30
+ ~owner: ResourceAttribution.owner=?,
30
31
  ~opts: Pulumi.ComponentResource.options=?,
31
32
  ) => component
32
33
  }
@@ -7,6 +7,7 @@ type publisher = {
7
7
  type publisherMaker = (
8
8
  ~name: string,
9
9
  ~storageResources: array<ReventlessInfra.Adapter.resource>,
10
+ ~owner: option<ResourceAttribution.owner>,
10
11
  ~opts: Pulumi.CustomResourceOptions.t,
11
12
  ) => publisher
12
13
 
@@ -12,12 +12,13 @@ module Make = (Spec: ReventlessInfra.EventTopic.T, Publisher: EventTopic_Adapter
12
12
 
13
13
  type component = Component.t<EventTopic.t, EventTopic.outputs, operations>
14
14
 
15
- let construct = (~storageResources, self, name) => {
15
+ let construct = (~storageResources, ~owner=?, self, name) => {
16
16
  let opts = {Pulumi.CustomResourceOptions.parent: self->Component.toPulumiResource}
17
17
 
18
18
  let publisher = Publisher.make(
19
19
  ~name=name->ComponentType.name(EventTopic.componentType),
20
20
  ~storageResources,
21
+ ~owner,
21
22
  ~opts,
22
23
  )
23
24
 
@@ -43,11 +44,11 @@ module Make = (Spec: ReventlessInfra.EventTopic.T, Publisher: EventTopic_Adapter
43
44
  self->Component.setOutputs(outputs)
44
45
  }
45
46
 
46
- let make = (~name, ~storageResources, ~opts=?): component =>
47
+ let make = (~name, ~storageResources, ~owner=?, ~opts=?): component =>
47
48
  Component.make(
48
49
  ~componentType=EventTopic.componentType->ComponentType.toString,
49
50
  ~name,
50
- ~construct=construct(~storageResources, ...),
51
+ ~construct=construct(~storageResources, ~owner?, ...),
51
52
  ~opts,
52
53
  )
53
54
  }
@@ -8,12 +8,12 @@ import * as EventTopic_Operations$ReventlessCore from "./EventTopic_Operations.r
8
8
 
9
9
  function Make(Spec) {
10
10
  return Publisher => {
11
- let make = (name, storageResources, opts) => Component$ReventlessCore.make(ComponentType$ReventlessCore.toString(EventTopic$ReventlessCore.componentType), name, (extra, extra$1) => {
11
+ let make = (name, storageResources, owner, opts) => Component$ReventlessCore.make(ComponentType$ReventlessCore.toString(EventTopic$ReventlessCore.componentType), name, (extra, extra$1) => {
12
12
  let opts_parent = Component$ReventlessCore.toPulumiResource(extra);
13
13
  let opts = {
14
14
  parent: opts_parent
15
15
  };
16
- let publisher = Publisher.make(ComponentType$ReventlessCore.name(extra$1, EventTopic$ReventlessCore.componentType), storageResources, opts);
16
+ let publisher = Publisher.make(ComponentType$ReventlessCore.name(extra$1, EventTopic$ReventlessCore.componentType), storageResources, owner, opts);
17
17
  Component$ReventlessCore.setOperations(extra, Pulumi.all([
18
18
  publisher.publishJson,
19
19
  publisher.publishJsonStream
@@ -47,7 +47,11 @@ module Make = (
47
47
  let childName = name->String.replace(".", "")->ComponentType.name(ExtensionPoint.componentType)
48
48
 
49
49
  module SpecificCommandTopic = CommandTopic_Builder.Make(SpecWithId, CommandTopicChannel)
50
- let commandTopic = SpecificCommandTopic.make(~name=childName, ~opts)
50
+ let commandTopic = SpecificCommandTopic.make(
51
+ ~name=childName,
52
+ ~owner={kind: ComponentType.ExtensionPoint, name: Spec.name},
53
+ ~opts,
54
+ )
51
55
 
52
56
  let aggregateNames =
53
57
  Mappings.mappings->Array.filterMap((module(Mapping)) =>
@@ -103,7 +107,12 @@ module Make = (
103
107
  )
104
108
 
105
109
  module SpecificEventTopic = EventTopic_Builder.Make(SpecWithId, EventTopicAdapter)
106
- let eventTopic = SpecificEventTopic.make(~name=childName, ~storageResources=[], ~opts)
110
+ let eventTopic = SpecificEventTopic.make(
111
+ ~name=childName,
112
+ ~storageResources=[],
113
+ ~owner={kind: ComponentType.ExtensionPoint, name: Spec.name},
114
+ ~opts,
115
+ )
107
116
 
108
117
  eventTopic
109
118
  ->Component.operations
@@ -36,7 +36,10 @@ function Make(Spec) {
36
36
  name: name,
37
37
  commandSchema: commandSchema
38
38
  })(CommandTopicChannel);
39
- let commandTopic = SpecificCommandTopic.make(childName, opts);
39
+ let commandTopic = SpecificCommandTopic.make(childName, {
40
+ kind: "ExtensionPoint",
41
+ name: Spec.name
42
+ }, opts);
40
43
  let aggregateNames = Stdlib_Array.filterMap(Mappings.mappings, Mapping => Stdlib_Option.map(Mapping.mapOutgoingEvent, param => Mapping.delegateName));
41
44
  let commandTopicResources = Adapter$ReventlessCore.resourcesToResolvedOutput(commandTopic.channel.resources);
42
45
  let match = Output$Pulumi.unzip3(Output$Pulumi.flatMap(commandTopicResources, commandTopicResources => {
@@ -65,7 +68,10 @@ function Make(Spec) {
65
68
  name: name,
66
69
  eventSchema: eventSchema
67
70
  })(EventTopicAdapter);
68
- let eventTopic = SpecificEventTopic.make(childName, [], opts);
71
+ let eventTopic = SpecificEventTopic.make(childName, [], {
72
+ kind: "ExtensionPoint",
73
+ name: Spec.name
74
+ }, opts);
69
75
  return Component$ReventlessCore.operations(eventTopic).apply(param => {
70
76
  let Ops = ExtensionPoint_Operations$ReventlessCore.Make(Spec)({
71
77
  mappings: Mappings.mappings
@@ -57,7 +57,12 @@ module Make = (
57
57
  let construct = (~publishJsons, self, _name) => {
58
58
  let opts = {Pulumi.ComponentResource.parent: self->Component.toPulumiResource}
59
59
 
60
- let queryDb = SpecificQueryDb.make(~api=Api.api(), ~apiRole=Api.apiRole(), ~opts)
60
+ let queryDb = SpecificQueryDb.make(
61
+ ~api=Api.api(),
62
+ ~apiRole=Api.apiRole(),
63
+ ~owner={kind: ComponentType.InboundTranslationSlice, name: Spec.name},
64
+ ~opts,
65
+ )
61
66
 
62
67
  // Resolve publishJsons so it's available for receive
63
68
  let publishJsonsRef: ref<option<ReventlessInfra.CommandTopic.publishJsons>> = ref(None)
@@ -39,7 +39,10 @@ function Make(QueryDbStorage) {
39
39
  let opts = {
40
40
  parent: opts_parent
41
41
  };
42
- let queryDb = SpecificQueryDb.make(Api.api(), Api.apiRole(), undefined, opts);
42
+ let queryDb = SpecificQueryDb.make(Api.api(), Api.apiRole(), undefined, {
43
+ kind: "InboundTranslationSlice",
44
+ name: Spec.name
45
+ }, opts);
43
46
  let publishJsonsRef = {
44
47
  contents: undefined
45
48
  };
@@ -72,7 +72,12 @@ module Make = (
72
72
  let memorySize = ReventlessInfra.RuntimeHints.resolveMemory(runtime, ~default=1024)
73
73
  let timeout = ReventlessInfra.RuntimeHints.resolveTimeout(runtime, ~default=30)
74
74
 
75
- let queryDb = SpecificQueryDb.make(~api=Api.api(), ~apiRole=Api.apiRole(), ~opts)
75
+ let queryDb = SpecificQueryDb.make(
76
+ ~api=Api.api(),
77
+ ~apiRole=Api.apiRole(),
78
+ ~owner={kind: ComponentType.OutboundTranslationSlice, name: Spec.name},
79
+ ~opts,
80
+ )
76
81
 
77
82
  let dcbEventTopicOutputs: EventTopic.outputs = (dcbEventLog->Component.outputs).eventTopic
78
83
  let allEventTopics = Dict.fromArray([(Spec.name, dcbEventTopicOutputs)])
@@ -87,7 +92,12 @@ module Make = (
87
92
  queryDb
88
93
  ->Component.operations
89
94
  ->Pulumi.Output.apply(queryDbOps => {
90
- let ec = SpecificEventCollector.make(~name=Spec.name, ~eventTopics=allEventTopics, ~opts)
95
+ let ec = SpecificEventCollector.make(
96
+ ~name=Spec.name,
97
+ ~eventTopics=allEventTopics,
98
+ ~owner={kind: ComponentType.OutboundTranslationSlice, name: Spec.name},
99
+ ~opts,
100
+ )
91
101
 
92
102
  let jsonEventsHandler: EventCollector.jsonEventsHandler = stream =>
93
103
  stream
@@ -59,7 +59,10 @@ function Make(RuntimeEnvironment) {
59
59
  };
60
60
  let memorySize = RuntimeHints$ReventlessInfra.resolveMemory(runtime, 1024);
61
61
  let timeout = RuntimeHints$ReventlessInfra.resolveTimeout(runtime, 30);
62
- let queryDb = SpecificQueryDb.make(Api.api(), Api.apiRole(), undefined, opts);
62
+ let queryDb = SpecificQueryDb.make(Api.api(), Api.apiRole(), undefined, {
63
+ kind: "OutboundTranslationSlice",
64
+ name: Spec.name
65
+ }, opts);
63
66
  let dcbEventTopicOutputs = Component$ReventlessCore.outputs(dcbEventLog).eventTopic;
64
67
  let allEventTopics = Object.fromEntries([[
65
68
  Spec.name,
@@ -72,7 +75,10 @@ function Make(RuntimeEnvironment) {
72
75
  publishJsonsRef.contents = pj;
73
76
  });
74
77
  let eventCollector = Component$ReventlessCore.operations(queryDb).apply(queryDbOps => {
75
- let ec = SpecificEventCollector.make(Spec.name, allEventTopics, opts);
78
+ let ec = SpecificEventCollector.make(Spec.name, allEventTopics, {
79
+ kind: "OutboundTranslationSlice",
80
+ name: Spec.name
81
+ }, opts);
76
82
  let jsonEventsHandler = stream => Effect.flatMap(Stream.runCollect(Stream$1.flatMap(Stream$1.mapEffect(stream, json => Effect.sync(() => {
77
83
  let match = Message$ReventlessCore.splitMessage(json);
78
84
  let event = decoder.decode(match[0], match[1]);
@@ -53,6 +53,7 @@ module type T = {
53
53
  ~api: api,
54
54
  ~apiRole: role,
55
55
  ~ttl: int=?,
56
+ ~owner: ResourceAttribution.owner=?,
56
57
  ~opts: Pulumi.ComponentResource.options=?,
57
58
  ) => component
58
59
  }
@@ -14,6 +14,7 @@ type storageMaker<'api, 'role> = (
14
14
  ~ttl: int=?,
15
15
  ~api: 'api,
16
16
  ~apiRole: 'role,
17
+ ~owner: option<ResourceAttribution.owner>,
17
18
  ~opts: Pulumi.CustomResourceOptions.t,
18
19
  ) => storage
19
20
 
@@ -10,7 +10,7 @@ module Make = (
10
10
  type operations = QueryDb.operations<Spec.Id.t, Spec.state>
11
11
  type component = Component.t<QueryDb.t, QueryDb.outputs, operations>
12
12
 
13
- let construct = (self, name, ~api, ~apiRole, ~ttl=?) => {
13
+ let construct = (self, name, ~api, ~apiRole, ~ttl=?, ~owner=?) => {
14
14
  let opts = {Pulumi.CustomResourceOptions.parent: self->Component.toPulumiResource}
15
15
 
16
16
  let subIdField = Spec.subIdConfig->Option.map(config => config.subIdField)
@@ -22,6 +22,7 @@ module Make = (
22
22
  ~ttl?,
23
23
  ~api,
24
24
  ~apiRole,
25
+ ~owner,
25
26
  ~opts,
26
27
  )
27
28
 
@@ -66,11 +67,11 @@ module Make = (
66
67
  self->Component.setOutputs(outputs)
67
68
  }
68
69
 
69
- let make = (~api: Storage.api, ~apiRole: Storage.role, ~ttl=?, ~opts=?): component =>
70
+ let make = (~api: Storage.api, ~apiRole: Storage.role, ~ttl=?, ~owner=?, ~opts=?): component =>
70
71
  Component.make(
71
72
  ~componentType=QueryDb.componentType->ComponentType.toString,
72
73
  ~name=Spec.name,
73
- ~construct=construct(~api, ~apiRole, ~ttl?, ...),
74
+ ~construct=construct(~api, ~apiRole, ~ttl?, ~owner?, ...),
74
75
  ~opts,
75
76
  )
76
77
  }
@@ -8,13 +8,13 @@ import * as QueryDb_Operations$ReventlessCore from "./QueryDb_Operations.res.mjs
8
8
 
9
9
  function Make(Spec) {
10
10
  return Storage => (Resolvers => {
11
- let make = (api, apiRole, ttl, opts) => Component$ReventlessCore.make(ComponentType$ReventlessCore.toString(QueryDb$ReventlessCore.componentType), Spec.name, (none, none$1) => {
11
+ let make = (api, apiRole, ttl, owner, opts) => Component$ReventlessCore.make(ComponentType$ReventlessCore.toString(QueryDb$ReventlessCore.componentType), Spec.name, (none, none$1) => {
12
12
  let opts_parent = Component$ReventlessCore.toPulumiResource(none);
13
13
  let opts = {
14
14
  parent: opts_parent
15
15
  };
16
16
  let subIdField = Stdlib_Option.map(Spec.subIdConfig, config => config.subIdField);
17
- let storage = Storage.make(none$1, Spec.config.indexes, subIdField, ttl, api, apiRole, opts);
17
+ let storage = Storage.make(none$1, Spec.config.indexes, subIdField, ttl, api, apiRole, owner, opts);
18
18
  Component$ReventlessCore.setOperations(none, storage.operations.apply(jsonOps => {
19
19
  let Operations = QueryDb_Operations$ReventlessCore.Make(Spec)({
20
20
  jsonOps: jsonOps