@reventlessdev/reventless-aws 3.0.0-alpha.219 → 3.0.0-alpha.220

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
+ # 3.0.0-alpha.220 (2026-07-21)
7
+
8
+ ### Bug Fixes
9
+
10
+ * **aws:** declare output-only props on the retrying SourceApiAssociation ([5e1cdcc](https://github.com/ReventlessDev/reventless-core/commit/5e1cdcc8612d717649afa520285f854060d1e276))
11
+
12
+
6
13
  # 3.0.0-alpha.219 (2026-07-21)
7
14
 
8
15
  ### Features
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reventlessdev/reventless-aws",
3
- "version": "3.0.0-alpha.219",
3
+ "version": "3.0.0-alpha.220",
4
4
  "description": "AWS adapters for Reventless",
5
5
  "license": "Apache-2.0",
6
6
  "dependencies": {
@@ -11,14 +11,14 @@
11
11
  "@reventlessdev/rescript-aws-sdk": "2.2.0-alpha.24",
12
12
  "@reventlessdev/rescript-effect": "0.1.0-alpha.29",
13
13
  "@reventlessdev/rescript-jest": "1.0.0-alpha.9",
14
- "@reventlessdev/rescript-pulumi-pulumi": "2.3.0-alpha.17",
15
14
  "@reventlessdev/rescript-pulumi-aws": "2.4.0-alpha.56",
15
+ "@reventlessdev/rescript-pulumi-pulumi": "2.3.0-alpha.17",
16
16
  "@reventlessdev/rescript-uuid": "1.1.0-alpha.17",
17
17
  "@reventlessdev/reventless-core": "3.0.0-alpha.174",
18
- "@reventlessdev/reventless-infra": "3.0.0-alpha.102",
19
18
  "@reventlessdev/reventless-interop": "3.0.0-alpha.28",
19
+ "@reventlessdev/reventless-spec": "3.0.0-alpha.79",
20
20
  "@reventlessdev/reventless-postgres": "3.0.0-alpha.38",
21
- "@reventlessdev/reventless-spec": "3.0.0-alpha.79"
21
+ "@reventlessdev/reventless-infra": "3.0.0-alpha.102"
22
22
  },
23
23
  "devDependencies": {
24
24
  "rescript": "12.3.0",
@@ -410,6 +410,31 @@ type constructorProps = {
410
410
  mergeType: Pulumi.Input.t<string>,
411
411
  }
412
412
 
413
+ /** What is actually handed to `pulumi.dynamic.Resource`. The base constructor
414
+ defines a resource property for every KEY of `props` (it walks
415
+ `Object.keys`), so an output-only field that is not declared here never
416
+ materialises on the resource — `association.associationId` reads a plain
417
+ `undefined` instead of an Output, and `mergeStatusGateWith` then calls
418
+ GetSourceApiAssociation with no id ("No value provided for input HTTP
419
+ label: associationId"). Declaring them `undefined` is Pulumi's documented
420
+ way to register output-only properties; undefined values are dropped from
421
+ the inputs RPC, so `create` still receives only the three real inputs. */
422
+ type resourceProps = {
423
+ mergedApiIdentifier: Pulumi.Input.t<string>,
424
+ sourceApiIdentifier: Pulumi.Input.t<string>,
425
+ mergeType: Pulumi.Input.t<string>,
426
+ arn: Nullable.t<string>,
427
+ associationId: Nullable.t<string>,
428
+ }
429
+
430
+ let resourcePropsOf = (props: constructorProps): resourceProps => {
431
+ mergedApiIdentifier: props.mergedApiIdentifier,
432
+ sourceApiIdentifier: props.sourceApiIdentifier,
433
+ mergeType: props.mergeType,
434
+ arn: Nullable.undefined,
435
+ associationId: Nullable.undefined,
436
+ }
437
+
413
438
  // pulumi.dynamic.Resource constructor: (provider, name, props, opts). Explicit
414
439
  // /index.js path because @pulumi/pulumi/dynamic is a directory import not
415
440
  // resolvable in ESM mode.
@@ -432,5 +457,5 @@ let make = (
432
457
  | Some(o) => {...o, aliases: [migrationAlias]}
433
458
  | None => {aliases: [migrationAlias]}
434
459
  }
435
- _newResource(provider, name, props, finalOpts)
460
+ _newResource(provider, name, props->resourcePropsOf, finalOpts)
436
461
  }
@@ -295,6 +295,16 @@ let provider = {
295
295
  read: read_
296
296
  };
297
297
 
298
+ function resourcePropsOf(props) {
299
+ return {
300
+ mergedApiIdentifier: props.mergedApiIdentifier,
301
+ sourceApiIdentifier: props.sourceApiIdentifier,
302
+ mergeType: props.mergeType,
303
+ arn: undefined,
304
+ associationId: undefined
305
+ };
306
+ }
307
+
298
308
  function make(name, props, opts) {
299
309
  let migrationAlias = Alias$Pulumi.make(name, "aws:appsync/sourceApiAssociation:SourceApiAssociation", undefined);
300
310
  let finalOpts;
@@ -307,7 +317,7 @@ function make(name, props, opts) {
307
317
  aliases: [migrationAlias]
308
318
  };
309
319
  }
310
- return new IndexJs.Resource(provider, name, props, finalOpts);
320
+ return new IndexJs.Resource(provider, name, resourcePropsOf(props), finalOpts);
311
321
  }
312
322
 
313
323
  export {
@@ -335,6 +345,7 @@ export {
335
345
  diff_,
336
346
  read_,
337
347
  provider,
348
+ resourcePropsOf,
338
349
  make,
339
350
  }
340
351
  /* log Not a pure module */
@@ -110,3 +110,29 @@ describe("AppSync_SourceApiAssociation_Retrying.idsFromComposite", () => {
110
110
  expect(Assoc.idsFromComposite("just-one-value")->Option.isNone)->toBe(true)
111
111
  })
112
112
  })
113
+
114
+ // pulumi.dynamic.Resource defines a resource property per KEY of the props
115
+ // object, so the output-only fields must be present (with an undefined value)
116
+ // or `association.associationId` is a bare `undefined` and the merge gate
117
+ // calls GetSourceApiAssociation without an id.
118
+ describe("AppSync_SourceApiAssociation_Retrying.resourcePropsOf", () => {
119
+ let keysOf: Assoc.resourceProps => array<string> = p => Object.keysToArray(Obj.magic(p))
120
+ let props = Assoc.resourcePropsOf({
121
+ mergedApiIdentifier: Obj.magic("merged-arn"),
122
+ sourceApiIdentifier: Obj.magic("src123"),
123
+ mergeType: Obj.magic("AUTO_MERGE"),
124
+ })
125
+
126
+ testSync("declares arn + associationId as output-only keys", () => {
127
+ expect(props->keysOf->Array.includes("arn"))->toBe(true)
128
+ expect(props->keysOf->Array.includes("associationId"))->toBe(true)
129
+ expect(props.arn->Nullable.toOption->Option.isNone)->toBe(true)
130
+ expect(props.associationId->Nullable.toOption->Option.isNone)->toBe(true)
131
+ })
132
+
133
+ testSync("passes the three real inputs through", () => {
134
+ expect((props.mergedApiIdentifier->Obj.magic: string))->toBe("merged-arn")
135
+ expect((props.sourceApiIdentifier->Obj.magic: string))->toBe("src123")
136
+ expect((props.mergeType->Obj.magic: string))->toBe("AUTO_MERGE")
137
+ })
138
+ })
@@ -2,6 +2,7 @@
2
2
 
3
3
  import * as JestGlobals from "@reventlessdev/rescript-jest/src/JestGlobals.res.mjs";
4
4
  import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
5
+ import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.js";
5
6
  import * as AppSync_SourceApiAssociation_Retrying$ReventlessAws from "../src/adapter/Api/AppSync_SourceApiAssociation_Retrying.res.mjs";
6
7
 
7
8
  function mkErr(name, message) {
@@ -124,6 +125,25 @@ globalThis.describe("AppSync_SourceApiAssociation_Retrying.idsFromComposite", ()
124
125
  });
125
126
  });
126
127
 
128
+ globalThis.describe("AppSync_SourceApiAssociation_Retrying.resourcePropsOf", () => {
129
+ let props = AppSync_SourceApiAssociation_Retrying$ReventlessAws.resourcePropsOf({
130
+ mergedApiIdentifier: "merged-arn",
131
+ sourceApiIdentifier: "src123",
132
+ mergeType: "AUTO_MERGE"
133
+ });
134
+ globalThis.test("declares arn + associationId as output-only keys", () => {
135
+ globalThis.expect(Object.keys(props).includes("arn")).toBe(true);
136
+ globalThis.expect(Object.keys(props).includes("associationId")).toBe(true);
137
+ globalThis.expect(Stdlib_Option.isNone(Primitive_option.fromNullable(props.arn))).toBe(true);
138
+ globalThis.expect(Stdlib_Option.isNone(Primitive_option.fromNullable(props.associationId))).toBe(true);
139
+ });
140
+ globalThis.test("passes the three real inputs through", () => {
141
+ globalThis.expect(props.mergedApiIdentifier).toBe("merged-arn");
142
+ globalThis.expect(props.sourceApiIdentifier).toBe("src123");
143
+ globalThis.expect(props.mergeType).toBe("AUTO_MERGE");
144
+ });
145
+ });
146
+
127
147
  let Assoc;
128
148
 
129
149
  export {