@reventlessdev/rescript-pulumi-aws 2.4.0-alpha.45 → 2.4.0-alpha.47

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 CHANGED
@@ -3,6 +3,21 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # 2.4.0-alpha.47 (2026-07-08)
7
+
8
+ ### Bug Fixes
9
+
10
+ * **reventless-aws:** exclude internal rows from Platform_Plugins connection scan ([df14af2](https://github.com/ReventlessDev/reventless-core/commit/df14af2cbd70d49062f2afc03418cdbf18d151d6))
11
+
12
+
13
+ # 2.4.0-alpha.46 (2026-07-06)
14
+
15
+ ### Features
16
+
17
+ * **rescript-pulumi-aws:** add subnetIds to EC2_VpcEndpoint binding ([77fb606](https://github.com/ReventlessDev/reventless-core/commit/77fb6069d76b8026c7c12db433e5f6717b037d39))
18
+ * **reventless-aws:** deploy-time Postgres schema provisioning via in-VPC migration Lambda (A3) ([44c8eee](https://github.com/ReventlessDev/reventless-core/commit/44c8eeebd351e883f2d2e21460108e2963a061ce))
19
+
20
+
6
21
  # 2.4.0-alpha.45 (2026-07-05)
7
22
 
8
23
  ### Features
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reventlessdev/rescript-pulumi-aws",
3
- "version": "2.4.0-alpha.45",
3
+ "version": "2.4.0-alpha.47",
4
4
  "description": "ReScript bindings for @pulumi/aws",
5
5
  "license": "Apache-2.0",
6
6
  "jest": {
@@ -430,7 +430,21 @@ let listAllItemsConnection = (
430
430
  ~filterFields: array<string>=[],
431
431
  ~rangeFields: array<string>=[],
432
432
  ~sortFields: array<string>=[],
433
+ // When set, emit an always-on `attribute_exists(#<attr>)` FilterExpression clause
434
+ // (ANDed with any client filters) so rows lacking that attribute never enter the
435
+ // Connection. Used for read models whose physical DynamoDB table co-hosts internal
436
+ // bookkeeping rows written outside the projection (e.g. the Plugins admin RM, whose
437
+ // table also holds `deploy-schema:*` / `plugin-info:*` rows with no `name`). Those
438
+ // rows would otherwise resolve `name`/`status`/`version` to null and violate the
439
+ // non-null GraphQL connection schema, nulling the whole connection.
440
+ ~requireAttribute: option<string>=?,
433
441
  ) => {
442
+ let requireAttributeClause = switch requireAttribute {
443
+ | Some(attr) => `
444
+ names['#${attr}'] = '${attr}';
445
+ parts.push('attribute_exists(#${attr})');`
446
+ | None => ""
447
+ }
434
448
  let filterClauses =
435
449
  filterFields
436
450
  ->Array.map(f => `
@@ -514,7 +528,7 @@ export function request(ctx) {
514
528
  return key;
515
529
  });
516
530
  parts.push('#id IN (' + placeholders.join(', ') + ')');
517
- }${filterClauses}${rangeClauses}
531
+ }${filterClauses}${rangeClauses}${requireAttributeClause}
518
532
  const req = {
519
533
  operation: 'Scan',
520
534
  limit: (ctx.args.first ?? 50),
@@ -360,10 +360,13 @@ export function request(ctx) {
360
360
  ` + resultResponseCode + `
361
361
  `;
362
362
 
363
- function listAllItemsConnection(labelField, filterFieldsOpt, rangeFieldsOpt, sortFieldsOpt) {
363
+ function listAllItemsConnection(labelField, filterFieldsOpt, rangeFieldsOpt, sortFieldsOpt, requireAttribute) {
364
364
  let filterFields = filterFieldsOpt !== undefined ? filterFieldsOpt : [];
365
365
  let rangeFields = rangeFieldsOpt !== undefined ? rangeFieldsOpt : [];
366
366
  let sortFields = sortFieldsOpt !== undefined ? sortFieldsOpt : [];
367
+ let requireAttributeClause = requireAttribute !== undefined ? `
368
+ names['#` + requireAttribute + `'] = '` + requireAttribute + `';
369
+ parts.push('attribute_exists(#` + requireAttribute + `)');` : "";
367
370
  let filterClauses = filterFields.map(f => `
368
371
  if (filter.` + f + `Eq !== undefined && filter.` + f + `Eq !== null && filter.` + f + `Eq !== '') {
369
372
  names['#` + f + `'] = '` + f + `';
@@ -427,7 +430,7 @@ export function request(ctx) {
427
430
  return key;
428
431
  });
429
432
  parts.push('#id IN (' + placeholders.join(', ') + ')');
430
- }` + filterClauses + rangeClauses + `
433
+ }` + filterClauses + rangeClauses + requireAttributeClause + `
431
434
  const req = {
432
435
  operation: 'Scan',
433
436
  limit: (ctx.args.first ?? 50),
@@ -11,6 +11,9 @@ type args = {
11
11
  /** routeTableIds are only relevant if endpointType = Gateway */
12
12
  routeTableIds?: array<Pulumi.Input.t<string>>,
13
13
  securityGroupIds?: array<Pulumi.Input.t<string>>,
14
+ /** Subnets the Interface endpoint's ENIs are placed in (one per AZ). Required
15
+ for `Interface` endpoints; ignored for `Gateway`. */
16
+ subnetIds?: array<Pulumi.Input.t<string>>,
14
17
  serviceName: Pulumi.Input.t<string>,
15
18
  tags?: Aws.tags,
16
19
  /** Default: Gateway */
@@ -33,6 +36,7 @@ let make: (~name: string, ~args: args, ~opts: Pulumi.CustomResourceOptions.t=?)
33
36
  policy: ?args.policy,
34
37
  privateDnsEnabled: ?args.privateDnsEnabled,
35
38
  securityGroupIds: ?args.securityGroupIds,
39
+ subnetIds: ?args.subnetIds,
36
40
  serviceName: args.serviceName,
37
41
  tags: args.tags->EC2_Common.supplementTagsWithName(name),
38
42
  vpcEndpointType: ?args.vpcEndpointType,
@@ -9,6 +9,7 @@ function make(name, args, opts) {
9
9
  policy: args.policy,
10
10
  privateDnsEnabled: args.privateDnsEnabled,
11
11
  securityGroupIds: args.securityGroupIds,
12
+ subnetIds: args.subnetIds,
12
13
  serviceName: args.serviceName,
13
14
  tags: EC2_Common$PulumiAws.supplementTagsWithName(args.tags, name),
14
15
  vpcEndpointType: args.vpcEndpointType,
@@ -268,6 +268,32 @@ module Permission = {
268
268
  "Permission"
269
269
  }
270
270
 
271
+ module Invocation = {
272
+ /** `aws.lambda.Invocation` — invokes the function **during `pulumi up`** (a
273
+ data-plane action, not a control-plane resource) and re-invokes whenever
274
+ `input` or `triggers` change. Used for one-shot deploy-time work such as
275
+ running a schema migration from inside the target VPC, so the deploy runner
276
+ itself needs no network path to the private resource. */
277
+ type args = {
278
+ functionName: Pulumi.Input.t<string>,
279
+ /** JSON string passed as the Lambda event payload. */
280
+ input: Pulumi.Input.t<string>,
281
+ /** Optional map whose changes force a re-invocation independently of `input`. */
282
+ triggers?: Pulumi.Input.t<dict<string>>,
283
+ qualifier?: Pulumi.Input.t<string>,
284
+ }
285
+
286
+ type t = {
287
+ id: Pulumi.Output.t<string>,
288
+ /** The function's JSON response, as a string. */
289
+ result: Pulumi.Output.t<string>,
290
+ }
291
+
292
+ @module("@pulumi/aws") @scope("lambda") @new
293
+ external make: (~name: string, ~args: args, ~opts: Pulumi.CustomResourceOptions.t=?) => t =
294
+ "Invocation"
295
+ }
296
+
271
297
  let defaultLoggingPolicyDocument = PolicyDocument.make(
272
298
  ~statements=[
273
299
  {
@@ -72,6 +72,8 @@ let $$Function = {};
72
72
 
73
73
  let Permission = {};
74
74
 
75
+ let Invocation = {};
76
+
75
77
  let defaultLoggingPolicyDocument = PolicyDocument$PulumiAws.make(undefined, undefined, [{
76
78
  Sid: "DefaultLambdaLoggingPolicy",
77
79
  Effect: "Allow",
@@ -89,6 +91,7 @@ export {
89
91
  CallbackFunction,
90
92
  $$Function,
91
93
  Permission,
94
+ Invocation,
92
95
  defaultLoggingPolicyDocument,
93
96
  }
94
97
  /* arn Not a pure module */