@reventlessdev/reventless-infra 3.0.0-alpha.81
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.
- package/CHANGELOG.md +709 -0
- package/LICENSE +202 -0
- package/package.json +35 -0
- package/rescript.json +28 -0
- package/src/adapter/Adapter.res +88 -0
- package/src/adapter/Adapter.res.mjs +29 -0
- package/src/components/Aggregate.res +73 -0
- package/src/components/Aggregate.res.mjs +2 -0
- package/src/components/Api.res +124 -0
- package/src/components/Api.res.mjs +31 -0
- package/src/components/Api_Adapter.res +39 -0
- package/src/components/Api_Adapter.res.mjs +2 -0
- package/src/components/AutomationSlice.res +48 -0
- package/src/components/AutomationSlice.res.mjs +2 -0
- package/src/components/CommandGenerator.res +8 -0
- package/src/components/CommandGenerator.res.mjs +2 -0
- package/src/components/CommandTopic.res +70 -0
- package/src/components/CommandTopic.res.mjs +2 -0
- package/src/components/Component.js +56 -0
- package/src/components/Component.mjs +10 -0
- package/src/components/Component.res +90 -0
- package/src/components/Component.res.mjs +57 -0
- package/src/components/Component.resi +21 -0
- package/src/components/Counter.res +81 -0
- package/src/components/Counter.res.mjs +2 -0
- package/src/components/DcbEventLog.res +115 -0
- package/src/components/DcbEventLog.res.mjs +2 -0
- package/src/components/EventCollector.res +19 -0
- package/src/components/EventCollector.res.mjs +2 -0
- package/src/components/EventLog.res +24 -0
- package/src/components/EventLog.res.mjs +2 -0
- package/src/components/EventMapper.res +37 -0
- package/src/components/EventMapper.res.mjs +2 -0
- package/src/components/EventTopic.res +51 -0
- package/src/components/EventTopic.res.mjs +2 -0
- package/src/components/Extension.res +64 -0
- package/src/components/Extension.res.mjs +2 -0
- package/src/components/ExtensionPoint.res +62 -0
- package/src/components/ExtensionPoint.res.mjs +2 -0
- package/src/components/Heartbeat.res +7 -0
- package/src/components/Heartbeat.res.mjs +2 -0
- package/src/components/InboundTranslationSlice.res +41 -0
- package/src/components/InboundTranslationSlice.res.mjs +2 -0
- package/src/components/OutboundTranslationSlice.res +44 -0
- package/src/components/OutboundTranslationSlice.res.mjs +2 -0
- package/src/components/Plugin.res +84 -0
- package/src/components/Plugin.res.mjs +2 -0
- package/src/components/QueryDb.res +48 -0
- package/src/components/QueryDb.res.mjs +33 -0
- package/src/components/ReadModel.res +50 -0
- package/src/components/ReadModel.res.mjs +2 -0
- package/src/components/Scheduler.res +32 -0
- package/src/components/Scheduler.res.mjs +2 -0
- package/src/components/StateChangeSlice.res +45 -0
- package/src/components/StateChangeSlice.res.mjs +2 -0
- package/src/components/StateViewSlice.res +38 -0
- package/src/components/StateViewSlice.res.mjs +2 -0
- package/src/components/Task.res +89 -0
- package/src/components/Task.res.mjs +2 -0
- package/src/types/ExtensionMapping.res +448 -0
- package/src/types/ExtensionMapping.res.mjs +252 -0
- package/src/types/ExtensionPointMapping.res +303 -0
- package/src/types/ExtensionPointMapping.res.mjs +116 -0
- package/src/types/Message.res +3 -0
- package/src/types/Message.res.mjs +2 -0
- package/src/types/NoEventMappings.res +25 -0
- package/src/types/NoEventMappings.res.mjs +17 -0
- package/src/types/Platform.res +279 -0
- package/src/types/Platform.res.mjs +2 -0
- package/src/types/PluginExtensionPointSpec.res +43 -0
- package/src/types/PluginExtensionPointSpec.res.mjs +204 -0
- package/src/types/ResourceNaming.res +12 -0
- package/src/types/ResourceNaming.res.mjs +2 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
Produces an empty `EventMapper.Mappings` module for aggregates that do not
|
|
3
|
+
need to route their events to other aggregates.
|
|
4
|
+
|
|
5
|
+
Use this when creating an aggregate via `Platform.Aggregate.Make` and the
|
|
6
|
+
aggregate's events do not trigger commands on other aggregates.
|
|
7
|
+
|
|
8
|
+
@example
|
|
9
|
+
```rescript
|
|
10
|
+
// CatalogPlugin.res
|
|
11
|
+
module CategoryAggregate = Platform.Aggregate.Make(
|
|
12
|
+
Category,
|
|
13
|
+
CategoryBehavior,
|
|
14
|
+
NoEventMappings.Make(Category),
|
|
15
|
+
)
|
|
16
|
+
```
|
|
17
|
+
*/
|
|
18
|
+
module Make = (Target: Reventless.EventMapping.Target): (
|
|
19
|
+
EventMapper.Mappings with module Target := Target
|
|
20
|
+
) => {
|
|
21
|
+
module type Mapping = Reventless.EventMapping.T with module Target := Target
|
|
22
|
+
let moduleUrl: string = %raw(`import.meta.url`)
|
|
23
|
+
let mappings = []
|
|
24
|
+
let counter = None
|
|
25
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
function Make(Target) {
|
|
5
|
+
let moduleUrl = import.meta.url;
|
|
6
|
+
let mappings = [];
|
|
7
|
+
return {
|
|
8
|
+
moduleUrl: moduleUrl,
|
|
9
|
+
mappings: mappings,
|
|
10
|
+
counter: undefined
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export {
|
|
15
|
+
Make,
|
|
16
|
+
}
|
|
17
|
+
/* No side effect */
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
// Platform module type — abstract factory interface for platform-agnostic component assembly.
|
|
2
|
+
//
|
|
3
|
+
// Lives in reventless-infra so application plugin assembly code can depend on
|
|
4
|
+
// reventless-infra. The concrete implementation in reventless-aws satisfies this type.
|
|
5
|
+
//
|
|
6
|
+
// Usage pattern:
|
|
7
|
+
//
|
|
8
|
+
// // app/MyPlugin.res — imports reventless-infra
|
|
9
|
+
// module Make = (Platform: ReventlessInfra.Platform.T) => {
|
|
10
|
+
// module MyAggregate = Platform.Aggregate.Make(MySpec, MyBehavior, MyMappings)
|
|
11
|
+
// module MyReadModel = Platform.ReadModel.Make(MyRmSpec, MyMappings)
|
|
12
|
+
// // ...
|
|
13
|
+
// }
|
|
14
|
+
//
|
|
15
|
+
// // index.res — Composition Root; the only file that imports reventless-aws
|
|
16
|
+
// module Platform = ReventlessAws.Platform.Make(Config)
|
|
17
|
+
// module App = MyPlugin.Make(Platform)
|
|
18
|
+
|
|
19
|
+
// Type alias for admin extension points dict — defined at file scope so it
|
|
20
|
+
// remains accessible inside module type T even though T re-declares
|
|
21
|
+
// `module ExtensionPoint` with a different local type, which would otherwise
|
|
22
|
+
// shadow the package-level ExtensionPoint.outputs.
|
|
23
|
+
/**
|
|
24
|
+
Abstract factory interface for creating Reventless components without coupling
|
|
25
|
+
application code to a specific infrastructure provider.
|
|
26
|
+
|
|
27
|
+
Inject a `Platform.T` module (e.g. `ReventlessAws.Platform.Make(Config)`) at
|
|
28
|
+
the composition root, and use its nested `Make` functors everywhere else.
|
|
29
|
+
|
|
30
|
+
@example
|
|
31
|
+
```rescript
|
|
32
|
+
// CatalogPlugin.res — depends on reventless-infra
|
|
33
|
+
module Make = (Platform: Platform.T) => {
|
|
34
|
+
module CategoryAggregate = Platform.Aggregate.Make(
|
|
35
|
+
Category,
|
|
36
|
+
CategoryBehavior,
|
|
37
|
+
NoEventMappings.Make(Category),
|
|
38
|
+
)
|
|
39
|
+
module CategoryReadModel = Platform.ReadModel.Make(CategoriesReadModel, CategoryMappings)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// index.res — the only file that imports reventless-aws
|
|
43
|
+
module Platform = ReventlessAws.Platform.Make(AwsConfig)
|
|
44
|
+
module App = CatalogPlugin.Make(Platform)
|
|
45
|
+
```
|
|
46
|
+
*/
|
|
47
|
+
|
|
48
|
+
// Type alias to avoid shadowing by the nested `module Api` inside Platform.T.
|
|
49
|
+
type apiComponent = Api.component
|
|
50
|
+
|
|
51
|
+
// Type alias so `deployPlugin` can reference `Plugin.outputs` inside module type T,
|
|
52
|
+
// where `module Plugin: Plugin.T` shadows the package-level Plugin module.
|
|
53
|
+
type pluginOutputs = Plugin.outputs
|
|
54
|
+
|
|
55
|
+
// Module type alias so StateViewSliceStream can reference the component T
|
|
56
|
+
// without being confused by the `module StateViewSlice` declaration inside T.
|
|
57
|
+
module type StateViewSliceComponentT = StateViewSlice.T
|
|
58
|
+
|
|
59
|
+
// Same trick for ReadModelStream: the nested `module ReadModel` declaration
|
|
60
|
+
// inside T shadows the package-level ReadModel for later declarations, so
|
|
61
|
+
// reference its component T through this file-scope alias.
|
|
62
|
+
module type ReadModelComponentT = ReadModel.T
|
|
63
|
+
|
|
64
|
+
module type T = {
|
|
65
|
+
/** Platform-specific API type (e.g. `Types.AppSync.api` for AWS, `unit` for in-memory). */
|
|
66
|
+
type api
|
|
67
|
+
|
|
68
|
+
/** Platform-specific role type (e.g. `Types.AppSync.role` for AWS, `unit` for in-memory). */
|
|
69
|
+
type role
|
|
70
|
+
|
|
71
|
+
/** The platform's API instance — used by bundled DCB slice builders that need
|
|
72
|
+
to create QueryDb resolvers inside the Platform functor. */
|
|
73
|
+
let api: api
|
|
74
|
+
|
|
75
|
+
/** The platform's API role instance — used alongside `api` for QueryDb resolvers. */
|
|
76
|
+
let apiRole: role
|
|
77
|
+
|
|
78
|
+
/** Factory for event-sourced aggregate components. */
|
|
79
|
+
module Aggregate: {
|
|
80
|
+
module Make: (
|
|
81
|
+
Spec: Reventless.Aggregate.Spec,
|
|
82
|
+
Behavior: Reventless.Behavior.T with module Spec := Spec,
|
|
83
|
+
EventMappings: EventMapper.Mappings with module Target := Spec,
|
|
84
|
+
) => Aggregate.T with type api = api
|
|
85
|
+
/** Async variant — uses FIFO channel, returns `CommandPending`. */
|
|
86
|
+
module MakeAsync: (
|
|
87
|
+
Spec: Reventless.Aggregate.Spec,
|
|
88
|
+
Behavior: Reventless.Behavior.T with module Spec := Spec,
|
|
89
|
+
EventMappings: EventMapper.Mappings with module Target := Spec,
|
|
90
|
+
) => Aggregate.T with type api = api
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/** Factory for read model (query-side projection) components. */
|
|
94
|
+
module ReadModel: {
|
|
95
|
+
module Make: (
|
|
96
|
+
Spec: Reventless.ReadModel.Spec,
|
|
97
|
+
Mappings: Reventless.Projection.Mappings with module Target := Spec,
|
|
98
|
+
) => ReadModel.T with module Spec = Spec and type api = api and type role = role
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/** Factory for stream-enabled read model components — identical to `ReadModel`
|
|
102
|
+
but the QueryDb table has a DynamoDB Stream so the platform wires a
|
|
103
|
+
`StateTopic` Lambda that pushes row changes to the AppSync Events API
|
|
104
|
+
(Source B subscriptions / AutoUI live updates). In-memory: same as
|
|
105
|
+
`ReadModel` (no streams). */
|
|
106
|
+
module ReadModelStream: {
|
|
107
|
+
module Make: (
|
|
108
|
+
Spec: Reventless.ReadModel.Spec,
|
|
109
|
+
Mappings: Reventless.Projection.Mappings with module Target := Spec,
|
|
110
|
+
) => ReadModelComponentT with module Spec = Spec and type api = api and type role = role
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/** Factory for extension point components (single mapping). */
|
|
114
|
+
module ExtensionPoint: {
|
|
115
|
+
module Make: (
|
|
116
|
+
Mapping: ExtensionPointMapping.Mapping,
|
|
117
|
+
) => ExtensionPoint.T
|
|
118
|
+
|
|
119
|
+
/** Two-mapping variant — merges per-slice EP mappings. */
|
|
120
|
+
module Make2: (
|
|
121
|
+
Mapping1: ExtensionPointMapping.Mapping,
|
|
122
|
+
Mapping2: ExtensionPointMapping.Mapping
|
|
123
|
+
with module ExtensionPoint = Mapping1.ExtensionPoint,
|
|
124
|
+
) => ExtensionPoint.T
|
|
125
|
+
|
|
126
|
+
/** Three-mapping variant — merges per-slice EP mappings. */
|
|
127
|
+
module Make3: (
|
|
128
|
+
Mapping1: ExtensionPointMapping.Mapping,
|
|
129
|
+
Mapping2: ExtensionPointMapping.Mapping
|
|
130
|
+
with module ExtensionPoint = Mapping1.ExtensionPoint,
|
|
131
|
+
Mapping3: ExtensionPointMapping.Mapping
|
|
132
|
+
with module ExtensionPoint = Mapping1.ExtensionPoint,
|
|
133
|
+
) => ExtensionPoint.T
|
|
134
|
+
|
|
135
|
+
/** Multi-mapping variant with full control over name and mappings array. */
|
|
136
|
+
module MakeMulti: (
|
|
137
|
+
Spec: ExtensionPointMapping.Spec,
|
|
138
|
+
Mappings: ExtensionPoint.Mappings with module Spec := Spec,
|
|
139
|
+
) => ExtensionPoint.T
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/** Factory for extension blueprints (single mapping).
|
|
143
|
+
Returns a blueprint — not a built component. `Plugin.make` builds it,
|
|
144
|
+
using the plugin name for the extension's component name and auto-merging
|
|
145
|
+
blueprints that target the same extension point. */
|
|
146
|
+
module Extension: {
|
|
147
|
+
module Make: (
|
|
148
|
+
Mapping: ExtensionMapping.Mapping,
|
|
149
|
+
) => Extension.Blueprint
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/** Factory for task (background job / S3 trigger) components. */
|
|
153
|
+
module Task: {
|
|
154
|
+
module Make: (Spec: Task.Spec) => Task.T with module Spec = Spec
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/** Ready-to-use counter component (no Make required). */
|
|
158
|
+
module Counter: Counter.T
|
|
159
|
+
|
|
160
|
+
/** Factory for DCB write-side state-change slice components. */
|
|
161
|
+
module StateChangeSlice: {
|
|
162
|
+
module Make: (
|
|
163
|
+
Spec: Reventless.StateChangeSlice.Spec,
|
|
164
|
+
Behavior: Reventless.StateChangeSlice.Behavior with module Spec := Spec,
|
|
165
|
+
) => StateChangeSlice.T with module Spec = Spec
|
|
166
|
+
/** Async variant — uses FIFO channel, returns `CommandPending`. */
|
|
167
|
+
module MakeAsync: (
|
|
168
|
+
Spec: Reventless.StateChangeSlice.Spec,
|
|
169
|
+
Behavior: Reventless.StateChangeSlice.Behavior with module Spec := Spec,
|
|
170
|
+
) => StateChangeSlice.T with module Spec = Spec
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/** Factory for DCB read-side state-view slice components. */
|
|
174
|
+
module StateViewSlice: {
|
|
175
|
+
module Make: (
|
|
176
|
+
Spec: Reventless.StateViewSlice.Spec,
|
|
177
|
+
Projection: Reventless.StateViewSlice.Projection with module Spec := Spec,
|
|
178
|
+
) => StateViewSlice.T with module Spec = Spec
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/** Factory for stream-enabled state-view slice components (enables Source B subscriptions). */
|
|
182
|
+
module StateViewSliceStream: {
|
|
183
|
+
module Make: (
|
|
184
|
+
Spec: Reventless.StateViewSlice.Spec,
|
|
185
|
+
Projection: Reventless.StateViewSlice.Projection with module Spec := Spec,
|
|
186
|
+
) => StateViewSliceComponentT with module Spec = Spec
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/** Factory for DCB automation slice components (TODO list pattern). */
|
|
190
|
+
module AutomationSlice: {
|
|
191
|
+
module Make: (
|
|
192
|
+
Spec: Reventless.AutomationSlice.Spec,
|
|
193
|
+
Automation: Reventless.AutomationSlice.Automation with module Spec := Spec,
|
|
194
|
+
) => AutomationSlice.T with module Spec = Spec
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/** Factory for DCB outbound translation slice components (tracked external calls). */
|
|
198
|
+
module OutboundTranslationSlice: {
|
|
199
|
+
module Make: (
|
|
200
|
+
Spec: Reventless.OutboundTranslationSlice.Spec,
|
|
201
|
+
Translation: Reventless.OutboundTranslationSlice.Translation with module Spec := Spec,
|
|
202
|
+
) => OutboundTranslationSlice.T with module Spec = Spec
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/** Factory for DCB inbound translation slice components (external input to commands). */
|
|
206
|
+
module InboundTranslationSlice: {
|
|
207
|
+
module Make: (
|
|
208
|
+
Spec: Reventless.InboundTranslationSlice.Spec,
|
|
209
|
+
Translation: Reventless.InboundTranslationSlice.Translation with module Spec := Spec,
|
|
210
|
+
) => InboundTranslationSlice.T with module Spec = Spec
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/** Factory for the API (GraphQL) component. */
|
|
214
|
+
module Api: {
|
|
215
|
+
module Make: (Config: {
|
|
216
|
+
let baseFragment: Api.schemaFragment
|
|
217
|
+
}) => Api.T
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/** Whether this platform supports MCP (Model Context Protocol) for AI agent access.
|
|
221
|
+
In-memory: starts an MCP server alongside GraphQL in makePlatform.
|
|
222
|
+
AWS: deploys a Lambda Function URL with Streamable HTTP transport. */
|
|
223
|
+
type mcpSupported = | @as(true) McpSupported | @as(false) McpNotSupported
|
|
224
|
+
let mcpSupported: mcpSupported
|
|
225
|
+
|
|
226
|
+
/** Which AppSync API a plugin's resolvers and schema are deployed to.
|
|
227
|
+
Domain — the application-facing API (default, backwards-compatible).
|
|
228
|
+
Platform — the admin/Platform_Sync* API (for framework-internal plugins). */
|
|
229
|
+
type apiTarget = Domain | Platform
|
|
230
|
+
|
|
231
|
+
/** Factory for plugin deployment units. */
|
|
232
|
+
module Plugin: Plugin.T with type api = api and type role = role
|
|
233
|
+
|
|
234
|
+
/** Module type for plugin assembly — matches the `make` function produced by
|
|
235
|
+
every plugin's `Make` functor. Pass first-class modules to `makePlatform`. */
|
|
236
|
+
module type PluginMaker = {
|
|
237
|
+
let make: unit => Plugin.component
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/** Optional host UI shell bundle. When set, the platform hosts the static
|
|
241
|
+
shell (e.g. reventless-ui's host-shell `dist/`) on its own CDN and writes
|
|
242
|
+
a `config.json` next to `index.html` so the shell discovers the API
|
|
243
|
+
endpoint at boot. In-memory platforms typically ignore this — the shell
|
|
244
|
+
is served by `vite dev` against the running in-process GraphQL server. */
|
|
245
|
+
type hostUiBundleConfig = {
|
|
246
|
+
assetsDir: string,
|
|
247
|
+
bundleVersion: string,
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/** Deploy a complete platform: creates the scheduler, builds each plugin,
|
|
251
|
+
creates admin components internally, and wires everything (schema stitching + stack exports). */
|
|
252
|
+
let makePlatform: (
|
|
253
|
+
~version: string,
|
|
254
|
+
~plugins: array<module(PluginMaker)>,
|
|
255
|
+
) => unit
|
|
256
|
+
|
|
257
|
+
/** Deploy only the platform (admin components, scheduler, shared API).
|
|
258
|
+
No plugins are deployed — each plugin deploys independently via `deployPlugin`.
|
|
259
|
+
Pass `~hostUiBundle` to also host a static host-shell SPA from this stack.
|
|
260
|
+
Returns the Pulumi stack outputs dict for use as the ESM `default` export. */
|
|
261
|
+
let deployPlatform: (
|
|
262
|
+
~version: string,
|
|
263
|
+
~hostUiBundle: hostUiBundleConfig=?,
|
|
264
|
+
) => dict<Pulumi.Output.t<JSON.t>>
|
|
265
|
+
|
|
266
|
+
/** Deploy a single plugin as an independent stack.
|
|
267
|
+
Creates its own scheduler and exports stack outputs for cross-stack consumption.
|
|
268
|
+
Pass `~apiTarget=Platform` to route the plugin's resolvers and schema to the Platform API.
|
|
269
|
+
Defaults to `Domain`.
|
|
270
|
+
Returns the Pulumi stack outputs dict for use as the ESM `default` export. */
|
|
271
|
+
let deployPlugin: (~plugin: module(PluginMaker), ~apiTarget: apiTarget=?) => dict<Pulumi.Output.t<JSON.t>>
|
|
272
|
+
|
|
273
|
+
/** Start all servers after all makePlatform/deployPlugin calls are complete.
|
|
274
|
+
In split in-memory mode, servers are deferred until this is called so all
|
|
275
|
+
plugins (domain and platform) can register their schema before serving requests.
|
|
276
|
+
In AWS and unified in-memory mode this is a no-op — server lifecycle is managed
|
|
277
|
+
by Pulumi / existing inline start() calls. */
|
|
278
|
+
let startServers: unit => unit
|
|
279
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
let name = "Core.Plugin"
|
|
2
|
+
|
|
3
|
+
include Reventless.Plugin
|
|
4
|
+
|
|
5
|
+
@schema
|
|
6
|
+
type timeout = int // in minutes
|
|
7
|
+
|
|
8
|
+
@schema
|
|
9
|
+
type forwardCommand = {
|
|
10
|
+
extensionPointName: string,
|
|
11
|
+
id: string,
|
|
12
|
+
command: string,
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@schema
|
|
16
|
+
type command =
|
|
17
|
+
| Heartbeat(timeout)
|
|
18
|
+
| ConnectPlugin(pluginDefinition)
|
|
19
|
+
| DisconnectPlugin
|
|
20
|
+
| ForwardCommand(forwardCommand)
|
|
21
|
+
|
|
22
|
+
@schema
|
|
23
|
+
type event =
|
|
24
|
+
| UnknownPluginDetected
|
|
25
|
+
// Emitted when a connecting plugin declared incompatible protocol versions.
|
|
26
|
+
// The plugin is still connected; this event gives operators visibility.
|
|
27
|
+
| IncompatiblePlugin(pluginDefinition)
|
|
28
|
+
| PluginConnected(pluginDefinition)
|
|
29
|
+
| PluginReconnected(pluginDefinition)
|
|
30
|
+
| PluginDisconnected(pluginDefinition)
|
|
31
|
+
| PluginDeactivated(pluginDefinition)
|
|
32
|
+
| PluginActivated(pluginDefinition)
|
|
33
|
+
| PluginRetired(pluginDefinition)
|
|
34
|
+
|
|
35
|
+
@schema
|
|
36
|
+
type directive =
|
|
37
|
+
| CreateDisconnectSchedule(string, timeout)
|
|
38
|
+
| DeleteDisconnectSchedule(string)
|
|
39
|
+
| DoConnectPlugin(pluginDefinition)
|
|
40
|
+
| DoDisconnectPlugin(pluginDefinition)
|
|
41
|
+
| ForwardCommand(forwardCommand)
|
|
42
|
+
|
|
43
|
+
let moduleUrl: string = %raw(`import.meta.url`)
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
|
+
|
|
3
|
+
import * as S from "sury/src/S.res.mjs";
|
|
4
|
+
import * as Plugin$Reventless from "@reventlessdev/reventless-spec/src/components/Plugin.res.mjs";
|
|
5
|
+
|
|
6
|
+
let forwardCommandSchema = S.schema(s => ({
|
|
7
|
+
extensionPointName: s.m(S.string),
|
|
8
|
+
id: s.m(S.string),
|
|
9
|
+
command: s.m(S.string)
|
|
10
|
+
}));
|
|
11
|
+
|
|
12
|
+
let commandSchema = S.union([
|
|
13
|
+
S.schema(s => ({
|
|
14
|
+
TAG: "Heartbeat",
|
|
15
|
+
_0: s.m(S.int)
|
|
16
|
+
})),
|
|
17
|
+
S.schema(s => ({
|
|
18
|
+
TAG: "ConnectPlugin",
|
|
19
|
+
_0: s.m(Plugin$Reventless.pluginDefinitionSchema)
|
|
20
|
+
})),
|
|
21
|
+
S.literal("DisconnectPlugin"),
|
|
22
|
+
S.schema(s => ({
|
|
23
|
+
TAG: "ForwardCommand",
|
|
24
|
+
_0: s.m(forwardCommandSchema)
|
|
25
|
+
}))
|
|
26
|
+
]);
|
|
27
|
+
|
|
28
|
+
let eventSchema = S.union([
|
|
29
|
+
S.literal("UnknownPluginDetected"),
|
|
30
|
+
S.schema(s => ({
|
|
31
|
+
TAG: "IncompatiblePlugin",
|
|
32
|
+
_0: s.m(Plugin$Reventless.pluginDefinitionSchema)
|
|
33
|
+
})),
|
|
34
|
+
S.schema(s => ({
|
|
35
|
+
TAG: "PluginConnected",
|
|
36
|
+
_0: s.m(Plugin$Reventless.pluginDefinitionSchema)
|
|
37
|
+
})),
|
|
38
|
+
S.schema(s => ({
|
|
39
|
+
TAG: "PluginReconnected",
|
|
40
|
+
_0: s.m(Plugin$Reventless.pluginDefinitionSchema)
|
|
41
|
+
})),
|
|
42
|
+
S.schema(s => ({
|
|
43
|
+
TAG: "PluginDisconnected",
|
|
44
|
+
_0: s.m(Plugin$Reventless.pluginDefinitionSchema)
|
|
45
|
+
})),
|
|
46
|
+
S.schema(s => ({
|
|
47
|
+
TAG: "PluginDeactivated",
|
|
48
|
+
_0: s.m(Plugin$Reventless.pluginDefinitionSchema)
|
|
49
|
+
})),
|
|
50
|
+
S.schema(s => ({
|
|
51
|
+
TAG: "PluginActivated",
|
|
52
|
+
_0: s.m(Plugin$Reventless.pluginDefinitionSchema)
|
|
53
|
+
})),
|
|
54
|
+
S.schema(s => ({
|
|
55
|
+
TAG: "PluginRetired",
|
|
56
|
+
_0: s.m(Plugin$Reventless.pluginDefinitionSchema)
|
|
57
|
+
}))
|
|
58
|
+
]);
|
|
59
|
+
|
|
60
|
+
let directiveSchema = S.union([
|
|
61
|
+
S.schema(s => ({
|
|
62
|
+
TAG: "CreateDisconnectSchedule",
|
|
63
|
+
_0: s.m(S.string),
|
|
64
|
+
_1: s.m(S.int)
|
|
65
|
+
})),
|
|
66
|
+
S.schema(s => ({
|
|
67
|
+
TAG: "DeleteDisconnectSchedule",
|
|
68
|
+
_0: s.m(S.string)
|
|
69
|
+
})),
|
|
70
|
+
S.schema(s => ({
|
|
71
|
+
TAG: "DoConnectPlugin",
|
|
72
|
+
_0: s.m(Plugin$Reventless.pluginDefinitionSchema)
|
|
73
|
+
})),
|
|
74
|
+
S.schema(s => ({
|
|
75
|
+
TAG: "DoDisconnectPlugin",
|
|
76
|
+
_0: s.m(Plugin$Reventless.pluginDefinitionSchema)
|
|
77
|
+
})),
|
|
78
|
+
S.schema(s => ({
|
|
79
|
+
TAG: "ForwardCommand",
|
|
80
|
+
_0: s.m(forwardCommandSchema)
|
|
81
|
+
}))
|
|
82
|
+
]);
|
|
83
|
+
|
|
84
|
+
let moduleUrl = import.meta.url;
|
|
85
|
+
|
|
86
|
+
let name = "Core.Plugin";
|
|
87
|
+
|
|
88
|
+
let nameSchema = Plugin$Reventless.nameSchema;
|
|
89
|
+
|
|
90
|
+
let versionSchema = Plugin$Reventless.versionSchema;
|
|
91
|
+
|
|
92
|
+
let extensionPointDefinitionSchema = Plugin$Reventless.extensionPointDefinitionSchema;
|
|
93
|
+
|
|
94
|
+
let extensionDefinitionSchema = Plugin$Reventless.extensionDefinitionSchema;
|
|
95
|
+
|
|
96
|
+
let dcbEventLogDefinitionSchema = Plugin$Reventless.dcbEventLogDefinitionSchema;
|
|
97
|
+
|
|
98
|
+
let extensionProtocolSchema = Plugin$Reventless.extensionProtocolSchema;
|
|
99
|
+
|
|
100
|
+
let apiSchemaFragmentSchema = Plugin$Reventless.apiSchemaFragmentSchema;
|
|
101
|
+
|
|
102
|
+
let apiSchemaFragmentOptionSchema = Plugin$Reventless.apiSchemaFragmentOptionSchema;
|
|
103
|
+
|
|
104
|
+
let dcbEventLogOptionSchema = Plugin$Reventless.dcbEventLogOptionSchema;
|
|
105
|
+
|
|
106
|
+
let stringOptionSchema = Plugin$Reventless.stringOptionSchema;
|
|
107
|
+
|
|
108
|
+
let stringArrayOptionSchema = Plugin$Reventless.stringArrayOptionSchema;
|
|
109
|
+
|
|
110
|
+
let boolOptionSchema = Plugin$Reventless.boolOptionSchema;
|
|
111
|
+
|
|
112
|
+
let panelManifestEntrySchema = Plugin$Reventless.panelManifestEntrySchema;
|
|
113
|
+
|
|
114
|
+
let menuEntrySchema = Plugin$Reventless.menuEntrySchema;
|
|
115
|
+
|
|
116
|
+
let pageManifestEntrySchema = Plugin$Reventless.pageManifestEntrySchema;
|
|
117
|
+
|
|
118
|
+
let uiFragmentManifestSchema = Plugin$Reventless.uiFragmentManifestSchema;
|
|
119
|
+
|
|
120
|
+
let uiFragmentManifestOptionSchema = Plugin$Reventless.uiFragmentManifestOptionSchema;
|
|
121
|
+
|
|
122
|
+
let commandLevelSchema = Plugin$Reventless.commandLevelSchema;
|
|
123
|
+
|
|
124
|
+
let fieldReferenceSchema = Plugin$Reventless.fieldReferenceSchema;
|
|
125
|
+
|
|
126
|
+
let commandDefSchema = Plugin$Reventless.commandDefSchema;
|
|
127
|
+
|
|
128
|
+
let queryableDefSchema = Plugin$Reventless.queryableDefSchema;
|
|
129
|
+
|
|
130
|
+
let eventDefSchema = Plugin$Reventless.eventDefSchema;
|
|
131
|
+
|
|
132
|
+
let writableDefSchema = Plugin$Reventless.writableDefSchema;
|
|
133
|
+
|
|
134
|
+
let automationSliceDefSchema = Plugin$Reventless.automationSliceDefSchema;
|
|
135
|
+
|
|
136
|
+
let outboundTranslationSliceDefSchema = Plugin$Reventless.outboundTranslationSliceDefSchema;
|
|
137
|
+
|
|
138
|
+
let inboundTranslationSliceDefSchema = Plugin$Reventless.inboundTranslationSliceDefSchema;
|
|
139
|
+
|
|
140
|
+
let extensionDefSchema = Plugin$Reventless.extensionDefSchema;
|
|
141
|
+
|
|
142
|
+
let extensionPointDefSchema = Plugin$Reventless.extensionPointDefSchema;
|
|
143
|
+
|
|
144
|
+
let extensionPointDefArrayOptionSchema = Plugin$Reventless.extensionPointDefArrayOptionSchema;
|
|
145
|
+
|
|
146
|
+
let pluginStructureSchema = Plugin$Reventless.pluginStructureSchema;
|
|
147
|
+
|
|
148
|
+
let pluginStructureOptionSchema = Plugin$Reventless.pluginStructureOptionSchema;
|
|
149
|
+
|
|
150
|
+
let graphNodeSchema = Plugin$Reventless.graphNodeSchema;
|
|
151
|
+
|
|
152
|
+
let graphEdgeSchema = Plugin$Reventless.graphEdgeSchema;
|
|
153
|
+
|
|
154
|
+
let platformEventGraphSchema = Plugin$Reventless.platformEventGraphSchema;
|
|
155
|
+
|
|
156
|
+
let pluginDefinitionSchema = Plugin$Reventless.pluginDefinitionSchema;
|
|
157
|
+
|
|
158
|
+
let timeoutSchema = S.int;
|
|
159
|
+
|
|
160
|
+
export {
|
|
161
|
+
name,
|
|
162
|
+
nameSchema,
|
|
163
|
+
versionSchema,
|
|
164
|
+
extensionPointDefinitionSchema,
|
|
165
|
+
extensionDefinitionSchema,
|
|
166
|
+
dcbEventLogDefinitionSchema,
|
|
167
|
+
extensionProtocolSchema,
|
|
168
|
+
apiSchemaFragmentSchema,
|
|
169
|
+
apiSchemaFragmentOptionSchema,
|
|
170
|
+
dcbEventLogOptionSchema,
|
|
171
|
+
stringOptionSchema,
|
|
172
|
+
stringArrayOptionSchema,
|
|
173
|
+
boolOptionSchema,
|
|
174
|
+
panelManifestEntrySchema,
|
|
175
|
+
menuEntrySchema,
|
|
176
|
+
pageManifestEntrySchema,
|
|
177
|
+
uiFragmentManifestSchema,
|
|
178
|
+
uiFragmentManifestOptionSchema,
|
|
179
|
+
commandLevelSchema,
|
|
180
|
+
fieldReferenceSchema,
|
|
181
|
+
commandDefSchema,
|
|
182
|
+
queryableDefSchema,
|
|
183
|
+
eventDefSchema,
|
|
184
|
+
writableDefSchema,
|
|
185
|
+
automationSliceDefSchema,
|
|
186
|
+
outboundTranslationSliceDefSchema,
|
|
187
|
+
inboundTranslationSliceDefSchema,
|
|
188
|
+
extensionDefSchema,
|
|
189
|
+
extensionPointDefSchema,
|
|
190
|
+
extensionPointDefArrayOptionSchema,
|
|
191
|
+
pluginStructureSchema,
|
|
192
|
+
pluginStructureOptionSchema,
|
|
193
|
+
graphNodeSchema,
|
|
194
|
+
graphEdgeSchema,
|
|
195
|
+
platformEventGraphSchema,
|
|
196
|
+
pluginDefinitionSchema,
|
|
197
|
+
timeoutSchema,
|
|
198
|
+
forwardCommandSchema,
|
|
199
|
+
commandSchema,
|
|
200
|
+
eventSchema,
|
|
201
|
+
directiveSchema,
|
|
202
|
+
moduleUrl,
|
|
203
|
+
}
|
|
204
|
+
/* forwardCommandSchema Not a pure module */
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
Provider-agnostic interface for naming infrastructure resources.
|
|
3
|
+
|
|
4
|
+
Injected into extension points and tasks so they can derive unique,
|
|
5
|
+
valid resource names without coupling to a specific cloud provider.
|
|
6
|
+
*/
|
|
7
|
+
type operations = {
|
|
8
|
+
/** Validates and sanitizes a proposed resource name to comply with provider rules. */
|
|
9
|
+
validateName: string => string,
|
|
10
|
+
/** Derives a URN-safe name for use in Pulumi resource URNs. */
|
|
11
|
+
urnName: string => string,
|
|
12
|
+
}
|