@reventlessdev/rescript-pulumi-aws 2.4.0-alpha.46 → 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,13 @@
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
+
6
13
  # 2.4.0-alpha.46 (2026-07-06)
7
14
 
8
15
  ### Features
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reventlessdev/rescript-pulumi-aws",
3
- "version": "2.4.0-alpha.46",
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),